Removed the need for SPI for TM1637 to work

This commit is contained in:
Ajith Vasudevan 2021-02-22 15:12:48 +05:30
parent c5f79aa532
commit 75699fe203
4 changed files with 20 additions and 6 deletions

View File

@ -1678,9 +1678,7 @@ void GpioInit(void)
ValidSpiPinUsed(GPIO_ST7789_DC) || // ST7789 CS may be omitted so chk DC too ValidSpiPinUsed(GPIO_ST7789_DC) || // ST7789 CS may be omitted so chk DC too
ValidSpiPinUsed(GPIO_ST7789_CS) || ValidSpiPinUsed(GPIO_ST7789_CS) ||
(ValidSpiPinUsed(GPIO_SSD1331_CS) && ValidSpiPinUsed(GPIO_SSD1331_DC)) || (ValidSpiPinUsed(GPIO_SSD1331_CS) && ValidSpiPinUsed(GPIO_SSD1331_DC)) ||
ValidSpiPinUsed(GPIO_SDCARD_CS) || ValidSpiPinUsed(GPIO_SDCARD_CS)
(ValidSpiPinUsed(GPIO_TM1637CLK) && ValidSpiPinUsed(GPIO_TM1637DIO)) ||
(ValidSpiPinUsed(GPIO_TM1638CLK) && ValidSpiPinUsed(GPIO_TM1638DIO) && ValidSpiPinUsed(GPIO_TM1638STB))
); );
// If SPI_CS and/or SPI_DC is used they must be valid // If SPI_CS and/or SPI_DC is used they must be valid
TasmotaGlobal.spi_enabled = (valid_cs) ? SPI_MOSI_MISO : SPI_NONE; TasmotaGlobal.spi_enabled = (valid_cs) ? SPI_MOSI_MISO : SPI_NONE;

View File

@ -147,6 +147,7 @@ struct {
bool module_changed; // Indicate module changed since last restart bool module_changed; // Indicate module changed since last restart
bool wifi_stay_asleep; // Allow sleep only incase of ESP32 BLE bool wifi_stay_asleep; // Allow sleep only incase of ESP32 BLE
bool no_autoexec; // Disable autoexec bool no_autoexec; // Disable autoexec
bool tm1637_enabled; // TM1637 driver enabled
StateBitfield global_state; // Global states (currently Wifi and Mqtt) (8 bits) StateBitfield global_state; // Global states (currently Wifi and Mqtt) (8 bits)
uint8_t spi_enabled; // SPI configured uint8_t spi_enabled; // SPI configured
@ -227,7 +228,9 @@ void setup(void) {
TasmotaGlobal.tele_period = 9999; TasmotaGlobal.tele_period = 9999;
TasmotaGlobal.active_device = 1; TasmotaGlobal.active_device = 1;
TasmotaGlobal.global_state.data = 0xF; // Init global state (wifi_down, mqtt_down) to solve possible network issues TasmotaGlobal.global_state.data = 0xF; // Init global state (wifi_down, mqtt_down) to solve possible network issues
#if defined(USE_DISPLAY) && defined(USE_DISPLAY_TM1637)
TasmotaGlobal.tm1637_enabled = true;
#endif
RtcRebootLoad(); RtcRebootLoad();
if (!RtcRebootValid()) { if (!RtcRebootValid()) {
RtcReboot.fast_reboot_count = 0; RtcReboot.fast_reboot_count = 0;

View File

@ -2779,7 +2779,7 @@ bool Xdrv13(uint8_t function)
{ {
bool result = false; bool result = false;
if ((TasmotaGlobal.i2c_enabled || TasmotaGlobal.spi_enabled || TasmotaGlobal.soft_spi_enabled) && XdspPresent()) { if ((TasmotaGlobal.i2c_enabled || TasmotaGlobal.spi_enabled || TasmotaGlobal.soft_spi_enabled || TasmotaGlobal.tm1637_enabled) && XdspPresent()) {
switch (function) { switch (function) {
case FUNC_PRE_INIT: case FUNC_PRE_INIT:
DisplayInitDriver(); DisplayInitDriver();

View File

@ -17,7 +17,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#if defined(USE_I2C) || defined(USE_SPI) #if defined(USE_I2C) || defined(USE_SPI) || defined(USE_DISPLAY_TM1637)
#ifdef USE_DISPLAY #ifdef USE_DISPLAY
#ifdef XFUNC_PTR_IN_ROM #ifdef XFUNC_PTR_IN_ROM
@ -26,6 +26,8 @@ bool (* const xdsp_func_ptr[])(uint8_t) PROGMEM = { // Display Function Pointe
bool (* const xdsp_func_ptr[])(uint8_t) = { // Display Function Pointers bool (* const xdsp_func_ptr[])(uint8_t) = { // Display Function Pointers
#endif #endif
#if defined(USE_I2C) || defined(USE_SPI)
#ifdef XDSP_01 #ifdef XDSP_01
&Xdsp01, &Xdsp01,
#endif #endif
@ -82,10 +84,18 @@ bool (* const xdsp_func_ptr[])(uint8_t) = { // Display Function Pointers
&Xdsp14, &Xdsp14,
#endif #endif
#endif // #if defined(USE_I2C) || defined(USE_SPI)
#ifdef USE_DISPLAY_TM1637
#ifdef XDSP_15 #ifdef XDSP_15
&Xdsp15, &Xdsp15,
#endif #endif
#endif // USE_DISPLAY_TM1637
#if defined(USE_I2C) || defined(USE_SPI)
#ifdef XDSP_16 #ifdef XDSP_16
&Xdsp16, &Xdsp16,
#endif #endif
@ -153,6 +163,9 @@ bool (* const xdsp_func_ptr[])(uint8_t) = { // Display Function Pointers
#ifdef XDSP_32 #ifdef XDSP_32
&Xdsp32 &Xdsp32
#endif #endif
#endif // #if defined(USE_I2C) || defined(USE_SPI)
}; };
const uint8_t xdsp_present = sizeof(xdsp_func_ptr) / sizeof(xdsp_func_ptr[0]); // Number of drivers found const uint8_t xdsp_present = sizeof(xdsp_func_ptr) / sizeof(xdsp_func_ptr[0]); // Number of drivers found