mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-26 04:06:34 +00:00
Fix adding virtual switches
This commit is contained in:
parent
fcec5a5b7b
commit
31f5b79bf8
@ -74,13 +74,9 @@ void SwitchSetVirtualPinState(uint32_t index, uint32_t state) {
|
|||||||
bitWrite(Switch.virtual_pin, index, state);
|
bitWrite(Switch.virtual_pin, index, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SwitchSetState(uint32_t index, uint32_t state) {
|
uint8_t SwitchLastState(uint32_t index) {
|
||||||
// Set debounced pin state to be used by late detected switches
|
// Get last state
|
||||||
if (!bitRead(Switch.used, index)) {
|
return Switch.last_state[index];
|
||||||
bitSet(Switch.used, index);
|
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("SWT: Add vSwitch%d, State %d"), index +1, state);
|
|
||||||
}
|
|
||||||
Switch.debounced_state[index] = state;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t SwitchGetState(uint32_t index) {
|
uint8_t SwitchGetState(uint32_t index) {
|
||||||
@ -88,9 +84,17 @@ uint8_t SwitchGetState(uint32_t index) {
|
|||||||
return Switch.debounced_state[index];
|
return Switch.debounced_state[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t SwitchLastState(uint32_t index) {
|
void SwitchSetState(uint32_t index, uint32_t state) {
|
||||||
// Get last state
|
// Set debounced pin state to be used by late detected switches
|
||||||
return Switch.last_state[index];
|
if (!bitRead(Switch.used, index)) {
|
||||||
|
for (uint32_t i = 0; i <= index; i++) {
|
||||||
|
if (!bitRead(Switch.used, i)) {
|
||||||
|
bitSet(Switch.used, i);
|
||||||
|
AddLog(LOG_LEVEL_DEBUG, PSTR("SWT: Add vSwitch%d, State %d"), i +1, Switch.debounced_state[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Switch.debounced_state[index] = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------------------*/
|
||||||
|
@ -848,10 +848,11 @@ void TuyaProcessStatePacket(void) {
|
|||||||
if (Tuya.buffer[dpidStart + 4]) { PowerOff = true; }
|
if (Tuya.buffer[dpidStart + 4]) { PowerOff = true; }
|
||||||
}
|
}
|
||||||
} else if (fnId >= TUYA_MCU_FUNC_SWT1 && fnId <= TUYA_MCU_FUNC_SWT4) {
|
} else if (fnId >= TUYA_MCU_FUNC_SWT1 && fnId <= TUYA_MCU_FUNC_SWT4) {
|
||||||
uint32_t switch_state = SwitchGetState(fnId - TUYA_MCU_FUNC_SWT1);
|
uint32_t switch_index = fnId - TUYA_MCU_FUNC_SWT1;
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: RX Switch-%d --> MCU State: %d Current State:%d"),fnId - TUYA_MCU_FUNC_SWT1 + 1,Tuya.buffer[dpidStart + 4], switch_state);
|
uint32_t switch_state = SwitchGetState(switch_index);
|
||||||
|
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: RX Switch-%d --> MCU State: %d Current State:%d"), switch_index +1, Tuya.buffer[dpidStart + 4], switch_state);
|
||||||
if (switch_state != Tuya.buffer[dpidStart + 4]) {
|
if (switch_state != Tuya.buffer[dpidStart + 4]) {
|
||||||
SwitchSetState(fnId - TUYA_MCU_FUNC_SWT1, Tuya.buffer[dpidStart + 4]);
|
SwitchSetState(switch_index, Tuya.buffer[dpidStart + 4]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (PowerOff) { Tuya.ignore_dimmer_cmd_timeout = millis() + 250; }
|
if (PowerOff) { Tuya.ignore_dimmer_cmd_timeout = millis() + 250; }
|
||||||
|
@ -1639,10 +1639,11 @@ void TuyaProcessRxedDP(uint8_t dpid, uint8_t type, uint8_t *data, int dpDataLen)
|
|||||||
if (value) { PowerOff = true; }
|
if (value) { PowerOff = true; }
|
||||||
}
|
}
|
||||||
} else if (fnId >= TUYA_MCU_FUNC_SWT1 && fnId <= TUYA_MCU_FUNC_SWT4) {
|
} else if (fnId >= TUYA_MCU_FUNC_SWT1 && fnId <= TUYA_MCU_FUNC_SWT4) {
|
||||||
uint32_t switch_state = SwitchGetState(fnId - TUYA_MCU_FUNC_SWT1);
|
uint32_t switch_index = fnId - TUYA_MCU_FUNC_SWT1;
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("T:fn%d Switch%d --> M%d T%d"),fnId, fnId - TUYA_MCU_FUNC_SWT1 + 1, value, switch_state);
|
uint32_t switch_state = SwitchGetState(switch_index);
|
||||||
|
AddLog(LOG_LEVEL_DEBUG, PSTR("T:fn%d Switch%d --> M%d T%d"), fnId, switch_index +1, value, switch_state);
|
||||||
if (switch_state != value) {
|
if (switch_state != value) {
|
||||||
SwitchSetState(fnId - TUYA_MCU_FUNC_SWT1, value);
|
SwitchSetState(switch_index, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//if (PowerOff) { pTuya->ignore_dimmer_cmd_timeout = millis() + 250; }
|
//if (PowerOff) { pTuya->ignore_dimmer_cmd_timeout = millis() + 250; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user