@@ -122,20 +122,55 @@ public async void HandleAsync_WithNonProtobufMessage_DoesNotCallHandlers()
122122 Assert . False ( streamHandlerCalled ) ;
123123 }
124124
125+ [ Fact ]
126+ public async Task HandleAsync_WithFloatStreamMessage_CallsStreamHandler ( )
127+ {
128+ // Arrange - USB firmware sends pre-scaled float values (AnalogInDataFloat)
129+ var streamHandlerCalled = false ;
130+ DaqifiOutMessage receivedMessage = null ;
131+
132+ var handler = new ProtobufProtocolHandler (
133+ streamMessageHandler : msg =>
134+ {
135+ streamHandlerCalled = true ;
136+ receivedMessage = msg ;
137+ } ) ;
138+
139+ var streamMessage = new DaqifiOutMessage
140+ {
141+ MsgTimeStamp = 99999
142+ } ;
143+ streamMessage . AnalogInDataFloat . Add ( 1.234f ) ;
144+ streamMessage . AnalogInDataFloat . Add ( 2.345f ) ;
145+
146+ var inboundMessage = new GenericInboundMessage < object > ( streamMessage ) ;
147+
148+ // Act
149+ await handler . HandleAsync ( inboundMessage ) ;
150+
151+ // Assert
152+ Assert . True ( streamHandlerCalled , "Stream handler should be called for AnalogInDataFloat messages" ) ;
153+ Assert . NotNull ( receivedMessage ) ;
154+ Assert . Equal ( 99999u , receivedMessage . MsgTimeStamp ) ;
155+ Assert . Equal ( 2 , receivedMessage . AnalogInDataFloat . Count ) ;
156+ }
157+
125158 [ Theory ]
126- [ InlineData ( 8u , 0u , 0u , 0u , 0 , 0 , ProtobufMessageType . Status ) ]
127- [ InlineData ( 0u , 16u , 0u , 0u , 0 , 0 , ProtobufMessageType . Status ) ]
128- [ InlineData ( 0u , 0u , 2u , 0u , 0 , 0 , ProtobufMessageType . Status ) ]
129- [ InlineData ( 0u , 0u , 0u , 12345u , 1 , 0 , ProtobufMessageType . Stream ) ]
130- [ InlineData ( 0u , 0u , 0u , 12345u , 0 , 1 , ProtobufMessageType . Stream ) ]
131- [ InlineData ( 0u , 0u , 0u , 0u , 0 , 0 , ProtobufMessageType . Unknown ) ]
159+ [ InlineData ( 8u , 0u , 0u , 0u , 0 , 0 , false , ProtobufMessageType . Status ) ]
160+ [ InlineData ( 0u , 16u , 0u , 0u , 0 , 0 , false , ProtobufMessageType . Status ) ]
161+ [ InlineData ( 0u , 0u , 2u , 0u , 0 , 0 , false , ProtobufMessageType . Status ) ]
162+ [ InlineData ( 0u , 0u , 0u , 12345u , 1 , 0 , false , ProtobufMessageType . Stream ) ] // int data
163+ [ InlineData ( 0u , 0u , 0u , 12345u , 0 , 1 , false , ProtobufMessageType . Stream ) ] // digital data
164+ [ InlineData ( 0u , 0u , 0u , 12345u , 0 , 0 , true , ProtobufMessageType . Stream ) ] // float data (USB firmware)
165+ [ InlineData ( 0u , 0u , 0u , 0u , 0 , 0 , false , ProtobufMessageType . Unknown ) ]
132166 public void DetectMessageType_ReturnsCorrectType (
133167 uint analogInPortNum ,
134168 uint digitalPortNum ,
135169 uint analogOutPortNum ,
136170 uint msgTimeStamp ,
137171 int analogDataCount ,
138172 int digitalDataLength ,
173+ bool hasFloatData ,
139174 ProtobufMessageType expectedType )
140175 {
141176 // Arrange
@@ -157,6 +192,11 @@ public void DetectMessageType_ReturnsCorrectType(
157192 message . DigitalData = Google . Protobuf . ByteString . CopyFrom ( new byte [ digitalDataLength ] ) ;
158193 }
159194
195+ if ( hasFloatData )
196+ {
197+ message . AnalogInDataFloat . Add ( 1.5f ) ;
198+ }
199+
160200 // Act
161201 var result = ProtobufProtocolHandler . DetectMessageType ( message ) ;
162202
0 commit comments