mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 19:56:30 +00:00
Fix init order of device drivers (#18124)
This commit is contained in:
parent
37d98bb52b
commit
2b89b7a134
@ -387,7 +387,7 @@ enum LightSubtypes { LST_NONE, LST_SINGLE, LST_COLDWARM, LST_RGB, LST_RGBW, LS
|
|||||||
enum LightTypes { LT_BASIC, LT_PWM1, LT_PWM2, LT_PWM3, LT_PWM4, LT_PWM5, LT_PWM6, LT_PWM7,
|
enum LightTypes { LT_BASIC, LT_PWM1, LT_PWM2, LT_PWM3, LT_PWM4, LT_PWM5, LT_PWM6, LT_PWM7,
|
||||||
LT_NU8, LT_SERIAL1, LT_SERIAL2, LT_RGB, LT_RGBW, LT_RGBWC, LT_NU14, LT_NU15 }; // Do not insert new fields
|
LT_NU8, LT_SERIAL1, LT_SERIAL2, LT_RGB, LT_RGBW, LT_RGBWC, LT_NU14, LT_NU15 }; // Do not insert new fields
|
||||||
|
|
||||||
enum XsnsFunctions { FUNC_SETTINGS_OVERRIDE, FUNC_I2C_INIT, FUNC_PRE_INIT, FUNC_INIT,
|
enum XsnsFunctions { FUNC_SETTINGS_OVERRIDE, FUNC_SETUP_RING1, FUNC_SETUP_RING2, FUNC_PRE_INIT, FUNC_INIT,
|
||||||
FUNC_LOOP, FUNC_SLEEP_LOOP, FUNC_EVERY_50_MSECOND, FUNC_EVERY_100_MSECOND, FUNC_EVERY_200_MSECOND, FUNC_EVERY_250_MSECOND, FUNC_EVERY_SECOND,
|
FUNC_LOOP, FUNC_SLEEP_LOOP, FUNC_EVERY_50_MSECOND, FUNC_EVERY_100_MSECOND, FUNC_EVERY_200_MSECOND, FUNC_EVERY_250_MSECOND, FUNC_EVERY_SECOND,
|
||||||
FUNC_SAVE_SETTINGS, FUNC_SAVE_AT_MIDNIGHT, FUNC_SAVE_BEFORE_RESTART, FUNC_INTERRUPT_STOP, FUNC_INTERRUPT_START,
|
FUNC_SAVE_SETTINGS, FUNC_SAVE_AT_MIDNIGHT, FUNC_SAVE_BEFORE_RESTART, FUNC_INTERRUPT_STOP, FUNC_INTERRUPT_START,
|
||||||
FUNC_AFTER_TELEPERIOD, FUNC_JSON_APPEND, FUNC_WEB_SENSOR, FUNC_WEB_COL_SENSOR,
|
FUNC_AFTER_TELEPERIOD, FUNC_JSON_APPEND, FUNC_WEB_SENSOR, FUNC_WEB_COL_SENSOR,
|
||||||
|
@ -615,7 +615,7 @@ void setup(void) {
|
|||||||
snprintf_P(TasmotaGlobal.mqtt_topic, sizeof(TasmotaGlobal.mqtt_topic), ResolveToken(TasmotaGlobal.mqtt_topic).c_str());
|
snprintf_P(TasmotaGlobal.mqtt_topic, sizeof(TasmotaGlobal.mqtt_topic), ResolveToken(TasmotaGlobal.mqtt_topic).c_str());
|
||||||
|
|
||||||
RtcInit();
|
RtcInit();
|
||||||
GpioInit(); // FUNC_I2C_INIT -> FUNC_MODULE_INIT -> FUNC_LED_LINK
|
GpioInit(); // FUNC_SETUP_RING1 -> FUNC_SETUP_RING2 -> FUNC_MODULE_INIT -> FUNC_LED_LINK
|
||||||
ButtonInit(); // FUNC_ADD_BUTTON
|
ButtonInit(); // FUNC_ADD_BUTTON
|
||||||
SwitchInit(); // FUNC_ADD_SWITCH
|
SwitchInit(); // FUNC_ADD_SWITCH
|
||||||
#ifdef ROTARY_V1
|
#ifdef ROTARY_V1
|
||||||
|
@ -556,6 +556,18 @@ void SetLedLink(uint32_t state) {
|
|||||||
#endif // USE_PWM_DIMMER
|
#endif // USE_PWM_DIMMER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DebugLed(uint32_t mode) {
|
||||||
|
static bool toggle = false;
|
||||||
|
|
||||||
|
if (PinUsed(GPIO_LEDLNK)) {
|
||||||
|
if (2 == mode) {
|
||||||
|
toggle != toggle;
|
||||||
|
mode = toggle;
|
||||||
|
}
|
||||||
|
digitalWrite(Pin(GPIO_LEDLNK), (TasmotaGlobal.ledlnk_inverted) ? !mode : mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SetPulseTimer(uint32_t index, uint32_t time)
|
void SetPulseTimer(uint32_t index, uint32_t time)
|
||||||
{
|
{
|
||||||
TasmotaGlobal.pulse_timer[index] = (time > 111) ? millis() + (1000 * (time - 100)) : (time > 0) ? millis() + (100 * time) : 0L;
|
TasmotaGlobal.pulse_timer[index] = (time > 111) ? millis() + (1000 * (time - 100)) : (time > 0) ? millis() + (100 * time) : 0L;
|
||||||
@ -2193,8 +2205,6 @@ void GpioInit(void)
|
|||||||
#endif
|
#endif
|
||||||
#endif // USE_I2C
|
#endif // USE_I2C
|
||||||
|
|
||||||
XdrvCall(FUNC_I2C_INIT); // Init RTC
|
|
||||||
|
|
||||||
TasmotaGlobal.devices_present = 0;
|
TasmotaGlobal.devices_present = 0;
|
||||||
uint32_t bi_device = 0;
|
uint32_t bi_device = 0;
|
||||||
for (uint32_t i = 0; i < MAX_RELAYS; i++) {
|
for (uint32_t i = 0; i < MAX_RELAYS; i++) {
|
||||||
@ -2212,31 +2222,26 @@ void GpioInit(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XdrvCall(FUNC_SETUP_RING1); // Setup RTC hardware
|
||||||
|
XsnsXdrvCall(FUNC_SETUP_RING2); // Setup hardware supporting virtual switches/buttons/relays
|
||||||
|
|
||||||
TasmotaGlobal.light_type = LT_BASIC; // Use basic PWM control if SetOption15 = 0
|
TasmotaGlobal.light_type = LT_BASIC; // Use basic PWM control if SetOption15 = 0
|
||||||
|
|
||||||
XsnsCall(FUNC_MODULE_INIT);
|
if (XdrvCall(FUNC_MODULE_INIT)) { // Init and claim single module (like tuya, armtronix, ifan, light)
|
||||||
|
|
||||||
if (XdrvCall(FUNC_MODULE_INIT)) {
|
|
||||||
// Serviced
|
// Serviced
|
||||||
}
|
}
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
else if (YTF_IR_BRIDGE == TasmotaGlobal.module_type) {
|
else if (YTF_IR_BRIDGE == TasmotaGlobal.module_type) {
|
||||||
ClaimSerial(); // Stop serial loopback mode
|
ClaimSerial(); // Stop serial loopback mode
|
||||||
// TasmotaGlobal.devices_present = 1;
|
|
||||||
}
|
}
|
||||||
else if (SONOFF_DUAL == TasmotaGlobal.module_type) {
|
else if (SONOFF_DUAL == TasmotaGlobal.module_type) {
|
||||||
TasmotaGlobal.devices_present = 2;
|
UpdateDevicesPresent(2);
|
||||||
SetSerial(19200, TS_SERIAL_8N1);
|
SetSerial(19200, TS_SERIAL_8N1);
|
||||||
}
|
}
|
||||||
else if (CH4 == TasmotaGlobal.module_type) {
|
else if (CH4 == TasmotaGlobal.module_type) {
|
||||||
TasmotaGlobal.devices_present = 4;
|
UpdateDevicesPresent(4);
|
||||||
SetSerial(19200, TS_SERIAL_8N1);
|
SetSerial(19200, TS_SERIAL_8N1);
|
||||||
}
|
}
|
||||||
#ifdef USE_SONOFF_SC
|
|
||||||
else if (SONOFF_SC == TasmotaGlobal.module_type) {
|
|
||||||
SetSerial(19200, TS_SERIAL_8N1);
|
|
||||||
}
|
|
||||||
#endif // USE_SONOFF_SC
|
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
|
|
||||||
GpioInitPwm();
|
GpioInitPwm();
|
||||||
|
@ -644,7 +644,7 @@ bool Xdrv28(uint32_t function) {
|
|||||||
|
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (FUNC_MODULE_INIT == function) {
|
if (FUNC_SETUP_RING2 == function) {
|
||||||
Pcf8574ModuleInit();
|
Pcf8574ModuleInit();
|
||||||
} else if (1 == Pcf8574.mode) {
|
} else if (1 == Pcf8574.mode) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
@ -504,7 +504,7 @@ bool Xdrv56(uint32_t function) {
|
|||||||
}
|
}
|
||||||
#endif // RTC_NTP_SERVER
|
#endif // RTC_NTP_SERVER
|
||||||
|
|
||||||
if (FUNC_I2C_INIT == function) {
|
if (FUNC_SETUP_RING1 == function) {
|
||||||
RtcChipDetect();
|
RtcChipDetect();
|
||||||
}
|
}
|
||||||
else if (RtcChip.detected) {
|
else if (RtcChip.detected) {
|
||||||
|
@ -215,7 +215,7 @@ bool TmAddKey(void) {
|
|||||||
bool Xdrv66(uint32_t function) {
|
bool Xdrv66(uint32_t function) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (FUNC_MODULE_INIT == function) {
|
if (FUNC_SETUP_RING2 == function) {
|
||||||
TmInit();
|
TmInit();
|
||||||
} else if (Tm1638.detected) {
|
} else if (Tm1638.detected) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
@ -783,7 +783,7 @@ bool Xdrv67(uint32_t function) {
|
|||||||
|
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (FUNC_MODULE_INIT == function) {
|
if (FUNC_SETUP_RING2 == function) {
|
||||||
MCP23xModuleInit();
|
MCP23xModuleInit();
|
||||||
} else if (Mcp23x.max_devices) {
|
} else if (Mcp23x.max_devices) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
@ -484,7 +484,7 @@ void ShellyProLedLinkWifiOff(void) {
|
|||||||
bool Xdrv88(uint32_t function) {
|
bool Xdrv88(uint32_t function) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (FUNC_MODULE_INIT == function) {
|
if (FUNC_SETUP_RING2 == function) {
|
||||||
ShellyProPreInit();
|
ShellyProPreInit();
|
||||||
} else if (SPro.detected) {
|
} else if (SPro.detected) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
@ -851,7 +851,7 @@ bool Xsns02(uint32_t function) {
|
|||||||
case FUNC_COMMAND:
|
case FUNC_COMMAND:
|
||||||
result = DecodeCommand(kAdcCommands, AdcCommand);
|
result = DecodeCommand(kAdcCommands, AdcCommand);
|
||||||
break;
|
break;
|
||||||
case FUNC_MODULE_INIT:
|
case FUNC_SETUP_RING2:
|
||||||
AdcInit();
|
AdcInit();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -165,6 +165,9 @@ bool Xsns04(uint32_t function)
|
|||||||
case FUNC_INIT:
|
case FUNC_INIT:
|
||||||
SonoffScInit();
|
SonoffScInit();
|
||||||
break;
|
break;
|
||||||
|
case FUNC_MODULE_INIT:
|
||||||
|
SetSerial(19200, TS_SERIAL_8N1);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user