Various fixes

This commit is contained in:
Valerio De Benedetto 2023-05-25 12:16:17 +02:00
parent f8f8fd00b1
commit 0d6a5274f3
3 changed files with 21 additions and 9 deletions

View File

@ -9,6 +9,7 @@ set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
include_directories(tests examples/linux .) include_directories(tests examples/linux .)
add_executable(nanomodbus_tests nanomodbus.c tests/nanomodbus_tests.c) 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) add_executable(server_disabled nanomodbus.c tests/server_disabled.c)
target_compile_definitions(server_disabled PUBLIC NMBS_SERVER_DISABLED) 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) add_executable(multi_server_rtu nanomodbus.c tests/multi_server_rtu.c)
target_compile_definitions(multi_server_rtu PUBLIC NMBS_DEBUG) 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(client-tcp nanomodbus.c examples/linux/client-tcp.c)
add_executable(server-tcp nanomodbus.c examples/linux/server-tcp.c) add_executable(server-tcp nanomodbus.c examples/linux/server-tcp.c)
target_link_libraries(nanomodbus_tests pthread)

View File

@ -352,7 +352,6 @@ static nmbs_error send_exception_msg(nmbs_t* nmbs, uint8_t exception) {
#endif #endif
#ifndef NMBS_CLIENT_DISABLED
static nmbs_error recv_res_header(nmbs_t* nmbs) { static nmbs_error recv_res_header(nmbs_t* nmbs) {
uint16_t req_transaction_id = nmbs->msg.transaction_id; uint16_t req_transaction_id = nmbs->msg.transaction_id;
uint8_t req_unit_id = nmbs->msg.unit_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) { static void put_req_header(nmbs_t* nmbs, uint16_t data_length) {
put_msg_header(nmbs, data_length); put_msg_header(nmbs, data_length);
#ifdef NMBS_DEBUG #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); nmbs_error err = recv_res_header(nmbs);
if (err != NMBS_ERROR_NONE) if (err != NMBS_ERROR_NONE)
return err; return err;

View File

@ -6,7 +6,7 @@
#include "nanomodbus.h" #include "nanomodbus.h"
#define WIRE_SIZE 1024 #define WIRE_SIZE 1024
#define ITERATIONS 10 #define UNUSED_PARAM(x) ((x) = (x))
uint32_t run = 1; 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) { while (1) {
pthread_mutex_lock(&mutex); pthread_mutex_lock(&mutex);
uint32_t index = (uint32_t) arg; uint64_t index = (uint64_t) arg;
uint32_t read = 0; uint32_t read = 0;
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
if (indices_r[index] == index_w) 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); pthread_mutex_unlock(&mutex);
if (read != 0) if (read != 0)
return read; return (int32_t) read;
if (timeout_ms != 0) if (timeout_ms != 0)
usleep(timeout_ms * 1000); 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) { 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); pthread_mutex_lock(&mutex);
uint32_t index = (uint32_t) arg; uint64_t index = (uint64_t) arg;
uint32_t written = 0; uint32_t written = 0;
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
index_w = (index_w + 1) % WIRE_SIZE; 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); 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) { 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++) for (int i = 0; i < quantity; i++)
nmbs_bitfield_write(coils_out, address + i, 1); 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) { void* poll_server1(void* arg) {
UNUSED_PARAM(arg);
while (run) { while (run) {
nmbs_server_poll(&server1); nmbs_server_poll(&server1);
} }
return NULL;
} }
void* poll_server2(void* arg) { void* poll_server2(void* arg) {
UNUSED_PARAM(arg);
while (run) { while (run) {
nmbs_server_poll(&server2); nmbs_server_poll(&server2);
} }
return NULL;
} }
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
UNUSED_PARAM(argc);
UNUSED_PARAM(argv);
nmbs_platform_conf c_conf; nmbs_platform_conf c_conf;
c_conf.arg = wire; c_conf.arg = wire;
c_conf.transport = NMBS_TRANSPORT_RTU; c_conf.transport = NMBS_TRANSPORT_RTU;