From de225a19e240530674f4fc3ff28b258dc43321b7 Mon Sep 17 00:00:00 2001 From: Stéphane Raimbault Date: Wed, 9 Apr 2008 18:37:53 +0200 Subject: [PATCH] - Fix the server side of force_single_coil - Add some tests for force_single_coil --- modbus/modbus.c | 5 +++-- tests/unit-test-master.c | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/modbus/modbus.c b/modbus/modbus.c index 09b2c67..c54de77 100644 --- a/modbus/modbus.c +++ b/modbus/modbus.c @@ -823,9 +823,10 @@ void manage_query(modbus_param_t *mb_param, uint8_t *query, if (data == 0xFF00 || data == 0x0) { mb_mapping->tab_coil_status[address] = (data) ? ON : OFF; - memcpy(response, query, query_size); + /* In RTU mode, the CRC is computed + and added to the query by modbus_send */ + memcpy(response, query, query_size - mb_param->checksum_size); response_size = query_size; - printf("FIXME works only in TCP mode (CRC)"); } else { printf("Illegal data value %0X in force_single_coil request at address %0X\n", data, address); diff --git a/tests/unit-test-master.c b/tests/unit-test-master.c index 827470b..a18abf1 100644 --- a/tests/unit-test-master.c +++ b/tests/unit-test-master.c @@ -156,7 +156,17 @@ int main(void) } printf("OK\n"); - + /** WRITE FUNCTIONS **/ + printf("\nTest write functions:\n"); + + ret = force_single_coil(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, ON); + printf("* force single coil: "); + if (ret == 1) { + printf("OK\n"); + } else { + printf("FAILED\n"); + } + /** ILLEGAL DATA ADDRESS */ printf("\nTest illegal data address:"); @@ -195,6 +205,15 @@ int main(void) else printf("FAILED"); + ret = force_single_coil(&mb_param, SLAVE, + UT_COIL_STATUS_ADDRESS + UT_COIL_STATUS_NB_POINTS, ON); + printf("* force single coil: "); + if (ret == ILLEGAL_DATA_ADDRESS) { + printf("OK\n"); + } else { + printf("FAILED\n"); + } + close: /* Free the memory */ free(tab_rp_status); -- libgit2 0.21.4