Commit 932769d8513a61943c411f47b80ec003b3f62f87

Authored by Stéphane Raimbault
1 parent 87293e45

New function modbus_get_header_length(modbus_t *ctx)

- new public function
- change unit-test-server.c to be transport layer independant (query
  and header_length)
src/modbus.c
@@ -1294,6 +1294,11 @@ void modbus_set_timeout_end(modbus_t *ctx, const struct timeval *timeout) @@ -1294,6 +1294,11 @@ void modbus_set_timeout_end(modbus_t *ctx, const struct timeval *timeout)
1294 ctx->timeout_end = *timeout; 1294 ctx->timeout_end = *timeout;
1295 } 1295 }
1296 1296
  1297 +int modbus_get_header_length(modbus_t *ctx)
  1298 +{
  1299 + return ctx->backend->header_length;
  1300 +}
  1301 +
1297 int modbus_connect(modbus_t *ctx) 1302 int modbus_connect(modbus_t *ctx)
1298 { 1303 {
1299 return ctx->backend->connect(ctx); 1304 return ctx->backend->connect(ctx);
src/modbus.h
@@ -139,6 +139,8 @@ void modbus_set_timeout_begin(modbus_t *ctx, const struct timeval *timeout); @@ -139,6 +139,8 @@ void modbus_set_timeout_begin(modbus_t *ctx, const struct timeval *timeout);
139 void modbus_get_timeout_end(modbus_t *ctx, struct timeval *timeout); 139 void modbus_get_timeout_end(modbus_t *ctx, struct timeval *timeout);
140 void modbus_set_timeout_end(modbus_t *ctx, const struct timeval *timeout); 140 void modbus_set_timeout_end(modbus_t *ctx, const struct timeval *timeout);
141 141
  142 +int modbus_get_header_length(modbus_t *ctx);
  143 +
142 int modbus_connect(modbus_t *ctx); 144 int modbus_connect(modbus_t *ctx);
143 void modbus_close(modbus_t *ctx); 145 void modbus_close(modbus_t *ctx);
144 146
tests/unit-test-server.c
@@ -40,6 +40,8 @@ int main(int argc, char*argv[]) @@ -40,6 +40,8 @@ int main(int argc, char*argv[])
40 int rc; 40 int rc;
41 int i; 41 int i;
42 int use_backend; 42 int use_backend;
  43 + uint8_t *query;
  44 + int header_length;
43 45
44 if (argc > 1) { 46 if (argc > 1) {
45 if (strcmp(argv[1], "tcp") == 0) { 47 if (strcmp(argv[1], "tcp") == 0) {
@@ -57,10 +59,13 @@ int main(int argc, char*argv[]) @@ -57,10 +59,13 @@ int main(int argc, char*argv[])
57 59
58 if (use_backend == TCP) { 60 if (use_backend == TCP) {
59 ctx = modbus_new_tcp("127.0.0.1", 1502); 61 ctx = modbus_new_tcp("127.0.0.1", 1502);
  62 + query = malloc(MODBUS_TCP_MAX_ADU_LENGTH);
60 } else { 63 } else {
61 ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1); 64 ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1);
62 modbus_set_slave(ctx, SERVER_ID); 65 modbus_set_slave(ctx, SERVER_ID);
  66 + query = malloc(MODBUS_RTU_MAX_ADU_LENGTH);
63 } 67 }
  68 + header_length = modbus_get_header_length(ctx);
64 69
65 modbus_set_debug(ctx, TRUE); 70 modbus_set_debug(ctx, TRUE);
66 modbus_set_error_recovery(ctx, TRUE); 71 modbus_set_error_recovery(ctx, TRUE);
@@ -104,17 +109,15 @@ int main(int argc, char*argv[]) @@ -104,17 +109,15 @@ int main(int argc, char*argv[])
104 } 109 }
105 110
106 for (;;) { 111 for (;;) {
107 - uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];  
108 -  
109 rc = modbus_receive(ctx, -1, query); 112 rc = modbus_receive(ctx, -1, query);
110 if (rc > 0) { 113 if (rc > 0) {
111 - if (((query[HEADER_LENGTH_TCP + 3] << 8) +  
112 - query[HEADER_LENGTH_TCP + 4]) 114 + if (((query[header_length + 3] << 8) +
  115 + query[header_length + 4])
113 == UT_REGISTERS_NB_POINTS_SPECIAL) { 116 == UT_REGISTERS_NB_POINTS_SPECIAL) {
114 /* Change the number of values (offset 117 /* Change the number of values (offset
115 TCP = 6) */ 118 TCP = 6) */
116 - query[HEADER_LENGTH_TCP + 3] = 0;  
117 - query[HEADER_LENGTH_TCP + 4] = UT_REGISTERS_NB_POINTS; 119 + query[header_length + 3] = 0;
  120 + query[header_length + 4] = UT_REGISTERS_NB_POINTS;
118 } 121 }
119 122
120 rc = modbus_reply(ctx, query, rc, mb_mapping); 123 rc = modbus_reply(ctx, query, rc, mb_mapping);
@@ -133,6 +136,7 @@ int main(int argc, char*argv[]) @@ -133,6 +136,7 @@ int main(int argc, char*argv[])
133 close(socket); 136 close(socket);
134 } 137 }
135 modbus_mapping_free(mb_mapping); 138 modbus_mapping_free(mb_mapping);
  139 + free(query);
136 modbus_free(ctx); 140 modbus_free(ctx);
137 141
138 return 0; 142 return 0;