Various fixes
This commit is contained in:
parent
f8f8fd00b1
commit
0d6a5274f3
@ -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)
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user