From 98c0f27e5c63d16c76178cabc61a75010866e758 Mon Sep 17 00:00:00 2001 From: Robert Seidt Date: Tue, 2 Apr 2024 23:50:12 +0200 Subject: [PATCH 1/4] added compat for esp32-esp8266 --- src/ModbusRTUClient.cpp | 4 ++-- src/ModbusRTUClient.h | 4 ++-- src/libmodbus/modbus-rtu-private.h | 2 +- src/libmodbus/modbus-rtu.cpp | 4 ++++ src/libmodbus/modbus-rtu.h | 8 +++++++- 5 files changed, 16 insertions(+), 6 deletions(-) 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..c1e6512 100644 --- a/src/ModbusRTUClient.h +++ b/src/ModbusRTUClient.h @@ -37,8 +37,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/libmodbus/modbus-rtu-private.h b/src/libmodbus/modbus-rtu-private.h index 5cd6a8b..38933ab 100644 --- a/src/libmodbus/modbus-rtu-private.h +++ b/src/libmodbus/modbus-rtu-private.h @@ -48,7 +48,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..9da7090 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 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); From b080dffd5e1b6370c1cc2c87824a74908c0a625c Mon Sep 17 00:00:00 2001 From: Robert Seidt Date: Wed, 3 Apr 2024 07:31:54 +0200 Subject: [PATCH 2/4] fixed to compile examples independently from rs485 lib changes --- src/ModbusRTUClient.h | 2 ++ src/ModbusRTUServer.cpp | 4 ++-- src/ModbusRTUServer.h | 7 +++++-- src/libmodbus/modbus-rtu-private.h | 2 ++ src/libmodbus/modbus-rtu.cpp | 2 +- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ModbusRTUClient.h b/src/ModbusRTUClient.h index c1e6512..0b5f835 100644 --- a/src/ModbusRTUClient.h +++ b/src/ModbusRTUClient.h @@ -19,6 +19,8 @@ #ifndef _MODBUS_RTU_CLIENT_H_INCLUDED #define _MODBUS_RTU_CLIENT_H_INCLUDED +#ifndef RS485_SER_CONF_TYPE +#define RS485_SER_CONF_TYPE uint16_t #include "ModbusClient.h" #include 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..c6448a1 100644 --- a/src/ModbusRTUServer.h +++ b/src/ModbusRTUServer.h @@ -19,6 +19,9 @@ #ifndef _MODBUS_RTU_SERVER_H_INCLUDED #define _MODBUS_RTU_SERVER_H_INCLUDED +#ifndef RS485_SER_CONF_TYPE +#define RS485_SER_CONF_TYPE uint16_t + #include "ModbusServer.h" #include @@ -38,8 +41,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 38933ab..7992305 100644 --- a/src/libmodbus/modbus-rtu-private.h +++ b/src/libmodbus/modbus-rtu-private.h @@ -33,6 +33,8 @@ #define ENOTSUP WSAEOPNOTSUPP #endif +#ifndef RS485_SER_CONF_TYPE +#define RS485_SER_CONF_TYPE uint16_t /* WIN32: struct containing serial handle and a receive buffer */ #define PY_BUF_SIZE 512 struct win32_ser { diff --git a/src/libmodbus/modbus-rtu.cpp b/src/libmodbus/modbus-rtu.cpp index 9da7090..e16bdfa 100644 --- a/src/libmodbus/modbus-rtu.cpp +++ b/src/libmodbus/modbus-rtu.cpp @@ -1334,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, From f82445514e33c8b285b0755a5a28ea61b47f0d14 Mon Sep 17 00:00:00 2001 From: Robert Seidt Date: Wed, 3 Apr 2024 07:39:56 +0200 Subject: [PATCH 3/4] fixed preprocessors --- src/ModbusRTUClient.h | 7 +++++-- src/ModbusRTUServer.h | 5 +++-- src/libmodbus/modbus-rtu-private.h | 8 ++++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/ModbusRTUClient.h b/src/ModbusRTUClient.h index 0b5f835..96975b0 100644 --- a/src/ModbusRTUClient.h +++ b/src/ModbusRTUClient.h @@ -17,10 +17,13 @@ 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 + +#ifndef _MODBUS_RTU_CLIENT_H_INCLUDED +#define _MODBUS_RTU_CLIENT_H_INCLUDED + #include "ModbusClient.h" #include diff --git a/src/ModbusRTUServer.h b/src/ModbusRTUServer.h index c6448a1..ea432ff 100644 --- a/src/ModbusRTUServer.h +++ b/src/ModbusRTUServer.h @@ -17,11 +17,12 @@ 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 +#ifndef _MODBUS_RTU_SERVER_H_INCLUDED +#define _MODBUS_RTU_SERVER_H_INCLUDED #include "ModbusServer.h" #include diff --git a/src/libmodbus/modbus-rtu-private.h b/src/libmodbus/modbus-rtu-private.h index 7992305..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,8 +38,7 @@ #define ENOTSUP WSAEOPNOTSUPP #endif -#ifndef RS485_SER_CONF_TYPE -#define RS485_SER_CONF_TYPE uint16_t + /* WIN32: struct containing serial handle and a receive buffer */ #define PY_BUF_SIZE 512 struct win32_ser { From bb7715def0493175d0553a578a0500e47677d34d Mon Sep 17 00:00:00 2001 From: Robert Seidt Date: Wed, 3 Apr 2024 19:03:40 +0200 Subject: [PATCH 4/4] fixed defines --- src/ModbusRTUClient.h | 7 ++++--- src/ModbusRTUServer.h | 8 +++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/ModbusRTUClient.h b/src/ModbusRTUClient.h index 96975b0..8c066e8 100644 --- a/src/ModbusRTUClient.h +++ b/src/ModbusRTUClient.h @@ -17,13 +17,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef RS485_SER_CONF_TYPE -#define RS485_SER_CONF_TYPE uint16_t -#endif #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 diff --git a/src/ModbusRTUServer.h b/src/ModbusRTUServer.h index ea432ff..28292f0 100644 --- a/src/ModbusRTUServer.h +++ b/src/ModbusRTUServer.h @@ -17,13 +17,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef RS485_SER_CONF_TYPE -#define RS485_SER_CONF_TYPE uint16_t -#endif #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