diff --git a/lib/lib_display/Adafruit_SSD1351-gemu-1.0/SSD1351.cpp b/lib/lib_display/Adafruit_SSD1351-gemu-1.0/SSD1351.cpp index 891a573d5..274b030b2 100644 --- a/lib/lib_display/Adafruit_SSD1351-gemu-1.0/SSD1351.cpp +++ b/lib/lib_display/Adafruit_SSD1351-gemu-1.0/SSD1351.cpp @@ -22,11 +22,12 @@ const uint16_t ssd1351_colors[]={SSD1351_BLACK,SSD1351_WHITE,SSD1351_RED,SSD1351 SSD1351_LIGHTGREY,SSD1351_DARKGREY,SSD1351_ORANGE,SSD1351_GREENYELLOW,SSD1351_PINK}; // Constructor when using software SPI. All output pins are configurable. -SSD1351::SSD1351(int8_t cs,int8_t mosi,int8_t sclk) : Renderer(SSD1351_WIDTH, SSD1351_HEIGHT) { +SSD1351::SSD1351(int8_t cs,int8_t mosi,int8_t sclk, int8_t dc) : Renderer(SSD1351_WIDTH, SSD1351_HEIGHT) { _cs = cs; _mosi = mosi; _sclk = sclk; _hwspi = 0; + _dc = dc; } #ifndef ESP32 @@ -70,27 +71,30 @@ uint32_t ssd1351_mtdo_prev; void SSD1351::spi_lcd_mode_init(void) { uint32 regvalue; - ssd1351_clock_prev=SPI1CLK; - ssd1351_usr_prev=SPI1U; - ssd1351_usr1_prev=SPI1U1; - ssd1351_usr2_prev=SPI1U2; - ssd1351_spi1c_prev=SPI1C; - ssd1351_spi1p_prev=SPI1P; - //ssd1351_gpmux_prev=GPMUX; - ssd1351_mtdo_prev=READ_PERI_REG(PERIPHS_IO_MUX_MTDO_U); + if (_dc >= 0) { + spis = SPISettings(40000000, MSBFIRST, SPI_MODE0); + } else { + ssd1351_clock_prev=SPI1CLK; + ssd1351_usr_prev=SPI1U; + ssd1351_usr1_prev=SPI1U1; + ssd1351_usr2_prev=SPI1U2; + ssd1351_spi1c_prev=SPI1C; + ssd1351_spi1p_prev=SPI1P; + //ssd1351_gpmux_prev=GPMUX; + ssd1351_mtdo_prev=READ_PERI_REG(PERIPHS_IO_MUX_MTDO_U); - SPI1U = SPIUMOSI | SPIUDUPLEX | SPIUSSE; - SPI1U1=0; - SPI1C = 0; + SPI1U = SPIUMOSI | SPIUDUPLEX | SPIUSSE; + SPI1U1=0; + SPI1C = 0; - //bit9 of PERIPHS_IO_MUX should be cleared when HSPI clock doesn't equal CPU clock - //bit8 of PERIPHS_IO_MUX should be cleared when SPI clock doesn't equal CPU clock + //bit9 of PERIPHS_IO_MUX should be cleared when HSPI clock doesn't equal CPU clock + //bit8 of PERIPHS_IO_MUX should be cleared when SPI clock doesn't equal CPU clock - WRITE_PERI_REG(PERIPHS_IO_MUX, 0x105); //clear bit9 + WRITE_PERI_REG(PERIPHS_IO_MUX, 0x105); //clear bit9 //PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, 2);//configure miso to spi mode - PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, 2);//configure mosi to spi mode - PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, 2);//configure sclk to spi mode - PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, 2);//configure cs to spi mode + PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, 2);//configure mosi to spi mode + PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, 2);//configure sclk to spi mode + PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, 2);//configure cs to spi mode // the current implementation leaves about 1 us between transfers ???? // due to lack of documentation i could not find the reason @@ -98,9 +102,9 @@ void SSD1351::spi_lcd_mode_init(void) { //SET_PERI_REG_MASK(SPI_USER(1), SPI_CS_SETUP|SPI_CS_HOLD|SPI_USR_COMMAND); - SET_PERI_REG_MASK(SPI_USER(1), SPI_USR_COMMAND); + SET_PERI_REG_MASK(SPI_USER(1), SPI_USR_COMMAND); - CLEAR_PERI_REG_MASK(SPI_USER(1), SPI_FLASH_MODE); + CLEAR_PERI_REG_MASK(SPI_USER(1), SPI_FLASH_MODE); // SPI clock=CPU clock/8 => 10 Mhz /* WRITE_PERI_REG(SPI_CLOCK(1), @@ -110,47 +114,58 @@ void SSD1351::spi_lcd_mode_init(void) { ((3&SPI_CLKCNT_L)<= 0) { + SPI.beginTransaction(spis); + } else { + while(READ_PERI_REG(SPI_CMD(1))&SPI_USR); + SPI1CLK=ssd1351_clock; + SPI1U=ssd1351_usr; + SPI1U1=ssd1351_usr1; + SPI1U2=ssd1351_usr2; + SPI1C=ssd1351_spi1c; + SPI1P=ssd1351_spi1p; + //GPMUX=ssd1351_gpmux; + WRITE_PERI_REG(PERIPHS_IO_MUX_MTDO_U,ssd1351_mtdo); + } + ssd131_start = 1; } void SSD1351::stop(void) { if (!ssd131_start) return; - //while(SPI1CMD & SPIBUSY) {} - while(READ_PERI_REG(SPI_CMD(1))&SPI_USR); - SPI1CLK=ssd1351_clock_prev; - SPI1U=ssd1351_usr_prev; - SPI1U1=ssd1351_usr1_prev; - SPI1U2=ssd1351_usr2_prev; - SPI1C=ssd1351_spi1c_prev; - SPI1P=ssd1351_spi1p_prev; - //GPMUX=ssd1351_gpmux_prev; - WRITE_PERI_REG(PERIPHS_IO_MUX_MTDO_U,ssd1351_mtdo_prev); - ssd131_start=0; + + if (_dc >= 0) { + SPI.endTransaction(); + } else { + //while(SPI1CMD & SPIBUSY) {} + while(READ_PERI_REG(SPI_CMD(1))&SPI_USR); + SPI1CLK=ssd1351_clock_prev; + SPI1U=ssd1351_usr_prev; + SPI1U1=ssd1351_usr1_prev; + SPI1U2=ssd1351_usr2_prev; + SPI1C=ssd1351_spi1c_prev; + SPI1P=ssd1351_spi1p_prev; + //GPMUX=ssd1351_gpmux_prev; + WRITE_PERI_REG(PERIPHS_IO_MUX_MTDO_U,ssd1351_mtdo_prev); + } + ssd131_start = 0; } // dc = 0 @@ -158,19 +173,23 @@ void SSD1351::writecommand(uint8_t c) { if (_hwspi) { uint32_t regvalue; uint8_t bytetemp; - bytetemp=(c>>1)&0x7f; - start(); - //#define SPI_USR_COMMAND_BITLEN 0x0000000F //#define SPI_USR_COMMAND_BITLEN_S 28 - - regvalue= ((8&SPI_USR_COMMAND_BITLEN)<= 0) { + digitalWrite(_dc, LOW); + SPI.transfer(c); + } else { + bytetemp = (c >> 1) & 0x7f; + regvalue= ((8&SPI_USR_COMMAND_BITLEN)<>1)|0x80; - start(); - regvalue= ((8&SPI_USR_COMMAND_BITLEN)<= 0) { + digitalWrite(_dc, HIGH); + SPI.transfer(d); + } else { + bytetemp = (d >> 1) | 0x80; + regvalue= ((8&SPI_USR_COMMAND_BITLEN)<>= 1) { + if (_dc >= 0) { + digitalWrite(_dc, dc); WRITE_PERI_REG( PIN_OUT_CLEAR, 1<<_sclk); - if(d&bit) WRITE_PERI_REG( PIN_OUT_SET, 1<<_mosi); + for(uint8_t bit = 0x80; bit; bit >>= 1) { + WRITE_PERI_REG( PIN_OUT_CLEAR, 1<<_sclk); + if(d&bit) WRITE_PERI_REG( PIN_OUT_SET, 1<<_mosi); + else WRITE_PERI_REG( PIN_OUT_CLEAR, 1<<_mosi); + WRITE_PERI_REG( PIN_OUT_SET, 1<<_sclk); + } + } else { + WRITE_PERI_REG( PIN_OUT_CLEAR, 1<<_sclk); + if(dc) WRITE_PERI_REG( PIN_OUT_SET, 1<<_mosi); else WRITE_PERI_REG( PIN_OUT_CLEAR, 1<<_mosi); WRITE_PERI_REG( PIN_OUT_SET, 1<<_sclk); + for(uint8_t bit = 0x80; bit; bit >>= 1) { + WRITE_PERI_REG( PIN_OUT_CLEAR, 1<<_sclk); + if(d&bit) WRITE_PERI_REG( PIN_OUT_SET, 1<<_mosi); + else WRITE_PERI_REG( PIN_OUT_CLEAR, 1<<_mosi); + WRITE_PERI_REG( PIN_OUT_SET, 1<<_sclk); + } } - WRITE_PERI_REG( PIN_OUT_SET, 1<<_cs); + WRITE_PERI_REG( PIN_OUT_SET, 1 << _cs); } - #else // ESP32 section uint8_t ssd131_start; void SSD1351::writedata(uint8_t d) { - fastSPIwrite(d,1); + fastSPIwrite(d, 1); } void SSD1351::writecommand(uint8_t c) { - fastSPIwrite(c,0); + fastSPIwrite(c, 0); } #include "soc/spi_reg.h" @@ -227,12 +262,10 @@ void SSD1351::writecommand(uint8_t c) { #include "esp32-hal.h" #include "soc/spi_struct.h" -SPISettings oled_spiSettings; - // diconnect from spi void SSD1351::start(void) { if (ssd131_start) return; - SPI.beginTransaction(oled_spiSettings); + SPI.beginTransaction(spis); ssd131_start = 1; } @@ -245,21 +278,25 @@ void SSD1351::stop(void) { // since ardunio transferBits ia completely disfunctional // we use our own hardware driver for 9 bit spi -void SSD1351::fastSPIwrite(uint8_t d,uint8_t dc) { +void SSD1351::fastSPIwrite(uint8_t d, uint8_t dc) { + digitalWrite( _cs, LOW); + if (_dc >= 0) { + digitalWrite(_dc, dc); + SPI.transfer(d); + } else { + uint32_t regvalue = d >> 1; + if (dc) regvalue |= 0x80; + else regvalue &= 0x7f; + if (d & 1) regvalue |= 0x8000; - uint32_t regvalue=d>>1; - if (dc) regvalue|=0x80; - else regvalue&=0x7f; - if (d&1) regvalue|=0x8000; - - REG_SET_BIT(SPI_USER_REG(3), SPI_USR_MOSI); - REG_WRITE(SPI_MOSI_DLEN_REG(3), 9 - 1); - uint32_t *dp=(uint32_t*)SPI_W0_REG(3); - *dp=regvalue; - REG_SET_BIT(SPI_CMD_REG(3), SPI_USR); - while (REG_GET_FIELD(SPI_CMD_REG(3), SPI_USR)); - + REG_SET_BIT(SPI_USER_REG(3), SPI_USR_MOSI); + REG_WRITE(SPI_MOSI_DLEN_REG(3), 9 - 1); + uint32_t *dp=(uint32_t*)SPI_W0_REG(3); + *dp = regvalue; + REG_SET_BIT(SPI_CMD_REG(3), SPI_USR); + while (REG_GET_FIELD(SPI_CMD_REG(3), SPI_USR)); + } digitalWrite( _cs, HIGH); } @@ -312,21 +349,26 @@ void SSD1351::begin(void) { pinMode(_mosi, OUTPUT); digitalWrite(_mosi, LOW); + if (_dc >= 0) { + pinMode(_dc, OUTPUT); + digitalWrite(_dc, LOW); + } + #ifndef ESP32 - if ((_sclk==14) && (_mosi==13) && (_cs==15)) { + if ((_sclk == 14) && (_mosi == 13) && (_cs == 15)) { // we use hardware spi - _hwspi=1; + _hwspi = 1; SPI.begin(); spi_lcd_mode_init(); } else { // we must use software spi - _hwspi=0; + _hwspi = 0; } #else - _hwspi=1; - SPI.begin(_sclk,-1,_mosi, -1); - oled_spiSettings = SPISettings(4500000, MSBFIRST, SPI_MODE3); + _hwspi = 1; + SPI.begin(_sclk, -1, _mosi, -1); + spis = SPISettings(4500000, MSBFIRST, SPI_MODE3); #endif const uint8_t *addr = (const uint8_t *)initList; diff --git a/lib/lib_display/Adafruit_SSD1351-gemu-1.0/SSD1351.h b/lib/lib_display/Adafruit_SSD1351-gemu-1.0/SSD1351.h index d9b05ad0f..ad81fc240 100644 --- a/lib/lib_display/Adafruit_SSD1351-gemu-1.0/SSD1351.h +++ b/lib/lib_display/Adafruit_SSD1351-gemu-1.0/SSD1351.h @@ -93,7 +93,7 @@ class SSD1351 : public Renderer { public: - SSD1351(int8_t cs,int8_t mosi,int8_t sclk); + SSD1351(int8_t cs,int8_t mosi,int8_t sclk, int8_t dc); void begin(void); void DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font); @@ -119,10 +119,11 @@ class SSD1351 : public Renderer { private: uint8_t tabcolor; + SPISettings spis; void fastSPIwrite(uint8_t d,uint8_t dc); void start(void); void stop(void); - int8_t _cs, _mosi, _sclk, _hwspi; + int8_t _cs, _mosi, _sclk, _hwspi, _dc; }; diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 5d5c923b5..1232634c0 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index a45e9ea27..885b5581c 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -782,6 +782,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 02eaacc0c..0a529953d 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 5f8a42d78..7372e7ace 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 6d1ecfacf..2f8703296 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index e1b006c62..76001a80f 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 19b9a9ecb..7faf7732a 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index bedcdc94b..d77d60dd2 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -779,6 +779,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index 0a201c9f8..7edab6b21 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 95636505d..3898d6c8b 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index cc5ed8cb5..4a12ed438 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 066510664..db152893a 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 - CS" #define D_SENSOR_EPAPER42_CS "EPaper42 - CS" #define D_SENSOR_SSD1351_CS "SSD1351 - CS" +#define D_SENSOR_SSD1351_DC "SSD1351 - DC" #define D_SENSOR_RA8876_CS "RA8876 - CS" #define D_SENSOR_ST7789_CS "ST7789 - CS" #define D_SENSOR_ST7789_DC "ST7789 - DC" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 2d29d9f83..679e4860f 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 0bc949743..8c626e06c 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index e29ae3442..52fc2a264 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 1d78796da..2612a9b61 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 111cefb87..785ff78a6 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index 68c7d66a3..6966df535 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index fb6e9983d..a6cae93e6 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index b0360781d..b975fd064 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 29c9ec03c..5075803d9 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index ee6414694..7591b0d53 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 898550b21..0da2f4f61 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index 6c9a7c671..292d8eda4 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 3d92dcf30..03059e7c7 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 40abf06f7..c43366aff 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -783,6 +783,7 @@ #define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_SSD1351_CS "SSD1351 CS" +#define D_SENSOR_SSD1351_DC "SSD1351 DC" #define D_SENSOR_RA8876_CS "RA8876 CS" #define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_DC "ST7789 DC" diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 286ebc118..aee95f754 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -151,6 +151,7 @@ enum UserSelectablePins { GPIO_SDM72_TX, GPIO_SDM72_RX, // SDM72 Serial interface GPIO_TM1637CLK, GPIO_TM1637DIO, // TM1637 interface GPIO_PROJECTOR_CTRL_TX, GPIO_PROJECTOR_CTRL_RX, // LCD/DLP Projector Serial Control + GPIO_SSD1351_DC, GPIO_SENSOR_END }; enum ProgramSelectablePins { @@ -322,6 +323,7 @@ const char kSensorNames[] PROGMEM = D_SENSOR_SDM72_TX "|" D_SENSOR_SDM72_RX "|" D_SENSOR_TM1637_CLK "|" D_SENSOR_TM1637_DIO "|" D_SENSOR_PROJECTOR_CTRL_TX "|" D_SENSOR_PROJECTOR_CTRL_RX "|" + D_SENSOR_SSD1351_DC "|" ; const char kSensorNamesFixed[] PROGMEM = @@ -423,6 +425,7 @@ const uint16_t kGpioNiceList[] PROGMEM = { #endif // USE_DISPLAY_EPAPER_42 #ifdef USE_DISPLAY_SSD1351 AGPIO(GPIO_SSD1351_CS), + AGPIO(GPIO_SSD1351_DC), #endif // USE_DISPLAY_SSD1351 #ifdef USE_DISPLAY_RA8876 AGPIO(GPIO_RA8876_CS), @@ -766,7 +769,6 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_PROJECTOR_CTRL_TX), // LCD/DLP Projector Serial Control AGPIO(GPIO_PROJECTOR_CTRL_RX), // LCD/DLP Projector Serial Control #endif - /*-------------------------------------------------------------------------------------------*\ * ESP32 specifics \*-------------------------------------------------------------------------------------------*/ diff --git a/tasmota/xdsp_09_SSD1351.ino b/tasmota/xdsp_09_SSD1351.ino index 0a1957e3a..2b6301449 100644 --- a/tasmota/xdsp_09_SSD1351.ino +++ b/tasmota/xdsp_09_SSD1351.ino @@ -61,10 +61,10 @@ void SSD1351_InitDriver() { // init renderer if (TasmotaGlobal.soft_spi_enabled){ - ssd1351 = new SSD1351(Pin(GPIO_SSD1351_CS), Pin(GPIO_SSPI_MOSI), Pin(GPIO_SSPI_SCLK)); + ssd1351 = new SSD1351(Pin(GPIO_SSD1351_CS), Pin(GPIO_SSPI_MOSI), Pin(GPIO_SSPI_SCLK), Pin(GPIO_SSD1351_DC)); } else if (TasmotaGlobal.spi_enabled) { - ssd1351 = new SSD1351(Pin(GPIO_SSD1351_CS), Pin(GPIO_SPI_MOSI), Pin(GPIO_SPI_CLK)); + ssd1351 = new SSD1351(Pin(GPIO_SSD1351_CS), Pin(GPIO_SPI_MOSI), Pin(GPIO_SPI_CLK), Pin(GPIO_SSD1351_DC)); } delay(100);