TuyaMCU: handle WIFI_SELECT / WIFI_RESET without soft-locking MCU (#24063)
* TuyaMCU: send WIFI_STATE ramp after WIFI_SELECT/WIFI_RESET to satisfy MCU pairing logic When WIFI_SELECT or WIFI_RESET is received, this sends a WIFI_STATE ramp 0x00/0x01 up to 0x05 to simulate successful WiFi connection up to 'cloud connected' to exit pairing mode and reallow Tasmota control of the MCU * Update tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v1.ino Co-authored-by: Erik Kunze <eku@users.noreply.github.com> --------- Co-authored-by: Erik Kunze <eku@users.noreply.github.com>
This commit is contained in:
parent
09cc100e8a
commit
890b3b645c
@ -1097,12 +1097,32 @@ void TuyaNormalPowerModePacketProcess(void)
|
||||
case TUYA_CMD_STATE:
|
||||
TuyaProcessStatePacket();
|
||||
break;
|
||||
|
||||
case TUYA_CMD_WIFI_RESET:
|
||||
case TUYA_CMD_WIFI_SELECT:
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: RX WiFi Reset"));
|
||||
case TUYA_CMD_WIFI_RESET: {
|
||||
const bool is_select = (Tuya.buffer[3] == TUYA_CMD_WIFI_SELECT);
|
||||
const uint16_t payload_len = ((uint16_t)Tuya.buffer[4] << 8) | Tuya.buffer[5];
|
||||
|
||||
// Establish pairing mode - WIFI_RESET is assumed to be AP mode
|
||||
uint8_t first = 0x01;
|
||||
if (is_select && !(payload_len >= 1 && Tuya.buffer[6] == 0x01))
|
||||
first = 0x00;
|
||||
}
|
||||
|
||||
// Send ACK, then WIFI_STATE ramp up to cloud connected to re-enable MCU control
|
||||
TuyaSendCmd(is_select ? TUYA_CMD_WIFI_SELECT : TUYA_CMD_WIFI_RESET);
|
||||
uint8_t st = first; TuyaSendCmd(TUYA_CMD_WIFI_STATE, &st, 1);
|
||||
st = 0x02; TuyaSendCmd(TUYA_CMD_WIFI_STATE, &st, 1);
|
||||
st = 0x03; TuyaSendCmd(TUYA_CMD_WIFI_STATE, &st, 1);
|
||||
st = 0x04; TuyaSendCmd(TUYA_CMD_WIFI_STATE, &st, 1);
|
||||
|
||||
AddLog(LOG_LEVEL_INFO, PSTR("TYA: %s received (%s), sent WIFI_STATE ramp"),
|
||||
is_select ? PSTR("WIFI_SELECT") : PSTR("WIFI_RESET"),
|
||||
(first == 0x01) ? "AP" : "EZ");
|
||||
|
||||
// Now actually reset Tasmota WiFi
|
||||
TuyaResetWifi();
|
||||
break;
|
||||
}
|
||||
|
||||
case TUYA_CMD_WIFI_STATE:
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: RX WiFi LED set ACK"));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user