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))
147 int32_t (*
read)(uint8_t* buf, uint16_t count, int32_t byte_timeout_ms,
149 int32_t (*
write)(
const uint8_t* buf, uint16_t count, int32_t byte_timeout_ms,
164#ifndef NMBS_SERVER_DISABLED
165#ifndef NMBS_SERVER_READ_COILS_DISABLED
169#ifndef NMBS_SERVER_READ_DISCRETE_INPUTS_DISABLED
174#ifndef NMBS_SERVER_READ_HOLDING_REGISTERS_DISABLED
179#ifndef NMBS_SERVER_READ_INPUT_REGISTERS_DISABLED
184#ifndef NMBS_SERVER_WRITE_SINGLE_COIL_DISABLED
188#ifndef NMBS_SERVER_WRITE_SINGLE_REGISTER_DISABLED
192#ifndef NMBS_SERVER_WRITE_MULTIPLE_COILS_DISABLED
197#ifndef NMBS_SERVER_WRITE_MULTIPLE_REGISTERS_DISABLED
199 uint8_t unit_id,
void*
arg);
202#ifndef NMBS_SERVER_READ_FILE_RECORD_DISABLED
204 uint8_t unit_id,
void*
arg);
207#ifndef NMBS_SERVER_WRITE_FILE_RECORD_DISABLED
209 uint16_t count, uint8_t unit_id,
void*
arg);
212#ifndef NMBS_SERVER_READ_DEVICE_IDENTIFICATION_DISABLED
213#define NMBS_DEVICE_IDENTIFICATION_STRING_LENGTH 128
254static const uint8_t NMBS_BROADCAST_ADDRESS = 0;
277#ifndef NMBS_SERVER_DISABLED
305#ifndef NMBS_CLIENT_DISABLED
434 uint16_t* registers_out, uint16_t write_address, uint16_t write_quantity,
435 const uint16_t* registers);
447 char* major_minor_revision, uint8_t buffers_length);
460 char* user_application_name, uint8_t buffers_length);
475 uint8_t ids_length, uint8_t buffer_length,
476 uint8_t* objects_count_out);
515#ifndef NMBS_STRERROR_DISABLED
nmbs_error nmbs_read_input_registers(nmbs_t *nmbs, uint16_t address, uint16_t quantity, uint16_t *registers_out)
@ NMBS_ERROR_INVALID_UNIT_ID
@ NMBS_ERROR_INVALID_ARGUMENT
@ NMBS_EXCEPTION_ILLEGAL_DATA_ADDRESS
@ NMBS_ERROR_INVALID_TCP_MBAP
@ NMBS_ERROR_INVALID_REQUEST
@ NMBS_ERROR_INVALID_RESPONSE
@ NMBS_EXCEPTION_ILLEGAL_DATA_VALUE
@ NMBS_EXCEPTION_ILLEGAL_FUNCTION
@ NMBS_EXCEPTION_SERVER_DEVICE_FAILURE
uint8_t nmbs_bitfield[250]
nmbs_error nmbs_write_multiple_registers(nmbs_t *nmbs, uint16_t address, uint16_t quantity, const uint16_t *registers)
nmbs_error nmbs_write_single_register(nmbs_t *nmbs, uint16_t address, uint16_t value)
nmbs_error nmbs_send_raw_pdu(nmbs_t *nmbs, uint8_t fc, const uint8_t *data, uint16_t data_len)
nmbs_error nmbs_client_create(nmbs_t *nmbs, const nmbs_platform_conf *platform_conf)
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)
void nmbs_set_byte_timeout(nmbs_t *nmbs, int32_t timeout_ms)
nmbs_error nmbs_read_holding_registers(nmbs_t *nmbs, uint16_t address, uint16_t quantity, uint16_t *registers_out)
void nmbs_set_destination_rtu_address(nmbs_t *nmbs, uint8_t address)
nmbs_error nmbs_receive_raw_pdu_response(nmbs_t *nmbs, uint8_t *data_out, uint8_t data_out_len)
nmbs_error nmbs_server_poll(nmbs_t *nmbs)
const char * nmbs_strerror(nmbs_error error)
#define NMBS_DEVICE_IDENTIFICATION_STRING_LENGTH
nmbs_error nmbs_read_device_identification_basic(nmbs_t *nmbs, char *vendor_name, char *product_code, char *major_minor_revision, uint8_t buffers_length)
nmbs_error nmbs_write_file_record(nmbs_t *nmbs, uint16_t file_number, uint16_t record_number, const uint16_t *registers, uint16_t count)
nmbs_error nmbs_write_single_coil(nmbs_t *nmbs, uint16_t address, uint16_t value)
nmbs_error nmbs_write_multiple_coils(nmbs_t *nmbs, uint16_t address, uint16_t quantity, const nmbs_bitfield coils)
void nmbs_set_callbacks_arg(nmbs_t *nmbs, void *arg)
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)
nmbs_error nmbs_server_create(nmbs_t *nmbs, uint8_t address_rtu, const nmbs_platform_conf *platform_conf, const nmbs_callbacks *callbacks)
nmbs_error nmbs_read_coils(nmbs_t *nmbs, uint16_t address, uint16_t quantity, nmbs_bitfield coils_out)
nmbs_error nmbs_read_file_record(nmbs_t *nmbs, uint16_t file_number, uint16_t record_number, uint16_t *registers, uint16_t count)
void nmbs_set_read_timeout(nmbs_t *nmbs, int32_t timeout_ms)
void nmbs_set_platform_arg(nmbs_t *nmbs, void *arg)
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)
uint8_t nmbs_bitfield_256[32]
uint16_t nmbs_crc_calc(const uint8_t *data, uint32_t length)
nmbs_error nmbs_read_discrete_inputs(nmbs_t *nmbs, uint16_t address, uint16_t quantity, nmbs_bitfield inputs_out)
nmbs_error nmbs_read_device_identification(nmbs_t *nmbs, uint8_t object_id, char *buffer, uint8_t buffer_length)
nmbs_error(* write_single_coil)(uint16_t address, bool value, uint8_t unit_id, void *arg)
nmbs_error(* write_multiple_registers)(uint16_t address, uint16_t quantity, const uint16_t *registers, uint8_t unit_id, void *arg)
nmbs_error(* write_file_record)(uint16_t file_number, uint16_t record_number, const uint16_t *registers, uint16_t count, uint8_t unit_id, void *arg)
nmbs_error(* read_input_registers)(uint16_t address, uint16_t quantity, uint16_t *registers_out, uint8_t unit_id, void *arg)
nmbs_error(* read_file_record)(uint16_t file_number, uint16_t record_number, uint16_t *registers, uint16_t count, uint8_t unit_id, void *arg)
nmbs_error(* read_coils)(uint16_t address, uint16_t quantity, nmbs_bitfield coils_out, uint8_t unit_id, void *arg)
nmbs_error(* read_discrete_inputs)(uint16_t address, uint16_t quantity, nmbs_bitfield inputs_out, uint8_t unit_id, void *arg)
nmbs_error(* write_single_register)(uint16_t address, uint16_t value, uint8_t unit_id, void *arg)
nmbs_error(* read_holding_registers)(uint16_t address, uint16_t quantity, uint16_t *registers_out, uint8_t unit_id, void *arg)
nmbs_error(* read_device_identification_map)(nmbs_bitfield_256 map)
nmbs_error(* read_device_identification)(uint8_t object_id, char buffer[NMBS_DEVICE_IDENTIFICATION_STRING_LENGTH])
nmbs_error(* write_multiple_coils)(uint16_t address, uint16_t quantity, const nmbs_bitfield coils, uint8_t unit_id, void *arg)
nmbs_platform_conf platform