Files
Industrial_Emulator/lib/modbus-esp8266/ModbusEthernet.h

60 lines
1.5 KiB
C++

/*
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
};