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 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 1302 int modbus_connect(modbus_t *ctx)
1298 1303 {
1299 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 139 void modbus_get_timeout_end(modbus_t *ctx, struct timeval *timeout);
140 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 144 int modbus_connect(modbus_t *ctx);
143 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 40 int rc;
41 41 int i;
42 42 int use_backend;
  43 + uint8_t *query;
  44 + int header_length;
43 45  
44 46 if (argc > 1) {
45 47 if (strcmp(argv[1], "tcp") == 0) {
... ... @@ -57,10 +59,13 @@ int main(int argc, char*argv[])
57 59  
58 60 if (use_backend == TCP) {
59 61 ctx = modbus_new_tcp("127.0.0.1", 1502);
  62 + query = malloc(MODBUS_TCP_MAX_ADU_LENGTH);
60 63 } else {
61 64 ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1);
62 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 70 modbus_set_debug(ctx, TRUE);
66 71 modbus_set_error_recovery(ctx, TRUE);
... ... @@ -104,17 +109,15 @@ int main(int argc, char*argv[])
104 109 }
105 110  
106 111 for (;;) {
107   - uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
108   -
109 112 rc = modbus_receive(ctx, -1, query);
110 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 116 == UT_REGISTERS_NB_POINTS_SPECIAL) {
114 117 /* Change the number of values (offset
115 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 123 rc = modbus_reply(ctx, query, rc, mb_mapping);
... ... @@ -133,6 +136,7 @@ int main(int argc, char*argv[])
133 136 close(socket);
134 137 }
135 138 modbus_mapping_free(mb_mapping);
  139 + free(query);
136 140 modbus_free(ctx);
137 141  
138 142 return 0;
... ...