@@ -61,8 +61,7 @@ static uint8_t hex_ascii_to_nibble(char digit) {
61
61
62
62
/* Build an ASCII request header */
63
63
static int _modbus_ascii_build_request_basis (modbus_t * ctx , int function ,
64
- int addr , int nb ,
65
- uint8_t * req )
64
+ int addr , int nb , uint8_t * req )
66
65
{
67
66
assert (ctx -> slave != -1 );
68
67
@@ -74,16 +73,17 @@ static int _modbus_ascii_build_request_basis(modbus_t *ctx, int function,
74
73
req [5 ] = nb >> 8 ;
75
74
req [6 ] = nb & 0x00ff ;
76
75
77
- return _MODBUS_ASCII_PRESET_REQ_LENGTH ;
76
+ return 7 ;
78
77
}
79
78
80
79
/* Build an ASCII response header */
81
80
static int _modbus_ascii_build_response_basis (sft_t * sft , uint8_t * rsp )
82
81
{
83
- rsp [0 ] = sft -> slave ;
84
- rsp [1 ] = sft -> function ;
82
+ rsp [0 ] = ':' ;
83
+ rsp [1 ] = sft -> slave ;
84
+ rsp [2 ] = sft -> function ;
85
85
86
- return _MODBUS_ASCII_PRESET_RSP_LENGTH ;
86
+ return 3 ;
87
87
}
88
88
89
89
/* calculate the Longitudinal Redundancy Checking (LRC)
@@ -223,11 +223,14 @@ static ssize_t _modbus_ascii_recv(modbus_t *ctx, uint8_t *rsp, int rsp_length)
223
223
224
224
static ssize_t _modbus_ascii_send (modbus_t * ctx , const uint8_t * req , int req_length )
225
225
{
226
- uint8_t ascii_req [ 3 + ( MODBUS_ASCII_MAX_ADU_LENGTH * 2 )];
227
-
226
+ /* FIXME Ugly copy! */
227
+ uint8_t ascii_req [ MODBUS_ASCII_MAX_ADU_LENGTH ];
228
228
ssize_t i , j = 0 ;
229
+
229
230
for (i = 0 ; i < req_length ; i ++ ) {
230
- if (req [i ] == ':' || req [i ] == '\r' || req [i ] == '\n' ) {
231
+ if ((i == 0 && req [i ] == ':' ) ||
232
+ (i == req_length - 2 && req [i ] == '\r' ) ||
233
+ (i == req_length - 1 && req [i ] == '\n' )) {
231
234
ascii_req [j ++ ] = req [i ];
232
235
} else {
233
236
ascii_req [j ++ ] = nibble_to_hex_ascii (req [i ] >> 4 );
@@ -237,7 +240,8 @@ static ssize_t _modbus_ascii_send(modbus_t *ctx, const uint8_t *req, int req_len
237
240
ascii_req [j ] = '\0' ;
238
241
239
242
ssize_t size = _modbus_serial_send (ctx , ascii_req , j );
240
- return ((size - 3 ) / 2 ) + 3 ;
243
+ /* FIXME */
244
+ return ((size - 3 ) / 2 ) + 3 ;
241
245
}
242
246
243
247
static void _modbus_ascii_free (modbus_t * ctx ) {
0 commit comments