From 0d6a5274f3b7f2ed0764a848212a793950e4d59c Mon Sep 17 00:00:00 2001 From: Valerio De Benedetto Date: Thu, 25 May 2023 12:16:17 +0200 Subject: [PATCH] Various fixes --- CMakeLists.txt | 5 +++-- nanomodbus.c | 4 ++-- tests/multi_server_rtu.c | 21 ++++++++++++++++----- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a463503..9194035 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3") include_directories(tests examples/linux .) add_executable(nanomodbus_tests nanomodbus.c tests/nanomodbus_tests.c) +target_link_libraries(nanomodbus_tests pthread) add_executable(server_disabled nanomodbus.c tests/server_disabled.c) target_compile_definitions(server_disabled PUBLIC NMBS_SERVER_DISABLED) @@ -19,7 +20,7 @@ target_compile_definitions(client_disabled PUBLIC NMBS_CLIENT_DISABLED) add_executable(multi_server_rtu nanomodbus.c tests/multi_server_rtu.c) target_compile_definitions(multi_server_rtu PUBLIC NMBS_DEBUG) +add_custom_target(tests DEPENDS nanomodbus_tests server_disabled client_disabled multi_server_rtu) + add_executable(client-tcp nanomodbus.c examples/linux/client-tcp.c) add_executable(server-tcp nanomodbus.c examples/linux/server-tcp.c) - -target_link_libraries(nanomodbus_tests pthread) diff --git a/nanomodbus.c b/nanomodbus.c index cddfaf9..2e94003 100644 --- a/nanomodbus.c +++ b/nanomodbus.c @@ -352,7 +352,6 @@ static nmbs_error send_exception_msg(nmbs_t* nmbs, uint8_t exception) { #endif -#ifndef NMBS_CLIENT_DISABLED static nmbs_error recv_res_header(nmbs_t* nmbs) { uint16_t req_transaction_id = nmbs->msg.transaction_id; uint8_t req_unit_id = nmbs->msg.unit_id; @@ -399,6 +398,7 @@ static nmbs_error recv_res_header(nmbs_t* nmbs) { } +#ifndef NMBS_CLIENT_DISABLED static void put_req_header(nmbs_t* nmbs, uint16_t data_length) { put_msg_header(nmbs, data_length); #ifdef NMBS_DEBUG @@ -484,7 +484,7 @@ static nmbs_error recv_read_registers_res(nmbs_t* nmbs, uint16_t quantity, uint1 } -nmbs_error recv_write_single_coil_res(nmbs_t* nmbs, uint16_t address, bool value_req) { +nmbs_error recv_write_single_coil_res(nmbs_t* nmbs, uint16_t address, uint16_t value_req) { nmbs_error err = recv_res_header(nmbs); if (err != NMBS_ERROR_NONE) return err; diff --git a/tests/multi_server_rtu.c b/tests/multi_server_rtu.c index 3347726..0687bfd 100644 --- a/tests/multi_server_rtu.c +++ b/tests/multi_server_rtu.c @@ -6,7 +6,7 @@ #include "nanomodbus.h" #define WIRE_SIZE 1024 -#define ITERATIONS 10 +#define UNUSED_PARAM(x) ((x) = (x)) uint32_t run = 1; @@ -25,7 +25,7 @@ int32_t read_wire(uint8_t* buf, uint16_t count, int32_t timeout_ms, void* arg) { while (1) { pthread_mutex_lock(&mutex); - uint32_t index = (uint32_t) arg; + uint64_t index = (uint64_t) arg; uint32_t read = 0; for (int i = 0; i < count; i++) { if (indices_r[index] == index_w) @@ -39,7 +39,7 @@ int32_t read_wire(uint8_t* buf, uint16_t count, int32_t timeout_ms, void* arg) { pthread_mutex_unlock(&mutex); if (read != 0) - return read; + return (int32_t) read; if (timeout_ms != 0) usleep(timeout_ms * 1000); @@ -51,9 +51,10 @@ int32_t read_wire(uint8_t* buf, uint16_t count, int32_t timeout_ms, void* arg) { } int32_t write_wire(const uint8_t* buf, uint16_t count, int32_t timeout_ms, void* arg) { + UNUSED_PARAM(timeout_ms); pthread_mutex_lock(&mutex); - uint32_t index = (uint32_t) arg; + uint64_t index = (uint64_t) arg; uint32_t written = 0; for (int i = 0; i < count; i++) { index_w = (index_w + 1) % WIRE_SIZE; @@ -64,10 +65,11 @@ int32_t write_wire(const uint8_t* buf, uint16_t count, int32_t timeout_ms, void* pthread_mutex_unlock(&mutex); - return written; + return (int32_t) written; } nmbs_error read_coils(uint16_t address, uint16_t quantity, nmbs_bitfield coils_out, void* arg) { + UNUSED_PARAM(arg); for (int i = 0; i < quantity; i++) nmbs_bitfield_write(coils_out, address + i, 1); @@ -75,18 +77,27 @@ nmbs_error read_coils(uint16_t address, uint16_t quantity, nmbs_bitfield coils_o } void* poll_server1(void* arg) { + UNUSED_PARAM(arg); while (run) { nmbs_server_poll(&server1); } + + return NULL; } void* poll_server2(void* arg) { + UNUSED_PARAM(arg); while (run) { nmbs_server_poll(&server2); } + + return NULL; } int main(int argc, char* argv[]) { + UNUSED_PARAM(argc); + UNUSED_PARAM(argv); + nmbs_platform_conf c_conf; c_conf.arg = wire; c_conf.transport = NMBS_TRANSPORT_RTU;