First stable compilation with ModbusRTU and ModbusTCP

This commit is contained in:
2025-09-14 12:01:55 -05:00
commit ac20b82496
59 changed files with 6841 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
/*
Modbus Library for Arduino
ModbusTCP for W5x00 Ethernet
Copyright (C) 2022 Alexander Emelianov (a.m.emelianov@gmail.com)
*/
#pragma once
#if defined(MODBUSIP_USE_DNS)
#include <Dns.h>
#endif
#include "ModbusAPI.h"
#include "ModbusTCPTemplate.h"
#if defined(ARDUINO_PORTENTA_H7_M4) || defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_PORTENTA_X8)
#define MODBUS_ETH_WRAP_ACCEPT
#undef MODBUS_ETH_WRAP_BEGIN
#elif defined(ESP32)
#undef MODBUS_ETH_WRAP_ACCEPT
#define MODBUS_ETH_WRAP_BEGIN
#else
#undef MODBUS_ETH_WRAP_ACCEPT
#undef MODBUS_ETH_WRAP_BEGIN
#endif
// Ethernet class wrapper to be able to compile for ESP32
class EthernetServerWrapper : public EthernetServer {
public:
EthernetServerWrapper(uint16_t port) : EthernetServer(port) {
}
#if defined(MODBUS_ETH_WRAP_BEGIN)
void begin(uint16_t port=0) {
EthernetServer::begin();
}
#endif
#if defined(MODBUS_ETH_WRAP_ACCEPT)
inline EthernetClient accept() {
return available();
}
#endif
};
class ModbusEthernet : public ModbusAPI<ModbusTCPTemplate<EthernetServerWrapper, EthernetClient>> {
#if defined(MODBUSIP_USE_DNS)
private:
static IPAddress resolver (const char* host) {
DNSClient dns;
IPAddress ip;
dns.begin(Ethernet.dnsServerIP());
if (dns.getHostByName(host, ip) == 1)
return ip;
else
return IPADDR_NONE;
}
public:
ModbusEthernet() : ModbusAPI() {
resolve = resolver;
}
#endif
};