Fix Shelly Pro 4PM power on reset

This commit is contained in:
Theo Arends 2023-01-24 12:04:30 +01:00
parent 36c8ae98da
commit ecac466e23
1 changed files with 6 additions and 4 deletions

View File

@ -240,7 +240,8 @@ bool ShellyProAddButton(void) {
if (SPro.button_offset < 0) { SPro.button_offset = XdrvMailbox.index; }
uint32_t index = XdrvMailbox.index - SPro.button_offset;
if (index > 2) { return false; } // Support three buttons
uint32_t state = SP4Mcp23S17DigitalRead(sp4_button_pin[index]);
uint32_t state = SP4Mcp23S17DigitalRead(sp4_button_pin[index]); // 0 on power on, 1 on restart
state = 1; // Force to off on power on
bitWrite(SPro.input_state, sp4_button_pin[index], state);
XdrvMailbox.index = state;
return true;
@ -251,7 +252,7 @@ bool ShellyProAddSwitch(void) {
if (SPro.switch_offset < 0) { SPro.switch_offset = XdrvMailbox.index; }
uint32_t index = XdrvMailbox.index - SPro.switch_offset;
if (index > 3) { return false; } // Support four switches
uint32_t state = SP4Mcp23S17DigitalRead(sp4_switch_pin[index]);
uint32_t state = SP4Mcp23S17DigitalRead(sp4_switch_pin[index]); // 0 on power on and restart
bitWrite(SPro.input_state, sp4_switch_pin[index], state);
XdrvMailbox.index = state ^1; // Invert
return true;
@ -261,11 +262,12 @@ void ShellyProUpdateIsr(void) {
/*
The goal if this function is to minimize SPI and SetVirtualPinState calls
*/
uint32_t input_state = SP4Mcp23S17Read16(SP4_MCP23S17_INTCAPA); // Read intcap and clear interrupt
input_state &= 0x806F; // Only test input bits
// AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Input detected %04X, was %04X"), input_state, SPro.input_state);
// AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Input from %04X to %04X"), SPro.input_state, input_state);
if (TasmotaGlobal.uptime < 3) { return; } // Flush interrupt for 3 seconds after poweron
uint32_t mask = 1;
for (uint32_t j = 0; j < 16; j++) {