Read display pinmapping from json file

This commit is contained in:
Thomas Basler 2023-01-19 20:50:57 +01:00
parent bb3e12814d
commit b96d87b933
3 changed files with 45 additions and 2 deletions

View File

@ -24,6 +24,11 @@ struct PinMapping_t {
int eth_mdio;
eth_phy_type_t eth_type;
eth_clock_mode_t eth_clk_mode;
uint8_t display_type;
uint8_t display_data;
uint8_t display_clk;
uint8_t display_cs;
uint8_t display_reset;
};
class PinMappingClass {

View File

@ -10,6 +10,26 @@
#define JSON_BUFFER_SIZE 6144
#ifndef DISPLAY_TYPE
#define DISPLAY_TYPE 0
#endif
#ifndef DISPLAY_DATA
#define DISPLAY_DATA 255
#endif
#ifndef DISPLAY_CLK
#define DISPLAY_CLK 255
#endif
#ifndef DISPLAY_CS
#define DISPLAY_CS 255
#endif
#ifndef DISPLAY_RESET
#define DISPLAY_RESET 255
#endif
PinMappingClass PinMapping;
PinMappingClass::PinMappingClass()
@ -34,6 +54,13 @@ PinMappingClass::PinMappingClass()
_pinMapping.eth_mdio = ETH_PHY_MDIO;
_pinMapping.eth_type = ETH_PHY_TYPE;
_pinMapping.eth_clk_mode = ETH_CLK_MODE;
_pinMapping.display_type = DISPLAY_TYPE;
_pinMapping.display_data = DISPLAY_DATA;
_pinMapping.display_clk = DISPLAY_CLK;
_pinMapping.display_cs = DISPLAY_CS;
_pinMapping.display_reset = DISPLAY_RESET;
}
PinMapping_t& PinMappingClass::get()
@ -80,6 +107,12 @@ bool PinMappingClass::init(const String& deviceMapping)
_pinMapping.eth_type = doc[i]["eth"]["type"] | ETH_PHY_TYPE;
_pinMapping.eth_clk_mode = doc[i]["eth"]["clk_mode"] | ETH_CLK_MODE;
_pinMapping.display_type = doc[i]["display"]["type"] | DISPLAY_TYPE;
_pinMapping.display_data = doc[i]["display"]["data"] | DISPLAY_DATA;
_pinMapping.display_clk = doc[i]["display"]["clk"] | DISPLAY_CLK;
_pinMapping.display_cs = doc[i]["display"]["cs"] | DISPLAY_CS;
_pinMapping.display_reset = doc[i]["display"]["reset"] | DISPLAY_RESET;
return true;
}
}

View File

@ -65,6 +65,7 @@ void setup()
} else {
MessageOutput.print(F("using default config "));
}
const PinMapping_t& pin = PinMapping.get();
MessageOutput.println(F("done"));
// Initialize WiFi
@ -93,7 +94,12 @@ void setup()
// Initialize Display
MessageOutput.print(F("Initialize Display... "));
Display.init(DisplayType_t::SSD1306, SDA, SCL, 255, 255);
Display.init(
static_cast<DisplayType_t>(pin.display_type),
pin.display_data,
pin.display_clk,
pin.display_cs,
pin.display_reset);
MessageOutput.println(F("done"));
// Check for default DTU serial
@ -114,7 +120,6 @@ void setup()
MessageOutput.print(F("Initialize Hoymiles interface... "));
if (PinMapping.isValidNrf24Config()) {
SPIClass* spiClass = new SPIClass(HSPI);
PinMapping_t& pin = PinMapping.get();
spiClass->begin(pin.nrf24_clk, pin.nrf24_miso, pin.nrf24_mosi, pin.nrf24_cs);
Hoymiles.setMessageOutput(&MessageOutput);
Hoymiles.init(spiClass, pin.nrf24_en, pin.nrf24_irq);