diff --git a/ESPixelStick/src/output/OutputAPA102Spi.cpp b/ESPixelStick/src/output/OutputAPA102Spi.cpp index b8afc647c..e0b5d2616 100644 --- a/ESPixelStick/src/output/OutputAPA102Spi.cpp +++ b/ESPixelStick/src/output/OutputAPA102Spi.cpp @@ -71,8 +71,7 @@ void c_OutputAPA102Spi::GetConfig (ArduinoJson::JsonObject& jsonConfig) // DEBUG_START; c_OutputAPA102::GetConfig (jsonConfig); - - jsonConfig[CN_clock_pin] = DEFAULT_SPI_CLOCK_GPIO; + Spi.GetConfig(jsonConfig); // DEBUG_END; } // GetConfig @@ -83,6 +82,7 @@ bool c_OutputAPA102Spi::SetConfig (ArduinoJson::JsonObject& jsonConfig) // DEBUG_START; bool response = c_OutputAPA102::SetConfig (jsonConfig); + response |= Spi.SetConfig(jsonConfig); // DEBUG_END; return response; diff --git a/ESPixelStick/src/output/OutputGrinch.cpp b/ESPixelStick/src/output/OutputGrinch.cpp index 8d71eb457..0d75c4e70 100644 --- a/ESPixelStick/src/output/OutputGrinch.cpp +++ b/ESPixelStick/src/output/OutputGrinch.cpp @@ -51,7 +51,6 @@ void c_OutputGrinch::GetConfig (ArduinoJson::JsonObject& jsonConfig) // DEBUG_START; c_OutputCommon::GetConfig (jsonConfig); - jsonConfig[CN_cs_pin] = uint8_t (DataStrobe); jsonConfig[CN_count] = NumberOfGrinchControllers; // DEBUG_END; @@ -92,7 +91,6 @@ bool c_OutputGrinch::SetConfig (ArduinoJson::JsonObject& jsonConfig) // DEBUG_START; bool response = c_OutputCommon::SetConfig (jsonConfig); - response |= setFromJSON (DataStrobe, jsonConfig, CN_cs_pin); response |= setFromJSON (NumberOfGrinchControllers, jsonConfig, CN_count); NumberOfGrinchChannels = NumberOfGrinchControllers * DATA_CHANNELS_PER_GRINCH; diff --git a/ESPixelStick/src/output/OutputGrinch.hpp b/ESPixelStick/src/output/OutputGrinch.hpp index 3896587bb..1a9c4b725 100644 --- a/ESPixelStick/src/output/OutputGrinch.hpp +++ b/ESPixelStick/src/output/OutputGrinch.hpp @@ -51,7 +51,6 @@ class c_OutputGrinch : public c_OutputCommon #define MAX_NUM_SUPPORTED_GRINCHES 4 #define DATA_CHANNELS_PER_GRINCH 64 - gpio_num_t DataStrobe = DEFAULT_SPI_CS_GPIO; private: uint8_t NumberOfGrinchControllers = 1; diff --git a/ESPixelStick/src/output/OutputGrinchSpi.cpp b/ESPixelStick/src/output/OutputGrinchSpi.cpp index 69e5e83f9..fcdf72adb 100644 --- a/ESPixelStick/src/output/OutputGrinchSpi.cpp +++ b/ESPixelStick/src/output/OutputGrinchSpi.cpp @@ -52,7 +52,6 @@ void c_OutputGrinchSpi::Begin () { // DEBUG_START; Spi.Begin (this); - Spi.SetCsPin(DataStrobe); HasBeenInitialized = true; // DEBUG_END; @@ -62,11 +61,15 @@ void c_OutputGrinchSpi::Begin () //---------------------------------------------------------------------------- void c_OutputGrinchSpi::GetConfig (ArduinoJson::JsonObject& jsonConfig) { - // DEBUG_START; + DEBUG_START; c_OutputGrinch::GetConfig (jsonConfig); + Spi.GetConfig (jsonConfig); - // DEBUG_END; + extern void PrettyPrint (JsonObject& jsonStuff, String Name); + PrettyPrint(jsonConfig, "Grinch"); + + DEBUG_END; } // GetConfig //---------------------------------------------------------------------------- @@ -75,6 +78,7 @@ bool c_OutputGrinchSpi::SetConfig (ArduinoJson::JsonObject& jsonConfig) // DEBUG_START; bool response = c_OutputGrinch::SetConfig (jsonConfig); + response |= Spi.SetConfig (jsonConfig); // DEBUG_END; return response; diff --git a/ESPixelStick/src/output/OutputSpi.cpp b/ESPixelStick/src/output/OutputSpi.cpp index 0d22f1e18..36531a197 100644 --- a/ESPixelStick/src/output/OutputSpi.cpp +++ b/ESPixelStick/src/output/OutputSpi.cpp @@ -157,6 +157,35 @@ void c_OutputSpi::Begin (c_OutputPixel* _OutputPixel) } // Begin +//---------------------------------------------------------------------------- +bool c_OutputSpi::SetConfig (ArduinoJson::JsonObject & jsonConfig) +{ + DEBUG_START; + + bool response = true; +/* + response |= setFromJSON(CsPin, jsonConfig, CN_cs_pin); + response |= setFromJSON(DataPin, jsonConfig, CN_data_pin); + response |= setFromJSON(ClockPin, jsonConfig, CN_clock_pin); +*/ + DEBUG_END; + + return response; +} // SetConfig + +//---------------------------------------------------------------------------- +void c_OutputSpi::GetConfig (ArduinoJson::JsonObject & jsonConfig) +{ + DEBUG_START; + + JsonObject SpiConfig = jsonConfig["dataspi"].to(); + SpiConfig[CN_cs_pin] = CsPin; + SpiConfig[CN_data_pin] = DataPin; + SpiConfig[CN_clock_pin] = ClockPin; + + DEBUG_END; +} // GetConfig + //---------------------------------------------------------------------------- bool c_OutputSpi::ISR_MoreDataToSend() { @@ -223,10 +252,10 @@ void c_OutputSpi::SendIntensityData () TransactionToFill.length++; } - if(gpio_num_t(-1) != cs_pin) + if(gpio_num_t(-1) != CsPin) { // turn on the output strobe (latch data) - digitalWrite(cs_pin, LOW); + digitalWrite(CsPin, LOW); } ESP_ERROR_CHECK (spi_device_queue_trans (spi_device_handle, &Transactions[NextTransactionToFill], portMAX_DELAY)); @@ -236,7 +265,7 @@ void c_OutputSpi::SendIntensityData () NextTransactionToFill = 0; } - if(gpio_num_t(-1) != cs_pin) + if(gpio_num_t(-1) != CsPin) { if (!ISR_MoreDataToSend ()) { @@ -244,7 +273,7 @@ void c_OutputSpi::SendIntensityData () spi_device_get_trans_result(spi_device_handle, &pspi_transaction, 100); // turn on the output strobe (latch data) - digitalWrite(cs_pin, HIGH); + digitalWrite(CsPin, HIGH); } } } @@ -280,10 +309,10 @@ bool c_OutputSpi::Poll () StartNewFrame (); - if(gpio_num_t(-1) != cs_pin) + if(gpio_num_t(-1) != CsPin) { // turn on the output strobe (latch data) - pinMode(cs_pin, OUTPUT); + pinMode(CsPin, OUTPUT); } // fill all the available buffers diff --git a/ESPixelStick/src/output/OutputSpi.hpp b/ESPixelStick/src/output/OutputSpi.hpp index d4ccd4af2..99d27461e 100644 --- a/ESPixelStick/src/output/OutputSpi.hpp +++ b/ESPixelStick/src/output/OutputSpi.hpp @@ -49,7 +49,8 @@ class c_OutputSpi void GetDriverName (String& Name) { Name = CN_OutputSpi; } void DataOutputTask (void* pvParameters); void SendIntensityData (); - void SetCsPin(gpio_num_t _cs_pin) {cs_pin = _cs_pin;} + bool SetConfig (ArduinoJson::JsonObject & jsonConfig); + void GetConfig (ArduinoJson::JsonObject & jsonConfig); uint32_t DataTaskcounter = 0; uint32_t DataCbCounter = 0; @@ -70,7 +71,6 @@ class c_OutputSpi uint8_t NumIntensityValuesPerInterrupt = 0; uint8_t NumIntensityBitsPerInterrupt = 0; spi_device_handle_t spi_device_handle = 0; - gpio_num_t cs_pin = gpio_num_t(-1); // uint32_t FrameStartCounter = 0; uint32_t SendIntensityDataCounter = 0; @@ -84,6 +84,7 @@ class c_OutputSpi gpio_num_t DataPin = DEFAULT_SPI_DATA_GPIO; gpio_num_t ClockPin = DEFAULT_SPI_CLOCK_GPIO; + gpio_num_t CsPin = DEFAULT_SPI_CS_GPIO; c_OutputPixel* OutputPixel = nullptr; #if defined(SUPPORT_OutputType_GRINCH) diff --git a/ESPixelStick/src/output/OutputWS2801Spi.cpp b/ESPixelStick/src/output/OutputWS2801Spi.cpp index 39dd15036..9c878f956 100644 --- a/ESPixelStick/src/output/OutputWS2801Spi.cpp +++ b/ESPixelStick/src/output/OutputWS2801Spi.cpp @@ -67,8 +67,7 @@ void c_OutputWS2801Spi::GetConfig (ArduinoJson::JsonObject& jsonConfig) // DEBUG_START; c_OutputWS2801::GetConfig (jsonConfig); - - jsonConfig[CN_clock_pin] = DEFAULT_SPI_CLOCK_GPIO; + Spi.GetConfig(jsonConfig); // DEBUG_END; } // GetConfig @@ -79,6 +78,7 @@ bool c_OutputWS2801Spi::SetConfig (ArduinoJson::JsonObject& jsonConfig) // DEBUG_START; bool response = c_OutputWS2801::SetConfig (jsonConfig); + response |= Spi.SetConfig(jsonConfig); // DEBUG_END; return response; diff --git a/html/grinch.html b/html/grinch.html index a639e88d4..5dce4fd8d 100644 --- a/html/grinch.html +++ b/html/grinch.html @@ -11,4 +11,14 @@
+ + +
+ +
+ + +
+ +
diff --git a/html/script.js b/html/script.js index de4edbced..c3fa990a4 100644 --- a/html/script.js +++ b/html/script.js @@ -1145,7 +1145,9 @@ function ProcessModeConfigurationDataGrinch(GrinchConfig) // console.info("GrinchConfig: " + JSON.stringify(GrinchConfig)); $('#grinch #controller_count' ).val(GrinchConfig.count); - $('#grinch #cs_pin' ).val(GrinchConfig.cs_pin); + $('#grinch #cs_pin' ).val(GrinchConfig.dataspi.cs_pin); + $('#grinch #data_pin' ).val(GrinchConfig.dataspi.data_pin); + $('#grinch #clock_pin' ).val(GrinchConfig.dataspi.clock_pin); } // ProcessModeConfigurationDataGrinch @@ -1717,8 +1719,10 @@ function ExtractChannelConfigFromHtmlPage(JsonConfig, SectionName) { } else if(ChannelConfig.type === "Grinch") { - ChannelConfig.count = $('#grinch #controller_count' ).val(); - ChannelConfig.cs_pin = $('#grinch #cs_pin' ).val(); + ChannelConfig.count = $('#grinch #controller_count' ).val(); + ChannelConfig.dataspi.cs_pin = $('#grinch #cs_pin' ).val(); + ChannelConfig.dataspi.clock_pin = $('#grinch #clock_pin' ).val(); + ChannelConfig.dataspi.data_pin = $('#grinch #data_pin' ).val(); } else { ExtractConfigFromHtmlPages(elementids, modeControlName, ChannelConfig);