From 3d3feb3517b4614c2d52e439bd77e20270ad125e Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 16 Jan 2023 22:26:35 +0100 Subject: [PATCH] Allow Ethernet Pin Settings via json config --- include/PinMapping.h | 9 +++++++++ src/NetworkSettings.cpp | 6 +++++- src/PinMapping.cpp | 33 ++++++++++++++++++++++++++++++- webapp/src/components/PinInfo.vue | 30 ++++++++++++++++++++++++++++ webapp/src/types/PinMapping.ts | 11 +++++++++++ 5 files changed, 87 insertions(+), 2 deletions(-) diff --git a/include/PinMapping.h b/include/PinMapping.h index 8eac0164..163dbbe5 100644 --- a/include/PinMapping.h +++ b/include/PinMapping.h @@ -3,6 +3,7 @@ #include #include +#include #define PINMAPPING_FILENAME "/pin_mapping.json" @@ -16,6 +17,13 @@ struct PinMapping_t { int8_t nrf24_irq; int8_t nrf24_en; int8_t nrf24_cs; + int8_t eth_phy_addr; + bool eth_enabled; + int eth_power; + int eth_mdc; + int eth_mdio; + eth_phy_type_t eth_type; + eth_clock_mode_t eth_clk_mode; }; class PinMappingClass { @@ -25,6 +33,7 @@ public: PinMapping_t& get(); bool isValidNrf24Config(); + bool isValidEthConfig(); private: PinMapping_t _pinMapping; diff --git a/src/NetworkSettings.cpp b/src/NetworkSettings.cpp index 27f48775..fd363a1c 100644 --- a/src/NetworkSettings.cpp +++ b/src/NetworkSettings.cpp @@ -5,6 +5,7 @@ #include "NetworkSettings.h" #include "Configuration.h" #include "MessageOutput.h" +#include "PinMapping.h" #include "Utils.h" #include "defaults.h" #ifdef OPENDTU_ETHERNET @@ -130,7 +131,10 @@ void NetworkSettingsClass::setupMode() } } #ifdef OPENDTU_ETHERNET - ETH.begin(); + if (PinMapping.isValidEthConfig()) { + PinMapping_t& pin = PinMapping.get(); + ETH.begin(pin.eth_phy_addr, pin.eth_power, pin.eth_mdc, pin.eth_mdio, pin.eth_type, pin.eth_clk_mode); + } #endif } diff --git a/src/PinMapping.cpp b/src/PinMapping.cpp index b95d6d0c..2fccabd3 100644 --- a/src/PinMapping.cpp +++ b/src/PinMapping.cpp @@ -21,6 +21,19 @@ PinMappingClass::PinMappingClass() _pinMapping.nrf24_irq = HOYMILES_PIN_IRQ; _pinMapping.nrf24_miso = HOYMILES_PIN_MISO; _pinMapping.nrf24_mosi = HOYMILES_PIN_MOSI; + +#ifdef OPENDTU_ETHERNET + _pinMapping.eth_enabled = true; +#else + _pinMapping.eth_enabled = false; +#endif + + _pinMapping.eth_phy_addr = ETH_PHY_ADDR; + _pinMapping.eth_power = ETH_PHY_POWER; + _pinMapping.eth_mdc = ETH_PHY_MDC; + _pinMapping.eth_mdio = ETH_PHY_MDIO; + _pinMapping.eth_type = ETH_PHY_TYPE; + _pinMapping.eth_clk_mode = ETH_CLK_MODE; } PinMapping_t& PinMappingClass::get() @@ -28,7 +41,6 @@ PinMapping_t& PinMappingClass::get() return _pinMapping; } - bool PinMappingClass::init(const String& deviceMapping) { File f = LittleFS.open(PINMAPPING_FILENAME, "r", false); @@ -54,6 +66,20 @@ bool PinMappingClass::init(const String& deviceMapping) _pinMapping.nrf24_irq = doc[i]["nrf24"]["irq"] | HOYMILES_PIN_IRQ; _pinMapping.nrf24_miso = doc[i]["nrf24"]["miso"] | HOYMILES_PIN_MISO; _pinMapping.nrf24_mosi = doc[i]["nrf24"]["mosi"] | HOYMILES_PIN_MOSI; + +#ifdef OPENDTU_ETHERNET + _pinMapping.eth_enabled = doc[i]["eth"]["enabled"] | true; +#else + _pinMapping.eth_enabled = doc[i]["eth"]["enabled"] | false; +#endif + + _pinMapping.eth_phy_addr = doc[i]["eth"]["phy_addr"] | ETH_PHY_ADDR; + _pinMapping.eth_power = doc[i]["eth"]["power"] | ETH_PHY_POWER; + _pinMapping.eth_mdc = doc[i]["eth"]["mdc"] | ETH_PHY_MDC; + _pinMapping.eth_mdio = doc[i]["eth"]["mdio"] | ETH_PHY_MDIO; + _pinMapping.eth_type = doc[i]["eth"]["type"] | ETH_PHY_TYPE; + _pinMapping.eth_clk_mode = doc[i]["eth"]["clk_mode"] | ETH_CLK_MODE; + return true; } } @@ -69,4 +95,9 @@ bool PinMappingClass::isValidNrf24Config() && _pinMapping.nrf24_irq > 0 && _pinMapping.nrf24_miso > 0 && _pinMapping.nrf24_mosi > 0; +} + +bool PinMappingClass::isValidEthConfig() +{ + return _pinMapping.eth_enabled; } \ No newline at end of file diff --git a/webapp/src/components/PinInfo.vue b/webapp/src/components/PinInfo.vue index a9fa9bb4..019a1d33 100644 --- a/webapp/src/components/PinInfo.vue +++ b/webapp/src/components/PinInfo.vue @@ -36,6 +36,36 @@ {{ pinAssignment?.nrf24?.cs }} + + Ethernet + enabled + {{ pinAssignment?.eth?.enabled }} + + + phy_addr + {{ pinAssignment?.eth?.phy_addr }} + + + power + {{ pinAssignment?.eth?.power }} + + + mdc + {{ pinAssignment?.eth?.mdc }} + + + mdio + {{ pinAssignment?.eth?.mdio }} + + + type + {{ pinAssignment?.eth?.type }} + + + clk_mode + {{ pinAssignment?.eth?.clk_mode }} + + diff --git a/webapp/src/types/PinMapping.ts b/webapp/src/types/PinMapping.ts index 686328f7..fa7bf493 100644 --- a/webapp/src/types/PinMapping.ts +++ b/webapp/src/types/PinMapping.ts @@ -7,9 +7,20 @@ export interface Nrf24 { cs: number; } +export interface Ethernet { + enabled: boolean; + phy_addr: number; + power: number; + mdc: number; + mdio: number; + type: number; + clk_mode: number; +} + export interface Device { name: string; nrf24: Nrf24; + eth: Ethernet; } export interface PinMapping extends Array{} \ No newline at end of file