83 lines
2.6 KiB
C++
83 lines
2.6 KiB
C++
#include "ETH_Driver.h"
|
|
|
|
namespace drivers
|
|
{
|
|
|
|
Ethernet::Ethernet(const std::string &hostname, const std::string &ntpPool, const int8_t tz, const uint16_t updateInterval) : m_hostname(hostname), m_ntpPool(ntpPool), m_connected(false), m_localIP(IPAddress()), m_udp(NetworkUDP()), m_timeClient(m_udp)
|
|
{
|
|
SPI.begin(ETH_SPI_SCK, ETH_SPI_MISO, ETH_SPI_MOSI);
|
|
ETH.begin(ETH_PHY_TYPE, ETH_PHY_ADDR, ETH_PHY_CS, ETH_PHY_IRQ, ETH_PHY_RST, SPI);
|
|
|
|
m_timeClient = std::move(NTPClient(m_udp, m_ntpPool.c_str(), tz * 3600, updateInterval)); // NTP server, time offset in seconds, update interval
|
|
m_timeClient.begin();
|
|
}
|
|
|
|
Ethernet::~Ethernet()
|
|
{
|
|
m_timeClient.end();
|
|
ETH.end();
|
|
SPI.end();
|
|
}
|
|
|
|
const bool Ethernet::getNtpTime(time_t &time)
|
|
{
|
|
if (m_connected && m_timeClient.update())
|
|
{
|
|
time = m_timeClient.getEpochTime();
|
|
LOG_DEBUG("Epoch Time:", (long)time);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
const bool Ethernet::setNtpTimeOffset(const int8_t tz)
|
|
{
|
|
if (m_connected)
|
|
{
|
|
m_timeClient.setTimeOffset(tz * 3600);
|
|
LOG_DEBUG("Time zone UTC ", tz);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
const bool Ethernet::isConnected()
|
|
{
|
|
return m_connected;
|
|
}
|
|
|
|
void Ethernet::onEvent(arduino_event_id_t event, arduino_event_info_t info)
|
|
{
|
|
switch (event)
|
|
{
|
|
case ARDUINO_EVENT_ETH_START:
|
|
ETH.setHostname("waveshare-esp32s3");
|
|
break;
|
|
case ARDUINO_EVENT_ETH_CONNECTED:
|
|
LOG_INFO("ETH Connected");
|
|
break;
|
|
case ARDUINO_EVENT_ETH_GOT_IP:
|
|
m_localIP = ETH.localIP();
|
|
LOG_INFO("ETH ", esp_netif_get_desc(info.got_ip.esp_netif), " Got IP:", m_localIP.toString().c_str());
|
|
LOG_INFO("ETH ", esp_netif_get_desc(info.got_ip.esp_netif), " Gateway:", ETH.gatewayIP().toString().c_str());
|
|
LOG_INFO("ETH ", esp_netif_get_desc(info.got_ip.esp_netif), " Netmask:", ETH.subnetMask().toString().c_str());
|
|
m_connected = true;
|
|
break;
|
|
case ARDUINO_EVENT_ETH_LOST_IP:
|
|
LOG_INFO("ETH Lost IP");
|
|
m_connected = false;
|
|
break;
|
|
case ARDUINO_EVENT_ETH_DISCONNECTED:
|
|
LOG_INFO("ETH Disconnected");
|
|
m_connected = false;
|
|
break;
|
|
case ARDUINO_EVENT_ETH_STOP:
|
|
LOG_INFO("ETH Stopped");
|
|
m_connected = false;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
} |