78#define nmbs_error_is_exception(e) ((e) > 0 && (e) < 5)
94#define nmbs_bitfield_read(bf, b) ((bool) ((bf)[(b) / 8] & (0x1 << ((b) % 8))))
99#define nmbs_bitfield_set(bf, b) (((bf)[(b) / 8]) = (((bf)[(b) / 8]) | (0x1 << ((b) % 8))))
104#define nmbs_bitfield_unset(bf, b) (((bf)[(b) / 8]) = (((bf)[(b) / 8]) & ~(0x1 << ((b) % 8))))
109#define nmbs_bitfield_write(bf, b, v) \
110 (((bf)[(b) / 8]) = ((v) ? (((bf)[(b) / 8]) | (0x1 << ((b) % 8))) : (((bf)[(b) / 8]) & ~(0x1 << ((b) % 8)))))
115#define nmbs_bitfield_reset(bf) memset(bf, 0, sizeof(bf))
121 NMBS_TRANSPORT_RTU = 1,
122 NMBS_TRANSPORT_TCP = 2,
149 int32_t (*
read)(uint8_t* buf, uint16_t count, int32_t byte_timeout_ms,
151 int32_t (*
write)(
const uint8_t* buf, uint16_t count, int32_t byte_timeout_ms,
153 uint16_t (*
crc_calc)(
const uint8_t* data, uint32_t length,
169#ifndef NMBS_SERVER_DISABLED
170#ifndef NMBS_SERVER_READ_COILS_DISABLED
171 nmbs_error (*read_coils)(uint16_t address, uint16_t quantity,
nmbs_bitfield coils_out, uint8_t unit_id,
void* arg);
174#ifndef NMBS_SERVER_READ_DISCRETE_INPUTS_DISABLED
175 nmbs_error (*read_discrete_inputs)(uint16_t address, uint16_t quantity,
nmbs_bitfield inputs_out, uint8_t unit_id,
179#ifndef NMBS_SERVER_READ_HOLDING_REGISTERS_DISABLED
180 nmbs_error (*read_holding_registers)(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id,
184#ifndef NMBS_SERVER_READ_INPUT_REGISTERS_DISABLED
185 nmbs_error (*read_input_registers)(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id,
189#ifndef NMBS_SERVER_WRITE_SINGLE_COIL_DISABLED
190 nmbs_error (*write_single_coil)(uint16_t address,
bool value, uint8_t unit_id,
void* arg);
193#ifndef NMBS_SERVER_WRITE_SINGLE_REGISTER_DISABLED
194 nmbs_error (*write_single_register)(uint16_t address, uint16_t value, uint8_t unit_id,
void* arg);
197#ifndef NMBS_SERVER_WRITE_MULTIPLE_COILS_DISABLED
198 nmbs_error (*write_multiple_coils)(uint16_t address, uint16_t quantity,
const nmbs_bitfield coils, uint8_t unit_id,
202#ifndef NMBS_SERVER_WRITE_MULTIPLE_REGISTERS_DISABLED
203 nmbs_error (*write_multiple_registers)(uint16_t address, uint16_t quantity,
const uint16_t* registers,
204 uint8_t unit_id,
void* arg);
207#ifndef NMBS_SERVER_READ_FILE_RECORD_DISABLED
208 nmbs_error (*read_file_record)(uint16_t file_number, uint16_t record_number, uint16_t* registers, uint16_t count,
209 uint8_t unit_id,
void* arg);
212#ifndef NMBS_SERVER_WRITE_FILE_RECORD_DISABLED
213 nmbs_error (*write_file_record)(uint16_t file_number, uint16_t record_number,
const uint16_t* registers,
214 uint16_t count, uint8_t unit_id,
void* arg);
217#ifndef NMBS_SERVER_READ_DEVICE_IDENTIFICATION_DISABLED
218#define NMBS_DEVICE_IDENTIFICATION_STRING_LENGTH 128
219 nmbs_error (*read_device_identification)(uint8_t object_id,
char buffer[NMBS_DEVICE_IDENTIFICATION_STRING_LENGTH]);
225 uint32_t initialized;
240 uint16_t transaction_id;
247 int32_t byte_timeout_ms;
248 int32_t read_timeout_ms;
253 uint8_t dest_address_rtu;
254 uint16_t current_tid;
260static const uint8_t NMBS_BROADCAST_ADDRESS = 0;
288#ifndef NMBS_SERVER_DISABLED
321#ifndef NMBS_CLIENT_DISABLED
450 uint16_t* registers_out, uint16_t write_address, uint16_t write_quantity,
451 const uint16_t* registers);
463 char* major_minor_revision, uint8_t buffers_length);
476 char* user_application_name, uint8_t buffers_length);
491 uint8_t ids_length, uint8_t buffer_length,
492 uint8_t* objects_count_out);
529uint16_t
nmbs_crc_calc(
const uint8_t* data, uint32_t length,
void* arg);
531#ifndef NMBS_STRERROR_DISABLED
nmbs_error nmbs_read_input_registers(nmbs_t *nmbs, uint16_t address, uint16_t quantity, uint16_t *registers_out)
Definition: nanomodbus.c:1986
nmbs_error
Definition: nanomodbus.h:54
@ NMBS_ERROR_INVALID_UNIT_ID
Definition: nanomodbus.h:57
@ NMBS_ERROR_NONE
Definition: nanomodbus.h:64
@ NMBS_ERROR_INVALID_ARGUMENT
Definition: nanomodbus.h:63
@ NMBS_EXCEPTION_ILLEGAL_DATA_ADDRESS
Definition: nanomodbus.h:68
@ NMBS_ERROR_TRANSPORT
Definition: nanomodbus.h:60
@ NMBS_ERROR_INVALID_TCP_MBAP
Definition: nanomodbus.h:58
@ NMBS_ERROR_INVALID_REQUEST
Definition: nanomodbus.h:56
@ NMBS_ERROR_INVALID_RESPONSE
Definition: nanomodbus.h:62
@ NMBS_EXCEPTION_ILLEGAL_DATA_VALUE
Definition: nanomodbus.h:69
@ NMBS_ERROR_TIMEOUT
Definition: nanomodbus.h:61
@ NMBS_EXCEPTION_ILLEGAL_FUNCTION
Definition: nanomodbus.h:67
@ NMBS_EXCEPTION_SERVER_DEVICE_FAILURE
Definition: nanomodbus.h:70
@ NMBS_ERROR_CRC
Definition: nanomodbus.h:59
uint8_t nmbs_bitfield[250]
Definition: nanomodbus.h:84
nmbs_error nmbs_write_multiple_registers(nmbs_t *nmbs, uint16_t address, uint16_t quantity, const uint16_t *registers)
Definition: nanomodbus.c:2067
nmbs_error nmbs_write_single_register(nmbs_t *nmbs, uint16_t address, uint16_t value)
Definition: nanomodbus.c:2013
nmbs_error nmbs_send_raw_pdu(nmbs_t *nmbs, uint8_t fc, const uint8_t *data, uint16_t data_len)
Definition: nanomodbus.c:2340
struct nmbs_callbacks nmbs_callbacks
void nmbs_callbacks_create(nmbs_callbacks *callbacks)
Definition: nanomodbus.c:1853
nmbs_error nmbs_client_create(nmbs_t *nmbs, const nmbs_platform_conf *platform_conf)
Definition: nanomodbus.c:1921
nmbs_error nmbs_read_device_identification_regular(nmbs_t *nmbs, char *vendor_url, char *product_name, char *model_name, char *user_application_name, uint8_t buffers_length)
Definition: nanomodbus.c:2249
void nmbs_set_byte_timeout(nmbs_t *nmbs, int32_t timeout_ms)
Definition: nanomodbus.c:203
nmbs_error nmbs_read_holding_registers(nmbs_t *nmbs, uint16_t address, uint16_t quantity, uint16_t *registers_out)
Definition: nanomodbus.c:1981
void nmbs_set_destination_rtu_address(nmbs_t *nmbs, uint8_t address)
Definition: nanomodbus.c:216
nmbs_error nmbs_receive_raw_pdu_response(nmbs_t *nmbs, uint8_t *data_out, uint8_t data_out_len)
Definition: nanomodbus.c:2354
nmbs_error nmbs_server_poll(nmbs_t *nmbs)
Definition: nanomodbus.c:1878
const char * nmbs_strerror(nmbs_error error)
Definition: nanomodbus.c:2382
nmbs_error nmbs_read_device_identification_basic(nmbs_t *nmbs, char *vendor_name, char *product_code, char *major_minor_revision, uint8_t buffers_length)
Definition: nanomodbus.c:2213
void nmbs_platform_conf_create(nmbs_platform_conf *platform_conf)
Definition: nanomodbus.c:208
nmbs_error nmbs_write_file_record(nmbs_t *nmbs, uint16_t file_number, uint16_t record_number, const uint16_t *registers, uint16_t count)
Definition: nanomodbus.c:2131
nmbs_error nmbs_write_multiple_coils(nmbs_t *nmbs, uint16_t address, uint16_t quantity, const nmbs_bitfield coils)
Definition: nanomodbus.c:2033
void nmbs_set_callbacks_arg(nmbs_t *nmbs, void *arg)
Definition: nanomodbus.c:1914
nmbs_error nmbs_read_device_identification_extended(nmbs_t *nmbs, uint8_t object_id_start, uint8_t *ids, char **buffers, uint8_t ids_length, uint8_t buffer_length, uint8_t *objects_count_out)
Definition: nanomodbus.c:2285
nmbs_error nmbs_server_create(nmbs_t *nmbs, uint8_t address_rtu, const nmbs_platform_conf *platform_conf, const nmbs_callbacks *callbacks)
Definition: nanomodbus.c:1859
nmbs_error nmbs_read_coils(nmbs_t *nmbs, uint16_t address, uint16_t quantity, nmbs_bitfield coils_out)
Definition: nanomodbus.c:1949
nmbs_error nmbs_read_file_record(nmbs_t *nmbs, uint16_t file_number, uint16_t record_number, uint16_t *registers, uint16_t count)
Definition: nanomodbus.c:2101
void nmbs_set_read_timeout(nmbs_t *nmbs, int32_t timeout_ms)
Definition: nanomodbus.c:198
void nmbs_set_platform_arg(nmbs_t *nmbs, void *arg)
Definition: nanomodbus.c:221
nmbs_error nmbs_read_write_registers(nmbs_t *nmbs, uint16_t read_address, uint16_t read_quantity, uint16_t *registers_out, uint16_t write_address, uint16_t write_quantity, const uint16_t *registers)
Definition: nanomodbus.c:2166
uint16_t nmbs_crc_calc(const uint8_t *data, uint32_t length, void *arg)
Definition: nanomodbus.c:226
nmbs_transport
Definition: nanomodbus.h:120
struct nmbs_platform_conf nmbs_platform_conf
uint8_t nmbs_bitfield_256[32]
Definition: nanomodbus.h:89
nmbs_error nmbs_write_single_coil(nmbs_t *nmbs, uint16_t address, bool value)
Definition: nanomodbus.c:1991
nmbs_error nmbs_read_discrete_inputs(nmbs_t *nmbs, uint16_t address, uint16_t quantity, nmbs_bitfield inputs_out)
Definition: nanomodbus.c:1954
nmbs_error nmbs_read_device_identification(nmbs_t *nmbs, uint8_t object_id, char *buffer, uint8_t buffer_length)
Definition: nanomodbus.c:2321
Definition: nanomodbus.h:168
Definition: nanomodbus.h:233