From 3d98fd8e910490172075261fa0affc6192422255 Mon Sep 17 00:00:00 2001 From: Francesco Sacchi Date: Sat, 2 May 2020 12:43:27 +0200 Subject: [PATCH 1/2] Silence compiler warning. --- src/libmodbus/modbus.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libmodbus/modbus.c b/src/libmodbus/modbus.c index acf5b10..cfc493d 100644 --- a/src/libmodbus/modbus.c +++ b/src/libmodbus/modbus.c @@ -497,7 +497,10 @@ int _modbus_receive_msg(modbus_t *ctx, uint8_t *msg, msg_type_t msg_type) if (length_to_read != 0) { step = _STEP_META; break; - } /* else switches straight to the next step */ + } + /* else switches straight to the next step */ + /* Silence compiler warning, do not remove the following comment. */ + /* fall through */ case _STEP_META: length_to_read = compute_data_length_after_meta( ctx, msg, msg_type); From 91b390ec570cc6667ca04e0af221d85638311531 Mon Sep 17 00:00:00 2001 From: Francesco Sacchi Date: Sat, 2 May 2020 12:44:22 +0200 Subject: [PATCH 2/2] Make request buffer size configurable. --- src/ModbusRTUServer.cpp | 5 +++-- src/ModbusRTUServer.h | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/ModbusRTUServer.cpp b/src/ModbusRTUServer.cpp index 7c4dfb9..db3a092 100644 --- a/src/ModbusRTUServer.cpp +++ b/src/ModbusRTUServer.cpp @@ -34,7 +34,7 @@ ModbusRTUServerClass::~ModbusRTUServerClass() { } -int ModbusRTUServerClass::begin(int id, unsigned long baudrate, uint16_t config) +int ModbusRTUServerClass::begin(int id, unsigned long baudrate, uint16_t config, unsigned max_req_size) { modbus_t* mb = modbus_new_rtu(baudrate, config); @@ -43,13 +43,14 @@ int ModbusRTUServerClass::begin(int id, unsigned long baudrate, uint16_t config) } modbus_connect(mb); + _max_request_size = max_req_size; return 1; } void ModbusRTUServerClass::poll() { - uint8_t request[MODBUS_RTU_MAX_ADU_LENGTH]; + uint8_t request[_max_request_size]; int requestLength = modbus_receive(_mb, request); diff --git a/src/ModbusRTUServer.h b/src/ModbusRTUServer.h index 82cd885..7e92a18 100644 --- a/src/ModbusRTUServer.h +++ b/src/ModbusRTUServer.h @@ -21,6 +21,7 @@ #define _MODBUS_RTU_SERVER_H_INCLUDED #include "ModbusServer.h" +#include "libmodbus/modbus-rtu.h" class ModbusRTUServerClass : public ModbusServer { public: @@ -36,12 +37,14 @@ class ModbusRTUServerClass : public ModbusServer { * * Return 1 on success, 0 on failure */ - int begin(int id, unsigned long baudrate, uint16_t config = SERIAL_8N1); + int begin(int id, unsigned long baudrate, uint16_t config = SERIAL_8N1, unsigned max_req_size = MODBUS_RTU_MAX_ADU_LENGTH); /** * Poll interface for requests */ virtual void poll(); +private: + unsigned _max_request_size; }; extern ModbusRTUServerClass ModbusRTUServer;