diff --git a/lib/Display/DisplayTemplateDriver.cpp b/lib/Display/DisplayTemplateDriver.cpp index d5c595d..64ca870 100644 --- a/lib/Display/DisplayTemplateDriver.cpp +++ b/lib/Display/DisplayTemplateDriver.cpp @@ -30,10 +30,10 @@ void DisplayTemplateDriver::init() { #if defined(ESP32) if (settings.hardware.spi_bus == VSPI){ SPI.end(); - SPI.begin(18, 23, 19, 5); + SPI.begin(18, 23, 19, settings.hardware.getSsPin()); } else if (settings.hardware.spi_bus == HardwareSettings::WAVESHARE_SPI) { SPI.end(); - SPI.begin(13, 12, 14, 15); + SPI.begin(13, 12, 14, settings.hardware.getSsPin()); } #endif diff --git a/lib/Settings/Settings.cpp b/lib/Settings/Settings.cpp index 2341827..2376df8 100644 --- a/lib/Settings/Settings.cpp +++ b/lib/Settings/Settings.cpp @@ -72,6 +72,10 @@ void SettingsCallbackObserver::onConfigurationChanged(const ConfigurationPropert } const uint8_t HardwareSettings::getSsPin() const { + if (this->ss_pin_override != -1) { + return static_cast(this->ss_pin_override); + } + switch (this->spi_bus) { case HSPI: case WAVESHARE_SPI: diff --git a/lib/Settings/Settings.h b/lib/Settings/Settings.h index f345568..3b120e7 100644 --- a/lib/Settings/Settings.h +++ b/lib/Settings/Settings.h @@ -108,6 +108,7 @@ class HardwareSettings : public Configuration { persistentIntVar(dc_pin, EPD_DEFAULT_DC_PIN); persistentIntVar(rst_pin, EPD_DEFAULT_RST_PIN); persistentIntVar(busy_pin, EPD_DEFAULT_BUSY_PIN); + persistentIntVar(ss_pin_override, -1); const uint8_t getSsPin() const; }; diff --git a/web/src/settings/schema/hardware.js b/web/src/settings/schema/hardware.js index 630d115..1956a65 100644 --- a/web/src/settings/schema/hardware.js +++ b/web/src/settings/schema/hardware.js @@ -1,12 +1,14 @@ +const VALID_PINS = [ + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 +]; + export default { key: "hardware", title: "Hardware", definitions: { pin: { type: "integer", - enum: [ - 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 - ] + enum: VALID_PINS } }, properties: { @@ -35,6 +37,16 @@ export default { ], type: "string", default: "HSPI" + }, + "hardware.ss_pin_override": { + $id: "#/properties/hardware.ss_pin_override", + title: "SPI SS Pin Override", + oneOf: [ + { const: -1, title: "default" }, + ...VALID_PINS.map(x => ({const: x, title: String(x)})) + ], + type: "integer", + default: -1 } } }; diff --git a/web/src/settings/ui_schema.js b/web/src/settings/ui_schema.js index a3ea5cd..24da973 100644 --- a/web/src/settings/ui_schema.js +++ b/web/src/settings/ui_schema.js @@ -52,7 +52,8 @@ export default { "hardware.rst_pin": { transformer: parseInt }, - "hardware.spi_bus": { + "hardware.ss_pin_override": { + transformer: parseInt, "ui:help": <>
SPI bus to use. HSPI uses GPIOs 12, 14, 15. VSPI uses 5, 18, 19. See README for more details. @@ -63,6 +64,8 @@ export default {
}, + "hardware.spi_bus": { + }, "web.port": { transformer: parseInt },