@@ -100,18 +100,36 @@ int modbus_stack_recv(modbus_stack_t *stack, uint8_t slave_id,
100
100
return -1 ;
101
101
}
102
102
103
- if (stack -> protocol == MODBUS_PROTOCOL_TCP && data .n_byte == 0xff ) {
104
- bytes = neu_protocol_unpack_buf (buf ,
105
- header .len -
106
- sizeof (struct modbus_code ) -
107
- sizeof (struct modbus_data ));
108
- stack -> value_fn (stack -> ctx , code .slave_id ,
109
- header .len - sizeof (struct modbus_code ) -
110
- sizeof (struct modbus_data ),
111
- bytes , 0 );
112
- } else {
103
+ switch (stack -> protocol ) {
104
+ case MODBUS_PROTOCOL_TCP :
105
+ if (data .n_byte == 0xff ) {
106
+ bytes = neu_protocol_unpack_buf (buf ,
107
+ header .len -
108
+ sizeof (struct modbus_code ) -
109
+ sizeof (struct modbus_data ));
110
+ if (bytes == NULL ) {
111
+ return -1 ;
112
+ }
113
+ stack -> value_fn (stack -> ctx , code .slave_id ,
114
+ header .len - sizeof (struct modbus_code ) -
115
+ sizeof (struct modbus_data ),
116
+ bytes , 0 );
117
+ } else {
118
+ bytes = neu_protocol_unpack_buf (buf , data .n_byte );
119
+ if (bytes == NULL ) {
120
+ return -1 ;
121
+ }
122
+ stack -> value_fn (stack -> ctx , code .slave_id , data .n_byte , bytes ,
123
+ 0 );
124
+ }
125
+ break ;
126
+ case MODBUS_PROTOCOL_RTU :
113
127
bytes = neu_protocol_unpack_buf (buf , data .n_byte );
128
+ if (bytes == NULL ) {
129
+ return -1 ;
130
+ }
114
131
stack -> value_fn (stack -> ctx , code .slave_id , data .n_byte , bytes , 0 );
132
+ break ;
115
133
}
116
134
117
135
break ;
0 commit comments