Skip to content

Commit 4b6c7e8

Browse files
rseidtRobert Seidt
and
Robert Seidt
authored
Esp32 esp8266 (#1)
* added compat for esp32-esp8266 * fixed to compile examples independently from rs485 lib changes * fixed preprocessors * fixed defines --------- Co-authored-by: Robert Seidt <[email protected]>
1 parent cdae56d commit 4b6c7e8

7 files changed

+39
-11
lines changed

src/ModbusRTUClient.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ ModbusRTUClientClass::~ModbusRTUClientClass()
4040
{
4141
}
4242

43-
int ModbusRTUClientClass::begin(unsigned long baudrate, uint16_t config)
43+
int ModbusRTUClientClass::begin(unsigned long baudrate, RS485_SER_CONF_TYPE config)
4444
{
4545
modbus_t* mb = modbus_new_rtu(_rs485, baudrate, config);
4646

@@ -51,7 +51,7 @@ int ModbusRTUClientClass::begin(unsigned long baudrate, uint16_t config)
5151
return 1;
5252
}
5353

54-
int ModbusRTUClientClass::begin(RS485Class& rs485, unsigned long baudrate, uint16_t config)
54+
int ModbusRTUClientClass::begin(RS485Class& rs485, unsigned long baudrate, RS485_SER_CONF_TYPE config)
5555
{
5656
_rs485 = &rs485;
5757
return begin(baudrate, config);

src/ModbusRTUClient.h

+8-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,15 @@
1717
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1818
*/
1919

20+
2021
#ifndef _MODBUS_RTU_CLIENT_H_INCLUDED
2122
#define _MODBUS_RTU_CLIENT_H_INCLUDED
2223

24+
#ifndef RS485_SER_CONF_TYPE
25+
#define RS485_SER_CONF_TYPE uint16_t
26+
#endif
27+
28+
2329
#include "ModbusClient.h"
2430
#include <ArduinoRS485.h>
2531

@@ -37,8 +43,8 @@ class ModbusRTUClientClass : public ModbusClient {
3743
*
3844
* Return 1 on success, 0 on failure
3945
*/
40-
int begin(unsigned long baudrate, uint16_t config = SERIAL_8N1);
41-
int begin(RS485Class& rs485, unsigned long baudrate, uint16_t config = SERIAL_8N1);
46+
int begin(unsigned long baudrate, RS485_SER_CONF_TYPE config = SERIAL_8N1);
47+
int begin(RS485Class& rs485, unsigned long baudrate, RS485_SER_CONF_TYPE config = SERIAL_8N1);
4248

4349
private:
4450
RS485Class* _rs485 = &RS485;

src/ModbusRTUServer.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ ModbusRTUServerClass::~ModbusRTUServerClass()
3838
{
3939
}
4040

41-
int ModbusRTUServerClass::begin(int id, unsigned long baudrate, uint16_t config)
41+
int ModbusRTUServerClass::begin(int id, unsigned long baudrate, RS485_SER_CONF_TYPE config)
4242
{
4343
modbus_t* mb = modbus_new_rtu(_rs485, baudrate, config);
4444

@@ -51,7 +51,7 @@ int ModbusRTUServerClass::begin(int id, unsigned long baudrate, uint16_t config)
5151
return 1;
5252
}
5353

54-
int ModbusRTUServerClass::begin(RS485Class& rs485, int id, unsigned long baudrate, uint16_t config)
54+
int ModbusRTUServerClass::begin(RS485Class& rs485, int id, unsigned long baudrate, RS485_SER_CONF_TYPE config)
5555
{
5656
_rs485 = &rs485;
5757
return begin(id, baudrate, config);

src/ModbusRTUServer.h

+8-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,15 @@
1717
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1818
*/
1919

20+
2021
#ifndef _MODBUS_RTU_SERVER_H_INCLUDED
2122
#define _MODBUS_RTU_SERVER_H_INCLUDED
2223

24+
25+
#ifndef RS485_SER_CONF_TYPE
26+
#define RS485_SER_CONF_TYPE uint16_t
27+
#endif
28+
2329
#include "ModbusServer.h"
2430
#include <ArduinoRS485.h>
2531

@@ -38,8 +44,8 @@ class ModbusRTUServerClass : public ModbusServer {
3844
*
3945
* Return 1 on success, 0 on failure
4046
*/
41-
int begin(int id, unsigned long baudrate, uint16_t config = SERIAL_8N1);
42-
int begin(RS485Class& rs485, int id, unsigned long baudrate, uint16_t config = SERIAL_8N1);
47+
int begin(int id, unsigned long baudrate, RS485_SER_CONF_TYPE config = SERIAL_8N1);
48+
int begin(RS485Class& rs485, int id, unsigned long baudrate, RS485_SER_CONF_TYPE config = SERIAL_8N1);
4349

4450
/**
4551
* Poll interface for requests

src/libmodbus/modbus-rtu-private.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
* SPDX-License-Identifier: LGPL-2.1+
66
*/
77

8+
#ifndef RS485_SER_CONF_TYPE
9+
#define RS485_SER_CONF_TYPE uint16_t
10+
#endif
11+
12+
813
#ifndef MODBUS_RTU_PRIVATE_H
914
#define MODBUS_RTU_PRIVATE_H
1015

@@ -33,6 +38,7 @@
3338
#define ENOTSUP WSAEOPNOTSUPP
3439
#endif
3540

41+
3642
/* WIN32: struct containing serial handle and a receive buffer */
3743
#define PY_BUF_SIZE 512
3844
struct win32_ser {
@@ -48,7 +54,7 @@ struct win32_ser {
4854
typedef struct _modbus_rtu {
4955
#if defined(ARDUINO)
5056
unsigned long baud;
51-
uint16_t config;
57+
RS485_SER_CONF_TYPE config;
5258
RS485Class* rs485;
5359
#else
5460
/* Device: "/dev/ttyS0", "/dev/ttyUSB0" or "/dev/tty.USA19*" on Mac OS X. */

src/libmodbus/modbus-rtu.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -654,7 +654,11 @@ static int _modbus_rtu_connect(modbus_t *ctx)
654654
return -1;
655655
}
656656
#elif defined(ARDUINO)
657+
#if defined(ESP32) || defined(ESP8266)
658+
ctx_rtu->rs485->begin(ctx_rtu->baud, static_cast<SerialConfig>(ctx_rtu->config));
659+
#else
657660
ctx_rtu->rs485->begin(ctx_rtu->baud, ctx_rtu->config);
661+
#endif
658662
ctx_rtu->rs485->receive();
659663
#else
660664
/* The O_NOCTTY flag tells UNIX that this program doesn't want
@@ -1330,7 +1334,7 @@ const modbus_backend_t _modbus_rtu_backend = {
13301334
};
13311335

13321336
#ifdef ARDUINO
1333-
modbus_t* modbus_new_rtu(RS485Class *rs485, unsigned long baud, uint16_t config)
1337+
modbus_t* modbus_new_rtu(RS485Class *rs485, unsigned long baud, RS485_SER_CONF_TYPE config)
13341338
#else
13351339
modbus_t* modbus_new_rtu(const char *device,
13361340
int baud, char parity, int data_bit,

src/libmodbus/modbus-rtu.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010

1111
#include "modbus.h"
1212

13+
#if defined(ESP32) || defined(ESP8266)
14+
#define RS485_SER_CONF_TYPE uint32_t
15+
#else
16+
#define RS485_SER_CONF_TYPE uint16_t
17+
#endif
18+
1319
MODBUS_BEGIN_DECLS
1420

1521
/* Modbus_Application_Protocol_V1_1b.pdf Chapter 4 Section 1 Page 5
@@ -19,7 +25,7 @@ MODBUS_BEGIN_DECLS
1925

2026
#ifdef ARDUINO
2127
class RS485Class;
22-
MODBUS_API modbus_t* modbus_new_rtu(RS485Class *rs485, unsigned long baud, uint16_t config);
28+
MODBUS_API modbus_t* modbus_new_rtu(RS485Class *rs485, unsigned long baud, RS485_SER_CONF_TYPE config);
2329
#else
2430
MODBUS_API modbus_t* modbus_new_rtu(const char *device, int baud, char parity,
2531
int data_bit, int stop_bit);

0 commit comments

Comments
 (0)