LoRa_APRS_iGate/src/TaskEth.cpp

118 wiersze
4.8 KiB
C++
Czysty Zwykły widok Historia

#include <ETH.h>
#include <WiFi.h>
#include <logger.h>
2021-01-04 22:10:23 +00:00
#include "Task.h"
#include "TaskEth.h"
2021-07-15 19:45:44 +00:00
#include "project_configuration.h"
2022-03-20 00:03:26 +00:00
#define WIFI_EVENT "WiFiEvent"
volatile bool eth_connected = false;
logging::Logger *_logger;
void setWiFiLogger(logging::Logger *logger) {
_logger = logger;
}
2021-05-23 21:28:03 +00:00
void WiFiEvent(WiFiEvent_t event) {
switch (event) {
2023-02-06 12:06:33 +00:00
case ARDUINO_EVENT_WIFI_STA_START:
2022-03-20 00:03:26 +00:00
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "WiFi Started");
2021-05-23 21:28:03 +00:00
break;
2023-02-06 12:06:33 +00:00
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
2022-03-20 00:03:26 +00:00
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "WiFi Connected");
2021-05-23 21:28:03 +00:00
break;
2023-02-06 12:06:33 +00:00
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
2022-03-20 09:56:06 +00:00
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "WiFi MAC: %s", WiFi.macAddress().c_str());
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "WiFi IPv4: %s", WiFi.localIP().toString().c_str());
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "WiFi Gateway: %s", WiFi.gatewayIP().toString().c_str());
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "WiFi DNS1: %s", WiFi.dnsIP().toString().c_str());
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "WiFi DNS2: %s", WiFi.dnsIP(1).toString().c_str());
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "WiFi Hostname: %s", WiFi.getHostname());
2021-05-23 21:28:03 +00:00
break;
2023-02-06 12:06:33 +00:00
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
2022-03-20 00:03:26 +00:00
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "WiFi Disconnected");
2021-05-23 21:28:03 +00:00
break;
2023-02-06 12:06:33 +00:00
case ARDUINO_EVENT_WIFI_STA_STOP:
2022-03-20 00:03:26 +00:00
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "WiFi Stopped");
2021-05-23 21:28:03 +00:00
break;
2023-02-06 12:06:33 +00:00
case ARDUINO_EVENT_ETH_START:
2022-06-29 06:28:16 +00:00
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "ETH Started");
break;
2023-02-06 12:06:33 +00:00
case ARDUINO_EVENT_ETH_CONNECTED:
2022-03-20 00:03:26 +00:00
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "ETH Connected");
break;
2023-02-06 12:06:33 +00:00
case ARDUINO_EVENT_ETH_GOT_IP:
2022-03-20 09:56:06 +00:00
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "ETH MAC: %s", ETH.macAddress().c_str());
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "ETH IPv4: %s", ETH.localIP().toString().c_str());
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "ETH Gateway: %s", ETH.gatewayIP().toString().c_str());
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "ETH DNS1: %s", ETH.dnsIP().toString().c_str());
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "ETH DNS2: %s", ETH.dnsIP(1).toString().c_str());
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "ETH Hostname: %s", ETH.getHostname());
if (ETH.fullDuplex()) {
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "ETH FULL_DUPLEX");
}
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_INFO, WIFI_EVENT, "ETH Speed: %dMbps", ETH.linkSpeed());
eth_connected = true;
break;
2023-02-06 12:06:33 +00:00
case ARDUINO_EVENT_ETH_DISCONNECTED:
2022-03-20 00:03:26 +00:00
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_WARN, WIFI_EVENT, "ETH Disconnected");
eth_connected = false;
break;
2023-02-06 12:06:33 +00:00
case ARDUINO_EVENT_ETH_STOP:
2022-03-20 00:03:26 +00:00
_logger->log(logging::LoggerLevel::LOGGER_LEVEL_WARN, WIFI_EVENT, "ETH Stopped");
eth_connected = false;
break;
default:
break;
}
}
EthTask::EthTask() : Task(TASK_ETH, TaskEth) {
}
EthTask::~EthTask() {
}
2021-05-18 22:44:37 +00:00
bool EthTask::setup(System &system) {
WiFi.onEvent(WiFiEvent);
2023-02-10 21:01:31 +00:00
if (system.getBoardConfig()->Ethernet.nReset != -1) {
pinMode(system.getBoardConfig()->Ethernet.nReset, OUTPUT);
digitalWrite(system.getBoardConfig()->Ethernet.nReset, 0);
delay(200);
digitalWrite(system.getBoardConfig()->Ethernet.nReset, 1);
delay(200);
digitalWrite(system.getBoardConfig()->Ethernet.nReset, 0);
delay(200);
digitalWrite(system.getBoardConfig()->Ethernet.nReset, 1);
}
2023-02-10 21:01:31 +00:00
ETH.begin(system.getBoardConfig()->Ethernet.Addr, system.getBoardConfig()->Ethernet.Power, system.getBoardConfig()->Ethernet.MDC, system.getBoardConfig()->Ethernet.MDIO, system.getBoardConfig()->Ethernet.Type, system.getBoardConfig()->Ethernet.CLK);
2021-12-18 16:23:50 +00:00
2021-12-18 17:07:37 +00:00
if (!system.getUserConfig()->network.DHCP) {
2021-12-18 21:33:35 +00:00
ETH.config(system.getUserConfig()->network.static_.ip, system.getUserConfig()->network.static_.gateway, system.getUserConfig()->network.static_.subnet, system.getUserConfig()->network.static_.dns1, system.getUserConfig()->network.static_.dns2);
}
if (system.getUserConfig()->network.hostname.overwrite) {
ETH.setHostname(system.getUserConfig()->network.hostname.name.c_str());
} else {
ETH.setHostname(system.getUserConfig()->callsign.c_str());
2021-12-18 16:23:50 +00:00
}
return true;
}
2021-05-18 22:44:37 +00:00
bool EthTask::loop(System &system) {
2021-03-13 22:22:43 +00:00
if (!eth_connected) {
system.connectedViaEth(false);
2021-03-13 22:22:43 +00:00
_stateInfo = "Ethernet not connected";
_state = Error;
return false;
}
system.connectedViaEth(true);
2021-03-13 22:22:43 +00:00
_stateInfo = ETH.localIP().toString();
_state = Okay;
return true;
}