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 .)
|
||||
|
||||
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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user