Commit 057be70d689590ea89f4b21032a8233a7440452b

Authored by Tobias Doerffel
Committed by Stéphane Raimbault
1 parent 01ba9771

Pass complete modbus_t structure to send()/recv() of the backends

The send() and recv() functions of the backends might require more
information than just a file descriptor, therefore pass the complete
modbus_t structure.

Signed-off-by: Stéphane Raimbault <stephane.raimbault@gmail.com>
src/modbus-private.h
@@ -76,8 +76,8 @@ typedef struct _modbus_backend { @@ -76,8 +76,8 @@ typedef struct _modbus_backend {
76 int (*build_response_basis) (sft_t *sft, uint8_t *rsp); 76 int (*build_response_basis) (sft_t *sft, uint8_t *rsp);
77 int (*prepare_response_tid) (const uint8_t *req, int *req_length); 77 int (*prepare_response_tid) (const uint8_t *req, int *req_length);
78 int (*send_msg_pre) (uint8_t *req, int req_length); 78 int (*send_msg_pre) (uint8_t *req, int req_length);
79 - ssize_t (*send) (int s, const uint8_t *req, int req_length);  
80 - ssize_t (*recv) (int s, uint8_t *rsp, int rsp_length); 79 + ssize_t (*send) (modbus_t *ctx, const uint8_t *req, int req_length);
  80 + ssize_t (*recv) (modbus_t *ctx, uint8_t *rsp, int rsp_length);
81 int (*check_integrity) (modbus_t *ctx, uint8_t *msg, 81 int (*check_integrity) (modbus_t *ctx, uint8_t *msg,
82 const int msg_length); 82 const int msg_length);
83 int (*connect) (modbus_t *ctx); 83 int (*connect) (modbus_t *ctx);
src/modbus-rtu.c
@@ -156,14 +156,14 @@ int _modbus_rtu_send_msg_pre(uint8_t *req, int req_length) @@ -156,14 +156,14 @@ int _modbus_rtu_send_msg_pre(uint8_t *req, int req_length)
156 return req_length; 156 return req_length;
157 } 157 }
158 158
159 -ssize_t _modbus_rtu_send(int s, const uint8_t *req, int req_length) 159 +ssize_t _modbus_rtu_send(modbus_t *ctx, const uint8_t *req, int req_length)
160 { 160 {
161 - return write(s, req, req_length); 161 + return write(ctx->s, req, req_length);
162 } 162 }
163 163
164 -ssize_t _modbus_rtu_recv(int s, uint8_t *rsp, int rsp_length) 164 +ssize_t _modbus_rtu_recv(modbus_t *ctx, uint8_t *rsp, int rsp_length)
165 { 165 {
166 - return read(s, rsp, rsp_length); 166 + return read(ctx->s, rsp, rsp_length);
167 } 167 }
168 168
169 /* The check_crc16 function shall return the message length if the CRC is 169 /* The check_crc16 function shall return the message length if the CRC is
src/modbus-tcp.c
@@ -130,17 +130,17 @@ int _modbus_tcp_send_msg_pre(uint8_t *req, int req_length) @@ -130,17 +130,17 @@ int _modbus_tcp_send_msg_pre(uint8_t *req, int req_length)
130 return req_length; 130 return req_length;
131 } 131 }
132 132
133 -ssize_t _modbus_tcp_send(int s, const uint8_t *req, int req_length) 133 +ssize_t _modbus_tcp_send(modbus_t *ctx, const uint8_t *req, int req_length)
134 { 134 {
135 /* MSG_NOSIGNAL 135 /* MSG_NOSIGNAL
136 Requests not to send SIGPIPE on errors on stream oriented 136 Requests not to send SIGPIPE on errors on stream oriented
137 sockets when the other end breaks the connection. The EPIPE 137 sockets when the other end breaks the connection. The EPIPE
138 error is still returned. */ 138 error is still returned. */
139 - return send(s, req, req_length, MSG_NOSIGNAL); 139 + return send(ctx->s, req, req_length, MSG_NOSIGNAL);
140 } 140 }
141 141
142 -ssize_t _modbus_tcp_recv(int s, uint8_t *rsp, int rsp_length) {  
143 - return recv(s, rsp, rsp_length, 0); 142 +ssize_t _modbus_tcp_recv(modbus_t *ctx, uint8_t *rsp, int rsp_length) {
  143 + return recv(ctx->s, rsp, rsp_length, 0);
144 } 144 }
145 145
146 int _modbus_tcp_check_integrity(modbus_t *ctx, uint8_t *msg, const int msg_length) 146 int _modbus_tcp_check_integrity(modbus_t *ctx, uint8_t *msg, const int msg_length)
src/modbus.c
@@ -156,7 +156,7 @@ static int send_msg(modbus_t *ctx, uint8_t *req, int req_length) @@ -156,7 +156,7 @@ static int send_msg(modbus_t *ctx, uint8_t *req, int req_length)
156 /* In recovery mode, the write command will be issued until to be 156 /* In recovery mode, the write command will be issued until to be
157 successful! Disabled by default. */ 157 successful! Disabled by default. */
158 do { 158 do {
159 - rc = ctx->backend->send(ctx->s, req, req_length); 159 + rc = ctx->backend->send(ctx, req, req_length);
160 if (rc == -1) { 160 if (rc == -1) {
161 _error_print(ctx, NULL); 161 _error_print(ctx, NULL);
162 if (ctx->error_recovery && 162 if (ctx->error_recovery &&
@@ -346,7 +346,7 @@ static int receive_msg(modbus_t *ctx, int msg_length_computed, @@ -346,7 +346,7 @@ static int receive_msg(modbus_t *ctx, int msg_length_computed,
346 346
347 p_msg = msg; 347 p_msg = msg;
348 while (s_rc) { 348 while (s_rc) {
349 - read_rc = ctx->backend->recv(ctx->s, p_msg, length_to_read); 349 + read_rc = ctx->backend->recv(ctx, p_msg, length_to_read);
350 if (read_rc == 0) { 350 if (read_rc == 0) {
351 errno = ECONNRESET; 351 errno = ECONNRESET;
352 read_rc = -1; 352 read_rc = -1;