Commit 932769d8513a61943c411f47b80ec003b3f62f87
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)
Showing
3 changed files
with
17 additions
and
6 deletions
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; |