diff --git a/src/ModbusRTUClient.cpp b/src/ModbusRTUClient.cpp index 2b35227..5a14e8a 100644 --- a/src/ModbusRTUClient.cpp +++ b/src/ModbusRTUClient.cpp @@ -40,7 +40,7 @@ ModbusRTUClientClass::~ModbusRTUClientClass() { } -int ModbusRTUClientClass::begin(unsigned long baudrate, uint16_t config) +int ModbusRTUClientClass::begin(unsigned long baudrate, RS485_SER_CONF_TYPE config) { modbus_t* mb = modbus_new_rtu(_rs485, baudrate, config); @@ -51,7 +51,7 @@ int ModbusRTUClientClass::begin(unsigned long baudrate, uint16_t config) return 1; } -int ModbusRTUClientClass::begin(RS485Class& rs485, unsigned long baudrate, uint16_t config) +int ModbusRTUClientClass::begin(RS485Class& rs485, unsigned long baudrate, RS485_SER_CONF_TYPE config) { _rs485 = &rs485; return begin(baudrate, config); diff --git a/src/ModbusRTUClient.h b/src/ModbusRTUClient.h index 2667594..8c066e8 100644 --- a/src/ModbusRTUClient.h +++ b/src/ModbusRTUClient.h @@ -17,9 +17,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + #ifndef _MODBUS_RTU_CLIENT_H_INCLUDED #define _MODBUS_RTU_CLIENT_H_INCLUDED +#ifndef RS485_SER_CONF_TYPE +#define RS485_SER_CONF_TYPE uint16_t +#endif + + #include "ModbusClient.h" #include @@ -37,8 +43,8 @@ class ModbusRTUClientClass : public ModbusClient { * * Return 1 on success, 0 on failure */ - int begin(unsigned long baudrate, uint16_t config = SERIAL_8N1); - int begin(RS485Class& rs485, unsigned long baudrate, uint16_t config = SERIAL_8N1); + int begin(unsigned long baudrate, RS485_SER_CONF_TYPE config = SERIAL_8N1); + int begin(RS485Class& rs485, unsigned long baudrate, RS485_SER_CONF_TYPE config = SERIAL_8N1); private: RS485Class* _rs485 = &RS485; diff --git a/src/ModbusRTUServer.cpp b/src/ModbusRTUServer.cpp index 95cc0b8..1369695 100644 --- a/src/ModbusRTUServer.cpp +++ b/src/ModbusRTUServer.cpp @@ -38,7 +38,7 @@ ModbusRTUServerClass::~ModbusRTUServerClass() { } -int ModbusRTUServerClass::begin(int id, unsigned long baudrate, uint16_t config) +int ModbusRTUServerClass::begin(int id, unsigned long baudrate, RS485_SER_CONF_TYPE config) { modbus_t* mb = modbus_new_rtu(_rs485, baudrate, config); @@ -51,7 +51,7 @@ int ModbusRTUServerClass::begin(int id, unsigned long baudrate, uint16_t config) return 1; } -int ModbusRTUServerClass::begin(RS485Class& rs485, int id, unsigned long baudrate, uint16_t config) +int ModbusRTUServerClass::begin(RS485Class& rs485, int id, unsigned long baudrate, RS485_SER_CONF_TYPE config) { _rs485 = &rs485; return begin(id, baudrate, config); diff --git a/src/ModbusRTUServer.h b/src/ModbusRTUServer.h index 53b7d40..28292f0 100644 --- a/src/ModbusRTUServer.h +++ b/src/ModbusRTUServer.h @@ -17,9 +17,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + #ifndef _MODBUS_RTU_SERVER_H_INCLUDED #define _MODBUS_RTU_SERVER_H_INCLUDED + +#ifndef RS485_SER_CONF_TYPE +#define RS485_SER_CONF_TYPE uint16_t +#endif + #include "ModbusServer.h" #include @@ -38,8 +44,8 @@ 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(RS485Class& rs485, int id, unsigned long baudrate, uint16_t config = SERIAL_8N1); + int begin(int id, unsigned long baudrate, RS485_SER_CONF_TYPE config = SERIAL_8N1); + int begin(RS485Class& rs485, int id, unsigned long baudrate, RS485_SER_CONF_TYPE config = SERIAL_8N1); /** * Poll interface for requests diff --git a/src/libmodbus/modbus-rtu-private.h b/src/libmodbus/modbus-rtu-private.h index 5cd6a8b..a78e3e1 100644 --- a/src/libmodbus/modbus-rtu-private.h +++ b/src/libmodbus/modbus-rtu-private.h @@ -5,6 +5,11 @@ * SPDX-License-Identifier: LGPL-2.1+ */ +#ifndef RS485_SER_CONF_TYPE +#define RS485_SER_CONF_TYPE uint16_t +#endif + + #ifndef MODBUS_RTU_PRIVATE_H #define MODBUS_RTU_PRIVATE_H @@ -33,6 +38,7 @@ #define ENOTSUP WSAEOPNOTSUPP #endif + /* WIN32: struct containing serial handle and a receive buffer */ #define PY_BUF_SIZE 512 struct win32_ser { @@ -48,7 +54,7 @@ struct win32_ser { typedef struct _modbus_rtu { #if defined(ARDUINO) unsigned long baud; - uint16_t config; + RS485_SER_CONF_TYPE config; RS485Class* rs485; #else /* Device: "/dev/ttyS0", "/dev/ttyUSB0" or "/dev/tty.USA19*" on Mac OS X. */ diff --git a/src/libmodbus/modbus-rtu.cpp b/src/libmodbus/modbus-rtu.cpp index c5a8302..e16bdfa 100644 --- a/src/libmodbus/modbus-rtu.cpp +++ b/src/libmodbus/modbus-rtu.cpp @@ -654,7 +654,11 @@ static int _modbus_rtu_connect(modbus_t *ctx) return -1; } #elif defined(ARDUINO) +#if defined(ESP32) || defined(ESP8266) + ctx_rtu->rs485->begin(ctx_rtu->baud, static_cast(ctx_rtu->config)); +#else ctx_rtu->rs485->begin(ctx_rtu->baud, ctx_rtu->config); +#endif ctx_rtu->rs485->receive(); #else /* The O_NOCTTY flag tells UNIX that this program doesn't want @@ -1330,7 +1334,7 @@ const modbus_backend_t _modbus_rtu_backend = { }; #ifdef ARDUINO -modbus_t* modbus_new_rtu(RS485Class *rs485, unsigned long baud, uint16_t config) +modbus_t* modbus_new_rtu(RS485Class *rs485, unsigned long baud, RS485_SER_CONF_TYPE config) #else modbus_t* modbus_new_rtu(const char *device, int baud, char parity, int data_bit, diff --git a/src/libmodbus/modbus-rtu.h b/src/libmodbus/modbus-rtu.h index 9521114..3665713 100644 --- a/src/libmodbus/modbus-rtu.h +++ b/src/libmodbus/modbus-rtu.h @@ -10,6 +10,12 @@ #include "modbus.h" +#if defined(ESP32) || defined(ESP8266) +#define RS485_SER_CONF_TYPE uint32_t +#else +#define RS485_SER_CONF_TYPE uint16_t +#endif + MODBUS_BEGIN_DECLS /* Modbus_Application_Protocol_V1_1b.pdf Chapter 4 Section 1 Page 5 @@ -19,7 +25,7 @@ MODBUS_BEGIN_DECLS #ifdef ARDUINO class RS485Class; -MODBUS_API modbus_t* modbus_new_rtu(RS485Class *rs485, unsigned long baud, uint16_t config); +MODBUS_API modbus_t* modbus_new_rtu(RS485Class *rs485, unsigned long baud, RS485_SER_CONF_TYPE config); #else MODBUS_API modbus_t* modbus_new_rtu(const char *device, int baud, char parity, int data_bit, int stop_bit);