Allow Ethernet Pin Settings via json config

This commit is contained in:
Thomas Basler 2023-01-16 22:26:35 +01:00
parent f60205829a
commit 3d3feb3517
5 changed files with 87 additions and 2 deletions

View File

@ -3,6 +3,7 @@
#include <Arduino.h>
#include <stdint.h>
#include <ETH.h>
#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;

View File

@ -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
}

View File

@ -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;
}

View File

@ -36,6 +36,36 @@
<td>{{ pinAssignment?.nrf24?.cs }}</td>
</tr>
<tr>
<td rowspan="7">Ethernet</td>
<td>enabled</td>
<td>{{ pinAssignment?.eth?.enabled }}</td>
</tr>
<tr>
<td>phy_addr</td>
<td>{{ pinAssignment?.eth?.phy_addr }}</td>
</tr>
<tr>
<td>power</td>
<td>{{ pinAssignment?.eth?.power }}</td>
</tr>
<tr>
<td>mdc</td>
<td>{{ pinAssignment?.eth?.mdc }}</td>
</tr>
<tr>
<td>mdio</td>
<td>{{ pinAssignment?.eth?.mdio }}</td>
</tr>
<tr>
<td>type</td>
<td>{{ pinAssignment?.eth?.type }}</td>
</tr>
<tr>
<td>clk_mode</td>
<td>{{ pinAssignment?.eth?.clk_mode }}</td>
</tr>
</tbody>
</table>
</div>

View File

@ -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<Device>{}