ssd1351 support for 4 wire spi

This commit is contained in:
gemu2015 2021-02-28 16:09:57 +01:00
parent 947c8ccf0f
commit 5f75f4619c
30 changed files with 192 additions and 108 deletions

View File

@ -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}; SSD1351_LIGHTGREY,SSD1351_DARKGREY,SSD1351_ORANGE,SSD1351_GREENYELLOW,SSD1351_PINK};
// Constructor when using software SPI. All output pins are configurable. // 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; _cs = cs;
_mosi = mosi; _mosi = mosi;
_sclk = sclk; _sclk = sclk;
_hwspi = 0; _hwspi = 0;
_dc = dc;
} }
#ifndef ESP32 #ifndef ESP32
@ -70,6 +71,9 @@ uint32_t ssd1351_mtdo_prev;
void SSD1351::spi_lcd_mode_init(void) { void SSD1351::spi_lcd_mode_init(void) {
uint32 regvalue; uint32 regvalue;
if (_dc >= 0) {
spis = SPISettings(40000000, MSBFIRST, SPI_MODE0);
} else {
ssd1351_clock_prev=SPI1CLK; ssd1351_clock_prev=SPI1CLK;
ssd1351_usr_prev=SPI1U; ssd1351_usr_prev=SPI1U;
ssd1351_usr1_prev=SPI1U1; ssd1351_usr1_prev=SPI1U1;
@ -120,12 +124,17 @@ void SSD1351::spi_lcd_mode_init(void) {
ssd1351_spi1p=SPI1P; ssd1351_spi1p=SPI1P;
//ssd1351_gpmux=GPMUX; //ssd1351_gpmux=GPMUX;
ssd1351_mtdo=READ_PERI_REG(PERIPHS_IO_MUX_MTDO_U); ssd1351_mtdo=READ_PERI_REG(PERIPHS_IO_MUX_MTDO_U);
}
ssd131_start = 0; ssd131_start = 0;
} }
void SSD1351::start(void) { void SSD1351::start(void) {
if (ssd131_start) return; if (ssd131_start) return;
//while(SPI1CMD & SPIBUSY) {} //while(SPI1CMD & SPIBUSY) {}
if (_dc >= 0) {
SPI.beginTransaction(spis);
} else {
while(READ_PERI_REG(SPI_CMD(1))&SPI_USR); while(READ_PERI_REG(SPI_CMD(1))&SPI_USR);
SPI1CLK=ssd1351_clock; SPI1CLK=ssd1351_clock;
SPI1U=ssd1351_usr; SPI1U=ssd1351_usr;
@ -135,11 +144,16 @@ void SSD1351::start(void) {
SPI1P=ssd1351_spi1p; SPI1P=ssd1351_spi1p;
//GPMUX=ssd1351_gpmux; //GPMUX=ssd1351_gpmux;
WRITE_PERI_REG(PERIPHS_IO_MUX_MTDO_U,ssd1351_mtdo); WRITE_PERI_REG(PERIPHS_IO_MUX_MTDO_U,ssd1351_mtdo);
}
ssd131_start = 1; ssd131_start = 1;
} }
void SSD1351::stop(void) { void SSD1351::stop(void) {
if (!ssd131_start) return; if (!ssd131_start) return;
if (_dc >= 0) {
SPI.endTransaction();
} else {
//while(SPI1CMD & SPIBUSY) {} //while(SPI1CMD & SPIBUSY) {}
while(READ_PERI_REG(SPI_CMD(1))&SPI_USR); while(READ_PERI_REG(SPI_CMD(1))&SPI_USR);
SPI1CLK=ssd1351_clock_prev; SPI1CLK=ssd1351_clock_prev;
@ -150,6 +164,7 @@ void SSD1351::stop(void) {
SPI1P=ssd1351_spi1p_prev; SPI1P=ssd1351_spi1p_prev;
//GPMUX=ssd1351_gpmux_prev; //GPMUX=ssd1351_gpmux_prev;
WRITE_PERI_REG(PERIPHS_IO_MUX_MTDO_U,ssd1351_mtdo_prev); WRITE_PERI_REG(PERIPHS_IO_MUX_MTDO_U,ssd1351_mtdo_prev);
}
ssd131_start = 0; ssd131_start = 0;
} }
@ -158,19 +173,23 @@ void SSD1351::writecommand(uint8_t c) {
if (_hwspi) { if (_hwspi) {
uint32_t regvalue; uint32_t regvalue;
uint8_t bytetemp; uint8_t bytetemp;
bytetemp=(c>>1)&0x7f;
start(); start();
//#define SPI_USR_COMMAND_BITLEN 0x0000000F //#define SPI_USR_COMMAND_BITLEN 0x0000000F
//#define SPI_USR_COMMAND_BITLEN_S 28 //#define SPI_USR_COMMAND_BITLEN_S 28
if (_dc >= 0) {
digitalWrite(_dc, LOW);
SPI.transfer(c);
} else {
bytetemp = (c >> 1) & 0x7f;
regvalue= ((8&SPI_USR_COMMAND_BITLEN)<<SPI_USR_COMMAND_BITLEN_S)|((uint32)bytetemp); //configure transmission variable,9bit transmission length and first 8 command bit regvalue= ((8&SPI_USR_COMMAND_BITLEN)<<SPI_USR_COMMAND_BITLEN_S)|((uint32)bytetemp); //configure transmission variable,9bit transmission length and first 8 command bit
if (c & 0x01) regvalue |= BIT15; //write the 9th bit if (c & 0x01) regvalue |= BIT15; //write the 9th bit
while (READ_PERI_REG(SPI_CMD(1)) & SPI_USR); //waiting for spi module available while (READ_PERI_REG(SPI_CMD(1)) & SPI_USR); //waiting for spi module available
WRITE_PERI_REG(SPI_USER2(1), regvalue); //write command and command length into spi reg WRITE_PERI_REG(SPI_USER2(1), regvalue); //write command and command length into spi reg
SET_PERI_REG_MASK(SPI_CMD(1), SPI_USR); //transmission start SET_PERI_REG_MASK(SPI_CMD(1), SPI_USR); //transmission start
} else fastSPIwrite(c,0); }
} else {
fastSPIwrite(c, 0);
}
} }
// dc = 1 // dc = 1
@ -178,37 +197,53 @@ void SSD1351::writedata(uint8_t d) {
if (_hwspi) { if (_hwspi) {
uint32_t regvalue; uint32_t regvalue;
uint8_t bytetemp; uint8_t bytetemp;
bytetemp=(d>>1)|0x80;
start(); start();
if (_dc >= 0) {
digitalWrite(_dc, HIGH);
SPI.transfer(d);
} else {
bytetemp = (d >> 1) | 0x80;
regvalue= ((8&SPI_USR_COMMAND_BITLEN)<<SPI_USR_COMMAND_BITLEN_S)|((uint32)bytetemp); //configure transmission variable,9bit transmission length and first 8 command bit regvalue= ((8&SPI_USR_COMMAND_BITLEN)<<SPI_USR_COMMAND_BITLEN_S)|((uint32)bytetemp); //configure transmission variable,9bit transmission length and first 8 command bit
if(d&0x01) regvalue|=BIT15; //write the 9th bit if(d&0x01) regvalue|=BIT15; //write the 9th bit
while(READ_PERI_REG(SPI_CMD(1))&SPI_USR); //waiting for spi module available while(READ_PERI_REG(SPI_CMD(1))&SPI_USR); //waiting for spi module available
WRITE_PERI_REG(SPI_USER2(1), regvalue); //write command and command length into spi reg WRITE_PERI_REG(SPI_USER2(1), regvalue); //write command and command length into spi reg
SET_PERI_REG_MASK(SPI_CMD(1), SPI_USR); //transmission start SET_PERI_REG_MASK(SPI_CMD(1), SPI_USR); //transmission start
} else fastSPIwrite(d,1); }
} else {
fastSPIwrite(d, 1);
}
} }
void ICACHE_RAM_ATTR SSD1351::fastSPIwrite(uint8_t d, uint8_t dc) { void ICACHE_RAM_ATTR SSD1351::fastSPIwrite(uint8_t d, uint8_t dc) {
WRITE_PERI_REG( PIN_OUT_CLEAR, 1 << _cs); WRITE_PERI_REG( PIN_OUT_CLEAR, 1 << _cs);
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);
if (_dc >= 0) {
digitalWrite(_dc, dc);
WRITE_PERI_REG( PIN_OUT_CLEAR, 1<<_sclk);
for(uint8_t bit = 0x80; bit; bit >>= 1) { for(uint8_t bit = 0x80; bit; bit >>= 1) {
WRITE_PERI_REG( PIN_OUT_CLEAR, 1<<_sclk); WRITE_PERI_REG( PIN_OUT_CLEAR, 1<<_sclk);
if(d&bit) WRITE_PERI_REG( PIN_OUT_SET, 1<<_mosi); if(d&bit) WRITE_PERI_REG( PIN_OUT_SET, 1<<_mosi);
else WRITE_PERI_REG( PIN_OUT_CLEAR, 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<<_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 #else
// ESP32 section // ESP32 section
uint8_t ssd131_start; uint8_t ssd131_start;
@ -227,12 +262,10 @@ void SSD1351::writecommand(uint8_t c) {
#include "esp32-hal.h" #include "esp32-hal.h"
#include "soc/spi_struct.h" #include "soc/spi_struct.h"
SPISettings oled_spiSettings;
// diconnect from spi // diconnect from spi
void SSD1351::start(void) { void SSD1351::start(void) {
if (ssd131_start) return; if (ssd131_start) return;
SPI.beginTransaction(oled_spiSettings); SPI.beginTransaction(spis);
ssd131_start = 1; ssd131_start = 1;
} }
@ -246,8 +279,12 @@ void SSD1351::stop(void) {
// since ardunio transferBits ia completely disfunctional // since ardunio transferBits ia completely disfunctional
// we use our own hardware driver for 9 bit spi // 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);
digitalWrite( _cs, LOW);
if (_dc >= 0) {
digitalWrite(_dc, dc);
SPI.transfer(d);
} else {
uint32_t regvalue = d >> 1; uint32_t regvalue = d >> 1;
if (dc) regvalue |= 0x80; if (dc) regvalue |= 0x80;
else regvalue &= 0x7f; else regvalue &= 0x7f;
@ -259,7 +296,7 @@ void SSD1351::fastSPIwrite(uint8_t d,uint8_t dc) {
*dp = regvalue; *dp = regvalue;
REG_SET_BIT(SPI_CMD_REG(3), SPI_USR); REG_SET_BIT(SPI_CMD_REG(3), SPI_USR);
while (REG_GET_FIELD(SPI_CMD_REG(3), SPI_USR)); while (REG_GET_FIELD(SPI_CMD_REG(3), SPI_USR));
}
digitalWrite( _cs, HIGH); digitalWrite( _cs, HIGH);
} }
@ -312,6 +349,11 @@ void SSD1351::begin(void) {
pinMode(_mosi, OUTPUT); pinMode(_mosi, OUTPUT);
digitalWrite(_mosi, LOW); digitalWrite(_mosi, LOW);
if (_dc >= 0) {
pinMode(_dc, OUTPUT);
digitalWrite(_dc, LOW);
}
#ifndef ESP32 #ifndef ESP32
if ((_sclk == 14) && (_mosi == 13) && (_cs == 15)) { if ((_sclk == 14) && (_mosi == 13) && (_cs == 15)) {
@ -326,7 +368,7 @@ void SSD1351::begin(void) {
#else #else
_hwspi = 1; _hwspi = 1;
SPI.begin(_sclk, -1, _mosi, -1); SPI.begin(_sclk, -1, _mosi, -1);
oled_spiSettings = SPISettings(4500000, MSBFIRST, SPI_MODE3); spis = SPISettings(4500000, MSBFIRST, SPI_MODE3);
#endif #endif
const uint8_t *addr = (const uint8_t *)initList; const uint8_t *addr = (const uint8_t *)initList;

View File

@ -93,7 +93,7 @@ class SSD1351 : public Renderer {
public: 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 begin(void);
void DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font); void DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font);
@ -119,10 +119,11 @@ class SSD1351 : public Renderer {
private: private:
uint8_t tabcolor; uint8_t tabcolor;
SPISettings spis;
void fastSPIwrite(uint8_t d,uint8_t dc); void fastSPIwrite(uint8_t d,uint8_t dc);
void start(void); void start(void);
void stop(void); void stop(void);
int8_t _cs, _mosi, _sclk, _hwspi; int8_t _cs, _mosi, _sclk, _hwspi, _dc;
}; };

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -782,6 +782,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -779,6 +779,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 - CS" #define D_SENSOR_EPAPER29_CS "EPaper29 - CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 - CS" #define D_SENSOR_EPAPER42_CS "EPaper42 - CS"
#define D_SENSOR_SSD1351_CS "SSD1351 - 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_RA8876_CS "RA8876 - CS"
#define D_SENSOR_ST7789_CS "ST7789 - CS" #define D_SENSOR_ST7789_CS "ST7789 - CS"
#define D_SENSOR_ST7789_DC "ST7789 - DC" #define D_SENSOR_ST7789_DC "ST7789 - DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -783,6 +783,7 @@
#define D_SENSOR_EPAPER29_CS "EPaper29 CS" #define D_SENSOR_EPAPER29_CS "EPaper29 CS"
#define D_SENSOR_EPAPER42_CS "EPaper42 CS" #define D_SENSOR_EPAPER42_CS "EPaper42 CS"
#define D_SENSOR_SSD1351_CS "SSD1351 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_RA8876_CS "RA8876 CS"
#define D_SENSOR_ST7789_CS "ST7789 CS" #define D_SENSOR_ST7789_CS "ST7789 CS"
#define D_SENSOR_ST7789_DC "ST7789 DC" #define D_SENSOR_ST7789_DC "ST7789 DC"

View File

@ -151,6 +151,7 @@ enum UserSelectablePins {
GPIO_SDM72_TX, GPIO_SDM72_RX, // SDM72 Serial interface GPIO_SDM72_TX, GPIO_SDM72_RX, // SDM72 Serial interface
GPIO_TM1637CLK, GPIO_TM1637DIO, // TM1637 interface GPIO_TM1637CLK, GPIO_TM1637DIO, // TM1637 interface
GPIO_PROJECTOR_CTRL_TX, GPIO_PROJECTOR_CTRL_RX, // LCD/DLP Projector Serial Control GPIO_PROJECTOR_CTRL_TX, GPIO_PROJECTOR_CTRL_RX, // LCD/DLP Projector Serial Control
GPIO_SSD1351_DC,
GPIO_SENSOR_END }; GPIO_SENSOR_END };
enum ProgramSelectablePins { enum ProgramSelectablePins {
@ -322,6 +323,7 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_SDM72_TX "|" D_SENSOR_SDM72_RX "|" D_SENSOR_SDM72_TX "|" D_SENSOR_SDM72_RX "|"
D_SENSOR_TM1637_CLK "|" D_SENSOR_TM1637_DIO "|" D_SENSOR_TM1637_CLK "|" D_SENSOR_TM1637_DIO "|"
D_SENSOR_PROJECTOR_CTRL_TX "|" D_SENSOR_PROJECTOR_CTRL_RX "|" D_SENSOR_PROJECTOR_CTRL_TX "|" D_SENSOR_PROJECTOR_CTRL_RX "|"
D_SENSOR_SSD1351_DC "|"
; ;
const char kSensorNamesFixed[] PROGMEM = const char kSensorNamesFixed[] PROGMEM =
@ -423,6 +425,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#endif // USE_DISPLAY_EPAPER_42 #endif // USE_DISPLAY_EPAPER_42
#ifdef USE_DISPLAY_SSD1351 #ifdef USE_DISPLAY_SSD1351
AGPIO(GPIO_SSD1351_CS), AGPIO(GPIO_SSD1351_CS),
AGPIO(GPIO_SSD1351_DC),
#endif // USE_DISPLAY_SSD1351 #endif // USE_DISPLAY_SSD1351
#ifdef USE_DISPLAY_RA8876 #ifdef USE_DISPLAY_RA8876
AGPIO(GPIO_RA8876_CS), 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_TX), // LCD/DLP Projector Serial Control
AGPIO(GPIO_PROJECTOR_CTRL_RX), // LCD/DLP Projector Serial Control AGPIO(GPIO_PROJECTOR_CTRL_RX), // LCD/DLP Projector Serial Control
#endif #endif
/*-------------------------------------------------------------------------------------------*\ /*-------------------------------------------------------------------------------------------*\
* ESP32 specifics * ESP32 specifics
\*-------------------------------------------------------------------------------------------*/ \*-------------------------------------------------------------------------------------------*/

View File

@ -59,12 +59,25 @@ void SSD1351_InitDriver() {
fg_color = SSD1351_WHITE; fg_color = SSD1351_WHITE;
bg_color = SSD1351_BLACK; bg_color = SSD1351_BLACK;
#ifdef SSD1351_DC
int8_t dcpin = SSD1351_DC;
#else
int8_t dcpin = -1;
#endif
#ifdef GPIO_SSD1351_DC
if (PinUsed(GPIO_SSD1351_DC)) {
dcpin = Pin(GPIO_SSD1351_DC);
}
#endif
// init renderer // init renderer
if (TasmotaGlobal.soft_spi_enabled){ 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), dcpin);
} }
else if (TasmotaGlobal.spi_enabled) { 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), dcpin);
} }
delay(100); delay(100);