Parameters
nmbs | pointer to the nmbs_t instance |
- data_out | response data. It's up to the caller to convert this data to host byte order. |
- data_out_len | length of the data_out parameter |
+ data_out | response data. It's up to the caller to convert this data to host byte order. Can be NULL. |
+ data_out_len | number of bytes to receive |
diff --git a/nanomodbus_8h_source.html b/nanomodbus_8h_source.html
index 91b2732..bf27299 100644
--- a/nanomodbus_8h_source.html
+++ b/nanomodbus_8h_source.html
@@ -105,240 +105,271 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 77 #define nmbs_error_is_exception(e) ((e) > 0 && (e) < 5)
-
-
-
-
- 88 #define nmbs_bitfield_read(bf, b) ((bool) ((bf)[(b) / 8] & (0x1 << ((b) % 8))))
-
- 93 #define nmbs_bitfield_write(bf, b, v) \
- 94 (((bf)[(b) / 8]) = ((v) ? (((bf)[(b) / 8]) | (0x1 << ((b) % 8))) : (((bf)[(b) / 8]) & ~(0x1 << ((b) % 8)))))
-
- 99 #define nmbs_bitfield_reset(bf) memset(bf, 0, sizeof(nmbs_bitfield))
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 79 #define nmbs_error_is_exception(e) ((e) > 0 && (e) < 5)
+
+
+
+
+
+
+ 95 #define nmbs_bitfield_read(bf, b) ((bool) ((bf)[(b) / 8] & (0x1 << ((b) % 8))))
+
+ 100 #define nmbs_bitfield_set(bf, b) (((bf)[(b) / 8]) = (((bf)[(b) / 8]) | (0x1 << ((b) % 8))))
-
- 106 NMBS_TRANSPORT_RTU = 1,
- 107 NMBS_TRANSPORT_TCP = 2,
-
-
-
-
-
- 132 int32_t (*
read)(uint8_t* buf, uint16_t count, int32_t byte_timeout_ms,
-
- 134 int32_t (*
write)(
const uint8_t* buf, uint16_t count, int32_t byte_timeout_ms,
-
-
-
-
-
-
- 149 #ifndef NMBS_SERVER_DISABLED
- 150 #ifndef NMBS_SERVER_READ_COILS_DISABLED
- 151 nmbs_error (*read_coils)(uint16_t address, uint16_t quantity,
nmbs_bitfield coils_out, uint8_t unit_id,
void* arg);
-
-
- 154 #ifndef NMBS_SERVER_READ_DISCRETE_INPUTS_DISABLED
- 155 nmbs_error (*read_discrete_inputs)(uint16_t address, uint16_t quantity,
nmbs_bitfield inputs_out, uint8_t unit_id,
-
-
-
- 159 #ifndef NMBS_SERVER_READ_HOLDING_REGISTERS_DISABLED
- 160 nmbs_error (*read_holding_registers)(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id,
-
-
-
- 164 #ifndef NMBS_SERVER_READ_INPUT_REGISTERS_DISABLED
- 165 nmbs_error (*read_input_registers)(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id,
-
-
-
- 169 #ifndef NMBS_SERVER_WRITE_SINGLE_COIL_DISABLED
- 170 nmbs_error (*write_single_coil)(uint16_t address,
bool value, uint8_t unit_id,
void* arg);
-
-
- 173 #ifndef NMBS_SERVER_WRITE_SINGLE_REGISTER_DISABLED
- 174 nmbs_error (*write_single_register)(uint16_t address, uint16_t value, uint8_t unit_id,
void* arg);
-
-
- 177 #ifndef NMBS_SERVER_WRITE_MULTIPLE_COILS_DISABLED
- 178 nmbs_error (*write_multiple_coils)(uint16_t address, uint16_t quantity,
const nmbs_bitfield coils, uint8_t unit_id,
-
-
-
- 182 #ifndef NMBS_SERVER_WRITE_MULTIPLE_REGISTERS_DISABLED
- 183 nmbs_error (*write_multiple_registers)(uint16_t address, uint16_t quantity,
const uint16_t* registers,
- 184 uint8_t unit_id,
void* arg);
-
-
- 187 #ifndef NMBS_SERVER_READ_FILE_RECORD_DISABLED
- 188 nmbs_error (*read_file_record)(uint16_t file_number, uint16_t record_number, uint16_t* registers, uint16_t count,
- 189 uint8_t unit_id,
void* arg);
-
-
- 192 #ifndef NMBS_SERVER_WRITE_FILE_RECORD_DISABLED
- 193 nmbs_error (*write_file_record)(uint16_t file_number, uint16_t record_number,
const uint16_t* registers,
- 194 uint16_t count, uint8_t unit_id,
void* arg);
-
+ 105 #define nmbs_bitfield_unset(bf, b) (((bf)[(b) / 8]) = (((bf)[(b) / 8]) & ~(0x1 << ((b) % 8))))
+
+ 110 #define nmbs_bitfield_write(bf, b, v) \
+ 111 (((bf)[(b) / 8]) = ((v) ? (((bf)[(b) / 8]) | (0x1 << ((b) % 8))) : (((bf)[(b) / 8]) & ~(0x1 << ((b) % 8)))))
+
+ 116 #define nmbs_bitfield_reset(bf) memset(bf, 0, sizeof(bf))
+
+
+ 122 NMBS_TRANSPORT_RTU = 1,
+ 123 NMBS_TRANSPORT_TCP = 2,
+
+
+
+
+
+ 148 int32_t (*
read)(uint8_t* buf, uint16_t count, int32_t byte_timeout_ms,
+
+ 150 int32_t (*
write)(
const uint8_t* buf, uint16_t count, int32_t byte_timeout_ms,
+
+
+
+
+
+
+ 165 #ifndef NMBS_SERVER_DISABLED
+ 166 #ifndef NMBS_SERVER_READ_COILS_DISABLED
+ 167 nmbs_error (*read_coils)(uint16_t address, uint16_t quantity,
nmbs_bitfield coils_out, uint8_t unit_id,
void* arg);
+
+
+ 170 #ifndef NMBS_SERVER_READ_DISCRETE_INPUTS_DISABLED
+ 171 nmbs_error (*read_discrete_inputs)(uint16_t address, uint16_t quantity,
nmbs_bitfield inputs_out, uint8_t unit_id,
+
+
+
+ 175 #ifndef NMBS_SERVER_READ_HOLDING_REGISTERS_DISABLED
+ 176 nmbs_error (*read_holding_registers)(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id,
+
+
+
+ 180 #ifndef NMBS_SERVER_READ_INPUT_REGISTERS_DISABLED
+ 181 nmbs_error (*read_input_registers)(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id,
+
+
+
+ 185 #ifndef NMBS_SERVER_WRITE_SINGLE_COIL_DISABLED
+ 186 nmbs_error (*write_single_coil)(uint16_t address,
bool value, uint8_t unit_id,
void* arg);
+
+
+ 189 #ifndef NMBS_SERVER_WRITE_SINGLE_REGISTER_DISABLED
+ 190 nmbs_error (*write_single_register)(uint16_t address, uint16_t value, uint8_t unit_id,
void* arg);
+
+
+ 193 #ifndef NMBS_SERVER_WRITE_MULTIPLE_COILS_DISABLED
+ 194 nmbs_error (*write_multiple_coils)(uint16_t address, uint16_t quantity,
const nmbs_bitfield coils, uint8_t unit_id,
+
-
-
-
-
-
-
-
-
-
-
-
- 212 uint16_t transaction_id;
-
-
-
-
-
-
- 219 int32_t byte_timeout_ms;
- 220 int32_t read_timeout_ms;
-
-
+ 198 #ifndef NMBS_SERVER_WRITE_MULTIPLE_REGISTERS_DISABLED
+ 199 nmbs_error (*write_multiple_registers)(uint16_t address, uint16_t quantity,
const uint16_t* registers,
+ 200 uint8_t unit_id,
void* arg);
+
+
+ 203 #ifndef NMBS_SERVER_READ_FILE_RECORD_DISABLED
+ 204 nmbs_error (*read_file_record)(uint16_t file_number, uint16_t record_number, uint16_t* registers, uint16_t count,
+ 205 uint8_t unit_id,
void* arg);
+
+
+ 208 #ifndef NMBS_SERVER_WRITE_FILE_RECORD_DISABLED
+ 209 nmbs_error (*write_file_record)(uint16_t file_number, uint16_t record_number,
const uint16_t* registers,
+ 210 uint16_t count, uint8_t unit_id,
void* arg);
+
+
+ 213 #ifndef NMBS_SERVER_READ_DEVICE_IDENTIFICATION_DISABLED
+ 214 #define NMBS_DEVICE_IDENTIFICATION_STRING_LENGTH 128
+ 215 nmbs_error (*read_device_identification)(uint8_t object_id,
char buffer[NMBS_DEVICE_IDENTIFICATION_STRING_LENGTH]);
+
+
+
+
+
+
+
-
- 225 uint8_t dest_address_rtu;
- 226 uint16_t current_tid;
-
-
- 232 static const uint8_t NMBS_BROADCAST_ADDRESS = 0;
-
-
-
-
-
-
-
- 255 #ifndef NMBS_SERVER_DISABLED
-
-
-
-
-
-
-
-
- 283 #ifndef NMBS_CLIENT_DISABLED
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 412 uint16_t* registers_out, uint16_t write_address, uint16_t write_quantity,
- 413 const uint16_t* registers);
-
-
-
-
-
-
- 440 uint16_t
nmbs_crc_calc(
const uint8_t* data, uint32_t length);
-
- 442 #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:1652
+
+
+
+
+
+
+
+ 235 uint16_t transaction_id;
+
+
+
+
+
+
+ 242 int32_t byte_timeout_ms;
+ 243 int32_t read_timeout_ms;
+
+
+
+
+ 248 uint8_t dest_address_rtu;
+ 249 uint16_t current_tid;
+
+
+ 255 static const uint8_t NMBS_BROADCAST_ADDRESS = 0;
+
+
+
+
+
+
+
+ 278 #ifndef NMBS_SERVER_DISABLED
+
+
+
+
+
+
+
+
+ 306 #ifndef NMBS_CLIENT_DISABLED
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 435 uint16_t* registers_out, uint16_t write_address, uint16_t write_quantity,
+ 436 const uint16_t* registers);
+
+
+ 448 char* major_minor_revision, uint8_t buffer_length);
+
+
+ 461 char* user_application_name, uint8_t buffer_length);
+
+
+ 476 uint8_t ids_length, uint8_t buffer_length,
+ 477 uint8_t* objects_count_out);
+
+
+
+
+
+
+
+
+ 514 uint16_t
nmbs_crc_calc(
const uint8_t* data, uint32_t length);
+
+ 516 #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:1955
nmbs_error
Definition: nanomodbus.h:55
-@ 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_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:83
-nmbs_error nmbs_receive_raw_pdu_response(nmbs_t *nmbs, uint8_t *data_out, uint16_t data_out_len)
Definition: nanomodbus.c:1893
-nmbs_error nmbs_write_multiple_registers(nmbs_t *nmbs, uint16_t address, uint16_t quantity, const uint16_t *registers)
Definition: nanomodbus.c:1733
-nmbs_error nmbs_write_single_register(nmbs_t *nmbs, uint16_t address, uint16_t value)
Definition: nanomodbus.c:1679
-nmbs_error nmbs_send_raw_pdu(nmbs_t *nmbs, uint8_t fc, const uint8_t *data, uint16_t data_len)
Definition: nanomodbus.c:1879
+@ NMBS_ERROR_INVALID_UNIT_ID
Definition: nanomodbus.h:58
+@ NMBS_ERROR_NONE
Definition: nanomodbus.h:65
+@ NMBS_ERROR_INVALID_ARGUMENT
Definition: nanomodbus.h:64
+@ NMBS_EXCEPTION_ILLEGAL_DATA_ADDRESS
Definition: nanomodbus.h:69
+@ NMBS_ERROR_TRANSPORT
Definition: nanomodbus.h:61
+@ NMBS_ERROR_INVALID_TCP_MBAP
Definition: nanomodbus.h:59
+@ NMBS_ERROR_INVALID_REQUEST
Definition: nanomodbus.h:57
+@ NMBS_ERROR_INVALID_RESPONSE
Definition: nanomodbus.h:63
+@ NMBS_EXCEPTION_ILLEGAL_DATA_VALUE
Definition: nanomodbus.h:70
+@ NMBS_ERROR_TIMEOUT
Definition: nanomodbus.h:62
+@ NMBS_EXCEPTION_ILLEGAL_FUNCTION
Definition: nanomodbus.h:68
+@ NMBS_EXCEPTION_SERVER_DEVICE_FAILURE
Definition: nanomodbus.h:71
+@ NMBS_ERROR_CRC
Definition: nanomodbus.h:60
+uint8_t nmbs_bitfield[250]
Definition: nanomodbus.h:85
+nmbs_error nmbs_write_multiple_registers(nmbs_t *nmbs, uint16_t address, uint16_t quantity, const uint16_t *registers)
Definition: nanomodbus.c:2036
+nmbs_error nmbs_write_single_register(nmbs_t *nmbs, uint16_t address, uint16_t value)
Definition: nanomodbus.c:1982
+nmbs_error nmbs_send_raw_pdu(nmbs_t *nmbs, uint8_t fc, const uint8_t *data, uint16_t data_len)
Definition: nanomodbus.c:2309
struct nmbs_callbacks nmbs_callbacks
-nmbs_error nmbs_client_create(nmbs_t *nmbs, const nmbs_platform_conf *platform_conf)
Definition: nanomodbus.c:1587
-void nmbs_set_byte_timeout(nmbs_t *nmbs, int32_t timeout_ms)
Definition: nanomodbus.c:172
-nmbs_error nmbs_read_holding_registers(nmbs_t *nmbs, uint16_t address, uint16_t quantity, uint16_t *registers_out)
Definition: nanomodbus.c:1647
-void nmbs_set_destination_rtu_address(nmbs_t *nmbs, uint8_t address)
Definition: nanomodbus.c:177
-nmbs_error nmbs_server_poll(nmbs_t *nmbs)
Definition: nanomodbus.c:1543
-const char * nmbs_strerror(nmbs_error error)
Definition: nanomodbus.c:1916
-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:1799
-nmbs_error nmbs_write_multiple_coils(nmbs_t *nmbs, uint16_t address, uint16_t quantity, const nmbs_bitfield coils)
Definition: nanomodbus.c:1699
-void nmbs_set_callbacks_arg(nmbs_t *nmbs, void *arg)
Definition: nanomodbus.c:1579
-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:1527
-nmbs_error nmbs_read_coils(nmbs_t *nmbs, uint16_t address, uint16_t quantity, nmbs_bitfield coils_out)
Definition: nanomodbus.c:1615
-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:1767
-void nmbs_set_read_timeout(nmbs_t *nmbs, int32_t timeout_ms)
Definition: nanomodbus.c:167
-void nmbs_set_platform_arg(nmbs_t *nmbs, void *arg)
Definition: nanomodbus.c:182
-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:1833
-nmbs_transport
Definition: nanomodbus.h:105
+nmbs_error nmbs_client_create(nmbs_t *nmbs, const nmbs_platform_conf *platform_conf)
Definition: nanomodbus.c:1890
+void nmbs_set_byte_timeout(nmbs_t *nmbs, int32_t timeout_ms)
Definition: nanomodbus.c:192
+nmbs_error nmbs_read_holding_registers(nmbs_t *nmbs, uint16_t address, uint16_t quantity, uint16_t *registers_out)
Definition: nanomodbus.c:1950
+void nmbs_set_destination_rtu_address(nmbs_t *nmbs, uint8_t address)
Definition: nanomodbus.c:197
+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 buffer_length)
Definition: nanomodbus.c:2218
+nmbs_error nmbs_receive_raw_pdu_response(nmbs_t *nmbs, uint8_t *data_out, uint8_t data_out_len)
Definition: nanomodbus.c:2323
+nmbs_error nmbs_server_poll(nmbs_t *nmbs)
Definition: nanomodbus.c:1847
+const char * nmbs_strerror(nmbs_error error)
Definition: nanomodbus.c:2351
+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:2100
+nmbs_error nmbs_write_multiple_coils(nmbs_t *nmbs, uint16_t address, uint16_t quantity, const nmbs_bitfield coils)
Definition: nanomodbus.c:2002
+void nmbs_set_callbacks_arg(nmbs_t *nmbs, void *arg)
Definition: nanomodbus.c:1883
+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:2254
+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:1831
+nmbs_error nmbs_read_coils(nmbs_t *nmbs, uint16_t address, uint16_t quantity, nmbs_bitfield coils_out)
Definition: nanomodbus.c:1918
+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:2070
+void nmbs_set_read_timeout(nmbs_t *nmbs, int32_t timeout_ms)
Definition: nanomodbus.c:187
+void nmbs_set_platform_arg(nmbs_t *nmbs, void *arg)
Definition: nanomodbus.c:202
+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:2135
+nmbs_transport
Definition: nanomodbus.h:121
struct nmbs_platform_conf nmbs_platform_conf
-nmbs_error nmbs_write_single_coil(nmbs_t *nmbs, uint16_t address, bool value)
Definition: nanomodbus.c:1657
-uint16_t nmbs_crc_calc(const uint8_t *data, uint32_t length)
Definition: nanomodbus.c:187
+uint8_t nmbs_bitfield_256[32]
Definition: nanomodbus.h:90
+nmbs_error nmbs_write_single_coil(nmbs_t *nmbs, uint16_t address, bool value)
Definition: nanomodbus.c:1960
+uint16_t nmbs_crc_calc(const uint8_t *data, uint32_t length)
Definition: nanomodbus.c:207
-nmbs_error nmbs_read_discrete_inputs(nmbs_t *nmbs, uint16_t address, uint16_t quantity, nmbs_bitfield inputs_out)
Definition: nanomodbus.c:1620
-Definition: nanomodbus.h:148
-
-
-
-
-
-Definition: nanomodbus.h:205
+nmbs_error nmbs_read_device_identification_basic(nmbs_t *nmbs, char *vendor_name, char *product_code, char *major_minor_revision, uint8_t buffer_length)
Definition: nanomodbus.c:2182
+nmbs_error nmbs_read_discrete_inputs(nmbs_t *nmbs, uint16_t address, uint16_t quantity, nmbs_bitfield inputs_out)
Definition: nanomodbus.c:1923
+nmbs_error nmbs_read_device_identification(nmbs_t *nmbs, uint8_t object_id, char *buffer, uint8_t buffer_length)
Definition: nanomodbus.c:2290
+Definition: nanomodbus.h:164
+
+
+
+
+
+Definition: nanomodbus.h:228