From 7ec0c417b38869809abe07cff0acfd2034d4b333 Mon Sep 17 00:00:00 2001 From: Milenko Mitrovic Date: Sat, 30 Oct 2021 11:19:44 +0200 Subject: [PATCH 001/355] Added support for Mi Scale V1 --- tasmota/xsns_62_esp32_mi_ble.ino | 174 ++++++++++++++++++++++++++++++- 1 file changed, 170 insertions(+), 4 deletions(-) diff --git a/tasmota/xsns_62_esp32_mi_ble.ino b/tasmota/xsns_62_esp32_mi_ble.ino index cb9548e6e..a1f520aec 100644 --- a/tasmota/xsns_62_esp32_mi_ble.ino +++ b/tasmota/xsns_62_esp32_mi_ble.ino @@ -261,6 +261,36 @@ struct PVVXPacket_t { uint8_t flags; }; +struct MiScaleV1Packet_t { + //uint8_t size; // = 14 + //uint8_t uid; // = 0x16, 16-bit UUID + //uint16_t UUID; // = 0x181D + uint8_t status; // bit 0 lbs, 4 jin, 5, stabilized, 7, weight removed + uint16_t weight; + uint16_t year; + uint8_t month; + uint8_t day; + uint8_t hour; + uint8_t minute; + uint8_t second; +}; + +struct MiScaleV2Packet_t { + //uint8_t size; // = 17 + //uint8_t uid; // = 0x16, 16-bit UUID + //uint16_t UUID; // = 0x181B + uint8_t weight_unit; + uint8_t status; + uint16_t year; + uint8_t month; + uint8_t day; + uint8_t hour; + uint8_t minute; + uint8_t second; + uint16_t impedance; + uint16_t weight; +}; + #pragma pack(0) struct mi_sensor_t{ @@ -286,6 +316,7 @@ struct mi_sensor_t{ uint32_t events:1; uint32_t pairing:1; uint32_t light:1; // binary light sensor + uint32_t scale:1; }; uint32_t raw; } feature; @@ -304,6 +335,7 @@ struct mi_sensor_t{ uint32_t Btn:1; uint32_t PairBtn:1; uint32_t light:1; // binary light sensor + uint32_t scale:1; }; uint32_t raw; } eventType; @@ -333,6 +365,16 @@ struct mi_sensor_t{ union { uint8_t bat; // many values seem to be hard-coded garbage (LYWSD0x, GCD1) }; + union { + struct { + uint8_t has_impedance; + uint8_t stabilized; + uint8_t weight_removed; + char weight_unit[4]; // kg, lbs, jin or empty when unknown + float weight; + uint16_t impedance; + }; + }; }; struct MAC_t { @@ -380,8 +422,10 @@ void (*const MI32_Commands[])(void) PROGMEM = { #define MI_MHOC303 12 #define MI_ATC 13 #define MI_DOOR 14 +#define MI_SCALE_V1 15 +#define MI_SCALE_V2 16 -#define MI_MI32_TYPES 14 //count this manually +#define MI_MI32_TYPES 16 //count this manually const uint16_t kMI32DeviceID[MI_MI32_TYPES]={ 0x0000, // Unkown @@ -396,8 +440,10 @@ const uint16_t kMI32DeviceID[MI_MI32_TYPES]={ 0x0153, // yee-rc 0x0387, // MHO-C401 0x06d3, // MHO-C303 - 0x0a1c, // ATC -> this is a fake ID - 0x098b // door/window sensor + 0x0a1c, // ATC -> this is a fake ID + 0x098b, // door/window sensor + 0x181d, // Mi Scale V1 + 0x181b // Mi Scale V2 }; const char kMI32DeviceType0[] PROGMEM = "Unknown"; @@ -414,7 +460,9 @@ const char kMI32DeviceType10[] PROGMEM ="MHOC401"; const char kMI32DeviceType11[] PROGMEM ="MHOC303"; const char kMI32DeviceType12[] PROGMEM ="ATC"; const char kMI32DeviceType13[] PROGMEM ="DOOR"; -const char * kMI32DeviceType[] PROGMEM = {kMI32DeviceType0,kMI32DeviceType1,kMI32DeviceType2,kMI32DeviceType3,kMI32DeviceType4,kMI32DeviceType5,kMI32DeviceType6,kMI32DeviceType7,kMI32DeviceType8,kMI32DeviceType9,kMI32DeviceType10,kMI32DeviceType11,kMI32DeviceType12,kMI32DeviceType13}; +const char kMI32DeviceType14[] PROGMEM ="MISCALEV1"; +const char kMI32DeviceType15[] PROGMEM ="MISCALEV2"; +const char * kMI32DeviceType[] PROGMEM = {kMI32DeviceType0,kMI32DeviceType1,kMI32DeviceType2,kMI32DeviceType3,kMI32DeviceType4,kMI32DeviceType5,kMI32DeviceType6,kMI32DeviceType7,kMI32DeviceType8,kMI32DeviceType9,kMI32DeviceType10,kMI32DeviceType11,kMI32DeviceType12,kMI32DeviceType13,kMI32DeviceType14,kMI32DeviceType15}; typedef int BATREAD_FUNCTION(int slot); typedef int UNITWRITE_FUNCTION(int slot, int unit); @@ -987,6 +1035,11 @@ int MI32advertismentCallback(BLE_ESP32::ble_advertisment_t *pStruct) case 0x181a: { //ATC MI32ParseATCPacket(ServiceData, ServiceDataLength, addr, RSSI); } break; + case 0x181d: // Mi Scale V1 + case 0x181b: // Mi Scale V2 + { + MI32ParseMiScalePacket(ServiceData, ServiceDataLength, addr, RSSI, UUID); + } break; default:{ } break; @@ -1438,6 +1491,10 @@ uint32_t MIBLEgetSensorSlot(const uint8_t *mac, uint16_t _type, uint8_t counter) _newSensor.feature.light=1; _newSensor.feature.bat=1; break; + case MI_SCALE_V1: + case MI_SCALE_V2: + _newSensor.feature.scale=1; + break; default: _newSensor.hum=NAN; _newSensor.feature.temp=1; @@ -1639,6 +1696,87 @@ void MI32ParseATCPacket(const uint8_t * _buf, uint32_t length, const uint8_t *ad } } +void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t *addr, int RSSI, int UUID){ + MiScaleV1Packet_t *_packetV1 = (MiScaleV1Packet_t*)_buf; + MiScaleV2Packet_t *_packetV2 = (MiScaleV2Packet_t*)_buf; + + // Mi Scale V1 + if (length == 10 && UUID == 0x181d){ // 14-1-1-2 + uint32_t _slot = MIBLEgetSensorSlot(addr, UUID, 0); + if(_slot==0xff) return; + + if ((_slot >= 0) && (_slot < MIBLEsensors.size())){ + if (BLE_ESP32::BLEDebugMode > 0) AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: at slot %u"), kMI32DeviceType[MIBLEsensors[_slot].type-1],_slot); + MIBLEsensors[_slot].RSSI=RSSI; + MIBLEsensors[_slot].needkey=KEY_NOT_REQUIRED; + MIBLEsensors[_slot].eventType.scale = 1; + + MIBLEsensors[_slot].stabilized = (_packetV1->status & (1 << 5)) ? 1 : 0; + MIBLEsensors[_slot].weight_removed = (_packetV1->status & (1 << 7)) ? 1 : 0; + + if (_packetV1->status & (1 << 0)) { + strcpy(MIBLEsensors[_slot].weight_unit, PSTR("lbs")); + MIBLEsensors[_slot].weight = (float)_packetV1->weight / 100.0f; + } else if(_packetV1->status & (1 << 4)) { + strcpy(MIBLEsensors[_slot].weight_unit, PSTR("jin")); + MIBLEsensors[_slot].weight = (float)_packetV1->weight / 100.0f; + } else { + strcpy(MIBLEsensors[_slot].weight_unit, PSTR("kg")); + MIBLEsensors[_slot].weight = (float)_packetV1->weight / 200.0f; + } + + if (MIBLEsensors[_slot].weight_removed) { + MIBLEsensors[_slot].weight = 0.0f; + } + + if(MI32.option.directBridgeMode) { + MIBLEsensors[_slot].shallSendMQTT = 1; + MI32.mode.shallTriggerTele = 1; + } + } + } + + // Mi Scale V2 + else if (length == 13 && UUID == 0x181b){ // 17-1-1-2 + uint32_t _slot = MIBLEgetSensorSlot(addr, UUID, 0); + if(_slot==0xff) return; + + if ((_slot >= 0) && (_slot < MIBLEsensors.size())){ + if (BLE_ESP32::BLEDebugMode > 0) AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: at slot %u"), kMI32DeviceType[MIBLEsensors[_slot].type-1],_slot); + MIBLEsensors[_slot].RSSI=RSSI; + MIBLEsensors[_slot].needkey=KEY_NOT_REQUIRED; + MIBLEsensors[_slot].eventType.scale = 1; + + MIBLEsensors[_slot].has_impedance = (_packetV2->status & (1 << 1)) ? 1 : 0; + MIBLEsensors[_slot].stabilized = (_packetV2->status & (1 << 5)) ? 1 : 0; + MIBLEsensors[_slot].weight_removed = (_packetV2->status & (1 << 7)) ? 1 : 0; + + if (_packetV2->weight_unit & (1 << 4)) { + strcpy(MIBLEsensors[_slot].weight_unit, PSTR("jin")); + MIBLEsensors[_slot].weight = (float)_packetV2->weight / 100.0f; + } else if(_packetV2->weight_unit == 3) { + strcpy(MIBLEsensors[_slot].weight_unit, PSTR("lbs")); + MIBLEsensors[_slot].weight = (float)_packetV2->weight / 100.0f; + } else if(_packetV2->weight_unit == 2) { + strcpy(MIBLEsensors[_slot].weight_unit, PSTR("kg")); + MIBLEsensors[_slot].weight = (float)_packetV2->weight / 200.0f; + } else { + strcpy(MIBLEsensors[_slot].weight_unit, PSTR("")); + MIBLEsensors[_slot].weight = (float)_packetV2->weight / 100.0f; + } + + if (MIBLEsensors[_slot].weight_removed) { + MIBLEsensors[_slot].weight = 0.0f; + } + + if(MI32.option.directBridgeMode) { + MIBLEsensors[_slot].shallSendMQTT = 1; + MI32.mode.shallTriggerTele = 1; + } + } + } +} + //////////////////////////////////////////////////////////// // this SHOULD parse any MI payload. int MI32parseMiPayload(int _slot, struct mi_beacon_data_t *parsed){ @@ -2380,6 +2518,10 @@ const char HTTP_NMT[] PROGMEM = "{s}%s No motion{m}> %u seconds{e}"; const char HTTP_MI32_FLORA_DATA[] PROGMEM = "{s}%s" " Fertility" "{m}%u us/cm{e}"; const char HTTP_MI32_HL[] PROGMEM = "{s}
{m}
{e}"; const char HTTP_MI32_LIGHT[] PROGMEM = "{s}%s" " Light" "{m}%d{e}"; +const char HTTP_MISCALE_WEIGHT[] PROGMEM = "{s}%s" " Weight" "{m}%*_f %s{e}"; +const char HTTP_MISCALE_IMPEDANCE[] PROGMEM = "{s}%s" " Impedance" "{m}%u{e}"; +const char HTTP_MISCALE_WEIGHT_REMOVED[] PROGMEM = "{s}%s" " Weight removed" "{m}%s{e}"; +const char HTTP_MISCALE_STABILIZED[] PROGMEM = "{s}%s" " Stabilized" "{m}%s{e}"; //const char HTTP_NEEDKEY[] PROGMEM = "{s}%s feature.scale){ + if(p->eventType.scale || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate +#ifdef USE_HOME_ASSISTANT + ||(hass_mode==2) +#endif //USE_HOME_ASSISTANT + ){ + ResponseAppend_P(PSTR(",\"weight_removed\":%u"), p->weight_removed); + ResponseAppend_P(PSTR(",\"stabilized\":%u"), p->stabilized); + ResponseAppend_P(PSTR(",\"weight_unit\":\"%s\""), p->weight_unit); + ResponseAppend_P(PSTR(",\"weight\":%*_f"), + Settings->flag2.weight_resolution, &p->weight); + if (p->has_impedance){ + ResponseAppend_P(PSTR(",\"impedance\":%u"), p->impedance); + } + } + } if (p->feature.Btn){ if(p->eventType.Btn || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate #ifdef USE_HOME_ASSISTANT @@ -3205,6 +3363,14 @@ void MI32Show(bool json) if (p->feature.light){ WSContentSend_PD(HTTP_MI32_LIGHT, typeName, p->light); } + if (p->feature.scale){ + WSContentSend_PD(HTTP_MISCALE_WEIGHT, typeName, Settings->flag2.weight_resolution, &p->weight, p->weight_unit); + if (p->has_impedance) { + WSContentSend_PD(HTTP_MISCALE_IMPEDANCE, typeName, p->impedance); + } + WSContentSend_PD(HTTP_MISCALE_WEIGHT_REMOVED, typeName, p->weight_removed? PSTR("yes") : PSTR("no")); + WSContentSend_PD(HTTP_MISCALE_STABILIZED, typeName, p->stabilized ? PSTR("yes") : PSTR("no")); + } if(p->bat!=0x00){ WSContentSend_PD(HTTP_BATTERY, typeName, p->bat); From 2a53f3ba1dbfbee2489fd5419634192a01adb769 Mon Sep 17 00:00:00 2001 From: Milenko Mitrovic Date: Thu, 16 Dec 2021 00:44:49 +0100 Subject: [PATCH 002/355] Use only stabilized weight packets when directBridgeMode is disabled --- tasmota/xsns_62_esp32_mi_ble.ino | 60 ++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/tasmota/xsns_62_esp32_mi_ble.ino b/tasmota/xsns_62_esp32_mi_ble.ino index bb42778c3..abbfeee69 100644 --- a/tasmota/xsns_62_esp32_mi_ble.ino +++ b/tasmota/xsns_62_esp32_mi_ble.ino @@ -1700,23 +1700,30 @@ void MI32ParseATCPacket(const uint8_t * _buf, uint32_t length, const uint8_t *ad } } -void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t *addr, int RSSI, int UUID){ +void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t *addr, int RSSI, int UUID) { MiScaleV1Packet_t *_packetV1 = (MiScaleV1Packet_t*)_buf; MiScaleV2Packet_t *_packetV2 = (MiScaleV2Packet_t*)_buf; + uint8_t stabilized = 0; + uint8_t weight_removed = 0; // Mi Scale V1 - if (length == 10 && UUID == 0x181d){ // 14-1-1-2 - uint32_t _slot = MIBLEgetSensorSlot(addr, UUID, 0); - if(_slot==0xff) return; + if (length == 10 && UUID == 0x181d) { // 14-1-1-2 + stabilized = (_packetV1->status & (1 << 5)) ? 1 : 0; + weight_removed = (_packetV1->status & (1 << 7)) ? 1 : 0; + if (!MI32.option.directBridgeMode && (!stabilized || weight_removed)) + return; - if ((_slot >= 0) && (_slot < MIBLEsensors.size())){ + uint32_t _slot = MIBLEgetSensorSlot(addr, UUID, 0); + if (_slot==0xff) return; + + if ((_slot >= 0) && (_slot < MIBLEsensors.size())) { if (BLE_ESP32::BLEDebugMode > 0) AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: at slot %u"), kMI32DeviceType[MIBLEsensors[_slot].type-1],_slot); - MIBLEsensors[_slot].RSSI=RSSI; - MIBLEsensors[_slot].needkey=KEY_NOT_REQUIRED; + MIBLEsensors[_slot].RSSI = RSSI; + MIBLEsensors[_slot].needkey = KEY_NOT_REQUIRED; MIBLEsensors[_slot].eventType.scale = 1; - MIBLEsensors[_slot].stabilized = (_packetV1->status & (1 << 5)) ? 1 : 0; - MIBLEsensors[_slot].weight_removed = (_packetV1->status & (1 << 7)) ? 1 : 0; + MIBLEsensors[_slot].stabilized = stabilized; + MIBLEsensors[_slot].weight_removed = weight_removed; if (_packetV1->status & (1 << 0)) { strcpy(MIBLEsensors[_slot].weight_unit, PSTR("lbs")); @@ -1741,19 +1748,24 @@ void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t } // Mi Scale V2 - else if (length == 13 && UUID == 0x181b){ // 17-1-1-2 - uint32_t _slot = MIBLEgetSensorSlot(addr, UUID, 0); - if(_slot==0xff) return; + else if (length == 13 && UUID == 0x181b) { // 17-1-1-2 + stabilized = (_packetV2->status & (1 << 5)) ? 1 : 0; + weight_removed = (_packetV2->status & (1 << 7)) ? 1 : 0; + if (!MI32.option.directBridgeMode && (!stabilized || weight_removed)) + return; - if ((_slot >= 0) && (_slot < MIBLEsensors.size())){ + uint32_t _slot = MIBLEgetSensorSlot(addr, UUID, 0); + if (_slot==0xff) return; + + if ((_slot >= 0) && (_slot < MIBLEsensors.size())) { if (BLE_ESP32::BLEDebugMode > 0) AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: at slot %u"), kMI32DeviceType[MIBLEsensors[_slot].type-1],_slot); - MIBLEsensors[_slot].RSSI=RSSI; - MIBLEsensors[_slot].needkey=KEY_NOT_REQUIRED; + MIBLEsensors[_slot].RSSI = RSSI; + MIBLEsensors[_slot].needkey = KEY_NOT_REQUIRED; MIBLEsensors[_slot].eventType.scale = 1; MIBLEsensors[_slot].has_impedance = (_packetV2->status & (1 << 1)) ? 1 : 0; - MIBLEsensors[_slot].stabilized = (_packetV2->status & (1 << 5)) ? 1 : 0; - MIBLEsensors[_slot].weight_removed = (_packetV2->status & (1 << 7)) ? 1 : 0; + MIBLEsensors[_slot].stabilized = stabilized; + MIBLEsensors[_slot].weight_removed = weight_removed; if (_packetV2->weight_unit & (1 << 4)) { strcpy(MIBLEsensors[_slot].weight_unit, PSTR("jin")); @@ -2731,8 +2743,10 @@ void MI32GetOneSensorJson(int slot, int hidename){ ||(hass_mode==2) #endif //USE_HOME_ASSISTANT ){ - ResponseAppend_P(PSTR(",\"weight_removed\":%u"), p->weight_removed); - ResponseAppend_P(PSTR(",\"stabilized\":%u"), p->stabilized); + if (MI32.option.directBridgeMode) { + ResponseAppend_P(PSTR(",\"weight_removed\":%u"), p->weight_removed); + ResponseAppend_P(PSTR(",\"stabilized\":%u"), p->stabilized); + } ResponseAppend_P(PSTR(",\"weight_unit\":\"%s\""), p->weight_unit); ResponseAppend_P(PSTR(",\"weight\":%*_f"), Settings->flag2.weight_resolution, &p->weight); @@ -3369,8 +3383,10 @@ void MI32Show(bool json) if (p->has_impedance) { WSContentSend_PD(HTTP_MISCALE_IMPEDANCE, typeName, p->impedance); } - WSContentSend_PD(HTTP_MISCALE_WEIGHT_REMOVED, typeName, p->weight_removed? PSTR("yes") : PSTR("no")); - WSContentSend_PD(HTTP_MISCALE_STABILIZED, typeName, p->stabilized ? PSTR("yes") : PSTR("no")); + if (MI32.option.directBridgeMode) { + WSContentSend_PD(HTTP_MISCALE_WEIGHT_REMOVED, typeName, p->weight_removed? PSTR("yes") : PSTR("no")); + WSContentSend_PD(HTTP_MISCALE_STABILIZED, typeName, p->stabilized ? PSTR("yes") : PSTR("no")); + } } if(p->bat!=0x00){ @@ -3438,4 +3454,4 @@ bool Xsns62(uint8_t function) #endif // CONFIG_IDF_TARGET_ESP32 or CONFIG_IDF_TARGET_ESP32C3 #endif // ESP32 -#endif +#endif \ No newline at end of file From dc1fa0e50d87ccad3ae61ea345d7ba7d37c20785 Mon Sep 17 00:00:00 2001 From: Milenko Mitrovic Date: Sat, 18 Dec 2021 20:43:17 +0100 Subject: [PATCH 003/355] Added feature.impedance for V2 to separate impedance and impedance_stabilized value from V1 and changed stabilized/has_impedance to weight_stabilized/impedance_stabilized --- tasmota/xsns_62_esp32_mi_ble.ino | 54 ++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/tasmota/xsns_62_esp32_mi_ble.ino b/tasmota/xsns_62_esp32_mi_ble.ino index abbfeee69..1c37323d1 100644 --- a/tasmota/xsns_62_esp32_mi_ble.ino +++ b/tasmota/xsns_62_esp32_mi_ble.ino @@ -280,7 +280,7 @@ struct MiScaleV2Packet_t { //uint8_t uid; // = 0x16, 16-bit UUID //uint16_t UUID; // = 0x181B uint8_t weight_unit; - uint8_t status; + uint8_t status; // bit 14 impedance stabilized uint16_t year; uint8_t month; uint8_t day; @@ -317,6 +317,7 @@ struct mi_sensor_t{ uint32_t pairing:1; uint32_t light:1; // binary light sensor uint32_t scale:1; + uint32_t impedance:1; }; uint32_t raw; } feature; @@ -367,11 +368,11 @@ struct mi_sensor_t{ }; union { struct { - uint8_t has_impedance; - uint8_t stabilized; + uint8_t weight_stabilized; uint8_t weight_removed; char weight_unit[4]; // kg, lbs, jin or empty when unknown float weight; + uint8_t impedance_stabilized; uint16_t impedance; }; }; @@ -1492,8 +1493,11 @@ uint32_t MIBLEgetSensorSlot(const uint8_t *mac, uint16_t _type, uint8_t counter) _newSensor.feature.bat=1; break; case MI_SCALE_V1: + _newSensor.feature.scale=1; + break; case MI_SCALE_V2: _newSensor.feature.scale=1; + _newSensor.feature.impedance=1; break; default: _newSensor.hum=NAN; @@ -1703,14 +1707,15 @@ void MI32ParseATCPacket(const uint8_t * _buf, uint32_t length, const uint8_t *ad void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t *addr, int RSSI, int UUID) { MiScaleV1Packet_t *_packetV1 = (MiScaleV1Packet_t*)_buf; MiScaleV2Packet_t *_packetV2 = (MiScaleV2Packet_t*)_buf; - uint8_t stabilized = 0; + uint8_t weight_stabilized = 0; uint8_t weight_removed = 0; + uint8_t impedance_stabilized = 0; // Mi Scale V1 if (length == 10 && UUID == 0x181d) { // 14-1-1-2 - stabilized = (_packetV1->status & (1 << 5)) ? 1 : 0; + weight_stabilized = (_packetV1->status & (1 << 5)) ? 1 : 0; weight_removed = (_packetV1->status & (1 << 7)) ? 1 : 0; - if (!MI32.option.directBridgeMode && (!stabilized || weight_removed)) + if (!MI32.option.directBridgeMode && (!weight_stabilized || weight_removed)) return; uint32_t _slot = MIBLEgetSensorSlot(addr, UUID, 0); @@ -1722,7 +1727,7 @@ void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t MIBLEsensors[_slot].needkey = KEY_NOT_REQUIRED; MIBLEsensors[_slot].eventType.scale = 1; - MIBLEsensors[_slot].stabilized = stabilized; + MIBLEsensors[_slot].weight_stabilized = weight_stabilized; MIBLEsensors[_slot].weight_removed = weight_removed; if (_packetV1->status & (1 << 0)) { @@ -1749,9 +1754,10 @@ void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t // Mi Scale V2 else if (length == 13 && UUID == 0x181b) { // 17-1-1-2 - stabilized = (_packetV2->status & (1 << 5)) ? 1 : 0; + weight_stabilized = (_packetV2->status & (1 << 5)) ? 1 : 0; weight_removed = (_packetV2->status & (1 << 7)) ? 1 : 0; - if (!MI32.option.directBridgeMode && (!stabilized || weight_removed)) + impedance_stabilized = (_packetV2->status & (1 << 1)) ? 1 : 0; + if (!MI32.option.directBridgeMode && (!weight_stabilized || weight_removed /* || !impedance_stabilized */)) return; uint32_t _slot = MIBLEgetSensorSlot(addr, UUID, 0); @@ -1763,9 +1769,10 @@ void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t MIBLEsensors[_slot].needkey = KEY_NOT_REQUIRED; MIBLEsensors[_slot].eventType.scale = 1; - MIBLEsensors[_slot].has_impedance = (_packetV2->status & (1 << 1)) ? 1 : 0; - MIBLEsensors[_slot].stabilized = stabilized; + MIBLEsensors[_slot].weight_stabilized = weight_stabilized; MIBLEsensors[_slot].weight_removed = weight_removed; + MIBLEsensors[_slot].impedance_stabilized = impedance_stabilized; + MIBLEsensors[_slot].impedance = _packetV2->impedance; if (_packetV2->weight_unit & (1 << 4)) { strcpy(MIBLEsensors[_slot].weight_unit, PSTR("jin")); @@ -1783,6 +1790,7 @@ void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t if (MIBLEsensors[_slot].weight_removed) { MIBLEsensors[_slot].weight = 0.0f; + MIBLEsensors[_slot].impedance = 0; } if(MI32.option.directBridgeMode) { @@ -2535,9 +2543,10 @@ const char HTTP_MI32_FLORA_DATA[] PROGMEM = "{s}%s" " Fertility" "{m}%u us/cm{e} const char HTTP_MI32_HL[] PROGMEM = "{s}
{m}
{e}"; const char HTTP_MI32_LIGHT[] PROGMEM = "{s}%s" " Light" "{m}%d{e}"; const char HTTP_MISCALE_WEIGHT[] PROGMEM = "{s}%s" " Weight" "{m}%*_f %s{e}"; -const char HTTP_MISCALE_IMPEDANCE[] PROGMEM = "{s}%s" " Impedance" "{m}%u{e}"; const char HTTP_MISCALE_WEIGHT_REMOVED[] PROGMEM = "{s}%s" " Weight removed" "{m}%s{e}"; -const char HTTP_MISCALE_STABILIZED[] PROGMEM = "{s}%s" " Stabilized" "{m}%s{e}"; +const char HTTP_MISCALE_WEIGHT_STABILIZED[] PROGMEM = "{s}%s" " Weight stabilized" "{m}%s{e}"; +const char HTTP_MISCALE_IMPEDANCE[] PROGMEM = "{s}%s" " Impedance" "{m}%u{e}"; +const char HTTP_MISCALE_IMPEDANCE_STABILIZED[] PROGMEM = "{s}%s" " Impedance stabilized" "{m}%s{e}"; //const char HTTP_NEEDKEY[] PROGMEM = "{s}%s
weight_removed); - ResponseAppend_P(PSTR(",\"stabilized\":%u"), p->stabilized); + ResponseAppend_P(PSTR(",\"weight_stabilized\":%u"), p->weight_stabilized); } ResponseAppend_P(PSTR(",\"weight_unit\":\"%s\""), p->weight_unit); ResponseAppend_P(PSTR(",\"weight\":%*_f"), Settings->flag2.weight_resolution, &p->weight); - if (p->has_impedance){ + if (p->feature.impedance) { + if (MI32.option.directBridgeMode) { + ResponseAppend_P(PSTR(",\"impedance_stabilized\":%u"), p->impedance_stabilized); + } ResponseAppend_P(PSTR(",\"impedance\":%u"), p->impedance); } } @@ -3380,15 +3392,17 @@ void MI32Show(bool json) } if (p->feature.scale){ WSContentSend_PD(HTTP_MISCALE_WEIGHT, typeName, Settings->flag2.weight_resolution, &p->weight, p->weight_unit); - if (p->has_impedance) { - WSContentSend_PD(HTTP_MISCALE_IMPEDANCE, typeName, p->impedance); - } if (MI32.option.directBridgeMode) { WSContentSend_PD(HTTP_MISCALE_WEIGHT_REMOVED, typeName, p->weight_removed? PSTR("yes") : PSTR("no")); - WSContentSend_PD(HTTP_MISCALE_STABILIZED, typeName, p->stabilized ? PSTR("yes") : PSTR("no")); + WSContentSend_PD(HTTP_MISCALE_WEIGHT_STABILIZED, typeName, p->weight_stabilized ? PSTR("yes") : PSTR("no")); + } + if (p->feature.impedance) { + WSContentSend_PD(HTTP_MISCALE_IMPEDANCE, typeName, p->impedance); + if (MI32.option.directBridgeMode) { + WSContentSend_PD(HTTP_MISCALE_IMPEDANCE_STABILIZED, typeName, p->impedance_stabilized? PSTR("yes") : PSTR("no")); + } } } - if(p->bat!=0x00){ WSContentSend_PD(HTTP_BATTERY, typeName, p->bat); } From ecb3a07d2f3aa0180a1283533f882ce6a3f81fcf Mon Sep 17 00:00:00 2001 From: Milenko Mitrovic Date: Sun, 19 Dec 2021 11:58:41 +0100 Subject: [PATCH 004/355] Changed json property names to better match the other properties --- tasmota/xsns_62_esp32_mi_ble.ino | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tasmota/xsns_62_esp32_mi_ble.ino b/tasmota/xsns_62_esp32_mi_ble.ino index 1c37323d1..5b4fa8eed 100644 --- a/tasmota/xsns_62_esp32_mi_ble.ino +++ b/tasmota/xsns_62_esp32_mi_ble.ino @@ -2753,17 +2753,17 @@ void MI32GetOneSensorJson(int slot, int hidename){ #endif //USE_HOME_ASSISTANT ){ if (MI32.option.directBridgeMode) { - ResponseAppend_P(PSTR(",\"weight_removed\":%u"), p->weight_removed); - ResponseAppend_P(PSTR(",\"weight_stabilized\":%u"), p->weight_stabilized); + ResponseAppend_P(PSTR(",\"WeightRemoved\":%u"), p->weight_removed); + ResponseAppend_P(PSTR(",\"WeightStabilized\":%u"), p->weight_stabilized); } - ResponseAppend_P(PSTR(",\"weight_unit\":\"%s\""), p->weight_unit); - ResponseAppend_P(PSTR(",\"weight\":%*_f"), + ResponseAppend_P(PSTR(",\"WeightUnit\":\"%s\""), p->weight_unit); + ResponseAppend_P(PSTR(",\"Weight\":%*_f"), Settings->flag2.weight_resolution, &p->weight); if (p->feature.impedance) { if (MI32.option.directBridgeMode) { - ResponseAppend_P(PSTR(",\"impedance_stabilized\":%u"), p->impedance_stabilized); + ResponseAppend_P(PSTR(",\"ImpedanceStabilized\":%u"), p->impedance_stabilized); } - ResponseAppend_P(PSTR(",\"impedance\":%u"), p->impedance); + ResponseAppend_P(PSTR(",\"Impedance\":%u"), p->impedance); } } } From a0ba50d38db43c869de92c5b2f8ab300527b87f9 Mon Sep 17 00:00:00 2001 From: Milenko Mitrovic Date: Sun, 19 Dec 2021 11:59:49 +0100 Subject: [PATCH 005/355] Added Weight and Impedance support to Home Assistant auto discovery --- tasmota/xsns_62_esp32_mi_ble.ino | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/tasmota/xsns_62_esp32_mi_ble.ino b/tasmota/xsns_62_esp32_mi_ble.ino index 5b4fa8eed..841de87a0 100644 --- a/tasmota/xsns_62_esp32_mi_ble.ino +++ b/tasmota/xsns_62_esp32_mi_ble.ino @@ -3012,6 +3012,16 @@ const char *classes[] = { "", //- empty device class "Firmware", "", + + // 11 + "", //- empty device class + "Weight", + "", // Will be set to p->weight_unit + + // 12 + "", //- empty device class + "Impedance", + "Ohm", }; @@ -3123,6 +3133,16 @@ void MI32DiscoveryOneMISensor(){ continue; } break; + case 11: // weight + if (!p->feature.scale){ // Mi Scale V1 and V2 only + continue; + } + break; + case 12: // impedance + if (!p->feature.impedance){ // Mi Scale V2 only + continue; + } + break; } /* @@ -3157,9 +3177,9 @@ void MI32DiscoveryOneMISensor(){ //"\"uniq_id\":\"%s_%s\"," - unique for this data, id, classes[i+1], //"\"unit_of_meas\":\"%s\"," - the measure of this type of data - (classes[i+2][0]?"\"unit_of_meas\":\"":""), - classes[i+2], - (classes[i+2][0]?"\",":""), + ((i/3==11)||classes[i+2][0]?"\"unit_of_meas\":\"":""), + (i/3==11)?p->weight_unit:classes[i+2], + ((i/3==11)||classes[i+2][0]?"\",":""), //"\"val_tpl\":\"{{ %s%s }}") // e.g. Temperature // inverted binary - {{ 'off' if value_json.posn else 'on' }} // binary - {{ 'on' if value_json.posn else 'off' }} From d13381f1306661dcca687721ecbcb977720d1e38 Mon Sep 17 00:00:00 2001 From: Milenko Mitrovic Date: Sun, 30 Jan 2022 00:25:22 +0100 Subject: [PATCH 006/355] Send MQTT message when weight/impedance is stabilized or direct bridge mode is enabled. Fixed impedance measurement on V2 scale. --- tasmota/xsns_62_esp32_mi_ble.ino | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/tasmota/xsns_62_esp32_mi_ble.ino b/tasmota/xsns_62_esp32_mi_ble.ino index 841de87a0..2ee034c06 100644 --- a/tasmota/xsns_62_esp32_mi_ble.ino +++ b/tasmota/xsns_62_esp32_mi_ble.ino @@ -1729,7 +1729,7 @@ void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t MIBLEsensors[_slot].weight_stabilized = weight_stabilized; MIBLEsensors[_slot].weight_removed = weight_removed; - + if (_packetV1->status & (1 << 0)) { strcpy(MIBLEsensors[_slot].weight_unit, PSTR("lbs")); MIBLEsensors[_slot].weight = (float)_packetV1->weight / 100.0f; @@ -1745,10 +1745,8 @@ void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t MIBLEsensors[_slot].weight = 0.0f; } - if(MI32.option.directBridgeMode) { - MIBLEsensors[_slot].shallSendMQTT = 1; - MI32.mode.shallTriggerTele = 1; - } + MIBLEsensors[_slot].shallSendMQTT = 1; + MI32.mode.shallTriggerTele = 1; } } @@ -1757,7 +1755,7 @@ void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t weight_stabilized = (_packetV2->status & (1 << 5)) ? 1 : 0; weight_removed = (_packetV2->status & (1 << 7)) ? 1 : 0; impedance_stabilized = (_packetV2->status & (1 << 1)) ? 1 : 0; - if (!MI32.option.directBridgeMode && (!weight_stabilized || weight_removed /* || !impedance_stabilized */)) + if (!MI32.option.directBridgeMode && (!weight_stabilized || weight_removed)) return; uint32_t _slot = MIBLEgetSensorSlot(addr, UUID, 0); @@ -1771,8 +1769,6 @@ void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t MIBLEsensors[_slot].weight_stabilized = weight_stabilized; MIBLEsensors[_slot].weight_removed = weight_removed; - MIBLEsensors[_slot].impedance_stabilized = impedance_stabilized; - MIBLEsensors[_slot].impedance = _packetV2->impedance; if (_packetV2->weight_unit & (1 << 4)) { strcpy(MIBLEsensors[_slot].weight_unit, PSTR("jin")); @@ -1788,15 +1784,23 @@ void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t MIBLEsensors[_slot].weight = (float)_packetV2->weight / 100.0f; } - if (MIBLEsensors[_slot].weight_removed) { + if (weight_removed) { MIBLEsensors[_slot].weight = 0.0f; - MIBLEsensors[_slot].impedance = 0; } - if(MI32.option.directBridgeMode) { - MIBLEsensors[_slot].shallSendMQTT = 1; - MI32.mode.shallTriggerTele = 1; + MIBLEsensors[_slot].impedance = 0; + if (MI32.option.directBridgeMode || impedance_stabilized) + { + MIBLEsensors[_slot].impedance_stabilized = impedance_stabilized; + MIBLEsensors[_slot].impedance = _packetV2->impedance; + + if (weight_removed) { + MIBLEsensors[_slot].impedance = 0; + } } + + MIBLEsensors[_slot].shallSendMQTT = 1; + MI32.mode.shallTriggerTele = 1; } } } From 3679ec4c088a05fe4d21043d0164e807942b0453 Mon Sep 17 00:00:00 2001 From: SteWers Date: Tue, 8 Feb 2022 20:55:57 +0100 Subject: [PATCH 007/355] [Solax X1] Rework request and respond processing Complete rework of the request cycle and the respond processing. This is more reliable and reusable for more and further requests. Right now the serial number of the converter is requested and displayed in the WebUI. --- tasmota/xnrg_12_solaxX1.ino | 316 ++++++++++++++++-------------------- 1 file changed, 139 insertions(+), 177 deletions(-) diff --git a/tasmota/xnrg_12_solaxX1.ino b/tasmota/xnrg_12_solaxX1.ino index fa925e519..6f26bf4f6 100644 --- a/tasmota/xnrg_12_solaxX1.ino +++ b/tasmota/xnrg_12_solaxX1.ino @@ -1,7 +1,8 @@ /* xnrg_12_solaxX1.ino - Solax X1 inverter RS485 support for Tasmota - Copyright (C) 2021 Pablo Zerón + Copyright (C) 2021 by Pablo Zerón + Copyright (C) 2022 by Stefan Wershoven This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -35,12 +36,6 @@ #include -enum solaxX1_Error -{ - solaxX1_ERR_NO_ERROR, - solaxX1_ERR_CRC_ERROR -}; - union { uint32_t ErrMessage; struct { @@ -90,10 +85,6 @@ const char kSolaxError[] PROGMEM = D_SOLAX_ERROR_0 "|" D_SOLAX_ERROR_1 "|" D_SOLAX_ERROR_2 "|" D_SOLAX_ERROR_3 "|" D_SOLAX_ERROR_4 "|" D_SOLAX_ERROR_5 "|" D_SOLAX_ERROR_6 "|" D_SOLAX_ERROR_7 "|" D_SOLAX_ERROR_8; -/*********************************************************************************************/ - -TasmotaSerial *solaxX1Serial; - struct SOLAXX1 { int16_t temperature = 0; float energy_today = 0; @@ -104,25 +95,10 @@ struct SOLAXX1 { uint32_t runtime_total = 0; float dc1_power = 0; float dc2_power = 0; - int16_t runMode = 0; uint32_t errorCode = 0; } solaxX1; -union { - uint8_t status; - struct { - uint8_t freeBit7:1; // Bit7 - uint8_t freeBit6:1; // Bit6 - uint8_t freeBit5:1; // Bit5 - uint8_t queryOffline:1; // Bit4 - uint8_t queryOfflineSend:1; // Bit3 - uint8_t hasAddress:1; // Bit2 - uint8_t inverterAddressSend:1; // Bit1 - uint8_t inverterSnReceived:1; // Bit0 - }; -} protocolStatus; - uint8_t header[2] = {0xAA, 0x55}; uint8_t source[2] = {0x00, 0x00}; uint8_t destination[2] = {0x00, 0x00}; @@ -131,15 +107,16 @@ uint8_t functionCode[1] = {0x00}; uint8_t dataLength[1] = {0x00}; uint8_t data[16] = {0}; +TasmotaSerial *solaxX1Serial; uint8_t message[30]; +bool AddressAssigned = true; +uint8_t solaxX1_send_retry = 20; +uint8_t solaxX1_queryData_count = 0; +uint8_t solaxX1_QueryID_count = 240; +uint8_t solaxX1SerialNumber[16] = {0x6e, 0x2f, 0x61}; // "n/a" /*********************************************************************************************/ -bool solaxX1_RS485ReceiveReady(void) -{ - return (solaxX1Serial->available() > 1); -} - void solaxX1_RS485Send(uint16_t msgLen) { memcpy(message, header, 2); @@ -151,8 +128,7 @@ void solaxX1_RS485Send(uint16_t msgLen) memcpy(message + 9, data, sizeof(data)); uint16_t crc = solaxX1_calculateCRC(message, msgLen); // calculate out crc bytes - while (solaxX1Serial->available() > 0) - { // read serial if any old data is available + while (solaxX1Serial->available() > 0) { // read serial if any old data is available solaxX1Serial->read(); } @@ -171,12 +147,11 @@ void solaxX1_RS485Send(uint16_t msgLen) AddLogBuffer(LOG_LEVEL_DEBUG_MORE, message, msgLen); } -uint8_t solaxX1_RS485Receive(uint8_t *value) +bool solaxX1_RS485Receive(uint8_t *value) { uint8_t len = 0; - while (solaxX1Serial->available() > 0) - { + while (solaxX1Serial->available() > 0) { value[len++] = (uint8_t)solaxX1Serial->read(); } @@ -184,14 +159,7 @@ uint8_t solaxX1_RS485Receive(uint8_t *value) uint16_t crc = solaxX1_calculateCRC(value, len - 2); // calculate out crc bytes - if (value[len - 1] == lowByte(crc) && value[len - 2] == highByte(crc)) - { // check calc crc with received crc - return solaxX1_ERR_NO_ERROR; - } - else - { - return solaxX1_ERR_CRC_ERROR; - } + return !(value[len - 1] == lowByte(crc) && value[len - 2] == highByte(crc)); } uint16_t solaxX1_calculateCRC(uint8_t *bExternTxPackage, uint8_t bLen) @@ -200,13 +168,23 @@ uint16_t solaxX1_calculateCRC(uint8_t *bExternTxPackage, uint8_t bLen) uint16_t wChkSum; wChkSum = 0; - for (i = 0; i < bLen; i++) - { + for (i = 0; i < bLen; i++) { wChkSum = wChkSum + bExternTxPackage[i]; } return wChkSum; } +void solaxX1_QueryOfflineInverters(void) +{ + source[0] = 0x01; + destination[0] = 0x00; + destination[1] = 0x00; + controlCode[0] = 0x10; + functionCode[0] = 0x00; + dataLength[0] = 0x00; + solaxX1_RS485Send(9); +} + void solaxX1_SendInverterAddress(void) { source[0] = 0x00; @@ -230,6 +208,17 @@ void solaxX1_QueryLiveData(void) solaxX1_RS485Send(9); } +void solaxX1_QueryIDData(void) +{ + source[0] = 0x01; + destination[0] = 0x00; + destination[1] = INVERTER_ADDRESS; + controlCode[0] = 0x11; + functionCode[0] = 0x03; + dataLength[0] = 0x00; + solaxX1_RS485Send(9); +} + uint8_t solaxX1_ParseErrorCode(uint32_t code){ ErrCode.ErrMessage = code; @@ -247,152 +236,124 @@ uint8_t solaxX1_ParseErrorCode(uint32_t code){ /*********************************************************************************************/ -uint8_t solaxX1_send_retry = 20; -uint8_t solaxX1_queryData_count = 0; - void solaxX1250MSecond(void) // Every 250 milliseconds { - uint8_t value[61] = {0}; - bool data_ready = solaxX1_RS485ReceiveReady(); + uint8_t value[70] = {0}; + uint8_t i; - if (data_ready) - { - if (protocolStatus.hasAddress) - { - uint8_t error = solaxX1_RS485Receive(value); - if (error) - { - DEBUG_SENSOR_LOG(PSTR("SX1: Data response CRC error")); - } - else - { - solaxX1_send_retry = 20; - Energy.data_valid[0] = 0; - - solaxX1.temperature = (value[9] << 8) | value[10]; // Temperature - solaxX1.energy_today = (float)((value[11] << 8) | value[12]) * 0.1f; // Energy Today - solaxX1.dc1_voltage = (float)((value[13] << 8) | value[14]) * 0.1f; // PV1 Voltage - solaxX1.dc2_voltage = (float)((value[15] << 8) | value[16]) * 0.1f; // PV2 Voltage - solaxX1.dc1_current = (float)((value[17] << 8) | value[18]) * 0.1f; // PV1 Current - solaxX1.dc2_current = (float)((value[19] << 8) | value[20]) * 0.1f; // PV2 Current - Energy.current[0] = (float)((value[21] << 8) | value[22]) * 0.1f; // AC Current - Energy.voltage[0] = (float)((value[23] << 8) | value[24]) * 0.1f; // AC Voltage - Energy.frequency[0] = (float)((value[25] << 8) | value[26]) * 0.01f; // AC Frequency - Energy.active_power[0] = (float)((value[27] << 8) | value[28]); // AC Power - //temporal = (float)((value[29] << 8) | value[30]) * 0.1f; // Not Used - Energy.import_active[0] = (float)((value[31] << 24) | (value[32] << 16) | (value[33] << 8) | value[34]) * 0.1f; // Energy Total - solaxX1.runtime_total = ((value[35] << 24) | (value[36] << 16) | (value[37] << 8) | value[38]); // Work Time Total - solaxX1.runMode = (value[39] << 8) | value[40]; // Work mode - //temporal = (float)((value[41] << 8) | value[42]); // Grid voltage fault value 0.1V - //temporal = (float)((value[43] << 8) | value[44]); // Gird frequency fault value 0.01Hz - //temporal = (float)((value[45] << 8) | value[46]); // Dc injection fault value 1mA - //temporal = (float)((value[47] << 8) | value[48]); // Temperature fault value - //temporal = (float)((value[49] << 8) | value[50]); // Pv1 voltage fault value 0.1V - //temporal = (float)((value[51] << 8) | value[52]); // Pv2 voltage fault value 0.1V - //temporal = (float)((value[53] << 8) | value[54]); // GFC fault value - solaxX1.errorCode = (value[58] << 24) | (value[57] << 16) | (value[56] << 8) | value[55]; // Error Code - - solaxX1.dc1_power = solaxX1.dc1_voltage * solaxX1.dc1_current; - solaxX1.dc2_power = solaxX1.dc2_voltage * solaxX1.dc2_current; - - EnergyUpdateTotal(); // 484.708 kWh - } - } else { // end hasAddress - // check address confirmation from inverter - if (protocolStatus.inverterAddressSend) - { - uint8_t error = solaxX1_RS485Receive(value); - if (error) - { - DEBUG_SENSOR_LOG(PSTR("SX1: Address confirmation response CRC error")); - } - else - { - if (value[6] == 0x10 && value[7] == 0x81 && value[9] == 0x06) - { - DEBUG_SENSOR_LOG(PSTR("SX1: Set hasAddress")); - protocolStatus.status = 0b00100000; // hasAddress - } - } - } - - // Check inverter serial number and send the set address request - if (protocolStatus.queryOfflineSend) - { - uint8_t error = solaxX1_RS485Receive(value); - if (error) - { - DEBUG_SENSOR_LOG(PSTR("SX1: Query Offline response CRC error")); - } - else - { - // Serial number from query response - if (value[6] == 0x10 && value[7] == 0x80 && protocolStatus.inverterSnReceived == false) - { - for (uint8_t i = 9; i <= 22; i++) - { - data[i - 9] = value[i]; - } - solaxX1_SendInverterAddress(); - protocolStatus.status = 0b1100000; // inverterSnReceived and inverterAddressSend - DEBUG_SENSOR_LOG(PSTR("SX1: Set inverterSnReceived and inverterAddressSend")); - } - } - } + if (solaxX1Serial->available()) { + if (solaxX1_RS485Receive(value)) { // CRC-error -> no further action + DEBUG_SENSOR_LOG(PSTR("SX1: Data response CRC error")); + return; } - } + + solaxX1_send_retry = 20; // Inverter is responding - if (protocolStatus.hasAddress) { - if (solaxX1_queryData_count <= 0) { + if (value[0] != 0xAA || value[1] != 0x55) { // Check for header + DEBUG_SENSOR_LOG(PSTR("SX1: Check for header failed")); + return; + } + + if (value[6] == 0x11 && value[7] == 0x82) { // received "Response for query (live data)" + Energy.data_valid[0] = 0; + + solaxX1.temperature = (value[9] << 8) | value[10]; // Temperature + solaxX1.energy_today = (float)((value[11] << 8) | value[12]) * 0.1f; // Energy Today + solaxX1.dc1_voltage = (float)((value[13] << 8) | value[14]) * 0.1f; // PV1 Voltage + solaxX1.dc2_voltage = (float)((value[15] << 8) | value[16]) * 0.1f; // PV2 Voltage + solaxX1.dc1_current = (float)((value[17] << 8) | value[18]) * 0.1f; // PV1 Current + solaxX1.dc2_current = (float)((value[19] << 8) | value[20]) * 0.1f; // PV2 Current + Energy.current[0] = (float)((value[21] << 8) | value[22]) * 0.1f; // AC Current + Energy.voltage[0] = (float)((value[23] << 8) | value[24]) * 0.1f; // AC Voltage + Energy.frequency[0] = (float)((value[25] << 8) | value[26]) * 0.01f; // AC Frequency + Energy.active_power[0] = (float)((value[27] << 8) | value[28]); // AC Power + //temporal = (float)((value[29] << 8) | value[30]) * 0.1f; // Not Used + Energy.import_active[0] = (float)((value[31] << 24) | (value[32] << 16) | (value[33] << 8) | value[34]) * 0.1f; // Energy Total + solaxX1.runtime_total = ((value[35] << 24) | (value[36] << 16) | (value[37] << 8) | value[38]); // Work Time Total + solaxX1.runMode = (value[39] << 8) | value[40]; // Work mode + //temporal = (float)((value[41] << 8) | value[42]); // Grid voltage fault value 0.1V + //temporal = (float)((value[43] << 8) | value[44]); // Gird frequency fault value 0.01Hz + //temporal = (float)((value[45] << 8) | value[46]); // Dc injection fault value 1mA + //temporal = (float)((value[47] << 8) | value[48]); // Temperature fault value + //temporal = (float)((value[49] << 8) | value[50]); // Pv1 voltage fault value 0.1V + //temporal = (float)((value[51] << 8) | value[52]); // Pv2 voltage fault value 0.1V + //temporal = (float)((value[53] << 8) | value[54]); // GFC fault value + solaxX1.errorCode = (value[58] << 24) | (value[57] << 16) | (value[56] << 8) | value[55]; // Error Code + + solaxX1.dc1_power = solaxX1.dc1_voltage * solaxX1.dc1_current; + solaxX1.dc2_power = solaxX1.dc2_voltage * solaxX1.dc2_current; + + EnergyUpdateTotal(); // 484.708 kWh + DEBUG_SENSOR_LOG(PSTR("SX1: received live data")); + return; + } // end received "Response for query (live data)" + + if (value[6] == 0x11 && value[7] == 0x83) { // received "Response for query (ID data)" + for (i = 49; i <= 62; i++) { // get "real" serial number + solaxX1SerialNumber[i - 49] = value[i]; + } + AddLog(LOG_LEVEL_INFO, PSTR("SX1: Inverter serial number: %s"),(char*)solaxX1SerialNumber); + DEBUG_SENSOR_LOG(PSTR("SX1: received ID data")); + return; + } // end received "Response for query (ID data)" + + if (value[6] == 0x10 && value[7] == 0x80) { // received "register request" + solaxX1_queryData_count = 5; // give time for next query + for (i = 9; i <= 22; i++) { // store serial number for register + data[i - 9] = value[i]; + } + DEBUG_SENSOR_LOG(PSTR("SX1: received register request and send register address")); + solaxX1_SendInverterAddress(); // "send register address" + return; + } + + if (value[6] == 0x10 && value[7] == 0x81 && value[9] == 0x06) { // received "address confirm (ACK)" + solaxX1_queryData_count = 5; // give time for next query + AddressAssigned = true; + DEBUG_SENSOR_LOG(PSTR("SX1: received \"address confirm (ACK)\"")); + return; + } + + } // end solaxX1Serial->available() + +// DEBUG_SENSOR_LOG(PSTR("SX1: AddressAssigned: %d, solaxX1_queryData_count: %d, solaxX1_send_retry: %d, solaxX1_QueryID_count: %d"), AddressAssigned, solaxX1_queryData_count, solaxX1_send_retry, solaxX1_QueryID_count); + if (AddressAssigned) { + if (!solaxX1_queryData_count) { // normal periodically query solaxX1_queryData_count = 5; - DEBUG_SENSOR_LOG(PSTR("SX1: Send Retry count: %d"), solaxX1_send_retry); - solaxX1_QueryLiveData(); - } + if (solaxX1_QueryID_count) { // normal live query + DEBUG_SENSOR_LOG(PSTR("SX1: Send periodically live query")); + solaxX1_QueryLiveData(); + } else { // normal ID query + DEBUG_SENSOR_LOG(PSTR("SX1: Send periodically ID query")); + solaxX1_QueryIDData(); + } + solaxX1_QueryID_count++; // query ID every 256th time + } // end normal periodically query solaxX1_queryData_count--; - } - - // request to the inverter the serial number if offline - if (protocolStatus.queryOffline) - { - // We sent the message to query inverters in offline status - source[0] = 0x01; - destination[1] = 0x00; - controlCode[0] = 0x10; - functionCode[0] = 0x00; - dataLength[0] = 0x00; - solaxX1_RS485Send(9); - protocolStatus.status = 0b00010000; // queryOfflineSend - solaxX1_send_retry = 20; - DEBUG_SENSOR_LOG(PSTR("SX1: Query Offline Send")); - } - - if (solaxX1_send_retry == 0) { - if (protocolStatus.hasAddress) { - protocolStatus.status = 0b00001000; // queryOffline + if (!solaxX1_send_retry) { // Inverter went "off" + solaxX1_send_retry = 20; + DEBUG_SENSOR_LOG(PSTR("SX1: Inverter went \"off\"")); Energy.data_valid[0] = ENERGY_WATCHDOG; - solaxX1.temperature = solaxX1.dc1_voltage = solaxX1.dc2_voltage = solaxX1.dc1_current = solaxX1.dc2_current = solaxX1.dc1_power = 0; solaxX1.dc2_power = Energy.current[0] = Energy.voltage[0] = Energy.frequency[0] = Energy.active_power[0] = 0; solaxX1.runMode = -1; // off(line) - } else { - if (protocolStatus.queryOfflineSend) { - protocolStatus.status = 0b00001000; // queryOffline - DEBUG_SENSOR_LOG(PSTR("SX1: Set Query Offline")); - } + AddressAssigned = false; + } // end Inverter went "off" + } else { // sent query for inverters in offline status + if (!solaxX1_send_retry) { solaxX1_send_retry = 20; + DEBUG_SENSOR_LOG(PSTR("SX1: Sent query for inverters in offline state")); + solaxX1_QueryOfflineInverters(); } } + solaxX1_send_retry--; - if (!data_ready && solaxX1_send_retry > 0) { solaxX1_send_retry--; } +return; } void solaxX1SnsInit(void) { - AddLog(LOG_LEVEL_DEBUG, PSTR("SX1: Solax X1 Inverter Init")); - AddLog(LOG_LEVEL_DEBUG, PSTR("SX1: RX-pin: %d, TX-pin: %d, RTS-pin: %d"), Pin(GPIO_SOLAXX1_RX), Pin(GPIO_SOLAXX1_TX), Pin(GPIO_SOLAXX1_RTS)); -// DEBUG_SENSOR_LOG(PSTR("SX1: RX pin: %d, TX pin: %d"), Pin(GPIO_SOLAXX1_RX), Pin(GPIO_SOLAXX1_TX)); - protocolStatus.status = 0b00100000; // hasAddress - + AddLog(LOG_LEVEL_INFO, PSTR("SX1: Init - RX-pin: %d, TX-pin: %d, RTS-pin: %d"), Pin(GPIO_SOLAXX1_RX), Pin(GPIO_SOLAXX1_TX), Pin(GPIO_SOLAXX1_RTS)); solaxX1Serial = new TasmotaSerial(Pin(GPIO_SOLAXX1_RX), Pin(GPIO_SOLAXX1_TX), 1); if (solaxX1Serial->begin(SOLAXX1_SPEED)) { if (solaxX1Serial->hardwareSerial()) { ClaimSerial(); } @@ -426,7 +387,8 @@ const char HTTP_SNS_solaxX1_DATA2[] PROGMEM = const char HTTP_SNS_solaxX1_DATA3[] PROGMEM = "{s}" D_SOLAX_X1 " " D_UPTIME "{m}%s " D_UNIT_HOUR "{e}" "{s}" D_SOLAX_X1 " " D_STATUS "{m}%s" - "{s}" D_SOLAX_X1 " " D_ERROR "{m}%s"; + "{s}" D_SOLAX_X1 " " D_ERROR "{m}%s" + "{s}" D_SOLAX_X1 " Inverter SN{m}%s"; #endif // USE_WEBSERVER void solaxX1Show(bool json) @@ -452,8 +414,7 @@ void solaxX1Show(bool json) char status[33]; GetTextIndexed(status, sizeof(status), solaxX1.runMode + 1, kSolaxMode); - if (json) - { + if (json) { ResponseAppend_P(PSTR(",\"" D_JSON_SOLAR_POWER "\":%s,\"" D_JSON_PV1_VOLTAGE "\":%s,\"" D_JSON_PV1_CURRENT "\":%s,\"" D_JSON_PV1_POWER "\":%s"), solar_power, pv1_voltage, pv1_current, pv1_power); #ifdef SOLAXX1_PV2 @@ -477,7 +438,8 @@ void solaxX1Show(bool json) WSContentSend_Temp(D_SOLAX_X1, solaxX1.temperature); char errorCodeString[33]; WSContentSend_PD(HTTP_SNS_solaxX1_DATA3, runtime, status, - GetTextIndexed(errorCodeString, sizeof(errorCodeString), solaxX1_ParseErrorCode(solaxX1.errorCode), kSolaxError)); + GetTextIndexed(errorCodeString, sizeof(errorCodeString), solaxX1_ParseErrorCode(solaxX1.errorCode), kSolaxError), + solaxX1SerialNumber); #endif // USE_WEBSERVER } } From 9f752b92305d8ec36548626d0d723b95b5cdfa29 Mon Sep 17 00:00:00 2001 From: Roberto Bonacina Date: Sat, 5 Feb 2022 16:56:21 +0100 Subject: [PATCH 008/355] Adafruit_BusIO: bump library to version 1.11.0 The previous included version (1.0.10) was failing to read more than 32 bytes of data from I2C devices (tested on AMG8833 which typically reads 128 bytes -whose support is in progress-). The problem was fixed in version 1.9.0. Currently, this library is required and used just by the Adafruit_VEML7700 library. The VEML7700 sensor has been tested and proved to correctly work. Signed-off-by: Roberto Bonacina --- .../Adafruit_BusIO_Register.cpp | 235 ++++++++--- .../Adafruit_BusIO/Adafruit_BusIO_Register.h | 102 +++-- .../Adafruit_BusIO/Adafruit_I2CDevice.cpp | 154 ++++--- .../Adafruit_BusIO/Adafruit_I2CDevice.h | 31 +- .../Adafruit_BusIO/Adafruit_I2CRegister.h | 4 +- .../Adafruit_BusIO/Adafruit_SPIDevice.cpp | 398 +++++++++++++----- .../Adafruit_BusIO/Adafruit_SPIDevice.h | 103 +++-- lib/lib_i2c/Adafruit_BusIO/CMakeLists.txt | 11 + lib/lib_i2c/Adafruit_BusIO/README.md | 5 +- lib/lib_i2c/Adafruit_BusIO/component.mk | 1 + .../i2corspi_register/i2corspi_register.ino | 4 +- .../spi_register_bits/spi_register_bits.ino | 192 +++++++++ .../examples/spi_registers/spi_registers.ino | 6 +- lib/lib_i2c/Adafruit_BusIO/library.properties | 2 +- 14 files changed, 952 insertions(+), 296 deletions(-) create mode 100644 lib/lib_i2c/Adafruit_BusIO/CMakeLists.txt create mode 100644 lib/lib_i2c/Adafruit_BusIO/component.mk create mode 100644 lib/lib_i2c/Adafruit_BusIO/examples/spi_register_bits/spi_register_bits.ino diff --git a/lib/lib_i2c/Adafruit_BusIO/Adafruit_BusIO_Register.cpp b/lib/lib_i2c/Adafruit_BusIO/Adafruit_BusIO_Register.cpp index 2c2b22e00..f8025257d 100644 --- a/lib/lib_i2c/Adafruit_BusIO/Adafruit_BusIO_Register.cpp +++ b/lib/lib_i2c/Adafruit_BusIO/Adafruit_BusIO_Register.cpp @@ -1,86 +1,133 @@ #include +#if !defined(SPI_INTERFACES_COUNT) || \ + (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0)) + /*! - * @brief Create a register we access over an I2C Device (which defines the bus and address) + * @brief Create a register we access over an I2C Device (which defines the + * bus and address) * @param i2cdevice The I2CDevice to use for underlying I2C access - * @param reg_addr The address pointer value for the I2C/SMBus register, can be 8 or 16 bits + * @param reg_addr The address pointer value for the I2C/SMBus register, can + * be 8 or 16 bits * @param width The width of the register data itself, defaults to 1 byte - * @param bitorder The bit order of the register (used when width is > 1), defaults to LSBFIRST - * @param address_width The width of the register address itself, defaults to 1 byte + * @param byteorder The byte order of the register (used when width is > 1), + * defaults to LSBFIRST + * @param address_width The width of the register address itself, defaults + * to 1 byte */ -Adafruit_BusIO_Register::Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, uint16_t reg_addr, - uint8_t width, uint8_t bitorder, uint8_t address_width) { +Adafruit_BusIO_Register::Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, + uint16_t reg_addr, + uint8_t width, + uint8_t byteorder, + uint8_t address_width) { _i2cdevice = i2cdevice; _spidevice = NULL; _addrwidth = address_width; _address = reg_addr; - _bitorder = bitorder; + _byteorder = byteorder; _width = width; } /*! - * @brief Create a register we access over an SPI Device (which defines the bus and CS pin) - * @param spidevice The SPIDevice to use for underlying I2C access - * @param reg_addr The address pointer value for the I2C/SMBus register, can be 8 or 16 bits - * @param type The method we use to read/write data to SPI (which is not as well defined as I2C) + * @brief Create a register we access over an SPI Device (which defines the + * bus and CS pin) + * @param spidevice The SPIDevice to use for underlying SPI access + * @param reg_addr The address pointer value for the SPI register, can + * be 8 or 16 bits + * @param type The method we use to read/write data to SPI (which is not + * as well defined as I2C) * @param width The width of the register data itself, defaults to 1 byte - * @param bitorder The bit order of the register (used when width is > 1), defaults to LSBFIRST - * @param address_width The width of the register address itself, defaults to 1 byte + * @param byteorder The byte order of the register (used when width is > 1), + * defaults to LSBFIRST + * @param address_width The width of the register address itself, defaults + * to 1 byte */ -Adafruit_BusIO_Register::Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice, uint16_t reg_addr, - Adafruit_BusIO_SPIRegType type, - uint8_t width, uint8_t bitorder, uint8_t address_width) { +Adafruit_BusIO_Register::Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice, + uint16_t reg_addr, + Adafruit_BusIO_SPIRegType type, + uint8_t width, + uint8_t byteorder, + uint8_t address_width) { _spidevice = spidevice; _spiregtype = type; _i2cdevice = NULL; _addrwidth = address_width; _address = reg_addr; - _bitorder = bitorder; + _byteorder = byteorder; _width = width; } /*! - * @brief Create a register we access over an I2C or SPI Device. This is a handy function because we - * can pass in NULL for the unused interface, allowing libraries to mass-define all the registers - * @param i2cdevice The I2CDevice to use for underlying I2C access, if NULL we use SPI - * @param spidevice The SPIDevice to use for underlying I2C access, if NULL we use I2C - * @param reg_addr The address pointer value for the I2C/SMBus register, can be 8 or 16 bits - * @param type The method we use to read/write data to SPI (which is not as well defined as I2C) + * @brief Create a register we access over an I2C or SPI Device. This is a + * handy function because we can pass in NULL for the unused interface, allowing + * libraries to mass-define all the registers + * @param i2cdevice The I2CDevice to use for underlying I2C access, if NULL + * we use SPI + * @param spidevice The SPIDevice to use for underlying SPI access, if NULL + * we use I2C + * @param reg_addr The address pointer value for the I2C/SMBus/SPI register, + * can be 8 or 16 bits + * @param type The method we use to read/write data to SPI (which is not + * as well defined as I2C) * @param width The width of the register data itself, defaults to 1 byte - * @param bitorder The bit order of the register (used when width is > 1), defaults to LSBFIRST - * @param address_width The width of the register address itself, defaults to 1 byte + * @param byteorder The byte order of the register (used when width is > 1), + * defaults to LSBFIRST + * @param address_width The width of the register address itself, defaults + * to 1 byte */ -Adafruit_BusIO_Register::Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, Adafruit_SPIDevice *spidevice, - Adafruit_BusIO_SPIRegType type, uint16_t reg_addr, - uint8_t width, uint8_t bitorder, uint8_t address_width) { +Adafruit_BusIO_Register::Adafruit_BusIO_Register( + Adafruit_I2CDevice *i2cdevice, Adafruit_SPIDevice *spidevice, + Adafruit_BusIO_SPIRegType type, uint16_t reg_addr, uint8_t width, + uint8_t byteorder, uint8_t address_width) { _spidevice = spidevice; _i2cdevice = i2cdevice; _spiregtype = type; _addrwidth = address_width; _address = reg_addr; - _bitorder = bitorder; + _byteorder = byteorder; _width = width; } - /*! * @brief Write a buffer of data to the register location * @param buffer Pointer to data to write * @param len Number of bytes to write - * @return True on successful write (only really useful for I2C as SPI is uncheckable) + * @return True on successful write (only really useful for I2C as SPI is + * uncheckable) */ bool Adafruit_BusIO_Register::write(uint8_t *buffer, uint8_t len) { - uint8_t addrbuffer[2] = {(uint8_t)(_address & 0xFF), (uint8_t)(_address>>8)}; + uint8_t addrbuffer[2] = {(uint8_t)(_address & 0xFF), + (uint8_t)(_address >> 8)}; if (_i2cdevice) { return _i2cdevice->write(buffer, len, true, addrbuffer, _addrwidth); } if (_spidevice) { + if (_spiregtype == ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE) { + // very special case! + + // pass the special opcode address which we set as the high byte of the + // regaddr + addrbuffer[0] = + (uint8_t)(_address >> 8) & ~0x01; // set bottom bit low to write + // the 'actual' reg addr is the second byte then + addrbuffer[1] = (uint8_t)(_address & 0xFF); + // the address appears to be a byte longer + return _spidevice->write(buffer, len, addrbuffer, _addrwidth + 1); + } + if (_spiregtype == ADDRBIT8_HIGH_TOREAD) { addrbuffer[0] &= ~0x80; } - return _spidevice->write( buffer, len, addrbuffer, _addrwidth); + if (_spiregtype == ADDRBIT8_HIGH_TOWRITE) { + addrbuffer[0] |= 0x80; + } + if (_spiregtype == AD8_HIGH_TOREAD_AD7_HIGH_TOINC) { + addrbuffer[0] &= ~0x80; + addrbuffer[0] |= 0x40; + } + return _spidevice->write(buffer, len, addrbuffer, _addrwidth); } return false; } @@ -89,7 +136,8 @@ bool Adafruit_BusIO_Register::write(uint8_t *buffer, uint8_t len) { * @brief Write up to 4 bytes of data to the register location * @param value Data to write * @param numbytes How many bytes from 'value' to write - * @return True on successful write (only really useful for I2C as SPI is uncheckable) + * @return True on successful write (only really useful for I2C as SPI is + * uncheckable) */ bool Adafruit_BusIO_Register::write(uint32_t value, uint8_t numbytes) { if (numbytes == 0) { @@ -99,11 +147,14 @@ bool Adafruit_BusIO_Register::write(uint32_t value, uint8_t numbytes) { return false; } - for (int i=0; i>= 8; } @@ -111,45 +162,72 @@ bool Adafruit_BusIO_Register::write(uint32_t value, uint8_t numbytes) { } /*! - * @brief Read data from the register location. This does not do any error checking! + * @brief Read data from the register location. This does not do any error + * checking! * @return Returns 0xFFFFFFFF on failure, value otherwise */ uint32_t Adafruit_BusIO_Register::read(void) { - if (! read(_buffer, _width)) { + if (!read(_buffer, _width)) { return -1; } uint32_t value = 0; - for (int i=0; i < _width; i++) { - value <<= 8; - if (_bitorder == LSBFIRST) { - value |= _buffer[_width-i-1]; - } else { - value |= _buffer[i]; - } - } + for (int i = 0; i < _width; i++) { + value <<= 8; + if (_byteorder == LSBFIRST) { + value |= _buffer[_width - i - 1]; + } else { + value |= _buffer[i]; + } + } - return value; + return value; } +/*! + * @brief Read cached data from last time we wrote to this register + * @return Returns 0xFFFFFFFF on failure, value otherwise + */ +uint32_t Adafruit_BusIO_Register::readCached(void) { return _cached; } /*! * @brief Read a buffer of data from the register location * @param buffer Pointer to data to read into * @param len Number of bytes to read - * @return True on successful write (only really useful for I2C as SPI is uncheckable) + * @return True on successful write (only really useful for I2C as SPI is + * uncheckable) */ bool Adafruit_BusIO_Register::read(uint8_t *buffer, uint8_t len) { - uint8_t addrbuffer[2] = {(uint8_t)(_address & 0xFF), (uint8_t)(_address>>8)}; + uint8_t addrbuffer[2] = {(uint8_t)(_address & 0xFF), + (uint8_t)(_address >> 8)}; if (_i2cdevice) { return _i2cdevice->write_then_read(addrbuffer, _addrwidth, buffer, len); } if (_spidevice) { + if (_spiregtype == ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE) { + // very special case! + + // pass the special opcode address which we set as the high byte of the + // regaddr + addrbuffer[0] = + (uint8_t)(_address >> 8) | 0x01; // set bottom bit high to read + // the 'actual' reg addr is the second byte then + addrbuffer[1] = (uint8_t)(_address & 0xFF); + // the address appears to be a byte longer + return _spidevice->write_then_read(addrbuffer, _addrwidth + 1, buffer, + len); + } if (_spiregtype == ADDRBIT8_HIGH_TOREAD) { addrbuffer[0] |= 0x80; } + if (_spiregtype == ADDRBIT8_HIGH_TOWRITE) { + addrbuffer[0] &= ~0x80; + } + if (_spiregtype == AD8_HIGH_TOREAD_AD7_HIGH_TOINC) { + addrbuffer[0] |= 0x80 | 0x40; + } return _spidevice->write_then_read(addrbuffer, _addrwidth, buffer, len); } return false; @@ -158,14 +236,15 @@ bool Adafruit_BusIO_Register::read(uint8_t *buffer, uint8_t len) { /*! * @brief Read 2 bytes of data from the register location * @param value Pointer to uint16_t variable to read into - * @return True on successful write (only really useful for I2C as SPI is uncheckable) + * @return True on successful write (only really useful for I2C as SPI is + * uncheckable) */ bool Adafruit_BusIO_Register::read(uint16_t *value) { - if (! read(_buffer, 2)) { + if (!read(_buffer, 2)) { return false; } - if (_bitorder == LSBFIRST) { + if (_byteorder == LSBFIRST) { *value = _buffer[1]; *value <<= 8; *value |= _buffer[0]; @@ -180,10 +259,11 @@ bool Adafruit_BusIO_Register::read(uint16_t *value) { /*! * @brief Read 1 byte of data from the register location * @param value Pointer to uint8_t variable to read into - * @return True on successful write (only really useful for I2C as SPI is uncheckable) + * @return True on successful write (only really useful for I2C as SPI is + * uncheckable) */ bool Adafruit_BusIO_Register::read(uint8_t *value) { - if (! read(_buffer, 1)) { + if (!read(_buffer, 1)) { return false; } @@ -197,7 +277,8 @@ bool Adafruit_BusIO_Register::read(uint8_t *value) { */ void Adafruit_BusIO_Register::print(Stream *s) { uint32_t val = read(); - s->print("0x"); s->print(val, HEX); + s->print("0x"); + s->print(val, HEX); } /*! @@ -209,14 +290,15 @@ void Adafruit_BusIO_Register::println(Stream *s) { s->println(); } - /*! - * @brief Create a slice of the register that we can address without touching other bits + * @brief Create a slice of the register that we can address without + * touching other bits * @param reg The Adafruit_BusIO_Register which defines the bus/register * @param bits The number of bits wide we are slicing * @param shift The number of bits that our bit-slice is shifted from LSB */ -Adafruit_BusIO_RegisterBits::Adafruit_BusIO_RegisterBits(Adafruit_BusIO_Register *reg, uint8_t bits, uint8_t shift) { +Adafruit_BusIO_RegisterBits::Adafruit_BusIO_RegisterBits( + Adafruit_BusIO_Register *reg, uint8_t bits, uint8_t shift) { _register = reg; _bits = bits; _shift = shift; @@ -232,12 +314,13 @@ uint32_t Adafruit_BusIO_RegisterBits::read(void) { return val & ((1 << (_bits)) - 1); } - /*! * @brief Write 4 bytes of data to the register * @param data The 4 bytes to write + * @return True on successful write (only really useful for I2C as SPI is + * uncheckable) */ -void Adafruit_BusIO_RegisterBits::write(uint32_t data) { +bool Adafruit_BusIO_RegisterBits::write(uint32_t data) { uint32_t val = _register->read(); // mask off the data before writing @@ -245,10 +328,10 @@ void Adafruit_BusIO_RegisterBits::write(uint32_t data) { data &= mask; mask <<= _shift; - val &= ~mask; // remove the current data at that spot + val &= ~mask; // remove the current data at that spot val |= data << _shift; // and add in the new data - - _register->write(val, _register->width()); + + return _register->write(val, _register->width()); } /*! @@ -256,3 +339,27 @@ void Adafruit_BusIO_RegisterBits::write(uint32_t data) { * @returns The data width used when initializing the register */ uint8_t Adafruit_BusIO_Register::width(void) { return _width; } + +/*! + * @brief Set the default width of data + * @param width the default width of data read from register + */ +void Adafruit_BusIO_Register::setWidth(uint8_t width) { _width = width; } + +/*! + * @brief Set register address + * @param address the address from register + */ +void Adafruit_BusIO_Register::setAddress(uint16_t address) { + _address = address; +} + +/*! + * @brief Set the width of register address + * @param address_width the width for register address + */ +void Adafruit_BusIO_Register::setAddressWidth(uint16_t address_width) { + _addrwidth = address_width; +} + +#endif // SPI exists diff --git a/lib/lib_i2c/Adafruit_BusIO/Adafruit_BusIO_Register.h b/lib/lib_i2c/Adafruit_BusIO/Adafruit_BusIO_Register.h index 45ae1e146..c6d58de60 100644 --- a/lib/lib_i2c/Adafruit_BusIO/Adafruit_BusIO_Register.h +++ b/lib/lib_i2c/Adafruit_BusIO/Adafruit_BusIO_Register.h @@ -1,69 +1,105 @@ -#include -#include -#include - - #ifndef Adafruit_BusIO_Register_h #define Adafruit_BusIO_Register_h +#include + +#if !defined(SPI_INTERFACES_COUNT) || \ + (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0)) + +#include +#include + typedef enum _Adafruit_BusIO_SPIRegType { ADDRBIT8_HIGH_TOREAD = 0, + /*!< + * ADDRBIT8_HIGH_TOREAD + * When reading a register you must actually send the value 0x80 + register + * address to the device. e.g. To read the register 0x0B the register value + * 0x8B is sent and to write 0x0B is sent. + */ + AD8_HIGH_TOREAD_AD7_HIGH_TOINC = 1, + + /*!< + * ADDRBIT8_HIGH_TOWRITE + * When writing to a register you must actually send the value 0x80 + + * the register address to the device. e.g. To write to the register 0x19 the + * register value 0x99 is sent and to read 0x19 is sent. + */ + ADDRBIT8_HIGH_TOWRITE = 2, + + /*!< + * ADDRESSED_OPCODE_LOWBIT_TO_WRITE + * Used by the MCP23S series, we send 0x40 |'rd with the opcode + * Then set the lowest bit to write + */ + ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE = 3, + } Adafruit_BusIO_SPIRegType; /*! - * @brief The class which defines a device register (a location to read/write data from) + * @brief The class which defines a device register (a location to read/write + * data from) */ class Adafruit_BusIO_Register { - public: - Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, uint16_t reg_addr, - uint8_t width=1, uint8_t bitorder=LSBFIRST, - uint8_t address_width=1); - Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice, uint16_t reg_addr, - Adafruit_BusIO_SPIRegType type, - uint8_t width=1, uint8_t bitorder=LSBFIRST, - uint8_t address_width=1); +public: + Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, uint16_t reg_addr, + uint8_t width = 1, uint8_t byteorder = LSBFIRST, + uint8_t address_width = 1); + + Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice, uint16_t reg_addr, + Adafruit_BusIO_SPIRegType type, uint8_t width = 1, + uint8_t byteorder = LSBFIRST, + uint8_t address_width = 1); Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, - Adafruit_SPIDevice *spidevice, - Adafruit_BusIO_SPIRegType type, - uint16_t reg_addr, - uint8_t width=1, uint8_t bitorder=LSBFIRST, - uint8_t address_width=1); + Adafruit_SPIDevice *spidevice, + Adafruit_BusIO_SPIRegType type, uint16_t reg_addr, + uint8_t width = 1, uint8_t byteorder = LSBFIRST, + uint8_t address_width = 1); bool read(uint8_t *buffer, uint8_t len); bool read(uint8_t *value); bool read(uint16_t *value); uint32_t read(void); + uint32_t readCached(void); bool write(uint8_t *buffer, uint8_t len); - bool write(uint32_t value, uint8_t numbytes=0); + bool write(uint32_t value, uint8_t numbytes = 0); uint8_t width(void); - void print(Stream *s=&Serial); - void println(Stream *s=&Serial); + void setWidth(uint8_t width); + void setAddress(uint16_t address); + void setAddressWidth(uint16_t address_width); - private: + void print(Stream *s = &Serial); + void println(Stream *s = &Serial); + +private: Adafruit_I2CDevice *_i2cdevice; Adafruit_SPIDevice *_spidevice; Adafruit_BusIO_SPIRegType _spiregtype; uint16_t _address; - uint8_t _width, _addrwidth, _bitorder; - uint8_t _buffer[4]; // we wont support anything larger than uint32 for non-buffered read + uint8_t _width, _addrwidth, _byteorder; + uint8_t _buffer[4]; // we won't support anything larger than uint32 for + // non-buffered read + uint32_t _cached = 0; }; - /*! - * @brief The class which defines a slice of bits from within a device register (a location to read/write data from) + * @brief The class which defines a slice of bits from within a device register + * (a location to read/write data from) */ class Adafruit_BusIO_RegisterBits { - public: - Adafruit_BusIO_RegisterBits(Adafruit_BusIO_Register *reg, uint8_t bits, uint8_t shift); - void write(uint32_t value); +public: + Adafruit_BusIO_RegisterBits(Adafruit_BusIO_Register *reg, uint8_t bits, + uint8_t shift); + bool write(uint32_t value); uint32_t read(void); - private: + +private: Adafruit_BusIO_Register *_register; uint8_t _bits, _shift; }; - -#endif //BusIO_Register_h +#endif // SPI exists +#endif // BusIO_Register_h diff --git a/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CDevice.cpp b/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CDevice.cpp index 7813a6df7..716fe1eaf 100644 --- a/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CDevice.cpp +++ b/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CDevice.cpp @@ -1,5 +1,4 @@ -#include -#include +#include "Adafruit_I2CDevice.h" //#define DEBUG_SERIAL Serial @@ -21,20 +20,37 @@ Adafruit_I2CDevice::Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire) { /*! * @brief Initializes and does basic address detection - * @param addr_detect Whether we should attempt to detect the I2C address with a scan. - * 99% of sensors/devices don't mind but once in a while, they spaz on a scan! + * @param addr_detect Whether we should attempt to detect the I2C address + * with a scan. 99% of sensors/devices don't mind but once in a while, they spaz + * on a scan! * @return True if I2C initialized and a device with the addr found */ bool Adafruit_I2CDevice::begin(bool addr_detect) { _wire->begin(); _begun = true; - + if (addr_detect) { return detected(); } return true; } +/*! + * @brief De-initialize device, turn off the Wire interface + */ +void Adafruit_I2CDevice::end(void) { + // Not all port implement Wire::end(), such as + // - ESP8266 + // - AVR core without WIRE_HAS_END + // - ESP32: end() is implemented since 2.0.1 which is latest at the moment. + // Temporarily disable for now to give time for user to update. +#if !(defined(ESP8266) || \ + (defined(ARDUINO_ARCH_AVR) && !defined(WIRE_HAS_END)) || \ + defined(ARDUINO_ARCH_ESP32)) + _wire->end(); + _begun = false; +#endif +} /*! * @brief Scans I2C for the address - note will give a false-positive @@ -49,24 +65,35 @@ bool Adafruit_I2CDevice::detected(void) { // A basic scanner, see if it ACK's _wire->beginTransmission(_addr); - if (_wire->endTransmission () == 0) { + if (_wire->endTransmission() == 0) { +#ifdef DEBUG_SERIAL + DEBUG_SERIAL.println(F("Detected")); +#endif return true; } +#ifdef DEBUG_SERIAL + DEBUG_SERIAL.println(F("Not detected")); +#endif return false; } /*! - * @brief Write a buffer or two to the I2C device. Cannot be more than maxBufferSize() bytes. - * @param buffer Pointer to buffer of data to write + * @brief Write a buffer or two to the I2C device. Cannot be more than + * maxBufferSize() bytes. + * @param buffer Pointer to buffer of data to write. This is const to + * ensure the content of this buffer doesn't change. * @param len Number of bytes from buffer to write - * @param prefix_buffer Pointer to optional array of data to write before buffer. - * Cannot be more than maxBufferSize() bytes. + * @param prefix_buffer Pointer to optional array of data to write before + * buffer. Cannot be more than maxBufferSize() bytes. This is const to + * ensure the content of this buffer doesn't change. * @param prefix_len Number of bytes from prefix buffer to write * @param stop Whether to send an I2C STOP signal on write * @return True if write was successful, otherwise false. */ -bool Adafruit_I2CDevice::write(uint8_t *buffer, size_t len, bool stop, uint8_t *prefix_buffer, size_t prefix_len) { - if ((len+prefix_len) > maxBufferSize()) { +bool Adafruit_I2CDevice::write(const uint8_t *buffer, size_t len, bool stop, + const uint8_t *prefix_buffer, + size_t prefix_len) { + if ((len + prefix_len) > maxBufferSize()) { // currently not guaranteed to work if more than 32 bytes! // we will need to find out if some platforms have larger // I2C buffer sizes :/ @@ -97,45 +124,47 @@ bool Adafruit_I2CDevice::write(uint8_t *buffer, size_t len, bool stop, uint8_t * } #ifdef DEBUG_SERIAL - DEBUG_SERIAL.print(F("\tI2CDevice Wrote: ")); + + DEBUG_SERIAL.print(F("\tI2CWRITE @ 0x")); + DEBUG_SERIAL.print(_addr, HEX); + DEBUG_SERIAL.print(F(" :: ")); if ((prefix_len != 0) && (prefix_buffer != NULL)) { - for (uint16_t i=0; iendTransmission(stop) == 0) { #ifdef DEBUG_SERIAL - DEBUG_SERIAL.println("Sent!"); + DEBUG_SERIAL.println(); + // DEBUG_SERIAL.println("Sent!"); #endif return true; } else { #ifdef DEBUG_SERIAL - DEBUG_SERIAL.println("Failed to send!"); + DEBUG_SERIAL.println("\tFailed to send!"); #endif return false; } } - /*! - * @brief Read from I2C into a buffer from the I2C device. + * @brief Read from I2C into a buffer from the I2C device. * Cannot be more than maxBufferSize() bytes. * @param buffer Pointer to buffer of data to read into * @param len Number of bytes from buffer to read. @@ -143,17 +172,25 @@ bool Adafruit_I2CDevice::write(uint8_t *buffer, size_t len, bool stop, uint8_t * * @return True if read was successful, otherwise false. */ bool Adafruit_I2CDevice::read(uint8_t *buffer, size_t len, bool stop) { - if (len > maxBufferSize()) { - // currently not guaranteed to work if more than 32 bytes! - // we will need to find out if some platforms have larger - // I2C buffer sizes :/ -#ifdef DEBUG_SERIAL - DEBUG_SERIAL.println(F("\tI2CDevice could not read such a large buffer")); -#endif - return false; + size_t pos = 0; + while (pos < len) { + size_t read_len = + ((len - pos) > maxBufferSize()) ? maxBufferSize() : (len - pos); + bool read_stop = (pos < (len - read_len)) ? false : stop; + if (!_read(buffer + pos, read_len, read_stop)) + return false; + pos += read_len; } + return true; +} +bool Adafruit_I2CDevice::_read(uint8_t *buffer, size_t len, bool stop) { +#if defined(TinyWireM_h) + size_t recv = _wire->requestFrom((uint8_t)_addr, (uint8_t)len); +#else size_t recv = _wire->requestFrom((uint8_t)_addr, (uint8_t)len, (uint8_t)stop); +#endif + if (recv != len) { // Not enough data available to fulfill our obligation! #ifdef DEBUG_SERIAL @@ -163,15 +200,17 @@ bool Adafruit_I2CDevice::read(uint8_t *buffer, size_t len, bool stop) { return false; } - for (uint16_t i=0; iread(); } #ifdef DEBUG_SERIAL - DEBUG_SERIAL.print(F("\tI2CDevice Read: ")); - for (uint16_t i=0; i= 157) && !defined(ARDUINO_STM32_FEATHER) && !defined(TinyWireM_h) + _wire->setClock(desiredclk); + return true; +#else + (void)desiredclk; + return false; +#endif } diff --git a/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CDevice.h b/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CDevice.h index be0a6c962..5baa6fda8 100644 --- a/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CDevice.h +++ b/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CDevice.h @@ -1,29 +1,36 @@ -#include - #ifndef Adafruit_I2CDevice_h #define Adafruit_I2CDevice_h +#include +#include + ///< The class which defines how we will talk to this device over I2C class Adafruit_I2CDevice { - public: - Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire=&Wire); +public: + Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire = &Wire); uint8_t address(void); - bool begin(bool addr_detect=true); + bool begin(bool addr_detect = true); + void end(void); bool detected(void); - bool read(uint8_t *buffer, size_t len, bool stop=true); - bool write(uint8_t *buffer, size_t len, bool stop=true, uint8_t *prefix_buffer=NULL, size_t prefix_len=0); - bool write_then_read(uint8_t *write_buffer, size_t write_len, uint8_t *read_buffer, size_t read_len, bool stop=false); + bool read(uint8_t *buffer, size_t len, bool stop = true); + bool write(const uint8_t *buffer, size_t len, bool stop = true, + const uint8_t *prefix_buffer = NULL, size_t prefix_len = 0); + bool write_then_read(const uint8_t *write_buffer, size_t write_len, + uint8_t *read_buffer, size_t read_len, + bool stop = false); + bool setSpeed(uint32_t desiredclk); /*! @brief How many bytes we can read in a transaction - * @return The size of the Wire receive/transmit buffer */ - uint16_t maxBufferSize() { return _maxBufferSize; } + * @return The size of the Wire receive/transmit buffer */ + size_t maxBufferSize() { return _maxBufferSize; } - private: +private: uint8_t _addr; TwoWire *_wire; bool _begun; - uint16_t _maxBufferSize; + size_t _maxBufferSize; + bool _read(uint8_t *buffer, size_t len, bool stop); }; #endif // Adafruit_I2CDevice_h diff --git a/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CRegister.h b/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CRegister.h index 703e93b76..186850fa6 100644 --- a/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CRegister.h +++ b/lib/lib_i2c/Adafruit_BusIO/Adafruit_I2CRegister.h @@ -1,7 +1,9 @@ -#include "Adafruit_BusIO_Register.h" #ifndef _ADAFRUIT_I2C_REGISTER_H_ #define _ADAFRUIT_I2C_REGISTER_H_ +#include +#include + typedef Adafruit_BusIO_Register Adafruit_I2CRegister; typedef Adafruit_BusIO_RegisterBits Adafruit_I2CRegisterBits; diff --git a/lib/lib_i2c/Adafruit_BusIO/Adafruit_SPIDevice.cpp b/lib/lib_i2c/Adafruit_BusIO/Adafruit_SPIDevice.cpp index 1d599bb11..fdd50c0e8 100644 --- a/lib/lib_i2c/Adafruit_BusIO/Adafruit_SPIDevice.cpp +++ b/lib/lib_i2c/Adafruit_BusIO/Adafruit_SPIDevice.cpp @@ -1,17 +1,22 @@ -#include -#include +#include "Adafruit_SPIDevice.h" + +#if !defined(SPI_INTERFACES_COUNT) || \ + (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0)) //#define DEBUG_SERIAL Serial /*! - * @brief Create an SPI device with the given CS pin and settins + * @brief Create an SPI device with the given CS pin and settings * @param cspin The arduino pin number to use for chip select * @param freq The SPI clock frequency to use, defaults to 1MHz - * @param dataOrder The SPI data order to use for bits within each byte, defaults to SPI_BITORDER_MSBFIRST + * @param dataOrder The SPI data order to use for bits within each byte, + * defaults to SPI_BITORDER_MSBFIRST * @param dataMode The SPI mode to use, defaults to SPI_MODE0 * @param theSPI The SPI bus to use, defaults to &theSPI */ -Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, uint32_t freq, BitOrder dataOrder, uint8_t dataMode, SPIClass *theSPI) { +Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, uint32_t freq, + BusIOBitOrder dataOrder, + uint8_t dataMode, SPIClass *theSPI) { _cs = cspin; _sck = _mosi = _miso = -1; _spi = theSPI; @@ -23,21 +28,42 @@ Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, uint32_t freq, BitOrder dat } /*! - * @brief Create an SPI device with the given CS pin and settins + * @brief Create an SPI device with the given CS pin and settings * @param cspin The arduino pin number to use for chip select * @param sckpin The arduino pin number to use for SCK - * @param misopin The arduino pin number to use for MISO, set to -1 if not used - * @param mosipin The arduino pin number to use for MOSI, set to -1 if not used + * @param misopin The arduino pin number to use for MISO, set to -1 if not + * used + * @param mosipin The arduino pin number to use for MOSI, set to -1 if not + * used * @param freq The SPI clock frequency to use, defaults to 1MHz - * @param dataOrder The SPI data order to use for bits within each byte, defaults to SPI_BITORDER_MSBFIRST + * @param dataOrder The SPI data order to use for bits within each byte, + * defaults to SPI_BITORDER_MSBFIRST * @param dataMode The SPI mode to use, defaults to SPI_MODE0 */ -Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, int8_t sckpin, int8_t misopin, int8_t mosipin, - uint32_t freq, BitOrder dataOrder, uint8_t dataMode) { +Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, int8_t sckpin, + int8_t misopin, int8_t mosipin, + uint32_t freq, BusIOBitOrder dataOrder, + uint8_t dataMode) { _cs = cspin; _sck = sckpin; _miso = misopin; _mosi = mosipin; + +#ifdef BUSIO_USE_FAST_PINIO + csPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(cspin)); + csPinMask = digitalPinToBitMask(cspin); + if (mosipin != -1) { + mosiPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(mosipin)); + mosiPinMask = digitalPinToBitMask(mosipin); + } + if (misopin != -1) { + misoPort = (BusIO_PortReg *)portInputRegister(digitalPinToPort(misopin)); + misoPinMask = digitalPinToBitMask(misopin); + } + clkPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(sckpin)); + clkPinMask = digitalPinToBitMask(sckpin); +#endif + _freq = freq; _dataOrder = dataOrder; _dataMode = dataMode; @@ -46,24 +72,38 @@ Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, int8_t sckpin, int8_t misop _spi = NULL; } +/*! + * @brief Release memory allocated in constructors + */ +Adafruit_SPIDevice::~Adafruit_SPIDevice() { + if (_spiSetting) { + delete _spiSetting; + _spiSetting = nullptr; + } +} /*! * @brief Initializes SPI bus and sets CS pin high - * @return Always returns true because there's no way to test success of SPI init + * @return Always returns true because there's no way to test success of SPI + * init */ bool Adafruit_SPIDevice::begin(void) { - pinMode(_cs, OUTPUT); - digitalWrite(_cs, HIGH); + if (_cs != -1) { + pinMode(_cs, OUTPUT); + digitalWrite(_cs, HIGH); + } if (_spi) { // hardware SPI _spi->begin(); } else { pinMode(_sck, OUTPUT); - if (_dataMode==SPI_MODE0) { - digitalWrite(_sck, HIGH); - } else { + if ((_dataMode == SPI_MODE0) || (_dataMode == SPI_MODE1)) { + // idle low on mode 0 and 1 digitalWrite(_sck, LOW); + } else { + // idle high on mode 2 or 3 + digitalWrite(_sck, HIGH); } if (_mosi != -1) { pinMode(_mosi, OUTPUT); @@ -73,12 +113,11 @@ bool Adafruit_SPIDevice::begin(void) { pinMode(_miso, INPUT); } } - + _begun = true; return true; } - /*! * @brief Transfer (send/receive) one byte over hard/soft SPI * @param buffer The buffer to send and receive at the same time @@ -87,60 +126,135 @@ bool Adafruit_SPIDevice::begin(void) { void Adafruit_SPIDevice::transfer(uint8_t *buffer, size_t len) { if (_spi) { // hardware SPI is easy + +#if defined(SPARK) + _spi->transfer(buffer, buffer, len, NULL); +#elif defined(STM32) + for (size_t i = 0; i < len; i++) { + _spi->transfer(buffer[i]); + } +#else _spi->transfer(buffer, len); +#endif return; } + uint8_t startbit; + if (_dataOrder == SPI_BITORDER_LSBFIRST) { + startbit = 0x1; + } else { + startbit = 0x80; + } + + bool towrite, lastmosi = !(buffer[0] & startbit); + uint8_t bitdelay_us = (1000000 / _freq) / 2; + // for softSPI we'll do it by hand - for (size_t i=0; i> b) & 0x1) << (7-b); - } - send = temp; - } - for (int b=7; b>=0; b--) { - reply <<= 1; - if (_dataMode == SPI_MODE0) { - digitalWrite(_sck, LOW); - digitalWrite(_mosi, send & (1< 0x"); + */ - if (_dataOrder == SPI_BITORDER_LSBFIRST) { - // LSB is rare, if it happens we'll just flip the bits around for them - uint8_t temp = 0; - for (uint8_t b=0; b<8; b++) { - temp |= ((reply >> b) & 0x1) << (7-b); - } - reply = temp; - } + // Serial.print(send, HEX); + for (uint8_t b = startbit; b != 0; + b = (_dataOrder == SPI_BITORDER_LSBFIRST) ? b << 1 : b >> 1) { - buffer[i] = reply; + if (bitdelay_us) { + delayMicroseconds(bitdelay_us); + } + + if (_dataMode == SPI_MODE0 || _dataMode == SPI_MODE2) { + towrite = send & b; + if ((_mosi != -1) && (lastmosi != towrite)) { +#ifdef BUSIO_USE_FAST_PINIO + if (towrite) + *mosiPort |= mosiPinMask; + else + *mosiPort &= ~mosiPinMask; +#else + digitalWrite(_mosi, towrite); +#endif + lastmosi = towrite; + } + +#ifdef BUSIO_USE_FAST_PINIO + *clkPort |= clkPinMask; // Clock high +#else + digitalWrite(_sck, HIGH); +#endif + + if (bitdelay_us) { + delayMicroseconds(bitdelay_us); + } + + if (_miso != -1) { +#ifdef BUSIO_USE_FAST_PINIO + if (*misoPort & misoPinMask) { +#else + if (digitalRead(_miso)) { +#endif + reply |= b; + } + } + +#ifdef BUSIO_USE_FAST_PINIO + *clkPort &= ~clkPinMask; // Clock low +#else + digitalWrite(_sck, LOW); +#endif + } else { // if (_dataMode == SPI_MODE1 || _dataMode == SPI_MODE3) + +#ifdef BUSIO_USE_FAST_PINIO + *clkPort |= clkPinMask; // Clock high +#else + digitalWrite(_sck, HIGH); +#endif + + if (bitdelay_us) { + delayMicroseconds(bitdelay_us); + } + + if (_mosi != -1) { +#ifdef BUSIO_USE_FAST_PINIO + if (send & b) + *mosiPort |= mosiPinMask; + else + *mosiPort &= ~mosiPinMask; +#else + digitalWrite(_mosi, send & b); +#endif + } + +#ifdef BUSIO_USE_FAST_PINIO + *clkPort &= ~clkPinMask; // Clock low +#else + digitalWrite(_sck, LOW); +#endif + + if (_miso != -1) { +#ifdef BUSIO_USE_FAST_PINIO + if (*misoPort & misoPinMask) { +#else + if (digitalRead(_miso)) { +#endif + reply |= b; + } + } + } + if (_miso != -1) { + buffer[i] = reply; + } + } } return; } - - /*! * @brief Transfer (send/receive) one byte over hard/soft SPI * @param send The byte to send @@ -152,29 +266,62 @@ uint8_t Adafruit_SPIDevice::transfer(uint8_t send) { return data; } +/*! + * @brief Manually begin a transaction (calls beginTransaction if hardware + * SPI) + */ +void Adafruit_SPIDevice::beginTransaction(void) { + if (_spi) { + _spi->beginTransaction(*_spiSetting); + } +} + +/*! + * @brief Manually end a transaction (calls endTransaction if hardware SPI) + */ +void Adafruit_SPIDevice::endTransaction(void) { + if (_spi) { + _spi->endTransaction(); + } +} /*! * @brief Write a buffer or two to the SPI device. * @param buffer Pointer to buffer of data to write * @param len Number of bytes from buffer to write - * @param prefix_buffer Pointer to optional array of data to write before buffer. + * @param prefix_buffer Pointer to optional array of data to write before + * buffer. * @param prefix_len Number of bytes from prefix buffer to write - * @return Always returns true because there's no way to test success of SPI writes + * @return Always returns true because there's no way to test success of SPI + * writes */ -bool Adafruit_SPIDevice::write(uint8_t *buffer, size_t len, uint8_t *prefix_buffer, size_t prefix_len) { +bool Adafruit_SPIDevice::write(uint8_t *buffer, size_t len, + uint8_t *prefix_buffer, size_t prefix_len) { if (_spi) { _spi->beginTransaction(*_spiSetting); } - digitalWrite(_cs, LOW); + setChipSelect(LOW); // do the writing - for (size_t i=0; i 0) { + _spi->transferBytes(prefix_buffer, nullptr, prefix_len); + } + if (len > 0) { + _spi->transferBytes(buffer, nullptr, len); + } + } else +#endif + { + for (size_t i = 0; i < prefix_len; i++) { + transfer(prefix_buffer[i]); + } + for (size_t i = 0; i < len; i++) { + transfer(buffer[i]); + } } - for (size_t i=0; iendTransaction(); @@ -183,17 +330,17 @@ bool Adafruit_SPIDevice::write(uint8_t *buffer, size_t len, uint8_t *prefix_buff #ifdef DEBUG_SERIAL DEBUG_SERIAL.print(F("\tSPIDevice Wrote: ")); if ((prefix_len != 0) && (prefix_buffer != NULL)) { - for (uint16_t i=0; ibeginTransaction(*_spiSetting); } - digitalWrite(_cs, LOW); - transfer(buffer, len); - digitalWrite(_cs, HIGH); + + setChipSelect(LOW); + transfer(buffer, len); + setChipSelect(HIGH); if (_spi) { _spi->endTransaction(); @@ -225,9 +375,9 @@ bool Adafruit_SPIDevice::read(uint8_t *buffer, size_t len, uint8_t sendvalue) { #ifdef DEBUG_SERIAL DEBUG_SERIAL.print(F("\tSPIDevice Read: ")); - for (uint16_t i=0; ibeginTransaction(*_spiSetting); } - digitalWrite(_cs, LOW); + setChipSelect(LOW); // do the writing - for (size_t i=0; i 0) { + _spi->transferBytes(write_buffer, nullptr, write_len); + } + } else +#endif + { + for (size_t i = 0; i < write_len; i++) { + transfer(write_buffer[i]); + } } #ifdef DEBUG_SERIAL DEBUG_SERIAL.print(F("\tSPIDevice Wrote: ")); - for (uint16_t i=0; iendTransaction(); @@ -299,3 +463,37 @@ bool Adafruit_SPIDevice::write_then_read(uint8_t *write_buffer, size_t write_len return true; } + +/*! + * @brief Write some data and read some data at the same time from SPI + * into the same buffer. This is basicaly a wrapper for transfer() with + * CS-pin and transaction management. + * This /does/ transmit-receive at the same time! + * @param buffer Pointer to buffer of data to write/read to/from + * @param len Number of bytes from buffer to write/read. + * @return Always returns true because there's no way to test success of SPI + * writes + */ +bool Adafruit_SPIDevice::write_and_read(uint8_t *buffer, size_t len) { + if (_spi) { + _spi->beginTransaction(*_spiSetting); + } + + setChipSelect(LOW); + transfer(buffer, len); + setChipSelect(HIGH); + + if (_spi) { + _spi->endTransaction(); + } + + return true; +} + +void Adafruit_SPIDevice::setChipSelect(int value) { + if (_cs == -1) + return; + digitalWrite(_cs, value); +} + +#endif // SPI exists diff --git a/lib/lib_i2c/Adafruit_BusIO/Adafruit_SPIDevice.h b/lib/lib_i2c/Adafruit_BusIO/Adafruit_SPIDevice.h index 987cb3f62..8de31d050 100644 --- a/lib/lib_i2c/Adafruit_BusIO/Adafruit_SPIDevice.h +++ b/lib/lib_i2c/Adafruit_BusIO/Adafruit_SPIDevice.h @@ -1,62 +1,109 @@ -#include - #ifndef Adafruit_SPIDevice_h #define Adafruit_SPIDevice_h +#include + +#if !defined(SPI_INTERFACES_COUNT) || \ + (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0)) + +#include + // some modern SPI definitions don't have BitOrder enum -#if (defined(__AVR__) && !defined(ARDUINO_ARCH_MEGAAVR)) || defined(ESP8266) || defined(TEENSYDUINO) +#if (defined(__AVR__) && !defined(ARDUINO_ARCH_MEGAAVR)) || \ + defined(ESP8266) || defined(TEENSYDUINO) || defined(SPARK) || \ + defined(ARDUINO_ARCH_SPRESENSE) || defined(MEGATINYCORE) || \ + defined(DXCORE) || defined(ARDUINO_AVR_ATmega4809) || \ + defined(ARDUINO_AVR_ATmega4808) || defined(ARDUINO_AVR_ATmega3209) || \ + defined(ARDUINO_AVR_ATmega3208) || defined(ARDUINO_AVR_ATmega1609) || \ + defined(ARDUINO_AVR_ATmega1608) || defined(ARDUINO_AVR_ATmega809) || \ + defined(ARDUINO_AVR_ATmega808) || defined(ARDUINO_ARCH_ARC32) + typedef enum _BitOrder { SPI_BITORDER_MSBFIRST = MSBFIRST, SPI_BITORDER_LSBFIRST = LSBFIRST, -} BitOrder; -#endif +} BusIOBitOrder; -// some modern SPI definitions don't have BitOrder enum and have different SPI mode defines -#if defined(ESP32) +#elif defined(ESP32) || defined(__ASR6501__) || defined(__ASR6502__) + +// some modern SPI definitions don't have BitOrder enum and have different SPI +// mode defines typedef enum _BitOrder { SPI_BITORDER_MSBFIRST = SPI_MSBFIRST, SPI_BITORDER_LSBFIRST = SPI_LSBFIRST, -} BitOrder; -#endif +} BusIOBitOrder; +#else // Some platforms have a BitOrder enum but its named MSBFIRST/LSBFIRST -#if defined(ARDUINO_ARCH_SAMD) || defined(__SAM3X8E__) || defined(NRF52_SERIES) || defined(ARDUINO_ARCH_ARDUINO_CORE_STM32) || defined(ARDUINO_ARCH_MEGAAVR) || defined(_STM32_DEF_) - #define SPI_BITORDER_MSBFIRST MSBFIRST - #define SPI_BITORDER_LSBFIRST LSBFIRST +#define SPI_BITORDER_MSBFIRST MSBFIRST +#define SPI_BITORDER_LSBFIRST LSBFIRST +typedef BitOrder BusIOBitOrder; #endif -///< The class which defines how we will talk to this device over SPI +#if defined(__AVR__) || defined(TEENSYDUINO) +typedef volatile uint8_t BusIO_PortReg; +typedef uint8_t BusIO_PortMask; +#define BUSIO_USE_FAST_PINIO + +#elif defined(ESP8266) || defined(ESP32) || defined(__SAM3X8E__) || \ + defined(ARDUINO_ARCH_SAMD) +typedef volatile uint32_t BusIO_PortReg; +typedef uint32_t BusIO_PortMask; +#define BUSIO_USE_FAST_PINIO + +#elif (defined(__arm__) || defined(ARDUINO_FEATHER52)) && \ + !defined(ARDUINO_ARCH_MBED) && !defined(ARDUINO_ARCH_RP2040) +typedef volatile uint32_t BusIO_PortReg; +typedef uint32_t BusIO_PortMask; +#if !defined(__ASR6501__) && !defined(__ASR6502__) +#define BUSIO_USE_FAST_PINIO +#endif + +#else +#undef BUSIO_USE_FAST_PINIO +#endif + +/**! The class which defines how we will talk to this device over SPI **/ class Adafruit_SPIDevice { - public: - Adafruit_SPIDevice(int8_t cspin, - uint32_t freq=1000000, - BitOrder dataOrder=SPI_BITORDER_MSBFIRST, - uint8_t dataMode=SPI_MODE0, - SPIClass *theSPI=&SPI); +public: + Adafruit_SPIDevice(int8_t cspin, uint32_t freq = 1000000, + BusIOBitOrder dataOrder = SPI_BITORDER_MSBFIRST, + uint8_t dataMode = SPI_MODE0, SPIClass *theSPI = &SPI); Adafruit_SPIDevice(int8_t cspin, int8_t sck, int8_t miso, int8_t mosi, - uint32_t freq=1000000, - BitOrder dataOrder=SPI_BITORDER_MSBFIRST, - uint8_t dataMode=SPI_MODE0); + uint32_t freq = 1000000, + BusIOBitOrder dataOrder = SPI_BITORDER_MSBFIRST, + uint8_t dataMode = SPI_MODE0); + ~Adafruit_SPIDevice(); bool begin(void); - bool read(uint8_t *buffer, size_t len, uint8_t sendvalue=0xFF); - bool write(uint8_t *buffer, size_t len, uint8_t *prefix_buffer=NULL, size_t prefix_len=0); - bool write_then_read(uint8_t *write_buffer, size_t write_len, uint8_t *read_buffer, size_t read_len, uint8_t sendvalue=0xFF); + bool read(uint8_t *buffer, size_t len, uint8_t sendvalue = 0xFF); + bool write(uint8_t *buffer, size_t len, uint8_t *prefix_buffer = NULL, + size_t prefix_len = 0); + bool write_then_read(uint8_t *write_buffer, size_t write_len, + uint8_t *read_buffer, size_t read_len, + uint8_t sendvalue = 0xFF); + bool write_and_read(uint8_t *buffer, size_t len); uint8_t transfer(uint8_t send); void transfer(uint8_t *buffer, size_t len); + void beginTransaction(void); + void endTransaction(void); - private: - +private: SPIClass *_spi; SPISettings *_spiSetting; uint32_t _freq; - BitOrder _dataOrder; + BusIOBitOrder _dataOrder; uint8_t _dataMode; + void setChipSelect(int value); int8_t _cs, _sck, _mosi, _miso; +#ifdef BUSIO_USE_FAST_PINIO + BusIO_PortReg *mosiPort, *clkPort, *misoPort, *csPort; + BusIO_PortMask mosiPinMask, misoPinMask, clkPinMask, csPinMask; +#endif bool _begun; }; +#endif // has SPI defined #endif // Adafruit_SPIDevice_h diff --git a/lib/lib_i2c/Adafruit_BusIO/CMakeLists.txt b/lib/lib_i2c/Adafruit_BusIO/CMakeLists.txt new file mode 100644 index 000000000..880b1aa99 --- /dev/null +++ b/lib/lib_i2c/Adafruit_BusIO/CMakeLists.txt @@ -0,0 +1,11 @@ +# Adafruit Bus IO Library +# https://github.com/adafruit/Adafruit_BusIO +# MIT License + +cmake_minimum_required(VERSION 3.5) + +idf_component_register(SRCS "Adafruit_I2CDevice.cpp" "Adafruit_BusIO_Register.cpp" "Adafruit_SPIDevice.cpp" + INCLUDE_DIRS "." + REQUIRES arduino) + +project(Adafruit_BusIO) diff --git a/lib/lib_i2c/Adafruit_BusIO/README.md b/lib/lib_i2c/Adafruit_BusIO/README.md index a1830809c..1cc06a156 100644 --- a/lib/lib_i2c/Adafruit_BusIO/README.md +++ b/lib/lib_i2c/Adafruit_BusIO/README.md @@ -1,6 +1,7 @@ -# Adafruit Bus IO Library [![Build Status](https://travis-ci.com/adafruit/Adafruit_BusIO.svg?branch=master)](https://travis-ci.com/adafruit/Adafruit_BusIO) +# Adafruit Bus IO Library [![Build Status](https://github.com/adafruit/Adafruit_BusIO/workflows/Arduino%20Library%20CI/badge.svg)](https://github.com/adafruit/Adafruit_BusIO/actions) -This is a helper libary to abstract away I2C & SPI transactions and registers + +This is a helper library to abstract away I2C & SPI transactions and registers Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! diff --git a/lib/lib_i2c/Adafruit_BusIO/component.mk b/lib/lib_i2c/Adafruit_BusIO/component.mk new file mode 100644 index 000000000..049f190ee --- /dev/null +++ b/lib/lib_i2c/Adafruit_BusIO/component.mk @@ -0,0 +1 @@ +COMPONENT_ADD_INCLUDEDIRS = . diff --git a/lib/lib_i2c/Adafruit_BusIO/examples/i2corspi_register/i2corspi_register.ino b/lib/lib_i2c/Adafruit_BusIO/examples/i2corspi_register/i2corspi_register.ino index 555cf3b0d..992a2e004 100644 --- a/lib/lib_i2c/Adafruit_BusIO/examples/i2corspi_register/i2corspi_register.ino +++ b/lib/lib_i2c/Adafruit_BusIO/examples/i2corspi_register/i2corspi_register.ino @@ -28,11 +28,11 @@ void setup() { } Adafruit_BusIO_Register id_reg = Adafruit_BusIO_Register(i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, 0x0F); - uint8_t id; + uint8_t id=0; id_reg.read(&id); Serial.print("ID register = 0x"); Serial.println(id, HEX); } void loop() { -} \ No newline at end of file +} diff --git a/lib/lib_i2c/Adafruit_BusIO/examples/spi_register_bits/spi_register_bits.ino b/lib/lib_i2c/Adafruit_BusIO/examples/spi_register_bits/spi_register_bits.ino new file mode 100644 index 000000000..e70a17b35 --- /dev/null +++ b/lib/lib_i2c/Adafruit_BusIO/examples/spi_register_bits/spi_register_bits.ino @@ -0,0 +1,192 @@ +/*************************************************** + + This is an example for how to use Adafruit_BusIO_RegisterBits from Adafruit_BusIO library. + + Designed specifically to work with the Adafruit RTD Sensor + ----> https://www.adafruit.com/products/3328 + uisng a MAX31865 RTD-to-Digital Converter + ----> https://datasheets.maximintegrated.com/en/ds/MAX31865.pdf + + This sensor uses SPI to communicate, 4 pins are required to + interface. + A fifth pin helps to detect when a new conversion is ready. + + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + Example written (2020/3) by Andreas Hardtung/AnHard. + BSD license, all text above must be included in any redistribution + ****************************************************/ + +#include +#include + +#define MAX31865_SPI_SPEED (5000000) +#define MAX31865_SPI_BITORDER (SPI_BITORDER_MSBFIRST) +#define MAX31865_SPI_MODE (SPI_MODE1) + +#define MAX31865_SPI_CS (10) +#define MAX31865_READY_PIN (2) + + +Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice( MAX31865_SPI_CS, MAX31865_SPI_SPEED, MAX31865_SPI_BITORDER, MAX31865_SPI_MODE, &SPI); // Hardware SPI +// Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice( MAX31865_SPI_CS, 13, 12, 11, MAX31865_SPI_SPEED, MAX31865_SPI_BITORDER, MAX31865_SPI_MODE); // Software SPI + +// MAX31865 chip related ********************************************************************************************* +Adafruit_BusIO_Register config_reg = Adafruit_BusIO_Register(&spi_dev, 0x00, ADDRBIT8_HIGH_TOWRITE, 1, MSBFIRST); +Adafruit_BusIO_RegisterBits bias_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 7); +Adafruit_BusIO_RegisterBits auto_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 6); +Adafruit_BusIO_RegisterBits oneS_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 5); +Adafruit_BusIO_RegisterBits wire_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 4); +Adafruit_BusIO_RegisterBits faultT_bits = Adafruit_BusIO_RegisterBits(&config_reg, 2, 2); +Adafruit_BusIO_RegisterBits faultR_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 1); +Adafruit_BusIO_RegisterBits fi50hz_bit = Adafruit_BusIO_RegisterBits(&config_reg, 1, 0); + +Adafruit_BusIO_Register rRatio_reg = Adafruit_BusIO_Register(&spi_dev, 0x01, ADDRBIT8_HIGH_TOWRITE, 2, MSBFIRST); +Adafruit_BusIO_RegisterBits rRatio_bits = Adafruit_BusIO_RegisterBits(&rRatio_reg, 15, 1); +Adafruit_BusIO_RegisterBits fault_bit = Adafruit_BusIO_RegisterBits(&rRatio_reg, 1, 0); + +Adafruit_BusIO_Register maxRratio_reg = Adafruit_BusIO_Register(&spi_dev, 0x03, ADDRBIT8_HIGH_TOWRITE, 2, MSBFIRST); +Adafruit_BusIO_RegisterBits maxRratio_bits = Adafruit_BusIO_RegisterBits(&maxRratio_reg, 15, 1); + +Adafruit_BusIO_Register minRratio_reg = Adafruit_BusIO_Register(&spi_dev, 0x05, ADDRBIT8_HIGH_TOWRITE, 2, MSBFIRST); +Adafruit_BusIO_RegisterBits minRratio_bits = Adafruit_BusIO_RegisterBits(&minRratio_reg, 15, 1); + +Adafruit_BusIO_Register fault_reg = Adafruit_BusIO_Register(&spi_dev, 0x07, ADDRBIT8_HIGH_TOWRITE, 1, MSBFIRST); +Adafruit_BusIO_RegisterBits range_high_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 7); +Adafruit_BusIO_RegisterBits range_low_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 6); +Adafruit_BusIO_RegisterBits refin_high_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 5); +Adafruit_BusIO_RegisterBits refin_low_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 4); +Adafruit_BusIO_RegisterBits rtdin_low_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 3); +Adafruit_BusIO_RegisterBits voltage_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 2); + +// Print the details of the configuration register. +void printConfig( void ) { + Serial.print("BIAS: "); if (bias_bit.read() ) Serial.print("ON"); else Serial.print("OFF"); + Serial.print(", AUTO: "); if (auto_bit.read() ) Serial.print("ON"); else Serial.print("OFF"); + Serial.print(", ONES: "); if (oneS_bit.read() ) Serial.print("ON"); else Serial.print("OFF"); + Serial.print(", WIRE: "); if (wire_bit.read() ) Serial.print("3"); else Serial.print("2/4"); + Serial.print(", FAULTCLEAR: "); if (faultR_bit.read() ) Serial.print("ON"); else Serial.print("OFF"); + Serial.print(", "); if (fi50hz_bit.read() ) Serial.print("50HZ"); else Serial.print("60HZ"); + Serial.println(); +} + +// Check and print faults. Then clear them. +void checkFaults( void ) { + if (fault_bit.read()) { + Serial.print("MAX: "); Serial.println(maxRratio_bits.read()); + Serial.print("VAL: "); Serial.println( rRatio_bits.read()); + Serial.print("MIN: "); Serial.println(minRratio_bits.read()); + + if (range_high_fault_bit.read() ) Serial.println("Range high fault"); + if ( range_low_fault_bit.read() ) Serial.println("Range low fault"); + if (refin_high_fault_bit.read() ) Serial.println("REFIN high fault"); + if ( refin_low_fault_bit.read() ) Serial.println("REFIN low fault"); + if ( rtdin_low_fault_bit.read() ) Serial.println("RTDIN low fault"); + if ( voltage_fault_bit.read() ) Serial.println("Voltage fault"); + + faultR_bit.write(1); // clear fault + } +} + +void setup() { + #if (MAX31865_1_READY_PIN != -1) + pinMode(MAX31865_READY_PIN ,INPUT_PULLUP); + #endif + + while (!Serial) { delay(10); } + Serial.begin(115200); + Serial.println("SPI Adafruit_BusIO_RegisterBits test on MAX31865"); + + if (!spi_dev.begin()) { + Serial.println("Could not initialize SPI device"); + while (1); + } + + // Set up for automode 50Hz. We don't care about selfheating. We want the highest possible sampling rate. + auto_bit.write(0); // Don't switch filtermode while auto_mode is on. + fi50hz_bit.write(1); // Set filter to 50Hz mode. + faultR_bit.write(1); // Clear faults. + bias_bit.write(1); // In automode we want to have the bias current always on. + delay(5); // Wait until bias current settles down. + // 10.5 time constants of the input RC network is required. + // 10ms worst case for 10kω reference resistor and a 0.1µF capacitor across the RTD inputs. + // Adafruit Module has 0.1µF and only 430/4300ω So here 0.43/4.3ms + auto_bit.write(1); // Now we can set automode. Automatically starting first conversion. + + // Test the READY_PIN + #if (defined( MAX31865_READY_PIN ) && (MAX31865_READY_PIN != -1)) + int i = 0; + while (digitalRead(MAX31865_READY_PIN) && i++ <= 100) { delay(1); } + if (i >= 100) { + Serial.print("ERROR: Max31865 Pin detection does not work. PIN:"); + Serial.println(MAX31865_READY_PIN); + } + #else + delay(100); + #endif + + // Set ratio range. + // Setting the temperatures would need some more calculation - not related to Adafruit_BusIO_RegisterBits. + uint16_t ratio = rRatio_bits.read(); + maxRratio_bits.write( (ratio < 0x8fffu-1000u) ? ratio + 1000u : 0x8fffu ); + minRratio_bits.write( (ratio > 1000u) ? ratio - 1000u : 0u ); + + printConfig(); + checkFaults(); +} + +void loop() { + #if (defined( MAX31865_READY_PIN ) && (MAX31865_1_READY_PIN != -1)) + // Is conversion ready? + if (!digitalRead(MAX31865_READY_PIN)) + #else + // Warant conversion is ready. + delay(21); // 21ms for 50Hz-mode. 19ms in 60Hz-mode. + #endif + { + // Read ratio, calculate temperature, scale, filter and print. + Serial.println( rRatio2C( rRatio_bits.read() ) * 100.0f, 0); // Temperature scaled by 100 + // Check, print, clear faults. + checkFaults(); + } + + // Do something else. + //delay(15000); +} + + +// Module/Sensor related. Here Adafruit PT100 module with a 2_Wire PT100 Class C ***************************** +float rRatio2C(uint16_t ratio) { + // A simple linear conversion. + const float R0 = 100.0f; + const float Rref = 430.0f; + const float alphaPT = 0.003850f; + const float ADCmax = (1u << 15) - 1.0f; + const float rscale = Rref / ADCmax; + // Measured temperature in boiling water 101.08°C with factor a = 1 and b = 0. Rref and MAX at about 22±2°C. + // Measured temperature in ice/water bath 0.76°C with factor a = 1 and b = 0. Rref and MAX at about 22±2°C. + //const float a = 1.0f / (alphaPT * R0); + const float a = (100.0f/101.08f) / (alphaPT * R0); + //const float b = 0.0f; // 101.08 + const float b = -0.76f; // 100.32 > 101.08 + + return filterRing( ((ratio * rscale) - R0) * a + b ); +} + +// General purpose ********************************************************************************************* +#define RINGLENGTH 250 +float filterRing( float newVal ) { + static float ring[RINGLENGTH] = { 0.0 }; + static uint8_t ringIndex = 0; + static bool ringFull = false; + + if ( ringIndex == RINGLENGTH ) { ringFull = true; ringIndex = 0; } + ring[ringIndex] = newVal; + uint8_t loopEnd = (ringFull) ? RINGLENGTH : ringIndex + 1; + float ringSum = 0.0f; + for (uint8_t i = 0; i < loopEnd; i++) ringSum += ring[i]; + ringIndex++; + return ringSum / loopEnd; +} diff --git a/lib/lib_i2c/Adafruit_BusIO/examples/spi_registers/spi_registers.ino b/lib/lib_i2c/Adafruit_BusIO/examples/spi_registers/spi_registers.ino index e24f1aa9a..091a35315 100644 --- a/lib/lib_i2c/Adafruit_BusIO/examples/spi_registers/spi_registers.ino +++ b/lib/lib_i2c/Adafruit_BusIO/examples/spi_registers/spi_registers.ino @@ -15,12 +15,12 @@ void setup() { } Adafruit_BusIO_Register id_reg = Adafruit_BusIO_Register(&spi_dev, 0x0F, ADDRBIT8_HIGH_TOREAD); - uint8_t id; + uint8_t id = 0; id_reg.read(&id); Serial.print("ID register = 0x"); Serial.println(id, HEX); Adafruit_BusIO_Register thresh_reg = Adafruit_BusIO_Register(&spi_dev, 0x0C, ADDRBIT8_HIGH_TOREAD, 2, LSBFIRST); - uint16_t thresh; + uint16_t thresh = 0; thresh_reg.read(&thresh); Serial.print("Initial threshold register = 0x"); Serial.println(thresh, HEX); @@ -31,4 +31,4 @@ void setup() { void loop() { -} \ No newline at end of file +} diff --git a/lib/lib_i2c/Adafruit_BusIO/library.properties b/lib/lib_i2c/Adafruit_BusIO/library.properties index f63425a7d..68cd6259b 100644 --- a/lib/lib_i2c/Adafruit_BusIO/library.properties +++ b/lib/lib_i2c/Adafruit_BusIO/library.properties @@ -1,5 +1,5 @@ name=Adafruit BusIO -version=1.0.10 +version=1.11.0 author=Adafruit maintainer=Adafruit sentence=This is a library for abstracting away UART, I2C and SPI interfacing From 1022c91b7cbaa2650ac45a19545c134518460fd3 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 12 Feb 2022 16:00:19 +0100 Subject: [PATCH 009/355] Bump dev version to v11.0.0.1 --- CHANGELOG.md | 15 ++++++---- RELEASENOTES.md | 63 +-------------------------------------- tasmota/tasmota_version.h | 2 +- 3 files changed, 12 insertions(+), 68 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b5ad650e..88c4aa9e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,15 +2,22 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - Development - -## [10.1.0.8] +## [11.0.0.1] ### Added ### Changed -- From Calendar Versioning (CalVer) back to Semantic Versioning (SemVer) for better major change indication and future support ### Fixed +## [Released] + +## [11.0.0] 20220212 +- Release Olivia + +## [10.1.0.8] 20220212 +### Changed +- From Calendar Versioning (CalVer) back to Semantic Versioning (SemVer) for better major change indication and future support + ## [2022.1.4 = 10.1.0.7] 20220205 ### Added - Rule variables %timer1% to %timer16% (#14619) @@ -125,8 +132,6 @@ All notable changes to this project will be documented in this file. - ESP32 LedPwmMode exception (#14073) - ESP32 Compile error when I2S_Audio is enabled (#14095) -## [Released] - ## [10.1.0] 20211208 - Release Noelle diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 0f455fe00..54fc8a90f 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -103,74 +103,13 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo [Complete list](BUILDS.md) of available feature and sensors. -## Changelog v10.1.0.8 +## Changelog v11.0.0.1 ### Added -- Command ``Json {}`` to enable input of any command as JSON tokens [#14568](https://github.com/arendst/Tasmota/issues/14568) -- Command ``SetOption44 1..100`` to set base tolerance percentage for matching incoming IR messages (default 25, max 100) [#14555](https://github.com/arendst/Tasmota/issues/14555) -- Command ``SetOption134 1`` to disable PWM auto-phasing for lights by default (new behavior) [#14590](https://github.com/arendst/Tasmota/issues/14590) -- Command ``SSerialConfig `` to change Serial Bridge configuration -- Command ``SspmDisplay 1`` to display Sonoff SPM energy data in GUI for relays powered on only -- Command ``SspmEnergyTotal`` to (p)reset Sonoff SPM total energy without today's energy -- Command ``SspmEnergyYesterday`` to (p)reset Sonoff SPM energy yesterday -- Command ``SspmHistory`` to retrieve Sonoff SPM daily energy up to last six month (as defined by ARM firmware) -- Command ``SspmIAmHere`` to (faintly) blink Sonoff SPM-4Relay module error light of requested relay -- Command ``SspmLog [x]`` to retrieve Sonoff SPM relay power state change and cause logging -- Command ``SspmMap 2,1,..`` to map Sonoff SPM scanned module to physical module [#14281](https://github.com/arendst/Tasmota/issues/14281) -- Command ``SspmOverload `` to set Sonoff SPM overload criteria for any relay -- Command ``SspmScan`` to rescan Sonoff SPM modbus -- Command ``WebTime ,`` to show part of date and/or time in web gui based on "2017-03-07T11:08:02-07:00" -- Commands for ESP32 ethernet configuration ``EthIpAddress``, ``EthGateway``, ``EthSubnetmask``, ``EthDnsServer1`` and ``EthDnsServer2`` [#14385](https://github.com/arendst/Tasmota/issues/14385) -- Support for Eastron SDM230 modBus energy meter [#13443](https://github.com/arendst/Tasmota/issues/13443) -- PWM Dimmer two button support [#13993](https://github.com/arendst/Tasmota/issues/13993) -- Support for Linkind dimmer as GPIO ``Option A6`` [#14004](https://github.com/arendst/Tasmota/issues/14004) -- DDP schemes for light and WS2812 [#14017](https://github.com/arendst/Tasmota/issues/14017) -- Device Group Send full status item [#14045](https://github.com/arendst/Tasmota/issues/14045) -- Support for MAX7219 Dot Matrix displays [#14091](https://github.com/arendst/Tasmota/issues/14091) -- Experimental ADE7953 (Shelly EM) reset on restart [#14261](https://github.com/arendst/Tasmota/issues/14261) -- Solax X1 negative temperature support [#14278](https://github.com/arendst/Tasmota/issues/14278) -- Solax X1 modbus RTS support and offline status [#14305](https://github.com/arendst/Tasmota/issues/14305) -- Tasmota favicon to webbrowser tab [#14322](https://github.com/arendst/Tasmota/issues/14322) -- Support for BME688 with latest Bosch-Sensor-API library [#14513](https://github.com/arendst/Tasmota/issues/14513) -- Rule variable %color% [#14572](https://github.com/arendst/Tasmota/issues/14572) -- Rule variables %timer1% to %timer16% [#14619](https://github.com/arendst/Tasmota/issues/14619) -- Support for MQ analog sensor for air quality by Francesco Adriani [#14581](https://github.com/arendst/Tasmota/issues/14581) -- ESP32 single binary firmware [#14239](https://github.com/arendst/Tasmota/issues/14239) -- ESP32 disable serial console when 3 (ESP32) or 2 (Other models) serial interfaces are requested [#14487](https://github.com/arendst/Tasmota/issues/14487) -- ESP32 support for TuyaMcu -- ESP32 Berry features -- ESP32 support for USE_PWM_DIMMER as GPIO ``Option E1`` -- ESP32 increase PWM channels to 16 -- ESP32 auto-configuration -- ESP32 initial support for ESP32S3 with support for 38 configurable GPIOs ### Breaking Changed ### Changed -- ESP32 core library from v2.0.2 to v2.0.2.1 -- PubSubClient library from v2.8.12 to v2.8.13 -- TasmotaSerial library from v3.3.0 to v3.4.0 -- TasmotaModbus library from v1.2.0 to v3.4.0 -- ESP8266Audio library from v1.9.2 to v1.9.5 -- ESP8266SAM library from v1.0 to v1.0.1 -- BME68x-Sensor-API library from v3.5.9 to v4.4.7 -- SR04 driver to support US-100 -- Mitsubishi HVAC temperature resolution [#13936](https://github.com/arendst/Tasmota/issues/13936) -- Remove restriction of topic must differ from mqttclient [#14019](https://github.com/arendst/Tasmota/issues/14019) -- ESP32 Set stack size with ``#define SET_ESP32_STACK_SIZE``, added ``StackLowMark`` metrics -- ESP32 Berry stores compiled bytecode into IRAM, freeing space in heap [#14307](https://github.com/arendst/Tasmota/issues/14307) ### Fixed -- Intermittent exceptions and heap corruption due to PubSubClient library buffer overflow [#13700](https://github.com/arendst/Tasmota/issues/13700) -- EZOO2 sensor message format [#14000](https://github.com/arendst/Tasmota/issues/14000) -- DHT support negative temperatures on different hardware [#14173](https://github.com/arendst/Tasmota/issues/14173) -- Hardware serial parity and stop bits support [#14212](https://github.com/arendst/Tasmota/issues/14212) -- Edit file for SD card [#14229](https://github.com/arendst/Tasmota/issues/14229) -- Scripter memory corruption [#14268](https://github.com/arendst/Tasmota/issues/14268) -- ESP32 Webcam exception during flashwrites -- ESP32 LedPwmMode exception [#14073](https://github.com/arendst/Tasmota/issues/14073) -- ESP32 Compile error when I2S_Audio is enabled [#14095](https://github.com/arendst/Tasmota/issues/14095) -- ESP32 Provide proper OTA_URL for tasmota32solo1 [#14202](https://github.com/arendst/Tasmota/issues/14202) -- ESP32 OneWire-Stickbreaker (DS18x20) library support for ESP32C3 and ESP32S2 [#14338](https://github.com/arendst/Tasmota/issues/14338) ### Removed -- ESP32 consolidate odroidgo and core2 binaries into tasmota32-lvgl using Berry features diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h index 6a6388472..d2471660f 100644 --- a/tasmota/tasmota_version.h +++ b/tasmota/tasmota_version.h @@ -20,6 +20,6 @@ #ifndef _TASMOTA_VERSION_H_ #define _TASMOTA_VERSION_H_ -const uint32_t VERSION = 0x0A010008; // 10.1.0.8 +const uint32_t VERSION = 0x0B000001; // 11.0.0.1 #endif // _TASMOTA_VERSION_H_ From 2c499623ff28da9dc35dd6b9e28807d85ab4c8a0 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Sat, 12 Feb 2022 16:05:11 +0100 Subject: [PATCH 010/355] rm odroid --- .github/workflows/Tasmota_build_master.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/Tasmota_build_master.yml b/.github/workflows/Tasmota_build_master.yml index 144bd9db0..6d29cb7c9 100644 --- a/.github/workflows/Tasmota_build_master.yml +++ b/.github/workflows/Tasmota_build_master.yml @@ -35,7 +35,6 @@ jobs: - tasmota32-display - tasmota32-ir - tasmota32-lvgl - - tasmota32-odroidgo - tasmota32c3 - tasmota32solo1 steps: From cc57881c68d525b5deefac039b4d1b1088526495 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Sat, 12 Feb 2022 16:05:56 +0100 Subject: [PATCH 011/355] rm odroid --- .github/workflows/Tasmota_build_devel.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/Tasmota_build_devel.yml b/.github/workflows/Tasmota_build_devel.yml index 549aa5d7a..511e322b7 100644 --- a/.github/workflows/Tasmota_build_devel.yml +++ b/.github/workflows/Tasmota_build_devel.yml @@ -36,7 +36,6 @@ jobs: - tasmota32-display - tasmota32-ir - tasmota32-lvgl - - tasmota32-odroidgo - tasmota32c3 - tasmota32solo1 steps: From 5e15cd23967c00d7ae170be70e024f9a5a90966f Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Sat, 12 Feb 2022 16:11:24 +0100 Subject: [PATCH 012/355] add s2 to CI --- .github/workflows/build_all_the_things.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_all_the_things.yml b/.github/workflows/build_all_the_things.yml index 359f9f114..f11f44eb2 100644 --- a/.github/workflows/build_all_the_things.yml +++ b/.github/workflows/build_all_the_things.yml @@ -39,7 +39,7 @@ jobs: - tasmota32-display - tasmota32-ir - tasmota32-lvgl - - tasmota32-odroidgo + - tasmota32s2 - tasmota32c3 - tasmota32solo1 steps: From 3d2c9945a86992a500d265f35f04b5b9bb07b083 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 12 Feb 2022 16:37:48 +0100 Subject: [PATCH 013/355] Fix SSPM energy yesterday when zero --- CHANGELOG.md | 1 + tasmota/xdrv_86_esp32_sonoff_spm.ino | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88c4aa9e9..8fc7960e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file. ### Changed ### Fixed +- SSPM energy yesterday when zero ## [Released] diff --git a/tasmota/xdrv_86_esp32_sonoff_spm.ino b/tasmota/xdrv_86_esp32_sonoff_spm.ino index 6a5d2d086..27773eed1 100644 --- a/tasmota/xdrv_86_esp32_sonoff_spm.ino +++ b/tasmota/xdrv_86_esp32_sonoff_spm.ino @@ -252,6 +252,7 @@ typedef struct { uint16_t expected_bytes; uint8_t module[SSPM_MAX_MODULES][SSPM_MODULE_NAME_SIZE]; + uint8_t history_day[SSPM_MAX_MODULES][4]; uint8_t allow_updates; uint8_t get_energy_relay; uint8_t get_totals; @@ -1136,16 +1137,22 @@ void SSPMHandleReceivedData(void) { energy_total += energy; } } + + uint8_t history_day = SspmBuffer[36]; // Date of last entry + if (0 == Sspm->history_day[module][channel]) { // Initial setting + Sspm->history_day[module][channel] = history_day; + } if ((0 == Sspm->Settings.energy_total[module][channel]) && energy_total) { - Sspm->Settings.energy_yesterday[module][channel] = energy_yesterday; // Inital setting + Sspm->Settings.energy_yesterday[module][channel] = energy_yesterday; // Initial setting Sspm->Settings.energy_total[module][channel] = energy_total; // Initial setting if (Settings->save_data) { TasmotaGlobal.save_data_counter = Settings->save_data +2; // Postpone flash write until all relays are updated } } - // If received daily energy is below last daily energy then update total energy + // If received daily energy date is changed then update total energy // This happens around midnight in normal situations - else if (Sspm->energy_today[module][channel] < last_energy_today) { + else if (Sspm->history_day[module][channel] != history_day) { + Sspm->history_day[module][channel] = history_day; Sspm->Settings.energy_yesterday[module][channel] = last_energy_today; // Daily save Sspm->Settings.energy_total[module][channel] += last_energy_today; // Daily incremental save if (Settings->save_data) { From a9dfd284bb001cbbd3ef878a00087999bf39b1d9 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sat, 12 Feb 2022 18:14:22 +0100 Subject: [PATCH 014/355] Berry update internal type system --- lib/libesp32/berry/src/be_api.c | 8 ++--- lib/libesp32/berry/src/be_baselib.c | 4 +-- lib/libesp32/berry/src/be_bytecode.c | 10 +++--- lib/libesp32/berry/src/be_class.c | 38 ++++++++++---------- lib/libesp32/berry/src/be_class.h | 12 +++---- lib/libesp32/berry/src/be_constobj.h | 10 +++--- lib/libesp32/berry/src/be_exec.c | 2 +- lib/libesp32/berry/src/be_gc.c | 10 +++--- lib/libesp32/berry/src/be_gc.h | 3 +- lib/libesp32/berry/src/be_module.c | 5 ++- lib/libesp32/berry/src/be_object.c | 2 +- lib/libesp32/berry/src/be_object.h | 28 ++++++++------- lib/libesp32/berry/src/be_parser.c | 11 +++--- lib/libesp32/berry/src/be_solidifylib.c | 6 ++-- lib/libesp32/berry/src/be_vm.c | 47 ++++++++++++++----------- 15 files changed, 101 insertions(+), 95 deletions(-) diff --git a/lib/libesp32/berry/src/be_api.c b/lib/libesp32/berry/src/be_api.c index 79d5c48ff..c3fd59e23 100644 --- a/lib/libesp32/berry/src/be_api.c +++ b/lib/libesp32/berry/src/be_api.c @@ -34,19 +34,19 @@ static void class_init(bvm *vm, bclass *c, const bnfuncinfo *lib) while (lib->name) { bstring *s = be_newstr(vm, lib->name); if (lib->function) { /* method */ - be_prim_method_bind(vm, c, s, lib->function); + be_class_native_method_bind(vm, c, s, lib->function); } else { - be_member_bind(vm, c, s, btrue); /* member */ + be_class_member_bind(vm, c, s, btrue); /* member */ } ++lib; } - if (lib->function == (bntvfunc) BE_CLOSURE) { + if (lib->function == (bntvfunc)BE_CLOSURE) { /* next section is closures */ struct solidfuncinfo *slib = (struct solidfuncinfo*)++lib; while (slib->name) { if (slib->function) { /* method */ bstring *s = be_newstr(vm, slib->name); - be_closure_method_bind(vm, c, s, slib->function); + be_class_closure_method_bind(vm, c, s, slib->function); } ++slib; } diff --git a/lib/libesp32/berry/src/be_baselib.c b/lib/libesp32/berry/src/be_baselib.c index f09c5f812..2b9c25095 100644 --- a/lib/libesp32/berry/src/be_baselib.c +++ b/lib/libesp32/berry/src/be_baselib.c @@ -85,7 +85,7 @@ static bclass *find_class_closure(bclass *cl, bclosure *needle) if (members) { /* only iterate if there are members */ bmapiter iter = be_map_iter(); while ((node = be_map_next(members, &iter)) != NULL) { - if (var_type(&node->value) == BE_CLOSURE) { /* only native functions are considered */ + if (var_primetype(&node->value) == BE_CLOSURE) { /* only native functions are considered */ bclosure *clos_iter = var_toobj(&node->value); /* retrieve the method's closure */ if (clos_iter == needle) { /* we found the closure, we now know its class */ @@ -140,7 +140,7 @@ static int l_super(bvm *vm) if (size >= 2) { /* need at least 2 stackframes: current (for super() native) and caller (the one we are interested in) */ bcallframe *caller = be_vector_at(&vm->callstack, size - 2); /* get the callframe of caller */ bvalue *func = caller->func; /* function object of caller */ - if (var_type(func) == BE_CLOSURE) { /* only useful if the caller is a Berry closure (i.e. not native) */ + if (var_primetype(func) == BE_CLOSURE) { /* only useful if the caller is a Berry closure (i.e. not native) */ bclosure *clos_ctx = var_toobj(func); /* this is the closure we look for in the class chain */ base_class = find_class_closure(o->_class, clos_ctx); /* iterate on current and super classes to find where the closure belongs */ } diff --git a/lib/libesp32/berry/src/be_bytecode.c b/lib/libesp32/berry/src/be_bytecode.c index 9f9283fbe..e7ba8aaca 100644 --- a/lib/libesp32/berry/src/be_bytecode.c +++ b/lib/libesp32/berry/src/be_bytecode.c @@ -176,8 +176,8 @@ static void save_class(bvm *vm, void *fp, bclass *c) static void save_value(bvm *vm, void *fp, bvalue *v) { - save_byte(fp, (uint8_t)var_type(v)); /* type */ - switch (var_type(v)) { + save_byte(fp, (uint8_t)var_primetype(v)); /* type */ + switch (var_primetype(v)) { case BE_INT: save_int(fp, var_toint(v)); break; case BE_REAL: save_real(fp, var_toreal(v)); break; case BE_STRING: save_string(fp, var_tostr(v)); break; @@ -425,16 +425,16 @@ static void load_class(bvm *vm, void *fp, bvalue *v, int version) be_incrtop(vm); if (load_proto(vm, fp, (bproto**)&var_toobj(value), -3, version)) { /* actual method */ - be_method_bind(vm, c, name, var_toobj(value), bfalse); + be_class_method_bind(vm, c, name, var_toobj(value), bfalse); } else { /* no proto, static member set to nil */ - be_member_bind(vm, c, name, bfalse); + be_class_member_bind(vm, c, name, bfalse); } be_stackpop(vm, 2); /* pop the cached string and proto */ } for (count = 0; count < nvar; ++count) { /* load member-variable table */ bstring *name = cache_string(vm, fp); - be_member_bind(vm, c, name, btrue); + be_class_member_bind(vm, c, name, btrue); be_stackpop(vm, 1); /* pop the cached string */ } } diff --git a/lib/libesp32/berry/src/be_class.c b/lib/libesp32/berry/src/be_class.c index 0f4efb3d5..0ad035150 100644 --- a/lib/libesp32/berry/src/be_class.c +++ b/lib/libesp32/berry/src/be_class.c @@ -7,13 +7,11 @@ ********************************************************************/ #include "be_class.h" #include "be_string.h" -#include "be_vector.h" #include "be_map.h" #include "be_exec.h" #include "be_gc.h" #include "be_vm.h" #include "be_func.h" -#include "be_var.h" #include #define check_members(vm, c) \ @@ -44,6 +42,7 @@ void be_class_compress(bvm *vm, bclass *c) } } +/* Return the type of the class attribute, only used to check if the attribute already exists */ int be_class_attribute(bvm *vm, bclass *c, bstring *attr) { for (; c; c = c->super) { @@ -57,7 +56,7 @@ int be_class_attribute(bvm *vm, bclass *c, bstring *attr) return BE_NONE; } -void be_member_bind(bvm *vm, bclass *c, bstring *name, bbool var) +void be_class_member_bind(bvm *vm, bclass *c, bstring *name, bbool var) { bvalue *attr; set_fixed(name); @@ -75,7 +74,7 @@ void be_member_bind(bvm *vm, bclass *c, bstring *name, bbool var) } } -void be_method_bind(bvm *vm, bclass *c, bstring *name, bproto *p, bbool is_static) +void be_class_method_bind(bvm *vm, bclass *c, bstring *name, bproto *p, bbool is_static) { bclosure *cl; bvalue *attr; @@ -88,11 +87,11 @@ void be_method_bind(bvm *vm, bclass *c, bstring *name, bproto *p, bbool is_stati cl->proto = p; var_setclosure(attr, cl); if (is_static) { - func_setstatic(attr); + var_markstatic(attr); } } -void be_prim_method_bind(bvm *vm, bclass *c, bstring *name, bntvfunc f) +void be_class_native_method_bind(bvm *vm, bclass *c, bstring *name, bntvfunc f) { bvalue *attr; set_fixed(name); @@ -103,7 +102,7 @@ void be_prim_method_bind(bvm *vm, bclass *c, bstring *name, bntvfunc f) attr->type = MT_PRIMMETHOD; } -void be_closure_method_bind(bvm *vm, bclass *c, bstring *name, bclosure *cl) +void be_class_closure_method_bind(bvm *vm, bclass *c, bstring *name, bclosure *cl) { bvalue *attr; check_members(vm, c); @@ -242,7 +241,8 @@ bbool be_class_newobj(bvm *vm, bclass *c, int pos, int argc, int mode) } /* Default empty constructor */ -static int default_init_native_method(bvm *vm) { +static int default_init_native_method(bvm *vm) +{ be_return_nil(vm); } @@ -253,10 +253,11 @@ int be_instance_member_simple(bvm *vm, binstance *instance, bstring *name, bvalu int type; be_assert(name != NULL); binstance * obj = instance_member(vm, instance, name, dst); - type = var_type(dst); - if (obj && type == MT_VARIABLE) { + if (obj && var_type(dst) == MT_VARIABLE) { *dst = obj->members[dst->v.i]; } + type = var_type(dst); + var_clearstatic(dst); return type; } @@ -268,18 +269,19 @@ int be_instance_member(bvm *vm, binstance *instance, bstring *name, bvalue *dst) { int type; be_assert(name != NULL); - binstance * obj = instance_member(vm, instance, name, dst); - type = var_type(dst); - if (obj && type == MT_VARIABLE) { + binstance *obj = instance_member(vm, instance, name, dst); + if (obj && var_type(dst) == MT_VARIABLE) { *dst = obj->members[dst->v.i]; } + type = var_type(dst); if (obj) { + var_clearstatic(dst); return type; } else { /* if no method found, try virtual */ /* if 'init' does not exist, create a virtual empty constructor */ if (strcmp(str(name), "init") == 0) { var_setntvfunc(dst, default_init_native_method); - return var_type(dst); + return var_primetype(dst); } else { /* get method 'member' */ obj = instance_member(vm, instance, str_literal(vm, "member"), vm->top); @@ -296,6 +298,7 @@ int be_instance_member(bvm *vm, binstance *instance, bstring *name, bvalue *dst) } type = var_type(dst); if (type != BE_NIL) { + var_clearstatic(dst); return type; } } @@ -310,11 +313,8 @@ int be_class_member(bvm *vm, bclass *obj, bstring *name, bvalue *dst) be_assert(name != NULL); obj = class_member(vm, obj, name, dst); type = var_type(dst); - if (obj) { - return type; - } else { - return BE_NONE; - } + var_clearstatic(dst); + return obj ? type : BE_NONE; } bbool be_instance_setmember(bvm *vm, binstance *o, bstring *name, bvalue *src) diff --git a/lib/libesp32/berry/src/be_class.h b/lib/libesp32/berry/src/be_class.h index 405ea6d38..f80ca8799 100644 --- a/lib/libesp32/berry/src/be_class.h +++ b/lib/libesp32/berry/src/be_class.h @@ -52,17 +52,17 @@ struct binstance { bclass* be_newclass(bvm *vm, bstring *name, bclass *super); void be_class_compress(bvm *vm, bclass *c); int be_class_attribute(bvm *vm, bclass *c, bstring *attr); -void be_member_bind(bvm *vm, bclass *c, bstring *name, bbool var); -void be_method_bind(bvm *vm, bclass *c, bstring *name, bproto *p, bbool is_static); -void be_prim_method_bind(bvm *vm, bclass *c, bstring *name, bntvfunc f); -void be_closure_method_bind(bvm *vm, bclass *c, bstring *name, bclosure *cl); +void be_class_member_bind(bvm *vm, bclass *c, bstring *name, bbool var); +void be_class_method_bind(bvm *vm, bclass *c, bstring *name, bproto *p, bbool is_static); +void be_class_native_method_bind(bvm *vm, bclass *c, bstring *name, bntvfunc f); +void be_class_closure_method_bind(bvm *vm, bclass *c, bstring *name, bclosure *cl); +int be_class_member(bvm *vm, bclass *obj, bstring *name, bvalue *dst); +bbool be_class_setmember(bvm *vm, bclass *obj, bstring *name, bvalue *src); int be_class_closure_count(bclass *c); void be_class_upvalue_init(bvm *vm, bclass *c); bbool be_class_newobj(bvm *vm, bclass *c, int pos, int argc, int mode); int be_instance_member_simple(bvm *vm, binstance *obj, bstring *name, bvalue *dst); int be_instance_member(bvm *vm, binstance *obj, bstring *name, bvalue *dst); -int be_class_member(bvm *vm, bclass *obj, bstring *name, bvalue *dst); bbool be_instance_setmember(bvm *vm, binstance *obj, bstring *name, bvalue *src); -bbool be_class_setmember(bvm *vm, bclass *obj, bstring *name, bvalue *src); #endif diff --git a/lib/libesp32/berry/src/be_constobj.h b/lib/libesp32/berry/src/be_constobj.h index 301b06af8..708cce03d 100644 --- a/lib/libesp32/berry/src/be_constobj.h +++ b/lib/libesp32/berry/src/be_constobj.h @@ -40,7 +40,7 @@ extern "C" { #define be_const_static_func(_func) { \ .v.nf = (_func), \ - .type = BE_NTVFUNC | BE_FUNC_STATIC \ + .type = BE_NTVFUNC | BE_STATIC \ } #define be_const_nil() { \ @@ -79,7 +79,7 @@ extern "C" { } #define be_const_comptr(_val) { \ - .v.c = (const void*)(_val), \ + .v.c = (const void*)(_val), \ .type = BE_COMPTR \ } @@ -95,7 +95,7 @@ extern "C" { #define be_const_static_closure(_closure) { \ .v.c = &(_closure), \ - .type = BE_CLOSURE | BE_FUNC_STATIC \ + .type = BE_CLOSURE | BE_STATIC \ } #define be_const_module(_module) { \ @@ -256,7 +256,7 @@ const bntvmodule be_native_module(_module) = { \ #define be_const_static_func(_func) { \ bvaldata(_func), \ - BE_NTVFUNC | BE_FUNC_STATIC \ + BE_NTVFUNC | BE_STATIC \ } #define be_const_nil() { \ @@ -311,7 +311,7 @@ const bntvmodule be_native_module(_module) = { \ #define be_const_static_closure(_closure) { \ bvaldata(&(_closure)), \ - BE_CLOSURE | BE_FUNC_STATIC \ + BE_CLOSURE | BE_STATIC \ } #define be_const_module(_module) { \ diff --git a/lib/libesp32/berry/src/be_exec.c b/lib/libesp32/berry/src/be_exec.c index 14dbe903c..c2b2e1f6a 100644 --- a/lib/libesp32/berry/src/be_exec.c +++ b/lib/libesp32/berry/src/be_exec.c @@ -335,7 +335,7 @@ void be_stackpush(bvm *vm) } /* check that the stack is able to store `count` items, and increase stack if needed */ -void be_stack_require(bvm *vm, int count) +BERRY_API void be_stack_require(bvm *vm, int count) { if (vm->top + count >= vm->stacktop) { be_stack_expansion(vm, count); diff --git a/lib/libesp32/berry/src/be_gc.c b/lib/libesp32/berry/src/be_gc.c index 19e88cb12..9e1ca0b74 100644 --- a/lib/libesp32/berry/src/be_gc.c +++ b/lib/libesp32/berry/src/be_gc.c @@ -138,7 +138,8 @@ static void mark_gray(bvm *vm, bgcobject *obj) { if (obj && gc_iswhite(obj) && !gc_isconst(obj)) { gc_setgray(obj); - switch (var_type(obj)) { + be_assert(!var_isstatic(obj)); + switch (var_primetype(obj)) { case BE_STRING: gc_setdark(obj); break; /* just set dark */ case BE_CLASS: link_gray(vm, cast_class(obj)); break; case BE_PROTO: link_gray(vm, cast_proto(obj)); break; @@ -171,7 +172,7 @@ static void mark_map(bvm *vm, bgcobject *obj) while ((node = be_map_next(map, &iter)) != NULL) { bmapkey *key = &node->key; bvalue *val = &node->value; - if (be_isgctype((signed char)key->type)) { + if (be_isgcobj(key)) { mark_gray(vm, var_togc(key)); } mark_gray_var(vm, val); @@ -348,7 +349,7 @@ static void free_instance(bvm *vm, bgcobject *obj) static void free_object(bvm *vm, bgcobject *obj) { - switch (var_type(obj)) { + switch (var_primetype(obj)) { case BE_STRING: free_lstring(vm, obj); break; /* long string */ case BE_CLASS: be_free(vm, obj, sizeof(bclass)); break; case BE_INSTANCE: free_instance(vm, obj); break; @@ -432,7 +433,8 @@ static void mark_unscanned(bvm *vm) bgcobject *obj = vm->gc.gray; if (obj && !gc_isdark(obj) && !gc_isconst(obj)) { gc_setdark(obj); - switch (var_type(obj)) { + be_assert(!var_isstatic(obj)); + switch (var_primetype(obj)) { case BE_CLASS: mark_class(vm, obj); break; case BE_PROTO: mark_proto(vm, obj); break; case BE_INSTANCE: mark_instance(vm, obj); break; diff --git a/lib/libesp32/berry/src/be_gc.h b/lib/libesp32/berry/src/be_gc.h index 0e0ce9e82..49e311291 100644 --- a/lib/libesp32/berry/src/be_gc.h +++ b/lib/libesp32/berry/src/be_gc.h @@ -47,8 +47,7 @@ if (!gc_isconst(o)) { \ #define gc_exmark(o) (((o)->marked >> 4) & 0x0F) #define gc_setexmark(o, k) ((o)->marked |= (k) << 4) -#define be_isgctype(t) ((t) >= BE_GCOBJECT) -#define be_isgcobj(o) be_isgctype(var_type(o)) +#define be_isgcobj(o) (var_primetype(o) >= BE_GCOBJECT) #define be_gcnew(v, t, s) be_newgcobj((v), (t), sizeof(s)) #define set_fixed(s) bbool _was_fixed = be_gc_fix_set(vm, cast(bgcobject*, (s)), 1) diff --git a/lib/libesp32/berry/src/be_module.c b/lib/libesp32/berry/src/be_module.c index 0256809af..ab4504ee5 100644 --- a/lib/libesp32/berry/src/be_module.c +++ b/lib/libesp32/berry/src/be_module.c @@ -329,10 +329,9 @@ int be_module_attr(bvm *vm, bmodule *module, bstring *attr, bvalue *dst) } } return BE_NONE; - } else { - *dst = *member; - return var_type(dst); } + *dst = *member; + return var_type(dst); } bbool be_module_setmember(bvm *vm, bmodule *module, bstring *attr, bvalue *src) diff --git a/lib/libesp32/berry/src/be_object.c b/lib/libesp32/berry/src/be_object.c index ed338f790..138fcc1f1 100644 --- a/lib/libesp32/berry/src/be_object.c +++ b/lib/libesp32/berry/src/be_object.c @@ -15,7 +15,7 @@ const char* be_vtype2str(bvalue *v) { - switch(var_type(v)) { + switch(var_primetype(v)) { case BE_NIL: return "nil"; case BE_INT: return "int"; case BE_REAL: return "real"; diff --git a/lib/libesp32/berry/src/be_object.h b/lib/libesp32/berry/src/be_object.h index df7c7a9af..67e79bcdf 100644 --- a/lib/libesp32/berry/src/be_object.h +++ b/lib/libesp32/berry/src/be_object.h @@ -11,14 +11,14 @@ #include "berry.h" /* basic types, do not change value */ +#define BE_NONE -256 /* unknown type */ #define BE_NIL 0 #define BE_INT 1 #define BE_REAL 2 #define BE_BOOL 3 -#define BE_NONE 4 /* unknown type */ -#define BE_COMPTR 5 /* common pointer */ -#define BE_INDEX 6 /* index for instance variable, previously BE_INT */ -#define BE_FUNCTION 7 +#define BE_COMPTR 4 /* common pointer */ +#define BE_INDEX 5 /* index for instance variable, previously BE_INT */ +#define BE_FUNCTION 6 #define BE_GCOBJECT 16 /* from this type can be gced */ @@ -35,11 +35,11 @@ #define BE_CLOSURE ((1 << 5) | BE_FUNCTION) #define BE_NTVCLOS ((2 << 5) | BE_FUNCTION) #define BE_CTYPE_FUNC ((3 << 5) | BE_FUNCTION) -#define BE_FUNC_STATIC (1 << 7) +#define BE_STATIC (1 << 7) -#define func_isstatic(o) (((o)->type & BE_FUNC_STATIC) != 0) -#define func_setstatic(o) ((o)->type |= BE_FUNC_STATIC) -#define func_clearstatic(o) ((o)->type &= ~BE_FUNC_STATIC) +#define func_isstatic(o) (((o)->type & BE_STATIC) != 0) +#define func_setstatic(o) ((o)->type |= BE_STATIC) +#define func_clearstatic(o) ((o)->type &= ~BE_STATIC) /* values for bproto.varg */ #define BE_VA_VARARG (1 << 0) /* function has variable number of arguments */ @@ -201,10 +201,14 @@ typedef const char* (*breader)(void*, size_t*); #define cast_bool(_v) cast(bbool, _v) #define basetype(_t) ((_t) & 0x1F) -#define var_type(_v) ((_v)->type & 0x7F) +#define var_type(_v) ((_v)->type) #define var_basetype(_v) basetype((_v)->type) -#define var_istype(_v, _t) (var_type(_v) == _t) +#define var_primetype(_v) (var_type(_v) & ~BE_STATIC) +#define var_isstatic(_v) ((var_type(_v) & BE_STATIC) == BE_STATIC) +#define var_istype(_v, _t) (var_primetype(_v) == _t) #define var_settype(_v, _t) ((_v)->type = _t) +#define var_markstatic(_v) var_settype(_v, var_type(_v) | BE_STATIC) +#define var_clearstatic(_v) var_settype(_v, var_type(_v) & ~BE_STATIC) #define var_setobj(_v, _t, _o) { (_v)->v.p = _o; var_settype(_v, _t); } #define var_isnil(_v) var_istype(_v, BE_NIL) @@ -215,7 +219,6 @@ typedef const char* (*breader)(void*, size_t*); #define var_isclosure(_v) var_istype(_v, BE_CLOSURE) #define var_isntvclos(_v) var_istype(_v, BE_NTVCLOS) #define var_isntvfunc(_v) var_istype(_v, BE_NTVFUNC) -#define var_isctypefunc(_v) var_istype(_v, BE_CTYPEFUNC) #define var_isfunction(_v) (var_basetype(_v) == BE_FUNCTION) #define var_isproto(_v) var_istype(_v, BE_PROTO) #define var_isclass(_v) var_istype(_v, BE_CLASS) @@ -238,11 +241,10 @@ typedef const char* (*breader)(void*, size_t*); #define var_setclosure(_v, _o) var_setobj(_v, BE_CLOSURE, _o) #define var_setntvclos(_v, _o) var_setobj(_v, BE_NTVCLOS, _o) #define var_setntvfunc(_v, _o) { (_v)->v.nf = (_o); var_settype(_v, BE_NTVFUNC); } -#define var_setctypefunc(_v, _o) { (_v)->v.nf = (_o); var_settype(_v, BE_CTYPEFUNC); } #define var_setlist(_v, _o) var_setobj(_v, BE_LIST, _o) #define var_setmap(_v, _o) var_setobj(_v, BE_MAP, _o) #define var_setmodule(_v, _o) var_setobj(_v, BE_MODULE, _o) -#define var_setindex(_v, _i) { var_settype(_v, BE_INDEX); (_v)->v.i = (_i); } +#define var_setindex(_v, _i) { var_settype(_v, BE_INDEX); (_v)->v.i = (_i); } #define var_setproto(_v, _o) var_setobj(_v, BE_PROTO, _o) #define var_tobool(_v) ((_v)->v.b) diff --git a/lib/libesp32/berry/src/be_parser.c b/lib/libesp32/berry/src/be_parser.c index af59f5749..ba5b408d8 100644 --- a/lib/libesp32/berry/src/be_parser.c +++ b/lib/libesp32/berry/src/be_parser.c @@ -18,7 +18,6 @@ #include "be_func.h" #include "be_class.h" #include "be_decoder.h" -#include "be_debug.h" #include "be_exec.h" #include @@ -1392,11 +1391,11 @@ static void classvar_stmt(bparser *parser, bclass *c) scan_next_token(parser); /* skip 'var' */ if (match_id(parser, name) != NULL) { check_class_attr(parser, c, name); - be_member_bind(parser->vm, c, name, btrue); + be_class_member_bind(parser->vm, c, name, btrue); while (match_skip(parser, OptComma)) { /* ',' */ if (match_id(parser, name) != NULL) { check_class_attr(parser, c, name); - be_member_bind(parser->vm, c, name, btrue); + be_class_member_bind(parser->vm, c, name, btrue); } else { parser_error(parser, "class var error"); } @@ -1433,7 +1432,7 @@ static void classdef_stmt(bparser *parser, bclass *c, bbool is_static) name = func_name(parser, &e, 1); check_class_attr(parser, c, name); proto = funcbody(parser, name, is_static ? 0 : FUNC_METHOD); - be_method_bind(parser->vm, c, proto->name, proto, is_static); + be_class_method_bind(parser->vm, c, proto->name, proto, is_static); be_stackpop(parser->vm, 1); } @@ -1446,13 +1445,13 @@ static void classstatic_stmt(bparser *parser, bclass *c, bexpdesc *e) classdef_stmt(parser, c, btrue); } else if (match_id(parser, name) != NULL) { check_class_attr(parser, c, name); - be_member_bind(parser->vm, c, name, bfalse); + be_class_member_bind(parser->vm, c, name, bfalse); class_static_assignment_expr(parser, e, name); while (match_skip(parser, OptComma)) { /* ',' */ if (match_id(parser, name) != NULL) { check_class_attr(parser, c, name); - be_member_bind(parser->vm, c, name, bfalse); + be_class_member_bind(parser->vm, c, name, bfalse); class_static_assignment_expr(parser, e, name); } else { parser_error(parser, "class static error"); diff --git a/lib/libesp32/berry/src/be_solidifylib.c b/lib/libesp32/berry/src/be_solidifylib.c index 4d4e3bcb6..1767fb16b 100644 --- a/lib/libesp32/berry/src/be_solidifylib.c +++ b/lib/libesp32/berry/src/be_solidifylib.c @@ -148,7 +148,7 @@ static void m_solidify_list(bvm *vm, blist * list, const char *class_name) // pass key name in case of class, or NULL if none static void m_solidify_bvalue(bvm *vm, bvalue * value, const char *classname, const char *key) { - int type = var_type(value); + int type = var_primetype(value); switch (type) { case BE_NIL: logfmt("be_const_nil()"); @@ -197,7 +197,7 @@ static void m_solidify_bvalue(bvm *vm, bvalue * value, const char *classname, co char func_name_id[id_len]; toidentifier(func_name_id, func_name); logfmt("be_const_%sclosure(%s%s%s_closure)", - func_isstatic(value) ? "static_" : "", + var_isstatic(value) ? "static_" : "", classname ? classname : "", classname ? "_" : "", func_name_id); } @@ -210,7 +210,7 @@ static void m_solidify_bvalue(bvm *vm, bvalue * value, const char *classname, co break; case BE_NTVFUNC: logfmt("be_const_%sfunc(be_ntv_%s_%s)", - func_isstatic(value) ? "static_" : "", + var_isstatic(value) ? "static_" : "", classname ? classname : "unknown", key ? key : "unknown"); break; case BE_INSTANCE: diff --git a/lib/libesp32/berry/src/be_vm.c b/lib/libesp32/berry/src/be_vm.c index 3032fa8ae..622930526 100644 --- a/lib/libesp32/berry/src/be_vm.c +++ b/lib/libesp32/berry/src/be_vm.c @@ -83,13 +83,15 @@ #define equal_rule(op, iseq) \ bbool res; \ + be_assert(!var_isstatic(a)); \ + be_assert(!var_isstatic(b)); \ if (var_isint(a) && var_isint(b)) { \ res = ibinop(op, a, b); \ } else if (var_isnumber(a) && var_isnumber(b)) { \ res = var2real(a) op var2real(b); \ } else if (var_isinstance(a) && !var_isnil(b)) { \ res = object_eqop(vm, #op, iseq, a, b); \ - } else if (var_type(a) == var_type(b)) { /* same types */ \ + } else if (var_primetype(a) == var_primetype(b)) { /* same types */ \ if (var_isnil(a)) { /* nil op nil */ \ res = 1 op 1; \ } else if (var_isbool(a)) { /* bool op bool */ \ @@ -256,6 +258,7 @@ static bbool obj2bool(bvm *vm, bvalue *var) binstance *obj = var_toobj(var); bstring *tobool = str_literal(vm, "tobool"); /* get operator method */ + // TODO what if `tobool` is static int type = be_instance_member(vm, obj, tobool, vm->top); if (type != BE_NONE && type != BE_NIL) { vm->top[1] = *var; /* move self to argv[0] */ @@ -342,6 +345,7 @@ static bbool object_eqop(bvm *vm, bbool isself = var_isinstance(b) && o == var_toobj(b); /* first, try to call the overloaded operator of the object */ int type = be_instance_member(vm, o, be_newstr(vm, op), vm->top); + // TODO check that method is not static if (basetype(type) == BE_FUNCTION) { /* call method */ bvalue *top = vm->top; top[1] = self; /* move self to argv[0] */ @@ -826,41 +830,41 @@ newframe: /* a new call frame */ #if BE_USE_PERF_COUNTERS vm->counter_get++; #endif - bvalue a_temp; /* copy result to a temp variable because the stack may be relocated in virtual member calls */ + bvalue result; /* copy result to a temp variable because the stack may be relocated in virtual member calls */ bvalue *b = RKB(), *c = RKC(); if (var_isinstance(b) && var_isstr(c)) { - obj_attribute(vm, b, var_tostr(c), &a_temp); + obj_attribute(vm, b, var_tostr(c), &result); reg = vm->reg; } else if (var_isclass(b) && var_isstr(c)) { - class_attribute(vm, b, c, &a_temp); + class_attribute(vm, b, c, &result); reg = vm->reg; } else if (var_ismodule(b) && var_isstr(c)) { - module_attribute(vm, b, c, &a_temp); + module_attribute(vm, b, c, &result); reg = vm->reg; } else { attribute_error(vm, "attribute", b, c); - a_temp = *RA(); /* avoid gcc warning for uninitialized variable a_temp, this code is never reached */ + result = *RA(); /* avoid gcc warning for uninitialized variable result, this code is never reached */ } bvalue *a = RA(); - *a = a_temp; /* assign the resul to the specified register on the updated stack */ + *a = result; /* assign the resul to the specified register on the updated stack */ dispatch(); } opcase(GETMET): { #if BE_USE_PERF_COUNTERS vm->counter_get++; #endif - bvalue a_temp; /* copy result to a temp variable because the stack may be relocated in virtual member calls */ + bvalue result; /* copy result to a temp variable because the stack may be relocated in virtual member calls */ bvalue *b = RKB(), *c = RKC(); if (var_isinstance(b) && var_isstr(c)) { binstance *obj = var_toobj(b); - int type = obj_attribute(vm, b, var_tostr(c), &a_temp); + int type = obj_attribute(vm, b, var_tostr(c), &result); reg = vm->reg; bvalue *a = RA(); - *a = a_temp; + *a = result; if (var_basetype(a) == BE_FUNCTION) { - if (func_isstatic(a) || (type == BE_INDEX)) { /* if instance variable then we consider it's non-method */ - /* static method, don't bother with the instance */ - a[1] = a_temp; + if ((type & BE_STATIC) || (type == BE_INDEX)) { /* if instance variable then we consider it's non-method */ + /* static method, don't bother with the instance */ + a[1] = result; var_settype(a, NOT_METHOD); } else { /* this is a real method (i.e. non-static) */ @@ -876,16 +880,16 @@ newframe: /* a new call frame */ str(be_instance_name(obj)), str(var_tostr(c))); } } else if (var_isclass(b) && var_isstr(c)) { - class_attribute(vm, b, c, &a_temp); + class_attribute(vm, b, c, &result); reg = vm->reg; bvalue *a = RA(); - a[1] = a_temp; + a[1] = result; var_settype(a, NOT_METHOD); } else if (var_ismodule(b) && var_isstr(c)) { - module_attribute(vm, b, c, &a_temp); + module_attribute(vm, b, c, &result); reg = vm->reg; bvalue *a = RA(); - a[1] = a_temp; + a[1] = result; var_settype(a, NOT_METHOD); } else { attribute_error(vm, "method", b, c); @@ -913,11 +917,11 @@ newframe: /* a new call frame */ /* if value is a function, we mark it as a static to distinguish from methods */ bclass *obj = var_toobj(a); bstring *attr = var_tostr(b); - bvalue c_static = *c; - if (var_isfunction(&c_static)) { - c_static.type = func_setstatic(&c_static); + bvalue result = *c; + if (var_isfunction(&result)) { + var_markstatic(&result); } - if (!be_class_setmember(vm, obj, attr, &c_static)) { + if (!be_class_setmember(vm, obj, attr, &result)) { reg = vm->reg; vm_error(vm, "attribute_error", "class '%s' cannot assign to static attribute '%s'", @@ -1253,6 +1257,7 @@ void be_dofunc(bvm *vm, bvalue *v, int argc) be_assert(vm->reg <= v && v < vm->stacktop); be_assert(vm->stack <= vm->reg && vm->reg < vm->stacktop); int pos = v - vm->reg; + be_assert(!var_isstatic(v)); switch (var_type(v)) { case BE_CLASS: do_class(vm, pos, argc); break; case BE_CLOSURE: do_closure(vm, pos, argc); break; From 35571322b46f43d4a951d3414d85ad30f7740981 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 12 Feb 2022 18:27:01 +0100 Subject: [PATCH 015/355] Update migration links --- README.md | 10 +++++----- RELEASENOTES.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b2f01d470..97339b00c 100644 --- a/README.md +++ b/README.md @@ -73,17 +73,17 @@ Pay attention to the following version breaks due to dynamic settings updates: 1. Migrate to **Sonoff-Tasmota 3.9.x** 2. Migrate to **Sonoff-Tasmota 4.x** 3. Migrate to **Sonoff-Tasmota 5.14** -4. Migrate to **Sonoff-Tasmota 6.7.1** (http://ota.tasmota.com/tasmota/release-6.7.1/) -5. Migrate to **Tasmota 7.2.0** (http://ota.tasmota.com/tasmota/release-7.2.0/) +4. Migrate to **Sonoff-Tasmota 6.7.1** (http://ota.tasmota.com/tasmota/release_6.7.1/sonoff.bin) - NOTICE underscore as a dash is not supported in older versions +5. Migrate to **Tasmota 7.2.0** (http://ota.tasmota.com/tasmota/release-7.2.0/tasmota.bin) --- Major change in parameter storage layout --- -6. Migrate to **Tasmota 8.5.1** (http://ota.tasmota.com/tasmota/release-8.5.1/) +6. Migrate to **Tasmota 8.5.1** (http://ota.tasmota.com/tasmota/release-8.5.1/tasmota.bin) --- Major change in internal GPIO function representation --- -7. Migrate to **Tasmota 9.1** (http://ota.tasmota.com/tasmota/release-9.1.0/) -8. Upgrade to **latest release** (http://ota.tasmota.com/tasmota/release/) +7. Migrate to **Tasmota 9.1** (http://ota.tasmota.com/tasmota/release-9.1.0/tasmota.bin.gz) +8. Upgrade to **latest release** (http://ota.tasmota.com/tasmota/release/tasmota.bin.gz) While fallback or downgrading is common practice it was never supported due to Settings additions or changes in newer releases. Starting with release **v9.1.0 Imogen** the internal GPIO function representation has changed in such a way that fallback is only possible to the latest GPIO configuration before installing **v9.1.0**. diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 54fc8a90f..e708ba31e 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -15,17 +15,17 @@ Pay attention to the following version breaks due to dynamic settings updates: 1. Migrate to **Sonoff-Tasmota 3.9.x** 2. Migrate to **Sonoff-Tasmota 4.x** 3. Migrate to **Sonoff-Tasmota 5.14** -4. Migrate to **Sonoff-Tasmota 6.7.1** (http://ota.tasmota.com/tasmota/release-6.7.1/) -5. Migrate to **Tasmota 7.2.0** (http://ota.tasmota.com/tasmota/release-7.2.0/) +4. Migrate to **Sonoff-Tasmota 6.7.1** (http://ota.tasmota.com/tasmota/release_6.7.1/sonoff.bin) - NOTICE underscore as a dash is not supported in older versions +5. Migrate to **Tasmota 7.2.0** (http://ota.tasmota.com/tasmota/release-7.2.0/tasmota.bin) --- Major change in parameter storage layout --- -6. Migrate to **Tasmota 8.5.1** (http://ota.tasmota.com/tasmota/release-8.5.1/) +6. Migrate to **Tasmota 8.5.1** (http://ota.tasmota.com/tasmota/release-8.5.1/tasmota.bin) --- Major change in internal GPIO function representation --- -7. Migrate to **Tasmota 9.1** (http://ota.tasmota.com/tasmota/release-9.1.0/) -8. Upgrade to **latest release** (http://ota.tasmota.com/tasmota/release/) +7. Migrate to **Tasmota 9.1** (http://ota.tasmota.com/tasmota/release-9.1.0/tasmota.bin.gz) +8. Upgrade to **latest release** (http://ota.tasmota.com/tasmota/release/tasmota.bin.gz) While fallback or downgrading is common practice it was never supported due to Settings additions or changes in newer releases. Starting with release **v9.1.0 Imogen** the internal GPIO function representation has changed in such a way that fallback is only possible to the latest GPIO configuration before installing **v9.1.0**. From 246efd95393f997c646104af62d94eec702e1331 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 12 Feb 2022 18:32:38 +0100 Subject: [PATCH 016/355] Update changelogs --- CHANGELOG.md | 1 + RELEASENOTES.md | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fc7960e4..5b4ee441b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. ### Added ### Changed +- ESP32 update the internal Berry type system to sync with Skiars Berry reopsitory. No expected impact on code, but .bec files need to be generated again. (#14811) ### Fixed - SSPM energy yesterday when zero diff --git a/RELEASENOTES.md b/RELEASENOTES.md index e708ba31e..ae0046010 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -109,7 +109,9 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo ### Breaking Changed ### Changed +- ESP32 update the internal Berry type system to sync with Skiars Berry reopsitory. No expected impact on code, but .bec files need to be generated again. [#14811](https://github.com/arendst/Tasmota/issues/14811) ### Fixed +- SSPM energy yesterday when zero ### Removed From 33a779f105beb4a42678ec0ff5ca0c95817d7b56 Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Sat, 12 Feb 2022 18:54:39 +0100 Subject: [PATCH 017/355] LVGL library from 8.1.0 to 8.2.0 (#14815) --- lib/libesp32/berry/default/be_modtab.c | 2 + lib/libesp32/berry/generate/be_const_strtab.h | 9 + .../berry/generate/be_const_strtab_def.h | 2031 +++++++++-------- .../be_fixed_be_class_tasmota_log_reader.h | 19 + .../berry/generate/be_fixed_lv_tasmota.h | 19 +- .../berry_mapping/src/be_class_wrapper.c | 4 +- .../berry_tasmota/src/be_lv_tasmota_lib.c | 73 +- .../src/be_lvgl_signal_arcs_lib.c | 323 ++- .../src/be_lvgl_signal_bars_lib.c | 171 +- .../src/be_tasmota_log_reader_class.cpp | 25 + .../src/embedded/lv_signal_arcs.be | 29 +- .../src/embedded/lv_signal_bars.be | 4 +- .../berry_tasmota/src/embedded/lv_tasmota.be | 1 + .../LVGL_assets/src/lv_theme_openhasp.c | 2 +- lib/libesp32_lvgl/freetype/library.json | 1 + .../lv_berry/generate/be_lv_c_mapping.h | 9 + .../lv_berry/generate/be_lvgl_module.c | 44 +- .../lv_berry/generate/be_lvgl_widgets_lib.c | 153 +- lib/libesp32_lvgl/lv_berry/mapping/lv_enum.h | 22 +- lib/libesp32_lvgl/lv_berry/mapping/lv_funcs.h | 192 +- .../lv_berry/src/be_lvgl_ctypes_definitions.c | 235 +- .../lv_berry/src/embedded/lvgl_ctypes.be | 165 +- lib/libesp32_lvgl/lv_berry/tools/convert.py | 4 + .../lv_berry/tools/preprocessor.py | 6 +- lib/libesp32_lvgl/lvgl/Kconfig | 541 ++++- lib/libesp32_lvgl/lvgl/README.md | 12 +- lib/libesp32_lvgl/lvgl/library.json | 2 +- lib/libesp32_lvgl/lvgl/library.properties | 2 +- lib/libesp32_lvgl/lvgl/lv_conf_template.h | 329 ++- lib/libesp32_lvgl/lvgl/lvgl.h | 2 +- lib/libesp32_lvgl/lvgl/lvgl.mk | 3 +- lib/libesp32_lvgl/lvgl/src/core/lv_event.c | 73 +- lib/libesp32_lvgl/lvgl/src/core/lv_event.h | 43 +- lib/libesp32_lvgl/lvgl/src/core/lv_group.c | 13 +- lib/libesp32_lvgl/lvgl/src/core/lv_indev.c | 56 +- lib/libesp32_lvgl/lvgl/src/core/lv_indev.h | 2 +- .../lvgl/src/core/lv_indev_scroll.c | 48 +- lib/libesp32_lvgl/lvgl/src/core/lv_obj.c | 95 +- lib/libesp32_lvgl/lvgl/src/core/lv_obj.h | 40 +- .../lvgl/src/core/lv_obj_class.c | 2 +- lib/libesp32_lvgl/lvgl/src/core/lv_obj_draw.c | 23 +- lib/libesp32_lvgl/lvgl/src/core/lv_obj_draw.h | 6 +- lib/libesp32_lvgl/lvgl/src/core/lv_obj_pos.c | 105 +- lib/libesp32_lvgl/lvgl/src/core/lv_obj_pos.h | 42 +- .../lvgl/src/core/lv_obj_scroll.c | 192 +- .../lvgl/src/core/lv_obj_scroll.h | 18 +- .../lvgl/src/core/lv_obj_style.c | 16 +- .../lvgl/src/core/lv_obj_style.h | 21 +- .../lvgl/src/core/lv_obj_style_gen.c | 386 ++-- .../lvgl/src/core/lv_obj_style_gen.h | 339 +-- lib/libesp32_lvgl/lvgl/src/core/lv_obj_tree.c | 6 + lib/libesp32_lvgl/lvgl/src/core/lv_obj_tree.h | 4 +- lib/libesp32_lvgl/lvgl/src/core/lv_refr.c | 571 ++--- lib/libesp32_lvgl/lvgl/src/core/lv_refr.h | 14 +- lib/libesp32_lvgl/lvgl/src/core/lv_theme.h | 7 +- .../src/{gpu/lv_gpu_sdl.c => draw/lv_draw.c} | 34 +- lib/libesp32_lvgl/lvgl/src/draw/lv_draw.h | 63 +- lib/libesp32_lvgl/lvgl/src/draw/lv_draw.mk | 4 +- lib/libesp32_lvgl/lvgl/src/draw/lv_draw_arc.c | 431 +--- lib/libesp32_lvgl/lvgl/src/draw/lv_draw_arc.h | 17 +- .../lvgl/src/draw/lv_draw_blend.c | 1063 --------- .../lvgl/src/draw/lv_draw_blend.h | 50 - lib/libesp32_lvgl/lvgl/src/draw/lv_draw_img.c | 401 +--- lib/libesp32_lvgl/lvgl/src/draw/lv_draw_img.h | 11 +- .../lvgl/src/draw/lv_draw_label.c | 539 +---- .../lvgl/src/draw/lv_draw_label.h | 22 +- .../lvgl/src/draw/lv_draw_line.c | 445 +--- .../lvgl/src/draw/lv_draw_line.h | 17 +- .../lvgl/src/draw/lv_draw_mask.c | 135 +- .../lvgl/src/draw/lv_draw_mask.h | 20 +- .../lvgl/src/draw/lv_draw_rect.c | 1284 +---------- .../lvgl/src/draw/lv_draw_rect.h | 36 +- .../lvgl/src/draw/lv_draw_triangle.c | 176 +- .../lvgl/src/draw/lv_draw_triangle.h | 20 +- lib/libesp32_lvgl/lvgl/src/draw/lv_img_buf.c | 4 +- .../{gpu => draw/nxp_pxp}/lv_gpu_nxp_pxp.c | 4 +- .../{gpu => draw/nxp_pxp}/lv_gpu_nxp_pxp.h | 6 + .../nxp_pxp}/lv_gpu_nxp_pxp_osa.c | 4 +- .../nxp_pxp}/lv_gpu_nxp_pxp_osa.h | 2 +- .../nxp_vglite}/lv_gpu_nxp_vglite.c | 3 +- .../nxp_vglite}/lv_gpu_nxp_vglite.h | 6 +- .../lvgl/src/{gpu => draw}/sdl/README.md | 4 +- .../lvgl/src/draw/sdl/lv_draw_sdl.c | 98 + .../lvgl/src/draw/sdl/lv_draw_sdl.h | 96 + .../lvgl/src/draw/sdl/lv_draw_sdl.mk | 18 + .../lvgl/src/draw/sdl/lv_draw_sdl_arc.c | 238 ++ .../lvgl/src/draw/sdl/lv_draw_sdl_bg.c | 106 + .../lvgl/src/draw/sdl/lv_draw_sdl_composite.c | 256 +++ .../lvgl/src/draw/sdl/lv_draw_sdl_composite.h | 72 + .../lvgl/src/draw/sdl/lv_draw_sdl_img.c | 459 ++++ .../lvgl/src/draw/sdl/lv_draw_sdl_img.h | 72 + .../lvgl/src/draw/sdl/lv_draw_sdl_label.c | 158 ++ .../lvgl/src/draw/sdl/lv_draw_sdl_line.c | 154 ++ .../sdl/lv_draw_sdl_mask.c} | 54 +- .../lvgl/src/draw/sdl/lv_draw_sdl_mask.h | 51 + .../lvgl/src/draw/sdl/lv_draw_sdl_polygon.c | 133 ++ .../sdl/lv_draw_sdl_priv.h} | 31 +- .../lvgl/src/draw/sdl/lv_draw_sdl_rect.c | 708 ++++++ .../lvgl/src/draw/sdl/lv_draw_sdl_rect.h | 75 + .../sdl/lv_draw_sdl_stack_blur.c} | 6 +- .../sdl/lv_draw_sdl_stack_blur.h} | 12 +- .../sdl/lv_draw_sdl_texture_cache.c} | 121 +- .../src/draw/sdl/lv_draw_sdl_texture_cache.h | 102 + .../sdl/lv_draw_sdl_utils.c} | 98 +- .../sdl/lv_draw_sdl_utils.h} | 22 +- .../src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.c | 256 +++ .../src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.h | 66 + .../lvgl/src/draw/sw/lv_draw_sw.c | 74 + .../lvgl/src/draw/sw/lv_draw_sw.h | 78 + .../lvgl/src/draw/sw/lv_draw_sw.mk | 15 + .../lvgl/src/draw/sw/lv_draw_sw_arc.c | 531 +++++ .../lvgl/src/draw/sw/lv_draw_sw_blend.c | 757 ++++++ .../lvgl/src/draw/sw/lv_draw_sw_blend.h | 69 + .../lvgl/src/draw/sw/lv_draw_sw_dither.c | 213 ++ .../lvgl/src/draw/sw/lv_draw_sw_dither.h | 70 + .../lvgl/src/draw/sw/lv_draw_sw_gradient.c | 353 +++ .../lvgl/src/draw/sw/lv_draw_sw_gradient.h | 97 + .../lvgl/src/draw/sw/lv_draw_sw_img.c | 321 +++ .../lvgl/src/draw/sw/lv_draw_sw_letter.c | 536 +++++ .../lvgl/src/draw/sw/lv_draw_sw_line.c | 443 ++++ .../lvgl/src/draw/sw/lv_draw_sw_polygon.c | 207 ++ .../lvgl/src/draw/sw/lv_draw_sw_rect.c | 1419 ++++++++++++ lib/libesp32_lvgl/lvgl/src/extra/README.md | 3 +- .../lvgl/src/extra/layouts/flex/lv_flex.c | 6 +- .../lvgl/src/extra/layouts/grid/lv_grid.c | 2 +- .../src/extra/libs/freetype/lv_freetype.c | 343 ++- .../src/extra/libs/freetype/lv_freetype.h | 2 + .../lvgl/src/extra/libs/fsdrv/lv_fs_fatfs.c | 50 +- .../lvgl/src/extra/libs/fsdrv/lv_fs_posix.c | 67 +- .../lvgl/src/extra/libs/fsdrv/lv_fs_stdio.c | 64 +- .../lvgl/src/extra/libs/fsdrv/lv_fs_win32.c | 95 +- .../lvgl/src/extra/libs/fsdrv/lv_fsdrv.h | 8 +- .../lvgl/src/extra/libs/lv_libs.h | 6 +- .../lvgl/src/extra/libs/png/lv_png.c | 104 +- .../lvgl/src/extra/libs/png/lv_png.h | 2 +- .../lvgl/src/extra/libs/qrcode/lv_qrcode.c | 215 ++ .../lvgl/src/extra/libs/qrcode/lv_qrcode.h | 69 + .../lvgl/src/extra/libs/qrcode/qrcodegen.c | 1035 +++++++++ .../lvgl/src/extra/libs/qrcode/qrcodegen.h | 319 +++ lib/libesp32_lvgl/lvgl/src/extra/lv_extra.c | 13 +- .../src/extra/others/gridnav/lv_gridnav.c | 354 +++ .../src/extra/others/gridnav/lv_gridnav.h | 115 + .../lvgl/src/extra/others/lv_others.h | 2 + .../lvgl/src/extra/others/monkey/lv_monkey.c | 187 ++ .../lvgl/src/extra/others/monkey/lv_monkey.h | 118 + .../src/extra/others/snapshot/lv_snapshot.c | 77 +- .../src/extra/others/snapshot/lv_snapshot.h | 2 +- .../src/extra/widgets/animimg/lv_animimg.h | 12 +- .../src/extra/widgets/calendar/lv_calendar.c | 3 +- .../src/extra/widgets/calendar/lv_calendar.h | 4 +- .../calendar/lv_calendar_header_arrow.h | 2 +- .../calendar/lv_calendar_header_dropdown.h | 2 +- .../lvgl/src/extra/widgets/chart/lv_chart.c | 184 +- .../lvgl/src/extra/widgets/chart/lv_chart.h | 4 +- .../extra/widgets/colorwheel/lv_colorwheel.c | 10 +- .../extra/widgets/colorwheel/lv_colorwheel.h | 2 +- .../lvgl/src/extra/widgets/imgbtn/lv_imgbtn.c | 60 +- .../lvgl/src/extra/widgets/imgbtn/lv_imgbtn.h | 4 +- .../src/extra/widgets/keyboard/lv_keyboard.c | 11 +- .../src/extra/widgets/keyboard/lv_keyboard.h | 26 +- .../lvgl/src/extra/widgets/led/lv_led.c | 22 +- .../lvgl/src/extra/widgets/led/lv_led.h | 6 +- .../lvgl/src/extra/widgets/list/lv_list.c | 2 + .../lvgl/src/extra/widgets/lv_widgets.h | 1 + .../lvgl/src/extra/widgets/menu/lv_menu.c | 752 ++++++ .../lvgl/src/extra/widgets/menu/lv_menu.h | 233 ++ .../lvgl/src/extra/widgets/meter/lv_meter.c | 38 +- .../lvgl/src/extra/widgets/meter/lv_meter.h | 2 +- .../lvgl/src/extra/widgets/msgbox/lv_msgbox.c | 28 +- .../lvgl/src/extra/widgets/span/lv_span.c | 230 +- .../lvgl/src/extra/widgets/span/lv_span.h | 11 +- .../src/extra/widgets/spinbox/lv_spinbox.c | 24 +- .../src/extra/widgets/spinbox/lv_spinbox.h | 36 +- .../src/extra/widgets/spinner/lv_spinner.c | 2 +- .../src/extra/widgets/tileview/lv_tileview.c | 2 + .../src/extra/widgets/tileview/lv_tileview.h | 6 +- lib/libesp32_lvgl/lvgl/src/font/lv_font.c | 15 +- lib/libesp32_lvgl/lvgl/src/font/lv_font.h | 39 +- .../font/lv_font_dejavu_16_persian_hebrew.c | 11 +- .../lvgl/src/font/lv_font_fmt_txt.c | 1 + .../lvgl/src/font/lv_font_montserrat_10.c | 2 +- .../lvgl/src/font/lv_font_montserrat_12.c | 23 +- .../src/font/lv_font_montserrat_12_subpx.c | 23 +- .../lvgl/src/font/lv_font_montserrat_14.c | 23 +- .../lvgl/src/font/lv_font_montserrat_16.c | 23 +- .../lvgl/src/font/lv_font_montserrat_18.c | 23 +- .../lvgl/src/font/lv_font_montserrat_20.c | 23 +- .../lvgl/src/font/lv_font_montserrat_22.c | 23 +- .../lvgl/src/font/lv_font_montserrat_24.c | 23 +- .../lvgl/src/font/lv_font_montserrat_26.c | 23 +- .../lvgl/src/font/lv_font_montserrat_28.c | 23 +- .../font/lv_font_montserrat_28_compressed.c | 23 +- .../lvgl/src/font/lv_font_montserrat_30.c | 23 +- .../lvgl/src/font/lv_font_montserrat_32.c | 23 +- .../lvgl/src/font/lv_font_montserrat_34.c | 23 +- .../lvgl/src/font/lv_font_montserrat_36.c | 23 +- .../lvgl/src/font/lv_font_montserrat_38.c | 23 +- .../lvgl/src/font/lv_font_montserrat_40.c | 23 +- .../lvgl/src/font/lv_font_montserrat_42.c | 23 +- .../lvgl/src/font/lv_font_montserrat_44.c | 23 +- .../lvgl/src/font/lv_font_montserrat_46.c | 23 +- .../lvgl/src/font/lv_font_montserrat_48.c | 23 +- .../lvgl/src/font/lv_font_montserrat_8.c | 2 +- .../lvgl/src/font/lv_font_simsun_16_cjk.c | 11 +- .../lvgl/src/font/lv_font_unscii_16.c | 2 +- .../lvgl/src/font/lv_font_unscii_8.c | 2 +- .../lvgl/src/font/lv_symbol_def.h | 335 ++- lib/libesp32_lvgl/lvgl/src/gpu/lv_gpu.mk | 2 - .../lvgl/src/gpu/lv_gpu_stm32_dma2d.c | 262 --- .../lvgl/src/gpu/lv_gpu_stm32_dma2d.h | 109 - .../lvgl/src/gpu/sdl/lv_gpu_sdl.mk | 16 - .../lvgl/src/gpu/sdl/lv_gpu_sdl_draw_arc.c | 163 -- .../lvgl/src/gpu/sdl/lv_gpu_sdl_draw_blend.c | 102 - .../lvgl/src/gpu/sdl/lv_gpu_sdl_draw_img.c | 171 -- .../lvgl/src/gpu/sdl/lv_gpu_sdl_draw_label.c | 332 --- .../lvgl/src/gpu/sdl/lv_gpu_sdl_draw_line.c | 158 -- .../lvgl/src/gpu/sdl/lv_gpu_sdl_draw_rect.c | 733 ------ .../lvgl/src/gpu/sdl/lv_gpu_sdl_lru.h | 90 - .../lvgl/src/gpu/sdl/lv_gpu_sdl_mask.h | 57 - .../src/gpu/sdl/lv_gpu_sdl_texture_cache.h | 90 - lib/libesp32_lvgl/lvgl/src/hal/lv_hal_disp.c | 50 +- lib/libesp32_lvgl/lvgl/src/hal/lv_hal_disp.h | 28 +- lib/libesp32_lvgl/lvgl/src/hal/lv_hal_indev.c | 35 + lib/libesp32_lvgl/lvgl/src/hal/lv_hal_indev.h | 6 + lib/libesp32_lvgl/lvgl/src/hal/lv_hal_tick.c | 4 +- lib/libesp32_lvgl/lvgl/src/misc/lv_anim.h | 2 +- .../lvgl/src/misc/lv_anim_timeline.c | 2 +- .../lvgl/src/misc/lv_anim_timeline.h | 2 +- lib/libesp32_lvgl/lvgl/src/misc/lv_area.c | 5 + lib/libesp32_lvgl/lvgl/src/misc/lv_area.h | 13 +- lib/libesp32_lvgl/lvgl/src/misc/lv_bidi.c | 24 +- lib/libesp32_lvgl/lvgl/src/misc/lv_color.h | 29 + lib/libesp32_lvgl/lvgl/src/misc/lv_fs.c | 200 +- lib/libesp32_lvgl/lvgl/src/misc/lv_fs.h | 9 + lib/libesp32_lvgl/lvgl/src/misc/lv_gc.h | 4 +- lib/libesp32_lvgl/lvgl/src/misc/lv_log.c | 5 +- .../sdl/lv_gpu_sdl_lru.c => misc/lv_lru.c} | 180 +- lib/libesp32_lvgl/lvgl/src/misc/lv_lru.h | 81 + lib/libesp32_lvgl/lvgl/src/misc/lv_mem.h | 2 +- lib/libesp32_lvgl/lvgl/src/misc/lv_misc.mk | 1 + lib/libesp32_lvgl/lvgl/src/misc/lv_printf.c | 2 +- lib/libesp32_lvgl/lvgl/src/misc/lv_printf.h | 28 +- lib/libesp32_lvgl/lvgl/src/misc/lv_style.c | 3 +- lib/libesp32_lvgl/lvgl/src/misc/lv_style.h | 81 +- .../lvgl/src/misc/lv_style_gen.c | 385 ++-- .../lvgl/src/misc/lv_style_gen.h | 687 ++---- lib/libesp32_lvgl/lvgl/src/misc/lv_tlsf.c | 2 +- lib/libesp32_lvgl/lvgl/src/misc/lv_tlsf.h | 2 +- lib/libesp32_lvgl/lvgl/src/misc/lv_txt.c | 25 +- lib/libesp32_lvgl/lvgl/src/misc/lv_txt.h | 10 +- lib/libesp32_lvgl/lvgl/src/misc/lv_types.h | 2 +- lib/libesp32_lvgl/lvgl/src/misc/lv_utils.c | 4 +- lib/libesp32_lvgl/lvgl/src/misc/lv_utils.h | 2 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_arc.c | 109 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_arc.h | 2 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_bar.c | 44 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_bar.h | 2 +- .../lvgl/src/widgets/lv_btnmatrix.c | 42 +- .../lvgl/src/widgets/lv_btnmatrix.h | 6 +- .../lvgl/src/widgets/lv_canvas.c | 285 +-- .../lvgl/src/widgets/lv_checkbox.c | 20 +- .../lvgl/src/widgets/lv_dropdown.c | 124 +- .../lvgl/src/widgets/lv_dropdown.h | 16 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_img.c | 16 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_img.h | 6 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_label.c | 43 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_label.h | 28 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_line.c | 4 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_line.h | 4 +- .../lvgl/src/widgets/lv_objx_templ.h | 2 +- .../lvgl/src/widgets/lv_roller.c | 59 +- .../lvgl/src/widgets/lv_roller.h | 2 +- .../lvgl/src/widgets/lv_slider.c | 22 +- .../lvgl/src/widgets/lv_slider.h | 2 +- .../lvgl/src/widgets/lv_switch.c | 31 +- .../lvgl/src/widgets/lv_switch.h | 7 +- lib/libesp32_lvgl/lvgl/src/widgets/lv_table.c | 24 +- .../lvgl/src/widgets/lv_textarea.c | 12 +- .../lvgl/src/widgets/lv_textarea.h | 4 +- tasmota/berry/lvgl_examples/lv.be | 116 + .../berry/lvgl_examples/lv_tasmota_info.be | 66 + tasmota/berry/lvgl_examples/lv_tasmota_log.be | 64 + .../lvgl_examples/lv_tasmota_log_roboto.be | 68 + tasmota/berry/lvgl_examples/lv_wifi_graph.be | 70 + tasmota/lvgl_berry/tasmota_lv_conf.h | 534 +++-- tasmota/xdrv_52_3_berry_lvgl.ino | 19 + tasmota/xdrv_52_3_berry_tasmota.ino | 46 +- 287 files changed, 19767 insertions(+), 12214 deletions(-) create mode 100644 lib/libesp32/berry/generate/be_fixed_be_class_tasmota_log_reader.h create mode 100644 lib/libesp32/berry_tasmota/src/be_tasmota_log_reader_class.cpp rename lib/libesp32_lvgl/lvgl/src/{gpu/lv_gpu_sdl.c => draw/lv_draw.c} (58%) delete mode 100644 lib/libesp32_lvgl/lvgl/src/draw/lv_draw_blend.c delete mode 100644 lib/libesp32_lvgl/lvgl/src/draw/lv_draw_blend.h rename lib/libesp32_lvgl/lvgl/src/{gpu => draw/nxp_pxp}/lv_gpu_nxp_pxp.c (99%) rename lib/libesp32_lvgl/lvgl/src/{gpu => draw/nxp_pxp}/lv_gpu_nxp_pxp.h (98%) rename lib/libesp32_lvgl/lvgl/src/{gpu => draw/nxp_pxp}/lv_gpu_nxp_pxp_osa.c (99%) rename lib/libesp32_lvgl/lvgl/src/{gpu => draw/nxp_pxp}/lv_gpu_nxp_pxp_osa.h (97%) rename lib/libesp32_lvgl/lvgl/src/{gpu => draw/nxp_vglite}/lv_gpu_nxp_vglite.c (99%) rename lib/libesp32_lvgl/lvgl/src/{gpu => draw/nxp_vglite}/lv_gpu_nxp_vglite.h (98%) rename lib/libesp32_lvgl/lvgl/src/{gpu => draw}/sdl/README.md (93%) create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl.h create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl.mk create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_arc.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_bg.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_composite.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_composite.h create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_img.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_img.h create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_label.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_line.c rename lib/libesp32_lvgl/lvgl/src/{gpu/sdl/lv_gpu_sdl_mask.c => draw/sdl/lv_draw_sdl_mask.c} (50%) create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_mask.h create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_polygon.c rename lib/libesp32_lvgl/lvgl/src/{gpu/lv_gpu_sdl.h => draw/sdl/lv_draw_sdl_priv.h} (68%) create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_rect.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_rect.h rename lib/libesp32_lvgl/lvgl/src/{gpu/sdl/lv_gpu_sdl_stack_blur.c => draw/sdl/lv_draw_sdl_stack_blur.c} (98%) rename lib/libesp32_lvgl/lvgl/src/{gpu/sdl/lv_gpu_sdl_stack_blur.h => draw/sdl/lv_draw_sdl_stack_blur.h} (76%) rename lib/libesp32_lvgl/lvgl/src/{gpu/sdl/lv_gpu_sdl_texture_cache.c => draw/sdl/lv_draw_sdl_texture_cache.c} (51%) create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_texture_cache.h rename lib/libesp32_lvgl/lvgl/src/{gpu/sdl/lv_gpu_sdl_utils.c => draw/sdl/lv_draw_sdl_utils.c} (61%) rename lib/libesp32_lvgl/lvgl/src/{gpu/sdl/lv_gpu_sdl_utils.h => draw/sdl/lv_draw_sdl_utils.h} (64%) create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.h create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw.h create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw.mk create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_arc.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_blend.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_blend.h create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_dither.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_dither.h create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_gradient.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_gradient.h create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_img.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_letter.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_line.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_polygon.c create mode 100644 lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_rect.c create mode 100644 lib/libesp32_lvgl/lvgl/src/extra/libs/qrcode/lv_qrcode.c create mode 100644 lib/libesp32_lvgl/lvgl/src/extra/libs/qrcode/lv_qrcode.h create mode 100644 lib/libesp32_lvgl/lvgl/src/extra/libs/qrcode/qrcodegen.c create mode 100644 lib/libesp32_lvgl/lvgl/src/extra/libs/qrcode/qrcodegen.h create mode 100644 lib/libesp32_lvgl/lvgl/src/extra/others/gridnav/lv_gridnav.c create mode 100644 lib/libesp32_lvgl/lvgl/src/extra/others/gridnav/lv_gridnav.h create mode 100755 lib/libesp32_lvgl/lvgl/src/extra/others/monkey/lv_monkey.c create mode 100755 lib/libesp32_lvgl/lvgl/src/extra/others/monkey/lv_monkey.h create mode 100644 lib/libesp32_lvgl/lvgl/src/extra/widgets/menu/lv_menu.c create mode 100644 lib/libesp32_lvgl/lvgl/src/extra/widgets/menu/lv_menu.h delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/lv_gpu_stm32_dma2d.c delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/lv_gpu_stm32_dma2d.h delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/sdl/lv_gpu_sdl.mk delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/sdl/lv_gpu_sdl_draw_arc.c delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/sdl/lv_gpu_sdl_draw_blend.c delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/sdl/lv_gpu_sdl_draw_img.c delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/sdl/lv_gpu_sdl_draw_label.c delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/sdl/lv_gpu_sdl_draw_line.c delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/sdl/lv_gpu_sdl_draw_rect.c delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/sdl/lv_gpu_sdl_lru.h delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/sdl/lv_gpu_sdl_mask.h delete mode 100644 lib/libesp32_lvgl/lvgl/src/gpu/sdl/lv_gpu_sdl_texture_cache.h rename lib/libesp32_lvgl/lvgl/src/{gpu/sdl/lv_gpu_sdl_lru.c => misc/lv_lru.c} (62%) create mode 100644 lib/libesp32_lvgl/lvgl/src/misc/lv_lru.h create mode 100644 tasmota/berry/lvgl_examples/lv.be create mode 100644 tasmota/berry/lvgl_examples/lv_tasmota_info.be create mode 100644 tasmota/berry/lvgl_examples/lv_tasmota_log.be create mode 100644 tasmota/berry/lvgl_examples/lv_tasmota_log_roboto.be create mode 100644 tasmota/berry/lvgl_examples/lv_wifi_graph.be diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c index 3a7cfc11c..fd98159ec 100644 --- a/lib/libesp32/berry/default/be_modtab.c +++ b/lib/libesp32/berry/default/be_modtab.c @@ -145,6 +145,7 @@ BERRY_LOCAL const bntvmodule* const be_module_table[] = { #ifdef ESP32 extern void be_load_tasmota_ntvlib(bvm *vm); +extern void be_load_tasmota_log_reader_class(bvm *vm); extern void be_load_light_state_class(bvm *vm); extern void be_load_wirelib(bvm *vm); extern void be_load_onewirelib(bvm *vm); @@ -193,6 +194,7 @@ BERRY_API void be_load_custom_libs(bvm *vm) #endif be_load_Timer_class(vm); be_load_tasmota_ntvlib(vm); + be_load_tasmota_log_reader_class(vm); be_load_Driver_class(vm); be_load_md5_lib(vm); be_load_serial_lib(vm); diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h index 42529fa92..3f78caf90 100644 --- a/lib/libesp32/berry/generate/be_const_strtab.h +++ b/lib/libesp32/berry/generate/be_const_strtab.h @@ -232,6 +232,7 @@ extern const bcstring be_const_str_allocated; extern const bcstring be_const_str_alternate; extern const bcstring be_const_str_animate; extern const bcstring be_const_str_animators; +extern const bcstring be_const_str_arc_dsc; extern const bcstring be_const_str_arch; extern const bcstring be_const_str_area; extern const bcstring be_const_str_arg; @@ -350,6 +351,9 @@ extern const bcstring be_const_str_display; extern const bcstring be_const_str_display_X2Eini; extern const bcstring be_const_str_do; extern const bcstring be_const_str_draw_arc; +extern const bcstring be_const_str_draw_arc_dsc; +extern const bcstring be_const_str_draw_arc_dsc_init; +extern const bcstring be_const_str_draw_ctx; extern const bcstring be_const_str_draw_line; extern const bcstring be_const_str_draw_line_dsc; extern const bcstring be_const_str_draw_line_dsc_init; @@ -393,6 +397,7 @@ extern const bcstring be_const_str_find_op; extern const bcstring be_const_str_finish; extern const bcstring be_const_str_floor; extern const bcstring be_const_str_flush; +extern const bcstring be_const_str_font_embedded; extern const bcstring be_const_str_font_montserrat; extern const bcstring be_const_str_font_seg7; extern const bcstring be_const_str_for; @@ -424,6 +429,7 @@ extern const bcstring be_const_str_get_free_heap; extern const bcstring be_const_str_get_height; extern const bcstring be_const_str_get_input_power_status; extern const bcstring be_const_str_get_light; +extern const bcstring be_const_str_get_log; extern const bcstring be_const_str_get_object_from_ptr; extern const bcstring be_const_str_get_option; extern const bcstring be_const_str_get_percentage; @@ -462,6 +468,7 @@ extern const bcstring be_const_str_imax; extern const bcstring be_const_str_imin; extern const bcstring be_const_str_import; extern const bcstring be_const_str_init; +extern const bcstring be_const_str_init_draw_arc_dsc; extern const bcstring be_const_str_init_draw_line_dsc; extern const bcstring be_const_str_input; extern const bcstring be_const_str_ins_goto; @@ -638,6 +645,7 @@ extern const bcstring be_const_str_reverse_gamma10; extern const bcstring be_const_str_rotate; extern const bcstring be_const_str_round_end; extern const bcstring be_const_str_round_start; +extern const bcstring be_const_str_rounded; extern const bcstring be_const_str_rtc; extern const bcstring be_const_str_rule; extern const bcstring be_const_str_run; @@ -734,6 +742,7 @@ extern const bcstring be_const_str_target_search; extern const bcstring be_const_str_tasmota; extern const bcstring be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29; extern const bcstring be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29; +extern const bcstring be_const_str_tasmota_log_reader; extern const bcstring be_const_str_tcpclient; extern const bcstring be_const_str_tele; extern const bcstring be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function; diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h index f0712889a..b26de1f17 100644 --- a/lib/libesp32/berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/berry/generate/be_const_strtab_def.h @@ -1,742 +1,751 @@ -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_ins_goto); -be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_int); -be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str__X2Ebec); -be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, NULL); -be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_round_start); -be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_display_X2Eini); -be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str__X2E); -be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_ceil); -be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_do); -be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_AES_GCM); -be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj); -be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_geti); -be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str__ptr); -be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_day); -be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, NULL); -be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str__X2F); -be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str__X3C_X3D); -be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_super); -be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_get_bri); -be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_create_custom_widget); -be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_get_warning_level); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_rtc); +be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E); +be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str__X2Ep); +be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str_CT); +be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_publish); +be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_asstring); +be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_lvgl_event_dispatch); +be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str__X5B); +be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_begin_multicast); +be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting); +be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str__error); +be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str__X3D_X3C_X3E_X21); +be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_BUTTON_CONFIGURATION); +be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_lv_coord_arr); +be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_RES_OK); +be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_gamma); +be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str__X2Fac); +be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_read24); +be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_make_cb); +be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson); +be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_bus); be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, NULL); -be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_bool); -be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_lv_solidified); -be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29); -be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback); -be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str__X3Clambda_X3E); -be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_lv_signal_bars); -be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_pow); -be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, NULL); -be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_introspect); -be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_read32); -be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str_set_height); -be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20); -be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E); -be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_codedump); -be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, NULL); -be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_compile); -be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_strptime); -be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str__anonymous_); -be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, NULL); -be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, &be_const_str_AudioOutput); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_b); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_gpio); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str__begin_transmission); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_lv); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_energy_struct); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_set_rate); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_get_percentage); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_false); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_set_timer); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_remove_driver); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, NULL); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_HTTP_GET); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_get_object_from_ptr); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_None); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, NULL); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, NULL); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_assert); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_set_useragent); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_lv_obj_class); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, NULL); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_COLOR_BLACK); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_SERIAL_6E1); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_SERIAL_7O2); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, NULL); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_write8); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_EC_C25519); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, NULL); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_before_del); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_Wire); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, NULL); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, NULL); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_assert); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_set_useragent); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_lv_obj_class); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, NULL); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_COLOR_BLACK); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_SERIAL_6E1); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_SERIAL_7O2); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, NULL); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_write8); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_EC_C25519); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, NULL); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_before_del); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_Wire); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_file); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_False); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_erase); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_add_anim); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_HTTP_POST); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str__X3F); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_get_width); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_assert); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, NULL); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_SERIAL_5E1); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_to_gamma); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str__X3E_X3D); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_pixel_count); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, NULL); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_f); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_file); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_False); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_erase); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_add_anim); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_HTTP_POST); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str__X3F); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_get_width); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_assert); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, NULL); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_SERIAL_5E1); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_to_gamma); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str__X3E_X3D); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_pixel_count); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, NULL); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_f); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_srand); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_detect); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_consume_mono); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str__X3F); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_AudioOutput); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_lv_point); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_OPTION_A); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_AXP192); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_gc); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_RGBW); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_energy_struct); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_loop); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_connected); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_set_matrix_pixel_color); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_srand); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_detect); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_consume_mono); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str__X3F); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_AudioOutput); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_lv_point); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_OPTION_A); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_AXP192); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_gc); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_RGBW); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_energy_struct); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_loop); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_connected); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_set_matrix_pixel_color); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_lv_module_init); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_invalidate); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_AudioFileSource); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, NULL); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_back_forth); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_detected_X20on_X20bus); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, NULL); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str__read); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_fast_loop); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str__X3D_X3D); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, NULL); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_reverse_gamma10); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, NULL); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_log10); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_p2); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_lv_module_init); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_invalidate); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_AudioFileSource); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, NULL); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_back_forth); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_detected_X20on_X20bus); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, NULL); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str__read); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_fast_loop); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str__X3D_X3D); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, NULL); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_reverse_gamma10); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, NULL); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_log10); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_p2); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_srand); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_detect); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_consume_mono); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str__X3F); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_AudioOutput); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_lv_point); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_OPTION_A); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_AXP192); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_gc); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_RGBW); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_energy_struct); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_loop); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_connected); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_set_matrix_pixel_color); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "" D_TIMER_ACTION " \";" "o=qs('#p1');ce('" D_OFF "',o);ce('" D_ON "',o);ce('" D_TOGGLE "',o);" // Create offset direction select options #if defined(USE_RULES) || defined(USE_SCRIPT) @@ -781,7 +781,7 @@ const char HTTP_TIMER_SCRIPT6[] PROGMEM = "o=qs('#ho');for(i=0;i<=23;i++){ce((i<10)?('0'+i):i,o);}" // Create hours select options "o=qs('#mi');for(i=0;i<=59;i++){ce((i<10)?('0'+i):i,o);}" // Create minutes select options "o=qs('#mw');for(i=0;i<=15;i++){ce((i<10)?('0'+i):i,o);}" // Create window minutes select options - "o=qs('#d1');for(i=0;i<%d;i++){ce(i+1,o);}" // Create outputs + "o=qs('#d1');for(i=0;i<%d;i++){ce(i+1,o);}" // Create outputs ((TasmotaGlobal.devices_present > 16) ? 16 : TasmotaGlobal.devices_present) "var a='" D_DAY3LIST "';" // "s='';for(i=0;i<7;i++){s+=\"\"+a.substring(i*3,(i*3)+3)+\" \"}" @@ -863,7 +863,7 @@ void HandleTimerConfiguration(void) WSContentSend_P(HTTP_TIMER_SCRIPT3, TasmotaGlobal.devices_present); WSContentSend_P(HTTP_TIMER_SCRIPT4, WebColor(COL_TIMER_TAB_BACKGROUND), WebColor(COL_TIMER_TAB_TEXT), WebColor(COL_FORM), WebColor(COL_TEXT), TasmotaGlobal.devices_present); WSContentSend_P(HTTP_TIMER_SCRIPT5, MAX_TIMERS, TasmotaGlobal.devices_present); - WSContentSend_P(HTTP_TIMER_SCRIPT6, TasmotaGlobal.devices_present); + WSContentSend_P(HTTP_TIMER_SCRIPT6, (TasmotaGlobal.devices_present > 16) ? 16 : TasmotaGlobal.devices_present); // Power field is 4-bit allowing 0 to 15 devices WSContentSendStyle_P(HTTP_TIMER_STYLE, WebColor(COL_FORM)); WSContentSend_P(HTTP_FORM_TIMER1, (Settings->flag3.timers_enable) ? PSTR(" checked") : ""); // CMND_TIMERS for (uint32_t i = 0; i < MAX_TIMERS; i++) { From 74d17d32c62ce4792fa21aa51daa5c13ae691916 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 20 Feb 2022 11:41:51 +0100 Subject: [PATCH 078/355] Fix SPM simulate possible duplicates --- tasmota/xdrv_86_esp32_sonoff_spm.ino | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tasmota/xdrv_86_esp32_sonoff_spm.ino b/tasmota/xdrv_86_esp32_sonoff_spm.ino index 555be32c6..7316bed10 100644 --- a/tasmota/xdrv_86_esp32_sonoff_spm.ino +++ b/tasmota/xdrv_86_esp32_sonoff_spm.ino @@ -1371,7 +1371,6 @@ void SSPMHandleReceivedData(void) { #endif power_t relay = (SspmBuffer[31] & 0x0F) << (module * 4); // Relays active power_t relay_state = (SspmBuffer[31] >> 4) << (module * 4); // Relays state - for (uint32_t i = 1; i <= TasmotaGlobal.devices_present; i++) { if (relay &1) { ExecuteCommandPower(i, relay_state &1, SRC_BUTTON); @@ -1453,11 +1452,14 @@ void SSPMHandleReceivedData(void) { SSPMAddModule(); #ifdef SSPM_SIMULATE if (0 == Sspm->simulate) { + uint8_t current_idh = SspmBuffer[19]; uint8_t current_idl = SspmBuffer[20]; for (Sspm->simulate = 0; Sspm->simulate < SSPM_SIMULATE; Sspm->simulate++) { + SspmBuffer[19] = Sspm->simulate +1; SspmBuffer[20] = Sspm->simulate +1; SSPMAddModule(); } + SspmBuffer[19] = current_idh; SspmBuffer[20] = current_idl; } #endif From b94c41760d0f6f1dbf3bfd1b229684c628c71331 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 20 Feb 2022 12:52:02 +0100 Subject: [PATCH 079/355] Enable ethernet in tasmota32.bin --- tasmota/my_user_config.h | 4 ++-- tasmota/tasmota_configurations_ESP32.h | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index e2289532c..94e528a86 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -983,9 +983,9 @@ #define SET_ESP32_STACK_SIZE (8 * 1024) // Set the stack size for Tasmota. The default value is 8192 for Arduino, some builds might need to increase it -//#define USE_SONOFF_SPM // Add support for ESP32 based Sonoff Smart Stackable Power Meter(+6k3 code) +//#define USE_SONOFF_SPM // Add support for ESP32 based Sonoff Smart Stackable Power Meter (+11k code) -//#define USE_ETHERNET // Add support for ethernet (Currently fixed for Olimex ESP32-PoE) +//#define USE_ETHERNET // Add support for ethernet (+20k code) // #define USE_WT32_ETH01 // Add support for Wireless-Tag WT32-ETH01 // #define ETH_TYPE 0 // [EthType] 0 = ETH_PHY_LAN8720, 1 = ETH_PHY_TLK110/ETH_PHY_IP101, 2 = ETH_PHY_RTL8201, 3 = ETH_PHY_DP83848, 4 = ETH_PHY_DM9051, 5 = ETH_PHY_KSZ8081 // #define ETH_ADDRESS 1 // [EthAddress] 0 = PHY0 .. 31 = PHY31 diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h index b1d0de26d..8a533e0b4 100644 --- a/tasmota/tasmota_configurations_ESP32.h +++ b/tasmota/tasmota_configurations_ESP32.h @@ -377,7 +377,7 @@ //#define USE_EZOPMP // [I2cDriver55] Enable support for EZO's PMP sensor (+0k3 code) - Shared EZO code required for any EZO device (+1k2 code) //#define USE_SEESAW_SOIL // [I2cDriver56] Enable Capacitice Soil Moisture & Temperature Sensor (I2C addresses 0x36 - 0x39) (+1k3 code) -//#define USE_SPI // Hardware SPI using GPIO12(MISO), GPIO13(MOSI) and GPIO14(CLK) in addition to two user selectable GPIOs(CS and DC) +#define USE_SPI // Hardware SPI using GPIO12(MISO), GPIO13(MOSI) and GPIO14(CLK) in addition to two user selectable GPIOs(CS and DC) //#define USE_RC522 // Add support for MFRC522 13.56Mhz Rfid reader (+6k code) #define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code) @@ -434,6 +434,7 @@ //#define USE_LE01MR // Add support for F&F LE-01MR modbus energy meter (+2k code) //#define USE_TELEINFO // Add support for French Energy Provider metering telemetry (+5k2 code, +168 RAM + SmartMeter LinkedList Values RAM) //#define USE_WE517 // Add support for Orno WE517-Modbus energy monitor (+1k code) +#define USE_SONOFF_SPM // Add support for ESP32 based Sonoff Smart Stackable Power Meter (+11k code) #define USE_DHT // Add support for DHT11, AM2301 (DHT21, DHT22, AM2302, AM2321) and SI7021 Temperature and Humidity sensor #define USE_MAX31855 // Add support for MAX31855 K-Type thermocouple sensor using softSPI @@ -456,6 +457,8 @@ //#define USE_A4988_STEPPER // Add support for A4988/DRV8825 stepper-motor-driver-circuit (+10k5 code) //#define USE_THERMOSTAT // Add support for Thermostat +#define USE_ETHERNET // Add support for ethernet (+20k code) + #ifndef USE_KNX #define USE_KNX // Enable KNX IP Protocol Support (+23k code, +3k3 mem) #endif From 877966d1acbc133fa6b36818f73bad6c7d69fddb Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Sun, 20 Feb 2022 13:32:57 +0100 Subject: [PATCH 080/355] Italian language update --- tasmota/language/it_IT.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 6a8ad1b93..256417c3d 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -28,7 +28,7 @@ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE. * Use online command Prefix to translate cmnd, stat and tele. * - * Updated until v10.1.0.6 - Last update 04.02.2022 + * Updated until v10.1.0.6 - Last update 20.02.2022 \*********************************************************************/ #define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) @@ -847,8 +847,8 @@ #define D_SENSOR_HRG15_RX "HRG15 - RX" #define D_SENSOR_HRG15_TX "HRG15 - TX" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" -#define D_SENSOR_BL6523_TX "BL6523 Tx" -#define D_SENSOR_BL6523_RX "BL6523 Rx" +#define D_SENSOR_BL6523_TX "BL6523 - TX" +#define D_SENSOR_BL6523_RX "BL6523 - RX" #define D_SENSOR_HEARTBEAT "Battito cardiaco" #define D_GPIO_SHIFT595_SRCLK "74x595 - SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 - RCLK" From 47b6170722e84634b12e8072cca3fd298f1a26f8 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Sun, 20 Feb 2022 14:00:25 +0100 Subject: [PATCH 081/355] Update tasmota_configurations_ESP32.h --- tasmota/tasmota_configurations_ESP32.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h index 8a533e0b4..84e937bf3 100644 --- a/tasmota/tasmota_configurations_ESP32.h +++ b/tasmota/tasmota_configurations_ESP32.h @@ -457,7 +457,9 @@ //#define USE_A4988_STEPPER // Add support for A4988/DRV8825 stepper-motor-driver-circuit (+10k5 code) //#define USE_THERMOSTAT // Add support for Thermostat -#define USE_ETHERNET // Add support for ethernet (+20k code) +#if CONFIG_IDF_TARGET_ESP32 + #define USE_ETHERNET // Add support for ethernet (+20k code) +#endif #ifndef USE_KNX #define USE_KNX // Enable KNX IP Protocol Support (+23k code, +3k3 mem) From 2c963df8f0e1d18b6308971baec33513d5d7c700 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 20 Feb 2022 14:02:06 +0100 Subject: [PATCH 082/355] Bump version 10.0.0.2 --- CHANGELOG.md | 11 ++++++++++- RELEASENOTES.md | 2 +- tasmota/tasmota_version.h | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1916161e1..5232de0ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,16 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - Development -## [11.0.0.1] + +## [11.0.0.2] +### Added + +### Changed +- Enabled ethernet and Sonoff SPM in ``tasmota32.bin`` + +### Fixed + +## [11.0.0.1] 20220220 ### Added - Command ``SspmMap 0`` to reset Sonoff SPM default mapping - Command ``TcpConnect `` to add client connection mode (#14874) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 42bb926c3..d6120ddc3 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -103,7 +103,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo [Complete list](BUILDS.md) of available feature and sensors. -## Changelog v11.0.0.1 +## Changelog v11.0.0.2 ### Added - Command ``SspmMap 0`` to reset Sonoff SPM default mapping - Command ``TcpConnect `` to add client connection mode [#14874](https://github.com/arendst/Tasmota/issues/14874) diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h index d2471660f..9c994a57e 100644 --- a/tasmota/tasmota_version.h +++ b/tasmota/tasmota_version.h @@ -20,6 +20,6 @@ #ifndef _TASMOTA_VERSION_H_ #define _TASMOTA_VERSION_H_ -const uint32_t VERSION = 0x0B000001; // 11.0.0.1 +const uint32_t VERSION = 0x0B000002; // 11.0.0.2 #endif // _TASMOTA_VERSION_H_ From 7211b45ac42026e3901e4c198aa4284d0cef3da8 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 20 Feb 2022 14:11:12 +0100 Subject: [PATCH 083/355] Revert "Merge pull request #14921 from arendst/ethernet_onlyESP32" This reverts commit 8388f1cdceda8ca9b85046e2e5d46aa8d38f3c1c, reversing changes made to 2c963df8f0e1d18b6308971baec33513d5d7c700. --- tasmota/tasmota_configurations_ESP32.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h index 84e937bf3..8a533e0b4 100644 --- a/tasmota/tasmota_configurations_ESP32.h +++ b/tasmota/tasmota_configurations_ESP32.h @@ -457,9 +457,7 @@ //#define USE_A4988_STEPPER // Add support for A4988/DRV8825 stepper-motor-driver-circuit (+10k5 code) //#define USE_THERMOSTAT // Add support for Thermostat -#if CONFIG_IDF_TARGET_ESP32 - #define USE_ETHERNET // Add support for ethernet (+20k code) -#endif +#define USE_ETHERNET // Add support for ethernet (+20k code) #ifndef USE_KNX #define USE_KNX // Enable KNX IP Protocol Support (+23k code, +3k3 mem) From eb566c3b629849dd000634ce3bff06dd5f3ef73c Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 20 Feb 2022 14:12:05 +0100 Subject: [PATCH 084/355] Fix ESP32C3 compilation --- tasmota/tasmota_globals.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tasmota/tasmota_globals.h b/tasmota/tasmota_globals.h index c8a60acda..91daa87a0 100644 --- a/tasmota/tasmota_globals.h +++ b/tasmota/tasmota_globals.h @@ -94,6 +94,19 @@ String EthernetMacAddress(void); #ifdef ESP32 +/*-------------------------------------------------------------------------------------------*\ + * Start ESP32-C32 specific parameters - disable features not present in ESP32-C3 +\*-------------------------------------------------------------------------------------------*/ + +#if CONFIG_IDF_TARGET_ESP32C3 // ESP32-C3 +#ifdef USE_ETHERNET +#undef USE_ETHERNET // ESP32-C3 does not support ethernet +#endif +#endif // CONFIG_IDF_TARGET_ESP32C3 + +/*-------------------------------------------------------------------------------------------*\ + * End ESP32-S2 specific parameters +\*-------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------*\ * Start ESP32-S2 specific parameters - disable features not present in ESP32-S2 \*-------------------------------------------------------------------------------------------*/ From 2d9d8fa5c2f586470b2b2d1ead573b2ac44ab771 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 20 Feb 2022 14:42:51 +0100 Subject: [PATCH 085/355] Add better ESP32 model exclusions --- tasmota/tasmota_globals.h | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/tasmota/tasmota_globals.h b/tasmota/tasmota_globals.h index 91daa87a0..e021ac664 100644 --- a/tasmota/tasmota_globals.h +++ b/tasmota/tasmota_globals.h @@ -94,27 +94,43 @@ String EthernetMacAddress(void); #ifdef ESP32 +/*-------------------------------------------------------------------------------------------*\ + * Start ESP32 specific parameters - disable features not present in ESP32 +\*-------------------------------------------------------------------------------------------*/ + +#if CONFIG_IDF_TARGET_ESP32 + +#else // Disable features not present in other ESP32 like ESP32C3, ESP32S2, ESP32S3 etc. +#ifdef USE_ETHERNET +#undef USE_ETHERNET // All non-ESP32 do not support ethernet +#endif +#endif // CONFIG_IDF_TARGET_ESP32 + +/*-------------------------------------------------------------------------------------------*\ + * End ESP32 specific parameters +\*-------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------*\ * Start ESP32-C32 specific parameters - disable features not present in ESP32-C3 \*-------------------------------------------------------------------------------------------*/ #if CONFIG_IDF_TARGET_ESP32C3 // ESP32-C3 -#ifdef USE_ETHERNET -#undef USE_ETHERNET // ESP32-C3 does not support ethernet -#endif +//#ifdef USE_ETHERNET +//#undef USE_ETHERNET // ESP32-C3 does not support ethernet +//#endif + #endif // CONFIG_IDF_TARGET_ESP32C3 /*-------------------------------------------------------------------------------------------*\ - * End ESP32-S2 specific parameters + * End ESP32-C3 specific parameters \*-------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------*\ * Start ESP32-S2 specific parameters - disable features not present in ESP32-S2 \*-------------------------------------------------------------------------------------------*/ #if CONFIG_IDF_TARGET_ESP32S2 // ESP32-S2 -#ifdef USE_ETHERNET -#undef USE_ETHERNET // ESP32-S2 does not support ethernet -#endif +//#ifdef USE_ETHERNET +//#undef USE_ETHERNET // ESP32-S2 does not support ethernet +//#endif #ifdef USE_BLE_ESP32 #undef USE_BLE_ESP32 // ESP32-S2 does not support BLE #endif From e5562d97bbc985f72d6f2cc0136c58fa68129632 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sun, 20 Feb 2022 17:05:00 +0100 Subject: [PATCH 086/355] Fix Zigbee compilation with Hue emulation --- tasmota/xdrv_20_hue.ino | 25 +++++++++++++------------ tasmota/xdrv_23_zigbee_3_hue.ino | 4 ++-- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/tasmota/xdrv_20_hue.ino b/tasmota/xdrv_20_hue.ino index c6b0a53a0..3c7072a10 100644 --- a/tasmota/xdrv_20_hue.ino +++ b/tasmota/xdrv_20_hue.ino @@ -623,11 +623,7 @@ void HueLightStatus2(uint8_t device, String *response) // it is limited to 32 devices. // last 24 bits of Mac address + 4 bits of local light + high bit for relays 16-31, relay 32 is mapped to 0 // Zigbee extension: bit 29 = 1, and last 16 bits = short address of Zigbee device -#ifndef USE_ZIGBEE -uint32_t EncodeLightId(uint8_t relay_id) -#else -uint32_t EncodeLightId(uint8_t relay_id, uint16_t z_shortaddr = 0) -#endif +uint32_t EncodeLightIdZigbee(uint8_t relay_id, uint16_t z_shortaddr) { uint8_t mac[6]; WiFi.macAddress(mac); @@ -650,17 +646,17 @@ uint32_t EncodeLightId(uint8_t relay_id, uint16_t z_shortaddr = 0) return id; } +uint32_t EncodeLightId(uint8_t relay_id) +{ + return EncodeLightIdZigbee(relay_id, 0); +} // get hue_id and decode the relay_id // 4 LSB decode to 1-15, if bit 28 is set, it encodes 16-31, if 0 then 32 // Zigbee: // If the Id encodes a Zigbee device (meaning bit 29 is set) // it returns 0 and sets the 'shortaddr' to the device short address -#ifndef USE_ZIGBEE -uint32_t DecodeLightId(uint32_t hue_id) -#else -uint32_t DecodeLightId(uint32_t hue_id, uint16_t * shortaddr = nullptr) -#endif +uint32_t DecodeLightIdZigbee(uint32_t hue_id, uint16_t * shortaddr) { uint8_t relay_id = hue_id & 0xF; if (hue_id & (1 << 28)) { // check if bit 25 is set, if so we have @@ -680,6 +676,11 @@ uint32_t DecodeLightId(uint32_t hue_id, uint16_t * shortaddr = nullptr) return relay_id; } +uint32_t DecodeLightId(uint32_t hue_id) +{ + return DecodeLightIdZigbee(hue_id, nullptr); +} + // Check if the Echo device is of 1st generation, which triggers different results inline uint32_t findEchoGeneration(void) { // don't try to guess from User-Agent anymore but use SetOption109 @@ -971,7 +972,7 @@ void HueLights(String *path_req) device = DecodeLightId(device_id); #ifdef USE_ZIGBEE uint16_t shortaddr; - device = DecodeLightId(device_id, &shortaddr); + device = DecodeLightIdZigbee(device_id, &shortaddr); if (shortaddr) { code = ZigbeeHandleHue(shortaddr, device_id, response); goto exit; @@ -1004,7 +1005,7 @@ void HueLights(String *path_req) device = DecodeLightId(device_id); #ifdef USE_ZIGBEE uint16_t shortaddr; - device = DecodeLightId(device_id, &shortaddr); + device = DecodeLightIdZigbee(device_id, &shortaddr); if (shortaddr) { code = ZigbeeHueStatus(&response, shortaddr); goto exit; diff --git a/tasmota/xdrv_23_zigbee_3_hue.ino b/tasmota/xdrv_23_zigbee_3_hue.ino index 269f8ea0b..0485e244a 100644 --- a/tasmota/xdrv_23_zigbee_3_hue.ino +++ b/tasmota/xdrv_23_zigbee_3_hue.ino @@ -128,7 +128,7 @@ void ZigbeeCheckHue(String & response, bool * appending) { // this bulb is advertized if (*appending) { response += ","; } response += "\""; - response += EncodeLightId(0, shortaddr); + response += EncodeLightIdZigbee(0, shortaddr); response += F("\":{\"state\":"); HueLightStatus1Zigbee(shortaddr, bulbtype, &response); // TODO HueLightStatus2Zigbee(shortaddr, &response); @@ -145,7 +145,7 @@ void ZigbeeHueGroups(String * lights) { if (bulbtype >= 0) { *lights += ",\""; - *lights += EncodeLightId(0, shortaddr); + *lights += EncodeLightIdZigbee(0, shortaddr); *lights += "\""; } } From e83e5011550c0db47f14ec718b1e28e13214fa45 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Mon, 21 Feb 2022 22:22:30 +0100 Subject: [PATCH 087/355] Berry add cron timers --- lib/libesp32/berry/default/be_modtab.c | 2 + lib/libesp32/berry/generate/be_const_strtab.h | 8 + .../berry/generate/be_const_strtab_def.h | 2114 +++++++++-------- .../generate/be_fixed_be_class_ccronexpr.h | 20 + .../generate/be_fixed_be_class_tasmota.h | 158 +- .../berry_mapping/src/be_class_wrapper.c | 8 + .../berry_tasmota/src/be_cron_class.cpp | 66 + .../berry_tasmota/src/be_tasmotalib.c | 509 ++-- .../berry_tasmota/src/be_trigger_class.c | 60 +- .../berry_tasmota/src/embedded/Tasmota.be | 92 +- lib/libesp32/ccronexpr/LICENSE.txt | 201 ++ lib/libesp32/ccronexpr/README.md | 97 + lib/libesp32/ccronexpr/appveyor.yml | 29 + lib/libesp32/ccronexpr/ccronexpr.c | 1272 ++++++++++ lib/libesp32/ccronexpr/ccronexpr.h | 95 + lib/libesp32/ccronexpr/ccronexpr_test.c | 409 ++++ lib/libesp32/ccronexpr/library.json | 17 + tasmota/xdrv_52_9_berry.ino | 1 + 18 files changed, 3844 insertions(+), 1314 deletions(-) create mode 100644 lib/libesp32/berry/generate/be_fixed_be_class_ccronexpr.h create mode 100644 lib/libesp32/berry_tasmota/src/be_cron_class.cpp create mode 100644 lib/libesp32/ccronexpr/LICENSE.txt create mode 100644 lib/libesp32/ccronexpr/README.md create mode 100644 lib/libesp32/ccronexpr/appveyor.yml create mode 100644 lib/libesp32/ccronexpr/ccronexpr.c create mode 100644 lib/libesp32/ccronexpr/ccronexpr.h create mode 100644 lib/libesp32/ccronexpr/ccronexpr_test.c create mode 100644 lib/libesp32/ccronexpr/library.json diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c index 3bc875f47..684174821 100644 --- a/lib/libesp32/berry/default/be_modtab.c +++ b/lib/libesp32/berry/default/be_modtab.c @@ -167,6 +167,7 @@ extern void be_load_webclient_lib(bvm *vm); extern void be_load_tcpclient_lib(bvm *vm); extern void be_load_udp_lib(bvm *vm); extern void be_load_crypto_lib(bvm *vm); +extern void be_load_ccronexpr_class(bvm *vm); extern void be_load_Leds_ntv_class(bvm *vm); extern void be_load_Leds_class(bvm *vm); extern void be_load_Leds_animator_class(bvm *vm); @@ -207,6 +208,7 @@ BERRY_API void be_load_custom_libs(bvm *vm) be_load_md5_lib(vm); be_load_serial_lib(vm); be_load_ctypes_lib(vm); + be_load_ccronexpr_class(vm); #ifdef USE_LIGHT be_load_light_state_class(vm); #endif diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h index d99ac8b6b..5dbac143f 100644 --- a/lib/libesp32/berry/generate/be_const_strtab.h +++ b/lib/libesp32/berry/generate/be_const_strtab.h @@ -199,6 +199,7 @@ extern const bcstring be_const_str__buffer; extern const bcstring be_const_str__ccmd; extern const bcstring be_const_str__class; extern const bcstring be_const_str__cmd; +extern const bcstring be_const_str__crons; extern const bcstring be_const_str__debug_present; extern const bcstring be_const_str__def; extern const bcstring be_const_str__dirty; @@ -228,6 +229,7 @@ extern const bcstring be_const_str_acos; extern const bcstring be_const_str_add; extern const bcstring be_const_str_add_anim; extern const bcstring be_const_str_add_cmd; +extern const bcstring be_const_str_add_cron; extern const bcstring be_const_str_add_driver; extern const bcstring be_const_str_add_event_cb; extern const bcstring be_const_str_add_fast_loop; @@ -283,6 +285,7 @@ extern const bcstring be_const_str_cb; extern const bcstring be_const_str_cb_do_nothing; extern const bcstring be_const_str_cb_event_closure; extern const bcstring be_const_str_cb_obj; +extern const bcstring be_const_str_ccronexpr; extern const bcstring be_const_str_ceil; extern const bcstring be_const_str_char; extern const bcstring be_const_str_chars_in_string; @@ -385,6 +388,7 @@ extern const bcstring be_const_str_event; extern const bcstring be_const_str_event_cb; extern const bcstring be_const_str_event_send; extern const bcstring be_const_str_every_100ms; +extern const bcstring be_const_str_every_250ms; extern const bcstring be_const_str_every_50ms; extern const bcstring be_const_str_every_second; extern const bcstring be_const_str_except; @@ -577,10 +581,12 @@ extern const bcstring be_const_str_month; extern const bcstring be_const_str_montserrat_font; extern const bcstring be_const_str_name; extern const bcstring be_const_str_nan; +extern const bcstring be_const_str_next; extern const bcstring be_const_str_nil; extern const bcstring be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus; extern const bcstring be_const_str_null_cb; extern const bcstring be_const_str_number; +extern const bcstring be_const_str_o; extern const bcstring be_const_str_obj_class_create_obj; extern const bcstring be_const_str_obj_event_base; extern const bcstring be_const_str_offset; @@ -647,6 +653,7 @@ extern const bcstring be_const_str_remote_ip; extern const bcstring be_const_str_remote_port; extern const bcstring be_const_str_remove; extern const bcstring be_const_str_remove_cmd; +extern const bcstring be_const_str_remove_cron; extern const bcstring be_const_str_remove_driver; extern const bcstring be_const_str_remove_light; extern const bcstring be_const_str_remove_rule; @@ -673,6 +680,7 @@ extern const bcstring be_const_str_rtc; extern const bcstring be_const_str_rule; extern const bcstring be_const_str_run; extern const bcstring be_const_str_run_bat; +extern const bcstring be_const_str_run_cron; extern const bcstring be_const_str_run_deferred; extern const bcstring be_const_str_running; extern const bcstring be_const_str_sat; diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h index 763f364a5..abf3e7d10 100644 --- a/lib/libesp32/berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/berry/generate/be_const_strtab_def.h @@ -1,844 +1,852 @@ -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_SERIAL_6E1); -be_define_const_str(_X0A, "\n", 252472541u, 0, 1, NULL); -be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_Unknown); -be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str_LVG_X3A_X20object_X3A); -be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_SERIAL_7O1); -be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str__X2Ep); -be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, NULL); -be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_a); -be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_min); -be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_before_del); +be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E); +be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_delay); +be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E); +be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, NULL); +be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str_name); +be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_destructor_cb); +be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_group_def); +be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_atleast1); +be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_h); be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, NULL); -be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_bool); -be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_setitem); -be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, NULL); -be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_refr_size); -be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_ceil); -be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_area); -be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_keys); -be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_char); -be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_get_log); -be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_tomap); -be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str__settings_def); -be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_attrdump); -be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str__energy); -be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str__X3Clambda_X3E); -be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str__X2Fac); -be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_get_current_module_name); -be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str__dirty); -be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, NULL); -be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s); -be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_event_send); -be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_minute); -be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_clear_first_time); -be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_make_cb); -be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str_init); -be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, NULL); -be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_True); -be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_get_input_power_status); -be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E); -be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_compress); -be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, NULL); -be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, NULL); -be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_set_text); -be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_r); -be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_ctor); -be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, &be_const_str_srand); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_detect); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_consume_mono); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str__X3F); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_AudioOutput); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_lv_point); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_OPTION_A); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_AXP192); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_gc); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_RGBW); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_energy_struct); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_loop); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_connected); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_set_matrix_pixel_color); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_lv_extra); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_member); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_True); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__archive); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_engine); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_global); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_path); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_lv); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str__timers); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_event); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_leds); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_cb_obj); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_pc); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_c); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_map); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str__X3E_X3D); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_lv_extra); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_member); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_True); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__archive); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_engine); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_global); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_path); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_lv); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str__timers); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_event); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_leds); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_cb_obj); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_pc); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_c); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_map); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str__X3E_X3D); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_check_not_method); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, NULL); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_SERIAL_6O1); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_dimmer); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_encrypt); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_type_error); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_finish); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_pc); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_event_send); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_BUTTON_CONFIGURATION); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_animate); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_set_reachable); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_webserver); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, NULL); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_check_not_method); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, NULL); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_SERIAL_6O1); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_dimmer); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_encrypt); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_type_error); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_finish); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_pc); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_event_send); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_BUTTON_CONFIGURATION); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_animate); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_set_reachable); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_webserver); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, NULL); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_lv_wifi_bars_icon); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_AudioOutput); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_animate); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_publish); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_publish_result); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_get_warning_level); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, NULL); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, NULL); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_stop_iteration); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_flush); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_SERIAL_5N1); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, NULL); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_p2); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_nan); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_atan); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_concat); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_lv_wifi_bars_icon); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_AudioOutput); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_animate); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_publish); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_publish_result); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_get_warning_level); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, NULL); +be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_geti); +be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_keys); +be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_gamma); +be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, NULL); +be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_isrunning); +be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_set_bri); +be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_AudioGenerator); +be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str_param); +be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_lvgl_event_dispatch); +be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_CFG_X3A_X20loaded_X20_X20); +be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20); +be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_consume_silence); +be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_STATE_DEFAULT); +be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, NULL); +be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_type_error); +be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_EVENT_DELETE); +be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_setbits); +be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_consume_mono); +be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, NULL); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_deinit); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_counters); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_get_bat_power); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_is_first_time); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_WS2812_GRB); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_init_draw_line_dsc); be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, NULL); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_stop_iteration); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_flush); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_SERIAL_5N1); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, NULL); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_p2); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_nan); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_atan); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_concat); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "", 4247924536u, 0, 19, &be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus); +be_define_const_str(_X3D, "=", 940354920u, 0, 1, &be_const_str_RES_OK); +be_define_const_str(_X3D_X3C_X3E_X21, "=<>!", 2664470277u, 0, 4, &be_const_str_widget_height_def); +be_define_const_str(_X3D_X3D, "==", 2431966415u, 0, 2, &be_const_str_Unknown); +be_define_const_str(_X3E, ">", 990687777u, 0, 1, &be_const_str_RGBCT); +be_define_const_str(_X3E_X3D, ">=", 284975636u, 0, 2, &be_const_str_COLOR_BLACK); +be_define_const_str(_X3F, "?", 973910158u, 0, 1, &be_const_str_widget_event); +be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, &be_const_str_battery_present); +be_define_const_str(ALIGN_BOTTOM_MID, "ALIGN_BOTTOM_MID", 3933267889u, 0, 16, &be_const_str_clear_first_time); +be_define_const_str(ALIGN_LEFT_MID, "ALIGN_LEFT_MID", 1043035067u, 0, 14, &be_const_str_flush); +be_define_const_str(AXP192, "AXP192", 757230128u, 0, 6, &be_const_str_log10); +be_define_const_str(Animate_X20pc_X20is_X20out_X20of_X20range, "Animate pc is out of range", 1854929421u, 0, 26, &be_const_str__rules); +be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, &be_const_str_listdir); +be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str_RGBW); +be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str_resp_cmnd_failed); +be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_obj_class_create_obj); +be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_get_light); +be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, NULL); +be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_set_rate); +be_define_const_str(Auto_X2Dconfiguration, "Auto-configuration", 1665006109u, 0, 18, &be_const_str_begin_multicast); +be_define_const_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, "BRY: ERROR, bad json: ", 2715135809u, 0, 22, &be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29); +be_define_const_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: Exception> '%s' - %s", 2246990964u, 0, 25, &be_const_str_consume_stereo); +be_define_const_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function, "BRY: argument must be a function", 3917068408u, 0, 32, &be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032); +be_define_const_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, "BRY: could not save compiled file %s (%s)", 736659787u, 0, 41, &be_const_str_collect); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, "BRY: failed to load _persist.json", 2991913445u, 0, 33, &be_const_str_content_flush); +be_define_const_str(BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, "BRY: invalid hue payload: ", 203709367u, 0, 26, &be_const_str__drivers); +be_define_const_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, "BRY: method not allowed, use a closure like '/ args -> obj.func(args)'", 177121572u, 0, 70, &be_const_str_destructor_cb); +be_define_const_str(BUTTON_CONFIGURATION, "BUTTON_CONFIGURATION", 70820856u, 0, 20, &be_const_str_escape); +be_define_const_str(CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, "CFG: 'init.bat' done, restarting", 1569670677u, 0, 32, NULL); +be_define_const_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "CFG: Exception> '%s' - %s", 1228874553u, 0, 25, &be_const_str_call); +be_define_const_str(CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, "CFG: No '*.autoconf' file found", 755798501u, 0, 31, &be_const_str_gamma10); +be_define_const_str(CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, "CFG: could not run %s (%s - %s)", 1428829580u, 0, 31, &be_const_str_font_montserrat); +be_define_const_str(CFG_X3A_X20downloading_X20_X27_X25s_X27, "CFG: downloading '%s'", 589480701u, 0, 21, &be_const_str_arg); +be_define_const_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, "CFG: exception '%s' - '%s'", 4095407913u, 0, 26, &be_const_str_exec_tele); +be_define_const_str(CFG_X3A_X20loaded_X20_X20, "CFG: loaded ", 3710273538u, 0, 13, &be_const_str_pop); +be_define_const_str(CFG_X3A_X20loaded_X20_X27_X25s_X27, "CFG: loaded '%s'", 1699028828u, 0, 16, NULL); +be_define_const_str(CFG_X3A_X20loading_X20, "CFG: loading ", 4010361503u, 0, 13, &be_const_str_bool); +be_define_const_str(CFG_X3A_X20loading_X20_X27_X25s_X27, "CFG: loading '%s'", 2285306097u, 0, 17, &be_const_str_SERIAL_8E2); +be_define_const_str(CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, "CFG: multiple autoconf files found, aborting ('%s' + '%s')", 197663371u, 0, 58, &be_const_str_Leds); +be_define_const_str(CFG_X3A_X20ran_X20_X20, "CFG: ran ", 3579570472u, 0, 10, &be_const_str_id); +be_define_const_str(CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, "CFG: removed file '%s'", 2048602473u, 0, 22, &be_const_str_start); +be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str_instance); +be_define_const_str(CFG_X3A_X20removing_X20first_X20time_X20marker, "CFG: removing first time marker", 2125556683u, 0, 31, &be_const_str_read13); +be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_str); +be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str_set_dcdc_enable); +be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str_Parameter_X20error); +be_define_const_str(COLOR_BLACK, "COLOR_BLACK", 264427940u, 0, 11, &be_const_str__timers); +be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, &be_const_str__p); +be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str_lv_event_cb); +be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, &be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27); +be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_SERIAL_5O1); +be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str_get_style_bg_color); +be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, &be_const_str_I2C_Driver); +be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, &be_const_str_tob64); +be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str__); +be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, NULL); +be_define_const_str(False, "False", 2541049336u, 0, 5, &be_const_str_SERIAL_8N2); +be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf); +be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, &be_const_str_asstring); +be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, &be_const_str_fast_loop_enabled); +be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, &be_const_str_cmd); +be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str__energy); +be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str__ccmd); +be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_publish); be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, NULL); -be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str_wd); +be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str_setmember); be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, &be_const_str__debug_present); -be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_classof); -be_define_const_str(None, "None", 810547195u, 0, 4, &be_const_str_bytes); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_call); -be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, NULL); -be_define_const_str(OpusDecoder, "OpusDecoder", 3618742074u, 0, 11, &be_const_str_eth); -be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str__global_addr); -be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_state); -be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_raise); -be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, &be_const_str_before_del); -be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str_set_style_line_color); -be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, &be_const_str_resize); -be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_SERIAL_5N2); -be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, &be_const_str_copy); -be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_reset); -be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str_content_send); -be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_ins_time); -be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_SERIAL_7E2); -be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_SERIAL_7E1); -be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_millis); +be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, NULL); +be_define_const_str(None, "None", 810547195u, 0, 4, &be_const_str_draw_line_dsc); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, NULL); +be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_codedump); +be_define_const_str(OpusDecoder, "OpusDecoder", 3618742074u, 0, 11, &be_const_str_bytes); +be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str__anonymous_); +be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_fromptr); +be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_resp_cmnd_str); +be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, &be_const_str_back_forth); +be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str_introspect); +be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, &be_const_str_find); +be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_SK6812_GRBW); +be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, NULL); +be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_offseta); +be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str__settings_def); +be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, NULL); +be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_coord_arr); +be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_type); +be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27); be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, NULL); -be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_web_add_button); -be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, NULL); -be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_keys); -be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_web_add_console_button); -be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_light); -be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_touch_update); -be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_code); -be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_instance_size); -be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_classname); -be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_load_freetype_font); -be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_digital_write); -be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_draw_line); -be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_event_send); -be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_set_hue16sat); -be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, NULL); -be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_get_coords); -be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_erase); -be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_cb); -be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, NULL); -be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str_arg_size); -be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, &be_const_str_light_to_id); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_web_add_management_button); -be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, &be_const_str_content_stop); -be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str_register_obj); -be_define_const_str(True, "True", 3453902341u, 0, 4, &be_const_str_next_cron); -be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, &be_const_str_lower); -be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, NULL); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, NULL); -be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, NULL); -be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str__end_transmission); -be_define_const_str(_X5B, "[", 3725336506u, 0, 1, &be_const_str_has); -be_define_const_str(_X5D, "]", 3624670792u, 0, 1, &be_const_str_height_def); -be_define_const_str(_, "_", 3658226030u, 0, 1, NULL); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_instance); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_sat); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str__write); -be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, &be_const_str_lv_point_arr); -be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, &be_const_str_compile); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_add_event_cb); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str__energy); -be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str_tag); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, NULL); -be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_allocated); -be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_pc); -be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_dimmer); +be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_elements_X20must_X20be_X20a_X20lv_point); +be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str___iterator__); +be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_gc); +be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_Wire); +be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str__buffer); +be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_zero); +be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, NULL); +be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_rand); +be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, NULL); +be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_call_native); +be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_make_cb); +be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_next); +be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_del); +be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, NULL); +be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_reset_search); +be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_write_bytes); +be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_animate); +be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_event); +be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, &be_const_str_autoexec); +be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str_files); +be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, &be_const_str_arg_size); +be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, &be_const_str_item); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_ceil); +be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, NULL); +be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str__global_def); +be_define_const_str(True, "True", 3453902341u, 0, 4, &be_const_str_add_rule); +be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, &be_const_str_remote_ip); +be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, &be_const_str_run_deferred); +be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str__settings_ptr); +be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, &be_const_str_global); +be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str_else); +be_define_const_str(_X5B, "[", 3725336506u, 0, 1, &be_const_str_add_anim); +be_define_const_str(_X5D, "]", 3624670792u, 0, 1, &be_const_str_imax); +be_define_const_str(_, "_", 3658226030u, 0, 1, &be_const_str_scan); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_set_height); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_ins_ramp); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_argument_X20must_X20be_X20a_X20function); +be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, NULL); +be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, NULL); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_autorun); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, NULL); +be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, NULL); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_json_fdump_any); +be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_success); +be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_asin); +be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_content_start); be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, NULL); -be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_lv_event); -be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, &be_const_str_quality); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_byte); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str__timers); -be_define_const_str(_energy, "_energy", 535372070u, 0, 7, &be_const_str_argument_X20must_X20be_X20a_X20function); -be_define_const_str(_error, "_error", 1132109656u, 0, 6, &be_const_str_number); -be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, &be_const_str_create_segment); -be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_readline); -be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, &be_const_str_set_ct); -be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_local); -be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_font_embedded); -be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_k); -be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_rule); -be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27); -be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_get_size); -be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_back_forth); -be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, NULL); -be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, &be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map); -be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_every_second); +be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_add_cron); +be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, &be_const_str_compile); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_pow); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_hue_status); +be_define_const_str(_energy, "_energy", 535372070u, 0, 7, &be_const_str_isinstance); +be_define_const_str(_error, "_error", 1132109656u, 0, 6, &be_const_str_connected); +be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, &be_const_str_set_reachable); +be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_model); +be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, &be_const_str_check_not_method); +be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_event_cb); +be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_is_running); +be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_format); +be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_set_pixel_color); +be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_get_current_module_path); +be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_draw_line_dsc_init); +be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_get_style_line_color); +be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_draw_arc_dsc); +be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, &be_const_str_atan2); +be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_arc_dsc); +be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, NULL); be_define_const_str(_t, "_t", 1527481326u, 0, 2, &be_const_str_o); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_persist); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_deg); -be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_set_ldo_enable); -be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_remove_driver); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_detect); -be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_cb_do_nothing); -be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_lv_clock_icon); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_clear); -be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_value_error); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_json_fdump_list); -be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, NULL); -be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, &be_const_str_get_object_from_ptr); -be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, NULL); -be_define_const_str(add_header, "add_header", 927130612u, 0, 10, &be_const_str_argument_X20must_X20be_X20a_X20list); -be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, NULL); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_find_key_i); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_driver_name); +be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_pct); +be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_widget_instance_size); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, NULL); +be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_addr); +be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_cosh); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_i2c_enabled); +be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_has_X20already_X20an_X20event_X20callback); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_content_button); +be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_light_to_id); +be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, &be_const_str_lower); +be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, &be_const_str_get_option); +be_define_const_str(add_header, "add_header", 927130612u, 0, 10, &be_const_str_classof); +be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, &be_const_str_return); be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, NULL); -be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_list_handlers); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_lv_obj); -be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, &be_const_str_lv_obj_class); -be_define_const_str(animate, "animate", 3885786800u, 0, 7, &be_const_str_tr); -be_define_const_str(animators, "animators", 279858213u, 0, 9, &be_const_str_fromb64); -be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_set_channels); -be_define_const_str(arch, "arch", 2952804297u, 0, 4, &be_const_str_save); -be_define_const_str(area, "area", 2601460036u, 0, 4, &be_const_str_set_pwm); -be_define_const_str(arg, "arg", 1047474471u, 0, 3, NULL); -be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, &be_const_str_fast_loop); -be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_energy_struct); +be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_contains); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_check_privileged_access); +be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, NULL); +be_define_const_str(animate, "animate", 3885786800u, 0, 7, &be_const_str_get_alternate); +be_define_const_str(animators, "animators", 279858213u, 0, 9, NULL); +be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_lv_); +be_define_const_str(arch, "arch", 2952804297u, 0, 4, &be_const_str_get_string); +be_define_const_str(area, "area", 2601460036u, 0, 4, &be_const_str_every_100ms); +be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_hour); +be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, &be_const_str_split); +be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_function); be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, NULL); -be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_false); -be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, &be_const_str_bus); +be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_content_send); +be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, &be_const_str_ctor); be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_font_seg7); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, NULL); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_connected); -be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_success); -be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, &be_const_str_exec_tele); -be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, NULL); -be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_scan); -be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, NULL); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_dac_voltage); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_reverse); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_ct); +be_define_const_str(atan, "atan", 108579519u, 0, 4, NULL); +be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, &be_const_str_tolower); +be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, &be_const_str_lv_point); +be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, NULL); +be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_editable); be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, NULL); -be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_can_show); -be_define_const_str(b, "b", 3876335077u, 0, 1, &be_const_str_connection_error); -be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, &be_const_str_pin_used); -be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, &be_const_str_hue_status); -be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_cmd); -be_define_const_str(before_del, "before_del", 815924436u, 0, 10, &be_const_str_counters); -be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_set_ldo_voltage); -be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, &be_const_str_out_X20of_X20range); -be_define_const_str(bool, "bool", 3365180733u, 0, 4, &be_const_str_content_flush); +be_define_const_str(available, "available", 1727918744u, 0, 9, NULL); +be_define_const_str(b, "b", 3876335077u, 0, 1, &be_const_str_read); +be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, NULL); +be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, &be_const_str_min); +be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_lights); +be_define_const_str(before_del, "before_del", 815924436u, 0, 10, NULL); +be_define_const_str(begin, "begin", 1748273790u, 0, 5, NULL); +be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, &be_const_str_floor); +be_define_const_str(bool, "bool", 3365180733u, 0, 4, NULL); be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); -be_define_const_str(bri, "bri", 2112284244u, 0, 3, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); -be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_clear_to); -be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_get_bat_charge_current); +be_define_const_str(bri, "bri", 2112284244u, 0, 3, &be_const_str_calldepth); +be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_get_aps_voltage); +be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, NULL); be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, NULL); -be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_cb_event_closure); -be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_widget_dtor_impl); -be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, &be_const_str_geti); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_set_bits_per_sample); -be_define_const_str(can_show, "can_show", 960091187u, 0, 8, &be_const_str_page_autoconf_ctl); -be_define_const_str(cb, "cb", 1428787088u, 0, 2, NULL); -be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, &be_const_str_get_light); -be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, &be_const_str_group_def); -be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, &be_const_str_clock_icon); -be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, &be_const_str_cosh); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_widget_editable); -be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_full_status); -be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_has_arg); -be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, &be_const_str_static); -be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_io_error); -be_define_const_str(class, "class", 2872970239u, 57, 5, &be_const_str_end); -be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, &be_const_str_path); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_find_key_i); -be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_map); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_get_string); -be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_consume_mono); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_chars_in_string); +be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_get_log); +be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_deregister_obj); +be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, &be_const_str_list); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_tomap); +be_define_const_str(can_show, "can_show", 960091187u, 0, 8, &be_const_str_decode); +be_define_const_str(cb, "cb", 1428787088u, 0, 2, &be_const_str_sys); +be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, &be_const_str_draw_arc); +be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, NULL); +be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, NULL); +be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, NULL); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, NULL); +be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_deg); +be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, NULL); +be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, NULL); +be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, NULL); +be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); +be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, &be_const_str_pin_used); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_load_freetype_font); +be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_set_alternate); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_string); +be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_get_warning_level); be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, NULL); -be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, &be_const_str_set_dc_voltage); -be_define_const_str(close, "close", 667630371u, 0, 5, NULL); -be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_draw_ctx); -be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_detected_X20on_X20bus); -be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, NULL); -be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_get_battery_chargin_status); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_yield); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27); -be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_delete_all_configs); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_coord_arr); -be_define_const_str(compress, "compress", 2818084237u, 0, 8, NULL); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_memory); -be_define_const_str(connect, "connect", 2866859257u, 0, 7, &be_const_str_pixel_size); -be_define_const_str(connected, "connected", 1424938192u, 0, 9, &be_const_str_lv_module_init); -be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, &be_const_str_set_bri); -be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, &be_const_str_wire_scan); -be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, &be_const_str_set_alternate); +be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, NULL); +be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_get_input_power_status); +be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_set_matrix_pixel_color); +be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_last_modified); +be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_get_bat_voltage); +be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_set_style_img_recolor); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_get_current_module_name); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, NULL); +be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_set_width); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_event_send); +be_define_const_str(compress, "compress", 2818084237u, 0, 8, &be_const_str_response_append); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL); +be_define_const_str(connect, "connect", 2866859257u, 0, 7, NULL); +be_define_const_str(connected, "connected", 1424938192u, 0, 9, NULL); +be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, NULL); +be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, &be_const_str_set_time); +be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, NULL); be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, NULL); -be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, &be_const_str_fromptr); -be_define_const_str(contains, "contains", 1825239352u, 0, 8, NULL); -be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_run_cron); -be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, NULL); -be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, NULL); -be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, &be_const_str_pop_path); -be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, NULL); -be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_get_current_module_path); +be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, &be_const_str_find_op); +be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_widget_constructor); +be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_from_to); +be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_time_dump); +be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_set_ct); +be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, NULL); +be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_hs2rgb); +be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_exists); be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, &be_const_str_listdir); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_init_draw_line_dsc); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_draw_arc_dsc); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, NULL); +be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, &be_const_str_set_style_pad_right); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_remove_light); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_quality); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_set_useragent); be_define_const_str(couldn_X27t_X20not_X20initialize_X20noepixelbus, "couldn't not initialize noepixelbus", 2536490812u, 0, 35, NULL); -be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_search); -be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_decode); -be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, &be_const_str_get_percentage); -be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, NULL); -be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, &be_const_str_round_start); -be_define_const_str(ct, "ct", 1261010898u, 0, 2, NULL); -be_define_const_str(ctor, "ctor", 375399343u, 0, 4, NULL); -be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, NULL); -be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, &be_const_str_exists); -be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_discover); -be_define_const_str(day, "day", 3830391293u, 0, 3, &be_const_str_list); -be_define_const_str(debug, "debug", 1483009432u, 0, 5, &be_const_str_rotate); -be_define_const_str(decode, "decode", 3007678287u, 0, 6, NULL); -be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, &be_const_str_get_input_power_status); -be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_id); +be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_rad); +be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_get_hor_res); +be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, &be_const_str_get_bat_charge_current); +be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, &be_const_str_has); +be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson); +be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_json_append); +be_define_const_str(ctor, "ctor", 375399343u, 0, 4, &be_const_str_gen_cb); +be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_millis); +be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, NULL); +be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_draw_line); +be_define_const_str(day, "day", 3830391293u, 0, 3, NULL); +be_define_const_str(debug, "debug", 1483009432u, 0, 5, &be_const_str_lv_wifi_bars_icon); +be_define_const_str(decode, "decode", 3007678287u, 0, 6, &be_const_str_display_X2Eini); +be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, NULL); +be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, NULL); be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_every_50ms); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, NULL); -be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_internal_error); -be_define_const_str(delete_all_configs, "delete_all_configs", 2382067578u, 0, 18, &be_const_str_draw_line_dsc); -be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_get_bat_power); -be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, NULL); -be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, &be_const_str_tostring); -be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL); -be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, &be_const_str_get_bat_voltage); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_function); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_draw_arc_dsc_init); -be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, &be_const_str_lv_point); -be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, &be_const_str_lights); -be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_setmember); -be_define_const_str(display, "display", 1164572437u, 0, 7, NULL); -be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, &be_const_str_lv_); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_wifi_bars_icon); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_size); +be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_get_vbus_current); +be_define_const_str(delay, "delay", 1322381784u, 0, 5, NULL); +be_define_const_str(delete_all_configs, "delete_all_configs", 2382067578u, 0, 18, &be_const_str_web_add_handler); +be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_f); +be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_dimmer); +be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, NULL); +be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_run); +be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, &be_const_str_digital_read); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_has_arg); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, NULL); +be_define_const_str(dim, "dim", 3496118841u, 0, 3, &be_const_str_engine); +be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, NULL); +be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, NULL); +be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_to_gamma); +be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_pc_abs); +be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, &be_const_str_font_seg7); be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); -be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, NULL); -be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, &be_const_str_gamma10); -be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, &be_const_str_global); +be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, &be_const_str_enabled); +be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, &be_const_str_full_status); +be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, NULL); be_define_const_str(draw_ctx, "draw_ctx", 953366593u, 0, 8, NULL); -be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_pin); -be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str__X7B); -be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, &be_const_str_encrypt); -be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, &be_const_str_get_current_module_name); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_model); -be_define_const_str(duration, "duration", 799079693u, 0, 8, &be_const_str_hs2rgb); -be_define_const_str(editable, "editable", 60532369u, 0, 8, NULL); -be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_gamma); +be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, NULL); +be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_issubclass); +be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, &be_const_str_insert); +be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, NULL); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_set_gain); +be_define_const_str(duration, "duration", 799079693u, 0, 8, NULL); +be_define_const_str(editable, "editable", 60532369u, 0, 8, &be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function); +be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_pc_rel); be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); -be_define_const_str(enabled, "enabled", 49525662u, 0, 7, NULL); -be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_event_cb); +be_define_const_str(enabled, "enabled", 49525662u, 0, 7, &be_const_str_ip); +be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_zip); be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, &be_const_str_has_X20already_X20an_X20event_X20callback); -be_define_const_str(engine, "engine", 3993360443u, 0, 6, NULL); -be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_strftime); -be_define_const_str(escape, "escape", 2652972038u, 0, 6, &be_const_str_v); -be_define_const_str(eth, "eth", 2191266556u, 0, 3, NULL); -be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_xy); -be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, &be_const_str_month); -be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_find); -be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, &be_const_str_point_arr); -be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, NULL); -be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, &be_const_str_target_search); -be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_offset); +be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, &be_const_str_target_search); +be_define_const_str(engine, "engine", 3993360443u, 0, 6, &be_const_str_push); +be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str__X7B_X7D); +be_define_const_str(escape, "escape", 2652972038u, 0, 6, &be_const_str_public_key); +be_define_const_str(eth, "eth", 2191266556u, 0, 3, &be_const_str_remove_rule); +be_define_const_str(event, "event", 4264611999u, 0, 5, NULL); +be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, &be_const_str_iter); +be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_get_switch); +be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, &be_const_str_finish); +be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, &be_const_str_pop_path); +be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, NULL); +be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, NULL); be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_strip); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_init_draw_arc_dsc); -be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_is_running); -be_define_const_str(exists, "exists", 1002329533u, 0, 6, NULL); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, NULL); -be_define_const_str(f, "f", 3809224601u, 0, 1, NULL); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, NULL); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, NULL); +be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_obj_event_base); +be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_remote_port); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_set_first_time); +be_define_const_str(f, "f", 3809224601u, 0, 1, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, &be_const_str_fast_loop_enabled); -be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, &be_const_str_set_chg_current); -be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_try_rule); -be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, &be_const_str_sin); -be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson); -be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_for); +be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, NULL); +be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, NULL); +be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_read24); +be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, &be_const_str_get_size); +be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_line_dsc); +be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_get_coords); be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL); -be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_get_vbus_voltage); -be_define_const_str(finish, "finish", 1494643858u, 0, 6, &be_const_str_get_vbus_current); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL); -be_define_const_str(flush, "flush", 3002334877u, 0, 5, NULL); -be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_lv_wifi_arcs_icon); -be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, NULL); -be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, &be_const_str_get_width); +be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL); +be_define_const_str(finish, "finish", 1494643858u, 0, 6, &be_const_str_show); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_set_mode_rgb); +be_define_const_str(flush, "flush", 3002334877u, 0, 5, &be_const_str_tele); +be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_point); +be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, &be_const_str_get_percentage); +be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, NULL); be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_write); -be_define_const_str(from_to, "from_to", 21625507u, 0, 7, &be_const_str_invalidate); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_k); +be_define_const_str(from_to, "from_to", 21625507u, 0, 7, &be_const_str_r); be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, NULL); be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, NULL); -be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_show); -be_define_const_str(full_state, "full_state", 255687770u, 0, 10, NULL); -be_define_const_str(full_status, "full_status", 648242459u, 0, 11, NULL); -be_define_const_str(function, "function", 2664841801u, 0, 8, &be_const_str_remove_light); -be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, &be_const_str_push); -be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_set_light); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, NULL); -be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_seg7_font); -be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_run_bat); -be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_power_off); -be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); -be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, &be_const_str_is_first_time); -be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, &be_const_str_str); +be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_memory); +be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_save_before_restart); +be_define_const_str(full_status, "full_status", 648242459u, 0, 11, &be_const_str_now); +be_define_const_str(function, "function", 2664841801u, 0, 8, &be_const_str_get_height); +be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, &be_const_str_get_style_pad_right); +be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_json_fdump_list); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_lv_point_arr); +be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_input); +be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, NULL); +be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_remove); +be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_get_cb_list); +be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, &be_const_str_set_bits_per_sample); +be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, NULL); be_define_const_str(get_bat_current, "get_bat_current", 1912106073u, 0, 15, NULL); -be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, NULL); -be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, &be_const_str_h); -be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, &be_const_str_get_style_line_color); -be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, NULL); -be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, &be_const_str_set_mode_ct); -be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, &be_const_str_int); -be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, &be_const_str_iter); -be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, NULL); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_is_dirty); +be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, &be_const_str_as); +be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, &be_const_str_set_huesat); +be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, &be_const_str_resp_cmnd_done); +be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, &be_const_str_math); +be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, NULL); +be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, &be_const_str_set_style_radius); +be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, NULL); +be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, &be_const_str_missing_X20name); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_x); be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, NULL); -be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, &be_const_str_uuid4); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_minute); +be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_lv_wifi_bars); +be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, NULL); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_lv_signal_arcs); be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, NULL); -be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, NULL); -be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_init); -be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, &be_const_str_pop); -be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_setitem); -be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, &be_const_str_imax); -be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_name); -be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, &be_const_str_open); -be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, &be_const_str_hue_ntv); -be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, NULL); -be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, NULL); -be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, &be_const_str_param); -be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, &be_const_str_widget_event_cb); -be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, NULL); -be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, NULL); -be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, &be_const_str_split); -be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, NULL); -be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_if); -be_define_const_str(geti, "geti", 2381006490u, 0, 4, NULL); +be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, &be_const_str_getbits); +be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_valuer_error); +be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, &be_const_str_target); +be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_update); +be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); +be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_upper); +be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, &be_const_str_set_xy); +be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, &be_const_str_light_state); +be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, &be_const_str_group_def); +be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str_pin); +be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, &be_const_str_null_cb); +be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, &be_const_str_rotate); +be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, &be_const_str_hex); +be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, &be_const_str_screenshot); +be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); +be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str_power_off); +be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, NULL); +be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_set_ldo_voltage); be_define_const_str(global, "global", 503252654u, 0, 6, NULL); be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, NULL); -be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_push_path); -be_define_const_str(groups, "groups", 2943077229u, 0, 6, &be_const_str_width); -be_define_const_str(h, "h", 3977000791u, 0, 1, NULL); -be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_read); -be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, &be_const_str_tasmota); +be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_lv_clock_icon); +be_define_const_str(groups, "groups", 2943077229u, 0, 6, &be_const_str_minute); +be_define_const_str(h, "h", 3977000791u, 0, 1, &be_const_str_p2); +be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_month); +be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, NULL); be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, NULL); -be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_hour); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_json_fdump); -be_define_const_str(hour, "hour", 3053661199u, 0, 4, &be_const_str_register_button_encoder); -be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, &be_const_str_pin_mode); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, &be_const_str_remove_timer); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, &be_const_str_settings); +be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_remove_cron); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_sec); +be_define_const_str(hour, "hour", 3053661199u, 0, 4, &be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29); +be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, &be_const_str_set_style_img_recolor_opa); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, &be_const_str_set); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, &be_const_str_stop_iteration); be_define_const_str(hue, "hue", 3817694041u, 0, 3, NULL); be_define_const_str(hue_ntv, "hue_ntv", 705068642u, 0, 7, NULL); -be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_math); +be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus); be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); -be_define_const_str(id, "id", 926444256u, 0, 2, NULL); -be_define_const_str(id_X20must_X20be_X20of_X20type_X20_X27int_X27, "id must be of type 'int'", 2097653458u, 0, 24, NULL); +be_define_const_str(id, "id", 926444256u, 0, 2, &be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27); +be_define_const_str(id_X20must_X20be_X20of_X20type_X20_X27int_X27, "id must be of type 'int'", 2097653458u, 0, 24, &be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, NULL); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_montserrat_font); +be_define_const_str(img, "img", 2229740804u, 0, 3, NULL); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_set_channels); be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_ip); -be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, NULL); -be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_lv_event_cb); +be_define_const_str(init, "init", 380752755u, 0, 4, NULL); +be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, &be_const_str_wifi_arcs_icon); +be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_touch_update); be_define_const_str(input, "input", 4191711099u, 0, 5, NULL); -be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, &be_const_str_send_multicast); +be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, &be_const_str_solidified); be_define_const_str(ins_ramp, "ins_ramp", 1068049360u, 0, 8, NULL); -be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, &be_const_str_missing_X20name); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, NULL); -be_define_const_str(instance, "instance", 193386898u, 0, 8, &be_const_str_set_height); -be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, &be_const_str_top); -be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, &be_const_str_udp); -be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_on); -be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, &be_const_str_set_dcdc_enable); -be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_value); -be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, NULL); -be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, &be_const_str_range); -be_define_const_str(ip, "ip", 1261996636u, 0, 2, NULL); -be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, NULL); -be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, &be_const_str_obj_class_create_obj); -be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, NULL); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_loop); +be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, NULL); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_path); +be_define_const_str(instance, "instance", 193386898u, 0, 8, &be_const_str_while); +be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, &be_const_str_read8); +be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, &be_const_str_reverse_gamma10); +be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); +be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, &be_const_str_leds); +be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_widget_dtor_impl); +be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, &be_const_str_io_error); +be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, &be_const_str_def); +be_define_const_str(ip, "ip", 1261996636u, 0, 2, &be_const_str_offset); +be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, &be_const_str_on); +be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, &be_const_str_pi); +be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, &be_const_str_tag); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_set_timeouts); be_define_const_str(ismethod, "ismethod", 3513438880u, 0, 8, NULL); -be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, NULL); -be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus); -be_define_const_str(item, "item", 2671260646u, 0, 4, NULL); -be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_run); -be_define_const_str(json, "json", 916562499u, 0, 4, &be_const_str_module); -be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_set_style_bg_color); +be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, &be_const_str_end); +be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, NULL); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_percentage); +be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_settings); +be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_lv_wifi_arcs); +be_define_const_str(json, "json", 916562499u, 0, 4, &be_const_str_map); +be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_save); be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, NULL); -be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, &be_const_str_lv_extra); -be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, &be_const_str_size); +be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, NULL); +be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, NULL); be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, NULL); -be_define_const_str(k, "k", 3993778410u, 0, 1, &be_const_str_lv_solidified); -be_define_const_str(keys, "keys", 4182378701u, 0, 4, NULL); -be_define_const_str(kv, "kv", 1497177492u, 0, 2, &be_const_str_lv_coord_arr); -be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, NULL); +be_define_const_str(k, "k", 3993778410u, 0, 1, &be_const_str_p1); +be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_lv); +be_define_const_str(kv, "kv", 1497177492u, 0, 2, NULL); +be_define_const_str(label, "label", 4137097213u, 0, 5, NULL); +be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, &be_const_str_tasmota_log_reader); be_define_const_str(leds, "leds", 558858555u, 0, 4, NULL); -be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, &be_const_str_read12); -be_define_const_str(light, "light", 3801947695u, 0, 5, NULL); -be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, &be_const_str_widget_struct_by_class); +be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, &be_const_str_members); +be_define_const_str(light, "light", 3801947695u, 0, 5, &be_const_str_lv_coord_arr); +be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, &be_const_str_write_gpio); be_define_const_str(light_state, "light_state", 905783845u, 0, 11, NULL); -be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, &be_const_str_redirect); -be_define_const_str(lights, "lights", 425118420u, 0, 6, &be_const_str_widget_destructor); +be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, NULL); +be_define_const_str(lights, "lights", 425118420u, 0, 6, NULL); be_define_const_str(line_dsc, "line_dsc", 4094490978u, 0, 8, NULL); -be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_pc_rel); -be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, &be_const_str_set_rgb); -be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, &be_const_str_member); -be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_read24); -be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, NULL); -be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, &be_const_str_remote_port); -be_define_const_str(local, "local", 2621662984u, 0, 5, &be_const_str_try); -be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_lv_wifi_arcs); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_running); -be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_send); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_page_autoconf_mgr); -be_define_const_str(lv, "lv", 1529997255u, 0, 2, NULL); -be_define_const_str(lv_, "lv_", 663721032u, 0, 3, &be_const_str_return_X20code_X3D_X25i); -be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, &be_const_str_tcpclient); -be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, &be_const_str_setrange); -be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, &be_const_str_public_key); +be_define_const_str(list, "list", 217798785u, 0, 4, NULL); +be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, &be_const_str_widget_event_impl); +be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, NULL); +be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_persist); +be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_set_dc_voltage); +be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, &be_const_str_page_autoconf_mgr); +be_define_const_str(local, "local", 2621662984u, 0, 5, &be_const_str_print); +be_define_const_str(log, "log", 1062293841u, 0, 3, NULL); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_value); +be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_v); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL); +be_define_const_str(lv, "lv", 1529997255u, 0, 2, &be_const_str_return_X20code_X3D_X25i); +be_define_const_str(lv_, "lv_", 663721032u, 0, 3, NULL); +be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, &be_const_str_set_percentage); +be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, &be_const_str_readline); +be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, &be_const_str_lv_obj_class); be_define_const_str(lv_event_cb, "lv_event_cb", 2480731016u, 0, 11, NULL); -be_define_const_str(lv_extra, "lv_extra", 399561998u, 0, 8, &be_const_str_to_gamma); -be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, &be_const_str_time_dump); -be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, &be_const_str_set_mode_rgb); -be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, NULL); -be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, &be_const_str_matrix); -be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, &be_const_str_rad); -be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, &be_const_str_wire2); -be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, NULL); -be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, NULL); -be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, &be_const_str_sec); -be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, &be_const_str_manuf); -be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, &be_const_str__X7B_X7D); -be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, &be_const_str_null_cb); -be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, &be_const_str_skip); -be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, &be_const_str_set_x); -be_define_const_str(manuf, "manuf", 4120929560u, 0, 5, &be_const_str_y); -be_define_const_str(map, "map", 3751997361u, 0, 3, &be_const_str_pi); +be_define_const_str(lv_extra, "lv_extra", 399561998u, 0, 8, NULL); +be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, &be_const_str_out_X20of_X20range); +be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, &be_const_str_set_power); +be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, &be_const_str_webclient); +be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, NULL); +be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, NULL); +be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, &be_const_str_unsubscribe); +be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, &be_const_str_sinh); +be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, &be_const_str_web_add_main_button); +be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, &be_const_str_seg7_font); +be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, &be_const_str_sin); +be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, NULL); +be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, NULL); +be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, &be_const_str_publish_result); +be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, &be_const_str_next_cron); +be_define_const_str(manuf, "manuf", 4120929560u, 0, 5, &be_const_str_uuid4); +be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); be_define_const_str(math, "math", 4001929615u, 0, 4, NULL); be_define_const_str(matrix, "matrix", 365099244u, 0, 6, NULL); be_define_const_str(member, "member", 719708611u, 0, 6, NULL); -be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_subscribe); -be_define_const_str(memory, "memory", 2229924270u, 0, 6, NULL); -be_define_const_str(millis, "millis", 1214679063u, 0, 6, &be_const_str_valuer_error); +be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_range); +be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_year); +be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); be_define_const_str(min, "min", 3381609815u, 0, 3, NULL); -be_define_const_str(minute, "minute", 954666857u, 0, 6, &be_const_str_select); -be_define_const_str(missing_X20name, "missing name", 3635024006u, 0, 12, &be_const_str_resp_cmnd_done); -be_define_const_str(model, "model", 2961925722u, 0, 5, &be_const_str_set_y); -be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_rand); +be_define_const_str(minute, "minute", 954666857u, 0, 6, NULL); +be_define_const_str(missing_X20name, "missing name", 3635024006u, 0, 12, &be_const_str_web_add_button); +be_define_const_str(model, "model", 2961925722u, 0, 5, &be_const_str_running); +be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); be_define_const_str(month, "month", 3598321157u, 0, 5, NULL); -be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, NULL); -be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_write_gpio); +be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str_set_chg_current); +be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_scale_uint); be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL); -be_define_const_str(next, "next", 1555467752u, 0, 4, &be_const_str_resp_cmnd_str); -be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, &be_const_str_seti); +be_define_const_str(next, "next", 1555467752u, 0, 4, &be_const_str_pc); +be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, NULL); be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, NULL); -be_define_const_str(now, "now", 682728183u, 0, 3, &be_const_str_web_add_handler); -be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, NULL); -be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_p1); -be_define_const_str(o, "o", 3926667934u, 0, 1, NULL); -be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, &be_const_str_offseta); -be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, &be_const_str_w); -be_define_const_str(offset, "offset", 348705738u, 0, 6, &be_const_str_stop); -be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, &be_const_str_set_huesat); -be_define_const_str(on, "on", 1630810064u, 0, 2, &be_const_str_resp_cmnd_failed); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, &be_const_str_var); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, NULL); +be_define_const_str(now, "now", 682728183u, 0, 3, &be_const_str_point_arr); +be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, &be_const_str_remove_driver); +be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_readbytes); +be_define_const_str(o, "o", 3926667934u, 0, 1, &be_const_str_preinit); +be_define_const_str(obj, "obj", 3343205242u, 0, 3, NULL); +be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, NULL); +be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, &be_const_str_pixel_size); +be_define_const_str(offset, "offset", 348705738u, 0, 6, NULL); +be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, &be_const_str_widget_destructor); +be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, &be_const_str_wifi); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, &be_const_str_strptime); be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); -be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, &be_const_str_type_error); -be_define_const_str(p1, "p1", 2689521274u, 0, 2, &be_const_str_screenshot); -be_define_const_str(p2, "p2", 2672743655u, 0, 2, NULL); +be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, &be_const_str_refr_now); +be_define_const_str(p1, "p1", 2689521274u, 0, 2, &be_const_str_scr_act); +be_define_const_str(p2, "p2", 2672743655u, 0, 2, &be_const_str_pixel_count); be_define_const_str(page_autoconf_ctl, "page_autoconf_ctl", 2453381496u, 0, 17, NULL); be_define_const_str(page_autoconf_mgr, "page_autoconf_mgr", 3643937031u, 0, 17, NULL); -be_define_const_str(param, "param", 1309554226u, 0, 5, &be_const_str_web_add_main_button); -be_define_const_str(path, "path", 2223459638u, 0, 4, &be_const_str_unknown_X20instruction); -be_define_const_str(pc, "pc", 1313756516u, 0, 2, NULL); -be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_continue); -be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_rounded); -be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, &be_const_str_read8); -be_define_const_str(persist, "persist", 3917083779u, 0, 7, &be_const_str_strptime); -be_define_const_str(persist_X2E_p_X20is_X20not_X20a_X20map, "persist._p is not a map", 1176528732u, 0, 23, NULL); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_reverse_gamma10); +be_define_const_str(param, "param", 1309554226u, 0, 5, &be_const_str_web_sensor); +be_define_const_str(path, "path", 2223459638u, 0, 4, NULL); +be_define_const_str(pc, "pc", 1313756516u, 0, 2, &be_const_str_wd); +be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_width); +be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_widget_ctor_cb); +be_define_const_str(pct, "pct", 1431300144u, 0, 3, NULL); +be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, NULL); +be_define_const_str(persist, "persist", 3917083779u, 0, 7, &be_const_str_set_text); +be_define_const_str(persist_X2E_p_X20is_X20not_X20a_X20map, "persist._p is not a map", 1176528732u, 0, 23, &be_const_str_widget_event_cb); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_super); be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, &be_const_str_read13); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_read32); -be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, NULL); -be_define_const_str(pixel_size, "pixel_size", 2209135785u, 0, 10, &be_const_str_shared_key); -be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, &be_const_str_web_send); -be_define_const_str(point, "point", 414084241u, 0, 5, NULL); -be_define_const_str(point_arr, "point_arr", 1140859857u, 0, 9, &be_const_str_tolower); -be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_webserver); -be_define_const_str(pop_path, "pop_path", 2403243998u, 0, 8, &be_const_str_pow); -be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); -be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, &be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); -be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, NULL); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str__X7D); +be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, &be_const_str_widget_group_def); +be_define_const_str(pixel_size, "pixel_size", 2209135785u, 0, 10, NULL); +be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, NULL); +be_define_const_str(point, "point", 414084241u, 0, 5, &be_const_str_real); +be_define_const_str(point_arr, "point_arr", 1140859857u, 0, 9, NULL); +be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); +be_define_const_str(pop_path, "pop_path", 2403243998u, 0, 8, NULL); +be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_splash_init); +be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, NULL); +be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, &be_const_str_refr_size); be_define_const_str(print, "print", 372738696u, 0, 5, NULL); be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, NULL); -be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_remote_ip); -be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, NULL); -be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); -be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, &be_const_str_real); +be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_write8); +be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, &be_const_str_setitem); +be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_sat); +be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, NULL); be_define_const_str(quality, "quality", 2597670950u, 0, 7, NULL); be_define_const_str(r, "r", 4144776981u, 0, 1, NULL); be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL); be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); -be_define_const_str(range, "range", 4208725202u, 0, 5, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_remove_cmd); +be_define_const_str(range, "range", 4208725202u, 0, 5, &be_const_str_web_add_management_button); be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); be_define_const_str(read12, "read12", 4291076970u, 0, 6, NULL); -be_define_const_str(read13, "read13", 12887293u, 0, 6, &be_const_str_signal_arcs); +be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL); be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL); be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL); -be_define_const_str(read8, "read8", 2802788167u, 0, 5, &be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL); be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); -be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, &be_const_str_set_first_time); +be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, &be_const_str_send); be_define_const_str(readbytes, "readbytes", 2716426756u, 0, 9, NULL); be_define_const_str(readline, "readline", 1212709927u, 0, 8, NULL); -be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_remove); +be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_resolvecmnd); be_define_const_str(reapply, "reapply", 3778939332u, 0, 7, NULL); -be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL); -be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, &be_const_str_widget_dtor_cb); +be_define_const_str(redirect, "redirect", 389758641u, 0, 8, &be_const_str_round_end); +be_define_const_str(refr_now, "refr_now", 3191284735u, 0, 8, NULL); +be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, NULL); +be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, &be_const_str_resp_cmnd); be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); be_define_const_str(register_obj, "register_obj", 3982614770u, 0, 12, NULL); -be_define_const_str(remote_ip, "remote_ip", 2953154693u, 0, 9, &be_const_str_set_exten); -be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, NULL); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_web_send_decimal); -be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL); +be_define_const_str(remote_ip, "remote_ip", 2953154693u, 0, 9, NULL); +be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, &be_const_str_tcpclient); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_run_cron); +be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_started); be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, NULL); -be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, &be_const_str_super); +be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, NULL); be_define_const_str(remove_light, "remove_light", 1783624394u, 0, 12, NULL); -be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); +be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, &be_const_str_set_x); be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, NULL); -be_define_const_str(reset, "reset", 1695364032u, 0, 5, &be_const_str_round_end); +be_define_const_str(reset, "reset", 1695364032u, 0, 5, &be_const_str_try); be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL); be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); -be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); -be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, &be_const_str_x1); -be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, &be_const_str_signal_change); +be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, &be_const_str_set_style_text_font); +be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); +be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, &be_const_str_splash); be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); be_define_const_str(return_X20code_X3D_X25i, "return code=%i", 2127454401u, 0, 14, NULL); be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); -be_define_const_str(rotate, "rotate", 2784296202u, 0, 6, &be_const_str_set_gain); -be_define_const_str(round_end, "round_end", 985288225u, 0, 9, NULL); -be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, NULL); +be_define_const_str(rotate, "rotate", 2784296202u, 0, 6, NULL); +be_define_const_str(round_end, "round_end", 985288225u, 0, 9, &be_const_str_set_align); +be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, &be_const_str_send_multicast); be_define_const_str(rounded, "rounded", 1920734138u, 0, 7, NULL); -be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); -be_define_const_str(rule, "rule", 4230889683u, 0, 4, &be_const_str_set_power); -be_define_const_str(run, "run", 718098122u, 0, 3, &be_const_str_write8); -be_define_const_str(run_bat, "run_bat", 2536903298u, 0, 7, &be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function); +be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, &be_const_str_set_style_line_color); +be_define_const_str(rule, "rule", 4230889683u, 0, 4, NULL); +be_define_const_str(run, "run", 718098122u, 0, 3, &be_const_str__X7B); +be_define_const_str(run_bat, "run_bat", 2536903298u, 0, 7, NULL); be_define_const_str(run_cron, "run_cron", 1929098555u, 0, 8, NULL); -be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, &be_const_str_sinh); -be_define_const_str(running, "running", 343848780u, 0, 7, &be_const_str_widget_cb); -be_define_const_str(sat, "sat", 3592196823u, 0, 3, &be_const_str_set_xy); -be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_set_rate); -be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, &be_const_str_wifi_arcs); +be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, &be_const_str_continue); +be_define_const_str(running, "running", 343848780u, 0, 7, &be_const_str_w); +be_define_const_str(sat, "sat", 3592196823u, 0, 3, NULL); +be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); +be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); -be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_widget_ctor_impl); -be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, &be_const_str_else); -be_define_const_str(search, "search", 2150836393u, 0, 6, &be_const_str_srand); -be_define_const_str(sec, "sec", 3139892658u, 0, 3, &be_const_str_widget_event); +be_define_const_str(scan, "scan", 3974641896u, 0, 4, NULL); +be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_signal_change); +be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, &be_const_str_select); +be_define_const_str(search, "search", 2150836393u, 0, 6, NULL); +be_define_const_str(sec, "sec", 3139892658u, 0, 3, NULL); be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL); be_define_const_str(select, "select", 297952813u, 0, 6, NULL); be_define_const_str(send, "send", 1919010991u, 0, 4, NULL); -be_define_const_str(send_multicast, "send_multicast", 812185870u, 0, 14, NULL); -be_define_const_str(serial, "serial", 3687697785u, 0, 6, &be_const_str_set_timeouts); -be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_widget_event_impl); +be_define_const_str(send_multicast, "send_multicast", 812185870u, 0, 14, &be_const_str_shared_key); +be_define_const_str(serial, "serial", 3687697785u, 0, 6, &be_const_str_subscribe); +be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); +be_define_const_str(set_align, "set_align", 2592958913u, 0, 9, NULL); be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, NULL); -be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, &be_const_str_time_str); +be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL); be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, NULL); -be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, NULL); -be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, &be_const_str_url_encode); -be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, NULL); -be_define_const_str(set_ct, "set_ct", 972363187u, 0, 6, NULL); -be_define_const_str(set_dc_voltage, "set_dc_voltage", 2181981936u, 0, 14, &be_const_str_widget_ctor_cb); -be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, NULL); -be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, NULL); -be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, NULL); -be_define_const_str(set_gain, "set_gain", 3847781975u, 0, 8, &be_const_str_traceback); -be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, &be_const_str_set_matrix_pixel_color); -be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, NULL); -be_define_const_str(set_huesat, "set_huesat", 626496854u, 0, 10, &be_const_str_wifi_arcs_icon); +be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, &be_const_str_write_file); +be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, &be_const_str_top); +be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, &be_const_str_set_light); +be_define_const_str(set_ct, "set_ct", 972363187u, 0, 6, &be_const_str_set_mode_ct); +be_define_const_str(set_dc_voltage, "set_dc_voltage", 2181981936u, 0, 14, NULL); +be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, &be_const_str_set_user_data); +be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, &be_const_str_xy); +be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, &be_const_str_tasmota); +be_define_const_str(set_gain, "set_gain", 3847781975u, 0, 8, NULL); +be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, NULL); +be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, &be_const_str_widget_ctor_impl); +be_define_const_str(set_huesat, "set_huesat", 626496854u, 0, 10, &be_const_str_toptr); be_define_const_str(set_ldo_enable, "set_ldo_enable", 2916502041u, 0, 14, NULL); -be_define_const_str(set_ldo_voltage, "set_ldo_voltage", 4090501160u, 0, 15, NULL); -be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); +be_define_const_str(set_ldo_voltage, "set_ldo_voltage", 4090501160u, 0, 15, &be_const_str_set_pwm); +be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, &be_const_str_seti); be_define_const_str(set_matrix_pixel_color, "set_matrix_pixel_color", 1197149462u, 0, 22, NULL); be_define_const_str(set_mode_ct, "set_mode_ct", 665073295u, 0, 11, NULL); -be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, &be_const_str_width_def); +be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, &be_const_str_set_style_text_color); be_define_const_str(set_percentage, "set_percentage", 2952022724u, 0, 14, NULL); -be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, &be_const_str_widget_constructor); +be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, NULL); be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); be_define_const_str(set_pwm, "set_pwm", 3781811012u, 0, 7, NULL); -be_define_const_str(set_rate, "set_rate", 1154016838u, 0, 8, NULL); -be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, NULL); +be_define_const_str(set_rate, "set_rate", 1154016838u, 0, 8, &be_const_str_import); +be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, &be_const_str_splash_remove); be_define_const_str(set_rgb, "set_rgb", 3380244855u, 0, 7, NULL); -be_define_const_str(set_style_bg_color, "set_style_bg_color", 1689513089u, 0, 18, &be_const_str_tasmota_log_reader); -be_define_const_str(set_style_line_color, "set_style_line_color", 3665238976u, 0, 20, &be_const_str_tomap); +be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, &be_const_str_static); +be_define_const_str(set_style_bg_color, "set_style_bg_color", 1689513089u, 0, 18, &be_const_str_set_style_border_width); +be_define_const_str(set_style_border_width, "set_style_border_width", 549034191u, 0, 22, NULL); +be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, &be_const_str_web_add_console_button); +be_define_const_str(set_style_img_recolor_opa, "set_style_img_recolor_opa", 2667062087u, 0, 25, &be_const_str_wifi_bars); +be_define_const_str(set_style_line_color, "set_style_line_color", 3665238976u, 0, 20, &be_const_str_tan); +be_define_const_str(set_style_pad_all, "set_style_pad_all", 3987000607u, 0, 17, &be_const_str_true); be_define_const_str(set_style_pad_right, "set_style_pad_right", 3314069054u, 0, 19, NULL); +be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, &be_const_str_webserver); +be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, NULL); be_define_const_str(set_style_text_font, "set_style_text_font", 1028590019u, 0, 19, NULL); -be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, NULL); +be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, NULL); +be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, &be_const_str_wire1); be_define_const_str(set_time, "set_time", 900236405u, 0, 8, NULL); -be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, &be_const_str_do); +be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL); be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); +be_define_const_str(set_user_data, "set_user_data", 3596043360u, 0, 13, NULL); be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, NULL); be_define_const_str(set_width, "set_width", 484671920u, 0, 9, NULL); be_define_const_str(set_x, "set_x", 1849400772u, 0, 5, NULL); -be_define_const_str(set_xy, "set_xy", 1155092615u, 0, 6, NULL); -be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, NULL); -be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, &be_const_str_upper); +be_define_const_str(set_xy, "set_xy", 1155092615u, 0, 6, &be_const_str_set_zoom); +be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, &be_const_str_signal_arcs); +be_define_const_str(set_zoom, "set_zoom", 1925134407u, 0, 8, NULL); +be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL); be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL); be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); be_define_const_str(settings, "settings", 1745255176u, 0, 8, NULL); be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL); -be_define_const_str(show, "show", 2840060476u, 0, 4, &be_const_str_year); -be_define_const_str(signal_arcs, "signal_arcs", 1505996127u, 0, 11, NULL); -be_define_const_str(signal_bars, "signal_bars", 3181573600u, 0, 11, NULL); +be_define_const_str(show, "show", 2840060476u, 0, 4, NULL); +be_define_const_str(signal_arcs, "signal_arcs", 1505996127u, 0, 11, &be_const_str_trig); +be_define_const_str(signal_bars, "signal_bars", 3181573600u, 0, 11, &be_const_str_x1); be_define_const_str(signal_change, "signal_change", 3262299350u, 0, 13, NULL); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); -be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); -be_define_const_str(size, "size", 597743964u, 0, 4, NULL); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_sqrt); +be_define_const_str(sinh, "sinh", 282220607u, 0, 4, &be_const_str_raise); +be_define_const_str(size, "size", 597743964u, 0, 4, &be_const_str_wire2); be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL); -be_define_const_str(solidified, "solidified", 3257553487u, 0, 10, NULL); -be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); +be_define_const_str(solidified, "solidified", 3257553487u, 0, 10, &be_const_str_value_error); +be_define_const_str(splash, "splash", 2531464038u, 0, 6, NULL); +be_define_const_str(splash_init, "splash_init", 1522992293u, 0, 11, NULL); +be_define_const_str(splash_remove, "splash_remove", 3132020807u, 0, 13, NULL); +be_define_const_str(split, "split", 2276994531u, 0, 5, &be_const_str_stop); be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); -be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); +be_define_const_str(srand, "srand", 465518633u, 0, 5, &be_const_str_time_reached); be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); -be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); +be_define_const_str(started, "started", 2153339806u, 0, 7, NULL); +be_define_const_str(state, "state", 2016490230u, 0, 5, &be_const_str_break); be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); -be_define_const_str(stop, "stop", 3411225317u, 0, 4, &be_const_str_write_file); -be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, NULL); +be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL); +be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, &be_const_str_traceback); be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); be_define_const_str(string, "string", 398550328u, 0, 6, NULL); @@ -765,61 +794,61 @@ be_define_const_str(strip, "strip", 4246411473u, 0, 5, NULL); be_define_const_str(strptime, "strptime", 1277910361u, 0, 8, NULL); be_define_const_str(subscribe, "subscribe", 2946386435u, 0, 9, NULL); be_define_const_str(success, "success", 979353360u, 0, 7, NULL); -be_define_const_str(super, "super", 4152230356u, 0, 5, &be_const_str_wifi_bars_icon); -be_define_const_str(sys, "sys", 3277365014u, 0, 3, NULL); +be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); +be_define_const_str(sys, "sys", 3277365014u, 0, 3, &be_const_str_do); be_define_const_str(tag, "tag", 2516003219u, 0, 3, NULL); -be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); +be_define_const_str(tan, "tan", 2633446552u, 0, 3, &be_const_str_wire); be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); be_define_const_str(target, "target", 845187144u, 0, 6, NULL); be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); be_define_const_str(tasmota, "tasmota", 424643812u, 0, 7, NULL); -be_define_const_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29, "tasmota.get_light() is deprecated, use light.get()", 3525753647u, 0, 50, &be_const_str_widget_width_def); +be_define_const_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29, "tasmota.get_light() is deprecated, use light.get()", 3525753647u, 0, 50, NULL); be_define_const_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, "tasmota.set_light() is deprecated, use light.set()", 2124937871u, 0, 50, NULL); be_define_const_str(tasmota_log_reader, "tasmota_log_reader", 3555069257u, 0, 18, NULL); be_define_const_str(tcpclient, "tcpclient", 3828797983u, 0, 9, NULL); be_define_const_str(tele, "tele", 3474458061u, 0, 4, NULL); be_define_const_str(the_X20second_X20argument_X20is_X20not_X20a_X20function, "the second argument is not a function", 3954574469u, 0, 37, NULL); -be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, &be_const_str_wifi_bars); +be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); be_define_const_str(to_gamma, "to_gamma", 1597139862u, 0, 8, NULL); be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL); be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); -be_define_const_str(tomap, "tomap", 612167626u, 0, 5, NULL); +be_define_const_str(tomap, "tomap", 612167626u, 0, 5, &be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, NULL); -be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); +be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, &be_const_str_tr); be_define_const_str(touch_update, "touch_update", 1918102068u, 0, 12, NULL); be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); be_define_const_str(tr, "tr", 1195724803u, 0, 2, NULL); be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); -be_define_const_str(trig, "trig", 2073314619u, 0, 4, &be_const_str_wire1); +be_define_const_str(trig, "trig", 2073314619u, 0, 4, NULL); be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); -be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, &be_const_str_web_add_config_button); +be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); be_define_const_str(type_error, "type_error", 3789613824u, 0, 10, NULL); be_define_const_str(udp, "udp", 1253872004u, 0, 3, NULL); -be_define_const_str(unknown_X20instruction, "unknown instruction", 1093911841u, 0, 19, NULL); +be_define_const_str(unknown_X20instruction, "unknown instruction", 1093911841u, 0, 19, &be_const_str_class); be_define_const_str(unsubscribe, "unsubscribe", 4190043798u, 0, 11, NULL); -be_define_const_str(update, "update", 672109684u, 0, 6, NULL); +be_define_const_str(update, "update", 672109684u, 0, 6, &be_const_str_widget_editable); be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); -be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, &be_const_str_break); -be_define_const_str(uuid4, "uuid4", 1153582450u, 0, 5, &be_const_str_nil); +be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL); +be_define_const_str(uuid4, "uuid4", 1153582450u, 0, 5, &be_const_str_write); be_define_const_str(v, "v", 4077666505u, 0, 1, NULL); be_define_const_str(value, "value", 1113510858u, 0, 5, NULL); be_define_const_str(value_error, "value_error", 773297791u, 0, 11, NULL); -be_define_const_str(valuer_error, "valuer_error", 2567947105u, 0, 12, &be_const_str_wire); +be_define_const_str(valuer_error, "valuer_error", 2567947105u, 0, 12, NULL); be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); be_define_const_str(w, "w", 4060888886u, 0, 1, NULL); -be_define_const_str(wd, "wd", 1531424278u, 0, 2, &be_const_str_write_bit); -be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, &be_const_str_def); +be_define_const_str(wd, "wd", 1531424278u, 0, 2, NULL); +be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, &be_const_str_except); be_define_const_str(web_add_config_button, "web_add_config_button", 639674325u, 0, 21, NULL); be_define_const_str(web_add_console_button, "web_add_console_button", 3481436192u, 0, 22, NULL); be_define_const_str(web_add_handler, "web_add_handler", 3990174962u, 0, 15, NULL); be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL); be_define_const_str(web_add_management_button, "web_add_management_button", 2738877186u, 0, 25, NULL); -be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, &be_const_str_webclient); +be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL); be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, NULL); be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, NULL); @@ -827,7 +856,7 @@ be_define_const_str(webserver, "webserver", 1572454038u, 0, 9, NULL); be_define_const_str(while, "while", 231090382u, 53, 5, NULL); be_define_const_str(widget_cb, "widget_cb", 2763583055u, 0, 9, NULL); be_define_const_str(widget_constructor, "widget_constructor", 2543785934u, 0, 18, NULL); -be_define_const_str(widget_ctor_cb, "widget_ctor_cb", 876007560u, 0, 14, NULL); +be_define_const_str(widget_ctor_cb, "widget_ctor_cb", 876007560u, 0, 14, &be_const_str_y); be_define_const_str(widget_ctor_impl, "widget_ctor_impl", 194252479u, 0, 16, NULL); be_define_const_str(widget_destructor, "widget_destructor", 4207388345u, 0, 17, NULL); be_define_const_str(widget_dtor_cb, "widget_dtor_cb", 3151545845u, 0, 14, NULL); @@ -839,14 +868,14 @@ be_define_const_str(widget_event_impl, "widget_event_impl", 2178430561u, 0, 17, be_define_const_str(widget_group_def, "widget_group_def", 1246968785u, 0, 16, NULL); be_define_const_str(widget_height_def, "widget_height_def", 3131667813u, 0, 17, NULL); be_define_const_str(widget_instance_size, "widget_instance_size", 2055354779u, 0, 20, NULL); -be_define_const_str(widget_struct_by_class, "widget_struct_by_class", 3806373842u, 0, 22, NULL); +be_define_const_str(widget_struct_by_class, "widget_struct_by_class", 3806373842u, 0, 22, &be_const_str_yield); be_define_const_str(widget_struct_default, "widget_struct_default", 781673633u, 0, 21, NULL); -be_define_const_str(widget_width_def, "widget_width_def", 3986078862u, 0, 16, NULL); +be_define_const_str(widget_width_def, "widget_width_def", 3986078862u, 0, 16, &be_const_str_false); be_define_const_str(width, "width", 2508680735u, 0, 5, NULL); be_define_const_str(width_def, "width_def", 1143717879u, 0, 9, NULL); be_define_const_str(wifi, "wifi", 120087624u, 0, 4, NULL); be_define_const_str(wifi_arcs, "wifi_arcs", 3838492904u, 0, 9, NULL); -be_define_const_str(wifi_arcs_icon, "wifi_arcs_icon", 767180544u, 0, 14, &be_const_str_x); +be_define_const_str(wifi_arcs_icon, "wifi_arcs_icon", 767180544u, 0, 14, &be_const_str_wire_scan); be_define_const_str(wifi_bars, "wifi_bars", 653141243u, 0, 9, NULL); be_define_const_str(wifi_bars_icon, "wifi_bars_icon", 3641522557u, 0, 14, NULL); be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); @@ -854,461 +883,476 @@ be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); -be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL); -be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, &be_const_str_y1); +be_define_const_str(write8, "write8", 3133991532u, 0, 6, &be_const_str_var); +be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL); be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); be_define_const_str(write_file, "write_file", 3177658879u, 0, 10, NULL); be_define_const_str(write_gpio, "write_gpio", 2267940334u, 0, 10, NULL); be_define_const_str(x, "x", 4245442695u, 0, 1, NULL); be_define_const_str(x1, "x1", 274927234u, 0, 2, NULL); be_define_const_str(xy, "xy", 1482915802u, 0, 2, NULL); -be_define_const_str(y, "y", 4228665076u, 0, 1, NULL); +be_define_const_str(y, "y", 4228665076u, 0, 1, &be_const_str_if); be_define_const_str(y1, "y1", 2355101727u, 0, 2, NULL); be_define_const_str(year, "year", 2927578396u, 0, 4, NULL); be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); be_define_const_str(zero, "zero", 2339366755u, 0, 4, NULL); -be_define_const_str(zip, "zip", 2877453236u, 0, 3, &be_const_str_import); +be_define_const_str(zip, "zip", 2877453236u, 0, 3, NULL); be_define_const_str(_X7B, "{", 4262220314u, 0, 1, NULL); be_define_const_str(_X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, "{s}Batt Current{m}%.1f mA{e}", 866537156u, 0, 28, NULL); be_define_const_str(_X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, "{s}Batt Voltage{m}%.3f V{e}", 3184308199u, 0, 27, NULL); -be_define_const_str(_X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D, "{s}Temp AXP{m}%.1f °C{e}", 2622904081u, 0, 28, &be_const_str__X7D); +be_define_const_str(_X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D, "{s}Temp AXP{m}%.1f °C{e}", 2622904081u, 0, 28, NULL); be_define_const_str(_X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, "{s}VBus Current{m}%.1f mA{e}", 1032721155u, 0, 28, NULL); be_define_const_str(_X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, "{s}VBus Voltage{m}%.3f V{e}", 165651270u, 0, 27, NULL); be_define_const_str(_X7B_X7D, "{}", 1415952421u, 0, 2, NULL); be_define_const_str(_X7D, "}", 4161554600u, 0, 1, NULL); static const bstring* const m_string_table[] = { - (const bstring *)&be_const_str_reverse, - (const bstring *)&be_const_str_atleast1, - (const bstring *)&be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range, - (const bstring *)&be_const_str_add_anim, - (const bstring *)&be_const_str__X23autoexec_X2Ebe, - NULL, - (const bstring *)&be_const_str_duration, - (const bstring *)&be_const_str_reapply, - (const bstring *)&be_const_str_button_pressed, - (const bstring *)&be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E, - (const bstring *)&be_const_str__X2Fac, - (const bstring *)&be_const_str_get_temp, - (const bstring *)&be_const_str_read_sensors, - (const bstring *)&be_const_str__p, - (const bstring *)&be_const_str_get_height, - NULL, - (const bstring *)&be_const_str_signal_bars, - NULL, - (const bstring *)&be_const_str__X3F, - (const bstring *)&be_const_str_EC_C25519, - (const bstring *)&be_const_str_add_handler, - (const bstring *)&be_const_str_OPTION_A, - NULL, - NULL, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, - (const bstring *)&be_const_str_load_templates, - (const bstring *)&be_const_str_RELAY, - NULL, - (const bstring *)&be_const_str_MD5, - (const bstring *)&be_const_str_EVENT_DELETE, - (const bstring *)&be_const_str_add_header, - (const bstring *)&be_const_str__settings_ptr, - (const bstring *)&be_const_str__, - (const bstring *)&be_const_str_asin, - (const bstring *)&be_const_str_WS2812, - (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_content_send_style, - (const bstring *)&be_const_str__X23, - (const bstring *)&be_const_str_time_reached, - (const bstring *)&be_const_str__X2F_X2Eautoconf, - (const bstring *)&be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, - (const bstring *)&be_const_str_b, - (const bstring *)&be_const_str__X23init_X2Ebat, - NULL, - (const bstring *)&be_const_str_SERIAL_5O2, - (const bstring *)&be_const_str__X21_X3D_X3D, - (const bstring *)&be_const_str_set_pixel_color, - NULL, - (const bstring *)&be_const_str_available, - (const bstring *)&be_const_str_ct, - (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, - NULL, - NULL, - (const bstring *)&be_const_str_tele, - (const bstring *)&be_const_str_json_append, - (const bstring *)&be_const_str_STATE_DEFAULT, - NULL, - (const bstring *)&be_const_str_string, - (const bstring *)&be_const_str_tan, - (const bstring *)&be_const_str_codedump, - (const bstring *)&be_const_str_CFG_X3A_X20running_X20, - (const bstring *)&be_const_str_elif, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, - NULL, - (const bstring *)&be_const_str_create_custom_widget, - (const bstring *)&be_const_str__cmd, - (const bstring *)&be_const_str_gc, - (const bstring *)&be_const_str_enabled, - (const bstring *)&be_const_str_PART_MAIN, - (const bstring *)&be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, - (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, - (const bstring *)&be_const_str_readbytes, - (const bstring *)&be_const_str__X21_X3D, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, - NULL, - NULL, - (const bstring *)&be_const_str_remove_cron, - (const bstring *)&be_const_str__X23autoexec_X2Ebat, - (const bstring *)&be_const_str_battery_present, - (const bstring *)&be_const_str_engine, - (const bstring *)&be_const_str_web_sensor, - (const bstring *)&be_const_str_run_deferred, - NULL, - (const bstring *)&be_const_str__X3C, - (const bstring *)&be_const_str_dump, - NULL, - (const bstring *)&be_const_str__buffer, - (const bstring *)&be_const_str__class, - (const bstring *)&be_const_str_consume_stereo, - (const bstring *)&be_const_str_GET, - (const bstring *)&be_const_str_content_button, - (const bstring *)&be_const_str_False, - (const bstring *)&be_const_str_from_to, - NULL, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, - (const bstring *)&be_const_str_char, - (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, - (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, - (const bstring *)&be_const_str__X3D_X3C_X3E_X21, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, - (const bstring *)&be_const_str_leds, - (const bstring *)&be_const_str__X20, - (const bstring *)&be_const_str_get_alternate, - (const bstring *)&be_const_str_decompress, - (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, - (const bstring *)&be_const_str__X3E_X3D, - (const bstring *)&be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, - (const bstring *)&be_const_str_as, - NULL, - NULL, - (const bstring *)&be_const_str__archive, - (const bstring *)&be_const_str_area, - (const bstring *)&be_const_str_True, - (const bstring *)&be_const_str_insert, - (const bstring *)&be_const_str_escape, - NULL, - (const bstring *)&be_const_str_while, - (const bstring *)&be_const_str_ctypes_bytes, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, - (const bstring *)&be_const_str__X2E_X2E, + (const bstring *)&be_const_str_detected_X20on_X20bus, + (const bstring *)&be_const_str_Tele, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + (const bstring *)&be_const_str_can_show, + (const bstring *)&be_const_str_cb_do_nothing, + (const bstring *)&be_const_str_width_def, + (const bstring *)&be_const_str_attrdump, + (const bstring *)&be_const_str__global_addr, + (const bstring *)&be_const_str_toupper, + (const bstring *)&be_const_str_atan, + (const bstring *)&be_const_str__X2F, + (const bstring *)&be_const_str_member, + (const bstring *)&be_const_str_EVENT_DRAW_MAIN, + (const bstring *)&be_const_str_SERIAL_5N2, + (const bstring *)&be_const_str_SERIAL_6N2, NULL, (const bstring *)&be_const_str_Tasmota, - (const bstring *)&be_const_str__X3Clambda_X3E, - (const bstring *)&be_const_str_HTTP_GET, - (const bstring *)&be_const_str_read_bytes, - (const bstring *)&be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, - (const bstring *)&be_const_str_addr, - (const bstring *)&be_const_str_isnan, - (const bstring *)&be_const_str_check_privileged_access, - (const bstring *)&be_const_str__request_from, - (const bstring *)&be_const_str_set_text, - (const bstring *)&be_const_str_digital_read, - (const bstring *)&be_const_str_Wire, - (const bstring *)&be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function, - (const bstring *)&be_const_str_SERIAL_8N2, - (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, - (const bstring *)&be_const_str_point, - (const bstring *)&be_const_str_bool, - (const bstring *)&be_const_str__X2E, - (const bstring *)&be_const_str_hex, - (const bstring *)&be_const_str_arc_dsc, - NULL, - (const bstring *)&be_const_str_file, - NULL, - (const bstring *)&be_const_str_content_start, - (const bstring *)&be_const_str__X2Esize, - (const bstring *)&be_const_str_imin, - (const bstring *)&be_const_str__X3D, - (const bstring *)&be_const_str_make_cb, - (const bstring *)&be_const_str_INTERNAL_DAC, - (const bstring *)&be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, - NULL, - (const bstring *)&be_const_str__crons, - (const bstring *)&be_const_str_AudioFileSourceFS, - (const bstring *)&be_const_str_update, - (const bstring *)&be_const_str_I2C_Driver, - (const bstring *)&be_const_str_CFG_X3A_X20removing_X20autoconf_X20files, - (const bstring *)&be_const_str_ctor, - (const bstring *)&be_const_str_collect, - (const bstring *)&be_const_str_getbits, - (const bstring *)&be_const_str_Unknown, - (const bstring *)&be_const_str__X5D, - (const bstring *)&be_const_str_alternate, - (const bstring *)&be_const_str_json_fdump_any, - (const bstring *)&be_const_str_INTERNAL_PDM, - (const bstring *)&be_const_str_last_modified, - (const bstring *)&be_const_str_json, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, - (const bstring *)&be_const_str__X2Eautoconf, - (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, - NULL, - (const bstring *)&be_const_str_get_style_pad_right, - (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - (const bstring *)&be_const_str_widget_struct_default, - (const bstring *)&be_const_str_constructor_cb, - (const bstring *)&be_const_str_day, - NULL, - (const bstring *)&be_const_str_check_not_method, - NULL, - (const bstring *)&be_const_str_obj_event_base, - (const bstring *)&be_const_str_members, - (const bstring *)&be_const_str_refr_size, - (const bstring *)&be_const_str_class_init_obj, - NULL, - (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, - (const bstring *)&be_const_str_pc_abs, - NULL, - (const bstring *)&be_const_str_SERIAL_8O1, - NULL, - NULL, - (const bstring *)&be_const_str_gamma8, - (const bstring *)&be_const_str_isrunning, - (const bstring *)&be_const_str_cos, - (const bstring *)&be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, - (const bstring *)&be_const_str_consume_silence, - (const bstring *)&be_const_str_hue, - NULL, - (const bstring *)&be_const_str_log10, - (const bstring *)&be_const_str__X5B, - (const bstring *)&be_const_str_SERIAL_8N1, - (const bstring *)&be_const_str_tob64, - (const bstring *)&be_const_str_kv, - (const bstring *)&be_const_str_EXTERNAL_I2S, - (const bstring *)&be_const_str__X2F, - NULL, - (const bstring *)&be_const_str_set_reachable, - (const bstring *)&be_const_str_get_power, - (const bstring *)&be_const_str_acos, - (const bstring *)&be_const_str_dirty, - (const bstring *)&be_const_str_SERIAL_7O2, - (const bstring *)&be_const_str_fromstring, - (const bstring *)&be_const_str_floor, - (const bstring *)&be_const_str_create_matrix, - (const bstring *)&be_const_str_resolvecmnd, - (const bstring *)&be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker, - NULL, - (const bstring *)&be_const_str_bri, - (const bstring *)&be_const_str_RGBW, - (const bstring *)&be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus, - (const bstring *)&be_const_str_COLOR_WHITE, - NULL, - (const bstring *)&be_const_str_SERIAL_7N1, - (const bstring *)&be_const_str_gen_cb, - (const bstring *)&be_const_str__dirty, - (const bstring *)&be_const_str_groups, - (const bstring *)&be_const_str___upper__, - (const bstring *)&be_const_str_destructor_cb, - (const bstring *)&be_const_str__X2Elen, - NULL, - (const bstring *)&be_const_str_class, - (const bstring *)&be_const_str_EVENT_DRAW_PART_END, - (const bstring *)&be_const_str_i2c_enabled, - (const bstring *)&be_const_str_arch, - (const bstring *)&be_const_str_exec_cmd, - (const bstring *)&be_const_str_gpio, - (const bstring *)&be_const_str__X2Etapp, - (const bstring *)&be_const_str__X2Ebec, - (const bstring *)&be_const_str_ins_ramp, - (const bstring *)&be_const_str_toupper, - (const bstring *)&be_const_str__X23display_X2Eini, - (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, - (const bstring *)&be_const_str_SERIAL_8E2, - (const bstring *)&be_const_str_Restart_X201, - (const bstring *)&be_const_str_count, - (const bstring *)&be_const_str__X3C_X3D, - (const bstring *)&be_const_str_calldepth, - (const bstring *)&be_const_str_serial, - (const bstring *)&be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_AES_GCM, - (const bstring *)&be_const_str__X28_X29, - (const bstring *)&be_const_str__X0A, - (const bstring *)&be_const_str__X2Ep, - (const bstring *)&be_const_str_SERIAL_8O2, - (const bstring *)&be_const_str_color, - (const bstring *)&be_const_str_lv_signal_arcs, - (const bstring *)&be_const_str_get_free_heap, - NULL, - (const bstring *)&be_const_str_widget_group_def, - (const bstring *)&be_const_str_AudioFileSource, - (const bstring *)&be_const_str__settings_def, - (const bstring *)&be_const_str_call_native, - (const bstring *)&be_const_str_type, - (const bstring *)&be_const_str__X2Ep1, - (const bstring *)&be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, - (const bstring *)&be_const_str_next, - (const bstring *)&be_const_str_driver_name, - NULL, - (const bstring *)&be_const_str_input, - (const bstring *)&be_const_str__X2C, - (const bstring *)&be_const_str_draw_line_dsc_init, - (const bstring *)&be_const_str_AudioOutputI2S, - (const bstring *)&be_const_str_ins_goto, - (const bstring *)&be_const_str__t, - (const bstring *)&be_const_str_light_state, - (const bstring *)&be_const_str_, - (const bstring *)&be_const_str_SERIAL_5O1, - (const bstring *)&be_const_str_closure, - (const bstring *)&be_const_str_animators, (const bstring *)&be_const_str__X22_X3A, - (const bstring *)&be_const_str_files, - (const bstring *)&be_const_str_widget_height_def, - (const bstring *)&be_const_str_r, NULL, - (const bstring *)&be_const_str_AXP192, - (const bstring *)&be_const_str_zero, + NULL, + (const bstring *)&be_const_str_manuf, + NULL, + (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, + NULL, + (const bstring *)&be_const_str_gpio, + (const bstring *)&be_const_str_set_y, + (const bstring *)&be_const_str_SERIAL_5E2, + (const bstring *)&be_const_str__X3E, (const bstring *)&be_const_str__error, - (const bstring *)&be_const_str_SERIAL_7N2, - (const bstring *)&be_const_str_CT, - (const bstring *)&be_const_str__read, - (const bstring *)&be_const_str_decrypt, - (const bstring *)&be_const_str_SERIAL_6E1, - (const bstring *)&be_const_str_instance_X20required, - (const bstring *)&be_const_str__ccmd, - (const bstring *)&be_const_str_Parameter_X20error, + (const bstring *)&be_const_str_set_size, + NULL, + (const bstring *)&be_const_str_CFG_X3A_X20loading_X20, + (const bstring *)&be_const_str_gamma8, (const bstring *)&be_const_str_resp_cmnd_error, NULL, - NULL, - (const bstring *)&be_const_str__X3D_X3D, - (const bstring *)&be_const_str_get_cb_list, - (const bstring *)&be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, - (const bstring *)&be_const_str_f, - (const bstring *)&be_const_str_every_250ms, - (const bstring *)&be_const_str_Leds, - NULL, - (const bstring *)&be_const_str_percentage, - (const bstring *)&be_const_str__X25s_X2Eautoconf, - (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, - (const bstring *)&be_const_str_exec_rules, - (const bstring *)&be_const_str_get_switch, - (const bstring *)&be_const_str_elements_X20must_X20be_X20a_X20lv_point, - (const bstring *)&be_const_str_remove_rule, - (const bstring *)&be_const_str_Auto_X2Dconfiguration, - (const bstring *)&be_const_str_item, - (const bstring *)&be_const_str_Unknown_X20command, - (const bstring *)&be_const_str_AudioGeneratorMP3, - (const bstring *)&be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, - (const bstring *)&be_const_str_clear_first_time, - (const bstring *)&be_const_str_lv, - (const bstring *)&be_const_str_get_aps_voltage, - (const bstring *)&be_const_str_trig, - (const bstring *)&be_const_str__persist_X2Ejson, - (const bstring *)&be_const_str_RGB, - NULL, - (const bstring *)&be_const_str__X2Fstate_X2F, - (const bstring *)&be_const_str_EVENT_DRAW_MAIN, - (const bstring *)&be_const_str_add, - (const bstring *)&be_const_str_introspect, - (const bstring *)&be_const_str__X2Ep2, - (const bstring *)&be_const_str_SERIAL_6O1, - (const bstring *)&be_const_str_ccronexpr, - (const bstring *)&be_const_str__X2F_X3Frst_X3D, - (const bstring *)&be_const_str_autoexec, - (const bstring *)&be_const_str_exp, - (const bstring *)&be_const_str_SERIAL_5E2, - (const bstring *)&be_const_str_asstring, + (const bstring *)&be_const_str_add_handler, (const bstring *)&be_const_str_tanh, - (const bstring *)&be_const_str_Tele, - (const bstring *)&be_const_str_true, - (const bstring *)&be_const_str_OpusDecoder, - (const bstring *)&be_const_str_pixels_buffer, - (const bstring *)&be_const_str_deinit, - (const bstring *)&be_const_str_find_op, - (const bstring *)&be_const_str_set_timer, - (const bstring *)&be_const_str_BUTTON_CONFIGURATION, - (const bstring *)&be_const_str_EVENT_DRAW_PART_BEGIN, - (const bstring *)&be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_dump, + (const bstring *)&be_const_str_wifi_arcs, + (const bstring *)&be_const_str_refr_pos, + (const bstring *)&be_const_str_state, + (const bstring *)&be_const_str_create_matrix, NULL, - (const bstring *)&be_const_str_dac_voltage, - (const bstring *)&be_const_str_write_bytes, - (const bstring *)&be_const_str_get_pixel_color, - (const bstring *)&be_const_str__X2Ebe, - (const bstring *)&be_const_str_lv_wifi_bars, - (const bstring *)&be_const_str_begin_multicast, - (const bstring *)&be_const_str__X2Ew, + (const bstring *)&be_const_str_GET, + (const bstring *)&be_const_str_AudioGeneratorWAV, + (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, + (const bstring *)&be_const_str__t, + (const bstring *)&be_const_str_ccronexpr, + (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, + (const bstring *)&be_const_str_I2C_X3A, + (const bstring *)&be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str__crons, + (const bstring *)&be_const_str_TASMOTA, + (const bstring *)&be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, + (const bstring *)&be_const_str_set_exten, + (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, + (const bstring *)&be_const_str_time_str, + (const bstring *)&be_const_str_dim, + (const bstring *)&be_const_str__X5B, + (const bstring *)&be_const_str_DIMMER, NULL, (const bstring *)&be_const_str_SERIAL_6E2, - (const bstring *)&be_const_str_RES_OK, - (const bstring *)&be_const_str_attrdump, - (const bstring *)&be_const_str_set_style_pad_right, - (const bstring *)&be_const_str_delay, - (const bstring *)&be_const_str_line_dsc, - (const bstring *)&be_const_str_add_cmd, - (const bstring *)&be_const_str_draw_arc, - (const bstring *)&be_const_str_add_cron, + (const bstring *)&be_const_str_get_pixel_color, + (const bstring *)&be_const_str_Auto_X2Dconfiguration, + (const bstring *)&be_const_str__archive, + (const bstring *)&be_const_str_resize, + (const bstring *)&be_const_str_HTTP_POST, + (const bstring *)&be_const_str_Restart_X201, NULL, + (const bstring *)&be_const_str_lv_signal_bars, + (const bstring *)&be_const_str_delete_all_configs, NULL, - NULL, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, - (const bstring *)&be_const_str_start, - (const bstring *)&be_const_str__X2B, - (const bstring *)&be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, - (const bstring *)&be_const_str__drivers, - NULL, - (const bstring *)&be_const_str_solidified, - (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, - (const bstring *)&be_const_str_preinit, - (const bstring *)&be_const_str__X3E, - (const bstring *)&be_const_str__X2502d_X25s_X2502d, + (const bstring *)&be_const_str__cmd, + (const bstring *)&be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str_create_custom_widget, + (const bstring *)&be_const_str_font_embedded, + (const bstring *)&be_const_str_CFG_X3A_X20return_code_X3D_X25i, + (const bstring *)&be_const_str__X2E_X2E, + (const bstring *)&be_const_str_BUTTON_CONFIGURATION, + (const bstring *)&be_const_str_None, + (const bstring *)&be_const_str_json_fdump, + (const bstring *)&be_const_str_push_path, + (const bstring *)&be_const_str_area, + (const bstring *)&be_const_str_compress, + (const bstring *)&be_const_str_encrypt, + (const bstring *)&be_const_str__X2F_X2Eautoconf, + (const bstring *)&be_const_str_pin_mode, + (const bstring *)&be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, + (const bstring *)&be_const_str__X2Esize, + (const bstring *)&be_const_str_depower, + (const bstring *)&be_const_str__X2Elen, + (const bstring *)&be_const_str_lv_module_init, + (const bstring *)&be_const_str__ptr, + (const bstring *)&be_const_str__X2F_X3Frst_X3D, + (const bstring *)&be_const_str_local, + (const bstring *)&be_const_str_widget_dtor_cb, + (const bstring *)&be_const_str_run_bat, + (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, + (const bstring *)&be_const_str_allocated, + (const bstring *)&be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_reset, + (const bstring *)&be_const_str__X3C, + (const bstring *)&be_const_str_count, + (const bstring *)&be_const_str_bus, + (const bstring *)&be_const_str_fast_loop, + (const bstring *)&be_const_str_ctypes_bytes_dyn, + (const bstring *)&be_const_str_AudioOutput, + (const bstring *)&be_const_str_set_hue16sat, + (const bstring *)&be_const_str__X2Fac, + (const bstring *)&be_const_str__X2Ebec, + (const bstring *)&be_const_str__X28_X29, + (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, + (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, + (const bstring *)&be_const_str__X2Ep, + (const bstring *)&be_const_str_OpusDecoder, + (const bstring *)&be_const_str_erase, + (const bstring *)&be_const_str___lower__, + (const bstring *)&be_const_str_display, + (const bstring *)&be_const_str_clear_to, (const bstring *)&be_const_str_SERIAL_6N1, - (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, - (const bstring *)&be_const_str__lvgl, - (const bstring *)&be_const_str_sys, - (const bstring *)&be_const_str_finish, + (const bstring *)&be_const_str__persist_X2Ejson, + (const bstring *)&be_const_str_clock_icon, + (const bstring *)&be_const_str_name, + NULL, + (const bstring *)&be_const_str_int, + NULL, + (const bstring *)&be_const_str__end_transmission, + (const bstring *)&be_const_str_cb_event_closure, + (const bstring *)&be_const_str_WS2812, + (const bstring *)&be_const_str__X3D_X3C_X3E_X21, + NULL, + (const bstring *)&be_const_str_Trigger, + (const bstring *)&be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27, + (const bstring *)&be_const_str_get_object_from_ptr, + (const bstring *)&be_const_str_copy, + NULL, + NULL, + NULL, + (const bstring *)&be_const_str_signal_bars, + (const bstring *)&be_const_str_dirty, + (const bstring *)&be_const_str_RGB, + (const bstring *)&be_const_str_exec_cmd, + (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, + NULL, + (const bstring *)&be_const_str__X2Ew, + (const bstring *)&be_const_str__write, + (const bstring *)&be_const_str_AXP192, + (const bstring *)&be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, + NULL, + (const bstring *)&be_const_str__X21_X3D, + (const bstring *)&be_const_str__X25s_X2Eautoconf, + (const bstring *)&be_const_str__X23init_X2Ebat, + (const bstring *)&be_const_str_rounded, + (const bstring *)&be_const_str_widget_cb, + (const bstring *)&be_const_str_write_bit, + NULL, NULL, (const bstring *)&be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, - (const bstring *)&be_const_str_return, - (const bstring *)&be_const_str_set, - (const bstring *)&be_const_str_display, - (const bstring *)&be_const_str_AudioGenerator, - (const bstring *)&be_const_str_set_style_text_font, - (const bstring *)&be_const_str_min, - (const bstring *)&be_const_str_autorun, - (const bstring *)&be_const_str___lower__, - (const bstring *)&be_const_str_lv_signal_bars, - (const bstring *)&be_const_str__X22, - (const bstring *)&be_const_str_RGBCT, - (const bstring *)&be_const_str_isinstance, + (const bstring *)&be_const_str_get_width, + (const bstring *)&be_const_str_set_style_pad_all, + (const bstring *)&be_const_str__X23, + (const bstring *)&be_const_str_get, + (const bstring *)&be_const_str_draw_arc_dsc_init, + (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_skip, + (const bstring *)&be_const_str_animators, + (const bstring *)&be_const_str_AES_GCM, + (const bstring *)&be_const_str_widget_struct_default, + (const bstring *)&be_const_str_detect, + (const bstring *)&be_const_str_get_vbus_voltage, + (const bstring *)&be_const_str_matrix, + NULL, + (const bstring *)&be_const_str_kv, + (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, + (const bstring *)&be_const_str_False, + (const bstring *)&be_const_str_get_bri, + (const bstring *)&be_const_str_invalidate, + NULL, + NULL, + (const bstring *)&be_const_str__X23autoexec_X2Ebat, + (const bstring *)&be_const_str_web_send, + NULL, + (const bstring *)&be_const_str__X23display_X2Eini, + (const bstring *)&be_const_str_set_tasmota_logo, + (const bstring *)&be_const_str_lv_extra, + (const bstring *)&be_const_str_try_rule, + (const bstring *)&be_const_str_available, + (const bstring *)&be_const_str_load_templates, + (const bstring *)&be_const_str_button_pressed, + (const bstring *)&be_const_str_SERIAL_7N2, + (const bstring *)&be_const_str_set_auth, + (const bstring *)&be_const_str__X2E, + (const bstring *)&be_const_str__X3Clambda_X3E, + NULL, + (const bstring *)&be_const_str__request_from, + (const bstring *)&be_const_str_label, (const bstring *)&be_const_str__X23preinit_X2Ebe, - (const bstring *)&be_const_str_every_100ms, - (const bstring *)&be_const_str_except, - (const bstring *)&be_const_str_font_montserrat, + (const bstring *)&be_const_str_y1, + (const bstring *)&be_const_str_img, + (const bstring *)&be_const_str_file, + (const bstring *)&be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, + (const bstring *)&be_const_str__X3D_X3D, + (const bstring *)&be_const_str_AudioFileSource, + (const bstring *)&be_const_str_MD5, + (const bstring *)&be_const_str_setrange, + (const bstring *)&be_const_str_pixels_buffer, + (const bstring *)&be_const_str_code, + (const bstring *)&be_const_str_open, + (const bstring *)&be_const_str_OneWire, NULL, - (const bstring *)&be_const_str_cb_obj, - (const bstring *)&be_const_str_ctypes_bytes_dyn, - (const bstring *)&be_const_str__global_def, + (const bstring *)&be_const_str_EVENT_DRAW_PART_END, + (const bstring *)&be_const_str__X2Ep2, NULL, - (const bstring *)&be_const_str_resp_cmnd, + (const bstring *)&be_const_str_add_driver, + (const bstring *)&be_const_str_udp, + (const bstring *)&be_const_str_POST, + (const bstring *)&be_const_str_web_send_decimal, + (const bstring *)&be_const_str_load, + (const bstring *)&be_const_str_reapply, + (const bstring *)&be_const_str_read_bytes, + NULL, + NULL, + NULL, + (const bstring *)&be_const_str_elif, + (const bstring *)&be_const_str__X2Ebe, + (const bstring *)&be_const_str_ins_goto, + (const bstring *)&be_const_str_SERIAL_7E2, + (const bstring *)&be_const_str_content_send_style, + (const bstring *)&be_const_str_add_fast_loop, + (const bstring *)&be_const_str_EXTERNAL_I2S, + (const bstring *)&be_const_str_widget_struct_by_class, + NULL, + (const bstring *)&be_const_str_is_dirty, + (const bstring *)&be_const_str_strftime, + (const bstring *)&be_const_str_fromstring, (const bstring *)&be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_setbits, - (const bstring *)&be_const_str_atan2, - (const bstring *)&be_const_str_json_fdump_map, + (const bstring *)&be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, + (const bstring *)&be_const_str__X2502d_X25s_X2502d, + (const bstring *)&be_const_str_SERIAL_8E1, + (const bstring *)&be_const_str_alternate, + NULL, + (const bstring *)&be_const_str_every_second, + (const bstring *)&be_const_str_height_def, + NULL, + (const bstring *)&be_const_str__X21_X3D_X3D, + NULL, + (const bstring *)&be_const_str_for, + (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, + (const bstring *)&be_const_str_begin, + NULL, + (const bstring *)&be_const_str_add_header, + (const bstring *)&be_const_str_init, + (const bstring *)&be_const_str_clear, + (const bstring *)&be_const_str__X23autoexec_X2Ebe, + (const bstring *)&be_const_str_INTERNAL_PDM, + (const bstring *)&be_const_str_INTERNAL_DAC, + (const bstring *)&be_const_str__class, + (const bstring *)&be_const_str_EC_C25519, + (const bstring *)&be_const_str_init_draw_arc_dsc, + (const bstring *)&be_const_str_digital_write, + (const bstring *)&be_const_str_round_start, + NULL, + (const bstring *)&be_const_str_cos, + (const bstring *)&be_const_str_set_timer, + (const bstring *)&be_const_str_discover, (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - (const bstring *)&be_const_str_set_time, + (const bstring *)&be_const_str_exp, + (const bstring *)&be_const_str__X2C, + (const bstring *)&be_const_str_CT, NULL, - (const bstring *)&be_const_str_pixel_count, + (const bstring *)&be_const_str_every_250ms, + (const bstring *)&be_const_str_light, + (const bstring *)&be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_concat, + (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, + (const bstring *)&be_const_str_create_segment, + (const bstring *)&be_const_str_bri, NULL, - (const bstring *)&be_const_str_editable, - (const bstring *)&be_const_str_None, - (const bstring *)&be_const_str_target, + (const bstring *)&be_const_str_PART_MAIN, + (const bstring *)&be_const_str_acos, + (const bstring *)&be_const_str__X2Eautoconf, + (const bstring *)&be_const_str_remove_timer, + (const bstring *)&be_const_str_eth, + (const bstring *)&be_const_str_SERIAL_5E1, + (const bstring *)&be_const_str__X3F, + (const bstring *)&be_const_str_day, + (const bstring *)&be_const_str__X5D, + (const bstring *)&be_const_str_energy_struct, + (const bstring *)&be_const_str_register_obj, + (const bstring *)&be_const_str_serial, + (const bstring *)&be_const_str_cb_obj, + NULL, + (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, + (const bstring *)&be_const_str_unknown_X20instruction, + (const bstring *)&be_const_str__read, + (const bstring *)&be_const_str_lv_obj, + (const bstring *)&be_const_str_get_temp, + (const bstring *)&be_const_str_ctypes_bytes, + (const bstring *)&be_const_str__X2B, + NULL, + NULL, + (const bstring *)&be_const_str_search, + (const bstring *)&be_const_str_instance_size, + (const bstring *)&be_const_str_True, + NULL, + NULL, + (const bstring *)&be_const_str_cmd_res, + (const bstring *)&be_const_str_instance_X20required, + (const bstring *)&be_const_str__begin_transmission, + (const bstring *)&be_const_str_add_light, + (const bstring *)&be_const_str_CFG_X3A_X20running_X20, + (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, + (const bstring *)&be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map, + (const bstring *)&be_const_str___upper__, + (const bstring *)&be_const_str_classname, + (const bstring *)&be_const_str__X3A, + (const bstring *)&be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function, + (const bstring *)&be_const_str_add_event_cb, + (const bstring *)&be_const_str_SERIAL_6O1, + (const bstring *)&be_const_str_add_cmd, + (const bstring *)&be_const_str_CFG_X3A_X20ran_X20_X20, + (const bstring *)&be_const_str_log, + (const bstring *)&be_const_str_every_50ms, + (const bstring *)&be_const_str_tostring, + NULL, + (const bstring *)&be_const_str_get_battery_chargin_status, + (const bstring *)&be_const_str_ismethod, + (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, + (const bstring *)&be_const_str_register_button_encoder, + NULL, + (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, + NULL, + (const bstring *)&be_const_str_atleast1, + (const bstring *)&be_const_str_SERIAL_7E1, + (const bstring *)&be_const_str_COLOR_WHITE, + (const bstring *)&be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, + (const bstring *)&be_const_str_obj, + (const bstring *)&be_const_str_groups, + (const bstring *)&be_const_str_EVENT_DRAW_PART_BEGIN, + (const bstring *)&be_const_str_, + NULL, + (const bstring *)&be_const_str_strip, + (const bstring *)&be_const_str_imin, + (const bstring *)&be_const_str__X22, + (const bstring *)&be_const_str_decrypt, + (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, + (const bstring *)&be_const_str_SERIAL_5N1, + NULL, + NULL, + (const bstring *)&be_const_str_set_rgb, + (const bstring *)&be_const_str_add, + NULL, + (const bstring *)&be_const_str_connection_error, + (const bstring *)&be_const_str_set_style_bg_color, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + NULL, + (const bstring *)&be_const_str_SERIAL_7O2, + (const bstring *)&be_const_str_json, + (const bstring *)&be_const_str_decompress, + (const bstring *)&be_const_str_char, + (const bstring *)&be_const_str__X3D, + NULL, + (const bstring *)&be_const_str_AudioOutputI2S, + (const bstring *)&be_const_str_read_sensors, + (const bstring *)&be_const_str__X2Flights_X2F, + (const bstring *)&be_const_str_loop, + (const bstring *)&be_const_str_HTTP_GET, + (const bstring *)&be_const_str_hue, + (const bstring *)&be_const_str_lv_solidified, + (const bstring *)&be_const_str_get_bat_current, + NULL, + (const bstring *)&be_const_str__X0A, + (const bstring *)&be_const_str_SERIAL_7N1, (const bstring *)&be_const_str_arg_name, - NULL + (const bstring *)&be_const_str_SERIAL_8O1, + (const bstring *)&be_const_str_get_power, + (const bstring *)&be_const_str_nan, + (const bstring *)&be_const_str_assert, + (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, + (const bstring *)&be_const_str_b, + NULL, + NULL, + (const bstring *)&be_const_str_page_autoconf_ctl, + (const bstring *)&be_const_str_internal_error, + (const bstring *)&be_const_str_rtc, + (const bstring *)&be_const_str_content_stop, + (const bstring *)&be_const_str_lv_event, + (const bstring *)&be_const_str_redirect, + (const bstring *)&be_const_str_OPTION_A, + (const bstring *)&be_const_str__available, + (const bstring *)&be_const_str_before_del, + (const bstring *)&be_const_str_byte, + (const bstring *)&be_const_str_number, + NULL, + (const bstring *)&be_const_str__X2Ep1, + (const bstring *)&be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range, + (const bstring *)&be_const_str_class_init_obj, + NULL, + (const bstring *)&be_const_str_AudioGeneratorMP3, + (const bstring *)&be_const_str_set_ldo_enable, + (const bstring *)&be_const_str__X3C_X3D, + (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, + (const bstring *)&be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, + (const bstring *)&be_const_str_connect, + (const bstring *)&be_const_str_CFG_X3A_X20removing_X20autoconf_X20files, + (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, + (const bstring *)&be_const_str_hue_ntv, + (const bstring *)&be_const_str__filename, + (const bstring *)&be_const_str_RELAY, + (const bstring *)&be_const_str_list_handlers, + (const bstring *)&be_const_str__X2Fstate_X2F, + (const bstring *)&be_const_str_abs, + (const bstring *)&be_const_str_read12, + (const bstring *)&be_const_str_base_class, + (const bstring *)&be_const_str_isnan, + (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, + (const bstring *)&be_const_str_closure, + (const bstring *)&be_const_str_constructor_cb, + NULL, + (const bstring *)&be_const_str__X20, + (const bstring *)&be_const_str_nil, + (const bstring *)&be_const_str_json_fdump_map, + (const bstring *)&be_const_str_debug, + (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str_SERIAL_6O2, + (const bstring *)&be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_get_free_heap, + (const bstring *)&be_const_str_cb, + (const bstring *)&be_const_str__lvgl, + (const bstring *)&be_const_str_exec_rules, + (const bstring *)&be_const_str_web_add_config_button, + (const bstring *)&be_const_str_Unknown_X20command, + (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, + NULL, + (const bstring *)&be_const_str__splash, + (const bstring *)&be_const_str_delay, + (const bstring *)&be_const_str_draw_ctx, + (const bstring *)&be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E, + (const bstring *)&be_const_str_ins_time }; static const struct bconststrtab m_const_string_table = { - .size = 427, - .count = 878, + .size = 442, + .count = 907, .table = m_string_table }; diff --git a/lib/libesp32/berry/generate/be_fixed_display.h b/lib/libesp32/berry/generate/be_fixed_display.h index beb695b4a..673f8fe24 100644 --- a/lib/libesp32/berry/generate/be_fixed_display.h +++ b/lib/libesp32/berry/generate/be_fixed_display.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(m_libdisplay_map) { - { be_const_key(touch_update, -1), be_const_ctype_func(be_ntv_display_touch_update) }, - { be_const_key(driver_name, 2), be_const_ctype_func(be_ntv_display_driver_name) }, + { be_const_key(start, -1), be_const_func(be_ntv_display_start) }, + { be_const_key(started, 0), be_const_ctype_func(be_ntv_display_started) }, + { be_const_key(driver_name, -1), be_const_ctype_func(be_ntv_display_driver_name) }, + { be_const_key(touch_update, 2), be_const_ctype_func(be_ntv_display_touch_update) }, { be_const_key(dimmer, -1), be_const_func(be_ntv_display_dimmer) }, - { be_const_key(start, 1), be_const_func(be_ntv_display_start) }, }; static be_define_const_map( m_libdisplay_map, - 4 + 5 ); static be_define_const_module( diff --git a/lib/libesp32/berry/generate/be_fixed_lv_tasmota.h b/lib/libesp32/berry/generate/be_fixed_lv_tasmota.h index d2b1e2467..d2d1f980f 100644 --- a/lib/libesp32/berry/generate/be_fixed_lv_tasmota.h +++ b/lib/libesp32/berry/generate/be_fixed_lv_tasmota.h @@ -1,21 +1,24 @@ #include "be_constobj.h" static be_define_const_map_slots(m_liblv_tasmota_map) { + { be_const_key(load_freetype_font, -1), be_const_func(lv0_load_freetype_font) }, + { be_const_key(seg7_font, -1), be_const_func(lv0_load_seg7_font) }, + { be_const_key(screenshot, 11), be_const_func(lv0_screenshot) }, + { be_const_key(font_seg7, 1), be_const_func(lv0_load_seg7_font) }, + { be_const_key(splash_init, 0), be_const_closure(lv_tasmota_splash_init_closure) }, { be_const_key(register_button_encoder, -1), be_const_func(lv0_register_button_encoder) }, - { be_const_key(screenshot, 6), be_const_func(lv0_screenshot) }, - { be_const_key(load_freetype_font, 8), be_const_func(lv0_load_freetype_font) }, + { be_const_key(init, 7), be_const_closure(lv_tasmota_init_closure) }, + { be_const_key(splash_remove, -1), be_const_closure(lv_tasmota_splash_remove_closure) }, + { be_const_key(start, -1), be_const_func(lv0_start) }, + { be_const_key(font_montserrat, -1), be_const_func(lv0_load_montserrat_font) }, { be_const_key(font_embedded, -1), be_const_func(lv0_load_font_embedded) }, { be_const_key(montserrat_font, -1), be_const_func(lv0_load_montserrat_font) }, - { be_const_key(init, 7), be_const_closure(lv_tasmota_init_closure) }, - { be_const_key(start, -1), be_const_func(lv0_start) }, - { be_const_key(font_seg7, -1), be_const_func(lv0_load_seg7_font) }, - { be_const_key(font_montserrat, -1), be_const_func(lv0_load_montserrat_font) }, - { be_const_key(seg7_font, -1), be_const_func(lv0_load_seg7_font) }, + { be_const_key(splash, 10), be_const_closure(lv_tasmota_splash_closure) }, }; static be_define_const_map( m_liblv_tasmota_map, - 10 + 13 ); static be_define_const_module( diff --git a/lib/libesp32/berry_tasmota/src/be_display_lib.cpp b/lib/libesp32/berry_tasmota/src/be_display_lib.cpp index 71718b7ce..ca8b1799f 100644 --- a/lib/libesp32/berry_tasmota/src/be_display_lib.cpp +++ b/lib/libesp32/berry_tasmota/src/be_display_lib.cpp @@ -12,6 +12,8 @@ extern int be_ntv_display_start(bvm *vm); extern int be_ntv_display_dimmer(bvm *vm); +extern bool be_ntv_display_started(void); + BE_FUNC_CTYPE_DECLARE(be_ntv_display_started, "b", "") extern void be_ntv_display_touch_update(int32_t touches, int32_t raw_x, int32_t raw_y, int32_t gesture); BE_FUNC_CTYPE_DECLARE(be_ntv_display_touch_update, "", "iiii") extern const char* be_ntv_display_driver_name(void); @@ -20,6 +22,7 @@ extern const char* be_ntv_display_driver_name(void); /* @const_object_info_begin module display (scope: global) { start, func(be_ntv_display_start) + started, ctype_func(be_ntv_display_started) dimmer, func(be_ntv_display_dimmer) touch_update, ctype_func(be_ntv_display_touch_update) driver_name, ctype_func(be_ntv_display_driver_name) diff --git a/lib/libesp32/berry_tasmota/src/be_lv_tasmota_lib.c b/lib/libesp32/berry_tasmota/src/be_lv_tasmota_lib.c index afd8ba098..c2f2a9139 100644 --- a/lib/libesp32/berry_tasmota/src/be_lv_tasmota_lib.c +++ b/lib/libesp32/berry_tasmota/src/be_lv_tasmota_lib.c @@ -17,12 +17,412 @@ extern int lv0_load_font_embedded(bvm *vm); extern int lv0_screenshot(bvm *vm); extern int lv0_load_freetype_font(bvm *vm); +/******************************************************************** +** Solidified function: splash_remove +********************************************************************/ +be_local_closure(lv_tasmota_splash_remove, /* name */ + be_nested_proto( + 3, /* nstack */ + 0, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str(lv), + /* K1 */ be_nested_str(_splash), + /* K2 */ be_nested_str(del), + }), + &be_const_str_splash_remove, + &be_const_str_solidified, + ( &(const binstruction[ 9]) { /* code */ + 0xB8020000, // 0000 GETNGBL R0 K0 + 0x88000101, // 0001 GETMBR R0 R0 K1 + 0x78020004, // 0002 JMPF R0 #0008 + 0xB8060000, // 0003 GETNGBL R1 K0 + 0x4C080000, // 0004 LDNIL R2 + 0x90060202, // 0005 SETMBR R1 K1 R2 + 0x8C040102, // 0006 GETMET R1 R0 K2 + 0x7C040200, // 0007 CALL R1 1 + 0x80000000, // 0008 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(splash_runner_init, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(tasmota), + /* K1 */ be_nested_str(add_driver), + }), + &be_const_str_init, + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x80000000, // 0004 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: display +********************************************************************/ +be_local_closure(splash_runner_display, /* name */ + be_nested_proto( + 9, /* nstack */ + 5, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_str(display), + /* K1 */ be_nested_str(dim), + /* K2 */ be_nested_str(started), + /* K3 */ be_nested_str(tasmota), + /* K4 */ be_nested_str(remove_driver), + /* K5 */ be_nested_str(lv), + /* K6 */ be_nested_str(splash), + }), + &be_const_str_display, + &be_const_str_solidified, + ( &(const binstruction[14]) { /* code */ + 0xA4160000, // 0000 IMPORT R5 K0 + 0x1C180301, // 0001 EQ R6 R1 K1 + 0x781A0009, // 0002 JMPF R6 #000D + 0x8C180B02, // 0003 GETMET R6 R5 K2 + 0x7C180200, // 0004 CALL R6 1 + 0x781A0006, // 0005 JMPF R6 #000D + 0xB81A0600, // 0006 GETNGBL R6 K3 + 0x8C180D04, // 0007 GETMET R6 R6 K4 + 0x5C200000, // 0008 MOVE R8 R0 + 0x7C180400, // 0009 CALL R6 2 + 0xB81A0A00, // 000A GETNGBL R6 K5 + 0x8C180D06, // 000B GETMET R6 R6 K6 + 0x7C180200, // 000C CALL R6 1 + 0x80000000, // 000D RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: splash_runner +********************************************************************/ +be_local_class(splash_runner, + 0, + NULL, + be_nested_map(2, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key(display, -1), be_const_closure(splash_runner_display_closure) }, + { be_const_key(init, 0), be_const_closure(splash_runner_init_closure) }, + })), + be_str_literal("splash_runner") +); + +/******************************************************************** +** Solidified function: splash_init +********************************************************************/ +be_local_closure(lv_tasmota_splash_init, /* name */ + be_nested_proto( + 3, /* nstack */ + 0, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_str(display), + /* K1 */ be_nested_str(started), + /* K2 */ be_nested_str(lv), + /* K3 */ be_nested_str(splash), + /* K4 */ be_const_class(be_class_splash_runner), + }), + &be_const_str_splash_init, + &be_const_str_solidified, + ( &(const binstruction[13]) { /* code */ + 0xA4020000, // 0000 IMPORT R0 K0 + 0x8C040101, // 0001 GETMET R1 R0 K1 + 0x7C040200, // 0002 CALL R1 1 + 0x78060003, // 0003 JMPF R1 #0008 + 0xB8060400, // 0004 GETNGBL R1 K2 + 0x8C040303, // 0005 GETMET R1 R1 K3 + 0x7C040200, // 0006 CALL R1 1 + 0x70020003, // 0007 JMP #000C + 0x58040004, // 0008 LDCONST R1 K4 + 0xB4000004, // 0009 CLASS K4 + 0x5C080200, // 000A MOVE R2 R1 + 0x7C080000, // 000B CALL R2 0 + 0x80000000, // 000C RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: splash +********************************************************************/ +be_local_closure(lv_tasmota_splash, /* name */ + be_nested_proto( + 14, /* nstack */ + 0, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[42]) { /* constants */ + /* K0 */ be_nested_str(display), + /* K1 */ be_nested_str(started), + /* K2 */ be_nested_str(lv), + /* K3 */ be_nested_str(start), + /* K4 */ be_nested_str(obj), + /* K5 */ be_nested_str(scr_act), + /* K6 */ be_nested_str(montserrat_font), + /* K7 */ be_nested_str(color), + /* K8 */ be_nested_str(COLOR_WHITE), + /* K9 */ be_nested_str(set_style_bg_color), + /* K10 */ be_const_int(0), + /* K11 */ be_nested_str(set_style_radius), + /* K12 */ be_nested_str(set_style_pad_all), + /* K13 */ be_nested_str(set_style_border_width), + /* K14 */ be_nested_str(set_size), + /* K15 */ be_nested_str(pct), + /* K16 */ be_nested_str(refr_pos), + /* K17 */ be_nested_str(refr_size), + /* K18 */ be_nested_str(set_user_data), + /* K19 */ be_const_int(1399876712), + /* K20 */ be_nested_str(img), + /* K21 */ be_nested_str(set_tasmota_logo), + /* K22 */ be_nested_str(set_zoom), + /* K23 */ be_nested_str(set_style_img_recolor_opa), + /* K24 */ be_nested_str(set_style_img_recolor), + /* K25 */ be_nested_str(set_align), + /* K26 */ be_nested_str(ALIGN_LEFT_MID), + /* K27 */ be_nested_str(set_x), + /* K28 */ be_nested_str(label), + /* K29 */ be_nested_str(set_style_text_color), + /* K30 */ be_nested_str(set_text), + /* K31 */ be_nested_str(TASMOTA), + /* K32 */ be_nested_str(get_hor_res), + /* K33 */ be_nested_str(set_style_text_font), + /* K34 */ be_nested_str(driver_name), + /* K35 */ be_nested_str(ALIGN_BOTTOM_MID), + /* K36 */ be_const_int(16777215), + /* K37 */ be_nested_str(refr_now), + /* K38 */ be_nested_str(_splash), + /* K39 */ be_nested_str(tasmota), + /* K40 */ be_nested_str(set_timer), + /* K41 */ be_nested_str(splash_remove), + }), + &be_const_str_splash, + &be_const_str_solidified, + ( &(const binstruction[166]) { /* code */ + 0xA4020000, // 0000 IMPORT R0 K0 + 0x8C040101, // 0001 GETMET R1 R0 K1 + 0x7C040200, // 0002 CALL R1 1 + 0x74060000, // 0003 JMPT R1 #0005 + 0x80000200, // 0004 RET 0 + 0xB8060400, // 0005 GETNGBL R1 K2 + 0x8C040303, // 0006 GETMET R1 R1 K3 + 0x7C040200, // 0007 CALL R1 1 + 0xB8060400, // 0008 GETNGBL R1 K2 + 0x8C040304, // 0009 GETMET R1 R1 K4 + 0xB80E0400, // 000A GETNGBL R3 K2 + 0x8C0C0705, // 000B GETMET R3 R3 K5 + 0x7C0C0200, // 000C CALL R3 1 + 0x7C040400, // 000D CALL R1 2 + 0xB80A0400, // 000E GETNGBL R2 K2 + 0x8C080506, // 000F GETMET R2 R2 K6 + 0x5412001B, // 0010 LDINT R4 28 + 0x7C080400, // 0011 CALL R2 2 + 0xB80E0400, // 0012 GETNGBL R3 K2 + 0x8C0C0706, // 0013 GETMET R3 R3 K6 + 0x54160013, // 0014 LDINT R5 20 + 0x7C0C0400, // 0015 CALL R3 2 + 0xB8120400, // 0016 GETNGBL R4 K2 + 0x8C100907, // 0017 GETMET R4 R4 K7 + 0xB81A0400, // 0018 GETNGBL R6 K2 + 0x88180D08, // 0019 GETMBR R6 R6 K8 + 0x7C100400, // 001A CALL R4 2 + 0x8C140309, // 001B GETMET R5 R1 K9 + 0xB81E0400, // 001C GETNGBL R7 K2 + 0x8C1C0F07, // 001D GETMET R7 R7 K7 + 0x54260065, // 001E LDINT R9 102 + 0x7C1C0400, // 001F CALL R7 2 + 0x5820000A, // 0020 LDCONST R8 K10 + 0x7C140600, // 0021 CALL R5 3 + 0x8C14030B, // 0022 GETMET R5 R1 K11 + 0x581C000A, // 0023 LDCONST R7 K10 + 0x5820000A, // 0024 LDCONST R8 K10 + 0x7C140600, // 0025 CALL R5 3 + 0x8C14030C, // 0026 GETMET R5 R1 K12 + 0x581C000A, // 0027 LDCONST R7 K10 + 0x5820000A, // 0028 LDCONST R8 K10 + 0x7C140600, // 0029 CALL R5 3 + 0x8C14030D, // 002A GETMET R5 R1 K13 + 0x581C000A, // 002B LDCONST R7 K10 + 0x5820000A, // 002C LDCONST R8 K10 + 0x7C140600, // 002D CALL R5 3 + 0x8C14030E, // 002E GETMET R5 R1 K14 + 0xB81E0400, // 002F GETNGBL R7 K2 + 0x8C1C0F0F, // 0030 GETMET R7 R7 K15 + 0x54260063, // 0031 LDINT R9 100 + 0x7C1C0400, // 0032 CALL R7 2 + 0xB8220400, // 0033 GETNGBL R8 K2 + 0x8C20110F, // 0034 GETMET R8 R8 K15 + 0x542A0063, // 0035 LDINT R10 100 + 0x7C200400, // 0036 CALL R8 2 + 0x7C140600, // 0037 CALL R5 3 + 0x8C140310, // 0038 GETMET R5 R1 K16 + 0x7C140200, // 0039 CALL R5 1 + 0x8C140311, // 003A GETMET R5 R1 K17 + 0x7C140200, // 003B CALL R5 1 + 0x8C140312, // 003C GETMET R5 R1 K18 + 0x581C0013, // 003D LDCONST R7 K19 + 0x7C140400, // 003E CALL R5 2 + 0xB8160400, // 003F GETNGBL R5 K2 + 0x8C140B14, // 0040 GETMET R5 R5 K20 + 0x5C1C0200, // 0041 MOVE R7 R1 + 0x7C140400, // 0042 CALL R5 2 + 0x8C180B15, // 0043 GETMET R6 R5 K21 + 0x7C180200, // 0044 CALL R6 1 + 0x8C180B16, // 0045 GETMET R6 R5 K22 + 0x54220095, // 0046 LDINT R8 150 + 0x7C180400, // 0047 CALL R6 2 + 0x8C180B17, // 0048 GETMET R6 R5 K23 + 0x542200FE, // 0049 LDINT R8 255 + 0x5824000A, // 004A LDCONST R9 K10 + 0x7C180600, // 004B CALL R6 3 + 0x8C180B18, // 004C GETMET R6 R5 K24 + 0x5C200800, // 004D MOVE R8 R4 + 0x5824000A, // 004E LDCONST R9 K10 + 0x7C180600, // 004F CALL R6 3 + 0x8C180B19, // 0050 GETMET R6 R5 K25 + 0xB8220400, // 0051 GETNGBL R8 K2 + 0x8820111A, // 0052 GETMBR R8 R8 K26 + 0x7C180400, // 0053 CALL R6 2 + 0x8C180B1B, // 0054 GETMET R6 R5 K27 + 0x5421FFF3, // 0055 LDINT R8 -12 + 0x7C180400, // 0056 CALL R6 2 + 0xB81A0400, // 0057 GETNGBL R6 K2 + 0x8C180D1C, // 0058 GETMET R6 R6 K28 + 0x5C200200, // 0059 MOVE R8 R1 + 0x7C180400, // 005A CALL R6 2 + 0x8C1C0D1D, // 005B GETMET R7 R6 K29 + 0x5C240800, // 005C MOVE R9 R4 + 0x5828000A, // 005D LDCONST R10 K10 + 0x7C1C0600, // 005E CALL R7 3 + 0x8C1C0D1E, // 005F GETMET R7 R6 K30 + 0x5824001F, // 0060 LDCONST R9 K31 + 0x7C1C0400, // 0061 CALL R7 2 + 0xB81E0400, // 0062 GETNGBL R7 K2 + 0x8C1C0F20, // 0063 GETMET R7 R7 K32 + 0x7C1C0200, // 0064 CALL R7 1 + 0x542200C7, // 0065 LDINT R8 200 + 0x281C0E08, // 0066 GE R7 R7 R8 + 0x781E0007, // 0067 JMPF R7 #0070 + 0x4C1C0000, // 0068 LDNIL R7 + 0x201C0407, // 0069 NE R7 R2 R7 + 0x781E0003, // 006A JMPF R7 #006F + 0x8C1C0D21, // 006B GETMET R7 R6 K33 + 0x5C240400, // 006C MOVE R9 R2 + 0x5828000A, // 006D LDCONST R10 K10 + 0x7C1C0600, // 006E CALL R7 3 + 0x70020006, // 006F JMP #0077 + 0x4C1C0000, // 0070 LDNIL R7 + 0x201C0607, // 0071 NE R7 R3 R7 + 0x781E0003, // 0072 JMPF R7 #0077 + 0x8C1C0D21, // 0073 GETMET R7 R6 K33 + 0x5C240600, // 0074 MOVE R9 R3 + 0x5828000A, // 0075 LDCONST R10 K10 + 0x7C1C0600, // 0076 CALL R7 3 + 0x8C1C0D19, // 0077 GETMET R7 R6 K25 + 0xB8260400, // 0078 GETNGBL R9 K2 + 0x8824131A, // 0079 GETMBR R9 R9 K26 + 0x7C1C0400, // 007A CALL R7 2 + 0x8C1C0D1B, // 007B GETMET R7 R6 K27 + 0x54260029, // 007C LDINT R9 42 + 0x7C1C0400, // 007D CALL R7 2 + 0x8C1C0122, // 007E GETMET R7 R0 K34 + 0x7C1C0200, // 007F CALL R7 1 + 0x4C200000, // 0080 LDNIL R8 + 0x6024000C, // 0081 GETGBL R9 G12 + 0x5C280E00, // 0082 MOVE R10 R7 + 0x7C240200, // 0083 CALL R9 1 + 0x2424130A, // 0084 GT R9 R9 K10 + 0x78260012, // 0085 JMPF R9 #0099 + 0xB8260400, // 0086 GETNGBL R9 K2 + 0x8C24131C, // 0087 GETMET R9 R9 K28 + 0x5C2C0200, // 0088 MOVE R11 R1 + 0x7C240400, // 0089 CALL R9 2 + 0x5C201200, // 008A MOVE R8 R9 + 0x8C241119, // 008B GETMET R9 R8 K25 + 0xB82E0400, // 008C GETNGBL R11 K2 + 0x882C1723, // 008D GETMBR R11 R11 K35 + 0x7C240400, // 008E CALL R9 2 + 0x8C24111D, // 008F GETMET R9 R8 K29 + 0xB82E0400, // 0090 GETNGBL R11 K2 + 0x8C2C1707, // 0091 GETMET R11 R11 K7 + 0x58340024, // 0092 LDCONST R13 K36 + 0x7C2C0400, // 0093 CALL R11 2 + 0x5830000A, // 0094 LDCONST R12 K10 + 0x7C240600, // 0095 CALL R9 3 + 0x8C24111E, // 0096 GETMET R9 R8 K30 + 0x5C2C0E00, // 0097 MOVE R11 R7 + 0x7C240400, // 0098 CALL R9 2 + 0xB8260400, // 0099 GETNGBL R9 K2 + 0x8C241325, // 009A GETMET R9 R9 K37 + 0x582C000A, // 009B LDCONST R11 K10 + 0x7C240400, // 009C CALL R9 2 + 0xB8260400, // 009D GETNGBL R9 K2 + 0x90264C01, // 009E SETMBR R9 K38 R1 + 0xB8264E00, // 009F GETNGBL R9 K39 + 0x8C241328, // 00A0 GETMET R9 R9 K40 + 0x542E1387, // 00A1 LDINT R11 5000 + 0xB8320400, // 00A2 GETNGBL R12 K2 + 0x88301929, // 00A3 GETMBR R12 R12 K41 + 0x7C240600, // 00A4 CALL R9 3 + 0x80000000, // 00A5 RET 0 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: init ********************************************************************/ be_local_closure(lv_tasmota_init, /* name */ be_nested_proto( - 3, /* nstack */ + 5, /* nstack */ 1, /* argc */ 0, /* varg */ 0, /* has upvals */ @@ -30,70 +430,93 @@ be_local_closure(lv_tasmota_init, /* name */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[24]) { /* constants */ + ( &(const bvalue[31]) { /* constants */ /* K0 */ be_nested_str(lv), /* K1 */ be_nested_str(start), - /* K2 */ be_nested_str(font_montserrat), - /* K3 */ be_nested_str(montserrat_font), - /* K4 */ be_nested_str(font_seg7), - /* K5 */ be_nested_str(seg7_font), - /* K6 */ be_nested_str(font_embedded), - /* K7 */ be_nested_str(load_freetype_font), - /* K8 */ be_nested_str(register_button_encoder), - /* K9 */ be_nested_str(screenshot), - /* K10 */ be_nested_str(clock_icon), - /* K11 */ be_nested_str(lv_clock_icon), - /* K12 */ be_nested_str(signal_arcs), - /* K13 */ be_nested_str(lv_signal_arcs), - /* K14 */ be_nested_str(signal_bars), - /* K15 */ be_nested_str(lv_signal_bars), - /* K16 */ be_nested_str(wifi_arcs_icon), - /* K17 */ be_nested_str(lv_wifi_arcs_icon), - /* K18 */ be_nested_str(wifi_arcs), - /* K19 */ be_nested_str(lv_wifi_arcs), - /* K20 */ be_nested_str(wifi_bars_icon), - /* K21 */ be_nested_str(lv_wifi_bars_icon), - /* K22 */ be_nested_str(wifi_bars), - /* K23 */ be_nested_str(lv_wifi_bars), + /* K2 */ be_nested_str(splash_init), + /* K3 */ be_nested_str(splash_remove), + /* K4 */ be_nested_str(splash), + /* K5 */ be_nested_str(_splash), + /* K6 */ be_nested_str(font_montserrat), + /* K7 */ be_nested_str(montserrat_font), + /* K8 */ be_nested_str(font_seg7), + /* K9 */ be_nested_str(seg7_font), + /* K10 */ be_nested_str(font_embedded), + /* K11 */ be_nested_str(load_freetype_font), + /* K12 */ be_nested_str(register_button_encoder), + /* K13 */ be_nested_str(screenshot), + /* K14 */ be_nested_str(clock_icon), + /* K15 */ be_nested_str(lv_clock_icon), + /* K16 */ be_nested_str(signal_arcs), + /* K17 */ be_nested_str(lv_signal_arcs), + /* K18 */ be_nested_str(signal_bars), + /* K19 */ be_nested_str(lv_signal_bars), + /* K20 */ be_nested_str(wifi_arcs_icon), + /* K21 */ be_nested_str(lv_wifi_arcs_icon), + /* K22 */ be_nested_str(wifi_arcs), + /* K23 */ be_nested_str(lv_wifi_arcs), + /* K24 */ be_nested_str(wifi_bars_icon), + /* K25 */ be_nested_str(lv_wifi_bars_icon), + /* K26 */ be_nested_str(wifi_bars), + /* K27 */ be_nested_str(lv_wifi_bars), + /* K28 */ be_nested_str(tasmota), + /* K29 */ be_nested_str(get_option), + /* K30 */ be_const_int(0), }), &be_const_str_init, &be_const_str_solidified, - ( &(const binstruction[35]) { /* code */ + ( &(const binstruction[51]) { /* code */ 0xA4060000, // 0000 IMPORT R1 K0 0x88080101, // 0001 GETMBR R2 R0 K1 0x90060202, // 0002 SETMBR R1 K1 R2 0x88080102, // 0003 GETMBR R2 R0 K2 0x90060402, // 0004 SETMBR R1 K2 R2 - 0x88080102, // 0005 GETMBR R2 R0 K2 + 0x88080103, // 0005 GETMBR R2 R0 K3 0x90060602, // 0006 SETMBR R1 K3 R2 0x88080104, // 0007 GETMBR R2 R0 K4 0x90060802, // 0008 SETMBR R1 K4 R2 - 0x88080104, // 0009 GETMBR R2 R0 K4 + 0x4C080000, // 0009 LDNIL R2 0x90060A02, // 000A SETMBR R1 K5 R2 0x88080106, // 000B GETMBR R2 R0 K6 0x90060C02, // 000C SETMBR R1 K6 R2 - 0x88080107, // 000D GETMBR R2 R0 K7 + 0x88080106, // 000D GETMBR R2 R0 K6 0x90060E02, // 000E SETMBR R1 K7 R2 0x88080108, // 000F GETMBR R2 R0 K8 0x90061002, // 0010 SETMBR R1 K8 R2 - 0x88080109, // 0011 GETMBR R2 R0 K9 + 0x88080108, // 0011 GETMBR R2 R0 K8 0x90061202, // 0012 SETMBR R1 K9 R2 - 0xB80A1600, // 0013 GETNGBL R2 K11 + 0x8808010A, // 0013 GETMBR R2 R0 K10 0x90061402, // 0014 SETMBR R1 K10 R2 - 0xB80A1A00, // 0015 GETNGBL R2 K13 - 0x90061802, // 0016 SETMBR R1 K12 R2 - 0xB80A1E00, // 0017 GETNGBL R2 K15 - 0x90061C02, // 0018 SETMBR R1 K14 R2 - 0xB80A2200, // 0019 GETNGBL R2 K17 - 0x90062002, // 001A SETMBR R1 K16 R2 - 0xB80A2600, // 001B GETNGBL R2 K19 - 0x90062402, // 001C SETMBR R1 K18 R2 - 0xB80A2A00, // 001D GETNGBL R2 K21 - 0x90062802, // 001E SETMBR R1 K20 R2 - 0xB80A2E00, // 001F GETNGBL R2 K23 - 0x90062C02, // 0020 SETMBR R1 K22 R2 - 0x4C080000, // 0021 LDNIL R2 - 0x80040400, // 0022 RET 1 R2 + 0x8808010B, // 0015 GETMBR R2 R0 K11 + 0x90061602, // 0016 SETMBR R1 K11 R2 + 0x8808010C, // 0017 GETMBR R2 R0 K12 + 0x90061802, // 0018 SETMBR R1 K12 R2 + 0x8808010D, // 0019 GETMBR R2 R0 K13 + 0x90061A02, // 001A SETMBR R1 K13 R2 + 0xB80A1E00, // 001B GETNGBL R2 K15 + 0x90061C02, // 001C SETMBR R1 K14 R2 + 0xB80A2200, // 001D GETNGBL R2 K17 + 0x90062002, // 001E SETMBR R1 K16 R2 + 0xB80A2600, // 001F GETNGBL R2 K19 + 0x90062402, // 0020 SETMBR R1 K18 R2 + 0xB80A2A00, // 0021 GETNGBL R2 K21 + 0x90062802, // 0022 SETMBR R1 K20 R2 + 0xB80A2E00, // 0023 GETNGBL R2 K23 + 0x90062C02, // 0024 SETMBR R1 K22 R2 + 0xB80A3200, // 0025 GETNGBL R2 K25 + 0x90063002, // 0026 SETMBR R1 K24 R2 + 0xB80A3600, // 0027 GETNGBL R2 K27 + 0x90063402, // 0028 SETMBR R1 K26 R2 + 0xB80A3800, // 0029 GETNGBL R2 K28 + 0x8C08051D, // 002A GETMET R2 R2 K29 + 0x54120086, // 002B LDINT R4 135 + 0x7C080400, // 002C CALL R2 2 + 0x1C08051E, // 002D EQ R2 R2 K30 + 0x780A0001, // 002E JMPF R2 #0031 + 0x8C080302, // 002F GETMET R2 R1 K2 + 0x7C080200, // 0030 CALL R2 1 + 0x4C080000, // 0031 LDNIL R2 + 0x80040400, // 0032 RET 1 R2 }) ) ); @@ -104,6 +527,9 @@ module lv_tasmota (scope: global) { init, closure(lv_tasmota_init_closure) start, func(lv0_start) + splash, closure(lv_tasmota_splash_closure) + splash_init, closure(lv_tasmota_splash_init_closure) + splash_remove, closure(lv_tasmota_splash_remove_closure) font_montserrat, func(lv0_load_montserrat_font) montserrat_font, func(lv0_load_montserrat_font) diff --git a/lib/libesp32/berry_tasmota/src/embedded/lv_tasmota.be b/lib/libesp32/berry_tasmota/src/embedded/lv_tasmota.be index 3e42bdb8b..61fd2a3b1 100644 --- a/lib/libesp32/berry_tasmota/src/embedded/lv_tasmota.be +++ b/lib/libesp32/berry_tasmota/src/embedded/lv_tasmota.be @@ -7,6 +7,10 @@ lv_tasmota = module("lv_tasmota") def init(lv_tasmota) import lv lv.start = lv_tasmota.start + lv.splash_init = lv_tasmota.splash_init + lv.splash_remove = lv_tasmota.splash_remove + lv.splash = lv_tasmota.splash + lv._splash = nil # store a reference for the current splash screen parent lv.font_montserrat = lv_tasmota.font_montserrat lv.montserrat_font = lv_tasmota.font_montserrat @@ -29,9 +33,112 @@ def init(lv_tasmota) lv.wifi_bars_icon = lv_wifi_bars_icon lv.wifi_bars = lv_wifi_bars + # display splash screen unless `SetOption135 1` is set + if tasmota.get_option(135) == 0 + lv.splash_init() + end + return nil end - lv_tasmota.init = init +# run splash now or schedlue later +def splash_init() + import display + if display.started() + lv.splash() # if display is ready, just do splash now + else + # register a driver until display starts + + # create a class for deferred run + class splash_runner + def init() + tasmota.add_driver(self) # register driver + end + + def display(cmd, idx, payload, raw) + import display + if cmd == "dim" && display.started() + tasmota.remove_driver(self) + lv.splash() + end + end + end + + splash_runner() # create an instance, it auto-registers + end +end +lv_tasmota.splash_init = splash_init + +# remove splash +def splash_remove() + var _splash = lv._splash + if _splash + lv._splash = nil + _splash.del() + end +end +lv_tasmota.splash_remove = splash_remove + +def splash() + import display + + if !display.started() return end + + lv.start() # just in case it was not already started + + var bg = lv.obj(lv.scr_act()) # create a parent object for splash screen + var f28 = lv.montserrat_font(28) # load embedded Montserrat 28 + var f20 = lv.montserrat_font(20) # load embedded Montserrat 20 + var white = lv.color(lv.COLOR_WHITE) + + bg.set_style_bg_color(lv.color(0x000066), 0) # lv.PART_MAIN | lv.STATE_DEFAULT + bg.set_style_radius(0, 0) + bg.set_style_pad_all(0, 0) + bg.set_style_border_width(0, 0) + bg.set_size(lv.pct(100), lv.pct(100)) + bg.refr_pos() + bg.refr_size() + # 0x53706C68 = 'Splh' indicating the screen is Splash screen + bg.set_user_data(0x53706C68) + + var tas_logo = lv.img(bg) + tas_logo.set_tasmota_logo() + tas_logo.set_zoom(150) + tas_logo.set_style_img_recolor_opa(255, 0) # lv.PART_MAIN | lv.STATE_DEFAULT + tas_logo.set_style_img_recolor(white, 0) # lv.PART_MAIN | lv.STATE_DEFAULT + tas_logo.set_align(lv.ALIGN_LEFT_MID) + tas_logo.set_x(-12) + + var tas = lv.label(bg) + # tas.set_style_bg_opa(lv.OPA_TRANSP, lv.PART_MAIN | lv.STATE_DEFAULT) + tas.set_style_text_color(white, 0) # lv.PART_MAIN | lv.STATE_DEFAULT + tas.set_text("TASMOTA") + if lv.get_hor_res() >= 200 + if f28 != nil tas.set_style_text_font(f28, 0) end + else + if f20 != nil tas.set_style_text_font(f20, 0) end + end + tas.set_align(lv.ALIGN_LEFT_MID) + tas.set_x(42) + + var driver_name = display.driver_name() + var disp + if size(driver_name) > 0 + disp = lv.label(bg) + disp.set_align(lv.ALIGN_BOTTOM_MID) + # disp.set_style_bg_opa(lv.OPA_TRANSP, lv.PART_MAIN | lv.STATE_DEFAULT) + disp.set_style_text_color(lv.color(0xFFFFFF), 0) # lv.PART_MAIN | lv.STATE_DEFAULT + disp.set_text(driver_name) + end + + # force full refresh now and not at next tick + lv.refr_now(0) + + lv._splash = bg # keep a reference to the splash screen + + tasmota.set_timer(5000, lv.splash_remove) # delete the object in the future +end +lv_tasmota.splash = splash + return lv_tasmota diff --git a/tasmota/settings.h b/tasmota/settings.h index acc48638d..6ef2ba502 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -164,7 +164,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu uint32_t tls_use_fingerprint : 1; // bit 18 (v10.0.0.4) - SetOption132 - (TLS) Use fingerprint validation instead of CA based uint32_t shift595_invert_outputs : 1; // bit 19 (v10.0.0.4) - SetOption133 - (Shift595) Invert outputs of 74x595 shift registers uint32_t pwm_force_same_phase : 1; // bit 20 (v10.1.0.6) - SetOption134 - (PWM) force PWM lights to start at same phase, default is to spread phases to minimze overlap (also needed for H-bridge) - uint32_t spare21 : 1; // bit 21 + uint32_t display_no_splash : 1; // bit 21 (v11.0.0.2) - SetOption135 - (Display & LVGL) forece disbabling default splash screen uint32_t spare22 : 1; // bit 22 uint32_t spare23 : 1; // bit 23 uint32_t spare24 : 1; // bit 24 diff --git a/tasmota/xdrv_52_3_berry_display.ino b/tasmota/xdrv_52_3_berry_display.ino index 2461da74a..ae8ec888f 100644 --- a/tasmota/xdrv_52_3_berry_display.ino +++ b/tasmota/xdrv_52_3_berry_display.ino @@ -79,15 +79,25 @@ void be_ntv_display_touch_update(int32_t touches, int32_t raw_x, int32_t raw_y, } const char* be_ntv_display_driver_name(void) { +#ifdef USE_UNIVERSAL_DISPLAY if (renderer) { char* devname = renderer->devname(); if (devname) { return devname; } } +#endif return ""; } +bool be_ntv_display_started(void) { +#ifdef USE_UNIVERSAL_DISPLAY + if (renderer) { + return true; + } +#endif + return false; +} #endif // USE_DISPLAY #endif // USE_BERRY diff --git a/tasmota/xdrv_52_3_berry_lvgl.ino b/tasmota/xdrv_52_3_berry_lvgl.ino index 569b6a998..5748c9609 100644 --- a/tasmota/xdrv_52_3_berry_lvgl.ino +++ b/tasmota/xdrv_52_3_berry_lvgl.ino @@ -390,6 +390,17 @@ extern "C" { uconfig = be_tostring(vm, 1); } start_lvgl(uconfig); + + // call lv.splash_remove() to kill any current splash screen + if (be_getglobal(vm, "lv")) { + if (be_getmember(vm, -1, "splash_remove")) { + // call it + be_call(vm, 0); + } + be_pop(vm, 1); + } + be_pop(vm, 1); + be_return_nil(vm); } be_raise(vm, kTypeError, nullptr); diff --git a/tasmota/xdrv_54_lvgl.ino b/tasmota/xdrv_54_lvgl.ino index 6878ea1a8..3d3159415 100644 --- a/tasmota/xdrv_54_lvgl.ino +++ b/tasmota/xdrv_54_lvgl.ino @@ -348,7 +348,7 @@ void start_lvgl(const char * uconfig); void start_lvgl(const char * uconfig) { if (glue != nullptr) { - AddLog(LOG_LEVEL_INFO, D_LOG_LVGL "LVGL was already initialized"); + AddLog(LOG_LEVEL_DEBUG, D_LOG_LVGL "LVGL was already initialized"); return; } diff --git a/tasmota/xdsp_02_ssd1306.ino b/tasmota/xdsp_02_ssd1306.ino index a45f40a95..f168a4b07 100644 --- a/tasmota/xdsp_02_ssd1306.ino +++ b/tasmota/xdsp_02_ssd1306.ino @@ -80,12 +80,14 @@ void SSD1306InitDriver(void) { renderer->setTextColor(1,0); #ifdef SHOW_SPLASH - renderer->setTextFont(0); - renderer->setTextSize(2); - renderer->setCursor(20,20); - renderer->println(F("SSD1306")); - renderer->Updateframe(); - renderer->DisplayOnff(1); + if (!Settings->flag5.display_no_splash) { + renderer->setTextFont(0); + renderer->setTextSize(2); + renderer->setCursor(20,20); + renderer->println(F("SSD1306")); + renderer->Updateframe(); + renderer->DisplayOnff(1); + } #endif AddLog(LOG_LEVEL_INFO, PSTR("DSP: SSD1306")); diff --git a/tasmota/xdsp_04_ili9341.ino b/tasmota/xdsp_04_ili9341.ino index ae10047a2..3b6a8de9f 100755 --- a/tasmota/xdsp_04_ili9341.ino +++ b/tasmota/xdsp_04_ili9341.ino @@ -100,12 +100,14 @@ void ILI9341_InitDriver() renderer->dim(GetDisplayDimmer16()); #ifdef SHOW_SPLASH - // Welcome text - renderer->setTextFont(2); - renderer->setTextSize(1); - renderer->setTextColor(ILI9341_WHITE, ILI9341_BLACK); - renderer->DrawStringAt(50, (Settings->display_height/2)-12, (Settings->display_options.type & 3)==ILIMODE_9341?"ILI9341 TFT!":"ILI9342 TFT!", ILI9341_WHITE, 0); - delay(1000); + if (!Settings->flag5.display_no_splash) { + // Welcome text + renderer->setTextFont(2); + renderer->setTextSize(1); + renderer->setTextColor(ILI9341_WHITE, ILI9341_BLACK); + renderer->DrawStringAt(50, (Settings->display_height/2)-12, (Settings->display_options.type & 3)==ILIMODE_9341?"ILI9341 TFT!":"ILI9342 TFT!", ILI9341_WHITE, 0); + delay(1000); + } #endif // SHOW_SPLASH color_type = COLOR_COLOR; diff --git a/tasmota/xdsp_05_epaper_29.ino b/tasmota/xdsp_05_epaper_29.ino index 95198066e..54a3eac8a 100644 --- a/tasmota/xdsp_05_epaper_29.ino +++ b/tasmota/xdsp_05_epaper_29.ino @@ -77,13 +77,15 @@ void EpdInitDriver29(void) { renderer->setTextColor(1,0); #ifdef SHOW_SPLASH - // Welcome text - delay(100); - renderer->setTextFont(1); - renderer->DrawStringAt(50, 50, "Waveshare E-Paper Display!", COLORED,0); - renderer->Updateframe(); - delay(1000); - renderer->fillScreen(0); + if (!Settings->flag5.display_no_splash) { + // Welcome text + delay(100); + renderer->setTextFont(1); + renderer->DrawStringAt(50, 50, "Waveshare E-Paper Display!", COLORED,0); + renderer->Updateframe(); + delay(1000); + renderer->fillScreen(0); + } #endif epd_init_done = true; diff --git a/tasmota/xdsp_06_epaper_42.ino b/tasmota/xdsp_06_epaper_42.ino index f0978204b..d0baef8ab 100644 --- a/tasmota/xdsp_06_epaper_42.ino +++ b/tasmota/xdsp_06_epaper_42.ino @@ -81,12 +81,14 @@ void EpdInitDriver42() { renderer->setTextColor(1,0); #ifdef SHOW_SPLASH - // Welcome text - renderer->setTextFont(2); - renderer->DrawStringAt(50, 140, "Waveshare E-Paper!", COLORED42,0); - renderer->Updateframe(); - delay(350); - renderer->fillScreen(0); + if (!Settings->flag5.display_no_splash) { + // Welcome text + renderer->setTextFont(2); + renderer->DrawStringAt(50, 140, "Waveshare E-Paper!", COLORED42,0); + renderer->Updateframe(); + delay(350); + renderer->fillScreen(0); + } #endif epd42_init_done = true; diff --git a/tasmota/xdsp_07_sh1106.ino b/tasmota/xdsp_07_sh1106.ino index 39327a9de..a8434f820 100644 --- a/tasmota/xdsp_07_sh1106.ino +++ b/tasmota/xdsp_07_sh1106.ino @@ -78,12 +78,14 @@ void SH1106InitDriver() { renderer->setTextColor(1,0); #ifdef SHOW_SPLASH - renderer->setTextFont(0); - renderer->setTextSize(2); - renderer->setCursor(20,20); - renderer->println(F("SH1106")); - renderer->Updateframe(); - renderer->DisplayOnff(1); + if (!Settings->flag5.display_no_splash) { + renderer->setTextFont(0); + renderer->setTextSize(2); + renderer->setCursor(20,20); + renderer->println(F("SH1106")); + renderer->Updateframe(); + renderer->DisplayOnff(1); + } #endif AddLog(LOG_LEVEL_INFO, PSTR("DSP: SH1106")); diff --git a/tasmota/xdsp_09_SSD1351.ino b/tasmota/xdsp_09_SSD1351.ino index 7d6d28d31..8a30ad2c8 100644 --- a/tasmota/xdsp_09_SSD1351.ino +++ b/tasmota/xdsp_09_SSD1351.ino @@ -71,11 +71,13 @@ void SSD1351_InitDriver() { renderer->dim(GetDisplayDimmer16()); #ifdef SHOW_SPLASH - // Welcome text - renderer->setTextFont(2); - renderer->setTextColor(SSD1351_WHITE,SSD1351_BLACK); - renderer->DrawStringAt(10, 60, "SSD1351", SSD1351_RED,0); - delay(1000); + if (!Settings->flag5.display_no_splash) { + // Welcome text + renderer->setTextFont(2); + renderer->setTextColor(SSD1351_WHITE,SSD1351_BLACK); + renderer->DrawStringAt(10, 60, "SSD1351", SSD1351_RED,0); + delay(1000); + } #endif color_type = COLOR_COLOR; diff --git a/tasmota/xdsp_10_RA8876.ino b/tasmota/xdsp_10_RA8876.ino index 305f26c7f..80c5b4f0f 100644 --- a/tasmota/xdsp_10_RA8876.ino +++ b/tasmota/xdsp_10_RA8876.ino @@ -65,11 +65,13 @@ void RA8876_InitDriver(void) { //testall(); #ifdef SHOW_SPLASH - // Welcome text - renderer->setTextFont(2); - renderer->setTextColor(RA8876_WHITE,RA8876_BLACK); - renderer->DrawStringAt(600, 300, "RA8876", RA8876_RED,0); - delay(1000); + if (!Settings->flag5.display_no_splash) { + // Welcome text + renderer->setTextFont(2); + renderer->setTextColor(RA8876_WHITE,RA8876_BLACK); + renderer->DrawStringAt(600, 300, "RA8876", RA8876_RED,0); + delay(1000); + } #endif color_type = COLOR_COLOR; diff --git a/tasmota/xdsp_12_ST7789.ino b/tasmota/xdsp_12_ST7789.ino index 37e3280e3..6553fc6a1 100644 --- a/tasmota/xdsp_12_ST7789.ino +++ b/tasmota/xdsp_12_ST7789.ino @@ -96,11 +96,13 @@ void ST7789_InitDriver(void) { renderer->dim(GetDisplayDimmer16()); #ifdef SHOW_SPLASH - // Welcome text - renderer->setTextColor(ST7789_WHITE,ST7789_BLACK); - renderer->setTextFont(2); - renderer->DrawStringAt(30, (Settings->display_height-12)/2, "ST7789 TFT!", ST7789_WHITE,0); - delay(1000); + if (!Settings->flag5.display_no_splash) { + // Welcome text + renderer->setTextColor(ST7789_WHITE,ST7789_BLACK); + renderer->setTextFont(2); + renderer->DrawStringAt(30, (Settings->display_height-12)/2, "ST7789 TFT!", ST7789_WHITE,0); + delay(1000); + } #endif color_type = COLOR_COLOR; diff --git a/tasmota/xdsp_14_SSD1331.ino b/tasmota/xdsp_14_SSD1331.ino index aaefeedd4..3d531d229 100644 --- a/tasmota/xdsp_14_SSD1331.ino +++ b/tasmota/xdsp_14_SSD1331.ino @@ -76,12 +76,14 @@ void SSD1331_InitDriver() { renderer->dim(GetDisplayDimmer16()); #ifdef SHOW_SPLASH - // Welcome text - renderer->clearDisplay(); - renderer->setTextFont(1); - renderer->DrawStringAt(24, 27, "SSD1331", SSD1331_RED, 0); - delay(1000); - renderer->clearDisplay(); + if (!Settings->flag5.display_no_splash) { + // Welcome text + renderer->clearDisplay(); + renderer->setTextFont(1); + renderer->DrawStringAt(24, 27, "SSD1331", SSD1331_RED, 0); + delay(1000); + renderer->clearDisplay(); + } #endif color_type = COLOR_COLOR; diff --git a/tasmota/xdsp_16_esp32_epaper_47.ino b/tasmota/xdsp_16_esp32_epaper_47.ino index 707d4b7e7..bc6473efe 100644 --- a/tasmota/xdsp_16_esp32_epaper_47.ino +++ b/tasmota/xdsp_16_esp32_epaper_47.ino @@ -57,10 +57,12 @@ void EpdInitDriver47(void) { renderer->setTextColor(EPD47_BLACK, EPD47_WHITE); #ifdef SHOW_SPLASH - // Welcome text - renderer->setTextFont(2); - renderer->DrawStringAt(50, 50, "LILGO 4.7 E-Paper Display!", EPD47_BLACK, 0); - renderer->Updateframe(); + if (!Settings->flag5.display_no_splash) { + // Welcome text + renderer->setTextFont(2); + renderer->DrawStringAt(50, 50, "LILGO 4.7 E-Paper Display!", EPD47_BLACK, 0); + renderer->Updateframe(); + } #endif fg_color = EPD47_BLACK; diff --git a/tasmota/xdsp_17_universal.ino b/tasmota/xdsp_17_universal.ino index bd77e2a2b..d557bd610 100644 --- a/tasmota/xdsp_17_universal.ino +++ b/tasmota/xdsp_17_universal.ino @@ -324,7 +324,9 @@ int8_t cs; ApplyDisplayDimmer(); #ifdef SHOW_SPLASH - renderer->Splash(); + if (!Settings->flag5.display_no_splash) { + renderer->Splash(); + } #endif // SHOW_SPLASH udisp_init_done = true; From 7a4108ef93d755e3ea07f48ab518dc47ec2b28f5 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sun, 6 Mar 2022 15:50:24 +0100 Subject: [PATCH 159/355] Fix WS2812 multi-strip support --- lib/libesp32/berry_tasmota/src/be_leds_lib.c | 51 +++++++++++-------- .../berry_tasmota/src/embedded/leds.be | 12 +++-- tasmota/berry/include/be_gpio_defines.h | 4 +- tasmota/tasmota_template.h | 2 +- tools/lv_gpio/lv_gpio_enum.h | 2 + 5 files changed, 45 insertions(+), 26 deletions(-) diff --git a/lib/libesp32/berry_tasmota/src/be_leds_lib.c b/lib/libesp32/berry_tasmota/src/be_leds_lib.c index 58b0a991e..ee158e4d9 100644 --- a/lib/libesp32/berry_tasmota/src/be_leds_lib.c +++ b/lib/libesp32/berry_tasmota/src/be_leds_lib.c @@ -1203,9 +1203,9 @@ be_local_closure(Leds_show, /* name */ ********************************************************************/ be_local_closure(Leds_ctor, /* name */ be_nested_proto( - 10, /* nstack */ - 4, /* argc */ - 0, /* varg */ + 12, /* nstack */ + 5, /* argc */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -1217,23 +1217,34 @@ be_local_closure(Leds_ctor, /* name */ }), &be_const_str_ctor, &be_const_str_solidified, - ( &(const binstruction[16]) { /* code */ - 0x4C100000, // 0000 LDNIL R4 - 0x1C100604, // 0001 EQ R4 R3 R4 - 0x78120005, // 0002 JMPF R4 #0009 - 0x8C100100, // 0003 GETMET R4 R0 K0 - 0x58180001, // 0004 LDCONST R6 K1 - 0x5C1C0200, // 0005 MOVE R7 R1 - 0x5C200400, // 0006 MOVE R8 R2 - 0x7C100800, // 0007 CALL R4 4 - 0x70020005, // 0008 JMP #000F - 0x8C100100, // 0009 GETMET R4 R0 K0 - 0x58180001, // 000A LDCONST R6 K1 - 0x5C1C0200, // 000B MOVE R7 R1 - 0x5C200400, // 000C MOVE R8 R2 - 0x5C240600, // 000D MOVE R9 R3 - 0x7C100A00, // 000E CALL R4 5 - 0x80000000, // 000F RET 0 + ( &(const binstruction[27]) { /* code */ + 0x4C140000, // 0000 LDNIL R5 + 0x1C140605, // 0001 EQ R5 R3 R5 + 0x78160005, // 0002 JMPF R5 #0009 + 0x8C140100, // 0003 GETMET R5 R0 K0 + 0x581C0001, // 0004 LDCONST R7 K1 + 0x5C200200, // 0005 MOVE R8 R1 + 0x5C240400, // 0006 MOVE R9 R2 + 0x7C140800, // 0007 CALL R5 4 + 0x70020010, // 0008 JMP #001A + 0x4C140000, // 0009 LDNIL R5 + 0x1C140805, // 000A EQ R5 R4 R5 + 0x78160006, // 000B JMPF R5 #0013 + 0x8C140100, // 000C GETMET R5 R0 K0 + 0x581C0001, // 000D LDCONST R7 K1 + 0x5C200200, // 000E MOVE R8 R1 + 0x5C240400, // 000F MOVE R9 R2 + 0x5C280600, // 0010 MOVE R10 R3 + 0x7C140A00, // 0011 CALL R5 5 + 0x70020006, // 0012 JMP #001A + 0x8C140100, // 0013 GETMET R5 R0 K0 + 0x581C0001, // 0014 LDCONST R7 K1 + 0x5C200200, // 0015 MOVE R8 R1 + 0x5C240400, // 0016 MOVE R9 R2 + 0x5C280600, // 0017 MOVE R10 R3 + 0x5C2C0800, // 0018 MOVE R11 R4 + 0x7C140C00, // 0019 CALL R5 6 + 0x80000000, // 001A RET 0 }) ) ); diff --git a/lib/libesp32/berry_tasmota/src/embedded/leds.be b/lib/libesp32/berry_tasmota/src/embedded/leds.be index 11a0489af..a0bad7435 100644 --- a/lib/libesp32/berry_tasmota/src/embedded/leds.be +++ b/lib/libesp32/berry_tasmota/src/embedded/leds.be @@ -4,7 +4,7 @@ # Native commands -# 00 : ctor (leds:int, gpio:int) -> void +# 00 : ctor (leds:int, gpio:int[, type:int, rmt:int]) -> void # 01 : begin void -> void # 02 : show void -> void # 03 : CanShow void -> bool @@ -57,11 +57,15 @@ class Leds : Leds_ntv self.show() end - def ctor(leds, gpio, rmt) - if rmt == nil + def ctor(leds, gpio, type, rmt) + if type == nil self.call_native(0, leds, gpio) else - self.call_native(0, leds, gpio, rmt) + if rmt == nil + self.call_native(0, leds, gpio, type) + else + self.call_native(0, leds, gpio, type, rmt) + end end end def begin() diff --git a/tasmota/berry/include/be_gpio_defines.h b/tasmota/berry/include/be_gpio_defines.h index 8906f90a0..c3b07a7fc 100644 --- a/tasmota/berry/include/be_gpio_defines.h +++ b/tasmota/berry/include/be_gpio_defines.h @@ -14,7 +14,6 @@ const be_const_member_t lv_gpio_constants[] = { { "ADC_INPUT", (int32_t) GPIO_ADC_INPUT }, { "ADC_JOY", (int32_t) GPIO_ADC_JOY }, { "ADC_LIGHT", (int32_t) GPIO_ADC_LIGHT }, - { "ADC_MQ", (int32_t) GPIO_ADC_MQ }, { "ADC_PH", (int32_t) GPIO_ADC_PH }, { "ADC_RANGE", (int32_t) GPIO_ADC_RANGE }, { "ADC_TEMP", (int32_t) GPIO_ADC_TEMP }, @@ -39,6 +38,8 @@ const be_const_member_t lv_gpio_constants[] = { { "CC1101_GDO0", (int32_t) GPIO_CC1101_GDO0 }, { "CC1101_GDO2", (int32_t) GPIO_CC1101_GDO2 }, { "CHANGE", CHANGE }, + { "CM11_RXD", (int32_t) GPIO_CM11_RXD }, + { "CM11_TXD", (int32_t) GPIO_CM11_TXD }, { "CNTR1", (int32_t) GPIO_CNTR1 }, { "CNTR1_NP", (int32_t) GPIO_CNTR1_NP }, { "CSE7761_RX", (int32_t) GPIO_CSE7761_RX }, @@ -130,6 +131,7 @@ const be_const_member_t lv_gpio_constants[] = { { "MAX7219CLK", (int32_t) GPIO_MAX7219CLK }, { "MAX7219CS", (int32_t) GPIO_MAX7219CS }, { "MAX7219DIN", (int32_t) GPIO_MAX7219DIN }, + { "MAX_RMT", MAX_RMT }, { "MCP2515_CS", (int32_t) GPIO_MCP2515_CS }, { "MCP39F5_RST", (int32_t) GPIO_MCP39F5_RST }, { "MCP39F5_RX", (int32_t) GPIO_MCP39F5_RX }, diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index d5a589bf6..490ff9bdf 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -616,7 +616,7 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_P9813_CLK), // P9813 CLOCK AGPIO(GPIO_P9813_DAT), // P9813 DATA #else - AGPIO(GPIO_WS2812) + MAX_RMT,// WS2812 Led string, using RMT on ESP32 + AGPIO(GPIO_WS2812) + (MAX_RMT ? MAX_RMT + 1 : 0),// WS2812 Led string, using RMT on ESP32 #endif // NEO_HW_P9813 #endif #ifdef USE_ARILUX_RF diff --git a/tools/lv_gpio/lv_gpio_enum.h b/tools/lv_gpio/lv_gpio_enum.h index 51e83ae7e..3f56ef2b2 100644 --- a/tools/lv_gpio/lv_gpio_enum.h +++ b/tools/lv_gpio/lv_gpio_enum.h @@ -17,6 +17,8 @@ RISING FALLING CHANGE +MAX_RMT + NONE = GPIO_NONE KEY1 = GPIO_KEY1 KEY1_NP = GPIO_KEY1_NP From da783abaef35fe04c74ee08079b5608f19f738f8 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sun, 6 Mar 2022 16:13:23 +0100 Subject: [PATCH 160/355] Added assign_rmt --- lib/libesp32/berry/generate/be_const_strtab.h | 5 + .../berry/generate/be_const_strtab_def.h | 2221 +++++++++-------- lib/libesp32/berry_tasmota/src/be_leds_lib.c | 1998 ++++++++------- .../berry_tasmota/src/embedded/leds.be | 38 + 4 files changed, 2212 insertions(+), 2050 deletions(-) diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h index 0c7767650..6afa9f5aa 100644 --- a/lib/libesp32/berry/generate/be_const_strtab.h +++ b/lib/libesp32/berry/generate/be_const_strtab.h @@ -59,6 +59,7 @@ extern const bcstring be_const_str_INTERNAL_PDM; extern const bcstring be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback; extern const bcstring be_const_str_LVG_X3A_X20object_X3A; extern const bcstring be_const_str_Leds; +extern const bcstring be_const_str_MAX_RMT; extern const bcstring be_const_str_MD5; extern const bcstring be_const_str_None; extern const bcstring be_const_str_OPTION_A; @@ -220,6 +221,7 @@ extern const bcstring be_const_str__persist_X2Ejson; extern const bcstring be_const_str__ptr; extern const bcstring be_const_str__read; extern const bcstring be_const_str__request_from; +extern const bcstring be_const_str__rmt; extern const bcstring be_const_str__rules; extern const bcstring be_const_str__settings_def; extern const bcstring be_const_str__settings_ptr; @@ -258,6 +260,7 @@ extern const bcstring be_const_str_argument_X20must_X20be_X20a_X20list; extern const bcstring be_const_str_as; extern const bcstring be_const_str_asin; extern const bcstring be_const_str_assert; +extern const bcstring be_const_str_assign_rmt; extern const bcstring be_const_str_asstring; extern const bcstring be_const_str_atan; extern const bcstring be_const_str_atan2; @@ -510,6 +513,7 @@ extern const bcstring be_const_str_instance_size; extern const bcstring be_const_str_int; extern const bcstring be_const_str_internal_error; extern const bcstring be_const_str_introspect; +extern const bcstring be_const_str_invalid_X20GPIO_X20number; extern const bcstring be_const_str_invalidate; extern const bcstring be_const_str_io_error; extern const bcstring be_const_str_ip; @@ -595,6 +599,7 @@ extern const bcstring be_const_str_next; extern const bcstring be_const_str_next_cron; extern const bcstring be_const_str_nil; extern const bcstring be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus; +extern const bcstring be_const_str_no_X20more_X20RMT_X20channel_X20available; extern const bcstring be_const_str_now; extern const bcstring be_const_str_null_cb; extern const bcstring be_const_str_number; diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h index 468626270..5803f2223 100644 --- a/lib/libesp32/berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/berry/generate/be_const_strtab_def.h @@ -1,792 +1,797 @@ -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker); -be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_ALIGN_LEFT_MID); -be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_close); -be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str_url_encode); -be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_SERIAL_6E1); -be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str_argument_X20must_X20be_X20a_X20list); -be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_lv_wifi_arcs_icon); -be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str__X2Etapp); -be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str__def); -be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_srand); -be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str__fl); -be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_h); -be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_c); -be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_AudioFileSourceFS); -be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_arch); -be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_SERIAL_7O1); -be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_SERIAL_5O2); -be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27); -be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str__X3E_X3D); -be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str__dirty); +be_define_const_str(, "", 2166136261u, 0, 0, NULL); +be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_keys); +be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_hour); +be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, NULL); +be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_battery_present); +be_define_const_str(_X22, "\"", 655135397u, 0, 1, NULL); +be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_collect); +be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_clear_to); +be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20); +be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str__X2Ep2); +be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_attrdump); +be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str__X2502d_X25s_X2502d); +be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_set_style_line_color); +be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_next_cron); +be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_map); +be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_set_time); +be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_INTERNAL_PDM); +be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str__debug_present); +be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, NULL); +be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_event_send); be_define_const_str(_X2B, "+", 772578730u, 0, 1, NULL); -be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_duration); -be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, NULL); -be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_module); -be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_SERIAL_8O2); -be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E); -be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, NULL); -be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_geti); -be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_keys); -be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_gamma); -be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, NULL); -be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_isrunning); -be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_set_bri); -be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_AudioGenerator); -be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str_param); -be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_lvgl_event_dispatch); -be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_CFG_X3A_X20loaded_X20_X20); -be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20); -be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_consume_silence); -be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_STATE_DEFAULT); -be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, NULL); -be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_type_error); -be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_EVENT_DELETE); -be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_setbits); -be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_consume_mono); +be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_SERIAL_8N1); +be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_before_del); +be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_last_modified); +be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_display); +be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_char); +be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_id); +be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_SERIAL_5N1); +be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_seg7_font); +be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_a); +be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_ctor); +be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_set_style_img_recolor); +be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, NULL); +be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E); +be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str_rounded); +be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_run_bat); +be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_SERIAL_8N2); +be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27); +be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_run_cron); +be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str__read); +be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_log10); +be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_AudioGeneratorMP3); +be_define_const_str(_X3A, ":", 1057798253u, 0, 1, NULL); +be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_SERIAL_8O2); +be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_set_style_text_font); be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, NULL); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_deinit); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_counters); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_get_bat_power); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_is_first_time); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_WS2812_GRB); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_init_draw_line_dsc); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, NULL); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_rule); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, NULL); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_fromb64); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_widget_width_def); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_full_state); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, NULL); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_a); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, NULL); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "", 4247924536u, 0, 19, &be_const_str_show); +be_define_const_str(_X3D, "=", 940354920u, 0, 1, &be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map); +be_define_const_str(_X3D_X3C_X3E_X21, "=<>!", 2664470277u, 0, 4, &be_const_str_Unknown); +be_define_const_str(_X3D_X3D, "==", 2431966415u, 0, 2, &be_const_str_pixels_buffer); +be_define_const_str(_X3E, ">", 990687777u, 0, 1, &be_const_str_get_object_from_ptr); +be_define_const_str(_X3E_X3D, ">=", 284975636u, 0, 2, &be_const_str_lv_event_cb); +be_define_const_str(_X3F, "?", 973910158u, 0, 1, &be_const_str_SERIAL_8O1); +be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, NULL); +be_define_const_str(ALIGN_BOTTOM_MID, "ALIGN_BOTTOM_MID", 3933267889u, 0, 16, NULL); +be_define_const_str(ALIGN_LEFT_MID, "ALIGN_LEFT_MID", 1043035067u, 0, 14, &be_const_str___upper__); +be_define_const_str(AXP192, "AXP192", 757230128u, 0, 6, &be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem); +be_define_const_str(Animate_X20pc_X20is_X20out_X20of_X20range, "Animate pc is out of range", 1854929421u, 0, 26, &be_const_str_SK6812_GRBW); +be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, NULL); +be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, NULL); +be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str_begin); +be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function); +be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_elements_X20must_X20be_X20a_X20lv_point); be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, NULL); -be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_set_rate); -be_define_const_str(Auto_X2Dconfiguration, "Auto-configuration", 1665006109u, 0, 18, &be_const_str_begin_multicast); -be_define_const_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, "BRY: ERROR, bad json: ", 2715135809u, 0, 22, &be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29); -be_define_const_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: Exception> '%s' - %s", 2246990964u, 0, 25, &be_const_str_consume_stereo); -be_define_const_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function, "BRY: argument must be a function", 3917068408u, 0, 32, &be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032); -be_define_const_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, "BRY: could not save compiled file %s (%s)", 736659787u, 0, 41, &be_const_str_collect); -be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, "BRY: failed to load _persist.json", 2991913445u, 0, 33, &be_const_str_content_flush); -be_define_const_str(BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, "BRY: invalid hue payload: ", 203709367u, 0, 26, &be_const_str__drivers); -be_define_const_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, "BRY: method not allowed, use a closure like '/ args -> obj.func(args)'", 177121572u, 0, 70, &be_const_str_destructor_cb); -be_define_const_str(BUTTON_CONFIGURATION, "BUTTON_CONFIGURATION", 70820856u, 0, 20, &be_const_str_escape); -be_define_const_str(CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, "CFG: 'init.bat' done, restarting", 1569670677u, 0, 32, NULL); -be_define_const_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "CFG: Exception> '%s' - %s", 1228874553u, 0, 25, &be_const_str_call); -be_define_const_str(CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, "CFG: No '*.autoconf' file found", 755798501u, 0, 31, &be_const_str_gamma10); -be_define_const_str(CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, "CFG: could not run %s (%s - %s)", 1428829580u, 0, 31, &be_const_str_font_montserrat); -be_define_const_str(CFG_X3A_X20downloading_X20_X27_X25s_X27, "CFG: downloading '%s'", 589480701u, 0, 21, &be_const_str_arg); -be_define_const_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, "CFG: exception '%s' - '%s'", 4095407913u, 0, 26, &be_const_str_exec_tele); -be_define_const_str(CFG_X3A_X20loaded_X20_X20, "CFG: loaded ", 3710273538u, 0, 13, &be_const_str_pop); -be_define_const_str(CFG_X3A_X20loaded_X20_X27_X25s_X27, "CFG: loaded '%s'", 1699028828u, 0, 16, NULL); -be_define_const_str(CFG_X3A_X20loading_X20, "CFG: loading ", 4010361503u, 0, 13, &be_const_str_bool); -be_define_const_str(CFG_X3A_X20loading_X20_X27_X25s_X27, "CFG: loading '%s'", 2285306097u, 0, 17, &be_const_str_SERIAL_8E2); +be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_SERIAL_5O2); +be_define_const_str(Auto_X2Dconfiguration, "Auto-configuration", 1665006109u, 0, 18, &be_const_str_draw_arc_dsc); +be_define_const_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, "BRY: ERROR, bad json: ", 2715135809u, 0, 22, &be_const_str_tasmota_log_reader); +be_define_const_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: Exception> '%s' - %s", 2246990964u, 0, 25, &be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27); +be_define_const_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function, "BRY: argument must be a function", 3917068408u, 0, 32, &be_const_str__timers); +be_define_const_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, "BRY: could not save compiled file %s (%s)", 736659787u, 0, 41, &be_const_str_list_handlers); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, "BRY: failed to load _persist.json", 2991913445u, 0, 33, NULL); +be_define_const_str(BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, "BRY: invalid hue payload: ", 203709367u, 0, 26, &be_const_str_DIMMER); +be_define_const_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, "BRY: method not allowed, use a closure like '/ args -> obj.func(args)'", 177121572u, 0, 70, &be_const_str_add_anim); +be_define_const_str(BUTTON_CONFIGURATION, "BUTTON_CONFIGURATION", 70820856u, 0, 20, NULL); +be_define_const_str(CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, "CFG: 'init.bat' done, restarting", 1569670677u, 0, 32, &be_const_str_EXTERNAL_I2S); +be_define_const_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "CFG: Exception> '%s' - %s", 1228874553u, 0, 25, &be_const_str_percentage); +be_define_const_str(CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, "CFG: No '*.autoconf' file found", 755798501u, 0, 31, &be_const_str_widget_destructor); +be_define_const_str(CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, "CFG: could not run %s (%s - %s)", 1428829580u, 0, 31, &be_const_str_EVENT_DRAW_PART_BEGIN); +be_define_const_str(CFG_X3A_X20downloading_X20_X27_X25s_X27, "CFG: downloading '%s'", 589480701u, 0, 21, &be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27); +be_define_const_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, "CFG: exception '%s' - '%s'", 4095407913u, 0, 26, &be_const_str_log); +be_define_const_str(CFG_X3A_X20loaded_X20_X20, "CFG: loaded ", 3710273538u, 0, 13, &be_const_str_EVENT_DRAW_MAIN); +be_define_const_str(CFG_X3A_X20loaded_X20_X27_X25s_X27, "CFG: loaded '%s'", 1699028828u, 0, 16, &be_const_str_code); +be_define_const_str(CFG_X3A_X20loading_X20, "CFG: loading ", 4010361503u, 0, 13, &be_const_str_SERIAL_6E2); +be_define_const_str(CFG_X3A_X20loading_X20_X27_X25s_X27, "CFG: loading '%s'", 2285306097u, 0, 17, &be_const_str_list); be_define_const_str(CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, "CFG: multiple autoconf files found, aborting ('%s' + '%s')", 197663371u, 0, 58, &be_const_str_Leds); -be_define_const_str(CFG_X3A_X20ran_X20_X20, "CFG: ran ", 3579570472u, 0, 10, &be_const_str_id); -be_define_const_str(CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, "CFG: removed file '%s'", 2048602473u, 0, 22, &be_const_str_start); -be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str_instance); -be_define_const_str(CFG_X3A_X20removing_X20first_X20time_X20marker, "CFG: removing first time marker", 2125556683u, 0, 31, &be_const_str_read13); -be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_str); -be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str_set_dcdc_enable); -be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str_Parameter_X20error); -be_define_const_str(COLOR_BLACK, "COLOR_BLACK", 264427940u, 0, 11, &be_const_str__timers); -be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, &be_const_str__p); -be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str_lv_event_cb); -be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, &be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27); -be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_SERIAL_5O1); -be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str_get_style_bg_color); -be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, &be_const_str_I2C_Driver); -be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, &be_const_str_tob64); -be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str__); -be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, NULL); -be_define_const_str(False, "False", 2541049336u, 0, 5, &be_const_str_SERIAL_8N2); -be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf); -be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, &be_const_str_asstring); -be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, &be_const_str_fast_loop_enabled); -be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, &be_const_str_cmd); -be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str__energy); -be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str__ccmd); -be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_publish); +be_define_const_str(CFG_X3A_X20ran_X20_X20, "CFG: ran ", 3579570472u, 0, 10, NULL); +be_define_const_str(CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, "CFG: removed file '%s'", 2048602473u, 0, 22, &be_const_str_dim); +be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str_classof); +be_define_const_str(CFG_X3A_X20removing_X20first_X20time_X20marker, "CFG: removing first time marker", 2125556683u, 0, 31, &be_const_str_send); +be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_asstring); +be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str__X5B); +be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(COLOR_BLACK, "COLOR_BLACK", 264427940u, 0, 11, &be_const_str_button_pressed); +be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, &be_const_str_OneWire); +be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str_SERIAL_6E1); +be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, &be_const_str_tcpclient); +be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, NULL); +be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str_cmd); +be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, NULL); +be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, &be_const_str_on); +be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str_SERIAL_6N2); +be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, &be_const_str_get_style_bg_color); +be_define_const_str(False, "False", 2541049336u, 0, 5, NULL); +be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_gamma10); +be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, &be_const_str_detect); +be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, &be_const_str_save); +be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, &be_const_str_RGBCT); +be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_fast_loop); +be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str_issubclass); +be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_success); be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, NULL); -be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str_setmember); -be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, &be_const_str__debug_present); +be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str_valuer_error); +be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, NULL); +be_define_const_str(MAX_RMT, "MAX_RMT", 1615574873u, 0, 7, &be_const_str_try_rule); be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, NULL); -be_define_const_str(None, "None", 810547195u, 0, 4, &be_const_str_draw_line_dsc); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, NULL); -be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_codedump); -be_define_const_str(OpusDecoder, "OpusDecoder", 3618742074u, 0, 11, &be_const_str_bytes); -be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str__anonymous_); -be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_fromptr); -be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_resp_cmnd_str); -be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, &be_const_str_back_forth); -be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str_introspect); -be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, &be_const_str_find); -be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_SK6812_GRBW); -be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, NULL); -be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_offseta); -be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str__settings_def); -be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, NULL); -be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_coord_arr); -be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_type); -be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27); -be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, NULL); -be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_elements_X20must_X20be_X20a_X20lv_point); -be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str___iterator__); -be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_gc); -be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_Wire); -be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str__buffer); -be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_zero); -be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, NULL); -be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_rand); -be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, NULL); -be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_call_native); -be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_make_cb); -be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_next); -be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_del); -be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, NULL); -be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_reset_search); -be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_write_bytes); -be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_animate); -be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_event); -be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, &be_const_str_autoexec); -be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str_files); -be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, &be_const_str_arg_size); -be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, &be_const_str_item); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_ceil); -be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, NULL); -be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str__global_def); -be_define_const_str(True, "True", 3453902341u, 0, 4, &be_const_str_add_rule); -be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, &be_const_str_remote_ip); -be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, &be_const_str_run_deferred); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str__settings_ptr); -be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, &be_const_str_global); -be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str_else); -be_define_const_str(_X5B, "[", 3725336506u, 0, 1, &be_const_str_add_anim); -be_define_const_str(_X5D, "]", 3624670792u, 0, 1, &be_const_str_imax); -be_define_const_str(_, "_", 3658226030u, 0, 1, &be_const_str_scan); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_set_height); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_ins_ramp); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_argument_X20must_X20be_X20a_X20function); -be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, NULL); -be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, NULL); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_autorun); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, NULL); -be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, NULL); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_json_fdump_any); -be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_success); -be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_asin); -be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_content_start); -be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, NULL); -be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_add_cron); -be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, &be_const_str_compile); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_pow); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_hue_status); -be_define_const_str(_energy, "_energy", 535372070u, 0, 7, &be_const_str_isinstance); -be_define_const_str(_error, "_error", 1132109656u, 0, 6, &be_const_str_connected); -be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, &be_const_str_set_reachable); -be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_model); -be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, &be_const_str_check_not_method); -be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_event_cb); -be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_is_running); -be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_format); -be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_set_pixel_color); -be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_get_current_module_path); -be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_draw_line_dsc_init); -be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_get_style_line_color); -be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_draw_arc_dsc); -be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, &be_const_str_atan2); -be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_arc_dsc); -be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, NULL); -be_define_const_str(_t, "_t", 1527481326u, 0, 2, &be_const_str_o); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_find_key_i); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_driver_name); -be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_pct); -be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_widget_instance_size); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, NULL); -be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_addr); -be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_cosh); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_i2c_enabled); -be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_has_X20already_X20an_X20event_X20callback); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_content_button); -be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_light_to_id); -be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, &be_const_str_lower); -be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, &be_const_str_get_option); -be_define_const_str(add_header, "add_header", 927130612u, 0, 10, &be_const_str_classof); -be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, &be_const_str_return); -be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, NULL); -be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_contains); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_check_privileged_access); -be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, NULL); -be_define_const_str(animate, "animate", 3885786800u, 0, 7, &be_const_str_get_alternate); -be_define_const_str(animators, "animators", 279858213u, 0, 9, NULL); -be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_lv_); -be_define_const_str(arch, "arch", 2952804297u, 0, 4, &be_const_str_get_string); -be_define_const_str(area, "area", 2601460036u, 0, 4, &be_const_str_every_100ms); -be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_hour); -be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, &be_const_str_split); -be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_function); -be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, NULL); -be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_content_send); -be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, &be_const_str_ctor); +be_define_const_str(None, "None", 810547195u, 0, 4, &be_const_str_create_segment); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_number); +be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str___lower__); +be_define_const_str(OpusDecoder, "OpusDecoder", 3618742074u, 0, 11, &be_const_str_back_forth); +be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, NULL); +be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_set); +be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_lv_point_arr); +be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, NULL); +be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str_set_user_data); +be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, &be_const_str_every_50ms); +be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_dump); +be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf); +be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_add_driver); +be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, NULL); +be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_dac_voltage); +be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, NULL); +be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_display_X2Eini); +be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_reverse); +be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str__end_transmission); +be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_allocated); +be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); +be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_SERIAL_8E2); +be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_SERIAL_8E1); +be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str__ptr); +be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, NULL); +be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_lv_coord_arr); +be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_udp); +be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_o); +be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, NULL); +be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, NULL); +be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_get_alternate); +be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_page_autoconf_ctl); +be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_animators); +be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, NULL); +be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, NULL); +be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_p1); +be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_digital_write); +be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, &be_const_str_concat); +be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str_has_arg); +be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, &be_const_str_every_second); +be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, &be_const_str_json_fdump); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_add_header); +be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, &be_const_str_get_bat_power); +be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str_min); +be_define_const_str(True, "True", 3453902341u, 0, 4, NULL); +be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, &be_const_str_argument_X20must_X20be_X20a_X20list); +be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, &be_const_str__buffer); +be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, NULL); +be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, &be_const_str_color); +be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str__begin_transmission); +be_define_const_str(_X5B, "[", 3725336506u, 0, 1, &be_const_str_decompress); +be_define_const_str(_X5D, "]", 3624670792u, 0, 1, &be_const_str_draw_arc); +be_define_const_str(_, "_", 3658226030u, 0, 1, &be_const_str_get_coords); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_signal_arcs); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_calldepth); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL); +be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, &be_const_str_lv_event); +be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, &be_const_str_cb); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_json_fdump_list); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_exp); +be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str__fl); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_get_option); +be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_arc_dsc); +be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_gpio); +be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_set_text); +be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, &be_const_str_get_bat_current); +be_define_const_str(_def, "_def", 1985022181u, 0, 4, NULL); +be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str__global_addr); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str__error); +be_define_const_str(_energy, "_energy", 535372070u, 0, 7, &be_const_str_set_huesat); +be_define_const_str(_error, "_error", 1132109656u, 0, 6, NULL); +be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, NULL); +be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_available); +be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, &be_const_str_lv_obj); +be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, NULL); +be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_set_tasmota_logo); +be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_c); +be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_get_style_pad_right); +be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_signal_bars); +be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_height_def); +be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_add); +be_define_const_str(_rmt, "_rmt", 1094422685u, 0, 4, NULL); +be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_json_fdump_map); +be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, NULL); +be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_find); +be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, &be_const_str_exists); +be_define_const_str(_t, "_t", 1527481326u, 0, 2, &be_const_str_reverse_gamma10); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_widget_event_impl); +be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_set_exten); +be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_create_matrix); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_fromb64); +be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_deinit); +be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_every_100ms); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, NULL); +be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_bool); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_set_style_img_recolor_opa); +be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_cb_event_closure); +be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, &be_const_str_consume_stereo); +be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, NULL); +be_define_const_str(add_header, "add_header", 927130612u, 0, 10, NULL); +be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, &be_const_str_draw_line_dsc); +be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_arg_name); +be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_escape); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_create_custom_widget); +be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, &be_const_str_constructor_cb); +be_define_const_str(animate, "animate", 3885786800u, 0, 7, &be_const_str_pc); +be_define_const_str(animators, "animators", 279858213u, 0, 9, &be_const_str_ccronexpr); +be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_asin); +be_define_const_str(arch, "arch", 2952804297u, 0, 4, &be_const_str_refr_pos); +be_define_const_str(area, "area", 2601460036u, 0, 4, NULL); +be_define_const_str(arg, "arg", 1047474471u, 0, 3, NULL); +be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, &be_const_str_dimmer); +be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_refr_now); +be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson); +be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_widget_struct_default); +be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, &be_const_str_point_arr); be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_dac_voltage); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_reverse); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_ct); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_read12); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_dirty); +be_define_const_str(assign_rmt, "assign_rmt", 1047642576u, 0, 10, &be_const_str_delay); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_init_draw_arc_dsc); be_define_const_str(atan, "atan", 108579519u, 0, 4, NULL); -be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, &be_const_str_tolower); -be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, &be_const_str_lv_point); +be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, &be_const_str_trig); +be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, NULL); be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, NULL); -be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_editable); -be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, NULL); -be_define_const_str(available, "available", 1727918744u, 0, 9, NULL); -be_define_const_str(b, "b", 3876335077u, 0, 1, &be_const_str_read); -be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, NULL); -be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, &be_const_str_min); -be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_lights); -be_define_const_str(before_del, "before_del", 815924436u, 0, 10, NULL); -be_define_const_str(begin, "begin", 1748273790u, 0, 5, NULL); -be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, &be_const_str_floor); -be_define_const_str(bool, "bool", 3365180733u, 0, 4, NULL); +be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_get_aps_voltage); +be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, &be_const_str_ctypes_bytes); +be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_copy); +be_define_const_str(b, "b", 3876335077u, 0, 1, &be_const_str_sin); +be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, &be_const_str_gamma); +be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, NULL); +be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_find_key_i); +be_define_const_str(before_del, "before_del", 815924436u, 0, 10, &be_const_str_power_off); +be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_font_montserrat); +be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, NULL); +be_define_const_str(bool, "bool", 3365180733u, 0, 4, &be_const_str_widget_height_def); be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); -be_define_const_str(bri, "bri", 2112284244u, 0, 3, &be_const_str_calldepth); -be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_get_aps_voltage); -be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, NULL); +be_define_const_str(bri, "bri", 2112284244u, 0, 3, NULL); +be_define_const_str(bus, "bus", 1607822841u, 0, 3, NULL); +be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_insert); be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_chars_in_string); -be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_get_log); -be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_deregister_obj); -be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, &be_const_str_list); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_tomap); -be_define_const_str(can_show, "can_show", 960091187u, 0, 8, &be_const_str_decode); -be_define_const_str(cb, "cb", 1428787088u, 0, 2, &be_const_str_sys); -be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, &be_const_str_draw_arc); -be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, NULL); -be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, NULL); -be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, NULL); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_fast_loop_enabled); +be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_path); +be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_erase); +be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, NULL); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_lvgl_event_dispatch); +be_define_const_str(can_show, "can_show", 960091187u, 0, 8, &be_const_str_full_status); +be_define_const_str(cb, "cb", 1428787088u, 0, 2, &be_const_str_scr_act); +be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, &be_const_str_instance); +be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, &be_const_str_light_state); +be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, &be_const_str_widget_width_def); +be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, &be_const_str_r); be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, NULL); -be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_deg); -be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, NULL); -be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, NULL); -be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, NULL); +be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_clear_first_time); +be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_get_current_module_path); +be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, &be_const_str_decode); +be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_remove_driver); be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, &be_const_str_pin_used); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_load_freetype_font); -be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_set_alternate); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_string); -be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_get_warning_level); -be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, NULL); -be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, NULL); -be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_get_input_power_status); -be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_set_matrix_pixel_color); -be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_last_modified); -be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_get_bat_voltage); -be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_set_style_img_recolor); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_get_current_module_name); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, NULL); -be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_set_width); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_event_send); -be_define_const_str(compress, "compress", 2818084237u, 0, 8, &be_const_str_response_append); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL); -be_define_const_str(connect, "connect", 2866859257u, 0, 7, NULL); +be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, &be_const_str_find_op); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_set_useragent); +be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_sec); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_del); +be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_open); +be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, &be_const_str_get_cb_list); +be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, &be_const_str_content_send_style); +be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_light_to_id); +be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_while); +be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_get_battery_chargin_status); +be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_set_dcdc_enable); +be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_name); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_pixel_size); +be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_ismethod); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, NULL); +be_define_const_str(compress, "compress", 2818084237u, 0, 8, &be_const_str_v); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_consume_silence); +be_define_const_str(connect, "connect", 2866859257u, 0, 7, &be_const_str_as); be_define_const_str(connected, "connected", 1424938192u, 0, 9, NULL); -be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, NULL); -be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, &be_const_str_set_time); -be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, NULL); -be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, NULL); -be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, &be_const_str_find_op); -be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_widget_constructor); -be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_from_to); -be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_time_dump); -be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_set_ct); +be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, &be_const_str_set_dc_voltage); +be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, NULL); +be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, &be_const_str_read_bytes); +be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, &be_const_str_deregister_obj); +be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, NULL); +be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_rad); +be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_elif); +be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_response_append); +be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_wifi_bars_icon); be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, NULL); -be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_hs2rgb); -be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_exists); +be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_day); +be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_get_height); be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, &be_const_str_set_style_pad_right); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_remove_light); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_quality); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_set_useragent); +be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, &be_const_str_decrypt); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_get_current_module_name); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_lights); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_set_ldo_voltage); be_define_const_str(couldn_X27t_X20not_X20initialize_X20noepixelbus, "couldn't not initialize noepixelbus", 2536490812u, 0, 35, NULL); -be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_rad); -be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_get_hor_res); -be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, &be_const_str_get_bat_charge_current); -be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, &be_const_str_has); -be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson); -be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_json_append); -be_define_const_str(ctor, "ctor", 375399343u, 0, 4, &be_const_str_gen_cb); -be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_millis); +be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_imin); +be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_lv_wifi_bars_icon); +be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, NULL); +be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, &be_const_str_value_error); +be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, NULL); +be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_webclient); +be_define_const_str(ctor, "ctor", 375399343u, 0, 4, &be_const_str_setbits); +be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_gc); be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, NULL); -be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_draw_line); +be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_get_bat_voltage); be_define_const_str(day, "day", 3830391293u, 0, 3, NULL); -be_define_const_str(debug, "debug", 1483009432u, 0, 5, &be_const_str_lv_wifi_bars_icon); -be_define_const_str(decode, "decode", 3007678287u, 0, 6, &be_const_str_display_X2Eini); -be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, NULL); -be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, NULL); +be_define_const_str(debug, "debug", 1483009432u, 0, 5, &be_const_str_read32); +be_define_const_str(decode, "decode", 3007678287u, 0, 6, NULL); +be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, &be_const_str_obj); +be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_discover); be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_wifi_bars_icon); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_size); -be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_get_vbus_current); -be_define_const_str(delay, "delay", 1322381784u, 0, 5, NULL); -be_define_const_str(delete_all_configs, "delete_all_configs", 2382067578u, 0, 18, &be_const_str_web_add_handler); -be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_f); -be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_dimmer); -be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, NULL); -be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_run); -be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, &be_const_str_digital_read); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_has_arg); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, NULL); -be_define_const_str(dim, "dim", 3496118841u, 0, 3, &be_const_str_engine); -be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, NULL); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_engine); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_string); +be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_global); +be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_pop); +be_define_const_str(delete_all_configs, "delete_all_configs", 2382067578u, 0, 18, &be_const_str_web_add_button); +be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_millis); +be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_hs2rgb); +be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, &be_const_str_instance_size); +be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_lv_solidified); +be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, NULL); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_get_switch); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_p2); +be_define_const_str(dim, "dim", 3496118841u, 0, 3, &be_const_str_get_warning_level); +be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, &be_const_str_font_seg7); be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, NULL); -be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_to_gamma); -be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_pc_abs); -be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, &be_const_str_font_seg7); +be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_register_obj); +be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_select); +be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, NULL); be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); -be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, &be_const_str_enabled); -be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, &be_const_str_full_status); -be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, NULL); +be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, NULL); +be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, &be_const_str_ins_time); +be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, &be_const_str_pin_used); be_define_const_str(draw_ctx, "draw_ctx", 953366593u, 0, 8, NULL); -be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, NULL); -be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_issubclass); -be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, &be_const_str_insert); -be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, NULL); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_set_gain); -be_define_const_str(duration, "duration", 799079693u, 0, 8, NULL); -be_define_const_str(editable, "editable", 60532369u, 0, 8, &be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function); -be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_pc_rel); +be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_set_rate); +be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_set_y); +be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, &be_const_str_isnan); +be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, &be_const_str_widget_ctor_impl); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); +be_define_const_str(duration, "duration", 799079693u, 0, 8, &be_const_str_get_string); +be_define_const_str(editable, "editable", 60532369u, 0, 8, &be_const_str_point); +be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_set_channels); be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); -be_define_const_str(enabled, "enabled", 49525662u, 0, 7, &be_const_str_ip); -be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_zip); +be_define_const_str(enabled, "enabled", 49525662u, 0, 7, &be_const_str_offset); +be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_get_bat_charge_current); be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, &be_const_str_target_search); -be_define_const_str(engine, "engine", 3993360443u, 0, 6, &be_const_str_push); -be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str__X7B_X7D); -be_define_const_str(escape, "escape", 2652972038u, 0, 6, &be_const_str_public_key); -be_define_const_str(eth, "eth", 2191266556u, 0, 3, &be_const_str_remove_rule); +be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, &be_const_str_set_bits_per_sample); +be_define_const_str(engine, "engine", 3993360443u, 0, 6, &be_const_str_getbits); +be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_flush); +be_define_const_str(escape, "escape", 2652972038u, 0, 6, &be_const_str_nan); +be_define_const_str(eth, "eth", 2191266556u, 0, 3, &be_const_str_year); be_define_const_str(event, "event", 4264611999u, 0, 5, NULL); -be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, &be_const_str_iter); -be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_get_switch); -be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, &be_const_str_finish); -be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, &be_const_str_pop_path); -be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, NULL); -be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, NULL); +be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, NULL); +be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_pi); +be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, &be_const_str_exec_rules); +be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, &be_const_str_write); +be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, &be_const_str_time_str); +be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_remove); be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, NULL); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, NULL); -be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_obj_event_base); -be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_remote_port); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_set_first_time); -be_define_const_str(f, "f", 3809224601u, 0, 1, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_has); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_invalidate); +be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_i2c_enabled); +be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_function); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_json_append); +be_define_const_str(f, "f", 3809224601u, 0, 1, NULL); be_define_const_str(false, "false", 184981848u, 62, 5, NULL); be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, NULL); -be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, NULL); -be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_read24); -be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, &be_const_str_get_size); -be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_line_dsc); -be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_get_coords); -be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL); +be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, &be_const_str_update); +be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_page_autoconf_mgr); +be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, NULL); +be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_set_x); +be_define_const_str(find, "find", 3186656602u, 0, 4, NULL); +be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_full_state); be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL); -be_define_const_str(finish, "finish", 1494643858u, 0, 6, &be_const_str_show); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_set_mode_rgb); -be_define_const_str(flush, "flush", 3002334877u, 0, 5, &be_const_str_tele); -be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_point); -be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, &be_const_str_get_percentage); -be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, NULL); +be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL); +be_define_const_str(flush, "flush", 3002334877u, 0, 5, &be_const_str_strptime); +be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_set_hue16sat); +be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, &be_const_str_gamma8); +be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, &be_const_str_lv_signal_bars); be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_k); -be_define_const_str(from_to, "from_to", 21625507u, 0, 7, &be_const_str_r); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_set_first_time); +be_define_const_str(from_to, "from_to", 21625507u, 0, 7, &be_const_str_set_style_pad_all); be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, NULL); -be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, NULL); -be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_memory); -be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_save_before_restart); -be_define_const_str(full_status, "full_status", 648242459u, 0, 11, &be_const_str_now); -be_define_const_str(function, "function", 2664841801u, 0, 8, &be_const_str_get_height); -be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, &be_const_str_get_style_pad_right); -be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_json_fdump_list); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_lv_point_arr); -be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_input); -be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, NULL); -be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_remove); -be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_get_cb_list); -be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, &be_const_str_set_bits_per_sample); -be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, NULL); +be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, &be_const_str_widget_dtor_cb); +be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_set_percentage); +be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_int); +be_define_const_str(full_status, "full_status", 648242459u, 0, 11, &be_const_str_start); +be_define_const_str(function, "function", 2664841801u, 0, 8, NULL); +be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, &be_const_str_lv_obj_class); +be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_splash); +be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL); +be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_split); +be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_obj_event_base); +be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_pin_mode); +be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, NULL); +be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, &be_const_str_resp_cmnd_str); be_define_const_str(get_bat_current, "get_bat_current", 1912106073u, 0, 15, NULL); -be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, &be_const_str_as); -be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, &be_const_str_set_huesat); -be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, &be_const_str_resp_cmnd_done); -be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, &be_const_str_math); +be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, &be_const_str_load_templates); +be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, NULL); +be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, NULL); +be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, NULL); be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, NULL); -be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, &be_const_str_set_style_radius); -be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, NULL); -be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, &be_const_str_missing_X20name); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_x); -be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, NULL); -be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_lv_wifi_bars); -be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, NULL); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_lv_signal_arcs); -be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, NULL); -be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, &be_const_str_getbits); -be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_valuer_error); -be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, &be_const_str_target); -be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_update); +be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, &be_const_str_range); +be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, &be_const_str_listdir); +be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, &be_const_str_lv_wifi_bars); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, NULL); +be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, &be_const_str_iter); +be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_members); +be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, &be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, NULL); +be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, &be_const_str_seti); +be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, &be_const_str_get_vbus_voltage); +be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL); +be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, NULL); +be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_lv_signal_arcs); be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); -be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_upper); -be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, &be_const_str_set_xy); -be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, &be_const_str_light_state); -be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, &be_const_str_group_def); -be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str_pin); -be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, &be_const_str_null_cb); -be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, &be_const_str_rotate); -be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, &be_const_str_hex); -be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, &be_const_str_screenshot); -be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); -be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str_power_off); -be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, NULL); -be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_set_ldo_voltage); +be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, NULL); +be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, NULL); +be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, &be_const_str_groups); +be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, &be_const_str_img); +be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str_toptr); +be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, &be_const_str_get_width); +be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, &be_const_str_missing_X20name); +be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, NULL); +be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, &be_const_str_push_path); +be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, NULL); +be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str_tob64); +be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_set_bri); +be_define_const_str(geti, "geti", 2381006490u, 0, 4, NULL); be_define_const_str(global, "global", 503252654u, 0, 6, NULL); -be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, NULL); -be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_lv_clock_icon); -be_define_const_str(groups, "groups", 2943077229u, 0, 6, &be_const_str_minute); -be_define_const_str(h, "h", 3977000791u, 0, 1, &be_const_str_p2); -be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_month); -be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, NULL); -be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, NULL); -be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_remove_cron); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_sec); -be_define_const_str(hour, "hour", 3053661199u, 0, 4, &be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29); -be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, &be_const_str_set_style_img_recolor_opa); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, &be_const_str_set); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, &be_const_str_stop_iteration); +be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, &be_const_str_save_before_restart); +be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_io_error); +be_define_const_str(groups, "groups", 2943077229u, 0, 6, NULL); +be_define_const_str(h, "h", 3977000791u, 0, 1, &be_const_str_math); +be_define_const_str(has, "has", 3988721635u, 0, 3, NULL); +be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, &be_const_str_set_style_text_color); +be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_set_pixel_color); +be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_montserrat_font); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_remove_light); +be_define_const_str(hour, "hour", 3053661199u, 0, 4, &be_const_str_lv_module_init); +be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, &be_const_str_return_X20code_X3D_X25i); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, &be_const_str_offseta); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, NULL); be_define_const_str(hue, "hue", 3817694041u, 0, 3, NULL); be_define_const_str(hue_ntv, "hue_ntv", 705068642u, 0, 7, NULL); -be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus); +be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_ip); be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); -be_define_const_str(id, "id", 926444256u, 0, 2, &be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27); -be_define_const_str(id_X20must_X20be_X20of_X20type_X20_X27int_X27, "id must be of type 'int'", 2097653458u, 0, 24, &be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(id, "id", 926444256u, 0, 2, &be_const_str_scan); +be_define_const_str(id_X20must_X20be_X20of_X20type_X20_X27int_X27, "id must be of type 'int'", 2097653458u, 0, 24, &be_const_str_write_gpio); be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_montserrat_font); -be_define_const_str(img, "img", 2229740804u, 0, 3, NULL); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_set_channels); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_wd); +be_define_const_str(img, "img", 2229740804u, 0, 3, &be_const_str_next); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_init_draw_line_dsc); be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(init, "init", 380752755u, 0, 4, NULL); -be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, &be_const_str_wifi_arcs_icon); -be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_touch_update); -be_define_const_str(input, "input", 4191711099u, 0, 5, NULL); -be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, &be_const_str_solidified); +be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_strftime); +be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, &be_const_str_kv); +be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_matrix); +be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_lv); +be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, &be_const_str_member); be_define_const_str(ins_ramp, "ins_ramp", 1068049360u, 0, 8, NULL); -be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, NULL); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_path); -be_define_const_str(instance, "instance", 193386898u, 0, 8, &be_const_str_while); -be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, &be_const_str_read8); -be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, &be_const_str_reverse_gamma10); +be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, &be_const_str_is_running); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_load_freetype_font); +be_define_const_str(instance, "instance", 193386898u, 0, 8, NULL); +be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, NULL); +be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, &be_const_str_state); be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); -be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, &be_const_str_leds); -be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_widget_dtor_impl); -be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, &be_const_str_io_error); -be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, &be_const_str_def); -be_define_const_str(ip, "ip", 1261996636u, 0, 2, &be_const_str_offset); -be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, &be_const_str_on); -be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, &be_const_str_pi); -be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, &be_const_str_tag); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_set_timeouts); +be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, &be_const_str_reset_search); +be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_memory); +be_define_const_str(invalid_X20GPIO_X20number, "invalid GPIO number", 4135793328u, 0, 19, NULL); +be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, &be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus); +be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, &be_const_str_settings); +be_define_const_str(ip, "ip", 1261996636u, 0, 2, &be_const_str_wire); +be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, NULL); +be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, &be_const_str_readbytes); +be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, NULL); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, NULL); be_define_const_str(ismethod, "ismethod", 3513438880u, 0, 8, NULL); -be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, &be_const_str_end); +be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, NULL); be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, NULL); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_percentage); -be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_settings); -be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_lv_wifi_arcs); -be_define_const_str(json, "json", 916562499u, 0, 4, &be_const_str_map); -be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_save); -be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, NULL); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_loop); +be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_lower); +be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL); +be_define_const_str(json, "json", 916562499u, 0, 4, NULL); +be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27); +be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, &be_const_str_wifi_arcs_icon); be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, NULL); -be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, NULL); -be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, NULL); -be_define_const_str(k, "k", 3993778410u, 0, 1, &be_const_str_p1); -be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_lv); +be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, &be_const_str_set_timer); +be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, &be_const_str_resize); +be_define_const_str(k, "k", 3993778410u, 0, 1, NULL); +be_define_const_str(keys, "keys", 4182378701u, 0, 4, NULL); be_define_const_str(kv, "kv", 1497177492u, 0, 2, NULL); -be_define_const_str(label, "label", 4137097213u, 0, 5, NULL); -be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, &be_const_str_tasmota_log_reader); +be_define_const_str(label, "label", 4137097213u, 0, 5, &be_const_str_setmember); +be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, &be_const_str_stop_iteration); be_define_const_str(leds, "leds", 558858555u, 0, 4, NULL); -be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, &be_const_str_members); -be_define_const_str(light, "light", 3801947695u, 0, 5, &be_const_str_lv_coord_arr); -be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, &be_const_str_write_gpio); +be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, &be_const_str_web_add_console_button); +be_define_const_str(light, "light", 3801947695u, 0, 5, NULL); +be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, &be_const_str_set_style_radius); be_define_const_str(light_state, "light_state", 905783845u, 0, 11, NULL); -be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, NULL); +be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, &be_const_str_upper); be_define_const_str(lights, "lights", 425118420u, 0, 6, NULL); be_define_const_str(line_dsc, "line_dsc", 4094490978u, 0, 8, NULL); -be_define_const_str(list, "list", 217798785u, 0, 4, NULL); -be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, &be_const_str_widget_event_impl); -be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, NULL); -be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_persist); -be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_set_dc_voltage); -be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, &be_const_str_page_autoconf_mgr); -be_define_const_str(local, "local", 2621662984u, 0, 5, &be_const_str_print); -be_define_const_str(log, "log", 1062293841u, 0, 3, NULL); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_value); -be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_v); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL); -be_define_const_str(lv, "lv", 1529997255u, 0, 2, &be_const_str_return_X20code_X3D_X25i); -be_define_const_str(lv_, "lv_", 663721032u, 0, 3, NULL); -be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, &be_const_str_set_percentage); -be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, &be_const_str_readline); -be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, &be_const_str_lv_obj_class); +be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_strip); +be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, &be_const_str_readline); +be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, &be_const_str_manuf); +be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_make_cb); +be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_set_width); +be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, NULL); +be_define_const_str(local, "local", 2621662984u, 0, 5, &be_const_str_web_send); +be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_module); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_lv_); +be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_set_style_border_width); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_lv_point); +be_define_const_str(lv, "lv", 1529997255u, 0, 2, &be_const_str_pc_abs); +be_define_const_str(lv_, "lv_", 663721032u, 0, 3, &be_const_str_running); +be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, &be_const_str_web_add_handler); +be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, NULL); +be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, NULL); be_define_const_str(lv_event_cb, "lv_event_cb", 2480731016u, 0, 11, NULL); be_define_const_str(lv_extra, "lv_extra", 399561998u, 0, 8, NULL); -be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, &be_const_str_out_X20of_X20range); -be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, &be_const_str_set_power); -be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, &be_const_str_webclient); +be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, &be_const_str_lv_wifi_arcs); +be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL); +be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, NULL); be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, NULL); be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, NULL); -be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, &be_const_str_unsubscribe); -be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, &be_const_str_sinh); -be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, &be_const_str_web_add_main_button); -be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, &be_const_str_seg7_font); -be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, &be_const_str_sin); -be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, NULL); -be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, NULL); -be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, &be_const_str_publish_result); -be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, &be_const_str_next_cron); -be_define_const_str(manuf, "manuf", 4120929560u, 0, 5, &be_const_str_uuid4); +be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, &be_const_str_setitem); +be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, NULL); +be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, NULL); +be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, &be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); +be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, &be_const_str_stop); +be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, &be_const_str_for); +be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, &be_const_str_set_pwm); +be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, NULL); +be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, NULL); +be_define_const_str(manuf, "manuf", 4120929560u, 0, 5, NULL); be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); be_define_const_str(math, "math", 4001929615u, 0, 4, NULL); be_define_const_str(matrix, "matrix", 365099244u, 0, 6, NULL); be_define_const_str(member, "member", 719708611u, 0, 6, NULL); -be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_range); -be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_year); +be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_pc_rel); +be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_resp_cmnd_failed); be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); be_define_const_str(min, "min", 3381609815u, 0, 3, NULL); be_define_const_str(minute, "minute", 954666857u, 0, 6, NULL); -be_define_const_str(missing_X20name, "missing name", 3635024006u, 0, 12, &be_const_str_web_add_button); -be_define_const_str(model, "model", 2961925722u, 0, 5, &be_const_str_running); -be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); +be_define_const_str(missing_X20name, "missing name", 3635024006u, 0, 12, NULL); +be_define_const_str(model, "model", 2961925722u, 0, 5, NULL); +be_define_const_str(module, "module", 3617558685u, 0, 6, NULL); be_define_const_str(month, "month", 3598321157u, 0, 5, NULL); -be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str_set_chg_current); -be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_scale_uint); -be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL); -be_define_const_str(next, "next", 1555467752u, 0, 4, &be_const_str_pc); -be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, NULL); +be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, NULL); +be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_set_matrix_pixel_color); +be_define_const_str(nan, "nan", 797905850u, 0, 3, &be_const_str_quality); +be_define_const_str(next, "next", 1555467752u, 0, 4, &be_const_str_no_X20more_X20RMT_X20channel_X20available); +be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, &be_const_str_web_add_config_button); be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, NULL); -be_define_const_str(now, "now", 682728183u, 0, 3, &be_const_str_point_arr); -be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, &be_const_str_remove_driver); -be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_readbytes); -be_define_const_str(o, "o", 3926667934u, 0, 1, &be_const_str_preinit); -be_define_const_str(obj, "obj", 3343205242u, 0, 3, NULL); +be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, &be_const_str_reset); +be_define_const_str(no_X20more_X20RMT_X20channel_X20available, "no more RMT channel available", 305838632u, 0, 29, &be_const_str_null_cb); +be_define_const_str(now, "now", 682728183u, 0, 3, &be_const_str_set_mode_rgb); +be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, &be_const_str_remove_rule); +be_define_const_str(number, "number", 467038368u, 0, 6, NULL); +be_define_const_str(o, "o", 3926667934u, 0, 1, NULL); +be_define_const_str(obj, "obj", 3343205242u, 0, 3, &be_const_str_widget_editable); be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, NULL); -be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, &be_const_str_pixel_size); +be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, &be_const_str_set_gain); be_define_const_str(offset, "offset", 348705738u, 0, 6, NULL); -be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, &be_const_str_widget_destructor); +be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, &be_const_str_remote_ip); be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, &be_const_str_wifi); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, &be_const_str_strptime); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, NULL); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, NULL); be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); -be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, &be_const_str_refr_now); -be_define_const_str(p1, "p1", 2689521274u, 0, 2, &be_const_str_scr_act); -be_define_const_str(p2, "p2", 2672743655u, 0, 2, &be_const_str_pixel_count); -be_define_const_str(page_autoconf_ctl, "page_autoconf_ctl", 2453381496u, 0, 17, NULL); -be_define_const_str(page_autoconf_mgr, "page_autoconf_mgr", 3643937031u, 0, 17, NULL); -be_define_const_str(param, "param", 1309554226u, 0, 5, &be_const_str_web_sensor); +be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, NULL); +be_define_const_str(p1, "p1", 2689521274u, 0, 2, NULL); +be_define_const_str(p2, "p2", 2672743655u, 0, 2, &be_const_str_splash_remove); +be_define_const_str(page_autoconf_ctl, "page_autoconf_ctl", 2453381496u, 0, 17, &be_const_str_widget_ctor_cb); +be_define_const_str(page_autoconf_mgr, "page_autoconf_mgr", 3643937031u, 0, 17, &be_const_str_sat); +be_define_const_str(param, "param", 1309554226u, 0, 5, &be_const_str_send_multicast); be_define_const_str(path, "path", 2223459638u, 0, 4, NULL); -be_define_const_str(pc, "pc", 1313756516u, 0, 2, &be_const_str_wd); -be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_width); -be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_widget_ctor_cb); +be_define_const_str(pc, "pc", 1313756516u, 0, 2, NULL); +be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_persist); +be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_touch_update); be_define_const_str(pct, "pct", 1431300144u, 0, 3, NULL); be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, NULL); -be_define_const_str(persist, "persist", 3917083779u, 0, 7, &be_const_str_set_text); -be_define_const_str(persist_X2E_p_X20is_X20not_X20a_X20map, "persist._p is not a map", 1176528732u, 0, 23, &be_const_str_widget_event_cb); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_super); +be_define_const_str(persist, "persist", 3917083779u, 0, 7, NULL); +be_define_const_str(persist_X2E_p_X20is_X20not_X20a_X20map, "persist._p is not a map", 1176528732u, 0, 23, &be_const_str_shared_key); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_set_style_pad_right); be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str__X7D); -be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, &be_const_str_widget_group_def); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, &be_const_str_run); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL); +be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, NULL); be_define_const_str(pixel_size, "pixel_size", 2209135785u, 0, 10, NULL); -be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, NULL); -be_define_const_str(point, "point", 414084241u, 0, 5, &be_const_str_real); +be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, &be_const_str_width); +be_define_const_str(point, "point", 414084241u, 0, 5, NULL); be_define_const_str(point_arr, "point_arr", 1140859857u, 0, 9, NULL); -be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); +be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_web_send_decimal); be_define_const_str(pop_path, "pop_path", 2403243998u, 0, 8, NULL); -be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_splash_init); -be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, NULL); -be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, &be_const_str_refr_size); +be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL); +be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, &be_const_str_target); +be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, &be_const_str_reapply); be_define_const_str(print, "print", 372738696u, 0, 5, NULL); -be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, NULL); -be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_write8); -be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, &be_const_str_setitem); -be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_sat); -be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, NULL); -be_define_const_str(quality, "quality", 2597670950u, 0, 7, NULL); -be_define_const_str(r, "r", 4144776981u, 0, 1, NULL); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL); +be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_set_light); +be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); +be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, NULL); +be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); +be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, &be_const_str_redirect); +be_define_const_str(quality, "quality", 2597670950u, 0, 7, &be_const_str_register_button_encoder); +be_define_const_str(r, "r", 4144776981u, 0, 1, &be_const_str_set_ldo_enable); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_rtc); be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_remove_cmd); -be_define_const_str(range, "range", 4208725202u, 0, 5, &be_const_str_web_add_management_button); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_try); +be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); be_define_const_str(read12, "read12", 4291076970u, 0, 6, NULL); be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL); be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL); be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL); be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL); -be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); -be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, &be_const_str_send); +be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, &be_const_str_set_power); +be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, NULL); be_define_const_str(readbytes, "readbytes", 2716426756u, 0, 9, NULL); be_define_const_str(readline, "readline", 1212709927u, 0, 8, NULL); -be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_resolvecmnd); -be_define_const_str(reapply, "reapply", 3778939332u, 0, 7, NULL); -be_define_const_str(redirect, "redirect", 389758641u, 0, 8, &be_const_str_round_end); +be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_search); +be_define_const_str(reapply, "reapply", 3778939332u, 0, 7, &be_const_str_wifi); +be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL); be_define_const_str(refr_now, "refr_now", 3191284735u, 0, 8, NULL); -be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, NULL); -be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, &be_const_str_resp_cmnd); -be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); +be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, &be_const_str_tolower); +be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, &be_const_str_wifi_arcs); +be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, &be_const_str_scale_uint); be_define_const_str(register_obj, "register_obj", 3982614770u, 0, 12, NULL); be_define_const_str(remote_ip, "remote_ip", 2953154693u, 0, 9, NULL); -be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, &be_const_str_tcpclient); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_run_cron); -be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_started); -be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, NULL); -be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, NULL); -be_define_const_str(remove_light, "remove_light", 1783624394u, 0, 12, NULL); -be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, &be_const_str_set_x); +be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, &be_const_str_write_file); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); +be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_uuid4); +be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, &be_const_str_end); +be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, &be_const_str_round_start); +be_define_const_str(remove_light, "remove_light", 1783624394u, 0, 12, &be_const_str_signal_change); +be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, NULL); -be_define_const_str(reset, "reset", 1695364032u, 0, 5, &be_const_str_try); -be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL); +be_define_const_str(reset, "reset", 1695364032u, 0, 5, NULL); +be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, &be_const_str_set_style_bg_color); be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); -be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); -be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); -be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, &be_const_str_set_style_text_font); +be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, &be_const_str_serial); +be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_skip); +be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, &be_const_str_set_height); be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); -be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, &be_const_str_splash); -be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); +be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); +be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_rotate); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL); be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); be_define_const_str(return_X20code_X3D_X25i, "return code=%i", 2127454401u, 0, 14, NULL); be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); be_define_const_str(rotate, "rotate", 2784296202u, 0, 6, NULL); -be_define_const_str(round_end, "round_end", 985288225u, 0, 9, &be_const_str_set_align); -be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, &be_const_str_send_multicast); +be_define_const_str(round_end, "round_end", 985288225u, 0, 9, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); +be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, &be_const_str_set_timeouts); be_define_const_str(rounded, "rounded", 1920734138u, 0, 7, NULL); -be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, &be_const_str_set_style_line_color); +be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, &be_const_str_y); be_define_const_str(rule, "rule", 4230889683u, 0, 4, NULL); -be_define_const_str(run, "run", 718098122u, 0, 3, &be_const_str__X7B); +be_define_const_str(run, "run", 718098122u, 0, 3, NULL); be_define_const_str(run_bat, "run_bat", 2536903298u, 0, 7, NULL); be_define_const_str(run_cron, "run_cron", 1929098555u, 0, 8, NULL); -be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, &be_const_str_continue); -be_define_const_str(running, "running", 343848780u, 0, 7, &be_const_str_w); +be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, &be_const_str_web_add_main_button); +be_define_const_str(running, "running", 343848780u, 0, 7, &be_const_str_size); be_define_const_str(sat, "sat", 3592196823u, 0, 3, NULL); -be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); +be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_tanh); be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); be_define_const_str(scan, "scan", 3974641896u, 0, 4, NULL); -be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_signal_change); -be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, &be_const_str_select); +be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_web_sensor); +be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); be_define_const_str(search, "search", 2150836393u, 0, 6, NULL); -be_define_const_str(sec, "sec", 3139892658u, 0, 3, NULL); +be_define_const_str(sec, "sec", 3139892658u, 0, 3, &be_const_str_set_chg_current); be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL); be_define_const_str(select, "select", 297952813u, 0, 6, NULL); -be_define_const_str(send, "send", 1919010991u, 0, 4, NULL); -be_define_const_str(send_multicast, "send_multicast", 812185870u, 0, 14, &be_const_str_shared_key); -be_define_const_str(serial, "serial", 3687697785u, 0, 6, &be_const_str_subscribe); -be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); +be_define_const_str(send, "send", 1919010991u, 0, 4, &be_const_str_set_mode_ct); +be_define_const_str(send_multicast, "send_multicast", 812185870u, 0, 14, &be_const_str_xy); +be_define_const_str(serial, "serial", 3687697785u, 0, 6, NULL); +be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_zero); be_define_const_str(set_align, "set_align", 2592958913u, 0, 9, NULL); -be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, NULL); +be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, &be_const_str_yield); be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL); -be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, NULL); -be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, &be_const_str_write_file); -be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, &be_const_str_top); -be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, &be_const_str_set_light); -be_define_const_str(set_ct, "set_ct", 972363187u, 0, 6, &be_const_str_set_mode_ct); +be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, &be_const_str_widget_cb); +be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, &be_const_str_wire1); +be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, &be_const_str_setrange); +be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, &be_const_str_web_add_management_button); +be_define_const_str(set_ct, "set_ct", 972363187u, 0, 6, &be_const_str_solidified); be_define_const_str(set_dc_voltage, "set_dc_voltage", 2181981936u, 0, 14, NULL); -be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, &be_const_str_set_user_data); -be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, &be_const_str_xy); -be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, &be_const_str_tasmota); +be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, &be_const_str_tomap); +be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, &be_const_str_wire_scan); +be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, &be_const_str__X7B); be_define_const_str(set_gain, "set_gain", 3847781975u, 0, 8, NULL); -be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, NULL); -be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, &be_const_str_widget_ctor_impl); -be_define_const_str(set_huesat, "set_huesat", 626496854u, 0, 10, &be_const_str_toptr); +be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, &be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, &be_const_str_sinh); +be_define_const_str(set_huesat, "set_huesat", 626496854u, 0, 10, NULL); be_define_const_str(set_ldo_enable, "set_ldo_enable", 2916502041u, 0, 14, NULL); -be_define_const_str(set_ldo_voltage, "set_ldo_voltage", 4090501160u, 0, 15, &be_const_str_set_pwm); -be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, &be_const_str_seti); +be_define_const_str(set_ldo_voltage, "set_ldo_voltage", 4090501160u, 0, 15, NULL); +be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); be_define_const_str(set_matrix_pixel_color, "set_matrix_pixel_color", 1197149462u, 0, 22, NULL); be_define_const_str(set_mode_ct, "set_mode_ct", 665073295u, 0, 11, NULL); -be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, &be_const_str_set_style_text_color); +be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, &be_const_str_set_reachable); be_define_const_str(set_percentage, "set_percentage", 2952022724u, 0, 14, NULL); -be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, NULL); +be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, &be_const_str_tasmota); be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); be_define_const_str(set_pwm, "set_pwm", 3781811012u, 0, 7, NULL); -be_define_const_str(set_rate, "set_rate", 1154016838u, 0, 8, &be_const_str_import); -be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, &be_const_str_splash_remove); +be_define_const_str(set_rate, "set_rate", 1154016838u, 0, 8, &be_const_str_if); +be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, &be_const_str_set_rgb); be_define_const_str(set_rgb, "set_rgb", 3380244855u, 0, 7, NULL); -be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, &be_const_str_static); -be_define_const_str(set_style_bg_color, "set_style_bg_color", 1689513089u, 0, 18, &be_const_str_set_style_border_width); +be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, NULL); +be_define_const_str(set_style_bg_color, "set_style_bg_color", 1689513089u, 0, 18, NULL); be_define_const_str(set_style_border_width, "set_style_border_width", 549034191u, 0, 22, NULL); -be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, &be_const_str_web_add_console_button); -be_define_const_str(set_style_img_recolor_opa, "set_style_img_recolor_opa", 2667062087u, 0, 25, &be_const_str_wifi_bars); -be_define_const_str(set_style_line_color, "set_style_line_color", 3665238976u, 0, 20, &be_const_str_tan); -be_define_const_str(set_style_pad_all, "set_style_pad_all", 3987000607u, 0, 17, &be_const_str_true); +be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, NULL); +be_define_const_str(set_style_img_recolor_opa, "set_style_img_recolor_opa", 2667062087u, 0, 25, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); +be_define_const_str(set_style_line_color, "set_style_line_color", 3665238976u, 0, 20, &be_const_str_import); +be_define_const_str(set_style_pad_all, "set_style_pad_all", 3987000607u, 0, 17, NULL); be_define_const_str(set_style_pad_right, "set_style_pad_right", 3314069054u, 0, 19, NULL); -be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, &be_const_str_webserver); -be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, NULL); +be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, &be_const_str_do); +be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, &be_const_str_target_search); be_define_const_str(set_style_text_font, "set_style_text_font", 1028590019u, 0, 19, NULL); -be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, NULL); -be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, &be_const_str_wire1); -be_define_const_str(set_time, "set_time", 900236405u, 0, 8, NULL); +be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, &be_const_str_static); +be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, &be_const_str_sqrt); +be_define_const_str(set_time, "set_time", 900236405u, 0, 8, &be_const_str_time_reached); be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL); be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); be_define_const_str(set_user_data, "set_user_data", 3596043360u, 0, 13, NULL); be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, NULL); be_define_const_str(set_width, "set_width", 484671920u, 0, 9, NULL); -be_define_const_str(set_x, "set_x", 1849400772u, 0, 5, NULL); -be_define_const_str(set_xy, "set_xy", 1155092615u, 0, 6, &be_const_str_set_zoom); -be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, &be_const_str_signal_arcs); +be_define_const_str(set_x, "set_x", 1849400772u, 0, 5, &be_const_str_else); +be_define_const_str(set_xy, "set_xy", 1155092615u, 0, 6, NULL); +be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, &be_const_str_subscribe); be_define_const_str(set_zoom, "set_zoom", 1925134407u, 0, 8, NULL); be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL); be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL); -be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); +be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, &be_const_str__X7D); be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); -be_define_const_str(settings, "settings", 1745255176u, 0, 8, NULL); -be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL); +be_define_const_str(settings, "settings", 1745255176u, 0, 8, &be_const_str_top); +be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, &be_const_str_write8); be_define_const_str(show, "show", 2840060476u, 0, 4, NULL); -be_define_const_str(signal_arcs, "signal_arcs", 1505996127u, 0, 11, &be_const_str_trig); -be_define_const_str(signal_bars, "signal_bars", 3181573600u, 0, 11, &be_const_str_x1); -be_define_const_str(signal_change, "signal_change", 3262299350u, 0, 13, NULL); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_sqrt); -be_define_const_str(sinh, "sinh", 282220607u, 0, 4, &be_const_str_raise); -be_define_const_str(size, "size", 597743964u, 0, 4, &be_const_str_wire2); +be_define_const_str(signal_arcs, "signal_arcs", 1505996127u, 0, 11, &be_const_str_width_def); +be_define_const_str(signal_bars, "signal_bars", 3181573600u, 0, 11, NULL); +be_define_const_str(signal_change, "signal_change", 3262299350u, 0, 13, &be_const_str_widget_struct_by_class); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_unknown_X20instruction); +be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); +be_define_const_str(size, "size", 597743964u, 0, 4, NULL); be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL); -be_define_const_str(solidified, "solidified", 3257553487u, 0, 10, &be_const_str_value_error); -be_define_const_str(splash, "splash", 2531464038u, 0, 6, NULL); +be_define_const_str(solidified, "solidified", 3257553487u, 0, 10, NULL); +be_define_const_str(splash, "splash", 2531464038u, 0, 6, &be_const_str_unsubscribe); be_define_const_str(splash_init, "splash_init", 1522992293u, 0, 11, NULL); -be_define_const_str(splash_remove, "splash_remove", 3132020807u, 0, 13, NULL); -be_define_const_str(split, "split", 2276994531u, 0, 5, &be_const_str_stop); +be_define_const_str(splash_remove, "splash_remove", 3132020807u, 0, 13, &be_const_str_tag); +be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); -be_define_const_str(srand, "srand", 465518633u, 0, 5, &be_const_str_time_reached); +be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); be_define_const_str(started, "started", 2153339806u, 0, 7, NULL); -be_define_const_str(state, "state", 2016490230u, 0, 5, &be_const_str_break); +be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL); -be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, &be_const_str_traceback); +be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, NULL); be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); be_define_const_str(string, "string", 398550328u, 0, 6, NULL); @@ -795,30 +800,30 @@ be_define_const_str(strptime, "strptime", 1277910361u, 0, 8, NULL); be_define_const_str(subscribe, "subscribe", 2946386435u, 0, 9, NULL); be_define_const_str(success, "success", 979353360u, 0, 7, NULL); be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); -be_define_const_str(sys, "sys", 3277365014u, 0, 3, &be_const_str_do); +be_define_const_str(sys, "sys", 3277365014u, 0, 3, NULL); be_define_const_str(tag, "tag", 2516003219u, 0, 3, NULL); -be_define_const_str(tan, "tan", 2633446552u, 0, 3, &be_const_str_wire); -be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); +be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); +be_define_const_str(tanh, "tanh", 153638352u, 0, 4, &be_const_str_toupper); be_define_const_str(target, "target", 845187144u, 0, 6, NULL); be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); be_define_const_str(tasmota, "tasmota", 424643812u, 0, 7, NULL); be_define_const_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29, "tasmota.get_light() is deprecated, use light.get()", 3525753647u, 0, 50, NULL); -be_define_const_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, "tasmota.set_light() is deprecated, use light.set()", 2124937871u, 0, 50, NULL); +be_define_const_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, "tasmota.set_light() is deprecated, use light.set()", 2124937871u, 0, 50, &be_const_str_time_dump); be_define_const_str(tasmota_log_reader, "tasmota_log_reader", 3555069257u, 0, 18, NULL); -be_define_const_str(tcpclient, "tcpclient", 3828797983u, 0, 9, NULL); -be_define_const_str(tele, "tele", 3474458061u, 0, 4, NULL); -be_define_const_str(the_X20second_X20argument_X20is_X20not_X20a_X20function, "the second argument is not a function", 3954574469u, 0, 37, NULL); +be_define_const_str(tcpclient, "tcpclient", 3828797983u, 0, 9, &be_const_str_tr); +be_define_const_str(tele, "tele", 3474458061u, 0, 4, &be_const_str_type); +be_define_const_str(the_X20second_X20argument_X20is_X20not_X20a_X20function, "the second argument is not a function", 3954574469u, 0, 37, &be_const_str_widget_group_def); be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); be_define_const_str(to_gamma, "to_gamma", 1597139862u, 0, 8, NULL); -be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL); +be_define_const_str(tob64, "tob64", 373777640u, 0, 5, &be_const_str_zip); be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); -be_define_const_str(tomap, "tomap", 612167626u, 0, 5, &be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); +be_define_const_str(tomap, "tomap", 612167626u, 0, 5, NULL); be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, NULL); -be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, &be_const_str_tr); -be_define_const_str(touch_update, "touch_update", 1918102068u, 0, 12, NULL); +be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); +be_define_const_str(touch_update, "touch_update", 1918102068u, 0, 12, &be_const_str_write_bit); be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); be_define_const_str(tr, "tr", 1195724803u, 0, 2, NULL); be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); @@ -826,23 +831,23 @@ be_define_const_str(trig, "trig", 2073314619u, 0, 4, NULL); be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); -be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); -be_define_const_str(type_error, "type_error", 3789613824u, 0, 10, NULL); +be_define_const_str(type, "type", 1361572173u, 0, 4, &be_const_str_true); +be_define_const_str(type_error, "type_error", 3789613824u, 0, 10, &be_const_str_write_bytes); be_define_const_str(udp, "udp", 1253872004u, 0, 3, NULL); -be_define_const_str(unknown_X20instruction, "unknown instruction", 1093911841u, 0, 19, &be_const_str_class); +be_define_const_str(unknown_X20instruction, "unknown instruction", 1093911841u, 0, 19, NULL); be_define_const_str(unsubscribe, "unsubscribe", 4190043798u, 0, 11, NULL); -be_define_const_str(update, "update", 672109684u, 0, 6, &be_const_str_widget_editable); +be_define_const_str(update, "update", 672109684u, 0, 6, NULL); be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL); -be_define_const_str(uuid4, "uuid4", 1153582450u, 0, 5, &be_const_str_write); +be_define_const_str(uuid4, "uuid4", 1153582450u, 0, 5, NULL); be_define_const_str(v, "v", 4077666505u, 0, 1, NULL); be_define_const_str(value, "value", 1113510858u, 0, 5, NULL); -be_define_const_str(value_error, "value_error", 773297791u, 0, 11, NULL); +be_define_const_str(value_error, "value_error", 773297791u, 0, 11, &be_const_str_class); be_define_const_str(valuer_error, "valuer_error", 2567947105u, 0, 12, NULL); be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); be_define_const_str(w, "w", 4060888886u, 0, 1, NULL); be_define_const_str(wd, "wd", 1531424278u, 0, 2, NULL); -be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, &be_const_str_except); +be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, NULL); be_define_const_str(web_add_config_button, "web_add_config_button", 639674325u, 0, 21, NULL); be_define_const_str(web_add_console_button, "web_add_console_button", 3481436192u, 0, 22, NULL); be_define_const_str(web_add_handler, "web_add_handler", 3990174962u, 0, 15, NULL); @@ -856,44 +861,44 @@ be_define_const_str(webserver, "webserver", 1572454038u, 0, 9, NULL); be_define_const_str(while, "while", 231090382u, 53, 5, NULL); be_define_const_str(widget_cb, "widget_cb", 2763583055u, 0, 9, NULL); be_define_const_str(widget_constructor, "widget_constructor", 2543785934u, 0, 18, NULL); -be_define_const_str(widget_ctor_cb, "widget_ctor_cb", 876007560u, 0, 14, &be_const_str_y); +be_define_const_str(widget_ctor_cb, "widget_ctor_cb", 876007560u, 0, 14, NULL); be_define_const_str(widget_ctor_impl, "widget_ctor_impl", 194252479u, 0, 16, NULL); be_define_const_str(widget_destructor, "widget_destructor", 4207388345u, 0, 17, NULL); be_define_const_str(widget_dtor_cb, "widget_dtor_cb", 3151545845u, 0, 14, NULL); be_define_const_str(widget_dtor_impl, "widget_dtor_impl", 520430610u, 0, 16, NULL); be_define_const_str(widget_editable, "widget_editable", 3821793286u, 0, 15, NULL); -be_define_const_str(widget_event, "widget_event", 1951408186u, 0, 12, NULL); +be_define_const_str(widget_event, "widget_event", 1951408186u, 0, 12, &be_const_str_wire2); be_define_const_str(widget_event_cb, "widget_event_cb", 1508466754u, 0, 15, NULL); be_define_const_str(widget_event_impl, "widget_event_impl", 2178430561u, 0, 17, NULL); be_define_const_str(widget_group_def, "widget_group_def", 1246968785u, 0, 16, NULL); be_define_const_str(widget_height_def, "widget_height_def", 3131667813u, 0, 17, NULL); be_define_const_str(widget_instance_size, "widget_instance_size", 2055354779u, 0, 20, NULL); -be_define_const_str(widget_struct_by_class, "widget_struct_by_class", 3806373842u, 0, 22, &be_const_str_yield); +be_define_const_str(widget_struct_by_class, "widget_struct_by_class", 3806373842u, 0, 22, &be_const_str_var); be_define_const_str(widget_struct_default, "widget_struct_default", 781673633u, 0, 21, NULL); -be_define_const_str(widget_width_def, "widget_width_def", 3986078862u, 0, 16, &be_const_str_false); -be_define_const_str(width, "width", 2508680735u, 0, 5, NULL); -be_define_const_str(width_def, "width_def", 1143717879u, 0, 9, NULL); -be_define_const_str(wifi, "wifi", 120087624u, 0, 4, NULL); +be_define_const_str(widget_width_def, "widget_width_def", 3986078862u, 0, 16, NULL); +be_define_const_str(width, "width", 2508680735u, 0, 5, &be_const_str_wifi_bars); +be_define_const_str(width_def, "width_def", 1143717879u, 0, 9, &be_const_str_y1); +be_define_const_str(wifi, "wifi", 120087624u, 0, 4, &be_const_str_def); be_define_const_str(wifi_arcs, "wifi_arcs", 3838492904u, 0, 9, NULL); -be_define_const_str(wifi_arcs_icon, "wifi_arcs_icon", 767180544u, 0, 14, &be_const_str_wire_scan); +be_define_const_str(wifi_arcs_icon, "wifi_arcs_icon", 767180544u, 0, 14, NULL); be_define_const_str(wifi_bars, "wifi_bars", 653141243u, 0, 9, NULL); be_define_const_str(wifi_bars_icon, "wifi_bars_icon", 3641522557u, 0, 14, NULL); be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); -be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); +be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, &be_const_str_x1); be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); -be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); -be_define_const_str(write8, "write8", 3133991532u, 0, 6, &be_const_str_var); -be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL); -be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); +be_define_const_str(write, "write", 3190202204u, 0, 5, &be_const_str_continue); +be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL); +be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, &be_const_str_nil); +be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, &be_const_str_except); be_define_const_str(write_file, "write_file", 3177658879u, 0, 10, NULL); be_define_const_str(write_gpio, "write_gpio", 2267940334u, 0, 10, NULL); be_define_const_str(x, "x", 4245442695u, 0, 1, NULL); be_define_const_str(x1, "x1", 274927234u, 0, 2, NULL); be_define_const_str(xy, "xy", 1482915802u, 0, 2, NULL); -be_define_const_str(y, "y", 4228665076u, 0, 1, &be_const_str_if); +be_define_const_str(y, "y", 4228665076u, 0, 1, NULL); be_define_const_str(y1, "y1", 2355101727u, 0, 2, NULL); -be_define_const_str(year, "year", 2927578396u, 0, 4, NULL); +be_define_const_str(year, "year", 2927578396u, 0, 4, &be_const_str_break); be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); be_define_const_str(zero, "zero", 2339366755u, 0, 4, NULL); be_define_const_str(zip, "zip", 2877453236u, 0, 3, NULL); @@ -907,452 +912,454 @@ be_define_const_str(_X7B_X7D, "{}", 1415952421u, 0, 2, NULL); be_define_const_str(_X7D, "}", 4161554600u, 0, 1, NULL); static const bstring* const m_string_table[] = { - (const bstring *)&be_const_str_detected_X20on_X20bus, - (const bstring *)&be_const_str_Tele, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, - (const bstring *)&be_const_str_can_show, - (const bstring *)&be_const_str_cb_do_nothing, - (const bstring *)&be_const_str_width_def, - (const bstring *)&be_const_str_attrdump, - (const bstring *)&be_const_str__global_addr, - (const bstring *)&be_const_str_toupper, - (const bstring *)&be_const_str_atan, - (const bstring *)&be_const_str__X2F, - (const bstring *)&be_const_str_member, - (const bstring *)&be_const_str_EVENT_DRAW_MAIN, - (const bstring *)&be_const_str_SERIAL_5N2, - (const bstring *)&be_const_str_SERIAL_6N2, - NULL, + (const bstring *)&be_const_str_EVENT_DRAW_PART_END, + (const bstring *)&be_const_str_hue, + (const bstring *)&be_const_str_get_temp, + (const bstring *)&be_const_str_close, (const bstring *)&be_const_str_Tasmota, + (const bstring *)&be_const_str_alternate, + (const bstring *)&be_const_str_widget_dtor_impl, + (const bstring *)&be_const_str__X2Ep, + (const bstring *)&be_const_str__X3E_X3D, + (const bstring *)&be_const_str_set_size, + (const bstring *)&be_const_str_draw_line, + (const bstring *)&be_const_str_GET, + (const bstring *)&be_const_str_pin, + (const bstring *)&be_const_str__X7B_X7D, + (const bstring *)&be_const_str_COLOR_WHITE, + (const bstring *)&be_const_str__X2C, + (const bstring *)&be_const_str_eth, + (const bstring *)&be_const_str_duration, + (const bstring *)&be_const_str__persist_X2Ejson, + (const bstring *)&be_const_str_POST, + (const bstring *)&be_const_str_SERIAL_7E2, (const bstring *)&be_const_str__X22_X3A, NULL, - NULL, - (const bstring *)&be_const_str_manuf, - NULL, - (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, - NULL, - (const bstring *)&be_const_str_gpio, - (const bstring *)&be_const_str_set_y, - (const bstring *)&be_const_str_SERIAL_5E2, - (const bstring *)&be_const_str__X3E, - (const bstring *)&be_const_str__error, - (const bstring *)&be_const_str_set_size, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20, - (const bstring *)&be_const_str_gamma8, - (const bstring *)&be_const_str_resp_cmnd_error, - NULL, - (const bstring *)&be_const_str_add_handler, - (const bstring *)&be_const_str_tanh, - (const bstring *)&be_const_str_dump, - (const bstring *)&be_const_str_wifi_arcs, - (const bstring *)&be_const_str_refr_pos, - (const bstring *)&be_const_str_state, - (const bstring *)&be_const_str_create_matrix, - NULL, - (const bstring *)&be_const_str_GET, - (const bstring *)&be_const_str_AudioGeneratorWAV, - (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, - (const bstring *)&be_const_str__t, - (const bstring *)&be_const_str_ccronexpr, - (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, - (const bstring *)&be_const_str_I2C_X3A, - (const bstring *)&be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str__crons, - (const bstring *)&be_const_str_TASMOTA, - (const bstring *)&be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, - (const bstring *)&be_const_str_set_exten, - (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, - (const bstring *)&be_const_str_time_str, - (const bstring *)&be_const_str_dim, - (const bstring *)&be_const_str__X5B, - (const bstring *)&be_const_str_DIMMER, - NULL, - (const bstring *)&be_const_str_SERIAL_6E2, - (const bstring *)&be_const_str_get_pixel_color, - (const bstring *)&be_const_str_Auto_X2Dconfiguration, - (const bstring *)&be_const_str__archive, - (const bstring *)&be_const_str_resize, - (const bstring *)&be_const_str_HTTP_POST, - (const bstring *)&be_const_str_Restart_X201, - NULL, - (const bstring *)&be_const_str_lv_signal_bars, - (const bstring *)&be_const_str_delete_all_configs, - NULL, - (const bstring *)&be_const_str__cmd, - (const bstring *)&be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, - (const bstring *)&be_const_str_create_custom_widget, - (const bstring *)&be_const_str_font_embedded, - (const bstring *)&be_const_str_CFG_X3A_X20return_code_X3D_X25i, - (const bstring *)&be_const_str__X2E_X2E, - (const bstring *)&be_const_str_BUTTON_CONFIGURATION, - (const bstring *)&be_const_str_None, - (const bstring *)&be_const_str_json_fdump, - (const bstring *)&be_const_str_push_path, - (const bstring *)&be_const_str_area, - (const bstring *)&be_const_str_compress, - (const bstring *)&be_const_str_encrypt, - (const bstring *)&be_const_str__X2F_X2Eautoconf, - (const bstring *)&be_const_str_pin_mode, - (const bstring *)&be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, - (const bstring *)&be_const_str__X2Esize, - (const bstring *)&be_const_str_depower, - (const bstring *)&be_const_str__X2Elen, - (const bstring *)&be_const_str_lv_module_init, - (const bstring *)&be_const_str__ptr, - (const bstring *)&be_const_str__X2F_X3Frst_X3D, - (const bstring *)&be_const_str_local, - (const bstring *)&be_const_str_widget_dtor_cb, - (const bstring *)&be_const_str_run_bat, - (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, - (const bstring *)&be_const_str_allocated, - (const bstring *)&be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_reset, - (const bstring *)&be_const_str__X3C, - (const bstring *)&be_const_str_count, - (const bstring *)&be_const_str_bus, - (const bstring *)&be_const_str_fast_loop, - (const bstring *)&be_const_str_ctypes_bytes_dyn, - (const bstring *)&be_const_str_AudioOutput, - (const bstring *)&be_const_str_set_hue16sat, - (const bstring *)&be_const_str__X2Fac, - (const bstring *)&be_const_str__X2Ebec, - (const bstring *)&be_const_str__X28_X29, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, - (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, - (const bstring *)&be_const_str__X2Ep, - (const bstring *)&be_const_str_OpusDecoder, - (const bstring *)&be_const_str_erase, - (const bstring *)&be_const_str___lower__, - (const bstring *)&be_const_str_display, - (const bstring *)&be_const_str_clear_to, - (const bstring *)&be_const_str_SERIAL_6N1, - (const bstring *)&be_const_str__persist_X2Ejson, - (const bstring *)&be_const_str_clock_icon, - (const bstring *)&be_const_str_name, - NULL, - (const bstring *)&be_const_str_int, - NULL, - (const bstring *)&be_const_str__end_transmission, - (const bstring *)&be_const_str_cb_event_closure, - (const bstring *)&be_const_str_WS2812, - (const bstring *)&be_const_str__X3D_X3C_X3E_X21, - NULL, - (const bstring *)&be_const_str_Trigger, - (const bstring *)&be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27, - (const bstring *)&be_const_str_get_object_from_ptr, - (const bstring *)&be_const_str_copy, - NULL, - NULL, - NULL, - (const bstring *)&be_const_str_signal_bars, - (const bstring *)&be_const_str_dirty, - (const bstring *)&be_const_str_RGB, - (const bstring *)&be_const_str_exec_cmd, - (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, - NULL, - (const bstring *)&be_const_str__X2Ew, - (const bstring *)&be_const_str__write, - (const bstring *)&be_const_str_AXP192, - (const bstring *)&be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, - NULL, - (const bstring *)&be_const_str__X21_X3D, - (const bstring *)&be_const_str__X25s_X2Eautoconf, - (const bstring *)&be_const_str__X23init_X2Ebat, - (const bstring *)&be_const_str_rounded, - (const bstring *)&be_const_str_widget_cb, - (const bstring *)&be_const_str_write_bit, - NULL, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, - (const bstring *)&be_const_str_get_width, - (const bstring *)&be_const_str_set_style_pad_all, - (const bstring *)&be_const_str__X23, - (const bstring *)&be_const_str_get, - (const bstring *)&be_const_str_draw_arc_dsc_init, - (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_skip, - (const bstring *)&be_const_str_animators, - (const bstring *)&be_const_str_AES_GCM, - (const bstring *)&be_const_str_widget_struct_default, - (const bstring *)&be_const_str_detect, - (const bstring *)&be_const_str_get_vbus_voltage, - (const bstring *)&be_const_str_matrix, - NULL, - (const bstring *)&be_const_str_kv, - (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, - (const bstring *)&be_const_str_False, - (const bstring *)&be_const_str_get_bri, - (const bstring *)&be_const_str_invalidate, - NULL, - NULL, - (const bstring *)&be_const_str__X23autoexec_X2Ebat, - (const bstring *)&be_const_str_web_send, - NULL, - (const bstring *)&be_const_str__X23display_X2Eini, - (const bstring *)&be_const_str_set_tasmota_logo, - (const bstring *)&be_const_str_lv_extra, - (const bstring *)&be_const_str_try_rule, - (const bstring *)&be_const_str_available, - (const bstring *)&be_const_str_load_templates, - (const bstring *)&be_const_str_button_pressed, - (const bstring *)&be_const_str_SERIAL_7N2, - (const bstring *)&be_const_str_set_auth, - (const bstring *)&be_const_str__X2E, - (const bstring *)&be_const_str__X3Clambda_X3E, - NULL, - (const bstring *)&be_const_str__request_from, - (const bstring *)&be_const_str_label, - (const bstring *)&be_const_str__X23preinit_X2Ebe, - (const bstring *)&be_const_str_y1, - (const bstring *)&be_const_str_img, - (const bstring *)&be_const_str_file, - (const bstring *)&be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, - (const bstring *)&be_const_str__X3D_X3D, - (const bstring *)&be_const_str_AudioFileSource, - (const bstring *)&be_const_str_MD5, - (const bstring *)&be_const_str_setrange, - (const bstring *)&be_const_str_pixels_buffer, - (const bstring *)&be_const_str_code, - (const bstring *)&be_const_str_open, - (const bstring *)&be_const_str_OneWire, - NULL, - (const bstring *)&be_const_str_EVENT_DRAW_PART_END, - (const bstring *)&be_const_str__X2Ep2, - NULL, - (const bstring *)&be_const_str_add_driver, - (const bstring *)&be_const_str_udp, - (const bstring *)&be_const_str_POST, - (const bstring *)&be_const_str_web_send_decimal, - (const bstring *)&be_const_str_load, - (const bstring *)&be_const_str_reapply, - (const bstring *)&be_const_str_read_bytes, - NULL, - NULL, - NULL, - (const bstring *)&be_const_str_elif, + (const bstring *)&be_const_str_deg, + (const bstring *)&be_const_str_files, + (const bstring *)&be_const_str_draw_ctx, + (const bstring *)&be_const_str_hex, + (const bstring *)&be_const_str_gen_cb, (const bstring *)&be_const_str__X2Ebe, - (const bstring *)&be_const_str_ins_goto, - (const bstring *)&be_const_str_SERIAL_7E2, - (const bstring *)&be_const_str_content_send_style, - (const bstring *)&be_const_str_add_fast_loop, - (const bstring *)&be_const_str_EXTERNAL_I2S, - (const bstring *)&be_const_str_widget_struct_by_class, - NULL, - (const bstring *)&be_const_str_is_dirty, - (const bstring *)&be_const_str_strftime, - (const bstring *)&be_const_str_fromstring, - (const bstring *)&be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback, - (const bstring *)&be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, - (const bstring *)&be_const_str__X2502d_X25s_X2502d, - (const bstring *)&be_const_str_SERIAL_8E1, - (const bstring *)&be_const_str_alternate, - NULL, - (const bstring *)&be_const_str_every_second, - (const bstring *)&be_const_str_height_def, - NULL, - (const bstring *)&be_const_str__X21_X3D_X3D, - NULL, - (const bstring *)&be_const_str_for, - (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, - (const bstring *)&be_const_str_begin, - NULL, - (const bstring *)&be_const_str_add_header, - (const bstring *)&be_const_str_init, - (const bstring *)&be_const_str_clear, - (const bstring *)&be_const_str__X23autoexec_X2Ebe, - (const bstring *)&be_const_str_INTERNAL_PDM, - (const bstring *)&be_const_str_INTERNAL_DAC, - (const bstring *)&be_const_str__class, - (const bstring *)&be_const_str_EC_C25519, - (const bstring *)&be_const_str_init_draw_arc_dsc, - (const bstring *)&be_const_str_digital_write, - (const bstring *)&be_const_str_round_start, - NULL, - (const bstring *)&be_const_str_cos, - (const bstring *)&be_const_str_set_timer, - (const bstring *)&be_const_str_discover, - (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - (const bstring *)&be_const_str_exp, - (const bstring *)&be_const_str__X2C, - (const bstring *)&be_const_str_CT, - NULL, - (const bstring *)&be_const_str_every_250ms, - (const bstring *)&be_const_str_light, + (const bstring *)&be_const_str_push, (const bstring *)&be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_concat, - (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, - (const bstring *)&be_const_str_create_segment, - (const bstring *)&be_const_str_bri, + (const bstring *)&be_const_str__X23autoexec_X2Ebe, + (const bstring *)&be_const_str_animate, + (const bstring *)&be_const_str_json_fdump_any, + (const bstring *)&be_const_str_cb_do_nothing, + (const bstring *)&be_const_str_ALIGN_LEFT_MID, NULL, - (const bstring *)&be_const_str_PART_MAIN, - (const bstring *)&be_const_str_acos, - (const bstring *)&be_const_str__X2Eautoconf, - (const bstring *)&be_const_str_remove_timer, - (const bstring *)&be_const_str_eth, - (const bstring *)&be_const_str_SERIAL_5E1, - (const bstring *)&be_const_str__X3F, - (const bstring *)&be_const_str_day, - (const bstring *)&be_const_str__X5D, - (const bstring *)&be_const_str_energy_struct, - (const bstring *)&be_const_str_register_obj, - (const bstring *)&be_const_str_serial, + (const bstring *)&be_const_str__rules, + (const bstring *)&be_const_str_coord_arr, + (const bstring *)&be_const_str_now, + (const bstring *)&be_const_str_False, + (const bstring *)&be_const_str_exec_tele, (const bstring *)&be_const_str_cb_obj, + (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, + (const bstring *)&be_const_str_every_250ms, NULL, - (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, - (const bstring *)&be_const_str_unknown_X20instruction, - (const bstring *)&be_const_str__read, - (const bstring *)&be_const_str_lv_obj, - (const bstring *)&be_const_str_get_temp, - (const bstring *)&be_const_str_ctypes_bytes, + (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, + (const bstring *)&be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, + (const bstring *)&be_const_str_TASMOTA, + (const bstring *)&be_const_str_real, + (const bstring *)&be_const_str_SERIAL_7O2, + (const bstring *)&be_const_str_MD5, + (const bstring *)&be_const_str__X2Elen, + (const bstring *)&be_const_str_get_size, + (const bstring *)&be_const_str__cmd, + (const bstring *)&be_const_str_remove_timer, + (const bstring *)&be_const_str_RGB, + (const bstring *)&be_const_str_arch, + (const bstring *)&be_const_str_WS2812, + NULL, + (const bstring *)&be_const_str_draw_arc_dsc_init, + (const bstring *)&be_const_str__write, + (const bstring *)&be_const_str_w, + (const bstring *)&be_const_str_raise, + (const bstring *)&be_const_str__X2Fstate_X2F, + (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, + (const bstring *)&be_const_str_webserver, + NULL, + (const bstring *)&be_const_str_ceil, + (const bstring *)&be_const_str_event_cb, + (const bstring *)&be_const_str_CT, + (const bstring *)&be_const_str_energy_struct, + (const bstring *)&be_const_str__X2Eautoconf, + (const bstring *)&be_const_str_editable, + (const bstring *)&be_const_str__X2Ew, + (const bstring *)&be_const_str___iterator__, + (const bstring *)&be_const_str_super, + (const bstring *)&be_const_str__X22, + NULL, + (const bstring *)&be_const_str_set_ct, + NULL, + (const bstring *)&be_const_str__X3D_X3C_X3E_X21, (const bstring *)&be_const_str__X2B, + (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str__X2Flights_X2F, + (const bstring *)&be_const_str__available, + (const bstring *)&be_const_str_detected_X20on_X20bus, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, NULL, + (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20function, + (const bstring *)&be_const_str_get_log, + (const bstring *)&be_const_str__settings_def, + (const bstring *)&be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, + (const bstring *)&be_const_str__X2Fac, + (const bstring *)&be_const_str_ctypes_bytes_dyn, + (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, + (const bstring *)&be_const_str_connect, + (const bstring *)&be_const_str_I2C_Driver, + (const bstring *)&be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_area, + (const bstring *)&be_const_str_fromptr, + (const bstring *)&be_const_str_geti, + (const bstring *)&be_const_str_add_rule, NULL, - (const bstring *)&be_const_str_search, - (const bstring *)&be_const_str_instance_size, - (const bstring *)&be_const_str_True, - NULL, - NULL, - (const bstring *)&be_const_str_cmd_res, - (const bstring *)&be_const_str_instance_X20required, - (const bstring *)&be_const_str__begin_transmission, - (const bstring *)&be_const_str_add_light, - (const bstring *)&be_const_str_CFG_X3A_X20running_X20, - (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, - (const bstring *)&be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map, - (const bstring *)&be_const_str___upper__, - (const bstring *)&be_const_str_classname, - (const bstring *)&be_const_str__X3A, - (const bstring *)&be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function, - (const bstring *)&be_const_str_add_event_cb, - (const bstring *)&be_const_str_SERIAL_6O1, - (const bstring *)&be_const_str_add_cmd, - (const bstring *)&be_const_str_CFG_X3A_X20ran_X20_X20, - (const bstring *)&be_const_str_log, - (const bstring *)&be_const_str_every_50ms, - (const bstring *)&be_const_str_tostring, - NULL, - (const bstring *)&be_const_str_get_battery_chargin_status, - (const bstring *)&be_const_str_ismethod, (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, - (const bstring *)&be_const_str_register_button_encoder, NULL, - (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - NULL, - (const bstring *)&be_const_str_atleast1, - (const bstring *)&be_const_str_SERIAL_7E1, - (const bstring *)&be_const_str_COLOR_WHITE, - (const bstring *)&be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, - (const bstring *)&be_const_str_obj, - (const bstring *)&be_const_str_groups, - (const bstring *)&be_const_str_EVENT_DRAW_PART_BEGIN, + (const bstring *)&be_const_str__filename, + (const bstring *)&be_const_str_obj_class_create_obj, + (const bstring *)&be_const_str_load, + (const bstring *)&be_const_str_addr, + (const bstring *)&be_const_str_init, + (const bstring *)&be_const_str_connected, + (const bstring *)&be_const_str_get_input_power_status, + (const bstring *)&be_const_str__t, + (const bstring *)&be_const_str_light, + (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, + (const bstring *)&be_const_str_read_sensors, + (const bstring *)&be_const_str_is_dirty, + (const bstring *)&be_const_str_SERIAL_7N2, + (const bstring *)&be_const_str_type_error, (const bstring *)&be_const_str_, NULL, - (const bstring *)&be_const_str_strip, - (const bstring *)&be_const_str_imin, - (const bstring *)&be_const_str__X22, - (const bstring *)&be_const_str_decrypt, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, - (const bstring *)&be_const_str_SERIAL_5N1, NULL, - NULL, - (const bstring *)&be_const_str_set_rgb, - (const bstring *)&be_const_str_add, - NULL, - (const bstring *)&be_const_str_connection_error, - (const bstring *)&be_const_str_set_style_bg_color, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, - NULL, - (const bstring *)&be_const_str_SERIAL_7O2, - (const bstring *)&be_const_str_json, - (const bstring *)&be_const_str_decompress, - (const bstring *)&be_const_str_char, - (const bstring *)&be_const_str__X3D, - NULL, - (const bstring *)&be_const_str_AudioOutputI2S, - (const bstring *)&be_const_str_read_sensors, - (const bstring *)&be_const_str__X2Flights_X2F, - (const bstring *)&be_const_str_loop, - (const bstring *)&be_const_str_HTTP_GET, - (const bstring *)&be_const_str_hue, - (const bstring *)&be_const_str_lv_solidified, - (const bstring *)&be_const_str_get_bat_current, - NULL, - (const bstring *)&be_const_str__X0A, - (const bstring *)&be_const_str_SERIAL_7N1, - (const bstring *)&be_const_str_arg_name, - (const bstring *)&be_const_str_SERIAL_8O1, - (const bstring *)&be_const_str_get_power, - (const bstring *)&be_const_str_nan, - (const bstring *)&be_const_str_assert, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, - (const bstring *)&be_const_str_b, - NULL, - NULL, - (const bstring *)&be_const_str_page_autoconf_ctl, - (const bstring *)&be_const_str_internal_error, - (const bstring *)&be_const_str_rtc, - (const bstring *)&be_const_str_content_stop, - (const bstring *)&be_const_str_lv_event, - (const bstring *)&be_const_str_redirect, - (const bstring *)&be_const_str_OPTION_A, - (const bstring *)&be_const_str__available, - (const bstring *)&be_const_str_before_del, - (const bstring *)&be_const_str_byte, - (const bstring *)&be_const_str_number, - NULL, - (const bstring *)&be_const_str__X2Ep1, - (const bstring *)&be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range, - (const bstring *)&be_const_str_class_init_obj, - NULL, - (const bstring *)&be_const_str_AudioGeneratorMP3, - (const bstring *)&be_const_str_set_ldo_enable, - (const bstring *)&be_const_str__X3C_X3D, - (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, - (const bstring *)&be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, - (const bstring *)&be_const_str_connect, - (const bstring *)&be_const_str_CFG_X3A_X20removing_X20autoconf_X20files, - (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, - (const bstring *)&be_const_str_hue_ntv, - (const bstring *)&be_const_str__filename, - (const bstring *)&be_const_str_RELAY, - (const bstring *)&be_const_str_list_handlers, - (const bstring *)&be_const_str__X2Fstate_X2F, - (const bstring *)&be_const_str_abs, - (const bstring *)&be_const_str_read12, - (const bstring *)&be_const_str_base_class, - (const bstring *)&be_const_str_isnan, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, - (const bstring *)&be_const_str_closure, - (const bstring *)&be_const_str_constructor_cb, - NULL, - (const bstring *)&be_const_str__X20, - (const bstring *)&be_const_str_nil, - (const bstring *)&be_const_str_json_fdump_map, - (const bstring *)&be_const_str_debug, - (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, - (const bstring *)&be_const_str_SERIAL_6O2, + (const bstring *)&be_const_str_is_first_time, + (const bstring *)&be_const_str_out_X20of_X20range, (const bstring *)&be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_get_free_heap, - (const bstring *)&be_const_str_cb, - (const bstring *)&be_const_str__lvgl, - (const bstring *)&be_const_str_exec_rules, - (const bstring *)&be_const_str_web_add_config_button, - (const bstring *)&be_const_str_Unknown_X20command, - (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, + (const bstring *)&be_const_str_exec_cmd, + (const bstring *)&be_const_str_refr_size, + (const bstring *)&be_const_str_SERIAL_6N1, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + (const bstring *)&be_const_str_return, NULL, + (const bstring *)&be_const_str__drivers, + (const bstring *)&be_const_str_format, + (const bstring *)&be_const_str_set_zoom, + (const bstring *)&be_const_str_SERIAL_6O1, + (const bstring *)&be_const_str_RGBW, + (const bstring *)&be_const_str_CFG_X3A_X20removing_X20autoconf_X20files, + (const bstring *)&be_const_str__X20, + (const bstring *)&be_const_str_isrunning, + (const bstring *)&be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, + NULL, + (const bstring *)&be_const_str_Trigger, + (const bstring *)&be_const_str_HTTP_POST, + (const bstring *)&be_const_str_True, + (const bstring *)&be_const_str_Parameter_X20error, + NULL, + (const bstring *)&be_const_str_debug, + (const bstring *)&be_const_str_SERIAL_7E1, + (const bstring *)&be_const_str_value, + (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, + NULL, + (const bstring *)&be_const_str_consume_mono, + (const bstring *)&be_const_str__X3F, + (const bstring *)&be_const_str_read24, + (const bstring *)&be_const_str_assign_rmt, + (const bstring *)&be_const_str_SERIAL_5N2, + (const bstring *)&be_const_str__X21_X3D_X3D, + (const bstring *)&be_const_str_EVENT_DELETE, + (const bstring *)&be_const_str_local, + (const bstring *)&be_const_str_pow, + (const bstring *)&be_const_str_compile, + (const bstring *)&be_const_str_remote_port, + (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, + (const bstring *)&be_const_str_call_native, + (const bstring *)&be_const_str_RELAY, + (const bstring *)&be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback, + (const bstring *)&be_const_str_CFG_X3A_X20return_code_X3D_X25i, + (const bstring *)&be_const_str_content_send, + NULL, + (const bstring *)&be_const_str_file, + NULL, + (const bstring *)&be_const_str_srand, + (const bstring *)&be_const_str_encrypt, + (const bstring *)&be_const_str_SERIAL_5E1, + (const bstring *)&be_const_str__X23display_X2Eini, + (const bstring *)&be_const_str_url_encode, + NULL, + (const bstring *)&be_const_str_EC_C25519, + (const bstring *)&be_const_str_chars_in_string, + (const bstring *)&be_const_str_b, + (const bstring *)&be_const_str_lv_extra, + NULL, + (const bstring *)&be_const_str_atleast1, + (const bstring *)&be_const_str_content_start, + (const bstring *)&be_const_str_k, + (const bstring *)&be_const_str_content_stop, + (const bstring *)&be_const_str_COLOR_BLACK, + (const bstring *)&be_const_str_get_power, + (const bstring *)&be_const_str_started, + (const bstring *)&be_const_str_widget_instance_size, + (const bstring *)&be_const_str_BUTTON_CONFIGURATION, + (const bstring *)&be_const_str_read13, + (const bstring *)&be_const_str_hue_ntv, + (const bstring *)&be_const_str_leds, + (const bstring *)&be_const_str_contains, + (const bstring *)&be_const_str_AudioFileSourceFS, + (const bstring *)&be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, + (const bstring *)&be_const_str_clock_icon, + (const bstring *)&be_const_str_cosh, + (const bstring *)&be_const_str__X2E_X2E, + (const bstring *)&be_const_str_param, + (const bstring *)&be_const_str__crons, + (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, + (const bstring *)&be_const_str__X2F, + (const bstring *)&be_const_str_atan, + (const bstring *)&be_const_str_str, + (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, + (const bstring *)&be_const_str_draw_line_dsc_init, + (const bstring *)&be_const_str_autoexec, + (const bstring *)&be_const_str_AudioOutput, + (const bstring *)&be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str_widget_event, + (const bstring *)&be_const_str_add_light, + (const bstring *)&be_const_str__X3D, + (const bstring *)&be_const_str_call, + (const bstring *)&be_const_str__X28_X29, + (const bstring *)&be_const_str_INTERNAL_DAC, + NULL, + (const bstring *)&be_const_str__X3A, + (const bstring *)&be_const_str__X2Ep1, + (const bstring *)&be_const_str_assert, + (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, + (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, + (const bstring *)&be_const_str__settings_ptr, + NULL, + NULL, + (const bstring *)&be_const_str_label, + (const bstring *)&be_const_str__dirty, + (const bstring *)&be_const_str_atan2, + (const bstring *)&be_const_str_AudioOutputI2S, + NULL, + (const bstring *)&be_const_str_line_dsc, + (const bstring *)&be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, + (const bstring *)&be_const_str_digital_read, + (const bstring *)&be_const_str__X2F_X2Eautoconf, + (const bstring *)&be_const_str_CFG_X3A_X20running_X20, + (const bstring *)&be_const_str_can_show, + NULL, + (const bstring *)&be_const_str_traceback, + (const bstring *)&be_const_str_lv_clock_icon, + (const bstring *)&be_const_str_resp_cmnd_done, + (const bstring *)&be_const_str_bytes, + (const bstring *)&be_const_str_set_align, + NULL, + (const bstring *)&be_const_str_resp_cmnd_error, + (const bstring *)&be_const_str_get_percentage, + (const bstring *)&be_const_str_floor, + NULL, + (const bstring *)&be_const_str__X2F_X3Frst_X3D, + (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, + (const bstring *)&be_const_str_compress, + (const bstring *)&be_const_str_codedump, + NULL, + (const bstring *)&be_const_str_ins_ramp, + (const bstring *)&be_const_str_minute, + (const bstring *)&be_const_str_AudioGenerator, + (const bstring *)&be_const_str_driver_name, + (const bstring *)&be_const_str_publish, + (const bstring *)&be_const_str__X2Ebec, + (const bstring *)&be_const_str_add_fast_loop, + (const bstring *)&be_const_str_Restart_X201, + (const bstring *)&be_const_str_count, + (const bstring *)&be_const_str_SERIAL_6O2, + (const bstring *)&be_const_str_widget_constructor, + (const bstring *)&be_const_str_acos, + (const bstring *)&be_const_str__X2Esize, + NULL, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + (const bstring *)&be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, + (const bstring *)&be_const_str__anonymous_, + (const bstring *)&be_const_str_bus, + (const bstring *)&be_const_str_get_vbus_current, + (const bstring *)&be_const_str_get, + (const bstring *)&be_const_str_preinit, + (const bstring *)&be_const_str_round_end, + (const bstring *)&be_const_str_AES_GCM, + (const bstring *)&be_const_str_content_flush, + (const bstring *)&be_const_str_WS2812_GRB, + NULL, + (const bstring *)&be_const_str_ct, + (const bstring *)&be_const_str__lvgl, + (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, + (const bstring *)&be_const_str_resolvecmnd, + (const bstring *)&be_const_str_widget_event_cb, + (const bstring *)&be_const_str_begin_multicast, + (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, + (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, + NULL, + (const bstring *)&be_const_str_depower, + (const bstring *)&be_const_str_CFG_X3A_X20ran_X20_X20, + (const bstring *)&be_const_str_internal_error, + (const bstring *)&be_const_str_destructor_cb, + (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, + (const bstring *)&be_const_str_public_key, + (const bstring *)&be_const_str_read, + (const bstring *)&be_const_str_remove_cmd, + (const bstring *)&be_const_str_content_button, + NULL, + (const bstring *)&be_const_str__def, + NULL, + (const bstring *)&be_const_str_SERIAL_7O1, + (const bstring *)&be_const_str_class_init_obj, + (const bstring *)&be_const_str_f, + NULL, + (const bstring *)&be_const_str_abs, + (const bstring *)&be_const_str_Wire, + (const bstring *)&be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, + (const bstring *)&be_const_str_SERIAL_7N1, + NULL, + (const bstring *)&be_const_str_get_hor_res, + (const bstring *)&be_const_str_add_event_cb, + (const bstring *)&be_const_str_pop_path, + (const bstring *)&be_const_str_pixel_count, + (const bstring *)&be_const_str_classname, + (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, + NULL, + (const bstring *)&be_const_str_add_cmd, + (const bstring *)&be_const_str_get_pixel_color, + (const bstring *)&be_const_str__global_def, + (const bstring *)&be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27, + (const bstring *)&be_const_str_CFG_X3A_X20loading_X20, + (const bstring *)&be_const_str_connection_error, + NULL, + (const bstring *)&be_const_str_sys, + (const bstring *)&be_const_str_arg, + (const bstring *)&be_const_str__X23preinit_X2Ebe, + (const bstring *)&be_const_str__X23autoexec_X2Ebat, + (const bstring *)&be_const_str__X23, + (const bstring *)&be_const_str_None, + (const bstring *)&be_const_str_get_style_line_color, + (const bstring *)&be_const_str__ccmd, + (const bstring *)&be_const_str_AudioFileSource, + (const bstring *)&be_const_str_I2C_X3A, + (const bstring *)&be_const_str_RES_OK, + (const bstring *)&be_const_str_Auto_X2Dconfiguration, + NULL, + (const bstring *)&be_const_str_input, + (const bstring *)&be_const_str_hue_status, + (const bstring *)&be_const_str_get_free_heap, + (const bstring *)&be_const_str__class, + (const bstring *)&be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, + (const bstring *)&be_const_str_get_light, + (const bstring *)&be_const_str__X3E, + (const bstring *)&be_const_str__X3Clambda_X3E, + (const bstring *)&be_const_str_base_class, + (const bstring *)&be_const_str_false, + (const bstring *)&be_const_str_has_X20already_X20an_X20event_X20callback, + (const bstring *)&be_const_str__X2Etapp, + NULL, + NULL, + (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, + NULL, + (const bstring *)&be_const_str_byte, + NULL, + (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, + (const bstring *)&be_const_str_item, + NULL, + (const bstring *)&be_const_str__X25s_X2Eautoconf, + (const bstring *)&be_const_str_SERIAL_5O1, + (const bstring *)&be_const_str__, + (const bstring *)&be_const_str_rule, + (const bstring *)&be_const_str_PART_MAIN, + (const bstring *)&be_const_str_splash_init, + (const bstring *)&be_const_str_SERIAL_5E2, + (const bstring *)&be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker, + (const bstring *)&be_const_str_fromstring, + (const bstring *)&be_const_str_arg_size, + (const bstring *)&be_const_str_closure, + (const bstring *)&be_const_str__X3D_X3D, + (const bstring *)&be_const_str_invalid_X20GPIO_X20number, + NULL, + (const bstring *)&be_const_str_HTTP_GET, + NULL, + (const bstring *)&be_const_str_check_privileged_access, + (const bstring *)&be_const_str__X0A, + (const bstring *)&be_const_str__X3C_X3D, + (const bstring *)&be_const_str__X21_X3D, + NULL, + NULL, + NULL, + (const bstring *)&be_const_str_autorun, + NULL, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, + NULL, + (const bstring *)&be_const_str_x, + (const bstring *)&be_const_str__request_from, + (const bstring *)&be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, + (const bstring *)&be_const_str_model, + (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, + (const bstring *)&be_const_str_Unknown_X20command, + (const bstring *)&be_const_str_add_cron, + (const bstring *)&be_const_str_rand, + NULL, + (const bstring *)&be_const_str_publish_result, + (const bstring *)&be_const_str__X2E, + (const bstring *)&be_const_str_set_alternate, + (const bstring *)&be_const_str_instance_X20required, + (const bstring *)&be_const_str_group_def, + (const bstring *)&be_const_str_lv_wifi_arcs_icon, + (const bstring *)&be_const_str_resp_cmnd, + NULL, + (const bstring *)&be_const_str_AudioGeneratorWAV, + NULL, + (const bstring *)&be_const_str_cmd_res, + (const bstring *)&be_const_str__X3C, + (const bstring *)&be_const_str_cos, + (const bstring *)&be_const_str_Tele, + (const bstring *)&be_const_str_clear, + (const bstring *)&be_const_str_add_handler, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, + (const bstring *)&be_const_str_month, + (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X20, + (const bstring *)&be_const_str_get_bri, + (const bstring *)&be_const_str__archive, + (const bstring *)&be_const_str__X23init_X2Ebat, + (const bstring *)&be_const_str_remove_cron, + (const bstring *)&be_const_str_set_xy, + (const bstring *)&be_const_str_bri, (const bstring *)&be_const_str__splash, - (const bstring *)&be_const_str_delay, - (const bstring *)&be_const_str_draw_ctx, - (const bstring *)&be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E, - (const bstring *)&be_const_str_ins_time + (const bstring *)&be_const_str__energy, + (const bstring *)&be_const_str_json, + (const bstring *)&be_const_str__X5D, + (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_introspect, + (const bstring *)&be_const_str_read8, + NULL, + (const bstring *)&be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range, + (const bstring *)&be_const_str_isinstance, + NULL, + (const bstring *)&be_const_str_pct, + (const bstring *)&be_const_str_tostring, + (const bstring *)&be_const_str__p, + (const bstring *)&be_const_str_event, + (const bstring *)&be_const_str_STATE_DEFAULT, + NULL, + (const bstring *)&be_const_str_OpusDecoder, + (const bstring *)&be_const_str_h, + (const bstring *)&be_const_str_run_deferred, + (const bstring *)&be_const_str_tele, + (const bstring *)&be_const_str_finish, + (const bstring *)&be_const_str_font_embedded }; static const struct bconststrtab m_const_string_table = { - .size = 442, - .count = 907, + .size = 444, + .count = 912, .table = m_string_table }; diff --git a/lib/libesp32/berry_tasmota/src/be_leds_lib.c b/lib/libesp32/berry_tasmota/src/be_leds_lib.c index ee158e4d9..faf87357f 100644 --- a/lib/libesp32/berry_tasmota/src/be_leds_lib.c +++ b/lib/libesp32/berry_tasmota/src/be_leds_lib.c @@ -6,6 +6,737 @@ #ifdef USE_WS2812 +/******************************************************************** +** Solidified function: pixel_count +********************************************************************/ +be_local_closure(Leds_pixel_count, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(call_native), + }), + &be_const_str_pixel_count, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E0007, // 0001 LDINT R3 8 + 0x7C040400, // 0002 CALL R1 2 + 0x80040200, // 0003 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: show +********************************************************************/ +be_local_closure(Leds_show, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(call_native), + /* K1 */ be_const_int(2), + }), + &be_const_str_show, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x580C0001, // 0001 LDCONST R3 K1 + 0x7C040400, // 0002 CALL R1 2 + 0x80000000, // 0003 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: clear_to +********************************************************************/ +be_local_closure(Leds_clear_to, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(call_native), + /* K1 */ be_nested_str(to_gamma), + }), + &be_const_str_clear_to, + &be_const_str_solidified, + ( &(const binstruction[ 8]) { /* code */ + 0x8C0C0100, // 0000 GETMET R3 R0 K0 + 0x54160008, // 0001 LDINT R5 9 + 0x8C180101, // 0002 GETMET R6 R0 K1 + 0x5C200200, // 0003 MOVE R8 R1 + 0x5C240400, // 0004 MOVE R9 R2 + 0x7C180600, // 0005 CALL R6 3 + 0x7C0C0600, // 0006 CALL R3 3 + 0x80000000, // 0007 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_pixel_color +********************************************************************/ +be_local_closure(Leds_set_pixel_color, /* name */ + be_nested_proto( + 12, /* nstack */ + 4, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(call_native), + /* K1 */ be_nested_str(to_gamma), + }), + &be_const_str_set_pixel_color, + &be_const_str_solidified, + ( &(const binstruction[ 9]) { /* code */ + 0x8C100100, // 0000 GETMET R4 R0 K0 + 0x541A0009, // 0001 LDINT R6 10 + 0x5C1C0200, // 0002 MOVE R7 R1 + 0x8C200101, // 0003 GETMET R8 R0 K1 + 0x5C280400, // 0004 MOVE R10 R2 + 0x5C2C0600, // 0005 MOVE R11 R3 + 0x7C200600, // 0006 CALL R8 3 + 0x7C100800, // 0007 CALL R4 4 + 0x80000000, // 0008 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: clear +********************************************************************/ +be_local_closure(Leds_clear, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str(clear_to), + /* K1 */ be_const_int(0), + /* K2 */ be_nested_str(show), + }), + &be_const_str_clear, + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x580C0001, // 0001 LDCONST R3 K1 + 0x7C040400, // 0002 CALL R1 2 + 0x8C040102, // 0003 GETMET R1 R0 K2 + 0x7C040200, // 0004 CALL R1 1 + 0x80000000, // 0005 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: matrix +********************************************************************/ +be_local_closure(Leds_matrix, /* name */ + be_nested_proto( + 10, /* nstack */ + 4, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str(Leds), + /* K1 */ be_nested_str(create_matrix), + /* K2 */ be_const_int(0), + }), + &be_const_str_matrix, + &be_const_str_solidified, + ( &(const binstruction[11]) { /* code */ + 0xB8120000, // 0000 GETNGBL R4 K0 + 0x08140001, // 0001 MUL R5 R0 R1 + 0x5C180400, // 0002 MOVE R6 R2 + 0x5C1C0600, // 0003 MOVE R7 R3 + 0x7C100600, // 0004 CALL R4 3 + 0x8C140901, // 0005 GETMET R5 R4 K1 + 0x5C1C0000, // 0006 MOVE R7 R0 + 0x5C200200, // 0007 MOVE R8 R1 + 0x58240002, // 0008 LDCONST R9 K2 + 0x7C140800, // 0009 CALL R5 4 + 0x80040A00, // 000A RET 1 R5 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_pixel_color +********************************************************************/ +be_local_closure(Leds_segment_get_pixel_color, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str(strip), + /* K1 */ be_nested_str(get_pixel_color), + /* K2 */ be_nested_str(offseta), + }), + &be_const_str_get_pixel_color, + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x88100102, // 0002 GETMBR R4 R0 K2 + 0x00100204, // 0003 ADD R4 R1 R4 + 0x7C080400, // 0004 CALL R2 2 + 0x80040400, // 0005 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: clear_to +********************************************************************/ +be_local_closure(Leds_segment_clear_to, /* name */ + be_nested_proto( + 9, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_const_int(0), + /* K1 */ be_nested_str(leds), + /* K2 */ be_nested_str(strip), + /* K3 */ be_nested_str(set_pixel_color), + /* K4 */ be_nested_str(offset), + /* K5 */ be_const_int(1), + }), + &be_const_str_clear_to, + &be_const_str_solidified, + ( &(const binstruction[14]) { /* code */ + 0x580C0000, // 0000 LDCONST R3 K0 + 0x88100101, // 0001 GETMBR R4 R0 K1 + 0x14100604, // 0002 LT R4 R3 R4 + 0x78120008, // 0003 JMPF R4 #000D + 0x88100102, // 0004 GETMBR R4 R0 K2 + 0x8C100903, // 0005 GETMET R4 R4 K3 + 0x88180104, // 0006 GETMBR R6 R0 K4 + 0x00180606, // 0007 ADD R6 R3 R6 + 0x5C1C0200, // 0008 MOVE R7 R1 + 0x5C200400, // 0009 MOVE R8 R2 + 0x7C100800, // 000A CALL R4 4 + 0x000C0705, // 000B ADD R3 R3 K5 + 0x7001FFF3, // 000C JMP #0001 + 0x80000000, // 000D RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: can_show +********************************************************************/ +be_local_closure(Leds_segment_can_show, /* name */ + be_nested_proto( + 3, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(strip), + /* K1 */ be_nested_str(can_show), + }), + &be_const_str_can_show, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x7C040200, // 0002 CALL R1 1 + 0x80040200, // 0003 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_pixel_color +********************************************************************/ +be_local_closure(Leds_segment_set_pixel_color, /* name */ + be_nested_proto( + 9, /* nstack */ + 4, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str(strip), + /* K1 */ be_nested_str(set_pixel_color), + /* K2 */ be_nested_str(offset), + }), + &be_const_str_set_pixel_color, + &be_const_str_solidified, + ( &(const binstruction[ 8]) { /* code */ + 0x88100100, // 0000 GETMBR R4 R0 K0 + 0x8C100901, // 0001 GETMET R4 R4 K1 + 0x88180102, // 0002 GETMBR R6 R0 K2 + 0x00180206, // 0003 ADD R6 R1 R6 + 0x5C1C0400, // 0004 MOVE R7 R2 + 0x5C200600, // 0005 MOVE R8 R3 + 0x7C100800, // 0006 CALL R4 4 + 0x80000000, // 0007 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: clear +********************************************************************/ +be_local_closure(Leds_segment_clear, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str(clear_to), + /* K1 */ be_const_int(0), + /* K2 */ be_nested_str(show), + }), + &be_const_str_clear, + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x580C0001, // 0001 LDCONST R3 K1 + 0x7C040400, // 0002 CALL R1 2 + 0x8C040102, // 0003 GETMET R1 R0 K2 + 0x7C040200, // 0004 CALL R1 1 + 0x80000000, // 0005 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: begin +********************************************************************/ +be_local_closure(Leds_segment_begin, /* name */ + be_nested_proto( + 1, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 0, /* has constants */ + NULL, /* no const */ + &be_const_str_begin, + &be_const_str_solidified, + ( &(const binstruction[ 1]) { /* code */ + 0x80000000, // 0000 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: pixel_count +********************************************************************/ +be_local_closure(Leds_segment_pixel_count, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(leds), + }), + &be_const_str_pixel_count, + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(Leds_segment_init, /* name */ + be_nested_proto( + 6, /* nstack */ + 4, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str(strip), + /* K1 */ be_nested_str(offset), + /* K2 */ be_nested_str(leds), + }), + &be_const_str_init, + &be_const_str_solidified, + ( &(const binstruction[10]) { /* code */ + 0x90020001, // 0000 SETMBR R0 K0 R1 + 0x60100009, // 0001 GETGBL R4 G9 + 0x5C140400, // 0002 MOVE R5 R2 + 0x7C100200, // 0003 CALL R4 1 + 0x90020204, // 0004 SETMBR R0 K1 R4 + 0x60100009, // 0005 GETGBL R4 G9 + 0x5C140600, // 0006 MOVE R5 R3 + 0x7C100200, // 0007 CALL R4 1 + 0x90020404, // 0008 SETMBR R0 K2 R4 + 0x80000000, // 0009 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: pixel_size +********************************************************************/ +be_local_closure(Leds_segment_pixel_size, /* name */ + be_nested_proto( + 3, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(strip), + /* K1 */ be_nested_str(pixel_size), + }), + &be_const_str_pixel_size, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x7C040200, // 0002 CALL R1 1 + 0x80040200, // 0003 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: dirty +********************************************************************/ +be_local_closure(Leds_segment_dirty, /* name */ + be_nested_proto( + 3, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(strip), + /* K1 */ be_nested_str(dirty), + }), + &be_const_str_dirty, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x7C040200, // 0002 CALL R1 1 + 0x80000000, // 0003 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: show +********************************************************************/ +be_local_closure(Leds_segment_show, /* name */ + be_nested_proto( + 4, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_str(offset), + /* K1 */ be_const_int(0), + /* K2 */ be_nested_str(leds), + /* K3 */ be_nested_str(strip), + /* K4 */ be_nested_str(show), + }), + &be_const_str_show, + &be_const_str_solidified, + ( &(const binstruction[16]) { /* code */ + 0x60080017, // 0000 GETGBL R2 G23 + 0x5C0C0200, // 0001 MOVE R3 R1 + 0x7C080200, // 0002 CALL R2 1 + 0x740A0007, // 0003 JMPT R2 #000C + 0x88080100, // 0004 GETMBR R2 R0 K0 + 0x1C080501, // 0005 EQ R2 R2 K1 + 0x780A0007, // 0006 JMPF R2 #000F + 0x88080102, // 0007 GETMBR R2 R0 K2 + 0x880C0103, // 0008 GETMBR R3 R0 K3 + 0x880C0702, // 0009 GETMBR R3 R3 K2 + 0x1C080403, // 000A EQ R2 R2 R3 + 0x780A0002, // 000B JMPF R2 #000F + 0x88080103, // 000C GETMBR R2 R0 K3 + 0x8C080504, // 000D GETMET R2 R2 K4 + 0x7C080200, // 000E CALL R2 1 + 0x80000000, // 000F RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: is_dirty +********************************************************************/ +be_local_closure(Leds_segment_is_dirty, /* name */ + be_nested_proto( + 3, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(strip), + /* K1 */ be_nested_str(is_dirty), + }), + &be_const_str_is_dirty, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x7C040200, // 0002 CALL R1 1 + 0x80040200, // 0003 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: pixels_buffer +********************************************************************/ +be_local_closure(Leds_segment_pixels_buffer, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 0, /* has constants */ + NULL, /* no const */ + &be_const_str_pixels_buffer, + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x4C040000, // 0000 LDNIL R1 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: Leds_segment +********************************************************************/ +be_local_class(Leds_segment, + 3, + NULL, + be_nested_map(16, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key(get_pixel_color, -1), be_const_closure(Leds_segment_get_pixel_color_closure) }, + { be_const_key(strip, -1), be_const_var(0) }, + { be_const_key(clear_to, 5), be_const_closure(Leds_segment_clear_to_closure) }, + { be_const_key(can_show, 13), be_const_closure(Leds_segment_can_show_closure) }, + { be_const_key(set_pixel_color, -1), be_const_closure(Leds_segment_set_pixel_color_closure) }, + { be_const_key(clear, -1), be_const_closure(Leds_segment_clear_closure) }, + { be_const_key(is_dirty, -1), be_const_closure(Leds_segment_is_dirty_closure) }, + { be_const_key(pixel_count, -1), be_const_closure(Leds_segment_pixel_count_closure) }, + { be_const_key(leds, -1), be_const_var(2) }, + { be_const_key(pixel_size, -1), be_const_closure(Leds_segment_pixel_size_closure) }, + { be_const_key(offset, -1), be_const_var(1) }, + { be_const_key(dirty, 8), be_const_closure(Leds_segment_dirty_closure) }, + { be_const_key(show, -1), be_const_closure(Leds_segment_show_closure) }, + { be_const_key(init, -1), be_const_closure(Leds_segment_init_closure) }, + { be_const_key(begin, 6), be_const_closure(Leds_segment_begin_closure) }, + { be_const_key(pixels_buffer, -1), be_const_closure(Leds_segment_pixels_buffer_closure) }, + })), + be_str_literal("Leds_segment") +); + +/******************************************************************** +** Solidified function: create_segment +********************************************************************/ +be_local_closure(Leds_create_segment, /* name */ + be_nested_proto( + 8, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_str(leds), + /* K1 */ be_const_int(0), + /* K2 */ be_nested_str(value_error), + /* K3 */ be_nested_str(out_X20of_X20range), + /* K4 */ be_const_class(be_class_Leds_segment), + }), + &be_const_str_create_segment, + &be_const_str_solidified, + ( &(const binstruction[23]) { /* code */ + 0x600C0009, // 0000 GETGBL R3 G9 + 0x5C100200, // 0001 MOVE R4 R1 + 0x7C0C0200, // 0002 CALL R3 1 + 0x60100009, // 0003 GETGBL R4 G9 + 0x5C140400, // 0004 MOVE R5 R2 + 0x7C100200, // 0005 CALL R4 1 + 0x000C0604, // 0006 ADD R3 R3 R4 + 0x88100100, // 0007 GETMBR R4 R0 K0 + 0x240C0604, // 0008 GT R3 R3 R4 + 0x740E0003, // 0009 JMPT R3 #000E + 0x140C0301, // 000A LT R3 R1 K1 + 0x740E0001, // 000B JMPT R3 #000E + 0x140C0501, // 000C LT R3 R2 K1 + 0x780E0000, // 000D JMPF R3 #000F + 0xB0060503, // 000E RAISE 1 K2 K3 + 0x580C0004, // 000F LDCONST R3 K4 + 0xB4000004, // 0010 CLASS K4 + 0x5C100600, // 0011 MOVE R4 R3 + 0x5C140000, // 0012 MOVE R5 R0 + 0x5C180200, // 0013 MOVE R6 R1 + 0x5C1C0400, // 0014 MOVE R7 R2 + 0x7C100600, // 0015 CALL R4 3 + 0x80040800, // 0016 RET 1 R4 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: is_dirty +********************************************************************/ +be_local_closure(Leds_is_dirty, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(call_native), + }), + &be_const_str_is_dirty, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E0003, // 0001 LDINT R3 4 + 0x7C040400, // 0002 CALL R1 2 + 0x80040200, // 0003 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: pixel_count ********************************************************************/ @@ -13,7 +744,7 @@ be_local_closure(Leds_matrix_pixel_count, /* name */ be_nested_proto( 3, /* nstack */ 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -43,7 +774,7 @@ be_local_closure(Leds_matrix_set_alternate, /* name */ be_nested_proto( 2, /* nstack */ 2, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -70,7 +801,7 @@ be_local_closure(Leds_matrix_pixel_size, /* name */ be_nested_proto( 3, /* nstack */ 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -100,7 +831,7 @@ be_local_closure(Leds_matrix_set_pixel_color, /* name */ be_nested_proto( 9, /* nstack */ 4, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -135,7 +866,7 @@ be_local_closure(Leds_matrix_set_matrix_pixel_color, /* name */ be_nested_proto( 10, /* nstack */ 5, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -196,7 +927,7 @@ be_local_closure(Leds_matrix_show, /* name */ be_nested_proto( 4, /* nstack */ 2, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -245,7 +976,7 @@ be_local_closure(Leds_matrix_is_dirty, /* name */ be_nested_proto( 3, /* nstack */ 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -275,7 +1006,7 @@ be_local_closure(Leds_matrix_clear_to, /* name */ be_nested_proto( 9, /* nstack */ 3, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -322,7 +1053,7 @@ be_local_closure(Leds_matrix_clear, /* name */ be_nested_proto( 4, /* nstack */ 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -355,7 +1086,7 @@ be_local_closure(Leds_matrix_pixels_buffer, /* name */ be_nested_proto( 2, /* nstack */ 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -380,7 +1111,7 @@ be_local_closure(Leds_matrix_init, /* name */ be_nested_proto( 6, /* nstack */ 5, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -416,7 +1147,7 @@ be_local_closure(Leds_matrix_dirty, /* name */ be_nested_proto( 3, /* nstack */ 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -446,7 +1177,7 @@ be_local_closure(Leds_matrix_get_pixel_color, /* name */ be_nested_proto( 5, /* nstack */ 2, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -479,7 +1210,7 @@ be_local_closure(Leds_matrix_get_alternate, /* name */ be_nested_proto( 2, /* nstack */ 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -506,7 +1237,7 @@ be_local_closure(Leds_matrix_begin, /* name */ be_nested_proto( 1, /* nstack */ 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -530,7 +1261,7 @@ be_local_closure(Leds_matrix_can_show, /* name */ be_nested_proto( 3, /* nstack */ 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -593,7 +1324,7 @@ be_local_closure(Leds_create_matrix, /* name */ be_nested_proto( 10, /* nstack */ 4, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -653,29 +1384,299 @@ be_local_closure(Leds_create_matrix, /* name */ /******************************************************************** -** Solidified function: begin +** Solidified function: pixels_buffer ********************************************************************/ -be_local_closure(Leds_begin, /* name */ +be_local_closure(Leds_pixels_buffer, /* name */ be_nested_proto( 4, /* nstack */ 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(call_native), + }), + &be_const_str_pixels_buffer, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E0005, // 0001 LDINT R3 6 + 0x7C040400, // 0002 CALL R1 2 + 0x80040200, // 0003 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(Leds_init, /* name */ + be_nested_proto( + 11, /* nstack */ + 5, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[12]) { /* constants */ + /* K0 */ be_nested_str(gamma), + /* K1 */ be_nested_str(leds), + /* K2 */ be_nested_str(pin), + /* K3 */ be_nested_str(WS2812), + /* K4 */ be_const_int(0), + /* K5 */ be_nested_str(valuer_error), + /* K6 */ be_nested_str(no_X20GPIO_X20specified_X20for_X20neopixelbus), + /* K7 */ be_nested_str(ctor), + /* K8 */ be_nested_str(_p), + /* K9 */ be_nested_str(internal_error), + /* K10 */ be_nested_str(couldn_X27t_X20not_X20initialize_X20noepixelbus), + /* K11 */ be_nested_str(begin), + }), + &be_const_str_init, + &be_const_str_solidified, + ( &(const binstruction[36]) { /* code */ + 0x50140200, // 0000 LDBOOL R5 1 0 + 0x90020005, // 0001 SETMBR R0 K0 R5 + 0x60140009, // 0002 GETGBL R5 G9 + 0x5C180200, // 0003 MOVE R6 R1 + 0x7C140200, // 0004 CALL R5 1 + 0x90020205, // 0005 SETMBR R0 K1 R5 + 0x4C140000, // 0006 LDNIL R5 + 0x1C140405, // 0007 EQ R5 R2 R5 + 0x78160008, // 0008 JMPF R5 #0012 + 0x8C140502, // 0009 GETMET R5 R2 K2 + 0x881C0503, // 000A GETMBR R7 R2 K3 + 0x7C140400, // 000B CALL R5 2 + 0x28140B04, // 000C GE R5 R5 K4 + 0x78160003, // 000D JMPF R5 #0012 + 0x8C140502, // 000E GETMET R5 R2 K2 + 0x881C0503, // 000F GETMBR R7 R2 K3 + 0x7C140400, // 0010 CALL R5 2 + 0x5C080A00, // 0011 MOVE R2 R5 + 0x4C140000, // 0012 LDNIL R5 + 0x1C140405, // 0013 EQ R5 R2 R5 + 0x78160000, // 0014 JMPF R5 #0016 + 0xB0060B06, // 0015 RAISE 1 K5 K6 + 0x8C140107, // 0016 GETMET R5 R0 K7 + 0x881C0101, // 0017 GETMBR R7 R0 K1 + 0x5C200400, // 0018 MOVE R8 R2 + 0x5C240600, // 0019 MOVE R9 R3 + 0x5C280800, // 001A MOVE R10 R4 + 0x7C140A00, // 001B CALL R5 5 + 0x88140108, // 001C GETMBR R5 R0 K8 + 0x4C180000, // 001D LDNIL R6 + 0x1C140A06, // 001E EQ R5 R5 R6 + 0x78160000, // 001F JMPF R5 #0021 + 0xB006130A, // 0020 RAISE 1 K9 K10 + 0x8C14010B, // 0021 GETMET R5 R0 K11 + 0x7C140200, // 0022 CALL R5 1 + 0x80000000, // 0023 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: dirty +********************************************************************/ +be_local_closure(Leds_dirty, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(call_native), + }), + &be_const_str_dirty, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E0004, // 0001 LDINT R3 5 + 0x7C040400, // 0002 CALL R1 2 + 0x80000000, // 0003 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_pixel_color +********************************************************************/ +be_local_closure(Leds_get_pixel_color, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(call_native), + }), + &be_const_str_get_pixel_color, + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0x8C080100, // 0000 GETMET R2 R0 K0 + 0x5412000A, // 0001 LDINT R4 11 + 0x5C140200, // 0002 MOVE R5 R1 + 0x7C080600, // 0003 CALL R2 3 + 0x80040400, // 0004 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: assign_rmt +********************************************************************/ +be_local_closure(Leds_assign_rmt, /* name */ + be_nested_proto( + 8, /* nstack */ + 1, /* argc */ 0, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(call_native), - /* K1 */ be_const_int(1), + ( &(const bvalue[16]) { /* constants */ + /* K0 */ be_const_int(0), + /* K1 */ be_nested_str(value_error), + /* K2 */ be_nested_str(invalid_X20GPIO_X20number), + /* K3 */ be_nested_str(global), + /* K4 */ be_nested_str(contains), + /* K5 */ be_nested_str(_rmt), + /* K6 */ be_nested_str(gpio), + /* K7 */ be_nested_str(MAX_RMT), + /* K8 */ be_const_int(1), + /* K9 */ be_nested_str(push), + /* K10 */ be_nested_str(stop_iteration), + /* K11 */ be_nested_str(pin_used), + /* K12 */ be_nested_str(WS2812), + /* K13 */ be_nested_str(pin), + /* K14 */ be_nested_str(internal_error), + /* K15 */ be_nested_str(no_X20more_X20RMT_X20channel_X20available), }), - &be_const_str_begin, + &be_const_str_assign_rmt, + &be_const_str_solidified, + ( &(const binstruction[71]) { /* code */ + 0x60040009, // 0000 GETGBL R1 G9 + 0x5C080000, // 0001 MOVE R2 R0 + 0x7C040200, // 0002 CALL R1 1 + 0x5C000200, // 0003 MOVE R0 R1 + 0x14040100, // 0004 LT R1 R0 K0 + 0x78060000, // 0005 JMPF R1 #0007 + 0xB0060302, // 0006 RAISE 1 K1 K2 + 0xA4060600, // 0007 IMPORT R1 K3 + 0x4C080000, // 0008 LDNIL R2 + 0x8C0C0304, // 0009 GETMET R3 R1 K4 + 0x58140005, // 000A LDCONST R5 K5 + 0x7C0C0400, // 000B CALL R3 2 + 0x740E0021, // 000C JMPT R3 #002F + 0x600C0012, // 000D GETGBL R3 G18 + 0x7C0C0000, // 000E CALL R3 0 + 0x5C080600, // 000F MOVE R2 R3 + 0x90060A02, // 0010 SETMBR R1 K5 R2 + 0x600C0010, // 0011 GETGBL R3 G16 + 0xB8120C00, // 0012 GETNGBL R4 K6 + 0x88100907, // 0013 GETMBR R4 R4 K7 + 0x04100908, // 0014 SUB R4 R4 K8 + 0x40120004, // 0015 CONNECT R4 K0 R4 + 0x7C0C0200, // 0016 CALL R3 1 + 0xA8020005, // 0017 EXBLK 0 #001E + 0x5C100600, // 0018 MOVE R4 R3 + 0x7C100000, // 0019 CALL R4 0 + 0x8C140509, // 001A GETMET R5 R2 K9 + 0x541DFFFE, // 001B LDINT R7 -1 + 0x7C140400, // 001C CALL R5 2 + 0x7001FFF9, // 001D JMP #0018 + 0x580C000A, // 001E LDCONST R3 K10 + 0xAC0C0200, // 001F CATCH R3 1 0 + 0xB0080000, // 0020 RAISE 2 R0 R0 + 0xB80E0C00, // 0021 GETNGBL R3 K6 + 0x8C0C070B, // 0022 GETMET R3 R3 K11 + 0xB8160C00, // 0023 GETNGBL R5 K6 + 0x88140B0C, // 0024 GETMBR R5 R5 K12 + 0x58180000, // 0025 LDCONST R6 K0 + 0x7C0C0600, // 0026 CALL R3 3 + 0x780E0006, // 0027 JMPF R3 #002F + 0xB80E0C00, // 0028 GETNGBL R3 K6 + 0x8C0C070D, // 0029 GETMET R3 R3 K13 + 0xB8160C00, // 002A GETNGBL R5 K6 + 0x88140B0C, // 002B GETMBR R5 R5 K12 + 0x58180000, // 002C LDCONST R6 K0 + 0x7C0C0600, // 002D CALL R3 3 + 0x980A0003, // 002E SETIDX R2 K0 R3 + 0x88080305, // 002F GETMBR R2 R1 K5 + 0x580C0000, // 0030 LDCONST R3 K0 + 0x5411FFFE, // 0031 LDINT R4 -1 + 0xB8160C00, // 0032 GETNGBL R5 K6 + 0x88140B07, // 0033 GETMBR R5 R5 K7 + 0x14140605, // 0034 LT R5 R3 R5 + 0x7816000A, // 0035 JMPF R5 #0041 + 0x94140403, // 0036 GETIDX R5 R2 R3 + 0x1C180A00, // 0037 EQ R6 R5 R0 + 0x781A0000, // 0038 JMPF R6 #003A + 0x80040600, // 0039 RET 1 R3 + 0x14180B00, // 003A LT R6 R5 K0 + 0x781A0002, // 003B JMPF R6 #003F + 0x14180900, // 003C LT R6 R4 K0 + 0x781A0000, // 003D JMPF R6 #003F + 0x5C100600, // 003E MOVE R4 R3 + 0x000C0708, // 003F ADD R3 R3 K8 + 0x7001FFF0, // 0040 JMP #0032 + 0x28140900, // 0041 GE R5 R4 K0 + 0x78160001, // 0042 JMPF R5 #0045 + 0x98080800, // 0043 SETIDX R2 R4 R0 + 0x80040800, // 0044 RET 1 R4 + 0xB0061D0F, // 0045 RAISE 1 K14 K15 + 0x80000000, // 0046 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: pixel_size +********************************************************************/ +be_local_closure(Leds_pixel_size, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(call_native), + }), + &be_const_str_pixel_size, &be_const_str_solidified, ( &(const binstruction[ 4]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x580C0001, // 0001 LDCONST R3 K1 + 0x540E0006, // 0001 LDINT R3 7 0x7C040400, // 0002 CALL R1 2 - 0x80000000, // 0003 RET 0 + 0x80040200, // 0003 RET 1 R1 }) ) ); @@ -689,7 +1690,7 @@ be_local_closure(Leds_to_gamma, /* name */ be_nested_proto( 12, /* nstack */ 3, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -781,168 +1782,13 @@ be_local_closure(Leds_to_gamma, /* name */ /******************************************************************** -** Solidified function: pixel_count +** Solidified function: begin ********************************************************************/ -be_local_closure(Leds_pixel_count, /* name */ +be_local_closure(Leds_begin, /* name */ be_nested_proto( 4, /* nstack */ 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(call_native), - }), - &be_const_str_pixel_count, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x540E0007, // 0001 LDINT R3 8 - 0x7C040400, // 0002 CALL R1 2 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: matrix -********************************************************************/ -be_local_closure(Leds_matrix, /* name */ - be_nested_proto( - 10, /* nstack */ - 4, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(Leds), - /* K1 */ be_nested_str(create_matrix), - /* K2 */ be_const_int(0), - }), - &be_const_str_matrix, - &be_const_str_solidified, - ( &(const binstruction[11]) { /* code */ - 0xB8120000, // 0000 GETNGBL R4 K0 - 0x08140001, // 0001 MUL R5 R0 R1 - 0x5C180400, // 0002 MOVE R6 R2 - 0x5C1C0600, // 0003 MOVE R7 R3 - 0x7C100600, // 0004 CALL R4 3 - 0x8C140901, // 0005 GETMET R5 R4 K1 - 0x5C1C0000, // 0006 MOVE R7 R0 - 0x5C200200, // 0007 MOVE R8 R1 - 0x58240002, // 0008 LDCONST R9 K2 - 0x7C140800, // 0009 CALL R5 4 - 0x80040A00, // 000A RET 1 R5 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: pixel_size -********************************************************************/ -be_local_closure(Leds_pixel_size, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(call_native), - }), - &be_const_str_pixel_size, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x540E0006, // 0001 LDINT R3 7 - 0x7C040400, // 0002 CALL R1 2 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: pixels_buffer -********************************************************************/ -be_local_closure(Leds_pixels_buffer, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(call_native), - }), - &be_const_str_pixels_buffer, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x540E0005, // 0001 LDINT R3 6 - 0x7C040400, // 0002 CALL R1 2 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_pixel_color -********************************************************************/ -be_local_closure(Leds_get_pixel_color, /* name */ - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(call_native), - }), - &be_const_str_get_pixel_color, - &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0x8C080100, // 0000 GETMET R2 R0 K0 - 0x5412000A, // 0001 LDINT R4 11 - 0x5C140200, // 0002 MOVE R5 R1 - 0x7C080600, // 0003 CALL R2 3 - 0x80040400, // 0004 RET 1 R2 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: set_pixel_color -********************************************************************/ -be_local_closure(Leds_set_pixel_color, /* name */ - be_nested_proto( - 12, /* nstack */ - 4, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -950,242 +1796,9 @@ be_local_closure(Leds_set_pixel_color, /* name */ 1, /* has constants */ ( &(const bvalue[ 2]) { /* constants */ /* K0 */ be_nested_str(call_native), - /* K1 */ be_nested_str(to_gamma), + /* K1 */ be_const_int(1), }), - &be_const_str_set_pixel_color, - &be_const_str_solidified, - ( &(const binstruction[ 9]) { /* code */ - 0x8C100100, // 0000 GETMET R4 R0 K0 - 0x541A0009, // 0001 LDINT R6 10 - 0x5C1C0200, // 0002 MOVE R7 R1 - 0x8C200101, // 0003 GETMET R8 R0 K1 - 0x5C280400, // 0004 MOVE R10 R2 - 0x5C2C0600, // 0005 MOVE R11 R3 - 0x7C200600, // 0006 CALL R8 3 - 0x7C100800, // 0007 CALL R4 4 - 0x80000000, // 0008 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: is_dirty -********************************************************************/ -be_local_closure(Leds_is_dirty, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(call_native), - }), - &be_const_str_is_dirty, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x540E0003, // 0001 LDINT R3 4 - 0x7C040400, // 0002 CALL R1 2 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(Leds_init, /* name */ - be_nested_proto( - 11, /* nstack */ - 5, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[12]) { /* constants */ - /* K0 */ be_nested_str(gamma), - /* K1 */ be_nested_str(leds), - /* K2 */ be_nested_str(pin), - /* K3 */ be_nested_str(WS2812), - /* K4 */ be_const_int(0), - /* K5 */ be_nested_str(valuer_error), - /* K6 */ be_nested_str(no_X20GPIO_X20specified_X20for_X20neopixelbus), - /* K7 */ be_nested_str(ctor), - /* K8 */ be_nested_str(_p), - /* K9 */ be_nested_str(internal_error), - /* K10 */ be_nested_str(couldn_X27t_X20not_X20initialize_X20noepixelbus), - /* K11 */ be_nested_str(begin), - }), - &be_const_str_init, - &be_const_str_solidified, - ( &(const binstruction[36]) { /* code */ - 0x50140200, // 0000 LDBOOL R5 1 0 - 0x90020005, // 0001 SETMBR R0 K0 R5 - 0x60140009, // 0002 GETGBL R5 G9 - 0x5C180200, // 0003 MOVE R6 R1 - 0x7C140200, // 0004 CALL R5 1 - 0x90020205, // 0005 SETMBR R0 K1 R5 - 0x4C140000, // 0006 LDNIL R5 - 0x1C140405, // 0007 EQ R5 R2 R5 - 0x78160008, // 0008 JMPF R5 #0012 - 0x8C140502, // 0009 GETMET R5 R2 K2 - 0x881C0503, // 000A GETMBR R7 R2 K3 - 0x7C140400, // 000B CALL R5 2 - 0x28140B04, // 000C GE R5 R5 K4 - 0x78160003, // 000D JMPF R5 #0012 - 0x8C140502, // 000E GETMET R5 R2 K2 - 0x881C0503, // 000F GETMBR R7 R2 K3 - 0x7C140400, // 0010 CALL R5 2 - 0x5C080A00, // 0011 MOVE R2 R5 - 0x4C140000, // 0012 LDNIL R5 - 0x1C140405, // 0013 EQ R5 R2 R5 - 0x78160000, // 0014 JMPF R5 #0016 - 0xB0060B06, // 0015 RAISE 1 K5 K6 - 0x8C140107, // 0016 GETMET R5 R0 K7 - 0x881C0101, // 0017 GETMBR R7 R0 K1 - 0x5C200400, // 0018 MOVE R8 R2 - 0x5C240600, // 0019 MOVE R9 R3 - 0x5C280800, // 001A MOVE R10 R4 - 0x7C140A00, // 001B CALL R5 5 - 0x88140108, // 001C GETMBR R5 R0 K8 - 0x4C180000, // 001D LDNIL R6 - 0x1C140A06, // 001E EQ R5 R5 R6 - 0x78160000, // 001F JMPF R5 #0021 - 0xB006130A, // 0020 RAISE 1 K9 K10 - 0x8C14010B, // 0021 GETMET R5 R0 K11 - 0x7C140200, // 0022 CALL R5 1 - 0x80000000, // 0023 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: clear_to -********************************************************************/ -be_local_closure(Leds_clear_to, /* name */ - be_nested_proto( - 10, /* nstack */ - 3, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(call_native), - /* K1 */ be_nested_str(to_gamma), - }), - &be_const_str_clear_to, - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0x8C0C0100, // 0000 GETMET R3 R0 K0 - 0x54160008, // 0001 LDINT R5 9 - 0x8C180101, // 0002 GETMET R6 R0 K1 - 0x5C200200, // 0003 MOVE R8 R1 - 0x5C240400, // 0004 MOVE R9 R2 - 0x7C180600, // 0005 CALL R6 3 - 0x7C0C0600, // 0006 CALL R3 3 - 0x80000000, // 0007 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: can_show -********************************************************************/ -be_local_closure(Leds_can_show, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(call_native), - /* K1 */ be_const_int(3), - }), - &be_const_str_can_show, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x580C0001, // 0001 LDCONST R3 K1 - 0x7C040400, // 0002 CALL R1 2 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: clear -********************************************************************/ -be_local_closure(Leds_clear, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(clear_to), - /* K1 */ be_const_int(0), - /* K2 */ be_nested_str(show), - }), - &be_const_str_clear, - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x580C0001, // 0001 LDCONST R3 K1 - 0x7C040400, // 0002 CALL R1 2 - 0x8C040102, // 0003 GETMET R1 R0 K2 - 0x7C040200, // 0004 CALL R1 1 - 0x80000000, // 0005 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: show -********************************************************************/ -be_local_closure(Leds_show, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(call_native), - /* K1 */ be_const_int(2), - }), - &be_const_str_show, + &be_const_str_begin, &be_const_str_solidified, ( &(const binstruction[ 4]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 @@ -1252,320 +1865,28 @@ be_local_closure(Leds_ctor, /* name */ /******************************************************************** -** Solidified function: dirty +** Solidified function: can_show ********************************************************************/ -be_local_closure(Leds_dirty, /* name */ +be_local_closure(Leds_can_show, /* name */ be_nested_proto( 4, /* nstack */ 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(call_native), - }), - &be_const_str_dirty, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x540E0004, // 0001 LDINT R3 5 - 0x7C040400, // 0002 CALL R1 2 - 0x80000000, // 0003 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_pixel_color -********************************************************************/ -be_local_closure(Leds_segment_get_pixel_color, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(strip), - /* K1 */ be_nested_str(get_pixel_color), - /* K2 */ be_nested_str(offseta), - }), - &be_const_str_get_pixel_color, - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0x88080100, // 0000 GETMBR R2 R0 K0 - 0x8C080501, // 0001 GETMET R2 R2 K1 - 0x88100102, // 0002 GETMBR R4 R0 K2 - 0x00100204, // 0003 ADD R4 R1 R4 - 0x7C080400, // 0004 CALL R2 2 - 0x80040400, // 0005 RET 1 R2 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: clear_to -********************************************************************/ -be_local_closure(Leds_segment_clear_to, /* name */ - be_nested_proto( - 9, /* nstack */ - 3, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 6]) { /* constants */ - /* K0 */ be_const_int(0), - /* K1 */ be_nested_str(leds), - /* K2 */ be_nested_str(strip), - /* K3 */ be_nested_str(set_pixel_color), - /* K4 */ be_nested_str(offset), - /* K5 */ be_const_int(1), - }), - &be_const_str_clear_to, - &be_const_str_solidified, - ( &(const binstruction[14]) { /* code */ - 0x580C0000, // 0000 LDCONST R3 K0 - 0x88100101, // 0001 GETMBR R4 R0 K1 - 0x14100604, // 0002 LT R4 R3 R4 - 0x78120008, // 0003 JMPF R4 #000D - 0x88100102, // 0004 GETMBR R4 R0 K2 - 0x8C100903, // 0005 GETMET R4 R4 K3 - 0x88180104, // 0006 GETMBR R6 R0 K4 - 0x00180606, // 0007 ADD R6 R3 R6 - 0x5C1C0200, // 0008 MOVE R7 R1 - 0x5C200400, // 0009 MOVE R8 R2 - 0x7C100800, // 000A CALL R4 4 - 0x000C0705, // 000B ADD R3 R3 K5 - 0x7001FFF3, // 000C JMP #0001 - 0x80000000, // 000D RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: can_show -********************************************************************/ -be_local_closure(Leds_segment_can_show, /* name */ - be_nested_proto( - 3, /* nstack */ - 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(strip), - /* K1 */ be_nested_str(can_show), + /* K0 */ be_nested_str(call_native), + /* K1 */ be_const_int(3), }), &be_const_str_can_show, &be_const_str_solidified, ( &(const binstruction[ 4]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x7C040200, // 0002 CALL R1 1 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: set_pixel_color -********************************************************************/ -be_local_closure(Leds_segment_set_pixel_color, /* name */ - be_nested_proto( - 9, /* nstack */ - 4, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(strip), - /* K1 */ be_nested_str(set_pixel_color), - /* K2 */ be_nested_str(offset), - }), - &be_const_str_set_pixel_color, - &be_const_str_solidified, - ( &(const binstruction[ 8]) { /* code */ - 0x88100100, // 0000 GETMBR R4 R0 K0 - 0x8C100901, // 0001 GETMET R4 R4 K1 - 0x88180102, // 0002 GETMBR R6 R0 K2 - 0x00180206, // 0003 ADD R6 R1 R6 - 0x5C1C0400, // 0004 MOVE R7 R2 - 0x5C200600, // 0005 MOVE R8 R3 - 0x7C100800, // 0006 CALL R4 4 - 0x80000000, // 0007 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: clear -********************************************************************/ -be_local_closure(Leds_segment_clear, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(clear_to), - /* K1 */ be_const_int(0), - /* K2 */ be_nested_str(show), - }), - &be_const_str_clear, - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 0x580C0001, // 0001 LDCONST R3 K1 0x7C040400, // 0002 CALL R1 2 - 0x8C040102, // 0003 GETMET R1 R0 K2 - 0x7C040200, // 0004 CALL R1 1 - 0x80000000, // 0005 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: begin -********************************************************************/ -be_local_closure(Leds_segment_begin, /* name */ - be_nested_proto( - 1, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 0, /* has constants */ - NULL, /* no const */ - &be_const_str_begin, - &be_const_str_solidified, - ( &(const binstruction[ 1]) { /* code */ - 0x80000000, // 0000 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: pixel_count -********************************************************************/ -be_local_closure(Leds_segment_pixel_count, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(leds), - }), - &be_const_str_pixel_count, - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(Leds_segment_init, /* name */ - be_nested_proto( - 6, /* nstack */ - 4, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(strip), - /* K1 */ be_nested_str(offset), - /* K2 */ be_nested_str(leds), - }), - &be_const_str_init, - &be_const_str_solidified, - ( &(const binstruction[10]) { /* code */ - 0x90020001, // 0000 SETMBR R0 K0 R1 - 0x60100009, // 0001 GETGBL R4 G9 - 0x5C140400, // 0002 MOVE R5 R2 - 0x7C100200, // 0003 CALL R4 1 - 0x90020204, // 0004 SETMBR R0 K1 R4 - 0x60100009, // 0005 GETGBL R4 G9 - 0x5C140600, // 0006 MOVE R5 R3 - 0x7C100200, // 0007 CALL R4 1 - 0x90020404, // 0008 SETMBR R0 K2 R4 - 0x80000000, // 0009 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: pixel_size -********************************************************************/ -be_local_closure(Leds_segment_pixel_size, /* name */ - be_nested_proto( - 3, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(strip), - /* K1 */ be_nested_str(pixel_size), - }), - &be_const_str_pixel_size, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x7C040200, // 0002 CALL R1 1 0x80040200, // 0003 RET 1 R1 }) ) @@ -1573,216 +1894,6 @@ be_local_closure(Leds_segment_pixel_size, /* name */ /*******************************************************************/ -/******************************************************************** -** Solidified function: dirty -********************************************************************/ -be_local_closure(Leds_segment_dirty, /* name */ - be_nested_proto( - 3, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(strip), - /* K1 */ be_nested_str(dirty), - }), - &be_const_str_dirty, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x7C040200, // 0002 CALL R1 1 - 0x80000000, // 0003 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: show -********************************************************************/ -be_local_closure(Leds_segment_show, /* name */ - be_nested_proto( - 4, /* nstack */ - 2, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 5]) { /* constants */ - /* K0 */ be_nested_str(offset), - /* K1 */ be_const_int(0), - /* K2 */ be_nested_str(leds), - /* K3 */ be_nested_str(strip), - /* K4 */ be_nested_str(show), - }), - &be_const_str_show, - &be_const_str_solidified, - ( &(const binstruction[16]) { /* code */ - 0x60080017, // 0000 GETGBL R2 G23 - 0x5C0C0200, // 0001 MOVE R3 R1 - 0x7C080200, // 0002 CALL R2 1 - 0x740A0007, // 0003 JMPT R2 #000C - 0x88080100, // 0004 GETMBR R2 R0 K0 - 0x1C080501, // 0005 EQ R2 R2 K1 - 0x780A0007, // 0006 JMPF R2 #000F - 0x88080102, // 0007 GETMBR R2 R0 K2 - 0x880C0103, // 0008 GETMBR R3 R0 K3 - 0x880C0702, // 0009 GETMBR R3 R3 K2 - 0x1C080403, // 000A EQ R2 R2 R3 - 0x780A0002, // 000B JMPF R2 #000F - 0x88080103, // 000C GETMBR R2 R0 K3 - 0x8C080504, // 000D GETMET R2 R2 K4 - 0x7C080200, // 000E CALL R2 1 - 0x80000000, // 000F RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: is_dirty -********************************************************************/ -be_local_closure(Leds_segment_is_dirty, /* name */ - be_nested_proto( - 3, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(strip), - /* K1 */ be_nested_str(is_dirty), - }), - &be_const_str_is_dirty, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x7C040200, // 0002 CALL R1 1 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: pixels_buffer -********************************************************************/ -be_local_closure(Leds_segment_pixels_buffer, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 0, /* has constants */ - NULL, /* no const */ - &be_const_str_pixels_buffer, - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x4C040000, // 0000 LDNIL R1 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified class: Leds_segment -********************************************************************/ -be_local_class(Leds_segment, - 3, - NULL, - be_nested_map(16, - ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key(get_pixel_color, -1), be_const_closure(Leds_segment_get_pixel_color_closure) }, - { be_const_key(strip, -1), be_const_var(0) }, - { be_const_key(clear_to, 5), be_const_closure(Leds_segment_clear_to_closure) }, - { be_const_key(can_show, 13), be_const_closure(Leds_segment_can_show_closure) }, - { be_const_key(set_pixel_color, -1), be_const_closure(Leds_segment_set_pixel_color_closure) }, - { be_const_key(clear, -1), be_const_closure(Leds_segment_clear_closure) }, - { be_const_key(is_dirty, -1), be_const_closure(Leds_segment_is_dirty_closure) }, - { be_const_key(pixel_count, -1), be_const_closure(Leds_segment_pixel_count_closure) }, - { be_const_key(leds, -1), be_const_var(2) }, - { be_const_key(pixel_size, -1), be_const_closure(Leds_segment_pixel_size_closure) }, - { be_const_key(offset, -1), be_const_var(1) }, - { be_const_key(dirty, 8), be_const_closure(Leds_segment_dirty_closure) }, - { be_const_key(show, -1), be_const_closure(Leds_segment_show_closure) }, - { be_const_key(init, -1), be_const_closure(Leds_segment_init_closure) }, - { be_const_key(begin, 6), be_const_closure(Leds_segment_begin_closure) }, - { be_const_key(pixels_buffer, -1), be_const_closure(Leds_segment_pixels_buffer_closure) }, - })), - be_str_literal("Leds_segment") -); - -/******************************************************************** -** Solidified function: create_segment -********************************************************************/ -be_local_closure(Leds_create_segment, /* name */ - be_nested_proto( - 8, /* nstack */ - 3, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 5]) { /* constants */ - /* K0 */ be_nested_str(leds), - /* K1 */ be_const_int(0), - /* K2 */ be_nested_str(value_error), - /* K3 */ be_nested_str(out_X20of_X20range), - /* K4 */ be_const_class(be_class_Leds_segment), - }), - &be_const_str_create_segment, - &be_const_str_solidified, - ( &(const binstruction[23]) { /* code */ - 0x600C0009, // 0000 GETGBL R3 G9 - 0x5C100200, // 0001 MOVE R4 R1 - 0x7C0C0200, // 0002 CALL R3 1 - 0x60100009, // 0003 GETGBL R4 G9 - 0x5C140400, // 0004 MOVE R5 R2 - 0x7C100200, // 0005 CALL R4 1 - 0x000C0604, // 0006 ADD R3 R3 R4 - 0x88100100, // 0007 GETMBR R4 R0 K0 - 0x240C0604, // 0008 GT R3 R3 R4 - 0x740E0003, // 0009 JMPT R3 #000E - 0x140C0301, // 000A LT R3 R1 K1 - 0x740E0001, // 000B JMPT R3 #000E - 0x140C0501, // 000C LT R3 R2 K1 - 0x780E0000, // 000D JMPF R3 #000F - 0xB0060503, // 000E RAISE 1 K2 K3 - 0x580C0004, // 000F LDCONST R3 K4 - 0xB4000004, // 0010 CLASS K4 - 0x5C100600, // 0011 MOVE R4 R3 - 0x5C140000, // 0012 MOVE R5 R0 - 0x5C180200, // 0013 MOVE R6 R1 - 0x5C1C0400, // 0014 MOVE R7 R2 - 0x7C100600, // 0015 CALL R4 3 - 0x80040800, // 0016 RET 1 R4 - }) - ) -); -/*******************************************************************/ - - /******************************************************************** ** Solidified class: Leds ********************************************************************/ @@ -1790,28 +1901,29 @@ extern const bclass be_class_Leds_ntv; be_local_class(Leds, 2, &be_class_Leds_ntv, - be_nested_map(20, + be_nested_map(21, ( (struct bmapnode*) &(const bmapnode[]) { { be_const_key(pixel_count, -1), be_const_closure(Leds_pixel_count_closure) }, - { be_const_key(dirty, 6), be_const_closure(Leds_dirty_closure) }, - { be_const_key(to_gamma, -1), be_const_closure(Leds_to_gamma_closure) }, - { be_const_key(create_matrix, 1), be_const_closure(Leds_create_matrix_closure) }, - { be_const_key(matrix, -1), be_const_static_closure(Leds_matrix_closure) }, - { be_const_key(pixel_size, -1), be_const_closure(Leds_pixel_size_closure) }, - { be_const_key(ctor, 0), be_const_closure(Leds_ctor_closure) }, - { be_const_key(pixels_buffer, 13), be_const_closure(Leds_pixels_buffer_closure) }, - { be_const_key(get_pixel_color, -1), be_const_closure(Leds_get_pixel_color_closure) }, { be_const_key(show, -1), be_const_closure(Leds_show_closure) }, - { be_const_key(begin, 17), be_const_closure(Leds_begin_closure) }, - { be_const_key(leds, -1), be_const_var(1) }, - { be_const_key(clear, -1), be_const_closure(Leds_clear_closure) }, - { be_const_key(can_show, -1), be_const_closure(Leds_can_show_closure) }, - { be_const_key(gamma, 12), be_const_var(0) }, - { be_const_key(init, 11), be_const_closure(Leds_init_closure) }, - { be_const_key(set_pixel_color, 9), be_const_closure(Leds_set_pixel_color_closure) }, - { be_const_key(clear_to, 18), be_const_closure(Leds_clear_to_closure) }, { be_const_key(is_dirty, -1), be_const_closure(Leds_is_dirty_closure) }, + { be_const_key(leds, 17), be_const_var(1) }, + { be_const_key(set_pixel_color, 8), be_const_closure(Leds_set_pixel_color_closure) }, + { be_const_key(clear, -1), be_const_closure(Leds_clear_closure) }, + { be_const_key(matrix, -1), be_const_static_closure(Leds_matrix_closure) }, { be_const_key(create_segment, -1), be_const_closure(Leds_create_segment_closure) }, + { be_const_key(ctor, 2), be_const_closure(Leds_ctor_closure) }, + { be_const_key(clear_to, 19), be_const_closure(Leds_clear_to_closure) }, + { be_const_key(create_matrix, -1), be_const_closure(Leds_create_matrix_closure) }, + { be_const_key(pixels_buffer, -1), be_const_closure(Leds_pixels_buffer_closure) }, + { be_const_key(init, -1), be_const_closure(Leds_init_closure) }, + { be_const_key(dirty, -1), be_const_closure(Leds_dirty_closure) }, + { be_const_key(get_pixel_color, -1), be_const_closure(Leds_get_pixel_color_closure) }, + { be_const_key(assign_rmt, -1), be_const_static_closure(Leds_assign_rmt_closure) }, + { be_const_key(pixel_size, -1), be_const_closure(Leds_pixel_size_closure) }, + { be_const_key(to_gamma, 16), be_const_closure(Leds_to_gamma_closure) }, + { be_const_key(begin, -1), be_const_closure(Leds_begin_closure) }, + { be_const_key(gamma, -1), be_const_var(0) }, + { be_const_key(can_show, -1), be_const_closure(Leds_can_show_closure) }, })), be_str_literal("Leds") ); diff --git a/lib/libesp32/berry_tasmota/src/embedded/leds.be b/lib/libesp32/berry_tasmota/src/embedded/leds.be index a0bad7435..4d681be8c 100644 --- a/lib/libesp32/berry_tasmota/src/embedded/leds.be +++ b/lib/libesp32/berry_tasmota/src/embedded/leds.be @@ -52,6 +52,44 @@ class Leds : Leds_ntv end + # assign RMT + static def assign_rmt(gpio_phy) + gpio_phy = int(gpio_phy) + if gpio_phy < 0 raise "value_error", "invalid GPIO number" end + + import global + var rmt + # if "_rmt" is not initialized, set to an array of GPIO of size MAX_RMT + if !global.contains("_rmt") + rmt = [] + global._rmt = rmt + for i:0..gpio.MAX_RMT-1 + rmt.push(-1) + end + # if default WS2812 is set, assign RMT0 + if gpio.pin_used(gpio.WS2812, 0) + rmt[0] = gpio.pin(gpio.WS2812, 0) + end + end + + rmt = global._rmt + # find an already assigned slot or try to assign a new one + var i = 0 + var first_free = -1 + while i < gpio.MAX_RMT + var elt = rmt[i] + if elt == gpio_phy return i end # already assigned + if elt < 0 && first_free < 0 first_free = i end # found a free slot + i += 1 + end + if first_free >= 0 + rmt[first_free] = gpio_phy + return first_free + end + # no more slot + raise "internal_error", "no more RMT channel available" + end + def clear() self.clear_to(0x000000) self.show() From 7783389921961fdd49a36b0496ab8eb33f4b7650 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sun, 6 Mar 2022 16:31:24 +0100 Subject: [PATCH 161/355] Auto assign RMT --- lib/libesp32/berry_tasmota/src/be_leds_lib.c | 117 +++++++----------- .../berry_tasmota/src/embedded/leds.be | 24 ++-- tasmota/xdrv_52_3_berry_leds.ino | 19 +-- 3 files changed, 62 insertions(+), 98 deletions(-) diff --git a/lib/libesp32/berry_tasmota/src/be_leds_lib.c b/lib/libesp32/berry_tasmota/src/be_leds_lib.c index faf87357f..a2d37d133 100644 --- a/lib/libesp32/berry_tasmota/src/be_leds_lib.c +++ b/lib/libesp32/berry_tasmota/src/be_leds_lib.c @@ -1425,23 +1425,20 @@ be_local_closure(Leds_init, /* name */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[12]) { /* constants */ + ( &(const bvalue[ 9]) { /* constants */ /* K0 */ be_nested_str(gamma), /* K1 */ be_nested_str(leds), - /* K2 */ be_nested_str(pin), - /* K3 */ be_nested_str(WS2812), - /* K4 */ be_const_int(0), - /* K5 */ be_nested_str(valuer_error), - /* K6 */ be_nested_str(no_X20GPIO_X20specified_X20for_X20neopixelbus), - /* K7 */ be_nested_str(ctor), - /* K8 */ be_nested_str(_p), - /* K9 */ be_nested_str(internal_error), - /* K10 */ be_nested_str(couldn_X27t_X20not_X20initialize_X20noepixelbus), - /* K11 */ be_nested_str(begin), + /* K2 */ be_nested_str(valuer_error), + /* K3 */ be_nested_str(no_X20GPIO_X20specified_X20for_X20neopixelbus), + /* K4 */ be_nested_str(ctor), + /* K5 */ be_nested_str(_p), + /* K6 */ be_nested_str(internal_error), + /* K7 */ be_nested_str(couldn_X27t_X20not_X20initialize_X20noepixelbus), + /* K8 */ be_nested_str(begin), }), &be_const_str_init, &be_const_str_solidified, - ( &(const binstruction[36]) { /* code */ + ( &(const binstruction[24]) { /* code */ 0x50140200, // 0000 LDBOOL R5 1 0 0x90020005, // 0001 SETMBR R0 K0 R5 0x60140009, // 0002 GETGBL R5 G9 @@ -1450,34 +1447,22 @@ be_local_closure(Leds_init, /* name */ 0x90020205, // 0005 SETMBR R0 K1 R5 0x4C140000, // 0006 LDNIL R5 0x1C140405, // 0007 EQ R5 R2 R5 - 0x78160008, // 0008 JMPF R5 #0012 - 0x8C140502, // 0009 GETMET R5 R2 K2 - 0x881C0503, // 000A GETMBR R7 R2 K3 - 0x7C140400, // 000B CALL R5 2 - 0x28140B04, // 000C GE R5 R5 K4 - 0x78160003, // 000D JMPF R5 #0012 - 0x8C140502, // 000E GETMET R5 R2 K2 - 0x881C0503, // 000F GETMBR R7 R2 K3 - 0x7C140400, // 0010 CALL R5 2 - 0x5C080A00, // 0011 MOVE R2 R5 - 0x4C140000, // 0012 LDNIL R5 - 0x1C140405, // 0013 EQ R5 R2 R5 - 0x78160000, // 0014 JMPF R5 #0016 - 0xB0060B06, // 0015 RAISE 1 K5 K6 - 0x8C140107, // 0016 GETMET R5 R0 K7 - 0x881C0101, // 0017 GETMBR R7 R0 K1 - 0x5C200400, // 0018 MOVE R8 R2 - 0x5C240600, // 0019 MOVE R9 R3 - 0x5C280800, // 001A MOVE R10 R4 - 0x7C140A00, // 001B CALL R5 5 - 0x88140108, // 001C GETMBR R5 R0 K8 - 0x4C180000, // 001D LDNIL R6 - 0x1C140A06, // 001E EQ R5 R5 R6 - 0x78160000, // 001F JMPF R5 #0021 - 0xB006130A, // 0020 RAISE 1 K9 K10 - 0x8C14010B, // 0021 GETMET R5 R0 K11 - 0x7C140200, // 0022 CALL R5 1 - 0x80000000, // 0023 RET 0 + 0x78160000, // 0008 JMPF R5 #000A + 0xB0060503, // 0009 RAISE 1 K2 K3 + 0x8C140104, // 000A GETMET R5 R0 K4 + 0x881C0101, // 000B GETMBR R7 R0 K1 + 0x5C200400, // 000C MOVE R8 R2 + 0x5C240600, // 000D MOVE R9 R3 + 0x5C280800, // 000E MOVE R10 R4 + 0x7C140A00, // 000F CALL R5 5 + 0x88140105, // 0010 GETMBR R5 R0 K5 + 0x4C180000, // 0011 LDNIL R6 + 0x1C140A06, // 0012 EQ R5 R5 R6 + 0x78160000, // 0013 JMPF R5 #0015 + 0xB0060D07, // 0014 RAISE 1 K6 K7 + 0x8C140108, // 0015 GETMET R5 R0 K8 + 0x7C140200, // 0016 CALL R5 1 + 0x80000000, // 0017 RET 0 }) ) ); @@ -1824,40 +1809,34 @@ be_local_closure(Leds_ctor, /* name */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(call_native), - /* K1 */ be_const_int(0), + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_str(WS2812_GRB), + /* K1 */ be_nested_str(assign_rmt), + /* K2 */ be_nested_str(call_native), + /* K3 */ be_const_int(0), }), &be_const_str_ctor, &be_const_str_solidified, - ( &(const binstruction[27]) { /* code */ + ( &(const binstruction[19]) { /* code */ 0x4C140000, // 0000 LDNIL R5 0x1C140605, // 0001 EQ R5 R3 R5 - 0x78160005, // 0002 JMPF R5 #0009 - 0x8C140100, // 0003 GETMET R5 R0 K0 - 0x581C0001, // 0004 LDCONST R7 K1 - 0x5C200200, // 0005 MOVE R8 R1 - 0x5C240400, // 0006 MOVE R9 R2 - 0x7C140800, // 0007 CALL R5 4 - 0x70020010, // 0008 JMP #001A - 0x4C140000, // 0009 LDNIL R5 - 0x1C140805, // 000A EQ R5 R4 R5 - 0x78160006, // 000B JMPF R5 #0013 - 0x8C140100, // 000C GETMET R5 R0 K0 - 0x581C0001, // 000D LDCONST R7 K1 - 0x5C200200, // 000E MOVE R8 R1 - 0x5C240400, // 000F MOVE R9 R2 - 0x5C280600, // 0010 MOVE R10 R3 - 0x7C140A00, // 0011 CALL R5 5 - 0x70020006, // 0012 JMP #001A - 0x8C140100, // 0013 GETMET R5 R0 K0 - 0x581C0001, // 0014 LDCONST R7 K1 - 0x5C200200, // 0015 MOVE R8 R1 - 0x5C240400, // 0016 MOVE R9 R2 - 0x5C280600, // 0017 MOVE R10 R3 - 0x5C2C0800, // 0018 MOVE R11 R4 - 0x7C140C00, // 0019 CALL R5 6 - 0x80000000, // 001A RET 0 + 0x78160000, // 0002 JMPF R5 #0004 + 0x880C0100, // 0003 GETMBR R3 R0 K0 + 0x4C140000, // 0004 LDNIL R5 + 0x1C140805, // 0005 EQ R5 R4 R5 + 0x78160003, // 0006 JMPF R5 #000B + 0x8C140101, // 0007 GETMET R5 R0 K1 + 0x5C1C0400, // 0008 MOVE R7 R2 + 0x7C140400, // 0009 CALL R5 2 + 0x5C100A00, // 000A MOVE R4 R5 + 0x8C140102, // 000B GETMET R5 R0 K2 + 0x581C0003, // 000C LDCONST R7 K3 + 0x5C200200, // 000D MOVE R8 R1 + 0x5C240400, // 000E MOVE R9 R2 + 0x5C280600, // 000F MOVE R10 R3 + 0x5C2C0800, // 0010 MOVE R11 R4 + 0x7C140C00, // 0011 CALL R5 6 + 0x80000000, // 0012 RET 0 }) ) ); diff --git a/lib/libesp32/berry_tasmota/src/embedded/leds.be b/lib/libesp32/berry_tasmota/src/embedded/leds.be index 4d681be8c..bf69bc707 100644 --- a/lib/libesp32/berry_tasmota/src/embedded/leds.be +++ b/lib/libesp32/berry_tasmota/src/embedded/leds.be @@ -29,21 +29,17 @@ class Leds : Leds_ntv # gpio:int (optional) = GPIO for NeoPixel. If not specified, takes the WS2812 gpio # type:int (optional) = Type of LED, defaults to WS2812 RGB # rmt:int (optional) = RMT hardware channel to use, leave default unless you have a good reason - def init(leds, gpio, type, rmt) # rmt is optional + def init(leds, gpio_phy, type, rmt) # rmt is optional self.gamma = true # gamma is enabled by default, it should be disabled explicitly if needed self.leds = int(leds) - if gpio == nil && gpio.pin(gpio.WS2812) >= 0 - gpio = gpio.pin(gpio.WS2812) - end - # if no GPIO, abort - if gpio == nil + if gpio_phy == nil raise "valuer_error", "no GPIO specified for neopixelbus" end # initialize the structure - self.ctor(self.leds, gpio, type, rmt) + self.ctor(self.leds, gpio_phy, type, rmt) if self._p == nil raise "internal_error", "couldn't not initialize noepixelbus" end @@ -95,16 +91,14 @@ class Leds : Leds_ntv self.show() end - def ctor(leds, gpio, type, rmt) + def ctor(leds, gpio_phy, type, rmt) if type == nil - self.call_native(0, leds, gpio) - else - if rmt == nil - self.call_native(0, leds, gpio, type) - else - self.call_native(0, leds, gpio, type, rmt) - end + type = self.WS2812_GRB end + if rmt == nil + rmt = self.assign_rmt(gpio_phy) + end + self.call_native(0, leds, gpio_phy, type, rmt) end def begin() self.call_native(1) diff --git a/tasmota/xdrv_52_3_berry_leds.ino b/tasmota/xdrv_52_3_berry_leds.ino index 1801f1260..89001bbc0 100644 --- a/tasmota/xdrv_52_3_berry_leds.ino +++ b/tasmota/xdrv_52_3_berry_leds.ino @@ -90,32 +90,23 @@ extern "C" { int32_t cmd = be_toint(vm, 2); if (0 == cmd) { // 00 : ctor (leds:int, gpio:int) -> void - if (!(argc >= 4 && be_isint(vm, 3) && be_isint(vm, 4))) { + if (!(argc >= 6 && be_isint(vm, 3) && be_isint(vm, 4) && be_isint(vm, 5) && be_isint(vm, 6))) { be_raise(vm, "value_error", "bad arguments for neopixelbus:ctor"); } int32_t leds = be_toint(vm, 3); int32_t gpio = be_toint(vm, 4); - int32_t rmt = 0; - int32_t neopixel_type = ws2812_grb; - if (argc >= 5 && !(be_isnil(vm, 5))) { - neopixel_type = be_toint(vm, 5); - } + int32_t neopixel_type = be_toint(vm, 5); + int32_t rmt = be_toint(vm, 6); if (neopixel_type < 1) { neopixel_type = 1; } if (neopixel_type >= neopixel_type_end) { neopixel_type = neopixel_type_end - 1; } + if (rmt < 0) { rmt = 0; } + if (rmt >= MAX_RMT) { rmt = MAX_RMT - 1; } // store type in attribute `_t` be_pushint(vm, neopixel_type); be_setmember(vm, 1, "_t"); be_pop(vm, 1); - if (PinUsed(GPIO_WS2812)) { - rmt = 1; // if WS2812 is already configured by Tasmota UI, we switch to RMT1 - } - if (argc >= 6 && !(be_isnil(vm, 6))) { - rmt = be_toint(vm, 6); // if arg5, then RMT channel is specified - } - if (rmt < 0) { rmt = 0; } - if (rmt >= MAX_RMT) { rmt = MAX_RMT - 1; } void * strip = nullptr; switch (neopixel_type) { case ws2812_grb: strip = new neopixel_ws2812_grb_t(leds, gpio, (NeoBusChannel) rmt); From 14d1df0a3b83a7bd2baabce349603a0ec29ead52 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 6 Mar 2022 16:49:51 +0100 Subject: [PATCH 162/355] POC Ade7880 Shelly3EM --- tasmota/xnrg_23_ade7880.ino | 304 ++++++++++++++++++++++++++++++++---- 1 file changed, 272 insertions(+), 32 deletions(-) diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index fc35ce2ac..837e6d82a 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -20,10 +20,24 @@ \*********************************************************************************************/ #define XNRG_23 23 -#define XI2C_65 65 // See I2CDEVICES.md +#define XI2C_65 65 // See I2CDEVICES.md #define ADE7880_ADDR 0x38 +#define ADE7880_APGAIN_INIT 0xFF14B7E3 // = -15419420 +#define ADE7880_BPGAIN_INIT 0xFF14A7B1 // = -15423566 +#define ADE7880_CPGAIN_INIT 0xFF14999C // = -15427171 +#define ADE7880_AVGAIN_INIT 0xFFF43977 // = -771720 +#define ADE7880_BVGAIN_INIT 0xFFF4DD00 // = -729855 +#define ADE7880_CVGAIN_INIT 0xFFF4A306 // = -744697 +#define ADE7880_AIGAIN_INIT 0x002FFED1 // = 3145425 +#define ADE7880_BIGAIN_INIT 0x00309661 // = 3184225 +#define ADE7880_CIGAIN_INIT 0x0030DBFD // = 3202045 +#define ADE7880_NIGAIN_INIT 0x04D906AC // = 81331884 (14223020) +#define ADE7880_APHCAL_INIT 0xD895 // = 55445 (149) +#define ADE7880_BPHCAL_INIT 0xD8A9 // = 55456 (169) +#define ADE7880_CPHCAL_INIT 0xD89D // = 55453 (157) + enum Ade7880DspRegisters { ADE7880_AIGAIN = 0x4380, // 0x4380 R/W 24 32 ZPSE S 0x000000 Phase A current gain adjust. ADE7880_AVGAIN, // 0x4381 R/W 24 32 ZPSE S 0x000000 Phase A voltage gain adjust. @@ -45,8 +59,61 @@ enum Ade7880DspRegisters { ADE7880_BVRMSOS, // 0x4392 R/W 24 32 ZPSE S 0x000000 Phase B voltage rms offset. ADE7880_CIRMSOS, // 0x4393 R/W 24 32 ZPSE S 0x000000 Phase C current rms offset. ADE7880_CVRMSOS, // 0x4394 R/W 24 32 ZPSE S 0x000000 Phase C voltage rms offset. - ADE7880_NIRMSOS // 0x4395 R/W 24 32 ZPSE S 0x000000 Neutral current rms offset. + ADE7880_NIRMSOS, // 0x4395 R/W 24 32 ZPSE S 0x000000 Neutral current rms offset. + ADE7880_HPGAIN = 0x4398, // 0x4398 R/W 24 32 ZPSE S 0x000000 Harmonic powers gain adjust. + ADE7880_ISUMLVL, // 0x4399 R/W 24 32 ZPSE S 0x000000 Threshold used in comparison between the sum of phase currents and the neutral current. + ADE7880_VLEVEL = 0x439F, // 0x439F R/W 28 32 ZP S 0x0000000 Register used in the algorithm that computes the fundamental active and reactive powers. Set this register according to Equation 22 for proper functioning of fundamental powers and harmonic computations. + ADE7880_AFWATTOS = 0x43A2, // 0x43A2 R/W 24 32 ZPSE S 0x000000 Phase A fundamental active power offset adjust. + ADE7880_BFWATTOS, // 0x43A3 R/W 24 32 ZPSE S 0x000000 Phase B fundamental active power offset adjust. + ADE7880_CFWATTOS, // 0x43A4 R/W 24 32 ZPSE S 0x000000 Phase C fundamental active power offset adjust. + ADE7880_AFVAROS, // 0x43A5 R/W 24 32 ZPSE S 0x000000 Phase A fundamental reactive power offset adjust. + ADE7880_BFVAROS, // 0x43A6 R/W 24 32 ZPSE S 0x000000 Phase B fundamental reactive power offset adjust. + ADE7880_CFVAROS, // 0x43A7 R/W 24 32 ZPSE S 0x000000 Phase C fundamental reactive power offset adjust. + ADE7880_AFIRMSOS, // 0x43A8 R/W 24 32 ZPSE S 0x000000 Phase A fundamental current rms offset. + ADE7880_BFIRMSOS, // 0x43A9 R/W 24 32 ZPSE S 0x000000 Phase B fundamental current rms offset. + ADE7880_CFIRMSOS, // 0x43AA R/W 24 32 ZPSE S 0x000000 Phase C fundamental current rms offset. + ADE7880_AFVRMSOS, // 0x43AB R/W 24 32 ZPSE S 0x000000 Phase A fundamental voltage rms offset. + ADE7880_BFVRMSOS, // 0x43AC R/W 24 32 ZPSE S 0x000000 Phase B fundamental voltage rms offset. + ADE7880_CFVRMSOS, // 0x43AD R/W 24 32 ZPSE S 0x000000 Phase C fundamental voltage rms offset. + ADE7880_HXWATTOS, // 0x43AE R/W 24 32 ZPSE S 0x000000 Active power offset adjust on harmonic X (see Harmonics Calculations section for details). + ADE7880_HYWATTOS, // 0x43AF R/W 24 32 ZPSE S 0x000000 Active power offset adjust on harmonic Y (see Harmonics Calculations section for details). + ADE7880_HZWATTOS, // 0x43B0 R/W 24 32 ZPSE S 0x000000 Active power offset adjust on harmonic Z (see Harmonics Calculations section for details). + ADE7880_HXVAROS, // 0x43B1 R/W 24 32 ZPSE S 0x000000 Active power offset adjust on harmonic X (see Harmonics Calculations section for details). + ADE7880_HYVAROS, // 0x43B2 R/W 24 32 ZPSE S 0x000000 Active power offset adjust on harmonic Y (see Harmonics Calculations section for details). + ADE7880_HZVAROS, // 0x43B3 R/W 24 32 ZPSE S 0x000000 Active power offset adjust on harmonic Z (see Harmonics Calculations section for details). + ADE7880_HXIRMSOS, // 0x43B4 R/W 24 32 ZPSE S 0x000000 Current rms offset on harmonic X (see Harmonics Calculations section for details). + ADE7880_HYIRMSOS, // 0x43B5 R/W 24 32 ZPSE S 0x000000 Current rms offset on harmonic Y (see Harmonics Calculations section for details). + ADE7880_HZIRMSOS, // 0x43B6 R/W 24 32 ZPSE S 0x000000 Current rms offset on harmonic Z (see Harmonics Calculations section for details). + ADE7880_HXVRMSOS, // 0x43B7 R/W 24 32 ZPSE S 0x000000 Voltage rms offset on harmonic X (see Harmonics Calculations section for details). + ADE7880_HYVRMSOS, // 0x43B8 R/W 24 32 ZPSE S 0x000000 Voltage rms offset on harmonic Y (see Harmonics Calculations section for details). + ADE7880_HZVRMSOS, // 0x43B9 R/W 24 32 ZPSE S 0x000000 Voltage rms offset on harmonic Z (see Harmonics Calculations section for details). + ADE7880_AIRMS = 0x43C0, // 0x43C0 R 24 32 ZP S N/A Phase A current rms value. + ADE7880_AVRMS, // 0x43C1 R 24 32 ZP S N/A Phase A voltage rms value. + ADE7880_BIRMS, // 0x43C2 R 24 32 ZP S N/A Phase B current rms value. + ADE7880_BVRMS, // 0x43C3 R 24 32 ZP S N/A Phase B voltage rms value. + ADE7880_CIRMS, // 0x43C4 R 24 32 ZP S N/A Phase C current rms value. + ADE7880_CVRMS, // 0x43C5 R 24 32 ZP S N/A Phase C voltage rms value. + ADE7880_NIRMS, // 0x43C6 R 24 32 ZP S N/A Neutral current rms value. + ADE7880_ISUM // 0x43C7 R 28 32 ZP S N/A Sum of IAWV, IBWV and ICWV registers. +}; +enum Ade7880InternalDspRegisters { + ADE7880_Run = 0xE228 // 0xE228 R/W 16 16 U 0x0000 Run register starts and stops the DSP. See the Digital Signal Processor section for more details. +}; + +enum Ade7880BillableRegisters { + ADE7880_AWATTHR = 0xE400, // 0xE400 R 32 32 S 0x00000000 Phase A total active energy accumulation. + ADE7880_BWATTHR, // 0xE401 R 32 32 S 0x00000000 Phase B total active energy accumulation. + ADE7880_CWATTHR, // 0xE402 R 32 32 S 0x00000000 Phase C total active energy accumulation. + ADE7880_AFWATTHR, // 0xE403 R 32 32 S 0x00000000 Phase A fundamental active energy accumulation. + ADE7880_BFWATTHR, // 0xE404 R 32 32 S 0x00000000 Phase B fundamental active energy accumulation. + ADE7880_CFWATTHR, // 0xE405 R 32 32 S 0x00000000 Phase C fundamental active energy accumulation. + ADE7880_AFVARHR = 0xE409, // 0xE409 R 32 32 S 0x00000000 Phase A fundamental reactive energy accumulation. + ADE7880_BFVARHR, // 0xE40A R 32 32 S 0x00000000 Phase B fundamental reactive energy accumulation. + ADE7880_CFVARHR, // 0xE40B R 32 32 S 0x00000000 Phase C fundamental reactive energy accumulation. + ADE7880_AVAHR, // 0xE40C R 32 32 S 0x00000000 Phase A apparent energy accumulation. + ADE7880_BVAHR, // 0xE40D R 32 32 S 0x00000000 Phase B apparent energy accumulation. + ADE7880_CVAHR // 0xE40E R 32 32 S 0x00000000 Phase C apparent energy accumulation. }; enum Ade7880PowerQualityRegisters { @@ -105,8 +172,10 @@ enum Ade7880PowerQualityRegisters { ADE7880_CFCYC, // 0xE705 R/W 8 8 U 0x01 Number of CF pulses between two consecutive energy latches. See the Synchronizing Energy Registers with CFx Outputs section. ADE7880_HSDC_CFG, // 0xE706 R/W 8 8 U 0x00 HSDC configuration register. See Table 52. ADE7880_Version, // 0xE707 R 8 8 U Version of die. - ADE7880_Reserved = 0xE7E4, // 0xE7E4 R 8 8 U 0x08 This register must remain at this value for checksum functionality to work. If this register shows a different value while being read, reset the chip before working with the checksum feature. + ADE7880_DSPWP_SET = 0xE7E3, // 0xE7E3 W 8 8 U 0x00 Write protect DSP (0x80) or enable write (0x00). See page 40. + ADE7880_Reserved, // 0xE7E4 R 8 8 U 0x08 This register must remain at this value for checksum functionality to work. If this register shows a different value while being read, reset the chip before working with the checksum feature. ADE7880_LAST_RWDATA8 = 0xE7FD, // 0xE7FD R 8 8 U N/A Contains the data from the last successful 8-bit register communication. + ADE7880_DSPWP_SEL, // 0xE7FE W 8 8 U 0xAD Select DSP writeprotect. See page 40. ADE7880_FVRMS = 0xE880, // 0xE880 R 24 32 S N/A The rms value of the fundamental component of the phase voltage. ADE7880_FIRMS, // 0xE881 R 24 32 S N/A The rms value of the fundamental component of the phase current ADE7880_FWATT, // 0xE882 R 24 32 S N/A The active power of the fundamental component. @@ -164,9 +233,15 @@ enum Ade7880PowerQualityRegisters { }; struct Ade7880 { - uint32_t current_rms[4] = { 0, 0, 0, 0 }; - + int32_t nirms; + int32_t isum; + int32_t active_energy[3]; + int32_t apparent_energy[3]; + uint16_t angle[3]; + uint8_t cycle_count; + uint8_t irq0_state; + uint8_t irq1_state; } Ade7880; int Ade7880RegSize(uint16_t reg) { @@ -200,16 +275,30 @@ void Ade7880Write(uint16_t reg, uint32_t val) { Wire.write((reg >> 8) & 0xFF); Wire.write(reg & 0xFF); while (size--) { - Wire.write((val >> (8 * size)) & 0xFF); // Write data, MSB first + Wire.write((val >> (8 * size)) & 0xFF); // Write data, MSB first } Wire.endTransmission(); - delayMicroseconds(5); // Bus-free time minimum 4.7us + delayMicroseconds(5); // Bus-free time minimum 4.7us } } +bool Ade7880VerifyWrite(uint16_t reg) { + if (0xCA != Ade7880Read(ADE7880_LAST_OP)) { // Indicates the type, read (0x35) or write (0xCA), of the last successful read/write operation. + return false; + } + if (reg != Ade7880Read(ADE7880_LAST_ADD)) { // The address of the register successfully accessed during the last read/write operation. + return false; + } + return true; +} + +bool Ade7880WriteVerify(uint16_t reg, uint32_t val) { + Ade7880Write(reg, val); + return Ade7880VerifyWrite(reg); +} + int32_t Ade7880Read(uint16_t reg) { uint32_t response = 0; - int size = Ade7880RegSize(reg); if (size) { Wire.beginTransmission(ADE7880_ADDR); @@ -219,15 +308,151 @@ int32_t Ade7880Read(uint16_t reg) { Wire.requestFrom(ADE7880_ADDR, size); if (size <= Wire.available()) { for (uint32_t i = 0; i < size; i++) { - response = response << 8 | Wire.read(); // receive DATA (MSB first) + response = response << 8 | Wire.read(); // receive DATA (MSB first) } } } return response; } +int32_t Ade7880ReadVerify(uint16_t reg) { + int32_t result = Ade7880Read(reg); + if (0x35 != Ade7880Read(ADE7880_LAST_OP)) { // Indicates the type, read (0x35) or write (0xCA), of the last successful read/write operation. + + } + if (reg != Ade7880Read(ADE7880_LAST_ADD)) { // The address of the register successfully accessed during the last read/write operation. + + } + return result; +} + +void Ade7880Init(void) { + // Init sequence about 100mS after reset - See page 40 (takes about 60ms) + uint32_t status1 = Ade7880ReadVerify(ADE7880_STATUS1); // 0x01A08000 + if (bitSet(status1, 15)) { // RSTDONE + // Power on or Reset + Ade7880WriteVerify(ADE7880_CONFIG2, 0x02); // ADE7880_I2C_LOCK + Ade7880WriteVerify(ADE7880_STATUS1, 0x3FFE8930); // Acknowledge RSTDONE + status1 = Ade7880ReadVerify(ADE7880_STATUS1); // 0x01A00007 + + uint8_t version = Ade7880ReadVerify(ADE7880_Version); // 0x01 + } + + delayMicroseconds(240); + + Ade7880WriteVerify(ADE7880_Gain, 0x0000); // Gain register set to 1 for current, and voltage + Ade7880WriteVerify(ADE7880_APGAIN, ADE7880_APGAIN_INIT); + Ade7880WriteVerify(ADE7880_BPGAIN, ADE7880_BPGAIN_INIT); + Ade7880WriteVerify(ADE7880_CPGAIN, ADE7880_CPGAIN_INIT); + Ade7880WriteVerify(ADE7880_AVGAIN, ADE7880_AVGAIN_INIT); + Ade7880WriteVerify(ADE7880_BVGAIN, ADE7880_BVGAIN_INIT); + Ade7880WriteVerify(ADE7880_CVGAIN, ADE7880_CVGAIN_INIT); + Ade7880WriteVerify(ADE7880_AIGAIN, ADE7880_AIGAIN_INIT); + Ade7880WriteVerify(ADE7880_BIGAIN, ADE7880_BIGAIN_INIT); + Ade7880WriteVerify(ADE7880_CIGAIN, ADE7880_CIGAIN_INIT); + Ade7880WriteVerify(ADE7880_NIGAIN, ADE7880_NIGAIN_INIT); + Ade7880WriteVerify(ADE7880_APHCAL, ADE7880_APHCAL_INIT); + Ade7880WriteVerify(ADE7880_BPHCAL, ADE7880_BPHCAL_INIT); + Ade7880WriteVerify(ADE7880_CPHCAL, ADE7880_CPHCAL_INIT); + if (ADE7880_AVGAIN_INIT != Ade7880ReadVerify(ADE7880_AVGAIN)) { + Ade7880WriteVerify(ADE7880_AVGAIN, ADE7880_AVGAIN_INIT); + } + if (ADE7880_BVGAIN_INIT != Ade7880ReadVerify(ADE7880_BVGAIN)) { + Ade7880WriteVerify(ADE7880_BVGAIN, ADE7880_BVGAIN_INIT); + } + if (ADE7880_CVGAIN_INIT != Ade7880ReadVerify(ADE7880_CVGAIN)) { + Ade7880WriteVerify(ADE7880_CVGAIN, ADE7880_CVGAIN_INIT); + } + if (ADE7880_AIGAIN_INIT != Ade7880ReadVerify(ADE7880_AIGAIN)) { + Ade7880WriteVerify(ADE7880_AIGAIN, ADE7880_AIGAIN_INIT); + } + if (ADE7880_BIGAIN_INIT != Ade7880ReadVerify(ADE7880_BIGAIN)) { + Ade7880WriteVerify(ADE7880_BIGAIN, ADE7880_BIGAIN_INIT); + } + if (ADE7880_CIGAIN_INIT != Ade7880ReadVerify(ADE7880_CIGAIN)) { + Ade7880WriteVerify(ADE7880_CIGAIN, ADE7880_CIGAIN_INIT); + } + if (ADE7880_NIGAIN_INIT != Ade7880ReadVerify(ADE7880_NIGAIN)) { + Ade7880WriteVerify(ADE7880_NIGAIN, ADE7880_NIGAIN_INIT); + } + if (ADE7880_APGAIN_INIT != Ade7880ReadVerify(ADE7880_APGAIN)) { + Ade7880WriteVerify(ADE7880_APGAIN, ADE7880_APGAIN_INIT); + } + if (ADE7880_BPGAIN_INIT != Ade7880ReadVerify(ADE7880_BPGAIN)) { + Ade7880WriteVerify(ADE7880_BPGAIN, ADE7880_BPGAIN_INIT); + } + if (ADE7880_CPGAIN_INIT != Ade7880ReadVerify(ADE7880_CPGAIN)) { + Ade7880WriteVerify(ADE7880_CPGAIN, ADE7880_CPGAIN_INIT); + } + if (ADE7880_APHCAL_INIT != Ade7880ReadVerify(ADE7880_APHCAL)) { + Ade7880WriteVerify(ADE7880_APHCAL, ADE7880_APHCAL_INIT); + } + if (ADE7880_BPHCAL_INIT != Ade7880ReadVerify(ADE7880_BPHCAL)) { + Ade7880WriteVerify(ADE7880_BPHCAL, ADE7880_BPHCAL_INIT); + } + if (ADE7880_CPHCAL_INIT != Ade7880ReadVerify(ADE7880_CPHCAL)) { + Ade7880WriteVerify(ADE7880_CPHCAL, ADE7880_CPHCAL_INIT); + } + + Ade7880WriteVerify(ADE7880_LCYCMODE, 0x09); + Ade7880WriteVerify(ADE7880_LINECYC, 0x0064); + Ade7880WriteVerify(ADE7880_MASK0, 0x00000020); // IRQ0 at end of an integration over an integer number of half line cycles set in the LINECYC register. + Ade7880VerifyWrite(ADE7880_MASK0); + Ade7880Write(ADE7880_MASK0, 0x00000020); + Ade7880Write(ADE7880_MASK0, 0x00000020); + Ade7880Write(ADE7880_MASK0, 0x00000020); + + Ade7880Write(ADE7880_DSPWP_SEL, 0xAD); // Select DSP write protection + Ade7880Write(ADE7880_DSPWP_SET, 0x80); // Write protect DSP area + + Ade7880WriteVerify(ADE7880_Run, 0x0201); // Start DSP +} + +void Ade7880Cycle(void) { + // Cycle sequence (takes 5ms) + uint32_t status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0x000FEFE0 + if (!bitSet(status0, 5)) { // LENERGY + return; + } else { + Ade7880WriteVerify(ADE7880_STATUS0, 0x00000020); // Acknowledge LENERGY + status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0x000FEFC0 + } + if (Ade7880.cycle_count < 3) { + Ade7880.cycle_count++; + return; // Skip first two cycles + } + // Incandescent light bulb, 242V, 0.11A, Pf100%, 27.9W + Energy.voltage[0] = (float)Ade7880ReadVerify(ADE7880_AVRMS) / 10000; // 0x0024CC94 = 241.1668 V + Energy.current[0] = (float)Ade7880ReadVerify(ADE7880_AIRMS) / 1000000; // 0x00002D6D = 0.011629 A + Energy.voltage[1] = (float)Ade7880ReadVerify(ADE7880_BVRMS) / 10000; // 0x000003E8 + Energy.current[1] = (float)Ade7880ReadVerify(ADE7880_BIRMS) / 1000000; // 0x0000053C = 0.001340 A + Energy.voltage[2] = (float)Ade7880ReadVerify(ADE7880_CVRMS) / 10000; // 0x0000037D + Energy.current[2] = (float)Ade7880ReadVerify(ADE7880_CIRMS) / 1000000; // 0x00000547 = 0.001351 A + Ade7880.nirms = Ade7880ReadVerify(ADE7880_NIRMS); // 0x000026DF = 0.009951 A ?? + Ade7880.isum = Ade7880ReadVerify(ADE7880_ISUM); // 0x00000FBE = 0.004030 A ?? + Energy.active_power[0] = (float)Ade7880ReadVerify(ADE7880_AWATT) / 100; // 0xFFFFF524 = -27.79 W (reverse connected) + Energy.active_power[1] = (float)Ade7880ReadVerify(ADE7880_BWATT) / 100; // 0x00000000 + Energy.active_power[2] = (float)Ade7880ReadVerify(ADE7880_CWATT) / 100; // 0x00000000 + Energy.apparent_power[0] = (float)Ade7880ReadVerify(ADE7880_AVA) / 100; // 0xFFFFF50D + Energy.apparent_power[1] = (float)Ade7880ReadVerify(ADE7880_BVA) / 100; // 0xFFFFFFFF + Energy.apparent_power[2] = (float)Ade7880ReadVerify(ADE7880_CVA) / 100; // 0xFFFFFFFF + // Billable + Ade7880.active_energy[0] = Ade7880ReadVerify(ADE7880_AWATTHR); // 0xFFFFFF8F = -1.12 Whr ?? + Ade7880.active_energy[1] = Ade7880ReadVerify(ADE7880_BWATTHR); // 0x00000000 + Ade7880.active_energy[2] = Ade7880ReadVerify(ADE7880_CWATTHR); // 0x00000000 + Ade7880.apparent_energy[0] = Ade7880ReadVerify(ADE7880_AVAHR); // 0xFFFFFB9C = -11.23 VAr ?? + Ade7880.apparent_energy[1] = Ade7880ReadVerify(ADE7880_BVAHR); // 0xFFFFFFC7 + Ade7880.apparent_energy[2] = Ade7880ReadVerify(ADE7880_CVAHR); // 0xFFFFFFC6 + + uint16_t comp_mode = Ade7880ReadVerify(ADE7880_COMPMODE); // 0x01FF + + Ade7880.angle[0] = Ade7880ReadVerify(ADE7880_ANGLE0); // 0x13FD + Ade7880.angle[1] = Ade7880ReadVerify(ADE7880_ANGLE1); // 0x0706 + Ade7880.angle[2] = Ade7880ReadVerify(ADE7880_ANGLE2); // 0x0859 +} + void Ade7880Reset(void) { - pinMode(16, OUTPUT); // Reset pin ADE7880 + pinMode(16, OUTPUT); // Reset pin ADE7880 digitalWrite(16, 0); delay(1); digitalWrite(16, 1); @@ -235,28 +460,33 @@ void Ade7880Reset(void) { } void Ade7880Isr0(void) { - // Init sequence about 100mS after reset - uint32_t status1 = Ade7880Read(ADE7880_STATUS1); // 0x01A08000 - - uint32_t last_op = Ade7880Read(ADE7880_LAST_OP); // 0x35 - Read - uint32_t last_address = Ade7880Read(ADE7880_LAST_ADD); // ADE7880_STATUS1 - - Ade7880Write(ADE7880_CONFIG2, 0x02); // ADE7880_I2C_LOCK - -// Ade7953Write(0x102, 0x0004); // Locking the communication interface (Clear bit COMM_LOCK), Enable HPF -// Ade7953Write(0x0FE, 0x00AD); // Unlock register 0x120 -// Ade7953Write(0x120, 0x0030); // Configure optimum setting + // Poll sequence + if (!Ade7880.irq0_state) { Ade7880.irq0_state = 1; } +} +void Ade7880Service0(void) { + // Poll sequence + Ade7880Cycle(); + Ade7880.irq0_state = 0; } void Ade7880Isr1(void) { - // Poll sequence - + // Init sequence + if (!Ade7880.irq1_state) { Ade7880.irq1_state = 1; } +} +void Ade7880Service1(void) { + // Init sequence + Ade7880Init(); + Ade7880.irq1_state = 0; } void Ade7880EnergyEverySecond(void) { - + for (uint32_t i = 0; i < 3; i++) { + if (Ade7880.active_energy[i] != 0) { + Energy.kWhtoday_delta[i] += Energy.active_power[i] * 1000 / 36; + } + } } void Ade7880DrvInit(void) { @@ -269,19 +499,25 @@ void Ade7880DrvInit(void) { Ade7880Reset(); - delay(200); // Need 200mS to init ADE7880 - if (I2cSetDevice(ADE7880_ADDR)) { - I2cSetActiveFound(ADE7880_ADDR, "ADE7880"); - Energy.phase_count = 3; // Three phases -// Energy.use_overtemp = true; // Use global temperature for overtemp detection + uint32_t timeout = millis() + 400; + while (!TimeReached(timeout)) { // Wait up to 400 mSec + if (1 == Ade7880.irq0_state) { + Ade7880Service1(); - TasmotaGlobal.energy_driver = XNRG_23; + if (I2cSetDevice(ADE7880_ADDR)) { + I2cSetActiveFound(ADE7880_ADDR, "ADE7880"); + Energy.phase_count = 3; // Three phases +// Energy.use_overtemp = true; // Use global temperature for overtemp detection + TasmotaGlobal.energy_driver = XNRG_23; + } + break; + } } } } bool Ade7880Command(void) { - // Will need calibration for all three phases + // Investigate for need calibration of all three phases bool serviced = true; @@ -293,11 +529,15 @@ bool Ade7880Command(void) { \*********************************************************************************************/ bool Xnrg23(uint8_t function) { - if (!I2cEnabled(XI2C_07)) { return false; } + if (!I2cEnabled(XI2C_65)) { return false; } bool result = false; switch (function) { + case FUNC_LOOP: + if (1 == Ade7880.irq0_state) { Ade7880Service0(); } + if (1 == Ade7880.irq1_state) { Ade7880Service1(); } + break; case FUNC_ENERGY_EVERY_SECOND: Ade7880EnergyEverySecond(); break; From d4386392e8e630ac6c2b51c9536bad95193743e9 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 6 Mar 2022 17:36:10 +0100 Subject: [PATCH 163/355] Fix Ade7880 ISR not in IRAM --- tasmota/xnrg_23_ade7880.ino | 101 +++++++++++++++++------------------- 1 file changed, 47 insertions(+), 54 deletions(-) diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index 837e6d82a..83a021bf7 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -326,7 +326,7 @@ int32_t Ade7880ReadVerify(uint16_t reg) { return result; } -void Ade7880Init(void) { +bool Ade7880Init(void) { // Init sequence about 100mS after reset - See page 40 (takes about 60ms) uint32_t status1 = Ade7880ReadVerify(ADE7880_STATUS1); // 0x01A08000 if (bitSet(status1, 15)) { // RSTDONE @@ -354,50 +354,41 @@ void Ade7880Init(void) { Ade7880WriteVerify(ADE7880_APHCAL, ADE7880_APHCAL_INIT); Ade7880WriteVerify(ADE7880_BPHCAL, ADE7880_BPHCAL_INIT); Ade7880WriteVerify(ADE7880_CPHCAL, ADE7880_CPHCAL_INIT); - if (ADE7880_AVGAIN_INIT != Ade7880ReadVerify(ADE7880_AVGAIN)) { - Ade7880WriteVerify(ADE7880_AVGAIN, ADE7880_AVGAIN_INIT); + bool error = false; + if (ADE7880_AVGAIN_INIT != Ade7880ReadVerify(ADE7880_AVGAIN)) { error = true; } + if (ADE7880_BVGAIN_INIT != Ade7880ReadVerify(ADE7880_BVGAIN)) { error = true; } + if (ADE7880_CVGAIN_INIT != Ade7880ReadVerify(ADE7880_CVGAIN)) { error = true; } + if (ADE7880_AIGAIN_INIT != Ade7880ReadVerify(ADE7880_AIGAIN)) { error = true; } + if (ADE7880_BIGAIN_INIT != Ade7880ReadVerify(ADE7880_BIGAIN)) { error = true; } + if (ADE7880_CIGAIN_INIT != Ade7880ReadVerify(ADE7880_CIGAIN)) { error = true; } + if (ADE7880_NIGAIN_INIT != Ade7880ReadVerify(ADE7880_NIGAIN)) { error = true; } + if (ADE7880_APGAIN_INIT != Ade7880ReadVerify(ADE7880_APGAIN)) { error = true; } + if (ADE7880_BPGAIN_INIT != Ade7880ReadVerify(ADE7880_BPGAIN)) { error = true; } + if (ADE7880_CPGAIN_INIT != Ade7880ReadVerify(ADE7880_CPGAIN)) { error = true; } + if (ADE7880_APHCAL_INIT != Ade7880ReadVerify(ADE7880_APHCAL)) { error = true; } + if (ADE7880_BPHCAL_INIT != Ade7880ReadVerify(ADE7880_BPHCAL)) { error = true; } + if (ADE7880_CPHCAL_INIT != Ade7880ReadVerify(ADE7880_CPHCAL)) { error = true; } + if (error) { + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error initializing parameters")); + return false; } - if (ADE7880_BVGAIN_INIT != Ade7880ReadVerify(ADE7880_BVGAIN)) { - Ade7880WriteVerify(ADE7880_BVGAIN, ADE7880_BVGAIN_INIT); - } - if (ADE7880_CVGAIN_INIT != Ade7880ReadVerify(ADE7880_CVGAIN)) { - Ade7880WriteVerify(ADE7880_CVGAIN, ADE7880_CVGAIN_INIT); - } - if (ADE7880_AIGAIN_INIT != Ade7880ReadVerify(ADE7880_AIGAIN)) { - Ade7880WriteVerify(ADE7880_AIGAIN, ADE7880_AIGAIN_INIT); - } - if (ADE7880_BIGAIN_INIT != Ade7880ReadVerify(ADE7880_BIGAIN)) { - Ade7880WriteVerify(ADE7880_BIGAIN, ADE7880_BIGAIN_INIT); - } - if (ADE7880_CIGAIN_INIT != Ade7880ReadVerify(ADE7880_CIGAIN)) { - Ade7880WriteVerify(ADE7880_CIGAIN, ADE7880_CIGAIN_INIT); - } - if (ADE7880_NIGAIN_INIT != Ade7880ReadVerify(ADE7880_NIGAIN)) { - Ade7880WriteVerify(ADE7880_NIGAIN, ADE7880_NIGAIN_INIT); - } - if (ADE7880_APGAIN_INIT != Ade7880ReadVerify(ADE7880_APGAIN)) { - Ade7880WriteVerify(ADE7880_APGAIN, ADE7880_APGAIN_INIT); - } - if (ADE7880_BPGAIN_INIT != Ade7880ReadVerify(ADE7880_BPGAIN)) { - Ade7880WriteVerify(ADE7880_BPGAIN, ADE7880_BPGAIN_INIT); - } - if (ADE7880_CPGAIN_INIT != Ade7880ReadVerify(ADE7880_CPGAIN)) { - Ade7880WriteVerify(ADE7880_CPGAIN, ADE7880_CPGAIN_INIT); - } - if (ADE7880_APHCAL_INIT != Ade7880ReadVerify(ADE7880_APHCAL)) { - Ade7880WriteVerify(ADE7880_APHCAL, ADE7880_APHCAL_INIT); - } - if (ADE7880_BPHCAL_INIT != Ade7880ReadVerify(ADE7880_BPHCAL)) { - Ade7880WriteVerify(ADE7880_BPHCAL, ADE7880_BPHCAL_INIT); - } - if (ADE7880_CPHCAL_INIT != Ade7880ReadVerify(ADE7880_CPHCAL)) { - Ade7880WriteVerify(ADE7880_CPHCAL, ADE7880_CPHCAL_INIT); + if (!Ade7880WriteVerify(ADE7880_LCYCMODE, 0x09)) { // Line cycle accumulation mode + // - Watt-hour accumulation registers (AWATTHR, BWATTHR, CWATTHR, AFWATTHR, BFWATTHR, and CFWATTHR) are placed into line cycle accumulation mode. + // - Phase A is selected for zero-crossings counts in the line cycle accumulation mode. + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error setting LCYCMODE register")); + return false; + } + + if (!Ade7880WriteVerify(ADE7880_LINECYC, 0x0064)) { // = 100 + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error setting LINECYC register")); + return false; } - Ade7880WriteVerify(ADE7880_LCYCMODE, 0x09); - Ade7880WriteVerify(ADE7880_LINECYC, 0x0064); Ade7880WriteVerify(ADE7880_MASK0, 0x00000020); // IRQ0 at end of an integration over an integer number of half line cycles set in the LINECYC register. - Ade7880VerifyWrite(ADE7880_MASK0); + if (!Ade7880VerifyWrite(ADE7880_MASK0)) { + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error setting MASK0 register")); + return false; + } Ade7880Write(ADE7880_MASK0, 0x00000020); Ade7880Write(ADE7880_MASK0, 0x00000020); Ade7880Write(ADE7880_MASK0, 0x00000020); @@ -406,6 +397,7 @@ void Ade7880Init(void) { Ade7880Write(ADE7880_DSPWP_SET, 0x80); // Write protect DSP area Ade7880WriteVerify(ADE7880_Run, 0x0201); // Start DSP + return true; } void Ade7880Cycle(void) { @@ -459,7 +451,7 @@ void Ade7880Reset(void) { pinMode(16, INPUT); } -void Ade7880Isr0(void) { +void IRAM_ATTR Ade7880Isr0(void) { // Poll sequence if (!Ade7880.irq0_state) { Ade7880.irq0_state = 1; } } @@ -470,15 +462,16 @@ void Ade7880Service0(void) { Ade7880.irq0_state = 0; } -void Ade7880Isr1(void) { +void IRAM_ATTR Ade7880Isr1(void) { // Init sequence if (!Ade7880.irq1_state) { Ade7880.irq1_state = 1; } } -void Ade7880Service1(void) { +bool Ade7880Service1(void) { // Init sequence - Ade7880Init(); + bool result = Ade7880Init(); Ade7880.irq1_state = 0; + return result; } void Ade7880EnergyEverySecond(void) { @@ -501,14 +494,14 @@ void Ade7880DrvInit(void) { uint32_t timeout = millis() + 400; while (!TimeReached(timeout)) { // Wait up to 400 mSec - if (1 == Ade7880.irq0_state) { - Ade7880Service1(); - - if (I2cSetDevice(ADE7880_ADDR)) { - I2cSetActiveFound(ADE7880_ADDR, "ADE7880"); - Energy.phase_count = 3; // Three phases -// Energy.use_overtemp = true; // Use global temperature for overtemp detection - TasmotaGlobal.energy_driver = XNRG_23; + if (1 == Ade7880.irq1_state) { + if (Ade7880Service1()) { + if (I2cSetDevice(ADE7880_ADDR)) { + I2cSetActiveFound(ADE7880_ADDR, "ADE7880"); + Energy.phase_count = 3; // Three phases + // Energy.use_overtemp = true; // Use global temperature for overtemp detection + TasmotaGlobal.energy_driver = XNRG_23; + } } break; } @@ -536,7 +529,7 @@ bool Xnrg23(uint8_t function) { switch (function) { case FUNC_LOOP: if (1 == Ade7880.irq0_state) { Ade7880Service0(); } - if (1 == Ade7880.irq1_state) { Ade7880Service1(); } +// if (1 == Ade7880.irq1_state) { Ade7880Service1(); } break; case FUNC_ENERGY_EVERY_SECOND: Ade7880EnergyEverySecond(); From fa7fa51567c93ae1c5029eb194790dc0c0bea238 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Sun, 6 Mar 2022 18:30:12 +0100 Subject: [PATCH 164/355] fix PICO V3-02 UART WDTs --- platformio_tasmota32.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini index b7b0990ec..bbd26ac25 100644 --- a/platformio_tasmota32.ini +++ b/platformio_tasmota32.ini @@ -39,7 +39,7 @@ extra_scripts = pre:pio-tools/add_c_flags.py [core32] platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3.zip -platform_packages = +platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/709/framework-arduinoespressif32-v4.4_dev-bdacda661c.tar.gz build_unflags = ${esp32_defaults.build_unflags} build_flags = ${esp32_defaults.build_flags} From 8e0400eba13c164adc509b2cc21dd0d4fa2f7b5c Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Mon, 7 Mar 2022 11:37:48 +0100 Subject: [PATCH 165/355] Add async interrupt support - Add async interrupt support - Add generic GPIO reset --- tasmota/language/af_AF.h | 1 + tasmota/language/bg_BG.h | 1 + tasmota/language/cs_CZ.h | 1 + tasmota/language/de_DE.h | 1 + tasmota/language/el_GR.h | 1 + tasmota/language/en_GB.h | 5 +- tasmota/language/es_ES.h | 1 + tasmota/language/fr_FR.h | 1 + tasmota/language/fy_NL.h | 1 + tasmota/language/he_HE.h | 1 + tasmota/language/hu_HU.h | 1 + tasmota/language/it_IT.h | 1 + tasmota/language/ko_KO.h | 1 + tasmota/language/nl_NL.h | 1 + tasmota/language/pl_PL.h | 1 + tasmota/language/pt_BR.h | 1 + tasmota/language/pt_PT.h | 1 + tasmota/language/ro_RO.h | 1 + tasmota/language/ru_RU.h | 1 + tasmota/language/sk_SK.h | 1 + tasmota/language/sv_SE.h | 1 + tasmota/language/tr_TR.h | 1 + tasmota/language/uk_UA.h | 1 + tasmota/language/vi_VN.h | 1 + tasmota/language/zh_CN.h | 1 + tasmota/language/zh_TW.h | 1 + tasmota/support_tasmota.ino | 17 ++++++ tasmota/tasmota.ino | 5 +- tasmota/tasmota_template.h | 7 ++- tasmota/xnrg_23_ade7880.ino | 103 +++++++++++++++++++++--------------- 30 files changed, 113 insertions(+), 49 deletions(-) diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index b56aa4beb..09f891f72 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 82b70438d..75736d41d 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index a5a537298..6e1764174 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index e457f7507..30ffdf40e 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Herzschlag" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index fceb42bd8..ac6e65ae8 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index f9dc18b83..2ce63356d 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -848,9 +848,10 @@ #define D_SENSOR_HRG15_RX "HRG15 Rx" #define D_SENSOR_HRG15_TX "HRG15 Tx" #define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING" -#define D_SENSOR_BL6523_TX "BL6523 Tx" -#define D_SENSOR_BL6523_RX "BL6523 Rx" +#define D_SENSOR_BL6523_TX "BL6523 Tx" +#define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 804029e77..76c2af828 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index de929c48e..55f8acd43 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index e122e17ab..e63b292bd 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 329dfedf3..855a31aa2 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index e33c9cede..91c278ce4 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index f8f824c70..684c8e4b7 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 - TX" #define D_SENSOR_BL6523_RX "BL6523 - RX" #define D_SENSOR_HEARTBEAT "Battito cardiaco" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 - SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 - RCLK" #define D_GPIO_SHIFT595_OE "74x595 - OE" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index e9228e5f8..3238fda0e 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index f44ac2d51..93eec0a0c 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index f628977f4..f9df4d5da 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 196d27625..59756bfe1 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index e96ce05b3..e8b0e1797 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index b6a02c466..7cdd4243f 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index c0484512f..bd5f301d6 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 2457d312b..30123fd11 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 8b821b66d..727ec7a6d 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index d0fc1c40a..331ab84ce 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index ab5821eed..ac14f8b10 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index 3bf878c1a..b403d5ff4 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 2014b08e8..1f7e27e5a 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 0fc3c3b64..194f7d399 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -851,6 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 Tx" #define D_SENSOR_BL6523_RX "BL6523 Rx" #define D_SENSOR_HEARTBEAT "Heartbeat" +#define D_SENSOR_RESET "Reset" #define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino index 4b673c930..e358c66a7 100644 --- a/tasmota/support_tasmota.ino +++ b/tasmota/support_tasmota.ino @@ -921,6 +921,19 @@ void MqttPublishTeleperiodSensor(void) { } } +void SkipSleep(bool state) { + if (state) { + TasmotaGlobal.skip_sleep += 2; + } else { + if (TasmotaGlobal.skip_sleep) { + TasmotaGlobal.skip_sleep--; + } + if (TasmotaGlobal.skip_sleep) { + TasmotaGlobal.skip_sleep--; + } + } +} + /*********************************************************************************************\ * State loops \*********************************************************************************************/ @@ -1045,6 +1058,10 @@ void Every100mSeconds(void) if (!TasmotaGlobal.latching_relay_pulse) SetLatchingRelay(0, 0); } + if (TasmotaGlobal.skip_sleep) { + TasmotaGlobal.skip_sleep--; // Clean up possible residue + } + for (uint32_t i = 0; i < MAX_PULSETIMERS; i++) { if (TasmotaGlobal.pulse_timer[i] != 0L) { // Timer active? if (TimeReached(TasmotaGlobal.pulse_timer[i])) { // Timer finished? diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index e7c2fa2f7..f9233885d 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -175,6 +175,7 @@ struct TasmotaGlobal_t { uint8_t latching_relay_pulse; // Latching relay pulse timer uint8_t active_device; // Active device in ExecuteCommandPower uint8_t sleep; // Current copy of Settings->sleep + uint8_t skip_sleep; // Abandon sleep and allow loop uint8_t leds_present; // Max number of LED supported uint8_t led_inverted; // LED inverted flag (1 = (0 = On, 1 = Off)) uint8_t led_power; // LED power state @@ -514,7 +515,7 @@ void BacklogLoop(void) { void SleepDelay(uint32_t mseconds) { if (!TasmotaGlobal.backlog_nodelay && mseconds) { uint32_t wait = millis() + mseconds; - while (!TimeReached(wait) && !Serial.available()) { // We need to service serial buffer ASAP as otherwise we get uart buffer overrun + while (!TimeReached(wait) && !Serial.available() && !TasmotaGlobal.skip_sleep) { // We need to service serial buffer ASAP as otherwise we get uart buffer overrun delay(1); } } else { @@ -594,7 +595,7 @@ void loop(void) { uint32_t my_activity = millis() - my_sleep; - if (Settings->flag3.sleep_normal) { // SetOption60 - Enable normal sleep instead of dynamic sleep + if (Settings->flag3.sleep_normal) { // SetOption60 - Enable normal sleep instead of dynamic sleep // yield(); // yield == delay(0), delay contains yield, auto yield in loop SleepDelay(TasmotaGlobal.sleep); // https://github.com/esp8266/Arduino/issues/2021 } else { diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 490ff9bdf..5fa49fc4d 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -184,6 +184,7 @@ enum UserSelectablePins { GPIO_CM11_TXD, GPIO_CM11_RXD, // CM11 Serial interface GPIO_BL6523_TX, GPIO_BL6523_RX, // BL6523 based Watt meter Serial interface GPIO_ADE7880_IRQ, // ADE7880 IRQ + GPIO_RESET, // Generic reset GPIO_SENSOR_END }; enum ProgramSelectablePins { @@ -407,6 +408,7 @@ const char kSensorNames[] PROGMEM = D_SENSOR_CM11_TX "|" D_SENSOR_CM11_RX "|" D_SENSOR_BL6523_TX "|" D_SENSOR_BL6523_RX "|" D_SENSOR_ADE7880_IRQ "|" + D_SENSOR_RESET "|" ; const char kSensorNamesFixed[] PROGMEM = @@ -468,8 +470,9 @@ const uint16_t kGpioNiceList[] PROGMEM = { #endif AGPIO(GPIO_OUTPUT_HI), // Fixed output high AGPIO(GPIO_OUTPUT_LO), // Fixed output low - AGPIO(GPIO_HEARTBEAT), // Every second pulsed high - AGPIO(GPIO_HEARTBEAT_INV), // Every second pulsed low + AGPIO(GPIO_HEARTBEAT), // Every second pulsed high + AGPIO(GPIO_HEARTBEAT_INV), // Every second pulsed low + AGPIO(GPIO_RESET), // Generic reset #ifdef USE_FTC532 AGPIO(GPIO_FTC532), // FTC532 touch input #endif diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index 83a021bf7..56e7a5a22 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -12,7 +12,7 @@ /*********************************************************************************************\ * ADE7880 - Energy used in Shelly 3EM * - * {"NAME":"Shelly 3EM","GPIO":[1,1,544,1,32,8065,0,0,640,8064,608,224,0,0],"FLAG":0,"BASE":18} + * {"NAME":"Shelly 3EM","GPIO":[1,1,544,1,32,8065,0,0,640,8064,608,224,8096,0],"FLAG":0,"BASE":18} * * Based on datasheet from https://www.analog.com/en/products/ade7880.html * @@ -37,6 +37,7 @@ #define ADE7880_APHCAL_INIT 0xD895 // = 55445 (149) #define ADE7880_BPHCAL_INIT 0xD8A9 // = 55456 (169) #define ADE7880_CPHCAL_INIT 0xD89D // = 55453 (157) +//#define ADE7880_COMPMODE_FREQ 0x4000 // Connected to networks with fundamental frequencies between 55 Hz and 66 Hz. Default 45 Hz to 55 Hz enum Ade7880DspRegisters { ADE7880_AIGAIN = 0x4380, // 0x4380 R/W 24 32 ZPSE S 0x000000 Phase A current gain adjust. @@ -332,13 +333,13 @@ bool Ade7880Init(void) { if (bitSet(status1, 15)) { // RSTDONE // Power on or Reset Ade7880WriteVerify(ADE7880_CONFIG2, 0x02); // ADE7880_I2C_LOCK - Ade7880WriteVerify(ADE7880_STATUS1, 0x3FFE8930); // Acknowledge RSTDONE + Ade7880WriteVerify(ADE7880_STATUS1, 0x3FFE8930); // Acknowledge RSTDONE - Reset IRQ1 line status1 = Ade7880ReadVerify(ADE7880_STATUS1); // 0x01A00007 uint8_t version = Ade7880ReadVerify(ADE7880_Version); // 0x01 } - delayMicroseconds(240); + delayMicroseconds(240); // Grab parameters from flash/filesystem Ade7880WriteVerify(ADE7880_Gain, 0x0000); // Gain register set to 1 for current, and voltage Ade7880WriteVerify(ADE7880_APGAIN, ADE7880_APGAIN_INIT); @@ -354,20 +355,26 @@ bool Ade7880Init(void) { Ade7880WriteVerify(ADE7880_APHCAL, ADE7880_APHCAL_INIT); Ade7880WriteVerify(ADE7880_BPHCAL, ADE7880_BPHCAL_INIT); Ade7880WriteVerify(ADE7880_CPHCAL, ADE7880_CPHCAL_INIT); +#ifdef ADE7880_COMPMODE_FREQ + Ade7880WriteVerify(ADE7880_COMPMODE, 0x01FF | ADE7880_COMPMODE_FREQ); // Connected to networks with fundamental frequencies between 55 Hz and 66 Hz. Default is 45 Hz and 55 Hz. +#endif bool error = false; if (ADE7880_AVGAIN_INIT != Ade7880ReadVerify(ADE7880_AVGAIN)) { error = true; } - if (ADE7880_BVGAIN_INIT != Ade7880ReadVerify(ADE7880_BVGAIN)) { error = true; } - if (ADE7880_CVGAIN_INIT != Ade7880ReadVerify(ADE7880_CVGAIN)) { error = true; } - if (ADE7880_AIGAIN_INIT != Ade7880ReadVerify(ADE7880_AIGAIN)) { error = true; } - if (ADE7880_BIGAIN_INIT != Ade7880ReadVerify(ADE7880_BIGAIN)) { error = true; } - if (ADE7880_CIGAIN_INIT != Ade7880ReadVerify(ADE7880_CIGAIN)) { error = true; } - if (ADE7880_NIGAIN_INIT != Ade7880ReadVerify(ADE7880_NIGAIN)) { error = true; } - if (ADE7880_APGAIN_INIT != Ade7880ReadVerify(ADE7880_APGAIN)) { error = true; } - if (ADE7880_BPGAIN_INIT != Ade7880ReadVerify(ADE7880_BPGAIN)) { error = true; } - if (ADE7880_CPGAIN_INIT != Ade7880ReadVerify(ADE7880_CPGAIN)) { error = true; } - if (ADE7880_APHCAL_INIT != Ade7880ReadVerify(ADE7880_APHCAL)) { error = true; } - if (ADE7880_BPHCAL_INIT != Ade7880ReadVerify(ADE7880_BPHCAL)) { error = true; } - if (ADE7880_CPHCAL_INIT != Ade7880ReadVerify(ADE7880_CPHCAL)) { error = true; } + else if (ADE7880_BVGAIN_INIT != Ade7880ReadVerify(ADE7880_BVGAIN)) { error = true; } + else if (ADE7880_CVGAIN_INIT != Ade7880ReadVerify(ADE7880_CVGAIN)) { error = true; } + else if (ADE7880_AIGAIN_INIT != Ade7880ReadVerify(ADE7880_AIGAIN)) { error = true; } + else if (ADE7880_BIGAIN_INIT != Ade7880ReadVerify(ADE7880_BIGAIN)) { error = true; } + else if (ADE7880_CIGAIN_INIT != Ade7880ReadVerify(ADE7880_CIGAIN)) { error = true; } + else if (ADE7880_NIGAIN_INIT != Ade7880ReadVerify(ADE7880_NIGAIN)) { error = true; } + else if (ADE7880_APGAIN_INIT != Ade7880ReadVerify(ADE7880_APGAIN)) { error = true; } + else if (ADE7880_BPGAIN_INIT != Ade7880ReadVerify(ADE7880_BPGAIN)) { error = true; } + else if (ADE7880_CPGAIN_INIT != Ade7880ReadVerify(ADE7880_CPGAIN)) { error = true; } + else if (ADE7880_APHCAL_INIT != Ade7880ReadVerify(ADE7880_APHCAL)) { error = true; } + else if (ADE7880_BPHCAL_INIT != Ade7880ReadVerify(ADE7880_BPHCAL)) { error = true; } + else if (ADE7880_CPHCAL_INIT != Ade7880ReadVerify(ADE7880_CPHCAL)) { error = true; } +#ifdef ADE7880_COMPMODE_FREQ + else if ((0x01FF | ADE7880_COMPMODE_FREQ) != Ade7880ReadVerify(ADE7880_COMPMODE)) { error = true; } +#endif if (error) { AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error initializing parameters")); return false; @@ -400,16 +407,32 @@ bool Ade7880Init(void) { return true; } +bool Ade7880Service1(void) { + // Init sequence + SkipSleep(false); + bool result = Ade7880Init(); + Ade7880.irq1_state = 0; + return result; +} + +void IRAM_ATTR Ade7880Isr1(void) { + // Init sequence + if (!Ade7880.irq1_state) { + Ade7880.irq1_state = 1; + SkipSleep(true); + } +} + void Ade7880Cycle(void) { // Cycle sequence (takes 5ms) uint32_t status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0x000FEFE0 if (!bitSet(status0, 5)) { // LENERGY return; } else { - Ade7880WriteVerify(ADE7880_STATUS0, 0x00000020); // Acknowledge LENERGY + Ade7880WriteVerify(ADE7880_STATUS0, 0x00000020); // Acknowledge LENERGY - Reset IRQ0 line status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0x000FEFC0 } - if (Ade7880.cycle_count < 3) { + if (Ade7880.cycle_count < 2) { // Allow calibration stabilization Ade7880.cycle_count++; return; // Skip first two cycles } @@ -436,42 +459,30 @@ void Ade7880Cycle(void) { Ade7880.apparent_energy[1] = Ade7880ReadVerify(ADE7880_BVAHR); // 0xFFFFFFC7 Ade7880.apparent_energy[2] = Ade7880ReadVerify(ADE7880_CVAHR); // 0xFFFFFFC6 - uint16_t comp_mode = Ade7880ReadVerify(ADE7880_COMPMODE); // 0x01FF - - Ade7880.angle[0] = Ade7880ReadVerify(ADE7880_ANGLE0); // 0x13FD + uint16_t comp_mode = Ade7880ReadVerify(ADE7880_COMPMODE); // 0x01FF (or 0x41FF) = Angles between phase voltages and phase currents are measured + uint32_t fline = (bitSet(comp_mode, 14)) ? 60 : 50; // Line frequency in Hz + Ade7880.angle[0] = Ade7880ReadVerify(ADE7880_ANGLE0); // 0x13FD = cos(5117 * 360 * fline / 256000) = cos_phi Ade7880.angle[1] = Ade7880ReadVerify(ADE7880_ANGLE1); // 0x0706 Ade7880.angle[2] = Ade7880ReadVerify(ADE7880_ANGLE2); // 0x0859 -} -void Ade7880Reset(void) { - pinMode(16, OUTPUT); // Reset pin ADE7880 - digitalWrite(16, 0); - delay(1); - digitalWrite(16, 1); - pinMode(16, INPUT); -} - -void IRAM_ATTR Ade7880Isr0(void) { - // Poll sequence - if (!Ade7880.irq0_state) { Ade7880.irq0_state = 1; } + Energy.frequency[0] = 256000.0f / Ade7880ReadVerify(ADE7880_APERIOD); // Page 34 and based on ADE7880_COMPMODE_FREQ + Energy.frequency[1] = 256000.0f / Ade7880ReadVerify(ADE7880_BPERIOD); + Energy.frequency[2] = 256000.0f / Ade7880ReadVerify(ADE7880_CPERIOD); } void Ade7880Service0(void) { // Poll sequence + SkipSleep(false); Ade7880Cycle(); Ade7880.irq0_state = 0; } -void IRAM_ATTR Ade7880Isr1(void) { - // Init sequence - if (!Ade7880.irq1_state) { Ade7880.irq1_state = 1; } -} - -bool Ade7880Service1(void) { - // Init sequence - bool result = Ade7880Init(); - Ade7880.irq1_state = 0; - return result; +void IRAM_ATTR Ade7880Isr0(void) { + // Poll sequence + if (!Ade7880.irq0_state) { + Ade7880.irq0_state = 1; + SkipSleep(true); + } } void Ade7880EnergyEverySecond(void) { @@ -490,7 +501,13 @@ void Ade7880DrvInit(void) { pinMode(Pin(GPIO_ADE7880_IRQ, 1), INPUT); attachInterrupt(Pin(GPIO_ADE7880_IRQ, 1), Ade7880Isr1, FALLING); - Ade7880Reset(); + int reset = Pin(GPIO_RESET); + if (-1 == reset) { reset = 16; } // Reset pin ADE7880 in Shelly 3EM + pinMode(reset, OUTPUT); + digitalWrite(reset, 0); + delay(1); + digitalWrite(reset, 1); + pinMode(reset, INPUT); uint32_t timeout = millis() + 400; while (!TimeReached(timeout)) { // Wait up to 400 mSec From 400df1feb034069764b6496c1f950c0f71ea4ef8 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Mon, 7 Mar 2022 18:08:52 +0100 Subject: [PATCH 166/355] Working POC ADE7880 Shelly 3EM Needs more tuning --- tasmota/xnrg_23_ade7880.ino | 67 +++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 25 deletions(-) diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index 56e7a5a22..8b0ee358e 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -24,6 +24,8 @@ #define ADE7880_ADDR 0x38 +//#define ADE7880_DEBUG + #define ADE7880_APGAIN_INIT 0xFF14B7E3 // = -15419420 #define ADE7880_BPGAIN_INIT 0xFF14A7B1 // = -15423566 #define ADE7880_CPGAIN_INIT 0xFF14999C // = -15427171 @@ -240,6 +242,7 @@ struct Ade7880 { int32_t apparent_energy[3]; uint16_t angle[3]; + uint8_t init_state; uint8_t cycle_count; uint8_t irq0_state; uint8_t irq1_state; @@ -272,6 +275,11 @@ int Ade7880RegSize(uint16_t reg) { void Ade7880Write(uint16_t reg, uint32_t val) { int size = Ade7880RegSize(reg); if (size) { +#ifdef ADE7880_DEBUG + char log_format[100]; + snprintf_P(log_format, sizeof(log_format), PSTR("A78: Rd 0x%%04X 0x%%0%dX (%%d)"), size << 1); + AddLog(LOG_LEVEL_DEBUG_MORE, log_format, reg, val, val); +#endif // ADE7880_DEBUG Wire.beginTransmission(ADE7880_ADDR); Wire.write((reg >> 8) & 0xFF); Wire.write(reg & 0xFF); @@ -312,6 +320,11 @@ int32_t Ade7880Read(uint16_t reg) { response = response << 8 | Wire.read(); // receive DATA (MSB first) } } +#ifdef ADE7880_DEBUG + char log_format[100]; + snprintf_P(log_format, sizeof(log_format), PSTR("A78: Rd 0x%%04X 0x%%0%dX (%%d)"), size << 1); + AddLog(LOG_LEVEL_DEBUG_MORE, log_format, reg, response, response); +#endif // ADE7880_DEBUG } return response; } @@ -330,14 +343,15 @@ int32_t Ade7880ReadVerify(uint16_t reg) { bool Ade7880Init(void) { // Init sequence about 100mS after reset - See page 40 (takes about 60ms) uint32_t status1 = Ade7880ReadVerify(ADE7880_STATUS1); // 0x01A08000 - if (bitSet(status1, 15)) { // RSTDONE + if (bitRead(status1, 15)) { // RSTDONE // Power on or Reset Ade7880WriteVerify(ADE7880_CONFIG2, 0x02); // ADE7880_I2C_LOCK Ade7880WriteVerify(ADE7880_STATUS1, 0x3FFE8930); // Acknowledge RSTDONE - Reset IRQ1 line status1 = Ade7880ReadVerify(ADE7880_STATUS1); // 0x01A00007 - - uint8_t version = Ade7880ReadVerify(ADE7880_Version); // 0x01 + } else { + return false; } + uint8_t version = Ade7880ReadVerify(ADE7880_Version); // 0x01 delayMicroseconds(240); // Grab parameters from flash/filesystem @@ -359,21 +373,21 @@ bool Ade7880Init(void) { Ade7880WriteVerify(ADE7880_COMPMODE, 0x01FF | ADE7880_COMPMODE_FREQ); // Connected to networks with fundamental frequencies between 55 Hz and 66 Hz. Default is 45 Hz and 55 Hz. #endif bool error = false; - if (ADE7880_AVGAIN_INIT != Ade7880ReadVerify(ADE7880_AVGAIN)) { error = true; } - else if (ADE7880_BVGAIN_INIT != Ade7880ReadVerify(ADE7880_BVGAIN)) { error = true; } - else if (ADE7880_CVGAIN_INIT != Ade7880ReadVerify(ADE7880_CVGAIN)) { error = true; } - else if (ADE7880_AIGAIN_INIT != Ade7880ReadVerify(ADE7880_AIGAIN)) { error = true; } - else if (ADE7880_BIGAIN_INIT != Ade7880ReadVerify(ADE7880_BIGAIN)) { error = true; } - else if (ADE7880_CIGAIN_INIT != Ade7880ReadVerify(ADE7880_CIGAIN)) { error = true; } - else if (ADE7880_NIGAIN_INIT != Ade7880ReadVerify(ADE7880_NIGAIN)) { error = true; } - else if (ADE7880_APGAIN_INIT != Ade7880ReadVerify(ADE7880_APGAIN)) { error = true; } - else if (ADE7880_BPGAIN_INIT != Ade7880ReadVerify(ADE7880_BPGAIN)) { error = true; } - else if (ADE7880_CPGAIN_INIT != Ade7880ReadVerify(ADE7880_CPGAIN)) { error = true; } - else if (ADE7880_APHCAL_INIT != Ade7880ReadVerify(ADE7880_APHCAL)) { error = true; } - else if (ADE7880_BPHCAL_INIT != Ade7880ReadVerify(ADE7880_BPHCAL)) { error = true; } - else if (ADE7880_CPHCAL_INIT != Ade7880ReadVerify(ADE7880_CPHCAL)) { error = true; } + if (Ade7880ReadVerify(ADE7880_AVGAIN) != (ADE7880_AVGAIN_INIT & 0x0FFFFFFF)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_BVGAIN) != (ADE7880_BVGAIN_INIT & 0x0FFFFFFF)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_CVGAIN) != (ADE7880_CVGAIN_INIT & 0x0FFFFFFF)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_AIGAIN) != ADE7880_AIGAIN_INIT) { error = true; } + else if (Ade7880ReadVerify(ADE7880_BIGAIN) != ADE7880_BIGAIN_INIT) { error = true; } + else if (Ade7880ReadVerify(ADE7880_CIGAIN) != ADE7880_CIGAIN_INIT) { error = true; } + else if (Ade7880ReadVerify(ADE7880_NIGAIN) != ADE7880_NIGAIN_INIT) { error = true; } + else if (Ade7880ReadVerify(ADE7880_APGAIN) != (ADE7880_APGAIN_INIT & 0x0FFFFFFF)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_BPGAIN) != (ADE7880_BPGAIN_INIT & 0x0FFFFFFF)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_CPGAIN) != (ADE7880_CPGAIN_INIT & 0x0FFFFFFF)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_APHCAL) != (ADE7880_APHCAL_INIT & 0x00FF)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_BPHCAL) != (ADE7880_BPHCAL_INIT & 0x00FF)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_CPHCAL) != (ADE7880_CPHCAL_INIT & 0x00FF)) { error = true; } #ifdef ADE7880_COMPMODE_FREQ - else if ((0x01FF | ADE7880_COMPMODE_FREQ) != Ade7880ReadVerify(ADE7880_COMPMODE)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_COMPMODE) != (0x01FF | ADE7880_COMPMODE_FREQ)) { error = true; } #endif if (error) { AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error initializing parameters")); @@ -426,7 +440,7 @@ void IRAM_ATTR Ade7880Isr1(void) { void Ade7880Cycle(void) { // Cycle sequence (takes 5ms) uint32_t status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0x000FEFE0 - if (!bitSet(status0, 5)) { // LENERGY + if (!bitRead(status0, 5)) { // LENERGY return; } else { Ade7880WriteVerify(ADE7880_STATUS0, 0x00000020); // Acknowledge LENERGY - Reset IRQ0 line @@ -460,7 +474,7 @@ void Ade7880Cycle(void) { Ade7880.apparent_energy[2] = Ade7880ReadVerify(ADE7880_CVAHR); // 0xFFFFFFC6 uint16_t comp_mode = Ade7880ReadVerify(ADE7880_COMPMODE); // 0x01FF (or 0x41FF) = Angles between phase voltages and phase currents are measured - uint32_t fline = (bitSet(comp_mode, 14)) ? 60 : 50; // Line frequency in Hz + uint32_t fline = (bitRead(comp_mode, 14)) ? 60 : 50; // Line frequency in Hz Ade7880.angle[0] = Ade7880ReadVerify(ADE7880_ANGLE0); // 0x13FD = cos(5117 * 360 * fline / 256000) = cos_phi Ade7880.angle[1] = Ade7880ReadVerify(ADE7880_ANGLE1); // 0x0706 Ade7880.angle[2] = Ade7880ReadVerify(ADE7880_ANGLE2); // 0x0859 @@ -495,11 +509,6 @@ void Ade7880EnergyEverySecond(void) { void Ade7880DrvInit(void) { if (PinUsed(GPIO_ADE7880_IRQ) && PinUsed(GPIO_ADE7880_IRQ, 1)) { - pinMode(Pin(GPIO_ADE7880_IRQ), INPUT); - attachInterrupt(Pin(GPIO_ADE7880_IRQ), Ade7880Isr0, FALLING); - - pinMode(Pin(GPIO_ADE7880_IRQ, 1), INPUT); - attachInterrupt(Pin(GPIO_ADE7880_IRQ, 1), Ade7880Isr1, FALLING); int reset = Pin(GPIO_RESET); if (-1 == reset) { reset = 16; } // Reset pin ADE7880 in Shelly 3EM @@ -509,6 +518,13 @@ void Ade7880DrvInit(void) { digitalWrite(reset, 1); pinMode(reset, INPUT); + pinMode(Pin(GPIO_ADE7880_IRQ), INPUT); + attachInterrupt(Pin(GPIO_ADE7880_IRQ), Ade7880Isr0, FALLING); + Ade7880.irq0_state = 0; + pinMode(Pin(GPIO_ADE7880_IRQ, 1), INPUT); + attachInterrupt(Pin(GPIO_ADE7880_IRQ, 1), Ade7880Isr1, FALLING); + Ade7880.irq1_state = 0; + uint32_t timeout = millis() + 400; while (!TimeReached(timeout)) { // Wait up to 400 mSec if (1 == Ade7880.irq1_state) { @@ -516,7 +532,8 @@ void Ade7880DrvInit(void) { if (I2cSetDevice(ADE7880_ADDR)) { I2cSetActiveFound(ADE7880_ADDR, "ADE7880"); Energy.phase_count = 3; // Three phases - // Energy.use_overtemp = true; // Use global temperature for overtemp detection +// Settings->flag5.energy_phase = 1; // SetOption129 - (Energy) Show phase information +// Energy.use_overtemp = true; // Use global temperature for overtemp detection TasmotaGlobal.energy_driver = XNRG_23; } } From 91752fb26539161f5ef034553d8f36659dba640c Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Tue, 8 Mar 2022 09:17:26 +0100 Subject: [PATCH 167/355] Add peace banner --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 97339b00c..8c2be6bfd 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,12 @@ _Written for PlatformIO with limited support for Arduino IDE._ [![Chat](https://img.shields.io/discord/479389167382691863.svg)](https://discord.gg/Ks2Kzd4) [![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/arendst/Tasmota) +
+ +**In light of current events we like to support the people behind _PlatformIO Project_, especially Ivan Kravets, and wish them the strength to help stop the war. See [platformio-is-ukrainian-project-please-help-us-stop-the-war](https://community.platformio.org/t/platformio-is-ukrainian-project-please-help-us-stop-the-war/26330) for what you can do.** + +
+ If you like **Tasmota**, give it a star, or fork it and contribute! [![GitHub stars](https://img.shields.io/github/stars/arendst/Tasmota.svg?style=social&label=Star)](https://github.com/arendst/Tasmota/stargazers) @@ -38,7 +44,7 @@ Note that there is a chance, as with any upgrade, that the device may not functi ## Disclaimer -:warning: **DANGER OF ELECTROCUTION** :warning: +st:warning: **DANGER OF ELECTROCUTION** :warning: If your device connects to mains electricity (AC power) there is danger of electrocution if not installed properly. If you don't know how to install it, please call an electrician (***Beware:*** certain countries prohibit installation without a licensed electrician present). Remember: _**SAFETY FIRST**_. It is not worth the risk to yourself, your family and your home if you don't know exactly what you are doing. Never tinker or try to flash a device using the serial programming interface while it is connected to MAINS ELECTRICITY (AC power). From 278b9dfe23438b52126a1ff6f9cfab0db52d1281 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Tue, 8 Mar 2022 10:31:31 +0100 Subject: [PATCH 168/355] Add comments about calib.dat --- tasmota/xnrg_23_ade7880.ino | 130 +++++++++++++++++++++++++++++++++--- 1 file changed, 120 insertions(+), 10 deletions(-) diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index 8b0ee358e..d21439661 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -24,22 +24,103 @@ #define ADE7880_ADDR 0x38 -//#define ADE7880_DEBUG +//#define ADE7880_COMPMODE_FREQ 0x4000 // Connected to networks with fundamental frequencies between 55 Hz and 66 Hz. Default 45 Hz to 55 Hz -#define ADE7880_APGAIN_INIT 0xFF14B7E3 // = -15419420 -#define ADE7880_BPGAIN_INIT 0xFF14A7B1 // = -15423566 -#define ADE7880_CPGAIN_INIT 0xFF14999C // = -15427171 -#define ADE7880_AVGAIN_INIT 0xFFF43977 // = -771720 -#define ADE7880_BVGAIN_INIT 0xFFF4DD00 // = -729855 -#define ADE7880_CVGAIN_INIT 0xFFF4A306 // = -744697 +/*********************************************************************************************/ + +//#define ADE7880_DEBUG +//#define ADE7880_PROFILING + +/* +Derive these parameters from the original Shelly 3EM 4M firmware dump. Look for JSON file called calib.data +{ + "state": 0, + "rms": { + "current_a": 3166385, + "current_b": 3125691, + "current_c": 3131983, + "current_n": -1474892307, + "current_s": 1756557, + "voltage_a": -767262, + "voltage_b": -763439, + "voltage_c": -749854 + }, + "angles": { + "angle0": 180, + "angle1": 176, + "angle2": 176 + }, + "powers": { + "totactive": { + "a": -1345820, + "b": -1347328, + "c": -1351979 + }, + "apparent": { + "a": 214966, + "b": 214961, + "c": 214949 + } + }, + "energies": { + "totactive": { + "a": 8752, + "b": 8751, + "c": 8751 + }, + "apparent": { + "a": 40496, + "b": 40513, + "c": 40524 + } + } +} +*/ +#define ADE7880_AIGAIN_INIT 3166385 // rms, current_a +#define ADE7880_BIGAIN_INIT 3125691 // rms, current_b +#define ADE7880_CIGAIN_INIT 3131983 // rms, current_c +#define ADE7880_NIGAIN_INIT 1756557 // rms, current_s !! +#define ADE7880_AVGAIN_INIT -767262 // rms, voltage_a +#define ADE7880_BVGAIN_INIT -763439 // rms, voltage_b +#define ADE7880_CVGAIN_INIT -749854 // rms, voltage_c +#define ADE7880_APHCAL_INIT 180 // angles, angle0 +#define ADE7880_BPHCAL_INIT 176 // angles, angle1 +#define ADE7880_CPHCAL_INIT 176 // angles, angle2 +#define ADE7880_APGAIN_INIT -1345820 // powers, totactive, a +#define ADE7880_BPGAIN_INIT -1347328 // powers, totactive, b +#define ADE7880_CPGAIN_INIT -1351979 // powers, totactive, c + +/* +// Original defines from logic analyzer #define ADE7880_AIGAIN_INIT 0x002FFED1 // = 3145425 #define ADE7880_BIGAIN_INIT 0x00309661 // = 3184225 #define ADE7880_CIGAIN_INIT 0x0030DBFD // = 3202045 #define ADE7880_NIGAIN_INIT 0x04D906AC // = 81331884 (14223020) +#define ADE7880_AVGAIN_INIT 0xFFF43977 // = -771720 +#define ADE7880_BVGAIN_INIT 0xFFF4DD00 // = -729855 +#define ADE7880_CVGAIN_INIT 0xFFF4A306 // = -744697 #define ADE7880_APHCAL_INIT 0xD895 // = 55445 (149) #define ADE7880_BPHCAL_INIT 0xD8A9 // = 55456 (169) #define ADE7880_CPHCAL_INIT 0xD89D // = 55453 (157) -//#define ADE7880_COMPMODE_FREQ 0x4000 // Connected to networks with fundamental frequencies between 55 Hz and 66 Hz. Default 45 Hz to 55 Hz +#define ADE7880_APGAIN_INIT 0xFF14B7E3 // = -15419420 +#define ADE7880_BPGAIN_INIT 0xFF14A7B1 // = -15423566 +#define ADE7880_CPGAIN_INIT 0xFF14999C // = -15427171 +*/ +/* +#define ADE7880_AIGAIN_INIT 3145425 +#define ADE7880_BIGAIN_INIT 3184225 +#define ADE7880_CIGAIN_INIT 3202045 +#define ADE7880_NIGAIN_INIT 14223020 +#define ADE7880_AVGAIN_INIT -771720 +#define ADE7880_BVGAIN_INIT -729855 +#define ADE7880_CVGAIN_INIT -744697 +#define ADE7880_APHCAL_INIT 149 +#define ADE7880_BPHCAL_INIT 169 +#define ADE7880_CPHCAL_INIT 157 +#define ADE7880_APGAIN_INIT -15419420 +#define ADE7880_BPGAIN_INIT -15423566 +#define ADE7880_CPGAIN_INIT -15427171 +*/ enum Ade7880DspRegisters { ADE7880_AIGAIN = 0x4380, // 0x4380 R/W 24 32 ZPSE S 0x000000 Phase A current gain adjust. @@ -248,6 +329,8 @@ struct Ade7880 { uint8_t irq1_state; } Ade7880; +/*********************************************************************************************/ + int Ade7880RegSize(uint16_t reg) { int size = 0; switch ((reg >> 8) & 0x0F) { @@ -340,8 +423,13 @@ int32_t Ade7880ReadVerify(uint16_t reg) { return result; } +/*********************************************************************************************/ + bool Ade7880Init(void) { - // Init sequence about 100mS after reset - See page 40 (takes about 60ms) + // Init sequence about 100mS after reset - See page 40 (takes 68ms) +#ifdef ADE7880_PROFILING + uint32_t start = millis(); +#endif // ADE7880_PROFILING uint32_t status1 = Ade7880ReadVerify(ADE7880_STATUS1); // 0x01A08000 if (bitRead(status1, 15)) { // RSTDONE // Power on or Reset @@ -418,6 +506,9 @@ bool Ade7880Init(void) { Ade7880Write(ADE7880_DSPWP_SET, 0x80); // Write protect DSP area Ade7880WriteVerify(ADE7880_Run, 0x0201); // Start DSP +#ifdef ADE7880_PROFILING + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Init done in %d ms"), millis() - start); +#endif // ADE7880_PROFILING return true; } @@ -437,8 +528,13 @@ void IRAM_ATTR Ade7880Isr1(void) { } } +/*********************************************************************************************/ + void Ade7880Cycle(void) { - // Cycle sequence (takes 5ms) + // Cycle sequence (takes 55ms) +#ifdef ADE7880_PROFILING + uint32_t start = millis(); +#endif // ADE7880_PROFILING uint32_t status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0x000FEFE0 if (!bitRead(status0, 5)) { // LENERGY return; @@ -482,6 +578,9 @@ void Ade7880Cycle(void) { Energy.frequency[0] = 256000.0f / Ade7880ReadVerify(ADE7880_APERIOD); // Page 34 and based on ADE7880_COMPMODE_FREQ Energy.frequency[1] = 256000.0f / Ade7880ReadVerify(ADE7880_BPERIOD); Energy.frequency[2] = 256000.0f / Ade7880ReadVerify(ADE7880_CPERIOD); +#ifdef ADE7880_PROFILING + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Cycle in %d ms"), millis() - start); +#endif // ADE7880_PROFILING } void Ade7880Service0(void) { @@ -499,6 +598,8 @@ void IRAM_ATTR Ade7880Isr0(void) { } } +/*********************************************************************************************/ + void Ade7880EnergyEverySecond(void) { for (uint32_t i = 0; i < 3; i++) { if (Ade7880.active_energy[i] != 0) { @@ -510,6 +611,10 @@ void Ade7880EnergyEverySecond(void) { void Ade7880DrvInit(void) { if (PinUsed(GPIO_ADE7880_IRQ) && PinUsed(GPIO_ADE7880_IRQ, 1)) { +#ifdef ADE7880_PROFILING + uint32_t start = millis(); +#endif // ADE7880_PROFILING + int reset = Pin(GPIO_RESET); if (-1 == reset) { reset = 16; } // Reset pin ADE7880 in Shelly 3EM pinMode(reset, OUTPUT); @@ -528,6 +633,11 @@ void Ade7880DrvInit(void) { uint32_t timeout = millis() + 400; while (!TimeReached(timeout)) { // Wait up to 400 mSec if (1 == Ade7880.irq1_state) { + +#ifdef ADE7880_PROFILING + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Reset in %d ms"), millis() - start); +#endif // ADE7880_PROFILING + if (Ade7880Service1()) { if (I2cSetDevice(ADE7880_ADDR)) { I2cSetActiveFound(ADE7880_ADDR, "ADE7880"); From 2569124337bf42297f1f043c2206b7d3ffedb574 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Tue, 8 Mar 2022 11:10:13 +0100 Subject: [PATCH 169/355] add esp8266 4M build --- platformio_tasmota_env.ini | 3 +++ 1 file changed, 3 insertions(+) diff --git a/platformio_tasmota_env.ini b/platformio_tasmota_env.ini index 68d4b17e4..e84fe8d25 100644 --- a/platformio_tasmota_env.ini +++ b/platformio_tasmota_env.ini @@ -34,6 +34,9 @@ lib_ignore = [env:tasmota] +[env:tasmota4M] +board = esp8266_4M2M + [env:tasmota-minimal] build_flags = ${env.build_flags} -DFIRMWARE_MINIMAL lib_extra_dirs = From 2cfdaaf2c6b961bbb854bb7240affd8f8cb8b371 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Tue, 8 Mar 2022 11:12:13 +0100 Subject: [PATCH 170/355] tasmota4M --- .github/workflows/build_all_the_things.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_all_the_things.yml b/.github/workflows/build_all_the_things.yml index f11f44eb2..9259cdf50 100644 --- a/.github/workflows/build_all_the_things.yml +++ b/.github/workflows/build_all_the_things.yml @@ -24,6 +24,7 @@ jobs: matrix: variant: - tasmota + - tasmota4M - tasmota-display - tasmota-ir - tasmota-knx From 037ab5626a1604f5a9cd16ce2b3277bc80544d12 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Tue, 8 Mar 2022 11:12:48 +0100 Subject: [PATCH 171/355] tasmota4M --- .github/workflows/Tasmota_build_devel.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/Tasmota_build_devel.yml b/.github/workflows/Tasmota_build_devel.yml index 511e322b7..c609f358d 100644 --- a/.github/workflows/Tasmota_build_devel.yml +++ b/.github/workflows/Tasmota_build_devel.yml @@ -22,6 +22,7 @@ jobs: matrix: variant: - tasmota + - tasmota4M - tasmota-minimal - tasmota-display - tasmota-ir From d663ad97b87267470be83d1d0e6842c7459c560b Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Tue, 8 Mar 2022 11:13:22 +0100 Subject: [PATCH 172/355] tasmota4M --- .github/workflows/Tasmota_build_master.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/Tasmota_build_master.yml b/.github/workflows/Tasmota_build_master.yml index 6d29cb7c9..1fc5d50a9 100644 --- a/.github/workflows/Tasmota_build_master.yml +++ b/.github/workflows/Tasmota_build_master.yml @@ -21,6 +21,7 @@ jobs: matrix: variant: - tasmota + - tasmota4M - tasmota-minimal - tasmota-display - tasmota-ir From 011feb7e67cf424a87a4373b7ca38f20a0b6bd9e Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Tue, 8 Mar 2022 13:20:07 +0100 Subject: [PATCH 173/355] LVGL add support for lv_timer --- lib/libesp32/berry/generate/be_const_strtab.h | 3 + .../berry/generate/be_const_strtab_def.h | 2241 +++++++++-------- .../lv_berry/generate/be_lv_c_mapping.h | 44 +- .../lv_berry/generate/be_lvgl_module.c | 5 + .../lv_berry/generate/be_lvgl_widgets_lib.c | 36 + lib/libesp32_lvgl/lv_berry/mapping/lv_funcs.h | 16 + .../lv_berry/src/be_lvgl_glob_lib.c | 889 ++++--- .../lv_berry/src/embedded/lvgl_glob.be | 21 + lib/libesp32_lvgl/lv_berry/tools/convert.py | 26 +- .../lv_berry/tools/preprocessor.py | 1 + 10 files changed, 1752 insertions(+), 1530 deletions(-) diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h index 6afa9f5aa..d043f9f1a 100644 --- a/lib/libesp32/berry/generate/be_const_strtab.h +++ b/lib/libesp32/berry/generate/be_const_strtab.h @@ -572,11 +572,13 @@ extern const bcstring be_const_str_lv_point_arr; extern const bcstring be_const_str_lv_signal_arcs; extern const bcstring be_const_str_lv_signal_bars; extern const bcstring be_const_str_lv_solidified; +extern const bcstring be_const_str_lv_timer_cb; extern const bcstring be_const_str_lv_wifi_arcs; extern const bcstring be_const_str_lv_wifi_arcs_icon; extern const bcstring be_const_str_lv_wifi_bars; extern const bcstring be_const_str_lv_wifi_bars_icon; extern const bcstring be_const_str_lvgl_event_dispatch; +extern const bcstring be_const_str_lvgl_timer_dispatch; extern const bcstring be_const_str_make_cb; extern const bcstring be_const_str_manuf; extern const bcstring be_const_str_map; @@ -824,6 +826,7 @@ extern const bcstring be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X extern const bcstring be_const_str_time_dump; extern const bcstring be_const_str_time_reached; extern const bcstring be_const_str_time_str; +extern const bcstring be_const_str_timer_cb; extern const bcstring be_const_str_to_gamma; extern const bcstring be_const_str_tob64; extern const bcstring be_const_str_tolower; diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h index 5803f2223..b494c7c3a 100644 --- a/lib/libesp32/berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/berry/generate/be_const_strtab_def.h @@ -1,829 +1,832 @@ be_define_const_str(, "", 2166136261u, 0, 0, NULL); -be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_keys); -be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_hour); -be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, NULL); -be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_battery_present); -be_define_const_str(_X22, "\"", 655135397u, 0, 1, NULL); -be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_collect); -be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_clear_to); -be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20); -be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str__X2Ep2); -be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_attrdump); -be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str__X2502d_X25s_X2502d); -be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_set_style_line_color); -be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_next_cron); -be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_map); -be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_set_time); -be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_INTERNAL_PDM); -be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str__debug_present); -be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, NULL); -be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_event_send); -be_define_const_str(_X2B, "+", 772578730u, 0, 1, NULL); -be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_SERIAL_8N1); -be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_before_del); -be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_last_modified); -be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_display); -be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_char); -be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_id); -be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_SERIAL_5N1); -be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_seg7_font); -be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_a); -be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_ctor); -be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_set_style_img_recolor); -be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, NULL); -be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E); -be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str_rounded); -be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_run_bat); -be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_SERIAL_8N2); -be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27); -be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_run_cron); -be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str__read); -be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_log10); -be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_AudioGeneratorMP3); -be_define_const_str(_X3A, ":", 1057798253u, 0, 1, NULL); -be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_SERIAL_8O2); -be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_set_style_text_font); -be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, NULL); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_to_gamma); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_tan); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_screenshot); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_OPTION_A); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_print); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_imax); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_counters); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_from_to); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_AXP192); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_ins_goto); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_enabled); +be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_r); +be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_SERIAL_6N1); +be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str_GET); +be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_lv_obj_class); +be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str_AudioFileSourceFS); +be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, NULL); +be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E); +be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_set_power); +be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E); +be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_discover); +be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str__X2F_X3Frst_X3D); +be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str__X2Etapp); +be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_dim); +be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_Tele); +be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B); +be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_set_rate); +be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str__global_def); +be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str__X7B); +be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_page_autoconf_ctl); +be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E); +be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_file); +be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20); +be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, NULL); +be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_get_vbus_voltage); +be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27); +be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str__read); +be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str__X2Elen); +be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, NULL); +be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, NULL); +be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_EVENT_DELETE); +be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_obj); +be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function); +be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str__X3Clambda_X3E); +be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str__X3E_X3D); +be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_lv_); +be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_assign_rmt); +be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_persist); +be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_CFG_X3A_X20loading_X20); +be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str__X3F); +be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_o); +be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_back_forth); +be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_display); +be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_arg_size); +be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_issubclass); +be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, &be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_add_fast_loop); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_OpusDecoder); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_get_log); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_set_style_radius); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, NULL); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_write_gpio); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_ALIGN_LEFT_MID); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_WS2812_GRB); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, NULL); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_HTTP_GET); be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, NULL); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_check_not_method); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_delete_all_configs); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str__rmt); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "", 4247924536u, 0, 19, &be_const_str_AudioOutput); +be_define_const_str(_X3D, "=", 940354920u, 0, 1, &be_const_str_remove_cmd); +be_define_const_str(_X3D_X3C_X3E_X21, "=<>!", 2664470277u, 0, 4, &be_const_str___upper__); +be_define_const_str(_X3D_X3D, "==", 2431966415u, 0, 2, &be_const_str_has_X20already_X20an_X20event_X20callback); +be_define_const_str(_X3E, ">", 990687777u, 0, 1, NULL); +be_define_const_str(_X3E_X3D, ">=", 284975636u, 0, 2, &be_const_str_lv_event); +be_define_const_str(_X3F, "?", 973910158u, 0, 1, &be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem); be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, NULL); -be_define_const_str(ALIGN_BOTTOM_MID, "ALIGN_BOTTOM_MID", 3933267889u, 0, 16, NULL); -be_define_const_str(ALIGN_LEFT_MID, "ALIGN_LEFT_MID", 1043035067u, 0, 14, &be_const_str___upper__); -be_define_const_str(AXP192, "AXP192", 757230128u, 0, 6, &be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem); -be_define_const_str(Animate_X20pc_X20is_X20out_X20of_X20range, "Animate pc is out of range", 1854929421u, 0, 26, &be_const_str_SK6812_GRBW); +be_define_const_str(ALIGN_BOTTOM_MID, "ALIGN_BOTTOM_MID", 3933267889u, 0, 16, &be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback); +be_define_const_str(ALIGN_LEFT_MID, "ALIGN_LEFT_MID", 1043035067u, 0, 14, &be_const_str_dimmer); +be_define_const_str(AXP192, "AXP192", 757230128u, 0, 6, &be_const_str_timer_cb); +be_define_const_str(Animate_X20pc_X20is_X20out_X20of_X20range, "Animate pc is out of range", 1854929421u, 0, 26, NULL); be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, NULL); -be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, NULL); -be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str_begin); -be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function); -be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_elements_X20must_X20be_X20a_X20lv_point); -be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, NULL); -be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_SERIAL_5O2); -be_define_const_str(Auto_X2Dconfiguration, "Auto-configuration", 1665006109u, 0, 18, &be_const_str_draw_arc_dsc); -be_define_const_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, "BRY: ERROR, bad json: ", 2715135809u, 0, 22, &be_const_str_tasmota_log_reader); -be_define_const_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: Exception> '%s' - %s", 2246990964u, 0, 25, &be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27); -be_define_const_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function, "BRY: argument must be a function", 3917068408u, 0, 32, &be_const_str__timers); -be_define_const_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, "BRY: could not save compiled file %s (%s)", 736659787u, 0, 41, &be_const_str_list_handlers); -be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, "BRY: failed to load _persist.json", 2991913445u, 0, 33, NULL); -be_define_const_str(BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, "BRY: invalid hue payload: ", 203709367u, 0, 26, &be_const_str_DIMMER); -be_define_const_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, "BRY: method not allowed, use a closure like '/ args -> obj.func(args)'", 177121572u, 0, 70, &be_const_str_add_anim); -be_define_const_str(BUTTON_CONFIGURATION, "BUTTON_CONFIGURATION", 70820856u, 0, 20, NULL); -be_define_const_str(CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, "CFG: 'init.bat' done, restarting", 1569670677u, 0, 32, &be_const_str_EXTERNAL_I2S); -be_define_const_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "CFG: Exception> '%s' - %s", 1228874553u, 0, 25, &be_const_str_percentage); -be_define_const_str(CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, "CFG: No '*.autoconf' file found", 755798501u, 0, 31, &be_const_str_widget_destructor); -be_define_const_str(CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, "CFG: could not run %s (%s - %s)", 1428829580u, 0, 31, &be_const_str_EVENT_DRAW_PART_BEGIN); -be_define_const_str(CFG_X3A_X20downloading_X20_X27_X25s_X27, "CFG: downloading '%s'", 589480701u, 0, 21, &be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27); -be_define_const_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, "CFG: exception '%s' - '%s'", 4095407913u, 0, 26, &be_const_str_log); -be_define_const_str(CFG_X3A_X20loaded_X20_X20, "CFG: loaded ", 3710273538u, 0, 13, &be_const_str_EVENT_DRAW_MAIN); -be_define_const_str(CFG_X3A_X20loaded_X20_X27_X25s_X27, "CFG: loaded '%s'", 1699028828u, 0, 16, &be_const_str_code); -be_define_const_str(CFG_X3A_X20loading_X20, "CFG: loading ", 4010361503u, 0, 13, &be_const_str_SERIAL_6E2); -be_define_const_str(CFG_X3A_X20loading_X20_X27_X25s_X27, "CFG: loading '%s'", 2285306097u, 0, 17, &be_const_str_list); -be_define_const_str(CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, "CFG: multiple autoconf files found, aborting ('%s' + '%s')", 197663371u, 0, 58, &be_const_str_Leds); -be_define_const_str(CFG_X3A_X20ran_X20_X20, "CFG: ran ", 3579570472u, 0, 10, NULL); -be_define_const_str(CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, "CFG: removed file '%s'", 2048602473u, 0, 22, &be_const_str_dim); -be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str_classof); -be_define_const_str(CFG_X3A_X20removing_X20first_X20time_X20marker, "CFG: removing first time marker", 2125556683u, 0, 31, &be_const_str_send); -be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_asstring); -be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str__X5B); -be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); -be_define_const_str(COLOR_BLACK, "COLOR_BLACK", 264427940u, 0, 11, &be_const_str_button_pressed); -be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, &be_const_str_OneWire); -be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str_SERIAL_6E1); -be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, &be_const_str_tcpclient); -be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, NULL); -be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str_cmd); -be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, NULL); -be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, &be_const_str_on); -be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str_SERIAL_6N2); -be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, &be_const_str_get_style_bg_color); -be_define_const_str(False, "False", 2541049336u, 0, 5, NULL); -be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_gamma10); -be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, &be_const_str_detect); -be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, &be_const_str_save); -be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, &be_const_str_RGBCT); -be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_fast_loop); -be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str_issubclass); -be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_success); -be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, NULL); -be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str_valuer_error); -be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, NULL); -be_define_const_str(MAX_RMT, "MAX_RMT", 1615574873u, 0, 7, &be_const_str_try_rule); -be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, NULL); -be_define_const_str(None, "None", 810547195u, 0, 4, &be_const_str_create_segment); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_number); -be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str___lower__); -be_define_const_str(OpusDecoder, "OpusDecoder", 3618742074u, 0, 11, &be_const_str_back_forth); -be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, NULL); -be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_set); -be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_lv_point_arr); -be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, NULL); -be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str_set_user_data); -be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, &be_const_str_every_50ms); -be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_dump); -be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf); -be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_add_driver); -be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, NULL); -be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_dac_voltage); -be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, NULL); -be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_display_X2Eini); -be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_reverse); -be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str__end_transmission); -be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_allocated); -be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); -be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_SERIAL_8E2); -be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_SERIAL_8E1); -be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str__ptr); -be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, NULL); -be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_lv_coord_arr); -be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_udp); -be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_o); -be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, NULL); +be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str_deg); +be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str_every_100ms); +be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_lv_point); +be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_color); +be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, &be_const_str_SERIAL_7E2); +be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_shared_key); +be_define_const_str(Auto_X2Dconfiguration, "Auto-configuration", 1665006109u, 0, 18, &be_const_str_add_event_cb); +be_define_const_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, "BRY: ERROR, bad json: ", 2715135809u, 0, 22, &be_const_str_atan2); +be_define_const_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: Exception> '%s' - %s", 2246990964u, 0, 25, &be_const_str_wifi_arcs); +be_define_const_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function, "BRY: argument must be a function", 3917068408u, 0, 32, &be_const_str_RELAY); +be_define_const_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, "BRY: could not save compiled file %s (%s)", 736659787u, 0, 41, &be_const_str_draw_line_dsc); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, "BRY: failed to load _persist.json", 2991913445u, 0, 33, &be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s); +be_define_const_str(BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, "BRY: invalid hue payload: ", 203709367u, 0, 26, NULL); +be_define_const_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, "BRY: method not allowed, use a closure like '/ args -> obj.func(args)'", 177121572u, 0, 70, &be_const_str_nan); +be_define_const_str(BUTTON_CONFIGURATION, "BUTTON_CONFIGURATION", 70820856u, 0, 20, &be_const_str_find_key_i); +be_define_const_str(CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, "CFG: 'init.bat' done, restarting", 1569670677u, 0, 32, NULL); +be_define_const_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "CFG: Exception> '%s' - %s", 1228874553u, 0, 25, &be_const_str_hue); +be_define_const_str(CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, "CFG: No '*.autoconf' file found", 755798501u, 0, 31, NULL); +be_define_const_str(CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, "CFG: could not run %s (%s - %s)", 1428829580u, 0, 31, &be_const_str_add); +be_define_const_str(CFG_X3A_X20downloading_X20_X27_X25s_X27, "CFG: downloading '%s'", 589480701u, 0, 21, &be_const_str_add_cron); +be_define_const_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, "CFG: exception '%s' - '%s'", 4095407913u, 0, 26, &be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj); +be_define_const_str(CFG_X3A_X20loaded_X20_X20, "CFG: loaded ", 3710273538u, 0, 13, &be_const_str_full_state); +be_define_const_str(CFG_X3A_X20loaded_X20_X27_X25s_X27, "CFG: loaded '%s'", 1699028828u, 0, 16, &be_const_str__class); +be_define_const_str(CFG_X3A_X20loading_X20, "CFG: loading ", 4010361503u, 0, 13, &be_const_str_valuer_error); +be_define_const_str(CFG_X3A_X20loading_X20_X27_X25s_X27, "CFG: loading '%s'", 2285306097u, 0, 17, &be_const_str_internal_error); +be_define_const_str(CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, "CFG: multiple autoconf files found, aborting ('%s' + '%s')", 197663371u, 0, 58, &be_const_str_SERIAL_7E1); +be_define_const_str(CFG_X3A_X20ran_X20_X20, "CFG: ran ", 3579570472u, 0, 10, &be_const_str_wifi); +be_define_const_str(CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, "CFG: removed file '%s'", 2048602473u, 0, 22, &be_const_str_leds); +be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str__cmd); +be_define_const_str(CFG_X3A_X20removing_X20first_X20time_X20marker, "CFG: removing first time marker", 2125556683u, 0, 31, &be_const_str_content_stop); +be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_instance_size); +be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str_set_pwm); +be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str_model); +be_define_const_str(COLOR_BLACK, "COLOR_BLACK", 264427940u, 0, 11, &be_const_str_get_current_module_name); +be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, NULL); +be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str__X5D); +be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, &be_const_str_load); +be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_bus); +be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, NULL); +be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, &be_const_str_asstring); +be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, &be_const_str_null_cb); +be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str_isinstance); +be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, NULL); +be_define_const_str(False, "False", 2541049336u, 0, 5, &be_const_str_area); +be_define_const_str(GET, "GET", 2531704439u, 0, 3, NULL); +be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, &be_const_str_get_percentage); +be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, &be_const_str_debug); +be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, NULL); +be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_power_off); +be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str_init); +be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_param); +be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, &be_const_str_add_rule); +be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str__crons); +be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, &be_const_str_event_cb); +be_define_const_str(MAX_RMT, "MAX_RMT", 1615574873u, 0, 7, &be_const_str_RGBCT); +be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_write_file); +be_define_const_str(None, "None", 810547195u, 0, 4, NULL); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_decompress); +be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_scale_uint); +be_define_const_str(OpusDecoder, "OpusDecoder", 3618742074u, 0, 11, &be_const_str_RES_OK); +be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str_enabled); +be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_autoexec); +be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str__dirty); +be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, &be_const_str_exp); +be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str_TASMOTA); +be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, &be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, NULL); +be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, &be_const_str_font_seg7); +be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson); +be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str_floor); +be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_cb); +be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_encrypt); +be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_get_bat_power); +be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_get_warning_level); +be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str_pin_mode); +be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_int); +be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, NULL); +be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_trig); +be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_log10); +be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_cb_do_nothing); +be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_widget_destructor); +be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_SERIAL_7N2); +be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_format); +be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_create_custom_widget); +be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_begin_multicast); be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, NULL); -be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_get_alternate); -be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_page_autoconf_ctl); -be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_animators); +be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_item); +be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_global); +be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_lv); be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, NULL); -be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, NULL); -be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_p1); -be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_digital_write); -be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, &be_const_str_concat); -be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str_has_arg); -be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, &be_const_str_every_second); -be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, &be_const_str_json_fdump); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_add_header); -be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, &be_const_str_get_bat_power); -be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str_min); +be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_add_anim); +be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_button_pressed); +be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_SK6812_GRBW); +be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, &be_const_str_decode); +be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str_web_send_decimal); +be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, NULL); +be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, &be_const_str_set_huesat); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, NULL); +be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, &be_const_str_clock_icon); +be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str_reset_search); be_define_const_str(True, "True", 3453902341u, 0, 4, NULL); -be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, &be_const_str_argument_X20must_X20be_X20a_X20list); -be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, &be_const_str__buffer); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, NULL); -be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, &be_const_str_color); -be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str__begin_transmission); -be_define_const_str(_X5B, "[", 3725336506u, 0, 1, &be_const_str_decompress); -be_define_const_str(_X5D, "]", 3624670792u, 0, 1, &be_const_str_draw_arc); -be_define_const_str(_, "_", 3658226030u, 0, 1, &be_const_str_get_coords); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_signal_arcs); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_calldepth); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL); -be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, &be_const_str_lv_event); -be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, &be_const_str_cb); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_json_fdump_list); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_exp); -be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str__fl); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_get_option); -be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_arc_dsc); -be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_gpio); -be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_set_text); -be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, &be_const_str_get_bat_current); -be_define_const_str(_def, "_def", 1985022181u, 0, 4, NULL); -be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str__global_addr); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str__error); -be_define_const_str(_energy, "_energy", 535372070u, 0, 7, &be_const_str_set_huesat); -be_define_const_str(_error, "_error", 1132109656u, 0, 6, NULL); -be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, NULL); -be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_available); -be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, &be_const_str_lv_obj); +be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, NULL); +be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, &be_const_str_addr); +be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_height_def); +be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, &be_const_str_toptr); +be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str__); +be_define_const_str(_X5B, "[", 3725336506u, 0, 1, NULL); +be_define_const_str(_X5D, "]", 3624670792u, 0, 1, NULL); +be_define_const_str(_, "_", 3658226030u, 0, 1, &be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, NULL); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_value); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_upper); +be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, &be_const_str_set_alternate); +be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, &be_const_str_publish); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, NULL); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, NULL); +be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, NULL); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_millis); +be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_clear_to); +be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_ismethod); +be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_return); +be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, &be_const_str_every_second); +be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_input); +be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, NULL); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_widget_ctor_impl); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_code); +be_define_const_str(_energy, "_energy", 535372070u, 0, 7, &be_const_str_on); +be_define_const_str(_error, "_error", 1132109656u, 0, 6, &be_const_str_animate); +be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, &be_const_str_f); +be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_img); +be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, &be_const_str_pc_abs); be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, NULL); -be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_set_tasmota_logo); -be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_c); -be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_get_style_pad_right); -be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_signal_bars); -be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_height_def); -be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_add); -be_define_const_str(_rmt, "_rmt", 1094422685u, 0, 4, NULL); -be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_json_fdump_map); -be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, NULL); -be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_find); -be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, &be_const_str_exists); -be_define_const_str(_t, "_t", 1527481326u, 0, 2, &be_const_str_reverse_gamma10); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_widget_event_impl); -be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_set_exten); -be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_create_matrix); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_fromb64); -be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_deinit); -be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_every_100ms); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, NULL); -be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_bool); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_set_style_img_recolor_opa); -be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_cb_event_closure); -be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, &be_const_str_consume_stereo); -be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, NULL); +be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_get_battery_chargin_status); +be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_codedump); +be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_manuf); +be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_allocated); +be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); +be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_get_width); +be_define_const_str(_rmt, "_rmt", 1094422685u, 0, 4, &be_const_str_compress); +be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_content_start); +be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, &be_const_str_fromptr); +be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_show); +be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, NULL); +be_define_const_str(_t, "_t", 1527481326u, 0, 2, NULL); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_connected); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_arch); +be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_battery_present); +be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_day); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_get_object_from_ptr); +be_define_const_str(add, "add", 993596020u, 0, 3, NULL); +be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_set_matrix_pixel_color); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_engine); +be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_getbits); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_ins_time); +be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_arg_name); +be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, &be_const_str_deinit); +be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, &be_const_str_clear_first_time); be_define_const_str(add_header, "add_header", 927130612u, 0, 10, NULL); -be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, &be_const_str_draw_line_dsc); -be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_arg_name); -be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_escape); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_create_custom_widget); -be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, &be_const_str_constructor_cb); -be_define_const_str(animate, "animate", 3885786800u, 0, 7, &be_const_str_pc); -be_define_const_str(animators, "animators", 279858213u, 0, 9, &be_const_str_ccronexpr); -be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_asin); -be_define_const_str(arch, "arch", 2952804297u, 0, 4, &be_const_str_refr_pos); -be_define_const_str(area, "area", 2601460036u, 0, 4, NULL); -be_define_const_str(arg, "arg", 1047474471u, 0, 3, NULL); -be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, &be_const_str_dimmer); -be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_refr_now); -be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson); -be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_widget_struct_default); -be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, &be_const_str_point_arr); +be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, &be_const_str_hs2rgb); +be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_get_aps_voltage); +be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_begin); +be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, &be_const_str_get_free_heap); +be_define_const_str(animate, "animate", 3885786800u, 0, 7, &be_const_str_pop_path); +be_define_const_str(animators, "animators", 279858213u, 0, 9, &be_const_str_out_X20of_X20range); +be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_files); +be_define_const_str(arch, "arch", 2952804297u, 0, 4, &be_const_str_member); +be_define_const_str(area, "area", 2601460036u, 0, 4, &be_const_str_exec_rules); +be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_refr_pos); +be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, &be_const_str_target_search); +be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_connect); +be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, &be_const_str_close); +be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_base_class); +be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, &be_const_str_hour); be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_read12); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_dirty); -be_define_const_str(assign_rmt, "assign_rmt", 1047642576u, 0, 10, &be_const_str_delay); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_init_draw_arc_dsc); -be_define_const_str(atan, "atan", 108579519u, 0, 4, NULL); -be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, &be_const_str_trig); -be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, NULL); -be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, NULL); -be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_get_aps_voltage); -be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, &be_const_str_ctypes_bytes); -be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_copy); -be_define_const_str(b, "b", 3876335077u, 0, 1, &be_const_str_sin); -be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, &be_const_str_gamma); -be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, NULL); -be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_find_key_i); -be_define_const_str(before_del, "before_del", 815924436u, 0, 10, &be_const_str_power_off); -be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_font_montserrat); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_contains); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_check_not_method); +be_define_const_str(assign_rmt, "assign_rmt", 1047642576u, 0, 10, &be_const_str_set_style_img_recolor); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_listdir); +be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_ctypes_bytes_dyn); +be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, NULL); +be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, &be_const_str_json_fdump); +be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_rad); +be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_content_flush); +be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, &be_const_str_y1); +be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_c); +be_define_const_str(b, "b", 3876335077u, 0, 1, &be_const_str_resize); +be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, &be_const_str_web_add_handler); +be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, &be_const_str_get_string); +be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_lights); +be_define_const_str(before_del, "before_del", 815924436u, 0, 10, &be_const_str_cos); +be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_is_first_time); be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, NULL); -be_define_const_str(bool, "bool", 3365180733u, 0, 4, &be_const_str_widget_height_def); +be_define_const_str(bool, "bool", 3365180733u, 0, 4, &be_const_str_call_native); be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); -be_define_const_str(bri, "bri", 2112284244u, 0, 3, NULL); +be_define_const_str(bri, "bri", 2112284244u, 0, 3, &be_const_str_cmd_res); be_define_const_str(bus, "bus", 1607822841u, 0, 3, NULL); -be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_insert); -be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_fast_loop_enabled); -be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_path); -be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_erase); -be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, NULL); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_lvgl_event_dispatch); -be_define_const_str(can_show, "can_show", 960091187u, 0, 8, &be_const_str_full_status); -be_define_const_str(cb, "cb", 1428787088u, 0, 2, &be_const_str_scr_act); -be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, &be_const_str_instance); -be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, &be_const_str_light_state); -be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, &be_const_str_widget_width_def); -be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, &be_const_str_r); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, NULL); -be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_clear_first_time); -be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_get_current_module_path); -be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, &be_const_str_decode); -be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_remove_driver); +be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_draw_line); +be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_ctypes_bytes); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_digital_read); +be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_detected_X20on_X20bus); +be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_point_arr); +be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_lower); +be_define_const_str(can_show, "can_show", 960091187u, 0, 8, &be_const_str_tag); +be_define_const_str(cb, "cb", 1428787088u, 0, 2, NULL); +be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, &be_const_str_destructor_cb); +be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, &be_const_str_draw_arc_dsc); +be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, &be_const_str_read32); +be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, NULL); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_get_alternate); +be_define_const_str(char, "char", 2823553821u, 0, 4, NULL); +be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_coord_arr); +be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, &be_const_str_resp_cmnd_error); +be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_draw_arc); be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, &be_const_str_find_op); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_set_useragent); -be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_sec); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_del); -be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_open); -be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, &be_const_str_get_cb_list); -be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, &be_const_str_content_send_style); -be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_light_to_id); -be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_while); -be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_get_battery_chargin_status); -be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_set_dcdc_enable); -be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_name); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_pixel_size); -be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_ismethod); +be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, &be_const_str_widget_dtor_impl); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_members); +be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_decrypt); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, NULL); +be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_remote_port); +be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, &be_const_str_widget_event); +be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, &be_const_str_light); +be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_list); +be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_scr_act); +be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_read); +be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_every_250ms); +be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_get_style_line_color); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_json_append); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, NULL); +be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_remove_rule); be_define_const_str(compile, "compile", 1000265118u, 0, 7, NULL); -be_define_const_str(compress, "compress", 2818084237u, 0, 8, &be_const_str_v); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_consume_silence); -be_define_const_str(connect, "connect", 2866859257u, 0, 7, &be_const_str_as); -be_define_const_str(connected, "connected", 1424938192u, 0, 9, NULL); -be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, &be_const_str_set_dc_voltage); +be_define_const_str(compress, "compress", 2818084237u, 0, 8, NULL); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_pixel_size); +be_define_const_str(connect, "connect", 2866859257u, 0, 7, &be_const_str_readline); +be_define_const_str(connected, "connected", 1424938192u, 0, 9, &be_const_str_tan); +be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, &be_const_str_do); be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, NULL); -be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, &be_const_str_read_bytes); -be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, &be_const_str_deregister_obj); -be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, NULL); -be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_rad); -be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_elif); -be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_response_append); -be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_wifi_bars_icon); +be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, &be_const_str_exec_tele); +be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, &be_const_str_percentage); +be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, &be_const_str_fromstring); +be_define_const_str(contains, "contains", 1825239352u, 0, 8, NULL); +be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_driver_name); +be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_gen_cb); +be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, NULL); be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, NULL); -be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_day); -be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_get_height); +be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, NULL); +be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, NULL); be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, &be_const_str_decrypt); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_get_current_module_name); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_lights); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_set_ldo_voltage); -be_define_const_str(couldn_X27t_X20not_X20initialize_X20noepixelbus, "couldn't not initialize noepixelbus", 2536490812u, 0, 35, NULL); -be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_imin); -be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_lv_wifi_bars_icon); -be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, NULL); -be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, &be_const_str_value_error); +be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, NULL); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_invalid_X20GPIO_X20number); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_print); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_set_exten); +be_define_const_str(couldn_X27t_X20not_X20initialize_X20noepixelbus, "couldn't not initialize noepixelbus", 2536490812u, 0, 35, &be_const_str_scan); +be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_name); +be_define_const_str(counters, "counters", 4095866864u, 0, 8, NULL); +be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, &be_const_str_hue_ntv); +be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, NULL); be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, NULL); -be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_webclient); -be_define_const_str(ctor, "ctor", 375399343u, 0, 4, &be_const_str_setbits); -be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_gc); -be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, NULL); -be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_get_bat_voltage); -be_define_const_str(day, "day", 3830391293u, 0, 3, NULL); -be_define_const_str(debug, "debug", 1483009432u, 0, 5, &be_const_str_read32); -be_define_const_str(decode, "decode", 3007678287u, 0, 6, NULL); -be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, &be_const_str_obj); -be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_discover); +be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_delete_all_configs); +be_define_const_str(ctor, "ctor", 375399343u, 0, 4, &be_const_str_display_X2Eini); +be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, NULL); +be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, &be_const_str_set_style_img_recolor_opa); +be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_get_light); +be_define_const_str(day, "day", 3830391293u, 0, 3, &be_const_str_digital_write); +be_define_const_str(debug, "debug", 1483009432u, 0, 5, NULL); +be_define_const_str(decode, "decode", 3007678287u, 0, 6, &be_const_str_stop_iteration); +be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, NULL); +be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, NULL); be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_engine); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_string); -be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_global); -be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_pop); -be_define_const_str(delete_all_configs, "delete_all_configs", 2382067578u, 0, 18, &be_const_str_web_add_button); -be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_millis); -be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_hs2rgb); -be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, &be_const_str_instance_size); -be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_lv_solidified); -be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, NULL); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_get_switch); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_p2); -be_define_const_str(dim, "dim", 3496118841u, 0, 3, &be_const_str_get_warning_level); -be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, &be_const_str_font_seg7); -be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, NULL); -be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_register_obj); -be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_select); -be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, NULL); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, NULL); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_setitem); +be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_set_ldo_voltage); +be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_web_sensor); +be_define_const_str(delete_all_configs, "delete_all_configs", 2382067578u, 0, 18, &be_const_str_draw_line_dsc_init); +be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_json_fdump_list); +be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_map); +be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, &be_const_str_public_key); +be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_k); +be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, &be_const_str_hue_status); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_insert); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_fromb64); +be_define_const_str(dim, "dim", 3496118841u, 0, 3, &be_const_str_light_state); +be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, &be_const_str_minute); +be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, &be_const_str_duration); +be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_set_percentage); +be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_set_timer); +be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, &be_const_str_widget_cb); be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, NULL); -be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, &be_const_str_ins_time); -be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, &be_const_str_pin_used); -be_define_const_str(draw_ctx, "draw_ctx", 953366593u, 0, 8, NULL); -be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_set_rate); -be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_set_y); -be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, &be_const_str_isnan); -be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, &be_const_str_widget_ctor_impl); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); -be_define_const_str(duration, "duration", 799079693u, 0, 8, &be_const_str_get_string); -be_define_const_str(editable, "editable", 60532369u, 0, 8, &be_const_str_point); -be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_set_channels); +be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, NULL); +be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, &be_const_str_set_chg_current); +be_define_const_str(draw_ctx, "draw_ctx", 953366593u, 0, 8, &be_const_str_stop); +be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_write_bit); +be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_get_input_power_status); +be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, NULL); +be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, &be_const_str_from_to); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_font_embedded); +be_define_const_str(duration, "duration", 799079693u, 0, 8, NULL); +be_define_const_str(editable, "editable", 60532369u, 0, 8, NULL); +be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, NULL); be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); -be_define_const_str(enabled, "enabled", 49525662u, 0, 7, &be_const_str_offset); -be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_get_bat_charge_current); +be_define_const_str(enabled, "enabled", 49525662u, 0, 7, NULL); +be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_hex); be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, &be_const_str_set_bits_per_sample); -be_define_const_str(engine, "engine", 3993360443u, 0, 6, &be_const_str_getbits); -be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_flush); -be_define_const_str(escape, "escape", 2652972038u, 0, 6, &be_const_str_nan); -be_define_const_str(eth, "eth", 2191266556u, 0, 3, &be_const_str_year); +be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, NULL); +be_define_const_str(engine, "engine", 3993360443u, 0, 6, &be_const_str_sat); +be_define_const_str(erase, "erase", 1010949589u, 0, 5, NULL); +be_define_const_str(escape, "escape", 2652972038u, 0, 6, &be_const_str_has_arg); +be_define_const_str(eth, "eth", 2191266556u, 0, 3, NULL); be_define_const_str(event, "event", 4264611999u, 0, 5, NULL); -be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, NULL); -be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_pi); -be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, &be_const_str_exec_rules); -be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, &be_const_str_write); -be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, &be_const_str_time_str); -be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_remove); +be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, &be_const_str_lv_module_init); +be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_font_montserrat); +be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, NULL); +be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, &be_const_str_quality); +be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, &be_const_str_set_auth); +be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_set_bits_per_sample); be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_has); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_invalidate); -be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_i2c_enabled); -be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_function); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_json_append); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, NULL); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_isrunning); +be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_gc); +be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_json_fdump_any); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_range); be_define_const_str(f, "f", 3809224601u, 0, 1, NULL); be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, NULL); -be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, &be_const_str_update); -be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_page_autoconf_mgr); -be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, NULL); -be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_set_x); +be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, &be_const_str_touch_update); +be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, NULL); +be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_type); +be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, &be_const_str_round_end); +be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_gpio); be_define_const_str(find, "find", 3186656602u, 0, 4, NULL); -be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_full_state); -be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL); -be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL); -be_define_const_str(flush, "flush", 3002334877u, 0, 5, &be_const_str_strptime); -be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_set_hue16sat); -be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, &be_const_str_gamma8); -be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, &be_const_str_lv_signal_bars); +be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_started); +be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_get_hor_res); +be_define_const_str(finish, "finish", 1494643858u, 0, 6, &be_const_str_pc); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_next_cron); +be_define_const_str(flush, "flush", 3002334877u, 0, 5, &be_const_str_set_bri); +be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_response_append); +be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, NULL); +be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, NULL); be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_set_first_time); -be_define_const_str(from_to, "from_to", 21625507u, 0, 7, &be_const_str_set_style_pad_all); -be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, NULL); -be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, &be_const_str_widget_dtor_cb); -be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_set_percentage); -be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_int); -be_define_const_str(full_status, "full_status", 648242459u, 0, 11, &be_const_str_start); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus); +be_define_const_str(from_to, "from_to", 21625507u, 0, 7, &be_const_str_push); +be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, &be_const_str_setbits); +be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, &be_const_str_reverse); +be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_seti); +be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_run_deferred); +be_define_const_str(full_status, "full_status", 648242459u, 0, 11, NULL); be_define_const_str(function, "function", 2664841801u, 0, 8, NULL); -be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, &be_const_str_lv_obj_class); +be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, NULL); be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_splash); -be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL); -be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_split); -be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_obj_event_base); -be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_pin_mode); -be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, NULL); -be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, &be_const_str_resp_cmnd_str); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_group_def); +be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_keys); +be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_push_path); +be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_log); +be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_lv_extra); +be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, &be_const_str_redirect); +be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, &be_const_str_number); be_define_const_str(get_bat_current, "get_bat_current", 1912106073u, 0, 15, NULL); -be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, &be_const_str_load_templates); -be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, NULL); -be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, NULL); +be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, &be_const_str_get_bri); +be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, &be_const_str_state); +be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, &be_const_str_get_power); be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, NULL); be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, NULL); -be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, &be_const_str_range); -be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, &be_const_str_listdir); -be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, &be_const_str_lv_wifi_bars); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, NULL); -be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, &be_const_str_iter); -be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_members); -be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, &be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, NULL); -be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, &be_const_str_seti); -be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, &be_const_str_get_vbus_voltage); +be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, &be_const_str_write); +be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, &be_const_str_p1); +be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, NULL); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_width); +be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, &be_const_str_widget_event_impl); +be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_round_start); +be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, &be_const_str_open); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_lv_clock_icon); +be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, &be_const_str_signal_bars); +be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, &be_const_str_load_templates); be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL); -be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, NULL); -be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_lv_signal_arcs); -be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); +be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, &be_const_str_web_add_button); +be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_reapply); +be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, &be_const_str_lv_obj); be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, NULL); be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, NULL); -be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, &be_const_str_groups); -be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, &be_const_str_img); -be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str_toptr); -be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, &be_const_str_get_width); -be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, &be_const_str_missing_X20name); -be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, NULL); -be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, &be_const_str_push_path); -be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, NULL); -be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str_tob64); -be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_set_bri); +be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, &be_const_str_iter); +be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, NULL); +be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str_read12); +be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, &be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27); +be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, &be_const_str_target); +be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, &be_const_str_rtc); +be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, &be_const_str_set_style_border_width); +be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, &be_const_str_p2); +be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str_remove_cron); +be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_make_cb); be_define_const_str(geti, "geti", 2381006490u, 0, 4, NULL); -be_define_const_str(global, "global", 503252654u, 0, 6, NULL); -be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, &be_const_str_save_before_restart); -be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_io_error); -be_define_const_str(groups, "groups", 2943077229u, 0, 6, NULL); -be_define_const_str(h, "h", 3977000791u, 0, 1, &be_const_str_math); +be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_set_dc_voltage); +be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, NULL); +be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_save_before_restart); +be_define_const_str(groups, "groups", 2943077229u, 0, 6, &be_const_str_json); +be_define_const_str(h, "h", 3977000791u, 0, 1, &be_const_str_return_X20code_X3D_X25i); be_define_const_str(has, "has", 3988721635u, 0, 3, NULL); -be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, &be_const_str_set_style_text_color); -be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_set_pixel_color); -be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_montserrat_font); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_remove_light); -be_define_const_str(hour, "hour", 3053661199u, 0, 4, &be_const_str_lv_module_init); -be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, &be_const_str_return_X20code_X3D_X25i); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, &be_const_str_offseta); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, NULL); -be_define_const_str(hue, "hue", 3817694041u, 0, 3, NULL); +be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, &be_const_str_offseta); +be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map); +be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_isnan); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_tomap); +be_define_const_str(hour, "hour", 3053661199u, 0, 4, &be_const_str_start); +be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, NULL); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, NULL); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, &be_const_str_set_rgb); +be_define_const_str(hue, "hue", 3817694041u, 0, 3, &be_const_str_lv_timer_cb); be_define_const_str(hue_ntv, "hue_ntv", 705068642u, 0, 7, NULL); -be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_ip); +be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_id); be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); -be_define_const_str(id, "id", 926444256u, 0, 2, &be_const_str_scan); -be_define_const_str(id_X20must_X20be_X20of_X20type_X20_X27int_X27, "id must be of type 'int'", 2097653458u, 0, 24, &be_const_str_write_gpio); +be_define_const_str(id, "id", 926444256u, 0, 2, NULL); +be_define_const_str(id_X20must_X20be_X20of_X20type_X20_X27int_X27, "id must be of type 'int'", 2097653458u, 0, 24, NULL); be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_wd); -be_define_const_str(img, "img", 2229740804u, 0, 3, &be_const_str_next); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_init_draw_line_dsc); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_remove_light); +be_define_const_str(img, "img", 2229740804u, 0, 3, &be_const_str_lv_signal_arcs); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_io_error); be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_strftime); -be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, &be_const_str_kv); -be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_matrix); -be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_lv); -be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, &be_const_str_member); -be_define_const_str(ins_ramp, "ins_ramp", 1068049360u, 0, 8, NULL); -be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, &be_const_str_is_running); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_load_freetype_font); -be_define_const_str(instance, "instance", 193386898u, 0, 8, NULL); -be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, NULL); -be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, &be_const_str_state); -be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); -be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, &be_const_str_reset_search); -be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_memory); -be_define_const_str(invalid_X20GPIO_X20number, "invalid GPIO number", 4135793328u, 0, 19, NULL); -be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, &be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus); -be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, &be_const_str_settings); -be_define_const_str(ip, "ip", 1261996636u, 0, 2, &be_const_str_wire); -be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, NULL); -be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, &be_const_str_readbytes); -be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, NULL); +be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_set_mode_ct); +be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, &be_const_str_for); +be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_resp_cmnd); +be_define_const_str(input, "input", 4191711099u, 0, 5, NULL); +be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, &be_const_str_resolvecmnd); +be_define_const_str(ins_ramp, "ins_ramp", 1068049360u, 0, 8, &be_const_str_false); +be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, &be_const_str_obj_event_base); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, NULL); +be_define_const_str(instance, "instance", 193386898u, 0, 8, &be_const_str__X7D); +be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, &be_const_str_refr_now); +be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, &be_const_str_next); +be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_resp_cmnd_str); +be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, NULL); +be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_pct); +be_define_const_str(invalid_X20GPIO_X20number, "invalid GPIO number", 4135793328u, 0, 19, &be_const_str_is_dirty); +be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, &be_const_str_lv_solidified); +be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, NULL); +be_define_const_str(ip, "ip", 1261996636u, 0, 2, &be_const_str_zip); +be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, &be_const_str_top); +be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, &be_const_str_running); +be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, &be_const_str_remote_ip); be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, NULL); be_define_const_str(ismethod, "ismethod", 3513438880u, 0, 8, NULL); -be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, NULL); -be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, NULL); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_loop); -be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_lower); -be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL); -be_define_const_str(json, "json", 916562499u, 0, 4, NULL); -be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27); -be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, &be_const_str_wifi_arcs_icon); -be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, NULL); -be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, &be_const_str_set_timer); -be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, &be_const_str_resize); +be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, &be_const_str_set_x); +be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, &be_const_str_montserrat_font); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); +be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_reset); +be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_static); +be_define_const_str(json, "json", 916562499u, 0, 4, &be_const_str_strptime); +be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, NULL); +be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, NULL); +be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, &be_const_str_select); +be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, &be_const_str_tcpclient); +be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, NULL); be_define_const_str(k, "k", 3993778410u, 0, 1, NULL); -be_define_const_str(keys, "keys", 4182378701u, 0, 4, NULL); -be_define_const_str(kv, "kv", 1497177492u, 0, 2, NULL); -be_define_const_str(label, "label", 4137097213u, 0, 5, &be_const_str_setmember); -be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, &be_const_str_stop_iteration); +be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_label); +be_define_const_str(kv, "kv", 1497177492u, 0, 2, &be_const_str_udp); +be_define_const_str(label, "label", 4137097213u, 0, 5, &be_const_str_set_tasmota_logo); +be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, NULL); be_define_const_str(leds, "leds", 558858555u, 0, 4, NULL); -be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, &be_const_str_web_add_console_button); -be_define_const_str(light, "light", 3801947695u, 0, 5, NULL); -be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, &be_const_str_set_style_radius); -be_define_const_str(light_state, "light_state", 905783845u, 0, 11, NULL); -be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, &be_const_str_upper); +be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, NULL); +be_define_const_str(light, "light", 3801947695u, 0, 5, &be_const_str_page_autoconf_mgr); +be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, &be_const_str_missing_X20name); +be_define_const_str(light_state, "light_state", 905783845u, 0, 11, &be_const_str_loop); +be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, NULL); be_define_const_str(lights, "lights", 425118420u, 0, 6, NULL); -be_define_const_str(line_dsc, "line_dsc", 4094490978u, 0, 8, NULL); -be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_strip); -be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, &be_const_str_readline); -be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, &be_const_str_manuf); -be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_make_cb); -be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_set_width); -be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, NULL); -be_define_const_str(local, "local", 2621662984u, 0, 5, &be_const_str_web_send); -be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_module); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_lv_); -be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_set_style_border_width); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_lv_point); -be_define_const_str(lv, "lv", 1529997255u, 0, 2, &be_const_str_pc_abs); -be_define_const_str(lv_, "lv_", 663721032u, 0, 3, &be_const_str_running); -be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, &be_const_str_web_add_handler); -be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, NULL); -be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, NULL); +be_define_const_str(line_dsc, "line_dsc", 4094490978u, 0, 8, &be_const_str_else); +be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_run_cron); +be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, &be_const_str_time_dump); +be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, NULL); +be_define_const_str(load, "load", 3859241449u, 0, 4, NULL); +be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_set_style_line_color); +be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, &be_const_str_pixels_buffer); +be_define_const_str(local, "local", 2621662984u, 0, 5, &be_const_str_web_add_main_button); +be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_lvgl_timer_dispatch); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL); +be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_lv_coord_arr); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL); +be_define_const_str(lv, "lv", 1529997255u, 0, 2, NULL); +be_define_const_str(lv_, "lv_", 663721032u, 0, 3, &be_const_str_wifi_arcs_icon); +be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, NULL); +be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, &be_const_str_set_y); +be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, &be_const_str_wire); be_define_const_str(lv_event_cb, "lv_event_cb", 2480731016u, 0, 11, NULL); be_define_const_str(lv_extra, "lv_extra", 399561998u, 0, 8, NULL); -be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, &be_const_str_lv_wifi_arcs); +be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, NULL); be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL); -be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, NULL); -be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, NULL); -be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, NULL); -be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, &be_const_str_setitem); +be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, &be_const_str_xy); +be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, &be_const_str_pin); +be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, &be_const_str_lv_wifi_bars); +be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, &be_const_str_no_X20more_X20RMT_X20channel_X20available); be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, NULL); -be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, NULL); -be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, &be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); -be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, &be_const_str_stop); -be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, &be_const_str_for); -be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, &be_const_str_set_pwm); -be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, NULL); +be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, &be_const_str_register_button_encoder); +be_define_const_str(lv_timer_cb, "lv_timer_cb", 1383473763u, 0, 11, NULL); +be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, &be_const_str_sinh); +be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, NULL); +be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, &be_const_str_path); +be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, &be_const_str_wire2); +be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, &be_const_str_rand); +be_define_const_str(lvgl_timer_dispatch, "lvgl_timer_dispatch", 975257833u, 0, 19, &be_const_str_set_xy); be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, NULL); be_define_const_str(manuf, "manuf", 4120929560u, 0, 5, NULL); -be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); +be_define_const_str(map, "map", 3751997361u, 0, 3, &be_const_str_widget_group_def); be_define_const_str(math, "math", 4001929615u, 0, 4, NULL); -be_define_const_str(matrix, "matrix", 365099244u, 0, 6, NULL); -be_define_const_str(member, "member", 719708611u, 0, 6, NULL); -be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_pc_rel); -be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_resp_cmnd_failed); -be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); -be_define_const_str(min, "min", 3381609815u, 0, 3, NULL); -be_define_const_str(minute, "minute", 954666857u, 0, 6, NULL); +be_define_const_str(matrix, "matrix", 365099244u, 0, 6, &be_const_str_save); +be_define_const_str(member, "member", 719708611u, 0, 6, &be_const_str_setmember); +be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_reverse_gamma10); +be_define_const_str(memory, "memory", 2229924270u, 0, 6, NULL); +be_define_const_str(millis, "millis", 1214679063u, 0, 6, &be_const_str_month); +be_define_const_str(min, "min", 3381609815u, 0, 3, &be_const_str_widget_instance_size); +be_define_const_str(minute, "minute", 954666857u, 0, 6, &be_const_str_set_style_text_font); be_define_const_str(missing_X20name, "missing name", 3635024006u, 0, 12, NULL); be_define_const_str(model, "model", 2961925722u, 0, 5, NULL); -be_define_const_str(module, "module", 3617558685u, 0, 6, NULL); +be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_strftime); be_define_const_str(month, "month", 3598321157u, 0, 5, NULL); -be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, NULL); -be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_set_matrix_pixel_color); -be_define_const_str(nan, "nan", 797905850u, 0, 3, &be_const_str_quality); -be_define_const_str(next, "next", 1555467752u, 0, 4, &be_const_str_no_X20more_X20RMT_X20channel_X20available); -be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, &be_const_str_web_add_config_button); +be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str_unsubscribe); +be_define_const_str(name, "name", 2369371622u, 0, 4, NULL); +be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL); +be_define_const_str(next, "next", 1555467752u, 0, 4, NULL); +be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, NULL); be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, &be_const_str_reset); -be_define_const_str(no_X20more_X20RMT_X20channel_X20available, "no more RMT channel available", 305838632u, 0, 29, &be_const_str_null_cb); -be_define_const_str(now, "now", 682728183u, 0, 3, &be_const_str_set_mode_rgb); -be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, &be_const_str_remove_rule); +be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, &be_const_str_publish_result); +be_define_const_str(no_X20more_X20RMT_X20channel_X20available, "no more RMT channel available", 305838632u, 0, 29, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); +be_define_const_str(now, "now", 682728183u, 0, 3, NULL); +be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, &be_const_str_register_obj); be_define_const_str(number, "number", 467038368u, 0, 6, NULL); be_define_const_str(o, "o", 3926667934u, 0, 1, NULL); -be_define_const_str(obj, "obj", 3343205242u, 0, 3, &be_const_str_widget_editable); -be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, NULL); -be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, &be_const_str_set_gain); +be_define_const_str(obj, "obj", 3343205242u, 0, 3, &be_const_str_set_dcdc_enable); +be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, &be_const_str_remove_driver); +be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, NULL); be_define_const_str(offset, "offset", 348705738u, 0, 6, NULL); -be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, &be_const_str_remote_ip); -be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, NULL); +be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, NULL); +be_define_const_str(on, "on", 1630810064u, 0, 2, &be_const_str_break); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, &be_const_str_write8); be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, NULL); -be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); -be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, NULL); +be_define_const_str(open, "open", 3546203337u, 0, 4, &be_const_str_sin); +be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, &be_const_str_wifi_bars_icon); be_define_const_str(p1, "p1", 2689521274u, 0, 2, NULL); -be_define_const_str(p2, "p2", 2672743655u, 0, 2, &be_const_str_splash_remove); -be_define_const_str(page_autoconf_ctl, "page_autoconf_ctl", 2453381496u, 0, 17, &be_const_str_widget_ctor_cb); -be_define_const_str(page_autoconf_mgr, "page_autoconf_mgr", 3643937031u, 0, 17, &be_const_str_sat); -be_define_const_str(param, "param", 1309554226u, 0, 5, &be_const_str_send_multicast); -be_define_const_str(path, "path", 2223459638u, 0, 4, NULL); +be_define_const_str(p2, "p2", 2672743655u, 0, 2, NULL); +be_define_const_str(page_autoconf_ctl, "page_autoconf_ctl", 2453381496u, 0, 17, NULL); +be_define_const_str(page_autoconf_mgr, "page_autoconf_mgr", 3643937031u, 0, 17, &be_const_str_read8); +be_define_const_str(param, "param", 1309554226u, 0, 5, &be_const_str_web_add_management_button); +be_define_const_str(path, "path", 2223459638u, 0, 4, &be_const_str_pc_rel); be_define_const_str(pc, "pc", 1313756516u, 0, 2, NULL); -be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_persist); -be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_touch_update); +be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, NULL); +be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_widget_ctor_cb); be_define_const_str(pct, "pct", 1431300144u, 0, 3, NULL); be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, NULL); -be_define_const_str(persist, "persist", 3917083779u, 0, 7, NULL); -be_define_const_str(persist_X2E_p_X20is_X20not_X20a_X20map, "persist._p is not a map", 1176528732u, 0, 23, &be_const_str_shared_key); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_set_style_pad_right); -be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, &be_const_str_run); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL); -be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, NULL); -be_define_const_str(pixel_size, "pixel_size", 2209135785u, 0, 10, NULL); -be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, &be_const_str_width); +be_define_const_str(persist, "persist", 3917083779u, 0, 7, &be_const_str_pow); +be_define_const_str(persist_X2E_p_X20is_X20not_X20a_X20map, "persist._p is not a map", 1176528732u, 0, 23, NULL); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_signal_change); +be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_refr_size); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_sec); +be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, &be_const_str_v); +be_define_const_str(pixel_size, "pixel_size", 2209135785u, 0, 10, &be_const_str_wifi_bars); +be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, &be_const_str_solidified); be_define_const_str(point, "point", 414084241u, 0, 5, NULL); be_define_const_str(point_arr, "point_arr", 1140859857u, 0, 9, NULL); -be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_web_send_decimal); -be_define_const_str(pop_path, "pop_path", 2403243998u, 0, 8, NULL); +be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_settings); +be_define_const_str(pop_path, "pop_path", 2403243998u, 0, 8, &be_const_str_tob64); be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL); -be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, &be_const_str_target); -be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, &be_const_str_reapply); -be_define_const_str(print, "print", 372738696u, 0, 5, NULL); -be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_set_light); -be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); -be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, NULL); -be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); -be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, &be_const_str_redirect); -be_define_const_str(quality, "quality", 2597670950u, 0, 7, &be_const_str_register_button_encoder); -be_define_const_str(r, "r", 4144776981u, 0, 1, &be_const_str_set_ldo_enable); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_rtc); -be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_try); -be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); +be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, &be_const_str_year); +be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, NULL); +be_define_const_str(print, "print", 372738696u, 0, 5, &be_const_str_run_bat); +be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, NULL); +be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_web_add_console_button); +be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, &be_const_str_run); +be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_serial); +be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, &be_const_str_strip); +be_define_const_str(quality, "quality", 2597670950u, 0, 7, NULL); +be_define_const_str(r, "r", 4144776981u, 0, 1, &be_const_str_set_mode_rgb); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_set_timeouts); +be_define_const_str(raise, "raise", 1593437475u, 70, 5, &be_const_str_true); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); +be_define_const_str(range, "range", 4208725202u, 0, 5, &be_const_str_web_send); be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); be_define_const_str(read12, "read12", 4291076970u, 0, 6, NULL); -be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL); -be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL); +be_define_const_str(read13, "read13", 12887293u, 0, 6, &be_const_str_set_time); +be_define_const_str(read24, "read24", 1808533811u, 0, 6, &be_const_str_real); be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL); be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL); -be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, &be_const_str_set_power); +be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, NULL); be_define_const_str(readbytes, "readbytes", 2716426756u, 0, 9, NULL); be_define_const_str(readline, "readline", 1212709927u, 0, 8, NULL); -be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_search); -be_define_const_str(reapply, "reapply", 3778939332u, 0, 7, &be_const_str_wifi); +be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); +be_define_const_str(reapply, "reapply", 3778939332u, 0, 7, NULL); be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL); -be_define_const_str(refr_now, "refr_now", 3191284735u, 0, 8, NULL); -be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, &be_const_str_tolower); -be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, &be_const_str_wifi_arcs); -be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, &be_const_str_scale_uint); +be_define_const_str(refr_now, "refr_now", 3191284735u, 0, 8, &be_const_str_set_style_bg_color); +be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, NULL); +be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, NULL); +be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, &be_const_str_str); be_define_const_str(register_obj, "register_obj", 3982614770u, 0, 12, NULL); -be_define_const_str(remote_ip, "remote_ip", 2953154693u, 0, 9, NULL); -be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, &be_const_str_write_file); +be_define_const_str(remote_ip, "remote_ip", 2953154693u, 0, 9, &be_const_str_set_reachable); +be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, &be_const_str_subscribe); be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); -be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_uuid4); -be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, &be_const_str_end); -be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, &be_const_str_round_start); -be_define_const_str(remove_light, "remove_light", 1783624394u, 0, 12, &be_const_str_signal_change); -be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); +be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_set_style_pad_right); +be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, &be_const_str_wd); +be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, NULL); +be_define_const_str(remove_light, "remove_light", 1783624394u, 0, 12, NULL); +be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, &be_const_str_skip); be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, NULL); be_define_const_str(reset, "reset", 1695364032u, 0, 5, NULL); -be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, &be_const_str_set_style_bg_color); -be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); -be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, &be_const_str_serial); -be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_skip); -be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, &be_const_str_set_height); +be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, &be_const_str_raise); +be_define_const_str(resize, "resize", 3514612129u, 0, 6, &be_const_str_wire1); +be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, &be_const_str_split); +be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_set_light); +be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); -be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_rotate); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL); +be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_send); be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); -be_define_const_str(return_X20code_X3D_X25i, "return code=%i", 2127454401u, 0, 14, NULL); -be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); -be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); +be_define_const_str(return_X20code_X3D_X25i, "return code=%i", 2127454401u, 0, 14, &be_const_str_unknown_X20instruction); +be_define_const_str(reverse, "reverse", 558918661u, 0, 7, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); +be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, &be_const_str_var); be_define_const_str(rotate, "rotate", 2784296202u, 0, 6, NULL); -be_define_const_str(round_end, "round_end", 985288225u, 0, 9, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); -be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, &be_const_str_set_timeouts); -be_define_const_str(rounded, "rounded", 1920734138u, 0, 7, NULL); -be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, &be_const_str_y); +be_define_const_str(round_end, "round_end", 985288225u, 0, 9, NULL); +be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, NULL); +be_define_const_str(rounded, "rounded", 1920734138u, 0, 7, &be_const_str_yield); +be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); be_define_const_str(rule, "rule", 4230889683u, 0, 4, NULL); -be_define_const_str(run, "run", 718098122u, 0, 3, NULL); +be_define_const_str(run, "run", 718098122u, 0, 3, &be_const_str_try); be_define_const_str(run_bat, "run_bat", 2536903298u, 0, 7, NULL); be_define_const_str(run_cron, "run_cron", 1929098555u, 0, 8, NULL); -be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, &be_const_str_web_add_main_button); -be_define_const_str(running, "running", 343848780u, 0, 7, &be_const_str_size); +be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); +be_define_const_str(running, "running", 343848780u, 0, 7, NULL); be_define_const_str(sat, "sat", 3592196823u, 0, 3, NULL); -be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_tanh); +be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_tasmota); be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); -be_define_const_str(scan, "scan", 3974641896u, 0, 4, NULL); -be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_web_sensor); -be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); +be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_setrange); +be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_set_pixel_color); +be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, &be_const_str_tr); be_define_const_str(search, "search", 2150836393u, 0, 6, NULL); -be_define_const_str(sec, "sec", 3139892658u, 0, 3, &be_const_str_set_chg_current); +be_define_const_str(sec, "sec", 3139892658u, 0, 3, NULL); be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL); be_define_const_str(select, "select", 297952813u, 0, 6, NULL); -be_define_const_str(send, "send", 1919010991u, 0, 4, &be_const_str_set_mode_ct); -be_define_const_str(send_multicast, "send_multicast", 812185870u, 0, 14, &be_const_str_xy); -be_define_const_str(serial, "serial", 3687697785u, 0, 6, NULL); -be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_zero); +be_define_const_str(send, "send", 1919010991u, 0, 4, NULL); +be_define_const_str(send_multicast, "send_multicast", 812185870u, 0, 14, &be_const_str_success); +be_define_const_str(serial, "serial", 3687697785u, 0, 6, &be_const_str_set_height); +be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_set_gain); be_define_const_str(set_align, "set_align", 2592958913u, 0, 9, NULL); -be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, &be_const_str_yield); +be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, &be_const_str_set_user_data); be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL); -be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, &be_const_str_widget_cb); -be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, &be_const_str_wire1); -be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, &be_const_str_setrange); -be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, &be_const_str_web_add_management_button); -be_define_const_str(set_ct, "set_ct", 972363187u, 0, 6, &be_const_str_solidified); +be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, NULL); +be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, &be_const_str_value_error); +be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, NULL); +be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, NULL); +be_define_const_str(set_ct, "set_ct", 972363187u, 0, 6, &be_const_str_set_size); be_define_const_str(set_dc_voltage, "set_dc_voltage", 2181981936u, 0, 14, NULL); -be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, &be_const_str_tomap); -be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, &be_const_str_wire_scan); -be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, &be_const_str__X7B); +be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, NULL); +be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, NULL); +be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, &be_const_str_nil); be_define_const_str(set_gain, "set_gain", 3847781975u, 0, 8, NULL); -be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, &be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); -be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, &be_const_str_sinh); -be_define_const_str(set_huesat, "set_huesat", 626496854u, 0, 10, NULL); -be_define_const_str(set_ldo_enable, "set_ldo_enable", 2916502041u, 0, 14, NULL); +be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, NULL); +be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, NULL); +be_define_const_str(set_huesat, "set_huesat", 626496854u, 0, 10, &be_const_str_def); +be_define_const_str(set_ldo_enable, "set_ldo_enable", 2916502041u, 0, 14, &be_const_str_set_style_pad_all); be_define_const_str(set_ldo_voltage, "set_ldo_voltage", 4090501160u, 0, 15, NULL); -be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); +be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, &be_const_str_webclient); be_define_const_str(set_matrix_pixel_color, "set_matrix_pixel_color", 1197149462u, 0, 22, NULL); be_define_const_str(set_mode_ct, "set_mode_ct", 665073295u, 0, 11, NULL); -be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, &be_const_str_set_reachable); -be_define_const_str(set_percentage, "set_percentage", 2952022724u, 0, 14, NULL); -be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, &be_const_str_tasmota); +be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, &be_const_str_signal_arcs); +be_define_const_str(set_percentage, "set_percentage", 2952022724u, 0, 14, &be_const_str_w); +be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, &be_const_str_set_useragent); be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); be_define_const_str(set_pwm, "set_pwm", 3781811012u, 0, 7, NULL); -be_define_const_str(set_rate, "set_rate", 1154016838u, 0, 8, &be_const_str_if); -be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, &be_const_str_set_rgb); +be_define_const_str(set_rate, "set_rate", 1154016838u, 0, 8, &be_const_str_webserver); +be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, NULL); be_define_const_str(set_rgb, "set_rgb", 3380244855u, 0, 7, NULL); be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, NULL); -be_define_const_str(set_style_bg_color, "set_style_bg_color", 1689513089u, 0, 18, NULL); -be_define_const_str(set_style_border_width, "set_style_border_width", 549034191u, 0, 22, NULL); -be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, NULL); -be_define_const_str(set_style_img_recolor_opa, "set_style_img_recolor_opa", 2667062087u, 0, 25, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); -be_define_const_str(set_style_line_color, "set_style_line_color", 3665238976u, 0, 20, &be_const_str_import); +be_define_const_str(set_style_bg_color, "set_style_bg_color", 1689513089u, 0, 18, &be_const_str_zero); +be_define_const_str(set_style_border_width, "set_style_border_width", 549034191u, 0, 22, &be_const_str_web_add_config_button); +be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, &be_const_str_update); +be_define_const_str(set_style_img_recolor_opa, "set_style_img_recolor_opa", 2667062087u, 0, 25, NULL); +be_define_const_str(set_style_line_color, "set_style_line_color", 3665238976u, 0, 20, &be_const_str_tanh); be_define_const_str(set_style_pad_all, "set_style_pad_all", 3987000607u, 0, 17, NULL); -be_define_const_str(set_style_pad_right, "set_style_pad_right", 3314069054u, 0, 19, NULL); -be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, &be_const_str_do); -be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, &be_const_str_target_search); +be_define_const_str(set_style_pad_right, "set_style_pad_right", 3314069054u, 0, 19, &be_const_str_size); +be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, NULL); +be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, NULL); be_define_const_str(set_style_text_font, "set_style_text_font", 1028590019u, 0, 19, NULL); -be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, &be_const_str_static); -be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, &be_const_str_sqrt); -be_define_const_str(set_time, "set_time", 900236405u, 0, 8, &be_const_str_time_reached); +be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, NULL); +be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, NULL); +be_define_const_str(set_time, "set_time", 900236405u, 0, 8, NULL); be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL); be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); be_define_const_str(set_user_data, "set_user_data", 3596043360u, 0, 13, NULL); be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, NULL); -be_define_const_str(set_width, "set_width", 484671920u, 0, 9, NULL); -be_define_const_str(set_x, "set_x", 1849400772u, 0, 5, &be_const_str_else); +be_define_const_str(set_width, "set_width", 484671920u, 0, 9, &be_const_str_write_bytes); +be_define_const_str(set_x, "set_x", 1849400772u, 0, 5, NULL); be_define_const_str(set_xy, "set_xy", 1155092615u, 0, 6, NULL); -be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, &be_const_str_subscribe); +be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, &be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); be_define_const_str(set_zoom, "set_zoom", 1925134407u, 0, 8, NULL); -be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL); -be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL); -be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, &be_const_str__X7D); +be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, &be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(seti, "seti", 1500556254u, 0, 4, &be_const_str_widget_constructor); +be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); -be_define_const_str(settings, "settings", 1745255176u, 0, 8, &be_const_str_top); -be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, &be_const_str_write8); -be_define_const_str(show, "show", 2840060476u, 0, 4, NULL); -be_define_const_str(signal_arcs, "signal_arcs", 1505996127u, 0, 11, &be_const_str_width_def); +be_define_const_str(settings, "settings", 1745255176u, 0, 8, NULL); +be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL); +be_define_const_str(show, "show", 2840060476u, 0, 4, &be_const_str_string); +be_define_const_str(signal_arcs, "signal_arcs", 1505996127u, 0, 11, NULL); be_define_const_str(signal_bars, "signal_bars", 3181573600u, 0, 11, NULL); -be_define_const_str(signal_change, "signal_change", 3262299350u, 0, 13, &be_const_str_widget_struct_by_class); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_unknown_X20instruction); +be_define_const_str(signal_change, "signal_change", 3262299350u, 0, 13, &be_const_str_super); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); be_define_const_str(size, "size", 597743964u, 0, 4, NULL); be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL); be_define_const_str(solidified, "solidified", 3257553487u, 0, 10, NULL); -be_define_const_str(splash, "splash", 2531464038u, 0, 6, &be_const_str_unsubscribe); +be_define_const_str(splash, "splash", 2531464038u, 0, 6, NULL); be_define_const_str(splash_init, "splash_init", 1522992293u, 0, 11, NULL); -be_define_const_str(splash_remove, "splash_remove", 3132020807u, 0, 13, &be_const_str_tag); +be_define_const_str(splash_remove, "splash_remove", 3132020807u, 0, 13, NULL); be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); -be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); +be_define_const_str(srand, "srand", 465518633u, 0, 5, &be_const_str_url_encode); be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); be_define_const_str(started, "started", 2153339806u, 0, 7, NULL); be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL); -be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, NULL); +be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, &be_const_str_widget_dtor_cb); be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); be_define_const_str(string, "string", 398550328u, 0, 6, NULL); be_define_const_str(strip, "strip", 4246411473u, 0, 5, NULL); -be_define_const_str(strptime, "strptime", 1277910361u, 0, 8, NULL); +be_define_const_str(strptime, "strptime", 1277910361u, 0, 8, &be_const_str_traceback); be_define_const_str(subscribe, "subscribe", 2946386435u, 0, 9, NULL); -be_define_const_str(success, "success", 979353360u, 0, 7, NULL); +be_define_const_str(success, "success", 979353360u, 0, 7, &be_const_str_widget_width_def); be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); be_define_const_str(sys, "sys", 3277365014u, 0, 3, NULL); be_define_const_str(tag, "tag", 2516003219u, 0, 3, NULL); be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); -be_define_const_str(tanh, "tanh", 153638352u, 0, 4, &be_const_str_toupper); +be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); be_define_const_str(target, "target", 845187144u, 0, 6, NULL); be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); be_define_const_str(tasmota, "tasmota", 424643812u, 0, 7, NULL); be_define_const_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29, "tasmota.get_light() is deprecated, use light.get()", 3525753647u, 0, 50, NULL); -be_define_const_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, "tasmota.set_light() is deprecated, use light.set()", 2124937871u, 0, 50, &be_const_str_time_dump); +be_define_const_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, "tasmota.set_light() is deprecated, use light.set()", 2124937871u, 0, 50, NULL); be_define_const_str(tasmota_log_reader, "tasmota_log_reader", 3555069257u, 0, 18, NULL); -be_define_const_str(tcpclient, "tcpclient", 3828797983u, 0, 9, &be_const_str_tr); -be_define_const_str(tele, "tele", 3474458061u, 0, 4, &be_const_str_type); -be_define_const_str(the_X20second_X20argument_X20is_X20not_X20a_X20function, "the second argument is not a function", 3954574469u, 0, 37, &be_const_str_widget_group_def); +be_define_const_str(tcpclient, "tcpclient", 3828797983u, 0, 9, NULL); +be_define_const_str(tele, "tele", 3474458061u, 0, 4, &be_const_str_widget_height_def); +be_define_const_str(the_X20second_X20argument_X20is_X20not_X20a_X20function, "the second argument is not a function", 3954574469u, 0, 37, &be_const_str_tolower); be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); -be_define_const_str(to_gamma, "to_gamma", 1597139862u, 0, 8, NULL); -be_define_const_str(tob64, "tob64", 373777640u, 0, 5, &be_const_str_zip); +be_define_const_str(timer_cb, "timer_cb", 79918026u, 0, 8, NULL); +be_define_const_str(to_gamma, "to_gamma", 1597139862u, 0, 8, &be_const_str_toupper); +be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL); be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); be_define_const_str(tomap, "tomap", 612167626u, 0, 5, NULL); be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, NULL); be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); -be_define_const_str(touch_update, "touch_update", 1918102068u, 0, 12, &be_const_str_write_bit); +be_define_const_str(touch_update, "touch_update", 1918102068u, 0, 12, NULL); be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); be_define_const_str(tr, "tr", 1195724803u, 0, 2, NULL); be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); @@ -831,8 +834,8 @@ be_define_const_str(trig, "trig", 2073314619u, 0, 4, NULL); be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); -be_define_const_str(type, "type", 1361572173u, 0, 4, &be_const_str_true); -be_define_const_str(type_error, "type_error", 3789613824u, 0, 10, &be_const_str_write_bytes); +be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); +be_define_const_str(type_error, "type_error", 3789613824u, 0, 10, NULL); be_define_const_str(udp, "udp", 1253872004u, 0, 3, NULL); be_define_const_str(unknown_X20instruction, "unknown instruction", 1093911841u, 0, 19, NULL); be_define_const_str(unsubscribe, "unsubscribe", 4190043798u, 0, 11, NULL); @@ -842,7 +845,7 @@ be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL); be_define_const_str(uuid4, "uuid4", 1153582450u, 0, 5, NULL); be_define_const_str(v, "v", 4077666505u, 0, 1, NULL); be_define_const_str(value, "value", 1113510858u, 0, 5, NULL); -be_define_const_str(value_error, "value_error", 773297791u, 0, 11, &be_const_str_class); +be_define_const_str(value_error, "value_error", 773297791u, 0, 11, NULL); be_define_const_str(valuer_error, "valuer_error", 2567947105u, 0, 12, NULL); be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); be_define_const_str(w, "w", 4060888886u, 0, 1, NULL); @@ -854,9 +857,9 @@ be_define_const_str(web_add_handler, "web_add_handler", 3990174962u, 0, 15, NULL be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL); be_define_const_str(web_add_management_button, "web_add_management_button", 2738877186u, 0, 25, NULL); be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL); -be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); +be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, &be_const_str_y); be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, NULL); -be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, NULL); +be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, &be_const_str_import); be_define_const_str(webserver, "webserver", 1572454038u, 0, 9, NULL); be_define_const_str(while, "while", 231090382u, 53, 5, NULL); be_define_const_str(widget_cb, "widget_cb", 2763583055u, 0, 9, NULL); @@ -865,43 +868,43 @@ be_define_const_str(widget_ctor_cb, "widget_ctor_cb", 876007560u, 0, 14, NULL); be_define_const_str(widget_ctor_impl, "widget_ctor_impl", 194252479u, 0, 16, NULL); be_define_const_str(widget_destructor, "widget_destructor", 4207388345u, 0, 17, NULL); be_define_const_str(widget_dtor_cb, "widget_dtor_cb", 3151545845u, 0, 14, NULL); -be_define_const_str(widget_dtor_impl, "widget_dtor_impl", 520430610u, 0, 16, NULL); -be_define_const_str(widget_editable, "widget_editable", 3821793286u, 0, 15, NULL); -be_define_const_str(widget_event, "widget_event", 1951408186u, 0, 12, &be_const_str_wire2); +be_define_const_str(widget_dtor_impl, "widget_dtor_impl", 520430610u, 0, 16, &be_const_str_x1); +be_define_const_str(widget_editable, "widget_editable", 3821793286u, 0, 15, &be_const_str_except); +be_define_const_str(widget_event, "widget_event", 1951408186u, 0, 12, NULL); be_define_const_str(widget_event_cb, "widget_event_cb", 1508466754u, 0, 15, NULL); be_define_const_str(widget_event_impl, "widget_event_impl", 2178430561u, 0, 17, NULL); be_define_const_str(widget_group_def, "widget_group_def", 1246968785u, 0, 16, NULL); be_define_const_str(widget_height_def, "widget_height_def", 3131667813u, 0, 17, NULL); be_define_const_str(widget_instance_size, "widget_instance_size", 2055354779u, 0, 20, NULL); -be_define_const_str(widget_struct_by_class, "widget_struct_by_class", 3806373842u, 0, 22, &be_const_str_var); +be_define_const_str(widget_struct_by_class, "widget_struct_by_class", 3806373842u, 0, 22, NULL); be_define_const_str(widget_struct_default, "widget_struct_default", 781673633u, 0, 21, NULL); be_define_const_str(widget_width_def, "widget_width_def", 3986078862u, 0, 16, NULL); -be_define_const_str(width, "width", 2508680735u, 0, 5, &be_const_str_wifi_bars); -be_define_const_str(width_def, "width_def", 1143717879u, 0, 9, &be_const_str_y1); -be_define_const_str(wifi, "wifi", 120087624u, 0, 4, &be_const_str_def); +be_define_const_str(width, "width", 2508680735u, 0, 5, NULL); +be_define_const_str(width_def, "width_def", 1143717879u, 0, 9, NULL); +be_define_const_str(wifi, "wifi", 120087624u, 0, 4, NULL); be_define_const_str(wifi_arcs, "wifi_arcs", 3838492904u, 0, 9, NULL); be_define_const_str(wifi_arcs_icon, "wifi_arcs_icon", 767180544u, 0, 14, NULL); be_define_const_str(wifi_bars, "wifi_bars", 653141243u, 0, 9, NULL); be_define_const_str(wifi_bars_icon, "wifi_bars_icon", 3641522557u, 0, 14, NULL); be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); -be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); -be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, &be_const_str_x1); +be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, &be_const_str_elif); +be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, &be_const_str_if); be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); -be_define_const_str(write, "write", 3190202204u, 0, 5, &be_const_str_continue); +be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL); -be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, &be_const_str_nil); -be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, &be_const_str_except); -be_define_const_str(write_file, "write_file", 3177658879u, 0, 10, NULL); +be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL); +be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, &be_const_str_end); +be_define_const_str(write_file, "write_file", 3177658879u, 0, 10, &be_const_str_as); be_define_const_str(write_gpio, "write_gpio", 2267940334u, 0, 10, NULL); be_define_const_str(x, "x", 4245442695u, 0, 1, NULL); be_define_const_str(x1, "x1", 274927234u, 0, 2, NULL); -be_define_const_str(xy, "xy", 1482915802u, 0, 2, NULL); +be_define_const_str(xy, "xy", 1482915802u, 0, 2, &be_const_str_continue); be_define_const_str(y, "y", 4228665076u, 0, 1, NULL); be_define_const_str(y1, "y1", 2355101727u, 0, 2, NULL); -be_define_const_str(year, "year", 2927578396u, 0, 4, &be_const_str_break); +be_define_const_str(year, "year", 2927578396u, 0, 4, NULL); be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); be_define_const_str(zero, "zero", 2339366755u, 0, 4, NULL); -be_define_const_str(zip, "zip", 2877453236u, 0, 3, NULL); +be_define_const_str(zip, "zip", 2877453236u, 0, 3, &be_const_str_while); be_define_const_str(_X7B, "{", 4262220314u, 0, 1, NULL); be_define_const_str(_X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, "{s}Batt Current{m}%.1f mA{e}", 866537156u, 0, 28, NULL); be_define_const_str(_X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, "{s}Batt Voltage{m}%.3f V{e}", 3184308199u, 0, 27, NULL); @@ -912,454 +915,456 @@ be_define_const_str(_X7B_X7D, "{}", 1415952421u, 0, 2, NULL); be_define_const_str(_X7D, "}", 4161554600u, 0, 1, NULL); static const bstring* const m_string_table[] = { - (const bstring *)&be_const_str_EVENT_DRAW_PART_END, - (const bstring *)&be_const_str_hue, - (const bstring *)&be_const_str_get_temp, - (const bstring *)&be_const_str_close, - (const bstring *)&be_const_str_Tasmota, - (const bstring *)&be_const_str_alternate, - (const bstring *)&be_const_str_widget_dtor_impl, - (const bstring *)&be_const_str__X2Ep, - (const bstring *)&be_const_str__X3E_X3D, - (const bstring *)&be_const_str_set_size, - (const bstring *)&be_const_str_draw_line, - (const bstring *)&be_const_str_GET, - (const bstring *)&be_const_str_pin, - (const bstring *)&be_const_str__X7B_X7D, - (const bstring *)&be_const_str_COLOR_WHITE, - (const bstring *)&be_const_str__X2C, - (const bstring *)&be_const_str_eth, - (const bstring *)&be_const_str_duration, - (const bstring *)&be_const_str__persist_X2Ejson, - (const bstring *)&be_const_str_POST, - (const bstring *)&be_const_str_SERIAL_7E2, - (const bstring *)&be_const_str__X22_X3A, NULL, - (const bstring *)&be_const_str_deg, - (const bstring *)&be_const_str_files, - (const bstring *)&be_const_str_draw_ctx, - (const bstring *)&be_const_str_hex, - (const bstring *)&be_const_str_gen_cb, - (const bstring *)&be_const_str__X2Ebe, - (const bstring *)&be_const_str_push, - (const bstring *)&be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str__X23autoexec_X2Ebe, - (const bstring *)&be_const_str_animate, - (const bstring *)&be_const_str_json_fdump_any, - (const bstring *)&be_const_str_cb_do_nothing, - (const bstring *)&be_const_str_ALIGN_LEFT_MID, - NULL, - (const bstring *)&be_const_str__rules, - (const bstring *)&be_const_str_coord_arr, - (const bstring *)&be_const_str_now, - (const bstring *)&be_const_str_False, - (const bstring *)&be_const_str_exec_tele, - (const bstring *)&be_const_str_cb_obj, - (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - (const bstring *)&be_const_str_every_250ms, - NULL, - (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, - (const bstring *)&be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, - (const bstring *)&be_const_str_TASMOTA, - (const bstring *)&be_const_str_real, - (const bstring *)&be_const_str_SERIAL_7O2, - (const bstring *)&be_const_str_MD5, - (const bstring *)&be_const_str__X2Elen, - (const bstring *)&be_const_str_get_size, - (const bstring *)&be_const_str__cmd, - (const bstring *)&be_const_str_remove_timer, - (const bstring *)&be_const_str_RGB, - (const bstring *)&be_const_str_arch, - (const bstring *)&be_const_str_WS2812, - NULL, - (const bstring *)&be_const_str_draw_arc_dsc_init, - (const bstring *)&be_const_str__write, - (const bstring *)&be_const_str_w, - (const bstring *)&be_const_str_raise, - (const bstring *)&be_const_str__X2Fstate_X2F, - (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, - (const bstring *)&be_const_str_webserver, - NULL, - (const bstring *)&be_const_str_ceil, - (const bstring *)&be_const_str_event_cb, - (const bstring *)&be_const_str_CT, + (const bstring *)&be_const_str_point, + (const bstring *)&be_const_str_check_privileged_access, (const bstring *)&be_const_str_energy_struct, - (const bstring *)&be_const_str__X2Eautoconf, - (const bstring *)&be_const_str_editable, - (const bstring *)&be_const_str__X2Ew, - (const bstring *)&be_const_str___iterator__, - (const bstring *)&be_const_str_super, - (const bstring *)&be_const_str__X22, - NULL, - (const bstring *)&be_const_str_set_ct, - NULL, - (const bstring *)&be_const_str__X3D_X3C_X3E_X21, - (const bstring *)&be_const_str__X2B, - (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str__X2Flights_X2F, - (const bstring *)&be_const_str__available, - (const bstring *)&be_const_str_detected_X20on_X20bus, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, - NULL, - (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20function, - (const bstring *)&be_const_str_get_log, - (const bstring *)&be_const_str__settings_def, - (const bstring *)&be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, - (const bstring *)&be_const_str__X2Fac, - (const bstring *)&be_const_str_ctypes_bytes_dyn, - (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, - (const bstring *)&be_const_str_connect, - (const bstring *)&be_const_str_I2C_Driver, - (const bstring *)&be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_area, - (const bstring *)&be_const_str_fromptr, - (const bstring *)&be_const_str_geti, - (const bstring *)&be_const_str_add_rule, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, - NULL, - (const bstring *)&be_const_str__filename, - (const bstring *)&be_const_str_obj_class_create_obj, - (const bstring *)&be_const_str_load, - (const bstring *)&be_const_str_addr, - (const bstring *)&be_const_str_init, - (const bstring *)&be_const_str_connected, - (const bstring *)&be_const_str_get_input_power_status, - (const bstring *)&be_const_str__t, - (const bstring *)&be_const_str_light, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, - (const bstring *)&be_const_str_read_sensors, - (const bstring *)&be_const_str_is_dirty, - (const bstring *)&be_const_str_SERIAL_7N2, - (const bstring *)&be_const_str_type_error, - (const bstring *)&be_const_str_, - NULL, - NULL, - (const bstring *)&be_const_str_is_first_time, - (const bstring *)&be_const_str_out_X20of_X20range, - (const bstring *)&be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_exec_cmd, - (const bstring *)&be_const_str_refr_size, - (const bstring *)&be_const_str_SERIAL_6N1, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, - (const bstring *)&be_const_str_return, - NULL, - (const bstring *)&be_const_str__drivers, - (const bstring *)&be_const_str_format, - (const bstring *)&be_const_str_set_zoom, - (const bstring *)&be_const_str_SERIAL_6O1, - (const bstring *)&be_const_str_RGBW, - (const bstring *)&be_const_str_CFG_X3A_X20removing_X20autoconf_X20files, - (const bstring *)&be_const_str__X20, - (const bstring *)&be_const_str_isrunning, - (const bstring *)&be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, - NULL, - (const bstring *)&be_const_str_Trigger, - (const bstring *)&be_const_str_HTTP_POST, - (const bstring *)&be_const_str_True, - (const bstring *)&be_const_str_Parameter_X20error, - NULL, - (const bstring *)&be_const_str_debug, - (const bstring *)&be_const_str_SERIAL_7E1, - (const bstring *)&be_const_str_value, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, - NULL, - (const bstring *)&be_const_str_consume_mono, - (const bstring *)&be_const_str__X3F, - (const bstring *)&be_const_str_read24, - (const bstring *)&be_const_str_assign_rmt, - (const bstring *)&be_const_str_SERIAL_5N2, - (const bstring *)&be_const_str__X21_X3D_X3D, - (const bstring *)&be_const_str_EVENT_DELETE, - (const bstring *)&be_const_str_local, - (const bstring *)&be_const_str_pow, - (const bstring *)&be_const_str_compile, - (const bstring *)&be_const_str_remote_port, - (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - (const bstring *)&be_const_str_call_native, - (const bstring *)&be_const_str_RELAY, - (const bstring *)&be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback, - (const bstring *)&be_const_str_CFG_X3A_X20return_code_X3D_X25i, - (const bstring *)&be_const_str_content_send, - NULL, - (const bstring *)&be_const_str_file, - NULL, - (const bstring *)&be_const_str_srand, - (const bstring *)&be_const_str_encrypt, - (const bstring *)&be_const_str_SERIAL_5E1, - (const bstring *)&be_const_str__X23display_X2Eini, - (const bstring *)&be_const_str_url_encode, - NULL, - (const bstring *)&be_const_str_EC_C25519, - (const bstring *)&be_const_str_chars_in_string, - (const bstring *)&be_const_str_b, - (const bstring *)&be_const_str_lv_extra, - NULL, - (const bstring *)&be_const_str_atleast1, - (const bstring *)&be_const_str_content_start, - (const bstring *)&be_const_str_k, - (const bstring *)&be_const_str_content_stop, - (const bstring *)&be_const_str_COLOR_BLACK, - (const bstring *)&be_const_str_get_power, - (const bstring *)&be_const_str_started, - (const bstring *)&be_const_str_widget_instance_size, - (const bstring *)&be_const_str_BUTTON_CONFIGURATION, - (const bstring *)&be_const_str_read13, - (const bstring *)&be_const_str_hue_ntv, - (const bstring *)&be_const_str_leds, - (const bstring *)&be_const_str_contains, - (const bstring *)&be_const_str_AudioFileSourceFS, - (const bstring *)&be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, - (const bstring *)&be_const_str_clock_icon, - (const bstring *)&be_const_str_cosh, - (const bstring *)&be_const_str__X2E_X2E, - (const bstring *)&be_const_str_param, - (const bstring *)&be_const_str__crons, - (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, - (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, - (const bstring *)&be_const_str__X2F, - (const bstring *)&be_const_str_atan, - (const bstring *)&be_const_str_str, - (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, - (const bstring *)&be_const_str_draw_line_dsc_init, - (const bstring *)&be_const_str_autoexec, - (const bstring *)&be_const_str_AudioOutput, - (const bstring *)&be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, - (const bstring *)&be_const_str_widget_event, - (const bstring *)&be_const_str_add_light, - (const bstring *)&be_const_str__X3D, - (const bstring *)&be_const_str_call, - (const bstring *)&be_const_str__X28_X29, - (const bstring *)&be_const_str_INTERNAL_DAC, - NULL, - (const bstring *)&be_const_str__X3A, - (const bstring *)&be_const_str__X2Ep1, - (const bstring *)&be_const_str_assert, - (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, - (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, - (const bstring *)&be_const_str__settings_ptr, - NULL, - NULL, - (const bstring *)&be_const_str_label, - (const bstring *)&be_const_str__dirty, - (const bstring *)&be_const_str_atan2, - (const bstring *)&be_const_str_AudioOutputI2S, - NULL, - (const bstring *)&be_const_str_line_dsc, - (const bstring *)&be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, - (const bstring *)&be_const_str_digital_read, - (const bstring *)&be_const_str__X2F_X2Eautoconf, - (const bstring *)&be_const_str_CFG_X3A_X20running_X20, - (const bstring *)&be_const_str_can_show, - NULL, - (const bstring *)&be_const_str_traceback, - (const bstring *)&be_const_str_lv_clock_icon, - (const bstring *)&be_const_str_resp_cmnd_done, - (const bstring *)&be_const_str_bytes, - (const bstring *)&be_const_str_set_align, - NULL, - (const bstring *)&be_const_str_resp_cmnd_error, - (const bstring *)&be_const_str_get_percentage, - (const bstring *)&be_const_str_floor, - NULL, - (const bstring *)&be_const_str__X2F_X3Frst_X3D, - (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, - (const bstring *)&be_const_str_compress, - (const bstring *)&be_const_str_codedump, - NULL, - (const bstring *)&be_const_str_ins_ramp, - (const bstring *)&be_const_str_minute, - (const bstring *)&be_const_str_AudioGenerator, - (const bstring *)&be_const_str_driver_name, - (const bstring *)&be_const_str_publish, - (const bstring *)&be_const_str__X2Ebec, - (const bstring *)&be_const_str_add_fast_loop, - (const bstring *)&be_const_str_Restart_X201, - (const bstring *)&be_const_str_count, - (const bstring *)&be_const_str_SERIAL_6O2, - (const bstring *)&be_const_str_widget_constructor, - (const bstring *)&be_const_str_acos, - (const bstring *)&be_const_str__X2Esize, - NULL, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, - (const bstring *)&be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, - (const bstring *)&be_const_str__anonymous_, - (const bstring *)&be_const_str_bus, - (const bstring *)&be_const_str_get_vbus_current, - (const bstring *)&be_const_str_get, - (const bstring *)&be_const_str_preinit, - (const bstring *)&be_const_str_round_end, - (const bstring *)&be_const_str_AES_GCM, - (const bstring *)&be_const_str_content_flush, - (const bstring *)&be_const_str_WS2812_GRB, - NULL, - (const bstring *)&be_const_str_ct, - (const bstring *)&be_const_str__lvgl, - (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, - (const bstring *)&be_const_str_resolvecmnd, - (const bstring *)&be_const_str_widget_event_cb, - (const bstring *)&be_const_str_begin_multicast, - (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, - (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, - NULL, - (const bstring *)&be_const_str_depower, - (const bstring *)&be_const_str_CFG_X3A_X20ran_X20_X20, - (const bstring *)&be_const_str_internal_error, - (const bstring *)&be_const_str_destructor_cb, - (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, - (const bstring *)&be_const_str_public_key, - (const bstring *)&be_const_str_read, - (const bstring *)&be_const_str_remove_cmd, - (const bstring *)&be_const_str_content_button, - NULL, - (const bstring *)&be_const_str__def, - NULL, - (const bstring *)&be_const_str_SERIAL_7O1, - (const bstring *)&be_const_str_class_init_obj, - (const bstring *)&be_const_str_f, - NULL, - (const bstring *)&be_const_str_abs, - (const bstring *)&be_const_str_Wire, - (const bstring *)&be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, - (const bstring *)&be_const_str_SERIAL_7N1, - NULL, - (const bstring *)&be_const_str_get_hor_res, - (const bstring *)&be_const_str_add_event_cb, - (const bstring *)&be_const_str_pop_path, + (const bstring *)&be_const_str_clear, (const bstring *)&be_const_str_pixel_count, - (const bstring *)&be_const_str_classname, - (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, + (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, + (const bstring *)&be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, NULL, - (const bstring *)&be_const_str_add_cmd, - (const bstring *)&be_const_str_get_pixel_color, - (const bstring *)&be_const_str__global_def, - (const bstring *)&be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20, - (const bstring *)&be_const_str_connection_error, NULL, - (const bstring *)&be_const_str_sys, - (const bstring *)&be_const_str_arg, - (const bstring *)&be_const_str__X23preinit_X2Ebe, - (const bstring *)&be_const_str__X23autoexec_X2Ebat, - (const bstring *)&be_const_str__X23, - (const bstring *)&be_const_str_None, - (const bstring *)&be_const_str_get_style_line_color, - (const bstring *)&be_const_str__ccmd, - (const bstring *)&be_const_str_AudioFileSource, - (const bstring *)&be_const_str_I2C_X3A, - (const bstring *)&be_const_str_RES_OK, - (const bstring *)&be_const_str_Auto_X2Dconfiguration, - NULL, - (const bstring *)&be_const_str_input, - (const bstring *)&be_const_str_hue_status, - (const bstring *)&be_const_str_get_free_heap, - (const bstring *)&be_const_str__class, - (const bstring *)&be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, - (const bstring *)&be_const_str_get_light, + (const bstring *)&be_const_str__t, + (const bstring *)&be_const_str_cb_event_closure, + (const bstring *)&be_const_str_time_str, + (const bstring *)&be_const_str_content_send, + (const bstring *)&be_const_str__X23display_X2Eini, + (const bstring *)&be_const_str_time_reached, + (const bstring *)&be_const_str_False, + (const bstring *)&be_const_str_gamma10, + (const bstring *)&be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, (const bstring *)&be_const_str__X3E, - (const bstring *)&be_const_str__X3Clambda_X3E, - (const bstring *)&be_const_str_base_class, - (const bstring *)&be_const_str_false, - (const bstring *)&be_const_str_has_X20already_X20an_X20event_X20callback, - (const bstring *)&be_const_str__X2Etapp, + (const bstring *)&be_const_str_line_dsc, + (const bstring *)&be_const_str_RGBW, + (const bstring *)&be_const_str_sys, + (const bstring *)&be_const_str_has, NULL, + (const bstring *)&be_const_str__X2F_X2Eautoconf, + (const bstring *)&be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E, + NULL, + (const bstring *)&be_const_str__X2Fac, + NULL, + (const bstring *)&be_const_str_pin_used, + (const bstring *)&be_const_str_ccronexpr, + (const bstring *)&be_const_str_AudioGenerator, + NULL, + (const bstring *)&be_const_str_lvgl_event_dispatch, + (const bstring *)&be_const_str_is_running, + (const bstring *)&be_const_str_to_gamma, + (const bstring *)&be_const_str__X3C, + (const bstring *)&be_const_str_PART_MAIN, + (const bstring *)&be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, + NULL, + (const bstring *)&be_const_str_SERIAL_5N2, + (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, + (const bstring *)&be_const_str__lvgl, + NULL, + (const bstring *)&be_const_str_get_style_bg_color, + (const bstring *)&be_const_str__X3D, + (const bstring *)&be_const_str_read_bytes, NULL, (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, + (const bstring *)&be_const_str_detect, + (const bstring *)&be_const_str_erase, + (const bstring *)&be_const_str___lower__, + (const bstring *)&be_const_str_SERIAL_8E2, + (const bstring *)&be_const_str_I2C_Driver, + (const bstring *)&be_const_str_search, + (const bstring *)&be_const_str_local, + (const bstring *)&be_const_str_module, + (const bstring *)&be_const_str_Unknown_X20command, + (const bstring *)&be_const_str_h, + (const bstring *)&be_const_str_OPTION_A, + (const bstring *)&be_const_str_deregister_obj, + (const bstring *)&be_const_str_AES_GCM, + (const bstring *)&be_const_str_remove_timer, + (const bstring *)&be_const_str_get_pixel_color, + (const bstring *)&be_const_str_autorun, + (const bstring *)&be_const_str_introspect, NULL, - (const bstring *)&be_const_str_byte, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, - (const bstring *)&be_const_str_item, - NULL, - (const bstring *)&be_const_str__X25s_X2Eautoconf, - (const bstring *)&be_const_str_SERIAL_5O1, - (const bstring *)&be_const_str__, - (const bstring *)&be_const_str_rule, - (const bstring *)&be_const_str_PART_MAIN, - (const bstring *)&be_const_str_splash_init, - (const bstring *)&be_const_str_SERIAL_5E2, + (const bstring *)&be_const_str_SERIAL_5N1, + (const bstring *)&be_const_str_SERIAL_6O2, + (const bstring *)&be_const_str_BUTTON_CONFIGURATION, (const bstring *)&be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker, - (const bstring *)&be_const_str_fromstring, - (const bstring *)&be_const_str_arg_size, - (const bstring *)&be_const_str_closure, - (const bstring *)&be_const_str__X3D_X3D, - (const bstring *)&be_const_str_invalid_X20GPIO_X20number, NULL, - (const bstring *)&be_const_str_HTTP_GET, + (const bstring *)&be_const_str_char, + (const bstring *)&be_const_str_lv_event_cb, + (const bstring *)&be_const_str_resp_cmnd_done, + (const bstring *)&be_const_str_matrix, + (const bstring *)&be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, + (const bstring *)&be_const_str_COLOR_WHITE, + (const bstring *)&be_const_str_splash_remove, + (const bstring *)&be_const_str_SERIAL_8E1, + (const bstring *)&be_const_str__X2Ebec, NULL, - (const bstring *)&be_const_str_check_privileged_access, - (const bstring *)&be_const_str__X0A, + (const bstring *)&be_const_str_MAX_RMT, + (const bstring *)&be_const_str_add_header, + (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, + (const bstring *)&be_const_str__X2Flights_X2F, + NULL, + (const bstring *)&be_const_str_pop, + (const bstring *)&be_const_str___iterator__, + (const bstring *)&be_const_str_memory, + (const bstring *)&be_const_str__rules, + (const bstring *)&be_const_str_kv, + NULL, + (const bstring *)&be_const_str_copy, + (const bstring *)&be_const_str__X7B_X7D, + (const bstring *)&be_const_str_SERIAL_6O1, + (const bstring *)&be_const_str_json_fdump_map, + NULL, + (const bstring *)&be_const_str_set_align, (const bstring *)&be_const_str__X3C_X3D, + (const bstring *)&be_const_str_dump, + (const bstring *)&be_const_str_get_bat_charge_current, + NULL, + (const bstring *)&be_const_str_lv_wifi_bars_icon, + (const bstring *)&be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29, + (const bstring *)&be_const_str_INTERNAL_PDM, + (const bstring *)&be_const_str_lv_signal_bars, + (const bstring *)&be_const_str_widget_editable, + (const bstring *)&be_const_str_set_ldo_enable, + (const bstring *)&be_const_str_closure, + (const bstring *)&be_const_str_concat, + NULL, + (const bstring *)&be_const_str_b, + (const bstring *)&be_const_str_HTTP_POST, + (const bstring *)&be_const_str_draw_ctx, + (const bstring *)&be_const_str_classof, + (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, + (const bstring *)&be_const_str_del, + (const bstring *)&be_const_str_collect, + (const bstring *)&be_const_str_SERIAL_8O1, + (const bstring *)&be_const_str__X23autoexec_X2Ebat, + (const bstring *)&be_const_str_available, + (const bstring *)&be_const_str_read13, + (const bstring *)&be_const_str_set_channels, + (const bstring *)&be_const_str_bool, + (const bstring *)&be_const_str_fast_loop, + (const bstring *)&be_const_str_abs, + (const bstring *)&be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_SERIAL_8O2, + (const bstring *)&be_const_str_EVENT_DRAW_PART_END, + (const bstring *)&be_const_str_read_sensors, + NULL, + (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, + NULL, + (const bstring *)&be_const_str_tasmota_log_reader, + (const bstring *)&be_const_str__X2B, + (const bstring *)&be_const_str_class, + (const bstring *)&be_const_str_SERIAL_6E1, + (const bstring *)&be_const_str_event, + (const bstring *)&be_const_str_a, + (const bstring *)&be_const_str_screenshot, + (const bstring *)&be_const_str_arc_dsc, + NULL, + (const bstring *)&be_const_str__X21_X3D_X3D, + NULL, + (const bstring *)&be_const_str_bri, + (const bstring *)&be_const_str_SERIAL_6E2, + (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str__filename, + (const bstring *)&be_const_str_splash, + (const bstring *)&be_const_str_Restart_X201, + (const bstring *)&be_const_str_set_width, + NULL, + NULL, + (const bstring *)&be_const_str_get_bat_current, + (const bstring *)&be_const_str_chars_in_string, (const bstring *)&be_const_str__X21_X3D, NULL, - NULL, - NULL, - (const bstring *)&be_const_str_autorun, - NULL, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, - NULL, - (const bstring *)&be_const_str_x, - (const bstring *)&be_const_str__request_from, - (const bstring *)&be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, - (const bstring *)&be_const_str_model, - (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, - (const bstring *)&be_const_str_Unknown_X20command, - (const bstring *)&be_const_str_add_cron, - (const bstring *)&be_const_str_rand, - NULL, - (const bstring *)&be_const_str_publish_result, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_dac_voltage, + (const bstring *)&be_const_str_exec_cmd, + (const bstring *)&be_const_str_get_cb_list, (const bstring *)&be_const_str__X2E, - (const bstring *)&be_const_str_set_alternate, - (const bstring *)&be_const_str_instance_X20required, - (const bstring *)&be_const_str_group_def, - (const bstring *)&be_const_str_lv_wifi_arcs_icon, - (const bstring *)&be_const_str_resp_cmnd, + (const bstring *)&be_const_str_set_first_time, + (const bstring *)&be_const_str__global_addr, + (const bstring *)&be_const_str__X28_X29, NULL, - (const bstring *)&be_const_str_AudioGeneratorWAV, + (const bstring *)&be_const_str__persist_X2Ejson, + (const bstring *)&be_const_str__def, + (const bstring *)&be_const_str_classname, NULL, - (const bstring *)&be_const_str_cmd_res, - (const bstring *)&be_const_str__X3C, - (const bstring *)&be_const_str_cos, - (const bstring *)&be_const_str_Tele, - (const bstring *)&be_const_str_clear, - (const bstring *)&be_const_str_add_handler, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, - (const bstring *)&be_const_str_month, - (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X20, - (const bstring *)&be_const_str_get_bri, - (const bstring *)&be_const_str__archive, - (const bstring *)&be_const_str__X23init_X2Ebat, - (const bstring *)&be_const_str_remove_cron, - (const bstring *)&be_const_str_set_xy, - (const bstring *)&be_const_str_bri, - (const bstring *)&be_const_str__splash, - (const bstring *)&be_const_str__energy, - (const bstring *)&be_const_str_json, - (const bstring *)&be_const_str__X5D, - (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_introspect, - (const bstring *)&be_const_str_read8, + (const bstring *)&be_const_str__X2F, + (const bstring *)&be_const_str_light_to_id, + (const bstring *)&be_const_str__ptr, + (const bstring *)&be_const_str_None, + (const bstring *)&be_const_str_SERIAL_7N1, NULL, - (const bstring *)&be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range, - (const bstring *)&be_const_str_isinstance, - NULL, - (const bstring *)&be_const_str_pct, + (const bstring *)&be_const_str_AXP192, + (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, + (const bstring *)&be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, + (const bstring *)&be_const_str__X2C, + (const bstring *)&be_const_str_every_50ms, (const bstring *)&be_const_str_tostring, - (const bstring *)&be_const_str__p, - (const bstring *)&be_const_str_event, - (const bstring *)&be_const_str_STATE_DEFAULT, - NULL, - (const bstring *)&be_const_str_OpusDecoder, - (const bstring *)&be_const_str_h, - (const bstring *)&be_const_str_run_deferred, - (const bstring *)&be_const_str_tele, (const bstring *)&be_const_str_finish, - (const bstring *)&be_const_str_font_embedded + (const bstring *)&be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, + NULL, + (const bstring *)&be_const_str_i2c_enabled, + (const bstring *)&be_const_str_RGB, + (const bstring *)&be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, + (const bstring *)&be_const_str_count, + (const bstring *)&be_const_str_full_status, + (const bstring *)&be_const_str_offset, + (const bstring *)&be_const_str_try_rule, + (const bstring *)&be_const_str__X5B, + (const bstring *)&be_const_str__write, + (const bstring *)&be_const_str_get_temp, + NULL, + (const bstring *)&be_const_str__X2Eautoconf, + (const bstring *)&be_const_str__X22, + (const bstring *)&be_const_str_AudioGeneratorMP3, + (const bstring *)&be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, + (const bstring *)&be_const_str_widget_event_cb, + (const bstring *)&be_const_str_get_height, + (const bstring *)&be_const_str__error, + (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, + (const bstring *)&be_const_str_init_draw_arc_dsc, + (const bstring *)&be_const_str_widget_struct_default, + (const bstring *)&be_const_str__X23, + (const bstring *)&be_const_str_arg, + (const bstring *)&be_const_str_event_send, + (const bstring *)&be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, + (const bstring *)&be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E, + (const bstring *)&be_const_str_set_text, + (const bstring *)&be_const_str_cosh, + (const bstring *)&be_const_str__X2502d_X25s_X2502d, + (const bstring *)&be_const_str_imin, + (const bstring *)&be_const_str__X20, + (const bstring *)&be_const_str__anonymous_, + (const bstring *)&be_const_str__splash, + (const bstring *)&be_const_str_SERIAL_5E2, + (const bstring *)&be_const_str__X3D_X3D, + (const bstring *)&be_const_str_widget_struct_by_class, + NULL, + (const bstring *)&be_const_str_WS2812, + (const bstring *)&be_const_str_dirty, + (const bstring *)&be_const_str_ins_ramp, + NULL, + (const bstring *)&be_const_str_lv_point_arr, + (const bstring *)&be_const_str_SERIAL_5E1, + (const bstring *)&be_const_str_Wire, + (const bstring *)&be_const_str_set_ct, + NULL, + (const bstring *)&be_const_str__rmt, + NULL, + NULL, + (const bstring *)&be_const_str_EVENT_DRAW_PART_BEGIN, + (const bstring *)&be_const_str_get_option, + (const bstring *)&be_const_str_pi, + (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, + (const bstring *)&be_const_str_AudioOutputI2S, + (const bstring *)&be_const_str__X22_X3A, + (const bstring *)&be_const_str_get_bat_voltage, + (const bstring *)&be_const_str_read24, + (const bstring *)&be_const_str_SERIAL_6N2, + (const bstring *)&be_const_str_flush, + (const bstring *)&be_const_str_send_multicast, + (const bstring *)&be_const_str_Auto_X2Dconfiguration, + (const bstring *)&be_const_str_CT, + (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, + NULL, + (const bstring *)&be_const_str_ctor, + NULL, + NULL, + (const bstring *)&be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, + (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_geti, + (const bstring *)&be_const_str__X23autoexec_X2Ebe, + (const bstring *)&be_const_str_delay, + (const bstring *)&be_const_str_constructor_cb, + (const bstring *)&be_const_str_EVENT_DRAW_MAIN, + (const bstring *)&be_const_str_acos, + (const bstring *)&be_const_str_AudioFileSource, + (const bstring *)&be_const_str_seg7_font, + (const bstring *)&be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function, + (const bstring *)&be_const_str_byte, + (const bstring *)&be_const_str_rotate, + (const bstring *)&be_const_str_lv_wifi_arcs_icon, + (const bstring *)&be_const_str__settings_ptr, + (const bstring *)&be_const_str__X3D_X3C_X3E_X21, + (const bstring *)&be_const_str_obj_class_create_obj, + (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, + (const bstring *)&be_const_str_load_freetype_font, + (const bstring *)&be_const_str_add_handler, + NULL, + (const bstring *)&be_const_str_function, + (const bstring *)&be_const_str_SERIAL_8N2, + (const bstring *)&be_const_str__debug_present, + (const bstring *)&be_const_str__X2Esize, + (const bstring *)&be_const_str_set_style_text_color, + NULL, + (const bstring *)&be_const_str_lv_wifi_arcs, + (const bstring *)&be_const_str__X2Fstate_X2F, + (const bstring *)&be_const_str_exists, + NULL, + (const bstring *)&be_const_str_SERIAL_8N1, + (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, + NULL, + (const bstring *)&be_const_str_SERIAL_7O2, + (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, + (const bstring *)&be_const_str_CFG_X3A_X20removing_X20autoconf_X20files, + (const bstring *)&be_const_str_True, + NULL, + (const bstring *)&be_const_str__ccmd, + (const bstring *)&be_const_str_fast_loop_enabled, + (const bstring *)&be_const_str_set_hue16sat, + (const bstring *)&be_const_str__end_transmission, + (const bstring *)&be_const_str_SERIAL_7O1, + (const bstring *)&be_const_str_elements_X20must_X20be_X20a_X20lv_point, + (const bstring *)&be_const_str_list_handlers, + (const bstring *)&be_const_str_gamma8, + (const bstring *)&be_const_str__drivers, + (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, + (const bstring *)&be_const_str_now, + (const bstring *)&be_const_str__timers, + (const bstring *)&be_const_str_content_button, + (const bstring *)&be_const_str_find_op, + (const bstring *)&be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, + (const bstring *)&be_const_str_get_current_module_path, + (const bstring *)&be_const_str_MD5, + (const bstring *)&be_const_str_ct, + (const bstring *)&be_const_str_alternate, + (const bstring *)&be_const_str__X25s_X2Eautoconf, + (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, + (const bstring *)&be_const_str_invalidate, + (const bstring *)&be_const_str_cmd, + (const bstring *)&be_const_str_draw_arc_dsc_init, + (const bstring *)&be_const_str_tele, + (const bstring *)&be_const_str_eth, + (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_OneWire, + (const bstring *)&be_const_str_consume_mono, + (const bstring *)&be_const_str__request_from, + NULL, + (const bstring *)&be_const_str_Parameter_X20error, + (const bstring *)&be_const_str_INTERNAL_DAC, + (const bstring *)&be_const_str__begin_transmission, + (const bstring *)&be_const_str_DIMMER, + (const bstring *)&be_const_str_uuid4, + (const bstring *)&be_const_str_rule, + (const bstring *)&be_const_str_get_coords, + (const bstring *)&be_const_str_call, + (const bstring *)&be_const_str__archive, + (const bstring *)&be_const_str_I2C_X3A, + (const bstring *)&be_const_str__X2Ew, + (const bstring *)&be_const_str_srand, + (const bstring *)&be_const_str_AudioGeneratorWAV, + (const bstring *)&be_const_str_get, + (const bstring *)&be_const_str_COLOR_BLACK, + (const bstring *)&be_const_str_, + (const bstring *)&be_const_str_CFG_X3A_X20ran_X20_X20, + (const bstring *)&be_const_str_Trigger, + (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, + (const bstring *)&be_const_str_create_matrix, + NULL, + (const bstring *)&be_const_str_assert, + (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, + (const bstring *)&be_const_str_SERIAL_5O1, + (const bstring *)&be_const_str_bytes, + (const bstring *)&be_const_str_animators, + (const bstring *)&be_const_str_rounded, + (const bstring *)&be_const_str_min, + (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, + (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, + (const bstring *)&be_const_str__X2Ebe, + NULL, + (const bstring *)&be_const_str_escape, + (const bstring *)&be_const_str_editable, + (const bstring *)&be_const_str_wire_scan, + (const bstring *)&be_const_str_remove, + (const bstring *)&be_const_str__energy, + (const bstring *)&be_const_str_x, + (const bstring *)&be_const_str_get_style_pad_right, + (const bstring *)&be_const_str_content_send_style, + (const bstring *)&be_const_str_cb_obj, + NULL, + (const bstring *)&be_const_str_calldepth, + (const bstring *)&be_const_str_can_show, + (const bstring *)&be_const_str__X23preinit_X2Ebe, + (const bstring *)&be_const_str_consume_silence, + (const bstring *)&be_const_str_STATE_DEFAULT, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, + (const bstring *)&be_const_str_imax, + (const bstring *)&be_const_str_atan, + (const bstring *)&be_const_str_SERIAL_5O2, + (const bstring *)&be_const_str_depower, + (const bstring *)&be_const_str__fl, + (const bstring *)&be_const_str_set, + NULL, + (const bstring *)&be_const_str__X2Ep, + (const bstring *)&be_const_str_attrdump, + (const bstring *)&be_const_str__settings_def, + (const bstring *)&be_const_str_CFG_X3A_X20return_code_X3D_X25i, + (const bstring *)&be_const_str_set_zoom, + (const bstring *)&be_const_str_get_vbus_current, + (const bstring *)&be_const_str_width_def, + (const bstring *)&be_const_str_connection_error, + (const bstring *)&be_const_str_groups, + (const bstring *)&be_const_str_ip, + (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20function, + (const bstring *)&be_const_str_get_switch, + NULL, + (const bstring *)&be_const_str__X2Ep1, + (const bstring *)&be_const_str_EXTERNAL_I2S, + (const bstring *)&be_const_str_atleast1, + (const bstring *)&be_const_str__available, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + (const bstring *)&be_const_str_last_modified, + NULL, + NULL, + NULL, + (const bstring *)&be_const_str__X2Ep2, + (const bstring *)&be_const_str_compile, + (const bstring *)&be_const_str_ins_goto, + (const bstring *)&be_const_str_consume_stereo, + (const bstring *)&be_const_str_get_size, + (const bstring *)&be_const_str_instance, + NULL, + (const bstring *)&be_const_str_asin, + (const bstring *)&be_const_str_add_driver, + (const bstring *)&be_const_str_ceil, + (const bstring *)&be_const_str_Unknown, + NULL, + (const bstring *)&be_const_str_splash_init, + (const bstring *)&be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str__X0A, + (const bstring *)&be_const_str_preinit, + (const bstring *)&be_const_str__X23init_X2Ebat, + (const bstring *)&be_const_str_Tasmota, + (const bstring *)&be_const_str_instance_X20required, + (const bstring *)&be_const_str__p, + (const bstring *)&be_const_str_add_light, + (const bstring *)&be_const_str__buffer, + (const bstring *)&be_const_str_EC_C25519, + (const bstring *)&be_const_str_readbytes, + (const bstring *)&be_const_str__X2E_X2E, + NULL, + (const bstring *)&be_const_str_POST, + (const bstring *)&be_const_str_find, + (const bstring *)&be_const_str__X3A, + (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X20, + (const bstring *)&be_const_str_add_cmd, + (const bstring *)&be_const_str_gamma, + NULL, + (const bstring *)&be_const_str_resp_cmnd_failed, + (const bstring *)&be_const_str_Leds, + (const bstring *)&be_const_str_init_draw_line_dsc, + (const bstring *)&be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, + (const bstring *)&be_const_str_type_error, + (const bstring *)&be_const_str_sqrt, + (const bstring *)&be_const_str_before_del, + (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20list, + (const bstring *)&be_const_str_counters, + (const bstring *)&be_const_str_create_segment, + NULL, + NULL }; static const struct bconststrtab m_const_string_table = { - .size = 444, - .count = 912, + .size = 446, + .count = 915, .table = m_string_table }; diff --git a/lib/libesp32_lvgl/lv_berry/generate/be_lv_c_mapping.h b/lib/libesp32_lvgl/lv_berry/generate/be_lv_c_mapping.h index a6a0be0a7..25be31969 100644 --- a/lib/libesp32_lvgl/lv_berry/generate/be_lv_c_mapping.h +++ b/lib/libesp32_lvgl/lv_berry/generate/be_lv_c_mapping.h @@ -379,7 +379,7 @@ const be_ntv_func_def_t lv_obj_func[] = { { "move_foreground", { (const void*) &lv_obj_move_foreground, "", "(lv.lv_obj)" } }, { "move_to", { (const void*) &lv_obj_move_to, "", "(lv.lv_obj)ii" } }, { "move_to_index", { (const void*) &lv_obj_move_to_index, "", "(lv.lv_obj)i" } }, - { "readjust_scroll", { (const void*) &lv_obj_readjust_scroll, "", "(lv.lv_obj)(lv.lv_anim_enable)" } }, + { "readjust_scroll", { (const void*) &lv_obj_readjust_scroll, "", "(lv.lv_obj)i" } }, { "refr_pos", { (const void*) &lv_obj_refr_pos, "", "(lv.lv_obj)" } }, { "refr_size", { (const void*) &lv_obj_refr_size, "b", "(lv.lv_obj)" } }, { "refresh_ext_draw_size", { (const void*) &lv_obj_refresh_ext_draw_size, "", "(lv.lv_obj)" } }, @@ -391,13 +391,13 @@ const be_ntv_func_def_t lv_obj_func[] = { { "remove_local_style_prop", { (const void*) &lv_obj_remove_local_style_prop, "b", "(lv.lv_obj)ii" } }, { "remove_style", { (const void*) &lv_obj_remove_style, "", "(lv.lv_obj)(lv.lv_style)i" } }, { "remove_style_all", { (const void*) &lv_obj_remove_style_all, "", "(lv.lv_obj)" } }, - { "scroll_by", { (const void*) &lv_obj_scroll_by, "", "(lv.lv_obj)ii(lv.lv_anim_enable)" } }, - { "scroll_by_bounded", { (const void*) &lv_obj_scroll_by_bounded, "", "(lv.lv_obj)ii(lv.lv_anim_enable)" } }, - { "scroll_to", { (const void*) &lv_obj_scroll_to, "", "(lv.lv_obj)ii(lv.lv_anim_enable)" } }, - { "scroll_to_view", { (const void*) &lv_obj_scroll_to_view, "", "(lv.lv_obj)(lv.lv_anim_enable)" } }, - { "scroll_to_view_recursive", { (const void*) &lv_obj_scroll_to_view_recursive, "", "(lv.lv_obj)(lv.lv_anim_enable)" } }, - { "scroll_to_x", { (const void*) &lv_obj_scroll_to_x, "", "(lv.lv_obj)i(lv.lv_anim_enable)" } }, - { "scroll_to_y", { (const void*) &lv_obj_scroll_to_y, "", "(lv.lv_obj)i(lv.lv_anim_enable)" } }, + { "scroll_by", { (const void*) &lv_obj_scroll_by, "", "(lv.lv_obj)iii" } }, + { "scroll_by_bounded", { (const void*) &lv_obj_scroll_by_bounded, "", "(lv.lv_obj)iii" } }, + { "scroll_to", { (const void*) &lv_obj_scroll_to, "", "(lv.lv_obj)iii" } }, + { "scroll_to_view", { (const void*) &lv_obj_scroll_to_view, "", "(lv.lv_obj)i" } }, + { "scroll_to_view_recursive", { (const void*) &lv_obj_scroll_to_view_recursive, "", "(lv.lv_obj)i" } }, + { "scroll_to_x", { (const void*) &lv_obj_scroll_to_x, "", "(lv.lv_obj)ii" } }, + { "scroll_to_y", { (const void*) &lv_obj_scroll_to_y, "", "(lv.lv_obj)ii" } }, { "scrollbar_invalidate", { (const void*) &lv_obj_scrollbar_invalidate, "", "(lv.lv_obj)" } }, { "set_align", { (const void*) &lv_obj_set_align, "", "(lv.lv_obj)i" } }, { "set_content_height", { (const void*) &lv_obj_set_content_height, "", "(lv.lv_obj)i" } }, @@ -537,7 +537,7 @@ const be_ntv_func_def_t lv_obj_func[] = { { "swap", { (const void*) &lv_obj_swap, "", "(lv.lv_obj)(lv.lv_obj)" } }, { "tree_walk", { (const void*) &lv_obj_tree_walk, "", "(lv.lv_obj)^lv_obj_tree_walk_cb^." } }, { "update_layout", { (const void*) &lv_obj_update_layout, "", "(lv.lv_obj)" } }, - { "update_snap", { (const void*) &lv_obj_update_snap, "", "(lv.lv_obj)(lv.lv_anim_enable)" } }, + { "update_snap", { (const void*) &lv_obj_update_snap, "", "(lv.lv_obj)i" } }, }; /* `lv_group` methods */ @@ -716,6 +716,19 @@ const be_ntv_func_def_t lv_spinner_func[] = { }; #endif // BE_LV_WIDGET_SPINNER +/* `lv_timer` methods */ +const be_ntv_func_def_t lv_timer_func[] = { + { "del", { (const void*) &lv_timer_del, "", "(lv.lv_timer)" } }, + { "get_next", { (const void*) &lv_timer_get_next, "lv.lv_timer", "(lv.lv_timer)" } }, + { "pause", { (const void*) &lv_timer_pause, "", "(lv.lv_timer)" } }, + { "ready", { (const void*) &lv_timer_ready, "", "(lv.lv_timer)" } }, + { "reset", { (const void*) &lv_timer_reset, "", "(lv.lv_timer)" } }, + { "resume", { (const void*) &lv_timer_resume, "", "(lv.lv_timer)" } }, + { "set_cb", { (const void*) &lv_timer_set_cb, "", "(lv.lv_timer)^lv_timer_cb^" } }, + { "set_period", { (const void*) &lv_timer_set_period, "", "(lv.lv_timer)i" } }, + { "set_repeat_count", { (const void*) &lv_timer_set_repeat_count, "", "(lv.lv_timer)i" } }, +}; + /* `lv_arc` methods */ #ifdef BE_LV_WIDGET_ARC const be_ntv_func_def_t lv_arc_func[] = { @@ -751,8 +764,8 @@ const be_ntv_func_def_t lv_bar_func[] = { { "get_value", { (const void*) &lv_bar_get_value, "i", "(lv.lv_obj)" } }, { "set_mode", { (const void*) &lv_bar_set_mode, "", "(lv.lv_obj)i" } }, { "set_range", { (const void*) &lv_bar_set_range, "", "(lv.lv_obj)ii" } }, - { "set_start_value", { (const void*) &lv_bar_set_start_value, "", "(lv.lv_obj)i(lv.lv_anim_enable)" } }, - { "set_value", { (const void*) &lv_bar_set_value, "", "(lv.lv_obj)i(lv.lv_anim_enable)" } }, + { "set_start_value", { (const void*) &lv_bar_set_start_value, "", "(lv.lv_obj)ii" } }, + { "set_value", { (const void*) &lv_bar_set_value, "", "(lv.lv_obj)ii" } }, }; #endif // BE_LV_WIDGET_BAR @@ -882,7 +895,7 @@ const be_ntv_func_def_t lv_roller_func[] = { { "get_selected", { (const void*) &lv_roller_get_selected, "i", "(lv.lv_obj)" } }, { "get_selected_str", { (const void*) &lv_roller_get_selected_str, "", "(lv.lv_obj)si" } }, { "set_options", { (const void*) &lv_roller_set_options, "", "(lv.lv_obj)s(lv.lv_roller_mode)" } }, - { "set_selected", { (const void*) &lv_roller_set_selected, "", "(lv.lv_obj)i(lv.lv_anim_enable)" } }, + { "set_selected", { (const void*) &lv_roller_set_selected, "", "(lv.lv_obj)ii" } }, { "set_visible_row_count", { (const void*) &lv_roller_set_visible_row_count, "", "(lv.lv_obj)i" } }, }; #endif // BE_LV_WIDGET_ROLLER @@ -896,10 +909,10 @@ const be_ntv_func_def_t lv_slider_func[] = { { "get_mode", { (const void*) &lv_slider_get_mode, "i", "(lv.lv_obj)" } }, { "get_value", { (const void*) &lv_slider_get_value, "i", "(lv.lv_obj)" } }, { "is_dragged", { (const void*) &lv_slider_is_dragged, "b", "(lv.lv_obj)" } }, - { "set_left_value", { (const void*) &lv_slider_set_left_value, "", "(lv.lv_obj)i(lv.lv_anim_enable)" } }, + { "set_left_value", { (const void*) &lv_slider_set_left_value, "", "(lv.lv_obj)ii" } }, { "set_mode", { (const void*) &lv_slider_set_mode, "", "(lv.lv_obj)i" } }, { "set_range", { (const void*) &lv_slider_set_range, "", "(lv.lv_obj)ii" } }, - { "set_value", { (const void*) &lv_slider_set_value, "", "(lv.lv_obj)i(lv.lv_anim_enable)" } }, + { "set_value", { (const void*) &lv_slider_set_value, "", "(lv.lv_obj)ii" } }, }; #endif // BE_LV_WIDGET_SLIDER @@ -998,6 +1011,7 @@ extern const bclass be_class_lv_switch; extern const bclass be_class_lv_table; extern const bclass be_class_lv_textarea; extern const bclass be_class_lv_theme; +extern const bclass be_class_lv_timer; // map of clases @@ -1079,6 +1093,7 @@ const be_ntv_class_def_t lv_classes[] = { { "lv_textarea", &be_class_lv_textarea, lv_textarea_func, sizeof(lv_textarea_func) / sizeof(lv_textarea_func[0]) }, #endif // BE_LV_WIDGET_TEXTAREA { "lv_theme", &be_class_lv_theme, lv_theme_func, sizeof(lv_theme_func) / sizeof(lv_theme_func[0]) }, + { "lv_timer", &be_class_lv_timer, lv_timer_func, sizeof(lv_timer_func) / sizeof(lv_timer_func[0]) }, }; const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]); @@ -1128,6 +1143,7 @@ const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]); #ifdef BE_LV_WIDGET_SPINNER int be_ntv_lv_spinner_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_create, "+_p", "(lv.lv_obj)ii"); } #endif // BE_LV_WIDGET_SPINNER + /* `lv_timer` methods */ /* `lv_arc` methods */ #ifdef BE_LV_WIDGET_ARC int be_ntv_lv_arc_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_create, "+_p", "(lv.lv_obj)"); } diff --git a/lib/libesp32_lvgl/lv_berry/generate/be_lvgl_module.c b/lib/libesp32_lvgl/lv_berry/generate/be_lvgl_module.c index f9bfe3d94..df19fd789 100644 --- a/lib/libesp32_lvgl/lv_berry/generate/be_lvgl_module.c +++ b/lib/libesp32_lvgl/lv_berry/generate/be_lvgl_module.c @@ -161,6 +161,11 @@ const be_ntv_func_def_t lv_func[] = { { "theme_openhasp_is_inited", { (const void*) &lv_theme_openhasp_is_inited, "b", "" } }, { "theme_set_apply_cb", { (const void*) &lv_theme_set_apply_cb, "", "(lv.lv_theme)^lv_theme_apply_cb^" } }, { "theme_set_parent", { (const void*) &lv_theme_set_parent, "", "(lv.lv_theme)(lv.lv_theme)" } }, + { "timer_create", { (const void*) &lv_timer_create, "lv.lv_timer", "^lv_timer_cb^i." } }, + { "timer_create_basic", { (const void*) &lv_timer_create_basic, "lv.lv_timer", "" } }, + { "timer_enable", { (const void*) &lv_timer_enable, "", "b" } }, + { "timer_get_idle", { (const void*) &lv_timer_get_idle, "i", "" } }, + { "timer_handler", { (const void*) &lv_timer_handler, "i", "" } }, { "trigo_cos", { (const void*) &lv_trigo_cos, "i", "i" } }, { "trigo_sin", { (const void*) &lv_trigo_sin, "i", "i" } }, diff --git a/lib/libesp32_lvgl/lv_berry/generate/be_lvgl_widgets_lib.c b/lib/libesp32_lvgl/lv_berry/generate/be_lvgl_widgets_lib.c index f900e51ce..f675e2037 100644 --- a/lib/libesp32_lvgl/lv_berry/generate/be_lvgl_widgets_lib.c +++ b/lib/libesp32_lvgl/lv_berry/generate/be_lvgl_widgets_lib.c @@ -693,6 +693,17 @@ extern int lvbe_spinbox_decrement(bvm *vm); /* `lv_spinner` external functions definitions */ extern int lvbe_spinner_create(bvm *vm); +/* `lv_timer` external functions definitions */ +extern int lvbe_timer_del(bvm *vm); +extern int lvbe_timer_pause(bvm *vm); +extern int lvbe_timer_resume(bvm *vm); +extern int lvbe_timer_set_cb(bvm *vm); +extern int lvbe_timer_set_period(bvm *vm); +extern int lvbe_timer_ready(bvm *vm); +extern int lvbe_timer_set_repeat_count(bvm *vm); +extern int lvbe_timer_reset(bvm *vm); +extern int lvbe_timer_get_next(bvm *vm); + /* `lv_arc` external functions definitions */ extern int lvbe_arc_create(bvm *vm); extern int lvbe_arc_set_start_angle(bvm *vm); @@ -919,6 +930,7 @@ extern int be_ntv_lv_meter_init(bvm *vm); extern int be_ntv_lv_msgbox_init(bvm *vm); extern int be_ntv_lv_spinbox_init(bvm *vm); extern int be_ntv_lv_spinner_init(bvm *vm); +extern int be_ntv_lv_timer_init(bvm *vm); extern int be_ntv_lv_arc_init(bvm *vm); extern int be_ntv_lv_bar_init(bvm *vm); extern int be_ntv_lv_btn_init(bvm *vm); @@ -965,6 +977,7 @@ extern const bclass be_class_lv_switch; extern const bclass be_class_lv_table; extern const bclass be_class_lv_textarea; extern const bclass be_class_lv_theme; +extern const bclass be_class_lv_timer; /******************************************************************** @@ -1053,6 +1066,23 @@ be_local_class(lv_disp, ); /*******************************************************************/ +/******************************************************************** +** Solidified class: lv_timer +********************************************************************/ +be_local_class(lv_timer, + 1, + NULL, + be_nested_map(4, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("init", 380752755, 4, -1), be_const_func(lv0_init) }, + { be_nested_key("tostring", -1995258651, 8, -1), be_const_func(lv_x_tostring) }, + { be_nested_key("_p", 1594591802, 2, -1), be_const_var(0) }, + { be_nested_key("member", 719708611, 6, 0), be_const_func(lv_x_member) }, + })), + be_str_literal("lv_timer") +); +/*******************************************************************/ + /******************************************************************** ** Solidified class: lv_font ********************************************************************/ @@ -1348,6 +1378,12 @@ void be_load_lv_spinner_class(bvm *vm) { be_pop(vm, 1); } +void be_load_lv_timer_class(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_timer); + be_setglobal(vm, "lv_timer"); + be_pop(vm, 1); +} + /******************************************************************** ** Solidified class: lv_arc ********************************************************************/ diff --git a/lib/libesp32_lvgl/lv_berry/mapping/lv_funcs.h b/lib/libesp32_lvgl/lv_berry/mapping/lv_funcs.h index e7306e77c..3398fe0e4 100644 --- a/lib/libesp32_lvgl/lv_berry/mapping/lv_funcs.h +++ b/lib/libesp32_lvgl/lv_berry/mapping/lv_funcs.h @@ -868,6 +868,22 @@ void lv_style_set_blend_mode(lv_style_t * style, lv_blend_mode_t value) void lv_style_set_layout(lv_style_t * style, uint16_t value) void lv_style_set_base_dir(lv_style_t * style, lv_base_dir_t value) +// ../../lvgl/src/misc/lv_timer.h +uint32_t lv_timer_handler(void) +lv_timer_t * lv_timer_create_basic(void) +lv_timer_t * lv_timer_create(lv_timer_cb_t timer_xcb, uint32_t period, void * user_data) +void lv_timer_del(lv_timer_t * timer) +void lv_timer_pause(lv_timer_t * timer) +void lv_timer_resume(lv_timer_t * timer) +void lv_timer_set_cb(lv_timer_t * timer, lv_timer_cb_t timer_cb) +void lv_timer_set_period(lv_timer_t * timer, uint32_t period) +void lv_timer_ready(lv_timer_t * timer) +void lv_timer_set_repeat_count(lv_timer_t * timer, int32_t repeat_count) +void lv_timer_reset(lv_timer_t * timer) +void lv_timer_enable(bool en) +uint8_t lv_timer_get_idle(void) +lv_timer_t * lv_timer_get_next(lv_timer_t * timer) + // ../../lvgl/src/widgets/lv_arc.h lv_obj_t * lv_arc_create(lv_obj_t * parent) void lv_arc_set_start_angle(lv_obj_t * arc, uint16_t start) diff --git a/lib/libesp32_lvgl/lv_berry/src/be_lvgl_glob_lib.c b/lib/libesp32_lvgl/lv_berry/src/be_lvgl_glob_lib.c index bc053a579..1571d4665 100644 --- a/lib/libesp32_lvgl/lv_berry/src/be_lvgl_glob_lib.c +++ b/lib/libesp32_lvgl/lv_berry/src/be_lvgl_glob_lib.c @@ -3,104 +3,6 @@ *******************************************************************/ #include "be_constobj.h" -/******************************************************************** -** Solidified function: get_object_from_ptr -********************************************************************/ -be_local_closure(LVGL_glob_get_object_from_ptr, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(cb_obj), - /* K1 */ be_nested_str(find), - }), - &be_const_str_get_object_from_ptr, - &be_const_str_solidified, - ( &(const binstruction[10]) { /* code */ - 0x88080100, // 0000 GETMBR R2 R0 K0 - 0x4C0C0000, // 0001 LDNIL R3 - 0x20080403, // 0002 NE R2 R2 R3 - 0x780A0004, // 0003 JMPF R2 #0009 - 0x88080100, // 0004 GETMBR R2 R0 K0 - 0x8C080501, // 0005 GETMET R2 R2 K1 - 0x5C100200, // 0006 MOVE R4 R1 - 0x7C080400, // 0007 CALL R2 2 - 0x80040400, // 0008 RET 1 R2 - 0x80000000, // 0009 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: widget_ctor_impl -********************************************************************/ -be_local_closure(LVGL_glob_widget_ctor_impl, /* name */ - be_nested_proto( - 10, /* nstack */ - 3, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 9]) { /* constants */ - /* K0 */ be_nested_str(introspect), - /* K1 */ be_nested_str(lv), - /* K2 */ be_nested_str(lv_obj_class), - /* K3 */ be_nested_str(get_object_from_ptr), - /* K4 */ be_nested_str(cb_obj), - /* K5 */ be_nested_str(find), - /* K6 */ be_nested_str(instance), - /* K7 */ be_nested_str(get), - /* K8 */ be_nested_str(widget_constructor), - }), - &be_const_str_widget_ctor_impl, - &be_const_str_solidified, - ( &(const binstruction[29]) { /* code */ - 0xA40E0000, // 0000 IMPORT R3 K0 - 0xB8120200, // 0001 GETNGBL R4 K1 - 0x8C100902, // 0002 GETMET R4 R4 K2 - 0x5C180200, // 0003 MOVE R6 R1 - 0x7C100400, // 0004 CALL R4 2 - 0x8C140103, // 0005 GETMET R5 R0 K3 - 0x5C1C0400, // 0006 MOVE R7 R2 - 0x7C140400, // 0007 CALL R5 2 - 0x88180104, // 0008 GETMBR R6 R0 K4 - 0x8C180D05, // 0009 GETMET R6 R6 K5 - 0x5C200A00, // 000A MOVE R8 R5 - 0x7C180400, // 000B CALL R6 2 - 0x781A0001, // 000C JMPF R6 #000F - 0x88180104, // 000D GETMBR R6 R0 K4 - 0x94140C05, // 000E GETIDX R5 R6 R5 - 0x60180004, // 000F GETGBL R6 G4 - 0x5C1C0A00, // 0010 MOVE R7 R5 - 0x7C180200, // 0011 CALL R6 1 - 0x1C180D06, // 0012 EQ R6 R6 K6 - 0x781A0007, // 0013 JMPF R6 #001C - 0x8C180707, // 0014 GETMET R6 R3 K7 - 0x5C200A00, // 0015 MOVE R8 R5 - 0x58240008, // 0016 LDCONST R9 K8 - 0x7C180600, // 0017 CALL R6 3 - 0x781A0002, // 0018 JMPF R6 #001C - 0x8C180B08, // 0019 GETMET R6 R5 K8 - 0x5C200800, // 001A MOVE R8 R4 - 0x7C180400, // 001B CALL R6 2 - 0x80000000, // 001C RET 0 - }) - ) -); -/*******************************************************************/ - - /******************************************************************** ** Solidified function: widget_cb ********************************************************************/ @@ -108,7 +10,7 @@ be_local_closure(LVGL_glob_widget_cb, /* name */ be_nested_proto( 5, /* nstack */ 1, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 1, /* has sup protos */ @@ -299,6 +201,236 @@ be_local_closure(LVGL_glob__anonymous_, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: make_cb +********************************************************************/ +be_local_closure(LVGL_glob_make_cb, /* name */ + be_nested_proto( + 9, /* nstack */ + 4, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 2]) { + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(lvgl_event_dispatch), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0x68040000, // 0000 GETUPV R1 U0 + 0x8C040300, // 0001 GETMET R1 R1 K0 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x80040200, // 0004 RET 1 R1 + }) + ), + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(lvgl_timer_dispatch), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0x68040000, // 0000 GETUPV R1 U0 + 0x8C040300, // 0001 GETMET R1 R1 K0 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x80040200, // 0004 RET 1 R1 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[19]) { /* constants */ + /* K0 */ be_nested_str(cb), + /* K1 */ be_nested_str(lv_event_cb), + /* K2 */ be_nested_str(cb_event_closure), + /* K3 */ be_nested_str(event_cb), + /* K4 */ be_nested_str(gen_cb), + /* K5 */ be_nested_str(register_obj), + /* K6 */ be_nested_str(contains), + /* K7 */ be_nested_str(_p), + /* K8 */ be_nested_str(tasmota), + /* K9 */ be_nested_str(log), + /* K10 */ be_nested_str(LVG_X3A_X20object_X3A), + /* K11 */ be_nested_str(has_X20already_X20an_X20event_X20callback), + /* K12 */ be_const_int(2), + /* K13 */ be_nested_str(lv_timer_cb), + /* K14 */ be_nested_str(timer_cb), + /* K15 */ be_const_int(0), + /* K16 */ be_nested_str(lv_), + /* K17 */ be_nested_str(null_cb), + /* K18 */ be_nested_str(cb_do_nothing), + }), + &be_const_str_make_cb, + &be_const_str_solidified, + ( &(const binstruction[101]) { /* code */ + 0xA4120000, // 0000 IMPORT R4 K0 + 0x1C140701, // 0001 EQ R5 R3 K1 + 0x78160026, // 0002 JMPF R5 #002A + 0x88140102, // 0003 GETMBR R5 R0 K2 + 0x4C180000, // 0004 LDNIL R6 + 0x1C140A06, // 0005 EQ R5 R5 R6 + 0x78160002, // 0006 JMPF R5 #000A + 0x60140013, // 0007 GETGBL R5 G19 + 0x7C140000, // 0008 CALL R5 0 + 0x90020405, // 0009 SETMBR R0 K2 R5 + 0x88140103, // 000A GETMBR R5 R0 K3 + 0x4C180000, // 000B LDNIL R6 + 0x1C140A06, // 000C EQ R5 R5 R6 + 0x78160003, // 000D JMPF R5 #0012 + 0x8C140904, // 000E GETMET R5 R4 K4 + 0x841C0000, // 000F CLOSURE R7 P0 + 0x7C140400, // 0010 CALL R5 2 + 0x90020605, // 0011 SETMBR R0 K3 R5 + 0x8C140105, // 0012 GETMET R5 R0 K5 + 0x5C1C0400, // 0013 MOVE R7 R2 + 0x7C140400, // 0014 CALL R5 2 + 0x88140102, // 0015 GETMBR R5 R0 K2 + 0x8C140B06, // 0016 GETMET R5 R5 K6 + 0x881C0507, // 0017 GETMBR R7 R2 K7 + 0x7C140400, // 0018 CALL R5 2 + 0x78160008, // 0019 JMPF R5 #0023 + 0xB8161000, // 001A GETNGBL R5 K8 + 0x8C140B09, // 001B GETMET R5 R5 K9 + 0x601C0008, // 001C GETGBL R7 G8 + 0x5C200400, // 001D MOVE R8 R2 + 0x7C1C0200, // 001E CALL R7 1 + 0x001E1407, // 001F ADD R7 K10 R7 + 0x001C0F0B, // 0020 ADD R7 R7 K11 + 0x5820000C, // 0021 LDCONST R8 K12 + 0x7C140600, // 0022 CALL R5 3 + 0x88140507, // 0023 GETMBR R5 R2 K7 + 0x88180102, // 0024 GETMBR R6 R0 K2 + 0x98180A01, // 0025 SETIDX R6 R5 R1 + 0x88140103, // 0026 GETMBR R5 R0 K3 + 0xA0000000, // 0027 CLOSE R0 + 0x80040A00, // 0028 RET 1 R5 + 0x70020038, // 0029 JMP #0063 + 0x1C14070D, // 002A EQ R5 R3 K13 + 0x78160023, // 002B JMPF R5 #0050 + 0x88140102, // 002C GETMBR R5 R0 K2 + 0x4C180000, // 002D LDNIL R6 + 0x1C140A06, // 002E EQ R5 R5 R6 + 0x78160002, // 002F JMPF R5 #0033 + 0x60140013, // 0030 GETGBL R5 G19 + 0x7C140000, // 0031 CALL R5 0 + 0x90020405, // 0032 SETMBR R0 K2 R5 + 0x8814010E, // 0033 GETMBR R5 R0 K14 + 0x4C180000, // 0034 LDNIL R6 + 0x1C140A06, // 0035 EQ R5 R5 R6 + 0x78160003, // 0036 JMPF R5 #003B + 0x8C140904, // 0037 GETMET R5 R4 K4 + 0x841C0001, // 0038 CLOSURE R7 P1 + 0x7C140400, // 0039 CALL R5 2 + 0x90021C05, // 003A SETMBR R0 K14 R5 + 0x88140102, // 003B GETMBR R5 R0 K2 + 0x8C140B06, // 003C GETMET R5 R5 K6 + 0x881C0507, // 003D GETMBR R7 R2 K7 + 0x7C140400, // 003E CALL R5 2 + 0x78160008, // 003F JMPF R5 #0049 + 0xB8161000, // 0040 GETNGBL R5 K8 + 0x8C140B09, // 0041 GETMET R5 R5 K9 + 0x601C0008, // 0042 GETGBL R7 G8 + 0x5C200400, // 0043 MOVE R8 R2 + 0x7C1C0200, // 0044 CALL R7 1 + 0x001E1407, // 0045 ADD R7 K10 R7 + 0x001C0F0B, // 0046 ADD R7 R7 K11 + 0x5820000C, // 0047 LDCONST R8 K12 + 0x7C140600, // 0048 CALL R5 3 + 0x88140507, // 0049 GETMBR R5 R2 K7 + 0x88180102, // 004A GETMBR R6 R0 K2 + 0x98180A01, // 004B SETIDX R6 R5 R1 + 0x8814010E, // 004C GETMBR R5 R0 K14 + 0xA0000000, // 004D CLOSE R0 + 0x80040A00, // 004E RET 1 R5 + 0x70020012, // 004F JMP #0063 + 0x40161F0C, // 0050 CONNECT R5 K15 K12 + 0x94140605, // 0051 GETIDX R5 R3 R5 + 0x1C140B10, // 0052 EQ R5 R5 K16 + 0x7816000B, // 0053 JMPF R5 #0060 + 0x88140111, // 0054 GETMBR R5 R0 K17 + 0x4C180000, // 0055 LDNIL R6 + 0x1C140A06, // 0056 EQ R5 R5 R6 + 0x78160003, // 0057 JMPF R5 #005C + 0x8C140904, // 0058 GETMET R5 R4 K4 + 0x881C0112, // 0059 GETMBR R7 R0 K18 + 0x7C140400, // 005A CALL R5 2 + 0x90022205, // 005B SETMBR R0 K17 R5 + 0x88140111, // 005C GETMBR R5 R0 K17 + 0xA0000000, // 005D CLOSE R0 + 0x80040A00, // 005E RET 1 R5 + 0x70020002, // 005F JMP #0063 + 0x4C140000, // 0060 LDNIL R5 + 0xA0000000, // 0061 CLOSE R0 + 0x80040A00, // 0062 RET 1 R5 + 0xA0000000, // 0063 CLOSE R0 + 0x80000000, // 0064 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: register_obj +********************************************************************/ +be_local_closure(LVGL_glob_register_obj, /* name */ + be_nested_proto( + 4, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(cb_obj), + /* K1 */ be_nested_str(_p), + }), + &be_const_str_register_obj, + &be_const_str_solidified, + ( &(const binstruction[11]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x4C0C0000, // 0001 LDNIL R3 + 0x1C080403, // 0002 EQ R2 R2 R3 + 0x780A0002, // 0003 JMPF R2 #0007 + 0x60080013, // 0004 GETGBL R2 G19 + 0x7C080000, // 0005 CALL R2 0 + 0x90020002, // 0006 SETMBR R0 K0 R2 + 0x88080301, // 0007 GETMBR R2 R1 K1 + 0x880C0100, // 0008 GETMBR R3 R0 K0 + 0x980C0401, // 0009 SETIDX R3 R2 R1 + 0x80000000, // 000A RET 0 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: create_custom_widget ********************************************************************/ @@ -306,7 +438,7 @@ be_local_closure(LVGL_glob_create_custom_widget, /* name */ be_nested_proto( 10, /* nstack */ 3, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -437,194 +569,36 @@ be_local_closure(LVGL_glob_create_custom_widget, /* name */ /******************************************************************** -** Solidified function: register_obj +** Solidified function: lvgl_timer_dispatch ********************************************************************/ -be_local_closure(LVGL_glob_register_obj, /* name */ +be_local_closure(LVGL_glob_lvgl_timer_dispatch, /* name */ be_nested_proto( - 4, /* nstack */ + 7, /* nstack */ 2, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(cb_obj), - /* K1 */ be_nested_str(_p), - }), - &be_const_str_register_obj, - &be_const_str_solidified, - ( &(const binstruction[11]) { /* code */ - 0x88080100, // 0000 GETMBR R2 R0 K0 - 0x4C0C0000, // 0001 LDNIL R3 - 0x1C080403, // 0002 EQ R2 R2 R3 - 0x780A0002, // 0003 JMPF R2 #0007 - 0x60080013, // 0004 GETGBL R2 G19 - 0x7C080000, // 0005 CALL R2 0 - 0x90020002, // 0006 SETMBR R0 K0 R2 - 0x88080301, // 0007 GETMBR R2 R1 K1 - 0x880C0100, // 0008 GETMBR R3 R0 K0 - 0x980C0401, // 0009 SETIDX R3 R2 R1 - 0x80000000, // 000A RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: deregister_obj -********************************************************************/ -be_local_closure(LVGL_glob_deregister_obj, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(cb_obj), - /* K1 */ be_nested_str(remove), + /* K0 */ be_nested_str(introspect), + /* K1 */ be_nested_str(toptr), /* K2 */ be_nested_str(cb_event_closure), }), - &be_const_str_deregister_obj, + &be_const_str_lvgl_timer_dispatch, &be_const_str_solidified, - ( &(const binstruction[17]) { /* code */ - 0x88080100, // 0000 GETMBR R2 R0 K0 - 0x4C0C0000, // 0001 LDNIL R3 - 0x20080403, // 0002 NE R2 R2 R3 - 0x780A0003, // 0003 JMPF R2 #0008 - 0x88080100, // 0004 GETMBR R2 R0 K0 - 0x8C080501, // 0005 GETMET R2 R2 K1 - 0x5C100200, // 0006 MOVE R4 R1 - 0x7C080400, // 0007 CALL R2 2 - 0x88080102, // 0008 GETMBR R2 R0 K2 - 0x4C0C0000, // 0009 LDNIL R3 - 0x20080403, // 000A NE R2 R2 R3 - 0x780A0003, // 000B JMPF R2 #0010 - 0x88080102, // 000C GETMBR R2 R0 K2 - 0x8C080501, // 000D GETMET R2 R2 K1 - 0x5C100200, // 000E MOVE R4 R1 - 0x7C080400, // 000F CALL R2 2 - 0x80000000, // 0010 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: widget_dtor_impl -********************************************************************/ -be_local_closure(LVGL_glob_widget_dtor_impl, /* name */ - be_nested_proto( - 10, /* nstack */ - 3, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 7]) { /* constants */ - /* K0 */ be_nested_str(introspect), - /* K1 */ be_nested_str(lv), - /* K2 */ be_nested_str(lv_obj_class), - /* K3 */ be_nested_str(get_object_from_ptr), - /* K4 */ be_nested_str(instance), - /* K5 */ be_nested_str(get), - /* K6 */ be_nested_str(widget_destructor), - }), - &be_const_str_widget_dtor_impl, - &be_const_str_solidified, - ( &(const binstruction[22]) { /* code */ - 0xA40E0000, // 0000 IMPORT R3 K0 - 0xB8120200, // 0001 GETNGBL R4 K1 - 0x8C100902, // 0002 GETMET R4 R4 K2 - 0x5C180200, // 0003 MOVE R6 R1 - 0x7C100400, // 0004 CALL R4 2 - 0x8C140103, // 0005 GETMET R5 R0 K3 - 0x5C1C0400, // 0006 MOVE R7 R2 - 0x7C140400, // 0007 CALL R5 2 - 0x60180004, // 0008 GETGBL R6 G4 - 0x5C1C0A00, // 0009 MOVE R7 R5 - 0x7C180200, // 000A CALL R6 1 - 0x1C180D04, // 000B EQ R6 R6 K4 - 0x781A0007, // 000C JMPF R6 #0015 - 0x8C180705, // 000D GETMET R6 R3 K5 - 0x5C200A00, // 000E MOVE R8 R5 - 0x58240006, // 000F LDCONST R9 K6 - 0x7C180600, // 0010 CALL R6 3 - 0x781A0002, // 0011 JMPF R6 #0015 - 0x8C180B06, // 0012 GETMET R6 R5 K6 - 0x5C200800, // 0013 MOVE R8 R4 - 0x7C180400, // 0014 CALL R6 2 - 0x80000000, // 0015 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(LVGL_glob_init, /* name */ - be_nested_proto( - 5, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 1, /* has sup protos */ - ( &(const struct bproto*[ 1]) { - be_nested_proto( - 8, /* nstack */ - 3, /* argc */ - 0, /* varg */ - 1, /* has upvals */ - ( &(const bupvaldesc[ 1]) { /* upvals */ - be_local_const_upval(1, 0), - }), - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(make_cb), - }), - &be_const_str__X3Clambda_X3E, - &be_const_str_solidified, - ( &(const binstruction[ 7]) { /* code */ - 0x680C0000, // 0000 GETUPV R3 U0 - 0x8C0C0700, // 0001 GETMET R3 R3 K0 - 0x5C140000, // 0002 MOVE R5 R0 - 0x5C180200, // 0003 MOVE R6 R1 - 0x5C1C0400, // 0004 MOVE R7 R2 - 0x7C0C0800, // 0005 CALL R3 4 - 0x80040600, // 0006 RET 1 R3 - }) - ), - }), - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(cb), - /* K1 */ be_nested_str(add_handler), - /* K2 */ be_nested_str(lv_extra), - }), - &be_const_str_init, - &be_const_str_solidified, - ( &(const binstruction[ 7]) { /* code */ - 0xA4060000, // 0000 IMPORT R1 K0 - 0x8C080301, // 0001 GETMET R2 R1 K1 - 0x84100000, // 0002 CLOSURE R4 P0 - 0x7C080400, // 0003 CALL R2 2 - 0xA40A0400, // 0004 IMPORT R2 K2 - 0xA0000000, // 0005 CLOSE R0 - 0x80000000, // 0006 RET 0 + ( &(const binstruction[10]) { /* code */ + 0xA40A0000, // 0000 IMPORT R2 K0 + 0x8C0C0501, // 0001 GETMET R3 R2 K1 + 0x5C140200, // 0002 MOVE R5 R1 + 0x7C0C0400, // 0003 CALL R3 2 + 0x88100102, // 0004 GETMBR R4 R0 K2 + 0x94100803, // 0005 GETIDX R4 R4 R3 + 0x5C140800, // 0006 MOVE R5 R4 + 0x5C180600, // 0007 MOVE R6 R3 + 0x7C140200, // 0008 CALL R5 1 + 0x80000000, // 0009 RET 0 }) ) ); @@ -711,20 +685,56 @@ be_local_closure(LVGL_glob_widget_event_impl, /* name */ /******************************************************************** -** Solidified function: make_cb +** Solidified function: get_object_from_ptr ********************************************************************/ -be_local_closure(LVGL_glob_make_cb, /* name */ +be_local_closure(LVGL_glob_get_object_from_ptr, /* name */ be_nested_proto( - 9, /* nstack */ - 4, /* argc */ + 5, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(cb_obj), + /* K1 */ be_nested_str(find), + }), + &be_const_str_get_object_from_ptr, + &be_const_str_solidified, + ( &(const binstruction[10]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x4C0C0000, // 0001 LDNIL R3 + 0x20080403, // 0002 NE R2 R2 R3 + 0x780A0004, // 0003 JMPF R2 #0009 + 0x88080100, // 0004 GETMBR R2 R0 K0 + 0x8C080501, // 0005 GETMET R2 R2 K1 + 0x5C100200, // 0006 MOVE R4 R1 + 0x7C080400, // 0007 CALL R2 2 + 0x80040400, // 0008 RET 1 R2 + 0x80000000, // 0009 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(LVGL_glob_init, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 1, /* has sup protos */ ( &(const struct bproto*[ 1]) { be_nested_proto( - 4, /* nstack */ - 1, /* argc */ + 8, /* nstack */ + 3, /* argc */ 0, /* varg */ 1, /* has upvals */ ( &(const bupvaldesc[ 1]) { /* upvals */ @@ -734,105 +744,37 @@ be_local_closure(LVGL_glob_make_cb, /* name */ NULL, /* no sub protos */ 1, /* has constants */ ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(lvgl_event_dispatch), + /* K0 */ be_nested_str(make_cb), }), &be_const_str__X3Clambda_X3E, &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0x68040000, // 0000 GETUPV R1 U0 - 0x8C040300, // 0001 GETMET R1 R1 K0 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0x80040200, // 0004 RET 1 R1 + ( &(const binstruction[ 7]) { /* code */ + 0x680C0000, // 0000 GETUPV R3 U0 + 0x8C0C0700, // 0001 GETMET R3 R3 K0 + 0x5C140000, // 0002 MOVE R5 R0 + 0x5C180200, // 0003 MOVE R6 R1 + 0x5C1C0400, // 0004 MOVE R7 R2 + 0x7C0C0800, // 0005 CALL R3 4 + 0x80040600, // 0006 RET 1 R3 }) ), }), 1, /* has constants */ - ( &(const bvalue[17]) { /* constants */ + ( &(const bvalue[ 3]) { /* constants */ /* K0 */ be_nested_str(cb), - /* K1 */ be_nested_str(lv_event_cb), - /* K2 */ be_nested_str(cb_event_closure), - /* K3 */ be_nested_str(event_cb), - /* K4 */ be_nested_str(gen_cb), - /* K5 */ be_nested_str(register_obj), - /* K6 */ be_nested_str(contains), - /* K7 */ be_nested_str(_p), - /* K8 */ be_nested_str(tasmota), - /* K9 */ be_nested_str(log), - /* K10 */ be_nested_str(LVG_X3A_X20object_X3A), - /* K11 */ be_nested_str(has_X20already_X20an_X20event_X20callback), - /* K12 */ be_const_int(2), - /* K13 */ be_const_int(0), - /* K14 */ be_nested_str(lv_), - /* K15 */ be_nested_str(null_cb), - /* K16 */ be_nested_str(cb_do_nothing), + /* K1 */ be_nested_str(add_handler), + /* K2 */ be_nested_str(lv_extra), }), - &be_const_str_make_cb, + &be_const_str_init, &be_const_str_solidified, - ( &(const binstruction[63]) { /* code */ - 0xA4120000, // 0000 IMPORT R4 K0 - 0x1C140701, // 0001 EQ R5 R3 K1 - 0x78160026, // 0002 JMPF R5 #002A - 0x88140102, // 0003 GETMBR R5 R0 K2 - 0x4C180000, // 0004 LDNIL R6 - 0x1C140A06, // 0005 EQ R5 R5 R6 - 0x78160002, // 0006 JMPF R5 #000A - 0x60140013, // 0007 GETGBL R5 G19 - 0x7C140000, // 0008 CALL R5 0 - 0x90020405, // 0009 SETMBR R0 K2 R5 - 0x88140103, // 000A GETMBR R5 R0 K3 - 0x4C180000, // 000B LDNIL R6 - 0x1C140A06, // 000C EQ R5 R5 R6 - 0x78160003, // 000D JMPF R5 #0012 - 0x8C140904, // 000E GETMET R5 R4 K4 - 0x841C0000, // 000F CLOSURE R7 P0 - 0x7C140400, // 0010 CALL R5 2 - 0x90020605, // 0011 SETMBR R0 K3 R5 - 0x8C140105, // 0012 GETMET R5 R0 K5 - 0x5C1C0400, // 0013 MOVE R7 R2 - 0x7C140400, // 0014 CALL R5 2 - 0x88140102, // 0015 GETMBR R5 R0 K2 - 0x8C140B06, // 0016 GETMET R5 R5 K6 - 0x881C0507, // 0017 GETMBR R7 R2 K7 - 0x7C140400, // 0018 CALL R5 2 - 0x78160008, // 0019 JMPF R5 #0023 - 0xB8161000, // 001A GETNGBL R5 K8 - 0x8C140B09, // 001B GETMET R5 R5 K9 - 0x601C0008, // 001C GETGBL R7 G8 - 0x5C200400, // 001D MOVE R8 R2 - 0x7C1C0200, // 001E CALL R7 1 - 0x001E1407, // 001F ADD R7 K10 R7 - 0x001C0F0B, // 0020 ADD R7 R7 K11 - 0x5820000C, // 0021 LDCONST R8 K12 - 0x7C140600, // 0022 CALL R5 3 - 0x88140507, // 0023 GETMBR R5 R2 K7 - 0x88180102, // 0024 GETMBR R6 R0 K2 - 0x98180A01, // 0025 SETIDX R6 R5 R1 - 0x88140103, // 0026 GETMBR R5 R0 K3 - 0xA0000000, // 0027 CLOSE R0 - 0x80040A00, // 0028 RET 1 R5 - 0x70020012, // 0029 JMP #003D - 0x40161B0C, // 002A CONNECT R5 K13 K12 - 0x94140605, // 002B GETIDX R5 R3 R5 - 0x1C140B0E, // 002C EQ R5 R5 K14 - 0x7816000B, // 002D JMPF R5 #003A - 0x8814010F, // 002E GETMBR R5 R0 K15 - 0x4C180000, // 002F LDNIL R6 - 0x1C140A06, // 0030 EQ R5 R5 R6 - 0x78160003, // 0031 JMPF R5 #0036 - 0x8C140904, // 0032 GETMET R5 R4 K4 - 0x881C0110, // 0033 GETMBR R7 R0 K16 - 0x7C140400, // 0034 CALL R5 2 - 0x90021E05, // 0035 SETMBR R0 K15 R5 - 0x8814010F, // 0036 GETMBR R5 R0 K15 - 0xA0000000, // 0037 CLOSE R0 - 0x80040A00, // 0038 RET 1 R5 - 0x70020002, // 0039 JMP #003D - 0x4C140000, // 003A LDNIL R5 - 0xA0000000, // 003B CLOSE R0 - 0x80040A00, // 003C RET 1 R5 - 0xA0000000, // 003D CLOSE R0 - 0x80000000, // 003E RET 0 + ( &(const binstruction[ 7]) { /* code */ + 0xA4060000, // 0000 IMPORT R1 K0 + 0x8C080301, // 0001 GETMET R2 R1 K1 + 0x84100000, // 0002 CLOSURE R4 P0 + 0x7C080400, // 0003 CALL R2 2 + 0xA40A0400, // 0004 IMPORT R2 K2 + 0xA0000000, // 0005 CLOSE R0 + 0x80000000, // 0006 RET 0 }) ) ); @@ -846,7 +788,7 @@ be_local_closure(LVGL_glob_lvgl_event_dispatch, /* name */ be_nested_proto( 10, /* nstack */ 2, /* argc */ - 0, /* varg */ + 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ @@ -888,35 +830,196 @@ be_local_closure(LVGL_glob_lvgl_event_dispatch, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: widget_dtor_impl +********************************************************************/ +be_local_closure(LVGL_glob_widget_dtor_impl, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_str(introspect), + /* K1 */ be_nested_str(lv), + /* K2 */ be_nested_str(lv_obj_class), + /* K3 */ be_nested_str(get_object_from_ptr), + /* K4 */ be_nested_str(instance), + /* K5 */ be_nested_str(get), + /* K6 */ be_nested_str(widget_destructor), + }), + &be_const_str_widget_dtor_impl, + &be_const_str_solidified, + ( &(const binstruction[22]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0xB8120200, // 0001 GETNGBL R4 K1 + 0x8C100902, // 0002 GETMET R4 R4 K2 + 0x5C180200, // 0003 MOVE R6 R1 + 0x7C100400, // 0004 CALL R4 2 + 0x8C140103, // 0005 GETMET R5 R0 K3 + 0x5C1C0400, // 0006 MOVE R7 R2 + 0x7C140400, // 0007 CALL R5 2 + 0x60180004, // 0008 GETGBL R6 G4 + 0x5C1C0A00, // 0009 MOVE R7 R5 + 0x7C180200, // 000A CALL R6 1 + 0x1C180D04, // 000B EQ R6 R6 K4 + 0x781A0007, // 000C JMPF R6 #0015 + 0x8C180705, // 000D GETMET R6 R3 K5 + 0x5C200A00, // 000E MOVE R8 R5 + 0x58240006, // 000F LDCONST R9 K6 + 0x7C180600, // 0010 CALL R6 3 + 0x781A0002, // 0011 JMPF R6 #0015 + 0x8C180B06, // 0012 GETMET R6 R5 K6 + 0x5C200800, // 0013 MOVE R8 R4 + 0x7C180400, // 0014 CALL R6 2 + 0x80000000, // 0015 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: deregister_obj +********************************************************************/ +be_local_closure(LVGL_glob_deregister_obj, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str(cb_obj), + /* K1 */ be_nested_str(remove), + /* K2 */ be_nested_str(cb_event_closure), + }), + &be_const_str_deregister_obj, + &be_const_str_solidified, + ( &(const binstruction[17]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x4C0C0000, // 0001 LDNIL R3 + 0x20080403, // 0002 NE R2 R2 R3 + 0x780A0003, // 0003 JMPF R2 #0008 + 0x88080100, // 0004 GETMBR R2 R0 K0 + 0x8C080501, // 0005 GETMET R2 R2 K1 + 0x5C100200, // 0006 MOVE R4 R1 + 0x7C080400, // 0007 CALL R2 2 + 0x88080102, // 0008 GETMBR R2 R0 K2 + 0x4C0C0000, // 0009 LDNIL R3 + 0x20080403, // 000A NE R2 R2 R3 + 0x780A0003, // 000B JMPF R2 #0010 + 0x88080102, // 000C GETMBR R2 R0 K2 + 0x8C080501, // 000D GETMET R2 R2 K1 + 0x5C100200, // 000E MOVE R4 R1 + 0x7C080400, // 000F CALL R2 2 + 0x80000000, // 0010 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: widget_ctor_impl +********************************************************************/ +be_local_closure(LVGL_glob_widget_ctor_impl, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 9]) { /* constants */ + /* K0 */ be_nested_str(introspect), + /* K1 */ be_nested_str(lv), + /* K2 */ be_nested_str(lv_obj_class), + /* K3 */ be_nested_str(get_object_from_ptr), + /* K4 */ be_nested_str(cb_obj), + /* K5 */ be_nested_str(find), + /* K6 */ be_nested_str(instance), + /* K7 */ be_nested_str(get), + /* K8 */ be_nested_str(widget_constructor), + }), + &be_const_str_widget_ctor_impl, + &be_const_str_solidified, + ( &(const binstruction[29]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0xB8120200, // 0001 GETNGBL R4 K1 + 0x8C100902, // 0002 GETMET R4 R4 K2 + 0x5C180200, // 0003 MOVE R6 R1 + 0x7C100400, // 0004 CALL R4 2 + 0x8C140103, // 0005 GETMET R5 R0 K3 + 0x5C1C0400, // 0006 MOVE R7 R2 + 0x7C140400, // 0007 CALL R5 2 + 0x88180104, // 0008 GETMBR R6 R0 K4 + 0x8C180D05, // 0009 GETMET R6 R6 K5 + 0x5C200A00, // 000A MOVE R8 R5 + 0x7C180400, // 000B CALL R6 2 + 0x781A0001, // 000C JMPF R6 #000F + 0x88180104, // 000D GETMBR R6 R0 K4 + 0x94140C05, // 000E GETIDX R5 R6 R5 + 0x60180004, // 000F GETGBL R6 G4 + 0x5C1C0A00, // 0010 MOVE R7 R5 + 0x7C180200, // 0011 CALL R6 1 + 0x1C180D06, // 0012 EQ R6 R6 K6 + 0x781A0007, // 0013 JMPF R6 #001C + 0x8C180707, // 0014 GETMET R6 R3 K7 + 0x5C200A00, // 0015 MOVE R8 R5 + 0x58240008, // 0016 LDCONST R9 K8 + 0x7C180600, // 0017 CALL R6 3 + 0x781A0002, // 0018 JMPF R6 #001C + 0x8C180B08, // 0019 GETMET R6 R5 K8 + 0x5C200800, // 001A MOVE R8 R4 + 0x7C180400, // 001B CALL R6 2 + 0x80000000, // 001C RET 0 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified class: LVGL_glob ********************************************************************/ be_local_class(LVGL_glob, - 9, + 10, NULL, - be_nested_map(21, + be_nested_map(23, ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key(get_object_from_ptr, 7), be_const_closure(LVGL_glob_get_object_from_ptr_closure) }, - { be_const_key(widget_ctor_impl, 6), be_const_closure(LVGL_glob_widget_ctor_impl_closure) }, { be_const_key(widget_cb, -1), be_const_closure(LVGL_glob_widget_cb_closure) }, - { be_const_key(lvgl_event_dispatch, -1), be_const_closure(LVGL_glob_lvgl_event_dispatch_closure) }, - { be_const_key(cb_do_nothing, 10), be_const_static_closure(LVGL_glob__anonymous__closure) }, - { be_const_key(widget_struct_by_class, -1), be_const_var(8) }, - { be_const_key(cb_event_closure, 19), be_const_var(1) }, - { be_const_key(widget_dtor_impl, -1), be_const_closure(LVGL_glob_widget_dtor_impl_closure) }, - { be_const_key(register_obj, -1), be_const_closure(LVGL_glob_register_obj_closure) }, - { be_const_key(deregister_obj, -1), be_const_closure(LVGL_glob_deregister_obj_closure) }, - { be_const_key(widget_event_cb, -1), be_const_var(6) }, - { be_const_key(widget_ctor_cb, -1), be_const_var(4) }, - { be_const_key(init, -1), be_const_closure(LVGL_glob_init_closure) }, - { be_const_key(widget_event_impl, -1), be_const_closure(LVGL_glob_widget_event_impl_closure) }, - { be_const_key(widget_dtor_cb, -1), be_const_var(5) }, - { be_const_key(cb_obj, 11), be_const_var(0) }, + { be_const_key(widget_event_cb, -1), be_const_var(7) }, + { be_const_key(widget_ctor_impl, -1), be_const_closure(LVGL_glob_widget_ctor_impl_closure) }, + { be_const_key(widget_struct_default, -1), be_const_var(8) }, { be_const_key(make_cb, -1), be_const_closure(LVGL_glob_make_cb_closure) }, - { be_const_key(null_cb, -1), be_const_var(3) }, - { be_const_key(event_cb, -1), be_const_var(2) }, - { be_const_key(create_custom_widget, -1), be_const_closure(LVGL_glob_create_custom_widget_closure) }, - { be_const_key(widget_struct_default, 3), be_const_var(7) }, + { be_const_key(widget_ctor_cb, 8), be_const_var(5) }, + { be_const_key(deregister_obj, -1), be_const_closure(LVGL_glob_deregister_obj_closure) }, + { be_const_key(create_custom_widget, 16), be_const_closure(LVGL_glob_create_custom_widget_closure) }, + { be_const_key(widget_event_impl, -1), be_const_closure(LVGL_glob_widget_event_impl_closure) }, + { be_const_key(widget_dtor_cb, -1), be_const_var(6) }, + { be_const_key(cb_event_closure, -1), be_const_var(1) }, + { be_const_key(lvgl_timer_dispatch, -1), be_const_closure(LVGL_glob_lvgl_timer_dispatch_closure) }, + { be_const_key(widget_dtor_impl, -1), be_const_closure(LVGL_glob_widget_dtor_impl_closure) }, + { be_const_key(get_object_from_ptr, 17), be_const_closure(LVGL_glob_get_object_from_ptr_closure) }, + { be_const_key(init, -1), be_const_closure(LVGL_glob_init_closure) }, + { be_const_key(cb_obj, -1), be_const_var(0) }, + { be_const_key(lvgl_event_dispatch, -1), be_const_closure(LVGL_glob_lvgl_event_dispatch_closure) }, + { be_const_key(event_cb, 15), be_const_var(2) }, + { be_const_key(timer_cb, -1), be_const_var(3) }, + { be_const_key(cb_do_nothing, 12), be_const_static_closure(LVGL_glob__anonymous__closure) }, + { be_const_key(widget_struct_by_class, -1), be_const_var(9) }, + { be_const_key(register_obj, 6), be_const_closure(LVGL_glob_register_obj_closure) }, + { be_const_key(null_cb, 2), be_const_var(4) }, })), be_str_literal("LVGL_glob") ); diff --git a/lib/libesp32_lvgl/lv_berry/src/embedded/lvgl_glob.be b/lib/libesp32_lvgl/lv_berry/src/embedded/lvgl_glob.be index 14eb05878..4d56469c7 100644 --- a/lib/libesp32_lvgl/lv_berry/src/embedded/lvgl_glob.be +++ b/lib/libesp32_lvgl/lv_berry/src/embedded/lvgl_glob.be @@ -7,6 +7,7 @@ class LVGL_glob var cb_obj # map between a native C pointer (as int) and the corresponding lv.lv_* berry object, also helps marking the objects as non-gc-able var cb_event_closure # mapping for event closures per LVGL native pointer (int) var event_cb # native callback for lv.lv_event + var timer_cb # native callback for lv.lv_timer #- below are native callbacks mapped to a closure to a method of this instance -# var null_cb # cb called if type is not supported @@ -52,6 +53,15 @@ class LVGL_glob f(obj, event) end + def lvgl_timer_dispatch(timer_int) + import introspect + + var timer_ptr = introspect.toptr(timer_int) + var f = self.cb_event_closure[timer_ptr] + #print('>> lvgl_timer_dispatch', f, obj, event) + f(timer_ptr) + end + def make_cb(f, obj, name) import cb # print('>> make_cb', f, name, obj) @@ -67,6 +77,17 @@ class LVGL_glob end self.cb_event_closure[obj._p] = f # keep a mapping of the closure to call, indexed by internal lvgl native pointer return self.event_cb + elif name == "lv_timer_cb" + if self.cb_event_closure == nil self.cb_event_closure = {} end # lazy instanciation + if self.timer_cb == nil self.timer_cb = cb.gen_cb(/ timer_ptr -> self.lvgl_timer_dispatch(timer_ptr)) end # encapsulate 'self' in closure + + # no need to register the object since it's only a pointer to a timer + if self.cb_event_closure.contains(obj._p) + tasmota.log("LVG: object:" + str(obj) + "has already an event callback", 2) + end + self.cb_event_closure[obj._p] = f # keep a mapping of the closure to call, indexed by internal lvgl native pointer + return self.timer_cb + # elif name == "" elif name[0..2] == "lv_" if self.null_cb == nil self.null_cb = cb.gen_cb(self.cb_do_nothing) end diff --git a/lib/libesp32_lvgl/lv_berry/tools/convert.py b/lib/libesp32_lvgl/lv_berry/tools/convert.py index 3f0c487fd..affdaeadd 100644 --- a/lib/libesp32_lvgl/lv_berry/tools/convert.py +++ b/lib/libesp32_lvgl/lv_berry/tools/convert.py @@ -110,6 +110,7 @@ return_types = { "lv_grid_align_t": "i", "_lv_event_dsc_t *": "i", + "lv_anim_enable_t": "i", # arrays "char * []": "str_arr", @@ -155,16 +156,14 @@ return_types = { # callbacks "lv_group_focus_cb_t": "lv_group_focus_cb", "lv_event_cb_t": "lv_event_cb", - # "lv_signal_cb_t": "lv_signal_cb", # removed in LVGL8 - # "lv_design_cb_t": "lv_design_cb", # removed in LVGL8 - # "lv_gauge_format_cb_t": "lv_gauge_format_cb", # removed in LVGL8 + "lv_timer_cb_t": "lv_timer_cb", } lv = {} lvs = [] # special case for case for lv_style lv0 = [] # function in lvlg module lv_module = [] -lv_cb_types = ['lv_group_focus_cb', 'lv_event_cb', +lv_cb_types = ['lv_group_focus_cb', 'lv_event_cb', 'lv_timer_cb', 'lv_constructor_cb', # 'constructor_cb', addition to LVGL8, also works for 'destructor_cb' ] # list of callback types that will need each a separate C callback @@ -182,7 +181,7 @@ lv_widgets = ['arc', 'bar', 'btn', 'btnmatrix', 'canvas', 'checkbox', # extra widgets lv_widgets = lv_widgets + [ 'chart', 'colorwheel', 'imgbtn', 'led', 'meter', 'msgbox', 'spinbox', 'spinner' ] -lv_prefix = ['obj', 'group', 'style', 'indev', 'disp'] + lv_widgets +lv_prefix = ['obj', 'group', 'style', 'indev', 'disp', 'timer'] + lv_widgets # define here widget inheritance because it's hard to deduce from source lv_widget_inheritance = { @@ -602,6 +601,23 @@ be_local_class(lv_disp, ); /*******************************************************************/ +/******************************************************************** +** Solidified class: lv_timer +********************************************************************/ +be_local_class(lv_timer, + 1, + NULL, + be_nested_map(4, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("init", 380752755, 4, -1), be_const_func(lv0_init) }, + { be_nested_key("tostring", -1995258651, 8, -1), be_const_func(lv_x_tostring) }, + { be_nested_key("_p", 1594591802, 2, -1), be_const_var(0) }, + { be_nested_key("member", 719708611, 6, 0), be_const_func(lv_x_member) }, + })), + be_str_literal("lv_timer") +); +/*******************************************************************/ + /******************************************************************** ** Solidified class: lv_font ********************************************************************/ diff --git a/lib/libesp32_lvgl/lv_berry/tools/preprocessor.py b/lib/libesp32_lvgl/lv_berry/tools/preprocessor.py index 5580c10f5..2cc37c71c 100644 --- a/lib/libesp32_lvgl/lv_berry/tools/preprocessor.py +++ b/lib/libesp32_lvgl/lv_berry/tools/preprocessor.py @@ -72,6 +72,7 @@ lv_fun_globs = [ "misc/lv_style.h", "misc/lv_math.h", "misc/lv_area.h", + "misc/lv_timer.h", #"**/*.h", ] headers_names = list_files(lv_src_prefix, lv_fun_globs) From 353dd56d5687b09305a6d19531980c42d6aeeed2 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Tue, 8 Mar 2022 17:28:40 +0100 Subject: [PATCH 174/355] Update italian language --- tasmota/language/it_IT.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 684c8e4b7..a582b9e37 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -28,7 +28,7 @@ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE. * Use online command Prefix to translate cmnd, stat and tele. * - * Updated until v10.1.0.6 - Last update 20.02.2022 + * Updated until v10.1.0.6 - Last update 08.03.2022 \*********************************************************************/ #define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) @@ -851,7 +851,7 @@ #define D_SENSOR_BL6523_TX "BL6523 - TX" #define D_SENSOR_BL6523_RX "BL6523 - RX" #define D_SENSOR_HEARTBEAT "Battito cardiaco" -#define D_SENSOR_RESET "Reset" +#define D_SENSOR_RESET "Ripristino" #define D_GPIO_SHIFT595_SRCLK "74x595 - SRCLK" #define D_GPIO_SHIFT595_RCLK "74x595 - RCLK" #define D_GPIO_SHIFT595_OE "74x595 - OE" From a927ddfd9fb0e311d58cdf7141268c7826a90888 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Tue, 8 Mar 2022 18:11:52 +0100 Subject: [PATCH 175/355] Prep EnergyConfig --- tasmota/xdrv_03_energy.ino | 4 +- tasmota/xnrg_23_ade7880.ino | 331 ++++++++++++++++++------------------ 2 files changed, 167 insertions(+), 168 deletions(-) diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index f1bf1f21f..515075157 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -833,7 +833,9 @@ void CmndModuleAddress(void) { void CmndEnergyConfig(void) { Energy.command_code = CMND_ENERGYCONFIG; if (XnrgCall(FUNC_COMMAND)) { - ResponseCmndDone(); + if (!ResponseLength()) { + ResponseCmndDone(); + } } } diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index d21439661..1343e6ab5 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -12,7 +12,7 @@ /*********************************************************************************************\ * ADE7880 - Energy used in Shelly 3EM * - * {"NAME":"Shelly 3EM","GPIO":[1,1,544,1,32,8065,0,0,640,8064,608,224,8096,0],"FLAG":0,"BASE":18} + * {"NAME":"Shelly 3EM","GPIO":[1,1,288,1,32,8065,0,0,640,8064,608,224,8096,0],"FLAG":0,"BASE":18} * * Based on datasheet from https://www.analog.com/en/products/ade7880.html * @@ -24,8 +24,6 @@ #define ADE7880_ADDR 0x38 -//#define ADE7880_COMPMODE_FREQ 0x4000 // Connected to networks with fundamental frequencies between 55 Hz and 66 Hz. Default 45 Hz to 55 Hz - /*********************************************************************************************/ //#define ADE7880_DEBUG @@ -76,6 +74,7 @@ Derive these parameters from the original Shelly 3EM 4M firmware dump. Look for } } */ +#define ADE7880_FREQ_INIT 0 // Connected to networks with fundamental frequencies between 55 Hz and 66 Hz (1). Default 45 Hz to 55 Hz (0). #define ADE7880_AIGAIN_INIT 3166385 // rms, current_a #define ADE7880_BIGAIN_INIT 3125691 // rms, current_b #define ADE7880_CIGAIN_INIT 3131983 // rms, current_c @@ -90,38 +89,6 @@ Derive these parameters from the original Shelly 3EM 4M firmware dump. Look for #define ADE7880_BPGAIN_INIT -1347328 // powers, totactive, b #define ADE7880_CPGAIN_INIT -1351979 // powers, totactive, c -/* -// Original defines from logic analyzer -#define ADE7880_AIGAIN_INIT 0x002FFED1 // = 3145425 -#define ADE7880_BIGAIN_INIT 0x00309661 // = 3184225 -#define ADE7880_CIGAIN_INIT 0x0030DBFD // = 3202045 -#define ADE7880_NIGAIN_INIT 0x04D906AC // = 81331884 (14223020) -#define ADE7880_AVGAIN_INIT 0xFFF43977 // = -771720 -#define ADE7880_BVGAIN_INIT 0xFFF4DD00 // = -729855 -#define ADE7880_CVGAIN_INIT 0xFFF4A306 // = -744697 -#define ADE7880_APHCAL_INIT 0xD895 // = 55445 (149) -#define ADE7880_BPHCAL_INIT 0xD8A9 // = 55456 (169) -#define ADE7880_CPHCAL_INIT 0xD89D // = 55453 (157) -#define ADE7880_APGAIN_INIT 0xFF14B7E3 // = -15419420 -#define ADE7880_BPGAIN_INIT 0xFF14A7B1 // = -15423566 -#define ADE7880_CPGAIN_INIT 0xFF14999C // = -15427171 -*/ -/* -#define ADE7880_AIGAIN_INIT 3145425 -#define ADE7880_BIGAIN_INIT 3184225 -#define ADE7880_CIGAIN_INIT 3202045 -#define ADE7880_NIGAIN_INIT 14223020 -#define ADE7880_AVGAIN_INIT -771720 -#define ADE7880_BVGAIN_INIT -729855 -#define ADE7880_CVGAIN_INIT -744697 -#define ADE7880_APHCAL_INIT 149 -#define ADE7880_BPHCAL_INIT 169 -#define ADE7880_CPHCAL_INIT 157 -#define ADE7880_APGAIN_INIT -15419420 -#define ADE7880_BPGAIN_INIT -15423566 -#define ADE7880_CPGAIN_INIT -15427171 -*/ - enum Ade7880DspRegisters { ADE7880_AIGAIN = 0x4380, // 0x4380 R/W 24 32 ZPSE S 0x000000 Phase A current gain adjust. ADE7880_AVGAIN, // 0x4381 R/W 24 32 ZPSE S 0x000000 Phase A voltage gain adjust. @@ -317,16 +284,14 @@ enum Ade7880PowerQualityRegisters { }; struct Ade7880 { - int32_t nirms; - int32_t isum; int32_t active_energy[3]; - int32_t apparent_energy[3]; - uint16_t angle[3]; - - uint8_t init_state; + int32_t calib_current[4]; + int32_t calib_voltage[3]; + int32_t calib_acpower[3]; + uint16_t calib_angle[3]; + bool calib_frequency; + bool irq0_state; uint8_t cycle_count; - uint8_t irq0_state; - uint8_t irq1_state; } Ade7880; /*********************************************************************************************/ @@ -430,6 +395,7 @@ bool Ade7880Init(void) { #ifdef ADE7880_PROFILING uint32_t start = millis(); #endif // ADE7880_PROFILING + uint32_t status1 = Ade7880ReadVerify(ADE7880_STATUS1); // 0x01A08000 if (bitRead(status1, 15)) { // RSTDONE // Power on or Reset @@ -440,43 +406,25 @@ bool Ade7880Init(void) { return false; } uint8_t version = Ade7880ReadVerify(ADE7880_Version); // 0x01 - - delayMicroseconds(240); // Grab parameters from flash/filesystem - Ade7880WriteVerify(ADE7880_Gain, 0x0000); // Gain register set to 1 for current, and voltage - Ade7880WriteVerify(ADE7880_APGAIN, ADE7880_APGAIN_INIT); - Ade7880WriteVerify(ADE7880_BPGAIN, ADE7880_BPGAIN_INIT); - Ade7880WriteVerify(ADE7880_CPGAIN, ADE7880_CPGAIN_INIT); - Ade7880WriteVerify(ADE7880_AVGAIN, ADE7880_AVGAIN_INIT); - Ade7880WriteVerify(ADE7880_BVGAIN, ADE7880_BVGAIN_INIT); - Ade7880WriteVerify(ADE7880_CVGAIN, ADE7880_CVGAIN_INIT); - Ade7880WriteVerify(ADE7880_AIGAIN, ADE7880_AIGAIN_INIT); - Ade7880WriteVerify(ADE7880_BIGAIN, ADE7880_BIGAIN_INIT); - Ade7880WriteVerify(ADE7880_CIGAIN, ADE7880_CIGAIN_INIT); - Ade7880WriteVerify(ADE7880_NIGAIN, ADE7880_NIGAIN_INIT); - Ade7880WriteVerify(ADE7880_APHCAL, ADE7880_APHCAL_INIT); - Ade7880WriteVerify(ADE7880_BPHCAL, ADE7880_BPHCAL_INIT); - Ade7880WriteVerify(ADE7880_CPHCAL, ADE7880_CPHCAL_INIT); -#ifdef ADE7880_COMPMODE_FREQ - Ade7880WriteVerify(ADE7880_COMPMODE, 0x01FF | ADE7880_COMPMODE_FREQ); // Connected to networks with fundamental frequencies between 55 Hz and 66 Hz. Default is 45 Hz and 55 Hz. -#endif + if (Ade7880.calib_frequency) { + Ade7880WriteVerify(ADE7880_COMPMODE, 0x41FF); // Connected to networks with fundamental frequencies between 55 Hz and 66 Hz. Default is 45 Hz and 55 Hz. + } + for (uint32_t phase = 0; phase < 3; phase++) { + Ade7880WriteVerify(ADE7880_AVGAIN + (phase * 2), Ade7880.calib_voltage[phase]); + Ade7880WriteVerify(ADE7880_AIGAIN + (phase * 2), Ade7880.calib_current[phase]); + Ade7880WriteVerify(ADE7880_APGAIN + (phase * 2), Ade7880.calib_acpower[phase]); + Ade7880WriteVerify(ADE7880_APHCAL + phase, Ade7880.calib_angle[phase]); + } + Ade7880WriteVerify(ADE7880_NIGAIN, Ade7880.calib_current[3]); bool error = false; - if (Ade7880ReadVerify(ADE7880_AVGAIN) != (ADE7880_AVGAIN_INIT & 0x0FFFFFFF)) { error = true; } - else if (Ade7880ReadVerify(ADE7880_BVGAIN) != (ADE7880_BVGAIN_INIT & 0x0FFFFFFF)) { error = true; } - else if (Ade7880ReadVerify(ADE7880_CVGAIN) != (ADE7880_CVGAIN_INIT & 0x0FFFFFFF)) { error = true; } - else if (Ade7880ReadVerify(ADE7880_AIGAIN) != ADE7880_AIGAIN_INIT) { error = true; } - else if (Ade7880ReadVerify(ADE7880_BIGAIN) != ADE7880_BIGAIN_INIT) { error = true; } - else if (Ade7880ReadVerify(ADE7880_CIGAIN) != ADE7880_CIGAIN_INIT) { error = true; } - else if (Ade7880ReadVerify(ADE7880_NIGAIN) != ADE7880_NIGAIN_INIT) { error = true; } - else if (Ade7880ReadVerify(ADE7880_APGAIN) != (ADE7880_APGAIN_INIT & 0x0FFFFFFF)) { error = true; } - else if (Ade7880ReadVerify(ADE7880_BPGAIN) != (ADE7880_BPGAIN_INIT & 0x0FFFFFFF)) { error = true; } - else if (Ade7880ReadVerify(ADE7880_CPGAIN) != (ADE7880_CPGAIN_INIT & 0x0FFFFFFF)) { error = true; } - else if (Ade7880ReadVerify(ADE7880_APHCAL) != (ADE7880_APHCAL_INIT & 0x00FF)) { error = true; } - else if (Ade7880ReadVerify(ADE7880_BPHCAL) != (ADE7880_BPHCAL_INIT & 0x00FF)) { error = true; } - else if (Ade7880ReadVerify(ADE7880_CPHCAL) != (ADE7880_CPHCAL_INIT & 0x00FF)) { error = true; } -#ifdef ADE7880_COMPMODE_FREQ - else if (Ade7880ReadVerify(ADE7880_COMPMODE) != (0x01FF | ADE7880_COMPMODE_FREQ)) { error = true; } -#endif + for (uint32_t phase = 0; phase < 3; phase++) { + if (Ade7880ReadVerify(ADE7880_AVGAIN + (phase * 2)) != (Ade7880.calib_voltage[phase] & 0x0FFFFFFF)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_AIGAIN + (phase * 2)) != Ade7880.calib_current[phase]) { error = true; } + else if (Ade7880ReadVerify(ADE7880_APGAIN + (phase * 2)) != (Ade7880.calib_acpower[phase] & 0x0FFFFFFF)) { error = true; } + else if (Ade7880ReadVerify(ADE7880_APHCAL + phase) != (Ade7880.calib_angle[phase] & 0x00FF)) { error = true; } + } + if (Ade7880ReadVerify(ADE7880_NIGAIN) != Ade7880.calib_current[3]) { error = true; } if (error) { AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error initializing parameters")); return false; @@ -487,12 +435,10 @@ bool Ade7880Init(void) { AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error setting LCYCMODE register")); return false; } - if (!Ade7880WriteVerify(ADE7880_LINECYC, 0x0064)) { // = 100 AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error setting LINECYC register")); return false; } - Ade7880WriteVerify(ADE7880_MASK0, 0x00000020); // IRQ0 at end of an integration over an integer number of half line cycles set in the LINECYC register. if (!Ade7880VerifyWrite(ADE7880_MASK0)) { AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error setting MASK0 register")); @@ -501,31 +447,47 @@ bool Ade7880Init(void) { Ade7880Write(ADE7880_MASK0, 0x00000020); Ade7880Write(ADE7880_MASK0, 0x00000020); Ade7880Write(ADE7880_MASK0, 0x00000020); - Ade7880Write(ADE7880_DSPWP_SEL, 0xAD); // Select DSP write protection Ade7880Write(ADE7880_DSPWP_SET, 0x80); // Write protect DSP area - Ade7880WriteVerify(ADE7880_Run, 0x0201); // Start DSP + #ifdef ADE7880_PROFILING AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Init done in %d ms"), millis() - start); #endif // ADE7880_PROFILING + return true; } -bool Ade7880Service1(void) { - // Init sequence - SkipSleep(false); - bool result = Ade7880Init(); - Ade7880.irq1_state = 0; - return result; -} +bool Ade7880SetCalibrate(void) { -void IRAM_ATTR Ade7880Isr1(void) { - // Init sequence - if (!Ade7880.irq1_state) { - Ade7880.irq1_state = 1; - SkipSleep(true); +#ifdef ADE7880_PROFILING + uint32_t start = millis(); +#endif // ADE7880_PROFILING + + int reset = Pin(GPIO_RESET); + if (-1 == reset) { reset = 16; } // Reset pin ADE7880 in Shelly 3EM + pinMode(reset, OUTPUT); + digitalWrite(reset, 0); + delay(1); + digitalWrite(reset, 1); + pinMode(reset, INPUT); + + Ade7880.cycle_count = 2; // Skip first two cycles + + uint32_t timeout = millis() + 40; // Should be reset within 10 ms + while (!TimeReached(timeout)) { // Wait up to 100 ms + if (!digitalRead(Pin(GPIO_ADE7880_IRQ, 1))) { + +#ifdef ADE7880_PROFILING + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Reset in %d ms"), millis() - start); +#endif // ADE7880_PROFILING + + if (Ade7880Init()) { + return true; + } + } } + return false; } /*********************************************************************************************/ @@ -535,6 +497,7 @@ void Ade7880Cycle(void) { #ifdef ADE7880_PROFILING uint32_t start = millis(); #endif // ADE7880_PROFILING + uint32_t status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0x000FEFE0 if (!bitRead(status0, 5)) { // LENERGY return; @@ -542,42 +505,20 @@ void Ade7880Cycle(void) { Ade7880WriteVerify(ADE7880_STATUS0, 0x00000020); // Acknowledge LENERGY - Reset IRQ0 line status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0x000FEFC0 } - if (Ade7880.cycle_count < 2) { // Allow calibration stabilization - Ade7880.cycle_count++; - return; // Skip first two cycles + if (Ade7880.cycle_count) { // Allow calibration stabilization + Ade7880.cycle_count--; + return; // Skip first cycles + } + for (uint32_t phase = 0; phase < 3; phase++) { + Energy.data_valid[phase] = 0; + Energy.voltage[phase] = (float)Ade7880ReadVerify(ADE7880_AVRMS + (phase * 2)) / 10000; // 0x0024CC94 = 241.1668 V + Energy.current[phase] = (float)Ade7880ReadVerify(ADE7880_AIRMS + (phase * 2)) / 1000000; // 0x00002D6D = 0.011629 A + Energy.active_power[phase] = (float)Ade7880ReadVerify(ADE7880_AWATT + phase) / 100; // 0xFFFFF524 = -27.79 W (wrong calibration) + Energy.apparent_power[phase] = (float)Ade7880ReadVerify(ADE7880_AVA + phase) / 100; // 0xFFFFF50D + Energy.frequency[phase] = 256000.0f / Ade7880ReadVerify(ADE7880_APERIOD + phase); // Page 34 and based on ADE7880_FREQ_INIT + Ade7880.active_energy[phase] = Ade7880ReadVerify(ADE7880_AWATTHR + phase); // 0xFFFFFF8F = -1.12 Whr ?? } - // Incandescent light bulb, 242V, 0.11A, Pf100%, 27.9W - Energy.voltage[0] = (float)Ade7880ReadVerify(ADE7880_AVRMS) / 10000; // 0x0024CC94 = 241.1668 V - Energy.current[0] = (float)Ade7880ReadVerify(ADE7880_AIRMS) / 1000000; // 0x00002D6D = 0.011629 A - Energy.voltage[1] = (float)Ade7880ReadVerify(ADE7880_BVRMS) / 10000; // 0x000003E8 - Energy.current[1] = (float)Ade7880ReadVerify(ADE7880_BIRMS) / 1000000; // 0x0000053C = 0.001340 A - Energy.voltage[2] = (float)Ade7880ReadVerify(ADE7880_CVRMS) / 10000; // 0x0000037D - Energy.current[2] = (float)Ade7880ReadVerify(ADE7880_CIRMS) / 1000000; // 0x00000547 = 0.001351 A - Ade7880.nirms = Ade7880ReadVerify(ADE7880_NIRMS); // 0x000026DF = 0.009951 A ?? - Ade7880.isum = Ade7880ReadVerify(ADE7880_ISUM); // 0x00000FBE = 0.004030 A ?? - Energy.active_power[0] = (float)Ade7880ReadVerify(ADE7880_AWATT) / 100; // 0xFFFFF524 = -27.79 W (reverse connected) - Energy.active_power[1] = (float)Ade7880ReadVerify(ADE7880_BWATT) / 100; // 0x00000000 - Energy.active_power[2] = (float)Ade7880ReadVerify(ADE7880_CWATT) / 100; // 0x00000000 - Energy.apparent_power[0] = (float)Ade7880ReadVerify(ADE7880_AVA) / 100; // 0xFFFFF50D - Energy.apparent_power[1] = (float)Ade7880ReadVerify(ADE7880_BVA) / 100; // 0xFFFFFFFF - Energy.apparent_power[2] = (float)Ade7880ReadVerify(ADE7880_CVA) / 100; // 0xFFFFFFFF - // Billable - Ade7880.active_energy[0] = Ade7880ReadVerify(ADE7880_AWATTHR); // 0xFFFFFF8F = -1.12 Whr ?? - Ade7880.active_energy[1] = Ade7880ReadVerify(ADE7880_BWATTHR); // 0x00000000 - Ade7880.active_energy[2] = Ade7880ReadVerify(ADE7880_CWATTHR); // 0x00000000 - Ade7880.apparent_energy[0] = Ade7880ReadVerify(ADE7880_AVAHR); // 0xFFFFFB9C = -11.23 VAr ?? - Ade7880.apparent_energy[1] = Ade7880ReadVerify(ADE7880_BVAHR); // 0xFFFFFFC7 - Ade7880.apparent_energy[2] = Ade7880ReadVerify(ADE7880_CVAHR); // 0xFFFFFFC6 - uint16_t comp_mode = Ade7880ReadVerify(ADE7880_COMPMODE); // 0x01FF (or 0x41FF) = Angles between phase voltages and phase currents are measured - uint32_t fline = (bitRead(comp_mode, 14)) ? 60 : 50; // Line frequency in Hz - Ade7880.angle[0] = Ade7880ReadVerify(ADE7880_ANGLE0); // 0x13FD = cos(5117 * 360 * fline / 256000) = cos_phi - Ade7880.angle[1] = Ade7880ReadVerify(ADE7880_ANGLE1); // 0x0706 - Ade7880.angle[2] = Ade7880ReadVerify(ADE7880_ANGLE2); // 0x0859 - - Energy.frequency[0] = 256000.0f / Ade7880ReadVerify(ADE7880_APERIOD); // Page 34 and based on ADE7880_COMPMODE_FREQ - Energy.frequency[1] = 256000.0f / Ade7880ReadVerify(ADE7880_BPERIOD); - Energy.frequency[2] = 256000.0f / Ade7880ReadVerify(ADE7880_CPERIOD); #ifdef ADE7880_PROFILING AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Cycle in %d ms"), millis() - start); #endif // ADE7880_PROFILING @@ -608,55 +549,112 @@ void Ade7880EnergyEverySecond(void) { } } +void Ade7880Defaults(void) { + Ade7880.calib_frequency = ADE7880_FREQ_INIT; + Ade7880.calib_current[0] = ADE7880_AIGAIN_INIT; + Ade7880.calib_current[1] = ADE7880_BIGAIN_INIT; + Ade7880.calib_current[2] = ADE7880_CIGAIN_INIT; + Ade7880.calib_current[3] = ADE7880_NIGAIN_INIT; + Ade7880.calib_voltage[0] = ADE7880_AVGAIN_INIT; + Ade7880.calib_voltage[1] = ADE7880_BVGAIN_INIT; + Ade7880.calib_voltage[2] = ADE7880_CVGAIN_INIT; + Ade7880.calib_acpower[0] = ADE7880_APGAIN_INIT; + Ade7880.calib_acpower[1] = ADE7880_BPGAIN_INIT; + Ade7880.calib_acpower[2] = ADE7880_CPGAIN_INIT; + Ade7880.calib_angle[0] = ADE7880_APHCAL_INIT; + Ade7880.calib_angle[1] = ADE7880_BPHCAL_INIT; + Ade7880.calib_angle[2] = ADE7880_CPHCAL_INIT; +} + void Ade7880DrvInit(void) { if (PinUsed(GPIO_ADE7880_IRQ) && PinUsed(GPIO_ADE7880_IRQ, 1)) { + if (I2cSetDevice(ADE7880_ADDR)) { + I2cSetActiveFound(ADE7880_ADDR, "ADE7880"); -#ifdef ADE7880_PROFILING - uint32_t start = millis(); -#endif // ADE7880_PROFILING + pinMode(Pin(GPIO_ADE7880_IRQ), INPUT); + attachInterrupt(Pin(GPIO_ADE7880_IRQ), Ade7880Isr0, FALLING); + Ade7880.irq0_state = 0; + pinMode(Pin(GPIO_ADE7880_IRQ, 1), INPUT); - int reset = Pin(GPIO_RESET); - if (-1 == reset) { reset = 16; } // Reset pin ADE7880 in Shelly 3EM - pinMode(reset, OUTPUT); - digitalWrite(reset, 0); - delay(1); - digitalWrite(reset, 1); - pinMode(reset, INPUT); + Ade7880Defaults(); - pinMode(Pin(GPIO_ADE7880_IRQ), INPUT); - attachInterrupt(Pin(GPIO_ADE7880_IRQ), Ade7880Isr0, FALLING); - Ade7880.irq0_state = 0; - pinMode(Pin(GPIO_ADE7880_IRQ, 1), INPUT); - attachInterrupt(Pin(GPIO_ADE7880_IRQ, 1), Ade7880Isr1, FALLING); - Ade7880.irq1_state = 0; - - uint32_t timeout = millis() + 400; - while (!TimeReached(timeout)) { // Wait up to 400 mSec - if (1 == Ade7880.irq1_state) { - -#ifdef ADE7880_PROFILING - AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Reset in %d ms"), millis() - start); -#endif // ADE7880_PROFILING - - if (Ade7880Service1()) { - if (I2cSetDevice(ADE7880_ADDR)) { - I2cSetActiveFound(ADE7880_ADDR, "ADE7880"); - Energy.phase_count = 3; // Three phases -// Settings->flag5.energy_phase = 1; // SetOption129 - (Energy) Show phase information -// Energy.use_overtemp = true; // Use global temperature for overtemp detection - TasmotaGlobal.energy_driver = XNRG_23; - } - } - break; + if (Ade7880SetCalibrate()) { + Energy.phase_count = 3; // Three phases +// Settings->flag5.energy_phase = 1; // SetOption129 - (Energy) Show phase information +// Energy.use_overtemp = true; // Use global temperature for overtemp detection + TasmotaGlobal.energy_driver = XNRG_23; } } } } bool Ade7880Command(void) { - // Investigate for need calibration of all three phases - bool serviced = true; + bool serviced = false; + if (CMND_ENERGYCONFIG == Energy.command_code) { + if (XdrvMailbox.data_len) { + // {"rms":{"current_a":3166385,"current_b":3125691,"current_c":3131983,"current_s":1756557,"voltage_a":-767262,"voltage_b":-763439,"voltage_c":-749854},"angles":{"angle0":180,"angle1":176,"angle2":176},"powers":{"totactive": {"a":-1345820,"b":-1347328,"c":-1351979}},"freq":0} + JsonParser parser(XdrvMailbox.data); + JsonParserObject root = parser.getRootObject(); + if (root) { + Ade7880Defaults(); + // All parameters are optional allowing for partial changes + JsonParserToken val = root[PSTR("freq")]; + if (val) { Ade7880.calib_frequency = val.getUInt(); } + JsonParserObject rms = root[PSTR("rms")].getObject(); + if (rms) { + val = rms[PSTR("current_a")]; + if (val) { Ade7880.calib_current[0] = val.getInt(); } + val = rms[PSTR("current_b")]; + if (val) { Ade7880.calib_current[1] = val.getInt(); } + val = rms[PSTR("current_c")]; + if (val) { Ade7880.calib_current[2] = val.getInt(); } + val = rms[PSTR("current_s")]; + if (val) { Ade7880.calib_current[3] = val.getInt(); } + val = rms[PSTR("voltage_a")]; + if (val) { Ade7880.calib_voltage[0] = val.getInt(); } + val = rms[PSTR("voltage_b")]; + if (val) { Ade7880.calib_voltage[1] = val.getInt(); } + val = rms[PSTR("voltage_c")]; + if (val) { Ade7880.calib_voltage[2] = val.getInt(); } + } + JsonParserObject angles = root[PSTR("angles")].getObject(); + if (angles) { + val = angles[PSTR("angle0")]; + if (val) { Ade7880.calib_angle[0] = val.getUInt(); } + val = angles[PSTR("angle1")]; + if (val) { Ade7880.calib_angle[1] = val.getUInt(); } + val = angles[PSTR("angle2")]; + if (val) { Ade7880.calib_angle[2] = val.getUInt(); } + } + JsonParserObject powers = root[PSTR("powers")].getObject(); + if (powers) { + JsonParserObject totactive = powers[PSTR("totactive")].getObject(); + if (totactive) { + val = totactive[PSTR("a")]; + if (val) { Ade7880.calib_acpower[0] = val.getInt(); } + val = totactive[PSTR("b")]; + if (val) { Ade7880.calib_acpower[1] = val.getInt(); } + val = totactive[PSTR("c")]; + if (val) { Ade7880.calib_acpower[2] = val.getInt(); } + } + } + + bool status = Ade7880SetCalibrate(); + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Re-init status %d"), status); + } + } + Response_P(PSTR("{\"%s\":{" + "\"rms\":{\"current_a\":%d,\"current_b\":%d,\"current_c\":%d,\"current_s\":%d,\"voltage_a\":%d,\"voltage_b\":%d,\"voltage_c\":%d}," + "\"angles\":{\"angle0\":%d,\"angle1\":%d,\"angle2\":%d}," + "\"powers\":{\"totactive\":{\"a\":%d,\"b\":%d,\"c\":%d}},\"freq\":%d}}"), + XdrvMailbox.command, + Ade7880.calib_current[0], Ade7880.calib_current[1], Ade7880.calib_current[2], Ade7880.calib_current[3], + Ade7880.calib_voltage[0], Ade7880.calib_voltage[1], Ade7880.calib_voltage[2], + Ade7880.calib_angle[0], Ade7880.calib_angle[1], Ade7880.calib_angle[2], + Ade7880.calib_acpower[0], Ade7880.calib_acpower[1], Ade7880.calib_acpower[2], Ade7880.calib_frequency); + serviced = true; + } return serviced; } @@ -672,8 +670,7 @@ bool Xnrg23(uint8_t function) { switch (function) { case FUNC_LOOP: - if (1 == Ade7880.irq0_state) { Ade7880Service0(); } -// if (1 == Ade7880.irq1_state) { Ade7880Service1(); } + if (Ade7880.irq0_state) { Ade7880Service0(); } break; case FUNC_ENERGY_EVERY_SECOND: Ade7880EnergyEverySecond(); From 575beba8827c45105657eab95df9d217f9b0cb2c Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Tue, 8 Mar 2022 22:22:57 +0100 Subject: [PATCH 176/355] LVGL add support for lv_anim --- lib/libesp32/berry/generate/be_const_strtab.h | 2 + .../berry/generate/be_const_strtab_def.h | 2247 +++++++++-------- .../berry_mapping/src/be_const_members.c | 6 +- .../lv_berry/generate/be_lv_c_mapping.h | 30 + .../lv_berry/generate/be_lvgl_module.c | 17 +- .../lv_berry/generate/be_lvgl_widgets_lib.c | 51 + lib/libesp32_lvgl/lv_berry/mapping/lv_enum.h | 11 +- lib/libesp32_lvgl/lv_berry/mapping/lv_funcs.h | 31 + lib/libesp32_lvgl/lv_berry/src/be_lv_extra.c | 145 +- .../lv_berry/src/embedded/lvgl_ctypes.be | 30 + .../lv_berry/src/embedded/lvgl_extra.be | 14 + lib/libesp32_lvgl/lv_berry/src/lv_berry.c | 28 + lib/libesp32_lvgl/lv_berry/tools/convert.py | 33 +- .../lv_berry/tools/preprocessor.py | 13 +- tasmota/xdrv_52_7_berry_embedded.ino | 1 + 15 files changed, 1500 insertions(+), 1159 deletions(-) diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h index d043f9f1a..a4bfa0ae5 100644 --- a/lib/libesp32/berry/generate/be_const_strtab.h +++ b/lib/libesp32/berry/generate/be_const_strtab.h @@ -572,6 +572,7 @@ extern const bcstring be_const_str_lv_point_arr; extern const bcstring be_const_str_lv_signal_arcs; extern const bcstring be_const_str_lv_signal_bars; extern const bcstring be_const_str_lv_solidified; +extern const bcstring be_const_str_lv_style_prop_arr; extern const bcstring be_const_str_lv_timer_cb; extern const bcstring be_const_str_lv_wifi_arcs; extern const bcstring be_const_str_lv_wifi_arcs_icon; @@ -807,6 +808,7 @@ extern const bcstring be_const_str_strftime; extern const bcstring be_const_str_string; extern const bcstring be_const_str_strip; extern const bcstring be_const_str_strptime; +extern const bcstring be_const_str_style_prop_arr; extern const bcstring be_const_str_subscribe; extern const bcstring be_const_str_success; extern const bcstring be_const_str_super; diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h index b494c7c3a..608be89fe 100644 --- a/lib/libesp32/berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/berry/generate/be_const_strtab_def.h @@ -1,840 +1,842 @@ -be_define_const_str(, "", 2166136261u, 0, 0, NULL); -be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_r); -be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_SERIAL_6N1); -be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str_GET); -be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_lv_obj_class); -be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str_AudioFileSourceFS); -be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, NULL); -be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E); -be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_set_power); -be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E); -be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_discover); -be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str__X2F_X3Frst_X3D); -be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str__X2Etapp); -be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_dim); -be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_Tele); -be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B); -be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_set_rate); -be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str__global_def); -be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str__X7B); -be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_page_autoconf_ctl); -be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E); -be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_file); -be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20); -be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, NULL); -be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_get_vbus_voltage); -be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27); -be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str__read); -be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str__X2Elen); -be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, NULL); -be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, NULL); -be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_EVENT_DELETE); -be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_obj); -be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function); -be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str__X3Clambda_X3E); -be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str__X3E_X3D); -be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_lv_); -be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_assign_rmt); -be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_persist); -be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_CFG_X3A_X20loading_X20); -be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str__X3F); -be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_o); -be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_back_forth); -be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_display); -be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_arg_size); -be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_issubclass); -be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, &be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_add_fast_loop); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_OpusDecoder); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_get_log); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_set_style_radius); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, NULL); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_write_gpio); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_ALIGN_LEFT_MID); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_WS2812_GRB); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, NULL); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_HTTP_GET); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, NULL); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_math); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, NULL); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, NULL); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__persist_X2Ejson); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_get_aps_voltage); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_wire_scan); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_get_cb_list); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_reapply); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_exec_cmd); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_format); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_lv_module_init); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_range); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_tomap); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_imin); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_SK6812_GRBW); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_char); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str__crons); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__persist_X2Ejson); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_get_aps_voltage); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_wire_scan); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_get_cb_list); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_reapply); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_exec_cmd); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_format); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_lv_module_init); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_range); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_tomap); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_imin); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_SK6812_GRBW); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_char); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str__crons); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_autoexec); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_pi); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_json_fdump_list); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_has_arg); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_AudioOutput); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_AES_GCM); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_a); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_SERIAL_8N1); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, NULL); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, NULL); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_decrypt); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_atleast1); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_value_error); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_SERIAL_8O1); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_constructor_cb); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_autoexec); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_pi); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_json_fdump_list); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_has_arg); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_AudioOutput); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_AES_GCM); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_a); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_SERIAL_8N1); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, NULL); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, NULL); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_decrypt); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_atleast1); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_value_error); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_SERIAL_8O1); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_constructor_cb); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__persist_X2Ejson); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_get_aps_voltage); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_wire_scan); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_get_cb_list); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_reapply); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_exec_cmd); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_format); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_lv_module_init); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_range); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_tomap); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_imin); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_SK6812_GRBW); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_char); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str__crons); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__persist_X2Ejson); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_get_aps_voltage); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_wire_scan); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_get_cb_list); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_reapply); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_exec_cmd); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_format); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_lv_module_init); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_range); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_tomap); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_imin); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_SK6812_GRBW); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_char); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str__crons); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_atan); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_SERIAL_7N1); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_bri); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, NULL); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_bytes); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_SERIAL_6O1); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_rounded); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_SERIAL_7E2); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, NULL); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_has_arg); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_content_send_style); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_get_log); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_success); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_ins_goto); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_SERIAL_7O2); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_real); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_atan); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_SERIAL_7N1); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_bri); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, NULL); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_bytes); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_SERIAL_6O1); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_rounded); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_SERIAL_7E2); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str__X2E); +be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_event_send); +be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_Tele); +be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str__X2Fac); +be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_RGBCT); +be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str_tasmota_log_reader); +be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_web_add_config_button); +be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_pin_used); +be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson); +be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_decompress); +be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_pow); +be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_return_X20code_X3D_X25i); +be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_content_send_style); +be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_event_cb); +be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_gpio); +be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_digital_write); +be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_try_compile); +be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_chars_in_string); +be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_add); +be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_detect); +be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_arg_name); +be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_CFG_X3A_X20removing_X20autoconf_X20files); +be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_add_handler); +be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_CFG_X3A_X20loading_X20); +be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj); +be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E); +be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str__global_def); +be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_atleast1); +be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_AudioOpusDecoder); +be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_cmd_res); +be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29); +be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_CFG_X3A_X20return_code_X3D_X25i); +be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_a); +be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str__end_transmission); +be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str__X2Ew); +be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf); +be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_keys); +be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_BUTTON_CONFIGURATION); +be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str__rmt); +be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_POST); +be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_read_sensors); +be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_driver_name); +be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_content_start); +be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found); +be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_AXP192); +be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, &be_const_str_CFG_X3A_X20loaded_X20_X20); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_gamma8); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_tostring); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_SERIAL_8N1); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_count); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_p1); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_lv_signal_arcs); be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, NULL); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_has_arg); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_content_send_style); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_get_log); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_success); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_ins_goto); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_SERIAL_7O2); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_real); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "", 4247924536u, 0, 19, &be_const_str_ins_ramp); +be_define_const_str(_X3D, "=", 940354920u, 0, 1, &be_const_str_arg); +be_define_const_str(_X3D_X3C_X3E_X21, "=<>!", 2664470277u, 0, 4, &be_const_str_lv_); +be_define_const_str(_X3D_X3D, "==", 2431966415u, 0, 2, &be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20); +be_define_const_str(_X3E, ">", 990687777u, 0, 1, &be_const_str_get_power); +be_define_const_str(_X3E_X3D, ">=", 284975636u, 0, 2, &be_const_str_get_current_module_name); +be_define_const_str(_X3F, "?", 973910158u, 0, 1, &be_const_str_SERIAL_8O1); +be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, &be_const_str_animate); +be_define_const_str(ALIGN_BOTTOM_MID, "ALIGN_BOTTOM_MID", 3933267889u, 0, 16, &be_const_str_CFG_X3A_X20ran_X20_X20); +be_define_const_str(ALIGN_LEFT_MID, "ALIGN_LEFT_MID", 1043035067u, 0, 14, &be_const_str_push); +be_define_const_str(AXP192, "AXP192", 757230128u, 0, 6, &be_const_str_get_alternate); +be_define_const_str(Animate_X20pc_X20is_X20out_X20of_X20range, "Animate pc is out of range", 1854929421u, 0, 26, &be_const_str_introspect); +be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, &be_const_str__error); +be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str_can_show); +be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, NULL); +be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_break); +be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, NULL); +be_define_const_str(AudioOpusDecoder, "AudioOpusDecoder", 1187272062u, 0, 16, NULL); +be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, &be_const_str_lv_style_prop_arr); +be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_allocated); +be_define_const_str(Auto_X2Dconfiguration, "Auto-configuration", 1665006109u, 0, 18, &be_const_str_lv_obj); +be_define_const_str(BECDFE, "BECDFE", 608341218u, 0, 6, &be_const_str_gamma); +be_define_const_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, "BRY: ERROR, bad json: ", 2715135809u, 0, 22, &be_const_str_remote_ip); +be_define_const_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: Exception> '%s' - %s", 2246990964u, 0, 25, &be_const_str_get_cb_list); +be_define_const_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function, "BRY: argument must be a function", 3917068408u, 0, 32, NULL); +be_define_const_str(BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29, "BRY: bytecode has wrong version '%s' (%i)", 2140321415u, 0, 41, NULL); +be_define_const_str(BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27, "BRY: corrupt bytecode '%s'", 4009923544u, 0, 26, &be_const_str_send); +be_define_const_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, "BRY: could not save compiled file %s (%s)", 736659787u, 0, 41, &be_const_str_wd); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X29, "BRY: failed to load '%s' (%s)", 54995609u, 0, 29, &be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, "BRY: failed to load _persist.json", 2991913445u, 0, 33, NULL); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29, "BRY: failed to load compiled '%s' (%s)", 3488122666u, 0, 38, &be_const_str_find); +be_define_const_str(BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code, "BRY: failed to run compiled code", 4039762049u, 0, 32, &be_const_str_gamma10); +be_define_const_str(BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, "BRY: invalid hue payload: ", 203709367u, 0, 26, NULL); +be_define_const_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, "BRY: method not allowed, use a closure like '/ args -> obj.func(args)'", 177121572u, 0, 70, &be_const_str_fromb64); +be_define_const_str(BUTTON_CONFIGURATION, "BUTTON_CONFIGURATION", 70820856u, 0, 20, &be_const_str_line_dsc); +be_define_const_str(CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, "CFG: 'init.bat' done, restarting", 1569670677u, 0, 32, &be_const_str_MD5); +be_define_const_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "CFG: Exception> '%s' - %s", 1228874553u, 0, 25, &be_const_str_SERIAL_6N1); +be_define_const_str(CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, "CFG: No '*.autoconf' file found", 755798501u, 0, 31, &be_const_str_SERIAL_8O2); +be_define_const_str(CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, "CFG: could not run %s (%s - %s)", 1428829580u, 0, 31, NULL); +be_define_const_str(CFG_X3A_X20downloading_X20_X27_X25s_X27, "CFG: downloading '%s'", 589480701u, 0, 21, &be_const_str_touch_update); +be_define_const_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, "CFG: exception '%s' - '%s'", 4095407913u, 0, 26, NULL); +be_define_const_str(CFG_X3A_X20loaded_X20_X20, "CFG: loaded ", 3710273538u, 0, 13, &be_const_str_sat); +be_define_const_str(CFG_X3A_X20loaded_X20_X27_X25s_X27, "CFG: loaded '%s'", 1699028828u, 0, 16, &be_const_str_find_key_i); +be_define_const_str(CFG_X3A_X20loading_X20, "CFG: loading ", 4010361503u, 0, 13, &be_const_str_Wire); +be_define_const_str(CFG_X3A_X20loading_X20_X27_X25s_X27, "CFG: loading '%s'", 2285306097u, 0, 17, &be_const_str_INTERNAL_PDM); +be_define_const_str(CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, "CFG: multiple autoconf files found, aborting ('%s' + '%s')", 197663371u, 0, 58, &be_const_str__global_addr); +be_define_const_str(CFG_X3A_X20ran_X20_X20, "CFG: ran ", 3579570472u, 0, 10, &be_const_str_screenshot); be_define_const_str(CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, "CFG: removed file '%s'", 2048602473u, 0, 22, NULL); -be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str_resp_cmnd_failed); +be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str_font_montserrat); be_define_const_str(CFG_X3A_X20removing_X20first_X20time_X20marker, "CFG: removing first time marker", 2125556683u, 0, 31, NULL); -be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_ip); -be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str_format); -be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str_available); -be_define_const_str(COLOR_BLACK, "COLOR_BLACK", 264427940u, 0, 11, &be_const_str_False); -be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, &be_const_str_hex); -be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str_get_cb_list); -be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, &be_const_str_set_rgb); -be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, NULL); -be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str_ctypes_bytes); -be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, NULL); -be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, &be_const_str_contains); -be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str_Unknown_X20command); -be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, &be_const_str_wifi_bars_icon); -be_define_const_str(False, "False", 2541049336u, 0, 5, NULL); +be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_EVENT_DELETE); +be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str__available); +be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str__begin_transmission); +be_define_const_str(COLOR_BLACK, "COLOR_BLACK", 264427940u, 0, 11, &be_const_str_json_append); +be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, &be_const_str_f); +be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str_hour); +be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, &be_const_str_tasmota); +be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_path); +be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str_cmd); +be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, &be_const_str_SERIAL_6N2); +be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, &be_const_str_content_button); +be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str_SERIAL_8E1); +be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, &be_const_str_SERIAL_5E2); +be_define_const_str(False, "False", 2541049336u, 0, 5, &be_const_str_resp_cmnd_error); be_define_const_str(GET, "GET", 2531704439u, 0, 3, NULL); -be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, NULL); -be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, &be_const_str_counters); -be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, &be_const_str_SERIAL_5E1); -be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, NULL); -be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str_dirty); -be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, NULL); -be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, &be_const_str_strftime); -be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str_ccronexpr); -be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, &be_const_str_abs); -be_define_const_str(MAX_RMT, "MAX_RMT", 1615574873u, 0, 7, &be_const_str_concat); -be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_ctypes_bytes_dyn); -be_define_const_str(None, "None", 810547195u, 0, 4, &be_const_str_dump); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_signal_bars); -be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_font_montserrat); -be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str_Tasmota); -be_define_const_str(POST, "POST", 1929554311u, 0, 4, NULL); -be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_find); -be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, &be_const_str_calldepth); -be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str__end_transmission); -be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, &be_const_str__X5D); -be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_lv_style_prop_arr); -be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, &be_const_str_resolvecmnd); -be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str__filename); -be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str_gen_cb); -be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_event_send); -be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_pin_used); -be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_tostring); -be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str__splash); -be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str_argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize); -be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_codedump); -be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_has); -be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, NULL); -be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_eth); -be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_find_op); -be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_content_send); -be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_arch); +be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, &be_const_str_lv_event); +be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, &be_const_str__debug_present); +be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, &be_const_str_insert); +be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_yield); +be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str_SK6812_GRBW); +be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_file); +be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, &be_const_str_range); +be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str_find_op); +be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, &be_const_str__X5B); +be_define_const_str(MAX_RMT, "MAX_RMT", 1615574873u, 0, 7, NULL); +be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, NULL); +be_define_const_str(None, "None", 810547195u, 0, 4, &be_const_str_valuer_error); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_assign_rmt); +be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_counters); +be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str_iter); +be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_imax); +be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_tag); +be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, NULL); +be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str_trig); +be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, &be_const_str_draw_line_dsc); +be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_get_temp); +be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, &be_const_str_minute); +be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_elements_X20must_X20be_X20a_X20lv_point); +be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str__ptr); +be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_get_log); +be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_add_cmd); +be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str__X5D); +be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str__drivers); +be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str__settings_ptr); +be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_get_aps_voltage); +be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str___lower__); +be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_get_bat_voltage); +be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_TASMOTA); +be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_lv_signal_bars); +be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, NULL); +be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, NULL); be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, NULL); -be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, NULL); -be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_set_gain); -be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_resp_cmnd_error); -be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, NULL); -be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_add); -be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, NULL); -be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_from_to); -be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_get_bat_voltage); -be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, NULL); -be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_add_cmd); -be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, &be_const_str_every_second); -be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str_atleast1); -be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, &be_const_str_dim); -be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, &be_const_str_draw_arc); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_local); -be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, &be_const_str_lvgl_timer_dispatch); -be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str_class); -be_define_const_str(True, "True", 3453902341u, 0, 4, &be_const_str_next_cron); -be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, &be_const_str_web_add_config_button); -be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, &be_const_str_scr_act); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_widget_editable); -be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, &be_const_str_string); -be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str_fromstring); -be_define_const_str(_X5B, "[", 3725336506u, 0, 1, &be_const_str_compile); -be_define_const_str(_X5D, "]", 3624670792u, 0, 1, &be_const_str_code); +be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_label); +be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_get_coords); +be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_pc_rel); +be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_base_class); +be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_get_bat_charge_current); +be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_power_off); +be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, NULL); +be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_lv_event_cb); +be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_abs); +be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, NULL); +be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, &be_const_str_decode); +be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str__timers); +be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, &be_const_str_set_x); +be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, NULL); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_classname); +be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, &be_const_str_connect); +be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str_pixels_buffer); +be_define_const_str(True, "True", 3453902341u, 0, 4, &be_const_str_json_fdump_map); +be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, NULL); +be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, &be_const_str_widget_cb); +be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_setbits); +be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, &be_const_str_rad); +be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str__); +be_define_const_str(_X5B, "[", 3725336506u, 0, 1, &be_const_str_create_matrix); +be_define_const_str(_X5D, "]", 3624670792u, 0, 1, NULL); be_define_const_str(_, "_", 3658226030u, 0, 1, NULL); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_base_class); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_timer_cb); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_event); -be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, &be_const_str__buffer); -be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, &be_const_str_for); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_widget_struct_default); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_color); -be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, NULL); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_b); -be_define_const_str(_change_buffer, "_change_buffer", 2101848693u, 0, 14, &be_const_str_out_X20of_X20range); -be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str__dirty); -be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_encrypt); -be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_close); -be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, NULL); -be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_draw_arc_dsc); -be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, &be_const_str_lv_point_arr); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_add_cron); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_top); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_running); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str__crons); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str__buffer); +be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, NULL); +be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, &be_const_str_add_driver); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, NULL); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_code); +be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str__energy); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_cos); +be_define_const_str(_change_buffer, "_change_buffer", 2101848693u, 0, 14, NULL); +be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_resp_cmnd_done); +be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, NULL); +be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_coord_arr); +be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, &be_const_str_add_anim); +be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_isinstance); +be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, NULL); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, NULL); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str__lvgl); be_define_const_str(_energy, "_energy", 535372070u, 0, 7, NULL); -be_define_const_str(_error, "_error", 1132109656u, 0, 6, &be_const_str_cb); -be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, &be_const_str_content_button); -be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_show); -be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, NULL); -be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_arg_size); -be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, NULL); -be_define_const_str(_p, "_p", 1594591802u, 0, 2, NULL); -be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_clear_to); -be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_ismethod); -be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); -be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_every_50ms); -be_define_const_str(_rmt, "_rmt", 1094422685u, 0, 4, &be_const_str_constructor_cb); -be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_module); -be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, &be_const_str_font_seg7); -be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_decrypt); -be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, &be_const_str_round_end); -be_define_const_str(_t, "_t", 1527481326u, 0, 2, &be_const_str_find_key_i); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_public_key); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_clear_first_time); -be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_pin); -be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, NULL); -be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_null_cb); -be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_exp); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_get_aps_voltage); -be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_get_vbus_voltage); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, NULL); -be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_ins_time); -be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, &be_const_str_arc_dsc); -be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, &be_const_str_read8); -be_define_const_str(add_header, "add_header", 927130612u, 0, 10, &be_const_str_set_pixel_color); -be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, NULL); -be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_rule); -be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_decompress); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_gpio); -be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, &be_const_str_has_X20already_X20an_X20event_X20callback); -be_define_const_str(animate, "animate", 3885786800u, 0, 7, &be_const_str_time_str); -be_define_const_str(animators, "animators", 279858213u, 0, 9, NULL); -be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_web_add_management_button); -be_define_const_str(arch, "arch", 2952804297u, 0, 4, &be_const_str_content_start); -be_define_const_str(area, "area", 2601460036u, 0, 4, &be_const_str_before_del); -be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_fromb64); -be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, NULL); -be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, NULL); -be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, &be_const_str_push_path); -be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_search); -be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, NULL); -be_define_const_str(argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize, "argument must be a list or a pointer+size", 241605448u, 0, 41, &be_const_str_digital_read); +be_define_const_str(_error, "_error", 1132109656u, 0, 6, NULL); +be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, &be_const_str_try_rule); +be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_battery_present); +be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, &be_const_str_add_rule); +be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_list); +be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_try_get_bec_version); +be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_pin_mode); +be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_acos); +be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str__splash); +be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_exec_cmd); +be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_from_to); +be_define_const_str(_rmt, "_rmt", 1094422685u, 0, 4, NULL); +be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_remove_driver); +be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, NULL); +be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, NULL); +be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, NULL); +be_define_const_str(_t, "_t", 1527481326u, 0, 2, &be_const_str_reset); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_ctor); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_tomap); +be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_draw_ctx); +be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_has_arg); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_pixel_count); +be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_rtc); +be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_id); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_ismethod); +be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_clear_first_time); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_get_style_line_color); +be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_has_X20already_X20an_X20event_X20callback); +be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, NULL); +be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, &be_const_str_hs2rgb); +be_define_const_str(add_header, "add_header", 927130612u, 0, 10, &be_const_str_contains); +be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, &be_const_str_cb); +be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_function); +be_define_const_str(addr, "addr", 1087856498u, 0, 4, NULL); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_widget_event_cb); +be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, &be_const_str_ctypes_bytes); +be_define_const_str(animate, "animate", 3885786800u, 0, 7, &be_const_str_cosh); +be_define_const_str(animators, "animators", 279858213u, 0, 9, &be_const_str_concat); +be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_target); +be_define_const_str(arch, "arch", 2952804297u, 0, 4, NULL); +be_define_const_str(area, "area", 2601460036u, 0, 4, &be_const_str_x1); +be_define_const_str(arg, "arg", 1047474471u, 0, 3, NULL); +be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, &be_const_str_static); +be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_flush); +be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, &be_const_str_init_draw_arc_dsc); +be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_fast_loop); +be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, &be_const_str_page_autoconf_ctl); +be_define_const_str(argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize, "argument must be a list or a pointer+size", 241605448u, 0, 41, &be_const_str_str); be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_back_forth); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_lv); -be_define_const_str(assign_rmt, "assign_rmt", 1047642576u, 0, 10, &be_const_str_get_style_line_color); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_draw_arc_dsc_init); -be_define_const_str(atan, "atan", 108579519u, 0, 4, NULL); -be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, &be_const_str_create_matrix); -be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, &be_const_str_delay); -be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_elements_X20must_X20be_X20a_X20lv_point); -be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_content_flush); -be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, NULL); -be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_break); -be_define_const_str(b, "b", 3876335077u, 0, 1, &be_const_str_light_state); -be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, &be_const_str_set_matrix_pixel_color); -be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, &be_const_str_cmd); -be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_widget_width_def); -be_define_const_str(before_del, "before_del", 815924436u, 0, 10, NULL); -be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_lower); -be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, &be_const_str_create_segment); -be_define_const_str(bool, "bool", 3365180733u, 0, 4, &be_const_str_map); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_save_before_restart); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_fast_loop_enabled); +be_define_const_str(assign_rmt, "assign_rmt", 1047642576u, 0, 10, &be_const_str_compile); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL); +be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_collect); +be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, NULL); +be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, &be_const_str_dirty); +be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_get_input_power_status); +be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_get_bat_power); +be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, &be_const_str_gc); +be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_full_state); +be_define_const_str(b, "b", 3876335077u, 0, 1, NULL); +be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, &be_const_str_persist); +be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, &be_const_str_lvgl_event_dispatch); +be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_get_percentage); +be_define_const_str(before_del, "before_del", 815924436u, 0, 10, &be_const_str_get_vbus_voltage); +be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_bool); +be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, NULL); +be_define_const_str(bool, "bool", 3365180733u, 0, 4, NULL); be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); be_define_const_str(bri, "bri", 2112284244u, 0, 3, NULL); -be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_get_power); -be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_lv_); -be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_tr); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_id); -be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_lv_point); -be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_srand); -be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, &be_const_str_floor); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_quality); -be_define_const_str(can_show, "can_show", 960091187u, 0, 8, NULL); -be_define_const_str(cb, "cb", 1428787088u, 0, 2, &be_const_str_group_def); +be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_destructor_cb); +be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29); +be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, NULL); +be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_pop_path); +be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_read8); +be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, &be_const_str_draw_line_dsc_init); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, NULL); +be_define_const_str(can_show, "can_show", 960091187u, 0, 8, &be_const_str_lv_wifi_arcs_icon); +be_define_const_str(cb, "cb", 1428787088u, 0, 2, &be_const_str_clear); be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, NULL); -be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, &be_const_str_connect); -be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, &be_const_str_finish); -be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, &be_const_str_get_style_bg_color); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_write_bit); -be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_get_string); -be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_set_style_line_color); -be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, &be_const_str_set_height); +be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, &be_const_str_content_stop); +be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, &be_const_str_instance_size); +be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, &be_const_str_get_battery_chargin_status); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_energy_struct); +be_define_const_str(char, "char", 2823553821u, 0, 4, NULL); +be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_obj_class_create_obj); +be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, NULL); be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, NULL); be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, &be_const_str_number); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_set_channels); -be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_cmd_res); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_offset); -be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_duration); -be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, &be_const_str_w); -be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, &be_const_str_init); -be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_resp_cmnd_done); -be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_discover); +be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, NULL); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_lv_point); +be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_delete_all_configs); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_publish); +be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_consume_mono); +be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, &be_const_str_enabled); +be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, &be_const_str_io_error); +be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_gen_cb); +be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_hue_status); be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, NULL); -be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_remove_cmd); -be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_log10); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_delete_all_configs); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_get_warning_level); -be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_init_draw_arc_dsc); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, NULL); -be_define_const_str(compress, "compress", 2818084237u, 0, 8, &be_const_str_select); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_display); -be_define_const_str(connect, "connect", 2866859257u, 0, 7, &be_const_str_splash_init); -be_define_const_str(connected, "connected", 1424938192u, 0, 9, NULL); -be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, &be_const_str_listdir); -be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, &be_const_str_draw_ctx); +be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_display_X2Eini); +be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_set_ldo_voltage); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, NULL); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, NULL); +be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_deinit); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_get_option); +be_define_const_str(compress, "compress", 2818084237u, 0, 8, &be_const_str_debug); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_content_flush); +be_define_const_str(connect, "connect", 2866859257u, 0, 7, NULL); +be_define_const_str(connected, "connected", 1424938192u, 0, 9, &be_const_str_set); +be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, &be_const_str_members); +be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, &be_const_str_set_pwm); be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, NULL); -be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, NULL); -be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, NULL); -be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_run_deferred); -be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_set_zoom); -be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, NULL); -be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_get_bat_power); -be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, NULL); +be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, &be_const_str_widget_dtor_impl); +be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, &be_const_str_lv_wifi_arcs); +be_define_const_str(contains, "contains", 1825239352u, 0, 8, NULL); +be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_lv_clock_icon); +be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_draw_arc_dsc_init); +be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_create_custom_widget); +be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, &be_const_str_o); be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, NULL); -be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_send); +be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_point); be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, NULL); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_settings); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_get_width); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_fast_loop_enabled); -be_define_const_str(couldn_X27t_X20not_X20initialize_X20noepixelbus, "couldn't not initialize noepixelbus", 2536490812u, 0, 35, &be_const_str_next); -be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_set_width); -be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_power_off); -be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, &be_const_str_memory); +be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, &be_const_str_wifi_bars); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_next); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_get_bat_current); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_full_status); +be_define_const_str(couldn_X27t_X20not_X20initialize_X20noepixelbus, "couldn't not initialize noepixelbus", 2536490812u, 0, 35, &be_const_str_year); +be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_dim); +be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_run_cron); +be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, &be_const_str_set_style_line_color); be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, NULL); -be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, &be_const_str_set_style_text_font); -be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_instance); -be_define_const_str(ctor, "ctor", 375399343u, 0, 4, &be_const_str_set_tasmota_logo); -be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_read24); -be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, &be_const_str_decode); -be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_send_multicast); -be_define_const_str(day, "day", 3830391293u, 0, 3, &be_const_str_json_fdump_map); -be_define_const_str(debug, "debug", 1483009432u, 0, 5, &be_const_str_get_current_module_name); -be_define_const_str(decode, "decode", 3007678287u, 0, 6, &be_const_str_energy_struct); -be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, &be_const_str_escape); -be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_get_vbus_current); +be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, NULL); +be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_log); +be_define_const_str(ctor, "ctor", 375399343u, 0, 4, NULL); +be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_decrypt); +be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, &be_const_str_var); +be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_input); +be_define_const_str(day, "day", 3830391293u, 0, 3, &be_const_str_deg); +be_define_const_str(debug, "debug", 1483009432u, 0, 5, &be_const_str_ins_time); +be_define_const_str(decode, "decode", 3007678287u, 0, 6, &be_const_str_lv_wifi_bars); +be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, &be_const_str_solidified); +be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, NULL); be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_draw_line_dsc); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_print); -be_define_const_str(del, "del", 3478752842u, 0, 3, NULL); -be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_invalidate); -be_define_const_str(delete_all_configs, "delete_all_configs", 2382067578u, 0, 18, &be_const_str_get_alternate); -be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_lv_module_init); -be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_ptr); -be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, &be_const_str_isinstance); -be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_item); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_hue_ntv); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, NULL); +be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_getbits); +be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_type); +be_define_const_str(delete_all_configs, "delete_all_configs", 2382067578u, 0, 18, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson); +be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_sec); +be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_web_add_button); +be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, &be_const_str_instance_X20required); +be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL); be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, NULL); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_is_first_time); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_pixel_count); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, NULL); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, NULL); be_define_const_str(dim, "dim", 3496118841u, 0, 3, NULL); -be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, &be_const_str_light); -be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, &be_const_str_millis); -be_define_const_str(discover, "discover", 1383599054u, 0, 8, NULL); -be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_get_free_heap); -be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, NULL); +be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, NULL); +be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, &be_const_str_remote_port); +be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_get_string); +be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_is_first_time); +be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, &be_const_str_load_templates); be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); -be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, NULL); -be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, &be_const_str_fromptr); -be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, &be_const_str_get_pixel_color); -be_define_const_str(draw_ctx, "draw_ctx", 953366593u, 0, 8, NULL); -be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_fast_loop); -be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_pixels_buffer); -be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, &be_const_str_set_dcdc_enable); -be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, &be_const_str_remote_port); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); -be_define_const_str(duration, "duration", 799079693u, 0, 8, NULL); -be_define_const_str(editable, "editable", 60532369u, 0, 8, &be_const_str_get_bat_current); -be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_get_current_module_path); +be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, &be_const_str_hue); +be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, NULL); +be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, &be_const_str_strftime); +be_define_const_str(draw_ctx, "draw_ctx", 953366593u, 0, 8, &be_const_str_eth); +be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_has); +be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_global); +be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, &be_const_str_every_second); +be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, NULL); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_escape); +be_define_const_str(duration, "duration", 799079693u, 0, 8, &be_const_str_set_time); +be_define_const_str(editable, "editable", 60532369u, 0, 8, &be_const_str_ip); +be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_pi); be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); -be_define_const_str(enabled, "enabled", 49525662u, 0, 7, &be_const_str_remove_cron); -be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, NULL); +be_define_const_str(enabled, "enabled", 49525662u, 0, 7, &be_const_str_set_rgb); +be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_reverse_gamma10); be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, NULL); -be_define_const_str(engine, "engine", 3993360443u, 0, 6, NULL); -be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); -be_define_const_str(escape, "escape", 2652972038u, 0, 6, NULL); -be_define_const_str(eth, "eth", 2191266556u, 0, 3, &be_const_str_tanh); -be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_upper); -be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, &be_const_str_reset_search); -be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_set_rate); -be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, &be_const_str__X7D); -be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, &be_const_str_tan); -be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, &be_const_str_imin); -be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_internal_error); +be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, &be_const_str_font_embedded); +be_define_const_str(engine, "engine", 3993360443u, 0, 6, &be_const_str_on); +be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_load); +be_define_const_str(escape, "escape", 2652972038u, 0, 6, &be_const_str_fromptr); +be_define_const_str(eth, "eth", 2191266556u, 0, 3, &be_const_str_target_search); +be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_widget_ctor_cb); +be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, NULL); +be_define_const_str(event_send, "event_send", 598925582u, 0, 10, NULL); +be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, &be_const_str_module); +be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, NULL); +be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, &be_const_str_time_dump); +be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_lv_obj_class); be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_lv_event); -be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, NULL); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, NULL); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_webclient); +be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_fromstring); be_define_const_str(exists, "exists", 1002329533u, 0, 6, NULL); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, NULL); -be_define_const_str(f, "f", 3809224601u, 0, 1, NULL); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_w); +be_define_const_str(f, "f", 3809224601u, 0, 1, &be_const_str_get_switch); be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, NULL); -be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, &be_const_str_lv_wifi_bars); -be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_set_reachable); -be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, &be_const_str_gc); -be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_init_draw_line_dsc); -be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_is_dirty); -be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL); -be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_hue_status); +be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, &be_const_str_quality); +be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, NULL); +be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_seg7_font); +be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, NULL); +be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_isnan); +be_define_const_str(find, "find", 3186656602u, 0, 4, NULL); +be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_int); +be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_finish); be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_load_templates); -be_define_const_str(flush, "flush", 3002334877u, 0, 5, &be_const_str_load); -be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_min); -be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, &be_const_str_run); -be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, &be_const_str_get_bri); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_log10); +be_define_const_str(flush, "flush", 3002334877u, 0, 5, NULL); +be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, NULL); +be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, &be_const_str_model); +be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, NULL); be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_introspect); -be_define_const_str(from_to, "from_to", 21625507u, 0, 7, &be_const_str_gamma10); -be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, &be_const_str_try_get_bec_version); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_img); +be_define_const_str(from_to, "from_to", 21625507u, 0, 7, &be_const_str_super); +be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, &be_const_str_json_fdump_any); be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, NULL); be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, NULL); -be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_while); -be_define_const_str(full_status, "full_status", 648242459u, 0, 11, &be_const_str_leds); -be_define_const_str(function, "function", 2664841801u, 0, 8, &be_const_str_get_input_power_status); -be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, NULL); -be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_p1); -be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_set_y); -be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, NULL); -be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_time_dump); -be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_model); -be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, &be_const_str_refr_now); +be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032); +be_define_const_str(full_status, "full_status", 648242459u, 0, 11, &be_const_str_listdir); +be_define_const_str(function, "function", 2664841801u, 0, 8, NULL); +be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, &be_const_str_invalid_X20GPIO_X20number); +be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_widget_instance_size); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, NULL); +be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL); +be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_print); +be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_internal_error); +be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_register_button_encoder); +be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, &be_const_str_get_switches); be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, NULL); -be_define_const_str(get_bat_current, "get_bat_current", 1912106073u, 0, 15, &be_const_str_url_encode); -be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, &be_const_str_pixel_size); -be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, &be_const_str_height_def); -be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, &be_const_str_issubclass); -be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, &be_const_str_response_append); -be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, &be_const_str_write_gpio); -be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, &be_const_str_nan); -be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, NULL); -be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, &be_const_str_get_percentage); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_pow); -be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, &be_const_str_set_ct); -be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032); +be_define_const_str(get_bat_current, "get_bat_current", 1912106073u, 0, 15, NULL); +be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, &be_const_str_make_cb); +be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, &be_const_str_set_reachable); +be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, &be_const_str_read12); +be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, NULL); +be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, NULL); +be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, NULL); +be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, &be_const_str_lv_wifi_bars_icon); +be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, NULL); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_i2c_enabled); +be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, &be_const_str_reverse); +be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_light_to_id); be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, NULL); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_publish); -be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, &be_const_str_global); -be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, &be_const_str_point); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_set_light); +be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, NULL); +be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, &be_const_str_set_zoom); be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL); -be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, NULL); -be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_size); -be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); +be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, &be_const_str_last_modified); +be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_set_style_text_font); +be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, &be_const_str_millis); be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, NULL); -be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, &be_const_str_read_bytes); -be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, &be_const_str_lv_obj); -be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, &be_const_str_pop); -be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, NULL); -be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, NULL); -be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, &be_const_str_geti); -be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, &be_const_str_set_huesat); -be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, &be_const_str_keys); -be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, &be_const_str_set_time); -be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str_tasmota); -be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_iter); -be_define_const_str(geti, "geti", 2381006490u, 0, 4, NULL); -be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_instance_size); -be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, NULL); -be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_reset); +be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, &be_const_str_scale_uint); +be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, &be_const_str_pop); +be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, NULL); +be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str_geti); +be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, &be_const_str_min); +be_define_const_str(get_switches, "get_switches", 4116216928u, 0, 12, &be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27); +be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); +be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); +be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, &be_const_str_preinit); +be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, &be_const_str_toupper); +be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str__X7B); +be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_hex); +be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_lv_timer_cb); +be_define_const_str(global, "global", 503252654u, 0, 6, NULL); +be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, &be_const_str_pc_abs); +be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, NULL); be_define_const_str(groups, "groups", 2943077229u, 0, 6, NULL); -be_define_const_str(h, "h", 3977000791u, 0, 1, &be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); -be_define_const_str(has, "has", 3988721635u, 0, 3, NULL); -be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, NULL); -be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, NULL); -be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_remove_light); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_webclient); -be_define_const_str(hour, "hour", 3053661199u, 0, 4, NULL); -be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, NULL); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, &be_const_str_tasmota_log_reader); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, &be_const_str_stop_iteration); -be_define_const_str(hue, "hue", 3817694041u, 0, 3, NULL); -be_define_const_str(hue_ntv, "hue_ntv", 705068642u, 0, 7, &be_const_str_wire2); -be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map); -be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, &be_const_str_last_modified); -be_define_const_str(id, "id", 926444256u, 0, 2, NULL); +be_define_const_str(h, "h", 3977000791u, 0, 1, &be_const_str_height_def); +be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_lv_module_init); +be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, &be_const_str_try_run_compiled); +be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_lvgl_timer_dispatch); +be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_round_end); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_set_bri); +be_define_const_str(hour, "hour", 3053661199u, 0, 4, &be_const_str_wire2); +be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, &be_const_str_splash); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, &be_const_str_no_X20more_X20RMT_X20channel_X20available); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, &be_const_str_rule); +be_define_const_str(hue, "hue", 3817694041u, 0, 3, &be_const_str_refr_now); +be_define_const_str(hue_ntv, "hue_ntv", 705068642u, 0, 7, NULL); +be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_instance); +be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, &be_const_str_set_width); +be_define_const_str(id, "id", 926444256u, 0, 2, &be_const_str_init); be_define_const_str(id_X20must_X20be_X20of_X20type_X20_X27int_X27, "id must be of type 'int'", 2097653458u, 0, 24, NULL); be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL); -be_define_const_str(img, "img", 2229740804u, 0, 3, &be_const_str_pc_rel); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_set_dc_voltage); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_send_multicast); +be_define_const_str(img, "img", 2229740804u, 0, 3, &be_const_str_load_freetype_font); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, NULL); be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(init, "init", 380752755u, 0, 4, NULL); -be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, &be_const_str_running); -be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_ins_ramp); -be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_widget_ctor_impl); +be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_unsubscribe); +be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, &be_const_str_lights); +be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_lv); be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, NULL); -be_define_const_str(ins_ramp, "ins_ramp", 1068049360u, 0, 8, &be_const_str_read32); -be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, &be_const_str_log); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, NULL); -be_define_const_str(instance, "instance", 193386898u, 0, 8, &be_const_str_read12); -be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, NULL); -be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, &be_const_str_widget_event_cb); +be_define_const_str(ins_ramp, "ins_ramp", 1068049360u, 0, 8, &be_const_str_readline); +be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, &be_const_str_local); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_reset_search); +be_define_const_str(instance, "instance", 193386898u, 0, 8, NULL); +be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, &be_const_str_pin); +be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, &be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus); be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); -be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, &be_const_str_set_size); -be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_resp_cmnd); -be_define_const_str(invalid_X20GPIO_X20number, "invalid GPIO number", 4135793328u, 0, 19, &be_const_str_pct); -be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, &be_const_str_setrange); -be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, NULL); -be_define_const_str(ip, "ip", 1261996636u, 0, 2, &be_const_str_lv_event_cb); +be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, NULL); +be_define_const_str(introspect, "introspect", 164638290u, 0, 10, NULL); +be_define_const_str(invalid_X20GPIO_X20number, "invalid GPIO number", 4135793328u, 0, 19, &be_const_str_matrix); +be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, NULL); +be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, &be_const_str_end); +be_define_const_str(ip, "ip", 1261996636u, 0, 2, &be_const_str_set_rate); be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, NULL); -be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, &be_const_str_set_ldo_voltage); -be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, &be_const_str_point_arr); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, NULL); -be_define_const_str(ismethod, "ismethod", 3513438880u, 0, 8, &be_const_str_on); -be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, &be_const_str_save_before_restart); -be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, &be_const_str_scan); +be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, NULL); +be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, &be_const_str_item); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_widget_ctor_impl); +be_define_const_str(ismethod, "ismethod", 3513438880u, 0, 8, NULL); +be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, NULL); +be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, NULL); be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); -be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_lv_obj_class); -be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_page_autoconf_mgr); -be_define_const_str(json, "json", 916562499u, 0, 4, NULL); -be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_wifi); -be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, &be_const_str_lv_signal_arcs); -be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, &be_const_str_push); +be_define_const_str(item, "item", 2671260646u, 0, 4, NULL); +be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL); +be_define_const_str(json, "json", 916562499u, 0, 4, &be_const_str_number); +be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_public_key); +be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, &be_const_str_false); +be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, NULL); be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, NULL); -be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, &be_const_str_remove); -be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_screenshot); -be_define_const_str(label, "label", 4137097213u, 0, 5, &be_const_str_unknown_X20instruction); -be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, &be_const_str_month); -be_define_const_str(leds, "leds", 558858555u, 0, 4, NULL); -be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, &be_const_str_setitem); +be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, &be_const_str_select); +be_define_const_str(keys, "keys", 4182378701u, 0, 4, NULL); +be_define_const_str(label, "label", 4137097213u, 0, 5, NULL); +be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, NULL); +be_define_const_str(leds, "leds", 558858555u, 0, 4, &be_const_str_tele); +be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, NULL); be_define_const_str(light, "light", 3801947695u, 0, 5, NULL); -be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, &be_const_str_write_bytes); -be_define_const_str(light_state, "light_state", 905783845u, 0, 11, &be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function); -be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, &be_const_str_persist); -be_define_const_str(lights, "lights", 425118420u, 0, 6, &be_const_str_try_compile); -be_define_const_str(line_dsc, "line_dsc", 4094490978u, 0, 8, &be_const_str_pin_mode); -be_define_const_str(list, "list", 217798785u, 0, 4, NULL); +be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, &be_const_str_set_style_radius); +be_define_const_str(light_state, "light_state", 905783845u, 0, 11, &be_const_str_update); +be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, NULL); +be_define_const_str(lights, "lights", 425118420u, 0, 6, &be_const_str_try_remove_file); +be_define_const_str(line_dsc, "line_dsc", 4094490978u, 0, 8, &be_const_str_loop); +be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_raise); be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, NULL); -be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, &be_const_str_refr_size); -be_define_const_str(load, "load", 3859241449u, 0, 4, NULL); -be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, NULL); -be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, &be_const_str_lv_coord_arr); -be_define_const_str(local, "local", 2621662984u, 0, 5, &be_const_str_super); -be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_widget_height_def); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_page_autoconf_ctl); -be_define_const_str(loop, "loop", 3723446379u, 0, 4, NULL); +be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, NULL); +be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_tan); +be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_sqrt); +be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, &be_const_str_math); +be_define_const_str(local, "local", 2621662984u, 0, 5, &be_const_str_started); +be_define_const_str(log, "log", 1062293841u, 0, 3, NULL); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL); +be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_point_arr); be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL); -be_define_const_str(lv, "lv", 1529997255u, 0, 2, &be_const_str_p2); -be_define_const_str(lv_, "lv_", 663721032u, 0, 3, &be_const_str_web_add_main_button); -be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, &be_const_str_sys); -be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, NULL); -be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, &be_const_str_manuf); +be_define_const_str(lv, "lv", 1529997255u, 0, 2, NULL); +be_define_const_str(lv_, "lv_", 663721032u, 0, 3, &be_const_str_offset); +be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, &be_const_str_pc); +be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, &be_const_str_signal_change); +be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, NULL); be_define_const_str(lv_event_cb, "lv_event_cb", 2480731016u, 0, 11, NULL); -be_define_const_str(lv_extra, "lv_extra", 399561998u, 0, 8, &be_const_str_seti); -be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, &be_const_str_lv_signal_bars); -be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL); -be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, &be_const_str_if); -be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, NULL); -be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, &be_const_str_state); -be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, NULL); -be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, &be_const_str_set_hue16sat); -be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, NULL); +be_define_const_str(lv_extra, "lv_extra", 399561998u, 0, 8, &be_const_str_subscribe); +be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, &be_const_str_obj); +be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, &be_const_str_show); +be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, &be_const_str_set_user_data); +be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, &be_const_str_widget_event); +be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, &be_const_str_web_add_console_button); +be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, &be_const_str_refr_size); +be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, &be_const_str_xy); +be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, &be_const_str_run_deferred); be_define_const_str(lv_style_prop_arr, "lv_style_prop_arr", 2504347499u, 0, 17, NULL); -be_define_const_str(lv_timer_cb, "lv_timer_cb", 1383473763u, 0, 11, NULL); -be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, &be_const_str_remove_timer); -be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, &be_const_str_percentage); -be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, &be_const_str_do); +be_define_const_str(lv_timer_cb, "lv_timer_cb", 1383473763u, 0, 11, &be_const_str_pct); +be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, &be_const_str_setmember); +be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, NULL); +be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, &be_const_str_nil); be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, NULL); -be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, &be_const_str_set_auth); -be_define_const_str(lvgl_timer_dispatch, "lvgl_timer_dispatch", 975257833u, 0, 19, NULL); -be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, &be_const_str_refr_pos); -be_define_const_str(manuf, "manuf", 4120929560u, 0, 5, NULL); -be_define_const_str(map, "map", 3751997361u, 0, 3, &be_const_str_tele); -be_define_const_str(math, "math", 4001929615u, 0, 4, &be_const_str_now); -be_define_const_str(matrix, "matrix", 365099244u, 0, 6, &be_const_str_set_timeouts); +be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, NULL); +be_define_const_str(lvgl_timer_dispatch, "lvgl_timer_dispatch", 975257833u, 0, 19, &be_const_str_string); +be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, NULL); +be_define_const_str(manuf, "manuf", 4120929560u, 0, 5, &be_const_str__X7D); +be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); +be_define_const_str(math, "math", 4001929615u, 0, 4, &be_const_str_set_dcdc_enable); +be_define_const_str(matrix, "matrix", 365099244u, 0, 6, NULL); be_define_const_str(member, "member", 719708611u, 0, 6, NULL); -be_define_const_str(members, "members", 937576464u, 0, 7, NULL); -be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_obj); -be_define_const_str(millis, "millis", 1214679063u, 0, 6, &be_const_str_set); -be_define_const_str(min, "min", 3381609815u, 0, 3, &be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); -be_define_const_str(minute, "minute", 954666857u, 0, 6, &be_const_str_set_style_bg_color); -be_define_const_str(missing_X20name, "missing name", 3635024006u, 0, 12, NULL); +be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_read_bytes); +be_define_const_str(memory, "memory", 2229924270u, 0, 6, NULL); +be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); +be_define_const_str(min, "min", 3381609815u, 0, 3, &be_const_str_out_X20of_X20range); +be_define_const_str(minute, "minute", 954666857u, 0, 6, &be_const_str_set_channels); +be_define_const_str(missing_X20name, "missing name", 3635024006u, 0, 12, &be_const_str_set_hue16sat); be_define_const_str(model, "model", 2961925722u, 0, 5, NULL); -be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_serial); +be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_signal_arcs); be_define_const_str(month, "month", 3598321157u, 0, 5, NULL); be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, NULL); -be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_toptr); -be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL); +be_define_const_str(name, "name", 2369371622u, 0, 4, NULL); +be_define_const_str(nan, "nan", 797905850u, 0, 3, &be_const_str_run); be_define_const_str(next, "next", 1555467752u, 0, 4, NULL); be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, NULL); be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, &be_const_str_wifi_arcs_icon); -be_define_const_str(no_X20more_X20RMT_X20channel_X20available, "no more RMT channel available", 305838632u, 0, 29, &be_const_str_set_user_data); -be_define_const_str(now, "now", 682728183u, 0, 3, &be_const_str_sqrt); +be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, NULL); +be_define_const_str(no_X20more_X20RMT_X20channel_X20available, "no more RMT channel available", 305838632u, 0, 29, &be_const_str_set_style_bg_color); +be_define_const_str(now, "now", 682728183u, 0, 3, &be_const_str_rotate); be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, NULL); -be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_set_percentage); -be_define_const_str(o, "o", 3926667934u, 0, 1, &be_const_str_signal_change); -be_define_const_str(obj, "obj", 3343205242u, 0, 3, NULL); -be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, &be_const_str_web_sensor); -be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, &be_const_str_wifi_bars); +be_define_const_str(number, "number", 467038368u, 0, 6, NULL); +be_define_const_str(o, "o", 3926667934u, 0, 1, &be_const_str_as); +be_define_const_str(obj, "obj", 3343205242u, 0, 3, &be_const_str_zero); +be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, &be_const_str_refr_pos); +be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, &be_const_str_set_matrix_pixel_color); be_define_const_str(offset, "offset", 348705738u, 0, 6, NULL); -be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, &be_const_str_remote_ip); -be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, NULL); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, &be_const_str_elif); -be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); +be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, NULL); +be_define_const_str(on, "on", 1630810064u, 0, 2, &be_const_str_splash_remove); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, &be_const_str_p2); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, NULL); +be_define_const_str(open, "open", 3546203337u, 0, 4, &be_const_str_pixel_size); be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, NULL); -be_define_const_str(p1, "p1", 2689521274u, 0, 2, NULL); -be_define_const_str(p2, "p2", 2672743655u, 0, 2, NULL); +be_define_const_str(p1, "p1", 2689521274u, 0, 2, &be_const_str_readbytes); +be_define_const_str(p2, "p2", 2672743655u, 0, 2, &be_const_str_read24); be_define_const_str(page_autoconf_ctl, "page_autoconf_ctl", 2453381496u, 0, 17, NULL); be_define_const_str(page_autoconf_mgr, "page_autoconf_mgr", 3643937031u, 0, 17, NULL); -be_define_const_str(param, "param", 1309554226u, 0, 5, NULL); +be_define_const_str(param, "param", 1309554226u, 0, 5, &be_const_str_if); be_define_const_str(path, "path", 2223459638u, 0, 4, NULL); be_define_const_str(pc, "pc", 1313756516u, 0, 2, NULL); -be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, NULL); -be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_false); -be_define_const_str(pct, "pct", 1431300144u, 0, 3, &be_const_str_remove_rule); -be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, NULL); -be_define_const_str(persist, "persist", 3917083779u, 0, 7, NULL); +be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_web_send_decimal); +be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, NULL); +be_define_const_str(pct, "pct", 1431300144u, 0, 3, &be_const_str_webserver); +be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, &be_const_str_write_bit); +be_define_const_str(persist, "persist", 3917083779u, 0, 7, &be_const_str_r); be_define_const_str(persist_X2E_p_X20is_X20not_X20a_X20map, "persist._p is not a map", 1176528732u, 0, 23, NULL); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_style_prop_arr); -be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_tob64); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_save); -be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, NULL); -be_define_const_str(pixel_size, "pixel_size", 2209135785u, 0, 10, &be_const_str_resize); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL); +be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_set_height); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, &be_const_str_tob64); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL); +be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, &be_const_str_url_encode); +be_define_const_str(pixel_size, "pixel_size", 2209135785u, 0, 10, NULL); be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, NULL); -be_define_const_str(point, "point", 414084241u, 0, 5, &be_const_str_r); -be_define_const_str(point_arr, "point_arr", 1140859857u, 0, 9, NULL); -be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); +be_define_const_str(point, "point", 414084241u, 0, 5, &be_const_str_web_send); +be_define_const_str(point_arr, "point_arr", 1140859857u, 0, 9, &be_const_str_reapply); +be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_scan); be_define_const_str(pop_path, "pop_path", 2403243998u, 0, 8, NULL); -be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL); -be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, &be_const_str_year); -be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, &be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_set_bits_per_sample); +be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, NULL); +be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, &be_const_str_write_bytes); be_define_const_str(print, "print", 372738696u, 0, 5, NULL); be_define_const_str(ptr, "ptr", 1433816073u, 0, 3, NULL); -be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, NULL); -be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_publish_result); -be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, &be_const_str_round_start); -be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_read); -be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, &be_const_str_target_search); -be_define_const_str(quality, "quality", 2597670950u, 0, 7, &be_const_str_register_obj); -be_define_const_str(r, "r", 4144776981u, 0, 1, NULL); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_widget_ctor_cb); +be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_set_first_time); +be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); +be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, NULL); +be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); +be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, &be_const_str_remove); +be_define_const_str(quality, "quality", 2597670950u, 0, 7, NULL); +be_define_const_str(r, "r", 4144776981u, 0, 1, &be_const_str_save); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL); be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); -be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); -be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); -be_define_const_str(read12, "read12", 4291076970u, 0, 6, &be_const_str_reverse_gamma10); -be_define_const_str(read13, "read13", 12887293u, 0, 6, &be_const_str_reverse); -be_define_const_str(read24, "read24", 1808533811u, 0, 6, &be_const_str_tcpclient); -be_define_const_str(read32, "read32", 1741276240u, 0, 6, &be_const_str_target); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_read32); +be_define_const_str(range, "range", 4208725202u, 0, 5, &be_const_str_set_align); +be_define_const_str(read, "read", 3470762949u, 0, 4, &be_const_str_value); +be_define_const_str(read12, "read12", 4291076970u, 0, 6, &be_const_str_wifi); +be_define_const_str(read13, "read13", 12887293u, 0, 6, &be_const_str_remove_timer); +be_define_const_str(read24, "read24", 1808533811u, 0, 6, &be_const_str_udp); +be_define_const_str(read32, "read32", 1741276240u, 0, 6, &be_const_str_set_style_text_color); be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL); be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); -be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, NULL); -be_define_const_str(readbytes, "readbytes", 2716426756u, 0, 9, &be_const_str_web_send); -be_define_const_str(readline, "readline", 1212709927u, 0, 8, &be_const_str_start); -be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str__X7B_X7D); -be_define_const_str(reapply, "reapply", 3778939332u, 0, 7, NULL); -be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL); +be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, &be_const_str_resp_cmnd_failed); +be_define_const_str(readbytes, "readbytes", 2716426756u, 0, 9, &be_const_str_round_start); +be_define_const_str(readline, "readline", 1212709927u, 0, 8, &be_const_str_real); +be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); +be_define_const_str(reapply, "reapply", 3778939332u, 0, 7, &be_const_str_type_error); +be_define_const_str(redirect, "redirect", 389758641u, 0, 8, &be_const_str_set_ldo_enable); be_define_const_str(refr_now, "refr_now", 3191284735u, 0, 8, NULL); -be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, &be_const_str_set_power); +be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, NULL); be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, NULL); be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); -be_define_const_str(register_obj, "register_obj", 3982614770u, 0, 12, &be_const_str_try_run_compiled); +be_define_const_str(register_obj, "register_obj", 3982614770u, 0, 12, NULL); be_define_const_str(remote_ip, "remote_ip", 2953154693u, 0, 9, NULL); -be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, &be_const_str_width); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); -be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_uuid4); -be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, NULL); -be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, NULL); +be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, &be_const_str_set_exten); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_true); +be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL); +be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, &be_const_str_set_style_pad_all); +be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, &be_const_str_write_gpio); be_define_const_str(remove_light, "remove_light", 1783624394u, 0, 12, NULL); -be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, &be_const_str_rtc); -be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, &be_const_str_raise); -be_define_const_str(reset, "reset", 1695364032u, 0, 5, &be_const_str_type_error); -be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL); +be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); +be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, &be_const_str_widget_editable); +be_define_const_str(reset, "reset", 1695364032u, 0, 5, NULL); +be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, &be_const_str_run_bat); be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); -be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); -be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); +be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, &be_const_str_resp_cmnd); +be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_set_mode_rgb); be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); -be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); -be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, &be_const_str_scale_uint); -be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_widget_event); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_set_mode_rgb); +be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, &be_const_str_settings); +be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); +be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_serial); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_size); be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); -be_define_const_str(return_X20code_X3D_X25i, "return code=%i", 2127454401u, 0, 14, NULL); +be_define_const_str(return_X20code_X3D_X25i, "return code=%i", 2127454401u, 0, 14, &be_const_str_set_style_img_recolor); be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); -be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, &be_const_str_set_alternate); -be_define_const_str(rotate, "rotate", 2784296202u, 0, 6, NULL); +be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); +be_define_const_str(rotate, "rotate", 2784296202u, 0, 6, &be_const_str_def); be_define_const_str(round_end, "round_end", 985288225u, 0, 9, NULL); be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, NULL); -be_define_const_str(rounded, "rounded", 1920734138u, 0, 7, &be_const_str_wd); +be_define_const_str(rounded, "rounded", 1920734138u, 0, 7, &be_const_str_return); be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); be_define_const_str(rule, "rule", 4230889683u, 0, 4, NULL); -be_define_const_str(run, "run", 718098122u, 0, 3, NULL); +be_define_const_str(run, "run", 718098122u, 0, 3, &be_const_str_width); be_define_const_str(run_bat, "run_bat", 2536903298u, 0, 7, NULL); -be_define_const_str(run_cron, "run_cron", 1929098555u, 0, 8, &be_const_str_return); +be_define_const_str(run_cron, "run_cron", 1929098555u, 0, 8, NULL); be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); -be_define_const_str(running, "running", 343848780u, 0, 7, &be_const_str_wire_scan); -be_define_const_str(sat, "sat", 3592196823u, 0, 3, NULL); -be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_udp); -be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, &be_const_str_unsubscribe); -be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); -be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_set_pwm); -be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, NULL); -be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, &be_const_str_traceback); +be_define_const_str(running, "running", 343848780u, 0, 7, NULL); +be_define_const_str(sat, "sat", 3592196823u, 0, 3, &be_const_str_state); +be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_to_gamma); +be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); +be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, &be_const_str_sinh); +be_define_const_str(scan, "scan", 3974641896u, 0, 4, NULL); +be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_wifi_arcs); +be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); be_define_const_str(search, "search", 2150836393u, 0, 6, NULL); -be_define_const_str(sec, "sec", 3139892658u, 0, 3, &be_const_str_xy); -be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, &be_const_str_set_ldo_enable); -be_define_const_str(select, "select", 297952813u, 0, 6, &be_const_str_widget_event_impl); +be_define_const_str(sec, "sec", 3139892658u, 0, 3, &be_const_str_shared_key); +be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL); +be_define_const_str(select, "select", 297952813u, 0, 6, NULL); be_define_const_str(send, "send", 1919010991u, 0, 4, NULL); be_define_const_str(send_multicast, "send_multicast", 812185870u, 0, 14, NULL); -be_define_const_str(serial, "serial", 3687697785u, 0, 6, NULL); -be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_subscribe); +be_define_const_str(serial, "serial", 3687697785u, 0, 6, &be_const_str_seti); +be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); be_define_const_str(set_align, "set_align", 2592958913u, 0, 9, NULL); -be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, &be_const_str_started); +be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, &be_const_str_set_style_img_recolor_opa); be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL); -be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, &be_const_str_set_bri); -be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, NULL); -be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, &be_const_str_set_useragent); +be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, &be_const_str_set_style_pad_right); +be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, &be_const_str_set_y); +be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, &be_const_str_sys); be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, NULL); -be_define_const_str(set_ct, "set_ct", 972363187u, 0, 6, NULL); +be_define_const_str(set_ct, "set_ct", 972363187u, 0, 6, &be_const_str_tr); be_define_const_str(set_dc_voltage, "set_dc_voltage", 2181981936u, 0, 14, NULL); -be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, &be_const_str__X7B); -be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, &be_const_str_web_send_decimal); -be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, &be_const_str_try_remove_file); -be_define_const_str(set_gain, "set_gain", 3847781975u, 0, 8, &be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29); +be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, NULL); +be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, &be_const_str_set_timeouts); +be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, NULL); +be_define_const_str(set_gain, "set_gain", 3847781975u, 0, 8, NULL); be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, NULL); -be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, &be_const_str_splash_remove); -be_define_const_str(set_huesat, "set_huesat", 626496854u, 0, 10, &be_const_str_widget_constructor); +be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, &be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(set_huesat, "set_huesat", 626496854u, 0, 10, &be_const_str_widget_struct_by_class); be_define_const_str(set_ldo_enable, "set_ldo_enable", 2916502041u, 0, 14, NULL); -be_define_const_str(set_ldo_voltage, "set_ldo_voltage", 4090501160u, 0, 15, &be_const_str_update); -be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); +be_define_const_str(set_ldo_voltage, "set_ldo_voltage", 4090501160u, 0, 15, NULL); +be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); be_define_const_str(set_matrix_pixel_color, "set_matrix_pixel_color", 1197149462u, 0, 22, NULL); be_define_const_str(set_mode_ct, "set_mode_ct", 665073295u, 0, 11, NULL); be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, NULL); be_define_const_str(set_percentage, "set_percentage", 2952022724u, 0, 14, NULL); -be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, NULL); -be_define_const_str(set_power, "set_power", 549820893u, 0, 9, &be_const_str_set_style_text_color); -be_define_const_str(set_pwm, "set_pwm", 3781811012u, 0, 7, &be_const_str_str); -be_define_const_str(set_rate, "set_rate", 1154016838u, 0, 8, &be_const_str_value); +be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, &be_const_str__X7B_X7D); +be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); +be_define_const_str(set_pwm, "set_pwm", 3781811012u, 0, 7, NULL); +be_define_const_str(set_rate, "set_rate", 1154016838u, 0, 8, NULL); be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, NULL); -be_define_const_str(set_rgb, "set_rgb", 3380244855u, 0, 7, &be_const_str_value_error); -be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, NULL); -be_define_const_str(set_style_bg_color, "set_style_bg_color", 1689513089u, 0, 18, &be_const_str_type); +be_define_const_str(set_rgb, "set_rgb", 3380244855u, 0, 7, NULL); +be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, &be_const_str_web_add_management_button); +be_define_const_str(set_style_bg_color, "set_style_bg_color", 1689513089u, 0, 18, NULL); be_define_const_str(set_style_border_width, "set_style_border_width", 549034191u, 0, 22, NULL); -be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, &be_const_str_widget_struct_by_class); -be_define_const_str(set_style_img_recolor_opa, "set_style_img_recolor_opa", 2667062087u, 0, 25, &be_const_str_signal_arcs); +be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, NULL); +be_define_const_str(set_style_img_recolor_opa, "set_style_img_recolor_opa", 2667062087u, 0, 25, NULL); be_define_const_str(set_style_line_color, "set_style_line_color", 3665238976u, 0, 20, NULL); -be_define_const_str(set_style_pad_all, "set_style_pad_all", 3987000607u, 0, 17, &be_const_str_tag); +be_define_const_str(set_style_pad_all, "set_style_pad_all", 3987000607u, 0, 17, NULL); be_define_const_str(set_style_pad_right, "set_style_pad_right", 3314069054u, 0, 19, NULL); -be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, NULL); -be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, &be_const_str_valuer_error); -be_define_const_str(set_style_text_font, "set_style_text_font", 1028590019u, 0, 19, &be_const_str_set_xy); -be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, &be_const_str_split); +be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, &be_const_str_web_add_handler); +be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, NULL); +be_define_const_str(set_style_text_font, "set_style_text_font", 1028590019u, 0, 19, NULL); +be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, NULL); be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, NULL); be_define_const_str(set_time, "set_time", 900236405u, 0, 8, NULL); be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL); be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); -be_define_const_str(set_user_data, "set_user_data", 3596043360u, 0, 13, &be_const_str_import); +be_define_const_str(set_user_data, "set_user_data", 3596043360u, 0, 13, NULL); be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, NULL); be_define_const_str(set_width, "set_width", 484671920u, 0, 9, NULL); be_define_const_str(set_x, "set_x", 1849400772u, 0, 5, NULL); be_define_const_str(set_xy, "set_xy", 1155092615u, 0, 6, NULL); -be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, NULL); +be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, &be_const_str_start); be_define_const_str(set_zoom, "set_zoom", 1925134407u, 0, 8, NULL); be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL); -be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL); -be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); +be_define_const_str(seti, "seti", 1500556254u, 0, 4, &be_const_str_toint); +be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, &be_const_str_setrange); be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); -be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); -be_define_const_str(settings, "settings", 1745255176u, 0, 8, NULL); -be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, &be_const_str_wifi_arcs); -be_define_const_str(show, "show", 2840060476u, 0, 4, NULL); -be_define_const_str(signal_arcs, "signal_arcs", 1505996127u, 0, 11, NULL); -be_define_const_str(signal_bars, "signal_bars", 3181573600u, 0, 11, &be_const_str_touch_update); +be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, &be_const_str_srand); +be_define_const_str(settings, "settings", 1745255176u, 0, 8, &be_const_str_traceback); +be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL); +be_define_const_str(show, "show", 2840060476u, 0, 4, &be_const_str_strptime); +be_define_const_str(signal_arcs, "signal_arcs", 1505996127u, 0, 11, &be_const_str_strip); +be_define_const_str(signal_bars, "signal_bars", 3181573600u, 0, 11, &be_const_str_top); be_define_const_str(signal_change, "signal_change", 3262299350u, 0, 13, NULL); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_uuid4); be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); be_define_const_str(size, "size", 597743964u, 0, 4, NULL); be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL); be_define_const_str(solidified, "solidified", 3257553487u, 0, 10, NULL); -be_define_const_str(splash, "splash", 2531464038u, 0, 6, &be_const_str_tomap); +be_define_const_str(splash, "splash", 2531464038u, 0, 6, NULL); be_define_const_str(splash_init, "splash_init", 1522992293u, 0, 11, NULL); be_define_const_str(splash_remove, "splash_remove", 3132020807u, 0, 13, NULL); be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); @@ -801,40 +802,40 @@ be_define_const_str(started, "started", 2153339806u, 0, 7, NULL); be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL); -be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, NULL); +be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, &be_const_str_web_sensor); be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); -be_define_const_str(string, "string", 398550328u, 0, 6, &be_const_str_continue); -be_define_const_str(strip, "strip", 4246411473u, 0, 5, NULL); +be_define_const_str(string, "string", 398550328u, 0, 6, NULL); +be_define_const_str(strip, "strip", 4246411473u, 0, 5, &be_const_str_tolower); be_define_const_str(strptime, "strptime", 1277910361u, 0, 8, NULL); -be_define_const_str(style_prop_arr, "style_prop_arr", 3019174322u, 0, 14, &be_const_str_web_add_button); +be_define_const_str(style_prop_arr, "style_prop_arr", 3019174322u, 0, 14, NULL); be_define_const_str(subscribe, "subscribe", 2946386435u, 0, 9, NULL); be_define_const_str(success, "success", 979353360u, 0, 7, NULL); -be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); +be_define_const_str(super, "super", 4152230356u, 0, 5, &be_const_str_unknown_X20instruction); be_define_const_str(sys, "sys", 3277365014u, 0, 3, NULL); -be_define_const_str(tag, "tag", 2516003219u, 0, 3, &be_const_str_widget_cb); +be_define_const_str(tag, "tag", 2516003219u, 0, 3, &be_const_str_widget_destructor); be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); -be_define_const_str(target, "target", 845187144u, 0, 6, NULL); +be_define_const_str(target, "target", 845187144u, 0, 6, &be_const_str_wifi_arcs_icon); be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); -be_define_const_str(tasmota, "tasmota", 424643812u, 0, 7, &be_const_str_web_add_console_button); +be_define_const_str(tasmota, "tasmota", 424643812u, 0, 7, NULL); be_define_const_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29, "tasmota.get_light() is deprecated, use light.get()", 3525753647u, 0, 50, NULL); -be_define_const_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, "tasmota.set_light() is deprecated, use light.set()", 2124937871u, 0, 50, &be_const_str_static); +be_define_const_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, "tasmota.set_light() is deprecated, use light.set()", 2124937871u, 0, 50, NULL); be_define_const_str(tasmota_log_reader, "tasmota_log_reader", 3555069257u, 0, 18, NULL); be_define_const_str(tcpclient, "tcpclient", 3828797983u, 0, 9, NULL); -be_define_const_str(tele, "tele", 3474458061u, 0, 4, &be_const_str_true); -be_define_const_str(the_X20second_X20argument_X20is_X20not_X20a_X20function, "the second argument is not a function", 3954574469u, 0, 37, &be_const_str_time_reached); +be_define_const_str(tele, "tele", 3474458061u, 0, 4, NULL); +be_define_const_str(the_X20second_X20argument_X20is_X20not_X20a_X20function, "the second argument is not a function", 3954574469u, 0, 37, NULL); be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); -be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, &be_const_str_widget_dtor_cb); +be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, &be_const_str_time_str); be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); -be_define_const_str(timer_cb, "timer_cb", 79918026u, 0, 8, &be_const_str_try); -be_define_const_str(to_gamma, "to_gamma", 1597139862u, 0, 8, NULL); +be_define_const_str(timer_cb, "timer_cb", 79918026u, 0, 8, NULL); +be_define_const_str(to_gamma, "to_gamma", 1597139862u, 0, 8, &be_const_str_y1); be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL); -be_define_const_str(toint, "toint", 3613182909u, 0, 5, &be_const_str_widget_group_def); +be_define_const_str(toint, "toint", 3613182909u, 0, 5, NULL); be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); -be_define_const_str(tomap, "tomap", 612167626u, 0, 5, &be_const_str_widget_dtor_impl); -be_define_const_str(top, "top", 2802900028u, 0, 3, &be_const_str_toupper); -be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, &be_const_str_webserver); +be_define_const_str(tomap, "tomap", 612167626u, 0, 5, NULL); +be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); +be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, NULL); be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); be_define_const_str(touch_update, "touch_update", 1918102068u, 0, 12, NULL); be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); @@ -843,39 +844,39 @@ be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); be_define_const_str(trig, "trig", 2073314619u, 0, 4, NULL); be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); -be_define_const_str(try_compile, "try_compile", 4263879840u, 0, 11, &be_const_str_write); +be_define_const_str(try_compile, "try_compile", 4263879840u, 0, 11, NULL); be_define_const_str(try_get_bec_version, "try_get_bec_version", 3143116423u, 0, 19, NULL); be_define_const_str(try_remove_file, "try_remove_file", 3025429926u, 0, 15, NULL); be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); be_define_const_str(try_run_compiled, "try_run_compiled", 2339741218u, 0, 16, NULL); -be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); +be_define_const_str(type, "type", 1361572173u, 0, 4, &be_const_str_widget_width_def); be_define_const_str(type_error, "type_error", 3789613824u, 0, 10, NULL); -be_define_const_str(udp, "udp", 1253872004u, 0, 3, &be_const_str_except); +be_define_const_str(udp, "udp", 1253872004u, 0, 3, NULL); be_define_const_str(unknown_X20instruction, "unknown instruction", 1093911841u, 0, 19, NULL); be_define_const_str(unsubscribe, "unsubscribe", 4190043798u, 0, 11, NULL); be_define_const_str(update, "update", 672109684u, 0, 6, NULL); -be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); +be_define_const_str(upper, "upper", 176974407u, 0, 5, &be_const_str_widget_height_def); be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL); be_define_const_str(uuid4, "uuid4", 1153582450u, 0, 5, NULL); be_define_const_str(value, "value", 1113510858u, 0, 5, NULL); -be_define_const_str(value_error, "value_error", 773297791u, 0, 11, NULL); +be_define_const_str(value_error, "value_error", 773297791u, 0, 11, &be_const_str_wifi_bars_icon); be_define_const_str(valuer_error, "valuer_error", 2567947105u, 0, 12, NULL); be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); -be_define_const_str(w, "w", 4060888886u, 0, 1, &be_const_str_yield); +be_define_const_str(w, "w", 4060888886u, 0, 1, NULL); be_define_const_str(wd, "wd", 1531424278u, 0, 2, NULL); be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, NULL); -be_define_const_str(web_add_config_button, "web_add_config_button", 639674325u, 0, 21, NULL); +be_define_const_str(web_add_config_button, "web_add_config_button", 639674325u, 0, 21, &be_const_str_write8); be_define_const_str(web_add_console_button, "web_add_console_button", 3481436192u, 0, 22, NULL); be_define_const_str(web_add_handler, "web_add_handler", 3990174962u, 0, 15, NULL); -be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL); +be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, &be_const_str_widget_group_def); be_define_const_str(web_add_management_button, "web_add_management_button", 2738877186u, 0, 25, NULL); -be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, &be_const_str_y); +be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, &be_const_str_wire_scan); be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, NULL); be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, NULL); be_define_const_str(webserver, "webserver", 1572454038u, 0, 9, NULL); be_define_const_str(while, "while", 231090382u, 53, 5, NULL); -be_define_const_str(widget_cb, "widget_cb", 2763583055u, 0, 9, NULL); +be_define_const_str(widget_cb, "widget_cb", 2763583055u, 0, 9, &be_const_str_widget_dtor_cb); be_define_const_str(widget_constructor, "widget_constructor", 2543785934u, 0, 18, NULL); be_define_const_str(widget_ctor_cb, "widget_ctor_cb", 876007560u, 0, 14, NULL); be_define_const_str(widget_ctor_impl, "widget_ctor_impl", 194252479u, 0, 16, NULL); @@ -889,26 +890,26 @@ be_define_const_str(widget_event_impl, "widget_event_impl", 2178430561u, 0, 17, be_define_const_str(widget_group_def, "widget_group_def", 1246968785u, 0, 16, NULL); be_define_const_str(widget_height_def, "widget_height_def", 3131667813u, 0, 17, NULL); be_define_const_str(widget_instance_size, "widget_instance_size", 2055354779u, 0, 20, NULL); -be_define_const_str(widget_struct_by_class, "widget_struct_by_class", 3806373842u, 0, 22, NULL); +be_define_const_str(widget_struct_by_class, "widget_struct_by_class", 3806373842u, 0, 22, &be_const_str_wire1); be_define_const_str(widget_struct_default, "widget_struct_default", 781673633u, 0, 21, NULL); be_define_const_str(widget_width_def, "widget_width_def", 3986078862u, 0, 16, NULL); be_define_const_str(width, "width", 2508680735u, 0, 5, NULL); be_define_const_str(width_def, "width_def", 1143717879u, 0, 9, NULL); -be_define_const_str(wifi, "wifi", 120087624u, 0, 4, &be_const_str_write8); +be_define_const_str(wifi, "wifi", 120087624u, 0, 4, &be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); be_define_const_str(wifi_arcs, "wifi_arcs", 3838492904u, 0, 9, NULL); -be_define_const_str(wifi_arcs_icon, "wifi_arcs_icon", 767180544u, 0, 14, &be_const_str_nil); -be_define_const_str(wifi_bars, "wifi_bars", 653141243u, 0, 9, &be_const_str_wire1); +be_define_const_str(wifi_arcs_icon, "wifi_arcs_icon", 767180544u, 0, 14, NULL); +be_define_const_str(wifi_bars, "wifi_bars", 653141243u, 0, 9, &be_const_str_zip); be_define_const_str(wifi_bars_icon, "wifi_bars_icon", 3641522557u, 0, 14, NULL); be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); -be_define_const_str(write8, "write8", 3133991532u, 0, 6, &be_const_str_def); -be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, &be_const_str_zip); +be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL); +be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL); be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); be_define_const_str(write_file, "write_file", 3177658879u, 0, 10, NULL); -be_define_const_str(write_gpio, "write_gpio", 2267940334u, 0, 10, &be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); +be_define_const_str(write_gpio, "write_gpio", 2267940334u, 0, 10, NULL); be_define_const_str(x, "x", 4245442695u, 0, 1, NULL); be_define_const_str(x1, "x1", 274927234u, 0, 2, NULL); be_define_const_str(xy, "xy", 1482915802u, 0, 2, NULL); @@ -916,7 +917,7 @@ be_define_const_str(y, "y", 4228665076u, 0, 1, NULL); be_define_const_str(y1, "y1", 2355101727u, 0, 2, NULL); be_define_const_str(year, "year", 2927578396u, 0, 4, NULL); be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); -be_define_const_str(zero, "zero", 2339366755u, 0, 4, NULL); +be_define_const_str(zero, "zero", 2339366755u, 0, 4, &be_const_str_try); be_define_const_str(zip, "zip", 2877453236u, 0, 3, NULL); be_define_const_str(_X7B, "{", 4262220314u, 0, 1, NULL); be_define_const_str(_X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, "{s}Batt Current{m}%.1f mA{e}", 866537156u, 0, 28, NULL); @@ -925,465 +926,466 @@ be_define_const_str(_X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be be_define_const_str(_X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, "{s}VBus Current{m}%.1f mA{e}", 1032721155u, 0, 28, NULL); be_define_const_str(_X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, "{s}VBus Voltage{m}%.3f V{e}", 165651270u, 0, 27, NULL); be_define_const_str(_X7B_X7D, "{}", 1415952421u, 0, 2, NULL); -be_define_const_str(_X7D, "}", 4161554600u, 0, 1, &be_const_str_else); +be_define_const_str(_X7D, "}", 4161554600u, 0, 1, NULL); static const bstring* const m_string_table[] = { - (const bstring *)&be_const_str_set_style_radius, - (const bstring *)&be_const_str_exec_tele, - (const bstring *)&be_const_str_CFG_X3A_X20running_X20, - (const bstring *)&be_const_str_None, - (const bstring *)&be_const_str_count, - (const bstring *)&be_const_str__X23autoexec_X2Ebat, - (const bstring *)&be_const_str_SERIAL_6E1, - (const bstring *)&be_const_str__X2Ep2, - (const bstring *)&be_const_str_copy, - (const bstring *)&be_const_str_day, - (const bstring *)&be_const_str_montserrat_font, - NULL, - (const bstring *)&be_const_str_connection_error, - (const bstring *)&be_const_str__global_def, - (const bstring *)&be_const_str_destructor_cb, - (const bstring *)&be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker, - (const bstring *)&be_const_str_insert, - (const bstring *)&be_const_str_hs2rgb, - (const bstring *)&be_const_str_set_first_time, - (const bstring *)&be_const_str_SERIAL_8N1, - NULL, - (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, - (const bstring *)&be_const_str_enabled, - (const bstring *)&be_const_str_y1, - NULL, - (const bstring *)&be_const_str_f, - (const bstring *)&be_const_str_COLOR_WHITE, - (const bstring *)&be_const_str_INTERNAL_DAC, - (const bstring *)&be_const_str_AudioGeneratorMP3, - (const bstring *)&be_const_str_sin, - (const bstring *)&be_const_str_set_style_img_recolor, - (const bstring *)&be_const_str_atan2, - (const bstring *)&be_const_str__X3E_X3D, - (const bstring *)&be_const_str_Tele, - (const bstring *)&be_const_str__read, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, - (const bstring *)&be_const_str__X22_X3A, - (const bstring *)&be_const_str__X2Etapp, - (const bstring *)&be_const_str_widget_instance_size, - (const bstring *)&be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus, - (const bstring *)&be_const_str_json_fdump_any, - (const bstring *)&be_const_str_x1, - (const bstring *)&be_const_str_set_mode_ct, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, - (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, - (const bstring *)&be_const_str_AudioOpusDecoder, - (const bstring *)&be_const_str_sat, - (const bstring *)&be_const_str__X2Elen, - (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, - (const bstring *)&be_const_str_CT, - (const bstring *)&be_const_str_list_handlers, - (const bstring *)&be_const_str_cosh, - (const bstring *)&be_const_str__X3E, - (const bstring *)&be_const_str_ct, - (const bstring *)&be_const_str__X2F_X3Frst_X3D, - (const bstring *)&be_const_str_connected, - (const bstring *)&be_const_str__rmt, - NULL, - (const bstring *)&be_const_str_add_driver, - (const bstring *)&be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E, - (const bstring *)&be_const_str_erase, - (const bstring *)&be_const_str_imax, - (const bstring *)&be_const_str_json, - (const bstring *)&be_const_str_no_X20more_X20RMT_X20channel_X20available, - (const bstring *)&be_const_str_seg7_font, - NULL, - (const bstring *)&be_const_str_lv_wifi_arcs, - (const bstring *)&be_const_str_set_light, - (const bstring *)&be_const_str__X2Ebec, - (const bstring *)&be_const_str_splash, - (const bstring *)&be_const_str_run_cron, - (const bstring *)&be_const_str_AudioGeneratorWAV, - (const bstring *)&be_const_str_SERIAL_8E2, - (const bstring *)&be_const_str_addr, - (const bstring *)&be_const_str_zero, - (const bstring *)&be_const_str_RGB, - (const bstring *)&be_const_str_editable, - (const bstring *)&be_const_str_sec, - (const bstring *)&be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_classname, - (const bstring *)&be_const_str_bus, - (const bstring *)&be_const_str_set_style_pad_right, - NULL, - (const bstring *)&be_const_str_every_250ms, - NULL, - (const bstring *)&be_const_str__cmd, - (const bstring *)&be_const_str___iterator__, - (const bstring *)&be_const_str_attrdump, - (const bstring *)&be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, - (const bstring *)&be_const_str_cb_obj, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20, - (const bstring *)&be_const_str__X2Eautoconf, - (const bstring *)&be_const_str_SERIAL_5O1, - (const bstring *)&be_const_str_pi, - (const bstring *)&be_const_str_deg, - (const bstring *)&be_const_str_members, - (const bstring *)&be_const_str_exists, - NULL, - (const bstring *)&be_const_str_file, - NULL, - (const bstring *)&be_const_str__drivers, - (const bstring *)&be_const_str_Parameter_X20error, - (const bstring *)&be_const_str_loop, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, - (const bstring *)&be_const_str_is_running, - (const bstring *)&be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27, - (const bstring *)&be_const_str_engine, - (const bstring *)&be_const_str__X3D, - (const bstring *)&be_const_str_alternate, - (const bstring *)&be_const_str_end, - (const bstring *)&be_const_str_trig, - (const bstring *)&be_const_str_reapply, - NULL, - (const bstring *)&be_const_str_set_chg_current, - (const bstring *)&be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, - (const bstring *)&be_const_str_RES_OK, - (const bstring *)&be_const_str_display_X2Eini, - (const bstring *)&be_const_str_I2C_Driver, - (const bstring *)&be_const_str_autorun, - (const bstring *)&be_const_str_BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27, - (const bstring *)&be_const_str_event_cb, - (const bstring *)&be_const_str_to_gamma, - (const bstring *)&be_const_str_exec_cmd, - NULL, - NULL, - (const bstring *)&be_const_str_EVENT_DRAW_MAIN, - (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - (const bstring *)&be_const_str_SERIAL_8E1, - (const bstring *)&be_const_str_tolower, - (const bstring *)&be_const_str_var, - (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, - (const bstring *)&be_const_str_get_switch, - (const bstring *)&be_const_str_widget_destructor, - (const bstring *)&be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str__X21_X3D, - (const bstring *)&be_const_str__X2Flights_X2F, - (const bstring *)&be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, - (const bstring *)&be_const_str_gamma8, - NULL, - (const bstring *)&be_const_str_BUTTON_CONFIGURATION, - (const bstring *)&be_const_str_strptime, - (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, - (const bstring *)&be_const_str_h, - (const bstring *)&be_const_str_debug, - NULL, - NULL, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, - (const bstring *)&be_const_str_SERIAL_5O2, - (const bstring *)&be_const_str__X23init_X2Ebat, - (const bstring *)&be_const_str_HTTP_GET, - (const bstring *)&be_const_str_x, - (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, - (const bstring *)&be_const_str_animators, - NULL, - (const bstring *)&be_const_str__X20, - (const bstring *)&be_const_str_PART_MAIN, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, - (const bstring *)&be_const_str_rotate, - (const bstring *)&be_const_str_clock_icon, - (const bstring *)&be_const_str_HTTP_POST, - (const bstring *)&be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, - (const bstring *)&be_const_str_line_dsc, - NULL, - (const bstring *)&be_const_str_button_pressed, - NULL, - (const bstring *)&be_const_str_begin, - (const bstring *)&be_const_str_BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29, - (const bstring *)&be_const_str_remove_driver, - (const bstring *)&be_const_str_lv_wifi_arcs_icon, - (const bstring *)&be_const_str_hue_ntv, - (const bstring *)&be_const_str_check_not_method, - (const bstring *)&be_const_str__error, - NULL, - NULL, - (const bstring *)&be_const_str_SERIAL_6E2, - (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, - (const bstring *)&be_const_str_consume_mono, - (const bstring *)&be_const_str_dac_voltage, - (const bstring *)&be_const_str_arg, - (const bstring *)&be_const_str_asstring, - (const bstring *)&be_const_str_RGBW, - (const bstring *)&be_const_str_isnan, - (const bstring *)&be_const_str_add_rule, - NULL, - NULL, - NULL, + (const bstring *)&be_const_str_publish_result, + (const bstring *)&be_const_str_add_fast_loop, + (const bstring *)&be_const_str__X22, (const bstring *)&be_const_str_set_style_border_width, - (const bstring *)&be_const_str_STATE_DEFAULT, - (const bstring *)&be_const_str__rules, - (const bstring *)&be_const_str__, NULL, - (const bstring *)&be_const_str_Wire, - (const bstring *)&be_const_str__write, - (const bstring *)&be_const_str_get_coords, - (const bstring *)&be_const_str_acos, - (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, + (const bstring *)&be_const_str_RGB, + NULL, + (const bstring *)&be_const_str__X2Ep2, + (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code, + (const bstring *)&be_const_str__X2Eautoconf, + (const bstring *)&be_const_str_draw_line, + (const bstring *)&be_const_str__filename, + (const bstring *)&be_const_str_next_cron, + (const bstring *)&be_const_str_get_height, + (const bstring *)&be_const_str_I2C_X3A, + (const bstring *)&be_const_str_AudioGenerator, + (const bstring *)&be_const_str__X2Ep, + (const bstring *)&be_const_str_HTTP_GET, + (const bstring *)&be_const_str_begin, + NULL, + (const bstring *)&be_const_str_obj_event_base, + (const bstring *)&be_const_str_asstring, + (const bstring *)&be_const_str__X3F, + (const bstring *)&be_const_str_attrdump, + (const bstring *)&be_const_str_EVENT_DRAW_PART_END, + (const bstring *)&be_const_str__X3Clambda_X3E, + (const bstring *)&be_const_str_set_text, + (const bstring *)&be_const_str_back_forth, + (const bstring *)&be_const_str_remove_cmd, + (const bstring *)&be_const_str__X2F, + (const bstring *)&be_const_str_add_cron, + NULL, + (const bstring *)&be_const_str_stop_iteration, + (const bstring *)&be_const_str_percentage, + (const bstring *)&be_const_str_b, + (const bstring *)&be_const_str_button_pressed, + (const bstring *)&be_const_str___iterator__, + (const bstring *)&be_const_str_display, + (const bstring *)&be_const_str_register_obj, + (const bstring *)&be_const_str_delay, + NULL, + (const bstring *)&be_const_str_begin_multicast, + (const bstring *)&be_const_str_ccronexpr, + (const bstring *)&be_const_str_set_useragent, + (const bstring *)&be_const_str_del, + (const bstring *)&be_const_str_response_append, + (const bstring *)&be_const_str_set_ct, + (const bstring *)&be_const_str_every_50ms, + (const bstring *)&be_const_str_page_autoconf_mgr, + (const bstring *)&be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker, + (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X29, + (const bstring *)&be_const_str_SERIAL_8E2, + (const bstring *)&be_const_str_check_privileged_access, + (const bstring *)&be_const_str__X2F_X3Frst_X3D, + (const bstring *)&be_const_str_get_warning_level, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + NULL, + (const bstring *)&be_const_str_bri, + (const bstring *)&be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function, + (const bstring *)&be_const_str_format, + (const bstring *)&be_const_str_memory, + (const bstring *)&be_const_str__X23preinit_X2Ebe, + (const bstring *)&be_const_str_COLOR_BLACK, + (const bstring *)&be_const_str__X2502d_X25s_X2502d, + (const bstring *)&be_const_str_value_error, + (const bstring *)&be_const_str_get_pixel_color, + (const bstring *)&be_const_str__class, + (const bstring *)&be_const_str_WS2812_GRB, + (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, + (const bstring *)&be_const_str_Unknown, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, + (const bstring *)&be_const_str_SERIAL_7O2, + NULL, + (const bstring *)&be_const_str_CFG_X3A_X20running_X20, + (const bstring *)&be_const_str_available, + (const bstring *)&be_const_str_set_dc_voltage, + (const bstring *)&be_const_str_SERIAL_5O2, + (const bstring *)&be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_clear_to, + (const bstring *)&be_const_str_Auto_X2Dconfiguration, + (const bstring *)&be_const_str_get_size, + (const bstring *)&be_const_str_x, + (const bstring *)&be_const_str_param, + (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, + NULL, + (const bstring *)&be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, + (const bstring *)&be_const_str_elif, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + (const bstring *)&be_const_str_h, + NULL, + NULL, + (const bstring *)&be_const_str_list_handlers, + (const bstring *)&be_const_str__p, + (const bstring *)&be_const_str_get_hor_res, + (const bstring *)&be_const_str_search, + (const bstring *)&be_const_str_rounded, + (const bstring *)&be_const_str_resp_cmnd_str, + (const bstring *)&be_const_str__settings_def, + (const bstring *)&be_const_str_engine, + (const bstring *)&be_const_str_connection_error, + NULL, + (const bstring *)&be_const_str_addr, + (const bstring *)&be_const_str_groups, + (const bstring *)&be_const_str_SERIAL_5O1, + (const bstring *)&be_const_str_Trigger, + (const bstring *)&be_const_str_now, + (const bstring *)&be_const_str_get_vbus_current, + NULL, + (const bstring *)&be_const_str_imin, + (const bstring *)&be_const_str_cb_do_nothing, + (const bstring *)&be_const_str_SERIAL_7N2, + (const bstring *)&be_const_str_get_current_module_path, + (const bstring *)&be_const_str_cb_event_closure, + (const bstring *)&be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, + (const bstring *)&be_const_str__cmd, + (const bstring *)&be_const_str_SERIAL_5E1, + (const bstring *)&be_const_str_digital_read, + (const bstring *)&be_const_str_arg_size, + (const bstring *)&be_const_str_clock_icon, + (const bstring *)&be_const_str_set_huesat, + (const bstring *)&be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, + (const bstring *)&be_const_str_content_send, + (const bstring *)&be_const_str_scr_act, + NULL, + (const bstring *)&be_const_str_WS2812, + (const bstring *)&be_const_str_set_alternate, + (const bstring *)&be_const_str__X25s_X2Eautoconf, + (const bstring *)&be_const_str_signal_bars, + (const bstring *)&be_const_str__X3D_X3D, + (const bstring *)&be_const_str_arc_dsc, + (const bstring *)&be_const_str_byte, + (const bstring *)&be_const_str__X3E_X3D, + (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, + (const bstring *)&be_const_str_while, + (const bstring *)&be_const_str__X28_X29, + (const bstring *)&be_const_str_EVENT_DRAW_MAIN, + (const bstring *)&be_const_str__X23autoexec_X2Ebe, + (const bstring *)&be_const_str__dirty, + NULL, + NULL, + (const bstring *)&be_const_str__fl, + (const bstring *)&be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_AudioFileSource, + (const bstring *)&be_const_str_lv_extra, + (const bstring *)&be_const_str__X23, + (const bstring *)&be_const_str_json_fdump_list, + (const bstring *)&be_const_str_set_xy, + (const bstring *)&be_const_str_classof, + NULL, + (const bstring *)&be_const_str_COLOR_WHITE, + (const bstring *)&be_const_str__X23init_X2Ebat, + (const bstring *)&be_const_str_group_def, + (const bstring *)&be_const_str_BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29, + (const bstring *)&be_const_str__X2Flights_X2F, + (const bstring *)&be_const_str_Tasmota, + (const bstring *)&be_const_str_lv_solidified, + (const bstring *)&be_const_str_leds, + (const bstring *)&be_const_str_call, + (const bstring *)&be_const_str_offseta, + (const bstring *)&be_const_str_redirect, + (const bstring *)&be_const_str_BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27, + (const bstring *)&be_const_str_RGBW, + (const bstring *)&be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize, + (const bstring *)&be_const_str__X3C, + (const bstring *)&be_const_str_read, (const bstring *)&be_const_str_set_timer, (const bstring *)&be_const_str__X21_X3D_X3D, - (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, - NULL, - (const bstring *)&be_const_str__available, - (const bstring *)&be_const_str_AudioFileSource, - (const bstring *)&be_const_str_set_text, - (const bstring *)&be_const_str_animate, - (const bstring *)&be_const_str_deregister_obj, - (const bstring *)&be_const_str_detected_X20on_X20bus, - (const bstring *)&be_const_str_SERIAL_8O2, - (const bstring *)&be_const_str_cos, - (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, - (const bstring *)&be_const_str__t, - (const bstring *)&be_const_str_POST, - (const bstring *)&be_const_str_wire, - (const bstring *)&be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, - (const bstring *)&be_const_str__X2F, - (const bstring *)&be_const_str_Leds, - (const bstring *)&be_const_str__X2Fstate_X2F, - (const bstring *)&be_const_str_call, - (const bstring *)&be_const_str__energy, - (const bstring *)&be_const_str_instance_X20required, - NULL, - (const bstring *)&be_const_str_char, - (const bstring *)&be_const_str__X3F, - (const bstring *)&be_const_str_setbits, - NULL, - (const bstring *)&be_const_str_toint, - (const bstring *)&be_const_str_pop_path, - (const bstring *)&be_const_str_MD5, - (const bstring *)&be_const_str_lv_wifi_bars_icon, - NULL, - (const bstring *)&be_const_str_missing_X20name, - NULL, - (const bstring *)&be_const_str_WS2812_GRB, - (const bstring *)&be_const_str_i2c_enabled, - NULL, - (const bstring *)&be_const_str_ctor, - (const bstring *)&be_const_str__X23preinit_X2Ebe, - (const bstring *)&be_const_str_return_X20code_X3D_X25i, - (const bstring *)&be_const_str_draw_line, - (const bstring *)&be_const_str__settings_def, - (const bstring *)&be_const_str_AudioOutput, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, - (const bstring *)&be_const_str_get_style_pad_right, - (const bstring *)&be_const_str_content_stop, - NULL, - NULL, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29, - (const bstring *)&be_const_str_can_show, - (const bstring *)&be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function, - (const bstring *)&be_const_str_SERIAL_6O2, - (const bstring *)&be_const_str_lv_clock_icon, - (const bstring *)&be_const_str_light_to_id, - (const bstring *)&be_const_str__X2Esize, - (const bstring *)&be_const_str__ccmd, - (const bstring *)&be_const_str__X28_X29, - (const bstring *)&be_const_str_readline, - (const bstring *)&be_const_str_COLOR_BLACK, - (const bstring *)&be_const_str__X0A, - (const bstring *)&be_const_str__X2Fac, (const bstring *)&be_const_str_depower, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, - (const bstring *)&be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, - (const bstring *)&be_const_str_math, - (const bstring *)&be_const_str_json_append, - NULL, - NULL, - (const bstring *)&be_const_str_getbits, - (const bstring *)&be_const_str_TASMOTA, - (const bstring *)&be_const_str__X22, - (const bstring *)&be_const_str_SERIAL_5E2, - NULL, - (const bstring *)&be_const_str_preinit, - (const bstring *)&be_const_str_open, - (const bstring *)&be_const_str__X3C_X3D, - (const bstring *)&be_const_str__X2Ep, - NULL, - (const bstring *)&be_const_str_add_event_cb, - (const bstring *)&be_const_str_name, - (const bstring *)&be_const_str_driver_name, - NULL, - (const bstring *)&be_const_str__X3A, - (const bstring *)&be_const_str_RELAY, - (const bstring *)&be_const_str__lvgl, - (const bstring *)&be_const_str_set_x, - (const bstring *)&be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, - (const bstring *)&be_const_str_get_bat_charge_current, - (const bstring *)&be_const_str_begin_multicast, - (const bstring *)&be_const_str__fl, - (const bstring *)&be_const_str_compress, - (const bstring *)&be_const_str__X2Ep1, - (const bstring *)&be_const_str_font_embedded, - (const bstring *)&be_const_str_OPTION_A, - (const bstring *)&be_const_str_strip, - (const bstring *)&be_const_str_BECDFE, - (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str__X23display_X2Eini, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code, - (const bstring *)&be_const_str_OneWire, - (const bstring *)&be_const_str_lv_timer_cb, - (const bstring *)&be_const_str__request_from, - (const bstring *)&be_const_str_stop, - (const bstring *)&be_const_str_SERIAL_8N2, - (const bstring *)&be_const_str__X3D_X3D, - (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, - NULL, - (const bstring *)&be_const_str_allocated, - (const bstring *)&be_const_str_assert, - (const bstring *)&be_const_str_a, - (const bstring *)&be_const_str_Unknown, - (const bstring *)&be_const_str_detect, - (const bstring *)&be_const_str_member, - (const bstring *)&be_const_str_matrix, - (const bstring *)&be_const_str_MAX_RMT, - (const bstring *)&be_const_str_register_button_encoder, - (const bstring *)&be_const_str_pc_abs, - (const bstring *)&be_const_str__X25s_X2Eautoconf, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X29, - NULL, - (const bstring *)&be_const_str_ALIGN_LEFT_MID, - (const bstring *)&be_const_str_readbytes, - (const bstring *)&be_const_str__X2502d_X25s_X2502d, - (const bstring *)&be_const_str_web_add_handler, - NULL, - NULL, - (const bstring *)&be_const_str_list, - (const bstring *)&be_const_str_lv_extra, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_class_init_obj, - (const bstring *)&be_const_str__change_buffer, - (const bstring *)&be_const_str_consume_stereo, - (const bstring *)&be_const_str_full_status, - (const bstring *)&be_const_str_EVENT_DRAW_PART_END, - (const bstring *)&be_const_str_AudioFileSourceFS, - (const bstring *)&be_const_str__X2Ew, - (const bstring *)&be_const_str_solidified, - (const bstring *)&be_const_str_AudioOutputI2S, - (const bstring *)&be_const_str__X3D_X3C_X3E_X21, - (const bstring *)&be_const_str_resp_cmnd_str, - (const bstring *)&be_const_str_obj_event_base, - (const bstring *)&be_const_str__anonymous_, - (const bstring *)&be_const_str_hue, - (const bstring *)&be_const_str_asin, - (const bstring *)&be_const_str_write_file, - (const bstring *)&be_const_str_INTERNAL_PDM, - (const bstring *)&be_const_str_set_align, - (const bstring *)&be_const_str_gamma, - (const bstring *)&be_const_str_set_bits_per_sample, - (const bstring *)&be_const_str_json_fdump, - (const bstring *)&be_const_str_get_option, - (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X20, - (const bstring *)&be_const_str_add_handler, - NULL, - (const bstring *)&be_const_str_SK6812_GRBW, - (const bstring *)&be_const_str_AES_GCM, - NULL, - (const bstring *)&be_const_str_chars_in_string, - (const bstring *)&be_const_str_get_size, - (const bstring *)&be_const_str___lower__, - (const bstring *)&be_const_str_EC_C25519, - (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, - (const bstring *)&be_const_str_flush, - (const bstring *)&be_const_str_add_fast_loop, - (const bstring *)&be_const_str_set_style_pad_all, - NULL, - (const bstring *)&be_const_str_groups, - (const bstring *)&be_const_str__X3Clambda_X3E, - (const bstring *)&be_const_str_RGBCT, - (const bstring *)&be_const_str_add_anim, - (const bstring *)&be_const_str_minute, - NULL, - (const bstring *)&be_const_str_DIMMER, - (const bstring *)&be_const_str_rad, - (const bstring *)&be_const_str__global_addr, - (const bstring *)&be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_arg_name, - NULL, - (const bstring *)&be_const_str_Auto_X2Dconfiguration, - (const bstring *)&be_const_str_lv_solidified, - (const bstring *)&be_const_str__X23autoexec_X2Ebe, - (const bstring *)&be_const_str_io_error, - (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + (const bstring *)&be_const_str_lower, + (const bstring *)&be_const_str_SERIAL_7E2, (const bstring *)&be_const_str__X2C, - (const bstring *)&be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, NULL, - (const bstring *)&be_const_str_closure, - (const bstring *)&be_const_str_byte, - (const bstring *)&be_const_str_SERIAL_6N2, - (const bstring *)&be_const_str_, - (const bstring *)&be_const_str_param, - (const bstring *)&be_const_str__X3C, - (const bstring *)&be_const_str__ptr, + (const bstring *)&be_const_str_add_light, + (const bstring *)&be_const_str_dac_voltage, + (const bstring *)&be_const_str_area, + (const bstring *)&be_const_str_c, + NULL, + (const bstring *)&be_const_str_class_init_obj, + NULL, + (const bstring *)&be_const_str_encrypt, + (const bstring *)&be_const_str__X2Fstate_X2F, + (const bstring *)&be_const_str_alternate, + (const bstring *)&be_const_str_check_not_method, + (const bstring *)&be_const_str_None, + (const bstring *)&be_const_str_SERIAL_8N2, + (const bstring *)&be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, + (const bstring *)&be_const_str__write, + (const bstring *)&be_const_str_dump, + (const bstring *)&be_const_str_INTERNAL_DAC, + (const bstring *)&be_const_str__def, + (const bstring *)&be_const_str_EC_C25519, + (const bstring *)&be_const_str_atan2, + (const bstring *)&be_const_str__request_from, + (const bstring *)&be_const_str_calldepth, + (const bstring *)&be_const_str__X2F_X2Eautoconf, + (const bstring *)&be_const_str_False, (const bstring *)&be_const_str_SERIAL_7E1, - (const bstring *)&be_const_str_clear, - (const bstring *)&be_const_str_sinh, - (const bstring *)&be_const_str_img, - (const bstring *)&be_const_str_redirect, - (const bstring *)&be_const_str_WS2812, + (const bstring *)&be_const_str_open, NULL, - (const bstring *)&be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, + (const bstring *)&be_const_str__X23autoexec_X2Ebat, + (const bstring *)&be_const_str_consume_silence, + NULL, + (const bstring *)&be_const_str_MAX_RMT, + (const bstring *)&be_const_str_json_fdump, + (const bstring *)&be_const_str_AudioGeneratorMP3, + (const bstring *)&be_const_str_set_percentage, + (const bstring *)&be_const_str__t, + (const bstring *)&be_const_str_ins_goto, + NULL, + (const bstring *)&be_const_str_RES_OK, + (const bstring *)&be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus, + (const bstring *)&be_const_str__X2Etapp, + (const bstring *)&be_const_str_SERIAL_7O1, + NULL, + (const bstring *)&be_const_str_web_add_main_button, + (const bstring *)&be_const_str_invalidate, + (const bstring *)&be_const_str_True, + (const bstring *)&be_const_str__X3A, + (const bstring *)&be_const_str_timer_cb, + (const bstring *)&be_const_str_widget_event_impl, + (const bstring *)&be_const_str_widget_constructor, + (const bstring *)&be_const_str_for, + (const bstring *)&be_const_str_y, + NULL, + (const bstring *)&be_const_str_floor, + (const bstring *)&be_const_str_consume_stereo, + NULL, + (const bstring *)&be_const_str_set_size, + (const bstring *)&be_const_str_compress, + NULL, + (const bstring *)&be_const_str_tanh, + (const bstring *)&be_const_str_write_file, + (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, + (const bstring *)&be_const_str_ct, + (const bstring *)&be_const_str_light, + (const bstring *)&be_const_str_GET, + (const bstring *)&be_const_str_event, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, + (const bstring *)&be_const_str__X0A, + (const bstring *)&be_const_str_width_def, + (const bstring *)&be_const_str_assert, + (const bstring *)&be_const_str_every_250ms, + (const bstring *)&be_const_str_exec_rules, + (const bstring *)&be_const_str_editable, NULL, (const bstring *)&be_const_str_skip, - NULL, - (const bstring *)&be_const_str_AXP192, - (const bstring *)&be_const_str__X2F_X2Eautoconf, - NULL, - NULL, - NULL, - (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, - (const bstring *)&be_const_str_AudioGenerator, - NULL, - (const bstring *)&be_const_str_set_exten, - NULL, - (const bstring *)&be_const_str_run_bat, - (const bstring *)&be_const_str_Restart_X201, - (const bstring *)&be_const_str_add_header, - NULL, - (const bstring *)&be_const_str__X5B, - (const bstring *)&be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29, - (const bstring *)&be_const_str_get_light, - NULL, - (const bstring *)&be_const_str_c, - (const bstring *)&be_const_str_get_battery_chargin_status, - (const bstring *)&be_const_str_shared_key, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, - (const bstring *)&be_const_str_range, - (const bstring *)&be_const_str_add_light, - (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, - (const bstring *)&be_const_str__debug_present, - (const bstring *)&be_const_str_int, - (const bstring *)&be_const_str_digital_write, - (const bstring *)&be_const_str_CFG_X3A_X20return_code_X3D_X25i, - (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, - (const bstring *)&be_const_str_draw_line_dsc_init, - NULL, - (const bstring *)&be_const_str_pc, + (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, + (const bstring *)&be_const_str_discover, + (const bstring *)&be_const_str_animators, + (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, + (const bstring *)&be_const_str_missing_X20name, + (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, + (const bstring *)&be_const_str_DIMMER, + (const bstring *)&be_const_str_get, (const bstring *)&be_const_str_call_native, - (const bstring *)&be_const_str__X23, - (const bstring *)&be_const_str_I2C_X3A, - (const bstring *)&be_const_str__X2Ebe, - (const bstring *)&be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, - (const bstring *)&be_const_str__X2B, - (const bstring *)&be_const_str_SERIAL_7N2, - (const bstring *)&be_const_str_ceil, - (const bstring *)&be_const_str_SERIAL_5N2, - (const bstring *)&be_const_str__settings_ptr, - (const bstring *)&be_const_str_get_height, + (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, + (const bstring *)&be_const_str_nan, + (const bstring *)&be_const_str__X2E_X2E, + (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, + NULL, + (const bstring *)&be_const_str__persist_X2Ejson, + (const bstring *)&be_const_str_import, + (const bstring *)&be_const_str_remove_rule, + (const bstring *)&be_const_str_cb_obj, + (const bstring *)&be_const_str_SERIAL_6E1, + (const bstring *)&be_const_str_AudioGeneratorWAV, + (const bstring *)&be_const_str__change_buffer, + NULL, + (const bstring *)&be_const_str_AudioFileSourceFS, + (const bstring *)&be_const_str_BECDFE, + (const bstring *)&be_const_str_dimmer, + (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, + (const bstring *)&be_const_str__X22_X3A, + (const bstring *)&be_const_str_is_dirty, + (const bstring *)&be_const_str_lv_point_arr, + NULL, + (const bstring *)&be_const_str_get_bri, + (const bstring *)&be_const_str_null_cb, + (const bstring *)&be_const_str_issubclass, + (const bstring *)&be_const_str_is_running, + NULL, + NULL, + (const bstring *)&be_const_str_sin, + (const bstring *)&be_const_str_exp, + (const bstring *)&be_const_str__X2Ebec, + (const bstring *)&be_const_str__X20, + (const bstring *)&be_const_str_get_light, + (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, + NULL, + (const bstring *)&be_const_str_Restart_X201, + (const bstring *)&be_const_str_char, + (const bstring *)&be_const_str_closure, + (const bstring *)&be_const_str_copy, + (const bstring *)&be_const_str_init_draw_line_dsc, + (const bstring *)&be_const_str_add_event_cb, + (const bstring *)&be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, + (const bstring *)&be_const_str_set_power, + (const bstring *)&be_const_str_class, + (const bstring *)&be_const_str__anonymous_, + (const bstring *)&be_const_str_set_auth, + (const bstring *)&be_const_str_draw_arc, + (const bstring *)&be_const_str_ALIGN_LEFT_MID, + (const bstring *)&be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map, + (const bstring *)&be_const_str_resize, + (const bstring *)&be_const_str_isrunning, + (const bstring *)&be_const_str__X3D, + (const bstring *)&be_const_str_tcpclient, + (const bstring *)&be_const_str_constructor_cb, + (const bstring *)&be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, + (const bstring *)&be_const_str_AudioOutputI2S, + (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E, + NULL, + (const bstring *)&be_const_str_set_tasmota_logo, + (const bstring *)&be_const_str_remove_light, + (const bstring *)&be_const_str_before_del, + (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, + NULL, + (const bstring *)&be_const_str__X2Ep1, + NULL, + (const bstring *)&be_const_str_OneWire, + (const bstring *)&be_const_str__ccmd, + (const bstring *)&be_const_str__X2Elen, + (const bstring *)&be_const_str_stop, + (const bstring *)&be_const_str_deregister_obj, + (const bstring *)&be_const_str_SERIAL_5N1, (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - (const bstring *)&be_const_str__def, - (const bstring *)&be_const_str_cb_do_nothing, - (const bstring *)&be_const_str_EVENT_DELETE + (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, + (const bstring *)&be_const_str_create_segment, + (const bstring *)&be_const_str__X23display_X2Eini, + (const bstring *)&be_const_str_close, + (const bstring *)&be_const_str_member, + NULL, + (const bstring *)&be_const_str__X3E, + NULL, + (const bstring *)&be_const_str_autorun, + (const bstring *)&be_const_str__X3C_X3D, + (const bstring *)&be_const_str_color, + (const bstring *)&be_const_str_manuf, + (const bstring *)&be_const_str_else, + (const bstring *)&be_const_str_, + (const bstring *)&be_const_str_detected_X20on_X20bus, + (const bstring *)&be_const_str_asin, + (const bstring *)&be_const_str__read, + (const bstring *)&be_const_str_EVENT_DRAW_PART_BEGIN, + (const bstring *)&be_const_str_every_100ms, + NULL, + (const bstring *)&be_const_str_ctypes_bytes_dyn, + (const bstring *)&be_const_str_OPTION_A, + (const bstring *)&be_const_str_read13, + NULL, + (const bstring *)&be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_SERIAL_5N2, + NULL, + (const bstring *)&be_const_str_arch, + (const bstring *)&be_const_str_set_pixel_color, + (const bstring *)&be_const_str_codedump, + (const bstring *)&be_const_str_set_chg_current, + (const bstring *)&be_const_str__X21_X3D, + (const bstring *)&be_const_str_exec_tele, + (const bstring *)&be_const_str_bus, + (const bstring *)&be_const_str_erase, + (const bstring *)&be_const_str___upper__, + NULL, + (const bstring *)&be_const_str__rules, + (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_HTTP_POST, + (const bstring *)&be_const_str__X2B, + (const bstring *)&be_const_str_month, + NULL, + (const bstring *)&be_const_str_SERIAL_6O1, + (const bstring *)&be_const_str_lv_coord_arr, + (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, + (const bstring *)&be_const_str_bytes, + NULL, + (const bstring *)&be_const_str_get_object_from_ptr, + NULL, + (const bstring *)&be_const_str_duration, + (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, + (const bstring *)&be_const_str_light_state, + (const bstring *)&be_const_str_ceil, + (const bstring *)&be_const_str__X3D_X3C_X3E_X21, + (const bstring *)&be_const_str_remove_cron, + (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, + (const bstring *)&be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, + (const bstring *)&be_const_str__X2Esize, + NULL, + NULL, + (const bstring *)&be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E, + (const bstring *)&be_const_str_widget_struct_default, + NULL, + (const bstring *)&be_const_str_wire, + (const bstring *)&be_const_str_get_width, + NULL, + (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, + (const bstring *)&be_const_str_I2C_Driver, + NULL, + (const bstring *)&be_const_str_SERIAL_6O2, + (const bstring *)&be_const_str_time_reached, + (const bstring *)&be_const_str_map, + NULL, + (const bstring *)&be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, + (const bstring *)&be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_font_seg7, + (const bstring *)&be_const_str_splash_init, + (const bstring *)&be_const_str_ptr, + (const bstring *)&be_const_str_Leds, + (const bstring *)&be_const_str_SERIAL_6E2, + (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, + NULL, + NULL, + (const bstring *)&be_const_str_toptr, + (const bstring *)&be_const_str_rand, + (const bstring *)&be_const_str_continue, + (const bstring *)&be_const_str_files, + (const bstring *)&be_const_str_autoexec, + (const bstring *)&be_const_str_day, + (const bstring *)&be_const_str_get_style_bg_color, + (const bstring *)&be_const_str_connected, + (const bstring *)&be_const_str_AudioOutput, + (const bstring *)&be_const_str_push_path, + (const bstring *)&be_const_str_SERIAL_7N1, + (const bstring *)&be_const_str_name, + (const bstring *)&be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range, + NULL, + (const bstring *)&be_const_str_get_free_heap, + (const bstring *)&be_const_str_EXTERNAL_I2S, + (const bstring *)&be_const_str_add_header, + (const bstring *)&be_const_str_set_gain, + (const bstring *)&be_const_str_success, + (const bstring *)&be_const_str_CT, + (const bstring *)&be_const_str_setitem, + (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str_montserrat_font, + (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20function, + (const bstring *)&be_const_str_resolvecmnd, + (const bstring *)&be_const_str__X2Ebe, + (const bstring *)&be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function, + (const bstring *)&be_const_str_get_style_pad_right, + (const bstring *)&be_const_str_set_mode_ct, + (const bstring *)&be_const_str_write, + (const bstring *)&be_const_str_except, + (const bstring *)&be_const_str_exists, + (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, + (const bstring *)&be_const_str_upper, + (const bstring *)&be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, + (const bstring *)&be_const_str__archive, + NULL, + (const bstring *)&be_const_str_RELAY, + (const bstring *)&be_const_str_Parameter_X20error, + (const bstring *)&be_const_str_split, + (const bstring *)&be_const_str_draw_arc_dsc, + (const bstring *)&be_const_str_do }; static const struct bconststrtab m_const_string_table = { - .size = 452, - .count = 928, + .size = 453, + .count = 929, .table = m_string_table }; diff --git a/lib/libesp32/berry/generate/be_fixed_be_class_tasmota.h b/lib/libesp32/berry/generate/be_fixed_be_class_tasmota.h index 18f634b36..42087a775 100644 --- a/lib/libesp32/berry/generate/be_fixed_be_class_tasmota.h +++ b/lib/libesp32/berry/generate/be_fixed_be_class_tasmota.h @@ -1,96 +1,97 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_tasmota_map) { + { be_const_key(gc, -1), be_const_closure(Tasmota_gc_closure) }, + { be_const_key(resp_cmnd_done, -1), be_const_func(l_respCmndDone) }, + { be_const_key(web_send, 33), be_const_func(l_webSend) }, + { be_const_key(add_driver, 21), be_const_closure(Tasmota_add_driver_closure) }, + { be_const_key(wd, 12), be_const_var(0) }, + { be_const_key(resp_cmnd_error, 25), be_const_func(l_respCmndError) }, + { be_const_key(publish, 73), be_const_func(l_publish) }, + { be_const_key(gen_cb, 0), be_const_closure(Tasmota_gen_cb_closure) }, + { be_const_key(_settings_ptr, -1), be_const_comptr(&Settings) }, { be_const_key(try_rule, -1), be_const_closure(Tasmota_try_rule_closure) }, - { be_const_key(find_op, -1), be_const_closure(Tasmota_find_op_closure) }, - { be_const_key(cmd_res, -1), be_const_var(0) }, - { be_const_key(add_cmd, 44), be_const_closure(Tasmota_add_cmd_closure) }, - { be_const_key(strptime, 81), be_const_func(l_strptime) }, - { be_const_key(wire_scan, -1), be_const_closure(Tasmota_wire_scan_closure) }, - { be_const_key(eth, 32), be_const_func(l_eth) }, - { be_const_key(remove_cmd, 52), be_const_closure(Tasmota_remove_cmd_closure) }, + { be_const_key(resp_cmnd_str, -1), be_const_func(l_respCmndStr) }, + { be_const_key(time_dump, -1), be_const_func(l_time_dump) }, + { be_const_key(global, 16), be_const_var(1) }, + { be_const_key(millis, 35), be_const_func(l_millis) }, + { be_const_key(cmd_res, -1), be_const_var(2) }, + { be_const_key(get_power, -1), be_const_func(l_getpower) }, + { be_const_key(set_light, 40), be_const_closure(Tasmota_set_light_closure) }, { be_const_key(set_power, -1), be_const_func(l_setpower) }, - { be_const_key(add_rule, -1), be_const_closure(Tasmota_add_rule_closure) }, - { be_const_key(run_cron, -1), be_const_closure(Tasmota_run_cron_closure) }, - { be_const_key(add_driver, -1), be_const_closure(Tasmota_add_driver_closure) }, - { be_const_key(chars_in_string, -1), be_const_closure(Tasmota_chars_in_string_closure) }, - { be_const_key(remove_cron, -1), be_const_closure(Tasmota_remove_cron_closure) }, - { be_const_key(web_send_decimal, -1), be_const_func(l_webSendDecimal) }, - { be_const_key(memory, 23), be_const_func(l_memory) }, { be_const_key(fast_loop, -1), be_const_closure(Tasmota_fast_loop_closure) }, { be_const_key(get_option, -1), be_const_func(l_getoption) }, - { be_const_key(wd, 17), be_const_var(1) }, - { be_const_key(_crons, 59), be_const_var(2) }, - { be_const_key(add_cron, 25), be_const_closure(Tasmota_add_cron_closure) }, - { be_const_key(global, -1), be_const_var(3) }, - { be_const_key(next_cron, 43), be_const_closure(Tasmota_next_cron_closure) }, - { be_const_key(init, -1), be_const_closure(Tasmota_init_closure) }, - { be_const_key(exec_cmd, -1), be_const_closure(Tasmota_exec_cmd_closure) }, - { be_const_key(_settings_ptr, -1), be_const_comptr(&Settings) }, - { be_const_key(add_fast_loop, 75), be_const_closure(Tasmota_add_fast_loop_closure) }, - { be_const_key(publish_result, -1), be_const_func(l_publish_result) }, - { be_const_key(wire2, -1), be_const_var(4) }, - { be_const_key(exec_tele, 48), be_const_closure(Tasmota_exec_tele_closure) }, - { be_const_key(resp_cmnd_str, -1), be_const_func(l_respCmndStr) }, - { be_const_key(_global_def, 29), be_const_comptr(&be_tasmota_global_struct) }, - { be_const_key(rtc, 4), be_const_func(l_rtc) }, - { be_const_key(resp_cmnd_error, 9), be_const_func(l_respCmndError) }, - { be_const_key(cmd, -1), be_const_closure(Tasmota_cmd_closure) }, - { be_const_key(set_timer, 80), be_const_closure(Tasmota_set_timer_closure) }, - { be_const_key(gc, -1), be_const_closure(Tasmota_gc_closure) }, - { be_const_key(get_power, -1), be_const_func(l_getpower) }, - { be_const_key(response_append, -1), be_const_func(l_respAppend) }, - { be_const_key(scale_uint, 21), be_const_func(l_scaleuint) }, - { be_const_key(_rules, -1), be_const_var(5) }, - { be_const_key(_global_addr, -1), be_const_comptr(&TasmotaGlobal) }, - { be_const_key(arch, 73), be_const_func(l_arch) }, - { be_const_key(resp_cmnd_failed, -1), be_const_func(l_respCmndFailed) }, - { be_const_key(load, 54), be_const_closure(Tasmota_load_closure) }, - { be_const_key(remove_timer, -1), be_const_closure(Tasmota_remove_timer_closure) }, - { be_const_key(find_key_i, 6), be_const_closure(Tasmota_find_key_i_closure) }, + { be_const_key(add_cron, -1), be_const_closure(Tasmota_add_cron_closure) }, { be_const_key(_settings_def, -1), be_const_comptr(&be_tasmota_settings_struct) }, - { be_const_key(strftime, -1), be_const_func(l_strftime) }, - { be_const_key(wire1, 3), be_const_var(6) }, - { be_const_key(_drivers, -1), be_const_var(7) }, - { be_const_key(log, 38), be_const_func(l_logInfo) }, - { be_const_key(exec_rules, 58), be_const_closure(Tasmota_exec_rules_closure) }, - { be_const_key(_ccmd, -1), be_const_var(8) }, - { be_const_key(wifi, -1), be_const_func(l_wifi) }, - { be_const_key(resp_cmnd_done, -1), be_const_func(l_respCmndDone) }, - { be_const_key(gen_cb, -1), be_const_closure(Tasmota_gen_cb_closure) }, - { be_const_key(_cmd, 13), be_const_func(l_cmd) }, - { be_const_key(time_str, 42), be_const_closure(Tasmota_time_str_closure) }, - { be_const_key(hs2rgb, -1), be_const_closure(Tasmota_hs2rgb_closure) }, - { be_const_key(resolvecmnd, -1), be_const_func(l_resolveCmnd) }, - { be_const_key(get_light, -1), be_const_closure(Tasmota_get_light_closure) }, - { be_const_key(save, 20), be_const_func(l_save) }, - { be_const_key(remove_rule, 65), be_const_closure(Tasmota_remove_rule_closure) }, + { be_const_key(init, 41), be_const_closure(Tasmota_init_closure) }, + { be_const_key(add_rule, 19), be_const_closure(Tasmota_add_rule_closure) }, + { be_const_key(resp_cmnd_failed, -1), be_const_func(l_respCmndFailed) }, + { be_const_key(exec_tele, -1), be_const_closure(Tasmota_exec_tele_closure) }, + { be_const_key(add_fast_loop, -1), be_const_closure(Tasmota_add_fast_loop_closure) }, + { be_const_key(_global_def, -1), be_const_comptr(&be_tasmota_global_struct) }, + { be_const_key(yield, 71), be_const_func(l_yield) }, + { be_const_key(next_cron, -1), be_const_closure(Tasmota_next_cron_closure) }, + { be_const_key(web_send_decimal, -1), be_const_func(l_webSendDecimal) }, + { be_const_key(time_reached, 11), be_const_func(l_timereached) }, { be_const_key(delay, -1), be_const_func(l_delay) }, - { be_const_key(web_send, -1), be_const_func(l_webSend) }, + { be_const_key(rtc, -1), be_const_func(l_rtc) }, + { be_const_key(wire2, -1), be_const_var(3) }, + { be_const_key(add_cmd, 82), be_const_closure(Tasmota_add_cmd_closure) }, + { be_const_key(exec_rules, 14), be_const_closure(Tasmota_exec_rules_closure) }, + { be_const_key(set_timer, -1), be_const_closure(Tasmota_set_timer_closure) }, + { be_const_key(wire_scan, -1), be_const_closure(Tasmota_wire_scan_closure) }, + { be_const_key(run_cron, 37), be_const_closure(Tasmota_run_cron_closure) }, + { be_const_key(get_light, -1), be_const_closure(Tasmota_get_light_closure) }, + { be_const_key(cmd, -1), be_const_closure(Tasmota_cmd_closure) }, + { be_const_key(remove_cmd, -1), be_const_closure(Tasmota_remove_cmd_closure) }, + { be_const_key(hs2rgb, -1), be_const_closure(Tasmota_hs2rgb_closure) }, + { be_const_key(_fl, -1), be_const_var(4) }, { be_const_key(i2c_enabled, -1), be_const_func(l_i2cenabled) }, - { be_const_key(set_light, -1), be_const_closure(Tasmota_set_light_closure) }, - { be_const_key(time_reached, -1), be_const_func(l_timereached) }, - { be_const_key(publish, -1), be_const_func(l_publish) }, - { be_const_key(_debug_present, -1), be_const_var(9) }, - { be_const_key(settings, -1), be_const_var(10) }, - { be_const_key(get_free_heap, 16), be_const_func(l_getFreeHeap) }, + { be_const_key(get_switches, -1), be_const_func(l_getswitch) }, + { be_const_key(_debug_present, 39), be_const_var(5) }, + { be_const_key(run_deferred, 18), be_const_closure(Tasmota_run_deferred_closure) }, + { be_const_key(load, -1), be_const_closure(Tasmota_load_closure) }, + { be_const_key(get_switch, 75), be_const_func(l_getswitch) }, + { be_const_key(chars_in_string, -1), be_const_closure(Tasmota_chars_in_string_closure) }, + { be_const_key(resp_cmnd, 51), be_const_func(l_respCmnd) }, + { be_const_key(event, 22), be_const_closure(Tasmota_event_closure) }, + { be_const_key(_ccmd, -1), be_const_var(6) }, + { be_const_key(_rules, 20), be_const_var(7) }, + { be_const_key(wire1, -1), be_const_var(8) }, + { be_const_key(remove_timer, 5), be_const_closure(Tasmota_remove_timer_closure) }, + { be_const_key(eth, -1), be_const_func(l_eth) }, + { be_const_key(arch, 43), be_const_func(l_arch) }, + { be_const_key(remove_driver, -1), be_const_closure(Tasmota_remove_driver_closure) }, + { be_const_key(response_append, -1), be_const_func(l_respAppend) }, + { be_const_key(wifi, -1), be_const_func(l_wifi) }, + { be_const_key(strptime, 56), be_const_func(l_strptime) }, + { be_const_key(find_op, 78), be_const_closure(Tasmota_find_op_closure) }, + { be_const_key(log, -1), be_const_func(l_logInfo) }, + { be_const_key(find_key_i, -1), be_const_closure(Tasmota_find_key_i_closure) }, + { be_const_key(_global_addr, -1), be_const_comptr(&TasmotaGlobal) }, + { be_const_key(save, -1), be_const_func(l_save) }, + { be_const_key(exec_cmd, 63), be_const_closure(Tasmota_exec_cmd_closure) }, + { be_const_key(remove_rule, -1), be_const_closure(Tasmota_remove_rule_closure) }, + { be_const_key(time_str, -1), be_const_closure(Tasmota_time_str_closure) }, + { be_const_key(settings, -1), be_const_var(9) }, + { be_const_key(publish_result, -1), be_const_func(l_publish_result) }, + { be_const_key(get_free_heap, -1), be_const_func(l_getFreeHeap) }, + { be_const_key(_timers, -1), be_const_var(10) }, + { be_const_key(scale_uint, 10), be_const_func(l_scaleuint) }, + { be_const_key(strftime, 9), be_const_func(l_strftime) }, + { be_const_key(_cmd, -1), be_const_func(l_cmd) }, { be_const_key(check_not_method, -1), be_const_closure(Tasmota_check_not_method_closure) }, - { be_const_key(event, -1), be_const_closure(Tasmota_event_closure) }, - { be_const_key(run_deferred, -1), be_const_closure(Tasmota_run_deferred_closure) }, - { be_const_key(read_sensors, -1), be_const_func(l_read_sensors) }, - { be_const_key(time_dump, -1), be_const_func(l_time_dump) }, - { be_const_key(millis, 35), be_const_func(l_millis) }, - { be_const_key(yield, -1), be_const_func(l_yield) }, - { be_const_key(remove_driver, 84), be_const_closure(Tasmota_remove_driver_closure) }, - { be_const_key(_timers, 83), be_const_var(11) }, - { be_const_key(_fl, 12), be_const_var(12) }, - { be_const_key(resp_cmnd, -1), be_const_func(l_respCmnd) }, - { be_const_key(get_switch, -1), be_const_func(l_getswitch) }, + { be_const_key(remove_cron, -1), be_const_closure(Tasmota_remove_cron_closure) }, + { be_const_key(resolvecmnd, 54), be_const_func(l_resolveCmnd) }, + { be_const_key(_drivers, -1), be_const_var(11) }, + { be_const_key(_crons, 65), be_const_var(12) }, + { be_const_key(memory, -1), be_const_func(l_memory) }, + { be_const_key(read_sensors, 74), be_const_func(l_read_sensors) }, }; static be_define_const_map( be_class_tasmota_map, - 85 + 86 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c b/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c index 7295eae3a..071f116d9 100644 --- a/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c +++ b/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c @@ -2589,7 +2589,8 @@ class be_class_tasmota (scope: global, name: Tasmota) { get_power, func(l_getpower) set_power, func(l_setpower) - get_switch, func(l_getswitch) + get_switch, func(l_getswitch) // depraceted + get_switches, func(l_getswitch) i2c_enabled, func(l_i2cenabled) From f14fae10707bc20493dda7f5138af45c0eaabfa8 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sun, 20 Mar 2022 20:50:07 +0100 Subject: [PATCH 264/355] Berry fix wrong type check --- lib/libesp32/berry_mapping/src/be_class_wrapper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/libesp32/berry_mapping/src/be_class_wrapper.c b/lib/libesp32/berry_mapping/src/be_class_wrapper.c index f6951a585..35195b6e6 100644 --- a/lib/libesp32/berry_mapping/src/be_class_wrapper.c +++ b/lib/libesp32/berry_mapping/src/be_class_wrapper.c @@ -216,7 +216,7 @@ intptr_t be_convert_single_elt(bvm *vm, int idx, const char * arg_type, int *buf if (provided_type) { bbool type_ok = bfalse; type_ok = (arg_type[0] == '.'); // any type is accepted - type_ok = type_ok || (arg_type[0] == provided_type); // or type is a match + type_ok = type_ok || (arg_type[0] == provided_type && arg_type[1] == 0); // or type is a match (single char only) type_ok = type_ok || (ret == 0 && arg_type_len != 1); // or NULL is accepted for an instance if (!type_ok) { From 14109dced3ea32341e74edd723832ead84c72475 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 21 Mar 2022 12:21:06 +0100 Subject: [PATCH 265/355] esptool s3 bootloader fix --- platformio_tasmota32.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini index b28d0af65..f412a472f 100644 --- a/platformio_tasmota32.ini +++ b/platformio_tasmota32.ini @@ -38,8 +38,8 @@ extra_scripts = pre:pio-tools/add_c_flags.py ${esp_defaults.extra_scripts} [core32] -platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3.zip -platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/763/framework-arduinoespressif32-v4.4_dev-40d126bfd1.tar.gz +platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3/platform-espressif32-2.0.3.zip +platform_packages = build_unflags = ${esp32_defaults.build_unflags} build_flags = ${esp32_defaults.build_flags} From b72754ab0628a8823fec19b14ef2df65f2f181d3 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Mon, 21 Mar 2022 19:10:07 +0100 Subject: [PATCH 266/355] Berry minor changes in ctypes class wrapper --- .../berry_mapping/src/be_class_wrapper.c | 23 +++++++----------- .../lv_binding_berry/src/lv_berry.c | 24 ++++++++++++------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/lib/libesp32/berry_mapping/src/be_class_wrapper.c b/lib/libesp32/berry_mapping/src/be_class_wrapper.c index 35195b6e6..63e4ffa14 100644 --- a/lib/libesp32/berry_mapping/src/be_class_wrapper.c +++ b/lib/libesp32/berry_mapping/src/be_class_wrapper.c @@ -309,16 +309,14 @@ int be_check_arg_type(bvm *vm, int arg_start, int argc, const char * arg_type, i p_idx++; } - // special case when no parameters are passed but all are optional - if (NULL != arg_type && arg_type[arg_idx] == '[') { - arg_optional = btrue; - arg_idx++; - } - for (uint32_t i = 0; i < argc; i++) { type_short_name[0] = 0; // clear string // extract individual type - if (NULL != arg_type) { + if (arg_type) { + if (arg_type[arg_idx] == '[' || arg_type[arg_idx] == ']') { // '[' is a marker that following parameters are optional and default to NULL + arg_optional = btrue; + arg_idx++; + } switch (arg_type[arg_idx]) { case '-': arg_idx++; @@ -355,10 +353,6 @@ int be_check_arg_type(bvm *vm, int arg_start, int argc, const char * arg_type, i arg_type = NULL; // stop iterations break; } - if (arg_type && (arg_type[arg_idx] == '[' || arg_type[arg_idx] == ']')) { // '[' is a marker that following parameters are optional and default to NULL - arg_optional = btrue; - arg_idx++; - } } // berry_log_C(">> be_call_c_func arg %i, type %s", i, arg_type_check ? type_short_name : ""); p[p_idx] = be_convert_single_elt(vm, i + arg_start, arg_type_check ? type_short_name : NULL, &buf_len); @@ -376,7 +370,7 @@ int be_check_arg_type(bvm *vm, int arg_start, int argc, const char * arg_type, i } // check if we are missing arguments - if (!arg_optional && arg_type && arg_type[arg_idx] != 0) { + if (!arg_optional && arg_type && arg_type[arg_idx] != 0 && arg_type[arg_idx] != '[') { be_raisef(vm, "value_error", "Missing arguments, remaining type '%s'", &arg_type[arg_idx]); } return p_idx; @@ -487,9 +481,8 @@ int be_call_c_func(bvm *vm, const void * func, const char * return_type, const c } else { // class name be_find_global_or_module_member(vm, return_type); be_pushcomptr(vm, (void*) ret); // stack = class, ptr - be_pushcomptr(vm, (void*) -1); // stack = class, ptr, -1 - be_call(vm, 2); // instanciate with 2 arguments, stack = instance, ptr, -1 - be_pop(vm, 2); // stack = instance + be_call(vm, 1); // instanciate with 2 arguments, stack = instance, ptr, -1 + be_pop(vm, 1); // stack = instance be_return(vm); } } diff --git a/lib/libesp32_lvgl/lv_binding_berry/src/lv_berry.c b/lib/libesp32_lvgl/lv_binding_berry/src/lv_berry.c index 8235cccb5..96b10355a 100644 --- a/lib/libesp32_lvgl/lv_binding_berry/src/lv_berry.c +++ b/lib/libesp32_lvgl/lv_binding_berry/src/lv_berry.c @@ -168,19 +168,27 @@ int lv_x_member(bvm *vm) { be_raise(vm, "type_error", NULL); } -// lv_color -// First arg is a 24 bits RGB color -// If first arg is `nil` second arg is the native value of color +// lv_color - constructor +// +// Supports either new initialization taking 24 bits RGB +// or an existing color using native enconding +// +// Arg1 - the instance of the new lv_color object created +// Arg2 - 1/ if `int` then color is 24 bits 0xRRGGBB +// 2/ if `comptr` then color is native format (probably 16 bits) +// 3/ if no Arg2, color is 0x000000 (black) int lco_init(bvm *vm) { int argc = be_top(vm); + lv_color_t lv_color = {}; // default value is all zeroes (black) + uint32_t color32 = 0x000000; // default to black if (argc > 1) { - color32 = be_toint(vm, 2); - } - lv_color_t lv_color = lv_color_hex(color32); - if (argc > 2 && be_toint(vm, 3) == -1) { - lv_color.full = be_toint(vm, 2); + if (be_isint(vm, 2)) { // color is RGB 24 bits + lv_color = lv_color_hex(be_toint(vm, 2)); + } else if (be_iscomptr(vm, 2)) { + lv_color.full = (intptr_t) be_tocomptr(vm, 2); + } } be_pushint(vm, lv_color_to_uint32(lv_color)); be_setmember(vm, 1, "_p"); From 7a33dd0b369e0b3f59e70f14c779daec8054fa72 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Mon, 21 Mar 2022 19:13:54 +0100 Subject: [PATCH 267/355] Berry move BLE MI32 to simplest C mapping --- lib/libesp32/berry/default/be_modtab.c | 16 +- lib/libesp32/berry/generate/be_const_strtab.h | 13 + .../berry/generate/be_const_strtab_def.h | 2299 +++++++++-------- .../berry/generate/be_fixed_be_class_BLE.h | 22 + .../berry/generate/be_fixed_be_class_MI32.h | 22 + lib/libesp32/berry_tasmota/src/be_MI32_lib.c | 65 +- 6 files changed, 1244 insertions(+), 1193 deletions(-) create mode 100644 lib/libesp32/berry/generate/be_fixed_be_class_BLE.h create mode 100644 lib/libesp32/berry/generate/be_fixed_be_class_MI32.h diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c index 6051d11d8..b24dc9ec6 100644 --- a/lib/libesp32/berry/default/be_modtab.c +++ b/lib/libesp32/berry/default/be_modtab.c @@ -52,11 +52,6 @@ be_extern_native_module(lv_extra); be_extern_native_module(lv_tasmota); #endif // USE_LVGL -#if defined(USE_MI_ESP32) && !defined(USE_BLE_ESP32) -extern void be_load_MI32_class(bvm *vm); -extern void be_load_BLE_class(bvm *vm); -#endif //USE_MI_ESP32 - /* user-defined modules declare start */ /* user-defined modules declare end */ @@ -178,6 +173,9 @@ be_extern_native_class(md5); be_extern_native_class(udp); be_extern_native_class(webclient); be_extern_native_class(tcpclient); +// BLE +be_extern_native_class(MI32); +be_extern_native_class(BLE); // LVGL core classes be_extern_native_class(lv_color); be_extern_native_class(lv_font); @@ -248,6 +246,10 @@ BERRY_LOCAL bclass_array be_class_table = { #endif // USE_UFILESYS &be_native_class(AudioOpusDecoder), #endif // USE_I2S_AUDIO_BERRY +#if defined(USE_MI_ESP32) && !defined(USE_BLE_ESP32) + &be_native_class(MI32), + &be_native_class(BLE), +#endif //USE_MI_ESP32 NULL, /* do not remove */ }; @@ -269,8 +271,4 @@ BERRY_API void be_load_custom_libs(bvm *vm) #ifdef USE_ENERGY_SENSOR be_load_ctypes_energy_definitions_lib(vm); // ctype class #endif // USE_ENERGY_SENSOR -#if defined(USE_MI_ESP32) && !defined(USE_BLE_ESP32) - be_load_MI32_class(vm); - be_load_BLE_class(vm); -#endif //USE_MI_ESP32 } diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h index 540521742..81abe9a3c 100644 --- a/lib/libesp32/berry/generate/be_const_strtab.h +++ b/lib/libesp32/berry/generate/be_const_strtab.h @@ -14,6 +14,7 @@ extern const bcstring be_const_str_AudioOutput; extern const bcstring be_const_str_AudioOutputI2S; extern const bcstring be_const_str_Auto_X2Dconfiguration; extern const bcstring be_const_str_BECDFE; +extern const bcstring be_const_str_BLE; extern const bcstring be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20; extern const bcstring be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s; extern const bcstring be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function; @@ -68,6 +69,7 @@ extern const bcstring be_const_str_LVG_X3A_X20object_X3A; extern const bcstring be_const_str_Leds; extern const bcstring be_const_str_MAX_RMT; extern const bcstring be_const_str_MD5; +extern const bcstring be_const_str_MI32; extern const bcstring be_const_str_None; extern const bcstring be_const_str_OPTION_A; extern const bcstring be_const_str_OneWire; @@ -251,6 +253,7 @@ extern const bcstring be_const_str_add_header; extern const bcstring be_const_str_add_light; extern const bcstring be_const_str_add_rule; extern const bcstring be_const_str_addr; +extern const bcstring be_const_str_adv_cb; extern const bcstring be_const_str_allocated; extern const bcstring be_const_str_alternate; extern const bcstring be_const_str_animate; @@ -325,6 +328,7 @@ extern const bcstring be_const_str_color; extern const bcstring be_const_str_compile; extern const bcstring be_const_str_compress; extern const bcstring be_const_str_concat; +extern const bcstring be_const_str_conn_cb; extern const bcstring be_const_str_connect; extern const bcstring be_const_str_connected; extern const bcstring be_const_str_connection_error; @@ -371,6 +375,7 @@ extern const bcstring be_const_str_deregister_obj; extern const bcstring be_const_str_destructor_cb; extern const bcstring be_const_str_detect; extern const bcstring be_const_str_detected_X20on_X20bus; +extern const bcstring be_const_str_devices; extern const bcstring be_const_str_digital_read; extern const bcstring be_const_str_digital_write; extern const bcstring be_const_str_dim; @@ -446,6 +451,7 @@ extern const bcstring be_const_str_gamma8; extern const bcstring be_const_str_gc; extern const bcstring be_const_str_gen_cb; extern const bcstring be_const_str_get; +extern const bcstring be_const_str_get_MAC; extern const bcstring be_const_str_get_alternate; extern const bcstring be_const_str_get_aps_voltage; extern const bcstring be_const_str_get_bat_charge_current; @@ -464,6 +470,7 @@ extern const bcstring be_const_str_get_hor_res; extern const bcstring be_const_str_get_input_power_status; extern const bcstring be_const_str_get_light; extern const bcstring be_const_str_get_log; +extern const bcstring be_const_str_get_name; extern const bcstring be_const_str_get_object_from_ptr; extern const bcstring be_const_str_get_option; extern const bcstring be_const_str_get_percentage; @@ -731,13 +738,16 @@ extern const bcstring be_const_str_send; extern const bcstring be_const_str_send_multicast; extern const bcstring be_const_str_serial; extern const bcstring be_const_str_set; +extern const bcstring be_const_str_set_MAC; extern const bcstring be_const_str_set_align; extern const bcstring be_const_str_set_alternate; extern const bcstring be_const_str_set_auth; +extern const bcstring be_const_str_set_bat; extern const bcstring be_const_str_set_bits_per_sample; extern const bcstring be_const_str_set_bri; extern const bcstring be_const_str_set_channels; extern const bcstring be_const_str_set_chg_current; +extern const bcstring be_const_str_set_chr; extern const bcstring be_const_str_set_ct; extern const bcstring be_const_str_set_dc_voltage; extern const bcstring be_const_str_set_dcdc_enable; @@ -747,6 +757,7 @@ extern const bcstring be_const_str_set_gain; extern const bcstring be_const_str_set_height; extern const bcstring be_const_str_set_hue16sat; extern const bcstring be_const_str_set_huesat; +extern const bcstring be_const_str_set_hum; extern const bcstring be_const_str_set_ldo_enable; extern const bcstring be_const_str_set_ldo_voltage; extern const bcstring be_const_str_set_light; @@ -771,7 +782,9 @@ extern const bcstring be_const_str_set_style_pad_right; extern const bcstring be_const_str_set_style_radius; extern const bcstring be_const_str_set_style_text_color; extern const bcstring be_const_str_set_style_text_font; +extern const bcstring be_const_str_set_svc; extern const bcstring be_const_str_set_tasmota_logo; +extern const bcstring be_const_str_set_temp; extern const bcstring be_const_str_set_text; extern const bcstring be_const_str_set_time; extern const bcstring be_const_str_set_timeouts; diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h index 711ae2c92..33a2424d4 100644 --- a/lib/libesp32/berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/berry/generate/be_const_strtab_def.h @@ -1,822 +1,835 @@ -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str__X2E); -be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_event_send); -be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_Tele); -be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str__X2Fac); -be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_RGBCT); -be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str_tasmota_log_reader); -be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_web_add_config_button); -be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_pin_used); -be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson); -be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_decompress); -be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_pow); -be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_return_X20code_X3D_X25i); -be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_content_send_style); -be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_event_cb); -be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_gpio); -be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_digital_write); -be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_try_compile); -be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_chars_in_string); -be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_add); -be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_detect); -be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_arg_name); -be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_CFG_X3A_X20removing_X20autoconf_X20files); -be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_add_handler); -be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_CFG_X3A_X20loading_X20); -be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_screenshot); +be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_set_width); +be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str__X2Ep); +be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str_CT); +be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_coord_arr); +be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str_scale_uint); +be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_HTTP_POST); +be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_add_anim); +be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_set_hum); +be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str__available); +be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_begin_multicast); +be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_destructor_cb); +be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_LVG_X3A_X20object_X3A); +be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_AudioOpusDecoder); +be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_check_not_method); +be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_sys); +be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, NULL); +be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27); +be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str__timers); +be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, NULL); +be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str__def); +be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27); +be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str__X2Ep1); +be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E); +be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_draw_line); be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E); -be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str__global_def); -be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_atleast1); -be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_AudioOpusDecoder); -be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_cmd_res); -be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29); -be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_CFG_X3A_X20return_code_X3D_X25i); -be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_a); -be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str__end_transmission); -be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str__X2Ew); -be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf); -be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_keys); -be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_BUTTON_CONFIGURATION); -be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str__rmt); -be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_POST); -be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_read_sensors); -be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_driver_name); -be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_content_start); -be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found); -be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_AXP192); -be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, &be_const_str_CFG_X3A_X20loaded_X20_X20); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_gamma8); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_tostring); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_SERIAL_8N1); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_count); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_p1); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_lv_signal_arcs); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, NULL); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_Unknown_X20command); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_PART_MAIN); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_atan); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, NULL); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_json); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_AES_GCM); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_id); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_ct); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_CFG_X3A_X20ran_X20_X20); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_load); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_sat); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_AudioGenerator); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_dimmer); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_font_embedded); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_add); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_OneWire); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_concat); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_splash_remove); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_arc_dsc); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str__debug_present); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_get_name); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_id); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_ct); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_CFG_X3A_X20ran_X20_X20); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_load); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_sat); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_AudioGenerator); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_dimmer); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_font_embedded); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_add); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_OneWire); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_concat); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_splash_remove); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_arc_dsc); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str__debug_present); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_get_name); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_fast_loop_enabled); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__buffer); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_set_matrix_pixel_color); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_SERIAL_6E2); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_escape); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_deregister_obj); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_compile); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_gen_cb); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_HTTP_POST); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_assert); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_json_fdump); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_draw_line); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_CFG_X3A_X20loaded_X20_X20); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_is_running); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_fast_loop_enabled); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__buffer); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_set_matrix_pixel_color); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_SERIAL_6E2); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_escape); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_deregister_obj); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_compile); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_gen_cb); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_HTTP_POST); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_assert); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_json_fdump); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_draw_line); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_CFG_X3A_X20loaded_X20_X20); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_is_running); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str__settings_def); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_adv_cb); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str__X3D); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__splash); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_get_switches); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_scr_act); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_missing_X20name); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, NULL); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_driver_name); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_publish_result); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, NULL); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_HTTP_GET); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_AudioOutputI2S); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_base_class); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str__energy); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_valuer_error); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str__settings_def); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_adv_cb); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str__X3D); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__splash); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_get_switches); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_scr_act); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_missing_X20name); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, NULL); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_driver_name); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_publish_result); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_item); +be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_get_coords); +be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_widget_event_cb); +be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str__X2Elen); +be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_SERIAL_8N2); +be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str__X23autoexec_X2Ebat); +be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_SERIAL_8N1); +be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_ptr); +be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_SERIAL_7N2); +be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_SERIAL_6E1); +be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_COLOR_WHITE); +be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_check_not_method); +be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_POST); +be_define_const_str(_X25, "%", 537692064u, 0, 1, NULL); +be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_AudioGenerator); +be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_argument_X20must_X20be_X20a_X20list); +be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_Wire); +be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_add_handler); +be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_MI32); +be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_STATE_DEFAULT); +be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, NULL); +be_define_const_str(_X2A, "*", 789356349u, 0, 1, &be_const_str_remove); +be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_add); +be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_CFG_X3A_X20removing_X20autoconf_X20files); +be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str__X3C_X3D); +be_define_const_str(_X2D, "-", 671913016u, 0, 1, &be_const_str_CT); +be_define_const_str(_X2D_X2A, "-*", 499980374u, 0, 2, &be_const_str_tag); +be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, NULL); +be_define_const_str(_X2E, ".", 722245873u, 0, 1, NULL); +be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_clear_to); +be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E); +be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, NULL); +be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_get_battery_chargin_status); +be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_draw_arc); +be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_resize); +be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_SERIAL_6N1); +be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_WS2812_GRB); +be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_lv_signal_bars); +be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E); +be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_fromstring); +be_define_const_str(_X2F, "/", 705468254u, 0, 1, NULL); +be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_atan2); +be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_no_X20more_X20RMT_X20channel_X20available); +be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function); +be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_sec); +be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str__timers); +be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_duration); +be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_SERIAL_7E2); +be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_fromptr); +be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, &be_const_str_bool); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_close); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_sin); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_exec_cmd); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, NULL); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_load_templates); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_True); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem); be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, NULL); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_HTTP_GET); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_AudioOutputI2S); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_base_class); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str__energy); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_valuer_error); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "", 4247924536u, 0, 19, &be_const_str_clock_icon); +be_define_const_str(_X3D, "=", 940354920u, 0, 1, &be_const_str_destructor_cb); +be_define_const_str(_X3D_X3C_X3E_X21, "=<>!", 2664470277u, 0, 4, &be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27); +be_define_const_str(_X3D_X3D, "==", 2431966415u, 0, 2, &be_const_str_widget_group_def); +be_define_const_str(_X3E, ">", 990687777u, 0, 1, &be_const_str_decode); +be_define_const_str(_X3E_X3D, ">=", 284975636u, 0, 2, &be_const_str_i2c_enabled); +be_define_const_str(_X3F, "?", 973910158u, 0, 1, &be_const_str_AudioGeneratorMP3); +be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, &be_const_str_dump); +be_define_const_str(ALIGN_BOTTOM_MID, "ALIGN_BOTTOM_MID", 3933267889u, 0, 16, &be_const_str_montserrat_font); +be_define_const_str(ALIGN_LEFT_MID, "ALIGN_LEFT_MID", 1043035067u, 0, 14, &be_const_str_autorun); +be_define_const_str(AXP192, "AXP192", 757230128u, 0, 6, NULL); +be_define_const_str(Animate_X20pc_X20is_X20out_X20of_X20range, "Animate pc is out of range", 1854929421u, 0, 26, &be_const_str_bus); +be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, &be_const_str_dirty); +be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str___upper__); +be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str_pin_used); +be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_Tele); +be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, NULL); +be_define_const_str(AudioOpusDecoder, "AudioOpusDecoder", 1187272062u, 0, 16, &be_const_str_back_forth); +be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, &be_const_str_cb); +be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_x1); +be_define_const_str(Auto_X2Dconfiguration, "Auto-configuration", 1665006109u, 0, 18, &be_const_str__request_from); +be_define_const_str(BECDFE, "BECDFE", 608341218u, 0, 6, &be_const_str_instance_size); +be_define_const_str(BLE, "BLE", 3933843306u, 0, 3, &be_const_str__t); +be_define_const_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, "BRY: ERROR, bad json: ", 2715135809u, 0, 22, &be_const_str_copy); +be_define_const_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: Exception> '%s' - %s", 2246990964u, 0, 25, &be_const_str_gamma); +be_define_const_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function, "BRY: argument must be a function", 3917068408u, 0, 32, &be_const_str_DIMMER); +be_define_const_str(BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29, "BRY: bytecode has wrong version '%s' (%i)", 2140321415u, 0, 41, &be_const_str__); be_define_const_str(BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27, "BRY: corrupt bytecode '%s'", 4009923544u, 0, 26, NULL); -be_define_const_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, "BRY: could not save compiled file %s (%s)", 736659787u, 0, 41, &be_const_str_cmd); +be_define_const_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, "BRY: could not save compiled file %s (%s)", 736659787u, 0, 41, &be_const_str__splash); be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X29, "BRY: failed to load '%s' (%s)", 54995609u, 0, 29, NULL); -be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, "BRY: failed to load _persist.json", 2991913445u, 0, 33, &be_const_str__change_buffer); -be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29, "BRY: failed to load compiled '%s' (%s)", 3488122666u, 0, 38, &be_const_str_isnan); -be_define_const_str(BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: failed to run compiled code '%s' - %s", 380265962u, 0, 42, &be_const_str_obj); -be_define_const_str(BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, "BRY: invalid hue payload: ", 203709367u, 0, 26, &be_const_str_add_handler); -be_define_const_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, "BRY: method not allowed, use a closure like '/ args -> obj.func(args)'", 177121572u, 0, 70, &be_const_str_copy); -be_define_const_str(BUTTON_CONFIGURATION, "BUTTON_CONFIGURATION", 70820856u, 0, 20, &be_const_str_pc_rel); -be_define_const_str(CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, "CFG: 'init.bat' done, restarting", 1569670677u, 0, 32, NULL); -be_define_const_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "CFG: Exception> '%s' - %s", 1228874553u, 0, 25, &be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27); -be_define_const_str(CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, "CFG: No '*.autoconf' file found", 755798501u, 0, 31, &be_const_str_reverse); -be_define_const_str(CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, "CFG: could not run %s (%s - %s)", 1428829580u, 0, 31, &be_const_str_write8); -be_define_const_str(CFG_X3A_X20downloading_X20_X27_X25s_X27, "CFG: downloading '%s'", 589480701u, 0, 21, &be_const_str_lv_obj); -be_define_const_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, "CFG: exception '%s' - '%s'", 4095407913u, 0, 26, &be_const_str_strptime); -be_define_const_str(CFG_X3A_X20loaded_X20_X20, "CFG: loaded ", 3710273538u, 0, 13, &be_const_str_allocated); -be_define_const_str(CFG_X3A_X20loaded_X20_X27_X25s_X27, "CFG: loaded '%s'", 1699028828u, 0, 16, NULL); -be_define_const_str(CFG_X3A_X20loading_X20, "CFG: loading ", 4010361503u, 0, 13, &be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29); -be_define_const_str(CFG_X3A_X20loading_X20_X27_X25s_X27, "CFG: loading '%s'", 2285306097u, 0, 17, &be_const_str_event_cb); -be_define_const_str(CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, "CFG: multiple autoconf files found, aborting ('%s' + '%s')", 197663371u, 0, 58, &be_const_str__lvgl); -be_define_const_str(CFG_X3A_X20ran_X20_X20, "CFG: ran ", 3579570472u, 0, 10, &be_const_str_obj_class_create_obj); -be_define_const_str(CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, "CFG: removed file '%s'", 2048602473u, 0, 22, &be_const_str_function); -be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str_create_custom_widget); -be_define_const_str(CFG_X3A_X20removing_X20first_X20time_X20marker, "CFG: removing first time marker", 2125556683u, 0, 31, &be_const_str__filename); -be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_Unknown_X20command); -be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str_find_key_i); -be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str_assign_rmt); -be_define_const_str(COLOR_BLACK, "COLOR_BLACK", 264427940u, 0, 11, &be_const_str_pc); -be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, &be_const_str__read); -be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str_clear_to); -be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, &be_const_str_Leds); -be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_resp_cmnd_error); -be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str__crons); -be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, NULL); -be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, &be_const_str_HTTP_POST); -be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str_draw_arc_dsc_init); -be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, &be_const_str_call); -be_define_const_str(False, "False", 2541049336u, 0, 5, &be_const_str__buffer); -be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27); -be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, &be_const_str_get_log); -be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, &be_const_str_members); -be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, &be_const_str_abs); -be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_hex); -be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str_get_bri); -be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_size); -be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, &be_const_str_create_matrix); -be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str_content_send); -be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, NULL); -be_define_const_str(MAX_RMT, "MAX_RMT", 1615574873u, 0, 7, NULL); -be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_tr); -be_define_const_str(MI32, "MI32", 4074273414u, 0, 4, &be_const_str_Parameter_X20error); -be_define_const_str(None, "None", 810547195u, 0, 4, &be_const_str_dimmer); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_invalid_X20GPIO_X20number); -be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_set_alternate); -be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str_get_current_module_name); -be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str___iterator__); -be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_sys); -be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, &be_const_str_addr); -be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); -be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, &be_const_str_lv_signal_arcs); -be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_obj_event_base); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, "BRY: failed to load _persist.json", 2991913445u, 0, 33, &be_const_str_lv_solidified); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29, "BRY: failed to load compiled '%s' (%s)", 3488122666u, 0, 38, NULL); +be_define_const_str(BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: failed to run compiled code '%s' - %s", 380265962u, 0, 42, NULL); +be_define_const_str(BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, "BRY: invalid hue payload: ", 203709367u, 0, 26, NULL); +be_define_const_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, "BRY: method not allowed, use a closure like '/ args -> obj.func(args)'", 177121572u, 0, 70, &be_const_str_widget_width_def); +be_define_const_str(BUTTON_CONFIGURATION, "BUTTON_CONFIGURATION", 70820856u, 0, 20, &be_const_str_resp_cmnd); +be_define_const_str(CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, "CFG: 'init.bat' done, restarting", 1569670677u, 0, 32, &be_const_str_concat); +be_define_const_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "CFG: Exception> '%s' - %s", 1228874553u, 0, 25, &be_const_str_SERIAL_8E2); +be_define_const_str(CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, "CFG: No '*.autoconf' file found", 755798501u, 0, 31, &be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27); +be_define_const_str(CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, "CFG: could not run %s (%s - %s)", 1428829580u, 0, 31, &be_const_str__energy); +be_define_const_str(CFG_X3A_X20downloading_X20_X27_X25s_X27, "CFG: downloading '%s'", 589480701u, 0, 21, &be_const_str_lv_wifi_bars); +be_define_const_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, "CFG: exception '%s' - '%s'", 4095407913u, 0, 26, &be_const_str__persist_X2Ejson); +be_define_const_str(CFG_X3A_X20loaded_X20_X20, "CFG: loaded ", 3710273538u, 0, 13, &be_const_str_add_anim); +be_define_const_str(CFG_X3A_X20loaded_X20_X27_X25s_X27, "CFG: loaded '%s'", 1699028828u, 0, 16, &be_const_str_SERIAL_8O2); +be_define_const_str(CFG_X3A_X20loading_X20, "CFG: loading ", 4010361503u, 0, 13, &be_const_str_I2C_Driver); +be_define_const_str(CFG_X3A_X20loading_X20_X27_X25s_X27, "CFG: loading '%s'", 2285306097u, 0, 17, &be_const_str_arch); +be_define_const_str(CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, "CFG: multiple autoconf files found, aborting ('%s' + '%s')", 197663371u, 0, 58, &be_const_str_io_error); +be_define_const_str(CFG_X3A_X20ran_X20_X20, "CFG: ran ", 3579570472u, 0, 10, &be_const_str_SERIAL_5N2); +be_define_const_str(CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, "CFG: removed file '%s'", 2048602473u, 0, 22, &be_const_str__change_buffer); +be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str_init); +be_define_const_str(CFG_X3A_X20removing_X20first_X20time_X20marker, "CFG: removing first time marker", 2125556683u, 0, 31, &be_const_str_RELAY); +be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_collect); +be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str_dimmer); +be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str_offseta); +be_define_const_str(COLOR_BLACK, "COLOR_BLACK", 264427940u, 0, 11, NULL); +be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, &be_const_str_quality); +be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str_False); +be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, NULL); +be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_lv_event_cb); +be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str___iterator__); +be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, &be_const_str_hs2rgb); +be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, &be_const_str_remove_light); +be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str_MD5); +be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, &be_const_str_loop); +be_define_const_str(False, "False", 2541049336u, 0, 5, &be_const_str_SERIAL_7N1); +be_define_const_str(GET, "GET", 2531704439u, 0, 3, NULL); +be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, NULL); +be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, NULL); +be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, &be_const_str_set_bits_per_sample); +be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_addr); +be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str_count); +be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_frombytes); +be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, &be_const_str__crons); +be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, NULL); +be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, &be_const_str_refr_now); +be_define_const_str(MAX_RMT, "MAX_RMT", 1615574873u, 0, 7, &be_const_str_c); +be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_power_off); +be_define_const_str(MI32, "MI32", 4074273414u, 0, 4, &be_const_str_tobytes); +be_define_const_str(None, "None", 810547195u, 0, 4, &be_const_str_light_state); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_module); +be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_month); +be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str_resp_cmnd_error); +be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_call); +be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_battery_present); +be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, &be_const_str_set_exten); +be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str_clear_first_time); +be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, NULL); +be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_get_MAC); be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, NULL); -be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_atan); -be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, NULL); -be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_dac_voltage); -be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_connected); -be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str__global_def); -be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, NULL); -be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str_readbytes); -be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_memory); -be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, NULL); -be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_remote_ip); -be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_def); -be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_next); -be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_SK6812_GRBW); -be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_push_path); -be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_area); -be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_SERIAL_7O2); -be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_SERIAL_7O1); -be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_json); -be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_path); -be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_asstring); -be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_dim); -be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_add_driver); -be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_w); -be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_draw_line); -be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_from_to); -be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, &be_const_str_url_encode); -be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str_lv_wifi_bars); -be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, &be_const_str_connect); -be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, &be_const_str_add_header); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_public_key); +be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_set_width); +be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str__end_transmission); +be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_atan); +be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_wire_scan); +be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_draw_arc_dsc); +be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_compress); +be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, NULL); +be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, NULL); +be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_widget_struct_by_class); +be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_set_style_border_width); +be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_fromb64); +be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_set_ct); +be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_hour); +be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, NULL); +be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_lv_style_prop_arr); +be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, NULL); +be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, NULL); +be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_x); +be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_set_hue16sat); +be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_arg); +be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_delete_all_configs); +be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_conn_cb); +be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_get_alternate); +be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_content_send_style); +be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_add_light); +be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, NULL); +be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, NULL); +be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, NULL); +be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, &be_const_str_now); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_group_def); be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, NULL); -be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str_get_aps_voltage); -be_define_const_str(True, "True", 3453902341u, 0, 4, &be_const_str__def); -be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, &be_const_str_bus); -be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, NULL); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_set_auth); -be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, NULL); -be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str_page_autoconf_ctl); -be_define_const_str(_X5B, "[", 3725336506u, 0, 1, NULL); -be_define_const_str(_X5D, "]", 3624670792u, 0, 1, &be_const_str__error); -be_define_const_str(_, "_", 3658226030u, 0, 1, &be_const_str_get_coords); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_width_def); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_escape); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_clock_icon); -be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, NULL); -be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, NULL); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, NULL); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_atleast1); -be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, NULL); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_percentage); -be_define_const_str(_change_buffer, "_change_buffer", 2101848693u, 0, 14, NULL); -be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_begin); -be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_cb_do_nothing); -be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, NULL); -be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, &be_const_str_groups); -be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_pow); +be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str_ceil); +be_define_const_str(True, "True", 3453902341u, 0, 4, &be_const_str_draw_line); +be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, &be_const_str_get_hor_res); +be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, &be_const_str_get_free_heap); +be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str__lvgl); +be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, &be_const_str__settings_ptr); +be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, NULL); +be_define_const_str(_X5B, "[", 3725336506u, 0, 1, &be_const_str_send); +be_define_const_str(_X5D, "]", 3624670792u, 0, 1, &be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus); +be_define_const_str(_, "_", 3658226030u, 0, 1, &be_const_str_animate); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, NULL); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_hex); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_splash_init); +be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, &be_const_str_start); +be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, &be_const_str_base_class); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str__def); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_f); +be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str_energy_struct); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_deregister_obj); +be_define_const_str(_change_buffer, "_change_buffer", 2101848693u, 0, 14, &be_const_str_devices); +be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_adv_watch); +be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, NULL); +be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_set_style_pad_right); +be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, &be_const_str_acos); +be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_widget_event_impl); be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, NULL); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, NULL); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_set_user_data); -be_define_const_str(_energy, "_energy", 535372070u, 0, 7, &be_const_str_gamma8); -be_define_const_str(_error, "_error", 1132109656u, 0, 6, &be_const_str_attrdump); -be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, &be_const_str_input); -be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_io_error); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str__write); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str__rules); +be_define_const_str(_energy, "_energy", 535372070u, 0, 7, &be_const_str_register_button_encoder); +be_define_const_str(_error, "_error", 1132109656u, 0, 6, &be_const_str__global_addr); +be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, &be_const_str_listdir); +be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_calldepth); be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, NULL); -be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, NULL); -be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_lv_style_prop_arr); -be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_run); -be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_range); -be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_fast_loop_enabled); -be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); +be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_get_warning_level); +be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27); +be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_load_freetype_font); +be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_consume_mono); +be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_param); +be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_get_bri); be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, NULL); -be_define_const_str(_rmt, "_rmt", 1094422685u, 0, 4, &be_const_str_sin); +be_define_const_str(_rmt, "_rmt", 1094422685u, 0, 4, &be_const_str_detect); be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, NULL); -be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, &be_const_str_getfloat); -be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, NULL); -be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, NULL); -be_define_const_str(_t, "_t", 1527481326u, 0, 2, &be_const_str_fast_loop); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_set_pwm); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_arch); -be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_every_100ms); -be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_draw_line_dsc); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); -be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_bri); -be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_get_style_line_color); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_autorun); -be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_month); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_can_show); -be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_bool); -be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, NULL); -be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, &be_const_str_millis); -be_define_const_str(add_header, "add_header", 927130612u, 0, 10, &be_const_str_super); -be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, &be_const_str_wire1); -be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, NULL); -be_define_const_str(addr, "addr", 1087856498u, 0, 4, NULL); -be_define_const_str(adv_cb, "adv_cb", 1957890034u, 0, 6, &be_const_str_montserrat_font); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_codedump); -be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, &be_const_str_compress); -be_define_const_str(animate, "animate", 3885786800u, 0, 7, &be_const_str_cb); -be_define_const_str(animators, "animators", 279858213u, 0, 9, &be_const_str_stop); -be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, NULL); -be_define_const_str(arch, "arch", 2952804297u, 0, 4, NULL); -be_define_const_str(area, "area", 2601460036u, 0, 4, NULL); -be_define_const_str(arg, "arg", 1047474471u, 0, 3, NULL); -be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, &be_const_str_widget_cb); -be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_time_dump); +be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, NULL); +be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_cmd_res); +be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, &be_const_str_debug); +be_define_const_str(_t, "_t", 1527481326u, 0, 2, &be_const_str_write_bit); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_autoexec); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_abs); +be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_signal_bars); +be_define_const_str(abs, "abs", 709362235u, 0, 3, NULL); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_get_bat_charge_current); +be_define_const_str(add, "add", 993596020u, 0, 3, NULL); +be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_refr_pos); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_class_init_obj); +be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_font_montserrat); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, NULL); +be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_ctor); +be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, &be_const_str_closure); +be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, &be_const_str_bri); +be_define_const_str(add_header, "add_header", 927130612u, 0, 10, NULL); +be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, NULL); +be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_set_timer); +be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_srand); +be_define_const_str(adv_block, "adv_block", 4243837184u, 0, 9, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf); +be_define_const_str(adv_cb, "adv_cb", 1957890034u, 0, 6, &be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj); +be_define_const_str(adv_watch, "adv_watch", 3871786950u, 0, 9, NULL); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, NULL); +be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, &be_const_str_push); +be_define_const_str(animate, "animate", 3885786800u, 0, 7, NULL); +be_define_const_str(animators, "animators", 279858213u, 0, 9, NULL); +be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_lv); +be_define_const_str(arch, "arch", 2952804297u, 0, 4, &be_const_str_rotate); +be_define_const_str(area, "area", 2601460036u, 0, 4, &be_const_str_hue); +be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_files); +be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, &be_const_str_content_send); +be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, NULL); be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, NULL); -be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_display); -be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, &be_const_str_char); -be_define_const_str(argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize, "argument must be a list or a pointer+size", 241605448u, 0, 41, NULL); +be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_set_huesat); +be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, NULL); +be_define_const_str(argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize, "argument must be a list or a pointer+size", 241605448u, 0, 41, &be_const_str_create_matrix); be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, NULL); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_engine); -be_define_const_str(assign_rmt, "assign_rmt", 1047642576u, 0, 10, &be_const_str_listdir); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_every_250ms); -be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_create_segment); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_set_mode_rgb); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_rtc); +be_define_const_str(assign_rmt, "assign_rmt", 1047642576u, 0, 10, NULL); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL); +be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_groups); be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, NULL); -be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, &be_const_str_color); -be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_contains); -be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_set); -be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, &be_const_str_event); -be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_settings); -be_define_const_str(b, "b", 3876335077u, 0, 1, NULL); -be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, &be_const_str_font_montserrat); -be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, &be_const_str_instance_X20required); -be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_detect); -be_define_const_str(before_del, "before_del", 815924436u, 0, 10, &be_const_str_json_fdump); -be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_seti); -be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, NULL); -be_define_const_str(bool, "bool", 3365180733u, 0, 4, &be_const_str_hs2rgb); +be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, NULL); +be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, NULL); +be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_find_op); +be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, &be_const_str_int); +be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_clear); +be_define_const_str(b, "b", 3876335077u, 0, 1, &be_const_str_from_to); +be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, &be_const_str_reapply); +be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, &be_const_str_elements_X20must_X20be_X20a_X20lv_point); +be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_engine); +be_define_const_str(before_del, "before_del", 815924436u, 0, 10, &be_const_str_draw_line_dsc_init); +be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_consume_silence); +be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, &be_const_str_last_modified); +be_define_const_str(bool, "bool", 3365180733u, 0, 4, &be_const_str_offset); be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); -be_define_const_str(bri, "bri", 2112284244u, 0, 3, &be_const_str_get_switch); -be_define_const_str(bus, "bus", 1607822841u, 0, 3, NULL); -be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_has_arg); -be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_deg); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_int64); -be_define_const_str(c, "c", 3859557458u, 0, 1, NULL); +be_define_const_str(bri, "bri", 2112284244u, 0, 3, &be_const_str_cmd); +be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_map); +be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, NULL); +be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_create_custom_widget); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_cb_event_closure); +be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_decrypt); be_define_const_str(call, "call", 3018949801u, 0, 4, NULL); -be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, &be_const_str_json_fdump_list); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_o); -be_define_const_str(can_show, "can_show", 960091187u, 0, 8, NULL); -be_define_const_str(cb, "cb", 1428787088u, 0, 2, &be_const_str_group_def); -be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, &be_const_str_enabled); -be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, &be_const_str_toint); -be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, &be_const_str_uuid4); -be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, &be_const_str_pixel_size); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, NULL); -be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_flush); -be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_hue_status); -be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, &be_const_str_set_style_border_width); -be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_pop); +be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, &be_const_str_gamma8); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_next); +be_define_const_str(can_show, "can_show", 960091187u, 0, 8, &be_const_str_get_percentage); +be_define_const_str(cb, "cb", 1428787088u, 0, 2, NULL); +be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, NULL); +be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, &be_const_str_break); +be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, NULL); +be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, &be_const_str_issubclass); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_detected_X20on_X20bus); +be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_get_style_pad_right); +be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, NULL); +be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, &be_const_str_get_cb_list); +be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_ins_goto); be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, &be_const_str_elements_X20must_X20be_X20a_X20lv_point); +be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, &be_const_str_p1); be_define_const_str(classname, "classname", 1998589948u, 0, 9, NULL); -be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_pi); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_imax); -be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, NULL); -be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, &be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27); -be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, NULL); -be_define_const_str(close, "close", 667630371u, 0, 5, NULL); -be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_skip); -be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_font_seg7); -be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_set_hum); -be_define_const_str(code, "code", 4180765940u, 0, 4, NULL); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_format); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_widget_group_def); -be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_every_50ms); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_instance_size); -be_define_const_str(compress, "compress", 2818084237u, 0, 8, NULL); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_is_running); -be_define_const_str(conn_cb, "conn_cb", 1381122945u, 0, 7, &be_const_str_constructor_cb); -be_define_const_str(connect, "connect", 2866859257u, 0, 7, NULL); -be_define_const_str(connected, "connected", 1424938192u, 0, 9, &be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus); -be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, &be_const_str_count); -be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, &be_const_str_redirect); -be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, &be_const_str_remove); -be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, &be_const_str_day); -be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, &be_const_str_offset); -be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_imin); -be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_pixel_count); -be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_run_cron); -be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_get_power); -be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, &be_const_str_send); -be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_duration); -be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, NULL); +be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, NULL); +be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_set_style_img_recolor); +be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, &be_const_str_leds); +be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, &be_const_str_function); +be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_id); +be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_list_handlers); +be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_set_reachable); +be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, NULL); +be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_set_channels); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_set_hum); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_preinit); +be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_exists); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_init_draw_arc_dsc); +be_define_const_str(compress, "compress", 2818084237u, 0, 8, &be_const_str_connected); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL); +be_define_const_str(conn_cb, "conn_cb", 1381122945u, 0, 7, &be_const_str_content_flush); +be_define_const_str(connect, "connect", 2866859257u, 0, 7, &be_const_str_remove_cron); +be_define_const_str(connected, "connected", 1424938192u, 0, 9, NULL); +be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, &be_const_str_geti); +be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, &be_const_str_splash_remove); +be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, &be_const_str_get_current_module_path); +be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, &be_const_str_set_user_data); +be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, &be_const_str_draw_ctx); +be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_hue_status); +be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_ctypes_bytes_dyn); +be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_serial); +be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_has_X20already_X20an_X20event_X20callback); +be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, &be_const_str_readline); +be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_full_status); +be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_display_X2Eini); be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, &be_const_str_remove_light); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_set_x); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, NULL); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_null_cb); -be_define_const_str(couldn_X27t_X20not_X20initialize_X20noepixelbus, "couldn't not initialize noepixelbus", 2536490812u, 0, 35, &be_const_str_get_light); -be_define_const_str(count, "count", 967958004u, 0, 5, NULL); -be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_set_dc_voltage); -be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, &be_const_str_find); -be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, &be_const_str_get_height); -be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, &be_const_str_sqrt); -be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_introspect); -be_define_const_str(ctor, "ctor", 375399343u, 0, 4, &be_const_str_light_to_id); +be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, &be_const_str_gamma10); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, NULL); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_event); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, NULL); +be_define_const_str(couldn_X27t_X20not_X20initialize_X20noepixelbus, "couldn't not initialize noepixelbus", 2536490812u, 0, 35, &be_const_str_find); +be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_imin); +be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_discover); +be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, &be_const_str_height_def); +be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, &be_const_str_has_arg); +be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, &be_const_str_wire); +be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_lv_timer_cb); +be_define_const_str(ctor, "ctor", 375399343u, 0, 4, &be_const_str_get_switches); be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, NULL); -be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, NULL); +be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, &be_const_str_set_style_radius); be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, NULL); -be_define_const_str(day, "day", 3830391293u, 0, 3, NULL); -be_define_const_str(debug, "debug", 1483009432u, 0, 5, &be_const_str_get_hor_res); -be_define_const_str(decode, "decode", 3007678287u, 0, 6, &be_const_str_y1); -be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, &be_const_str_remove_cron); -be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_p1); +be_define_const_str(day, "day", 3830391293u, 0, 3, &be_const_str_path); +be_define_const_str(debug, "debug", 1483009432u, 0, 5, NULL); +be_define_const_str(decode, "decode", 3007678287u, 0, 6, &be_const_str_exec_rules); +be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, NULL); +be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_widget_struct_default); be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_class); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_web_send); -be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_lower); -be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_local); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_keys); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_static); +be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_set_pwm); +be_define_const_str(delay, "delay", 1322381784u, 0, 5, NULL); be_define_const_str(delete_all_configs, "delete_all_configs", 2382067578u, 0, 18, NULL); -be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_get_battery_chargin_status); -be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_ins_time); -be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, &be_const_str_remove_cmd); -be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL); -be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, &be_const_str_lv_point_arr); -be_define_const_str(devices, "devices", 2701822848u, 0, 7, &be_const_str_digital_read); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_get_current_module_path); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, NULL); -be_define_const_str(dim, "dim", 3496118841u, 0, 3, &be_const_str_hue); -be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, &be_const_str_resp_cmnd_done); -be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, &be_const_str_lv_module_init); -be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_lv_solidified); -be_define_const_str(display, "display", 1164572437u, 0, 7, NULL); -be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, &be_const_str_map); +be_define_const_str(depower, "depower", 3563819571u, 0, 7, NULL); +be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_gpio); +be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, &be_const_str_log10); +be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_full_state); +be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, NULL); +be_define_const_str(devices, "devices", 2701822848u, 0, 7, NULL); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_lv_event); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_set_bri); +be_define_const_str(dim, "dim", 3496118841u, 0, 3, NULL); +be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, NULL); +be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, NULL); +be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_getbits); +be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_set_style_pad_all); +be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, NULL); be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); -be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, NULL); -be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, &be_const_str_floor); -be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, &be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27); -be_define_const_str(draw_ctx, "draw_ctx", 953366593u, 0, 8, &be_const_str_get_option); -be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_name); -be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_loop); -be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, NULL); -be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, &be_const_str_set_text); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_min); -be_define_const_str(duration, "duration", 799079693u, 0, 8, NULL); -be_define_const_str(editable, "editable", 60532369u, 0, 8, &be_const_str_exec_tele); -be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_init_draw_arc_dsc); +be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, &be_const_str_fast_loop_enabled); +be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, NULL); +be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, NULL); +be_define_const_str(draw_ctx, "draw_ctx", 953366593u, 0, 8, &be_const_str_select); +be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_readbytes); +be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); +be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, &be_const_str_else); +be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, &be_const_str_label); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); +be_define_const_str(duration, "duration", 799079693u, 0, 8, &be_const_str_lv_point_arr); +be_define_const_str(editable, "editable", 60532369u, 0, 8, &be_const_str_erase); +be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_web_add_main_button); be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); -be_define_const_str(enabled, "enabled", 49525662u, 0, 7, &be_const_str_lv_point); -be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_set_temp); +be_define_const_str(enabled, "enabled", 49525662u, 0, 7, NULL); +be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_set_size); be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, NULL); -be_define_const_str(engine, "engine", 3993360443u, 0, 6, &be_const_str_full_status); -be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_get_bat_power); +be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, &be_const_str_get_switch); +be_define_const_str(engine, "engine", 3993360443u, 0, 6, NULL); +be_define_const_str(erase, "erase", 1010949589u, 0, 5, NULL); be_define_const_str(escape, "escape", 2652972038u, 0, 6, NULL); be_define_const_str(eth, "eth", 2191266556u, 0, 3, NULL); -be_define_const_str(event, "event", 4264611999u, 0, 5, NULL); -be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, &be_const_str_reset_search); -be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_get_alternate); +be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_tolower); +be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, &be_const_str_get_power); +be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_minute); be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, NULL); -be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, NULL); -be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, &be_const_str_exp); -be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_get_size); +be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, &be_const_str_set_ldo_voltage); +be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, NULL); +be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_list); be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_get); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_setitem); -be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_get_object_from_ptr); -be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_try_rule); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_lv_event_cb); -be_define_const_str(f, "f", 3809224601u, 0, 1, &be_const_str_lvgl_timer_dispatch); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_widget_ctor_impl); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_signal_arcs); +be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, NULL); +be_define_const_str(exists, "exists", 1002329533u, 0, 6, NULL); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_null_cb); +be_define_const_str(f, "f", 3809224601u, 0, 1, &be_const_str_get_light); be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, &be_const_str_get_cb_list); -be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, &be_const_str_no_X20more_X20RMT_X20channel_X20available); -be_define_const_str(file, "file", 2867484483u, 0, 4, NULL); -be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, &be_const_str_page_autoconf_mgr); -be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_ismethod); +be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, NULL); +be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, &be_const_str_try); +be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_read_bytes); +be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, NULL); +be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_set_dc_voltage); be_define_const_str(find, "find", 3186656602u, 0, 4, NULL); -be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL); -be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_log10); -be_define_const_str(finish, "finish", 1494643858u, 0, 6, &be_const_str_style_prop_arr); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL); -be_define_const_str(flush, "flush", 3002334877u, 0, 5, NULL); -be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_lv); -be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, &be_const_str_int); -be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, &be_const_str_set_bri); +be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_read24); +be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_h); +be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_print); +be_define_const_str(flush, "flush", 3002334877u, 0, 5, &be_const_str_remove_cmd); +be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_isrunning); +be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, &be_const_str_resp_cmnd_failed); +be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, NULL); be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(format, "format", 3114108242u, 0, 6, NULL); -be_define_const_str(from_to, "from_to", 21625507u, 0, 7, &be_const_str_zero); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_set_matrix_pixel_color); +be_define_const_str(from_to, "from_to", 21625507u, 0, 7, NULL); be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, NULL); -be_define_const_str(frombytes, "frombytes", 3771700788u, 0, 9, &be_const_str_lights); -be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, NULL); -be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032); -be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_resp_cmnd); -be_define_const_str(full_status, "full_status", 648242459u, 0, 11, &be_const_str_ins_goto); -be_define_const_str(function, "function", 2664841801u, 0, 8, &be_const_str_serial); -be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, NULL); -be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_rule); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_state); +be_define_const_str(frombytes, "frombytes", 3771700788u, 0, 9, &be_const_str_get_bat_voltage); +be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, &be_const_str_lv_wifi_arcs_icon); +be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, NULL); +be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_min); +be_define_const_str(full_status, "full_status", 648242459u, 0, 11, &be_const_str_sys); +be_define_const_str(function, "function", 2664841801u, 0, 8, &be_const_str_set_pixel_color); +be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, &be_const_str_wifi_arcs_icon); +be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_obj_event_base); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_set_rgb); be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL); -be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, NULL); -be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_splash_remove); +be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_scan); +be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_get_current_module_name); be_define_const_str(get_MAC, "get_MAC", 2091521771u, 0, 7, NULL); -be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_set_first_time); -be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, &be_const_str_elif); -be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, &be_const_str_rotate); -be_define_const_str(get_bat_current, "get_bat_current", 1912106073u, 0, 15, &be_const_str_get_input_power_status); -be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, &be_const_str_read_bytes); -be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, &be_const_str_tomap); -be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, &be_const_str_getbits); -be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, &be_const_str_upper); -be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, &be_const_str_while); +be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_global); +be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, &be_const_str_set_mode_ct); +be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, &be_const_str_init_draw_line_dsc); +be_define_const_str(get_bat_current, "get_bat_current", 1912106073u, 0, 15, NULL); +be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, NULL); +be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, &be_const_str_int64); +be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, &be_const_str_get_object_from_ptr); +be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, &be_const_str_lower); +be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, &be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map); be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, NULL); -be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, &be_const_str_touch_update); +be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, &be_const_str_set_time); be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, NULL); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, NULL); -be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, NULL); -be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_save); -be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, &be_const_str_search); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_set_channels); -be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, NULL); -be_define_const_str(get_name, "get_name", 1616902907u, 0, 8, &be_const_str_leds); -be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, &be_const_str_point_arr); -be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_log); -be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, &be_const_str_run_deferred); -be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_web_add_console_button); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_pixels_buffer); +be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, &be_const_str_lvgl_timer_dispatch); +be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, NULL); +be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, &be_const_str_get_name); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_set_y); +be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, &be_const_str_line_dsc); +be_define_const_str(get_name, "get_name", 1616902907u, 0, 8, &be_const_str_web_add_console_button); +be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, NULL); +be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_save_before_restart); +be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, &be_const_str_tasmota_log_reader); +be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_rounded); be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); -be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_set_ldo_enable); -be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, NULL); -be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, NULL); -be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, NULL); -be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str__X7B); -be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, NULL); -be_define_const_str(get_switches, "get_switches", 4116216928u, 0, 12, &be_const_str_rtc); +be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, NULL); +be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, &be_const_str_set_percentage); +be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, &be_const_str_redirect); +be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, &be_const_str_hue_ntv); +be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str_return_X20code_X3D_X25i); +be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, &be_const_str_wifi_bars); +be_define_const_str(get_switches, "get_switches", 4116216928u, 0, 12, NULL); be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, NULL); be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, NULL); -be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, &be_const_str_setmember); -be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, &be_const_str_ptr); -be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, NULL); +be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, &be_const_str_page_autoconf_mgr); +be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, NULL); +be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str_set_MAC); be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, NULL); -be_define_const_str(getfloat, "getfloat", 2820979603u, 0, 8, NULL); -be_define_const_str(geti, "geti", 2381006490u, 0, 4, NULL); -be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_wire2); -be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, &be_const_str_webclient); -be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_ins_ramp); -be_define_const_str(groups, "groups", 2943077229u, 0, 6, &be_const_str_real); -be_define_const_str(h, "h", 3977000791u, 0, 1, &be_const_str_p2); -be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_init); -be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, &be_const_str_unknown_X20instruction); -be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, NULL); -be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_signal_change); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_nan); +be_define_const_str(getfloat, "getfloat", 2820979603u, 0, 8, &be_const_str_instance); +be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_memory); +be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_publish); +be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, NULL); +be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_lv_wifi_arcs); +be_define_const_str(groups, "groups", 2943077229u, 0, 6, &be_const_str_read); +be_define_const_str(h, "h", 3977000791u, 0, 1, &be_const_str_screenshot); +be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_tostring); +be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, &be_const_str_set_style_text_color); +be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_read13); +be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_remove_driver); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_manuf); be_define_const_str(hour, "hour", 3053661199u, 0, 4, NULL); -be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, &be_const_str_module); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, NULL); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, &be_const_str_resolvecmnd); -be_define_const_str(hue, "hue", 3817694041u, 0, 3, &be_const_str_last_modified); -be_define_const_str(hue_ntv, "hue_ntv", 705068642u, 0, 7, &be_const_str_register_obj); -be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_isrunning); -be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, &be_const_str_r); -be_define_const_str(id, "id", 926444256u, 0, 2, NULL); +be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, NULL); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, &be_const_str_scale_uint); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, &be_const_str_nil); +be_define_const_str(hue, "hue", 3817694041u, 0, 3, NULL); +be_define_const_str(hue_ntv, "hue_ntv", 705068642u, 0, 7, &be_const_str_time_dump); +be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_tan); +be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, &be_const_str_pc); +be_define_const_str(id, "id", 926444256u, 0, 2, &be_const_str_page_autoconf_ctl); be_define_const_str(id_X20must_X20be_X20of_X20type_X20_X27int_X27, "id must be of type 'int'", 2097653458u, 0, 24, NULL); be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_lv_clock_icon); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_uuid4); be_define_const_str(img, "img", 2229740804u, 0, 3, NULL); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_publish); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_seg7_font); be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_set_style_text_font); -be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, &be_const_str_preinit); -be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_scan); -be_define_const_str(input, "input", 4191711099u, 0, 5, NULL); -be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, NULL); -be_define_const_str(ins_ramp, "ins_ramp", 1068049360u, 0, 8, &be_const_str_read32); -be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, &be_const_str_round_end); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, NULL); +be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_state); +be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, NULL); +be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_introspect); +be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_members); +be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, &be_const_str_json_fdump_map); +be_define_const_str(ins_ramp, "ins_ramp", 1068049360u, 0, 8, &be_const_str_set_timeouts); +be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, &be_const_str_wire2); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_setitem); be_define_const_str(instance, "instance", 193386898u, 0, 8, NULL); -be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, &be_const_str_refr_now); -be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, NULL); -be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); -be_define_const_str(int64, "int64", 64103268u, 0, 5, NULL); -be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, &be_const_str_next_cron); -be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_widget_struct_by_class); -be_define_const_str(invalid_X20GPIO_X20number, "invalid GPIO number", 4135793328u, 0, 19, &be_const_str_except); -be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, NULL); -be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, &be_const_str_ip); +be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, &be_const_str_persist); +be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, &be_const_str_invalidate); +be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_out_X20of_X20range); +be_define_const_str(int64, "int64", 64103268u, 0, 5, &be_const_str_rule); +be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, &be_const_str_json_append); +be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_resp_cmnd_done); +be_define_const_str(invalid_X20GPIO_X20number, "invalid GPIO number", 4135793328u, 0, 19, &be_const_str_type); +be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, &be_const_str_splash); +be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, &be_const_str_tomap); be_define_const_str(ip, "ip", 1261996636u, 0, 2, NULL); -be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, &be_const_str_send_multicast); -be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, &be_const_str_reset); -be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, &be_const_str_json_fdump_map); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, NULL); -be_define_const_str(ismethod, "ismethod", 3513438880u, 0, 8, &be_const_str_lv_event); +be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, &be_const_str_read32); +be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, NULL); +be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, NULL); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_tcpclient); +be_define_const_str(ismethod, "ismethod", 3513438880u, 0, 8, NULL); be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, NULL); be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, NULL); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_width); -be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_set_rate); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); +be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_real); be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL); -be_define_const_str(json, "json", 916562499u, 0, 4, NULL); -be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, NULL); -be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, &be_const_str_zip); -be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, &be_const_str_minute); -be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, &be_const_str_lv_wifi_arcs_icon); -be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, &be_const_str_label); +be_define_const_str(json, "json", 916562499u, 0, 4, &be_const_str_toptr); +be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_wifi_arcs); +be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, &be_const_str_json_fdump_any); +be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, &be_const_str_read12); +be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, &be_const_str_rad); +be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, &be_const_str_string); be_define_const_str(keys, "keys", 4182378701u, 0, 4, NULL); -be_define_const_str(label, "label", 4137097213u, 0, 5, &be_const_str_type); +be_define_const_str(label, "label", 4137097213u, 0, 5, NULL); be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, NULL); -be_define_const_str(leds, "leds", 558858555u, 0, 4, &be_const_str_set_reachable); -be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, &be_const_str_power_off); -be_define_const_str(light, "light", 3801947695u, 0, 5, &be_const_str_remote_port); +be_define_const_str(leds, "leds", 558858555u, 0, 4, &be_const_str_pop); +be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, NULL); +be_define_const_str(light, "light", 3801947695u, 0, 5, NULL); be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, NULL); -be_define_const_str(light_state, "light_state", 905783845u, 0, 11, NULL); -be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, &be_const_str_math); +be_define_const_str(light_state, "light_state", 905783845u, 0, 11, &be_const_str_math); +be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, NULL); be_define_const_str(lights, "lights", 425118420u, 0, 6, NULL); -be_define_const_str(line_dsc, "line_dsc", 4094490978u, 0, 8, &be_const_str_run_bat); -be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_point); -be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, &be_const_str_member); -be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, &be_const_str_round_start); +be_define_const_str(line_dsc, "line_dsc", 4094490978u, 0, 8, NULL); +be_define_const_str(list, "list", 217798785u, 0, 4, NULL); +be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, &be_const_str_set_bat); +be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, NULL); be_define_const_str(load, "load", 3859241449u, 0, 4, NULL); -be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_shared_key); -be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, &be_const_str_splash_init); -be_define_const_str(local, "local", 2621662984u, 0, 5, &be_const_str_rad); -be_define_const_str(log, "log", 1062293841u, 0, 3, NULL); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL); -be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_widget_instance_size); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL); -be_define_const_str(lv, "lv", 1529997255u, 0, 2, &be_const_str_setbits); -be_define_const_str(lv_, "lv_", 663721032u, 0, 3, &be_const_str_set_ldo_voltage); -be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, NULL); -be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, &be_const_str_open); -be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, &be_const_str_set_width); +be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_web_sensor); +be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, NULL); +be_define_const_str(local, "local", 2621662984u, 0, 5, NULL); +be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_r); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_pixel_size); +be_define_const_str(loop, "loop", 3723446379u, 0, 4, NULL); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_lv_point); +be_define_const_str(lv, "lv", 1529997255u, 0, 2, NULL); +be_define_const_str(lv_, "lv_", 663721032u, 0, 3, &be_const_str_point_arr); +be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, &be_const_str_run_cron); +be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, NULL); +be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, NULL); be_define_const_str(lv_event_cb, "lv_event_cb", 2480731016u, 0, 11, NULL); -be_define_const_str(lv_extra, "lv_extra", 399561998u, 0, 8, &be_const_str_toptr); -be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, &be_const_str_lv_wifi_arcs); -be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL); -be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, &be_const_str_rand); +be_define_const_str(lv_extra, "lv_extra", 399561998u, 0, 8, NULL); +be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, NULL); +be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, &be_const_str_traceback); +be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, &be_const_str_size); be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, NULL); -be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, &be_const_str_model); -be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, &be_const_str_matrix); -be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, &be_const_str_set_style_pad_all); -be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, &be_const_str_pin_mode); -be_define_const_str(lv_style_prop_arr, "lv_style_prop_arr", 2504347499u, 0, 17, NULL); -be_define_const_str(lv_timer_cb, "lv_timer_cb", 1383473763u, 0, 11, &be_const_str_raise); +be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, &be_const_str_lv_signal_arcs); +be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, NULL); +be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, &be_const_str_set_useragent); +be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, NULL); +be_define_const_str(lv_style_prop_arr, "lv_style_prop_arr", 2504347499u, 0, 17, &be_const_str_set_style_text_font); +be_define_const_str(lv_timer_cb, "lv_timer_cb", 1383473763u, 0, 11, NULL); be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, NULL); -be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, &be_const_str_tele); -be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, NULL); -be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, &be_const_str_update); -be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, &be_const_str_register_button_encoder); +be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, NULL); +be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, &be_const_str_split); +be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, &be_const_str_set_text); +be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, NULL); be_define_const_str(lvgl_timer_dispatch, "lvgl_timer_dispatch", 975257833u, 0, 19, NULL); -be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, &be_const_str_return_X20code_X3D_X25i); -be_define_const_str(manuf, "manuf", 4120929560u, 0, 5, &be_const_str_set_light); +be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, NULL); +be_define_const_str(manuf, "manuf", 4120929560u, 0, 5, NULL); be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); -be_define_const_str(math, "math", 4001929615u, 0, 4, &be_const_str_signal_arcs); -be_define_const_str(matrix, "matrix", 365099244u, 0, 6, &be_const_str_set_useragent); -be_define_const_str(member, "member", 719708611u, 0, 6, &be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); -be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_set_style_line_color); -be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_widget_constructor); -be_define_const_str(millis, "millis", 1214679063u, 0, 6, &be_const_str_try_get_bec_version); -be_define_const_str(min, "min", 3381609815u, 0, 3, &be_const_str_set_height); -be_define_const_str(minute, "minute", 954666857u, 0, 6, NULL); -be_define_const_str(missing_X20name, "missing name", 3635024006u, 0, 12, &be_const_str_resp_cmnd_str); -be_define_const_str(model, "model", 2961925722u, 0, 5, NULL); -be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_select); -be_define_const_str(month, "month", 3598321157u, 0, 5, &be_const_str_set_timer); -be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str_set_dcdc_enable); -be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_reverse_gamma10); +be_define_const_str(math, "math", 4001929615u, 0, 4, &be_const_str_zero); +be_define_const_str(matrix, "matrix", 365099244u, 0, 6, &be_const_str_set_height); +be_define_const_str(member, "member", 719708611u, 0, 6, NULL); +be_define_const_str(members, "members", 937576464u, 0, 7, NULL); +be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_try_compile); +be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); +be_define_const_str(min, "min", 3381609815u, 0, 3, NULL); +be_define_const_str(minute, "minute", 954666857u, 0, 6, &be_const_str_style_prop_arr); +be_define_const_str(missing_X20name, "missing name", 3635024006u, 0, 12, NULL); +be_define_const_str(model, "model", 2961925722u, 0, 5, &be_const_str_open); +be_define_const_str(module, "module", 3617558685u, 0, 6, NULL); +be_define_const_str(month, "month", 3598321157u, 0, 5, NULL); +be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); +be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_elif); be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL); -be_define_const_str(next, "next", 1555467752u, 0, 4, NULL); -be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, &be_const_str_tasmota_log_reader); +be_define_const_str(next, "next", 1555467752u, 0, 4, &be_const_str_range); +be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, &be_const_str_push_path); be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, NULL); -be_define_const_str(no_X20more_X20RMT_X20channel_X20available, "no more RMT channel available", 305838632u, 0, 29, &be_const_str_break); +be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, &be_const_str_pixel_count); +be_define_const_str(no_X20more_X20RMT_X20channel_X20available, "no more RMT channel available", 305838632u, 0, 29, NULL); be_define_const_str(now, "now", 682728183u, 0, 3, NULL); -be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, &be_const_str_running); -be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_try_compile); -be_define_const_str(o, "o", 3926667934u, 0, 1, NULL); -be_define_const_str(obj, "obj", 3343205242u, 0, 3, &be_const_str_read12); -be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, &be_const_str_wifi); -be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, NULL); +be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, &be_const_str_widget_destructor); +be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_webserver); +be_define_const_str(o, "o", 3926667934u, 0, 1, &be_const_str_round_start); +be_define_const_str(obj, "obj", 3343205242u, 0, 3, NULL); +be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, &be_const_str_except); +be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, &be_const_str_remove_rule); be_define_const_str(offset, "offset", 348705738u, 0, 6, NULL); -be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, NULL); +be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, NULL); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, NULL); -be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); -be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, &be_const_str_web_add_config_button); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, &be_const_str_run_bat); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, &be_const_str_udp); +be_define_const_str(open, "open", 3546203337u, 0, 4, &be_const_str_reverse_gamma10); +be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, NULL); be_define_const_str(p1, "p1", 2689521274u, 0, 2, NULL); be_define_const_str(p2, "p2", 2672743655u, 0, 2, NULL); -be_define_const_str(page_autoconf_ctl, "page_autoconf_ctl", 2453381496u, 0, 17, NULL); -be_define_const_str(page_autoconf_mgr, "page_autoconf_mgr", 3643937031u, 0, 17, &be_const_str_set_gain); -be_define_const_str(param, "param", 1309554226u, 0, 5, NULL); +be_define_const_str(page_autoconf_ctl, "page_autoconf_ctl", 2453381496u, 0, 17, &be_const_str_set_chg_current); +be_define_const_str(page_autoconf_mgr, "page_autoconf_mgr", 3643937031u, 0, 17, &be_const_str_read_sensors); +be_define_const_str(param, "param", 1309554226u, 0, 5, &be_const_str_set_tasmota_logo); be_define_const_str(path, "path", 2223459638u, 0, 4, NULL); -be_define_const_str(pc, "pc", 1313756516u, 0, 2, &be_const_str_reapply); -be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_solidified); -be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_print); -be_define_const_str(pct, "pct", 1431300144u, 0, 3, &be_const_str_str); -be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, NULL); +be_define_const_str(pc, "pc", 1313756516u, 0, 2, NULL); +be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_percentage); +be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_response_append); +be_define_const_str(pct, "pct", 1431300144u, 0, 3, &be_const_str_toint); +be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, &be_const_str_widget_ctor_cb); be_define_const_str(persist, "persist", 3917083779u, 0, 7, NULL); be_define_const_str(persist_X2E_p_X20is_X20not_X20a_X20map, "persist._p is not a map", 1176528732u, 0, 23, NULL); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL); -be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_udp); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_write_bit); -be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, NULL); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_stop); +be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, &be_const_str_register_obj); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_reset); +be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, &be_const_str_sat); be_define_const_str(pixel_size, "pixel_size", 2209135785u, 0, 10, NULL); -be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, &be_const_str_write_file); -be_define_const_str(point, "point", 414084241u, 0, 5, NULL); -be_define_const_str(point_arr, "point_arr", 1140859857u, 0, 9, NULL); +be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, &be_const_str_run); +be_define_const_str(point, "point", 414084241u, 0, 5, &be_const_str_widget_event); +be_define_const_str(point_arr, "point_arr", 1140859857u, 0, 9, &be_const_str_tanh); be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); -be_define_const_str(pop_path, "pop_path", 2403243998u, 0, 8, NULL); +be_define_const_str(pop_path, "pop_path", 2403243998u, 0, 8, &be_const_str_pow); be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL); -be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, &be_const_str_false); -be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, &be_const_str_web_send_decimal); -be_define_const_str(print, "print", 372738696u, 0, 5, &be_const_str_setrange); -be_define_const_str(ptr, "ptr", 1433816073u, 0, 3, NULL); -be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_refr_size); +be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, NULL); +be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, &be_const_str_resp_cmnd_str); +be_define_const_str(print, "print", 372738696u, 0, 5, NULL); +be_define_const_str(ptr, "ptr", 1433816073u, 0, 3, &be_const_str_false); +be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_tob64); be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); -be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, &be_const_str_set_pixel_color); -be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_traceback); +be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, &be_const_str_save); +be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_do); be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, NULL); -be_define_const_str(quality, "quality", 2597670950u, 0, 7, &be_const_str_to_gamma); +be_define_const_str(quality, "quality", 2597670950u, 0, 7, &be_const_str_set_xy); be_define_const_str(r, "r", 4144776981u, 0, 1, NULL); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_try_run_compiled); be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_scale_uint); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_round_end); be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); -be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); +be_define_const_str(read, "read", 3470762949u, 0, 4, &be_const_str_width_def); be_define_const_str(read12, "read12", 4291076970u, 0, 6, NULL); -be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL); -be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL); -be_define_const_str(read32, "read32", 1741276240u, 0, 6, &be_const_str_write_bytes); -be_define_const_str(read8, "read8", 2802788167u, 0, 5, &be_const_str_set_xy); -be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, &be_const_str_set_time); -be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, NULL); -be_define_const_str(readbytes, "readbytes", 2716426756u, 0, 9, NULL); -be_define_const_str(readline, "readline", 1212709927u, 0, 8, &be_const_str_set_MAC); -be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); +be_define_const_str(read13, "read13", 12887293u, 0, 6, &be_const_str_search); +be_define_const_str(read24, "read24", 1808533811u, 0, 6, &be_const_str_scr_act); +be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL); +be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL); +be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); +be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, &be_const_str_timer_cb); +be_define_const_str(readbytes, "readbytes", 2716426756u, 0, 9, &be_const_str__X7B_X7D); +be_define_const_str(readline, "readline", 1212709927u, 0, 8, NULL); +be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_set_dcdc_enable); be_define_const_str(reapply, "reapply", 3778939332u, 0, 7, NULL); -be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL); -be_define_const_str(refr_now, "refr_now", 3191284735u, 0, 8, &be_const_str_set_chr); -be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, NULL); -be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, &be_const_str_set_percentage); -be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, &be_const_str_started); -be_define_const_str(register_obj, "register_obj", 3982614770u, 0, 12, NULL); -be_define_const_str(remote_ip, "remote_ip", 2953154693u, 0, 9, &be_const_str_time_reached); -be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, &be_const_str_tcpclient); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); +be_define_const_str(redirect, "redirect", 389758641u, 0, 8, &be_const_str_toupper); +be_define_const_str(refr_now, "refr_now", 3191284735u, 0, 8, NULL); +be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, &be_const_str_unsubscribe); +be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, NULL); +be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, &be_const_str_reset_search); +be_define_const_str(register_obj, "register_obj", 3982614770u, 0, 12, &be_const_str_set_first_time); +be_define_const_str(remote_ip, "remote_ip", 2953154693u, 0, 9, NULL); +be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, NULL); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_shared_key); be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL); -be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, NULL); -be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, NULL); -be_define_const_str(remove_light, "remove_light", 1783624394u, 0, 12, &be_const_str_resp_cmnd_failed); +be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, &be_const_str_setbits); +be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, &be_const_str_top); +be_define_const_str(remove_light, "remove_light", 1783624394u, 0, 12, &be_const_str_sqrt); be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, NULL); be_define_const_str(reset, "reset", 1695364032u, 0, 5, NULL); -be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL); +be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, &be_const_str__X7D); be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); -be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); -be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_rounded); +be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, &be_const_str_success); +be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_try_remove_file); be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); -be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); -be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, &be_const_str_widget_event); -be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_splash); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL); +be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); +be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, &be_const_str_y1); +be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_web_add_config_button); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_tele); be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); be_define_const_str(return_X20code_X3D_X25i, "return code=%i", 2127454401u, 0, 14, NULL); -be_define_const_str(reverse, "reverse", 558918661u, 0, 7, &be_const_str_widget_height_def); -be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, &be_const_str_wd); +be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); +be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, &be_const_str_write8); be_define_const_str(rotate, "rotate", 2784296202u, 0, 6, NULL); -be_define_const_str(round_end, "round_end", 985288225u, 0, 9, &be_const_str_set_style_bg_color); -be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, NULL); -be_define_const_str(rounded, "rounded", 1920734138u, 0, 7, &be_const_str_xy); -be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, &be_const_str_type_error); -be_define_const_str(rule, "rule", 4230889683u, 0, 4, &be_const_str_tag); -be_define_const_str(run, "run", 718098122u, 0, 3, &be_const_str_end); -be_define_const_str(run_bat, "run_bat", 2536903298u, 0, 7, &be_const_str_web_add_handler); -be_define_const_str(run_cron, "run_cron", 1929098555u, 0, 8, &be_const_str_wifi_bars); -be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); +be_define_const_str(round_end, "round_end", 985288225u, 0, 9, NULL); +be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, &be_const_str_update); +be_define_const_str(rounded, "rounded", 1920734138u, 0, 7, NULL); +be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, &be_const_str_started); +be_define_const_str(rule, "rule", 4230889683u, 0, 4, &be_const_str_widget_height_def); +be_define_const_str(run, "run", 718098122u, 0, 3, &be_const_str_setfloat); +be_define_const_str(run_bat, "run_bat", 2536903298u, 0, 7, NULL); +be_define_const_str(run_cron, "run_cron", 1929098555u, 0, 8, NULL); +be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, &be_const_str_w); be_define_const_str(running, "running", 343848780u, 0, 7, NULL); -be_define_const_str(sat, "sat", 3592196823u, 0, 3, NULL); -be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_target); +be_define_const_str(sat, "sat", 3592196823u, 0, 3, &be_const_str_set_chr); +be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); -be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, &be_const_str_unsubscribe); +be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); be_define_const_str(scan, "scan", 3974641896u, 0, 4, NULL); -be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_success); -be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, &be_const_str_tolower); -be_define_const_str(search, "search", 2150836393u, 0, 6, NULL); +be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_var); +be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); +be_define_const_str(search, "search", 2150836393u, 0, 6, &be_const_str_web_send); be_define_const_str(sec, "sec", 3139892658u, 0, 3, NULL); -be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL); -be_define_const_str(select, "select", 297952813u, 0, 6, &be_const_str_set_size); -be_define_const_str(send, "send", 1919010991u, 0, 4, NULL); +be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, &be_const_str_trig); +be_define_const_str(select, "select", 297952813u, 0, 6, NULL); +be_define_const_str(send, "send", 1919010991u, 0, 4, &be_const_str_set_style_line_color); be_define_const_str(send_multicast, "send_multicast", 812185870u, 0, 14, NULL); -be_define_const_str(serial, "serial", 3687697785u, 0, 6, NULL); -be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_set_ct); -be_define_const_str(set_MAC, "set_MAC", 1617581015u, 0, 7, &be_const_str_set_bat); -be_define_const_str(set_align, "set_align", 2592958913u, 0, 9, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); -be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, NULL); +be_define_const_str(serial, "serial", 3687697785u, 0, 6, &be_const_str_set_auth); +be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_xy); +be_define_const_str(set_MAC, "set_MAC", 1617581015u, 0, 7, NULL); +be_define_const_str(set_align, "set_align", 2592958913u, 0, 9, &be_const_str_time_reached); +be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, &be_const_str_set_style_img_recolor_opa); be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL); -be_define_const_str(set_bat, "set_bat", 2736667351u, 0, 7, &be_const_str_x); -be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, &be_const_str_set_hue16sat); -be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, NULL); -be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, NULL); -be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, &be_const_str_widget_event_cb); -be_define_const_str(set_chr, "set_chr", 102133743u, 0, 7, NULL); +be_define_const_str(set_bat, "set_bat", 2736667351u, 0, 7, NULL); +be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, NULL); +be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, &be_const_str_write); +be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, &be_const_str_continue); +be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, NULL); +be_define_const_str(set_chr, "set_chr", 102133743u, 0, 7, &be_const_str_web_add_button); be_define_const_str(set_ct, "set_ct", 972363187u, 0, 6, NULL); -be_define_const_str(set_dc_voltage, "set_dc_voltage", 2181981936u, 0, 14, NULL); -be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, &be_const_str_x1); -be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, &be_const_str_else); -be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, NULL); -be_define_const_str(set_gain, "set_gain", 3847781975u, 0, 8, &be_const_str_set_zoom); -be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, &be_const_str_set_y); -be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, &be_const_str_start); +be_define_const_str(set_dc_voltage, "set_dc_voltage", 2181981936u, 0, 14, &be_const_str_webclient); +be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, NULL); +be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, &be_const_str_set_rate); +be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, &be_const_str_set_gain); +be_define_const_str(set_gain, "set_gain", 3847781975u, 0, 8, &be_const_str_widget_dtor_cb); +be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, NULL); +be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, &be_const_str__X7B); be_define_const_str(set_huesat, "set_huesat", 626496854u, 0, 10, NULL); be_define_const_str(set_hum, "set_hum", 964296026u, 0, 7, NULL); -be_define_const_str(set_ldo_enable, "set_ldo_enable", 2916502041u, 0, 14, NULL); -be_define_const_str(set_ldo_voltage, "set_ldo_voltage", 4090501160u, 0, 15, &be_const_str_tob64); +be_define_const_str(set_ldo_enable, "set_ldo_enable", 2916502041u, 0, 14, &be_const_str_true); +be_define_const_str(set_ldo_voltage, "set_ldo_voltage", 4090501160u, 0, 15, NULL); be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); be_define_const_str(set_matrix_pixel_color, "set_matrix_pixel_color", 1197149462u, 0, 22, NULL); be_define_const_str(set_mode_ct, "set_mode_ct", 665073295u, 0, 11, NULL); -be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, NULL); -be_define_const_str(set_percentage, "set_percentage", 2952022724u, 0, 14, NULL); -be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, NULL); +be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, &be_const_str_widget_dtor_impl); +be_define_const_str(set_percentage, "set_percentage", 2952022724u, 0, 14, &be_const_str_yield); +be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, &be_const_str_unknown_X20instruction); be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); -be_define_const_str(set_pwm, "set_pwm", 3781811012u, 0, 7, NULL); +be_define_const_str(set_pwm, "set_pwm", 3781811012u, 0, 7, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); be_define_const_str(set_rate, "set_rate", 1154016838u, 0, 8, NULL); -be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, NULL); -be_define_const_str(set_rgb, "set_rgb", 3380244855u, 0, 7, &be_const_str_tobytes); -be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, NULL); +be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, &be_const_str_target); +be_define_const_str(set_rgb, "set_rgb", 3380244855u, 0, 7, NULL); +be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, &be_const_str_url_encode); be_define_const_str(set_style_bg_color, "set_style_bg_color", 1689513089u, 0, 18, NULL); be_define_const_str(set_style_border_width, "set_style_border_width", 549034191u, 0, 22, NULL); -be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, &be_const_str_set_svc); -be_define_const_str(set_style_img_recolor_opa, "set_style_img_recolor_opa", 2667062087u, 0, 25, &be_const_str_set_tasmota_logo); +be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, &be_const_str_web_send_decimal); +be_define_const_str(set_style_img_recolor_opa, "set_style_img_recolor_opa", 2667062087u, 0, 25, NULL); be_define_const_str(set_style_line_color, "set_style_line_color", 3665238976u, 0, 20, NULL); be_define_const_str(set_style_pad_all, "set_style_pad_all", 3987000607u, 0, 17, NULL); -be_define_const_str(set_style_pad_right, "set_style_pad_right", 3314069054u, 0, 19, &be_const_str_widget_width_def); -be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, &be_const_str_signal_bars); -be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, NULL); +be_define_const_str(set_style_pad_right, "set_style_pad_right", 3314069054u, 0, 19, &be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function); +be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, NULL); +be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, &be_const_str_set_svc); be_define_const_str(set_style_text_font, "set_style_text_font", 1028590019u, 0, 19, NULL); be_define_const_str(set_svc, "set_svc", 752734654u, 0, 7, NULL); -be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, NULL); +be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, &be_const_str_super); be_define_const_str(set_temp, "set_temp", 1952131250u, 0, 8, NULL); -be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, &be_const_str_strftime); -be_define_const_str(set_time, "set_time", 900236405u, 0, 8, &be_const_str_widget_dtor_cb); +be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, &be_const_str_subscribe); +be_define_const_str(set_time, "set_time", 900236405u, 0, 8, NULL); be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL); -be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); +be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, &be_const_str_target_search); be_define_const_str(set_user_data, "set_user_data", 3596043360u, 0, 13, NULL); -be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, &be_const_str_top); -be_define_const_str(set_width, "set_width", 484671920u, 0, 9, NULL); -be_define_const_str(set_x, "set_x", 1849400772u, 0, 5, &be_const_str_import); +be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, NULL); +be_define_const_str(set_width, "set_width", 484671920u, 0, 9, &be_const_str_try_rule); +be_define_const_str(set_x, "set_x", 1849400772u, 0, 5, NULL); be_define_const_str(set_xy, "set_xy", 1155092615u, 0, 6, NULL); -be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, &be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); +be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, &be_const_str_stop_iteration); be_define_const_str(set_zoom, "set_zoom", 1925134407u, 0, 8, NULL); be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL); -be_define_const_str(setfloat, "setfloat", 2799488807u, 0, 8, NULL); -be_define_const_str(seti, "seti", 1500556254u, 0, 4, &be_const_str_write_gpio); -be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, &be_const_str_tasmota); +be_define_const_str(setfloat, "setfloat", 2799488807u, 0, 8, &be_const_str_sinh); +be_define_const_str(seti, "seti", 1500556254u, 0, 4, &be_const_str_skip); +be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); -be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, &be_const_str_toupper); -be_define_const_str(settings, "settings", 1745255176u, 0, 8, NULL); +be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); +be_define_const_str(settings, "settings", 1745255176u, 0, 8, &be_const_str_show); be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL); -be_define_const_str(show, "show", 2840060476u, 0, 4, &be_const_str_web_sensor); +be_define_const_str(show, "show", 2840060476u, 0, 4, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); be_define_const_str(signal_arcs, "signal_arcs", 1505996127u, 0, 11, NULL); -be_define_const_str(signal_bars, "signal_bars", 3181573600u, 0, 11, &be_const_str_for); -be_define_const_str(signal_change, "signal_change", 3262299350u, 0, 13, &be_const_str_webserver); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); -be_define_const_str(sinh, "sinh", 282220607u, 0, 4, &be_const_str_value_error); +be_define_const_str(signal_bars, "signal_bars", 3181573600u, 0, 11, NULL); +be_define_const_str(signal_change, "signal_change", 3262299350u, 0, 13, NULL); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_value_error); +be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); be_define_const_str(size, "size", 597743964u, 0, 4, NULL); be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL); -be_define_const_str(solidified, "solidified", 3257553487u, 0, 10, NULL); -be_define_const_str(splash, "splash", 2531464038u, 0, 6, &be_const_str_widget_editable); +be_define_const_str(solidified, "solidified", 3257553487u, 0, 10, &be_const_str_str); +be_define_const_str(splash, "splash", 2531464038u, 0, 6, &be_const_str_strip); be_define_const_str(splash_init, "splash_init", 1522992293u, 0, 11, NULL); be_define_const_str(splash_remove, "splash_remove", 3132020807u, 0, 13, NULL); be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); -be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, &be_const_str_widget_ctor_impl); +be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, &be_const_str_widget_constructor); be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); -be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); -be_define_const_str(started, "started", 2153339806u, 0, 7, &be_const_str_try); -be_define_const_str(state, "state", 2016490230u, 0, 5, &be_const_str_try_remove_file); +be_define_const_str(start, "start", 1697318111u, 0, 5, &be_const_str_zip); +be_define_const_str(started, "started", 2153339806u, 0, 7, &be_const_str_widget_editable); +be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); -be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL); -be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, NULL); +be_define_const_str(stop, "stop", 3411225317u, 0, 4, &be_const_str_web_add_handler); +be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, &be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29); be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); -be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); -be_define_const_str(string, "string", 398550328u, 0, 6, &be_const_str_wire); -be_define_const_str(strip, "strip", 4246411473u, 0, 5, NULL); -be_define_const_str(strptime, "strptime", 1277910361u, 0, 8, &be_const_str_target_search); +be_define_const_str(strftime, "strftime", 187738851u, 0, 8, &be_const_str_web_add_management_button); +be_define_const_str(string, "string", 398550328u, 0, 6, NULL); +be_define_const_str(strip, "strip", 4246411473u, 0, 5, &be_const_str_touch_update); +be_define_const_str(strptime, "strptime", 1277910361u, 0, 8, NULL); be_define_const_str(style_prop_arr, "style_prop_arr", 3019174322u, 0, 14, NULL); be_define_const_str(subscribe, "subscribe", 2946386435u, 0, 9, NULL); -be_define_const_str(success, "success", 979353360u, 0, 7, &be_const_str_wifi_arcs_icon); -be_define_const_str(super, "super", 4152230356u, 0, 5, &be_const_str_y); -be_define_const_str(sys, "sys", 3277365014u, 0, 3, NULL); +be_define_const_str(success, "success", 979353360u, 0, 7, &be_const_str_raise); +be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); +be_define_const_str(sys, "sys", 3277365014u, 0, 3, &be_const_str_widget_instance_size); be_define_const_str(tag, "tag", 2516003219u, 0, 3, NULL); be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); -be_define_const_str(tanh, "tanh", 153638352u, 0, 4, &be_const_str_web_add_main_button); -be_define_const_str(target, "target", 845187144u, 0, 6, &be_const_str_wifi_arcs); +be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); +be_define_const_str(target, "target", 845187144u, 0, 6, NULL); be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); be_define_const_str(tasmota, "tasmota", 424643812u, 0, 7, NULL); be_define_const_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29, "tasmota.get_light() is deprecated, use light.get()", 3525753647u, 0, 50, NULL); be_define_const_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, "tasmota.set_light() is deprecated, use light.set()", 2124937871u, 0, 50, NULL); be_define_const_str(tasmota_log_reader, "tasmota_log_reader", 3555069257u, 0, 18, NULL); -be_define_const_str(tcpclient, "tcpclient", 3828797983u, 0, 9, NULL); +be_define_const_str(tcpclient, "tcpclient", 3828797983u, 0, 9, &be_const_str_try_get_bec_version); be_define_const_str(tele, "tele", 3474458061u, 0, 4, NULL); be_define_const_str(the_X20second_X20argument_X20is_X20not_X20a_X20function, "the second argument is not a function", 3954574469u, 0, 37, NULL); -be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); +be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, &be_const_str_time_str); be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); be_define_const_str(timer_cb, "timer_cb", 79918026u, 0, 8, NULL); @@ -854,31 +856,31 @@ be_define_const_str(to_gamma, "to_gamma", 1597139862u, 0, 8, NULL); be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL); be_define_const_str(tobytes, "tobytes", 595962279u, 0, 7, NULL); be_define_const_str(toint, "toint", 3613182909u, 0, 5, NULL); -be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, &be_const_str_widget_event_impl); -be_define_const_str(tomap, "tomap", 612167626u, 0, 5, NULL); +be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); +be_define_const_str(tomap, "tomap", 612167626u, 0, 5, &be_const_str_year); be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); -be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, NULL); +be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, &be_const_str_type_error); be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); be_define_const_str(touch_update, "touch_update", 1918102068u, 0, 12, NULL); be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); be_define_const_str(tr, "tr", 1195724803u, 0, 2, NULL); be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); -be_define_const_str(trig, "trig", 2073314619u, 0, 4, &be_const_str_static); +be_define_const_str(trig, "trig", 2073314619u, 0, 4, NULL); be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); be_define_const_str(try_compile, "try_compile", 4263879840u, 0, 11, NULL); be_define_const_str(try_get_bec_version, "try_get_bec_version", 3143116423u, 0, 19, NULL); be_define_const_str(try_remove_file, "try_remove_file", 3025429926u, 0, 15, NULL); -be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, &be_const_str_wifi_bars_icon); -be_define_const_str(try_run_compiled, "try_run_compiled", 2339741218u, 0, 16, &be_const_str_web_add_button); +be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); +be_define_const_str(try_run_compiled, "try_run_compiled", 2339741218u, 0, 16, &be_const_str_wd); be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); be_define_const_str(type_error, "type_error", 3789613824u, 0, 10, NULL); be_define_const_str(udp, "udp", 1253872004u, 0, 3, NULL); be_define_const_str(unknown_X20instruction, "unknown instruction", 1093911841u, 0, 19, NULL); be_define_const_str(unsubscribe, "unsubscribe", 4190043798u, 0, 11, NULL); be_define_const_str(update, "update", 672109684u, 0, 6, NULL); -be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); -be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL); +be_define_const_str(upper, "upper", 176974407u, 0, 5, &be_const_str_write_bytes); +be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, &be_const_str_for); be_define_const_str(uuid4, "uuid4", 1153582450u, 0, 5, NULL); be_define_const_str(value, "value", 1113510858u, 0, 5, NULL); be_define_const_str(value_error, "value_error", 773297791u, 0, 11, NULL); @@ -887,14 +889,14 @@ be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); be_define_const_str(w, "w", 4060888886u, 0, 1, NULL); be_define_const_str(wd, "wd", 1531424278u, 0, 2, NULL); be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, NULL); -be_define_const_str(web_add_config_button, "web_add_config_button", 639674325u, 0, 21, NULL); +be_define_const_str(web_add_config_button, "web_add_config_button", 639674325u, 0, 21, &be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); be_define_const_str(web_add_console_button, "web_add_console_button", 3481436192u, 0, 22, NULL); -be_define_const_str(web_add_handler, "web_add_handler", 3990174962u, 0, 15, NULL); +be_define_const_str(web_add_handler, "web_add_handler", 3990174962u, 0, 15, &be_const_str_return); be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL); be_define_const_str(web_add_management_button, "web_add_management_button", 2738877186u, 0, 25, NULL); -be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, &be_const_str_widget_ctor_cb); +be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL); be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); -be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, &be_const_str_nil); +be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, NULL); be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, NULL); be_define_const_str(webserver, "webserver", 1572454038u, 0, 9, NULL); be_define_const_str(while, "while", 231090382u, 53, 5, NULL); @@ -908,7 +910,7 @@ be_define_const_str(widget_dtor_impl, "widget_dtor_impl", 520430610u, 0, 16, NUL be_define_const_str(widget_editable, "widget_editable", 3821793286u, 0, 15, NULL); be_define_const_str(widget_event, "widget_event", 1951408186u, 0, 12, NULL); be_define_const_str(widget_event_cb, "widget_event_cb", 1508466754u, 0, 15, NULL); -be_define_const_str(widget_event_impl, "widget_event_impl", 2178430561u, 0, 17, &be_const_str_widget_struct_default); +be_define_const_str(widget_event_impl, "widget_event_impl", 2178430561u, 0, 17, NULL); be_define_const_str(widget_group_def, "widget_group_def", 1246968785u, 0, 16, NULL); be_define_const_str(widget_height_def, "widget_height_def", 3131667813u, 0, 17, NULL); be_define_const_str(widget_instance_size, "widget_instance_size", 2055354779u, 0, 20, NULL); @@ -922,28 +924,28 @@ be_define_const_str(wifi_arcs, "wifi_arcs", 3838492904u, 0, 9, NULL); be_define_const_str(wifi_arcs_icon, "wifi_arcs_icon", 767180544u, 0, 14, NULL); be_define_const_str(wifi_bars, "wifi_bars", 653141243u, 0, 9, NULL); be_define_const_str(wifi_bars_icon, "wifi_bars_icon", 3641522557u, 0, 14, NULL); -be_define_const_str(wire, "wire", 4082753944u, 0, 4, &be_const_str__X7D); +be_define_const_str(wire, "wire", 4082753944u, 0, 4, &be_const_str_write_file); be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); -be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, &be_const_str_var); +be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL); be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL); be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); be_define_const_str(write_file, "write_file", 3177658879u, 0, 10, NULL); -be_define_const_str(write_gpio, "write_gpio", 2267940334u, 0, 10, NULL); -be_define_const_str(x, "x", 4245442695u, 0, 1, NULL); +be_define_const_str(write_gpio, "write_gpio", 2267940334u, 0, 10, &be_const_str_if); +be_define_const_str(x, "x", 4245442695u, 0, 1, &be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); be_define_const_str(x1, "x1", 274927234u, 0, 2, NULL); be_define_const_str(xy, "xy", 1482915802u, 0, 2, NULL); be_define_const_str(y, "y", 4228665076u, 0, 1, NULL); -be_define_const_str(y1, "y1", 2355101727u, 0, 2, NULL); +be_define_const_str(y1, "y1", 2355101727u, 0, 2, &be_const_str_def); be_define_const_str(year, "year", 2927578396u, 0, 4, NULL); be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); be_define_const_str(zero, "zero", 2339366755u, 0, 4, NULL); be_define_const_str(zip, "zip", 2877453236u, 0, 3, NULL); be_define_const_str(_X7B, "{", 4262220314u, 0, 1, NULL); be_define_const_str(_X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, "{s}Batt Current{m}%.1f mA{e}", 866537156u, 0, 28, NULL); -be_define_const_str(_X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, "{s}Batt Voltage{m}%.3f V{e}", 3184308199u, 0, 27, NULL); +be_define_const_str(_X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, "{s}Batt Voltage{m}%.3f V{e}", 3184308199u, 0, 27, &be_const_str_class); be_define_const_str(_X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D, "{s}Temp AXP{m}%.1f °C{e}", 2622904081u, 0, 28, NULL); be_define_const_str(_X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, "{s}VBus Current{m}%.1f mA{e}", 1032721155u, 0, 28, NULL); be_define_const_str(_X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, "{s}VBus Voltage{m}%.3f V{e}", 165651270u, 0, 27, NULL); @@ -952,473 +954,474 @@ be_define_const_str(_X7D, "}", 4161554600u, 0, 1, NULL); static const bstring* const m_string_table[] = { NULL, - (const bstring *)&be_const_str_deregister_obj, - (const bstring *)&be_const_str_line_dsc, - (const bstring *)&be_const_str__X2F_X3Frst_X3D, - (const bstring *)&be_const_str_SERIAL_5O2, - (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, - NULL, - NULL, - (const bstring *)&be_const_str_debug, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X29, - NULL, - (const bstring *)&be_const_str_get_MAC, - (const bstring *)&be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus, - (const bstring *)&be_const_str__X2A, - NULL, - (const bstring *)&be_const_str_content_stop, - NULL, - (const bstring *)&be_const_str_make_cb, - (const bstring *)&be_const_str_sec, - (const bstring *)&be_const_str_SERIAL_8N1, - (const bstring *)&be_const_str__anonymous_, - (const bstring *)&be_const_str_True, - (const bstring *)&be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, - (const bstring *)&be_const_str_setfloat, - (const bstring *)&be_const_str__begin_transmission, - NULL, - (const bstring *)&be_const_str_decrypt, - (const bstring *)&be_const_str__X2C, - (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, - (const bstring *)&be_const_str_consume_mono, - NULL, - (const bstring *)&be_const_str_sinh, - (const bstring *)&be_const_str_devices, - (const bstring *)&be_const_str_conn_cb, - (const bstring *)&be_const_str__X23, - (const bstring *)&be_const_str_response_append, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, - (const bstring *)&be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, - (const bstring *)&be_const_str_destructor_cb, - (const bstring *)&be_const_str_arg, - (const bstring *)&be_const_str_wire_scan, - (const bstring *)&be_const_str__drivers, - (const bstring *)&be_const_str_coord_arr, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, - (const bstring *)&be_const_str_get_free_heap, - NULL, - NULL, - (const bstring *)&be_const_str__X25, - (const bstring *)&be_const_str_resize, - (const bstring *)&be_const_str_instance, - (const bstring *)&be_const_str_MD5, - (const bstring *)&be_const_str_get_width, - (const bstring *)&be_const_str_, - (const bstring *)&be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_iter, - (const bstring *)&be_const_str_AudioGeneratorMP3, - NULL, - (const bstring *)&be_const_str_timer_cb, - (const bstring *)&be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker, - (const bstring *)&be_const_str_cos, - (const bstring *)&be_const_str_cb_event_closure, - (const bstring *)&be_const_str_back_forth, - (const bstring *)&be_const_str_add_cmd, - (const bstring *)&be_const_str_tanh, - (const bstring *)&be_const_str_read_sensors, - (const bstring *)&be_const_str_param, - (const bstring *)&be_const_str_list_handlers, - (const bstring *)&be_const_str_json_append, - (const bstring *)&be_const_str__ccmd, - (const bstring *)&be_const_str___lower__, - (const bstring *)&be_const_str_add_rule, - (const bstring *)&be_const_str_BUTTON_CONFIGURATION, - (const bstring *)&be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, - (const bstring *)&be_const_str_del, - (const bstring *)&be_const_str_dirty, - (const bstring *)&be_const_str_time_str, - (const bstring *)&be_const_str_call_native, - (const bstring *)&be_const_str_pop_path, - (const bstring *)&be_const_str_set_bits_per_sample, - (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, - (const bstring *)&be_const_str_SERIAL_6O2, - (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X20, - (const bstring *)&be_const_str_read24, - (const bstring *)&be_const_str_pin_used, - (const bstring *)&be_const_str__X2502d_X25s_X2502d, - NULL, - (const bstring *)&be_const_str_dump, - (const bstring *)&be_const_str_SERIAL_6O1, - (const bstring *)&be_const_str_internal_error, - (const bstring *)&be_const_str_cmd_res, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, + (const bstring *)&be_const_str_event_send, + (const bstring *)&be_const_str_value, + (const bstring *)&be_const_str_create_segment, (const bstring *)&be_const_str_begin_multicast, - (const bstring *)&be_const_str_year, - (const bstring *)&be_const_str_keys, - (const bstring *)&be_const_str_set_style_pad_right, - (const bstring *)&be_const_str_byte, - (const bstring *)&be_const_str_number, - (const bstring *)&be_const_str_display_X2Eini, - (const bstring *)&be_const_str_BECDFE, - (const bstring *)&be_const_str_SERIAL_7N2, - NULL, - (const bstring *)&be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, - (const bstring *)&be_const_str_POST, - (const bstring *)&be_const_str_AudioGeneratorWAV, - NULL, - (const bstring *)&be_const_str__X2Fac, - (const bstring *)&be_const_str_ctypes_bytes_dyn, - (const bstring *)&be_const_str_eth, - (const bstring *)&be_const_str_Auto_X2Dconfiguration, - (const bstring *)&be_const_str_global, - (const bstring *)&be_const_str_gc, - (const bstring *)&be_const_str_get_pixel_color, - NULL, - (const bstring *)&be_const_str_add_fast_loop, - NULL, - (const bstring *)&be_const_str_lv_wifi_bars_icon, - (const bstring *)&be_const_str_clear_first_time, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, - (const bstring *)&be_const_str_ctypes_bytes, - (const bstring *)&be_const_str_lv_, - (const bstring *)&be_const_str_get_bat_current, - (const bstring *)&be_const_str__p, - (const bstring *)&be_const_str_assert, - (const bstring *)&be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map, - (const bstring *)&be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, - (const bstring *)&be_const_str_SERIAL_6E1, - (const bstring *)&be_const_str_decode, - (const bstring *)&be_const_str_counters, - (const bstring *)&be_const_str__X23autoexec_X2Ebat, - (const bstring *)&be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, - (const bstring *)&be_const_str__X23autoexec_X2Ebe, - (const bstring *)&be_const_str__X2Fstate_X2F, - (const bstring *)&be_const_str_AudioFileSourceFS, - NULL, - (const bstring *)&be_const_str_content_button, - NULL, - (const bstring *)&be_const_str_widget_destructor, - (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, - (const bstring *)&be_const_str_INTERNAL_PDM, - (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20list, - (const bstring *)&be_const_str__X3F, - (const bstring *)&be_const_str_ctor, - (const bstring *)&be_const_str_remove_rule, - (const bstring *)&be_const_str__global_addr, - (const bstring *)&be_const_str_RELAY, - (const bstring *)&be_const_str_autoexec, - (const bstring *)&be_const_str_TASMOTA, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, - (const bstring *)&be_const_str_asin, - NULL, - (const bstring *)&be_const_str_deinit, - (const bstring *)&be_const_str_EXTERNAL_I2S, - (const bstring *)&be_const_str_delete_all_configs, - NULL, - (const bstring *)&be_const_str__fl, - (const bstring *)&be_const_str_read13, - (const bstring *)&be_const_str__cmd, - (const bstring *)&be_const_str_check_not_method, - (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, - (const bstring *)&be_const_str_offseta, - (const bstring *)&be_const_str_battery_present, - NULL, - (const bstring *)&be_const_str__X25s_X2Eautoconf, - (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, - (const bstring *)&be_const_str_SERIAL_8O1, - (const bstring *)&be_const_str_INTERNAL_DAC, - (const bstring *)&be_const_str_tan, - (const bstring *)&be_const_str__write, - (const bstring *)&be_const_str__X2B, - (const bstring *)&be_const_str_arg_name, - (const bstring *)&be_const_str_add_anim, - (const bstring *)&be_const_str_draw_arc_dsc, - NULL, - (const bstring *)&be_const_str_hour, - (const bstring *)&be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, - (const bstring *)&be_const_str__X2E, - (const bstring *)&be_const_str_OneWire, - NULL, - (const bstring *)&be_const_str_connection_error, - (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20function, - NULL, - (const bstring *)&be_const_str_h, - (const bstring *)&be_const_str__X2D, - (const bstring *)&be_const_str_MAX_RMT, - (const bstring *)&be_const_str__X21_X3D_X3D, - (const bstring *)&be_const_str_ALIGN_LEFT_MID, - (const bstring *)&be_const_str_cosh, - (const bstring *)&be_const_str_alternate, - (const bstring *)&be_const_str_calldepth, - (const bstring *)&be_const_str__X20, - (const bstring *)&be_const_str_check_privileged_access, - (const bstring *)&be_const_str__rules, - (const bstring *)&be_const_str_encrypt, - (const bstring *)&be_const_str__X2Ep, - (const bstring *)&be_const_str__X23preinit_X2Ebe, - (const bstring *)&be_const_str_b, - (const bstring *)&be_const_str_AES_GCM, - (const bstring *)&be_const_str_atan2, - (const bstring *)&be_const_str_False, - (const bstring *)&be_const_str_Unknown, - (const bstring *)&be_const_str_gpio, - (const bstring *)&be_const_str_digital_write, - (const bstring *)&be_const_str_a, - (const bstring *)&be_const_str_as, - (const bstring *)&be_const_str__class, - NULL, - (const bstring *)&be_const_str__X2Esize, - (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, - (const bstring *)&be_const_str__persist_X2Ejson, - (const bstring *)&be_const_str_file, - NULL, - (const bstring *)&be_const_str_out_X20of_X20range, - (const bstring *)&be_const_str__X3Clambda_X3E, - (const bstring *)&be_const_str_set_rgb, - (const bstring *)&be_const_str_ceil, - (const bstring *)&be_const_str_SERIAL_5N2, - (const bstring *)&be_const_str__X5B, - (const bstring *)&be_const_str_trig, - (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - (const bstring *)&be_const_str_stop_iteration, - (const bstring *)&be_const_str_draw_line_dsc_init, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20, - (const bstring *)&be_const_str_AXP192, - (const bstring *)&be_const_str_RGBW, - (const bstring *)&be_const_str_hue_ntv, - (const bstring *)&be_const_str_lv_timer_cb, - (const bstring *)&be_const_str_frombytes, - (const bstring *)&be_const_str_add_cron, - (const bstring *)&be_const_str_set_matrix_pixel_color, - (const bstring *)&be_const_str_sat, - (const bstring *)&be_const_str__X2Elen, - (const bstring *)&be_const_str_ccronexpr, - (const bstring *)&be_const_str_geti, - NULL, - NULL, - (const bstring *)&be_const_str_content_start, - (const bstring *)&be_const_str_discover, - (const bstring *)&be_const_str_issubclass, - (const bstring *)&be_const_str_animate, - (const bstring *)&be_const_str_set_align, - (const bstring *)&be_const_str_clear, - NULL, - (const bstring *)&be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, - (const bstring *)&be_const_str_SERIAL_6N1, - (const bstring *)&be_const_str_arc_dsc, NULL, (const bstring *)&be_const_str_CFG_X3A_X20ran_X20_X20, - (const bstring *)&be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, - NULL, - (const bstring *)&be_const_str_get_name, - (const bstring *)&be_const_str_SERIAL_6N2, - (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, - (const bstring *)&be_const_str_lvgl_event_dispatch, - (const bstring *)&be_const_str_content_send_style, - (const bstring *)&be_const_str_AudioOutput, - NULL, - (const bstring *)&be_const_str_web_add_management_button, - (const bstring *)&be_const_str_close, - (const bstring *)&be_const_str_continue, - (const bstring *)&be_const_str_read, - (const bstring *)&be_const_str__X2Ep1, - (const bstring *)&be_const_str_GET, - (const bstring *)&be_const_str_init_draw_line_dsc, - NULL, - (const bstring *)&be_const_str_BLE, - (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_draw_arc, - (const bstring *)&be_const_str__rmt, - (const bstring *)&be_const_str_is_dirty, - (const bstring *)&be_const_str_Restart_X201, - (const bstring *)&be_const_str_pct, - (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, - (const bstring *)&be_const_str__X3C_X3D, - (const bstring *)&be_const_str__X21_X3D, - (const bstring *)&be_const_str_bytes, - (const bstring *)&be_const_str__X7B_X7D, - (const bstring *)&be_const_str_EVENT_DRAW_MAIN, - NULL, - (const bstring *)&be_const_str_BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27, - (const bstring *)&be_const_str_lv_coord_arr, - (const bstring *)&be_const_str__X28_X29, - (const bstring *)&be_const_str_SERIAL_6E2, - (const bstring *)&be_const_str_class_init_obj, - (const bstring *)&be_const_str__X2E_X2E, - (const bstring *)&be_const_str__t, - (const bstring *)&be_const_str_set_mode_ct, - (const bstring *)&be_const_str_invalidate, - (const bstring *)&be_const_str_has_X20already_X20an_X20event_X20callback, - (const bstring *)&be_const_str_WS2812, - (const bstring *)&be_const_str_depower, - (const bstring *)&be_const_str__X3E_X3D, - (const bstring *)&be_const_str_tostring, - (const bstring *)&be_const_str_get_vbus_current, - (const bstring *)&be_const_str_set_style_img_recolor_opa, - (const bstring *)&be_const_str_get_percentage, - (const bstring *)&be_const_str_fromptr, - (const bstring *)&be_const_str_get_style_pad_right, - (const bstring *)&be_const_str__X3C, - (const bstring *)&be_const_str_WS2812_GRB, - (const bstring *)&be_const_str_consume_silence, - NULL, - NULL, - (const bstring *)&be_const_str_set_style_radius, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, - (const bstring *)&be_const_str_closure, - NULL, - (const bstring *)&be_const_str_PART_MAIN, - (const bstring *)&be_const_str_erase, - (const bstring *)&be_const_str_MI32, - (const bstring *)&be_const_str_BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29, - (const bstring *)&be_const_str_string, - (const bstring *)&be_const_str_json_fdump_any, - (const bstring *)&be_const_str_I2C_Driver, - (const bstring *)&be_const_str_DIMMER, - (const bstring *)&be_const_str__X23display_X2Eini, - (const bstring *)&be_const_str_add_event_cb, - (const bstring *)&be_const_str_get_temp, - (const bstring *)&be_const_str_return, - (const bstring *)&be_const_str_OPTION_A, - (const bstring *)&be_const_str_editable, - (const bstring *)&be_const_str_widget_dtor_impl, - (const bstring *)&be_const_str_SERIAL_8O2, - (const bstring *)&be_const_str_do, - (const bstring *)&be_const_str_animators, - (const bstring *)&be_const_str_SERIAL_8N2, - NULL, - (const bstring *)&be_const_str_manuf, - (const bstring *)&be_const_str__X2F_X2Eautoconf, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code_X20_X27_X25s_X27_X20_X2D_X20_X25s, - (const bstring *)&be_const_str_RGBCT, - NULL, - (const bstring *)&be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range, + (const bstring *)&be_const_str_draw_line_dsc, + (const bstring *)&be_const_str__X25, + (const bstring *)&be_const_str__read, + (const bstring *)&be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_SK6812_GRBW, + (const bstring *)&be_const_str__X2Fac, (const bstring *)&be_const_str__X2F, - (const bstring *)&be_const_str_lv_signal_bars, - (const bstring *)&be_const_str__X2Eautoconf, - (const bstring *)&be_const_str_collect, - (const bstring *)&be_const_str__X2Ew, - (const bstring *)&be_const_str_gamma10, - (const bstring *)&be_const_str_add, - (const bstring *)&be_const_str__X22, - (const bstring *)&be_const_str_set_huesat, - (const bstring *)&be_const_str_read8, - (const bstring *)&be_const_str_delay, - (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, + NULL, + (const bstring *)&be_const_str__X21_X3D, + (const bstring *)&be_const_str_Unknown_X20command, + (const bstring *)&be_const_str_millis, + (const bstring *)&be_const_str_write_gpio, + (const bstring *)&be_const_str_lv_clock_icon, + (const bstring *)&be_const_str__X2Ebec, + (const bstring *)&be_const_str_remote_port, + (const bstring *)&be_const_str_get_pixel_color, + (const bstring *)&be_const_str_ccronexpr, + NULL, + (const bstring *)&be_const_str__X28_X29, + (const bstring *)&be_const_str_lv_, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20function, + (const bstring *)&be_const_str_connection_error, (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29, - NULL, - (const bstring *)&be_const_str_EVENT_DRAW_PART_END, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, - (const bstring *)&be_const_str_yield, - (const bstring *)&be_const_str_pixels_buffer, - (const bstring *)&be_const_str_find_op, - (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_c, - (const bstring *)&be_const_str_subscribe, - (const bstring *)&be_const_str__timers, - NULL, - (const bstring *)&be_const_str_quality, - (const bstring *)&be_const_str_fromb64, - (const bstring *)&be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E, - (const bstring *)&be_const_str_f, - (const bstring *)&be_const_str_get_bat_voltage, - NULL, - (const bstring *)&be_const_str_write, - (const bstring *)&be_const_str_concat, - (const bstring *)&be_const_str_compile, - (const bstring *)&be_const_str_light, - (const bstring *)&be_const_str_is_first_time, - (const bstring *)&be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, - (const bstring *)&be_const_str_isinstance, - (const bstring *)&be_const_str_split, - (const bstring *)&be_const_str_COLOR_BLACK, - (const bstring *)&be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function, - (const bstring *)&be_const_str_lv_obj_class, - (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, - (const bstring *)&be_const_str_available, - NULL, - NULL, + (const bstring *)&be_const_str_OneWire, + (const bstring *)&be_const_str_get_bat_current, NULL, (const bstring *)&be_const_str_RGB, - (const bstring *)&be_const_str_set_power, - (const bstring *)&be_const_str__, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_button_pressed, + (const bstring *)&be_const_str_BLE, NULL, + (const bstring *)&be_const_str_digital_read, + (const bstring *)&be_const_str_instance_X20required, + (const bstring *)&be_const_str_is_dirty, + (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, (const bstring *)&be_const_str_classof, - (const bstring *)&be_const_str_has, - (const bstring *)&be_const_str_before_del, - (const bstring *)&be_const_str__X3D_X3C_X3E_X21, - (const bstring *)&be_const_str__settings_ptr, - (const bstring *)&be_const_str_exec_cmd, - NULL, - (const bstring *)&be_const_str_get_warning_level, - (const bstring *)&be_const_str_save_before_restart, - (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, - (const bstring *)&be_const_str_chars_in_string, - (const bstring *)&be_const_str__X0A, - NULL, - NULL, - (const bstring *)&be_const_str_on, - (const bstring *)&be_const_str_strip, - (const bstring *)&be_const_str_CT, - (const bstring *)&be_const_str_Trigger, (const bstring *)&be_const_str__X2Ebe, NULL, - (const bstring *)&be_const_str_SERIAL_7N1, - (const bstring *)&be_const_str_font_embedded, - (const bstring *)&be_const_str_CFG_X3A_X20return_code_X3D_X25i, - (const bstring *)&be_const_str_SERIAL_8E2, - (const bstring *)&be_const_str_value, - (const bstring *)&be_const_str_set_mode_rgb, - (const bstring *)&be_const_str__request_from, - (const bstring *)&be_const_str_SERIAL_7E1, - (const bstring *)&be_const_str_AudioGenerator, - (const bstring *)&be_const_str_gen_cb, - (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, - (const bstring *)&be_const_str_get_vbus_voltage, - (const bstring *)&be_const_str_ct, - (const bstring *)&be_const_str__X2Ep2, - (const bstring *)&be_const_str__X2Flights_X2F, - (const bstring *)&be_const_str__X2Ebec, - (const bstring *)&be_const_str__X2D_X2A, + (const bstring *)&be_const_str_OPTION_A, + (const bstring *)&be_const_str__X23autoexec_X2Ebe, NULL, - (const bstring *)&be_const_str_load_freetype_font, - (const bstring *)&be_const_str_srand, - (const bstring *)&be_const_str_gamma, - (const bstring *)&be_const_str_I2C_X3A, - (const bstring *)&be_const_str_classname, - (const bstring *)&be_const_str__X22_X3A, NULL, - (const bstring *)&be_const_str__X3D_X3D, - (const bstring *)&be_const_str_EVENT_DRAW_PART_BEGIN, - (const bstring *)&be_const_str_list, - (const bstring *)&be_const_str_set_chg_current, + (const bstring *)&be_const_str_is_first_time, + (const bstring *)&be_const_str___lower__, + (const bstring *)&be_const_str_depower, + (const bstring *)&be_const_str_get_vbus_current, + (const bstring *)&be_const_str_lv_extra, + (const bstring *)&be_const_str_INTERNAL_DAC, + (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, + (const bstring *)&be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, + (const bstring *)&be_const_str_upper, + (const bstring *)&be_const_str_Tasmota, + (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X29, + (const bstring *)&be_const_str__X2C, + (const bstring *)&be_const_str_add_fast_loop, + (const bstring *)&be_const_str_lvgl_event_dispatch, NULL, - (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, - (const bstring *)&be_const_str__X23init_X2Ebat, - (const bstring *)&be_const_str_SERIAL_5E2, - (const bstring *)&be_const_str_now, - (const bstring *)&be_const_str_remove_driver, - (const bstring *)&be_const_str_arg_size, - (const bstring *)&be_const_str__X2Etapp, - (const bstring *)&be_const_str_None, - (const bstring *)&be_const_str__archive, - (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, - (const bstring *)&be_const_str_set_style_img_recolor, - (const bstring *)&be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, + (const bstring *)&be_const_str_editable, + (const bstring *)&be_const_str__X23display_X2Eini, + (const bstring *)&be_const_str_dim, + (const bstring *)&be_const_str_flush, + (const bstring *)&be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, + (const bstring *)&be_const_str_json, + (const bstring *)&be_const_str_get_aps_voltage, + (const bstring *)&be_const_str__dirty, + (const bstring *)&be_const_str__X2502d_X25s_X2502d, + (const bstring *)&be_const_str_isinstance, + (const bstring *)&be_const_str__X2Ew, + (const bstring *)&be_const_str_lights, + (const bstring *)&be_const_str__X23preinit_X2Ebe, + (const bstring *)&be_const_str_ALIGN_LEFT_MID, + (const bstring *)&be_const_str__ccmd, + (const bstring *)&be_const_str_o, + (const bstring *)&be_const_str__rmt, + (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, + (const bstring *)&be_const_str_deinit, NULL, - (const bstring *)&be_const_str__X3E, - (const bstring *)&be_const_str_decompress, - (const bstring *)&be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback, - (const bstring *)&be_const_str_RES_OK, - (const bstring *)&be_const_str_load_templates, - (const bstring *)&be_const_str_COLOR_WHITE, - (const bstring *)&be_const_str_readline, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, - (const bstring *)&be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, - (const bstring *)&be_const_str_consume_stereo, - (const bstring *)&be_const_str_content_flush, - (const bstring *)&be_const_str_show, + (const bstring *)&be_const_str_every_100ms, + (const bstring *)&be_const_str__drivers, + (const bstring *)&be_const_str_RGBW, + (const bstring *)&be_const_str_light_to_id, + (const bstring *)&be_const_str_tr, + (const bstring *)&be_const_str_SERIAL_7O2, + (const bstring *)&be_const_str_encrypt, + (const bstring *)&be_const_str_eth, + (const bstring *)&be_const_str_SERIAL_6E2, + (const bstring *)&be_const_str_invalid_X20GPIO_X20number, + (const bstring *)&be_const_str_adv_cb, + (const bstring *)&be_const_str_Restart_X201, + (const bstring *)&be_const_str_before_del, (const bstring *)&be_const_str_SERIAL_5O1, - (const bstring *)&be_const_str_AudioOpusDecoder, - (const bstring *)&be_const_str_EC_C25519 + (const bstring *)&be_const_str_escape, + (const bstring *)&be_const_str_draw_arc_dsc_init, + (const bstring *)&be_const_str_decompress, + (const bstring *)&be_const_str_get_temp, + (const bstring *)&be_const_str__cmd, + (const bstring *)&be_const_str_ins_time, + (const bstring *)&be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback, + (const bstring *)&be_const_str_pc_abs, + (const bstring *)&be_const_str__X2D, + (const bstring *)&be_const_str_can_show, + (const bstring *)&be_const_str__X2F_X2Eautoconf, + (const bstring *)&be_const_str__X2Esize, + (const bstring *)&be_const_str_COLOR_BLACK, + (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, + (const bstring *)&be_const_str_set, + (const bstring *)&be_const_str_AudioFileSourceFS, + (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, + (const bstring *)&be_const_str_None, + (const bstring *)&be_const_str_SERIAL_7E1, + (const bstring *)&be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_driver_name, + (const bstring *)&be_const_str_cosh, + (const bstring *)&be_const_str_resolvecmnd, + (const bstring *)&be_const_str_ip, + (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, + (const bstring *)&be_const_str_get, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + (const bstring *)&be_const_str_add_header, + (const bstring *)&be_const_str_every_50ms, + NULL, + (const bstring *)&be_const_str_send_multicast, + (const bstring *)&be_const_str_RGBCT, + (const bstring *)&be_const_str_cb_obj, + (const bstring *)&be_const_str_allocated, + (const bstring *)&be_const_str_available, + (const bstring *)&be_const_str_SERIAL_7O1, + (const bstring *)&be_const_str_assert, + (const bstring *)&be_const_str_set_light, + (const bstring *)&be_const_str_file, + (const bstring *)&be_const_str_Auto_X2Dconfiguration, + (const bstring *)&be_const_str__X3D_X3D, + NULL, + (const bstring *)&be_const_str_wifi_bars_icon, + (const bstring *)&be_const_str_remote_ip, + (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, + (const bstring *)&be_const_str_SERIAL_5N1, + (const bstring *)&be_const_str_insert, + (const bstring *)&be_const_str__X23init_X2Ebat, + (const bstring *)&be_const_str_add_rule, + (const bstring *)&be_const_str_wire1, + (const bstring *)&be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, + (const bstring *)&be_const_str_strptime, + (const bstring *)&be_const_str__X22, + (const bstring *)&be_const_str__X2Flights_X2F, + (const bstring *)&be_const_str_SERIAL_6O2, + (const bstring *)&be_const_str_width, + NULL, + (const bstring *)&be_const_str_SERIAL_8O1, + (const bstring *)&be_const_str_CFG_X3A_X20loading_X20, + (const bstring *)&be_const_str_SERIAL_5E2, + (const bstring *)&be_const_str_ins_ramp, + (const bstring *)&be_const_str_gc, + (const bstring *)&be_const_str__X3E, + NULL, + (const bstring *)&be_const_str_attrdump, + (const bstring *)&be_const_str__X2E_X2E, + (const bstring *)&be_const_str__X5B, + NULL, + (const bstring *)&be_const_str_get_option, + (const bstring *)&be_const_str_AudioOutputI2S, + (const bstring *)&be_const_str_widget_cb, + (const bstring *)&be_const_str__global_def, + (const bstring *)&be_const_str_solidified, + (const bstring *)&be_const_str_refr_size, + NULL, + (const bstring *)&be_const_str_arg_name, + (const bstring *)&be_const_str_run_deferred, + (const bstring *)&be_const_str_to_gamma, + (const bstring *)&be_const_str_color, + (const bstring *)&be_const_str_EVENT_DRAW_PART_BEGIN, + (const bstring *)&be_const_str_pin, + (const bstring *)&be_const_str_y, + (const bstring *)&be_const_str_set_alternate, + (const bstring *)&be_const_str__X2Eautoconf, + NULL, + NULL, + (const bstring *)&be_const_str_set_ldo_enable, + (const bstring *)&be_const_str_cb_do_nothing, + (const bstring *)&be_const_str_AudioOutput, + NULL, + (const bstring *)&be_const_str_rand, + (const bstring *)&be_const_str_EC_C25519, + (const bstring *)&be_const_str_obj_class_create_obj, + (const bstring *)&be_const_str_add_event_cb, + (const bstring *)&be_const_str_on, + NULL, + (const bstring *)&be_const_str__error, + (const bstring *)&be_const_str_pi, + (const bstring *)&be_const_str__X23, + (const bstring *)&be_const_str_lv_obj, + NULL, + (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, + (const bstring *)&be_const_str_read8, + (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, + (const bstring *)&be_const_str_HTTP_POST, + (const bstring *)&be_const_str_SERIAL_5E1, + NULL, + (const bstring *)&be_const_str_EVENT_DRAW_PART_END, + (const bstring *)&be_const_str__X3F, + (const bstring *)&be_const_str_internal_error, + NULL, + (const bstring *)&be_const_str_member, + (const bstring *)&be_const_str_content_button, + (const bstring *)&be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus, + NULL, + (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, + (const bstring *)&be_const_str_strftime, + (const bstring *)&be_const_str_b, + (const bstring *)&be_const_str_get_size, + (const bstring *)&be_const_str_input, + (const bstring *)&be_const_str_imax, + (const bstring *)&be_const_str__anonymous_, + NULL, + (const bstring *)&be_const_str_check_privileged_access, + (const bstring *)&be_const_str_set_style_bg_color, + (const bstring *)&be_const_str_every_second, + NULL, + (const bstring *)&be_const_str__X2F_X3Frst_X3D, + (const bstring *)&be_const_str_INTERNAL_PDM, + (const bstring *)&be_const_str_BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27, + (const bstring *)&be_const_str_code, + NULL, + (const bstring *)&be_const_str_tasmota, + (const bstring *)&be_const_str_font_embedded, + (const bstring *)&be_const_str_RES_OK, + (const bstring *)&be_const_str_SERIAL_5O2, + NULL, + NULL, + (const bstring *)&be_const_str_AudioFileSource, + (const bstring *)&be_const_str_img, + (const bstring *)&be_const_str_json_fdump, + (const bstring *)&be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, + (const bstring *)&be_const_str_fast_loop, + (const bstring *)&be_const_str_set_power, + (const bstring *)&be_const_str__X20, + (const bstring *)&be_const_str_signal_change, + (const bstring *)&be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range, + (const bstring *)&be_const_str__settings_def, + (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, + (const bstring *)&be_const_str__X2A, + (const bstring *)&be_const_str_ismethod, + (const bstring *)&be_const_str_button_pressed, + (const bstring *)&be_const_str_next_cron, + (const bstring *)&be_const_str_json_fdump_list, + (const bstring *)&be_const_str__X3C, + (const bstring *)&be_const_str__class, + (const bstring *)&be_const_str_, + (const bstring *)&be_const_str_get_input_power_status, + (const bstring *)&be_const_str_EVENT_DELETE, + NULL, + (const bstring *)&be_const_str_nan, + NULL, + (const bstring *)&be_const_str_while, + (const bstring *)&be_const_str_MAX_RMT, + (const bstring *)&be_const_str_EXTERNAL_I2S, + (const bstring *)&be_const_str_end, + NULL, + (const bstring *)&be_const_str_dac_voltage, + (const bstring *)&be_const_str_PART_MAIN, + (const bstring *)&be_const_str_adv_block, + (const bstring *)&be_const_str_begin, + (const bstring *)&be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E, + (const bstring *)&be_const_str_alternate, + (const bstring *)&be_const_str_number, + (const bstring *)&be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, + (const bstring *)&be_const_str_Trigger, + (const bstring *)&be_const_str_floor, + (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, + NULL, + (const bstring *)&be_const_str_cos, + (const bstring *)&be_const_str_light, + (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str__X3D_X3C_X3E_X21, + (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize, + (const bstring *)&be_const_str__X2D_X2A, + (const bstring *)&be_const_str_asin, + (const bstring *)&be_const_str_reverse, + (const bstring *)&be_const_str_constructor_cb, + (const bstring *)&be_const_str_animators, + (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, + (const bstring *)&be_const_str__filename, + (const bstring *)&be_const_str_get_style_bg_color, + (const bstring *)&be_const_str_SERIAL_6O1, + (const bstring *)&be_const_str_day, + (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str__X2B, + (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, + (const bstring *)&be_const_str_publish_result, + (const bstring *)&be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker, + NULL, + (const bstring *)&be_const_str__X3D, + (const bstring *)&be_const_str__ptr, + (const bstring *)&be_const_str_get_style_line_color, + (const bstring *)&be_const_str_TASMOTA, + (const bstring *)&be_const_str__X2Ep, + NULL, + NULL, + (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, + (const bstring *)&be_const_str_pop_path, + (const bstring *)&be_const_str_matrix, + NULL, + (const bstring *)&be_const_str_lv_coord_arr, + NULL, + (const bstring *)&be_const_str_get_height, + (const bstring *)&be_const_str_GET, + (const bstring *)&be_const_str_arc_dsc, + (const bstring *)&be_const_str_setmember, + (const bstring *)&be_const_str__p, + (const bstring *)&be_const_str_BECDFE, + (const bstring *)&be_const_str_CFG_X3A_X20running_X20, + (const bstring *)&be_const_str_every_250ms, + (const bstring *)&be_const_str__X2Ep1, + (const bstring *)&be_const_str_obj, + (const bstring *)&be_const_str_HTTP_GET, + (const bstring *)&be_const_str_seti, + (const bstring *)&be_const_str_import, + (const bstring *)&be_const_str__X0A, + (const bstring *)&be_const_str_arg_size, + (const bstring *)&be_const_str_WS2812, + (const bstring *)&be_const_str__archive, + (const bstring *)&be_const_str_CFG_X3A_X20return_code_X3D_X25i, + (const bstring *)&be_const_str_area, + (const bstring *)&be_const_str_setrange, + (const bstring *)&be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, + (const bstring *)&be_const_str_add_cmd, + (const bstring *)&be_const_str_set_temp, + (const bstring *)&be_const_str_get_vbus_voltage, + (const bstring *)&be_const_str_connect, + (const bstring *)&be_const_str_set_align, + (const bstring *)&be_const_str_EVENT_DRAW_MAIN, + (const bstring *)&be_const_str_font_seg7, + (const bstring *)&be_const_str_exec_tele, + (const bstring *)&be_const_str_model, + (const bstring *)&be_const_str_consume_stereo, + (const bstring *)&be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, + (const bstring *)&be_const_str_running, + (const bstring *)&be_const_str_point, + NULL, + NULL, + NULL, + (const bstring *)&be_const_str_BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29, + (const bstring *)&be_const_str_char, + NULL, + (const bstring *)&be_const_str_AudioGeneratorWAV, + (const bstring *)&be_const_str__X25s_X2Eautoconf, + (const bstring *)&be_const_str_a, + (const bstring *)&be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, + (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, + NULL, + (const bstring *)&be_const_str__X21_X3D_X3D, + (const bstring *)&be_const_str_call_native, + (const bstring *)&be_const_str_content_stop, + NULL, + (const bstring *)&be_const_str_compile, + NULL, + (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, + (const bstring *)&be_const_str_assign_rmt, + (const bstring *)&be_const_str__X2Ep2, + NULL, + (const bstring *)&be_const_str_delay, + (const bstring *)&be_const_str_make_cb, + (const bstring *)&be_const_str_deg, + (const bstring *)&be_const_str_enabled, + (const bstring *)&be_const_str_getfloat, + (const bstring *)&be_const_str_content_start, + NULL, + NULL, + NULL, + (const bstring *)&be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + NULL, + (const bstring *)&be_const_str_p2, + (const bstring *)&be_const_str_pc_rel, + (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, + (const bstring *)&be_const_str__buffer, + (const bstring *)&be_const_str_pct, + (const bstring *)&be_const_str_lv_module_init, + (const bstring *)&be_const_str__X3E_X3D, + (const bstring *)&be_const_str_event_cb, + (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, + (const bstring *)&be_const_str_counters, + (const bstring *)&be_const_str__debug_present, + (const bstring *)&be_const_str_is_running, + (const bstring *)&be_const_str_name, + (const bstring *)&be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, + (const bstring *)&be_const_str_as, + (const bstring *)&be_const_str_get_width, + NULL, + (const bstring *)&be_const_str_display, + (const bstring *)&be_const_str_ctypes_bytes, + (const bstring *)&be_const_str_isnan, + (const bstring *)&be_const_str_remove_timer, + (const bstring *)&be_const_str__begin_transmission, + (const bstring *)&be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, + (const bstring *)&be_const_str_finish, + NULL, + (const bstring *)&be_const_str__X22_X3A, + (const bstring *)&be_const_str__X2Fstate_X2F, + NULL, + (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X20, + (const bstring *)&be_const_str_iter, + (const bstring *)&be_const_str_public_key, + (const bstring *)&be_const_str_log, + (const bstring *)&be_const_str_atleast1, + (const bstring *)&be_const_str_AXP192, + (const bstring *)&be_const_str_lv_obj_class, + (const bstring *)&be_const_str_valuer_error, + (const bstring *)&be_const_str_codedump, + (const bstring *)&be_const_str_add_cron, + (const bstring *)&be_const_str_classname, + (const bstring *)&be_const_str_digital_write, + NULL, + (const bstring *)&be_const_str__available, + (const bstring *)&be_const_str_del, + (const bstring *)&be_const_str_asstring, + (const bstring *)&be_const_str_local, + (const bstring *)&be_const_str_lv_wifi_bars_icon, + (const bstring *)&be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_contains, + (const bstring *)&be_const_str_Parameter_X20error, + (const bstring *)&be_const_str_Unknown, + (const bstring *)&be_const_str_Leds, + (const bstring *)&be_const_str_missing_X20name, + (const bstring *)&be_const_str_chars_in_string, + (const bstring *)&be_const_str__X2E, + (const bstring *)&be_const_str__X2Etapp, + NULL, + (const bstring *)&be_const_str_settings, + (const bstring *)&be_const_str__fl, + (const bstring *)&be_const_str_get_log, + NULL, + (const bstring *)&be_const_str_pin_mode, + NULL, + (const bstring *)&be_const_str__X5D, + (const bstring *)&be_const_str__X3A, + (const bstring *)&be_const_str_wifi, + (const bstring *)&be_const_str_bytes, + NULL, + (const bstring *)&be_const_str_set_x, + (const bstring *)&be_const_str__X3Clambda_X3E, + (const bstring *)&be_const_str_get_string, + (const bstring *)&be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, + (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, + (const bstring *)&be_const_str_format, + (const bstring *)&be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str_load, + (const bstring *)&be_const_str_exp, + (const bstring *)&be_const_str_gen_cb, + NULL, + (const bstring *)&be_const_str_AES_GCM, + (const bstring *)&be_const_str_SERIAL_6N2, + (const bstring *)&be_const_str_has, + (const bstring *)&be_const_str_add_driver, + (const bstring *)&be_const_str_set_zoom, + (const bstring *)&be_const_str_byte, + (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E }; static const struct bconststrtab m_const_string_table = { - .size = 464, - .count = 951, + .size = 465, + .count = 953, .table = m_string_table }; diff --git a/lib/libesp32/berry/generate/be_fixed_be_class_BLE.h b/lib/libesp32/berry/generate/be_fixed_be_class_BLE.h index 0b2b907db..3cc8df740 100644 --- a/lib/libesp32/berry/generate/be_fixed_be_class_BLE.h +++ b/lib/libesp32/berry/generate/be_fixed_be_class_BLE.h @@ -1,17 +1,19 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_BLE_map) { - { be_const_key(set_chr, -1), be_const_func(be_BLE_set_characteristic) }, - { be_const_key(set_svc, -1), be_const_func(be_BLE_set_service) }, - { be_const_key(run, -1), be_const_func(be_BLE_run) }, - { be_const_key(conn_cb, 0), be_const_func(be_BLE_reg_conn_cb) }, - { be_const_key(adv_cb, 1), be_const_func(be_BLE_reg_adv_cb) }, + { be_const_key(adv_block, -1), be_const_func(be_BLE_adv_block) }, + { be_const_key(conn_cb, -1), be_const_func(be_BLE_reg_conn_cb) }, + { be_const_key(adv_cb, 5), be_const_func(be_BLE_reg_adv_cb) }, { be_const_key(set_MAC, -1), be_const_func(be_BLE_set_MAC) }, + { be_const_key(adv_watch, -1), be_const_func(be_BLE_adv_watch) }, + { be_const_key(run, -1), be_const_func(be_BLE_run) }, + { be_const_key(set_svc, 4), be_const_func(be_BLE_set_service) }, + { be_const_key(set_chr, 3), be_const_func(be_BLE_set_characteristic) }, }; static be_define_const_map( be_class_BLE_map, - 6 + 8 ); BE_EXPORT_VARIABLE be_define_const_class( From 4942bf6d92996dbac35c92b7e6ae3643e6b77163 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 25 Mar 2022 11:36:28 +0100 Subject: [PATCH 279/355] Fix EnergyConfig regression --- tasmota/xdrv_03_energy.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index 00582c5c0..449d70b0f 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -854,6 +854,7 @@ void CmndModuleAddress(void) { void CmndEnergyConfig(void) { Energy.command_code = CMND_ENERGYCONFIG; if (XnrgCall(FUNC_COMMAND)) { + ResponseClear(); if (!ResponseLength()) { ResponseCmndDone(); } From bc8dd19350d08468f0b9e0c4953616e77f797745 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 25 Mar 2022 12:03:20 +0100 Subject: [PATCH 280/355] Fix Shelly3EM L3 init --- tasmota/xnrg_23_ade7880.ino | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index c7cb4cdb7..d234e398d 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -388,6 +388,8 @@ bool Ade7880Init(void) { Ade7880WriteVerify(ADE7880_APHCAL + phase, Ade7880.calib_angle[phase]); // 0xE614 } Ade7880WriteVerify(ADE7880_NIGAIN, Ade7880.calib_current[3]); // 0x4386 + Ade7880WriteVerify(ADE7880_NIGAIN, Ade7880.calib_current[3]); // 0x4386 - Multiple writes to store queued data + Ade7880WriteVerify(ADE7880_NIGAIN, Ade7880.calib_current[3]); // 0x4386 bool error = false; for (uint32_t phase = 0; phase < 3; phase++) { if (Ade7880ReadVerify(ADE7880_AVGAIN + (phase * 2)) != (Ade7880.calib_voltage[phase] & 0x0FFFFFFF)) { error = true; } @@ -406,7 +408,8 @@ bool Ade7880Init(void) { AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error setting LCYCMODE register")); return false; } - if (!Ade7880WriteVerify(ADE7880_LINECYC, 0x0064)) { // 0xE60C - = 100 + uint32_t line_cycle = (Ade7880.calib_frequency) ? 120 : 100; // Either 60Hz or 50Hz to have 1 second interrupts + if (!Ade7880WriteVerify(ADE7880_LINECYC, line_cycle)) { // 0xE60C - = 100 AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error setting LINECYC register")); return false; } @@ -659,6 +662,19 @@ bool Ade7880Command(void) { // EnergyConfig {"rms":{"voltage_c":-549854}} // EnergyCOnfig {"freq":0} if (XdrvMailbox.data_len) { +#ifdef ADE7880_DEBUG + if ('1' == XdrvMailbox.data[0]) { + char data[600] = { 0 }; + for (uint32_t i = 0; i < 57; i++) { + int32_t value = Ade7880Read(ADE7880_AIGAIN + i); +// snprintf_P(data, sizeof(data), PSTR("%s%s%08X"), data, (i)?",":"", value); + if (bitRead(value, 27)) { value |= 0xF0000000; } // Make negative + snprintf_P(data, sizeof(data), PSTR("%s%s%d"), data, (i)?",":"", value); + } + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: DSP Regs 0x4380..B9 '%s'"), data); + return true; + } +#endif // ADE7880_DEBUG Ade7880Defaults(); // Load defaults if (Ade7880SetDefaults(XdrvMailbox.data)) { bool status = Ade7880SetCalibrate(); From 2f45083e00c2bab2be42b20fa00261269fe8efbb Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 25 Mar 2022 15:58:24 +0100 Subject: [PATCH 281/355] Add comments to Shelly3EM --- tasmota/xnrg_23_ade7880.ino | 66 ++++++++++++++----------------------- 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index d234e398d..78236d8a1 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -14,7 +14,7 @@ * * {"NAME":"Shelly 3EM","GPIO":[1,1,288,1,32,8065,0,0,640,8064,608,224,8096,0],"FLAG":0,"BASE":18} * - * Based on datasheet from https://www.analog.com/en/products/ade7880.html + * Based on datasheet from https://www.analog.com/en/products/ade7880.html Rev.C * * I2C Address: 0x38 ********************************************************************************************* @@ -36,8 +36,6 @@ /*********************************************************************************************/ -#define ADE7880_ENERGY_OPTION // Use energy pulse for calculation energy usage - //#define ADE7880_DEBUG //#define ADE7880_PROFILING @@ -58,6 +56,8 @@ #define ADE7880_CPGAIN_INIT -1351979 // powers, totactive, c enum Ade7880DspRegisters { + // Register Name Addres R/W Bt CommBln Ty Default Description + // ---------------------------- ------ --- -- ------- -- ---------- -------------------------------------------------------------------- ADE7880_AIGAIN = 0x4380, // 0x4380 R/W 24 32 ZPSE S 0x000000 Phase A current gain adjust. ADE7880_AVGAIN, // 0x4381 R/W 24 32 ZPSE S 0x000000 Phase A voltage gain adjust. ADE7880_BIGAIN, // 0x4382 R/W 24 32 ZPSE S 0x000000 Phase B current gain adjust. @@ -252,7 +252,6 @@ enum Ade7880PowerQualityRegisters { }; struct Ade7880 { - int32_t active_energy[3]; int32_t calib_current[4]; int32_t calib_voltage[3]; int32_t calib_acpower[3]; @@ -381,15 +380,17 @@ bool Ade7880Init(void) { if (Ade7880.calib_frequency) { Ade7880WriteVerify(ADE7880_COMPMODE, 0x41FF); // 0xE60E - Connected to networks with fundamental frequencies between 55 Hz and 66 Hz. Default is 45 Hz and 55 Hz. } + for (uint32_t phase = 0; phase < 3; phase++) { Ade7880WriteVerify(ADE7880_AVGAIN + (phase * 2), Ade7880.calib_voltage[phase]); // 0x4381 Ade7880WriteVerify(ADE7880_AIGAIN + (phase * 2), Ade7880.calib_current[phase]); // 0x4380 Ade7880WriteVerify(ADE7880_APGAIN + (phase * 2), Ade7880.calib_acpower[phase]); // 0x4389 Ade7880WriteVerify(ADE7880_APHCAL + phase, Ade7880.calib_angle[phase]); // 0xE614 } - Ade7880WriteVerify(ADE7880_NIGAIN, Ade7880.calib_current[3]); // 0x4386 - Ade7880WriteVerify(ADE7880_NIGAIN, Ade7880.calib_current[3]); // 0x4386 - Multiple writes to store queued data - Ade7880WriteVerify(ADE7880_NIGAIN, Ade7880.calib_current[3]); // 0x4386 + Ade7880WriteVerify(ADE7880_NIGAIN, Ade7880.calib_current[3]); // 0x4386 + Ade7880WriteVerify(ADE7880_NIGAIN, Ade7880.calib_current[3]); // 0x4386 - Write last data memory RAM three times (page 40) + Ade7880WriteVerify(ADE7880_NIGAIN, Ade7880.calib_current[3]); // 0x4386 + bool error = false; for (uint32_t phase = 0; phase < 3; phase++) { if (Ade7880ReadVerify(ADE7880_AVGAIN + (phase * 2)) != (Ade7880.calib_voltage[phase] & 0x0FFFFFFF)) { error = true; } @@ -402,6 +403,7 @@ bool Ade7880Init(void) { AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error initializing parameters")); return false; } + if (!Ade7880WriteVerify(ADE7880_LCYCMODE, 0x09)) { // 0xE702 - Line cycle accumulation mode // - Watt-hour accumulation registers (AWATTHR, BWATTHR, CWATTHR, AFWATTHR, BFWATTHR, and CFWATTHR) are placed into line cycle accumulation mode. // - Phase A is selected for zero-crossings counts in the line cycle accumulation mode. @@ -419,8 +421,6 @@ bool Ade7880Init(void) { return false; } Ade7880Write(ADE7880_MASK0, 0x00000020); // 0xE50A - Ade7880Write(ADE7880_MASK0, 0x00000020); // 0xE50A - Ade7880Write(ADE7880_MASK0, 0x00000020); // 0xE50A Ade7880Write(ADE7880_DSPWP_SEL, 0xAD); // 0xE7FE - Select DSP write protection Ade7880Write(ADE7880_DSPWP_SET, 0x80); // 0xE7E3 - Write protect DSP area Ade7880WriteVerify(ADE7880_Run, 0x0201); // 0xE228 - Start DSP @@ -448,7 +448,7 @@ bool Ade7880SetCalibrate(void) { Ade7880.cycle_count = 2; // Skip first two cycles - uint32_t timeout = millis() + 40; // Should be reset within 10 ms + uint32_t timeout = millis() + 100; // Should be reset within 10 ms while (!TimeReached(timeout)) { // Wait up to 100 ms if (!digitalRead(Pin(GPIO_ADE7880_IRQ, 1))) { @@ -485,20 +485,19 @@ void Ade7880Cycle(void) { } for (uint32_t phase = 0; phase < 3; phase++) { Energy.data_valid[phase] = 0; - Energy.voltage[phase] = (float)Ade7880ReadVerify(ADE7880_AVRMS + (phase * 2)) / 10000; // 0x43C1 - 0x0024CC94 = 241.1668 V - Energy.current[phase] = (float)Ade7880ReadVerify(ADE7880_AIRMS + (phase * 2)) / 100000; // 0x43C0 - 0x00002D6D = 0.11629 A - Energy.active_power[phase] = (float)Ade7880ReadVerify(ADE7880_AWATT + phase) / 100; // 0xE513 - 0xFFFFF524 = -27.79 W - Energy.apparent_power[phase] = (float)Ade7880ReadVerify(ADE7880_AVA + phase) / 100; // 0xE519 - 0xFFFFF50D - Energy.frequency[phase] = 256000.0f / Ade7880ReadVerify(ADE7880_APERIOD + phase); // 0xE905 - Page 34 and based on ADE7880_FREQ_INIT - Ade7880.active_energy[phase] = Ade7880ReadVerify(ADE7880_AWATTHR + phase); // 0xE400 - 0xFFFFFF8F = -0.112 -#ifdef ADE7880_ENERGY_OPTION - if (Ade7880.active_energy[phase] != 0) { - // Suppose constant load during period of 100 periods as set by ADE7880_LINECYC disregards load change inbetween. + Energy.voltage[phase] = (float)Ade7880ReadVerify(ADE7880_AVRMS + (phase * 2)) / 10000; // 0x43C1 - 0x0024CC94 = 241.1668 V + Energy.current[phase] = (float)Ade7880ReadVerify(ADE7880_AIRMS + (phase * 2)) / 100000; // 0x43C0 - 0x00002D6D = 0.11629 A + Energy.active_power[phase] = (float)Ade7880ReadVerify(ADE7880_AWATT + phase) / 100; // 0xE513 - 0xFFFFF524 = -27.79 W + Energy.apparent_power[phase] = (float)Ade7880ReadVerify(ADE7880_AVA + phase) / 100; // 0xE519 - 0xFFFFF50D + Energy.frequency[phase] = 256000.0f / Ade7880ReadVerify(ADE7880_APERIOD + phase); // 0xE905 - Page 34 and based on ADE7880_FREQ_INIT + int32_t active_energy = Ade7880ReadVerify(ADE7880_AWATTHR + phase); // 0xE400 - 0xFFFFFF8F = -0.112 + if (active_energy != 0) { + // Suppose constant load during period of 100/120 periods as set by ADE7880_LINECYC disregards load change inbetween. // ADE7880_AWATT = 6713 = 67,13 W // 67,13 * 1000 / 36 = 1864 decaWh // Energy.kWhtoday_delta[phase] += Energy.active_power[phase] * 1000 / 36; - // By measuring load 1024000 times/second load change in 100 periods can be accounted for. + // By measuring load 1024000 times/second load change in 100/120 periods can be accounted for. // ADE7880_AWATT = 6713 = 67,13 W // ADE7880_AWATTHR = 273 // AWATT multiplier is 16 (Figure 77) @@ -510,14 +509,11 @@ void Ade7880Cycle(void) { // 273 * 402653184 / 16384000 = 6709 = 67,09W * 1000 / 36 = 1863 decaWh (Tasmota needs decaWh) // 273 * 402653184 / 16384 = 6709248 = 67092,48W / 3600 = 1863 decaWh // 273 * 24576 = 6709248 / 3600 = 1863 decaWh - Energy.kWhtoday_delta[phase] += Ade7880.active_energy[phase] * 24576 / 3600; + Energy.kWhtoday_delta[phase] += active_energy * 24576 / 3600; } -#endif // ADE7880_ENERGY_OPTION } EnergyUpdateToday(); -// AddLog(LOG_LEVEL_DEBUG, PSTR("A78: WattHr %d/%d/%d"), Ade7880.active_energy[0], Ade7880.active_energy[1], Ade7880.active_energy[2]); - #ifdef ADE7880_PROFILING AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Cycle in %d ms"), millis() - start); #endif // ADE7880_PROFILING @@ -540,17 +536,6 @@ void IRAM_ATTR Ade7880Isr0(void) { /*********************************************************************************************/ -#ifndef ADE7880_ENERGY_OPTION -void Ade7880EnergyEverySecond(void) { - for (uint32_t i = 0; i < 3; i++) { - if (Ade7880.active_energy[i] != 0) { - Energy.kWhtoday_delta[i] += Energy.active_power[i] * 1000 / 36; - } - } - EnergyUpdateToday(); -} -#endif // Not ADE7880_ENERGY_OPTION - bool Ade7880SetDefaults(const char* json) { // {"rms":{"current_a":3166385,"current_b":3125691,"current_c":3131983,"current_s":1756557,"voltage_a":-767262,"voltage_b":-763439,"voltage_c":-749854},"angles":{"angle0":180,"angle1":176,"angle2":176},"powers":{"totactive": {"a":-1345820,"b":-1347328,"c":-1351979}},"freq":0} uint32_t len = strlen(json) +1; @@ -658,17 +643,19 @@ bool Ade7880Command(void) { bool serviced = false; if (CMND_ENERGYCONFIG == Energy.command_code) { + // Non-pesistent settings // EnergyConfig {"rms":{"current_a":3166385,"current_b":3125691,"current_c":3131983,"current_s":1756557,"voltage_a":-767262,"voltage_b":-763439,"voltage_c":-749854},"angles":{"angle0":180,"angle1":176,"angle2":176},"powers":{"totactive": {"a":-1345820,"b":-1347328,"c":-1351979}},"freq":0} // EnergyConfig {"rms":{"voltage_c":-549854}} - // EnergyCOnfig {"freq":0} + // EnergyConfig {"freq":0} if (XdrvMailbox.data_len) { #ifdef ADE7880_DEBUG if ('1' == XdrvMailbox.data[0]) { + // EnergyConfig 1 - Dump DSP data memory (0x4380..0x43B9) char data[600] = { 0 }; for (uint32_t i = 0; i < 57; i++) { int32_t value = Ade7880Read(ADE7880_AIGAIN + i); // snprintf_P(data, sizeof(data), PSTR("%s%s%08X"), data, (i)?",":"", value); - if (bitRead(value, 27)) { value |= 0xF0000000; } // Make negative + if (bitRead(value, 27)) { value |= 0xF0000000; } // Make 32-bit negative (ZPSE) snprintf_P(data, sizeof(data), PSTR("%s%s%d"), data, (i)?",":"", value); } AddLog(LOG_LEVEL_DEBUG, PSTR("A78: DSP Regs 0x4380..B9 '%s'"), data); @@ -709,11 +696,6 @@ bool Xnrg23(uint8_t function) { case FUNC_LOOP: if (Ade7880.irq0_state) { Ade7880Service0(); } break; -#ifndef ADE7880_ENERGY_OPTION - case FUNC_ENERGY_EVERY_SECOND: - Ade7880EnergyEverySecond(); - break; -#endif // Not ADE7880_ENERGY_OPTION case FUNC_COMMAND: result = Ade7880Command(); break; From 1b04a004885da9667efec717865a5ebab240dc60 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 25 Mar 2022 16:27:57 +0100 Subject: [PATCH 282/355] Add command ``SetOption136 1`` Add command ``SetOption136 1`` to disable single sensor reports from Tuya devices while keeping teleperiod reports (#15216) --- CHANGELOG.md | 1 + RELEASENOTES.md | 2 ++ tools/decode-status.py | 5 ++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf8285f54..396fbd347 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file. - Command ``RtcNtpserver 0/1`` to enable Tasmota NTP server when enabled by define ``RTC_NTP_SERVER`` - NeoPool JSON modules, power module, cell info, chlorine, conductivity and ionization - Support for up to four DS3502 digital potentiometers with command ``Wiper 0..127`` +- Command ``SetOption136 1`` to disable single sensor reports from Tuya devices while keeping teleperiod reports (#15216) ### Changed - Consolidate three RTC chip drivers (DS3231, BM8563, PCF85363) into one driver updating RTC as soon as possible after restart diff --git a/RELEASENOTES.md b/RELEASENOTES.md index c45f4ac96..2fa2bd507 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -105,6 +105,8 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo ## Changelog v11.0.0.4 ### Added +- Command ``SetOption135 1`` to disable LVGL splash screen +- Command ``SetOption136 1`` to disable single sensor reports from Tuya devices while keeping teleperiod reports [#15216](https://github.com/arendst/Tasmota/issues/15216) - Command ``SspmMap 0`` to reset Sonoff SPM default mapping - Command ``TcpConnect `` to add client connection mode [#14874](https://github.com/arendst/Tasmota/issues/14874) - Command ``RfTimeout 100..60000`` to disable duplicate RfReceive. Default 1000 [#15061](https://github.com/arendst/Tasmota/issues/15061) diff --git a/tools/decode-status.py b/tools/decode-status.py index 32f1b8ec5..5e08d08b8 100755 --- a/tools/decode-status.py +++ b/tools/decode-status.py @@ -188,7 +188,10 @@ a_setoption = [[ "(Tuya) Allow save dimmer = 0 receved by MCU", "(TLS) Use fingerprint validation instead of CA based", "(Shift595) Invert outputs of 74x595 shift registers", - "","","","", + "(PWM) force PWM lights to start at same phase, default is to spread phases to minimze overlap (also needed for H-bridge)", + "(Display & LVGL) force disabling default splash screen", + "(TuyaSNS) When ON disable publish single SNS value on Tuya Receive (keep Teleperiod)", + "", "","","","", "","","","" ]] From 0c5f67709a0677cfaae44553fb00bee3db960da3 Mon Sep 17 00:00:00 2001 From: barbudor Date: Fri, 25 Mar 2022 22:28:05 +0100 Subject: [PATCH 283/355] fix %timerx% variable for negative values --- tasmota/xdrv_10_rules.ino | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino index 2b26107a7..53774d999 100644 --- a/tasmota/xdrv_10_rules.ino +++ b/tasmota/xdrv_10_rules.ino @@ -477,7 +477,11 @@ bool RulesRuleMatch(uint8_t rule_set, String &event, String &rule, bool stop_all if ((index > 0) && (index <= MAX_TIMERS)) { snprintf_P(stemp, sizeof(stemp), PSTR("%%TIMER%d%%"), index); if (rule_param.startsWith(stemp)) { - rule_param = String(Settings->timer[index -1].time); + int32_t timer = Settings->timer[index -1].time; + if (Settings->timer[index -1].mode && (timer >= 12*60)) { + timer = -(timer - (12*60)); + } + rule_param = String(timer); } } } @@ -796,7 +800,11 @@ bool RuleSetProcess(uint8_t rule_set, String &event_saved) #if defined(USE_TIMERS) for (uint32_t i = 0; i < MAX_TIMERS; i++) { snprintf_P(stemp, sizeof(stemp), PSTR("%%TIMER%d%%"), i +1); - RulesVarReplace(commands, stemp, String(Settings->timer[i].time)); + int32_t timer = Settings->timer[i].time; + if (Settings->timer[i].mode && (timer >= 12*60)) { + timer = -(timer - 12*60); + } + RulesVarReplace(commands, stemp, String(timer)); } #if defined(USE_SUNRISE) RulesVarReplace(commands, F("%SUNRISE%"), String(SunMinutes(0))); From c48ab570dd0ab096b7f26ace3b07163e121d9f95 Mon Sep 17 00:00:00 2001 From: Staars Date: Sat, 26 Mar 2022 10:52:45 +0100 Subject: [PATCH 284/355] refactoring conn task, bugfix, add response to op --- tasmota/xdrv_52_3_berry_MI32.ino | 10 +- tasmota/xsns_62_esp32_mi.h | 6 +- tasmota/xsns_62_esp32_mi.ino | 216 +++++++++++++++++++------------ 3 files changed, 144 insertions(+), 88 deletions(-) diff --git a/tasmota/xdrv_52_3_berry_MI32.ino b/tasmota/xdrv_52_3_berry_MI32.ino index 027d4892a..032e2e2ed 100644 --- a/tasmota/xdrv_52_3_berry_MI32.ino +++ b/tasmota/xdrv_52_3_berry_MI32.ino @@ -118,7 +118,7 @@ extern "C" { ********************************************************************/ extern void MI32setBerryAdvCB(void* function, uint8_t *buffer); extern void MI32setBerryConnCB(void* function, uint8_t *buffer); - extern bool MI32runBerryConnection(uint8_t operation); + extern bool MI32runBerryConnection(uint8_t operation, bool response); extern bool MI32setBerryCtxSvc(const char *Svc); extern bool MI32setBerryCtxChr(const char *Chr); extern bool MI32setBerryCtxMAC(uint8_t *MAC, uint8_t type); @@ -193,8 +193,12 @@ extern "C" { int be_BLE_run(bvm *vm); int be_BLE_run(bvm *vm){ int32_t argc = be_top(vm); // Get the number of arguments - if ((argc == 2) && be_isint(vm, 2)) { - if (MI32runBerryConnection(be_toint(vm, 2))) be_return(vm); + if ((argc > 1) && be_isint(vm, 2)) { + bool response = false; + if(argc == 3 && be_isint(vm, 3)){ + response = be_toint(vm,3)>0; + } + if (MI32runBerryConnection(be_toint(vm, 2),response)) be_return(vm); } be_raise(vm, kTypeError, nullptr); } diff --git a/tasmota/xsns_62_esp32_mi.h b/tasmota/xsns_62_esp32_mi.h index 190155160..f536c6c9c 100644 --- a/tasmota/xsns_62_esp32_mi.h +++ b/tasmota/xsns_62_esp32_mi.h @@ -154,6 +154,7 @@ struct MI32connectionContextBerry_t{ uint8_t addrType; int error; bool oneOp; + bool response; }; struct { @@ -180,6 +181,8 @@ struct { uint32_t didStartHAP:1; uint32_t triggerBerryAdvCB:1; uint32_t triggerBerryConnCB:1; + uint32_t triggerNextConnJob:1; + uint32_t readyForNextConnJob:1; }; uint32_t all = 0; } mode; @@ -382,7 +385,7 @@ const char * kMI32DeviceType[] PROGMEM = {kMI32DeviceType1,kMI32DeviceType2,kMI3 kMI32DeviceType9,kMI32DeviceType10,kMI32DeviceType11,kMI32DeviceType12, kMI32DeviceType13,kMI32DeviceType14,kMI32DeviceType15,kMI32DeviceType16}; -const char kMI32_ConnErrorMsg[] PROGMEM = "no Error|could not connect|got no service|got no characteristic|can not read|can not notify|can not write|did not write|notify time out"; +const char kMI32_ConnErrorMsg[] PROGMEM = "no Error|could not connect|did disconnect|got no service|got no characteristic|can not read|can not notify|can not write|did not write|notify time out"; const char kMI32_BLEInfoMsg[] PROGMEM = "Scan ended|Got Notification|Did connect|Did disconnect|Still connected|Start scanning"; @@ -407,6 +410,7 @@ enum MI32_TASK { enum MI32_ConnErrorMsg { MI32_CONN_NO_ERROR = 0, MI32_CONN_NO_CONNECT, + MI32_CONN_DID_DISCCONNECT, MI32_CONN_NO_SERVICE, MI32_CONN_NO_CHARACTERISTIC, MI32_CONN_CAN_NOT_READ, diff --git a/tasmota/xsns_62_esp32_mi.ino b/tasmota/xsns_62_esp32_mi.ino index b1485e148..f8814f0f9 100644 --- a/tasmota/xsns_62_esp32_mi.ino +++ b/tasmota/xsns_62_esp32_mi.ino @@ -22,6 +22,9 @@ -------------------------------------------------------------------------------------------- Version yyyymmdd Action Description -------------------------------------------------------------------------------------------- + 0.9.5.5 20220326 changed - refactored connection task for asynchronous op, add response option, + fixed MI32Key command + ------- 0.9.5.4 20220325 changed - add Berry adv_watch and adv_block to BLE class ------- 0.9.5.3 20220315 changed - reworked Berry part, active scanning and holding active connections possible, new format of advertisement buffer @@ -92,7 +95,9 @@ class MI32SensorCallback : public NimBLEClientCallbacks { } void onDisconnect(NimBLEClient* pclient) { MI32.mode.connected = 0; - MI32.infoMsg = MI32_DID_DISCONNECT; + MI32.infoMsg = MI32_DID_DISCONNECT; + MI32.conCtx->error = MI32_CONN_DID_DISCCONNECT; + MI32.mode.triggerBerryConnCB = 1; //mainly for unexpected or requested disconnects //AddLog(LOG_LEVEL_DEBUG,PSTR("disconnected")); } bool onConnParamsUpdateRequest(NimBLEClient* MI32Client, const ble_gap_upd_params* params) { @@ -169,12 +174,15 @@ void MI32scanEndedCB(NimBLEScanResults results){ void MI32notifyCB(NimBLERemoteCharacteristic* pRemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify){ if(MI32.mode.triggerBerryConnCB) return; //discard data, if we did not pass the old to Berry yet - MI32.infoMsg = MI32_GOT_NOTIFICATION; - MI32.conCtx->buffer[0] = (uint8_t)length; - memcpy(MI32.conCtx->buffer + 1, pData, length); - MI32.conCtx->returnCharUUID = pRemoteCharacteristic->getUUID().getNative()->u16.value; - MI32.mode.triggerBerryConnCB = 1; - MI32.mode.readingDone = 1; + if(isNotify){ + MI32.infoMsg = MI32_GOT_NOTIFICATION; + MI32.conCtx->buffer[0] = (uint8_t)length; + memcpy(MI32.conCtx->buffer + 1, pData, length); + MI32.conCtx->returnCharUUID = pRemoteCharacteristic->getUUID().getNative()->u16.value; + MI32.conCtx->operation = 103; + MI32.mode.triggerBerryConnCB = 1; + MI32.mode.readingDone = 1; + } } /*********************************************************************************************\ * Helper functions @@ -238,15 +246,13 @@ void MI32_ReverseMAC(uint8_t _mac[]){ void MI32AddKey(mi_bindKey_t keyMAC){ bool unknownMAC = true; - for(auto _sensor : MIBLEsensors){ + for(auto &_sensor : MIBLEsensors){ if(memcmp(keyMAC.MAC,_sensor.MAC,sizeof(keyMAC.MAC))==0){ - AddLog(LOG_LEVEL_DEBUG,PSTR("new key")); - uint8_t* _key = (uint8_t*) malloc(16); - memcpy(_key,keyMAC.key,16); - _sensor.key = _key; + _sensor.key = new uint8_t[16]; + memcpy(_sensor.key,keyMAC.key,16); unknownMAC=false; _sensor.status.hasWrongKey = 0; - AddLogBuffer(LOG_LEVEL_DEBUG,(uint8_t*) _sensor.key, 16); + AddLog(LOG_LEVEL_INFO,PSTR("add key to %s"),kMI32DeviceType[_sensor.type-1]); } } if(unknownMAC){ @@ -638,6 +644,7 @@ void MI32Init(void) { NimBLEDevice::init(""); AddLog(LOG_LEVEL_INFO,PSTR("M32: Init BLE device")); MI32.mode.init = 1; + MI32.mode.readyForNextConnJob = 1; MI32StartTask(MI32_TASK_SCAN); // Let's get started !! } #ifdef USE_MI_EXT_GUI @@ -653,12 +660,27 @@ void MI32Init(void) { \*********************************************************************************************/ extern "C" { - bool MI32runBerryConnection(uint8_t operation){ + bool MI32runBerryConnection(uint8_t operation, bool response){ if(MI32.conCtx != nullptr){ MI32.conCtx->oneOp = (operation > 9); MI32.conCtx->operation = operation%10; - AddLog(LOG_LEVEL_INFO,PSTR("M32: Berry connection op: %d, addrType: %d, oneOp: %u"),MI32.conCtx->operation, MI32.conCtx->addrType, MI32.conCtx->oneOp); - MI32StartConnectionTask(); + MI32.conCtx->response = response; + AddLog(LOG_LEVEL_DEBUG,PSTR("M32: Berry connection op: %d, addrType: %d, oneOp: %u, response: %u"),MI32.conCtx->operation, MI32.conCtx->addrType, MI32.conCtx->oneOp, MI32.conCtx->response); + if(MI32.conCtx->oneOp || MI32.conCtx->operation == 5){ //...or disconnect is requested + MI32StartConnectionTask(); + } + else{ + if(MI32.mode.connected){ + AddLog(LOG_LEVEL_DEBUG,PSTR("M32: continue connection job")); + MI32.mode.triggerNextConnJob = 1; + if(!MI32.mode.readyForNextConnJob){ + AddLog(LOG_LEVEL_DEBUG,PSTR("M32: old connection job not finished yet!!")); + } + } + else{ + MI32StartConnectionTask(); //first job of many or unexpected disconnect + } + } return true; } return false; @@ -676,7 +698,7 @@ extern "C" { bool MI32setBerryCtxSvc(const char *Svc){ if(MI32.conCtx != nullptr){ MI32.conCtx->serviceUUID = NimBLEUUID(Svc); - AddLog(LOG_LEVEL_INFO,PSTR("M32: SVC: %s"),MI32.conCtx->serviceUUID.toString().c_str()); + AddLog(LOG_LEVEL_DEBUG,PSTR("M32: SVC: %s"),MI32.conCtx->serviceUUID.toString().c_str()); return true; } return false; @@ -685,10 +707,10 @@ extern "C" { bool MI32setBerryCtxChr(const char *Chr){ if(MI32.conCtx != nullptr){ MI32.conCtx->charUUID = NimBLEUUID(Chr); - AddLog(LOG_LEVEL_INFO,PSTR("M32: CHR: %s"),MI32.conCtx->charUUID.toString().c_str()); + AddLog(LOG_LEVEL_DEBUG,PSTR("M32: CHR: %s"),MI32.conCtx->charUUID.toString().c_str()); uint16_t _uuid = MI32.conCtx->charUUID.getNative()->u16.value; //if not "notify op" -> present requested characteristic as return UUID MI32.conCtx->returnCharUUID = _uuid; - AddLog(LOG_LEVEL_INFO,PSTR("M32: return UUID: %04x"),MI32.conCtx->returnCharUUID); + AddLog(LOG_LEVEL_DEBUG,PSTR("M32: return UUID: %04x"),MI32.conCtx->returnCharUUID); return true; } return false; @@ -732,7 +754,7 @@ extern "C" { return false; } } - AddLog(LOG_LEVEL_INFO,PSTR("M32: add %s to watchlist of size: %u"),_newAddress.toString().c_str(),NimBLEDevice::getWhiteListCount()); + AddLog(LOG_LEVEL_DEBUG,PSTR("M32: add %s to watchlist of size: %u"),_newAddress.toString().c_str(),NimBLEDevice::getWhiteListCount()); return true; } @@ -1120,7 +1142,6 @@ bool MI32StartConnectionTask(){ void MI32ConnectionTask(void *pvParameters){ NimBLEDevice::setOwnAddrType(BLE_OWN_ADDR_RANDOM,false); //seems to be important for i.e. xbox controller, hopefully not breaking other things NimBLEDevice::setSecurityAuth(true, true, true); - MI32.conCtx->error = MI32_CONN_NO_ERROR; if (MI32ConnectActiveSensor()){ MI32.mode.readingDone = 0; @@ -1139,83 +1160,110 @@ void MI32ConnectionTask(void *pvParameters){ timer++; vTaskDelay(10/ portTICK_PERIOD_MS); } + MI32Client->discoverAttributes(); // solves connection problems on i.e. yeelight dimmer NimBLERemoteService* pSvc = nullptr; NimBLERemoteCharacteristic* pChr = nullptr; - pSvc = MI32Client->getService(MI32.conCtx->serviceUUID); - if(pSvc) { - pChr = pSvc->getCharacteristic(MI32.conCtx->charUUID); - } - else{ - MI32.conCtx->error = MI32_CONN_NO_SERVICE; - } - if (pChr){ - switch(MI32.conCtx->operation){ - case 1: - if(pChr->canRead()) { - std::string _val = pChr->readValue(); - MI32.conCtx->buffer[0] = (uint8_t)_val.size(); - const char *_c_val = _val.c_str(); - memcpy( MI32.conCtx->buffer + 1,_c_val,MI32.conCtx->buffer[0]); - } - else{ - MI32.conCtx->error = MI32_CONN_CAN_NOT_READ; - } - break; - case 2: - if(pChr->canWrite()) { - uint8_t len = MI32.conCtx->buffer[0]; - if(pChr->writeValue(MI32.conCtx->buffer + 1,len,true)) { // true is important ! - // AddLog(LOG_LEVEL_DEBUG,PSTR("M32: write op done")); + // AddLog(LOG_LEVEL_INFO,PSTR("M32: start connection loop")); + bool keepConnectionAlive = true; + MI32.mode.triggerNextConnJob = 1; + while(keepConnectionAlive){ + while(MI32.mode.triggerNextConnJob == 0){ + vTaskDelay(50/ portTICK_PERIOD_MS); + if(MI32.mode.connected == 0){ + MI32StartTask(MI32_TASK_SCAN); + vTaskDelete( NULL ); + } + // AddLog(LOG_LEVEL_INFO,PSTR("M32: wait ...")); + } + // AddLog(LOG_LEVEL_INFO,PSTR("M32: really start connection job now ...")); + MI32.mode.triggerNextConnJob = 0; + MI32.mode.readyForNextConnJob = 0; + pSvc = MI32Client->getService(MI32.conCtx->serviceUUID); + if(pSvc) { + pChr = pSvc->getCharacteristic(MI32.conCtx->charUUID); + } + else{ + MI32.conCtx->error = MI32_CONN_NO_SERVICE; + } + if (pChr){ + switch(MI32.conCtx->operation){ + case 1: + if(pChr->canRead()) { + NimBLEAttValue _val = pChr->readValue(); + MI32.conCtx->buffer[0] = _val.size(); + memcpy( MI32.conCtx->buffer + 1,_val.data(),MI32.conCtx->buffer[0]); } else{ - MI32.conCtx->error = MI32_CONN_DID_NOT_WRITE; + MI32.conCtx->error = MI32_CONN_CAN_NOT_READ; } - } - else{ - MI32.conCtx->error = MI32_CONN_CAN_NOT_WRITE; - } - MI32.mode.readingDone = 1; - break; - case 3: - if(pChr->canNotify()) { - if(pChr->subscribe(true,MI32notifyCB,false)) AddLog(LOG_LEVEL_DEBUG,PSTR("M32: subscribe")); - } - else{ - MI32.conCtx->error = MI32_CONN_CAN_NOT_NOTIFY; - } - break; - default: - break; + break; + case 2: + if(pChr->canWrite()) { + uint8_t len = MI32.conCtx->buffer[0]; + if(pChr->writeValue(MI32.conCtx->buffer + 1,len,MI32.conCtx->response)) { // true is important ! + // AddLog(LOG_LEVEL_DEBUG,PSTR("M32: write op done")); + } + else{ + MI32.conCtx->error = MI32_CONN_DID_NOT_WRITE; + } + } + else{ + MI32.conCtx->error = MI32_CONN_CAN_NOT_WRITE; + } + MI32.mode.readingDone = 1; + break; + case 3: + if(pChr->canNotify()) { + if(pChr->subscribe(true,MI32notifyCB, MI32.conCtx->response)){ + // AddLog(LOG_LEVEL_DEBUG,PSTR("M32: subscribe")); + } + } + else{ + MI32.conCtx->error = MI32_CONN_CAN_NOT_NOTIFY; + } + break; + default: + break; + } } - } - else{ - MI32.conCtx->error = MI32_CONN_NO_CHARACTERISTIC; - } - timer = 0; + else{ + MI32.conCtx->error = MI32_CONN_NO_CHARACTERISTIC; + } + timer = 0; - while (timer<150){ - if (MI32.mode.readingDone){ - break; + while (timer<150){ + if (MI32.mode.readingDone || !MI32.conCtx->oneOp){ + break; + } + else{ + if (MI32.conCtx->operation==3 && MI32.conCtx->oneOp) { + MI32.conCtx->error = MI32_CONN_NOTIFY_TIMEOUT; //did not read on notify - timeout only for one-shot op + } + } + timer++; + vTaskDelay(100/ portTICK_PERIOD_MS); + } + MI32.mode.readingDone = 0; + if(MI32.conCtx->oneOp){ + MI32Client->disconnect(); + MI32.mode.connected = 0; + keepConnectionAlive = false; + MI32StartTask(MI32_TASK_SCAN); } else{ - if (MI32.conCtx->operation==3 && MI32.conCtx->oneOp) { - MI32.conCtx->error = MI32_CONN_NOTIFY_TIMEOUT; //did not read on notify - timeout only for one-shot op - } + MI32.mode.readyForNextConnJob = 1; + MI32.mode.triggerBerryConnCB = 1; } - timer++; - vTaskDelay(100/ portTICK_PERIOD_MS); - } - MI32.mode.readingDone = 0; - if(MI32.conCtx->oneOp){ - MI32Client->disconnect(); - MI32.mode.connected = 0; - DEBUG_SENSOR_LOG(PSTR("M32: requested disconnect")); - MI32StartTask(MI32_TASK_SCAN); } } else{ - MI32.conCtx->error = MI32_CONN_NO_CONNECT; // not connected + if(MI32.conCtx->operation==5){ + MI32.conCtx->error = MI32_CONN_DID_DISCCONNECT; // did succesfully disconnect + } + else{ + MI32.conCtx->error = MI32_CONN_NO_CONNECT; // could not connect + } MI32.mode.connected = 0; MI32StartTask(MI32_TASK_SCAN); } From 1108bc255c131df40109cc171b362eddb65b41c8 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 26 Mar 2022 12:11:18 +0100 Subject: [PATCH 285/355] Update Shelly3EM comments --- tasmota/xnrg_23_ade7880.ino | 38 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index 78236d8a1..48cfbc6c2 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -490,27 +490,25 @@ void Ade7880Cycle(void) { Energy.active_power[phase] = (float)Ade7880ReadVerify(ADE7880_AWATT + phase) / 100; // 0xE513 - 0xFFFFF524 = -27.79 W Energy.apparent_power[phase] = (float)Ade7880ReadVerify(ADE7880_AVA + phase) / 100; // 0xE519 - 0xFFFFF50D Energy.frequency[phase] = 256000.0f / Ade7880ReadVerify(ADE7880_APERIOD + phase); // 0xE905 - Page 34 and based on ADE7880_FREQ_INIT - int32_t active_energy = Ade7880ReadVerify(ADE7880_AWATTHR + phase); // 0xE400 - 0xFFFFFF8F = -0.112 - if (active_energy != 0) { - // Suppose constant load during period of 100/120 periods as set by ADE7880_LINECYC disregards load change inbetween. - // ADE7880_AWATT = 6713 = 67,13 W - // 67,13 * 1000 / 36 = 1864 decaWh -// Energy.kWhtoday_delta[phase] += Energy.active_power[phase] * 1000 / 36; + // Suppose constant load during period of 100/120 periods as set by ADE7880_LINECYC disregards load change inbetween. + // ADE7880_AWATT = 6713 = 67,13 W + // 67,13 * 1000 / 36 = 1864 deca micro Wh (0.01864Wh) +// Energy.kWhtoday_delta[phase] += Energy.active_power[phase] * 1000 / 36; - // By measuring load 1024000 times/second load change in 100/120 periods can be accounted for. - // ADE7880_AWATT = 6713 = 67,13 W - // ADE7880_AWATTHR = 273 - // AWATT multiplier is 16 (Figure 77) - // ADE7880_WTHR = 3 (default) - // Active power accumulation rate is 1.024MHz (Page 49) - // 1024000 * 16 * ADE7880_AWATT / ADE7880_WTHR * 0x8000000 = ADE7880_AWATTHR - // 1024000 * 16 * 6713 / 3 * 134217728 = 273 - // 16384000 * 6713 / 402653184 = 273 - // 273 * 402653184 / 16384000 = 6709 = 67,09W * 1000 / 36 = 1863 decaWh (Tasmota needs decaWh) - // 273 * 402653184 / 16384 = 6709248 = 67092,48W / 3600 = 1863 decaWh - // 273 * 24576 = 6709248 / 3600 = 1863 decaWh - Energy.kWhtoday_delta[phase] += active_energy * 24576 / 3600; - } + // By measuring load 1024000 times/second load change in 100/120 periods can be accounted for. + // ADE7880_AWATT = 6713 = 67,13 W + // ADE7880_AWATTHR = 273 + // AWATT multiplier is 16 (Figure 77) + // ADE7880_WTHR = 3 (default) + // Active power accumulation rate is 1.024MHz (Page 49) + // 1024000 * 16 * ADE7880_AWATT / ADE7880_WTHR * 0x8000000 = ADE7880_AWATTHR + // 1024000 * 16 * 6713 / 3 * 134217728 = 273 + // 16384000 * 6713 / 402653184 = 273 + // 273 * 402653184 / 16384000 = 6709 = 67,09W * 1000 / 36 = 1863 deca micro Wh (Tasmota needs deca micro Wh) + // 273 * 402653184 / 16384 = 6709248 = 67092,48W / 3600 = 1863 deca micro Wh + // 273 * 24576 = 6709248 / 3600 = 1863 deca micro Wh + int32_t active_energy = Ade7880ReadVerify(ADE7880_AWATTHR + phase); // 0xE400 - 0xFFFFFF8F = -0.112 + Energy.kWhtoday_delta[phase] += active_energy * 24576 / 3600; // Using int32_t allows loads up to 87kW (0x7FFFFFFF / 24576) } EnergyUpdateToday(); From 3b10e0ef5c2ad2af53fa2c928d34e92fc44e79f9 Mon Sep 17 00:00:00 2001 From: barbudor Date: Sat, 26 Mar 2022 14:10:08 +0100 Subject: [PATCH 286/355] timerx returns absolute time of day 0:00 to 23:59 --- tasmota/xdrv_09_timers.ino | 16 ++++++++++++++++ tasmota/xdrv_10_rules.ino | 12 ++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/tasmota/xdrv_09_timers.ino b/tasmota/xdrv_09_timers.ino index 44a164989..bde181967 100644 --- a/tasmota/xdrv_09_timers.ino +++ b/tasmota/xdrv_09_timers.ino @@ -235,6 +235,22 @@ uint16_t SunMinutes(uint32_t dawn) #endif // USE_SUNRISE +uint16_t TimerGetTimeOfDay(uint8_t index) +{ + Timer xtimer = Settings->timer[index]; + int16_t xtime = xtimer.time; +#ifdef USE_SUNRISE + if (xtimer.mode) { + if (xtime >= 12*60) xtime = 12*60 - xtime; + xtime += (int16_t)SunMinutes(xtimer.mode-1); + if (xtime < 0) xtime += 24*60; + if (xtime >= 24*60) xtime -= 24*60; + } +#endif +return xtime; +} + + /*******************************************************************************************/ void TimerSetRandomWindow(uint32_t index) diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino index 53774d999..152824fd3 100644 --- a/tasmota/xdrv_10_rules.ino +++ b/tasmota/xdrv_10_rules.ino @@ -477,11 +477,7 @@ bool RulesRuleMatch(uint8_t rule_set, String &event, String &rule, bool stop_all if ((index > 0) && (index <= MAX_TIMERS)) { snprintf_P(stemp, sizeof(stemp), PSTR("%%TIMER%d%%"), index); if (rule_param.startsWith(stemp)) { - int32_t timer = Settings->timer[index -1].time; - if (Settings->timer[index -1].mode && (timer >= 12*60)) { - timer = -(timer - (12*60)); - } - rule_param = String(timer); + rule_param = String(TimerGetTimeOfDay(index -1)); } } } @@ -800,11 +796,7 @@ bool RuleSetProcess(uint8_t rule_set, String &event_saved) #if defined(USE_TIMERS) for (uint32_t i = 0; i < MAX_TIMERS; i++) { snprintf_P(stemp, sizeof(stemp), PSTR("%%TIMER%d%%"), i +1); - int32_t timer = Settings->timer[i].time; - if (Settings->timer[i].mode && (timer >= 12*60)) { - timer = -(timer - 12*60); - } - RulesVarReplace(commands, stemp, String(timer)); + RulesVarReplace(commands, stemp, String(TimerGetTimeOfDay(i))); } #if defined(USE_SUNRISE) RulesVarReplace(commands, F("%SUNRISE%"), String(SunMinutes(0))); From b573870b82fe9ad60d0d81f29399accb3082018f Mon Sep 17 00:00:00 2001 From: barbudor Date: Sat, 26 Mar 2022 14:45:13 +0100 Subject: [PATCH 287/355] TempSet HumSet TimerX always published immediately --- tasmota/xdrv_16_tuyamcu.ino | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index 73ed1782a..2b3fccd8a 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -97,7 +97,9 @@ struct TUYA { // #define D_CMND_TUYA_SET_TIMER "SetTimer" const char kTuyaSensors[] PROGMEM = // List of available sensors (can be expanded in the future) +// 71 72 73 74 75 "" D_JSON_TEMPERATURE "|TempSet|" D_JSON_HUMIDITY "|HumSet|" D_JSON_ILLUMINANCE +// 76 77 78 79 80 81 82 83 84 "|" D_JSON_TVOC "|" D_JSON_ECO2 "|" D_JSON_CO2 "|" D_JSON_GAS "||Timer1|Timer2|Timer3|TImer4"; const char kTuyaCommand[] PROGMEM = D_PRFX_TUYA "|" // Prefix @@ -814,10 +816,14 @@ void TuyaProcessStatePacket(void) { char sname[20]; char tempval[5]; uint8_t res; + bool dont_publish = Settings->flag5.tuyasns_no_immediate; if (TasmotaGlobal.uptime < 8) { // delay to avoid multiple topics at the same time at boot time return; } else { + if (fnId > 80 || fnId == 74 || fnId == 72) { + dont_publish = false; + } if (fnId > 74) { res = 0; } else if (fnId > 72) { @@ -830,7 +836,7 @@ void TuyaProcessStatePacket(void) { GetTextIndexed(sname, sizeof(sname), (fnId-71), kTuyaSensors); ResponseClear(); // Clear retained message Response_P(PSTR("{\"TuyaSNS\":{\"%s\":%s}}"), sname, dtostrfd(TuyaAdjustedTemperature(packetValue, res), res, tempval)); // sensor update is just on change - if (Settings->flag5.tuyasns_no_immediate) { + if (dont_publish) { XdrvRulesProcess(0); } else { MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR(D_CMND_SENSOR)); From fc8b4dcc71cf836a6e0ef445b3b8c6752cd2d658 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 26 Mar 2022 16:02:50 +0100 Subject: [PATCH 288/355] Add Shelly3EM Neutral Current information --- tasmota/i18n.h | 1 + tasmota/language/af_AF.h | 1 + tasmota/language/bg_BG.h | 1 + tasmota/language/cs_CZ.h | 1 + tasmota/language/de_DE.h | 1 + tasmota/language/el_GR.h | 1 + tasmota/language/en_GB.h | 1 + tasmota/language/es_ES.h | 1 + tasmota/language/fr_FR.h | 1 + tasmota/language/fy_NL.h | 1 + tasmota/language/he_HE.h | 1 + tasmota/language/hu_HU.h | 1 + tasmota/language/it_IT.h | 1 + tasmota/language/ko_KO.h | 1 + tasmota/language/nl_NL.h | 1 + tasmota/language/pl_PL.h | 1 + tasmota/language/pt_BR.h | 1 + tasmota/language/pt_PT.h | 1 + tasmota/language/ro_RO.h | 1 + tasmota/language/ru_RU.h | 1 + tasmota/language/sk_SK.h | 1 + tasmota/language/sv_SE.h | 1 + tasmota/language/tr_TR.h | 1 + tasmota/language/uk_UA.h | 1 + tasmota/language/vi_VN.h | 1 + tasmota/language/zh_CN.h | 1 + tasmota/language/zh_TW.h | 1 + tasmota/xdrv_03_energy.ino | 2 +- tasmota/xnrg_23_ade7880.ino | 43 +++++++++++++++++++++++++++++++++++++ 29 files changed, 71 insertions(+), 1 deletion(-) diff --git a/tasmota/i18n.h b/tasmota/i18n.h index 38c4e4216..43cdcbd49 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -55,6 +55,7 @@ #define D_JSON_COUNT "Count" #define D_JSON_COUNTER "Counter" #define D_JSON_CURRENT "Current" // As in Voltage and Current +#define D_JSON_CURRENT_NEUTRAL "CurrentNeutral" #define D_JSON_DARKNESS "Darkness" #define D_JSON_DATA "Data" #define D_JSON_DEWPOINT "DewPoint" diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index c91946742..6e32c385a 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -77,6 +77,7 @@ #define D_COUNTER "Opnemer" #define D_CT_POWER "CT Power" #define D_CURRENT "Stroom" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Data" #define D_DARKLIGHT "Donker" #define D_DEBUG "Ontfout" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 4682cf4c9..bea5e6c93 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -77,6 +77,7 @@ #define D_COUNTER "Брояч" #define D_CT_POWER "CT Power" #define D_CURRENT "Ток" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Данни" #define D_DARKLIGHT "Тъмна" #define D_DEBUG "Дебъгване" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 8883ee9ab..9579d6c79 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -77,6 +77,7 @@ #define D_COUNTER "Počítadlo" #define D_CT_POWER "CT Power" #define D_CURRENT "Proud" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Data" #define D_DARKLIGHT "Tmavý" #define D_DEBUG "Debug" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 2662df419..c74065b05 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -77,6 +77,7 @@ #define D_COUNTER "Zähler" #define D_CT_POWER "CT Power" #define D_CURRENT "Strom" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Daten" #define D_DARKLIGHT "dunkel" #define D_DEBUG "debug" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 9bece2add..1c6f9065e 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -77,6 +77,7 @@ #define D_COUNTER "Μετρητής" #define D_CT_POWER "CT Power" #define D_CURRENT "Ένταση" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Δεδομένα" #define D_DARKLIGHT "Σκοτεινό" #define D_DEBUG "Debug" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index 388c0ab52..17322f588 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -77,6 +77,7 @@ #define D_COUNTER "Counter" #define D_CT_POWER "CT Power" #define D_CURRENT "Current" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Data" #define D_DARKLIGHT "Dark" #define D_DEBUG "Debug" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 32634dc83..b1c99b712 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -77,6 +77,7 @@ #define D_COUNTER "Contador" #define D_CT_POWER "CT Power" #define D_CURRENT "Corriente" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Datos" #define D_DARKLIGHT "Oscuro" #define D_DEBUG "Debug" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 0fb67543f..57dde5fd6 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -77,6 +77,7 @@ #define D_COUNTER "Compteur" #define D_CT_POWER "CT Power" #define D_CURRENT "Courant" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Donnée" #define D_DARKLIGHT "Sombre" #define D_DEBUG "Debug" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index 2ff6e3943..0c2cfa48a 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -77,6 +77,7 @@ #define D_COUNTER "Teller" #define D_CT_POWER "CT Power" #define D_CURRENT "Streame" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Data" #define D_DARKLIGHT "Tsjuster" #define D_DEBUG "Debugearje" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index aba134263..0ceee1826 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -77,6 +77,7 @@ #define D_COUNTER "מונה" #define D_CT_POWER "CT Power" #define D_CURRENT "נוכחי" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "נתונים" #define D_DARKLIGHT "חושך" #define D_DEBUG "באגים" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index 9aafe19a8..16e4b66b1 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -77,6 +77,7 @@ #define D_COUNTER "Számláló" #define D_CT_POWER "CT erősség" #define D_CURRENT "Áramerősség" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Adat" #define D_DARKLIGHT "Min. fényerő" #define D_DEBUG "Debug" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 0abb6aeb8..83224973a 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -77,6 +77,7 @@ #define D_COUNTER "Contatore" #define D_CT_POWER "Alimentazione CT" #define D_CURRENT "Corrente" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Corrente Neutrale" #define D_DATA "Dati" #define D_DARKLIGHT "Scuro" #define D_DEBUG "Debug" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index a17d10c1d..ba019032a 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -77,6 +77,7 @@ #define D_COUNTER "Counter" #define D_CT_POWER "CT Power" #define D_CURRENT "전류" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Data" #define D_DARKLIGHT "어둡게" #define D_DEBUG "디버그" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index d851cd1ca..47338d14f 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -77,6 +77,7 @@ #define D_COUNTER "Teller" #define D_CT_POWER "CT Power" #define D_CURRENT "Stroom" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Data" #define D_DARKLIGHT "Donker" #define D_DEBUG "Debug" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 4e4767487..39f51bf3d 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -77,6 +77,7 @@ #define D_COUNTER "Licznik" #define D_CT_POWER "Moc CT" #define D_CURRENT "Prąd" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Data" #define D_DARKLIGHT "Ciemny" #define D_DEBUG "Debug" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index b528f1558..3ae74fa20 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -77,6 +77,7 @@ #define D_COUNTER "Contador" #define D_CT_POWER "Carga CT" #define D_CURRENT "Corrente" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Dados" #define D_DARKLIGHT "Luz escura" #define D_DEBUG "Depurar" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 15338c72e..9fc8cfa78 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -77,6 +77,7 @@ #define D_COUNTER "Contador" #define D_CT_POWER "CT Power" #define D_CURRENT "Corrente" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Dados" #define D_DARKLIGHT "Luz Escura" #define D_DEBUG "Depurar" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index 1eaa121e9..4328e7c22 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -77,6 +77,7 @@ #define D_COUNTER "Contor" #define D_CT_POWER "Putere Transformată" #define D_CURRENT "Curent" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Date" #define D_DARKLIGHT "Întunecat" #define D_DEBUG "Depanare" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index c95980d39..bc5e258f0 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -77,6 +77,7 @@ #define D_COUNTER "Счетчик" #define D_CT_POWER "CT Power" #define D_CURRENT "Ток" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Данные" #define D_DARKLIGHT "Темный" #define D_DEBUG "Отладка" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 6a2f61692..04b071f5f 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -77,6 +77,7 @@ #define D_COUNTER "Počítadlo" #define D_CT_POWER "CT Power" #define D_CURRENT "Prúd" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Dáta" #define D_FLOW_RATE "Flow rate" #define D_DARKLIGHT "Tmavý" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 2191b6f0f..d1a5b2ff0 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -77,6 +77,7 @@ #define D_COUNTER "Räknare" #define D_CT_POWER "CT Power" #define D_CURRENT "Ström" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Data" #define D_DARKLIGHT "Mörkt" #define D_DEBUG "Debug" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index 6acb99109..d08f78e59 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -77,6 +77,7 @@ #define D_COUNTER "Sayaç" #define D_CT_POWER "CT Power" #define D_CURRENT "Current" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Data" #define D_DARKLIGHT "Karanlık" #define D_DEBUG "Hata Ayıklama" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 791a73ac4..e4aec74b5 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -77,6 +77,7 @@ #define D_COUNTER "Лічильник" #define D_CT_POWER "CT Power" #define D_CURRENT "Струм" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Дані" #define D_DARKLIGHT "Темний" #define D_DEBUG "Налагодження" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index e9f1791be..017d1dd3c 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -77,6 +77,7 @@ #define D_COUNTER "Bộ đếm" #define D_CT_POWER "CT Power" #define D_CURRENT "Dòng điện" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "Dữ liệu" #define D_DARKLIGHT "Tối" #define D_DEBUG "Tìm lỗi" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 8a09fb79c..1458a367b 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -77,6 +77,7 @@ #define D_COUNTER "计数器" #define D_CT_POWER "CT Power" #define D_CURRENT "电流" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "数据:" #define D_DARKLIGHT "暗" #define D_DEBUG "调试" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 7233a2399..393588553 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -77,6 +77,7 @@ #define D_COUNTER "Counter" #define D_CT_POWER "CT Power" #define D_CURRENT "電流" // As in Voltage and Current +#define D_CURRENT_NEUTRAL "Current Neutral" #define D_DATA "數據:" #define D_DARKLIGHT "暗光" #define D_DEBUG "偵錯" diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index 449d70b0f..018e3c2ff 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -853,8 +853,8 @@ void CmndModuleAddress(void) { void CmndEnergyConfig(void) { Energy.command_code = CMND_ENERGYCONFIG; + ResponseClear(); if (XnrgCall(FUNC_COMMAND)) { - ResponseClear(); if (!ResponseLength()) { ResponseCmndDone(); } diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index 48cfbc6c2..b77a1fcf9 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -36,6 +36,8 @@ /*********************************************************************************************/ +#define ADE7880_MORE_REGS // Add Neutral Current information + //#define ADE7880_DEBUG //#define ADE7880_PROFILING @@ -252,6 +254,7 @@ enum Ade7880PowerQualityRegisters { }; struct Ade7880 { + float neutral_current; int32_t calib_current[4]; int32_t calib_voltage[3]; int32_t calib_acpower[3]; @@ -483,6 +486,7 @@ void Ade7880Cycle(void) { Ade7880.cycle_count--; return; // Skip first cycles } + Ade7880.neutral_current = (float)Ade7880ReadVerify(ADE7880_NIRMS) / 100000; // 0x43C6 for (uint32_t phase = 0; phase < 3; phase++) { Energy.data_valid[phase] = 0; Energy.voltage[phase] = (float)Ade7880ReadVerify(ADE7880_AVRMS + (phase * 2)) / 10000; // 0x43C1 - 0x0024CC94 = 241.1668 V @@ -681,6 +685,29 @@ bool Ade7880Command(void) { return serviced; } +/*********************************************************************************************\ + * Show +\*********************************************************************************************/ + +#ifdef ADE7880_MORE_REGS +#ifdef USE_WEBSERVER +const char HTTP_ADE7880_CURRENT[] PROGMEM = "{s}" D_CURRENT_NEUTRAL "{m}%s " D_UNIT_AMPERE "{e}"; +#endif // USE_WEBSERVER + +void Ade7880Show(bool json) { + char value_chr[TOPSZ]; + + if (json) { + ResponseAppend_P(PSTR(",\"" D_JSON_CURRENT_NEUTRAL "\":%s"), + EnergyFormat(value_chr, &Ade7880.neutral_current, Settings->flag2.current_resolution, 1)); +#ifdef USE_WEBSERVER + } else { + WSContentSend_PD(HTTP_ADE7880_CURRENT, WebEnergyFormat(value_chr, &Ade7880.neutral_current, Settings->flag2.current_resolution, 1)); +#endif // USE_WEBSERVER + } +} +#endif // ADE7880_MORE_REGS + /*********************************************************************************************\ * Interface \*********************************************************************************************/ @@ -694,6 +721,22 @@ bool Xnrg23(uint8_t function) { case FUNC_LOOP: if (Ade7880.irq0_state) { Ade7880Service0(); } break; +#ifdef ADE7880_MORE_REGS + case FUNC_JSON_APPEND: + Ade7880Show(1); + break; +#ifdef USE_WEBSERVER +#ifdef USE_ENERGY_COLUMN_GUI + case FUNC_WEB_COL_SENSOR: + Ade7880Show(0); + break; +#else // not USE_ENERGY_COLUMN_GUI + case FUNC_WEB_SENSOR: + Ade7880Show(0); + break; +#endif // USE_ENERGY_COLUMN_GUI +#endif // USE_WEBSERVER +#endif // ADE7880_MORE_REGS case FUNC_COMMAND: result = Ade7880Command(); break; From e95456745f163d17dada9d9fae8c7b509c205ad0 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 26 Mar 2022 16:58:44 +0100 Subject: [PATCH 289/355] Refactor some energy drivers --- tasmota/xnrg_08_sdm120.ino | 6 ++---- tasmota/xnrg_13_fif_le01mr.ino | 6 ++---- tasmota/xnrg_18_sdm72.ino | 6 ++---- tasmota/xnrg_21_sdm230.ino | 6 ++---- tasmota/xnrg_23_ade7880.ino | 24 +++++++++++++++++++----- 5 files changed, 27 insertions(+), 21 deletions(-) diff --git a/tasmota/xnrg_08_sdm120.ino b/tasmota/xnrg_08_sdm120.ino index 34649da13..bde59266b 100644 --- a/tasmota/xnrg_08_sdm120.ino +++ b/tasmota/xnrg_08_sdm120.ino @@ -275,13 +275,11 @@ bool Xnrg08(uint8_t function) #ifdef USE_WEBSERVER #ifdef USE_ENERGY_COLUMN_GUI case FUNC_WEB_COL_SENSOR: - Sdm220Show(0); - break; -#else // not USE_ENERGY_COLUMN_GUI +#else // not USE_ENERGY_COLUMN_GUI case FUNC_WEB_SENSOR: +#endif // USE_ENERGY_COLUMN_GUI Sdm220Show(0); break; -#endif // USE_ENERGY_COLUMN_GUI #endif // USE_WEBSERVER case FUNC_ENERGY_RESET: Sdm220Reset(); diff --git a/tasmota/xnrg_13_fif_le01mr.ino b/tasmota/xnrg_13_fif_le01mr.ino index 68aae6c7a..f871ea578 100644 --- a/tasmota/xnrg_13_fif_le01mr.ino +++ b/tasmota/xnrg_13_fif_le01mr.ino @@ -296,13 +296,11 @@ bool Xnrg13(uint8_t function) #ifdef USE_WEBSERVER #ifdef USE_ENERGY_COLUMN_GUI case FUNC_WEB_COL_SENSOR: - FifLEShow(0); - break; -#else // not USE_ENERGY_COLUMN_GUI +#else // not USE_ENERGY_COLUMN_GUI case FUNC_WEB_SENSOR: +#endif // USE_ENERGY_COLUMN_GUI FifLEShow(0); break; -#endif // USE_ENERGY_COLUMN_GUI #endif // USE_WEBSERVER case FUNC_ENERGY_RESET: FifLEReset(); diff --git a/tasmota/xnrg_18_sdm72.ino b/tasmota/xnrg_18_sdm72.ino index ab5c7ce4c..d20874749 100644 --- a/tasmota/xnrg_18_sdm72.ino +++ b/tasmota/xnrg_18_sdm72.ino @@ -222,13 +222,11 @@ bool Xnrg18(uint8_t function) #ifdef USE_WEBSERVER #ifdef USE_ENERGY_COLUMN_GUI case FUNC_WEB_COL_SENSOR: - Sdm72Show(0); - break; -#else // not USE_ENERGY_COLUMN_GUI +#else // not USE_ENERGY_COLUMN_GUI case FUNC_WEB_SENSOR: +#endif // USE_ENERGY_COLUMN_GUI Sdm72Show(0); break; -#endif // USE_ENERGY_COLUMN_GUI #endif // USE_WEBSERVER #endif // SDM72_IMPEXP case FUNC_INIT: diff --git a/tasmota/xnrg_21_sdm230.ino b/tasmota/xnrg_21_sdm230.ino index cafe7a031..abcebd554 100644 --- a/tasmota/xnrg_21_sdm230.ino +++ b/tasmota/xnrg_21_sdm230.ino @@ -282,13 +282,11 @@ bool Xnrg21(uint8_t function) #ifdef USE_WEBSERVER #ifdef USE_ENERGY_COLUMN_GUI case FUNC_WEB_COL_SENSOR: - Sdm230Show(0); - break; -#else // not USE_ENERGY_COLUMN_GUI +#else // not USE_ENERGY_COLUMN_GUI case FUNC_WEB_SENSOR: +#endif // USE_ENERGY_COLUMN_GUI Sdm230Show(0); break; -#endif // USE_ENERGY_COLUMN_GUI #endif // USE_WEBSERVER #endif // SDM230_MORE_REGS case FUNC_ENERGY_RESET: diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index b77a1fcf9..51c1c6d90 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -657,12 +657,28 @@ bool Ade7880Command(void) { for (uint32_t i = 0; i < 57; i++) { int32_t value = Ade7880Read(ADE7880_AIGAIN + i); // snprintf_P(data, sizeof(data), PSTR("%s%s%08X"), data, (i)?",":"", value); - if (bitRead(value, 27)) { value |= 0xF0000000; } // Make 32-bit negative (ZPSE) + if (bitRead(value, 27)) { value |= 0xF0000000; } // Make 24-bit negative (ZPSE) snprintf_P(data, sizeof(data), PSTR("%s%s%d"), data, (i)?",":"", value); } AddLog(LOG_LEVEL_DEBUG, PSTR("A78: DSP Regs 0x4380..B9 '%s'"), data); return true; } + if ('2' == XdrvMailbox.data[0]) { + // EnergyConfig 2 - Dump DSP UI data memory (0x43C0..0x43C7) + char data[600] = { 0 }; + for (uint32_t i = 0; i < 8; i++) { + int32_t value = Ade7880Read(ADE7880_AIRMS + i); + snprintf_P(data, sizeof(data), PSTR("%s%s%08X"), data, (i)?",":"", value); +// if (7 == i) { +// if (bitRead(value, 27)) { value |= 0xF0000000; } // Make 28-bit negative (ZP) +// } else { +// if (bitRead(value, 23)) { value |= 0xFF000000; } // Make 24-bit negative (ZP) +// } +// snprintf_P(data, sizeof(data), PSTR("%s%s%d"), data, (i)?",":"", value); + } + AddLog(LOG_LEVEL_DEBUG, PSTR("A78: DSP Regs 0x43C0..C7 '%s'"), data); + return true; + } #endif // ADE7880_DEBUG Ade7880Defaults(); // Load defaults if (Ade7880SetDefaults(XdrvMailbox.data)) { @@ -728,13 +744,11 @@ bool Xnrg23(uint8_t function) { #ifdef USE_WEBSERVER #ifdef USE_ENERGY_COLUMN_GUI case FUNC_WEB_COL_SENSOR: - Ade7880Show(0); - break; -#else // not USE_ENERGY_COLUMN_GUI +#else // not USE_ENERGY_COLUMN_GUI case FUNC_WEB_SENSOR: +#endif // USE_ENERGY_COLUMN_GUI Ade7880Show(0); break; -#endif // USE_ENERGY_COLUMN_GUI #endif // USE_WEBSERVER #endif // ADE7880_MORE_REGS case FUNC_COMMAND: From 1373e415c93f85b540cf448d5ce74a2b9c11d7e6 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 26 Mar 2022 18:13:36 +0100 Subject: [PATCH 290/355] Fix possible negative calibration data --- tasmota/xnrg_23_ade7880.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino index 51c1c6d90..9ff070c8c 100644 --- a/tasmota/xnrg_23_ade7880.ino +++ b/tasmota/xnrg_23_ade7880.ino @@ -397,11 +397,11 @@ bool Ade7880Init(void) { bool error = false; for (uint32_t phase = 0; phase < 3; phase++) { if (Ade7880ReadVerify(ADE7880_AVGAIN + (phase * 2)) != (Ade7880.calib_voltage[phase] & 0x0FFFFFFF)) { error = true; } - else if (Ade7880ReadVerify(ADE7880_AIGAIN + (phase * 2)) != Ade7880.calib_current[phase]) { error = true; } + else if (Ade7880ReadVerify(ADE7880_AIGAIN + (phase * 2)) != (Ade7880.calib_current[phase] & 0x0FFFFFFF)) { error = true; } else if (Ade7880ReadVerify(ADE7880_APGAIN + (phase * 2)) != (Ade7880.calib_acpower[phase] & 0x0FFFFFFF)) { error = true; } else if (Ade7880ReadVerify(ADE7880_APHCAL + phase) != (Ade7880.calib_angle[phase] & 0x00FF)) { error = true; } } - if (Ade7880ReadVerify(ADE7880_NIGAIN) != Ade7880.calib_current[3]) { error = true; } + if (Ade7880ReadVerify(ADE7880_NIGAIN) != (Ade7880.calib_current[3] & 0x0FFFFFFF)) { error = true; } if (error) { AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Error initializing parameters")); return false; From 4df75cd54ba132c5b13c084ee9f8d8b8d359d2de Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sun, 27 Mar 2022 09:57:05 +0200 Subject: [PATCH 291/355] Berry introspect.module --- .../berry/generate/be_fixed_introspect.h | 13 ++++++------ lib/libesp32/berry/src/be_introspectlib.c | 20 +++++++++++++++++++ lib/libesp32/berry/src/be_module.c | 7 +++++-- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/lib/libesp32/berry/generate/be_fixed_introspect.h b/lib/libesp32/berry/generate/be_fixed_introspect.h index 619cdfcd0..2e06fcb90 100644 --- a/lib/libesp32/berry/generate/be_fixed_introspect.h +++ b/lib/libesp32/berry/generate/be_fixed_introspect.h @@ -1,17 +1,18 @@ #include "be_constobj.h" static be_define_const_map_slots(m_libintrospect_map) { - { be_const_key(members, 3), be_const_func(m_attrlist) }, - { be_const_key(set, -1), be_const_func(m_setmember) }, - { be_const_key(get, -1), be_const_func(m_findmember) }, - { be_const_key(toptr, -1), be_const_func(m_toptr) }, { be_const_key(ismethod, -1), be_const_func(m_ismethod) }, - { be_const_key(fromptr, 2), be_const_func(m_fromptr) }, + { be_const_key(toptr, -1), be_const_func(m_toptr) }, + { be_const_key(get, -1), be_const_func(m_findmember) }, + { be_const_key(module, 5), be_const_func(m_getmodule) }, + { be_const_key(fromptr, 1), be_const_func(m_fromptr) }, + { be_const_key(members, -1), be_const_func(m_attrlist) }, + { be_const_key(set, 3), be_const_func(m_setmember) }, }; static be_define_const_map( m_libintrospect_map, - 6 + 7 ); static be_define_const_module( diff --git a/lib/libesp32/berry/src/be_introspectlib.c b/lib/libesp32/berry/src/be_introspectlib.c index b7b58424c..1e5b521d3 100644 --- a/lib/libesp32/berry/src/be_introspectlib.c +++ b/lib/libesp32/berry/src/be_introspectlib.c @@ -127,6 +127,22 @@ static int m_fromptr(bvm *vm) be_return_nil(vm); } +/* load module by name, like `import` would do. But don't create a global variable from it. */ +static int m_getmodule(bvm *vm) +{ + int top = be_top(vm); + if (top >= 1) { + bvalue *v = be_indexof(vm, 1); + if (var_isstr(v)) { + int ret = be_module_load(vm, var_tostr(v)); + if (ret == BE_OK) { + be_return(vm); + } + } + } + be_return_nil(vm); +} + /* checks if the function (berry bytecode bproto only) is hinted as a method */ static int m_ismethod(bvm *vm) { @@ -150,6 +166,8 @@ be_native_module_attr_table(introspect) { be_native_module_function("get", m_findmember), be_native_module_function("set", m_setmember), + be_native_module_function("module", m_getmodule), + be_native_module_function("toptr", m_toptr), be_native_module_function("fromptr", m_fromptr), @@ -165,6 +183,8 @@ module introspect (scope: global, depend: BE_USE_INTROSPECT_MODULE) { get, func(m_findmember) set, func(m_setmember) + module, func(m_getmodule) + toptr, func(m_toptr) fromptr, func(m_fromptr) diff --git a/lib/libesp32/berry/src/be_module.c b/lib/libesp32/berry/src/be_module.c index ab4504ee5..e2b186e9a 100644 --- a/lib/libesp32/berry/src/be_module.c +++ b/lib/libesp32/berry/src/be_module.c @@ -128,8 +128,11 @@ static char* fixpath(bvm *vm, bstring *path, size_t *size) const char *split, *base; bvalue *func = vm->cf->func; bclosure *cl = var_toobj(func); - be_assert(var_isclosure(func)); - base = str(cl->proto->source); /* get the source file path */ + if (var_isclosure(func)) { + base = str(cl->proto->source); /* get the source file path */ + } else { + base = "/"; + } split = be_splitpath(base); *size = split - base + (size_t)str_len(path) + SUFFIX_LEN; buffer = be_malloc(vm, *size); From 9781804440d774ea40dc6852f971e9d3aee64134 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 27 Mar 2022 14:46:35 +0200 Subject: [PATCH 292/355] Add energy GUI column spacing calculation --- tasmota/xdrv_03_energy.ino | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index 018e3c2ff..13c124e5d 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -1234,9 +1234,21 @@ void EnergyShow(bool json) { #ifdef USE_ENERGY_COLUMN_GUI // Need a new table supporting more columns WSContentSend_P(PSTR("{t}{s}")); // First column is empty ({t} = , {s} = ) #endif // USE_ENERGY_COLUMN_GUI From 61004953e6ab4950f8a00c3d9fcb2488bb55f06f Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 27 Mar 2022 14:57:44 +0200 Subject: [PATCH 293/355] Change ESP32 Arduino core to v2.0.3 --- CHANGELOG.md | 1 + RELEASENOTES.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 396fbd347..6bef73c0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ All notable changes to this project will be documented in this file. - NeoPool remove ambiguous device color names - Display of energy values in GUI use columns when define ``USE_ENERGY_COLUMN_GUI`` is enabled (default) - IRremoteESP8266 library from v2.8.1 to v2.8.2 +- Tasmota ESP32 Arduino core to v2.0.3 - ESP8266 Shrinked tasmota-minimal.bin by removing all commands except ``Upgrade``, ``Upload``, ``OtaUrl``, ``Seriallog``, ``Weblog`` and ``Restart`` ### Fixed diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 2fa2bd507..1136eccf2 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -76,7 +76,7 @@ Historical binaries can be downloaded from The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz`` ### ESP32 based -The following binary downloads have been compiled with ESP32/Arduino library core version **2.0.2.1**. +The following binary downloads have been compiled with ESP32/Arduino library core version **2.0.3**. - **tasmota32.bin** = The Tasmota version with most drivers including additional sensors and KNX for 4M+ flash. **RECOMMENDED RELEASE BINARY** - **tasmota32c3.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-C3 and 4M+ flash. @@ -138,7 +138,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - DS3231 I2C address define ``USE_RTC_ADDR`` into ``DS3231_ADDRESS`` - Display of energy values in GUI use columns when define ``USE_ENERGY_COLUMN_GUI`` is enabled (default) - ESP8266 Shrinked tasmota-minimal.bin by removing all commands except ``Upgrade``, ``Upload``, ``OtaUrl``, ``Seriallog``, ``Weblog`` and ``Restart`` -- ESP32 Arduino core from v2.0.2.2 to v2.0.2.3 +- ESP32 Arduino core from v2.0.2.2 to v2.0.3 - ESP32 LVGL library from v8.1.0 to v8.2.0 - ESP32 NimBLE library from v1.3.3 to v1.3.6 - ESP32 update the internal Berry type system to sync with Skiars Berry repository. No expected impact on code, but .bec files need to be generated again [#14811](https://github.com/arendst/Tasmota/issues/14811) From 355d0ab6e167dc63c2ba4b5e88e5b0b4afe9ec77 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sun, 27 Mar 2022 16:57:54 +0200 Subject: [PATCH 294/355] LVGL split lv_clock and lv_clock_icon --- lib/libesp32/berry/default/be_modtab.c | 2 + lib/libesp32/berry/generate/be_const_strtab.h | 2 + .../berry/generate/be_const_strtab_def.h | 2343 +++++++++-------- .../berry_tasmota/src/be_lv_tasmota_lib.c | 62 +- .../src/be_lvgl_clock_icon_lib.c | 364 +-- .../berry_tasmota/src/be_lvgl_clock_lib.c | 276 ++ .../src/embedded/lv_clock_icon.be | 40 +- .../berry_tasmota/src/embedded/lv_tasmota.be | 1 + 8 files changed, 1588 insertions(+), 1502 deletions(-) create mode 100644 lib/libesp32/berry_tasmota/src/be_lvgl_clock_lib.c diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c index 31fc27b58..6de48571e 100644 --- a/lib/libesp32/berry/default/be_modtab.c +++ b/lib/libesp32/berry/default/be_modtab.c @@ -187,6 +187,7 @@ be_extern_native_class(lv_wifi_bars_icon); be_extern_native_class(lv_signal_arcs); be_extern_native_class(lv_wifi_arcs); be_extern_native_class(lv_wifi_arcs_icon); +be_extern_native_class(lv_clock); be_extern_native_class(lv_clock_icon); be_extern_native_class(int64); @@ -233,6 +234,7 @@ BERRY_LOCAL bclass_array be_class_table = { &be_native_class(lv_signal_arcs), &be_native_class(lv_wifi_arcs), &be_native_class(lv_wifi_arcs_icon), + &be_native_class(lv_clock), &be_native_class(lv_clock_icon), #endif // USE_LVGL diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h index a3152e78d..11cdba75a 100644 --- a/lib/libesp32/berry/generate/be_const_strtab.h +++ b/lib/libesp32/berry/generate/be_const_strtab.h @@ -322,6 +322,7 @@ extern const bcstring be_const_str_classof; extern const bcstring be_const_str_clear; extern const bcstring be_const_str_clear_first_time; extern const bcstring be_const_str_clear_to; +extern const bcstring be_const_str_clock; extern const bcstring be_const_str_clock_icon; extern const bcstring be_const_str_close; extern const bcstring be_const_str_closure; @@ -582,6 +583,7 @@ extern const bcstring be_const_str_loop; extern const bcstring be_const_str_lower; extern const bcstring be_const_str_lv; extern const bcstring be_const_str_lv_; +extern const bcstring be_const_str_lv_clock; extern const bcstring be_const_str_lv_clock_icon; extern const bcstring be_const_str_lv_coord_arr; extern const bcstring be_const_str_lv_event; diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h index 13efbf51e..2fef6b599 100644 --- a/lib/libesp32/berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/berry/generate/be_const_strtab_def.h @@ -1,843 +1,845 @@ -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_item); -be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_get_coords); -be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_widget_event_cb); -be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str__X2Elen); -be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_SERIAL_8N2); -be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str__X23autoexec_X2Ebat); -be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_SERIAL_8N1); -be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_ptr); -be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_SERIAL_7N2); -be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_SERIAL_6E1); -be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_COLOR_WHITE); -be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_check_not_method); -be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_POST); -be_define_const_str(_X25, "%", 537692064u, 0, 1, NULL); -be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_AudioGenerator); -be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_argument_X20must_X20be_X20a_X20list); -be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_Wire); -be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_add_handler); -be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_MI32); -be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_STATE_DEFAULT); -be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, NULL); -be_define_const_str(_X2A, "*", 789356349u, 0, 1, &be_const_str_remove); -be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_add); -be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_CFG_X3A_X20removing_X20autoconf_X20files); -be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str__X3C_X3D); -be_define_const_str(_X2D, "-", 671913016u, 0, 1, &be_const_str_CT); -be_define_const_str(_X2D_X2A, "-*", 499980374u, 0, 2, &be_const_str_tag); -be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, NULL); -be_define_const_str(_X2E, ".", 722245873u, 0, 1, NULL); -be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_clear_to); -be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E); -be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, NULL); -be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_get_battery_chargin_status); -be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_draw_arc); -be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_resize); -be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_SERIAL_6N1); -be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_WS2812_GRB); -be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_lv_signal_bars); -be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E); -be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_fromstring); -be_define_const_str(_X2F, "/", 705468254u, 0, 1, NULL); -be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_atan2); -be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_no_X20more_X20RMT_X20channel_X20available); -be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function); -be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_sec); -be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str__timers); -be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_duration); -be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_SERIAL_7E2); -be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_fromptr); -be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, &be_const_str_bool); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_close); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_sin); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_exec_cmd); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "

", 3546571739u, 0, 11, &be_const_str_json_fdump_any); +be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, &be_const_str_loop); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_import); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_chars_in_string); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_content_send_style); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str_def); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, NULL); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_load_templates); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_True); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, NULL); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_AudioOpusDecoder); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_find_key_i); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_ct); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_BUTTON_CONFIGURATION); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_I2C_X3A); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "", 4247924536u, 0, 19, &be_const_str_decompress); +be_define_const_str(_X3D, "=", 940354920u, 0, 1, &be_const_str_else); +be_define_const_str(_X3D_X3C_X3E_X21, "=<>!", 2664470277u, 0, 4, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); +be_define_const_str(_X3D_X3D, "==", 2431966415u, 0, 2, &be_const_str_call); +be_define_const_str(_X3E, ">", 990687777u, 0, 1, &be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker); +be_define_const_str(_X3E_X3D, ">=", 284975636u, 0, 2, &be_const_str_CFG_X3A_X20ran_X20_X20); +be_define_const_str(_X3F, "?", 973910158u, 0, 1, &be_const_str__begin_transmission); +be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, &be_const_str_BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29); +be_define_const_str(ALIGN_BOTTOM_MID, "ALIGN_BOTTOM_MID", 3933267889u, 0, 16, &be_const_str_lv_module_init); +be_define_const_str(ALIGN_LEFT_MID, "ALIGN_LEFT_MID", 1043035067u, 0, 14, &be_const_str_constructor_cb); +be_define_const_str(AXP192, "AXP192", 757230128u, 0, 6, &be_const_str_lv_clock_icon); +be_define_const_str(Animate_X20pc_X20is_X20out_X20of_X20range, "Animate pc is out of range", 1854929421u, 0, 26, &be_const_str_full_status); +be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, &be_const_str_get_switches); +be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str_SERIAL_6O2); +be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str_addr); +be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_get_style_pad_right); +be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032); +be_define_const_str(AudioOpusDecoder, "AudioOpusDecoder", 1187272062u, 0, 16, &be_const_str_SERIAL_7E2); +be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, &be_const_str_detected_X20on_X20bus); +be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_every_50ms); +be_define_const_str(Auto_X2Dconfiguration, "Auto-configuration", 1665006109u, 0, 18, &be_const_str_depower); +be_define_const_str(BECDFE, "BECDFE", 608341218u, 0, 6, &be_const_str_bytes); +be_define_const_str(BLE, "BLE", 3933843306u, 0, 3, &be_const_str__end_transmission); +be_define_const_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, "BRY: ERROR, bad json: ", 2715135809u, 0, 22, &be_const_str_splash_remove); +be_define_const_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: Exception> '%s' - %s", 2246990964u, 0, 25, &be_const_str_clear_to); +be_define_const_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function, "BRY: argument must be a function", 3917068408u, 0, 32, &be_const_str_SERIAL_7N1); +be_define_const_str(BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29, "BRY: bytecode has wrong version '%s' (%i)", 2140321415u, 0, 41, &be_const_str_clock); +be_define_const_str(BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27, "BRY: corrupt bytecode '%s'", 4009923544u, 0, 26, &be_const_str_codedump); +be_define_const_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, "BRY: could not save compiled file %s (%s)", 736659787u, 0, 41, &be_const_str_clock_icon); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X29, "BRY: failed to load '%s' (%s)", 54995609u, 0, 29, &be_const_str__rules); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, "BRY: failed to load _persist.json", 2991913445u, 0, 33, &be_const_str__global_def); +be_define_const_str(BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29, "BRY: failed to load compiled '%s' (%s)", 3488122666u, 0, 38, &be_const_str_connection_error); +be_define_const_str(BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code_X20_X27_X25s_X27_X20_X2D_X20_X25s, "BRY: failed to run compiled code '%s' - %s", 380265962u, 0, 42, &be_const_str_gpio); be_define_const_str(BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, "BRY: invalid hue payload: ", 203709367u, 0, 26, NULL); -be_define_const_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, "BRY: method not allowed, use a closure like '/ args -> obj.func(args)'", 177121572u, 0, 70, &be_const_str_widget_width_def); -be_define_const_str(BUTTON_CONFIGURATION, "BUTTON_CONFIGURATION", 70820856u, 0, 20, &be_const_str_resp_cmnd); -be_define_const_str(CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, "CFG: 'init.bat' done, restarting", 1569670677u, 0, 32, &be_const_str_concat); -be_define_const_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "CFG: Exception> '%s' - %s", 1228874553u, 0, 25, &be_const_str_SERIAL_8E2); -be_define_const_str(CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, "CFG: No '*.autoconf' file found", 755798501u, 0, 31, &be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27); -be_define_const_str(CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, "CFG: could not run %s (%s - %s)", 1428829580u, 0, 31, &be_const_str__energy); -be_define_const_str(CFG_X3A_X20downloading_X20_X27_X25s_X27, "CFG: downloading '%s'", 589480701u, 0, 21, &be_const_str_lv_wifi_bars); -be_define_const_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, "CFG: exception '%s' - '%s'", 4095407913u, 0, 26, &be_const_str__persist_X2Ejson); -be_define_const_str(CFG_X3A_X20loaded_X20_X20, "CFG: loaded ", 3710273538u, 0, 13, &be_const_str_add_anim); -be_define_const_str(CFG_X3A_X20loaded_X20_X27_X25s_X27, "CFG: loaded '%s'", 1699028828u, 0, 16, &be_const_str_SERIAL_8O2); -be_define_const_str(CFG_X3A_X20loading_X20, "CFG: loading ", 4010361503u, 0, 13, &be_const_str_I2C_Driver); -be_define_const_str(CFG_X3A_X20loading_X20_X27_X25s_X27, "CFG: loading '%s'", 2285306097u, 0, 17, &be_const_str_arch); -be_define_const_str(CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, "CFG: multiple autoconf files found, aborting ('%s' + '%s')", 197663371u, 0, 58, &be_const_str_io_error); -be_define_const_str(CFG_X3A_X20ran_X20_X20, "CFG: ran ", 3579570472u, 0, 10, &be_const_str_SERIAL_5N2); -be_define_const_str(CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, "CFG: removed file '%s'", 2048602473u, 0, 22, &be_const_str__change_buffer); -be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str_init); -be_define_const_str(CFG_X3A_X20removing_X20first_X20time_X20marker, "CFG: removing first time marker", 2125556683u, 0, 31, &be_const_str_RELAY); -be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_collect); -be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str_dimmer); -be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str_offseta); +be_define_const_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, "BRY: method not allowed, use a closure like '/ args -> obj.func(args)'", 177121572u, 0, 70, &be_const_str_widget_struct_by_class); +be_define_const_str(BUTTON_CONFIGURATION, "BUTTON_CONFIGURATION", 70820856u, 0, 20, &be_const_str_classof); +be_define_const_str(CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, "CFG: 'init.bat' done, restarting", 1569670677u, 0, 32, &be_const_str_RGBCT); +be_define_const_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, "CFG: Exception> '%s' - %s", 1228874553u, 0, 25, &be_const_str_return); +be_define_const_str(CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, "CFG: No '*.autoconf' file found", 755798501u, 0, 31, &be_const_str_input); +be_define_const_str(CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, "CFG: could not run %s (%s - %s)", 1428829580u, 0, 31, &be_const_str_asin); +be_define_const_str(CFG_X3A_X20downloading_X20_X27_X25s_X27, "CFG: downloading '%s'", 589480701u, 0, 21, &be_const_str_get_aps_voltage); +be_define_const_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, "CFG: exception '%s' - '%s'", 4095407913u, 0, 26, &be_const_str_init); +be_define_const_str(CFG_X3A_X20loaded_X20_X20, "CFG: loaded ", 3710273538u, 0, 13, &be_const_str_back_forth); +be_define_const_str(CFG_X3A_X20loaded_X20_X27_X25s_X27, "CFG: loaded '%s'", 1699028828u, 0, 16, NULL); +be_define_const_str(CFG_X3A_X20loading_X20, "CFG: loading ", 4010361503u, 0, 13, &be_const_str_begin_multicast); +be_define_const_str(CFG_X3A_X20loading_X20_X27_X25s_X27, "CFG: loading '%s'", 2285306097u, 0, 17, &be_const_str_send); +be_define_const_str(CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, "CFG: multiple autoconf files found, aborting ('%s' + '%s')", 197663371u, 0, 58, &be_const_str_minute); +be_define_const_str(CFG_X3A_X20ran_X20_X20, "CFG: ran ", 3579570472u, 0, 10, &be_const_str_HTTP_GET); +be_define_const_str(CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, "CFG: removed file '%s'", 2048602473u, 0, 22, &be_const_str_SERIAL_7O1); +be_define_const_str(CFG_X3A_X20removing_X20autoconf_X20files, "CFG: removing autoconf files", 4014704970u, 0, 28, &be_const_str_write8); +be_define_const_str(CFG_X3A_X20removing_X20first_X20time_X20marker, "CFG: removing first time marker", 2125556683u, 0, 31, NULL); +be_define_const_str(CFG_X3A_X20return_code_X3D_X25i, "CFG: return_code=%i", 2059897320u, 0, 19, &be_const_str_frombytes); +be_define_const_str(CFG_X3A_X20running_X20, "CFG: running ", 2478334534u, 0, 13, &be_const_str__); +be_define_const_str(CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, "CFG: skipping 'display.ini' because already present in file-system", 3965549264u, 0, 66, &be_const_str_pin_used); be_define_const_str(COLOR_BLACK, "COLOR_BLACK", 264427940u, 0, 11, NULL); -be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, &be_const_str_quality); -be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str_False); -be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, NULL); -be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_lv_event_cb); -be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str___iterator__); -be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, &be_const_str_hs2rgb); -be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, &be_const_str_remove_light); -be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str_MD5); -be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, &be_const_str_loop); -be_define_const_str(False, "False", 2541049336u, 0, 5, &be_const_str_SERIAL_7N1); -be_define_const_str(GET, "GET", 2531704439u, 0, 3, NULL); -be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, NULL); -be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, NULL); -be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, &be_const_str_set_bits_per_sample); -be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_addr); -be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str_count); -be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_frombytes); -be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, &be_const_str__crons); -be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, NULL); -be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, &be_const_str_refr_now); -be_define_const_str(MAX_RMT, "MAX_RMT", 1615574873u, 0, 7, &be_const_str_c); -be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_power_off); -be_define_const_str(MI32, "MI32", 4074273414u, 0, 4, &be_const_str_tobytes); -be_define_const_str(None, "None", 810547195u, 0, 4, &be_const_str_light_state); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_module); -be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_month); -be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str_resp_cmnd_error); -be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_call); -be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_battery_present); -be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, &be_const_str_set_exten); -be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str_clear_first_time); -be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, NULL); -be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_get_MAC); -be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, NULL); -be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_set_width); -be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str__end_transmission); -be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_atan); -be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_wire_scan); -be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_draw_arc_dsc); -be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_compress); -be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, NULL); -be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, NULL); -be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_widget_struct_by_class); -be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_set_style_border_width); -be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_fromb64); -be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_set_ct); -be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_hour); -be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, NULL); -be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_lv_style_prop_arr); -be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, NULL); -be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, NULL); -be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_x); -be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_set_hue16sat); -be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_arg); -be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_delete_all_configs); -be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_conn_cb); -be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_get_alternate); -be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_content_send_style); -be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_add_light); -be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, NULL); -be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, NULL); +be_define_const_str(COLOR_WHITE, "COLOR_WHITE", 2536871270u, 0, 11, &be_const_str_wifi); +be_define_const_str(CT, "CT", 1792671826u, 0, 2, &be_const_str_publish_result); +be_define_const_str(DIMMER, "DIMMER", 4049308363u, 0, 6, &be_const_str_dirty); +be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_SERIAL_7N2); +be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str___upper__); +be_define_const_str(EVENT_DRAW_MAIN, "EVENT_DRAW_MAIN", 1955620614u, 0, 15, &be_const_str_adv_cb); +be_define_const_str(EVENT_DRAW_PART_BEGIN, "EVENT_DRAW_PART_BEGIN", 3391865024u, 0, 21, NULL); +be_define_const_str(EVENT_DRAW_PART_END, "EVENT_DRAW_PART_END", 3301625292u, 0, 19, &be_const_str_exec_rules); +be_define_const_str(EXTERNAL_I2S, "EXTERNAL_I2S", 4067456169u, 0, 12, &be_const_str_issubclass); +be_define_const_str(False, "False", 2541049336u, 0, 5, &be_const_str_get_pixel_color); +be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_conn_cb); +be_define_const_str(HTTP_GET, "HTTP_GET", 1722467738u, 0, 8, &be_const_str__timers); +be_define_const_str(HTTP_POST, "HTTP_POST", 1999554144u, 0, 9, &be_const_str_ceil); +be_define_const_str(I2C_X3A, "I2C:", 813483371u, 0, 4, &be_const_str_get_bat_power); +be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_devices); +be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str_flush); +be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_SERIAL_5E2); +be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, &be_const_str_lv_wifi_arcs); +be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str_set_chr); +be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, &be_const_str_read_sensors); +be_define_const_str(MAX_RMT, "MAX_RMT", 1615574873u, 0, 7, NULL); +be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_create_segment); +be_define_const_str(MI32, "MI32", 4074273414u, 0, 4, &be_const_str_init_draw_line_dsc); +be_define_const_str(None, "None", 810547195u, 0, 4, NULL); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, NULL); +be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_set_ldo_voltage); +be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str_lv_clock); +be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_has); +be_define_const_str(Parameter_X20error, "Parameter error", 3840042038u, 0, 15, &be_const_str_wire); +be_define_const_str(RELAY, "RELAY", 2163786658u, 0, 5, NULL); +be_define_const_str(RES_OK, "RES_OK", 1233817284u, 0, 6, &be_const_str_SERIAL_6E1); +be_define_const_str(RGB, "RGB", 3386082140u, 0, 3, &be_const_str_adv_watch); +be_define_const_str(RGBCT, "RGBCT", 8076251u, 0, 5, &be_const_str_engine); +be_define_const_str(RGBW, "RGBW", 3270986321u, 0, 4, &be_const_str__crons); +be_define_const_str(Restart_X201, "Restart 1", 3504455855u, 0, 9, &be_const_str_Unknown); +be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, NULL); +be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, NULL); +be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_escape); +be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, NULL); +be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_from_to); +be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str_enabled); +be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_offset); +be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj); +be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, NULL); +be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_web_send_decimal); +be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, NULL); +be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, NULL); +be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_lv_coord_arr); +be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str__cmd); +be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_WS2812); +be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_ins_time); +be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_dump); +be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_get_percentage); +be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, NULL); +be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_set_reachable); +be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_remote_ip); +be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, NULL); +be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, NULL); +be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_add_handler); +be_define_const_str(SK6812_GRBW, "SK6812_GRBW", 81157857u, 0, 11, &be_const_str_connect); +be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str_page_autoconf_ctl); be_define_const_str(TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, "TAP: Loaded Tasmota App '%s'", 926477145u, 0, 28, NULL); -be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, &be_const_str_now); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_group_def); -be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, NULL); -be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str_ceil); -be_define_const_str(True, "True", 3453902341u, 0, 4, &be_const_str_draw_line); -be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, &be_const_str_get_hor_res); -be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, &be_const_str_get_free_heap); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str__lvgl); -be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, &be_const_str__settings_ptr); -be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, NULL); -be_define_const_str(_X5B, "[", 3725336506u, 0, 1, &be_const_str_send); -be_define_const_str(_X5D, "]", 3624670792u, 0, 1, &be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus); -be_define_const_str(_, "_", 3658226030u, 0, 1, &be_const_str_animate); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, NULL); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_hex); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_splash_init); -be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, &be_const_str_start); -be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, &be_const_str_base_class); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str__def); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_f); -be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str_energy_struct); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_deregister_obj); -be_define_const_str(_change_buffer, "_change_buffer", 2101848693u, 0, 14, &be_const_str_devices); -be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_adv_watch); +be_define_const_str(TASMOTA, "TASMOTA", 2487641028u, 0, 7, &be_const_str_json_append); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_set_style_img_recolor); +be_define_const_str(Tele, "Tele", 1329980653u, 0, 4, &be_const_str_ccronexpr); +be_define_const_str(Trigger, "Trigger", 2783579555u, 0, 7, &be_const_str_tcpclient); +be_define_const_str(True, "True", 3453902341u, 0, 4, &be_const_str_get_string); +be_define_const_str(Unknown, "Unknown", 3424652889u, 0, 7, &be_const_str__rmt); +be_define_const_str(Unknown_X20command, "Unknown command", 1830905432u, 0, 15, &be_const_str_path); +be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_resp_cmnd_failed); +be_define_const_str(WS2812_GRB, "WS2812_GRB", 1736405692u, 0, 10, &be_const_str_attrdump); +be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str_cmd_res); +be_define_const_str(_X5B, "[", 3725336506u, 0, 1, &be_const_str_get_coords); +be_define_const_str(_X5D, "]", 3624670792u, 0, 1, &be_const_str_decrypt); +be_define_const_str(_, "_", 3658226030u, 0, 1, &be_const_str_for); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str__global_addr); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, NULL); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_zero); +be_define_const_str(_anonymous_, "_anonymous_", 1957281476u, 0, 11, &be_const_str_has_arg); +be_define_const_str(_archive, "_archive", 4004559404u, 0, 8, &be_const_str_lv_event_cb); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_check_not_method); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str__read); +be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str_io_error); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_argument_X20must_X20be_X20a_X20function); +be_define_const_str(_change_buffer, "_change_buffer", 2101848693u, 0, 14, NULL); +be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_delete_all_configs); be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, NULL); -be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_set_style_pad_right); -be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, &be_const_str_acos); -be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_widget_event_impl); -be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, NULL); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str__write); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str__rules); -be_define_const_str(_energy, "_energy", 535372070u, 0, 7, &be_const_str_register_button_encoder); -be_define_const_str(_error, "_error", 1132109656u, 0, 6, &be_const_str__global_addr); -be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, &be_const_str_listdir); -be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, &be_const_str_calldepth); +be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_has_X20already_X20an_X20event_X20callback); +be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, &be_const_str_wifi_bars); +be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_decode); +be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, &be_const_str_local); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_scale_uint); +be_define_const_str(_energy, "_energy", 535372070u, 0, 7, &be_const_str_power_off); +be_define_const_str(_error, "_error", 1132109656u, 0, 6, NULL); +be_define_const_str(_filename, "_filename", 1430813195u, 0, 9, NULL); +be_define_const_str(_fl, "_fl", 4042564892u, 0, 3, NULL); be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, NULL); -be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_get_warning_level); -be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_id_X20must_X20be_X20of_X20type_X20_X27int_X27); -be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_load_freetype_font); -be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, &be_const_str_consume_mono); -be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_param); -be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_get_bri); +be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_point_arr); +be_define_const_str(_lvgl, "_lvgl", 2689219483u, 0, 5, &be_const_str_atan); +be_define_const_str(_p, "_p", 1594591802u, 0, 2, &be_const_str_uuid4); +be_define_const_str(_persist_X2Ejson, "_persist.json", 2008425138u, 0, 13, NULL); +be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_closure); +be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_pop_path); be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, NULL); -be_define_const_str(_rmt, "_rmt", 1094422685u, 0, 4, &be_const_str_detect); +be_define_const_str(_rmt, "_rmt", 1094422685u, 0, 4, NULL); be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, NULL); -be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, NULL); -be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_cmd_res); -be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, &be_const_str_debug); -be_define_const_str(_t, "_t", 1527481326u, 0, 2, &be_const_str_write_bit); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_autoexec); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_abs); -be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_signal_bars); +be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, &be_const_str_exists); +be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_web_add_main_button); +be_define_const_str(_splash, "_splash", 3660617917u, 0, 7, NULL); +be_define_const_str(_t, "_t", 1527481326u, 0, 2, NULL); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_missing_X20name); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_draw_line_dsc); +be_define_const_str(a, "a", 3826002220u, 0, 1, &be_const_str_get_switch); be_define_const_str(abs, "abs", 709362235u, 0, 3, NULL); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_get_bat_charge_current); -be_define_const_str(add, "add", 993596020u, 0, 3, NULL); -be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_refr_pos); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_class_init_obj); -be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_font_montserrat); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, NULL); -be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_ctor); -be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, &be_const_str_closure); -be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, &be_const_str_bri); -be_define_const_str(add_header, "add_header", 927130612u, 0, 10, NULL); -be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, NULL); -be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_set_timer); -be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_srand); -be_define_const_str(adv_block, "adv_block", 4243837184u, 0, 9, &be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf); -be_define_const_str(adv_cb, "adv_cb", 1957890034u, 0, 6, &be_const_str_arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj); -be_define_const_str(adv_watch, "adv_watch", 3871786950u, 0, 9, NULL); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, NULL); -be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, &be_const_str_push); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_pixels_buffer); +be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_publish); +be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_get_hor_res); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, NULL); +be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_content_button); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_argument_X20must_X20be_X20a_X20list); +be_define_const_str(add_event_cb, "add_event_cb", 633097693u, 0, 12, &be_const_str_search); +be_define_const_str(add_fast_loop, "add_fast_loop", 3025842946u, 0, 13, &be_const_str_set_style_radius); +be_define_const_str(add_handler, "add_handler", 2055124119u, 0, 11, &be_const_str_getbits); +be_define_const_str(add_header, "add_header", 927130612u, 0, 10, &be_const_str_compile); +be_define_const_str(add_light, "add_light", 3169328603u, 0, 9, &be_const_str_clear_first_time); +be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, NULL); +be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_check_privileged_access); +be_define_const_str(adv_block, "adv_block", 4243837184u, 0, 9, &be_const_str_asstring); +be_define_const_str(adv_cb, "adv_cb", 1957890034u, 0, 6, &be_const_str_to_gamma); +be_define_const_str(adv_watch, "adv_watch", 3871786950u, 0, 9, &be_const_str_draw_arc_dsc_init); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_get_cb_list); +be_define_const_str(alternate, "alternate", 1140253277u, 0, 9, NULL); be_define_const_str(animate, "animate", 3885786800u, 0, 7, NULL); -be_define_const_str(animators, "animators", 279858213u, 0, 9, NULL); -be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_lv); -be_define_const_str(arch, "arch", 2952804297u, 0, 4, &be_const_str_rotate); -be_define_const_str(area, "area", 2601460036u, 0, 4, &be_const_str_hue); -be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_files); -be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, &be_const_str_content_send); +be_define_const_str(animators, "animators", 279858213u, 0, 9, &be_const_str_valuer_error); +be_define_const_str(arc_dsc, "arc_dsc", 2768816310u, 0, 7, &be_const_str_clear); +be_define_const_str(arch, "arch", 2952804297u, 0, 4, NULL); +be_define_const_str(area, "area", 2601460036u, 0, 4, NULL); +be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_set); +be_define_const_str(arg_X20must_X20be_X20a_X20subclass_X20of_X20lv_obj, "arg must be a subclass of lv_obj", 1641882079u, 0, 32, NULL); be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, NULL); -be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, NULL); -be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_set_huesat); +be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, &be_const_str_unknown_X20instruction); +be_define_const_str(argument_X20must_X20be_X20a_X20function, "argument must be a function", 527172389u, 0, 27, &be_const_str_month); be_define_const_str(argument_X20must_X20be_X20a_X20list, "argument must be a list", 3056915661u, 0, 23, NULL); -be_define_const_str(argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize, "argument must be a list or a pointer+size", 241605448u, 0, 41, &be_const_str_create_matrix); +be_define_const_str(argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize, "argument must be a list or a pointer+size", 241605448u, 0, 41, &be_const_str_register_obj); be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_set_mode_rgb); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_rtc); -be_define_const_str(assign_rmt, "assign_rmt", 1047642576u, 0, 10, NULL); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL); -be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_groups); -be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, NULL); -be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, NULL); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_json_fdump); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_can_show); +be_define_const_str(assign_rmt, "assign_rmt", 1047642576u, 0, 10, &be_const_str_tanh); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_eth); +be_define_const_str(atan, "atan", 108579519u, 0, 4, NULL); +be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, &be_const_str_read); +be_define_const_str(atleast1, "atleast1", 1956331672u, 0, 8, &be_const_str_resp_cmnd_str); be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, NULL); -be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_find_op); -be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, &be_const_str_int); -be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_clear); -be_define_const_str(b, "b", 3876335077u, 0, 1, &be_const_str_from_to); -be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, &be_const_str_reapply); -be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, &be_const_str_elements_X20must_X20be_X20a_X20lv_point); -be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_engine); -be_define_const_str(before_del, "before_del", 815924436u, 0, 10, &be_const_str_draw_line_dsc_init); -be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_consume_silence); -be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, &be_const_str_last_modified); -be_define_const_str(bool, "bool", 3365180733u, 0, 4, &be_const_str_offset); +be_define_const_str(autoexec, "autoexec", 3676861891u, 0, 8, &be_const_str_json_fdump_map); +be_define_const_str(autorun, "autorun", 1447527407u, 0, 7, &be_const_str_ctor); +be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_height_def); +be_define_const_str(b, "b", 3876335077u, 0, 1, &be_const_str_ctypes_bytes); +be_define_const_str(back_forth, "back_forth", 2665042062u, 0, 10, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); +be_define_const_str(base_class, "base_class", 1107737279u, 0, 10, &be_const_str_draw_arc_dsc); +be_define_const_str(battery_present, "battery_present", 3588397058u, 0, 15, &be_const_str_counters); +be_define_const_str(before_del, "before_del", 815924436u, 0, 10, &be_const_str_bri); +be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_run_bat); +be_define_const_str(begin_multicast, "begin_multicast", 57647915u, 0, 15, &be_const_str_make_cb); +be_define_const_str(bool, "bool", 3365180733u, 0, 4, &be_const_str_read8); be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); -be_define_const_str(bri, "bri", 2112284244u, 0, 3, &be_const_str_cmd); -be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_map); -be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, NULL); -be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_create_custom_widget); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_cb_event_closure); -be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_decrypt); -be_define_const_str(call, "call", 3018949801u, 0, 4, NULL); -be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, &be_const_str_gamma8); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_next); -be_define_const_str(can_show, "can_show", 960091187u, 0, 8, &be_const_str_get_percentage); -be_define_const_str(cb, "cb", 1428787088u, 0, 2, NULL); -be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, NULL); -be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, &be_const_str_break); -be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, NULL); -be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, &be_const_str_issubclass); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_detected_X20on_X20bus); -be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_get_style_pad_right); +be_define_const_str(bri, "bri", 2112284244u, 0, 3, &be_const_str_set_exten); +be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_fromptr); +be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_preinit); +be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_get_bat_voltage); +be_define_const_str(c, "c", 3859557458u, 0, 1, &be_const_str_break); +be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_x); +be_define_const_str(call_native, "call_native", 1389147405u, 0, 11, &be_const_str_label); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_lvgl_event_dispatch); +be_define_const_str(can_show, "can_show", 960091187u, 0, 8, &be_const_str_log); +be_define_const_str(cb, "cb", 1428787088u, 0, 2, &be_const_str_format); +be_define_const_str(cb_do_nothing, "cb_do_nothing", 1488730702u, 0, 13, &be_const_str_gamma8); +be_define_const_str(cb_event_closure, "cb_event_closure", 3828267325u, 0, 16, &be_const_str_redirect); +be_define_const_str(cb_obj, "cb_obj", 1195696482u, 0, 6, &be_const_str_connected); +be_define_const_str(ccronexpr, "ccronexpr", 258146169u, 0, 9, NULL); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_imin); +be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_groups); be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, NULL); -be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, &be_const_str_get_cb_list); -be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_ins_goto); +be_define_const_str(check_not_method, "check_not_method", 2597324607u, 0, 16, &be_const_str_real); +be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, NULL); be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, &be_const_str_p1); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, NULL); +be_define_const_str(class_init_obj, "class_init_obj", 178410604u, 0, 14, NULL); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_next); be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, NULL); -be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_set_style_img_recolor); -be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, &be_const_str_leds); -be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, &be_const_str_function); -be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_id); -be_define_const_str(closure, "closure", 1548407746u, 0, 7, &be_const_str_list_handlers); -be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_set_reachable); -be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, NULL); -be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_set_channels); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_set_hum); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_preinit); -be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_exists); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_init_draw_arc_dsc); -be_define_const_str(compress, "compress", 2818084237u, 0, 8, &be_const_str_connected); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL); -be_define_const_str(conn_cb, "conn_cb", 1381122945u, 0, 7, &be_const_str_content_flush); -be_define_const_str(connect, "connect", 2866859257u, 0, 7, &be_const_str_remove_cron); -be_define_const_str(connected, "connected", 1424938192u, 0, 9, NULL); -be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, &be_const_str_geti); -be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, &be_const_str_splash_remove); -be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, &be_const_str_get_current_module_path); -be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, &be_const_str_set_user_data); -be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, &be_const_str_draw_ctx); -be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_hue_status); -be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_ctypes_bytes_dyn); -be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_serial); -be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_has_X20already_X20an_X20event_X20callback); -be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, &be_const_str_readline); -be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_full_status); -be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_display_X2Eini); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_try_run_compiled); +be_define_const_str(clear_first_time, "clear_first_time", 632769909u, 0, 16, &be_const_str_push); +be_define_const_str(clear_to, "clear_to", 3528002130u, 0, 8, &be_const_str_cos); +be_define_const_str(clock, "clock", 363073373u, 0, 5, &be_const_str_get_free_heap); +be_define_const_str(clock_icon, "clock_icon", 544669651u, 0, 10, &be_const_str_i2c_enabled); +be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_set_style_img_recolor_opa); +be_define_const_str(closure, "closure", 1548407746u, 0, 7, NULL); +be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_set_style_border_width); +be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_rtc); +be_define_const_str(code, "code", 4180765940u, 0, 4, &be_const_str_isrunning); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_lv_wifi_bars); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_round_end); +be_define_const_str(color, "color", 1031692888u, 0, 5, &be_const_str_wifi_arcs); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_set_dc_voltage); +be_define_const_str(compress, "compress", 2818084237u, 0, 8, NULL); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_resp_cmnd_error); +be_define_const_str(conn_cb, "conn_cb", 1381122945u, 0, 7, &be_const_str_get_MAC); +be_define_const_str(connect, "connect", 2866859257u, 0, 7, NULL); +be_define_const_str(connected, "connected", 1424938192u, 0, 9, &be_const_str_create_custom_widget); +be_define_const_str(connection_error, "connection_error", 1358926260u, 0, 16, &be_const_str_matrix); +be_define_const_str(constructor_cb, "constructor_cb", 2489105297u, 0, 14, NULL); +be_define_const_str(consume_mono, "consume_mono", 3577563453u, 0, 12, &be_const_str_math); +be_define_const_str(consume_silence, "consume_silence", 1445390925u, 0, 15, &be_const_str_lv_style_prop_arr); +be_define_const_str(consume_stereo, "consume_stereo", 1834661098u, 0, 14, &be_const_str_files); +be_define_const_str(contains, "contains", 1825239352u, 0, 8, NULL); +be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_tag); +be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_hour); +be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_deregister_obj); +be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, &be_const_str_screenshot); +be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); +be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_gen_cb); be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, &be_const_str_gamma10); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, NULL); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_event); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, NULL); -be_define_const_str(couldn_X27t_X20not_X20initialize_X20noepixelbus, "couldn't not initialize noepixelbus", 2536490812u, 0, 35, &be_const_str_find); -be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_imin); -be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_discover); -be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, &be_const_str_height_def); -be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, &be_const_str_has_arg); -be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, &be_const_str_wire); -be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_lv_timer_cb); -be_define_const_str(ctor, "ctor", 375399343u, 0, 4, &be_const_str_get_switches); +be_define_const_str(coord_arr, "coord_arr", 4189963658u, 0, 9, NULL); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_isinstance); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_obj_class_create_obj); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_set_timeouts); +be_define_const_str(couldn_X27t_X20not_X20initialize_X20noepixelbus, "couldn't not initialize noepixelbus", 2536490812u, 0, 35, &be_const_str_lv_obj_class); +be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_get_width); +be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_reapply); +be_define_const_str(create_custom_widget, "create_custom_widget", 1140594778u, 0, 20, &be_const_str_value); +be_define_const_str(create_matrix, "create_matrix", 3528185923u, 0, 13, NULL); +be_define_const_str(create_segment, "create_segment", 3863522719u, 0, 14, &be_const_str_leds); +be_define_const_str(ct, "ct", 1261010898u, 0, 2, &be_const_str_null_cb); +be_define_const_str(ctor, "ctor", 375399343u, 0, 4, NULL); be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, NULL); -be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, &be_const_str_set_style_radius); -be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, NULL); -be_define_const_str(day, "day", 3830391293u, 0, 3, &be_const_str_path); -be_define_const_str(debug, "debug", 1483009432u, 0, 5, NULL); -be_define_const_str(decode, "decode", 3007678287u, 0, 6, &be_const_str_exec_rules); -be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, NULL); -be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_widget_struct_default); +be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, &be_const_str_get_battery_chargin_status); +be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_scr_act); +be_define_const_str(day, "day", 3830391293u, 0, 3, &be_const_str_percentage); +be_define_const_str(debug, "debug", 1483009432u, 0, 5, &be_const_str_save); +be_define_const_str(decode, "decode", 3007678287u, 0, 6, &be_const_str_get_vbus_voltage); +be_define_const_str(decompress, "decompress", 2887031650u, 0, 10, &be_const_str_find); +be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, NULL); be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_keys); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_static); -be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_set_pwm); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_get_option); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_discover); +be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_set_temp); be_define_const_str(delay, "delay", 1322381784u, 0, 5, NULL); be_define_const_str(delete_all_configs, "delete_all_configs", 2382067578u, 0, 18, NULL); -be_define_const_str(depower, "depower", 3563819571u, 0, 7, NULL); -be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_gpio); -be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, &be_const_str_log10); -be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_full_state); -be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, NULL); -be_define_const_str(devices, "devices", 2701822848u, 0, 7, NULL); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_lv_event); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_set_bri); -be_define_const_str(dim, "dim", 3496118841u, 0, 3, NULL); +be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_display); +be_define_const_str(deregister_obj, "deregister_obj", 3909966993u, 0, 14, &be_const_str_elif); +be_define_const_str(destructor_cb, "destructor_cb", 1930283190u, 0, 13, &be_const_str_x1); +be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL); +be_define_const_str(detected_X20on_X20bus, "detected on bus", 1432002650u, 0, 15, &be_const_str_lv_); +be_define_const_str(devices, "devices", 2701822848u, 0, 7, &be_const_str_while); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_ins_ramp); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_setfloat); +be_define_const_str(dim, "dim", 3496118841u, 0, 3, &be_const_str_get_power); be_define_const_str(dimmer, "dimmer", 794270539u, 0, 6, NULL); -be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, NULL); -be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_getbits); -be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_set_style_pad_all); +be_define_const_str(dirty, "dirty", 2667581083u, 0, 5, &be_const_str_instance_X20required); +be_define_const_str(discover, "discover", 1383599054u, 0, 8, &be_const_str_every_100ms); +be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_hue); be_define_const_str(display_X2Eini, "display.ini", 2646174001u, 0, 11, NULL); be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); -be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, &be_const_str_fast_loop_enabled); +be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, &be_const_str_tan); be_define_const_str(draw_arc_dsc, "draw_arc_dsc", 2411410957u, 0, 12, NULL); be_define_const_str(draw_arc_dsc_init, "draw_arc_dsc_init", 402724044u, 0, 17, NULL); -be_define_const_str(draw_ctx, "draw_ctx", 953366593u, 0, 8, &be_const_str_select); -be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_readbytes); -be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); -be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, &be_const_str_else); -be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, &be_const_str_label); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); -be_define_const_str(duration, "duration", 799079693u, 0, 8, &be_const_str_lv_point_arr); -be_define_const_str(editable, "editable", 60532369u, 0, 8, &be_const_str_erase); -be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_web_add_main_button); +be_define_const_str(draw_ctx, "draw_ctx", 953366593u, 0, 8, NULL); +be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_run); +be_define_const_str(draw_line_dsc, "draw_line_dsc", 4220676203u, 0, 13, &be_const_str_set_ldo_enable); +be_define_const_str(draw_line_dsc_init, "draw_line_dsc_init", 3866693646u, 0, 18, &be_const_str_set_huesat); +be_define_const_str(driver_name, "driver_name", 862681603u, 0, 11, &be_const_str_read_bytes); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_lv_signal_bars); +be_define_const_str(duration, "duration", 799079693u, 0, 8, NULL); +be_define_const_str(editable, "editable", 60532369u, 0, 8, &be_const_str_iter); +be_define_const_str(elements_X20must_X20be_X20a_X20lv_point, "elements must be a lv_point", 1415796524u, 0, 27, &be_const_str_readbytes); be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); -be_define_const_str(enabled, "enabled", 49525662u, 0, 7, NULL); -be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_set_size); +be_define_const_str(enabled, "enabled", 49525662u, 0, 7, &be_const_str_set_user_data); +be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, NULL); be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, &be_const_str_get_switch); -be_define_const_str(engine, "engine", 3993360443u, 0, 6, NULL); -be_define_const_str(erase, "erase", 1010949589u, 0, 5, NULL); +be_define_const_str(energy_struct, "energy_struct", 1655792843u, 0, 13, &be_const_str_ptr); +be_define_const_str(engine, "engine", 3993360443u, 0, 6, &be_const_str_load); +be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_f); be_define_const_str(escape, "escape", 2652972038u, 0, 6, NULL); be_define_const_str(eth, "eth", 2191266556u, 0, 3, NULL); -be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_tolower); -be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, &be_const_str_get_power); -be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_minute); -be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, NULL); -be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, &be_const_str_set_ldo_voltage); -be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, NULL); -be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_list); +be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_set_MAC); +be_define_const_str(event_cb, "event_cb", 3128698017u, 0, 8, &be_const_str_sin); +be_define_const_str(event_send, "event_send", 598925582u, 0, 10, &be_const_str_lv_event); +be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, &be_const_str_fromstring); +be_define_const_str(every_250ms, "every_250ms", 2579240000u, 0, 11, NULL); +be_define_const_str(every_50ms, "every_50ms", 2383884008u, 0, 10, &be_const_str_running); +be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_exec_cmd); be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_widget_ctor_impl); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_signal_arcs); -be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, NULL); -be_define_const_str(exists, "exists", 1002329533u, 0, 6, NULL); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_null_cb); -be_define_const_str(f, "f", 3809224601u, 0, 1, &be_const_str_get_light); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str__X7B_X7D); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_gamma); +be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_member); +be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_get); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_fast_loop_enabled); +be_define_const_str(f, "f", 3809224601u, 0, 1, &be_const_str_select); be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, NULL); -be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, &be_const_str_try); -be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_read_bytes); -be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, NULL); -be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_set_dc_voltage); -be_define_const_str(find, "find", 3186656602u, 0, 4, NULL); -be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_read24); -be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_h); -be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_print); -be_define_const_str(flush, "flush", 3002334877u, 0, 5, &be_const_str_remove_cmd); -be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_isrunning); -be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, &be_const_str_resp_cmnd_failed); -be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, NULL); +be_define_const_str(fast_loop, "fast_loop", 3414422702u, 0, 9, &be_const_str_instance); +be_define_const_str(fast_loop_enabled, "fast_loop_enabled", 2567964376u, 0, 17, &be_const_str_set_style_pad_right); +be_define_const_str(file, "file", 2867484483u, 0, 4, &be_const_str_time_dump); +be_define_const_str(file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, "file extension is not '.be' or '.bec'", 3095719639u, 0, 37, &be_const_str_is_running); +be_define_const_str(files, "files", 1055342736u, 0, 5, &be_const_str_item); +be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_set_first_time); +be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_try_compile); +be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_var); +be_define_const_str(finish, "finish", 1494643858u, 0, 6, &be_const_str_state); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_response_append); +be_define_const_str(flush, "flush", 3002334877u, 0, 5, NULL); +be_define_const_str(font_embedded, "font_embedded", 1623675143u, 0, 13, &be_const_str_get_height); +be_define_const_str(font_montserrat, "font_montserrat", 3790091262u, 0, 15, &be_const_str_group_def); +be_define_const_str(font_seg7, "font_seg7", 1551771835u, 0, 9, &be_const_str_hs2rgb); be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_set_matrix_pixel_color); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_set_percentage); be_define_const_str(from_to, "from_to", 21625507u, 0, 7, NULL); be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, NULL); -be_define_const_str(frombytes, "frombytes", 3771700788u, 0, 9, &be_const_str_get_bat_voltage); -be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, &be_const_str_lv_wifi_arcs_icon); -be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, NULL); -be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_min); -be_define_const_str(full_status, "full_status", 648242459u, 0, 11, &be_const_str_sys); -be_define_const_str(function, "function", 2664841801u, 0, 8, &be_const_str_set_pixel_color); -be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, &be_const_str_wifi_arcs_icon); -be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_obj_event_base); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_set_rgb); -be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL); -be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_scan); -be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_get_current_module_name); -be_define_const_str(get_MAC, "get_MAC", 2091521771u, 0, 7, NULL); -be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_global); -be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, &be_const_str_set_mode_ct); -be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, &be_const_str_init_draw_line_dsc); -be_define_const_str(get_bat_current, "get_bat_current", 1912106073u, 0, 15, NULL); -be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, NULL); -be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, &be_const_str_int64); -be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, &be_const_str_get_object_from_ptr); -be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, &be_const_str_lower); -be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, &be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map); +be_define_const_str(frombytes, "frombytes", 3771700788u, 0, 9, NULL); +be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, &be_const_str_offseta); +be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_resp_cmnd); +be_define_const_str(full_state, "full_state", 255687770u, 0, 10, &be_const_str_get_current_module_name); +be_define_const_str(full_status, "full_status", 648242459u, 0, 11, NULL); +be_define_const_str(function, "function", 2664841801u, 0, 8, NULL); +be_define_const_str(gamma, "gamma", 3492353034u, 0, 5, &be_const_str_reverse_gamma10); +be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_no_X20more_X20RMT_X20channel_X20available); +be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_class); +be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_set_timer); +be_define_const_str(get, "get", 1410115415u, 0, 3, NULL); +be_define_const_str(get_MAC, "get_MAC", 2091521771u, 0, 7, &be_const_str_pixel_count); +be_define_const_str(get_alternate, "get_alternate", 1450148894u, 0, 13, &be_const_str_set_width); +be_define_const_str(get_aps_voltage, "get_aps_voltage", 2293036435u, 0, 15, &be_const_str_get_object_from_ptr); +be_define_const_str(get_bat_charge_current, "get_bat_charge_current", 1385293050u, 0, 22, NULL); +be_define_const_str(get_bat_current, "get_bat_current", 1912106073u, 0, 15, &be_const_str_widget_dtor_cb); +be_define_const_str(get_bat_power, "get_bat_power", 3067374853u, 0, 13, &be_const_str_module); +be_define_const_str(get_bat_voltage, "get_bat_voltage", 706676538u, 0, 15, &be_const_str_number); +be_define_const_str(get_battery_chargin_status, "get_battery_chargin_status", 2233241571u, 0, 26, NULL); +be_define_const_str(get_bri, "get_bri", 2041809895u, 0, 7, &be_const_str_getfloat); +be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, &be_const_str_get_style_line_color); be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, NULL); -be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, &be_const_str_set_time); -be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, NULL); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_pixels_buffer); -be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, &be_const_str_lvgl_timer_dispatch); -be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, NULL); -be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, &be_const_str_get_name); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_set_y); -be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, &be_const_str_line_dsc); -be_define_const_str(get_name, "get_name", 1616902907u, 0, 8, &be_const_str_web_add_console_button); +be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, &be_const_str_param); +be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, &be_const_str_set_alternate); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_rule); +be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, &be_const_str_min); +be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_get_vbus_current); +be_define_const_str(get_input_power_status, "get_input_power_status", 4102829177u, 0, 22, &be_const_str_get_warning_level); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_unsubscribe); +be_define_const_str(get_log, "get_log", 3524441898u, 0, 7, &be_const_str_o); +be_define_const_str(get_name, "get_name", 1616902907u, 0, 8, NULL); be_define_const_str(get_object_from_ptr, "get_object_from_ptr", 2345019201u, 0, 19, NULL); -be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_save_before_restart); -be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, &be_const_str_tasmota_log_reader); -be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_rounded); +be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_set_bits_per_sample); +be_define_const_str(get_percentage, "get_percentage", 2880483992u, 0, 14, &be_const_str_widget_event_cb); +be_define_const_str(get_pixel_color, "get_pixel_color", 337490048u, 0, 15, &be_const_str_super); be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); -be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, NULL); -be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, &be_const_str_set_percentage); -be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, &be_const_str_redirect); -be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, &be_const_str_hue_ntv); -be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str_return_X20code_X3D_X25i); -be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, &be_const_str_wifi_bars); -be_define_const_str(get_switches, "get_switches", 4116216928u, 0, 12, NULL); -be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, NULL); -be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, NULL); -be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, &be_const_str_page_autoconf_mgr); +be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_setmember); +be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, NULL); +be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, NULL); +be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, NULL); +be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str_toptr); +be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, &be_const_str_pin_mode); +be_define_const_str(get_switches, "get_switches", 4116216928u, 0, 12, &be_const_str_pct); +be_define_const_str(get_temp, "get_temp", 3370919486u, 0, 8, &be_const_str_id); +be_define_const_str(get_vbus_current, "get_vbus_current", 1205347942u, 0, 16, &be_const_str_skip); +be_define_const_str(get_vbus_voltage, "get_vbus_voltage", 2398210401u, 0, 16, NULL); be_define_const_str(get_warning_level, "get_warning_level", 1737834441u, 0, 17, NULL); -be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str_set_MAC); +be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str_widget_constructor); be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, NULL); -be_define_const_str(getfloat, "getfloat", 2820979603u, 0, 8, &be_const_str_instance); -be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_memory); -be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_publish); -be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, NULL); -be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_lv_wifi_arcs); -be_define_const_str(groups, "groups", 2943077229u, 0, 6, &be_const_str_read); -be_define_const_str(h, "h", 3977000791u, 0, 1, &be_const_str_screenshot); -be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_tostring); -be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, &be_const_str_set_style_text_color); -be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_read13); -be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, &be_const_str_remove_driver); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_manuf); -be_define_const_str(hour, "hour", 3053661199u, 0, 4, NULL); -be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, NULL); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, &be_const_str_scale_uint); -be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, &be_const_str_nil); -be_define_const_str(hue, "hue", 3817694041u, 0, 3, NULL); -be_define_const_str(hue_ntv, "hue_ntv", 705068642u, 0, 7, &be_const_str_time_dump); -be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_tan); -be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, &be_const_str_pc); -be_define_const_str(id, "id", 926444256u, 0, 2, &be_const_str_page_autoconf_ctl); -be_define_const_str(id_X20must_X20be_X20of_X20type_X20_X27int_X27, "id must be of type 'int'", 2097653458u, 0, 24, NULL); +be_define_const_str(getfloat, "getfloat", 2820979603u, 0, 8, NULL); +be_define_const_str(geti, "geti", 2381006490u, 0, 4, NULL); +be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_target); +be_define_const_str(gpio, "gpio", 2638155258u, 0, 4, &be_const_str_rad); +be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_introspect); +be_define_const_str(groups, "groups", 2943077229u, 0, 6, NULL); +be_define_const_str(h, "h", 3977000791u, 0, 1, NULL); +be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_tolower); +be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); +be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, NULL); +be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, NULL); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, NULL); +be_define_const_str(hour, "hour", 3053661199u, 0, 4, &be_const_str_set_text); +be_define_const_str(hs2rgb, "hs2rgb", 1040816349u, 0, 6, &be_const_str_resp_cmnd_done); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s/%s.autoconf", 2743526309u, 0, 70, &be_const_str_set_align); +be_define_const_str(https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, "https://raw.githubusercontent.com/tasmota/autoconf/main/%s_manifest.json", 3657552045u, 0, 72, &be_const_str_set_size); +be_define_const_str(hue, "hue", 3817694041u, 0, 3, &be_const_str_map); +be_define_const_str(hue_ntv, "hue_ntv", 705068642u, 0, 7, &be_const_str_montserrat_font); +be_define_const_str(hue_status, "hue_status", 437978812u, 0, 10, &be_const_str_insert); +be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); +be_define_const_str(id, "id", 926444256u, 0, 2, &be_const_str_save_before_restart); +be_define_const_str(id_X20must_X20be_X20of_X20type_X20_X27int_X27, "id must be of type 'int'", 2097653458u, 0, 24, &be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus); be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_uuid4); -be_define_const_str(img, "img", 2229740804u, 0, 3, NULL); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_seg7_font); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_model); +be_define_const_str(img, "img", 2229740804u, 0, 3, &be_const_str_run_deferred); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_instance_size); be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_state); +be_define_const_str(init, "init", 380752755u, 0, 4, NULL); be_define_const_str(init_draw_arc_dsc, "init_draw_arc_dsc", 1655274348u, 0, 17, NULL); -be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_introspect); -be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_members); -be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, &be_const_str_json_fdump_map); -be_define_const_str(ins_ramp, "ins_ramp", 1068049360u, 0, 8, &be_const_str_set_timeouts); -be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, &be_const_str_wire2); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_setitem); +be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_str); +be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_widget_height_def); +be_define_const_str(ins_goto, "ins_goto", 1342843963u, 0, 8, &be_const_str_open); +be_define_const_str(ins_ramp, "ins_ramp", 1068049360u, 0, 8, &be_const_str_set_svc); +be_define_const_str(ins_time, "ins_time", 2980245553u, 0, 8, &be_const_str_url_encode); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, NULL); be_define_const_str(instance, "instance", 193386898u, 0, 8, NULL); -be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, &be_const_str_persist); -be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, &be_const_str_invalidate); -be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_out_X20of_X20range); -be_define_const_str(int64, "int64", 64103268u, 0, 5, &be_const_str_rule); -be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, &be_const_str_json_append); -be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_resp_cmnd_done); -be_define_const_str(invalid_X20GPIO_X20number, "invalid GPIO number", 4135793328u, 0, 19, &be_const_str_type); -be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, &be_const_str_splash); -be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, &be_const_str_tomap); -be_define_const_str(ip, "ip", 1261996636u, 0, 2, NULL); -be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, &be_const_str_read32); +be_define_const_str(instance_X20required, "instance required", 381192159u, 0, 17, NULL); +be_define_const_str(instance_size, "instance_size", 4280269518u, 0, 13, NULL); +be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); +be_define_const_str(int64, "int64", 64103268u, 0, 5, &be_const_str_lv_point); +be_define_const_str(internal_error, "internal_error", 2519158169u, 0, 14, &be_const_str_lv_timer_cb); +be_define_const_str(introspect, "introspect", 164638290u, 0, 10, &be_const_str_except); +be_define_const_str(invalid_X20GPIO_X20number, "invalid GPIO number", 4135793328u, 0, 19, NULL); +be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, &be_const_str_remove_cron); +be_define_const_str(io_error, "io_error", 1970281036u, 0, 8, &be_const_str_is_first_time); +be_define_const_str(ip, "ip", 1261996636u, 0, 2, &be_const_str_lights); +be_define_const_str(is_dirty, "is_dirty", 418034110u, 0, 8, &be_const_str_write_bit); be_define_const_str(is_first_time, "is_first_time", 275242384u, 0, 13, NULL); -be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, NULL); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_tcpclient); -be_define_const_str(ismethod, "ismethod", 3513438880u, 0, 8, NULL); -be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, NULL); +be_define_const_str(is_running, "is_running", 2226847261u, 0, 10, &be_const_str_set_hue16sat); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_remove_rule); +be_define_const_str(ismethod, "ismethod", 3513438880u, 0, 8, &be_const_str_on); +be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, &be_const_str_set_pwm); be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, NULL); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); -be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_real); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_pow); +be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_set_rate); be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL); -be_define_const_str(json, "json", 916562499u, 0, 4, &be_const_str_toptr); -be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_wifi_arcs); -be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, &be_const_str_json_fdump_any); -be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, &be_const_str_read12); -be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, &be_const_str_rad); -be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, &be_const_str_string); +be_define_const_str(json, "json", 916562499u, 0, 4, NULL); +be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, NULL); +be_define_const_str(json_fdump, "json_fdump", 1694216580u, 0, 10, &be_const_str_try_remove_file); +be_define_const_str(json_fdump_any, "json_fdump_any", 3348629385u, 0, 14, &be_const_str_lvgl_timer_dispatch); +be_define_const_str(json_fdump_list, "json_fdump_list", 3903879853u, 0, 15, NULL); +be_define_const_str(json_fdump_map, "json_fdump_map", 4091954653u, 0, 14, &be_const_str_set_style_bg_color); be_define_const_str(keys, "keys", 4182378701u, 0, 4, NULL); be_define_const_str(label, "label", 4137097213u, 0, 5, NULL); be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, NULL); -be_define_const_str(leds, "leds", 558858555u, 0, 4, &be_const_str_pop); -be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, NULL); +be_define_const_str(leds, "leds", 558858555u, 0, 4, &be_const_str_light_to_id); +be_define_const_str(length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, "length in bits must be between 0 and 32", 2584509128u, 0, 39, &be_const_str_setitem); be_define_const_str(light, "light", 3801947695u, 0, 5, NULL); -be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, NULL); -be_define_const_str(light_state, "light_state", 905783845u, 0, 11, &be_const_str_math); -be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, NULL); +be_define_const_str(light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, "light must be of class 'light_state'", 3669350396u, 0, 36, &be_const_str_manuf); +be_define_const_str(light_state, "light_state", 905783845u, 0, 11, NULL); +be_define_const_str(light_to_id, "light_to_id", 1117015647u, 0, 11, &be_const_str_remove); be_define_const_str(lights, "lights", 425118420u, 0, 6, NULL); -be_define_const_str(line_dsc, "line_dsc", 4094490978u, 0, 8, NULL); -be_define_const_str(list, "list", 217798785u, 0, 4, NULL); -be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, &be_const_str_set_bat); -be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, NULL); -be_define_const_str(load, "load", 3859241449u, 0, 4, NULL); -be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_web_sensor); +be_define_const_str(line_dsc, "line_dsc", 4094490978u, 0, 8, &be_const_str_lower); +be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_y1); +be_define_const_str(list_handlers, "list_handlers", 593774371u, 0, 13, NULL); +be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, &be_const_str_public_key); +be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_tobytes); +be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_lv_signal_arcs); be_define_const_str(load_templates, "load_templates", 3513870133u, 0, 14, NULL); -be_define_const_str(local, "local", 2621662984u, 0, 5, NULL); -be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_r); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_pixel_size); -be_define_const_str(loop, "loop", 3723446379u, 0, 4, NULL); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_lv_point); -be_define_const_str(lv, "lv", 1529997255u, 0, 2, NULL); -be_define_const_str(lv_, "lv_", 663721032u, 0, 3, &be_const_str_point_arr); -be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, &be_const_str_run_cron); +be_define_const_str(local, "local", 2621662984u, 0, 5, &be_const_str_set_chg_current); +be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_set_xy); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_memory); +be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_set_ct); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL); +be_define_const_str(lv, "lv", 1529997255u, 0, 2, &be_const_str_set_mode_ct); +be_define_const_str(lv_, "lv_", 663721032u, 0, 3, &be_const_str_set_light); +be_define_const_str(lv_clock, "lv_clock", 2859904766u, 0, 8, &be_const_str_set_style_line_color); +be_define_const_str(lv_clock_icon, "lv_clock_icon", 3257216210u, 0, 13, NULL); be_define_const_str(lv_coord_arr, "lv_coord_arr", 1197238601u, 0, 12, NULL); be_define_const_str(lv_event, "lv_event", 2434089968u, 0, 8, NULL); -be_define_const_str(lv_event_cb, "lv_event_cb", 2480731016u, 0, 11, NULL); -be_define_const_str(lv_extra, "lv_extra", 399561998u, 0, 8, NULL); +be_define_const_str(lv_event_cb, "lv_event_cb", 2480731016u, 0, 11, &be_const_str_web_add_console_button); +be_define_const_str(lv_extra, "lv_extra", 399561998u, 0, 8, &be_const_str_quality); be_define_const_str(lv_module_init, "lv_module_init", 1133027755u, 0, 14, NULL); -be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, &be_const_str_traceback); -be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, &be_const_str_size); -be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, NULL); -be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, &be_const_str_lv_signal_arcs); -be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, NULL); -be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, &be_const_str_set_useragent); -be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, NULL); -be_define_const_str(lv_style_prop_arr, "lv_style_prop_arr", 2504347499u, 0, 17, &be_const_str_set_style_text_font); -be_define_const_str(lv_timer_cb, "lv_timer_cb", 1383473763u, 0, 11, NULL); -be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, NULL); +be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, &be_const_str_resolvecmnd); +be_define_const_str(lv_obj_class, "lv_obj_class", 4039656294u, 0, 12, NULL); +be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, &be_const_str_members); +be_define_const_str(lv_point_arr, "lv_point_arr", 3959768858u, 0, 12, NULL); +be_define_const_str(lv_signal_arcs, "lv_signal_arcs", 2839156988u, 0, 14, &be_const_str_web_add_button); +be_define_const_str(lv_signal_bars, "lv_signal_bars", 3513972559u, 0, 14, NULL); +be_define_const_str(lv_solidified, "lv_solidified", 2274121310u, 0, 13, &be_const_str_continue); +be_define_const_str(lv_style_prop_arr, "lv_style_prop_arr", 2504347499u, 0, 17, NULL); +be_define_const_str(lv_timer_cb, "lv_timer_cb", 1383473763u, 0, 11, &be_const_str_readline); +be_define_const_str(lv_wifi_arcs, "lv_wifi_arcs", 2082091963u, 0, 12, &be_const_str_refr_now); be_define_const_str(lv_wifi_arcs_icon, "lv_wifi_arcs_icon", 1507982909u, 0, 17, NULL); -be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, &be_const_str_split); -be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, &be_const_str_set_text); +be_define_const_str(lv_wifi_bars, "lv_wifi_bars", 2109539196u, 0, 12, &be_const_str_pi); +be_define_const_str(lv_wifi_bars_icon, "lv_wifi_bars_icon", 2805815540u, 0, 17, NULL); be_define_const_str(lvgl_event_dispatch, "lvgl_event_dispatch", 2104396622u, 0, 19, NULL); be_define_const_str(lvgl_timer_dispatch, "lvgl_timer_dispatch", 975257833u, 0, 19, NULL); -be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, NULL); +be_define_const_str(make_cb, "make_cb", 71252785u, 0, 7, &be_const_str_strip); be_define_const_str(manuf, "manuf", 4120929560u, 0, 5, NULL); be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); -be_define_const_str(math, "math", 4001929615u, 0, 4, &be_const_str_zero); -be_define_const_str(matrix, "matrix", 365099244u, 0, 6, &be_const_str_set_height); +be_define_const_str(math, "math", 4001929615u, 0, 4, &be_const_str_point); +be_define_const_str(matrix, "matrix", 365099244u, 0, 6, NULL); be_define_const_str(member, "member", 719708611u, 0, 6, NULL); be_define_const_str(members, "members", 937576464u, 0, 7, NULL); -be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_try_compile); -be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); +be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_pc_rel); +be_define_const_str(millis, "millis", 1214679063u, 0, 6, &be_const_str_remove_timer); be_define_const_str(min, "min", 3381609815u, 0, 3, NULL); -be_define_const_str(minute, "minute", 954666857u, 0, 6, &be_const_str_style_prop_arr); +be_define_const_str(minute, "minute", 954666857u, 0, 6, &be_const_str_set_rgb); be_define_const_str(missing_X20name, "missing name", 3635024006u, 0, 12, NULL); -be_define_const_str(model, "model", 2961925722u, 0, 5, &be_const_str_open); -be_define_const_str(module, "module", 3617558685u, 0, 6, NULL); +be_define_const_str(model, "model", 2961925722u, 0, 5, &be_const_str_settings); +be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_run_cron); be_define_const_str(month, "month", 3598321157u, 0, 5, NULL); -be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str__X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); -be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_elif); +be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, NULL); +be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_update); be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL); -be_define_const_str(next, "next", 1555467752u, 0, 4, &be_const_str_range); -be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, &be_const_str_push_path); +be_define_const_str(next, "next", 1555467752u, 0, 4, &be_const_str_round_start); +be_define_const_str(next_cron, "next_cron", 3260705337u, 0, 9, NULL); be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, &be_const_str_pixel_count); -be_define_const_str(no_X20more_X20RMT_X20channel_X20available, "no more RMT channel available", 305838632u, 0, 29, NULL); +be_define_const_str(no_X20GPIO_X20specified_X20for_X20neopixelbus, "no GPIO specified for neopixelbus", 42078528u, 0, 33, NULL); +be_define_const_str(no_X20more_X20RMT_X20channel_X20available, "no more RMT channel available", 305838632u, 0, 29, &be_const_str_rounded); be_define_const_str(now, "now", 682728183u, 0, 3, NULL); -be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, &be_const_str_widget_destructor); -be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_webserver); -be_define_const_str(o, "o", 3926667934u, 0, 1, &be_const_str_round_start); +be_define_const_str(null_cb, "null_cb", 2333536460u, 0, 7, NULL); +be_define_const_str(number, "number", 467038368u, 0, 6, NULL); +be_define_const_str(o, "o", 3926667934u, 0, 1, NULL); be_define_const_str(obj, "obj", 3343205242u, 0, 3, NULL); -be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, &be_const_str_except); -be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, &be_const_str_remove_rule); -be_define_const_str(offset, "offset", 348705738u, 0, 6, NULL); -be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, &be_const_str_onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E); +be_define_const_str(obj_class_create_obj, "obj_class_create_obj", 3304390632u, 0, 20, NULL); +be_define_const_str(obj_event_base, "obj_event_base", 1624064363u, 0, 14, &be_const_str_set_y); +be_define_const_str(offset, "offset", 348705738u, 0, 6, &be_const_str_y); +be_define_const_str(offseta, "offseta", 1663383089u, 0, 7, NULL); be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, &be_const_str_run_bat); -be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, &be_const_str_udp); -be_define_const_str(open, "open", 3546203337u, 0, 4, &be_const_str_reverse_gamma10); -be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, NULL); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will cause a restart.\");'>", 232646018u, 0, 57, &be_const_str_signal_change); +be_define_const_str(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20change_X20the_X20current_X20configuration_X20and_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E, "onsubmit='return confirm(\"This will change the current configuration and cause a restart.\");'>", 3792412559u, 0, 94, NULL); +be_define_const_str(open, "open", 3546203337u, 0, 4, &be_const_str_p2); +be_define_const_str(out_X20of_X20range, "out of range", 2236631477u, 0, 12, &be_const_str_page_autoconf_mgr); be_define_const_str(p1, "p1", 2689521274u, 0, 2, NULL); -be_define_const_str(p2, "p2", 2672743655u, 0, 2, NULL); -be_define_const_str(page_autoconf_ctl, "page_autoconf_ctl", 2453381496u, 0, 17, &be_const_str_set_chg_current); -be_define_const_str(page_autoconf_mgr, "page_autoconf_mgr", 3643937031u, 0, 17, &be_const_str_read_sensors); -be_define_const_str(param, "param", 1309554226u, 0, 5, &be_const_str_set_tasmota_logo); +be_define_const_str(p2, "p2", 2672743655u, 0, 2, &be_const_str_upper); +be_define_const_str(page_autoconf_ctl, "page_autoconf_ctl", 2453381496u, 0, 17, &be_const_str_remove_light); +be_define_const_str(page_autoconf_mgr, "page_autoconf_mgr", 3643937031u, 0, 17, NULL); +be_define_const_str(param, "param", 1309554226u, 0, 5, NULL); be_define_const_str(path, "path", 2223459638u, 0, 4, NULL); be_define_const_str(pc, "pc", 1313756516u, 0, 2, NULL); -be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_percentage); -be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_response_append); -be_define_const_str(pct, "pct", 1431300144u, 0, 3, &be_const_str_toint); -be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, &be_const_str_widget_ctor_cb); +be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_signal_arcs); +be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_string); +be_define_const_str(pct, "pct", 1431300144u, 0, 3, &be_const_str_remove_driver); +be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, &be_const_str_splash_init); be_define_const_str(persist, "persist", 3917083779u, 0, 7, NULL); be_define_const_str(persist_X2E_p_X20is_X20not_X20a_X20map, "persist._p is not a map", 1176528732u, 0, 23, NULL); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_stop); -be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, &be_const_str_register_obj); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_reset); -be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, &be_const_str_sat); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_range); +be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_widget_ctor_cb); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, &be_const_str_wd); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_size); +be_define_const_str(pixel_count, "pixel_count", 2439130743u, 0, 11, NULL); be_define_const_str(pixel_size, "pixel_size", 2209135785u, 0, 10, NULL); -be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, &be_const_str_run); -be_define_const_str(point, "point", 414084241u, 0, 5, &be_const_str_widget_event); -be_define_const_str(point_arr, "point_arr", 1140859857u, 0, 9, &be_const_str_tanh); +be_define_const_str(pixels_buffer, "pixels_buffer", 1229555807u, 0, 13, &be_const_str_reset_search); +be_define_const_str(point, "point", 414084241u, 0, 5, &be_const_str_return_X20code_X3D_X25i); +be_define_const_str(point_arr, "point_arr", 1140859857u, 0, 9, NULL); be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); -be_define_const_str(pop_path, "pop_path", 2403243998u, 0, 8, &be_const_str_pow); -be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL); +be_define_const_str(pop_path, "pop_path", 2403243998u, 0, 8, &be_const_str_try); +be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_set_zoom); be_define_const_str(power_off, "power_off", 3568741752u, 0, 9, NULL); -be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, &be_const_str_resp_cmnd_str); -be_define_const_str(print, "print", 372738696u, 0, 5, NULL); -be_define_const_str(ptr, "ptr", 1433816073u, 0, 3, &be_const_str_false); -be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_tob64); -be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); -be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, &be_const_str_save); -be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_do); +be_define_const_str(preinit, "preinit", 2722007100u, 0, 7, NULL); +be_define_const_str(print, "print", 372738696u, 0, 5, &be_const_str_wire2); +be_define_const_str(ptr, "ptr", 1433816073u, 0, 3, NULL); +be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_refr_size); +be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_widget_width_def); +be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, NULL); +be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_remote_port); be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, NULL); -be_define_const_str(quality, "quality", 2597670950u, 0, 7, &be_const_str_set_xy); -be_define_const_str(r, "r", 4144776981u, 0, 1, NULL); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_try_run_compiled); +be_define_const_str(quality, "quality", 2597670950u, 0, 7, &be_const_str_wifi_arcs_icon); +be_define_const_str(r, "r", 4144776981u, 0, 1, &be_const_str_time_reached); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_show); be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_round_end); -be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); -be_define_const_str(read, "read", 3470762949u, 0, 4, &be_const_str_width_def); -be_define_const_str(read12, "read12", 4291076970u, 0, 6, NULL); -be_define_const_str(read13, "read13", 12887293u, 0, 6, &be_const_str_search); -be_define_const_str(read24, "read24", 1808533811u, 0, 6, &be_const_str_scr_act); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_register_button_encoder); +be_define_const_str(range, "range", 4208725202u, 0, 5, &be_const_str_set_auth); +be_define_const_str(read, "read", 3470762949u, 0, 4, &be_const_str_set_power); +be_define_const_str(read12, "read12", 4291076970u, 0, 6, &be_const_str__X7D); +be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL); +be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL); be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL); be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL); be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); -be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, &be_const_str_timer_cb); -be_define_const_str(readbytes, "readbytes", 2716426756u, 0, 9, &be_const_str__X7B_X7D); -be_define_const_str(readline, "readline", 1212709927u, 0, 8, NULL); -be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_set_dcdc_enable); -be_define_const_str(reapply, "reapply", 3778939332u, 0, 7, NULL); -be_define_const_str(redirect, "redirect", 389758641u, 0, 8, &be_const_str_toupper); -be_define_const_str(refr_now, "refr_now", 3191284735u, 0, 8, NULL); -be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, &be_const_str_unsubscribe); -be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, NULL); -be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, &be_const_str_reset_search); -be_define_const_str(register_obj, "register_obj", 3982614770u, 0, 12, &be_const_str_set_first_time); +be_define_const_str(read_sensors, "read_sensors", 892689201u, 0, 12, NULL); +be_define_const_str(readbytes, "readbytes", 2716426756u, 0, 9, NULL); +be_define_const_str(readline, "readline", 1212709927u, 0, 8, &be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); +be_define_const_str(reapply, "reapply", 3778939332u, 0, 7, &be_const_str_started); +be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL); +be_define_const_str(refr_now, "refr_now", 3191284735u, 0, 8, &be_const_str_seg7_font); +be_define_const_str(refr_pos, "refr_pos", 1020780033u, 0, 8, &be_const_str_tostring); +be_define_const_str(refr_size, "refr_size", 1958144468u, 0, 9, &be_const_str_false); +be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); +be_define_const_str(register_obj, "register_obj", 3982614770u, 0, 12, NULL); be_define_const_str(remote_ip, "remote_ip", 2953154693u, 0, 9, NULL); be_define_const_str(remote_port, "remote_port", 2163585967u, 0, 11, NULL); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_shared_key); -be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL); -be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, &be_const_str_setbits); -be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, &be_const_str_top); -be_define_const_str(remove_light, "remove_light", 1783624394u, 0, 12, &be_const_str_sqrt); -be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); -be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, NULL); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); +be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_end); +be_define_const_str(remove_cron, "remove_cron", 2914538962u, 0, 11, &be_const_str_scan); +be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, &be_const_str_toupper); +be_define_const_str(remove_light, "remove_light", 1783624394u, 0, 12, &be_const_str_signal_bars); +be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, &be_const_str_type_error); +be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, &be_const_str_set_bri); be_define_const_str(reset, "reset", 1695364032u, 0, 5, NULL); -be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, &be_const_str__X7D); +be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL); be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); -be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, &be_const_str_success); -be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_try_remove_file); +be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); +be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); -be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, &be_const_str_y1); -be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_web_add_config_button); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_tele); +be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); +be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_setbits); be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); be_define_const_str(return_X20code_X3D_X25i, "return code=%i", 2127454401u, 0, 14, NULL); be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); -be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, &be_const_str_write8); +be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, &be_const_str_tasmota); be_define_const_str(rotate, "rotate", 2784296202u, 0, 6, NULL); be_define_const_str(round_end, "round_end", 985288225u, 0, 9, NULL); -be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, &be_const_str_update); -be_define_const_str(rounded, "rounded", 1920734138u, 0, 7, NULL); -be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, &be_const_str_started); -be_define_const_str(rule, "rule", 4230889683u, 0, 4, &be_const_str_widget_height_def); -be_define_const_str(run, "run", 718098122u, 0, 3, &be_const_str_setfloat); +be_define_const_str(round_start, "round_start", 2949484384u, 0, 11, NULL); +be_define_const_str(rounded, "rounded", 1920734138u, 0, 7, &be_const_str_sec); +be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); +be_define_const_str(rule, "rule", 4230889683u, 0, 4, NULL); +be_define_const_str(run, "run", 718098122u, 0, 3, NULL); be_define_const_str(run_bat, "run_bat", 2536903298u, 0, 7, NULL); -be_define_const_str(run_cron, "run_cron", 1929098555u, 0, 8, NULL); -be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, &be_const_str_w); +be_define_const_str(run_cron, "run_cron", 1929098555u, 0, 8, &be_const_str_write_file); +be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); be_define_const_str(running, "running", 343848780u, 0, 7, NULL); -be_define_const_str(sat, "sat", 3592196823u, 0, 3, &be_const_str_set_chr); -be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); +be_define_const_str(sat, "sat", 3592196823u, 0, 3, NULL); +be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_wire_scan); be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); -be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); -be_define_const_str(scan, "scan", 3974641896u, 0, 4, NULL); -be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_var); +be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, &be_const_str_w); +be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_set_pixel_color); +be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, NULL); be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); -be_define_const_str(search, "search", 2150836393u, 0, 6, &be_const_str_web_send); +be_define_const_str(search, "search", 2150836393u, 0, 6, &be_const_str_widget_cb); be_define_const_str(sec, "sec", 3139892658u, 0, 3, NULL); -be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, &be_const_str_trig); -be_define_const_str(select, "select", 297952813u, 0, 6, NULL); -be_define_const_str(send, "send", 1919010991u, 0, 4, &be_const_str_set_style_line_color); -be_define_const_str(send_multicast, "send_multicast", 812185870u, 0, 14, NULL); -be_define_const_str(serial, "serial", 3687697785u, 0, 6, &be_const_str_set_auth); -be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_xy); +be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL); +be_define_const_str(select, "select", 297952813u, 0, 6, &be_const_str_set_bat); +be_define_const_str(send, "send", 1919010991u, 0, 4, NULL); +be_define_const_str(send_multicast, "send_multicast", 812185870u, 0, 14, &be_const_str_sys); +be_define_const_str(serial, "serial", 3687697785u, 0, 6, NULL); +be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_set_mode_rgb); be_define_const_str(set_MAC, "set_MAC", 1617581015u, 0, 7, NULL); -be_define_const_str(set_align, "set_align", 2592958913u, 0, 9, &be_const_str_time_reached); -be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, &be_const_str_set_style_img_recolor_opa); -be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL); -be_define_const_str(set_bat, "set_bat", 2736667351u, 0, 7, NULL); -be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, NULL); -be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, &be_const_str_write); -be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, &be_const_str_continue); -be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, NULL); -be_define_const_str(set_chr, "set_chr", 102133743u, 0, 7, &be_const_str_web_add_button); +be_define_const_str(set_align, "set_align", 2592958913u, 0, 9, &be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29); +be_define_const_str(set_alternate, "set_alternate", 1709680562u, 0, 13, NULL); +be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, &be_const_str_widget_editable); +be_define_const_str(set_bat, "set_bat", 2736667351u, 0, 7, &be_const_str_set_style_text_font); +be_define_const_str(set_bits_per_sample, "set_bits_per_sample", 3747657551u, 0, 19, &be_const_str_tele); +be_define_const_str(set_bri, "set_bri", 2789118779u, 0, 7, NULL); +be_define_const_str(set_channels, "set_channels", 1370190620u, 0, 12, NULL); +be_define_const_str(set_chg_current, "set_chg_current", 336304386u, 0, 15, &be_const_str_set_dcdc_enable); +be_define_const_str(set_chr, "set_chr", 102133743u, 0, 7, NULL); be_define_const_str(set_ct, "set_ct", 972363187u, 0, 6, NULL); -be_define_const_str(set_dc_voltage, "set_dc_voltage", 2181981936u, 0, 14, &be_const_str_webclient); +be_define_const_str(set_dc_voltage, "set_dc_voltage", 2181981936u, 0, 14, NULL); be_define_const_str(set_dcdc_enable, "set_dcdc_enable", 1594690786u, 0, 15, NULL); -be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, &be_const_str_set_rate); -be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, &be_const_str_set_gain); -be_define_const_str(set_gain, "set_gain", 3847781975u, 0, 8, &be_const_str_widget_dtor_cb); +be_define_const_str(set_exten, "set_exten", 1721782768u, 0, 9, NULL); +be_define_const_str(set_first_time, "set_first_time", 3111247550u, 0, 14, &be_const_str_webserver); +be_define_const_str(set_gain, "set_gain", 3847781975u, 0, 8, NULL); be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, NULL); -be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, &be_const_str__X7B); +be_define_const_str(set_hue16sat, "set_hue16sat", 1858983599u, 0, 12, NULL); be_define_const_str(set_huesat, "set_huesat", 626496854u, 0, 10, NULL); be_define_const_str(set_hum, "set_hum", 964296026u, 0, 7, NULL); -be_define_const_str(set_ldo_enable, "set_ldo_enable", 2916502041u, 0, 14, &be_const_str_true); +be_define_const_str(set_ldo_enable, "set_ldo_enable", 2916502041u, 0, 14, &be_const_str_strftime); be_define_const_str(set_ldo_voltage, "set_ldo_voltage", 4090501160u, 0, 15, NULL); -be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); -be_define_const_str(set_matrix_pixel_color, "set_matrix_pixel_color", 1197149462u, 0, 22, NULL); -be_define_const_str(set_mode_ct, "set_mode_ct", 665073295u, 0, 11, NULL); -be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, &be_const_str_widget_dtor_impl); -be_define_const_str(set_percentage, "set_percentage", 2952022724u, 0, 14, &be_const_str_yield); -be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, &be_const_str_unknown_X20instruction); +be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, &be_const_str_web_sensor); +be_define_const_str(set_matrix_pixel_color, "set_matrix_pixel_color", 1197149462u, 0, 22, &be_const_str_splash); +be_define_const_str(set_mode_ct, "set_mode_ct", 665073295u, 0, 11, &be_const_str_strptime); +be_define_const_str(set_mode_rgb, "set_mode_rgb", 852310875u, 0, 12, &be_const_str_set_style_pad_all); +be_define_const_str(set_percentage, "set_percentage", 2952022724u, 0, 14, NULL); +be_define_const_str(set_pixel_color, "set_pixel_color", 1275248356u, 0, 15, &be_const_str_udp); be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); -be_define_const_str(set_pwm, "set_pwm", 3781811012u, 0, 7, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); +be_define_const_str(set_pwm, "set_pwm", 3781811012u, 0, 7, NULL); be_define_const_str(set_rate, "set_rate", 1154016838u, 0, 8, NULL); -be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, &be_const_str_target); +be_define_const_str(set_reachable, "set_reachable", 3280367499u, 0, 13, NULL); be_define_const_str(set_rgb, "set_rgb", 3380244855u, 0, 7, NULL); -be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, &be_const_str_url_encode); +be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, NULL); be_define_const_str(set_style_bg_color, "set_style_bg_color", 1689513089u, 0, 18, NULL); be_define_const_str(set_style_border_width, "set_style_border_width", 549034191u, 0, 22, NULL); -be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, &be_const_str_web_send_decimal); +be_define_const_str(set_style_img_recolor, "set_style_img_recolor", 1245681294u, 0, 21, NULL); be_define_const_str(set_style_img_recolor_opa, "set_style_img_recolor_opa", 2667062087u, 0, 25, NULL); be_define_const_str(set_style_line_color, "set_style_line_color", 3665238976u, 0, 20, NULL); be_define_const_str(set_style_pad_all, "set_style_pad_all", 3987000607u, 0, 17, NULL); -be_define_const_str(set_style_pad_right, "set_style_pad_right", 3314069054u, 0, 19, &be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function); -be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, NULL); -be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, &be_const_str_set_svc); +be_define_const_str(set_style_pad_right, "set_style_pad_right", 3314069054u, 0, 19, NULL); +be_define_const_str(set_style_radius, "set_style_radius", 3868404032u, 0, 16, &be_const_str_nil); +be_define_const_str(set_style_text_color, "set_style_text_color", 943105189u, 0, 20, NULL); be_define_const_str(set_style_text_font, "set_style_text_font", 1028590019u, 0, 19, NULL); -be_define_const_str(set_svc, "set_svc", 752734654u, 0, 7, NULL); -be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, &be_const_str_super); -be_define_const_str(set_temp, "set_temp", 1952131250u, 0, 8, NULL); -be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, &be_const_str_subscribe); +be_define_const_str(set_svc, "set_svc", 752734654u, 0, 7, &be_const_str_yield); +be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, &be_const_str_srand); +be_define_const_str(set_temp, "set_temp", 1952131250u, 0, 8, &be_const_str_style_prop_arr); +be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, &be_const_str_try_get_bec_version); be_define_const_str(set_time, "set_time", 900236405u, 0, 8, NULL); be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL); -be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, &be_const_str_target_search); +be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, &be_const_str_sinh); be_define_const_str(set_user_data, "set_user_data", 3596043360u, 0, 13, NULL); -be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, NULL); -be_define_const_str(set_width, "set_width", 484671920u, 0, 9, &be_const_str_try_rule); +be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, &be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); +be_define_const_str(set_width, "set_width", 484671920u, 0, 9, NULL); be_define_const_str(set_x, "set_x", 1849400772u, 0, 5, NULL); be_define_const_str(set_xy, "set_xy", 1155092615u, 0, 6, NULL); -be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, &be_const_str_stop_iteration); +be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, NULL); be_define_const_str(set_zoom, "set_zoom", 1925134407u, 0, 8, NULL); be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL); -be_define_const_str(setfloat, "setfloat", 2799488807u, 0, 8, &be_const_str_sinh); -be_define_const_str(seti, "seti", 1500556254u, 0, 4, &be_const_str_skip); -be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); -be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); +be_define_const_str(setfloat, "setfloat", 2799488807u, 0, 8, NULL); +be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL); +be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, &be_const_str_top); +be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, &be_const_str_try_rule); be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); -be_define_const_str(settings, "settings", 1745255176u, 0, 8, &be_const_str_show); +be_define_const_str(settings, "settings", 1745255176u, 0, 8, NULL); be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL); -be_define_const_str(show, "show", 2840060476u, 0, 4, &be_const_str__X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D); +be_define_const_str(show, "show", 2840060476u, 0, 4, NULL); be_define_const_str(signal_arcs, "signal_arcs", 1505996127u, 0, 11, NULL); be_define_const_str(signal_bars, "signal_bars", 3181573600u, 0, 11, NULL); be_define_const_str(signal_change, "signal_change", 3262299350u, 0, 13, NULL); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_value_error); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); be_define_const_str(size, "size", 597743964u, 0, 4, NULL); be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL); -be_define_const_str(solidified, "solidified", 3257553487u, 0, 10, &be_const_str_str); -be_define_const_str(splash, "splash", 2531464038u, 0, 6, &be_const_str_strip); +be_define_const_str(solidified, "solidified", 3257553487u, 0, 10, NULL); +be_define_const_str(splash, "splash", 2531464038u, 0, 6, NULL); be_define_const_str(splash_init, "splash_init", 1522992293u, 0, 11, NULL); -be_define_const_str(splash_remove, "splash_remove", 3132020807u, 0, 13, NULL); +be_define_const_str(splash_remove, "splash_remove", 3132020807u, 0, 13, &be_const_str_widget_event_impl); be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); -be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, &be_const_str_widget_constructor); +be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, &be_const_str_width_def); be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); -be_define_const_str(start, "start", 1697318111u, 0, 5, &be_const_str_zip); -be_define_const_str(started, "started", 2153339806u, 0, 7, &be_const_str_widget_editable); +be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); +be_define_const_str(started, "started", 2153339806u, 0, 7, NULL); be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); -be_define_const_str(stop, "stop", 3411225317u, 0, 4, &be_const_str_web_add_handler); -be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, &be_const_str_tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29); +be_define_const_str(stop, "stop", 3411225317u, 0, 4, &be_const_str_trig); +be_define_const_str(stop_iteration, "stop_iteration", 4173793901u, 0, 14, NULL); be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); -be_define_const_str(strftime, "strftime", 187738851u, 0, 8, &be_const_str_web_add_management_button); -be_define_const_str(string, "string", 398550328u, 0, 6, NULL); -be_define_const_str(strip, "strip", 4246411473u, 0, 5, &be_const_str_touch_update); +be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); +be_define_const_str(string, "string", 398550328u, 0, 6, &be_const_str_web_add_handler); +be_define_const_str(strip, "strip", 4246411473u, 0, 5, &be_const_str_wire1); be_define_const_str(strptime, "strptime", 1277910361u, 0, 8, NULL); -be_define_const_str(style_prop_arr, "style_prop_arr", 3019174322u, 0, 14, NULL); -be_define_const_str(subscribe, "subscribe", 2946386435u, 0, 9, NULL); -be_define_const_str(success, "success", 979353360u, 0, 7, &be_const_str_raise); +be_define_const_str(style_prop_arr, "style_prop_arr", 3019174322u, 0, 14, &be_const_str_web_add_management_button); +be_define_const_str(subscribe, "subscribe", 2946386435u, 0, 9, &be_const_str_as); +be_define_const_str(success, "success", 979353360u, 0, 7, NULL); be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); -be_define_const_str(sys, "sys", 3277365014u, 0, 3, &be_const_str_widget_instance_size); +be_define_const_str(sys, "sys", 3277365014u, 0, 3, NULL); be_define_const_str(tag, "tag", 2516003219u, 0, 3, NULL); -be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); +be_define_const_str(tan, "tan", 2633446552u, 0, 3, &be_const_str_touch_update); be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); be_define_const_str(target, "target", 845187144u, 0, 6, NULL); be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); @@ -845,10 +847,10 @@ be_define_const_str(tasmota, "tasmota", 424643812u, 0, 7, NULL); be_define_const_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29, "tasmota.get_light() is deprecated, use light.get()", 3525753647u, 0, 50, NULL); be_define_const_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29, "tasmota.set_light() is deprecated, use light.set()", 2124937871u, 0, 50, NULL); be_define_const_str(tasmota_log_reader, "tasmota_log_reader", 3555069257u, 0, 18, NULL); -be_define_const_str(tcpclient, "tcpclient", 3828797983u, 0, 9, &be_const_str_try_get_bec_version); +be_define_const_str(tcpclient, "tcpclient", 3828797983u, 0, 9, &be_const_str_web_add_config_button); be_define_const_str(tele, "tele", 3474458061u, 0, 4, NULL); be_define_const_str(the_X20second_X20argument_X20is_X20not_X20a_X20function, "the second argument is not a function", 3954574469u, 0, 37, NULL); -be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, &be_const_str_time_str); +be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); be_define_const_str(timer_cb, "timer_cb", 79918026u, 0, 8, NULL); @@ -857,13 +859,13 @@ be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL); be_define_const_str(tobytes, "tobytes", 595962279u, 0, 7, NULL); be_define_const_str(toint, "toint", 3613182909u, 0, 5, NULL); be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); -be_define_const_str(tomap, "tomap", 612167626u, 0, 5, &be_const_str_year); +be_define_const_str(tomap, "tomap", 612167626u, 0, 5, NULL); be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); -be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, &be_const_str_type_error); +be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, NULL); be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); be_define_const_str(touch_update, "touch_update", 1918102068u, 0, 12, NULL); be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); -be_define_const_str(tr, "tr", 1195724803u, 0, 2, NULL); +be_define_const_str(tr, "tr", 1195724803u, 0, 2, &be_const_str_width); be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); be_define_const_str(trig, "trig", 2073314619u, 0, 4, NULL); be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); @@ -872,26 +874,26 @@ be_define_const_str(try_compile, "try_compile", 4263879840u, 0, 11, NULL); be_define_const_str(try_get_bec_version, "try_get_bec_version", 3143116423u, 0, 19, NULL); be_define_const_str(try_remove_file, "try_remove_file", 3025429926u, 0, 15, NULL); be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); -be_define_const_str(try_run_compiled, "try_run_compiled", 2339741218u, 0, 16, &be_const_str_wd); +be_define_const_str(try_run_compiled, "try_run_compiled", 2339741218u, 0, 16, NULL); be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); be_define_const_str(type_error, "type_error", 3789613824u, 0, 10, NULL); be_define_const_str(udp, "udp", 1253872004u, 0, 3, NULL); be_define_const_str(unknown_X20instruction, "unknown instruction", 1093911841u, 0, 19, NULL); be_define_const_str(unsubscribe, "unsubscribe", 4190043798u, 0, 11, NULL); be_define_const_str(update, "update", 672109684u, 0, 6, NULL); -be_define_const_str(upper, "upper", 176974407u, 0, 5, &be_const_str_write_bytes); -be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, &be_const_str_for); +be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); +be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, &be_const_str_raise); be_define_const_str(uuid4, "uuid4", 1153582450u, 0, 5, NULL); be_define_const_str(value, "value", 1113510858u, 0, 5, NULL); be_define_const_str(value_error, "value_error", 773297791u, 0, 11, NULL); be_define_const_str(valuer_error, "valuer_error", 2567947105u, 0, 12, NULL); be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); be_define_const_str(w, "w", 4060888886u, 0, 1, NULL); -be_define_const_str(wd, "wd", 1531424278u, 0, 2, NULL); +be_define_const_str(wd, "wd", 1531424278u, 0, 2, &be_const_str_webclient); be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, NULL); -be_define_const_str(web_add_config_button, "web_add_config_button", 639674325u, 0, 21, &be_const_str__X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D); +be_define_const_str(web_add_config_button, "web_add_config_button", 639674325u, 0, 21, NULL); be_define_const_str(web_add_console_button, "web_add_console_button", 3481436192u, 0, 22, NULL); -be_define_const_str(web_add_handler, "web_add_handler", 3990174962u, 0, 15, &be_const_str_return); +be_define_const_str(web_add_handler, "web_add_handler", 3990174962u, 0, 15, &be_const_str_widget_event); be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL); be_define_const_str(web_add_management_button, "web_add_management_button", 2738877186u, 0, 25, NULL); be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL); @@ -907,8 +909,8 @@ be_define_const_str(widget_ctor_impl, "widget_ctor_impl", 194252479u, 0, 16, NUL be_define_const_str(widget_destructor, "widget_destructor", 4207388345u, 0, 17, NULL); be_define_const_str(widget_dtor_cb, "widget_dtor_cb", 3151545845u, 0, 14, NULL); be_define_const_str(widget_dtor_impl, "widget_dtor_impl", 520430610u, 0, 16, NULL); -be_define_const_str(widget_editable, "widget_editable", 3821793286u, 0, 15, NULL); -be_define_const_str(widget_event, "widget_event", 1951408186u, 0, 12, NULL); +be_define_const_str(widget_editable, "widget_editable", 3821793286u, 0, 15, &be_const_str_write_bytes); +be_define_const_str(widget_event, "widget_event", 1951408186u, 0, 12, &be_const_str_do); be_define_const_str(widget_event_cb, "widget_event_cb", 1508466754u, 0, 15, NULL); be_define_const_str(widget_event_impl, "widget_event_impl", 2178430561u, 0, 17, NULL); be_define_const_str(widget_group_def, "widget_group_def", 1246968785u, 0, 16, NULL); @@ -924,7 +926,7 @@ be_define_const_str(wifi_arcs, "wifi_arcs", 3838492904u, 0, 9, NULL); be_define_const_str(wifi_arcs_icon, "wifi_arcs_icon", 767180544u, 0, 14, NULL); be_define_const_str(wifi_bars, "wifi_bars", 653141243u, 0, 9, NULL); be_define_const_str(wifi_bars_icon, "wifi_bars_icon", 3641522557u, 0, 14, NULL); -be_define_const_str(wire, "wire", 4082753944u, 0, 4, &be_const_str_write_file); +be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); @@ -933,19 +935,19 @@ be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL); be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL); be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); be_define_const_str(write_file, "write_file", 3177658879u, 0, 10, NULL); -be_define_const_str(write_gpio, "write_gpio", 2267940334u, 0, 10, &be_const_str_if); -be_define_const_str(x, "x", 4245442695u, 0, 1, &be_const_str__X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D); +be_define_const_str(write_gpio, "write_gpio", 2267940334u, 0, 10, &be_const_str_xy); +be_define_const_str(x, "x", 4245442695u, 0, 1, NULL); be_define_const_str(x1, "x1", 274927234u, 0, 2, NULL); -be_define_const_str(xy, "xy", 1482915802u, 0, 2, NULL); +be_define_const_str(xy, "xy", 1482915802u, 0, 2, &be_const_str_if); be_define_const_str(y, "y", 4228665076u, 0, 1, NULL); -be_define_const_str(y1, "y1", 2355101727u, 0, 2, &be_const_str_def); +be_define_const_str(y1, "y1", 2355101727u, 0, 2, NULL); be_define_const_str(year, "year", 2927578396u, 0, 4, NULL); be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); be_define_const_str(zero, "zero", 2339366755u, 0, 4, NULL); be_define_const_str(zip, "zip", 2877453236u, 0, 3, NULL); be_define_const_str(_X7B, "{", 4262220314u, 0, 1, NULL); be_define_const_str(_X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, "{s}Batt Current{m}%.1f mA{e}", 866537156u, 0, 28, NULL); -be_define_const_str(_X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, "{s}Batt Voltage{m}%.3f V{e}", 3184308199u, 0, 27, &be_const_str_class); +be_define_const_str(_X7Bs_X7DBatt_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, "{s}Batt Voltage{m}%.3f V{e}", 3184308199u, 0, 27, NULL); be_define_const_str(_X7Bs_X7DTemp_X20AXP_X7Bm_X7D_X25_X2E1f_X20_X26deg_X3BC_X7Be_X7D, "{s}Temp AXP{m}%.1f °C{e}", 2622904081u, 0, 28, NULL); be_define_const_str(_X7Bs_X7DVBus_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, "{s}VBus Current{m}%.1f mA{e}", 1032721155u, 0, 28, NULL); be_define_const_str(_X7Bs_X7DVBus_X20Voltage_X7Bm_X7D_X25_X2E3f_X20V_X7Be_X7D, "{s}VBus Voltage{m}%.3f V{e}", 165651270u, 0, 27, NULL); @@ -953,475 +955,476 @@ be_define_const_str(_X7B_X7D, "{}", 1415952421u, 0, 2, NULL); be_define_const_str(_X7D, "}", 4161554600u, 0, 1, NULL); static const bstring* const m_string_table[] = { - NULL, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, - (const bstring *)&be_const_str_event_send, - (const bstring *)&be_const_str_value, - (const bstring *)&be_const_str_create_segment, - (const bstring *)&be_const_str_begin_multicast, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20ran_X20_X20, - (const bstring *)&be_const_str_draw_line_dsc, - (const bstring *)&be_const_str__X25, - (const bstring *)&be_const_str__read, - (const bstring *)&be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_SK6812_GRBW, - (const bstring *)&be_const_str__X2Fac, - (const bstring *)&be_const_str__X2F, - NULL, - (const bstring *)&be_const_str__X21_X3D, - (const bstring *)&be_const_str_Unknown_X20command, - (const bstring *)&be_const_str_millis, - (const bstring *)&be_const_str_write_gpio, - (const bstring *)&be_const_str_lv_clock_icon, - (const bstring *)&be_const_str__X2Ebec, - (const bstring *)&be_const_str_remote_port, - (const bstring *)&be_const_str_get_pixel_color, - (const bstring *)&be_const_str_ccronexpr, - NULL, - (const bstring *)&be_const_str__X28_X29, - (const bstring *)&be_const_str_lv_, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, - (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20function, - (const bstring *)&be_const_str_connection_error, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20compiled_X20_X27_X25s_X27_X20_X28_X25s_X29, - (const bstring *)&be_const_str_OneWire, - (const bstring *)&be_const_str_get_bat_current, - NULL, - (const bstring *)&be_const_str_RGB, - (const bstring *)&be_const_str_BLE, - NULL, - (const bstring *)&be_const_str_digital_read, - (const bstring *)&be_const_str_instance_X20required, - (const bstring *)&be_const_str_is_dirty, - (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, - (const bstring *)&be_const_str_classof, - (const bstring *)&be_const_str__X2Ebe, - NULL, - (const bstring *)&be_const_str_OPTION_A, - (const bstring *)&be_const_str__X23autoexec_X2Ebe, - NULL, - NULL, - (const bstring *)&be_const_str_is_first_time, - (const bstring *)&be_const_str___lower__, - (const bstring *)&be_const_str_depower, - (const bstring *)&be_const_str_get_vbus_current, - (const bstring *)&be_const_str_lv_extra, - (const bstring *)&be_const_str_INTERNAL_DAC, - (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, - (const bstring *)&be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, - (const bstring *)&be_const_str_upper, - (const bstring *)&be_const_str_Tasmota, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X29, - (const bstring *)&be_const_str__X2C, - (const bstring *)&be_const_str_add_fast_loop, - (const bstring *)&be_const_str_lvgl_event_dispatch, - NULL, - (const bstring *)&be_const_str_editable, - (const bstring *)&be_const_str__X23display_X2Eini, - (const bstring *)&be_const_str_dim, - (const bstring *)&be_const_str_flush, - (const bstring *)&be_const_str_length_X20in_X20bits_X20must_X20be_X20between_X200_X20and_X2032, - (const bstring *)&be_const_str_json, - (const bstring *)&be_const_str_get_aps_voltage, - (const bstring *)&be_const_str__dirty, - (const bstring *)&be_const_str__X2502d_X25s_X2502d, - (const bstring *)&be_const_str_isinstance, - (const bstring *)&be_const_str__X2Ew, - (const bstring *)&be_const_str_lights, - (const bstring *)&be_const_str__X23preinit_X2Ebe, - (const bstring *)&be_const_str_ALIGN_LEFT_MID, - (const bstring *)&be_const_str__ccmd, - (const bstring *)&be_const_str_o, - (const bstring *)&be_const_str__rmt, - (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, - (const bstring *)&be_const_str_deinit, - NULL, - (const bstring *)&be_const_str_every_100ms, - (const bstring *)&be_const_str__drivers, - (const bstring *)&be_const_str_RGBW, - (const bstring *)&be_const_str_light_to_id, - (const bstring *)&be_const_str_tr, - (const bstring *)&be_const_str_SERIAL_7O2, - (const bstring *)&be_const_str_encrypt, - (const bstring *)&be_const_str_eth, - (const bstring *)&be_const_str_SERIAL_6E2, - (const bstring *)&be_const_str_invalid_X20GPIO_X20number, - (const bstring *)&be_const_str_adv_cb, - (const bstring *)&be_const_str_Restart_X201, - (const bstring *)&be_const_str_before_del, - (const bstring *)&be_const_str_SERIAL_5O1, - (const bstring *)&be_const_str_escape, - (const bstring *)&be_const_str_draw_arc_dsc_init, - (const bstring *)&be_const_str_decompress, - (const bstring *)&be_const_str_get_temp, - (const bstring *)&be_const_str__cmd, - (const bstring *)&be_const_str_ins_time, - (const bstring *)&be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback, - (const bstring *)&be_const_str_pc_abs, - (const bstring *)&be_const_str__X2D, - (const bstring *)&be_const_str_can_show, - (const bstring *)&be_const_str__X2F_X2Eautoconf, - (const bstring *)&be_const_str__X2Esize, - (const bstring *)&be_const_str_COLOR_BLACK, - (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, - (const bstring *)&be_const_str_set, - (const bstring *)&be_const_str_AudioFileSourceFS, - (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, - (const bstring *)&be_const_str_None, - (const bstring *)&be_const_str_SERIAL_7E1, - (const bstring *)&be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_driver_name, - (const bstring *)&be_const_str_cosh, - (const bstring *)&be_const_str_resolvecmnd, - (const bstring *)&be_const_str_ip, - (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code_X20_X27_X25s_X27_X20_X2D_X20_X25s, - (const bstring *)&be_const_str__X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, - (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, - (const bstring *)&be_const_str_get, - (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, - (const bstring *)&be_const_str_add_header, - (const bstring *)&be_const_str_every_50ms, - NULL, - (const bstring *)&be_const_str_send_multicast, - (const bstring *)&be_const_str_RGBCT, - (const bstring *)&be_const_str_cb_obj, - (const bstring *)&be_const_str_allocated, - (const bstring *)&be_const_str_available, - (const bstring *)&be_const_str_SERIAL_7O1, - (const bstring *)&be_const_str_assert, - (const bstring *)&be_const_str_set_light, - (const bstring *)&be_const_str_file, - (const bstring *)&be_const_str_Auto_X2Dconfiguration, - (const bstring *)&be_const_str__X3D_X3D, - NULL, - (const bstring *)&be_const_str_wifi_bars_icon, - (const bstring *)&be_const_str_remote_ip, - (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, - (const bstring *)&be_const_str_SERIAL_5N1, - (const bstring *)&be_const_str_insert, - (const bstring *)&be_const_str__X23init_X2Ebat, - (const bstring *)&be_const_str_add_rule, - (const bstring *)&be_const_str_wire1, - (const bstring *)&be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_manifest_X2Ejson, - (const bstring *)&be_const_str_strptime, - (const bstring *)&be_const_str__X22, - (const bstring *)&be_const_str__X2Flights_X2F, - (const bstring *)&be_const_str_SERIAL_6O2, - (const bstring *)&be_const_str_width, - NULL, - (const bstring *)&be_const_str_SERIAL_8O1, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20, - (const bstring *)&be_const_str_SERIAL_5E2, - (const bstring *)&be_const_str_ins_ramp, - (const bstring *)&be_const_str_gc, - (const bstring *)&be_const_str__X3E, - NULL, - (const bstring *)&be_const_str_attrdump, - (const bstring *)&be_const_str__X2E_X2E, - (const bstring *)&be_const_str__X5B, - NULL, - (const bstring *)&be_const_str_get_option, - (const bstring *)&be_const_str_AudioOutputI2S, - (const bstring *)&be_const_str_widget_cb, - (const bstring *)&be_const_str__global_def, - (const bstring *)&be_const_str_solidified, - (const bstring *)&be_const_str_refr_size, - NULL, - (const bstring *)&be_const_str_arg_name, - (const bstring *)&be_const_str_run_deferred, - (const bstring *)&be_const_str_to_gamma, - (const bstring *)&be_const_str_color, - (const bstring *)&be_const_str_EVENT_DRAW_PART_BEGIN, - (const bstring *)&be_const_str_pin, - (const bstring *)&be_const_str_y, - (const bstring *)&be_const_str_set_alternate, - (const bstring *)&be_const_str__X2Eautoconf, - NULL, - NULL, - (const bstring *)&be_const_str_set_ldo_enable, - (const bstring *)&be_const_str_cb_do_nothing, - (const bstring *)&be_const_str_AudioOutput, - NULL, - (const bstring *)&be_const_str_rand, - (const bstring *)&be_const_str_EC_C25519, - (const bstring *)&be_const_str_obj_class_create_obj, - (const bstring *)&be_const_str_add_event_cb, - (const bstring *)&be_const_str_on, - NULL, - (const bstring *)&be_const_str__error, - (const bstring *)&be_const_str_pi, - (const bstring *)&be_const_str__X23, - (const bstring *)&be_const_str_lv_obj, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, - (const bstring *)&be_const_str_read8, - (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, - (const bstring *)&be_const_str_HTTP_POST, - (const bstring *)&be_const_str_SERIAL_5E1, - NULL, - (const bstring *)&be_const_str_EVENT_DRAW_PART_END, - (const bstring *)&be_const_str__X3F, - (const bstring *)&be_const_str_internal_error, - NULL, - (const bstring *)&be_const_str_member, - (const bstring *)&be_const_str_content_button, - (const bstring *)&be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus, - NULL, - (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - (const bstring *)&be_const_str_strftime, - (const bstring *)&be_const_str_b, - (const bstring *)&be_const_str_get_size, - (const bstring *)&be_const_str_input, - (const bstring *)&be_const_str_imax, - (const bstring *)&be_const_str__anonymous_, - NULL, - (const bstring *)&be_const_str_check_privileged_access, - (const bstring *)&be_const_str_set_style_bg_color, - (const bstring *)&be_const_str_every_second, - NULL, - (const bstring *)&be_const_str__X2F_X3Frst_X3D, - (const bstring *)&be_const_str_INTERNAL_PDM, - (const bstring *)&be_const_str_BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27, - (const bstring *)&be_const_str_code, - NULL, - (const bstring *)&be_const_str_tasmota, - (const bstring *)&be_const_str_font_embedded, - (const bstring *)&be_const_str_RES_OK, - (const bstring *)&be_const_str_SERIAL_5O2, - NULL, - NULL, - (const bstring *)&be_const_str_AudioFileSource, - (const bstring *)&be_const_str_img, - (const bstring *)&be_const_str_json_fdump, - (const bstring *)&be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, - (const bstring *)&be_const_str_fast_loop, - (const bstring *)&be_const_str_set_power, - (const bstring *)&be_const_str__X20, - (const bstring *)&be_const_str_signal_change, - (const bstring *)&be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range, - (const bstring *)&be_const_str__settings_def, - (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, - (const bstring *)&be_const_str__X2A, - (const bstring *)&be_const_str_ismethod, - (const bstring *)&be_const_str_button_pressed, - (const bstring *)&be_const_str_next_cron, - (const bstring *)&be_const_str_json_fdump_list, - (const bstring *)&be_const_str__X3C, (const bstring *)&be_const_str__class, - (const bstring *)&be_const_str_, - (const bstring *)&be_const_str_get_input_power_status, - (const bstring *)&be_const_str_EVENT_DELETE, - NULL, - (const bstring *)&be_const_str_nan, - NULL, - (const bstring *)&be_const_str_while, - (const bstring *)&be_const_str_MAX_RMT, - (const bstring *)&be_const_str_EXTERNAL_I2S, - (const bstring *)&be_const_str_end, - NULL, - (const bstring *)&be_const_str_dac_voltage, - (const bstring *)&be_const_str_PART_MAIN, - (const bstring *)&be_const_str_adv_block, - (const bstring *)&be_const_str_begin, - (const bstring *)&be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E, - (const bstring *)&be_const_str_alternate, - (const bstring *)&be_const_str_number, - (const bstring *)&be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27, - (const bstring *)&be_const_str_Trigger, - (const bstring *)&be_const_str_floor, - (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, - NULL, - (const bstring *)&be_const_str_cos, - (const bstring *)&be_const_str_light, - (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str__X3D_X3C_X3E_X21, - (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize, - (const bstring *)&be_const_str__X2D_X2A, - (const bstring *)&be_const_str_asin, - (const bstring *)&be_const_str_reverse, - (const bstring *)&be_const_str_constructor_cb, - (const bstring *)&be_const_str_animators, - (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, - (const bstring *)&be_const_str__filename, - (const bstring *)&be_const_str_get_style_bg_color, - (const bstring *)&be_const_str_SERIAL_6O1, - (const bstring *)&be_const_str_day, - (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, - (const bstring *)&be_const_str__X2B, - (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, - (const bstring *)&be_const_str_publish_result, - (const bstring *)&be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker, - NULL, - (const bstring *)&be_const_str__X3D, - (const bstring *)&be_const_str__ptr, - (const bstring *)&be_const_str_get_style_line_color, - (const bstring *)&be_const_str_TASMOTA, - (const bstring *)&be_const_str__X2Ep, - NULL, - NULL, - (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, - (const bstring *)&be_const_str_pop_path, - (const bstring *)&be_const_str_matrix, - NULL, - (const bstring *)&be_const_str_lv_coord_arr, - NULL, - (const bstring *)&be_const_str_get_height, - (const bstring *)&be_const_str_GET, - (const bstring *)&be_const_str_arc_dsc, - (const bstring *)&be_const_str_setmember, - (const bstring *)&be_const_str__p, - (const bstring *)&be_const_str_BECDFE, - (const bstring *)&be_const_str_CFG_X3A_X20running_X20, - (const bstring *)&be_const_str_every_250ms, - (const bstring *)&be_const_str__X2Ep1, - (const bstring *)&be_const_str_obj, - (const bstring *)&be_const_str_HTTP_GET, - (const bstring *)&be_const_str_seti, - (const bstring *)&be_const_str_import, - (const bstring *)&be_const_str__X0A, - (const bstring *)&be_const_str_arg_size, - (const bstring *)&be_const_str_WS2812, - (const bstring *)&be_const_str__archive, - (const bstring *)&be_const_str_CFG_X3A_X20return_code_X3D_X25i, - (const bstring *)&be_const_str_area, - (const bstring *)&be_const_str_setrange, - (const bstring *)&be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, - (const bstring *)&be_const_str_add_cmd, - (const bstring *)&be_const_str_set_temp, - (const bstring *)&be_const_str_get_vbus_voltage, - (const bstring *)&be_const_str_connect, - (const bstring *)&be_const_str_set_align, - (const bstring *)&be_const_str_EVENT_DRAW_MAIN, - (const bstring *)&be_const_str_font_seg7, - (const bstring *)&be_const_str_exec_tele, - (const bstring *)&be_const_str_model, - (const bstring *)&be_const_str_consume_stereo, - (const bstring *)&be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, - (const bstring *)&be_const_str_running, - (const bstring *)&be_const_str_point, - NULL, - NULL, - NULL, - (const bstring *)&be_const_str_BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29, - (const bstring *)&be_const_str_char, - NULL, - (const bstring *)&be_const_str_AudioGeneratorWAV, - (const bstring *)&be_const_str__X25s_X2Eautoconf, - (const bstring *)&be_const_str_a, - (const bstring *)&be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, - (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, - NULL, - (const bstring *)&be_const_str__X21_X3D_X3D, - (const bstring *)&be_const_str_call_native, - (const bstring *)&be_const_str_content_stop, - NULL, - (const bstring *)&be_const_str_compile, - NULL, - (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, - (const bstring *)&be_const_str_assign_rmt, - (const bstring *)&be_const_str__X2Ep2, - NULL, - (const bstring *)&be_const_str_delay, - (const bstring *)&be_const_str_make_cb, - (const bstring *)&be_const_str_deg, - (const bstring *)&be_const_str_enabled, - (const bstring *)&be_const_str_getfloat, - (const bstring *)&be_const_str_content_start, - NULL, - NULL, - NULL, - (const bstring *)&be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, - NULL, - (const bstring *)&be_const_str_p2, - (const bstring *)&be_const_str_pc_rel, - (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, - (const bstring *)&be_const_str__buffer, - (const bstring *)&be_const_str_pct, - (const bstring *)&be_const_str_lv_module_init, - (const bstring *)&be_const_str__X3E_X3D, - (const bstring *)&be_const_str_event_cb, - (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, - (const bstring *)&be_const_str_counters, - (const bstring *)&be_const_str__debug_present, - (const bstring *)&be_const_str_is_running, - (const bstring *)&be_const_str_name, - (const bstring *)&be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27, - (const bstring *)&be_const_str_as, - (const bstring *)&be_const_str_get_width, - NULL, - (const bstring *)&be_const_str_display, - (const bstring *)&be_const_str_ctypes_bytes, - (const bstring *)&be_const_str_isnan, - (const bstring *)&be_const_str_remove_timer, - (const bstring *)&be_const_str__begin_transmission, + (const bstring *)&be_const_str__X20, + (const bstring *)&be_const_str_AudioGenerator, + (const bstring *)&be_const_str_lv_obj, + (const bstring *)&be_const_str_RELAY, (const bstring *)&be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting, - (const bstring *)&be_const_str_finish, + (const bstring *)&be_const_str__X3D, + (const bstring *)&be_const_str_call_native, NULL, - (const bstring *)&be_const_str__X22_X3A, - (const bstring *)&be_const_str__X2Fstate_X2F, NULL, - (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X20, - (const bstring *)&be_const_str_iter, - (const bstring *)&be_const_str_public_key, - (const bstring *)&be_const_str_log, - (const bstring *)&be_const_str_atleast1, - (const bstring *)&be_const_str_AXP192, - (const bstring *)&be_const_str_lv_obj_class, - (const bstring *)&be_const_str_valuer_error, - (const bstring *)&be_const_str_codedump, - (const bstring *)&be_const_str_add_cron, - (const bstring *)&be_const_str_classname, - (const bstring *)&be_const_str_digital_write, + (const bstring *)&be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str_set_tasmota_logo, NULL, - (const bstring *)&be_const_str__available, - (const bstring *)&be_const_str_del, - (const bstring *)&be_const_str_asstring, - (const bstring *)&be_const_str_local, - (const bstring *)&be_const_str_lv_wifi_bars_icon, - (const bstring *)&be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E, - (const bstring *)&be_const_str_contains, - (const bstring *)&be_const_str_Parameter_X20error, - (const bstring *)&be_const_str_Unknown, - (const bstring *)&be_const_str_Leds, - (const bstring *)&be_const_str_missing_X20name, - (const bstring *)&be_const_str_chars_in_string, - (const bstring *)&be_const_str__X2E, + (const bstring *)&be_const_str_content_flush, + (const bstring *)&be_const_str_event_send, + (const bstring *)&be_const_str_ALIGN_BOTTOM_MID, (const bstring *)&be_const_str__X2Etapp, NULL, - (const bstring *)&be_const_str_settings, - (const bstring *)&be_const_str__fl, (const bstring *)&be_const_str_get_log, + (const bstring *)&be_const_str_light, + (const bstring *)&be_const_str_SERIAL_5N1, + (const bstring *)&be_const_str_CFG_X3A_X20downloading_X20_X27_X25s_X27, + (const bstring *)&be_const_str_OPTION_A, + (const bstring *)&be_const_str__X3D_X3D, + (const bstring *)&be_const_str_font_montserrat, + (const bstring *)&be_const_str_tr, + (const bstring *)&be_const_str__settings_ptr, + (const bstring *)&be_const_str_draw_ctx, + (const bstring *)&be_const_str_AudioOutput, + (const bstring *)&be_const_str_Leds, + (const bstring *)&be_const_str_lv_point_arr, + (const bstring *)&be_const_str_compress, + (const bstring *)&be_const_str_SERIAL_8O1, + (const bstring *)&be_const_str__write, + (const bstring *)&be_const_str_year, + (const bstring *)&be_const_str_, + (const bstring *)&be_const_str_cb_do_nothing, + (const bstring *)&be_const_str_exec_tele, + (const bstring *)&be_const_str_dac_voltage, NULL, - (const bstring *)&be_const_str_pin_mode, + (const bstring *)&be_const_str_BUTTON_CONFIGURATION, + (const bstring *)&be_const_str_wifi_bars_icon, NULL, - (const bstring *)&be_const_str__X5D, - (const bstring *)&be_const_str__X3A, - (const bstring *)&be_const_str_wifi, - (const bstring *)&be_const_str_bytes, + (const bstring *)&be_const_str_refr_pos, + (const bstring *)&be_const_str_draw_line, NULL, - (const bstring *)&be_const_str_set_x, - (const bstring *)&be_const_str__X3Clambda_X3E, - (const bstring *)&be_const_str_get_string, - (const bstring *)&be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, - (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, - (const bstring *)&be_const_str_format, - (const bstring *)&be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, - (const bstring *)&be_const_str_load, + (const bstring *)&be_const_str_count, + (const bstring *)&be_const_str_SERIAL_6E2, + (const bstring *)&be_const_str__energy, + (const bstring *)&be_const_str_animators, + (const bstring *)&be_const_str_I2C_Driver, + (const bstring *)&be_const_str_content_send, + (const bstring *)&be_const_str__X2Esize, + (const bstring *)&be_const_str_resize, + (const bstring *)&be_const_str__archive, + (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, + (const bstring *)&be_const_str_SERIAL_7O2, + (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, + (const bstring *)&be_const_str_AudioOpusDecoder, + (const bstring *)&be_const_str_solidified, + (const bstring *)&be_const_str_time_str, + (const bstring *)&be_const_str__drivers, + (const bstring *)&be_const_str__X26lt_X3BNone_X26gt_X3B, + (const bstring *)&be_const_str_read13, + (const bstring *)&be_const_str__X28_X29, + (const bstring *)&be_const_str_arg_name, + (const bstring *)&be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_GET, + (const bstring *)&be_const_str_BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27, + (const bstring *)&be_const_str___iterator__, + (const bstring *)&be_const_str_delay, + (const bstring *)&be_const_str_static, + NULL, + (const bstring *)&be_const_str_light_state, + (const bstring *)&be_const_str_STATE_DEFAULT, + (const bstring *)&be_const_str_atan2, + NULL, + (const bstring *)&be_const_str_traceback, (const bstring *)&be_const_str_exp, - (const bstring *)&be_const_str_gen_cb, - NULL, - (const bstring *)&be_const_str_AES_GCM, - (const bstring *)&be_const_str_SERIAL_6N2, - (const bstring *)&be_const_str_has, - (const bstring *)&be_const_str_add_driver, - (const bstring *)&be_const_str_set_zoom, + (const bstring *)&be_const_str_add_cmd, + (const bstring *)&be_const_str_detect, + (const bstring *)&be_const_str_push_path, + (const bstring *)&be_const_str_obj, + (const bstring *)&be_const_str_file, + (const bstring *)&be_const_str_lv_extra, + (const bstring *)&be_const_str_persist, + (const bstring *)&be_const_str_set_x, + (const bstring *)&be_const_str_gc, + (const bstring *)&be_const_str__persist_X2Ejson, + (const bstring *)&be_const_str__X2Ep, + (const bstring *)&be_const_str_a, + (const bstring *)&be_const_str_CFG_X3A_X20No_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found, + (const bstring *)&be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function, + (const bstring *)&be_const_str_close, + (const bstring *)&be_const_str_full_state, + (const bstring *)&be_const_str_r, + (const bstring *)&be_const_str_add_fast_loop, + (const bstring *)&be_const_str_get_style_bg_color, + (const bstring *)&be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27, + (const bstring *)&be_const_str_sqrt, + (const bstring *)&be_const_str_log10, + (const bstring *)&be_const_str_dimmer, + (const bstring *)&be_const_str_set_channels, + (const bstring *)&be_const_str__ccmd, + (const bstring *)&be_const_str__X23display_X2Eini, + (const bstring *)&be_const_str_target_search, + (const bstring *)&be_const_str_int, + (const bstring *)&be_const_str_widget_struct_default, + (const bstring *)&be_const_str__dirty, + (const bstring *)&be_const_str_SERIAL_8E2, + (const bstring *)&be_const_str_color, + (const bstring *)&be_const_str_Animate_X20pc_X20is_X20out_X20of_X20range, + (const bstring *)&be_const_str_reset, + (const bstring *)&be_const_str_event_cb, + (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, + (const bstring *)&be_const_str_fromb64, + (const bstring *)&be_const_str_CT, + (const bstring *)&be_const_str__def, + (const bstring *)&be_const_str_finish, + (const bstring *)&be_const_str__splash, + (const bstring *)&be_const_str__X2D_X2A, + (const bstring *)&be_const_str__lvgl, + (const bstring *)&be_const_str_set_matrix_pixel_color, + (const bstring *)&be_const_str_consume_silence, + (const bstring *)&be_const_str_area, + (const bstring *)&be_const_str_reverse, + (const bstring *)&be_const_str__X2B, + (const bstring *)&be_const_str_stop_iteration, + (const bstring *)&be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, (const bstring *)&be_const_str_byte, - (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E + (const bstring *)&be_const_str__X21_X3D_X3D, + (const bstring *)&be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str__X2Eautoconf, + (const bstring *)&be_const_str__X23init_X2Ebat, + (const bstring *)&be_const_str_ip, + (const bstring *)&be_const_str_duration, + (const bstring *)&be_const_str_read32, + (const bstring *)&be_const_str_arg, + (const bstring *)&be_const_str_get_light, + (const bstring *)&be_const_str__X2Ep2, + (const bstring *)&be_const_str_add, + (const bstring *)&be_const_str_arg_size, + (const bstring *)&be_const_str_SERIAL_8N2, + (const bstring *)&be_const_str_the_X20second_X20argument_X20is_X20not_X20a_X20function, + (const bstring *)&be_const_str_EVENT_DRAW_PART_BEGIN, + NULL, + (const bstring *)&be_const_str_nan, + (const bstring *)&be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_global, + (const bstring *)&be_const_str_value_error, + (const bstring *)&be_const_str_coord_arr, + (const bstring *)&be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29, + (const bstring *)&be_const_str_line_dsc, + (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X29, + (const bstring *)&be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus, + (const bstring *)&be_const_str__X3A, + NULL, + (const bstring *)&be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27, + NULL, + (const bstring *)&be_const_str_add_light, + (const bstring *)&be_const_str_fast_loop, + (const bstring *)&be_const_str_pc_abs, + (const bstring *)&be_const_str__X5B, + (const bstring *)&be_const_str_add_rule, + (const bstring *)&be_const_str_zip, + (const bstring *)&be_const_str_widget_destructor, + (const bstring *)&be_const_str_AXP192, + (const bstring *)&be_const_str_split, + (const bstring *)&be_const_str_SERIAL_6O1, + (const bstring *)&be_const_str_out_X20of_X20range, + (const bstring *)&be_const_str_web_send, + (const bstring *)&be_const_str_list, + (const bstring *)&be_const_str_CFG_X3A_X20skipping_X20_X27display_X2Eini_X27_X20because_X20already_X20present_X20in_X20file_X2Dsystem, + (const bstring *)&be_const_str_char, + (const bstring *)&be_const_str__X2F, + (const bstring *)&be_const_str__X3D_X3C_X3E_X21, + (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str_TAP_X3A_X20Loaded_X20Tasmota_X20App_X20_X27_X25s_X27, + (const bstring *)&be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, + NULL, + (const bstring *)&be_const_str_SERIAL_6N2, + NULL, + (const bstring *)&be_const_str_lv_wifi_bars_icon, + (const bstring *)&be_const_str_toint, + (const bstring *)&be_const_str_pop, + (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, + NULL, + (const bstring *)&be_const_str_gamma10, + (const bstring *)&be_const_str__ptr, + (const bstring *)&be_const_str_ins_goto, + (const bstring *)&be_const_str_get_current_module_path, + (const bstring *)&be_const_str_BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25i_X29, + (const bstring *)&be_const_str_ismethod, + (const bstring *)&be_const_str_collect, + (const bstring *)&be_const_str_digital_read, + NULL, + NULL, + (const bstring *)&be_const_str__X23autoexec_X2Ebe, + (const bstring *)&be_const_str__X2D, + (const bstring *)&be_const_str_create_matrix, + NULL, + (const bstring *)&be_const_str_millis, + (const bstring *)&be_const_str_tomap, + (const bstring *)&be_const_str__X3E, + (const bstring *)&be_const_str_remove_cmd, + NULL, + NULL, + (const bstring *)&be_const_str_alternate, + (const bstring *)&be_const_str_print, + NULL, + (const bstring *)&be_const_str_CFG_X3A_X20running_X20, + NULL, + (const bstring *)&be_const_str_invalidate, + (const bstring *)&be_const_str__X2Ebec, + (const bstring *)&be_const_str_name, + (const bstring *)&be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, + NULL, + (const bstring *)&be_const_str_SERIAL_5N2, + (const bstring *)&be_const_str_TASMOTA, + (const bstring *)&be_const_str_I2C_X3A, + (const bstring *)&be_const_str_WS2812_GRB, + NULL, + (const bstring *)&be_const_str__X23, + (const bstring *)&be_const_str_font_seg7, + (const bstring *)&be_const_str_light_X20must_X20be_X20of_X20class_X20_X27light_state_X27, + (const bstring *)&be_const_str__X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, + (const bstring *)&be_const_str_OneWire, + (const bstring *)&be_const_str__X3C, + NULL, + (const bstring *)&be_const_str_SK6812_GRBW, + (const bstring *)&be_const_str__X2Elen, + NULL, + (const bstring *)&be_const_str__X2Fac, + (const bstring *)&be_const_str_last_modified, + (const bstring *)&be_const_str__X5D, + (const bstring *)&be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback, + (const bstring *)&be_const_str_copy, + (const bstring *)&be_const_str__X2F_X3Frst_X3D, + (const bstring *)&be_const_str_img, + (const bstring *)&be_const_str_https_X3A_X2F_X2Fraw_X2Egithubusercontent_X2Ecom_X2Ftasmota_X2Fautoconf_X2Fmain_X2F_X25s_X2F_X25s_X2Eautoconf, + (const bstring *)&be_const_str_CFG_X3A_X20return_code_X3D_X25i, + (const bstring *)&be_const_str_assert, + NULL, + (const bstring *)&be_const_str_floor, + (const bstring *)&be_const_str__X7B, + (const bstring *)&be_const_str_energy_struct, + (const bstring *)&be_const_str__X2Fstate_X2F, + (const bstring *)&be_const_str_content_start, + (const bstring *)&be_const_str_AudioGeneratorMP3, + (const bstring *)&be_const_str_Restart_X201, + (const bstring *)&be_const_str_AudioFileSource, + (const bstring *)&be_const_str_add_cron, + (const bstring *)&be_const_str_hex, + (const bstring *)&be_const_str_start, + (const bstring *)&be_const_str__X3Clambda_X3E, + (const bstring *)&be_const_str_SERIAL_7E1, + (const bstring *)&be_const_str_pin, + NULL, + (const bstring *)&be_const_str_rotate, + (const bstring *)&be_const_str_abs, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + (const bstring *)&be_const_str_serial, + (const bstring *)&be_const_str__X2Ew, + (const bstring *)&be_const_str_BRY_X3A_X20invalid_X20hue_X20payload_X3A_X20, + (const bstring *)&be_const_str_add_anim, + (const bstring *)&be_const_str__X0A, + (const bstring *)&be_const_str__X23preinit_X2Ebe, + (const bstring *)&be_const_str_widget_instance_size, + (const bstring *)&be_const_str_RES_OK, + (const bstring *)&be_const_str_json_fdump_list, + (const bstring *)&be_const_str_calldepth, + (const bstring *)&be_const_str__filename, + (const bstring *)&be_const_str__request_from, + (const bstring *)&be_const_str_deg, + NULL, + (const bstring *)&be_const_str_keys, + NULL, + (const bstring *)&be_const_str_SERIAL_8O2, + NULL, + (const bstring *)&be_const_str_True, + (const bstring *)&be_const_str__X3C_X3D, + NULL, + (const bstring *)&be_const_str_destructor_cb, + (const bstring *)&be_const_str_bus, + (const bstring *)&be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27, + NULL, + (const bstring *)&be_const_str_Unknown_X20command, + (const bstring *)&be_const_str_b, + (const bstring *)&be_const_str_encrypt, + (const bstring *)&be_const_str_content_stop, + NULL, + (const bstring *)&be_const_str_base_class, + (const bstring *)&be_const_str_argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize, + (const bstring *)&be_const_str_set_height, + (const bstring *)&be_const_str__X25, + NULL, + (const bstring *)&be_const_str_atleast1, + (const bstring *)&be_const_str_function, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, + NULL, + (const bstring *)&be_const_str_contains, + (const bstring *)&be_const_str_CFG_X3A_X20removed_X20file_X20_X27_X25s_X27, + (const bstring *)&be_const_str_lv_solidified, + (const bstring *)&be_const_str__debug_present, + (const bstring *)&be_const_str_success, + NULL, + (const bstring *)&be_const_str_cosh, + (const bstring *)&be_const_str_obj_event_base, + (const bstring *)&be_const_str_int64, + (const bstring *)&be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, + NULL, + (const bstring *)&be_const_str__X23autoexec_X2Ebat, + (const bstring *)&be_const_str_add_header, + (const bstring *)&be_const_str_subscribe, + (const bstring *)&be_const_str_debug, + (const bstring *)&be_const_str_ALIGN_LEFT_MID, + (const bstring *)&be_const_str_read12, + (const bstring *)&be_const_str_widget_group_def, + (const bstring *)&be_const_str_deinit, + (const bstring *)&be_const_str_Trigger, + (const bstring *)&be_const_str__X2Ebe, + NULL, + (const bstring *)&be_const_str_PART_MAIN, + (const bstring *)&be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20, + (const bstring *)&be_const_str_hue_status, + (const bstring *)&be_const_str_type, + (const bstring *)&be_const_str__X3E_X3D, + NULL, + NULL, + (const bstring *)&be_const_str_INTERNAL_DAC, + (const bstring *)&be_const_str_Wire, + (const bstring *)&be_const_str_digital_write, + (const bstring *)&be_const_str_cb, + (const bstring *)&be_const_str__X2502d_X25s_X2502d, + (const bstring *)&be_const_str_CFG_X3A_X20removing_X20autoconf_X20files, + (const bstring *)&be_const_str_erase, + (const bstring *)&be_const_str_HTTP_POST, + (const bstring *)&be_const_str_EC_C25519, + NULL, + (const bstring *)&be_const_str_get_name, + (const bstring *)&be_const_str_code, + (const bstring *)&be_const_str_pixel_size, + (const bstring *)&be_const_str__X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, + (const bstring *)&be_const_str_Tele, + (const bstring *)&be_const_str_find_key_i, + (const bstring *)&be_const_str_add_event_cb, + (const bstring *)&be_const_str_setrange, + (const bstring *)&be_const_str__X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, + (const bstring *)&be_const_str_SERIAL_5E1, + (const bstring *)&be_const_str_write_gpio, + (const bstring *)&be_const_str_next_cron, + (const bstring *)&be_const_str_listdir, + (const bstring *)&be_const_str__X22_X3A, + (const bstring *)&be_const_str_EVENT_DRAW_MAIN, + NULL, + (const bstring *)&be_const_str_COLOR_WHITE, + (const bstring *)&be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, + (const bstring *)&be_const_str_persist_X2E_p_X20is_X20not_X20a_X20map, + (const bstring *)&be_const_str__X2E_X2E, + (const bstring *)&be_const_str__X2Ep1, + (const bstring *)&be_const_str_acos, + (const bstring *)&be_const_str_set_hum, + (const bstring *)&be_const_str_set_time, + (const bstring *)&be_const_str_imax, + (const bstring *)&be_const_str_AudioFileSourceFS, + (const bstring *)&be_const_str_every_250ms, + (const bstring *)&be_const_str__X21_X3D, + NULL, + (const bstring *)&be_const_str_consume_mono, + (const bstring *)&be_const_str__X7Bs_X7DBatt_X20Current_X7Bm_X7D_X25_X2E1f_X20mA_X7Be_X7D, + NULL, + (const bstring *)&be_const_str_seti, + NULL, + (const bstring *)&be_const_str_get_temp, + (const bstring *)&be_const_str_day, + (const bstring *)&be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_SERIAL_6N1, + (const bstring *)&be_const_str_SERIAL_8E1, + (const bstring *)&be_const_str_widget_ctor_impl, + (const bstring *)&be_const_str_EVENT_DRAW_PART_END, + (const bstring *)&be_const_str_internal_error, + (const bstring *)&be_const_str__p, + (const bstring *)&be_const_str_true, + (const bstring *)&be_const_str_Tasmota, + (const bstring *)&be_const_str_lv_wifi_arcs_icon, + (const bstring *)&be_const_str_set_useragent, + (const bstring *)&be_const_str__X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, + (const bstring *)&be_const_str_BLE, + NULL, + (const bstring *)&be_const_str_hue_ntv, + NULL, + (const bstring *)&be_const_str__anonymous_, + (const bstring *)&be_const_str_read24, + NULL, + (const bstring *)&be_const_str__X2E, + (const bstring *)&be_const_str_draw_line_dsc_init, + (const bstring *)&be_const_str__X2D_X2D_X3A_X2D_X2D, + (const bstring *)&be_const_str_del, + (const bstring *)&be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s, + (const bstring *)&be_const_str_draw_arc, + NULL, + (const bstring *)&be_const_str__error, + (const bstring *)&be_const_str_set_gain, + (const bstring *)&be_const_str_get_bat_charge_current, + (const bstring *)&be_const_str_MAX_RMT, + (const bstring *)&be_const_str_battery_present, + (const bstring *)&be_const_str_sat, + (const bstring *)&be_const_str_init_draw_arc_dsc, + (const bstring *)&be_const_str_set_style_text_color, + (const bstring *)&be_const_str_p1, + (const bstring *)&be_const_str_bool, + (const bstring *)&be_const_str_widget_dtor_impl, + (const bstring *)&be_const_str_ctypes_bytes_dyn, + (const bstring *)&be_const_str__X3Cselect_X20name_X3D_X27zip_X27_X3E, + NULL, + (const bstring *)&be_const_str__buffer, + (const bstring *)&be_const_str_event, + (const bstring *)&be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29, + (const bstring *)&be_const_str__X2C, + (const bstring *)&be_const_str__X2Flights_X2F, + NULL, + (const bstring *)&be_const_str_is_dirty, + (const bstring *)&be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_timer_cb, + (const bstring *)&be_const_str_lv, + (const bstring *)&be_const_str_find_op, + (const bstring *)&be_const_str_get_bat_current, + (const bstring *)&be_const_str_AudioOutputI2S, + (const bstring *)&be_const_str__change_buffer, + (const bstring *)&be_const_str__t, + (const bstring *)&be_const_str_DIMMER, + (const bstring *)&be_const_str_AudioGeneratorWAV, + (const bstring *)&be_const_str_list_handlers, + (const bstring *)&be_const_str_COLOR_BLACK, + (const bstring *)&be_const_str_cb_event_closure, + (const bstring *)&be_const_str_shared_key, + (const bstring *)&be_const_str_now, + (const bstring *)&be_const_str__X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, + NULL, + (const bstring *)&be_const_str_rand, + (const bstring *)&be_const_str_dim, + (const bstring *)&be_const_str_allocated, + (const bstring *)&be_const_str__X22, + (const bstring *)&be_const_str_button_pressed, + (const bstring *)&be_const_str__available, + (const bstring *)&be_const_str__fl, + (const bstring *)&be_const_str_cmd, + (const bstring *)&be_const_str__X3F, + (const bstring *)&be_const_str_get_size, + (const bstring *)&be_const_str_elements_X20must_X20be_X20a_X20lv_point, + (const bstring *)&be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E, + (const bstring *)&be_const_str_ct, + (const bstring *)&be_const_str_CFG_X3A_X20loading_X20, + NULL, + (const bstring *)&be_const_str_concat, + (const bstring *)&be_const_str_invalid_X20GPIO_X20number, + (const bstring *)&be_const_str_display_X2Eini, + (const bstring *)&be_const_str_consume_stereo, + (const bstring *)&be_const_str_tasmota_log_reader, + (const bstring *)&be_const_str_geti, + (const bstring *)&be_const_str_autorun, + (const bstring *)&be_const_str__X25s_X2Eautoconf, + (const bstring *)&be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29, + (const bstring *)&be_const_str_MI32, + (const bstring *)&be_const_str_CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27 }; static const struct bconststrtab m_const_string_table = { - .size = 465, - .count = 953, + .size = 466, + .count = 955, .table = m_string_table }; diff --git a/lib/libesp32/berry_tasmota/src/be_lv_tasmota_lib.c b/lib/libesp32/berry_tasmota/src/be_lv_tasmota_lib.c index c2f2a9139..e1a442556 100644 --- a/lib/libesp32/berry_tasmota/src/be_lv_tasmota_lib.c +++ b/lib/libesp32/berry_tasmota/src/be_lv_tasmota_lib.c @@ -430,7 +430,7 @@ be_local_closure(lv_tasmota_init, /* name */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[31]) { /* constants */ + ( &(const bvalue[33]) { /* constants */ /* K0 */ be_nested_str(lv), /* K1 */ be_nested_str(start), /* K2 */ be_nested_str(splash_init), @@ -445,27 +445,29 @@ be_local_closure(lv_tasmota_init, /* name */ /* K11 */ be_nested_str(load_freetype_font), /* K12 */ be_nested_str(register_button_encoder), /* K13 */ be_nested_str(screenshot), - /* K14 */ be_nested_str(clock_icon), - /* K15 */ be_nested_str(lv_clock_icon), - /* K16 */ be_nested_str(signal_arcs), - /* K17 */ be_nested_str(lv_signal_arcs), - /* K18 */ be_nested_str(signal_bars), - /* K19 */ be_nested_str(lv_signal_bars), - /* K20 */ be_nested_str(wifi_arcs_icon), - /* K21 */ be_nested_str(lv_wifi_arcs_icon), - /* K22 */ be_nested_str(wifi_arcs), - /* K23 */ be_nested_str(lv_wifi_arcs), - /* K24 */ be_nested_str(wifi_bars_icon), - /* K25 */ be_nested_str(lv_wifi_bars_icon), - /* K26 */ be_nested_str(wifi_bars), - /* K27 */ be_nested_str(lv_wifi_bars), - /* K28 */ be_nested_str(tasmota), - /* K29 */ be_nested_str(get_option), - /* K30 */ be_const_int(0), + /* K14 */ be_nested_str(clock), + /* K15 */ be_nested_str(lv_clock), + /* K16 */ be_nested_str(clock_icon), + /* K17 */ be_nested_str(lv_clock_icon), + /* K18 */ be_nested_str(signal_arcs), + /* K19 */ be_nested_str(lv_signal_arcs), + /* K20 */ be_nested_str(signal_bars), + /* K21 */ be_nested_str(lv_signal_bars), + /* K22 */ be_nested_str(wifi_arcs_icon), + /* K23 */ be_nested_str(lv_wifi_arcs_icon), + /* K24 */ be_nested_str(wifi_arcs), + /* K25 */ be_nested_str(lv_wifi_arcs), + /* K26 */ be_nested_str(wifi_bars_icon), + /* K27 */ be_nested_str(lv_wifi_bars_icon), + /* K28 */ be_nested_str(wifi_bars), + /* K29 */ be_nested_str(lv_wifi_bars), + /* K30 */ be_nested_str(tasmota), + /* K31 */ be_nested_str(get_option), + /* K32 */ be_const_int(0), }), &be_const_str_init, &be_const_str_solidified, - ( &(const binstruction[51]) { /* code */ + ( &(const binstruction[53]) { /* code */ 0xA4060000, // 0000 IMPORT R1 K0 0x88080101, // 0001 GETMBR R2 R0 K1 0x90060202, // 0002 SETMBR R1 K1 R2 @@ -507,16 +509,18 @@ be_local_closure(lv_tasmota_init, /* name */ 0x90063002, // 0026 SETMBR R1 K24 R2 0xB80A3600, // 0027 GETNGBL R2 K27 0x90063402, // 0028 SETMBR R1 K26 R2 - 0xB80A3800, // 0029 GETNGBL R2 K28 - 0x8C08051D, // 002A GETMET R2 R2 K29 - 0x54120086, // 002B LDINT R4 135 - 0x7C080400, // 002C CALL R2 2 - 0x1C08051E, // 002D EQ R2 R2 K30 - 0x780A0001, // 002E JMPF R2 #0031 - 0x8C080302, // 002F GETMET R2 R1 K2 - 0x7C080200, // 0030 CALL R2 1 - 0x4C080000, // 0031 LDNIL R2 - 0x80040400, // 0032 RET 1 R2 + 0xB80A3A00, // 0029 GETNGBL R2 K29 + 0x90063802, // 002A SETMBR R1 K28 R2 + 0xB80A3C00, // 002B GETNGBL R2 K30 + 0x8C08051F, // 002C GETMET R2 R2 K31 + 0x54120086, // 002D LDINT R4 135 + 0x7C080400, // 002E CALL R2 2 + 0x1C080520, // 002F EQ R2 R2 K32 + 0x780A0001, // 0030 JMPF R2 #0033 + 0x8C080302, // 0031 GETMET R2 R1 K2 + 0x7C080200, // 0032 CALL R2 1 + 0x4C080000, // 0033 LDNIL R2 + 0x80040400, // 0034 RET 1 R2 }) ) ); diff --git a/lib/libesp32/berry_tasmota/src/be_lvgl_clock_icon_lib.c b/lib/libesp32/berry_tasmota/src/be_lvgl_clock_icon_lib.c index 5d15e661d..ed9b2b96e 100644 --- a/lib/libesp32/berry_tasmota/src/be_lvgl_clock_icon_lib.c +++ b/lib/libesp32/berry_tasmota/src/be_lvgl_clock_icon_lib.c @@ -7,304 +7,100 @@ #include "lvgl.h" -/******************************************************************** -** Solidified function: set_time -********************************************************************/ -be_local_closure(lv_clock_icon_set_time, /* name */ - be_nested_proto( - 11, /* nstack */ - 4, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[10]) { /* constants */ - /* K0 */ be_nested_str(string), - /* K1 */ be_nested_str(hour), - /* K2 */ be_nested_str(minute), - /* K3 */ be_nested_str(sec), - /* K4 */ be_nested_str(format), - /* K5 */ be_nested_str(_X2502d_X25s_X2502d), - /* K6 */ be_const_int(2), - /* K7 */ be_nested_str(_X3A), - /* K8 */ be_nested_str(_X20), - /* K9 */ be_nested_str(set_text), - }), - &be_const_str_set_time, - &be_const_str_solidified, - ( &(const binstruction[27]) { /* code */ - 0xA4120000, // 0000 IMPORT R4 K0 - 0x88140101, // 0001 GETMBR R5 R0 K1 - 0x20140205, // 0002 NE R5 R1 R5 - 0x74160005, // 0003 JMPT R5 #000A - 0x88140102, // 0004 GETMBR R5 R0 K2 - 0x20140405, // 0005 NE R5 R2 R5 - 0x74160002, // 0006 JMPT R5 #000A - 0x88140103, // 0007 GETMBR R5 R0 K3 - 0x20140605, // 0008 NE R5 R3 R5 - 0x7816000F, // 0009 JMPF R5 #001A - 0x8C140904, // 000A GETMET R5 R4 K4 - 0x581C0005, // 000B LDCONST R7 K5 - 0x5C200200, // 000C MOVE R8 R1 - 0x10240706, // 000D MOD R9 R3 K6 - 0x78260001, // 000E JMPF R9 #0011 - 0x58240007, // 000F LDCONST R9 K7 - 0x70020000, // 0010 JMP #0012 - 0x58240008, // 0011 LDCONST R9 K8 - 0x5C280400, // 0012 MOVE R10 R2 - 0x7C140A00, // 0013 CALL R5 5 - 0x90020201, // 0014 SETMBR R0 K1 R1 - 0x90020402, // 0015 SETMBR R0 K2 R2 - 0x90020603, // 0016 SETMBR R0 K3 R3 - 0x8C180109, // 0017 GETMET R6 R0 K9 - 0x5C200A00, // 0018 MOVE R8 R5 - 0x7C180400, // 0019 CALL R6 2 - 0x80000000, // 001A RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: every_second -********************************************************************/ -be_local_closure(lv_clock_icon_every_second, /* name */ - be_nested_proto( - 7, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 9]) { /* constants */ - /* K0 */ be_nested_str(tasmota), - /* K1 */ be_nested_str(time_dump), - /* K2 */ be_nested_str(rtc), - /* K3 */ be_nested_str(local), - /* K4 */ be_nested_str(year), - /* K5 */ be_nested_str(set_time), - /* K6 */ be_nested_str(hour), - /* K7 */ be_nested_str(min), - /* K8 */ be_nested_str(sec), - }), - &be_const_str_every_second, - &be_const_str_solidified, - ( &(const binstruction[17]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0xB80E0000, // 0002 GETNGBL R3 K0 - 0x8C0C0702, // 0003 GETMET R3 R3 K2 - 0x7C0C0200, // 0004 CALL R3 1 - 0x940C0703, // 0005 GETIDX R3 R3 K3 - 0x7C040400, // 0006 CALL R1 2 - 0x94080304, // 0007 GETIDX R2 R1 K4 - 0x540E07B1, // 0008 LDINT R3 1970 - 0x20080403, // 0009 NE R2 R2 R3 - 0x780A0004, // 000A JMPF R2 #0010 - 0x8C080105, // 000B GETMET R2 R0 K5 - 0x94100306, // 000C GETIDX R4 R1 K6 - 0x94140307, // 000D GETIDX R5 R1 K7 - 0x94180308, // 000E GETIDX R6 R1 K8 - 0x7C080800, // 000F CALL R2 4 - 0x80000000, // 0010 RET 0 - }) - ) -); -/*******************************************************************/ - - /******************************************************************** ** Solidified function: init ********************************************************************/ be_local_closure(lv_clock_icon_init, /* name */ be_nested_proto( - 11, /* nstack */ + 10, /* nstack */ 2, /* argc */ 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ - 1, /* has sup protos */ - ( &(const struct bproto*[ 1]) { - be_nested_proto( - 2, /* nstack */ - 0, /* argc */ - 0, /* varg */ - 1, /* has upvals */ - ( &(const bupvaldesc[ 1]) { /* upvals */ - be_local_const_upval(1, 0), - }), - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(before_del), - }), - &be_const_str__X3Clambda_X3E, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x68000000, // 0000 GETUPV R0 U0 - 0x8C000100, // 0001 GETMET R0 R0 K0 - 0x7C000200, // 0002 CALL R0 1 - 0x80040000, // 0003 RET 1 R0 - }) - ), - }), + 0, /* has sup protos */ + NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[25]) { /* constants */ + ( &(const bvalue[16]) { /* constants */ /* K0 */ be_nested_str(init), - /* K1 */ be_nested_str(lv), - /* K2 */ be_nested_str(seg7_font), - /* K3 */ be_nested_str(set_style_text_font), - /* K4 */ be_nested_str(PART_MAIN), - /* K5 */ be_nested_str(STATE_DEFAULT), - /* K6 */ be_nested_str(get_height), - /* K7 */ be_nested_str(set_text), - /* K8 */ be_nested_str(_X2D_X2D_X3A_X2D_X2D), - /* K9 */ be_nested_str(refr_size), - /* K10 */ be_nested_str(get_width), - /* K11 */ be_nested_str(set_y), - /* K12 */ be_const_int(2), - /* K13 */ be_nested_str(get_style_pad_right), - /* K14 */ be_nested_str(set_x), - /* K15 */ be_const_int(3), - /* K16 */ be_nested_str(set_style_pad_right), - /* K17 */ be_nested_str(set_style_bg_color), - /* K18 */ be_nested_str(color), - /* K19 */ be_nested_str(COLOR_BLACK), - /* K20 */ be_nested_str(add_event_cb), - /* K21 */ be_nested_str(EVENT_DELETE), - /* K22 */ be_const_int(0), - /* K23 */ be_nested_str(tasmota), - /* K24 */ be_nested_str(add_driver), + /* K1 */ be_nested_str(get_height), + /* K2 */ be_nested_str(refr_size), + /* K3 */ be_nested_str(get_width), + /* K4 */ be_nested_str(set_y), + /* K5 */ be_const_int(2), + /* K6 */ be_nested_str(get_style_pad_right), + /* K7 */ be_nested_str(lv), + /* K8 */ be_nested_str(PART_MAIN), + /* K9 */ be_nested_str(STATE_DEFAULT), + /* K10 */ be_nested_str(set_x), + /* K11 */ be_const_int(3), + /* K12 */ be_nested_str(set_style_pad_right), + /* K13 */ be_nested_str(set_style_bg_color), + /* K14 */ be_nested_str(color), + /* K15 */ be_nested_str(COLOR_BLACK), }), &be_const_str_init, &be_const_str_solidified, - ( &(const binstruction[89]) { /* code */ + ( &(const binstruction[60]) { /* code */ 0x60080003, // 0000 GETGBL R2 G3 0x5C0C0000, // 0001 MOVE R3 R0 0x7C080200, // 0002 CALL R2 1 0x8C080500, // 0003 GETMET R2 R2 K0 0x5C100200, // 0004 MOVE R4 R1 0x7C080400, // 0005 CALL R2 2 - 0xB80A0200, // 0006 GETNGBL R2 K1 - 0x8C080502, // 0007 GETMET R2 R2 K2 - 0x5412000F, // 0008 LDINT R4 16 - 0x7C080400, // 0009 CALL R2 2 - 0x4C0C0000, // 000A LDNIL R3 - 0x200C0403, // 000B NE R3 R2 R3 - 0x780E0007, // 000C JMPF R3 #0015 + 0x4C080000, // 0006 LDNIL R2 + 0x20080202, // 0007 NE R2 R1 R2 + 0x780A0031, // 0008 JMPF R2 #003B + 0x8C080301, // 0009 GETMET R2 R1 K1 + 0x7C080200, // 000A CALL R2 1 + 0x8C0C0102, // 000B GETMET R3 R0 K2 + 0x7C0C0200, // 000C CALL R3 1 0x8C0C0103, // 000D GETMET R3 R0 K3 - 0x5C140400, // 000E MOVE R5 R2 - 0xB81A0200, // 000F GETNGBL R6 K1 - 0x88180D04, // 0010 GETMBR R6 R6 K4 - 0xB81E0200, // 0011 GETNGBL R7 K1 - 0x881C0F05, // 0012 GETMBR R7 R7 K5 - 0x30180C07, // 0013 OR R6 R6 R7 - 0x7C0C0600, // 0014 CALL R3 3 - 0x4C0C0000, // 0015 LDNIL R3 - 0x200C0203, // 0016 NE R3 R1 R3 - 0x780E0034, // 0017 JMPF R3 #004D - 0x8C0C0306, // 0018 GETMET R3 R1 K6 - 0x7C0C0200, // 0019 CALL R3 1 - 0x8C100107, // 001A GETMET R4 R0 K7 - 0x58180008, // 001B LDCONST R6 K8 - 0x7C100400, // 001C CALL R4 2 - 0x8C100109, // 001D GETMET R4 R0 K9 - 0x7C100200, // 001E CALL R4 1 - 0x8C10010A, // 001F GETMET R4 R0 K10 - 0x7C100200, // 0020 CALL R4 1 - 0x8C14010B, // 0021 GETMET R5 R0 K11 - 0x8C1C0306, // 0022 GETMET R7 R1 K6 - 0x7C1C0200, // 0023 CALL R7 1 - 0x8C200106, // 0024 GETMET R8 R0 K6 - 0x7C200200, // 0025 CALL R8 1 - 0x041C0E08, // 0026 SUB R7 R7 R8 - 0x0C1C0F0C, // 0027 DIV R7 R7 K12 - 0x7C140400, // 0028 CALL R5 2 - 0x8C14030D, // 0029 GETMET R5 R1 K13 - 0xB81E0200, // 002A GETNGBL R7 K1 - 0x881C0F04, // 002B GETMBR R7 R7 K4 - 0xB8220200, // 002C GETNGBL R8 K1 - 0x88201105, // 002D GETMBR R8 R8 K5 - 0x301C0E08, // 002E OR R7 R7 R8 - 0x7C140400, // 002F CALL R5 2 - 0x8C18010E, // 0030 GETMET R6 R0 K14 - 0x8C20030A, // 0031 GETMET R8 R1 K10 - 0x7C200200, // 0032 CALL R8 1 - 0x04201004, // 0033 SUB R8 R8 R4 - 0x04201005, // 0034 SUB R8 R8 R5 - 0x0420110F, // 0035 SUB R8 R8 K15 - 0x7C180400, // 0036 CALL R6 2 - 0x8C180310, // 0037 GETMET R6 R1 K16 - 0x00200A04, // 0038 ADD R8 R5 R4 - 0x54260005, // 0039 LDINT R9 6 - 0x00201009, // 003A ADD R8 R8 R9 - 0xB8260200, // 003B GETNGBL R9 K1 - 0x88241304, // 003C GETMBR R9 R9 K4 - 0xB82A0200, // 003D GETNGBL R10 K1 - 0x88281505, // 003E GETMBR R10 R10 K5 - 0x3024120A, // 003F OR R9 R9 R10 - 0x7C180600, // 0040 CALL R6 3 - 0x8C180111, // 0041 GETMET R6 R0 K17 - 0xB8220200, // 0042 GETNGBL R8 K1 - 0x8C201112, // 0043 GETMET R8 R8 K18 - 0xB82A0200, // 0044 GETNGBL R10 K1 - 0x88281513, // 0045 GETMBR R10 R10 K19 - 0x7C200400, // 0046 CALL R8 2 - 0xB8260200, // 0047 GETNGBL R9 K1 - 0x88241304, // 0048 GETMBR R9 R9 K4 - 0xB82A0200, // 0049 GETNGBL R10 K1 - 0x88281505, // 004A GETMBR R10 R10 K5 - 0x3024120A, // 004B OR R9 R9 R10 - 0x7C180600, // 004C CALL R6 3 - 0x8C0C0114, // 004D GETMET R3 R0 K20 - 0x84140000, // 004E CLOSURE R5 P0 - 0xB81A0200, // 004F GETNGBL R6 K1 - 0x88180D15, // 0050 GETMBR R6 R6 K21 - 0x581C0016, // 0051 LDCONST R7 K22 - 0x7C0C0800, // 0052 CALL R3 4 - 0xB80E2E00, // 0053 GETNGBL R3 K23 - 0x8C0C0718, // 0054 GETMET R3 R3 K24 - 0x5C140000, // 0055 MOVE R5 R0 - 0x7C0C0400, // 0056 CALL R3 2 - 0xA0000000, // 0057 CLOSE R0 - 0x80000000, // 0058 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: before_del -********************************************************************/ -be_local_closure(lv_clock_icon_before_del, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str(tasmota), - /* K1 */ be_nested_str(remove_driver), - }), - &be_const_str_before_del, - &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0x80000000, // 0004 RET 0 + 0x7C0C0200, // 000E CALL R3 1 + 0x8C100104, // 000F GETMET R4 R0 K4 + 0x8C180301, // 0010 GETMET R6 R1 K1 + 0x7C180200, // 0011 CALL R6 1 + 0x8C1C0101, // 0012 GETMET R7 R0 K1 + 0x7C1C0200, // 0013 CALL R7 1 + 0x04180C07, // 0014 SUB R6 R6 R7 + 0x0C180D05, // 0015 DIV R6 R6 K5 + 0x7C100400, // 0016 CALL R4 2 + 0x8C100306, // 0017 GETMET R4 R1 K6 + 0xB81A0E00, // 0018 GETNGBL R6 K7 + 0x88180D08, // 0019 GETMBR R6 R6 K8 + 0xB81E0E00, // 001A GETNGBL R7 K7 + 0x881C0F09, // 001B GETMBR R7 R7 K9 + 0x30180C07, // 001C OR R6 R6 R7 + 0x7C100400, // 001D CALL R4 2 + 0x8C14010A, // 001E GETMET R5 R0 K10 + 0x8C1C0303, // 001F GETMET R7 R1 K3 + 0x7C1C0200, // 0020 CALL R7 1 + 0x041C0E03, // 0021 SUB R7 R7 R3 + 0x041C0E04, // 0022 SUB R7 R7 R4 + 0x041C0F0B, // 0023 SUB R7 R7 K11 + 0x7C140400, // 0024 CALL R5 2 + 0x8C14030C, // 0025 GETMET R5 R1 K12 + 0x001C0803, // 0026 ADD R7 R4 R3 + 0x54220005, // 0027 LDINT R8 6 + 0x001C0E08, // 0028 ADD R7 R7 R8 + 0xB8220E00, // 0029 GETNGBL R8 K7 + 0x88201108, // 002A GETMBR R8 R8 K8 + 0xB8260E00, // 002B GETNGBL R9 K7 + 0x88241309, // 002C GETMBR R9 R9 K9 + 0x30201009, // 002D OR R8 R8 R9 + 0x7C140600, // 002E CALL R5 3 + 0x8C14010D, // 002F GETMET R5 R0 K13 + 0xB81E0E00, // 0030 GETNGBL R7 K7 + 0x8C1C0F0E, // 0031 GETMET R7 R7 K14 + 0xB8260E00, // 0032 GETNGBL R9 K7 + 0x8824130F, // 0033 GETMBR R9 R9 K15 + 0x7C1C0400, // 0034 CALL R7 2 + 0xB8220E00, // 0035 GETNGBL R8 K7 + 0x88201108, // 0036 GETMBR R8 R8 K8 + 0xB8260E00, // 0037 GETNGBL R9 K7 + 0x88241309, // 0038 GETMBR R9 R9 K9 + 0x30201009, // 0039 OR R8 R8 R9 + 0x7C140600, // 003A CALL R5 3 + 0x80000000, // 003B RET 0 }) ) ); @@ -314,18 +110,12 @@ be_local_closure(lv_clock_icon_before_del, /* name */ /******************************************************************** ** Solidified class: lv_clock_icon ********************************************************************/ -extern const bclass be_class_lv_label; +extern const bclass be_class_lv_clock; be_local_class(lv_clock_icon, - 3, - &be_class_lv_label, - be_nested_map(7, + 0, + &be_class_lv_clock, + be_nested_map(1, ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key(sec, -1), be_const_var(2) }, - { be_const_key(hour, -1), be_const_var(0) }, - { be_const_key(before_del, 6), be_const_closure(lv_clock_icon_before_del_closure) }, - { be_const_key(every_second, -1), be_const_closure(lv_clock_icon_every_second_closure) }, - { be_const_key(minute, -1), be_const_var(1) }, - { be_const_key(set_time, 2), be_const_closure(lv_clock_icon_set_time_closure) }, { be_const_key(init, -1), be_const_closure(lv_clock_icon_init_closure) }, })), be_str_literal("lv_clock_icon") diff --git a/lib/libesp32/berry_tasmota/src/be_lvgl_clock_lib.c b/lib/libesp32/berry_tasmota/src/be_lvgl_clock_lib.c new file mode 100644 index 000000000..2c183b0f0 --- /dev/null +++ b/lib/libesp32/berry_tasmota/src/be_lvgl_clock_lib.c @@ -0,0 +1,276 @@ +/******************************************************************** + * Tasmota LVGL lv_signal_bars widget + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +/******************************************************************** +** Solidified function: set_time +********************************************************************/ +be_local_closure(lv_clock_set_time, /* name */ + be_nested_proto( + 11, /* nstack */ + 4, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[10]) { /* constants */ + /* K0 */ be_nested_str(string), + /* K1 */ be_nested_str(hour), + /* K2 */ be_nested_str(minute), + /* K3 */ be_nested_str(sec), + /* K4 */ be_nested_str(format), + /* K5 */ be_nested_str(_X2502d_X25s_X2502d), + /* K6 */ be_const_int(2), + /* K7 */ be_nested_str(_X3A), + /* K8 */ be_nested_str(_X20), + /* K9 */ be_nested_str(set_text), + }), + &be_const_str_set_time, + &be_const_str_solidified, + ( &(const binstruction[27]) { /* code */ + 0xA4120000, // 0000 IMPORT R4 K0 + 0x88140101, // 0001 GETMBR R5 R0 K1 + 0x20140205, // 0002 NE R5 R1 R5 + 0x74160005, // 0003 JMPT R5 #000A + 0x88140102, // 0004 GETMBR R5 R0 K2 + 0x20140405, // 0005 NE R5 R2 R5 + 0x74160002, // 0006 JMPT R5 #000A + 0x88140103, // 0007 GETMBR R5 R0 K3 + 0x20140605, // 0008 NE R5 R3 R5 + 0x7816000F, // 0009 JMPF R5 #001A + 0x8C140904, // 000A GETMET R5 R4 K4 + 0x581C0005, // 000B LDCONST R7 K5 + 0x5C200200, // 000C MOVE R8 R1 + 0x10240706, // 000D MOD R9 R3 K6 + 0x78260001, // 000E JMPF R9 #0011 + 0x58240007, // 000F LDCONST R9 K7 + 0x70020000, // 0010 JMP #0012 + 0x58240008, // 0011 LDCONST R9 K8 + 0x5C280400, // 0012 MOVE R10 R2 + 0x7C140A00, // 0013 CALL R5 5 + 0x90020201, // 0014 SETMBR R0 K1 R1 + 0x90020402, // 0015 SETMBR R0 K2 R2 + 0x90020603, // 0016 SETMBR R0 K3 R3 + 0x8C180109, // 0017 GETMET R6 R0 K9 + 0x5C200A00, // 0018 MOVE R8 R5 + 0x7C180400, // 0019 CALL R6 2 + 0x80000000, // 001A RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: every_second +********************************************************************/ +be_local_closure(lv_clock_every_second, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 9]) { /* constants */ + /* K0 */ be_nested_str(tasmota), + /* K1 */ be_nested_str(time_dump), + /* K2 */ be_nested_str(rtc), + /* K3 */ be_nested_str(local), + /* K4 */ be_nested_str(year), + /* K5 */ be_nested_str(set_time), + /* K6 */ be_nested_str(hour), + /* K7 */ be_nested_str(min), + /* K8 */ be_nested_str(sec), + }), + &be_const_str_every_second, + &be_const_str_solidified, + ( &(const binstruction[17]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0xB80E0000, // 0002 GETNGBL R3 K0 + 0x8C0C0702, // 0003 GETMET R3 R3 K2 + 0x7C0C0200, // 0004 CALL R3 1 + 0x940C0703, // 0005 GETIDX R3 R3 K3 + 0x7C040400, // 0006 CALL R1 2 + 0x94080304, // 0007 GETIDX R2 R1 K4 + 0x540E07B1, // 0008 LDINT R3 1970 + 0x20080403, // 0009 NE R2 R2 R3 + 0x780A0004, // 000A JMPF R2 #0010 + 0x8C080105, // 000B GETMET R2 R0 K5 + 0x94100306, // 000C GETIDX R4 R1 K6 + 0x94140307, // 000D GETIDX R5 R1 K7 + 0x94180308, // 000E GETIDX R6 R1 K8 + 0x7C080800, // 000F CALL R2 4 + 0x80000000, // 0010 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(lv_clock_init, /* name */ + be_nested_proto( + 8, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 1]) { + be_nested_proto( + 2, /* nstack */ + 0, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(before_del), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x68000000, // 0000 GETUPV R0 U0 + 0x8C000100, // 0001 GETMET R0 R0 K0 + 0x7C000200, // 0002 CALL R0 1 + 0x80040000, // 0003 RET 1 R0 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[13]) { /* constants */ + /* K0 */ be_nested_str(init), + /* K1 */ be_nested_str(lv), + /* K2 */ be_nested_str(seg7_font), + /* K3 */ be_nested_str(set_style_text_font), + /* K4 */ be_nested_str(PART_MAIN), + /* K5 */ be_nested_str(STATE_DEFAULT), + /* K6 */ be_nested_str(set_text), + /* K7 */ be_nested_str(_X2D_X2D_X3A_X2D_X2D), + /* K8 */ be_nested_str(add_event_cb), + /* K9 */ be_nested_str(EVENT_DELETE), + /* K10 */ be_const_int(0), + /* K11 */ be_nested_str(tasmota), + /* K12 */ be_nested_str(add_driver), + }), + &be_const_str_init, + &be_const_str_solidified, + ( &(const binstruction[36]) { /* code */ + 0x60080003, // 0000 GETGBL R2 G3 + 0x5C0C0000, // 0001 MOVE R3 R0 + 0x7C080200, // 0002 CALL R2 1 + 0x8C080500, // 0003 GETMET R2 R2 K0 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0xB80A0200, // 0006 GETNGBL R2 K1 + 0x8C080502, // 0007 GETMET R2 R2 K2 + 0x5412000F, // 0008 LDINT R4 16 + 0x7C080400, // 0009 CALL R2 2 + 0x4C0C0000, // 000A LDNIL R3 + 0x200C0403, // 000B NE R3 R2 R3 + 0x780E0007, // 000C JMPF R3 #0015 + 0x8C0C0103, // 000D GETMET R3 R0 K3 + 0x5C140400, // 000E MOVE R5 R2 + 0xB81A0200, // 000F GETNGBL R6 K1 + 0x88180D04, // 0010 GETMBR R6 R6 K4 + 0xB81E0200, // 0011 GETNGBL R7 K1 + 0x881C0F05, // 0012 GETMBR R7 R7 K5 + 0x30180C07, // 0013 OR R6 R6 R7 + 0x7C0C0600, // 0014 CALL R3 3 + 0x8C0C0106, // 0015 GETMET R3 R0 K6 + 0x58140007, // 0016 LDCONST R5 K7 + 0x7C0C0400, // 0017 CALL R3 2 + 0x8C0C0108, // 0018 GETMET R3 R0 K8 + 0x84140000, // 0019 CLOSURE R5 P0 + 0xB81A0200, // 001A GETNGBL R6 K1 + 0x88180D09, // 001B GETMBR R6 R6 K9 + 0x581C000A, // 001C LDCONST R7 K10 + 0x7C0C0800, // 001D CALL R3 4 + 0xB80E1600, // 001E GETNGBL R3 K11 + 0x8C0C070C, // 001F GETMET R3 R3 K12 + 0x5C140000, // 0020 MOVE R5 R0 + 0x7C0C0400, // 0021 CALL R3 2 + 0xA0000000, // 0022 CLOSE R0 + 0x80000000, // 0023 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: before_del +********************************************************************/ +be_local_closure(lv_clock_before_del, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str(tasmota), + /* K1 */ be_nested_str(remove_driver), + }), + &be_const_str_before_del, + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x80000000, // 0004 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: lv_clock +********************************************************************/ +extern const bclass be_class_lv_label; +be_local_class(lv_clock, + 3, + &be_class_lv_label, + be_nested_map(7, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key(sec, -1), be_const_var(2) }, + { be_const_key(hour, -1), be_const_var(0) }, + { be_const_key(before_del, 6), be_const_closure(lv_clock_before_del_closure) }, + { be_const_key(every_second, -1), be_const_closure(lv_clock_every_second_closure) }, + { be_const_key(minute, -1), be_const_var(1) }, + { be_const_key(set_time, 2), be_const_closure(lv_clock_set_time_closure) }, + { be_const_key(init, -1), be_const_closure(lv_clock_init_closure) }, + })), + be_str_literal("lv_clock") +); +/*******************************************************************/ + +void be_load_lv_clock_class(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_clock); + be_setglobal(vm, "lv_clock"); + be_pop(vm, 1); +} + +#endif // USE_LVGL \ No newline at end of file diff --git a/lib/libesp32/berry_tasmota/src/embedded/lv_clock_icon.be b/lib/libesp32/berry_tasmota/src/embedded/lv_clock_icon.be index 497c0b805..0f66865ae 100644 --- a/lib/libesp32/berry_tasmota/src/embedded/lv_clock_icon.be +++ b/lib/libesp32/berry_tasmota/src/embedded/lv_clock_icon.be @@ -2,7 +2,7 @@ - --# -class lv_clock_icon: lv.label +class lv_clock: lv.label var hour, minute, sec def init(parent) @@ -10,23 +10,9 @@ class lv_clock_icon: lv.label var f_s7_16 = lv.seg7_font(16) if f_s7_16 != nil self.set_style_text_font(f_s7_16, lv.PART_MAIN | lv.STATE_DEFAULT) end - if parent != nil - var parent_height = parent.get_height() - - self.set_text("--:--") - self.refr_size() - var w = self.get_width() - self.set_y((parent.get_height() - self.get_height()) / 2) # center vertically - - var pad_right = parent.get_style_pad_right(lv.PART_MAIN | lv.STATE_DEFAULT) - self.set_x(parent.get_width() - w - pad_right - 3) - parent.set_style_pad_right(pad_right + w + 6, lv.PART_MAIN | lv.STATE_DEFAULT) - - self.set_style_bg_color(lv.color(lv.COLOR_BLACK), lv.PART_MAIN | lv.STATE_DEFAULT) - end + self.set_text("--:--") self.add_event_cb(/->self.before_del(), lv.EVENT_DELETE, 0) # register `before_del` to be called when object is deleted - tasmota.add_driver(self) end @@ -52,4 +38,26 @@ class lv_clock_icon: lv.label def before_del() tasmota.remove_driver(self) end +end + +class lv_clock_icon: lv_clock + + def init(parent) + super(self).init(parent) + + if parent != nil + var parent_height = parent.get_height() + + self.refr_size() + var w = self.get_width() + self.set_y((parent.get_height() - self.get_height()) / 2) # center vertically + + var pad_right = parent.get_style_pad_right(lv.PART_MAIN | lv.STATE_DEFAULT) + self.set_x(parent.get_width() - w - pad_right - 3) + parent.set_style_pad_right(pad_right + w + 6, lv.PART_MAIN | lv.STATE_DEFAULT) + + self.set_style_bg_color(lv.color(lv.COLOR_BLACK), lv.PART_MAIN | lv.STATE_DEFAULT) + end + end + end \ No newline at end of file diff --git a/lib/libesp32/berry_tasmota/src/embedded/lv_tasmota.be b/lib/libesp32/berry_tasmota/src/embedded/lv_tasmota.be index 61fd2a3b1..d0e90855c 100644 --- a/lib/libesp32/berry_tasmota/src/embedded/lv_tasmota.be +++ b/lib/libesp32/berry_tasmota/src/embedded/lv_tasmota.be @@ -25,6 +25,7 @@ def init(lv_tasmota) lv.screenshot = lv_tasmota.screenshot # add widgets + lv.clock = lv_clock lv.clock_icon = lv_clock_icon lv.signal_arcs = lv_signal_arcs lv.signal_bars = lv_signal_bars From 3ed44ce0dcba0a6ac213cb2d0fc25baf3c66f6d5 Mon Sep 17 00:00:00 2001 From: Staars Date: Sun, 27 Mar 2022 17:54:18 +0200 Subject: [PATCH 295/355] use special_malloc for external libs --- .../ESP32-HomeKit/src/hap_platform_memory.c | 39 ---------------- .../nimble/esp_port/port/src/esp_nimble_mem.c | 44 ------------------- 2 files changed, 83 deletions(-) delete mode 100644 lib/libesp32_div/ESP32-HomeKit/src/hap_platform_memory.c delete mode 100644 lib/libesp32_div/NimBLE-Arduino/src/nimble/esp_port/port/src/esp_nimble_mem.c diff --git a/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_memory.c b/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_memory.c deleted file mode 100644 index 361cd3e5f..000000000 --- a/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_memory.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * ESPRESSIF MIT License - * - * Copyright (c) 2019 - * - * Permission is hereby granted for use on ESPRESSIF SYSTEMS products only, in which case, - * it is free of charge, to any person obtaining a copy of this software and associated - * documentation files (the "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ -#include - -void * hap_platform_memory_malloc(size_t size) -{ - return malloc(size); -} - -void * hap_platform_memory_calloc(size_t count, size_t size) -{ - return calloc(count, size); -} - -void hap_platform_memory_free(void *ptr) -{ - free(ptr); -} diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/esp_port/port/src/esp_nimble_mem.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/esp_port/port/src/esp_nimble_mem.c deleted file mode 100644 index 7e1899db6..000000000 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/esp_port/port/src/esp_nimble_mem.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#ifdef ESP_PLATFORM - -#include "esp_attr.h" -#include "esp_heap_caps.h" -#include "nimconfig.h" -#include "../include/esp_nimble_mem.h" - -IRAM_ATTR void *nimble_platform_mem_malloc(size_t size) -{ -#ifdef CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL - return heap_caps_malloc(size, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT); -#elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL - return heap_caps_malloc(size, MALLOC_CAP_SPIRAM|MALLOC_CAP_8BIT); -#elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_IRAM_8BIT - return heap_caps_malloc_prefer(size, 2, MALLOC_CAP_INTERNAL|MALLOC_CAP_IRAM_8BIT, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT); -#else - return malloc(size); -#endif -} - -IRAM_ATTR void *nimble_platform_mem_calloc(size_t n, size_t size) -{ -#ifdef CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL - return heap_caps_calloc(n, size, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT); -#elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL - return heap_caps_calloc(n, size, MALLOC_CAP_SPIRAM|MALLOC_CAP_8BIT); -#elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_IRAM_8BIT - return heap_caps_calloc_prefer(n, size, 2, MALLOC_CAP_INTERNAL|MALLOC_CAP_IRAM_8BIT, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT); -#else - return calloc(n, size); -#endif -} - -IRAM_ATTR void nimble_platform_mem_free(void *ptr) -{ - heap_caps_free(ptr); -} -#endif From b8fd07346750a1d6a6edd694e96a6e81ea29c182 Mon Sep 17 00:00:00 2001 From: Staars Date: Sun, 27 Mar 2022 17:57:35 +0200 Subject: [PATCH 296/355] rename .c to .cpp --- .../ESP32-HomeKit/src/hap_platform_memory.cpp | 47 ++++++++++++++++ .../esp_port/port/src/esp_nimble_mem.cpp | 53 +++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 lib/libesp32_div/ESP32-HomeKit/src/hap_platform_memory.cpp create mode 100644 lib/libesp32_div/NimBLE-Arduino/src/nimble/esp_port/port/src/esp_nimble_mem.cpp diff --git a/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_memory.cpp b/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_memory.cpp new file mode 100644 index 000000000..ad63fc0fc --- /dev/null +++ b/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_memory.cpp @@ -0,0 +1,47 @@ +/* + * ESPRESSIF MIT License + * + * Copyright (c) 2019 + * + * Permission is hereby granted for use on ESPRESSIF SYSTEMS products only, in which case, + * it is free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +#include + +//Tasmota Patch +extern void *special_malloc(uint32_t size); +extern void *special_calloc(size_t num, size_t size); + +extern "C" { +void * hap_platform_memory_malloc(size_t size) +{ + return special_malloc((uint32_t)size); + // return malloc(size); +} + +void * hap_platform_memory_calloc(size_t count, size_t size) +{ + return special_calloc(count,size); + // return calloc(count, size); +} + +void hap_platform_memory_free(void *ptr) +{ + free(ptr); +} +} //extern "C" \ No newline at end of file diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/esp_port/port/src/esp_nimble_mem.cpp b/lib/libesp32_div/NimBLE-Arduino/src/nimble/esp_port/port/src/esp_nimble_mem.cpp new file mode 100644 index 000000000..407091c7f --- /dev/null +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/esp_port/port/src/esp_nimble_mem.cpp @@ -0,0 +1,53 @@ +/* + * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifdef ESP_PLATFORM + +#include "esp_attr.h" +#include "esp_heap_caps.h" +#include "nimconfig.h" +#include "../include/esp_nimble_mem.h" + +//Tasmota Patch +extern void *special_malloc(uint32_t size); +extern void *special_calloc(size_t num, size_t size); + + +extern "C" { +IRAM_ATTR void *nimble_platform_mem_malloc(size_t size) +{ + return special_malloc((uint32_t)size); +// #ifdef CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL +// return heap_caps_malloc(size, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT); +// #elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL +// return heap_caps_malloc(size, MALLOC_CAP_SPIRAM|MALLOC_CAP_8BIT); +// #elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_IRAM_8BIT +// return heap_caps_malloc_prefer(size, 2, MALLOC_CAP_INTERNAL|MALLOC_CAP_IRAM_8BIT, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT); +// #else +// return malloc(size); +// #endif +} + +IRAM_ATTR void *nimble_platform_mem_calloc(size_t n, size_t size) +{ + return special_calloc(n,size); +// #ifdef CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL +// return heap_caps_calloc(n, size, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT); +// #elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL +// return heap_caps_calloc(n, size, MALLOC_CAP_SPIRAM|MALLOC_CAP_8BIT); +// #elif CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_IRAM_8BIT +// return heap_caps_calloc_prefer(n, size, 2, MALLOC_CAP_INTERNAL|MALLOC_CAP_IRAM_8BIT, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT); +// #else +// return calloc(n, size); +// #endif +} + +IRAM_ATTR void nimble_platform_mem_free(void *ptr) +{ + heap_caps_free(ptr); +} +} //extern "C" +#endif From e8ff76bf1254050789864c4b504bdc1106063964 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Sun, 27 Mar 2022 18:12:16 +0200 Subject: [PATCH 297/355] Tasmota ESP32 core 2.0.3 --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 599efd422..f799af042 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -7,7 +7,7 @@ - [ ] Only relevant files were touched - [ ] Only one feature/fix was added per PR and the code change compiles without warnings - [ ] The code change is tested and works with Tasmota core ESP8266 V.2.7.4.9 - - [ ] The code change is tested and works with Tasmota core ESP32 V.2.0.2.3 + - [ ] The code change is tested and works with Tasmota core ESP32 V.2.0.3 - [ ] I accept the [CLA](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md#contributor-license-agreement-cla). _NOTE: The code change must pass CI tests. **Your PR cannot be merged unless tests pass**_ From dbdf14ec807803c157945dc224a81b909c861af5 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Mon, 28 Mar 2022 18:05:51 +0200 Subject: [PATCH 298/355] Update Italian language --- tasmota/language/it_IT.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 83224973a..65f5b3749 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -28,7 +28,7 @@ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE. * Use online command Prefix to translate cmnd, stat and tele. * - * Updated until v10.1.0.6 - Last update 12.03.2022 + * Updated until v10.1.0.6 - Last update 28.03.2022 \*********************************************************************/ #define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) @@ -77,7 +77,7 @@ #define D_COUNTER "Contatore" #define D_CT_POWER "Alimentazione CT" #define D_CURRENT "Corrente" // As in Voltage and Current -#define D_CURRENT_NEUTRAL "Corrente Neutrale" +#define D_CURRENT_NEUTRAL "Corrente neutrale" #define D_DATA "Dati" #define D_DARKLIGHT "Scuro" #define D_DEBUG "Debug" From 33120a85f451c508854d24473b66db0415f65aba Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Mon, 28 Mar 2022 22:29:06 +0200 Subject: [PATCH 299/355] Berry add `tasmota.publish_rule` (#15243) * Berry add `tasmota.publish_rule` * Fix return value --- lib/libesp32/berry/generate/be_const_strtab.h | 1 + .../berry/generate/be_const_strtab_def.h | 5 +- .../generate/be_fixed_be_class_tasmota.h | 163 +++++++++--------- .../berry_tasmota/src/be_tasmota_lib.c | 2 + tasmota/xdrv_52_3_berry_tasmota.ino | 15 ++ 5 files changed, 103 insertions(+), 83 deletions(-) diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h index 11cdba75a..04d90dc30 100644 --- a/lib/libesp32/berry/generate/be_const_strtab.h +++ b/lib/libesp32/berry/generate/be_const_strtab.h @@ -674,6 +674,7 @@ extern const bcstring be_const_str_ptr; extern const bcstring be_const_str_public_key; extern const bcstring be_const_str_publish; extern const bcstring be_const_str_publish_result; +extern const bcstring be_const_str_publish_rule; extern const bcstring be_const_str_push; extern const bcstring be_const_str_push_path; extern const bcstring be_const_str_quality; diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h index 2fef6b599..efe146842 100644 --- a/lib/libesp32/berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/berry/generate/be_const_strtab_def.h @@ -644,7 +644,7 @@ be_define_const_str(pc, "pc", 1313756516u, 0, 2, NULL); be_define_const_str(pc_abs, "pc_abs", 920256495u, 0, 6, &be_const_str_signal_arcs); be_define_const_str(pc_rel, "pc_rel", 991921176u, 0, 6, &be_const_str_string); be_define_const_str(pct, "pct", 1431300144u, 0, 3, &be_const_str_remove_driver); -be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, &be_const_str_splash_init); +be_define_const_str(percentage, "percentage", 2538831285u, 0, 10, &be_const_str_publish_rule); be_define_const_str(persist, "persist", 3917083779u, 0, 7, NULL); be_define_const_str(persist_X2E_p_X20is_X20not_X20a_X20map, "persist._p is not a map", 1176528732u, 0, 23, NULL); be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_range); @@ -666,6 +666,7 @@ be_define_const_str(ptr, "ptr", 1433816073u, 0, 3, NULL); be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_refr_size); be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_widget_width_def); be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, NULL); +be_define_const_str(publish_rule, "publish_rule", 1829459523u, 0, 12, &be_const_str_splash_init); be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_remote_port); be_define_const_str(push_path, "push_path", 1155254157u, 0, 9, NULL); be_define_const_str(quality, "quality", 2597670950u, 0, 7, &be_const_str_wifi_arcs_icon); @@ -1425,6 +1426,6 @@ static const bstring* const m_string_table[] = { static const struct bconststrtab m_const_string_table = { .size = 466, - .count = 955, + .count = 956, .table = m_string_table }; diff --git a/lib/libesp32/berry/generate/be_fixed_be_class_tasmota.h b/lib/libesp32/berry/generate/be_fixed_be_class_tasmota.h index 42087a775..e3f76732d 100644 --- a/lib/libesp32/berry/generate/be_fixed_be_class_tasmota.h +++ b/lib/libesp32/berry/generate/be_fixed_be_class_tasmota.h @@ -2,96 +2,97 @@ static be_define_const_map_slots(be_class_tasmota_map) { { be_const_key(gc, -1), be_const_closure(Tasmota_gc_closure) }, - { be_const_key(resp_cmnd_done, -1), be_const_func(l_respCmndDone) }, - { be_const_key(web_send, 33), be_const_func(l_webSend) }, - { be_const_key(add_driver, 21), be_const_closure(Tasmota_add_driver_closure) }, - { be_const_key(wd, 12), be_const_var(0) }, - { be_const_key(resp_cmnd_error, 25), be_const_func(l_respCmndError) }, - { be_const_key(publish, 73), be_const_func(l_publish) }, - { be_const_key(gen_cb, 0), be_const_closure(Tasmota_gen_cb_closure) }, - { be_const_key(_settings_ptr, -1), be_const_comptr(&Settings) }, - { be_const_key(try_rule, -1), be_const_closure(Tasmota_try_rule_closure) }, - { be_const_key(resp_cmnd_str, -1), be_const_func(l_respCmndStr) }, - { be_const_key(time_dump, -1), be_const_func(l_time_dump) }, - { be_const_key(global, 16), be_const_var(1) }, - { be_const_key(millis, 35), be_const_func(l_millis) }, - { be_const_key(cmd_res, -1), be_const_var(2) }, - { be_const_key(get_power, -1), be_const_func(l_getpower) }, - { be_const_key(set_light, 40), be_const_closure(Tasmota_set_light_closure) }, - { be_const_key(set_power, -1), be_const_func(l_setpower) }, - { be_const_key(fast_loop, -1), be_const_closure(Tasmota_fast_loop_closure) }, - { be_const_key(get_option, -1), be_const_func(l_getoption) }, - { be_const_key(add_cron, -1), be_const_closure(Tasmota_add_cron_closure) }, - { be_const_key(_settings_def, -1), be_const_comptr(&be_tasmota_settings_struct) }, - { be_const_key(init, 41), be_const_closure(Tasmota_init_closure) }, - { be_const_key(add_rule, 19), be_const_closure(Tasmota_add_rule_closure) }, - { be_const_key(resp_cmnd_failed, -1), be_const_func(l_respCmndFailed) }, - { be_const_key(exec_tele, -1), be_const_closure(Tasmota_exec_tele_closure) }, - { be_const_key(add_fast_loop, -1), be_const_closure(Tasmota_add_fast_loop_closure) }, - { be_const_key(_global_def, -1), be_const_comptr(&be_tasmota_global_struct) }, - { be_const_key(yield, 71), be_const_func(l_yield) }, - { be_const_key(next_cron, -1), be_const_closure(Tasmota_next_cron_closure) }, - { be_const_key(web_send_decimal, -1), be_const_func(l_webSendDecimal) }, - { be_const_key(time_reached, 11), be_const_func(l_timereached) }, - { be_const_key(delay, -1), be_const_func(l_delay) }, - { be_const_key(rtc, -1), be_const_func(l_rtc) }, - { be_const_key(wire2, -1), be_const_var(3) }, - { be_const_key(add_cmd, 82), be_const_closure(Tasmota_add_cmd_closure) }, - { be_const_key(exec_rules, 14), be_const_closure(Tasmota_exec_rules_closure) }, - { be_const_key(set_timer, -1), be_const_closure(Tasmota_set_timer_closure) }, - { be_const_key(wire_scan, -1), be_const_closure(Tasmota_wire_scan_closure) }, - { be_const_key(run_cron, 37), be_const_closure(Tasmota_run_cron_closure) }, - { be_const_key(get_light, -1), be_const_closure(Tasmota_get_light_closure) }, - { be_const_key(cmd, -1), be_const_closure(Tasmota_cmd_closure) }, - { be_const_key(remove_cmd, -1), be_const_closure(Tasmota_remove_cmd_closure) }, - { be_const_key(hs2rgb, -1), be_const_closure(Tasmota_hs2rgb_closure) }, - { be_const_key(_fl, -1), be_const_var(4) }, + { be_const_key(gen_cb, -1), be_const_closure(Tasmota_gen_cb_closure) }, + { be_const_key(yield, 20), be_const_func(l_yield) }, + { be_const_key(log, 21), be_const_func(l_logInfo) }, + { be_const_key(find_op, -1), be_const_closure(Tasmota_find_op_closure) }, { be_const_key(i2c_enabled, -1), be_const_func(l_i2cenabled) }, - { be_const_key(get_switches, -1), be_const_func(l_getswitch) }, - { be_const_key(_debug_present, 39), be_const_var(5) }, - { be_const_key(run_deferred, 18), be_const_closure(Tasmota_run_deferred_closure) }, - { be_const_key(load, -1), be_const_closure(Tasmota_load_closure) }, - { be_const_key(get_switch, 75), be_const_func(l_getswitch) }, - { be_const_key(chars_in_string, -1), be_const_closure(Tasmota_chars_in_string_closure) }, - { be_const_key(resp_cmnd, 51), be_const_func(l_respCmnd) }, - { be_const_key(event, 22), be_const_closure(Tasmota_event_closure) }, - { be_const_key(_ccmd, -1), be_const_var(6) }, - { be_const_key(_rules, 20), be_const_var(7) }, - { be_const_key(wire1, -1), be_const_var(8) }, - { be_const_key(remove_timer, 5), be_const_closure(Tasmota_remove_timer_closure) }, - { be_const_key(eth, -1), be_const_func(l_eth) }, - { be_const_key(arch, 43), be_const_func(l_arch) }, - { be_const_key(remove_driver, -1), be_const_closure(Tasmota_remove_driver_closure) }, { be_const_key(response_append, -1), be_const_func(l_respAppend) }, - { be_const_key(wifi, -1), be_const_func(l_wifi) }, - { be_const_key(strptime, 56), be_const_func(l_strptime) }, - { be_const_key(find_op, 78), be_const_closure(Tasmota_find_op_closure) }, - { be_const_key(log, -1), be_const_func(l_logInfo) }, + { be_const_key(web_send, -1), be_const_func(l_webSend) }, + { be_const_key(hs2rgb, -1), be_const_closure(Tasmota_hs2rgb_closure) }, + { be_const_key(resolvecmnd, 1), be_const_func(l_resolveCmnd) }, + { be_const_key(load, -1), be_const_closure(Tasmota_load_closure) }, + { be_const_key(_fl, -1), be_const_var(0) }, + { be_const_key(get_power, -1), be_const_func(l_getpower) }, + { be_const_key(add_rule, 32), be_const_closure(Tasmota_add_rule_closure) }, + { be_const_key(eth, 30), be_const_func(l_eth) }, + { be_const_key(time_dump, -1), be_const_func(l_time_dump) }, + { be_const_key(exec_rules, -1), be_const_closure(Tasmota_exec_rules_closure) }, + { be_const_key(chars_in_string, -1), be_const_closure(Tasmota_chars_in_string_closure) }, + { be_const_key(cmd, -1), be_const_closure(Tasmota_cmd_closure) }, + { be_const_key(_rules, -1), be_const_var(1) }, + { be_const_key(exec_tele, -1), be_const_closure(Tasmota_exec_tele_closure) }, + { be_const_key(get_option, -1), be_const_func(l_getoption) }, + { be_const_key(get_switches, 46), be_const_func(l_getswitch) }, + { be_const_key(global, -1), be_const_var(2) }, + { be_const_key(arch, -1), be_const_func(l_arch) }, + { be_const_key(wire1, -1), be_const_var(3) }, + { be_const_key(scale_uint, 15), be_const_func(l_scaleuint) }, + { be_const_key(millis, 8), be_const_func(l_millis) }, + { be_const_key(resp_cmnd_error, 64), be_const_func(l_respCmndError) }, + { be_const_key(publish, -1), be_const_func(l_publish) }, + { be_const_key(_settings_def, 75), be_const_comptr(&be_tasmota_settings_struct) }, + { be_const_key(init, -1), be_const_closure(Tasmota_init_closure) }, + { be_const_key(_settings_ptr, -1), be_const_comptr(&Settings) }, + { be_const_key(publish_rule, 57), be_const_func(l_publish_rule) }, + { be_const_key(remove_driver, 49), be_const_closure(Tasmota_remove_driver_closure) }, + { be_const_key(run_deferred, 25), be_const_closure(Tasmota_run_deferred_closure) }, + { be_const_key(read_sensors, 82), be_const_func(l_read_sensors) }, + { be_const_key(_timers, -1), be_const_var(4) }, + { be_const_key(set_light, -1), be_const_closure(Tasmota_set_light_closure) }, + { be_const_key(memory, 31), be_const_func(l_memory) }, + { be_const_key(wire_scan, -1), be_const_closure(Tasmota_wire_scan_closure) }, + { be_const_key(get_light, -1), be_const_closure(Tasmota_get_light_closure) }, + { be_const_key(_cmd, 76), be_const_func(l_cmd) }, + { be_const_key(exec_cmd, -1), be_const_closure(Tasmota_exec_cmd_closure) }, { be_const_key(find_key_i, -1), be_const_closure(Tasmota_find_key_i_closure) }, - { be_const_key(_global_addr, -1), be_const_comptr(&TasmotaGlobal) }, - { be_const_key(save, -1), be_const_func(l_save) }, - { be_const_key(exec_cmd, 63), be_const_closure(Tasmota_exec_cmd_closure) }, - { be_const_key(remove_rule, -1), be_const_closure(Tasmota_remove_rule_closure) }, + { be_const_key(wifi, -1), be_const_func(l_wifi) }, + { be_const_key(rtc, -1), be_const_func(l_rtc) }, { be_const_key(time_str, -1), be_const_closure(Tasmota_time_str_closure) }, - { be_const_key(settings, -1), be_const_var(9) }, - { be_const_key(publish_result, -1), be_const_func(l_publish_result) }, + { be_const_key(resp_cmnd, 17), be_const_func(l_respCmnd) }, + { be_const_key(add_cmd, -1), be_const_closure(Tasmota_add_cmd_closure) }, + { be_const_key(get_switch, -1), be_const_func(l_getswitch) }, + { be_const_key(save, -1), be_const_func(l_save) }, + { be_const_key(wire2, -1), be_const_var(5) }, + { be_const_key(run_cron, 0), be_const_closure(Tasmota_run_cron_closure) }, + { be_const_key(delay, -1), be_const_func(l_delay) }, + { be_const_key(set_timer, -1), be_const_closure(Tasmota_set_timer_closure) }, + { be_const_key(time_reached, -1), be_const_func(l_timereached) }, + { be_const_key(set_power, -1), be_const_func(l_setpower) }, + { be_const_key(_global_addr, -1), be_const_comptr(&TasmotaGlobal) }, + { be_const_key(_ccmd, -1), be_const_var(6) }, + { be_const_key(next_cron, 16), be_const_closure(Tasmota_next_cron_closure) }, + { be_const_key(cmd_res, -1), be_const_var(7) }, + { be_const_key(strftime, 80), be_const_func(l_strftime) }, + { be_const_key(event, -1), be_const_closure(Tasmota_event_closure) }, + { be_const_key(settings, -1), be_const_var(8) }, + { be_const_key(strptime, -1), be_const_func(l_strptime) }, + { be_const_key(resp_cmnd_done, 51), be_const_func(l_respCmndDone) }, + { be_const_key(remove_cmd, -1), be_const_closure(Tasmota_remove_cmd_closure) }, + { be_const_key(try_rule, -1), be_const_closure(Tasmota_try_rule_closure) }, + { be_const_key(resp_cmnd_str, 59), be_const_func(l_respCmndStr) }, + { be_const_key(_drivers, -1), be_const_var(9) }, + { be_const_key(_crons, 56), be_const_var(10) }, + { be_const_key(check_not_method, 62), be_const_closure(Tasmota_check_not_method_closure) }, + { be_const_key(remove_cron, 65), be_const_closure(Tasmota_remove_cron_closure) }, { be_const_key(get_free_heap, -1), be_const_func(l_getFreeHeap) }, - { be_const_key(_timers, -1), be_const_var(10) }, - { be_const_key(scale_uint, 10), be_const_func(l_scaleuint) }, - { be_const_key(strftime, 9), be_const_func(l_strftime) }, - { be_const_key(_cmd, -1), be_const_func(l_cmd) }, - { be_const_key(check_not_method, -1), be_const_closure(Tasmota_check_not_method_closure) }, - { be_const_key(remove_cron, -1), be_const_closure(Tasmota_remove_cron_closure) }, - { be_const_key(resolvecmnd, 54), be_const_func(l_resolveCmnd) }, - { be_const_key(_drivers, -1), be_const_var(11) }, - { be_const_key(_crons, 65), be_const_var(12) }, - { be_const_key(memory, -1), be_const_func(l_memory) }, - { be_const_key(read_sensors, 74), be_const_func(l_read_sensors) }, + { be_const_key(remove_timer, -1), be_const_closure(Tasmota_remove_timer_closure) }, + { be_const_key(resp_cmnd_failed, -1), be_const_func(l_respCmndFailed) }, + { be_const_key(add_driver, -1), be_const_closure(Tasmota_add_driver_closure) }, + { be_const_key(_debug_present, -1), be_const_var(11) }, + { be_const_key(wd, 14), be_const_var(12) }, + { be_const_key(_global_def, -1), be_const_comptr(&be_tasmota_global_struct) }, + { be_const_key(web_send_decimal, -1), be_const_func(l_webSendDecimal) }, + { be_const_key(publish_result, -1), be_const_func(l_publish_result) }, + { be_const_key(fast_loop, -1), be_const_closure(Tasmota_fast_loop_closure) }, + { be_const_key(add_cron, -1), be_const_closure(Tasmota_add_cron_closure) }, + { be_const_key(add_fast_loop, -1), be_const_closure(Tasmota_add_fast_loop_closure) }, + { be_const_key(remove_rule, -1), be_const_closure(Tasmota_remove_rule_closure) }, }; static be_define_const_map( be_class_tasmota_map, - 86 + 87 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c b/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c index daf62f34a..0e496d7f4 100644 --- a/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c +++ b/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c @@ -15,6 +15,7 @@ extern int l_getFreeHeap(bvm *vm); extern int l_arch(bvm *vm); extern int l_publish(bvm *vm); extern int l_publish_result(bvm *vm); +extern int l_publish_rule(bvm *vm); extern int l_cmd(bvm *vm); extern int l_getoption(bvm *vm); extern int l_millis(bvm *vm); @@ -2564,6 +2565,7 @@ class be_class_tasmota (scope: global, name: Tasmota) { arch, func(l_arch) publish, func(l_publish) publish_result, func(l_publish_result) + publish_rule, func(l_publish_rule) _cmd, func(l_cmd) get_option, func(l_getoption) millis, func(l_millis) diff --git a/tasmota/xdrv_52_3_berry_tasmota.ino b/tasmota/xdrv_52_3_berry_tasmota.ino index b04ca9ba4..9e306ca8f 100644 --- a/tasmota/xdrv_52_3_berry_tasmota.ino +++ b/tasmota/xdrv_52_3_berry_tasmota.ino @@ -84,6 +84,21 @@ extern "C" { be_raise(vm, kTypeError, nullptr); } + // Berry: `tasmota.publish_rulet(payload:string) -> bool`` + // + // Returns `true` if event was handled + int32_t l_publish_rule(struct bvm *vm); + int32_t l_publish_rule(struct bvm *vm) { + int32_t top = be_top(vm); // Get the number of arguments + if (top >= 2 && be_isstring(vm, 2)) { // 1 mandatory string argument + const char * payload = be_tostring(vm, 2); + bool handled = XdrvRulesProcess(0, payload); + be_pushbool(vm, handled); + be_return(vm); // Return + } + be_raise(vm, kTypeError, nullptr); + } + // Berry: `tasmota.cmd(command:string) -> string` // int32_t l_cmd(struct bvm *vm); From 4496f6f111de965b4bcf25ab4aa9a7dc484f16f4 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 28 Mar 2022 23:18:53 +0200 Subject: [PATCH 300/355] naming *.map file changes in Arduino Core 2.0.3. --- pio-tools/tasmotapiolib.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pio-tools/tasmotapiolib.py b/pio-tools/tasmotapiolib.py index 866be0336..7ee8fe9a3 100644 --- a/pio-tools/tasmotapiolib.py +++ b/pio-tools/tasmotapiolib.py @@ -79,7 +79,11 @@ def get_source_map_path(env) -> pathlib.Path: proj_dir = pathlib.Path(env["PROJECT_DIR"]) map_name = proj_dir.parts[-1] + ".map" fwmap_path = proj_build_dir / get_variant(env) / map_name + if fwmap_path.is_file(): + return fwmap_path + map_name = "firmware.map" + fwmap_path = proj_build_dir / get_variant(env) / map_name if fwmap_path.is_file(): return fwmap_path From 7e6514d1126d927b30146dcb13a8a3daece12e24 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Tue, 29 Mar 2022 18:27:31 +0200 Subject: [PATCH 301/355] core 2.0.3rc1 --- platformio_tasmota32.ini | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini index f412a472f..d8cbe887b 100644 --- a/platformio_tasmota32.ini +++ b/platformio_tasmota32.ini @@ -38,14 +38,14 @@ extra_scripts = pre:pio-tools/add_c_flags.py ${esp_defaults.extra_scripts} [core32] -platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3/platform-espressif32-2.0.3.zip -platform_packages = +platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3rc1/platform-espressif32-2.0.3.zip +platform_packages = build_unflags = ${esp32_defaults.build_unflags} build_flags = ${esp32_defaults.build_flags} [core32solo1] -platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3solo1.zip -platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/749/framework-arduinoespressif32-solo1-v4.4_dev-2509ea4227.tar.gz +platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3rc1/platform-espressif32-2.0.3solo1.zip +platform_packages = build_unflags = ${esp32_defaults.build_unflags} build_flags = ${esp32_defaults.build_flags} From d41a143446472207160172002878bf35f8ccd6c8 Mon Sep 17 00:00:00 2001 From: Benny Nestler Date: Wed, 30 Mar 2022 00:08:27 +0200 Subject: [PATCH 302/355] tuya send 6 command to send raw data to the tuya mcu --- tasmota/xdrv_16_tuyamcu.ino | 58 ++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index 2b3fccd8a..9913b739b 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -43,6 +43,7 @@ #define TUYA_LOW_POWER_CMD_WIFI_CONFIG 0x04 #define TUYA_LOW_POWER_CMD_STATE 0x05 +#define TUYA_TYPE_RAW 0x00 #define TUYA_TYPE_BOOL 0x01 #define TUYA_TYPE_VALUE 0x02 #define TUYA_TYPE_STRING 0x03 @@ -147,6 +148,9 @@ TuyaSend2 11,100 -> Sends integer (Type 2) data 100 to dpId 11 (Max data length TuyaSend2 11,0xAABBCCDD -> Sends 4 bytes (Type 2) data to dpId 11 (Max data length 4 bytes) TuyaSend3 11,ThisIsTheData -> Sends the supplied string (Type 3) to dpId 11 ( Max data length not-known) TuyaSend4 11,1 -> Sends enum (Type 4) data 1 to dpId 11 (Max data length 1 bytes) +TuyaSend5 11,ABCD -> Sends an HEX string (Type 3) data to dpId +TuyaSend6 11,ABCD -> Sends raw (Type 0) data to dpId + */ void CmndTuyaSend(void) { @@ -186,6 +190,8 @@ void CmndTuyaSend(void) { TuyaSendHexString(dpId, data); } else if (4 == XdrvMailbox.index) { TuyaSendEnum(dpId, strtoul(data, nullptr, 0)); + } else if (6 == XdrvMailbox.index) { + TuyaSendRaw(dpId, data); } } } @@ -501,6 +507,24 @@ void TuyaSendEnum(uint8_t id, uint32_t value) TuyaSendState(id, TUYA_TYPE_ENUM, (uint8_t*)(&value)); } +static uint16_t convertHexStringtoBytes (uint8_t * dest, char src[], uint16_t src_len){ + if (NULL == dest || NULL == src || 0 == src_len){ + return 0; + } + + char hexbyte[3]; + hexbyte[2] = 0; + uint16_t i; + + for (i = 0; i < src_len; i++) { + hexbyte[0] = src[2*i]; + hexbyte[1] = src[2*i+1]; + dest[i] = strtol(hexbyte, NULL, 16); + } + + return i; +} + void TuyaSendHexString(uint8_t id, char data[]) { uint16_t len = strlen(data)/2; @@ -511,14 +535,7 @@ void TuyaSendHexString(uint8_t id, char data[]) { payload_buffer[2] = len >> 8; payload_buffer[3] = len & 0xFF; - char hexbyte[3]; - hexbyte[2] = 0; - - for (uint16_t i = 0; i < len; i++) { - hexbyte[0] = data[2*i]; - hexbyte[1] = data[2*i+1]; - payload_buffer[4+i] = strtol(hexbyte,NULL,16); - } + (void) convertHexStringtoBytes(&payload_buffer[4], data, len); TuyaSendCmd(TUYA_CMD_SET_DP, payload_buffer, payload_len); } @@ -540,6 +557,31 @@ void TuyaSendString(uint8_t id, char data[]) { TuyaSendCmd(TUYA_CMD_SET_DP, payload_buffer, payload_len); } +void TuyaSendRaw(uint8_t id, char data[]) { + AddLog(LOG_LEVEL_ERROR, PSTR("TYA: Send Raw-Data from string: %s"), data); + + char* beginPos = strchr(data, 'x'); + if(!beginPos) { + beginPos = strchr(data, 'X'); + } + if(!beginPos) { + beginPos = data; + } else { + beginPos += 1; + } + uint16_t strSize = strlen(beginPos); + uint16_t len = strSize/2; + uint16_t payload_len = 4 + len; + uint8_t payload_buffer[payload_len]; + payload_buffer[0] = id; + payload_buffer[1] = TUYA_TYPE_RAW; + payload_buffer[2] = len >> 8; + payload_buffer[3] = len & 0xFF; + + (void) convertHexStringtoBytes(&payload_buffer[4], beginPos, len); + + TuyaSendCmd(TUYA_CMD_SET_DP, payload_buffer, payload_len); +} bool TuyaSetPower(void) { bool status = false; From c8d3761436577f7d3536dc0ab519c99cf3112f00 Mon Sep 17 00:00:00 2001 From: tony <42725386+tony-fav@users.noreply.github.com> Date: Tue, 29 Mar 2022 23:13:59 -0400 Subject: [PATCH 303/355] BLEOp only request response if char supports it --- tasmota/xdrv_79_esp32_ble.ino | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tasmota/xdrv_79_esp32_ble.ino b/tasmota/xdrv_79_esp32_ble.ino index 5efaa973c..196c53d27 100644 --- a/tasmota/xdrv_79_esp32_ble.ino +++ b/tasmota/xdrv_79_esp32_ble.ino @@ -1990,7 +1990,7 @@ static void BLETaskRunCurrentOperation(BLE_ESP32::generic_sensor_t** pCurrentOpe } if (op->writelen){ if(pCharacteristic->canWrite() || pCharacteristic->canWriteNoResponse() ) { - if (!pCharacteristic->writeValue(op->dataToWrite, op->writelen, true)){ + if (!pCharacteristic->writeValue(op->dataToWrite, op->writelen, !pCharacteristic->canWriteNoResponse())){ // request response, unless we can't newstate = GEN_STATE_FAILED_WRITE; #ifdef BLE_ESP32_DEBUG AddLog(LOG_LEVEL_DEBUG,PSTR("BLE: characteristic write fail")); @@ -3720,5 +3720,3 @@ void sendExample(){ #endif #endif // CONFIG_IDF_TARGET_ESP32 or CONFIG_IDF_TARGET_ESP32C3 #endif // ESP32 - - From fa3b88b6a8d3ec9675eed040021e1f0903f40990 Mon Sep 17 00:00:00 2001 From: Benny Nestler Date: Wed, 30 Mar 2022 07:50:39 +0200 Subject: [PATCH 304/355] remove log --- tasmota/xdrv_16_tuyamcu.ino | 2 -- 1 file changed, 2 deletions(-) diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index 9913b739b..3e37d0bb8 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -558,8 +558,6 @@ void TuyaSendString(uint8_t id, char data[]) { } void TuyaSendRaw(uint8_t id, char data[]) { - AddLog(LOG_LEVEL_ERROR, PSTR("TYA: Send Raw-Data from string: %s"), data); - char* beginPos = strchr(data, 'x'); if(!beginPos) { beginPos = strchr(data, 'X'); From 6ac7c46b41a8c9481872ea55d1f95c91c07df80d Mon Sep 17 00:00:00 2001 From: Benny Nestler Date: Wed, 30 Mar 2022 11:21:20 +0200 Subject: [PATCH 305/355] Add SetOption137 to avoid mqtt-publish of Tuya MCU heartbeat responses. --- tasmota/settings.h | 2 +- tasmota/xdrv_16_tuyamcu.ino | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/tasmota/settings.h b/tasmota/settings.h index c0488a194..fbfac2e42 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -166,7 +166,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu uint32_t pwm_force_same_phase : 1; // bit 20 (v10.1.0.6) - SetOption134 - (PWM) force PWM lights to start at same phase, default is to spread phases to minimze overlap (also needed for H-bridge) uint32_t display_no_splash : 1; // bit 21 (v11.0.0.2) - SetOption135 - (Display & LVGL) forece disbabling default splash screen uint32_t tuyasns_no_immediate : 1; // bit 22 (v11.0.0.4) - SetOption136 - (TuyaSNS) When ON disable publish single SNS value on Tuya Receive (keep Teleperiod) - uint32_t spare23 : 1; // bit 23 + uint32_t tuya_exclude_heartbeat : 1; // bit 23 (v11.0.0.5) - SetOption137 - (Tuya) When Set, avoid the (mqtt-) publish of Tuya MCU Heartbeat response if SetOption66 is active uint32_t spare24 : 1; // bit 24 uint32_t spare25 : 1; // bit 25 uint32_t spare26 : 1; // bit 26 diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index 2b3fccd8a..ccd4f56d7 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -1203,6 +1203,7 @@ void TuyaSerialInput(void) uint8_t dpId = 0; uint8_t dpDataType = 0; char DataStr[15]; + bool isHeartbeat = false; if (len > 0) { ResponseAppend_P(PSTR(",\"CmndData\":\"%s\""), ToHex_P((unsigned char*)&Tuya.buffer[6], len, hex_char, sizeof(hex_char))); @@ -1246,11 +1247,22 @@ void TuyaSerialInput(void) dpidStart += dpDataLen + 4; } } + else if (TUYA_CMD_HEARTBEAT == Tuya.buffer[3]) { + isHeartbeat = true; + } } ResponseAppend_P(PSTR("}}")); if (Settings->flag3.tuya_serial_mqtt_publish) { // SetOption66 - Enable TuyaMcuReceived messages over Mqtt - MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_TUYA_MCU_RECEIVED)); + if (Settings->flag5.tuya_exclude_heartbeat) { // SetOption137 - (Tuya) When Set, avoid the (mqtt-) publish of Tuya MCU Heartbeat response if SetOption66 is active + if (false == isHeartbeat) { + MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_TUYA_MCU_RECEIVED)); + } + } + else { + MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_TUYA_MCU_RECEIVED)); + } + } else { AddLog(LOG_LEVEL_DEBUG, ResponseData()); } From cfa18b6708311fc8ad3f836035cf200a7c9e6866 Mon Sep 17 00:00:00 2001 From: Benny Nestler Date: Wed, 30 Mar 2022 12:14:36 +0200 Subject: [PATCH 306/355] Add macro TUYA_SETOPTION_137 to set SetOption137 during compile time --- tasmota/my_user_config.h | 1 + tasmota/settings.ino | 1 + 2 files changed, 2 insertions(+) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index b0579a30f..25751644b 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -346,6 +346,7 @@ #define TUYA_SETOPTION_20 false // [SetOption54] Apply SetOption20 settings to Tuya device #define TUYA_ALLOW_DIMMER_0 false // [SetOption131] Allow save dimmer = 0 receved by MCU #define TUYA_TEMP_SET_RES 1 // [TuyaTempSetRes] Maximum number of decimals (0 - 3) showing sensor TemperatureSet +#define TUYA_SETOPTION_137 false // [SetOption137] Avoid mqtt-publish of Tuya MCU heartbeat responses #define IR_ADD_RAW_DATA false // [SetOption58] Add IR Raw data to JSON message #define BUZZER_ENABLE false // [SetOption67] Enable buzzer when available #define DS18X20_PULL_UP false // [SetOption74] Enable internal pullup for single DS18x20 sensor diff --git a/tasmota/settings.ino b/tasmota/settings.ino index 3170ad42c..719918208 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -1208,6 +1208,7 @@ void SettingsDefaultSet2(void) { // Tuya flag3.tuya_apply_o20 |= TUYA_SETOPTION_20; flag5.tuya_allow_dimmer_0 |= TUYA_ALLOW_DIMMER_0; + flag5.tuya_exclude_heartbeat |= TUYA_SETOPTION_137; flag3.tuya_serial_mqtt_publish |= MQTT_TUYA_RECEIVED; mbflag2.temperature_set_res |= TUYA_TEMP_SET_RES; From 699eb30ed56e24a1644b01605165f2982fe37c1b Mon Sep 17 00:00:00 2001 From: Benny Nestler Date: Wed, 30 Mar 2022 14:47:46 +0200 Subject: [PATCH 307/355] CHG: Refactored if-condition --- tasmota/xdrv_16_tuyamcu.ino | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index ccd4f56d7..3351355f3 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -1254,15 +1254,9 @@ void TuyaSerialInput(void) ResponseAppend_P(PSTR("}}")); if (Settings->flag3.tuya_serial_mqtt_publish) { // SetOption66 - Enable TuyaMcuReceived messages over Mqtt - if (Settings->flag5.tuya_exclude_heartbeat) { // SetOption137 - (Tuya) When Set, avoid the (mqtt-) publish of Tuya MCU Heartbeat response if SetOption66 is active - if (false == isHeartbeat) { - MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_TUYA_MCU_RECEIVED)); - } - } - else { + if (!(isHeartbeat && Settings->flag5.tuya_exclude_heartbeat)) { // SetOption137 - (Tuya) When Set, avoid the (mqtt-) publish of Tuya MCU Heartbeat response if SetOption66 is active MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_TUYA_MCU_RECEIVED)); - } - + } } else { AddLog(LOG_LEVEL_DEBUG, ResponseData()); } From 0e8d60b472d3215363a15b0360bba8abf5b35fcc Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Wed, 30 Mar 2022 21:09:08 +0200 Subject: [PATCH 308/355] revert to earlier core build actual build do have issues with littlefs --- platformio_tasmota32.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini index d8cbe887b..d57596151 100644 --- a/platformio_tasmota32.ini +++ b/platformio_tasmota32.ini @@ -38,14 +38,14 @@ extra_scripts = pre:pio-tools/add_c_flags.py ${esp_defaults.extra_scripts} [core32] -platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3rc1/platform-espressif32-2.0.3.zip +platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3/platform-espressif32-2.0.3.zip platform_packages = build_unflags = ${esp32_defaults.build_unflags} build_flags = ${esp32_defaults.build_flags} [core32solo1] -platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3rc1/platform-espressif32-2.0.3solo1.zip -platform_packages = +platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3solo1.zip +platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/749/framework-arduinoespressif32-solo1-v4.4_dev-2509ea4227.tar.gz build_unflags = ${esp32_defaults.build_unflags} build_flags = ${esp32_defaults.build_flags} From d176aeaaf64899d68bbbe4263e34ddc0c1fe29c8 Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Thu, 31 Mar 2022 12:10:18 +0200 Subject: [PATCH 309/355] fix swb(), goole charts time axis --- tasmota/xdrv_10_scripter.ino | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino index 16987a946..5dc343c32 100755 --- a/tasmota/xdrv_10_scripter.ino +++ b/tasmota/xdrv_10_scripter.ino @@ -3983,7 +3983,6 @@ extern char *SML_GetSVal(uint32_t index); } if (!strncmp(lp, "swb(", 4)) { lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar, 0); - fvar = -1; if (glob_script_mem.sp) { glob_script_mem.sp->write((uint8_t)fvar); fvar = 0; @@ -8923,12 +8922,19 @@ exgc: int16_t divflg = 1; int16_t todflg = -1; + uint8_t hmflg = 0; if (!strncmp(label, "cnt", 3)) { char *cp = &label[3]; + if (*cp == 'h') { + hmflg = 1; + cp++; + } //todflg=atoi(&label[3]); todflg = strtol(cp, &cp, 10); - if (todflg >= entries) todflg = entries - 1; - if (todflg < 0) todflg = 0; + if (!hmflg) { + if (todflg >= entries) todflg = entries - 1; + if (todflg < 0) todflg = 0; + } if (*cp=='/') { cp++; divflg = strtol(cp, &cp, 10); @@ -8957,8 +8963,14 @@ exgc: if (todflg >= 0) { sprintf(lbl, "%d:%02d", todflg / divflg, (todflg % divflg) * (60 / divflg) ); todflg++; - if (todflg >= entries) { - todflg = 0; + if (hmflg == 0) { + if (todflg >= entries) { + todflg = 0; + } + } else { + if ((todflg / divflg) >= 24) { + todflg = 0; + } } } else { if (todflg == -1) { From dd4f5cce3655812d162b6acbb3d8a4d46712e3a7 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Thu, 31 Mar 2022 17:02:40 +0200 Subject: [PATCH 310/355] Fixed Tasmota Core 2.0.3-rc1 reverted commit https://github.com/espressif/arduino-esp32/commit/7b89b39e1087742ada6e8992159390f885c07919 in Arduino core which seems faulty --- platformio_tasmota32.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini index d57596151..d8cbe887b 100644 --- a/platformio_tasmota32.ini +++ b/platformio_tasmota32.ini @@ -38,14 +38,14 @@ extra_scripts = pre:pio-tools/add_c_flags.py ${esp_defaults.extra_scripts} [core32] -platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3/platform-espressif32-2.0.3.zip +platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3rc1/platform-espressif32-2.0.3.zip platform_packages = build_unflags = ${esp32_defaults.build_unflags} build_flags = ${esp32_defaults.build_flags} [core32solo1] -platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3solo1.zip -platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/749/framework-arduinoespressif32-solo1-v4.4_dev-2509ea4227.tar.gz +platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3rc1/platform-espressif32-2.0.3solo1.zip +platform_packages = build_unflags = ${esp32_defaults.build_unflags} build_flags = ${esp32_defaults.build_flags} From 882ed16347f7e8eae048ca922b3cde63658cc6d0 Mon Sep 17 00:00:00 2001 From: aoe1 Date: Fri, 1 Apr 2022 13:02:43 +0200 Subject: [PATCH 311/355] Patched BL09xx to measure positive and negative power Removed the abs() from the power so as to measure power flow from/to grid --- tasmota/xnrg_14_bl09xx.ino | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tasmota/xnrg_14_bl09xx.ino b/tasmota/xnrg_14_bl09xx.ino index 14228a812..2a5f5e00a 100644 --- a/tasmota/xnrg_14_bl09xx.ino +++ b/tasmota/xnrg_14_bl09xx.ino @@ -84,9 +84,9 @@ const uint8_t bl09xx_init[5][4] = { }; struct BL09XX { - uint32_t voltage = 0; - uint32_t current[2] = { 0, }; - uint32_t power[2] = { 0, }; + int32_t voltage = 0; + int32_t current[2] = { 0, }; + int32_t power[2] = { 0, }; float temperature; uint16_t tps1 = 0; uint8_t *rx_buffer = nullptr; @@ -129,12 +129,12 @@ bool Bl09XXDecode3940(void) { Bl09XX.voltage = Bl09XX.rx_buffer[12] << 16 | Bl09XX.rx_buffer[11] << 8 | Bl09XX.rx_buffer[10]; // V_RMS unsigned Bl09XX.current[0] = Bl09XX.rx_buffer[6] << 16 | Bl09XX.rx_buffer[5] << 8 | Bl09XX.rx_buffer[4]; // IA_RMS unsigned int32_t tmp = Bl09XX.rx_buffer[18] << 24 | Bl09XX.rx_buffer[17] << 16 | Bl09XX.rx_buffer[16] << 8; // WATT_A signed - Bl09XX.power[0] = abs(tmp >> 8); // WATT_A unsigned + Bl09XX.power[0] = (tmp >> 8); // WATT_A unsigned if (Energy.phase_count > 1) { Bl09XX.current[1] = Bl09XX.rx_buffer[9] << 16 | Bl09XX.rx_buffer[8] << 8 | Bl09XX.rx_buffer[7]; // IB_RMS unsigned tmp = Bl09XX.rx_buffer[21] << 24 | Bl09XX.rx_buffer[20] << 16 | Bl09XX.rx_buffer[19] << 8; // WATT_B signed - Bl09XX.power[1] = abs(tmp >> 8); // WATT_B unsigned + Bl09XX.power[1] = (tmp >> 8); // WATT_B unsigned } #ifdef DEBUG_BL09XX @@ -172,7 +172,7 @@ bool Bl09XXDecode42(void) { Bl09XX.voltage = Bl09XX.rx_buffer[6] << 16 | Bl09XX.rx_buffer[5] << 8 | Bl09XX.rx_buffer[4]; // V_RMS unsigned Bl09XX.current[0] = Bl09XX.rx_buffer[3] << 16 | Bl09XX.rx_buffer[2] << 8 | Bl09XX.rx_buffer[1]; // IA_RMS unsigned int32_t tmp = Bl09XX.rx_buffer[12] << 24 | Bl09XX.rx_buffer[11] << 16 | Bl09XX.rx_buffer[10] << 8; // WATT_A signed - Bl09XX.power[0] = abs(tmp >> 8); // WATT_A unsigned + Bl09XX.power[0] = (tmp >> 8); // WATT_A unsigned #ifdef DEBUG_BL09XX AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("BL9: U %d, I %d, P %d"), @@ -427,4 +427,4 @@ bool Xnrg14(uint8_t function) { } #endif // USE_BL09XX -#endif // USE_ENERGY_SENSOR \ No newline at end of file +#endif // USE_ENERGY_SENSOR From 4e801b3f828c691fbbdb2f32e88e9e5c535df526 Mon Sep 17 00:00:00 2001 From: Benny Nestler Date: Fri, 1 Apr 2022 17:33:57 +0200 Subject: [PATCH 312/355] CHG: Generalise the Tuya Commands to suppress publishing via MQTT (SetOption137) --- tasmota/settings.h | 2 +- tasmota/settings.ino | 2 +- tasmota/xdrv_16_tuyamcu.ino | 38 ++++++++++++++++++++++--------------- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/tasmota/settings.h b/tasmota/settings.h index fbfac2e42..75797696e 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -166,7 +166,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu uint32_t pwm_force_same_phase : 1; // bit 20 (v10.1.0.6) - SetOption134 - (PWM) force PWM lights to start at same phase, default is to spread phases to minimze overlap (also needed for H-bridge) uint32_t display_no_splash : 1; // bit 21 (v11.0.0.2) - SetOption135 - (Display & LVGL) forece disbabling default splash screen uint32_t tuyasns_no_immediate : 1; // bit 22 (v11.0.0.4) - SetOption136 - (TuyaSNS) When ON disable publish single SNS value on Tuya Receive (keep Teleperiod) - uint32_t tuya_exclude_heartbeat : 1; // bit 23 (v11.0.0.5) - SetOption137 - (Tuya) When Set, avoid the (mqtt-) publish of Tuya MCU Heartbeat response if SetOption66 is active + uint32_t tuya_exclude_from_mqtt : 1; // bit 23 (v11.0.0.5) - SetOption137 - (Tuya) When Set, avoid the (MQTT-) publish of defined Tuya CMDs (see xdrv_16_tuyamcu.ino) if SetOption66 is active uint32_t spare24 : 1; // bit 24 uint32_t spare25 : 1; // bit 25 uint32_t spare26 : 1; // bit 26 diff --git a/tasmota/settings.ino b/tasmota/settings.ino index 719918208..6f7e89783 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -1208,7 +1208,7 @@ void SettingsDefaultSet2(void) { // Tuya flag3.tuya_apply_o20 |= TUYA_SETOPTION_20; flag5.tuya_allow_dimmer_0 |= TUYA_ALLOW_DIMMER_0; - flag5.tuya_exclude_heartbeat |= TUYA_SETOPTION_137; + flag5.tuya_exclude_from_mqtt |= TUYA_SETOPTION_137; flag3.tuya_serial_mqtt_publish |= MQTT_TUYA_RECEIVED; mbflag2.temperature_set_res |= TUYA_TEMP_SET_RES; diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index f80efcb4e..2774848b0 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -27,16 +27,18 @@ #define TUYA_DIMMER_ID 0 #endif -#define TUYA_CMD_HEARTBEAT 0x00 -#define TUYA_CMD_QUERY_PRODUCT 0x01 -#define TUYA_CMD_MCU_CONF 0x02 -#define TUYA_CMD_WIFI_STATE 0x03 -#define TUYA_CMD_WIFI_RESET 0x04 -#define TUYA_CMD_WIFI_SELECT 0x05 -#define TUYA_CMD_SET_DP 0x06 -#define TUYA_CMD_STATE 0x07 -#define TUYA_CMD_QUERY_STATE 0x08 -#define TUYA_CMD_SET_TIME 0x1C +#define TUYA_CMD_HEARTBEAT 0x00 +#define TUYA_CMD_QUERY_PRODUCT 0x01 +#define TUYA_CMD_MCU_CONF 0x02 +#define TUYA_CMD_WIFI_STATE 0x03 +#define TUYA_CMD_WIFI_RESET 0x04 +#define TUYA_CMD_WIFI_SELECT 0x05 +#define TUYA_CMD_SET_DP 0x06 +#define TUYA_CMD_STATE 0x07 +#define TUYA_CMD_QUERY_STATE 0x08 +#define TUYA_CMD_INITIATING_UPGRADE 0x0A +#define TUYA_CMD_UPGRADE_PACKAGE 0x0B +#define TUYA_CMD_SET_TIME 0x1C #define TUYA_LOW_POWER_CMD_WIFI_STATE 0x02 #define TUYA_LOW_POWER_CMD_WIFI_RESET 0x03 @@ -110,6 +112,9 @@ void (* const TuyaCommand[])(void) PROGMEM = { &CmndTuyaMcu, &CmndTuyaSend, &CmndTuyaRgb, &CmndTuyaEnum, &CmndTuyaEnumList, &CmndTuyaTempSetRes }; +const uint8_t TuyaExcludeCMDsFromMQTT[] PROGMEM = // don't publish this received commands via MQTT if SetOption66 and SetOption137 is active (can be expanded in the future) + TUYA_CMD_HEARTBEAT, TUYA_CMD_SET_TIME, TUYA_CMD_UPGRADE_PACKAGE; + /*********************************************************************************************\ * Web Interface \*********************************************************************************************/ @@ -1243,7 +1248,7 @@ void TuyaSerialInput(void) uint8_t dpId = 0; uint8_t dpDataType = 0; char DataStr[15]; - bool isHeartbeat = false; + bool isCmdToSuppress = false; if (len > 0) { ResponseAppend_P(PSTR(",\"CmndData\":\"%s\""), ToHex_P((unsigned char*)&Tuya.buffer[6], len, hex_char, sizeof(hex_char))); @@ -1287,14 +1292,17 @@ void TuyaSerialInput(void) dpidStart += dpDataLen + 4; } } - else if (TUYA_CMD_HEARTBEAT == Tuya.buffer[3]) { - isHeartbeat = true; - } } ResponseAppend_P(PSTR("}}")); if (Settings->flag3.tuya_serial_mqtt_publish) { // SetOption66 - Enable TuyaMcuReceived messages over Mqtt - if (!(isHeartbeat && Settings->flag5.tuya_exclude_heartbeat)) { // SetOption137 - (Tuya) When Set, avoid the (mqtt-) publish of Tuya MCU Heartbeat response if SetOption66 is active + for (uint8_t cmdsID = 0; sizeof(TuyaExcludeCMDsFromMQTT) > cmdsID; cmdsID++){ + if (TuyaExcludeCMDsFromMQTT[cmdsID] == Tuya.buffer[3]) { + isCmdToSuppress = true; + break; + } + } + if (!(isCmdToSuppress && Settings->flag5.tuya_exclude_from_mqtt)) { // SetOption137 - (Tuya) When Set, avoid the (MQTT-) publish of defined Tuya CMDs (see TuyaExcludeCMDsFromMQTT) if SetOption66 is active MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_TUYA_MCU_RECEIVED)); } } else { From d54c8665a30cbf7b23fdeaac7f2c03dd929418f3 Mon Sep 17 00:00:00 2001 From: Grigorios Vassilopoulos <88079159+serifis84@users.noreply.github.com> Date: Fri, 1 Apr 2022 18:52:43 +0300 Subject: [PATCH 313/355] Update xdsp_17_universal.ino Throw error when compiling with #define DSP_ROM_DESC xdsp_17_universal.ino:65:1: error: expected ',' or ';' before 'Renderer' Renderer *Init_uDisplay(const char *desc) { ^ --- tasmota/xdsp_17_universal.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasmota/xdsp_17_universal.ino b/tasmota/xdsp_17_universal.ino index d557bd610..966bec7da 100644 --- a/tasmota/xdsp_17_universal.ino +++ b/tasmota/xdsp_17_universal.ino @@ -59,7 +59,7 @@ void Core2DisplayDim(uint8_t dim); /*********************************************************************************************/ #ifdef DSP_ROM_DESC -const char DSP_SAMPLE_DESC[] PROGMEM = DSP_ROM_DESC +const char DSP_SAMPLE_DESC[] PROGMEM = DSP_ROM_DESC; #endif // DSP_ROM_DESC /*********************************************************************************************/ Renderer *Init_uDisplay(const char *desc) { From 4ffbe95ecc697d90f634e0a13bb4d45c18d78619 Mon Sep 17 00:00:00 2001 From: Benny Nestler Date: Fri, 1 Apr 2022 18:21:36 +0200 Subject: [PATCH 314/355] CHG: exclude TUYA_CMD_WIFI_STATE from MQTT publish CHG: If CMD is excluded from MQTT publish show a log entry --- tasmota/xdrv_16_tuyamcu.ino | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index 2774848b0..f95dc86b9 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -112,8 +112,9 @@ void (* const TuyaCommand[])(void) PROGMEM = { &CmndTuyaMcu, &CmndTuyaSend, &CmndTuyaRgb, &CmndTuyaEnum, &CmndTuyaEnumList, &CmndTuyaTempSetRes }; -const uint8_t TuyaExcludeCMDsFromMQTT[] PROGMEM = // don't publish this received commands via MQTT if SetOption66 and SetOption137 is active (can be expanded in the future) - TUYA_CMD_HEARTBEAT, TUYA_CMD_SET_TIME, TUYA_CMD_UPGRADE_PACKAGE; +const uint8_t TuyaExcludeCMDsFromMQTT[] PROGMEM = { // don't publish this received commands via MQTT if SetOption66 and SetOption137 is active (can be expanded in the future) + TUYA_CMD_HEARTBEAT, TUYA_CMD_WIFI_STATE, TUYA_CMD_SET_TIME, TUYA_CMD_UPGRADE_PACKAGE +}; /*********************************************************************************************\ * Web Interface @@ -1304,7 +1305,9 @@ void TuyaSerialInput(void) } if (!(isCmdToSuppress && Settings->flag5.tuya_exclude_from_mqtt)) { // SetOption137 - (Tuya) When Set, avoid the (MQTT-) publish of defined Tuya CMDs (see TuyaExcludeCMDsFromMQTT) if SetOption66 is active MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_TUYA_MCU_RECEIVED)); - } + } else { + AddLog(LOG_LEVEL_DEBUG, ResponseData()); + } } else { AddLog(LOG_LEVEL_DEBUG, ResponseData()); } From c3132594d35a195f8ece42c08b8bd28ce93683e2 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 2 Apr 2022 11:43:29 +0200 Subject: [PATCH 315/355] Add support for improv as used by esp-web-tools --- BUILDS.md | 1 + CHANGELOG.md | 12 +- RELEASENOTES.md | 3 +- tasmota/my_user_config.h | 1 + tasmota/settings.h | 3 +- tasmota/support_features.ino | 4 +- tasmota/tasmota_configurations.h | 1 + tasmota/tasmota_version.h | 2 +- tasmota/xdrv_62_improv.ino | 383 +++++++++++++++++++++++++++++++ tools/decode-status.py | 6 +- 10 files changed, 408 insertions(+), 8 deletions(-) create mode 100644 tasmota/xdrv_62_improv.ino diff --git a/BUILDS.md b/BUILDS.md index cbf2ecea3..733b991ec 100644 --- a/BUILDS.md +++ b/BUILDS.md @@ -9,6 +9,7 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up | Feature or Sensor | l | t | k | s | i | d | Remarks |-----------------------|---|-------|---|---|---|---|-------- | MY_LANGUAGE en_GB | x | x / x | x | x | x | x | +| USE_IMPROV | - | x / x | x | x | x | x | | USE_UFILESYS | - | - / x | - | - | - | - | | USE_ARDUINO_OTA | - | - / - | - | - | - | - | | USE_DOMOTICZ | - | x / x | x | x | x | - | diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bef73c0c..d2a312afe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,17 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - Development -## [11.0.0.4] +## [11.0.0.5] +### Added +- Support for improv as used by esp-web-tools + +### Changed + + +### Fixed + + +## [11.0.0.4] 20220402 ### Added - Command ``RtcNtpserver 0/1`` to enable Tasmota NTP server when enabled by define ``RTC_NTP_SERVER`` - NeoPool JSON modules, power module, cell info, chlorine, conductivity and ionization diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 1136eccf2..1c56d6c18 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -103,7 +103,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo [Complete list](BUILDS.md) of available feature and sensors. -## Changelog v11.0.0.4 +## Changelog v11.0.0.5 ### Added - Command ``SetOption135 1`` to disable LVGL splash screen - Command ``SetOption136 1`` to disable single sensor reports from Tuya devices while keeping teleperiod reports [#15216](https://github.com/arendst/Tasmota/issues/15216) @@ -114,6 +114,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - NeoPool commands ``NPpHMin``, ``NPpHMax``, ``NPpH``, ``NPRedox``, ``NPHydrolysis``, ``NPIonization``, ``NPChlorine`` and ``NPControl`` [#15015](https://github.com/arendst/Tasmota/issues/15015) - NeoPool system voltages display - TasmotaSerial implement ``end()`` +- Support for improv as used by esp-web-tools - Support for up to four DS3502 digital potentiometers with command ``Wiper 0..127`` - Support for ADE7880 3 phase energy monitor as used in Shelly 3EM [#13515](https://github.com/arendst/Tasmota/issues/13515) - Support for PCF85363 RTC as used in Shelly 3EM [#13515](https://github.com/arendst/Tasmota/issues/13515) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 25751644b..e80da076a 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -397,6 +397,7 @@ // -- Wifi Config tools --------------------------- #define WIFI_SOFT_AP_CHANNEL 1 // Soft Access Point Channel number between 1 and 13 as used by Wi-Fi Manager web GUI +#define USE_IMPROV // Add support for IMPROV serial protocol as used by esp-web-tools (+2k code) // -- ESP-NOW ------------------------------------- //#define USE_TASMESH // Enable Tasmota Mesh using ESP-NOW (+11k code) diff --git a/tasmota/settings.h b/tasmota/settings.h index fbfac2e42..795fd05b7 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -833,8 +833,9 @@ typedef struct { uint32_t baudrate; // 2CC uint32_t ultradeepsleep; // 2D0 uint16_t deepsleep_slip; // 2D4 + uint8_t improv_state; // 2D6 - uint8_t free_2d6[2]; // 2D6 + uint8_t free_2d7[1]; // 2D7 int32_t energy_kWhtoday_ph[3]; // 2D8 int32_t energy_kWhtotal_ph[3]; // 2E4 diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino index 488ccd283..c2e6535c7 100644 --- a/tasmota/support_features.ino +++ b/tasmota/support_features.ino @@ -803,7 +803,9 @@ void ResponseAppendFeatures(void) #if defined(USE_I2C) && defined(USE_DS3502) feature8 |= 0x02000000; // xdrv_61_ds3502.ino #endif -// feature8 |= 0x04000000; +#ifdef USE_IMPROV + feature8 |= 0x04000000; // xdrv_62_improv.ino +#endif // feature8 |= 0x08000000; // feature8 |= 0x10000000; diff --git a/tasmota/tasmota_configurations.h b/tasmota/tasmota_configurations.h index 26821cdee..7da082738 100644 --- a/tasmota/tasmota_configurations.h +++ b/tasmota/tasmota_configurations.h @@ -782,6 +782,7 @@ #undef FIRMWARE_DISPLAYS // Disable tasmota-display with display drivers enabled #undef FIRMWARE_IR // Disable tasmota-ir with IR full protocols activated +#undef USE_IMPROV // Disable support for IMPROV serial protocol as used by esp-web-tools (+2k code) #undef USE_TASMESH // Disable Tasmota Mesh using ESP-NOW (+11k code) #undef USE_ARDUINO_OTA // Disable support for Arduino OTA #undef USE_INFLUXDB // Disable influxdb support (+5k code) diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h index d9b1f0202..dbf3330d5 100644 --- a/tasmota/tasmota_version.h +++ b/tasmota/tasmota_version.h @@ -20,6 +20,6 @@ #ifndef _TASMOTA_VERSION_H_ #define _TASMOTA_VERSION_H_ -const uint32_t VERSION = 0x0B000004; // 11.0.0.4 +const uint32_t VERSION = 0x0B000005; // 11.0.0.5 #endif // _TASMOTA_VERSION_H_ diff --git a/tasmota/xdrv_62_improv.ino b/tasmota/xdrv_62_improv.ino new file mode 100644 index 000000000..32e86ba39 --- /dev/null +++ b/tasmota/xdrv_62_improv.ino @@ -0,0 +1,383 @@ +/* + xdrv_62_improv.ino - IMPROV support for Tasmota + + SPDX-FileCopyrightText: 2022 Theo Arends + + SPDX-License-Identifier: GPL-3.0-only +*/ + +#ifdef USE_IMPROV +/*********************************************************************************************\ + * Serial implementation of IMPROV for initial wifi configuration using esp-web-tools + * + * See https://esphome.github.io/esp-web-tools/ and https://www.improv-wifi.com/serial/ +\*********************************************************************************************/ + +#define XDRV_62 62 + +#define IMPROV_WIFI_TIMEOUT 30 // Max seconds wait for wifi connection after reconfig + +//#define IMPROV_DEBUG + +enum ImprovError { + IMPROV_ERROR_NONE = 0x00, + IMPROV_ERROR_INVALID_RPC = 0x01, + IMPROV_ERROR_UNKNOWN_RPC = 0x02, + IMPROV_ERROR_UNABLE_TO_CONNECT = 0x03, + IMPROV_ERROR_NOT_AUTHORIZED = 0x04, + IMPROV_ERROR_UNKNOWN = 0xFF, +}; + +enum ImprovState { + IMPROV_STATE_STOPPED = 0x00, + IMPROV_STATE_AWAITING_AUTHORIZATION = 0x01, + IMPROV_STATE_AUTHORIZED = 0x02, + IMPROV_STATE_PROVISIONING = 0x03, + IMPROV_STATE_PROVISIONED = 0x04, +}; + +enum ImprovCommand { + IMPROV_UNKNOWN = 0x00, + IMPROV_WIFI_SETTINGS = 0x01, + IMPROV_GET_CURRENT_STATE = 0x02, + IMPROV_GET_DEVICE_INFO = 0x03, + IMPROV_GET_WIFI_NETWORKS = 0x04, + IMPROV_BAD_CHECKSUM = 0xFF, +}; + +enum ImprovSerialType { + IMPROV_TYPE_CURRENT_STATE = 0x01, + IMPROV_TYPE_ERROR_STATE = 0x02, + IMPROV_TYPE_RPC = 0x03, + IMPROV_TYPE_RPC_RESPONSE = 0x04 +}; + +static const uint8_t IMPROV_SERIAL_VERSION = 1; + +struct IMPROV { + uint32_t last_read_byte; + uint8_t wifi_timeout; + uint8_t seriallog_level; + bool message; +} Improv; + +/*********************************************************************************************/ + +void ImprovWriteData(uint8_t* data, uint32_t size) { + data[0] = 'I'; + data[1] = 'M'; + data[2] = 'P'; + data[3] = 'R'; + data[4] = 'O'; + data[5] = 'V'; + data[6] = IMPROV_SERIAL_VERSION; // 0x01 + uint8_t checksum = 0x00; + for (uint32_t i = 0; i < size -1; i++) { + checksum += data[i]; + } + data[size -1] = checksum; + + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("IMP: Send '%*_H'"), size, data); + +// Serial.write(data, size); + for (uint32_t i = 0; i < size; i++) { + Serial.write(data[i]); + } + Serial.write('\n'); +} + +void ImprovSendCmndState(uint32_t command, uint32_t state) { + uint8_t data[11]; + data[7] = command; + data[8] = 1; + data[9] = state; + ImprovWriteData(data, sizeof(data)); +} + +void ImprovSendState(uint32_t state) { +#ifdef IMPROV_DEBUG + AddLog(LOG_LEVEL_DEBUG, PSTR("IMP: State %d"), state); +#endif + RtcSettings.improv_state = state; + ImprovSendCmndState(IMPROV_TYPE_CURRENT_STATE, state); // 0x01 +} + +void ImprovSendError(uint32_t error) { +#ifdef IMPROV_DEBUG + AddLog(LOG_LEVEL_DEBUG, PSTR("IMP: Error %d"), error); +#endif + ImprovSendCmndState(IMPROV_TYPE_ERROR_STATE, error); // 0x02 +} + +void ImprovSendResponse(uint8_t* response, uint32_t size) { + uint8_t data[9 + size]; + data[7] = IMPROV_TYPE_RPC_RESPONSE; // 0x04 + data[8] = size -1; + memcpy(data +9, response, size); + ImprovWriteData(data, sizeof(data)); +} + +void ImprovSendSetting(uint32_t command) { + char data[100]; + uint32_t len = 0; +#ifdef USE_WEBSERVER + len = ext_snprintf_P(data, sizeof(data), PSTR("01|http://%_I:%d|"), (uint32_t)WiFi.localIP(), WEB_PORT); + uint32_t str_pos = 2; + for (uint32_t i = 3; i < len; i++) { + if ('|' == data[i]) { + data[str_pos] = i - str_pos -1; + } + } + len -= 3; +#endif // USE_WEBSERVER + data[0] = command; + data[1] = len; + ImprovSendResponse((uint8_t*)data, len +3); +} + +bool ImprovParseSerialByte(void) { + // 0 1 2 3 4 5 6 7 8 9 8 + le +1 + // I M P R O V ve ty le data ... \n + // 49 4D 50 52 4F 56 01 xx yy ........ 0A + if (6 == TasmotaGlobal.serial_in_byte_counter) { + return (IMPROV_SERIAL_VERSION == TasmotaGlobal.serial_in_byte); + } + if (TasmotaGlobal.serial_in_byte_counter <= 8) { + return true; // Wait for type and length + } + uint32_t data_len = TasmotaGlobal.serial_in_buffer[8]; + if (TasmotaGlobal.serial_in_byte_counter <= 9 + data_len) { // Receive including '\n' + return true; // Wait for data + } + + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("IMP: Rcvd '%*_H'"), TasmotaGlobal.serial_in_byte_counter, TasmotaGlobal.serial_in_buffer); + + TasmotaGlobal.serial_in_byte_counter--; // Drop '\n' + uint8_t checksum = 0x00; + for (uint32_t i = 0; i < TasmotaGlobal.serial_in_byte_counter; i++) { + checksum += TasmotaGlobal.serial_in_buffer[i]; + } + if (checksum != TasmotaGlobal.serial_in_buffer[TasmotaGlobal.serial_in_byte_counter]) { + ImprovSendError(IMPROV_ERROR_INVALID_RPC); // 0x01 - CRC error + return false; + } + + uint32_t type = TasmotaGlobal.serial_in_buffer[7]; + if (IMPROV_TYPE_RPC == type) { // 0x03 + uint32_t data_length = TasmotaGlobal.serial_in_buffer[10]; + if (data_length != data_len - 2) { + return false; + } + + uint32_t command = TasmotaGlobal.serial_in_buffer[9]; + switch (command) { + case IMPROV_WIFI_SETTINGS: { // 0x01 +// if (RtcSettings.improv_state != IMPROV_STATE_AUTHORIZED) { +// ImprovSendError(IMPROV_ERROR_NOT_AUTHORIZED); // 0x04 +// } else { + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 + // I M P R O V vs ty le co dl sl s s i d pl p a s s w o r d cr + uint32_t ssid_length = TasmotaGlobal.serial_in_buffer[11]; + uint32_t ssid_end = 12 + ssid_length; + uint32_t pass_length = TasmotaGlobal.serial_in_buffer[ssid_end]; + uint32_t pass_start = ssid_end + 1; + uint32_t pass_end = pass_start + pass_length; + TasmotaGlobal.serial_in_buffer[ssid_end] = '\0'; + char* ssid = &TasmotaGlobal.serial_in_buffer[12]; + TasmotaGlobal.serial_in_buffer[pass_end] = '\0'; + char* password = &TasmotaGlobal.serial_in_buffer[pass_start]; +#ifdef IMPROV_DEBUG + AddLog(LOG_LEVEL_DEBUG, PSTR("IMP: Ssid '%s', Password '%s'"), ssid, password); +#endif // IMPROV_DEBUG + Improv.wifi_timeout = IMPROV_WIFI_TIMEOUT; // Set WiFi connect timeout + ImprovSendState(IMPROV_STATE_PROVISIONING); + Settings->flag4.network_wifi = 1; // Enable WiFi + char cmnd[TOPSZ]; + snprintf_P(cmnd, sizeof(cmnd), PSTR(D_CMND_BACKLOG "0 " D_CMND_SSID "1 %s;" D_CMND_PASSWORD "1 %s"), ssid, password); + ExecuteCommand(cmnd, SRC_SERIAL); // Set SSID and Password and restart +// } + break; + } + case IMPROV_GET_CURRENT_STATE: { // 0x02 + ImprovSendState(RtcSettings.improv_state); + if (IMPROV_STATE_PROVISIONED == RtcSettings.improv_state) { + ImprovSendSetting(IMPROV_GET_CURRENT_STATE); + } + break; + } + case IMPROV_GET_DEVICE_INFO: { // 0x03 + char data[200]; + uint32_t len = snprintf_P(data, sizeof(data), PSTR("01|Tasmota|%s|%s|%s|"), + TasmotaGlobal.version, GetDeviceHardware().c_str(), SettingsText(SET_DEVICENAME)); + data[0] = IMPROV_GET_DEVICE_INFO; + data[1] = len -3; + + uint32_t str_pos = 2; + for (uint32_t i = 3; i < len; i++) { + if ('|' == data[i]) { + data[str_pos] = i - str_pos -1; + str_pos = i; + } + } + ImprovSendResponse((uint8_t*)data, len); + break; + } + case IMPROV_GET_WIFI_NETWORKS: { // 0x04 + char data[200]; + int n = WiFi.scanNetworks(); + if (n) { + // Sort networks + int indices[n]; + for (uint32_t i = 0; i < n; i++) { + indices[i] = i; + } + // RSSI SORT + for (uint32_t i = 0; i < n; i++) { + for (uint32_t j = i + 1; j < n; j++) { + if (WiFi.RSSI(indices[j]) > WiFi.RSSI(indices[i])) { + std::swap(indices[i], indices[j]); + } + } + } + // Remove duplicates ( must be RSSI sorted ) + for (uint32_t i = 0; i < n; i++) { + if (-1 == indices[i]) { continue; } + String cssid = WiFi.SSID(indices[i]); + uint32_t cschn = WiFi.channel(indices[i]); + for (uint32_t j = i + 1; j < n; j++) { + if ((cssid == WiFi.SSID(indices[j])) && (cschn == WiFi.channel(indices[j]))) { + indices[j] = -1; // set dup aps to index -1 + } + } + } + + // Send networks + for (uint32_t i = 0; i < n; i++) { + if (-1 == indices[i]) { continue; } // Skip dups + int32_t rssi = WiFi.RSSI(indices[i]); + String ssid_copy = WiFi.SSID(indices[i]); + if (!ssid_copy.length()) { ssid_copy = F("no_name"); } + + // Send each ssid separately to avoid overflowing the buffer + uint32_t len = snprintf_P(data, sizeof(data), PSTR("01|%s|%d|%s|"), ssid_copy.c_str(), rssi, (ENC_TYPE_NONE == WiFi.encryptionType(indices[i]))?"NO":"YES"); + data[0] = IMPROV_GET_WIFI_NETWORKS; + data[1] = len -3; + + uint32_t str_pos = 2; + for (uint32_t i = 3; i < len; i++) { + if ('|' == data[i]) { + data[str_pos] = i - str_pos -1; + str_pos = i; + } + } + ImprovSendResponse((uint8_t*)data, len); + } + } + + // Send empty response to signify the end of the list. + data[0] = IMPROV_GET_WIFI_NETWORKS; + data[1] = 0; // Empty string + ImprovSendResponse((uint8_t*)data, 3); + break; + } +/* + case IMPROV_BAD_CHECKSUM: { // 0xFF + break; + } +*/ + default: + ImprovSendError(IMPROV_ERROR_UNKNOWN_RPC); // 0x02 - Unknown payload + } + } + + return false; +} + +/*********************************************************************************************/ + +bool ImprovSerialInput(void) { + // Check if received data is IMPROV data + if (6 == TasmotaGlobal.serial_in_byte_counter) { + TasmotaGlobal.serial_in_buffer[TasmotaGlobal.serial_in_byte_counter] = 0; + if (!strcmp_P(TasmotaGlobal.serial_in_buffer, PSTR("IMPROV"))) { + Improv.seriallog_level = TasmotaGlobal.seriallog_level; + TasmotaGlobal.seriallog_level = 0; // Disable seriallogging interfering with IMPROV + Improv.last_read_byte = millis(); + Improv.message = true; + } + } + if (Improv.message) { + uint32_t now = millis(); + if (now - Improv.last_read_byte < 50) { + TasmotaGlobal.serial_in_buffer[TasmotaGlobal.serial_in_byte_counter] = TasmotaGlobal.serial_in_byte; + if (ImprovParseSerialByte()) { + TasmotaGlobal.serial_in_byte_counter++; + TasmotaGlobal.serial_in_byte = 0; + Improv.last_read_byte = now; + return false; + } + } + Improv.message = false; + TasmotaGlobal.seriallog_level = Improv.seriallog_level; // Restore seriallogging + return true; + } + return false; +} + +void ImprovEverySecond(void) { + if (Improv.wifi_timeout) { + Improv.wifi_timeout--; + if (Improv.wifi_timeout < IMPROV_WIFI_TIMEOUT -3) { // Tasmota restarts after ssid or password change + if ((!TasmotaGlobal.global_state.wifi_down)) { + Improv.wifi_timeout = 0; + if (IMPROV_STATE_AUTHORIZED == RtcSettings.improv_state) { + RtcSettings.improv_state = IMPROV_STATE_PROVISIONED; + } + if (IMPROV_STATE_PROVISIONING == RtcSettings.improv_state) { + ImprovSendState(IMPROV_STATE_PROVISIONED); + ImprovSendSetting(IMPROV_WIFI_SETTINGS); + } + return; + } + } + if (!Improv.wifi_timeout) { + if (IMPROV_STATE_PROVISIONING == RtcSettings.improv_state) { + ImprovSendError(IMPROV_ERROR_UNABLE_TO_CONNECT); // 0x03 - WiFi connect timeout + ImprovSendState(IMPROV_STATE_AUTHORIZED); + } + } + } +} + +void ImprovInit(void) { + if (!RtcSettings.improv_state) { + RtcSettings.improv_state = IMPROV_STATE_AUTHORIZED; // Power on state (persistent during restarts) + } + Improv.wifi_timeout = IMPROV_WIFI_TIMEOUT; // Try to update state after restart +#ifdef IMPROV_DEBUG + AddLog(LOG_LEVEL_DEBUG, PSTR("IMP: State %d"), RtcSettings.improv_state); +#endif // IMPROV_DEBUG +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xdrv62(uint8_t function) { + bool result = false; + + switch (function) { + case FUNC_EVERY_SECOND: + ImprovEverySecond(); + break; + case FUNC_SERIAL: + result = ImprovSerialInput(); + break; + case FUNC_PRE_INIT: + ImprovInit(); + break; + } + return result; +} + +#endif // USE_IMPROV diff --git a/tools/decode-status.py b/tools/decode-status.py index 5e08d08b8..e079eb5d4 100755 --- a/tools/decode-status.py +++ b/tools/decode-status.py @@ -191,7 +191,7 @@ a_setoption = [[ "(PWM) force PWM lights to start at same phase, default is to spread phases to minimze overlap (also needed for H-bridge)", "(Display & LVGL) force disabling default splash screen", "(TuyaSNS) When ON disable publish single SNS value on Tuya Receive (keep Teleperiod)", - "", + "(Tuya) When Set, avoid the (mqtt-) publish of Tuya MCU Heartbeat response if SetOption66 is active", "","","","", "","","","" ]] @@ -266,7 +266,7 @@ a_features = [[ "USE_HRG15","USE_VINDRIKTNING","USE_SCD40","USE_HM330X", "USE_HDC2010","USE_LSC_MCSL","USE_SONOFF_SPM","USE_SHIFT595", "USE_SDM230","USE_CM110x","USE_BL6523","USE_ADE7880", - "USE_PCF85363","USE_DS3502","","", + "USE_PCF85363","USE_DS3502","USE_IMPROV","", "","","","" ]] @@ -295,7 +295,7 @@ else: obj = json.load(fp) def StartDecode(): - print ("\n*** decode-status.py v11.0.0.4 by Theo Arends and Jacek Ziolkowski ***") + print ("\n*** decode-status.py v11.0.0.5 by Theo Arends and Jacek Ziolkowski ***") # print("Decoding\n{}".format(obj)) From 379c84a863ffb57e724c387fdf8e55208c0a80b3 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 2 Apr 2022 14:17:33 +0200 Subject: [PATCH 316/355] Fix improv possible string errors --- tasmota/xdrv_62_improv.ino | 49 +++++++++++++++----------------------- 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/tasmota/xdrv_62_improv.ino b/tasmota/xdrv_62_improv.ino index 32e86ba39..d47af859f 100644 --- a/tasmota/xdrv_62_improv.ino +++ b/tasmota/xdrv_62_improv.ino @@ -114,6 +114,21 @@ void ImprovSendResponse(uint8_t* response, uint32_t size) { data[7] = IMPROV_TYPE_RPC_RESPONSE; // 0x04 data[8] = size -1; memcpy(data +9, response, size); + data[10] = size -3; // Total length of strings following + + if (data[10]) { + // Replace '\n' (= lf) with string length + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... + // I M P R O V ve ty le co lf T a s m o t a lf 1 1 . 0 . 0 . 5 lf ... + // I M P R O V ve ty le co l1 T a s m o t a l2 1 1 . 0 . 0 . 5 lf ... + uint32_t str_pos = 11; + for (uint32_t i = 12; i < sizeof(data); i++) { + if ('\n' == data[i]) { + data[str_pos] = i - str_pos -1; // Replace lf with string length + str_pos = i; + } + } + } ImprovWriteData(data, sizeof(data)); } @@ -121,17 +136,10 @@ void ImprovSendSetting(uint32_t command) { char data[100]; uint32_t len = 0; #ifdef USE_WEBSERVER - len = ext_snprintf_P(data, sizeof(data), PSTR("01|http://%_I:%d|"), (uint32_t)WiFi.localIP(), WEB_PORT); - uint32_t str_pos = 2; - for (uint32_t i = 3; i < len; i++) { - if ('|' == data[i]) { - data[str_pos] = i - str_pos -1; - } - } + len = ext_snprintf_P(data, sizeof(data), PSTR("01\nhttp://%_I:%d\n"), (uint32_t)WiFi.localIP(), WEB_PORT); len -= 3; #endif // USE_WEBSERVER data[0] = command; - data[1] = len; ImprovSendResponse((uint8_t*)data, len +3); } @@ -207,18 +215,9 @@ bool ImprovParseSerialByte(void) { } case IMPROV_GET_DEVICE_INFO: { // 0x03 char data[200]; - uint32_t len = snprintf_P(data, sizeof(data), PSTR("01|Tasmota|%s|%s|%s|"), + uint32_t len = snprintf_P(data, sizeof(data), PSTR("01\nTasmota\n%s\n%s\n%s\n"), TasmotaGlobal.version, GetDeviceHardware().c_str(), SettingsText(SET_DEVICENAME)); data[0] = IMPROV_GET_DEVICE_INFO; - data[1] = len -3; - - uint32_t str_pos = 2; - for (uint32_t i = 3; i < len; i++) { - if ('|' == data[i]) { - data[str_pos] = i - str_pos -1; - str_pos = i; - } - } ImprovSendResponse((uint8_t*)data, len); break; } @@ -259,25 +258,15 @@ bool ImprovParseSerialByte(void) { if (!ssid_copy.length()) { ssid_copy = F("no_name"); } // Send each ssid separately to avoid overflowing the buffer - uint32_t len = snprintf_P(data, sizeof(data), PSTR("01|%s|%d|%s|"), ssid_copy.c_str(), rssi, (ENC_TYPE_NONE == WiFi.encryptionType(indices[i]))?"NO":"YES"); + uint32_t len = snprintf_P(data, sizeof(data), PSTR("01\n%s\n%d\n%s\n"), ssid_copy.c_str(), rssi, (ENC_TYPE_NONE == WiFi.encryptionType(indices[i]))?"NO":"YES"); data[0] = IMPROV_GET_WIFI_NETWORKS; - data[1] = len -3; - - uint32_t str_pos = 2; - for (uint32_t i = 3; i < len; i++) { - if ('|' == data[i]) { - data[str_pos] = i - str_pos -1; - str_pos = i; - } - } ImprovSendResponse((uint8_t*)data, len); } } // Send empty response to signify the end of the list. data[0] = IMPROV_GET_WIFI_NETWORKS; - data[1] = 0; // Empty string - ImprovSendResponse((uint8_t*)data, 3); + ImprovSendResponse((uint8_t*)data, 3); // Empty string break; } /* From 2eca93e021c91ed27db6e3190eadc5ea5b8e1cdf Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 2 Apr 2022 15:04:10 +0200 Subject: [PATCH 317/355] Shrink improv --- tasmota/xdrv_62_improv.ino | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/tasmota/xdrv_62_improv.ino b/tasmota/xdrv_62_improv.ino index d47af859f..0a409549d 100644 --- a/tasmota/xdrv_62_improv.ino +++ b/tasmota/xdrv_62_improv.ino @@ -118,9 +118,9 @@ void ImprovSendResponse(uint8_t* response, uint32_t size) { if (data[10]) { // Replace '\n' (= lf) with string length - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... - // I M P R O V ve ty le co lf T a s m o t a lf 1 1 . 0 . 0 . 5 lf ... - // I M P R O V ve ty le co l1 T a s m o t a l2 1 1 . 0 . 0 . 5 lf ... + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... + // I M P R O V ve ty le co pl lf T a s m o t a lf 1 1 . 0 . 0 . 5 lf ... + // I M P R O V ve ty le co pl l1 T a s m o t a l2 1 1 . 0 . 0 . 5 lf ... uint32_t str_pos = 11; for (uint32_t i = 12; i < sizeof(data); i++) { if ('\n' == data[i]) { @@ -144,9 +144,9 @@ void ImprovSendSetting(uint32_t command) { } bool ImprovParseSerialByte(void) { - // 0 1 2 3 4 5 6 7 8 9 8 + le +1 - // I M P R O V ve ty le data ... \n - // 49 4D 50 52 4F 56 01 xx yy ........ 0A + // 0 1 2 3 4 5 6 7 8 9 10 11 8 + le +1 + // I M P R O V ve ty le co pl data ... \n + // 49 4D 50 52 4F 56 01 03 xx yy zz ........ 0A if (6 == TasmotaGlobal.serial_in_byte_counter) { return (IMPROV_SERIAL_VERSION == TasmotaGlobal.serial_in_byte); } @@ -225,12 +225,9 @@ bool ImprovParseSerialByte(void) { char data[200]; int n = WiFi.scanNetworks(); if (n) { - // Sort networks int indices[n]; - for (uint32_t i = 0; i < n; i++) { - indices[i] = i; - } - // RSSI SORT + // Sort RSSI - strongest first + for (uint32_t i = 0; i < n; i++) { indices[i] = i; } for (uint32_t i = 0; i < n; i++) { for (uint32_t j = i + 1; j < n; j++) { if (WiFi.RSSI(indices[j]) > WiFi.RSSI(indices[i])) { @@ -238,27 +235,29 @@ bool ImprovParseSerialByte(void) { } } } - // Remove duplicates ( must be RSSI sorted ) + // Remove duplicate SSIDs - IMPROV does not distinguish between channels so no need to keep them for (uint32_t i = 0; i < n; i++) { if (-1 == indices[i]) { continue; } String cssid = WiFi.SSID(indices[i]); - uint32_t cschn = WiFi.channel(indices[i]); +// uint32_t cschn = WiFi.channel(indices[i]); for (uint32_t j = i + 1; j < n; j++) { - if ((cssid == WiFi.SSID(indices[j])) && (cschn == WiFi.channel(indices[j]))) { - indices[j] = -1; // set dup aps to index -1 +// if ((cssid == WiFi.SSID(indices[j])) && (cschn == WiFi.channel(indices[j]))) { + if (cssid == WiFi.SSID(indices[j])) { + indices[j] = -1; // Set dup aps to index -1 } } } - // Send networks for (uint32_t i = 0; i < n; i++) { if (-1 == indices[i]) { continue; } // Skip dups - int32_t rssi = WiFi.RSSI(indices[i]); String ssid_copy = WiFi.SSID(indices[i]); if (!ssid_copy.length()) { ssid_copy = F("no_name"); } + int32_t rssi = WiFi.RSSI(indices[i]); + bool encryption = (ENC_TYPE_NONE == WiFi.encryptionType(indices[i])); // Send each ssid separately to avoid overflowing the buffer - uint32_t len = snprintf_P(data, sizeof(data), PSTR("01\n%s\n%d\n%s\n"), ssid_copy.c_str(), rssi, (ENC_TYPE_NONE == WiFi.encryptionType(indices[i]))?"NO":"YES"); + uint32_t len = snprintf_P(data, sizeof(data), PSTR("01\n%s\n%d\n%s\n"), + ssid_copy.c_str(), rssi, (encryption)?"NO":"YES"); data[0] = IMPROV_GET_WIFI_NETWORKS; ImprovSendResponse((uint8_t*)data, len); } From 30eebf9f31bc59d674b5e15464b5c7bd10ea3cd5 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 2 Apr 2022 16:09:18 +0200 Subject: [PATCH 318/355] Hide hidden networks for improv --- tasmota/xdrv_62_improv.ino | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tasmota/xdrv_62_improv.ino b/tasmota/xdrv_62_improv.ino index 0a409549d..f5e788bc1 100644 --- a/tasmota/xdrv_62_improv.ino +++ b/tasmota/xdrv_62_improv.ino @@ -79,7 +79,6 @@ void ImprovWriteData(uint8_t* data, uint32_t size) { AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("IMP: Send '%*_H'"), size, data); -// Serial.write(data, size); for (uint32_t i = 0; i < size; i++) { Serial.write(data[i]); } @@ -223,7 +222,7 @@ bool ImprovParseSerialByte(void) { } case IMPROV_GET_WIFI_NETWORKS: { // 0x04 char data[200]; - int n = WiFi.scanNetworks(); + int n = WiFi.scanNetworks(false, false); // Wait for scan result, hide hidden if (n) { int indices[n]; // Sort RSSI - strongest first @@ -254,7 +253,6 @@ bool ImprovParseSerialByte(void) { if (!ssid_copy.length()) { ssid_copy = F("no_name"); } int32_t rssi = WiFi.RSSI(indices[i]); bool encryption = (ENC_TYPE_NONE == WiFi.encryptionType(indices[i])); - // Send each ssid separately to avoid overflowing the buffer uint32_t len = snprintf_P(data, sizeof(data), PSTR("01\n%s\n%d\n%s\n"), ssid_copy.c_str(), rssi, (encryption)?"NO":"YES"); From d2e8ca4a25d056417e67bc0bd19271c601ca22b1 Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Sun, 3 Apr 2022 06:22:00 +0200 Subject: [PATCH 319/355] console: keep cursor at the end of command input move the text cursor to the end of the command input when filling the console command from history using JavsScript. this hopefully is more convenient to most users and is similar to the behavior of a desktop terminal. --- tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h | 19 +++++++++++-------- .../html_uncompressed/HTTP_SCRIPT_CONSOL.h | 8 +++++++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h index b57f5f78f..e43426c6f 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h @@ -2,7 +2,7 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_CONSOL_SIZE = 952; +const size_t HTTP_SCRIPT_CONSOL_SIZE = 1046; const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x3A\x8B\x44\x3E\x1C\x67\x51\x18\xA3\xA8\x2A\x2B\x1A\x7C" "\x3E\x84\x3C\x18\x17\xC1\xD6\xE7\x20\x8E\xE8\xC3\xBC\x7B\x4C\xEF\xE8\x33\xAB\x0F" "\x87\xD9\xF6\x78\x0C\x27\x7F\x2A\x2B\xD1\xAF\x05\xD1\xDD\x0A\x8E\xF0\x24\xCD\x31" @@ -30,12 +30,15 @@ const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x "\x09\x83\xFC\x7D\x9D\x40\x89\xC7\xF3\x04\x1E\x37\x07\x02\x27\x38\xA7\x50\x67\xC6" "\x74\x34\x66\x44\x1E\x08\xCF\x1A\x60\xEE\x9C\xBF\x9F\x0F\x84\x19\xFE\x3F\xC7\x31" "\x9F\x0F\x84\x19\xDE\x3D\xA3\x8E\x96\x2E\xB0\x3C\x1A\x30\x27\x4C\xF8\x7D\xE1\x83" - "\x07\xD9\xE0\xF7\x1C\xBF\x9F\x0F\x84\x19\xDA\x3B\xA7\x6C\xED\x87\xC7\xE0\xA0\xC1" - "\x0B\x8C\xD3\xF4\x7E\x8E\xE8\x7C\x7C\x04\x49\x67\x78\xEA\x1C\x08\x5C\x80\x8A\x0C" - "\xF7\x83\xE3\xAC\xE4\x3D\xF3\xFC\x7F\x8F\xB3\xEC\xEF\x1E\x78\xCF\x87\xC2\x0C\xED" - "\x1D\xD3\x8C\xFC\x3A\xCE\xB2\x0F\x81\x07\x10\x38\xC8\x14\xF0\x83\x92\xCF\x87\xC2" - "\x0C\xFD\x1F\xA3\xBA\x08\x99\x89\xF8\x72\x23\xF4\x7E\x88\x50\x67\x41\x98\x30\xEE" - "\x9D\xE3\xA8\x50\x67\x41\x7C\x08\x3C\xAB\x82\x16\x38\x77\x8E\xA0\xF8\xF8\x71\x9D" - "\xE3\xDC\x77\x8F\x07\xB8\x87\xC2\x3B\xA2\x8E\xF1\xE0"; + "\x07\xD9\xE0\x11\xB8\x10\x04\x4C\xD0\x71\xDE\x3D\xA3\x8E\x86\x30\x31\x7E\x3B\xA7" + "\x78\xF0\x38\xE9\xE7\x45\xE6\x13\x0E\xB7\x38\xBF\x7C\x3C\xCE\xE8\xE0\x41\xE3\xA0" + "\x10\xB8\xFA\x3A\x90\x24\xCC\x3B\xC7\x83\xDC\x75\x23\x8C\xEA\x3B\x84\x38\xEF\x1E" + "\x0F\x71\xCB\xF9\xF0\xF8\x41\x9D\xA3\xBA\x76\xCE\xD8\x7C\x7E\x0A\x0C\x10\xAE\x9F" + "\xA3\xF4\x77\x43\xE3\xE0\x22\x4B\x3B\xC7\x50\x21\x63\x87\xC1\x41\x9E\xF0\x7C\x75" + "\x9C\x87\xBE\x7F\x8F\xF1\xF6\x7D\x9D\xE3\xCF\x19\xF0\xF8\x41\x9D\xA3\xBA\x71\x9F" + "\x87\x59\xD6\x41\xF0\x20\xE2\x07\x19\x02\x9E\x10\x72\x59\xF0\xF8\x41\x9F\xA3\xF4" + "\x77\x41\x13\x31\x3F\x0E\x44\x7E\x8F\xD1\x0A\x0C\xE8\x33\x06\x1D\xD3\xBC\x75\x0A" + "\x0C\xE8\x2F\x81\x07\x9B\x50\x42\xC7\x0E\xF1\xD4\x1F\x1F\x0E\x33\xBC\x7B\x8E\xF1" + "\xE0\xF7\x10\xF8\x47\x74\x51\xDE\x3C\x1B"; #define HTTP_SCRIPT_CONSOL Decompress(HTTP_SCRIPT_CONSOL_COMPRESSED,HTTP_SCRIPT_CONSOL_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h index bb5b47e69..543e7978f 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h @@ -45,7 +45,13 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM = // "if(!(navigator.maxTouchPoints||'ontouchstart'in document.documentElement)){eb('c1').autocomplete='off';}" // No touch so stop browser autocomplete "eb('c1').addEventListener('keydown',function(e){" "var b=eb('c1'),c=e.keyCode;" // c1 = Console command id - "if(38==c||40==c){b.autocomplete='off';}" // ArrowUp or ArrowDown must be a keyboard so stop browser autocomplete + "if(38==c||40==c){" // ArrowUp or ArrowDown + "b.autocomplete='off';" // ArrowUp or ArrowDown must be a keyboard so stop browser autocomplete + "setTimeout(function(b){" // for best compatibility (chrome) we need to schedule this function + "b.focus();" // for best compatibility (chrome) we need to (re)focus the input element + "b.setSelectionRange(b.value.length, b.value.length);" // move cursor to the end of the command inserted from history + "}, 0, b);" + "}" "38==c?(++cn>hc.length&&(cn=hc.length),b.value=hc[cn-1]||''):" // ArrowUp "40==c?(0>--cn&&(cn=0),b.value=hc[cn-1]||''):" // ArrowDown "13==c&&(hc.length>19&&hc.pop(),hc.unshift(b.value),cn=0)" // Enter, 19 = Max number -1 of commands in history From 23495b967d6bc98efa6025ddb24100267df6ead8 Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Sun, 3 Apr 2022 09:54:02 +0200 Subject: [PATCH 320/355] console cursor: remove useless spaces in JS code --- tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h | 18 +++++++++--------- tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h index e43426c6f..4a98a7b30 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h @@ -2,7 +2,7 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_CONSOL_SIZE = 1046; +const size_t HTTP_SCRIPT_CONSOL_SIZE = 1043; const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x3A\x8B\x44\x3E\x1C\x67\x51\x18\xA3\xA8\x2A\x2B\x1A\x7C" "\x3E\x84\x3C\x18\x17\xC1\xD6\xE7\x20\x8E\xE8\xC3\xBC\x7B\x4C\xEF\xE8\x33\xAB\x0F" "\x87\xD9\xF6\x78\x0C\x27\x7F\x2A\x2B\xD1\xAF\x05\xD1\xDD\x0A\x8E\xF0\x24\xCD\x31" @@ -32,13 +32,13 @@ const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x "\x9F\x0F\x84\x19\xDE\x3D\xA3\x8E\x96\x2E\xB0\x3C\x1A\x30\x27\x4C\xF8\x7D\xE1\x83" "\x07\xD9\xE0\x11\xB8\x10\x04\x4C\xD0\x71\xDE\x3D\xA3\x8E\x86\x30\x31\x7E\x3B\xA7" "\x78\xF0\x38\xE9\xE7\x45\xE6\x13\x0E\xB7\x38\xBF\x7C\x3C\xCE\xE8\xE0\x41\xE3\xA0" - "\x10\xB8\xFA\x3A\x90\x24\xCC\x3B\xC7\x83\xDC\x75\x23\x8C\xEA\x3B\x84\x38\xEF\x1E" - "\x0F\x71\xCB\xF9\xF0\xF8\x41\x9D\xA3\xBA\x76\xCE\xD8\x7C\x7E\x0A\x0C\x10\xAE\x9F" - "\xA3\xF4\x77\x43\xE3\xE0\x22\x4B\x3B\xC7\x50\x21\x63\x87\xC1\x41\x9E\xF0\x7C\x75" - "\x9C\x87\xBE\x7F\x8F\xF1\xF6\x7D\x9D\xE3\xCF\x19\xF0\xF8\x41\x9D\xA3\xBA\x71\x9F" - "\x87\x59\xD6\x41\xF0\x20\xE2\x07\x19\x02\x9E\x10\x72\x59\xF0\xF8\x41\x9F\xA3\xF4" - "\x77\x41\x13\x31\x3F\x0E\x44\x7E\x8F\xD1\x0A\x0C\xE8\x33\x06\x1D\xD3\xBC\x75\x0A" - "\x0C\xE8\x2F\x81\x07\x9B\x50\x42\xC7\x0E\xF1\xD4\x1F\x1F\x0E\x33\xBC\x7B\x8E\xF1" - "\xE0\xF7\x10\xF8\x47\x74\x51\xDE\x3C\x1B"; + "\x10\xB8\xFA\x3A\x81\x26\x59\xDE\x3C\x1E\xE3\xA8\xE3\x3A\x88\x71\xDE\x3C\x1E\xE3" + "\x97\xF3\xE1\xF0\x83\x3B\x47\x74\xED\x9D\xB0\xF8\xFC\x14\x18\x21\x5B\x3F\x47\xE8" + "\xEE\x87\xC7\xC0\x44\x96\x77\x81\x0F\x1A\x3E\x0A\x0C\xF7\x83\xE3\xAC\xE4\x3D\xF3" + "\xFC\x7F\x8F\xB3\xEC\xEF\x1E\x78\xCF\x87\xC2\x0C\xED\x1D\xD3\x8C\xFC\x3A\xCE\xB2" + "\x0F\x81\x07\x10\x38\xC8\x14\xF0\x83\x92\xCF\x87\xC2\x0C\xFD\x1F\xA3\xBA\x08\x99" + "\x89\xF8\x72\x23\xF4\x7E\x88\x50\x67\x41\x98\x30\xEE\x9D\xE3\xA8\x50\x67\x41\x7C" + "\x08\x3C\xD9\x02\x16\x38\x77\x8E\xA0\xF8\xF8\x71\x9D\xE3\xDC\x77\x8F\x07\xB8\x87" + "\xC2\x3B\xA2\x8E\xF1\xE0"; #define HTTP_SCRIPT_CONSOL Decompress(HTTP_SCRIPT_CONSOL_COMPRESSED,HTTP_SCRIPT_CONSOL_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h index 543e7978f..a966adc39 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h @@ -49,8 +49,8 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM = "b.autocomplete='off';" // ArrowUp or ArrowDown must be a keyboard so stop browser autocomplete "setTimeout(function(b){" // for best compatibility (chrome) we need to schedule this function "b.focus();" // for best compatibility (chrome) we need to (re)focus the input element - "b.setSelectionRange(b.value.length, b.value.length);" // move cursor to the end of the command inserted from history - "}, 0, b);" + "b.setSelectionRange(b.value.length,b.value.length);" // move cursor to the end of the command inserted from history + "},0,b);" "}" "38==c?(++cn>hc.length&&(cn=hc.length),b.value=hc[cn-1]||''):" // ArrowUp "40==c?(0>--cn&&(cn=0),b.value=hc[cn-1]||''):" // ArrowDown From 5382579bff0de330a67a753952e7c885c2364b57 Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Sun, 3 Apr 2022 10:04:55 +0200 Subject: [PATCH 321/355] console cursor: use absolute cursor position instead of moving the cursor to the end by using the input field value's length, we move it to position 1e9, which will certainly be beyond the end of the string. --- tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h | 20 +++++++++---------- .../html_uncompressed/HTTP_SCRIPT_CONSOL.h | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h index 4a98a7b30..e069bef65 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h @@ -2,7 +2,7 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_CONSOL_SIZE = 1043; +const size_t HTTP_SCRIPT_CONSOL_SIZE = 1021; const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x3A\x8B\x44\x3E\x1C\x67\x51\x18\xA3\xA8\x2A\x2B\x1A\x7C" "\x3E\x84\x3C\x18\x17\xC1\xD6\xE7\x20\x8E\xE8\xC3\xBC\x7B\x4C\xEF\xE8\x33\xAB\x0F" "\x87\xD9\xF6\x78\x0C\x27\x7F\x2A\x2B\xD1\xAF\x05\xD1\xDD\x0A\x8E\xF0\x24\xCD\x31" @@ -31,14 +31,14 @@ const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x "\x74\x34\x66\x44\x1E\x08\xCF\x1A\x60\xEE\x9C\xBF\x9F\x0F\x84\x19\xFE\x3F\xC7\x31" "\x9F\x0F\x84\x19\xDE\x3D\xA3\x8E\x96\x2E\xB0\x3C\x1A\x30\x27\x4C\xF8\x7D\xE1\x83" "\x07\xD9\xE0\x11\xB8\x10\x04\x4C\xD0\x71\xDE\x3D\xA3\x8E\x86\x30\x31\x7E\x3B\xA7" - "\x78\xF0\x38\xE9\xE7\x45\xE6\x13\x0E\xB7\x38\xBF\x7C\x3C\xCE\xE8\xE0\x41\xE3\xA0" - "\x10\xB8\xFA\x3A\x81\x26\x59\xDE\x3C\x1E\xE3\xA8\xE3\x3A\x88\x71\xDE\x3C\x1E\xE3" - "\x97\xF3\xE1\xF0\x83\x3B\x47\x74\xED\x9D\xB0\xF8\xFC\x14\x18\x21\x5B\x3F\x47\xE8" - "\xEE\x87\xC7\xC0\x44\x96\x77\x81\x0F\x1A\x3E\x0A\x0C\xF7\x83\xE3\xAC\xE4\x3D\xF3" - "\xFC\x7F\x8F\xB3\xEC\xEF\x1E\x78\xCF\x87\xC2\x0C\xED\x1D\xD3\x8C\xFC\x3A\xCE\xB2" - "\x0F\x81\x07\x10\x38\xC8\x14\xF0\x83\x92\xCF\x87\xC2\x0C\xFD\x1F\xA3\xBA\x08\x99" - "\x89\xF8\x72\x23\xF4\x7E\x88\x50\x67\x41\x98\x30\xEE\x9D\xE3\xA8\x50\x67\x41\x7C" - "\x08\x3C\xD9\x02\x16\x38\x77\x8E\xA0\xF8\xF8\x71\x9D\xE3\xDC\x77\x8F\x07\xB8\x87" - "\xC2\x3B\xA2\x8E\xF1\xE0"; + "\x78\xF0\x38\xE9\xE7\x45\xE6\x13\x0E\xB7\x38\xBF\x7C\x3C\xCE\xE9\xC8\x4C\xE2\x3A" + "\xA1\x33\x88\xEF\x1E\x0F\x71\xD4\xCE\xA2\x1C\x77\x8F\x07\xB8\xE5\xFC\xF8\x7C\x20" + "\xCE\xD1\xDD\x3B\x67\x6C\x3E\x3F\x05\x06\x08\x5C\x89\x1F\xA3\xF4\x77\x43\xE3\xE0" + "\x22\x4B\x3B\xC7\x50\xE0\x42\xE5\x18\x50\x67\xBC\x1F\x1D\x67\x21\xEF\x9F\xE3\xFC" + "\x7D\x9F\x67\x78\xF3\xC6\x7C\x3E\x10\x67\x68\xEE\x9C\x67\xE1\xD6\x75\x90\x7C\x08" + "\x38\x81\xC6\x40\xA7\x84\x1C\x96\x7C\x3E\x10\x67\xE8\xFD\x1D\xD0\x44\xCC\x4F\xC3" + "\x91\x1F\xA3\xF4\x42\x83\x3A\x0C\xC1\x87\x74\xEF\x1D\x42\x83\x3A\x0B\xE0\x41\xE6" + "\x70\x10\xB1\xC3\xBC\x75\x07\xC7\xC3\x8C\xEF\x1E\xE3\xBC\x78\x3D\xC4\x3E\x11\xDD" + "\x14\x77\x8F\x06"; #define HTTP_SCRIPT_CONSOL Decompress(HTTP_SCRIPT_CONSOL_COMPRESSED,HTTP_SCRIPT_CONSOL_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h index a966adc39..05ba67e48 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h @@ -49,7 +49,7 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM = "b.autocomplete='off';" // ArrowUp or ArrowDown must be a keyboard so stop browser autocomplete "setTimeout(function(b){" // for best compatibility (chrome) we need to schedule this function "b.focus();" // for best compatibility (chrome) we need to (re)focus the input element - "b.setSelectionRange(b.value.length,b.value.length);" // move cursor to the end of the command inserted from history + "b.setSelectionRange(1e9,1e9);" // move cursor to the end (hopefully) of the command inserted from history "},0,b);" "}" "38==c?(++cn>hc.length&&(cn=hc.length),b.value=hc[cn-1]||''):" // ArrowUp From 7ac91d4e341e7184d25116ed06689f151ce0293b Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Sun, 3 Apr 2022 10:16:55 +0200 Subject: [PATCH 322/355] console cursor: use lambda function --- tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h | 22 +++++++++---------- .../html_uncompressed/HTTP_SCRIPT_CONSOL.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h index e069bef65..017317db0 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h @@ -2,7 +2,7 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_CONSOL_SIZE = 1021; +const size_t HTTP_SCRIPT_CONSOL_SIZE = 1013; const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x3A\x8B\x44\x3E\x1C\x67\x51\x18\xA3\xA8\x2A\x2B\x1A\x7C" "\x3E\x84\x3C\x18\x17\xC1\xD6\xE7\x20\x8E\xE8\xC3\xBC\x7B\x4C\xEF\xE8\x33\xAB\x0F" "\x87\xD9\xF6\x78\x0C\x27\x7F\x2A\x2B\xD1\xAF\x05\xD1\xDD\x0A\x8E\xF0\x24\xCD\x31" @@ -30,15 +30,15 @@ const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x "\x09\x83\xFC\x7D\x9D\x40\x89\xC7\xF3\x04\x1E\x37\x07\x02\x27\x38\xA7\x50\x67\xC6" "\x74\x34\x66\x44\x1E\x08\xCF\x1A\x60\xEE\x9C\xBF\x9F\x0F\x84\x19\xFE\x3F\xC7\x31" "\x9F\x0F\x84\x19\xDE\x3D\xA3\x8E\x96\x2E\xB0\x3C\x1A\x30\x27\x4C\xF8\x7D\xE1\x83" - "\x07\xD9\xE0\x11\xB8\x10\x04\x4C\xD0\x71\xDE\x3D\xA3\x8E\x86\x30\x31\x7E\x3B\xA7" - "\x78\xF0\x38\xE9\xE7\x45\xE6\x13\x0E\xB7\x38\xBF\x7C\x3C\xCE\xE9\xC8\x4C\xE2\x3A" - "\xA1\x33\x88\xEF\x1E\x0F\x71\xD4\xCE\xA2\x1C\x77\x8F\x07\xB8\xE5\xFC\xF8\x7C\x20" - "\xCE\xD1\xDD\x3B\x67\x6C\x3E\x3F\x05\x06\x08\x5C\x89\x1F\xA3\xF4\x77\x43\xE3\xE0" - "\x22\x4B\x3B\xC7\x50\xE0\x42\xE5\x18\x50\x67\xBC\x1F\x1D\x67\x21\xEF\x9F\xE3\xFC" - "\x7D\x9F\x67\x78\xF3\xC6\x7C\x3E\x10\x67\x68\xEE\x9C\x67\xE1\xD6\x75\x90\x7C\x08" - "\x38\x81\xC6\x40\xA7\x84\x1C\x96\x7C\x3E\x10\x67\xE8\xFD\x1D\xD0\x44\xCC\x4F\xC3" - "\x91\x1F\xA3\xF4\x42\x83\x3A\x0C\xC1\x87\x74\xEF\x1D\x42\x83\x3A\x0B\xE0\x41\xE6" - "\x70\x10\xB1\xC3\xBC\x75\x07\xC7\xC3\x8C\xEF\x1E\xE3\xBC\x78\x3D\xC4\x3E\x11\xDD" - "\x14\x77\x8F\x06"; + "\x07\xD9\xE0\x11\xB8\x10\x1C\x7C\x3F\x0F\x68\xE3\xA1\x8C\x0C\x5F\x8E\xE9\xDE\x3C" + "\x0E\x3A\x79\xD1\x79\x84\xC3\xAD\xCE\x2F\xDF\x0F\x33\xBA\x72\x13\x38\x8E\xA8\x4C" + "\xE2\x3B\xC7\x83\xDC\x75\x33\xA8\x87\x1D\xE3\xC1\xEE\x39\x7F\x3E\x1F\x08\x33\xB4" + "\x77\x4E\xD9\xDB\x0F\x8F\xC1\x41\x82\x17\x21\x47\xE8\xFD\x1D\xD0\xF8\xF8\x08\x92" + "\xCE\xF1\xD4\x38\x10\xB9\x3E\x14\x19\xEF\x07\xC7\x59\xC8\x7B\xE7\xF8\xFF\x1F\x67" + "\xD9\xDE\x3C\xF1\x9F\x0F\x84\x19\xDA\x3B\xA7\x19\xF8\x75\x9D\x64\x1F\x02\x0E\x20" + "\x71\x90\x29\xE1\x07\x25\x9F\x0F\x84\x19\xFA\x3F\x47\x74\x11\x33\x13\xF0\xE4\x47" + "\xE8\xFD\x10\xA0\xCE\x83\x30\x61\xDD\x3B\xC7\x50\xA0\xCE\x82\xF8\x10\x79\x94\x04" + "\x2C\x70\xEF\x1D\x41\xF1\xF0\xE3\x3B\xC7\xB8\xEF\x1E\x0F\x71\x0F\x84\x77\x45\x1D" + "\xE3\xC1"; #define HTTP_SCRIPT_CONSOL Decompress(HTTP_SCRIPT_CONSOL_COMPRESSED,HTTP_SCRIPT_CONSOL_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h index 05ba67e48..1cd7341d4 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h @@ -47,7 +47,7 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM = "var b=eb('c1'),c=e.keyCode;" // c1 = Console command id "if(38==c||40==c){" // ArrowUp or ArrowDown "b.autocomplete='off';" // ArrowUp or ArrowDown must be a keyboard so stop browser autocomplete - "setTimeout(function(b){" // for best compatibility (chrome) we need to schedule this function + "setTimeout(b=>{" // for best compatibility (chrome) we need to schedule this function "b.focus();" // for best compatibility (chrome) we need to (re)focus the input element "b.setSelectionRange(1e9,1e9);" // move cursor to the end (hopefully) of the command inserted from history "},0,b);" From c9f428a4f6b4f8b0010249ec94caba2f432063c5 Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Sun, 3 Apr 2022 10:56:54 +0200 Subject: [PATCH 323/355] console cursor: remove useless semicolons in JS code --- tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h | 17 ++++++++--------- tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h | 4 ++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h index 017317db0..25ffc036d 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h @@ -2,7 +2,7 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_CONSOL_SIZE = 1013; +const size_t HTTP_SCRIPT_CONSOL_SIZE = 1011; const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x3A\x8B\x44\x3E\x1C\x67\x51\x18\xA3\xA8\x2A\x2B\x1A\x7C" "\x3E\x84\x3C\x18\x17\xC1\xD6\xE7\x20\x8E\xE8\xC3\xBC\x7B\x4C\xEF\xE8\x33\xAB\x0F" "\x87\xD9\xF6\x78\x0C\x27\x7F\x2A\x2B\xD1\xAF\x05\xD1\xDD\x0A\x8E\xF0\x24\xCD\x31" @@ -32,13 +32,12 @@ const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x "\x9F\x0F\x84\x19\xDE\x3D\xA3\x8E\x96\x2E\xB0\x3C\x1A\x30\x27\x4C\xF8\x7D\xE1\x83" "\x07\xD9\xE0\x11\xB8\x10\x1C\x7C\x3F\x0F\x68\xE3\xA1\x8C\x0C\x5F\x8E\xE9\xDE\x3C" "\x0E\x3A\x79\xD1\x79\x84\xC3\xAD\xCE\x2F\xDF\x0F\x33\xBA\x72\x13\x38\x8E\xA8\x4C" - "\xE2\x3B\xC7\x83\xDC\x75\x33\xA8\x87\x1D\xE3\xC1\xEE\x39\x7F\x3E\x1F\x08\x33\xB4" - "\x77\x4E\xD9\xDB\x0F\x8F\xC1\x41\x82\x17\x21\x47\xE8\xFD\x1D\xD0\xF8\xF8\x08\x92" - "\xCE\xF1\xD4\x38\x10\xB9\x3E\x14\x19\xEF\x07\xC7\x59\xC8\x7B\xE7\xF8\xFF\x1F\x67" - "\xD9\xDE\x3C\xF1\x9F\x0F\x84\x19\xDA\x3B\xA7\x19\xF8\x75\x9D\x64\x1F\x02\x0E\x20" - "\x71\x90\x29\xE1\x07\x25\x9F\x0F\x84\x19\xFA\x3F\x47\x74\x11\x33\x13\xF0\xE4\x47" - "\xE8\xFD\x10\xA0\xCE\x83\x30\x61\xDD\x3B\xC7\x50\xA0\xCE\x82\xF8\x10\x79\x94\x04" - "\x2C\x70\xEF\x1D\x41\xF1\xF0\xE3\x3B\xC7\xB8\xEF\x1E\x0F\x71\x0F\x84\x77\x45\x1D" - "\xE3\xC1"; + "\xE2\x3B\xC7\xB8\xEA\x67\x51\x0E\x3B\xC7\xB8\xE5\xFC\xF8\x7C\x20\xCE\xD1\xDD\x3B" + "\x67\x6C\x3E\x3F\x05\x06\x08\x5C\x84\x1F\xA3\xF4\x77\x43\xE3\xE0\x22\x4B\x3B\xC7" + "\x50\xE0\x42\xE4\xF0\x50\x67\xBC\x1F\x1D\x67\x21\xEF\x9F\xE3\xFC\x7D\x9F\x67\x78" + "\xF3\xC6\x7C\x3E\x10\x67\x68\xEE\x9C\x67\xE1\xD6\x75\x90\x7C\x08\x38\x81\xC6\x40" + "\xA7\x84\x1C\x96\x7C\x3E\x10\x67\xE8\xFD\x1D\xD0\x44\xCC\x4F\xC3\x91\x1F\xA3\xF4" + "\x42\x83\x3A\x0C\xC1\x87\x74\xEF\x1D\x42\x83\x3A\x0B\xE0\x41\xE6\x48\x10\xB1\xC3" + "\xBC\x75\x07\xC7\xC3\x8C\xEF\x1E\xE3\xBC\x78\x3D\xC4\x3E\x11\xDD\x14\x77\x8F\x06"; #define HTTP_SCRIPT_CONSOL Decompress(HTTP_SCRIPT_CONSOL_COMPRESSED,HTTP_SCRIPT_CONSOL_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h index 1cd7341d4..d7c83c085 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h @@ -49,8 +49,8 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM = "b.autocomplete='off';" // ArrowUp or ArrowDown must be a keyboard so stop browser autocomplete "setTimeout(b=>{" // for best compatibility (chrome) we need to schedule this function "b.focus();" // for best compatibility (chrome) we need to (re)focus the input element - "b.setSelectionRange(1e9,1e9);" // move cursor to the end (hopefully) of the command inserted from history - "},0,b);" + "b.setSelectionRange(1e9,1e9)" // move cursor to the end (hopefully) of the command inserted from history + "},0,b)" "}" "38==c?(++cn>hc.length&&(cn=hc.length),b.value=hc[cn-1]||''):" // ArrowUp "40==c?(0>--cn&&(cn=0),b.value=hc[cn-1]||''):" // ArrowDown From 09a4c62feebd960b68aee88341e82f1cde61cbf7 Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Sun, 3 Apr 2022 12:30:07 +0200 Subject: [PATCH 324/355] javascript: use arrow functions where possible replacing anonymous functions by arrow functions saves 40 Bytes of JavaScript code. --- tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h | 53 ++++++++++--------- .../HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h | 28 +++++----- .../HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h | 30 +++++------ .../HTTP_SCRIPT_ROOT_WEB_DISPLAY.h | 42 +++++++-------- .../html_compressed/HTTP_SCRIPT_TEMPLATE.h | 24 ++++----- .../html_uncompressed/HTTP_SCRIPT_CONSOL.h | 4 +- .../HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h | 2 +- .../HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h | 2 +- .../HTTP_SCRIPT_ROOT_WEB_DISPLAY.h | 2 +- .../html_uncompressed/HTTP_SCRIPT_TEMPLATE.h | 2 +- 10 files changed, 95 insertions(+), 94 deletions(-) diff --git a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h index 25ffc036d..1514db08a 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h @@ -2,7 +2,7 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_CONSOL_SIZE = 1011; +const size_t HTTP_SCRIPT_CONSOL_SIZE = 997; const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x3A\x8B\x44\x3E\x1C\x67\x51\x18\xA3\xA8\x2A\x2B\x1A\x7C" "\x3E\x84\x3C\x18\x17\xC1\xD6\xE7\x20\x8E\xE8\xC3\xBC\x7B\x4C\xEF\xE8\x33\xAB\x0F" "\x87\xD9\xF6\x78\x0C\x27\x7F\x2A\x2B\xD1\xAF\x05\xD1\xDD\x0A\x8E\xF0\x24\xCD\x31" @@ -14,30 +14,31 @@ const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x "\x41\x1A\x61\xF8\x7C\xF7\x1D\xE3\xDB\xA6\x0E\xE9\xB0\xFE\x1F\x38\x58\x41\x1D\xE3" "\xDA\x6C\x3A\x58\xEC\xFD\x1D\xD3\xBC\x78\x3D\xC6\xC3\xE7\x31\xF4\x46\xC2\x1A\x41" "\x10\xAA\xA1\x85\xF6\x6A\x16\xFD\x47\x74\xEF\x1E\x0D\x87\x4C\xEF\xBB\x10\xCB\xD5" - "\x74\xC3\x15\x7C\x3C\xCF\x80\x87\xC3\x11\xDD\x04\x1C\xA8\xE9\xF7\x62\x19\x17\xAA" - "\xE9\x9F\x0F\x87\x30\xFD\x1F\xA2\x36\x1D\x3D\x57\x42\xFC\x7C\x3E\x1C\xA6\xC8\x10" - "\x78\x82\x36\x9D\x42\x1E\x04\x3E\x1B\x0E\x9F\x7E\x19\x9D\xE6\x54\xCD\x94\x74\xF0" - "\xC0\xB6\x8E\xE9\xD8\x7B\x8E\x43\xB0\xEF\x1E\x0B\x44\x3E\x08\x74\xF0\xAD\x31\x47" - "\x74\xEF\x1E\x34\xC1\xDD\x04\x49\x27\xC3\xE1\xC6\x77\x8F\x69\x50\x22\xF0\xA8\x7B" - "\x8D\xA0\x93\x82\x9B\x4E\x81\x3E\x1E\xA1\x47\xE0\x22\xE0\x67\x6C\xF8\x6D\x3C\x1E" - "\xE0\x5F\xE1\xF0\x13\x39\x2A\x01\x0A\x8F\x9E\x74\x08\x9C\x91\x9D\x41\x50\xD3\xBC" - "\x78\x3D\xC7\xB8\xF0\x6C\x3A\x60\xC7\xC7\x74\xFB\x21\xE2\x65\x47\xD9\xD4\x7D\x87" - "\xE3\xB4\x19\xCA\x3E\x1F\x67\x6C\xB4\x43\xB7\x87\x55\x7C\x5B\x3B\xC7\x83\x61\xD3" - "\xCF\x84\x3B\xA7\x78\xF0\x60\x12\xB1\xE3\x94\xDB\x67\x78\xF0\x7B\x89\x85\xE6\x7B" - "\x41\x47\x3B\xFB\xA1\x7F\xE4\x62\xC2\xF3\x3C\x1E\xE1\xF0\x8E\xE8\x47\x78\xF0\x67" - "\x7F\x42\x83\x3E\x1E\xF1\xEF\x9D\x41\xF1\xF0\xE3\x20\x45\xE7\x4C\x51\xDD\x3B\xC7" - "\xB4\x10\xF9\x8F\x3A\x58\x82\x13\x33\x7D\x44\x16\xFA\x9F\x3F\x9D\xD3\xEC\xD1\x99" - "\x09\x83\xFC\x7D\x9D\x40\x89\xC7\xF3\x04\x1E\x37\x07\x02\x27\x38\xA7\x50\x67\xC6" - "\x74\x34\x66\x44\x1E\x08\xCF\x1A\x60\xEE\x9C\xBF\x9F\x0F\x84\x19\xFE\x3F\xC7\x31" - "\x9F\x0F\x84\x19\xDE\x3D\xA3\x8E\x96\x2E\xB0\x3C\x1A\x30\x27\x4C\xF8\x7D\xE1\x83" - "\x07\xD9\xE0\x11\xB8\x10\x1C\x7C\x3F\x0F\x68\xE3\xA1\x8C\x0C\x5F\x8E\xE9\xDE\x3C" - "\x0E\x3A\x79\xD1\x79\x84\xC3\xAD\xCE\x2F\xDF\x0F\x33\xBA\x72\x13\x38\x8E\xA8\x4C" - "\xE2\x3B\xC7\xB8\xEA\x67\x51\x0E\x3B\xC7\xB8\xE5\xFC\xF8\x7C\x20\xCE\xD1\xDD\x3B" - "\x67\x6C\x3E\x3F\x05\x06\x08\x5C\x84\x1F\xA3\xF4\x77\x43\xE3\xE0\x22\x4B\x3B\xC7" - "\x50\xE0\x42\xE4\xF0\x50\x67\xBC\x1F\x1D\x67\x21\xEF\x9F\xE3\xFC\x7D\x9F\x67\x78" - "\xF3\xC6\x7C\x3E\x10\x67\x68\xEE\x9C\x67\xE1\xD6\x75\x90\x7C\x08\x38\x81\xC6\x40" - "\xA7\x84\x1C\x96\x7C\x3E\x10\x67\xE8\xFD\x1D\xD0\x44\xCC\x4F\xC3\x91\x1F\xA3\xF4" - "\x42\x83\x3A\x0C\xC1\x87\x74\xEF\x1D\x42\x83\x3A\x0B\xE0\x41\xE6\x48\x10\xB1\xC3" - "\xBC\x75\x07\xC7\xC3\x8C\xEF\x1E\xE3\xBC\x78\x3D\xC4\x3E\x11\xDD\x14\x77\x8F\x06"; + "\x74\xC3\x15\x7C\x3C\xCF\x87\x74\xEF\x1F\x0F\xC3\xDB\xA6\x0E\xE9\xB0\xE9\xF7\x62" + "\x19\x17\xAA\xE9\x9F\x0F\x87\x30\xFD\x1F\xA2\x36\x1D\x3D\x57\x42\xFC\x7C\x3E\x1C" + "\xA6\xC8\x10\x78\x7C\x36\x9D\x42\x1E\x04\x3E\x1B\x0E\x9F\x7E\x19\x9D\xE6\x54\xCD" + "\x94\x74\xF0\xC0\xB6\x8E\xE9\xD8\x7B\x8E\x43\xB0\xEF\x1E\x0B\x44\x3E\x08\x74\xF0" + "\xAD\x31\x47\x74\xEF\x1E\x34\xC1\xDD\x04\x49\x27\xC3\xE1\xC6\x77\x8F\x69\x50\x22" + "\xF0\x9C\x7B\x8D\xA0\x93\x82\x9B\x4E\x81\x3E\x1E\xA1\x47\xE0\x22\xE0\x67\x6C\xF8" + "\x6D\x3C\x1E\xE0\x5F\xE1\xD8\x13\x38\xFA\x0A\x8F\x9E\x74\x08\x9C\x8E\x9D\x41\x50" + "\xD3\xBC\x78\x3D\xC7\xB8\xF0\x6C\x3A\x60\xC7\xC7\x74\xFB\x21\xE2\x65\x47\xD9\xD4" + "\x7D\x87\xE3\xB4\x19\xCA\x3E\x1F\x67\x6C\xB4\x43\xB7\x87\x55\x7C\x5B\x3B\xC7\x83" + "\x61\xD3\xCF\x84\x3B\xA7\x78\xF0\x60\x12\xB1\xE3\x94\xDB\x67\x78\xF0\x7B\x89\x85" + "\xE6\x7B\x41\x47\x3B\xFB\xA1\x7F\xE4\x62\xC2\xF3\x3C\x1E\xE1\xF0\x8E\xE8\x47\x78" + "\xF0\x67\x7F\x42\x83\x3E\x1E\xF1\xEF\x9D\x41\xF1\xF0\xE3\x20\x45\xE7\x34\x51\xDD" + "\x3B\xC7\xB4\x10\xF9\x89\x3A\x58\x82\x13\x33\x7D\x44\x16\xFA\x9F\x3F\x9D\xD3\xEC" + "\xD1\x99\x09\x83\xFC\x7D\x9D\x4C\xF8\x7E\x1E\xD3\x3B\xFA\x1C\x08\x9C\xDB\x9D\x41" + "\x9F\x19\xD0\xD1\x99\x10\x78\x23\x3C\x69\x83\xBA\x72\xFE\x7C\x3E\x10\x67\xF8\xFF" + "\x1C\xC6\x7C\x3E\x10\x67\x78\xF6\x8E\x3A\x58\xBA\xC0\xF0\x68\xC0\x9D\x33\xE1\xF7" + "\x86\x0C\x1F\x67\x80\x46\xE0\x20\x71\xF0\xFC\x3D\xA3\x8E\x86\x30\x31\x7E\x3B\xA7" + "\x78\xF0\x38\xE9\xE7\x45\xE6\x13\x0E\xB7\x38\xBF\x7C\x3C\xCE\xE9\xC8\x4C\xE2\x3A" + "\xA1\x33\x88\xEF\x1E\xE3\xA9\x9D\x44\x38\xEF\x1E\xE3\x97\xF3\xE1\xF0\x83\x3B\x47" + "\x74\xED\x9D\xB0\xF8\xFC\x14\x18\x21\x72\x2A\x01\x7E\x8F\xD1\xDD\x0F\x8F\x80\x89" + "\x2C\xEF\x1D\x43\x81\x0B\x93\x41\x41\x9E\xF0\x7C\x75\x9C\x87\xBE\x7F\x8F\xF1\xF6" + "\x7D\x9D\xE3\xCF\x19\xF0\xF8\x41\x9D\xA3\xBA\x71\x9F\x87\x59\xD6\x41\xF0\x20\xE2" + "\x07\x19\x02\x9E\x10\x72\x59\xF0\xF8\x41\x9F\xA3\xF4\x77\x41\x13\x31\x3F\x0E\x44" + "\x7E\x8F\xD1\x0A\x0C\xE8\x33\x06\x1D\xD3\xBC\x75\x0A\x0C\xE8\x2F\x81\x07\x98\xA0" + "\x42\xC7\x0E\xF1\xD4\x1F\x1F\x0E\x33\xBC\x7B\x8E\xF1\xE0\xF7\x10\xF8\x47\x74\x51" + "\xDE\x3C\x1B"; #define HTTP_SCRIPT_CONSOL Decompress(HTTP_SCRIPT_CONSOL_COMPRESSED,HTTP_SCRIPT_CONSOL_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h index 9c3b1354c..d0e524929 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h @@ -2,24 +2,24 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_ROOT_SIZE = 507; +const size_t HTTP_SCRIPT_ROOT_SIZE = 501; const char HTTP_SCRIPT_ROOT_COMPRESSED[] PROGMEM = "\x33\xBF\xA3\x14\x78\x30\x2F\x83\xAD\xCE\x41\x59\xDD\x18\x77\x8F\x6D\x9F\x06\x1F" "\xE3\xFC\x7D\x9F\x67\x80\xC2\x77\xF2\xAD\x1A\xF0\x5D\x1D\xD3\x14\x77\x81\x26\x68" "\x54\x77\x8F\x1A\x60\xEE\x9B\x0F\xE1\xF3\x85\x84\x11\xDE\x3D\xA6\xC3\xA5\x8E\xCF" "\xD1\xDD\x3B\xC7\xB8\xD8\x7C\xE6\x3E\x88\xD8\x43\x48\x22\x15\x54\x30\xBE\xCD\x42" "\xDF\xA8\xEE\x9D\xE3\xC1\xB0\xE9\x9D\xF7\x62\x19\x7A\xAE\x98\x62\xAF\x87\x99\xF0" - "\x10\xF5\x73\xBA\x77\x8F\x6E\x98\x3B\xA6\xC3\xA7\xDD\x88\x64\x5E\xAB\xA6\x7C\x3E" - "\x1C\xC3\xF4\x7E\x88\xD8\x74\xF5\x5D\x0B\xF1\xF0\xF8\x72\x9B\x3B\xC7\xB4\x8C\xEF" - "\xEB\xC7\xC3\x61\xD3\xEF\xC3\x33\xBC\xCA\x99\xB2\x8E\x9F\x63\x02\xB0\xD9\xDD\x3B" - "\x0F\x6D\x1E\xE3\xB0\x78\xEA\x3D\x87\xA5\x58\xE0\x9A\xF5\x19\x04\xCF\x87\xD8\xFE" - "\x89\x42\x8F\x33\x91\xB3\xE8\xFA\x3E\xCF\xC3\xD8\x77\x88\x11\xB0\xAF\x02\x16\x15" - "\xF3\xF0\xF4\xA1\x40\x93\x5C\x68\x20\xD7\x3B\x28\x51\xF8\x7A\x50\x80\x93\x93\x9C" - "\xA6\x43\x0D\x87\x81\xF1\x5B\x4C\xEB\xF0\xCB\x0D\x9E\x7D\x83\xFF\xB1\x80\x95\x9C" - "\xB0\x43\xC7\x84\x3F\x0F\x43\xB2\xBE\x7E\x1E\xC3\xBC\x78\x63\x8E\xE9\xF6\x11\xC8" - "\x7D\x9D\xE3\xA1\x6F\x73\xF9\x0A\x2A\x2B\x21\xA4\x11\xF3\xC0\xBD\xC6\x2A\x01\x54" - "\x7C\xF3\xA0\x44\x9D\x67\x51\xF4\x21\xDE\x3C\x1E\xE3\xDC\x78\x36\x1D\x30\x63\xE3" - "\xBA\x7D\x90\xF1\x32\xA3\xEC\xEA\x3E\xCE\x87\x68\x69\xF0\xE4\x3E\xCE\xD9\x59\xD5" - "\x5F\x16\xCE\xF1\xE0\xD8\x74\xF3\xE1\x0E\xE9\xDE\x3C\x18\x04\xBC\x68\xE5\x36\xD9" - "\xDE\x3C\x1E\xE3"; + "\xEE\x9D\xE3\xE1\xF8\x7B\x74\xC1\xDD\x36\x1D\x3E\xEC\x43\x22\xF5\x5D\x33\xE1\xF0" + "\xE6\x1F\xA3\xF4\x46\xC3\xA7\xAA\xE8\x5F\x8F\x87\xC3\x94\xD9\xDE\x3D\xA4\x67\x7F" + "\x5E\x3E\x1B\x0E\x9F\x7E\x19\x9D\xE6\x54\xCD\x94\x74\xFB\x18\x15\x86\xCE\xE9\xD8" + "\x7B\x68\xF7\x1D\x83\xC7\x51\xEC\x3D\x2A\x2B\xC7\x04\xD7\xA8\xC8\x26\x7C\x3E\xC7" + "\xF4\x4A\x14\x79\x9C\x8D\x9F\x47\xD1\xF6\x7E\x1E\xC3\xBC\x40\x8D\x85\x78\x10\xB0" + "\xAF\x9F\x87\xA5\x0A\x04\x9A\xE3\x41\x06\xB9\xD9\x42\x8F\xC3\xD2\x84\x04\x9C\x9C" + "\xE5\x32\x18\x6C\x3C\x0F\x8A\xDA\x67\x5F\x86\x58\x6C\xF3\xEC\x1F\xFD\x8C\x04\xAC" + "\xE5\x82\x1E\x3C\x21\xF8\x7A\x1D\x95\xF3\xF0\xF6\x1D\xE3\xC3\x1C\x77\x4F\xB0\x8E" + "\x43\xEC\xEF\x1D\x0B\x7B\x9F\xC8\x51\x51\x0D\x20\x8F\x9E\x05\xEE\x2E\x82\xA3\xE7" + "\x9D\x02\x24\xEB\x3A\x8F\xA1\x0E\xF1\xE0\xF7\x1E\xE3\xC1\xB0\xE9\x83\x1F\x1D\xD3" + "\xEC\x87\x89\x95\x1F\x67\x51\xF6\x74\x3B\x43\x4F\x87\x21\xF6\x76\xCA\xCE\xAA\xF8" + "\xB6\x77\x8F\x06\xC3\xA7\x9F\x08\x77\x4E\xF1\xE0\xC0\x25\xE3\x47\x29\xB6\xCE\xF1" + "\xE0\xF7\x1B"; #define HTTP_SCRIPT_ROOT Decompress(HTTP_SCRIPT_ROOT_COMPRESSED,HTTP_SCRIPT_ROOT_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h index ae8b84c01..99080164f 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h @@ -2,23 +2,23 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_ROOT_SIZE = 444; +const size_t HTTP_SCRIPT_ROOT_SIZE = 436; const char HTTP_SCRIPT_ROOT_COMPRESSED[] PROGMEM = "\x30\x2F\x83\xAD\xCE\x41\x59\xDD\x18\x77\x8F\x6E\x98\x3B\xB4\x64\x31\xE1\x83\xBA" "\x4C\xCD\xF5\x17\xB0\x5F\xC3\x67\x78\xFE\x1F\x0F\x87\xB0\x5F\x08\xCC\x6F\x31\x0F" "\x61\xDE\x3D\xA6\x77\xF4\xCF\x9C\xC7\xD0\x23\x60\x47\x74\xFB\x3B\x43\x4F\x87\x21" - "\xF6\x77\x8F\x04\xCE\x99\xC3\x5F\xBD\x63\xCC\xF8\x08\x79\xD9\xDD\x66\x6F\xA8\xEF" - "\x1E\xD6\x38\xEE\x9F\x61\x1C\x87\xD9\xDE\x3A\x16\xF7\x3F\x90\xA2\xA2\x1A\x41\x1F" - "\x19\x9B\xEA\x3A\x09\x75\x67\x4F\xB1\x81\x58\x6C\xEE\x9D\x87\xB6\x8F\x71\xD8\x3C" - "\x75\x1E\xC3\xD2\xAC\x70\x4D\x7A\x8C\x82\x67\xC3\xEC\x7F\x44\xA1\x47\x99\xC8\xD9" - "\xF4\x7D\x1F\x67\xE1\xEC\x3B\xC4\x08\xD8\x57\x81\x0B\x0A\xF9\xF8\x7A\x50\xA0\x49" - "\xAE\x34\x10\x6B\x9D\x94\x28\xFC\x3D\x28\x40\x49\xC9\xCE\x53\x21\x86\xC3\xC0\xF8" - "\xAD\xA6\x75\xF8\x65\x86\xCF\x3E\xC1\xFF\xD8\xC0\x4A\xCE\x58\x21\xE3\xC2\x1F\x87" - "\xA1\xD9\x5F\x3F\x0F\x61\xDE\x3C\x1E\xE3\xDD\x67\xC1\x87\xF8\xFF\x1F\x67\xD9\xE0" - "\x30\x9D\xFC\xAB\x46\xBC\x17\x47\x74\x2A\x2B\x3B\xC7\x8D\x30\x77\x4D\x87\xF0\xF9" - "\xC2\xC2\x08\xEF\x1E\xD3\x61\xD2\xC7\x67\xE8\xEE\x9D\xE3\xDC\x6C\x3E\x73\x1F\x44" - "\x6C\x21\xA4\x11\x0A\xAA\x18\x5F\x66\xA1\x6F\xD4\x77\x4E\xF1\xE0\xD8\x74\xC1\x8F" - "\x8E\xE9\xF6\x43\xC4\xCA\x8F\xB3\xA8\xFB\x3A\x1D\xA1\xA7\xC3\x90\xFB\x3B\x65\x67" - "\x55\x7C\x5B\x3B\xC7\x83\x61\xD3\xCF\x84\x3B\xA7\x78\xF0\x15\x1F\x3C\xE8\x11\x34" - "\x1B\x3A\x8E\x53\x6D\x9D\xE3\xC1\xEE"; + "\xF6\x77\x8F\x04\xCE\x99\xC3\x5F\xBD\x63\xCC\xF8\xCC\xDF\x51\xF0\xFC\x3D\xAC\x71" + "\xDD\x3E\xC2\x39\x0F\xB3\xBC\x74\x2D\xEE\x7F\x21\x45\x44\x34\x82\x04\x1A\xE7\x41" + "\x2E\xAC\xE9\xF6\x30\x2B\x0D\x9D\xD3\xB0\xF6\xD1\xEE\x3B\x07\x8E\xA3\xD8\x7A\x55" + "\x8E\x09\xAF\x51\x90\x4C\xF8\x7D\x8F\xE8\x94\x28\xF3\x39\x1B\x3E\x8F\xA3\xEC\xFC" + "\x3D\x87\x78\x81\x1B\x0A\xF0\x21\x61\x5F\x3F\x0F\x4A\x14\x09\x35\xC6\x82\x0D\x73" + "\xB2\x85\x1F\x87\xA5\x08\x09\x39\x39\xCA\x64\x30\xD8\x78\x1F\x15\xB4\xCE\xBF\x0C" + "\xB0\xD9\xE7\xD8\x3F\xFB\x18\x09\x59\xCB\x04\x3C\x78\x43\xF0\xF4\x3B\x2B\xE7\xE1" + "\xEC\x3B\xC7\x83\xDC\x7B\xAC\xF8\x30\xFF\x1F\xE3\xEC\xFB\x3C\x06\x13\xBF\x95\x68" + "\xD7\x82\xE8\xEE\x85\x47\x78\xF1\xA6\x0E\xE9\xB0\xFE\x1F\x38\x58\x41\x1D\xE3\xDA" + "\x6C\x3A\x58\xEC\xFD\x1D\xD3\xBC\x7B\x8D\x87\xCE\x63\xE8\x8D\x84\x34\x82\x21\x55" + "\x43\x0B\xEC\xD4\x2D\xFA\x8E\xE9\xDE\x3C\x1B\x0E\x98\x31\xF1\xDD\x3E\xC8\x78\x99" + "\x51\xF6\x75\x1F\x67\x43\xB4\x34\xF8\x72\x1F\x67\x6C\xAC\xEA\xAF\x8B\x67\x78\xF0" + "\x6C\x3A\x79\xF0\x87\x74\xEF\x1E\x02\xA3\xE7\x9D\x02\x26\x83\x67\x51\xCA\x6D\xB3" + "\xBC\x78\x3D\xC6"; #define HTTP_SCRIPT_ROOT Decompress(HTTP_SCRIPT_ROOT_COMPRESSED,HTTP_SCRIPT_ROOT_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h index a7fc25354..90af1de25 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h @@ -2,31 +2,31 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_ROOT_SIZE = 880; +const size_t HTTP_SCRIPT_ROOT_SIZE = 874; const char HTTP_SCRIPT_ROOT_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x98\xF0\xA3\xE1\xC8\x75\x11\x8A\x3C\x18\x17\xC1\xD6\xE7\x20\xAC\xEE" "\x8C\x3B\xC7\xB6\xCF\x83\x0F\xF1\xFE\x3E\xCF\xB3\xC0\x61\x3B\xF9\x56\x8D\x78\x2E" "\x8E\xE9\x8A\x3B\xC0\x93\x34\x2A\x2B\x3B\xC7\x8D\x30\x77\x4D\x87\xF0\xF9\xC2\xC2" "\x08\xEF\x1E\xD3\x61\xD2\xC7\x67\xE8\xEE\x9D\xE3\xC1\xEE\x36\x1F\x39\x8F\xA2\x36" "\x10\xD2\x08\x85\x55\x0C\x2F\xB3\x50\xB7\xEA\x3B\xA7\x78\xF0\x6C\x3A\x67\x7D\xD8" - "\x86\x5E\xAB\xA6\x18\xAB\xE1\xE6\x7C\x04\x3D\x60\xEE\x9D\xE3\xDB\xA6\x0E\xE9\xB0" - "\xE9\xF7\x62\x19\x17\xAA\xE9\x9F\x0F\x87\x30\xFD\x1F\xA2\x36\x1D\x3D\x57\x42\xFC" - "\x7C\x3E\x1C\xA6\xCE\xF1\xED\x23\x3B\xFA\xF1\xF0\xD8\x74\xFB\xF0\xCC\xEF\x32\xA6" - "\x6C\xA3\xA7\xD8\xC0\xAC\x36\x77\x4E\xC3\xDB\x47\xB8\xEC\x1E\x3A\x8F\x61\xE9\x56" - "\x38\x26\xBD\x46\x41\x33\xE1\xF6\x3F\xA2\x50\xA3\xCC\xE4\x6C\xFA\x3E\x8F\xB3\xF0" - "\xF6\x1D\xE2\x04\x6C\x2B\xC0\x85\x85\x7C\xFC\x3D\x28\x50\x24\xD7\x1A\x08\x35\xCE" - "\xCA\x14\x7E\x1E\x94\x20\x24\xE4\xE7\x29\x90\xC3\x61\xE0\x7C\x56\xD3\x3A\xFC\x32" - "\xC3\x67\x9F\x60\xFF\xEC\x60\x25\x67\x2C\x10\xF1\xE1\x0F\xC3\xD0\xEC\xAF\x9F\x87" - "\xB0\xEF\x1E\x18\xE3\xBA\x7D\x84\x72\x1F\x67\x78\xE8\x5B\xDC\xFE\x42\x8A\x88\x69" - "\x04\x7C\xF0\x30\x1E\x30\x7E\x63\xC2\x8E\xF1\xED\x0A\x8F\x9E\x74\x08\x95\xEC\xEA" - "\x3E\x84\x3B\xC7\x83\xDC\x7B\x8F\x70\x22\xDE\x36\x1D\x30\x63\xE3\xBA\x7D\x90\xF1" - "\x32\xA3\xEC\xEA\x3E\xCE\x87\x68\x69\xF0\xE4\x3E\xCE\xD9\x59\xD5\x5F\x16\xCE\xF1" - "\xE0\xD8\x74\xF3\xE1\x0E\xE9\xDE\x3C\x18\x04\xBC\x90\xE5\x36\xD9\xDE\x3C\x1E\xE3" - "\xDC\x40\x89\xCB\x2F\x99\x9D\x9D\xD1\x97\xF3\xAB\x4C\xEF\xE7\x78\xF6\x85\x67\x74" - "\xFB\x3F\x5E\x33\x3E\x1F\x67\x6F\x4C\xEF\xE7\x6C\xFB\x3F\x67\xD9\xDB\x19\x7F\x3B" - "\xC7\x80\x46\xC3\x74\x12\x30\xD0\x41\xE6\xE0\xF0\x0A\x78\xA7\xCC\x78\x51\xF0\xE3" - "\x20\x4A\xC6\xE8\x13\x71\xC1\x97\xF4\x7C\x43\x2F\xE7\x4F\x05\xA1\xB3\xBA\x71\x9D" - "\x47\x72\x8E\xF1\xDC\x3B\x64\x08\xD3\x8E\x59\xDE\x20\x60\xBA\x08\xCF\x9D\xD3\x07" - "\x78\xF6\xE9\x83\xBA\x60\xEF\x1E\xD0\x4C\xE3\x08\x13\x38\xE4\x05\x0E\x32\x81\x0B" - "\x74\x3D\xCC\x2F\x30\x5E\xC8\x01\x0F\x5F\x3D\xC6"; + "\x86\x5E\xAB\xA6\x18\xAB\xE1\xE6\x7C\x3B\xA7\x78\xF8\x7E\x1E\xDD\x30\x77\x4D\x87" + "\x4F\xBB\x10\xC8\xBD\x57\x4C\xF8\x7C\x39\x87\xE8\xFD\x11\xB0\xE9\xEA\xBA\x17\xE3" + "\xE1\xF0\xE5\x36\x77\x8F\x69\x19\xDF\xD7\x8F\x86\xC3\xA7\xDF\x86\x67\x79\x95\x33" + "\x65\x1D\x3E\xC6\x05\x61\xB3\xBA\x76\x1E\xDA\x3D\xC7\x60\xF1\xD4\x7B\x0F\x4A\xB1" + "\xC1\x35\xEA\x32\x09\x9F\x0F\xB1\xFD\x12\x85\x1E\x67\x23\x67\xD1\xF4\x7D\x9F\x87" + "\xB0\xEF\x10\x23\x61\x5E\x04\x2C\x2B\xE7\xE1\xE9\x42\x81\x26\xB8\xD0\x41\xAE\x76" + "\x50\xA3\xF0\xF4\xA1\x01\x27\x27\x39\x4C\x86\x1B\x0F\x03\xE2\xB6\x99\xD7\xE1\x96" + "\x1B\x3C\xFB\x07\xFF\x63\x01\x2B\x39\x60\x87\x8F\x08\x7E\x1E\x87\x65\x7C\xFC\x3D" + "\x87\x78\xF0\xC7\x1D\xD3\xEC\x23\x90\xFB\x3B\xC7\x42\xDE\xE7\xF2\x14\x54\x43\x48" + "\x23\xE7\x81\x80\xF1\x77\xF3\x1E\x14\x77\x8F\x68\x54\x7C\xF3\xA0\x44\xAF\x67\x51" + "\xF4\x21\xDE\x3C\x1E\xE3\xDC\x7B\x81\x16\xF1\xB0\xE9\x83\x1F\x1D\xD3\xEC\x87\x89" + "\x95\x1F\x67\x51\xF6\x74\x3B\x43\x4F\x87\x21\xF6\x76\xCA\xCE\xAA\xF8\xB6\x77\x8F" + "\x06\xC3\xA7\x9F\x08\x77\x4E\xF1\xE0\xC0\x25\xE4\x87\x29\xB6\xCE\xF1\xE0\xF7\x1E" + "\xE2\x04\x4E\x57\xFC\xCC\xEC\xEE\x8C\xBF\x9D\x5A\x67\x7F\x3B\xC7\xB4\x2B\x3B\xA7" + "\xD9\xFA\xF1\x99\xF0\xFB\x3B\x7A\x67\x7F\x3B\x67\xD9\xFB\x3E\xCE\xD8\xCB\xF9\xDE" + "\x3C\x02\x36\x1B\xA0\x91\x86\x82\x0F\x36\x47\x80\x53\xC5\x3E\x63\xC2\x8F\x87\x19" + "\x02\x56\x37\x40\x9B\x8E\x0C\xBF\xA3\xE2\x19\x7F\x3A\x78\x2D\x0D\x9D\xD3\x8C\xEA" + "\x3B\x94\x77\x8E\xE1\xDB\x20\x46\x9C\x72\xCE\xF1\x03\x05\xD0\x46\x7C\xEE\x98\x3B" + "\xC7\xB7\x4C\x1D\xD3\x07\x78\xF6\x82\x67\x18\x40\x99\xC7\x20\x28\x71\x94\x08\x5B" + "\xA1\xEE\x61\x79\x82\xF6\x40\x08\x7A\xF9\xEE"; #define HTTP_SCRIPT_ROOT Decompress(HTTP_SCRIPT_ROOT_COMPRESSED,HTTP_SCRIPT_ROOT_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_compressed/HTTP_SCRIPT_TEMPLATE.h b/tasmota/html_compressed/HTTP_SCRIPT_TEMPLATE.h index 36ac7939d..da794f8af 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_TEMPLATE.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_TEMPLATE.h @@ -2,19 +2,19 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_TEMPLATE_SIZE = 303; +const size_t HTTP_SCRIPT_TEMPLATE_SIZE = 297; const char HTTP_SCRIPT_TEMPLATE_COMPRESSED[] PROGMEM = "\x30\x2F\x83\xAD\xCE\x41\x08\x77\x45\x9D\x46\x0E\xF1\xED\x33\xBF\xA3\x61\xF3\x98" "\xFA\x23\x61\x0D\x20\x88\x55\x50\xC2\xFB\x35\x0B\x7E\xA3\xBA\x77\x8F\x06\xC3\xA6" - "\x77\xDD\x88\x65\xEA\xBA\x61\x8A\xBE\x1E\x67\xC0\x43\xC7\x4E\xE9\xDE\x3D\xBA\x60" - "\xEE\xD0\xAD\xF1\xD3\xEE\xC4\x32\x2F\x55\xD3\x3E\x1F\x0E\x61\xFA\x3F\x45\x42\xB7" - "\xC7\x4F\x55\xD0\xBF\x1F\x0F\x87\x29\xB3\xBC\x7B\x48\x10\x70\x43\xBC\x78\x3D\xC7" - "\xB8\xF0\x6C\x3A\x60\xC7\xC7\x74\xFB\x21\xE2\x65\x47\xD9\xD4\x2C\xEA\xAF\x8B\x67" - "\x78\xF0\x6C\x3A\x79\xF0\x87\x74\xEF\x1E\x0F\x71\x9D\xFD\x06\x78\x04\x4E\x2A\x01" - "\x4D\x87\x21\xDD\x21\xC0\x83\xBF\xE9\xD4\x6B\x3A\x87\x8E\xA3\x43\xAB\x0F\x18\x7C" - "\x1C\x74\xFB\xF0\xCC\xEF\x32\xA6\x6C\xA3\xA7\x86\x05\xB4\x77\x4E\xC3\xDC\x72\x1D" - "\x87\x78\xF0\x46\x87\xCC\x3A\x78\x56\x98\xA3\xBA\x77\x8F\x1A\x60\xEE\xB1\xC7\x74" - "\xFB\xF1\xC8\x7D\x9D\xE3\xA1\x19\xD8\x42\xD9\xF0\xF8\x7D\x9F\x67\x78\xF6\x82\x55" - "\x03\x43\xC1\xEE\x1E\x04\x5C\x44\x10\xB2\x93\xEC\xEA\x3E\xCE\xF1\xE3\x3C\x7C\x3D" - "\x86"; + "\x77\xDD\x88\x65\xEA\xBA\x61\x8A\xBE\x1E\x67\xC3\xBA\x77\x8F\x87\xE1\xED\xD3\x07" + "\x76\x85\x6F\x8E\x9F\x76\x21\x91\x7A\xAE\x99\xF0\xF8\x73\x0F\xD1\xFA\x2A\x2B\x15" + "\xBE\x3A\x7A\xAE\x85\xF8\xF8\x7C\x39\x4D\x9D\xE3\xDA\x40\x83\x82\x1D\xE3\xC1\xEE" + "\x3D\xC7\x83\x61\xD3\x06\x3E\x3B\xA7\xD9\x0F\x13\x2A\x2B\x3E\xCE\xA1\x67\x55\x7C" + "\x5B\x3B\xC7\x83\x61\xD3\xCF\x84\x3B\xA7\x78\xF0\x7B\x8C\xEF\xE8\x33\xC0\x22\x6F" + "\x66\xC3\x90\xEE\x90\xE0\x41\xDE\x74\xEA\x35\x9D\x43\xC7\x51\xA1\xD5\x87\x8C\x3E" + "\x0E\x3A\x7D\xF8\x66\x77\x99\x53\x36\x51\xD3\xC3\x02\xDA\x3B\xA7\x61\xEE\x39\x0E" + "\xC3\xBC\x78\x23\x43\xE6\x1D\x3C\x2B\x4C\x51\xDD\x3B\xC7\x8D\x30\x77\x58\xE3\xBA" + "\x7D\xF8\xE4\x3E\xCE\xF1\xD0\x8C\xEC\x21\x6C\xF8\x7C\x3E\xCF\xB3\xBC\x7B\x41\x2A" + "\x2B\x81\xA1\xE0\xF7\x0F\x02\x2E\x22\x08\x59\x49\xF6\x75\x1F\x67\x78\xF1\x9E\x3E" + "\x1E\xC3"; #define HTTP_SCRIPT_TEMPLATE Decompress(HTTP_SCRIPT_TEMPLATE_COMPRESSED,HTTP_SCRIPT_TEMPLATE_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h index d7c83c085..288d14b8b 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h @@ -15,7 +15,7 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM = "if(t.scrollTop>=sn){" // User scrolled back so no updates "if(x!=null){x.abort();}" // Abort if no response within 2 seconds (happens on restart 1) "x=new XMLHttpRequest();" - "x.onreadystatechange=function(){" + "x.onreadystatechange=()=>{" "if(x.readyState==4&&x.status==200){" "var z,d;" "d=x.responseText.split(/}1/);" // Field separator @@ -43,7 +43,7 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM = "var hc=[],cn=0;" // hc = History commands, cn = Number of history being shown "function h(){" // "if(!(navigator.maxTouchPoints||'ontouchstart'in document.documentElement)){eb('c1').autocomplete='off';}" // No touch so stop browser autocomplete - "eb('c1').addEventListener('keydown',function(e){" + "eb('c1').addEventListener('keydown',e=>{" "var b=eb('c1'),c=e.keyCode;" // c1 = Console command id "if(38==c||40==c){" // ArrowUp or ArrowDown "b.autocomplete='off';" // ArrowUp or ArrowDown must be a keyboard so stop browser autocomplete diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h index 1b1d83fc7..e8564b72b 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h @@ -5,7 +5,7 @@ const char HTTP_SCRIPT_ROOT[] PROGMEM = "clearTimeout(ft);clearTimeout(lt);" "if(x!=null){x.abort()}" // Abort if no response within 2 seconds (happens on restart 1) "x=new XMLHttpRequest();" - "x.onreadystatechange=function(){" + "x.onreadystatechange=()=>{" "if(x.readyState==4&&x.status==200){" "var s=x.responseText.replace(/{t}/g,\"
) + + // Calculate nice inter-column spacing without using table spacing or column padding + uint32_t len = 6; // Minimum width is 60px + for (uint32_t i = 0; i < Energy.phase_count; i++) { + // Using active power expecting to be the largest number not counting increasing total energy + uint32_t len_new = ext_snprintf_P(value_chr, sizeof(value_chr), PSTR("%*_f"), Settings->flag2.wattage_resolution, &Energy.active_power[i]); + if (len_new > len) { len = len_new; } +// len_new = ext_snprintf_P(value_chr, sizeof(value_chr), PSTR("%*_f"), Settings->flag2.energy_resolution, &Energy.total[i]); +// if (len_new > len) { len = len_new; } + } + uint32_t width = len * 10; // Default 60px. Every additonal character adds 10px + bool no_label = Energy.voltage_common || (1 == Energy.phase_count); for (uint32_t i = 0; i < Energy.phase_count; i++) { - WSContentSend_P(PSTR("%s%s"), (no_label)?"":"L", (no_label)?"":itoa(i +1, value_chr, 10)); + WSContentSend_P(PSTR("%s%s"), width, (no_label)?"":"L", (no_label)?"":itoa(i +1, value_chr, 10)); } WSContentSend_P(PSTR("{e}")); // Last column is units ({e} =
\")" ".replace(/{s}/g,\"
\")" diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h index b40040849..b42a56499 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h @@ -2,7 +2,7 @@ const char HTTP_SCRIPT_ROOT[] PROGMEM = "function la(p){" "if(typeof(EventSource)!==\"undefined\"){" "var e=new EventSource('?m=1');" - "e.onmessage=function(event){" + "e.onmessage=event=>{" "eb('l1').innerHTML=event.data.replace(/{t}/g,\"\")" ".replace(/{s}/g,\"
\")" // ".replace(/{m}/g,\"\")" diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h index a23783e46..db0ca3ca2 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h @@ -5,7 +5,7 @@ const char HTTP_SCRIPT_ROOT[] PROGMEM = "clearTimeout(ft);clearTimeout(lt);" "if(x!=null){x.abort();}" // Abort if no response within 2 seconds (happens on restart 1) "x=new XMLHttpRequest();" - "x.onreadystatechange=function(){" + "x.onreadystatechange=()=>{" "if(x.readyState==4&&x.status==200){" "var s=x.responseText.replace(/{t}/g,\"\")" ".replace(/{s}/g,\"
\")" diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_TEMPLATE.h b/tasmota/html_uncompressed/HTTP_SCRIPT_TEMPLATE.h index 734a4a3c3..846626d4e 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_TEMPLATE.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_TEMPLATE.h @@ -1,7 +1,7 @@ const char HTTP_SCRIPT_TEMPLATE[] PROGMEM = "function ld(u,f){" "var x=new XMLHttpRequest();" - "x.onreadystatechange=function(){" + "x.onreadystatechange=()=>{" "if(this.readyState==4&&this.status==200){" "f(this);" "}" From 34fb6dfe2a8cc07db5d21b87a6e5aaae04954eaf Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Sun, 3 Apr 2022 12:34:43 +0200 Subject: [PATCH 325/355] javascript: code large integers with scientific notation 99999999 and 1e8 are not the same number, but srollTop only needs to be very large, not that particular number. saves 18 Bytes of JavaScript code. --- tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h | 62 +++++++++---------- .../HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h | 6 +- .../HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h | 6 +- .../HTTP_SCRIPT_ROOT_WEB_DISPLAY.h | 18 +++--- .../html_uncompressed/HTTP_SCRIPT_CONSOL.h | 6 +- .../HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h | 2 +- .../HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h | 2 +- .../HTTP_SCRIPT_ROOT_WEB_DISPLAY.h | 2 +- 8 files changed, 52 insertions(+), 52 deletions(-) diff --git a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h index 1514db08a..792f58f84 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_CONSOL.h @@ -2,7 +2,7 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_CONSOL_SIZE = 997; +const size_t HTTP_SCRIPT_CONSOL_SIZE = 985; const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x3A\x8B\x44\x3E\x1C\x67\x51\x18\xA3\xA8\x2A\x2B\x1A\x7C" "\x3E\x84\x3C\x18\x17\xC1\xD6\xE7\x20\x8E\xE8\xC3\xBC\x7B\x4C\xEF\xE8\x33\xAB\x0F" "\x87\xD9\xF6\x78\x0C\x27\x7F\x2A\x2B\xD1\xAF\x05\xD1\xDD\x0A\x8E\xF0\x24\xCD\x31" @@ -10,35 +10,35 @@ const char HTTP_SCRIPT_CONSOL_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x71\xF0\xE3\x "\x0E\x43\xBC\x7B\x48\x33\xE3\x1C\x77\x4F\xB0\xCE\x43\xEC\xEF\x1E\x0B\x0F\x87\xD9" "\xFA\x0C\xE4\x3E\x1F\x67\x6C\x9F\x07\x82\x32\x16\x5F\x2D\x20\xF0\x68\xCC\xE7\xD4" "\x77\x43\x3A\x19\xD8\x42\xD9\xDE\x3C\x02\x14\x53\xE1\xF6\x7D\x9E\x28\xE9\xE0\xFF" - "\x81\x04\x55\x83\x0F\x87\x11\x1B\xD0\xCF\x1E\xE3\xE0\x23\x54\x3C\x1E\xED\x30\x77" - "\x41\x1A\x61\xF8\x7C\xF7\x1D\xE3\xDB\xA6\x0E\xE9\xB0\xFE\x1F\x38\x58\x41\x1D\xE3" - "\xDA\x6C\x3A\x58\xEC\xFD\x1D\xD3\xBC\x78\x3D\xC6\xC3\xE7\x31\xF4\x46\xC2\x1A\x41" - "\x10\xAA\xA1\x85\xF6\x6A\x16\xFD\x47\x74\xEF\x1E\x0D\x87\x4C\xEF\xBB\x10\xCB\xD5" - "\x74\xC3\x15\x7C\x3C\xCF\x87\x74\xEF\x1F\x0F\xC3\xDB\xA6\x0E\xE9\xB0\xE9\xF7\x62" - "\x19\x17\xAA\xE9\x9F\x0F\x87\x30\xFD\x1F\xA2\x36\x1D\x3D\x57\x42\xFC\x7C\x3E\x1C" - "\xA6\xC8\x10\x78\x7C\x36\x9D\x42\x1E\x04\x3E\x1B\x0E\x9F\x7E\x19\x9D\xE6\x54\xCD" - "\x94\x74\xF0\xC0\xB6\x8E\xE9\xD8\x7B\x8E\x43\xB0\xEF\x1E\x0B\x44\x3E\x08\x74\xF0" - "\xAD\x31\x47\x74\xEF\x1E\x34\xC1\xDD\x04\x49\x27\xC3\xE1\xC6\x77\x8F\x69\x50\x22" - "\xF0\x9C\x7B\x8D\xA0\x93\x82\x9B\x4E\x81\x3E\x1E\xA1\x47\xE0\x22\xE0\x67\x6C\xF8" - "\x6D\x3C\x1E\xE0\x5F\xE1\xD8\x13\x38\xFA\x0A\x8F\x9E\x74\x08\x9C\x8E\x9D\x41\x50" - "\xD3\xBC\x78\x3D\xC7\xB8\xF0\x6C\x3A\x60\xC7\xC7\x74\xFB\x21\xE2\x65\x47\xD9\xD4" - "\x7D\x87\xE3\xB4\x19\xCA\x3E\x1F\x67\x6C\xB4\x43\xB7\x87\x55\x7C\x5B\x3B\xC7\x83" - "\x61\xD3\xCF\x84\x3B\xA7\x78\xF0\x60\x12\xB1\xE3\x94\xDB\x67\x78\xF0\x7B\x89\x85" - "\xE6\x7B\x41\x47\x3B\xFB\xA1\x7F\xE4\x62\xC2\xF3\x3C\x1E\xE1\xF0\x8E\xE8\x47\x78" - "\xF0\x67\x7F\x42\x83\x3E\x1E\xF1\xEF\x9D\x41\xF1\xF0\xE3\x20\x45\xE7\x34\x51\xDD" - "\x3B\xC7\xB4\x10\xF9\x89\x3A\x58\x82\x13\x33\x7D\x44\x16\xFA\x9F\x3F\x9D\xD3\xEC" - "\xD1\x99\x09\x83\xFC\x7D\x9D\x4C\xF8\x7E\x1E\xD3\x3B\xFA\x1C\x08\x9C\xDB\x9D\x41" - "\x9F\x19\xD0\xD1\x99\x10\x78\x23\x3C\x69\x83\xBA\x72\xFE\x7C\x3E\x10\x67\xF8\xFF" - "\x1C\xC6\x7C\x3E\x10\x67\x78\xF6\x8E\x3A\x58\xBA\xC0\xF0\x68\xC0\x9D\x33\xE1\xF7" - "\x86\x0C\x1F\x67\x80\x46\xE0\x20\x71\xF0\xFC\x3D\xA3\x8E\x86\x30\x31\x7E\x3B\xA7" - "\x78\xF0\x38\xE9\xE7\x45\xE6\x13\x0E\xB7\x38\xBF\x7C\x3C\xCE\xE9\xC8\x4C\xE2\x3A" - "\xA1\x33\x88\xEF\x1E\xE3\xA9\x9D\x44\x38\xEF\x1E\xE3\x97\xF3\xE1\xF0\x83\x3B\x47" - "\x74\xED\x9D\xB0\xF8\xFC\x14\x18\x21\x72\x2A\x01\x7E\x8F\xD1\xDD\x0F\x8F\x80\x89" - "\x2C\xEF\x1D\x43\x81\x0B\x93\x41\x41\x9E\xF0\x7C\x75\x9C\x87\xBE\x7F\x8F\xF1\xF6" - "\x7D\x9D\xE3\xCF\x19\xF0\xF8\x41\x9D\xA3\xBA\x71\x9F\x87\x59\xD6\x41\xF0\x20\xE2" - "\x07\x19\x02\x9E\x10\x72\x59\xF0\xF8\x41\x9F\xA3\xF4\x77\x41\x13\x31\x3F\x0E\x44" - "\x7E\x8F\xD1\x0A\x0C\xE8\x33\x06\x1D\xD3\xBC\x75\x0A\x0C\xE8\x2F\x81\x07\x98\xA0" - "\x42\xC7\x0E\xF1\xD4\x1F\x1F\x0E\x33\xBC\x7B\x8E\xF1\xE0\xF7\x10\xF8\x47\x74\x51" - "\xDE\x3C\x1B"; + "\x81\x04\x55\x83\x0F\x87\x21\x33\x9F\x3C\x17\xB8\xF8\x08\xD3\xCF\x07\xBB\x4C\x1D" + "\xD0\x46\x98\x7E\x1F\x3D\xC7\x78\xF6\xE9\x83\xBA\x6C\x3F\x87\xCE\x16\x10\x47\x78" + "\xF6\x9B\x0E\x96\x3B\x3F\x47\x74\xEF\x1E\x0F\x71\xB0\xF9\xCC\x7D\x11\xB0\x86\x90" + "\x44\x2A\x2B\xA8\x61\x7D\x9A\x85\xBF\x51\xDD\x3B\xC7\x83\x61\xD3\x3B\xEE\xC4\x32" + "\xF5\x5D\x30\xC5\x5F\x0F\x33\xE1\xDD\x3B\xC7\xC3\xF0\xF6\xE9\x83\xBA\x6C\x3A\x7D" + "\xD8\x86\x45\xEA\xBA\x67\xC3\xE1\xCC\x3F\x47\xE8\x8D\x87\x4F\x55\xD0\xBF\x1F\x0F" + "\x87\x29\xB2\x04\x1E\x1D\xCD\xA7\x50\x87\x81\x0F\x86\xC3\xA7\xDF\x86\x67\x79\x95" + "\x33\x65\x1D\x3C\x30\x2D\xA3\xBA\x76\x1E\xE3\x90\xEC\x3B\xC7\x82\xD1\x0F\x82\x1D" + "\x3C\x2B\x4C\x51\xDD\x3B\xC7\x8D\x30\x77\x41\x12\x49\xF0\xF8\x71\x9D\xE3\xDA\x54" + "\x08\xBC\x24\x9E\xE3\x68\x24\xE0\xA6\xD3\xA0\x4F\x87\xA8\x51\xF8\x08\xB8\x19\xDB" + "\x3E\x1B\x4F\x07\xB8\x16\xB8\x71\x04\xCE\x3C\x02\xA3\xE7\x9D\x02\x27\x22\x67\x50" + "\x54\x34\xEF\x1E\x0F\x71\xEE\x3C\x1B\x0E\x98\x31\xF1\xDD\x3E\xC8\x78\x99\x51\xF6" + "\x75\x1F\x61\xF8\xED\x06\x72\x8F\x87\xD9\xDB\x2D\x10\xED\xE1\xD5\x5F\x16\xCE\xF1" + "\xE0\xD8\x74\xF3\xE1\x0E\xE9\xDE\x3C\x18\x04\xAC\x78\xE5\x13\x39\x87\x78\xF0\x7B" + "\x89\x85\xE6\x7B\x41\x47\x39\xFB\xA1\x7F\xE4\x62\xC2\xF3\x3C\x1E\xE1\xF0\x8E\xE8" + "\x47\x78\xF0\x67\x7F\x42\x83\x3E\x1E\xF1\xEF\x9D\x41\xF1\xF0\xE3\x20\x45\xE7\x04" + "\x51\xDD\x3B\xC7\xB4\x10\xF9\x7D\x3A\x58\x82\x13\x33\x7D\x44\x16\xFA\x9F\x3F\x9D" + "\xD3\xEC\xD1\x99\x09\x83\xFC\x7D\x9D\x4C\xF8\x7E\x1E\xD3\x3B\xFA\x1C\x08\x9C\xD5" + "\x9D\x41\x9F\x19\xD0\xD1\x99\x10\x78\x23\x3C\x69\x83\xBA\x72\xFE\x7C\x3E\x10\x67" + "\xF8\xFF\x1C\xC6\x7C\x3E\x10\x67\x78\xF6\x8E\x3A\x58\xBA\xC0\xF0\x68\xC0\x9D\x33" + "\xE1\xF7\x86\x0C\x1F\x67\x80\x46\xE0\x20\x71\xF0\xFC\x3D\xA3\x8E\x86\x30\x31\x7E" + "\x3B\xA7\x78\xF0\x38\xE9\xE7\x45\xE6\x13\x0E\xB7\x38\xBF\x7C\x3C\xCE\xE9\xC8\x4C" + "\xE2\x3A\xA1\x33\x88\xEF\x1E\xE3\xA9\x9D\x44\x38\xEF\x1E\xE3\x97\xF3\xE1\xF0\x83" + "\x3B\x47\x74\xED\x9D\xB0\xF8\xFC\x14\x18\x21\x71\xF2\x7E\x8F\xD1\xDD\x0F\x8F\x80" + "\x89\x2C\xEF\x1D\x43\x81\x0B\x92\xD1\x41\x9E\xF0\x7C\x75\x9C\x87\xBE\x7F\x8F\xF1" + "\xF6\x7D\x9D\xE3\xCF\x19\xF0\xF8\x41\x9D\xA3\xBA\x71\x9F\x87\x59\xD6\x41\xF0\x20" + "\xE2\x07\x19\x02\x9E\x10\x72\x59\xF0\xF8\x41\x9F\xA3\xF4\x77\x41\x13\x31\x3F\x0E" + "\x44\x7E\x8F\xD1\x0A\x0C\xE8\x33\x06\x1D\xD3\xBC\x75\x0A\x0C\xE8\x2F\x81\x07\x98" + "\x30\x42\xC7\x0E\xF1\xD4\x1F\x1F\x0E\x33\xBC\x7B\x8E\xF1\xE0\xF7\x10\xF8\x47\x74" + "\x51\xDE\x3C\x1B"; #define HTTP_SCRIPT_CONSOL Decompress(HTTP_SCRIPT_CONSOL_COMPRESSED,HTTP_SCRIPT_CONSOL_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h index d0e524929..abf07e30d 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h @@ -2,7 +2,7 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_ROOT_SIZE = 501; +const size_t HTTP_SCRIPT_ROOT_SIZE = 499; const char HTTP_SCRIPT_ROOT_COMPRESSED[] PROGMEM = "\x33\xBF\xA3\x14\x78\x30\x2F\x83\xAD\xCE\x41\x59\xDD\x18\x77\x8F\x6D\x9F\x06\x1F" "\xE3\xFC\x7D\x9F\x67\x80\xC2\x77\xF2\xAD\x1A\xF0\x5D\x1D\xD3\x14\x77\x81\x26\x68" "\x54\x77\x8F\x1A\x60\xEE\x9B\x0F\xE1\xF3\x85\x84\x11\xDE\x3D\xA6\xC3\xA5\x8E\xCF" @@ -19,7 +19,7 @@ const char HTTP_SCRIPT_ROOT_COMPRESSED[] PROGMEM = "\x33\xBF\xA3\x14\x78\x30\x2F "\x43\xEC\xEF\x1D\x0B\x7B\x9F\xC8\x51\x51\x0D\x20\x8F\x9E\x05\xEE\x2E\x82\xA3\xE7" "\x9D\x02\x24\xEB\x3A\x8F\xA1\x0E\xF1\xE0\xF7\x1E\xE3\xC1\xB0\xE9\x83\x1F\x1D\xD3" "\xEC\x87\x89\x95\x1F\x67\x51\xF6\x74\x3B\x43\x4F\x87\x21\xF6\x76\xCA\xCE\xAA\xF8" - "\xB6\x77\x8F\x06\xC3\xA7\x9F\x08\x77\x4E\xF1\xE0\xC0\x25\xE3\x47\x29\xB6\xCE\xF1" - "\xE0\xF7\x1B"; + "\xB6\x77\x8F\x06\xC3\xA7\x9F\x08\x77\x4E\xF1\xE0\xC0\x25\xE3\x47\x28\x99\xCC\x3B" + "\xC7\x83\xDC"; #define HTTP_SCRIPT_ROOT Decompress(HTTP_SCRIPT_ROOT_COMPRESSED,HTTP_SCRIPT_ROOT_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h index 99080164f..0cb9e3616 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h @@ -2,7 +2,7 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_ROOT_SIZE = 436; +const size_t HTTP_SCRIPT_ROOT_SIZE = 434; const char HTTP_SCRIPT_ROOT_COMPRESSED[] PROGMEM = "\x30\x2F\x83\xAD\xCE\x41\x59\xDD\x18\x77\x8F\x6E\x98\x3B\xB4\x64\x31\xE1\x83\xBA" "\x4C\xCD\xF5\x17\xB0\x5F\xC3\x67\x78\xFE\x1F\x0F\x87\xB0\x5F\x08\xCC\x6F\x31\x0F" "\x61\xDE\x3D\xA6\x77\xF4\xCF\x9C\xC7\xD0\x23\x60\x47\x74\xFB\x3B\x43\x4F\x87\x21" @@ -18,7 +18,7 @@ const char HTTP_SCRIPT_ROOT_COMPRESSED[] PROGMEM = "\x30\x2F\x83\xAD\xCE\x41\x59 "\x6C\x3A\x58\xEC\xFD\x1D\xD3\xBC\x7B\x8D\x87\xCE\x63\xE8\x8D\x84\x34\x82\x21\x55" "\x43\x0B\xEC\xD4\x2D\xFA\x8E\xE9\xDE\x3C\x1B\x0E\x98\x31\xF1\xDD\x3E\xC8\x78\x99" "\x51\xF6\x75\x1F\x67\x43\xB4\x34\xF8\x72\x1F\x67\x6C\xAC\xEA\xAF\x8B\x67\x78\xF0" - "\x6C\x3A\x79\xF0\x87\x74\xEF\x1E\x02\xA3\xE7\x9D\x02\x26\x83\x67\x51\xCA\x6D\xB3" - "\xBC\x78\x3D\xC6"; + "\x6C\x3A\x79\xF0\x87\x74\xEF\x1E\x02\xA3\xE7\x9D\x02\x26\x83\x67\x51\xCA\x26\x73" + "\x0E\xF1\xE0\xF7\x1B"; #define HTTP_SCRIPT_ROOT Decompress(HTTP_SCRIPT_ROOT_COMPRESSED,HTTP_SCRIPT_ROOT_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h index 90af1de25..dd84f501d 100644 --- a/tasmota/html_compressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h +++ b/tasmota/html_compressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h @@ -2,7 +2,7 @@ // compressed by tools/unishox/compress-html-uncompressed.py ///////////////////////////////////////////////////////////////////// -const size_t HTTP_SCRIPT_ROOT_SIZE = 874; +const size_t HTTP_SCRIPT_ROOT_SIZE = 872; const char HTTP_SCRIPT_ROOT_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x98\xF0\xA3\xE1\xC8\x75\x11\x8A\x3C\x18\x17\xC1\xD6\xE7\x20\xAC\xEE" "\x8C\x3B\xC7\xB6\xCF\x83\x0F\xF1\xFE\x3E\xCF\xB3\xC0\x61\x3B\xF9\x56\x8D\x78\x2E" "\x8E\xE9\x8A\x3B\xC0\x93\x34\x2A\x2B\x3B\xC7\x8D\x30\x77\x4D\x87\xF0\xF9\xC2\xC2" @@ -20,13 +20,13 @@ const char HTTP_SCRIPT_ROOT_COMPRESSED[] PROGMEM = "\x33\xBF\xAF\x98\xF0\xA3\xE1 "\x23\xE7\x81\x80\xF1\x77\xF3\x1E\x14\x77\x8F\x68\x54\x7C\xF3\xA0\x44\xAF\x67\x51" "\xF4\x21\xDE\x3C\x1E\xE3\xDC\x7B\x81\x16\xF1\xB0\xE9\x83\x1F\x1D\xD3\xEC\x87\x89" "\x95\x1F\x67\x51\xF6\x74\x3B\x43\x4F\x87\x21\xF6\x76\xCA\xCE\xAA\xF8\xB6\x77\x8F" - "\x06\xC3\xA7\x9F\x08\x77\x4E\xF1\xE0\xC0\x25\xE4\x87\x29\xB6\xCE\xF1\xE0\xF7\x1E" - "\xE2\x04\x4E\x57\xFC\xCC\xEC\xEE\x8C\xBF\x9D\x5A\x67\x7F\x3B\xC7\xB4\x2B\x3B\xA7" - "\xD9\xFA\xF1\x99\xF0\xFB\x3B\x7A\x67\x7F\x3B\x67\xD9\xFB\x3E\xCE\xD8\xCB\xF9\xDE" - "\x3C\x02\x36\x1B\xA0\x91\x86\x82\x0F\x36\x47\x80\x53\xC5\x3E\x63\xC2\x8F\x87\x19" - "\x02\x56\x37\x40\x9B\x8E\x0C\xBF\xA3\xE2\x19\x7F\x3A\x78\x2D\x0D\x9D\xD3\x8C\xEA" - "\x3B\x94\x77\x8E\xE1\xDB\x20\x46\x9C\x72\xCE\xF1\x03\x05\xD0\x46\x7C\xEE\x98\x3B" - "\xC7\xB7\x4C\x1D\xD3\x07\x78\xF6\x82\x67\x18\x40\x99\xC7\x20\x28\x71\x94\x08\x5B" - "\xA1\xEE\x61\x79\x82\xF6\x40\x08\x7A\xF9\xEE"; + "\x06\xC3\xA7\x9F\x08\x77\x4E\xF1\xE0\xC0\x25\xE4\x87\x28\x99\xCC\x3B\xC7\x83\xDC" + "\x7B\x88\x11\x39\x5D\xF3\x33\xB3\xBA\x32\xFE\x75\x69\x9D\xFC\xEF\x1E\xD0\xAC\xEE" + "\x9F\x67\xEB\xC6\x67\xC3\xEC\xED\xE9\x9D\xFC\xED\x9F\x67\xEC\xFB\x3B\x63\x2F\xE7" + "\x78\xF0\x08\xD8\x6E\x82\x46\x1A\x08\x3C\xD8\x1E\x01\x4F\x14\xF9\x8F\x0A\x3E\x1C" + "\x64\x09\x58\xDD\x02\x6E\x38\x32\xFE\x8F\x88\x65\xFC\xE9\xE0\xB4\x36\x77\x4E\x33" + "\xA8\xEE\x51\xDE\x3B\x87\x6C\x81\x1A\x71\xCB\x3B\xC4\x0C\x17\x41\x19\xF3\xBA\x60" + "\xEF\x1E\xDD\x30\x77\x4C\x1D\xE3\xDA\x09\x9C\x60\x02\x67\x1C\x40\xA1\xC6\x40\x21" + "\x6E\x87\xB9\x85\xE6\x0B\xD9\x2A\x01\x21\xEB\xE7\xB8"; #define HTTP_SCRIPT_ROOT Decompress(HTTP_SCRIPT_ROOT_COMPRESSED,HTTP_SCRIPT_ROOT_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h index 288d14b8b..9e5dcd954 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_CONSOL.h @@ -9,7 +9,7 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM = "c=eb('c1');" // Console command id "o='&c1='+encodeURIComponent(c.value);" "c.value='';" - "t.scrollTop=99999999;" + "t.scrollTop=1e8;" "sn=t.scrollTop;" "}" "if(t.scrollTop>=sn){" // User scrolled back so no updates @@ -23,7 +23,7 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM = "if(d.shift()==0){t.value='';}" "z=d.shift();" "if(z.length>0){t.value+=z;}" - "t.scrollTop=99999999;" + "t.scrollTop=1e8;" "sn=t.scrollTop;" "clearTimeout(ft);" "lt=setTimeout(l,ltm);" // webrefresh timer.... @@ -31,7 +31,7 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM = "};" "x.open('GET','cs?c2='+id+o,true);" // Related to Webserver->hasArg("c2") and WebGetArg("c2", stmp, sizeof(stmp)) "x.send();" - "ft=setTimeout(l,20000);" // fail timeout, triggered 20s after asking for XHR + "ft=setTimeout(l,2e4);" // fail timeout, triggered 20s after asking for XHR "}else{" "lt=setTimeout(l,ltm);" // webrefresh timer.... "}" diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h index e8564b72b..eaeb8c453 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_NO_WEB_DISPLAY.h @@ -19,5 +19,5 @@ const char HTTP_SCRIPT_ROOT[] PROGMEM = "};" "x.open('GET','.?m=1'+a,true);" // ?m related to Webserver->hasArg("m") "x.send();" - "ft=setTimeout(la,20000);" // 20s failure timeout + "ft=setTimeout(la,2e4);" // 20s failure timeout "}"; diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h index b42a56499..3bcfd69ab 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_SSE_NO_WEB_DISPLAY.h @@ -16,5 +16,5 @@ const char HTTP_SCRIPT_ROOT[] PROGMEM = "x=new XMLHttpRequest();" "x.open('GET','.?m=1'+a,true);" // ?m related to Webserver->hasArg("m") "x.send();" - "lt=setTimeout(la,20000);" // 20s failure timeout + "lt=setTimeout(la,2e4);" // 20s failure timeout "}"; diff --git a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h index db0ca3ca2..02c1e5c85 100644 --- a/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h +++ b/tasmota/html_uncompressed/HTTP_SCRIPT_ROOT_WEB_DISPLAY.h @@ -22,7 +22,7 @@ const char HTTP_SCRIPT_ROOT[] PROGMEM = "if(rfsh){" "x.open('GET','.?m=1'+a,true);" // ?m related to Webserver->hasArg("m") "x.send();" - "ft=setTimeout(la,20000);" // 20s failure timeout + "ft=setTimeout(la,2e4);" // 20s failure timeout "}" "}" "function seva(par,ivar){" From 5672e0165aca75e44cd4650ef8fe7cba4876bdd2 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 3 Apr 2022 14:48:30 +0200 Subject: [PATCH 326/355] Shrink improv --- tasmota/xdrv_62_improv.ino | 283 +++++++++++++++++-------------------- 1 file changed, 131 insertions(+), 152 deletions(-) diff --git a/tasmota/xdrv_62_improv.ino b/tasmota/xdrv_62_improv.ino index f5e788bc1..12d895cf2 100644 --- a/tasmota/xdrv_62_improv.ino +++ b/tasmota/xdrv_62_improv.ino @@ -55,10 +55,9 @@ enum ImprovSerialType { static const uint8_t IMPROV_SERIAL_VERSION = 1; struct IMPROV { - uint32_t last_read_byte; uint8_t wifi_timeout; uint8_t seriallog_level; - bool message; + uint8_t version; } Improv; /*********************************************************************************************/ @@ -142,141 +141,103 @@ void ImprovSendSetting(uint32_t command) { ImprovSendResponse((uint8_t*)data, len +3); } -bool ImprovParseSerialByte(void) { - // 0 1 2 3 4 5 6 7 8 9 10 11 8 + le +1 - // I M P R O V ve ty le co pl data ... \n - // 49 4D 50 52 4F 56 01 03 xx yy zz ........ 0A - if (6 == TasmotaGlobal.serial_in_byte_counter) { - return (IMPROV_SERIAL_VERSION == TasmotaGlobal.serial_in_byte); - } - if (TasmotaGlobal.serial_in_byte_counter <= 8) { - return true; // Wait for type and length - } - uint32_t data_len = TasmotaGlobal.serial_in_buffer[8]; - if (TasmotaGlobal.serial_in_byte_counter <= 9 + data_len) { // Receive including '\n' - return true; // Wait for data - } - - AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("IMP: Rcvd '%*_H'"), TasmotaGlobal.serial_in_byte_counter, TasmotaGlobal.serial_in_buffer); - - TasmotaGlobal.serial_in_byte_counter--; // Drop '\n' - uint8_t checksum = 0x00; - for (uint32_t i = 0; i < TasmotaGlobal.serial_in_byte_counter; i++) { - checksum += TasmotaGlobal.serial_in_buffer[i]; - } - if (checksum != TasmotaGlobal.serial_in_buffer[TasmotaGlobal.serial_in_byte_counter]) { - ImprovSendError(IMPROV_ERROR_INVALID_RPC); // 0x01 - CRC error - return false; - } - - uint32_t type = TasmotaGlobal.serial_in_buffer[7]; - if (IMPROV_TYPE_RPC == type) { // 0x03 - uint32_t data_length = TasmotaGlobal.serial_in_buffer[10]; - if (data_length != data_len - 2) { - return false; - } - - uint32_t command = TasmotaGlobal.serial_in_buffer[9]; - switch (command) { - case IMPROV_WIFI_SETTINGS: { // 0x01 -// if (RtcSettings.improv_state != IMPROV_STATE_AUTHORIZED) { -// ImprovSendError(IMPROV_ERROR_NOT_AUTHORIZED); // 0x04 -// } else { - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 - // I M P R O V vs ty le co dl sl s s i d pl p a s s w o r d cr - uint32_t ssid_length = TasmotaGlobal.serial_in_buffer[11]; - uint32_t ssid_end = 12 + ssid_length; - uint32_t pass_length = TasmotaGlobal.serial_in_buffer[ssid_end]; - uint32_t pass_start = ssid_end + 1; - uint32_t pass_end = pass_start + pass_length; - TasmotaGlobal.serial_in_buffer[ssid_end] = '\0'; - char* ssid = &TasmotaGlobal.serial_in_buffer[12]; - TasmotaGlobal.serial_in_buffer[pass_end] = '\0'; - char* password = &TasmotaGlobal.serial_in_buffer[pass_start]; +void ImprovReceived(void) { + uint32_t command = TasmotaGlobal.serial_in_buffer[9]; + switch (command) { + case IMPROV_WIFI_SETTINGS: { // 0x01 +// if (RtcSettings.improv_state != IMPROV_STATE_AUTHORIZED) { +// ImprovSendError(IMPROV_ERROR_NOT_AUTHORIZED); // 0x04 +// } else { + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 + // I M P R O V vs ty le co dl sl s s i d pl p a s s w o r d cr + uint32_t ssid_length = TasmotaGlobal.serial_in_buffer[11]; + uint32_t ssid_end = 12 + ssid_length; + uint32_t pass_length = TasmotaGlobal.serial_in_buffer[ssid_end]; + uint32_t pass_start = ssid_end + 1; + uint32_t pass_end = pass_start + pass_length; + TasmotaGlobal.serial_in_buffer[ssid_end] = '\0'; + char* ssid = &TasmotaGlobal.serial_in_buffer[12]; + TasmotaGlobal.serial_in_buffer[pass_end] = '\0'; + char* password = &TasmotaGlobal.serial_in_buffer[pass_start]; #ifdef IMPROV_DEBUG - AddLog(LOG_LEVEL_DEBUG, PSTR("IMP: Ssid '%s', Password '%s'"), ssid, password); + AddLog(LOG_LEVEL_DEBUG, PSTR("IMP: Ssid '%s', Password '%s'"), ssid, password); #endif // IMPROV_DEBUG - Improv.wifi_timeout = IMPROV_WIFI_TIMEOUT; // Set WiFi connect timeout - ImprovSendState(IMPROV_STATE_PROVISIONING); - Settings->flag4.network_wifi = 1; // Enable WiFi - char cmnd[TOPSZ]; - snprintf_P(cmnd, sizeof(cmnd), PSTR(D_CMND_BACKLOG "0 " D_CMND_SSID "1 %s;" D_CMND_PASSWORD "1 %s"), ssid, password); - ExecuteCommand(cmnd, SRC_SERIAL); // Set SSID and Password and restart -// } - break; - } - case IMPROV_GET_CURRENT_STATE: { // 0x02 - ImprovSendState(RtcSettings.improv_state); - if (IMPROV_STATE_PROVISIONED == RtcSettings.improv_state) { - ImprovSendSetting(IMPROV_GET_CURRENT_STATE); - } - break; - } - case IMPROV_GET_DEVICE_INFO: { // 0x03 - char data[200]; - uint32_t len = snprintf_P(data, sizeof(data), PSTR("01\nTasmota\n%s\n%s\n%s\n"), - TasmotaGlobal.version, GetDeviceHardware().c_str(), SettingsText(SET_DEVICENAME)); - data[0] = IMPROV_GET_DEVICE_INFO; - ImprovSendResponse((uint8_t*)data, len); - break; - } - case IMPROV_GET_WIFI_NETWORKS: { // 0x04 - char data[200]; - int n = WiFi.scanNetworks(false, false); // Wait for scan result, hide hidden - if (n) { - int indices[n]; - // Sort RSSI - strongest first - for (uint32_t i = 0; i < n; i++) { indices[i] = i; } - for (uint32_t i = 0; i < n; i++) { - for (uint32_t j = i + 1; j < n; j++) { - if (WiFi.RSSI(indices[j]) > WiFi.RSSI(indices[i])) { - std::swap(indices[i], indices[j]); - } - } - } - // Remove duplicate SSIDs - IMPROV does not distinguish between channels so no need to keep them - for (uint32_t i = 0; i < n; i++) { - if (-1 == indices[i]) { continue; } - String cssid = WiFi.SSID(indices[i]); -// uint32_t cschn = WiFi.channel(indices[i]); - for (uint32_t j = i + 1; j < n; j++) { -// if ((cssid == WiFi.SSID(indices[j])) && (cschn == WiFi.channel(indices[j]))) { - if (cssid == WiFi.SSID(indices[j])) { - indices[j] = -1; // Set dup aps to index -1 - } - } - } - // Send networks - for (uint32_t i = 0; i < n; i++) { - if (-1 == indices[i]) { continue; } // Skip dups - String ssid_copy = WiFi.SSID(indices[i]); - if (!ssid_copy.length()) { ssid_copy = F("no_name"); } - int32_t rssi = WiFi.RSSI(indices[i]); - bool encryption = (ENC_TYPE_NONE == WiFi.encryptionType(indices[i])); - // Send each ssid separately to avoid overflowing the buffer - uint32_t len = snprintf_P(data, sizeof(data), PSTR("01\n%s\n%d\n%s\n"), - ssid_copy.c_str(), rssi, (encryption)?"NO":"YES"); - data[0] = IMPROV_GET_WIFI_NETWORKS; - ImprovSendResponse((uint8_t*)data, len); - } - } - - // Send empty response to signify the end of the list. - data[0] = IMPROV_GET_WIFI_NETWORKS; - ImprovSendResponse((uint8_t*)data, 3); // Empty string - break; - } -/* - case IMPROV_BAD_CHECKSUM: { // 0xFF - break; - } -*/ - default: - ImprovSendError(IMPROV_ERROR_UNKNOWN_RPC); // 0x02 - Unknown payload + Improv.wifi_timeout = IMPROV_WIFI_TIMEOUT; // Set WiFi connect timeout + ImprovSendState(IMPROV_STATE_PROVISIONING); + Settings->flag4.network_wifi = 1; // Enable WiFi + char cmnd[TOPSZ]; + snprintf_P(cmnd, sizeof(cmnd), PSTR(D_CMND_BACKLOG "0 " D_CMND_SSID "1 %s;" D_CMND_PASSWORD "1 %s"), ssid, password); + ExecuteCommand(cmnd, SRC_SERIAL); // Set SSID and Password and restart +// } + break; } - } + case IMPROV_GET_CURRENT_STATE: { // 0x02 + ImprovSendState(RtcSettings.improv_state); + if (IMPROV_STATE_PROVISIONED == RtcSettings.improv_state) { + ImprovSendSetting(command); + } + break; + } + case IMPROV_GET_DEVICE_INFO: { // 0x03 + char data[200]; + uint32_t len = snprintf_P(data, sizeof(data), PSTR("01\nTasmota\n%s\n%s\n%s\n"), + TasmotaGlobal.version, GetDeviceHardware().c_str(), SettingsText(SET_DEVICENAME)); + data[0] = command; + ImprovSendResponse((uint8_t*)data, len); + break; + } + case IMPROV_GET_WIFI_NETWORKS: { // 0x04 + char data[200]; + int n = WiFi.scanNetworks(false, false); // Wait for scan result, hide hidden + if (n) { + int indices[n]; + // Sort RSSI - strongest first + for (uint32_t i = 0; i < n; i++) { indices[i] = i; } + for (uint32_t i = 0; i < n; i++) { + for (uint32_t j = i + 1; j < n; j++) { + if (WiFi.RSSI(indices[j]) > WiFi.RSSI(indices[i])) { + std::swap(indices[i], indices[j]); + } + } + } + // Remove duplicate SSIDs - IMPROV does not distinguish between channels so no need to keep them + for (uint32_t i = 0; i < n; i++) { + if (-1 == indices[i]) { continue; } + String cssid = WiFi.SSID(indices[i]); + for (uint32_t j = i + 1; j < n; j++) { + if (cssid == WiFi.SSID(indices[j])) { + indices[j] = -1; // Set dup aps to index -1 + } + } + } + // Send networks + for (uint32_t i = 0; i < n; i++) { + if (-1 == indices[i]) { continue; } // Skip dups + String ssid_copy = WiFi.SSID(indices[i]); + if (!ssid_copy.length()) { ssid_copy = F("no_name"); } + int32_t rssi = WiFi.RSSI(indices[i]); + bool encryption = (ENC_TYPE_NONE == WiFi.encryptionType(indices[i])); + // Send each ssid separately to avoid overflowing the buffer + uint32_t len = snprintf_P(data, sizeof(data), PSTR("01\n%s\n%d\n%s\n"), + ssid_copy.c_str(), rssi, (encryption)?"NO":"YES"); + data[0] = command; + ImprovSendResponse((uint8_t*)data, len); + } + } - return false; + // Send empty response to signify the end of the list. + data[0] = command; + ImprovSendResponse((uint8_t*)data, 3); // Empty string + break; + } +/* + case IMPROV_BAD_CHECKSUM: { // 0xFF + break; + } +*/ + default: + ImprovSendError(IMPROV_ERROR_UNKNOWN_RPC); // 0x02 - Unknown payload + } } /*********************************************************************************************/ @@ -286,26 +247,44 @@ bool ImprovSerialInput(void) { if (6 == TasmotaGlobal.serial_in_byte_counter) { TasmotaGlobal.serial_in_buffer[TasmotaGlobal.serial_in_byte_counter] = 0; if (!strcmp_P(TasmotaGlobal.serial_in_buffer, PSTR("IMPROV"))) { - Improv.seriallog_level = TasmotaGlobal.seriallog_level; - TasmotaGlobal.seriallog_level = 0; // Disable seriallogging interfering with IMPROV - Improv.last_read_byte = millis(); - Improv.message = true; - } - } - if (Improv.message) { - uint32_t now = millis(); - if (now - Improv.last_read_byte < 50) { - TasmotaGlobal.serial_in_buffer[TasmotaGlobal.serial_in_byte_counter] = TasmotaGlobal.serial_in_byte; - if (ImprovParseSerialByte()) { - TasmotaGlobal.serial_in_byte_counter++; - TasmotaGlobal.serial_in_byte = 0; - Improv.last_read_byte = now; - return false; + if (IMPROV_SERIAL_VERSION == TasmotaGlobal.serial_in_byte) { + Improv.seriallog_level = TasmotaGlobal.seriallog_level; + TasmotaGlobal.seriallog_level = 0; // Disable seriallogging interfering with IMPROV + Improv.version = IMPROV_SERIAL_VERSION; } } - Improv.message = false; - TasmotaGlobal.seriallog_level = Improv.seriallog_level; // Restore seriallogging - return true; + } + if (IMPROV_SERIAL_VERSION == Improv.version) { + TasmotaGlobal.serial_in_buffer[TasmotaGlobal.serial_in_byte_counter++] = TasmotaGlobal.serial_in_byte; + // 0 1 2 3 4 5 6 7 8 9 10 11 8 + le +1 + // I M P R O V ve ty le co pl data ... \n + // 49 4D 50 52 4F 56 01 03 xx yy zz ........ 0A + if (TasmotaGlobal.serial_in_byte_counter > 8) { // Wait for length + uint32_t data_len = TasmotaGlobal.serial_in_buffer[8]; + if (TasmotaGlobal.serial_in_byte_counter > 10 + data_len) { // Receive including '\n' + + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("IMP: Rcvd '%*_H'"), TasmotaGlobal.serial_in_byte_counter, TasmotaGlobal.serial_in_buffer); + + uint32_t checksum_pos = TasmotaGlobal.serial_in_byte_counter -2; + uint8_t checksum = 0x00; + for (uint32_t i = 0; i < checksum_pos; i++) { + checksum += TasmotaGlobal.serial_in_buffer[i]; + } + if (checksum != TasmotaGlobal.serial_in_buffer[checksum_pos]) { + ImprovSendError(IMPROV_ERROR_INVALID_RPC); // 0x01 - CRC error + } + else if (IMPROV_TYPE_RPC == TasmotaGlobal.serial_in_buffer[7]) { + uint32_t data_length = TasmotaGlobal.serial_in_buffer[10]; + if (data_length == data_len - 2) { + ImprovReceived(); + } + } + Improv.version = 0; // Done + TasmotaGlobal.seriallog_level = Improv.seriallog_level; // Restore seriallogging + return true; + } + } + TasmotaGlobal.serial_in_byte = 0; } return false; } @@ -313,7 +292,7 @@ bool ImprovSerialInput(void) { void ImprovEverySecond(void) { if (Improv.wifi_timeout) { Improv.wifi_timeout--; - if (Improv.wifi_timeout < IMPROV_WIFI_TIMEOUT -3) { // Tasmota restarts after ssid or password change + if (Improv.wifi_timeout < IMPROV_WIFI_TIMEOUT -3) { // Tasmota restarts after ssid or password change if ((!TasmotaGlobal.global_state.wifi_down)) { Improv.wifi_timeout = 0; if (IMPROV_STATE_AUTHORIZED == RtcSettings.improv_state) { From e9ec0934d30b26e73f7245e9fd0d00cc81778c61 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 3 Apr 2022 15:01:47 +0200 Subject: [PATCH 327/355] Remove support for Internet Explorer Remove support for Internet Explorer by allowing ECMAScript6 syntax using less JavaScript code bytes (#15280) --- BUILDS.md | 1 - CHANGELOG.md | 2 +- RELEASENOTES.md | 1 + tasmota/html_compressed/HTTP_HEADER1_NOES6.h | 33 ------------------- .../html_uncompressed/HTTP_HEADER1_NOES6.h | 23 ------------- tasmota/my_user_config.h | 1 - tasmota/xdrv_01_webserver.ino | 12 ++----- 7 files changed, 4 insertions(+), 69 deletions(-) delete mode 100644 tasmota/html_compressed/HTTP_HEADER1_NOES6.h delete mode 100644 tasmota/html_uncompressed/HTTP_HEADER1_NOES6.h diff --git a/BUILDS.md b/BUILDS.md index 733b991ec..7a9217574 100644 --- a/BUILDS.md +++ b/BUILDS.md @@ -20,7 +20,6 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up | USE_TELEGRAM | - | - / - | - | - | - | - | | USE_KNX | - | - / x | x | - | - | - | | USE_WEBSERVER | x | x / x | x | x | x | x | -| USE_JAVASCRIPT_ES6 | - | - / - | - | - | - | - | | USE_WEBSEND_RESPONSE | - | - / - | - | - | - | - | | USE_EMULATION_HUE | x | x / x | - | x | - | - | | USE_EMULATION_WEMO | x | x / x | - | x | - | - | diff --git a/CHANGELOG.md b/CHANGELOG.md index d2a312afe..10889660d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ All notable changes to this project will be documented in this file. - Support for improv as used by esp-web-tools ### Changed - +- Remove support for Internet Explorer by allowing ECMAScript6 syntax using less JavaScript code bytes (#15280) ### Fixed diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 1c56d6c18..b77ef3e22 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -136,6 +136,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - Extent number of pulsetimers from 8 to 32 [#8266](https://github.com/arendst/Tasmota/issues/8266) - Consolidate three RTC chip drivers (DS3231, BM8563, PCF85363) into one driver updating RTC as soon as possible after restart - Removed command ``Sensor33`` and replaced by ``RtcNtpserver`` +- Remove support for Internet Explorer by allowing ECMAScript6 syntax using less JavaScript code bytes [#15280](https://github.com/arendst/Tasmota/issues/15280) - DS3231 I2C address define ``USE_RTC_ADDR`` into ``DS3231_ADDRESS`` - Display of energy values in GUI use columns when define ``USE_ENERGY_COLUMN_GUI`` is enabled (default) - ESP8266 Shrinked tasmota-minimal.bin by removing all commands except ``Upgrade``, ``Upload``, ``OtaUrl``, ``Seriallog``, ``Weblog`` and ``Restart`` diff --git a/tasmota/html_compressed/HTTP_HEADER1_NOES6.h b/tasmota/html_compressed/HTTP_HEADER1_NOES6.h deleted file mode 100644 index 85c977688..000000000 --- a/tasmota/html_compressed/HTTP_HEADER1_NOES6.h +++ /dev/null @@ -1,33 +0,0 @@ -///////////////////////////////////////////////////////////////////// -// compressed by tools/unishox/compress-html-uncompressed.py -///////////////////////////////////////////////////////////////////// - -const size_t HTTP_HEADER1_SIZE = 739; -const char HTTP_HEADER1_COMPRESSED[] PROGMEM = "\x3D\x0F\xE1\x10\x98\x1D\x19\x0C\x64\x85\x50\xD0\x8F\xC3\xD0\x55\x0D\x09\x05\x7C" - "\x3C\x7C\x3D\x87\xD7\x8F\x62\x0C\x2B\xF7\x8F\x87\xB0\xF6\x1F\x87\xA0\xA7\x62\x1F" - "\x87\xA0\xD7\x56\x83\x15\x7F\xF3\xA3\xE1\xF6\x2E\x8C\x1D\x67\x3E\x7D\x90\x21\x52" - "\xEB\x1A\xCF\x87\xB0\xCF\x58\xF8\xCC\xFD\x1E\xC4\x1E\x75\x3E\xA3\xE1\xEC\x1F\xD1" - "\x28\x51\xF0\x46\x67\xA1\xB3\xAC\x7F\x44\xA1\x47\x56\xF6\xD6\xD8\x47\x5F\x83\xB0" - "\x99\xF0\xE4\x3A\x88\x5F\x9F\xCE\xBF\x07\x61\x58\xE0\x99\xF3\xB0\xF6\x1D\x87\xE1" - "\xE8\x16\xF1\xA2\xFB\x08\xF8\x7B\x34\x3C\xE3\xD8\x85\x7D\x98\x3E\x1E\xC1\x2E\xAC" - "\xF3\xD1\xB6\x3C\xCE\xC3\x61\xD7\xA1\xE7\x1E\x07\x5F\x99\xCE\xC3\xA8\x88\xAE\xEC" - "\x75\xDB\xB6\x3A\xC3\xBB\x77\x66\xA0\xC8\x7C\xAC\xAC\xAC\xAC\x8C\x0F\x15\x95\x95" - "\x90\x63\xC4\x57\x77\x66\xAB\xBB\xBD\xB2\x37\xA0\x11\x32\x04\x29\x46\xF5\xE3\xB0" - "\xEC\x3B\x0E\xC2\xB2\x18\x73\x4E\xC2\x1C\x76\xC8\x51\xCE\x22\x36\x1C\xA3\xB0\x85" - "\x1C\xF9\x1A\x1C\x44\x66\x73\x09\x91\xB7\x87\x1D\xB2\x14\x2C\x43\x94\x76\x10\xA3" - "\x9E\x2E\x10\xCC\xE6\x13\x39\xB6\x43\x8E\xD9\x18\x1A\x46\xD1\xA7\x60\xA2\x1A\x68" - "\x6C\x33\x39\x84\x46\xD1\xE2\x36\x8E\x3B\x64\x28\xB0\x33\x94\x76\x10\xA3\x9A\x76" - "\xC8\x43\x33\x98\x46\x08\x61\x0C\x1C\x76\xC8\x51\xCD\x2E\x39\x47\x61\x0A\x3B\x08" - "\x43\x88\x8C\xCE\x61\x18\x39\xA7\x61\x0E\x3B\x64\xCA\xCA\xCB\x0E\x61\x13\x2B\x2B" - "\x21\x05\x90\xE2\xB2\xB2\xB3\x9E\x21\xE2\x35\x02\x5C\xC0\x5B\xB8\x0A\x17\x0F\x61" - "\xF8\x7A\x56\xD0\x4C\xFC\x3E\xBC\x8E\xB4\x7D\x78\xF4\x3B\x01\x06\x59\xE9\xE0\xFF" - "\xA3\x28\xFC\x33\xBF\xA3\x61\xF3\x85\x84\x11\xD4\x15\x1D\x55\x87\x55\x0C\x3A\x86" - "\x06\x7C\x3E\xCF\xB3\xC1\x81\x7C\x1D\x6E\x72\x63\x8E\xEF\x8E\xF1\xED\xFB\xA1\x7F" - "\xE4\x26\x06\x2C\x6B\xEA\x3A\x0F\x3A\x26\x13\x1A\xFA\x88\x71\x91\x68\x87\x77\xC7" - "\x78\xF0\x7B\x81\x13\x0E\x35\x78\x13\xF0\xE3\x50\xB7\xF3\x22\xF3\x09\x87\x59\xF0" - "\x49\xC3\x7C\x30\xEE\xE9\xDE\x3D\xAC\x71\xDD\xD3\xBC\x74\xA3\x21\x8C\xF8\x77\x41" - "\x1A\x41\xF0\xF8\x7D\xD3\x36\x51\xF6\x76\x8F\xB1\x97\xEF\x0F\xE7\xC4\x3E\xCF\x30" - "\x41\x9C\x08\xF8\xF8\xF8\x47\x74\xC1\xDE\x3D\xA3\xFB\xC2\x60\xF9\xD2\xC4\x10\x99" - "\x9B\xEA\x20\xB7\xD4\xF9\xFC\xEE\x9F\x61\x65\x88\x7D\x9D\x46\x0E\xF1\xE0\xF7\x1B"; - -#define HTTP_HEADER1 Decompress(HTTP_HEADER1_COMPRESSED,HTTP_HEADER1_SIZE).c_str() \ No newline at end of file diff --git a/tasmota/html_uncompressed/HTTP_HEADER1_NOES6.h b/tasmota/html_uncompressed/HTTP_HEADER1_NOES6.h deleted file mode 100644 index 9bce849d3..000000000 --- a/tasmota/html_uncompressed/HTTP_HEADER1_NOES6.h +++ /dev/null @@ -1,23 +0,0 @@ -const char HTTP_HEADER1[] PROGMEM = - "" - "" - "" - "" - "" - "%s - %s" - - "" + "" "\0" // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/tasmota/xdrv_43_mlx90640.ino b/tasmota/xdrv_43_mlx90640.ino index 9262b5734..833340c90 100644 --- a/tasmota/xdrv_43_mlx90640.ino +++ b/tasmota/xdrv_43_mlx90640.ino @@ -144,12 +144,12 @@ const char HTTP_MLX90640_2a_SNS_COMPRESSED[] PROGMEM = "\x33\xBF\xA0\xB7\x9A\x3E #else const char HTTP_MLX90640_2a_SNS[] PROGMEM = "var line = 0;" - "setInterval(function() {" + "setInterval(()=>{" "rl('ul',line);" // 0 = do NOT force refresh "},200);" "function rl(s,v){" //source, value "var xr=new XMLHttpRequest();" - "xr.onreadystatechange=function(){" + "xr.onreadystatechange=()=>{" "if(xr.readyState==4&&xr.status==200){" "var aB = xr.response;" // arrayBuffer "var i;" diff --git a/tasmota/xdrv_52_9_berry.ino b/tasmota/xdrv_52_9_berry.ino index 443240b5a..47085ada8 100644 --- a/tasmota/xdrv_52_9_berry.ino +++ b/tasmota/xdrv_52_9_berry.ino @@ -484,13 +484,13 @@ const char HTTP_SCRIPT_BERRY_CONSOLE[] PROGMEM = "cn=0;" "}" "c.value='';" - "t.scrollTop=99999999;" + "t.scrollTop=1e8;" "sn=t.scrollTop;" "}" "if(t.scrollTop>=sn){" // User scrolled back so no updates "if(x!=null){x.abort();}" // Abort if no response within 2 seconds (happens on restart 1) "x=new XMLHttpRequest();" - "x.onreadystatechange=function(){" + "x.onreadystatechange=()=>{" "if(x.readyState==4&&x.status==200){" "var d,t1;" "d=x.responseText.split(/" BERRY_CONSOLE_CMD_DELIMITER "/,2);" // Field separator @@ -508,7 +508,7 @@ const char HTTP_SCRIPT_BERRY_CONSOLE[] PROGMEM = "t1.innerText=d1;" "t.appendChild(t1);" "}" - "t.scrollTop=99999999;" + "t.scrollTop=1e8;" "sn=t.scrollTop;" "clearTimeout(ft);" "lt=setTimeout(l,ltm);" // webrefresh timer.... @@ -516,7 +516,7 @@ const char HTTP_SCRIPT_BERRY_CONSOLE[] PROGMEM = "};" "x.open('GET','bc?c2='+id+o,true);" // Related to Webserver->hasArg("c2") and WebGetArg("c2", stmp, sizeof(stmp)) "x.send();" - "ft=setTimeout(l,20000);" // fail timeout, triggered 20s after asking for XHR + "ft=setTimeout(l,2e4);" // fail timeout, triggered 20s after asking for XHR "}else{" "lt=setTimeout(l,ltm);" // webrefresh timer.... "}" diff --git a/tasmota/xsns_62_esp32_mi.h b/tasmota/xsns_62_esp32_mi.h index f536c6c9c..ba01d619a 100644 --- a/tasmota/xsns_62_esp32_mi.h +++ b/tasmota/xsns_62_esp32_mi.h @@ -451,7 +451,7 @@ const char HTTP_MI32_SCRIPT_1[] PROGMEM = "for(const el of ti){var t=parseInt(el.innerText);el.innerText=t+1;}}" "function update(){" //source, value "var xr=new XMLHttpRequest();" - "xr.onreadystatechange=function(){" + "xr.onreadystatechange=()=>{" "if(xr.readyState==4&&xr.status==200){" "var r = xr.response;" // new widget "if(r.length>2000){return;};if(r.length==0){return;}" From 4cb6dc2f5872460ab1718f2b13b4b0faf5f266eb Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 3 Apr 2022 16:45:08 +0200 Subject: [PATCH 329/355] Fix improve wrong ip address --- tasmota/support_wifi.ino | 12 +++++------- tasmota/xdrv_01_webserver.ino | 4 ++-- tasmota/xdrv_62_improv.ino | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/tasmota/support_wifi.ino b/tasmota/support_wifi.ino index 78c9ed843..d271de1cc 100644 --- a/tasmota/support_wifi.ino +++ b/tasmota/support_wifi.ino @@ -379,18 +379,16 @@ String WifiGetIPv6(void) #endif // LWIP_IPV6=1 // Check to see if we have any routable IP address -inline bool WifiCheck_hasIP(IPAddress const & ip_address) -{ +bool WifiHasIP(void) { #ifdef LWIP2_IPV6 return !a.isLocal(); #else - return static_cast(ip_address) != 0; + return (uint32_t)WiFi.localIP() != 0; #endif } -void WifiCheckIp(void) -{ - if ((WL_CONNECTED == WiFi.status()) && WifiCheck_hasIP(WiFi.localIP())) { +void WifiCheckIp(void) { + if ((WL_CONNECTED == WiFi.status()) && WifiHasIP()) { WifiSetState(1); Wifi.counter = WIFI_CHECK_SEC; Wifi.retry = Wifi.retry_init; @@ -520,7 +518,7 @@ void WifiCheck(uint8_t param) Wifi.counter = WIFI_CHECK_SEC; WifiCheckIp(); } - if ((WL_CONNECTED == WiFi.status()) && WifiCheck_hasIP(WiFi.localIP()) && !Wifi.config_type) { + if ((WL_CONNECTED == WiFi.status()) && WifiHasIP() && !Wifi.config_type) { WifiSetState(1); if (Settings->flag3.use_wifi_rescan) { // SetOption57 - Scan wifi network every 44 minutes for configured AP's if (!(TasmotaGlobal.uptime % (60 * WIFI_RESCAN_MINUTES))) { diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino index fbb83954f..20d857c50 100644 --- a/tasmota/xdrv_01_webserver.ino +++ b/tasmota/xdrv_01_webserver.ino @@ -105,7 +105,7 @@ const char HTTP_SCRIPT_WIFI[] PROGMEM = "}"; const char HTTP_SCRIPT_HIDE[] PROGMEM = - "function hidBtns() {" + "function hidBtns(){" "eb('butmo').style.display='none';" "eb('butmod').style.display='none';" "eb('but0').style.display='block';" @@ -3549,7 +3549,7 @@ bool Xdrv01(uint8_t function) if (Web.wifi_test_counter) { Web.wifi_test_counter--; AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_WIFI D_TRYING_TO_CONNECT " %s"), SettingsText(SET_STASSID1)); - if ( WifiCheck_hasIP(WiFi.localIP()) ) { // Got IP - Connection Established + if (WifiHasIP()) { // Got IP - Connection Established Web.wifi_test_AP_TIMEOUT = false; Web.wifi_test_counter = 0; Web.wifiTest = WIFI_TEST_FINISHED; diff --git a/tasmota/xdrv_62_improv.ino b/tasmota/xdrv_62_improv.ino index 12d895cf2..0f03bbff8 100644 --- a/tasmota/xdrv_62_improv.ino +++ b/tasmota/xdrv_62_improv.ino @@ -293,7 +293,7 @@ void ImprovEverySecond(void) { if (Improv.wifi_timeout) { Improv.wifi_timeout--; if (Improv.wifi_timeout < IMPROV_WIFI_TIMEOUT -3) { // Tasmota restarts after ssid or password change - if ((!TasmotaGlobal.global_state.wifi_down)) { + if (WifiHasIP()) { Improv.wifi_timeout = 0; if (IMPROV_STATE_AUTHORIZED == RtcSettings.improv_state) { RtcSettings.improv_state = IMPROV_STATE_PROVISIONED; From a80a100efbc300ee151aa1cd4ef1ec69f927a70d Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 3 Apr 2022 17:51:03 +0200 Subject: [PATCH 330/355] Consolidate HX711 ShiftIn function Consolidate HX711 ShiftIn function (#13983) --- tasmota/xsns_34_hx711.ino | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/tasmota/xsns_34_hx711.ino b/tasmota/xsns_34_hx711.ino index 12a90577d..a695a8adc 100644 --- a/tasmota/xsns_34_hx711.ino +++ b/tasmota/xsns_34_hx711.ino @@ -87,11 +87,33 @@ struct HX { /*********************************************************************************************/ +uint8_t HxShiftIn(void) { + uint8_t value = 0; + + for (uint32_t i = 0; i < 8; ++i) { + digitalWrite(Hx.pin_sck, HIGH); +#ifdef ESP32 + delayMicroseconds(1); // could be required for faster mcu's +#endif + value |= digitalRead(Hx.pin_dout) << (7 - i); +#ifdef ESP32 + delayMicroseconds(1); // could be required for faster mcu's +#endif + digitalWrite(Hx.pin_sck, LOW); +#ifdef ESP32 + delayMicroseconds(1); // could be required for faster mcu's +#endif + } + return value; +} + bool HxIsReady(uint16_t timeout) { // A reading can take up to 100 mS or 600mS after power on uint32_t start = millis(); - while ((digitalRead(Hx.pin_dout) == HIGH) && (millis() - start < timeout)) { yield(); } + while ((digitalRead(Hx.pin_dout) == HIGH) && (millis() - start < timeout)) { + yield(); + } return (digitalRead(Hx.pin_dout) == LOW); } @@ -103,13 +125,19 @@ long HxRead(void) uint8_t filler = 0x00; // pulse the clock pin 24 times to read the data - data[2] = shiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); - data[1] = shiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); - data[0] = shiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); +// data[2] = shiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); +// data[1] = shiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); +// data[0] = shiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); + data[2] = HxShiftIn(); + data[1] = HxShiftIn(); + data[0] = HxShiftIn(); // set the channel and the gain factor for the next reading using the clock pin for (unsigned int i = 0; i < HX_GAIN_128; i++) { digitalWrite(Hx.pin_sck, HIGH); +#ifdef ESP32 + delayMicroseconds(1); // could be required for faster mcu's +#endif digitalWrite(Hx.pin_sck, LOW); } @@ -308,6 +336,8 @@ void HxInit(void) void HxEvery100mSecond(void) { long raw = HxRead(); + if (-1 == raw) { return; } + Hx.sum_raw += raw; Hx.sum_weight += raw; From c4a9757674696696c182fb9134119fb1bcdefd2f Mon Sep 17 00:00:00 2001 From: Barbudor Date: Sun, 3 Apr 2022 18:16:08 +0200 Subject: [PATCH 331/355] add a yield to insure downlad task is scheduled --- tasmota/xdrv_50_filesystem.ino | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tasmota/xdrv_50_filesystem.ino b/tasmota/xdrv_50_filesystem.ino index 828028827..2000a88e2 100644 --- a/tasmota/xdrv_50_filesystem.ino +++ b/tasmota/xdrv_50_filesystem.ino @@ -348,7 +348,7 @@ bool TfsLoadFile(const char *fname, uint8_t *buf, uint32_t len) { AddLog(LOG_LEVEL_INFO, PSTR("TFS: File '%s' not found"), fname +1); // Skip leading slash return false; } - + size_t flen = file.size(); if (len > flen){ len = flen; @@ -888,7 +888,10 @@ uint8_t UfsDownloadFile(char *file) { UfsData.download_busy = true; char *path = (char*)malloc(128); strcpy(path,file); - xTaskCreatePinnedToCore(donload_task, "DT", 6000, (void*)path, 3, NULL, 1); + BaseType_t ret = xTaskCreatePinnedToCore(donload_task, "DT", 6000, (void*)path, 3, nullptr, 1); + if (ret != pdPASS) + AddLog(LOG_LEVEL_INFO, PSTR("UFS: Download task failed with %d"), ret); + yield(); #endif // ESP32_DOWNLOAD_TASK return 0; From e047c902284168d1886dd6cd1a2a31507702a7b7 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 3 Apr 2022 18:20:07 +0200 Subject: [PATCH 332/355] Add TasShiftIn function Add TasShiftIn function for future use. --- tasmota/support.ino | 47 +++++++++++++++++++++++++++++++++++++++ tasmota/xsns_34_hx711.ino | 34 ++++++---------------------- 2 files changed, 54 insertions(+), 27 deletions(-) diff --git a/tasmota/support.ino b/tasmota/support.ino index dab3d1e1a..a40412bc1 100644 --- a/tasmota/support.ino +++ b/tasmota/support.ino @@ -1975,6 +1975,53 @@ uint8_t Dec2Bcd(uint8_t n) { return n + 6 * (n / 10); } +/*********************************************************************************************/ + +uint8_t TasShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) { + uint8_t value = 0; + + for (uint32_t i = 0; i < 8; ++i) { + digitalWrite(clockPin, HIGH); +#ifdef ESP32 + delayMicroseconds(1); +#endif + if(bitOrder == LSBFIRST) { + value |= digitalRead(dataPin) << i; + } else { + value |= digitalRead(dataPin) << (7 - i); + } +#ifdef ESP32 + delayMicroseconds(1); +#endif + digitalWrite(clockPin, LOW); +#ifdef ESP32 + delayMicroseconds(1); +#endif + } + return value; +} + +void TasShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val) { + for (uint32_t i = 0; i < 8; i++) { + if(bitOrder == LSBFIRST) { + digitalWrite(dataPin, !!(val & (1 << i))); + } else { + digitalWrite(dataPin, !!(val & (1 << (7 - i)))); + } +#ifdef ESP32 + delayMicroseconds(1); +#endif + digitalWrite(clockPin, HIGH); +#ifdef ESP32 + delayMicroseconds(1); +#endif + digitalWrite(clockPin, LOW); +#ifdef ESP32 + delayMicroseconds(1); +#endif + } +} + /*********************************************************************************************\ * Sleep aware time scheduler functions borrowed from ESPEasy \*********************************************************************************************/ diff --git a/tasmota/xsns_34_hx711.ino b/tasmota/xsns_34_hx711.ino index a695a8adc..8570d9c3b 100644 --- a/tasmota/xsns_34_hx711.ino +++ b/tasmota/xsns_34_hx711.ino @@ -87,26 +87,6 @@ struct HX { /*********************************************************************************************/ -uint8_t HxShiftIn(void) { - uint8_t value = 0; - - for (uint32_t i = 0; i < 8; ++i) { - digitalWrite(Hx.pin_sck, HIGH); -#ifdef ESP32 - delayMicroseconds(1); // could be required for faster mcu's -#endif - value |= digitalRead(Hx.pin_dout) << (7 - i); -#ifdef ESP32 - delayMicroseconds(1); // could be required for faster mcu's -#endif - digitalWrite(Hx.pin_sck, LOW); -#ifdef ESP32 - delayMicroseconds(1); // could be required for faster mcu's -#endif - } - return value; -} - bool HxIsReady(uint16_t timeout) { // A reading can take up to 100 mS or 600mS after power on @@ -125,20 +105,20 @@ long HxRead(void) uint8_t filler = 0x00; // pulse the clock pin 24 times to read the data -// data[2] = shiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); -// data[1] = shiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); -// data[0] = shiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); - data[2] = HxShiftIn(); - data[1] = HxShiftIn(); - data[0] = HxShiftIn(); + data[2] = TasShiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); + data[1] = TasShiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); + data[0] = TasShiftIn(Hx.pin_dout, Hx.pin_sck, MSBFIRST); // set the channel and the gain factor for the next reading using the clock pin for (unsigned int i = 0; i < HX_GAIN_128; i++) { digitalWrite(Hx.pin_sck, HIGH); #ifdef ESP32 - delayMicroseconds(1); // could be required for faster mcu's + delayMicroseconds(1); #endif digitalWrite(Hx.pin_sck, LOW); +#ifdef ESP32 + delayMicroseconds(1); +#endif } // Replicate the most significant bit to pad out a 32-bit signed integer From 0915664eaedd514605472d2efe28fbb97fcdf566 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Mon, 4 Apr 2022 09:10:54 +0200 Subject: [PATCH 333/355] Berry improve asserts and stack size --- lib/libesp32/berry/default/berry_conf.h | 11 +++++++++++ lib/libesp32/berry/src/be_parser.c | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/libesp32/berry/default/berry_conf.h b/lib/libesp32/berry/default/berry_conf.h index 8ee9cd0ba..43994b22d 100644 --- a/lib/libesp32/berry/default/berry_conf.h +++ b/lib/libesp32/berry/default/berry_conf.h @@ -251,6 +251,17 @@ extern "C" { #ifdef USE_BERRY_DEBUG #undef BE_DEBUG_RUNTIME_INFO #define BE_DEBUG_RUNTIME_INFO 1 /* record line information in 32 bits to be places in IRAM */ + #undef BE_DEBUG + #define BE_DEBUG 1 + #undef be_assert + #define be_assert(expr) \ + ((expr) \ + ? (0) \ + : serial_debug("BRY: ASSERT '%s', %s - %i\n", #expr, __FILE__, __LINE__)) + #ifdef USE_LVGL + #undef BE_STACK_START + #define BE_STACK_START 200 + #endif // USE_LVGL #endif // USE_BERRY_DEBUG #endif diff --git a/lib/libesp32/berry/src/be_parser.c b/lib/libesp32/berry/src/be_parser.c index dd16c68d7..d0c35bb52 100644 --- a/lib/libesp32/berry/src/be_parser.c +++ b/lib/libesp32/berry/src/be_parser.c @@ -1694,7 +1694,7 @@ static void statement(bparser *parser) case OptSemic: scan_next_token(parser); break; /* empty statement */ default: expr_stmt(parser); break; } - be_assert(parser->finfo->freereg == be_list_count(parser->finfo->local)); + be_assert(parser->finfo->freereg >= be_list_count(parser->finfo->local)); } static void stmtlist(bparser *parser) From a64718da6b2bd8e21d8d61470bb6416cf77016a8 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 4 Apr 2022 10:59:33 +0200 Subject: [PATCH 334/355] Set default USB mode settings --- boards/esp32c3.json | 2 +- boards/esp32s2.json | 2 +- boards/esp32s3.json | 2 +- boards/esp32s3_8M.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/boards/esp32c3.json b/boards/esp32c3.json index 762172fc3..8e1dae3d5 100644 --- a/boards/esp32c3.json +++ b/boards/esp32c3.json @@ -4,7 +4,7 @@ "ldscript": "esp32c3_out.ld" }, "core": "esp32", - "extra_flags": "-DARDUINO_USB_CDC_ON_BOOT=0 -DESP32_4M -DESP32C3", + "extra_flags": "-DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=0 -DESP32_4M -DESP32C3", "f_cpu": "160000000L", "f_flash": "80000000L", "flash_mode": "dout", diff --git a/boards/esp32s2.json b/boards/esp32s2.json index e0736aa29..07c043b2f 100644 --- a/boards/esp32s2.json +++ b/boards/esp32s2.json @@ -4,7 +4,7 @@ "ldscript": "esp32s2_out.ld" }, "core": "esp32", - "extra_flags": "-DBOARD_HAS_PSRAM -DESP32_4M -DESP32S2", + "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=0 -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DESP32_4M -DESP32S2", "f_cpu": "240000000L", "f_flash": "80000000L", "flash_mode": "dout", diff --git a/boards/esp32s3.json b/boards/esp32s3.json index bb7c9afe6..78f03cced 100644 --- a/boards/esp32s3.json +++ b/boards/esp32s3.json @@ -5,7 +5,7 @@ "memory_type": "qspi_qspi" }, "core": "esp32", - "extra_flags": "-DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3", + "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=0 -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DESP32_4M -DESP32S3", "f_cpu": "240000000L", "f_flash": "80000000L", "flash_mode": "dio", diff --git a/boards/esp32s3_8M.json b/boards/esp32s3_8M.json index 5e09bf5a0..1996236c7 100644 --- a/boards/esp32s3_8M.json +++ b/boards/esp32s3_8M.json @@ -5,7 +5,7 @@ "memory_type": "qspi_qspi" }, "core": "esp32", - "extra_flags": "-DBOARD_HAS_PSRAM -DESP32_8M -DESP32S3", + "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=0 -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DESP32_8M -DESP32S3", "f_cpu": "240000000L", "f_flash": "80000000L", "flash_mode": "dio", From 72f1da9ca4c5ee2692ceafd8b0e2260ccb37324f Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 4 Apr 2022 11:23:40 +0200 Subject: [PATCH 335/355] add reset reasons --- tasmota/support_esp.ino | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tasmota/support_esp.ino b/tasmota/support_esp.ino index 4517350ad..9797d1859 100644 --- a/tasmota/support_esp.ino +++ b/tasmota/support_esp.ino @@ -382,6 +382,10 @@ String ESP32GetResetReason(uint32_t cpu_no) { case 17 : return F("Time Group1 reset CPU"); // 17 - TG1WDT_CPU_RESET case 18 : return F("Super watchdog reset digital core and rtc module"); // 18 - SUPER_WDT_RESET case 19 : return F("Glitch reset digital core and rtc module"); // 19 - GLITCH_RTC_RESET + case 20 : return F("Efuse reset digital core"); // 20 EFUSE_RESET + case 21 : return F("Usb uart reset digital core"); // 21 USB_UART_CHIP_RESET + case 22 : return F("Usb jtag reset digital core"); // 22 USB_JTAG_CHIP_RESET + case 23 : return F("Power glitch reset digital core and rtc module"); // 23 POWER_GLITCH_RESET } return F("No meaning"); // 0 and undefined From 18661207c62eaa5c07d9b735257acfecb217dc72 Mon Sep 17 00:00:00 2001 From: Siah-All Date: Mon, 4 Apr 2022 16:36:27 +0200 Subject: [PATCH 336/355] fix slider range to contain red #FF0000 --- tasmota/xdrv_01_webserver.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino index 20d857c50..b90247d95 100644 --- a/tasmota/xdrv_01_webserver.ino +++ b/tasmota/xdrv_01_webserver.ino @@ -1151,7 +1151,7 @@ void HandleRoot(void) PSTR("b"), // b - Unique HTML id PSTR("#800"), PSTR("#f00 5%,#ff0 20%,#0f0 35%,#0ff 50%,#00f 65%,#f0f 80%,#f00 95%,#800"), // Hue colors 2, // sl2 - Unique range HTML id - Used as source for Saturation end color - 1, 359, // Range valid Hue + 0, 359, // Range valid Hue hue, 'h', 0); // h0 - Value id From 3651147fa2a9853b04eb00f62f8eb1339ef2abd1 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Mon, 4 Apr 2022 17:21:30 +0200 Subject: [PATCH 337/355] Berry syntax is now native in Github --- .gitattributes | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index d8f6caa99..745bc27a1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15,6 +15,3 @@ *.PDF diff=astextplain *.rtf diff=astextplain *.RTF diff=astextplain - -# Apply Python syntax highlighting to berry (.be) files -*.be linguist-language=Python From 48c3d7b8d18e528e9e34e2ea2437a74a9bc9204f Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Tue, 5 Apr 2022 10:00:24 +0200 Subject: [PATCH 338/355] Prep HX711 abs weight vars --- tasmota/settings.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tasmota/settings.h b/tasmota/settings.h index 1640cb33f..75f67e517 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -634,9 +634,8 @@ typedef struct { int8_t shutter_tilt_pos[MAX_SHUTTERS]; //51C uint16_t influxdb_period; // 520 uint16_t rf_duplicate_time; // 522 - - uint8_t free_524[8]; // 524 - + uint32_t weight_absconv_a; // 524 + uint32_t weight_absconv_b; // 528 uint16_t mqtt_keepalive; // 52C uint16_t mqtt_socket_timeout; // 52E uint8_t mqtt_wifi_timeout; // 530 From 66f1b39a896cbe2071997a1ac7f5c3a9742535ff Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Tue, 5 Apr 2022 14:46:18 +0200 Subject: [PATCH 339/355] Better advertise Easy install --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8c2be6bfd..06491ab28 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,10 @@ _Written for PlatformIO with limited support for Arduino IDE._
+## Easy install + +Easy initial installation of Tasmota can be performed using the [Tasmota WebInstaller](https://arendst.github.io/Tasmota-firmware/). + If you like **Tasmota**, give it a star, or fork it and contribute! [![GitHub stars](https://img.shields.io/github/stars/arendst/Tasmota.svg?style=social&label=Star)](https://github.com/arendst/Tasmota/stargazers) @@ -25,8 +29,6 @@ See [RELEASENOTES.md](https://github.com/arendst/Tasmota/blob/master/RELEASENOTE Firmware binaries can be downloaded from http://ota.tasmota.com/tasmota/release/ or http://ota.tasmota.com/tasmota32/release/ for ESP32 binaries. -Easy initial installation of Tasmota can be performed using the [Tasmota WebInstaller](https://arendst.github.io/Tasmota-firmware/). - ## Development [![Dev Version](https://img.shields.io/badge/development%20version-v11.0.x.x-blue.svg)](https://github.com/arendst/Tasmota) From d9cfe6128a134d6d6de36b279dfffc7944f54883 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Tue, 5 Apr 2022 21:38:43 +0200 Subject: [PATCH 340/355] Berry prep for OpenHASP --- .../Zip-readonly-FS/src/ZipReadFS.cpp | 3 + lib/libesp32/berry/generate/be_const_strtab.h | 4 +- .../berry/generate/be_const_strtab_def.h | 12 +- .../berry_mapping/src/be_class_wrapper.c | 7 +- .../lv_binding_berry/src/be_lvgl_glob_lib.c | 1527 +++++++++-------- .../src/embedded/lvgl_glob.be | 92 +- tasmota/berry/lvgl_examples/lv.be | 25 +- .../berry/lvgl_examples/lv_tasmota_info.be | 12 +- tasmota/berry/lvgl_examples/lv_tasmota_log.be | 80 +- .../lvgl_examples/lv_tasmota_log_roboto.be | 73 +- tasmota/berry/lvgl_examples/lv_wifi_graph.be | 7 + 11 files changed, 1060 insertions(+), 782 deletions(-) diff --git a/lib/libesp32/Zip-readonly-FS/src/ZipReadFS.cpp b/lib/libesp32/Zip-readonly-FS/src/ZipReadFS.cpp index f0cd4823d..da9b42645 100644 --- a/lib/libesp32/Zip-readonly-FS/src/ZipReadFS.cpp +++ b/lib/libesp32/Zip-readonly-FS/src/ZipReadFS.cpp @@ -308,7 +308,9 @@ bool ZipArchive::parse(void) { const size_t zip_header_size = sizeof(header) - sizeof(header.padding); while (1) { + // AddLog(LOG_LEVEL_DEBUG, "ZIP: f->seek(%i)", offset); f->seek(offset); + // AddLog(LOG_LEVEL_DEBUG, "ZIP: f->read(%i)", zip_header_size); int32_t bytes_read = f->read(sizeof(header.padding) + (uint8_t*) &header, zip_header_size); if (bytes_read != zip_header_size) { break; @@ -348,6 +350,7 @@ bool ZipArchive::parse(void) { // read full filename char fname[header.filename_size + 1]; + // AddLog(LOG_LEVEL_DEBUG, "ZIP: f->read(%i)", header.filename_size); if (f->read((uint8_t*) &fname[0], header.filename_size) != header.filename_size) { return false; } diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h index 04d90dc30..26d4948b0 100644 --- a/lib/libesp32/berry/generate/be_const_strtab.h +++ b/lib/libesp32/berry/generate/be_const_strtab.h @@ -65,7 +65,6 @@ extern const bcstring be_const_str_I2C_X3A; extern const bcstring be_const_str_INTERNAL_DAC; extern const bcstring be_const_str_INTERNAL_PDM; extern const bcstring be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback; -extern const bcstring be_const_str_LVG_X3A_X20object_X3A; extern const bcstring be_const_str_Leds; extern const bcstring be_const_str_MAX_RMT; extern const bcstring be_const_str_MD5; @@ -247,6 +246,7 @@ extern const bcstring be_const_str_abs; extern const bcstring be_const_str_acos; extern const bcstring be_const_str_add; extern const bcstring be_const_str_add_anim; +extern const bcstring be_const_str_add_cb_event_closure; extern const bcstring be_const_str_add_cmd; extern const bcstring be_const_str_add_cron; extern const bcstring be_const_str_add_driver; @@ -472,6 +472,7 @@ extern const bcstring be_const_str_get_cb_list; extern const bcstring be_const_str_get_coords; extern const bcstring be_const_str_get_current_module_name; extern const bcstring be_const_str_get_current_module_path; +extern const bcstring be_const_str_get_event_cb; extern const bcstring be_const_str_get_free_heap; extern const bcstring be_const_str_get_height; extern const bcstring be_const_str_get_hor_res; @@ -505,7 +506,6 @@ extern const bcstring be_const_str_group_def; extern const bcstring be_const_str_groups; extern const bcstring be_const_str_h; extern const bcstring be_const_str_has; -extern const bcstring be_const_str_has_X20already_X20an_X20event_X20callback; extern const bcstring be_const_str_has_arg; extern const bcstring be_const_str_height_def; extern const bcstring be_const_str_hex; diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h index efe146842..d2c51ccaf 100644 --- a/lib/libesp32/berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/berry/generate/be_const_strtab_def.h @@ -139,13 +139,12 @@ be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_ be_define_const_str(INTERNAL_DAC, "INTERNAL_DAC", 1097623719u, 0, 12, &be_const_str_flush); be_define_const_str(INTERNAL_PDM, "INTERNAL_PDM", 3043685628u, 0, 12, &be_const_str_SERIAL_5E2); be_define_const_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback, "LVG: call to unsupported callback", 504176819u, 0, 33, &be_const_str_lv_wifi_arcs); -be_define_const_str(LVG_X3A_X20object_X3A, "LVG: object:", 3824079937u, 0, 12, &be_const_str_set_chr); be_define_const_str(Leds, "Leds", 2709245275u, 0, 4, &be_const_str_read_sensors); be_define_const_str(MAX_RMT, "MAX_RMT", 1615574873u, 0, 7, NULL); be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_create_segment); be_define_const_str(MI32, "MI32", 4074273414u, 0, 4, &be_const_str_init_draw_line_dsc); be_define_const_str(None, "None", 810547195u, 0, 4, NULL); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, NULL); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_get_event_cb); be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_set_ldo_voltage); be_define_const_str(PART_MAIN, "PART_MAIN", 2473491508u, 0, 9, &be_const_str_lv_clock); be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_has); @@ -208,7 +207,7 @@ be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_argument_X2 be_define_const_str(_change_buffer, "_change_buffer", 2101848693u, 0, 14, NULL); be_define_const_str(_class, "_class", 2732146350u, 0, 6, &be_const_str_delete_all_configs); be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, NULL); -be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_has_X20already_X20an_X20event_X20callback); +be_define_const_str(_crons, "_crons", 1000733579u, 0, 6, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); be_define_const_str(_debug_present, "_debug_present", 4063411725u, 0, 14, &be_const_str_wifi_bars); be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_decode); be_define_const_str(_dirty, "_dirty", 283846766u, 0, 6, &be_const_str_local); @@ -239,6 +238,7 @@ be_define_const_str(abs, "abs", 709362235u, 0, 3, NULL); be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_pixels_buffer); be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_publish); be_define_const_str(add_anim, "add_anim", 3980662668u, 0, 8, &be_const_str_get_hor_res); +be_define_const_str(add_cb_event_closure, "add_cb_event_closure", 1775958321u, 0, 20, &be_const_str_split); be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, NULL); be_define_const_str(add_cron, "add_cron", 2475327477u, 0, 8, &be_const_str_content_button); be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_argument_X20must_X20be_X20a_X20list); @@ -464,6 +464,7 @@ be_define_const_str(get_cb_list, "get_cb_list", 1605319182u, 0, 11, &be_const_st be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, NULL); be_define_const_str(get_current_module_name, "get_current_module_name", 2379270740u, 0, 23, &be_const_str_param); be_define_const_str(get_current_module_path, "get_current_module_path", 3206673408u, 0, 23, &be_const_str_set_alternate); +be_define_const_str(get_event_cb, "get_event_cb", 375876088u, 0, 12, NULL); be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_rule); be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, &be_const_str_min); be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_get_vbus_current); @@ -497,7 +498,6 @@ be_define_const_str(group_def, "group_def", 1524213328u, 0, 9, &be_const_str_int be_define_const_str(groups, "groups", 2943077229u, 0, 6, NULL); be_define_const_str(h, "h", 3977000791u, 0, 1, NULL); be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_tolower); -be_define_const_str(has_X20already_X20an_X20event_X20callback, "has already an event callback", 2421565249u, 0, 29, &be_const_str_tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29); be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, NULL); be_define_const_str(height_def, "height_def", 2348238838u, 0, 10, NULL); be_define_const_str(hex, "hex", 4273249610u, 0, 3, NULL); @@ -1013,7 +1013,7 @@ static const bstring* const m_string_table[] = { (const bstring *)&be_const_str__archive, (const bstring *)&be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson, (const bstring *)&be_const_str_SERIAL_7O2, - (const bstring *)&be_const_str_LVG_X3A_X20object_X3A, + (const bstring *)&be_const_str_set_chr, (const bstring *)&be_const_str_AudioOpusDecoder, (const bstring *)&be_const_str_solidified, (const bstring *)&be_const_str_time_str, @@ -1123,7 +1123,7 @@ static const bstring* const m_string_table[] = { (const bstring *)&be_const_str_zip, (const bstring *)&be_const_str_widget_destructor, (const bstring *)&be_const_str_AXP192, - (const bstring *)&be_const_str_split, + (const bstring *)&be_const_str_add_cb_event_closure, (const bstring *)&be_const_str_SERIAL_6O1, (const bstring *)&be_const_str_out_X20of_X20range, (const bstring *)&be_const_str_web_send, diff --git a/lib/libesp32/berry_mapping/src/be_class_wrapper.c b/lib/libesp32/berry_mapping/src/be_class_wrapper.c index 63e4ffa14..0458b1c97 100644 --- a/lib/libesp32/berry_mapping/src/be_class_wrapper.c +++ b/lib/libesp32/berry_mapping/src/be_class_wrapper.c @@ -181,10 +181,11 @@ intptr_t be_convert_single_elt(bvm *vm, int idx, const char * arg_type, int *buf arg_type++; // skip first character if (be_isclosure(vm, idx)) { ret = be_find_global_or_module_member(vm, "cb.make_cb"); + // ret may 1 if direct function, or 2 if method+instance. 0 indicates an error if (ret) { - be_pushvalue(vm, idx); - be_pushvalue(vm, 1); - be_pushstring(vm, arg_type); + be_pushvalue(vm, idx); // push function/closure as arg1 + be_pushvalue(vm, 1); // push `self` as arg2 + be_pushstring(vm, arg_type); // push name of the callback type (string) as arg3 be_call(vm, 2 + ret); const void * func = be_tocomptr(vm, -(3 + ret)); be_pop(vm, 3 + ret); diff --git a/lib/libesp32_lvgl/lv_binding_berry/src/be_lvgl_glob_lib.c b/lib/libesp32_lvgl/lv_binding_berry/src/be_lvgl_glob_lib.c index 3223c475f..736f32471 100644 --- a/lib/libesp32_lvgl/lv_binding_berry/src/be_lvgl_glob_lib.c +++ b/lib/libesp32_lvgl/lv_binding_berry/src/be_lvgl_glob_lib.c @@ -3,260 +3,6 @@ *******************************************************************/ #include "be_constobj.h" -/******************************************************************** -** Solidified function: make_cb -********************************************************************/ -be_local_closure(LVGL_glob_make_cb, /* name */ - be_nested_proto( - 9, /* nstack */ - 4, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 1, /* has sup protos */ - ( &(const struct bproto*[ 2]) { - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 1, /* has upvals */ - ( &(const bupvaldesc[ 1]) { /* upvals */ - be_local_const_upval(1, 0), - }), - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(lvgl_event_dispatch), - }), - &be_const_str__X3Clambda_X3E, - &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0x68040000, // 0000 GETUPV R1 U0 - 0x8C040300, // 0001 GETMET R1 R1 K0 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0x80040200, // 0004 RET 1 R1 - }) - ), - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 1, /* has upvals */ - ( &(const bupvaldesc[ 1]) { /* upvals */ - be_local_const_upval(1, 0), - }), - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(lvgl_timer_dispatch), - }), - &be_const_str__X3Clambda_X3E, - &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0x68040000, // 0000 GETUPV R1 U0 - 0x8C040300, // 0001 GETMET R1 R1 K0 - 0x5C0C0000, // 0002 MOVE R3 R0 - 0x7C040400, // 0003 CALL R1 2 - 0x80040200, // 0004 RET 1 R1 - }) - ), - }), - 1, /* has constants */ - ( &(const bvalue[19]) { /* constants */ - /* K0 */ be_nested_str(cb), - /* K1 */ be_nested_str(lv_event_cb), - /* K2 */ be_nested_str(cb_event_closure), - /* K3 */ be_nested_str(event_cb), - /* K4 */ be_nested_str(gen_cb), - /* K5 */ be_nested_str(register_obj), - /* K6 */ be_nested_str(contains), - /* K7 */ be_nested_str(_p), - /* K8 */ be_nested_str(tasmota), - /* K9 */ be_nested_str(log), - /* K10 */ be_nested_str(LVG_X3A_X20object_X3A), - /* K11 */ be_nested_str(has_X20already_X20an_X20event_X20callback), - /* K12 */ be_const_int(2), - /* K13 */ be_nested_str(lv_timer_cb), - /* K14 */ be_nested_str(timer_cb), - /* K15 */ be_const_int(0), - /* K16 */ be_nested_str(lv_), - /* K17 */ be_nested_str(null_cb), - /* K18 */ be_nested_str(cb_do_nothing), - }), - &be_const_str_make_cb, - &be_const_str_solidified, - ( &(const binstruction[101]) { /* code */ - 0xA4120000, // 0000 IMPORT R4 K0 - 0x1C140701, // 0001 EQ R5 R3 K1 - 0x78160026, // 0002 JMPF R5 #002A - 0x88140102, // 0003 GETMBR R5 R0 K2 - 0x4C180000, // 0004 LDNIL R6 - 0x1C140A06, // 0005 EQ R5 R5 R6 - 0x78160002, // 0006 JMPF R5 #000A - 0x60140013, // 0007 GETGBL R5 G19 - 0x7C140000, // 0008 CALL R5 0 - 0x90020405, // 0009 SETMBR R0 K2 R5 - 0x88140103, // 000A GETMBR R5 R0 K3 - 0x4C180000, // 000B LDNIL R6 - 0x1C140A06, // 000C EQ R5 R5 R6 - 0x78160003, // 000D JMPF R5 #0012 - 0x8C140904, // 000E GETMET R5 R4 K4 - 0x841C0000, // 000F CLOSURE R7 P0 - 0x7C140400, // 0010 CALL R5 2 - 0x90020605, // 0011 SETMBR R0 K3 R5 - 0x8C140105, // 0012 GETMET R5 R0 K5 - 0x5C1C0400, // 0013 MOVE R7 R2 - 0x7C140400, // 0014 CALL R5 2 - 0x88140102, // 0015 GETMBR R5 R0 K2 - 0x8C140B06, // 0016 GETMET R5 R5 K6 - 0x881C0507, // 0017 GETMBR R7 R2 K7 - 0x7C140400, // 0018 CALL R5 2 - 0x78160008, // 0019 JMPF R5 #0023 - 0xB8161000, // 001A GETNGBL R5 K8 - 0x8C140B09, // 001B GETMET R5 R5 K9 - 0x601C0008, // 001C GETGBL R7 G8 - 0x5C200400, // 001D MOVE R8 R2 - 0x7C1C0200, // 001E CALL R7 1 - 0x001E1407, // 001F ADD R7 K10 R7 - 0x001C0F0B, // 0020 ADD R7 R7 K11 - 0x5820000C, // 0021 LDCONST R8 K12 - 0x7C140600, // 0022 CALL R5 3 - 0x88140507, // 0023 GETMBR R5 R2 K7 - 0x88180102, // 0024 GETMBR R6 R0 K2 - 0x98180A01, // 0025 SETIDX R6 R5 R1 - 0x88140103, // 0026 GETMBR R5 R0 K3 - 0xA0000000, // 0027 CLOSE R0 - 0x80040A00, // 0028 RET 1 R5 - 0x70020038, // 0029 JMP #0063 - 0x1C14070D, // 002A EQ R5 R3 K13 - 0x78160023, // 002B JMPF R5 #0050 - 0x88140102, // 002C GETMBR R5 R0 K2 - 0x4C180000, // 002D LDNIL R6 - 0x1C140A06, // 002E EQ R5 R5 R6 - 0x78160002, // 002F JMPF R5 #0033 - 0x60140013, // 0030 GETGBL R5 G19 - 0x7C140000, // 0031 CALL R5 0 - 0x90020405, // 0032 SETMBR R0 K2 R5 - 0x8814010E, // 0033 GETMBR R5 R0 K14 - 0x4C180000, // 0034 LDNIL R6 - 0x1C140A06, // 0035 EQ R5 R5 R6 - 0x78160003, // 0036 JMPF R5 #003B - 0x8C140904, // 0037 GETMET R5 R4 K4 - 0x841C0001, // 0038 CLOSURE R7 P1 - 0x7C140400, // 0039 CALL R5 2 - 0x90021C05, // 003A SETMBR R0 K14 R5 - 0x88140102, // 003B GETMBR R5 R0 K2 - 0x8C140B06, // 003C GETMET R5 R5 K6 - 0x881C0507, // 003D GETMBR R7 R2 K7 - 0x7C140400, // 003E CALL R5 2 - 0x78160008, // 003F JMPF R5 #0049 - 0xB8161000, // 0040 GETNGBL R5 K8 - 0x8C140B09, // 0041 GETMET R5 R5 K9 - 0x601C0008, // 0042 GETGBL R7 G8 - 0x5C200400, // 0043 MOVE R8 R2 - 0x7C1C0200, // 0044 CALL R7 1 - 0x001E1407, // 0045 ADD R7 K10 R7 - 0x001C0F0B, // 0046 ADD R7 R7 K11 - 0x5820000C, // 0047 LDCONST R8 K12 - 0x7C140600, // 0048 CALL R5 3 - 0x88140507, // 0049 GETMBR R5 R2 K7 - 0x88180102, // 004A GETMBR R6 R0 K2 - 0x98180A01, // 004B SETIDX R6 R5 R1 - 0x8814010E, // 004C GETMBR R5 R0 K14 - 0xA0000000, // 004D CLOSE R0 - 0x80040A00, // 004E RET 1 R5 - 0x70020012, // 004F JMP #0063 - 0x40161F0C, // 0050 CONNECT R5 K15 K12 - 0x94140605, // 0051 GETIDX R5 R3 R5 - 0x1C140B10, // 0052 EQ R5 R5 K16 - 0x7816000B, // 0053 JMPF R5 #0060 - 0x88140111, // 0054 GETMBR R5 R0 K17 - 0x4C180000, // 0055 LDNIL R6 - 0x1C140A06, // 0056 EQ R5 R5 R6 - 0x78160003, // 0057 JMPF R5 #005C - 0x8C140904, // 0058 GETMET R5 R4 K4 - 0x881C0112, // 0059 GETMBR R7 R0 K18 - 0x7C140400, // 005A CALL R5 2 - 0x90022205, // 005B SETMBR R0 K17 R5 - 0x88140111, // 005C GETMBR R5 R0 K17 - 0xA0000000, // 005D CLOSE R0 - 0x80040A00, // 005E RET 1 R5 - 0x70020002, // 005F JMP #0063 - 0x4C140000, // 0060 LDNIL R5 - 0xA0000000, // 0061 CLOSE R0 - 0x80040A00, // 0062 RET 1 R5 - 0xA0000000, // 0063 CLOSE R0 - 0x80000000, // 0064 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(LVGL_glob_init, /* name */ - be_nested_proto( - 5, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 1, /* has sup protos */ - ( &(const struct bproto*[ 1]) { - be_nested_proto( - 8, /* nstack */ - 3, /* argc */ - 0, /* varg */ - 1, /* has upvals */ - ( &(const bupvaldesc[ 1]) { /* upvals */ - be_local_const_upval(1, 0), - }), - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(make_cb), - }), - &be_const_str__X3Clambda_X3E, - &be_const_str_solidified, - ( &(const binstruction[ 7]) { /* code */ - 0x680C0000, // 0000 GETUPV R3 U0 - 0x8C0C0700, // 0001 GETMET R3 R3 K0 - 0x5C140000, // 0002 MOVE R5 R0 - 0x5C180200, // 0003 MOVE R6 R1 - 0x5C1C0400, // 0004 MOVE R7 R2 - 0x7C0C0800, // 0005 CALL R3 4 - 0x80040600, // 0006 RET 1 R3 - }) - ), - }), - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(cb), - /* K1 */ be_nested_str(add_handler), - /* K2 */ be_nested_str(lv_extra), - }), - &be_const_str_init, - &be_const_str_solidified, - ( &(const binstruction[ 7]) { /* code */ - 0xA4060000, // 0000 IMPORT R1 K0 - 0x8C080301, // 0001 GETMET R2 R1 K1 - 0x84100000, // 0002 CLOSURE R4 P0 - 0x7C080400, // 0003 CALL R2 2 - 0xA40A0400, // 0004 IMPORT R2 K2 - 0xA0000000, // 0005 CLOSE R0 - 0x80000000, // 0006 RET 0 - }) - ) -); -/*******************************************************************/ - - /******************************************************************** ** Solidified function: get_object_from_ptr ********************************************************************/ @@ -293,6 +39,35 @@ be_local_closure(LVGL_glob_get_object_from_ptr, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: _anonymous_ +********************************************************************/ +be_local_closure(LVGL_glob__anonymous_, /* name */ + be_nested_proto( + 2, /* nstack */ + 0, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback), + }), + &be_const_str__anonymous_, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x60000001, // 0000 GETGBL R0 G1 + 0x58040000, // 0001 LDCONST R1 K0 + 0x7C000200, // 0002 CALL R0 1 + 0x80000000, // 0003 RET 0 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: widget_ctor_impl ********************************************************************/ @@ -355,6 +130,624 @@ be_local_closure(LVGL_glob_widget_ctor_impl, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: add_cb_event_closure +********************************************************************/ +be_local_closure(LVGL_glob_add_cb_event_closure, /* name */ + be_nested_proto( + 7, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_str(cb_event_closure), + /* K1 */ be_nested_str(contains), + /* K2 */ be_nested_str(function), + /* K3 */ be_const_int(1), + /* K4 */ be_nested_str(push), + /* K5 */ be_const_int(0), + }), + &be_const_str_add_cb_event_closure, + &be_const_str_solidified, + ( &(const binstruction[43]) { /* code */ + 0x880C0100, // 0000 GETMBR R3 R0 K0 + 0x4C100000, // 0001 LDNIL R4 + 0x1C0C0604, // 0002 EQ R3 R3 R4 + 0x780E0002, // 0003 JMPF R3 #0007 + 0x600C0013, // 0004 GETGBL R3 G19 + 0x7C0C0000, // 0005 CALL R3 0 + 0x90020003, // 0006 SETMBR R0 K0 R3 + 0x880C0100, // 0007 GETMBR R3 R0 K0 + 0x8C0C0701, // 0008 GETMET R3 R3 K1 + 0x5C140200, // 0009 MOVE R5 R1 + 0x7C0C0400, // 000A CALL R3 2 + 0x780E001A, // 000B JMPF R3 #0027 + 0x880C0100, // 000C GETMBR R3 R0 K0 + 0x940C0601, // 000D GETIDX R3 R3 R1 + 0x60100004, // 000E GETGBL R4 G4 + 0x5C140600, // 000F MOVE R5 R3 + 0x7C100200, // 0010 CALL R4 1 + 0x1C100902, // 0011 EQ R4 R4 K2 + 0x78120007, // 0012 JMPF R4 #001B + 0x88100100, // 0013 GETMBR R4 R0 K0 + 0x60140012, // 0014 GETGBL R5 G18 + 0x7C140000, // 0015 CALL R5 0 + 0x40180A03, // 0016 CONNECT R6 R5 R3 + 0x40180A02, // 0017 CONNECT R6 R5 R2 + 0x98100205, // 0018 SETIDX R4 R1 R5 + 0x80060600, // 0019 RET 1 K3 + 0x7002000A, // 001A JMP #0026 + 0x88100100, // 001B GETMBR R4 R0 K0 + 0x94100801, // 001C GETIDX R4 R4 R1 + 0x8C100904, // 001D GETMET R4 R4 K4 + 0x5C180400, // 001E MOVE R6 R2 + 0x7C100400, // 001F CALL R4 2 + 0x6010000C, // 0020 GETGBL R4 G12 + 0x88140100, // 0021 GETMBR R5 R0 K0 + 0x94140A01, // 0022 GETIDX R5 R5 R1 + 0x7C100200, // 0023 CALL R4 1 + 0x04100903, // 0024 SUB R4 R4 K3 + 0x80040800, // 0025 RET 1 R4 + 0x70020002, // 0026 JMP #002A + 0x880C0100, // 0027 GETMBR R3 R0 K0 + 0x980C0202, // 0028 SETIDX R3 R1 R2 + 0x80060A00, // 0029 RET 1 K5 + 0x80000000, // 002A RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: widget_cb +********************************************************************/ +be_local_closure(LVGL_glob_widget_cb, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 3]) { + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(widget_ctor_impl), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x68080000, // 0000 GETUPV R2 U0 + 0x8C080500, // 0001 GETMET R2 R2 K0 + 0x5C100000, // 0002 MOVE R4 R0 + 0x5C140200, // 0003 MOVE R5 R1 + 0x7C080600, // 0004 CALL R2 3 + 0x80040400, // 0005 RET 1 R2 + }) + ), + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(widget_dtor_impl), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x68080000, // 0000 GETUPV R2 U0 + 0x8C080500, // 0001 GETMET R2 R2 K0 + 0x5C100000, // 0002 MOVE R4 R0 + 0x5C140200, // 0003 MOVE R5 R1 + 0x7C080600, // 0004 CALL R2 3 + 0x80040400, // 0005 RET 1 R2 + }) + ), + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(widget_event_impl), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x68080000, // 0000 GETUPV R2 U0 + 0x8C080500, // 0001 GETMET R2 R2 K0 + 0x5C100000, // 0002 MOVE R4 R0 + 0x5C140200, // 0003 MOVE R5 R1 + 0x7C080600, // 0004 CALL R2 3 + 0x80040400, // 0005 RET 1 R2 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[15]) { /* constants */ + /* K0 */ be_nested_str(cb), + /* K1 */ be_nested_str(widget_ctor_cb), + /* K2 */ be_nested_str(gen_cb), + /* K3 */ be_nested_str(widget_dtor_cb), + /* K4 */ be_nested_str(widget_event_cb), + /* K5 */ be_nested_str(widget_struct_default), + /* K6 */ be_nested_str(lv), + /* K7 */ be_nested_str(lv_obj_class), + /* K8 */ be_nested_str(lv_obj), + /* K9 */ be_nested_str(_class), + /* K10 */ be_nested_str(copy), + /* K11 */ be_nested_str(base_class), + /* K12 */ be_nested_str(constructor_cb), + /* K13 */ be_nested_str(destructor_cb), + /* K14 */ be_nested_str(event_cb), + }), + &be_const_str_widget_cb, + &be_const_str_solidified, + ( &(const binstruction[54]) { /* code */ + 0xA4060000, // 0000 IMPORT R1 K0 + 0x88080101, // 0001 GETMBR R2 R0 K1 + 0x4C0C0000, // 0002 LDNIL R3 + 0x1C080403, // 0003 EQ R2 R2 R3 + 0x780A0003, // 0004 JMPF R2 #0009 + 0x8C080302, // 0005 GETMET R2 R1 K2 + 0x84100000, // 0006 CLOSURE R4 P0 + 0x7C080400, // 0007 CALL R2 2 + 0x90020202, // 0008 SETMBR R0 K1 R2 + 0x88080103, // 0009 GETMBR R2 R0 K3 + 0x4C0C0000, // 000A LDNIL R3 + 0x1C080403, // 000B EQ R2 R2 R3 + 0x780A0003, // 000C JMPF R2 #0011 + 0x8C080302, // 000D GETMET R2 R1 K2 + 0x84100001, // 000E CLOSURE R4 P1 + 0x7C080400, // 000F CALL R2 2 + 0x90020602, // 0010 SETMBR R0 K3 R2 + 0x88080104, // 0011 GETMBR R2 R0 K4 + 0x4C0C0000, // 0012 LDNIL R3 + 0x1C080403, // 0013 EQ R2 R2 R3 + 0x780A0003, // 0014 JMPF R2 #0019 + 0x8C080302, // 0015 GETMET R2 R1 K2 + 0x84100002, // 0016 CLOSURE R4 P2 + 0x7C080400, // 0017 CALL R2 2 + 0x90020802, // 0018 SETMBR R0 K4 R2 + 0x88080105, // 0019 GETMBR R2 R0 K5 + 0x4C0C0000, // 001A LDNIL R3 + 0x1C080403, // 001B EQ R2 R2 R3 + 0x780A0016, // 001C JMPF R2 #0034 + 0xB80A0C00, // 001D GETNGBL R2 K6 + 0x8C080507, // 001E GETMET R2 R2 K7 + 0xB8120C00, // 001F GETNGBL R4 K6 + 0x88100908, // 0020 GETMBR R4 R4 K8 + 0x88100909, // 0021 GETMBR R4 R4 K9 + 0x7C080400, // 0022 CALL R2 2 + 0x8C08050A, // 0023 GETMET R2 R2 K10 + 0x7C080200, // 0024 CALL R2 1 + 0x90020A02, // 0025 SETMBR R0 K5 R2 + 0x88080105, // 0026 GETMBR R2 R0 K5 + 0xB80E0C00, // 0027 GETNGBL R3 K6 + 0x880C0708, // 0028 GETMBR R3 R3 K8 + 0x880C0709, // 0029 GETMBR R3 R3 K9 + 0x900A1603, // 002A SETMBR R2 K11 R3 + 0x88080105, // 002B GETMBR R2 R0 K5 + 0x880C0101, // 002C GETMBR R3 R0 K1 + 0x900A1803, // 002D SETMBR R2 K12 R3 + 0x88080105, // 002E GETMBR R2 R0 K5 + 0x880C0103, // 002F GETMBR R3 R0 K3 + 0x900A1A03, // 0030 SETMBR R2 K13 R3 + 0x88080105, // 0031 GETMBR R2 R0 K5 + 0x880C0104, // 0032 GETMBR R3 R0 K4 + 0x900A1C03, // 0033 SETMBR R2 K14 R3 + 0xA0000000, // 0034 CLOSE R0 + 0x80000000, // 0035 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(LVGL_glob_init, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 1]) { + be_nested_proto( + 8, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(make_cb), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 7]) { /* code */ + 0x680C0000, // 0000 GETUPV R3 U0 + 0x8C0C0700, // 0001 GETMET R3 R3 K0 + 0x5C140000, // 0002 MOVE R5 R0 + 0x5C180200, // 0003 MOVE R6 R1 + 0x5C1C0400, // 0004 MOVE R7 R2 + 0x7C0C0800, // 0005 CALL R3 4 + 0x80040600, // 0006 RET 1 R3 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str(cb), + /* K1 */ be_nested_str(add_handler), + /* K2 */ be_nested_str(lv_extra), + }), + &be_const_str_init, + &be_const_str_solidified, + ( &(const binstruction[ 7]) { /* code */ + 0xA4060000, // 0000 IMPORT R1 K0 + 0x8C080301, // 0001 GETMET R2 R1 K1 + 0x84100000, // 0002 CLOSURE R4 P0 + 0x7C080400, // 0003 CALL R2 2 + 0xA40A0400, // 0004 IMPORT R2 K2 + 0xA0000000, // 0005 CLOSE R0 + 0x80000000, // 0006 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_event_cb +********************************************************************/ +be_local_closure(LVGL_glob_get_event_cb, /* name */ + be_nested_proto( + 9, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 1]) { + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 2]) { /* upvals */ + be_local_const_upval(1, 0), + be_local_const_upval(1, 4), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(lvgl_event_dispatch), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0x68040000, // 0000 GETUPV R1 U0 + 0x8C040300, // 0001 GETMET R1 R1 K0 + 0x680C0001, // 0002 GETUPV R3 U1 + 0x5C100000, // 0003 MOVE R4 R0 + 0x7C040600, // 0004 CALL R1 3 + 0x80040200, // 0005 RET 1 R1 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_str(event_cb), + /* K1 */ be_nested_str(cb), + /* K2 */ be_nested_str(gen_cb), + /* K3 */ be_nested_str(push), + /* K4 */ be_nested_str(stop_iteration), + }), + &be_const_str_get_event_cb, + &be_const_str_solidified, + ( &(const binstruction[32]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x4C0C0000, // 0001 LDNIL R3 + 0x1C080403, // 0002 EQ R2 R2 R3 + 0x780A0002, // 0003 JMPF R2 #0007 + 0x60080012, // 0004 GETGBL R2 G18 + 0x7C080000, // 0005 CALL R2 0 + 0x90020002, // 0006 SETMBR R0 K0 R2 + 0x88080100, // 0007 GETMBR R2 R0 K0 + 0x600C0010, // 0008 GETGBL R3 G16 + 0x6010000C, // 0009 GETGBL R4 G12 + 0x5C140400, // 000A MOVE R5 R2 + 0x7C100200, // 000B CALL R4 1 + 0x40100801, // 000C CONNECT R4 R4 R1 + 0x7C0C0200, // 000D CALL R3 1 + 0xA802000A, // 000E EXBLK 0 #001A + 0x5C100600, // 000F MOVE R4 R3 + 0x7C100000, // 0010 CALL R4 0 + 0xB8160200, // 0011 GETNGBL R5 K1 + 0x8C140B02, // 0012 GETMET R5 R5 K2 + 0x841C0000, // 0013 CLOSURE R7 P0 + 0x7C140400, // 0014 CALL R5 2 + 0x8C180503, // 0015 GETMET R6 R2 K3 + 0x5C200A00, // 0016 MOVE R8 R5 + 0x7C180400, // 0017 CALL R6 2 + 0xA00C0000, // 0018 CLOSE R3 + 0x7001FFF4, // 0019 JMP #000F + 0x580C0004, // 001A LDCONST R3 K4 + 0xAC0C0200, // 001B CATCH R3 1 0 + 0xB0080000, // 001C RAISE 2 R0 R0 + 0x940C0401, // 001D GETIDX R3 R2 R1 + 0xA0000000, // 001E CLOSE R0 + 0x80040600, // 001F RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: lvgl_timer_dispatch +********************************************************************/ +be_local_closure(LVGL_glob_lvgl_timer_dispatch, /* name */ + be_nested_proto( + 8, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_str(introspect), + /* K1 */ be_nested_str(toptr), + /* K2 */ be_nested_str(cb_event_closure), + /* K3 */ be_nested_str(function), + /* K4 */ be_const_int(0), + /* K5 */ be_const_int(1), + }), + &be_const_str_lvgl_timer_dispatch, + &be_const_str_solidified, + ( &(const binstruction[27]) { /* code */ + 0xA40A0000, // 0000 IMPORT R2 K0 + 0x8C0C0501, // 0001 GETMET R3 R2 K1 + 0x5C140200, // 0002 MOVE R5 R1 + 0x7C0C0400, // 0003 CALL R3 2 + 0x88100102, // 0004 GETMBR R4 R0 K2 + 0x94100803, // 0005 GETIDX R4 R4 R3 + 0x60140004, // 0006 GETGBL R5 G4 + 0x5C180800, // 0007 MOVE R6 R4 + 0x7C140200, // 0008 CALL R5 1 + 0x1C140B03, // 0009 EQ R5 R5 K3 + 0x78160003, // 000A JMPF R5 #000F + 0x5C140800, // 000B MOVE R5 R4 + 0x5C180600, // 000C MOVE R6 R3 + 0x7C140200, // 000D CALL R5 1 + 0x7002000A, // 000E JMP #001A + 0x58140004, // 000F LDCONST R5 K4 + 0x6018000C, // 0010 GETGBL R6 G12 + 0x5C1C0800, // 0011 MOVE R7 R4 + 0x7C180200, // 0012 CALL R6 1 + 0x14180A06, // 0013 LT R6 R5 R6 + 0x781A0004, // 0014 JMPF R6 #001A + 0x94180805, // 0015 GETIDX R6 R4 R5 + 0x5C1C0600, // 0016 MOVE R7 R3 + 0x7C180200, // 0017 CALL R6 1 + 0x00140B05, // 0018 ADD R5 R5 K5 + 0x7001FFF5, // 0019 JMP #0010 + 0x80000000, // 001A RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: widget_dtor_impl +********************************************************************/ +be_local_closure(LVGL_glob_widget_dtor_impl, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_str(introspect), + /* K1 */ be_nested_str(lv), + /* K2 */ be_nested_str(lv_obj_class), + /* K3 */ be_nested_str(get_object_from_ptr), + /* K4 */ be_nested_str(instance), + /* K5 */ be_nested_str(get), + /* K6 */ be_nested_str(widget_destructor), + }), + &be_const_str_widget_dtor_impl, + &be_const_str_solidified, + ( &(const binstruction[22]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0xB8120200, // 0001 GETNGBL R4 K1 + 0x8C100902, // 0002 GETMET R4 R4 K2 + 0x5C180200, // 0003 MOVE R6 R1 + 0x7C100400, // 0004 CALL R4 2 + 0x8C140103, // 0005 GETMET R5 R0 K3 + 0x5C1C0400, // 0006 MOVE R7 R2 + 0x7C140400, // 0007 CALL R5 2 + 0x60180004, // 0008 GETGBL R6 G4 + 0x5C1C0A00, // 0009 MOVE R7 R5 + 0x7C180200, // 000A CALL R6 1 + 0x1C180D04, // 000B EQ R6 R6 K4 + 0x781A0007, // 000C JMPF R6 #0015 + 0x8C180705, // 000D GETMET R6 R3 K5 + 0x5C200A00, // 000E MOVE R8 R5 + 0x58240006, // 000F LDCONST R9 K6 + 0x7C180600, // 0010 CALL R6 3 + 0x781A0002, // 0011 JMPF R6 #0015 + 0x8C180B06, // 0012 GETMET R6 R5 K6 + 0x5C200800, // 0013 MOVE R8 R4 + 0x7C180400, // 0014 CALL R6 2 + 0x80000000, // 0015 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: make_cb +********************************************************************/ +be_local_closure(LVGL_glob_make_cb, /* name */ + be_nested_proto( + 9, /* nstack */ + 4, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 1]) { + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(lvgl_timer_dispatch), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0x68040000, // 0000 GETUPV R1 U0 + 0x8C040300, // 0001 GETMET R1 R1 K0 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x80040200, // 0004 RET 1 R1 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[14]) { /* constants */ + /* K0 */ be_nested_str(cb), + /* K1 */ be_nested_str(lv_event_cb), + /* K2 */ be_nested_str(register_obj), + /* K3 */ be_nested_str(add_cb_event_closure), + /* K4 */ be_nested_str(_p), + /* K5 */ be_nested_str(get_event_cb), + /* K6 */ be_nested_str(lv_timer_cb), + /* K7 */ be_nested_str(timer_cb), + /* K8 */ be_nested_str(gen_cb), + /* K9 */ be_const_int(0), + /* K10 */ be_const_int(2), + /* K11 */ be_nested_str(lv_), + /* K12 */ be_nested_str(null_cb), + /* K13 */ be_nested_str(cb_do_nothing), + }), + &be_const_str_make_cb, + &be_const_str_solidified, + ( &(const binstruction[54]) { /* code */ + 0xA4120000, // 0000 IMPORT R4 K0 + 0x1C140701, // 0001 EQ R5 R3 K1 + 0x7816000B, // 0002 JMPF R5 #000F + 0x8C140102, // 0003 GETMET R5 R0 K2 + 0x5C1C0400, // 0004 MOVE R7 R2 + 0x7C140400, // 0005 CALL R5 2 + 0x8C140103, // 0006 GETMET R5 R0 K3 + 0x881C0504, // 0007 GETMBR R7 R2 K4 + 0x5C200200, // 0008 MOVE R8 R1 + 0x7C140600, // 0009 CALL R5 3 + 0x8C180105, // 000A GETMET R6 R0 K5 + 0x5C200A00, // 000B MOVE R8 R5 + 0x7C180400, // 000C CALL R6 2 + 0x80040C00, // 000D RET 1 R6 + 0x70020024, // 000E JMP #0034 + 0x1C140706, // 000F EQ R5 R3 K6 + 0x7816000F, // 0010 JMPF R5 #0021 + 0x88140107, // 0011 GETMBR R5 R0 K7 + 0x4C180000, // 0012 LDNIL R6 + 0x1C140A06, // 0013 EQ R5 R5 R6 + 0x78160003, // 0014 JMPF R5 #0019 + 0x8C140908, // 0015 GETMET R5 R4 K8 + 0x841C0000, // 0016 CLOSURE R7 P0 + 0x7C140400, // 0017 CALL R5 2 + 0x90020E05, // 0018 SETMBR R0 K7 R5 + 0x8C140103, // 0019 GETMET R5 R0 K3 + 0x881C0504, // 001A GETMBR R7 R2 K4 + 0x5C200200, // 001B MOVE R8 R1 + 0x7C140600, // 001C CALL R5 3 + 0x88140107, // 001D GETMBR R5 R0 K7 + 0xA0000000, // 001E CLOSE R0 + 0x80040A00, // 001F RET 1 R5 + 0x70020012, // 0020 JMP #0034 + 0x4016130A, // 0021 CONNECT R5 K9 K10 + 0x94140605, // 0022 GETIDX R5 R3 R5 + 0x1C140B0B, // 0023 EQ R5 R5 K11 + 0x7816000B, // 0024 JMPF R5 #0031 + 0x8814010C, // 0025 GETMBR R5 R0 K12 + 0x4C180000, // 0026 LDNIL R6 + 0x1C140A06, // 0027 EQ R5 R5 R6 + 0x78160003, // 0028 JMPF R5 #002D + 0x8C140908, // 0029 GETMET R5 R4 K8 + 0x881C010D, // 002A GETMBR R7 R0 K13 + 0x7C140400, // 002B CALL R5 2 + 0x90021805, // 002C SETMBR R0 K12 R5 + 0x8814010C, // 002D GETMBR R5 R0 K12 + 0xA0000000, // 002E CLOSE R0 + 0x80040A00, // 002F RET 1 R5 + 0x70020002, // 0030 JMP #0034 + 0x4C140000, // 0031 LDNIL R5 + 0xA0000000, // 0032 CLOSE R0 + 0x80040A00, // 0033 RET 1 R5 + 0xA0000000, // 0034 CLOSE R0 + 0x80000000, // 0035 RET 0 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: register_obj ********************************************************************/ @@ -392,6 +785,162 @@ be_local_closure(LVGL_glob_register_obj, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: widget_event_impl +********************************************************************/ +be_local_closure(LVGL_glob_widget_event_impl, /* name */ + be_nested_proto( + 12, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[12]) { /* constants */ + /* K0 */ be_nested_str(introspect), + /* K1 */ be_nested_str(lv), + /* K2 */ be_nested_str(lv_obj_class), + /* K3 */ be_nested_str(lv_event), + /* K4 */ be_nested_str(target), + /* K5 */ be_nested_str(get_object_from_ptr), + /* K6 */ be_nested_str(instance), + /* K7 */ be_nested_str(code), + /* K8 */ be_nested_str(EVENT_DELETE), + /* K9 */ be_nested_str(get), + /* K10 */ be_nested_str(before_del), + /* K11 */ be_nested_str(widget_event), + }), + &be_const_str_widget_event_impl, + &be_const_str_solidified, + ( &(const binstruction[43]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0xB8120200, // 0001 GETNGBL R4 K1 + 0x8C100902, // 0002 GETMET R4 R4 K2 + 0x5C180200, // 0003 MOVE R6 R1 + 0x7C100400, // 0004 CALL R4 2 + 0xB8160200, // 0005 GETNGBL R5 K1 + 0x8C140B03, // 0006 GETMET R5 R5 K3 + 0x5C1C0400, // 0007 MOVE R7 R2 + 0x7C140400, // 0008 CALL R5 2 + 0x88180B04, // 0009 GETMBR R6 R5 K4 + 0x8C1C0105, // 000A GETMET R7 R0 K5 + 0x5C240C00, // 000B MOVE R9 R6 + 0x7C1C0400, // 000C CALL R7 2 + 0x60200004, // 000D GETGBL R8 G4 + 0x5C240E00, // 000E MOVE R9 R7 + 0x7C200200, // 000F CALL R8 1 + 0x1C201106, // 0010 EQ R8 R8 K6 + 0x78220017, // 0011 JMPF R8 #002A + 0x88200B07, // 0012 GETMBR R8 R5 K7 + 0xB8260200, // 0013 GETNGBL R9 K1 + 0x88241308, // 0014 GETMBR R9 R9 K8 + 0x1C201009, // 0015 EQ R8 R8 R9 + 0x78220009, // 0016 JMPF R8 #0021 + 0x8C200709, // 0017 GETMET R8 R3 K9 + 0x5C280E00, // 0018 MOVE R10 R7 + 0x582C000A, // 0019 LDCONST R11 K10 + 0x7C200600, // 001A CALL R8 3 + 0x78220004, // 001B JMPF R8 #0021 + 0x8C200F0A, // 001C GETMET R8 R7 K10 + 0x5C280800, // 001D MOVE R10 R4 + 0x5C2C0A00, // 001E MOVE R11 R5 + 0x7C200600, // 001F CALL R8 3 + 0x70020008, // 0020 JMP #002A + 0x8C200709, // 0021 GETMET R8 R3 K9 + 0x5C280E00, // 0022 MOVE R10 R7 + 0x582C000B, // 0023 LDCONST R11 K11 + 0x7C200600, // 0024 CALL R8 3 + 0x78220003, // 0025 JMPF R8 #002A + 0x8C200F0B, // 0026 GETMET R8 R7 K11 + 0x5C280800, // 0027 MOVE R10 R4 + 0x5C2C0A00, // 0028 MOVE R11 R5 + 0x7C200600, // 0029 CALL R8 3 + 0x80000000, // 002A RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: lvgl_event_dispatch +********************************************************************/ +be_local_closure(LVGL_glob_lvgl_event_dispatch, /* name */ + be_nested_proto( + 11, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[10]) { /* constants */ + /* K0 */ be_nested_str(introspect), + /* K1 */ be_nested_str(toptr), + /* K2 */ be_nested_str(event), + /* K3 */ be_nested_str(_change_buffer), + /* K4 */ be_nested_str(lv), + /* K5 */ be_nested_str(lv_event), + /* K6 */ be_nested_str(target), + /* K7 */ be_nested_str(get_object_from_ptr), + /* K8 */ be_nested_str(cb_event_closure), + /* K9 */ be_nested_str(function), + }), + &be_const_str_lvgl_event_dispatch, + &be_const_str_solidified, + ( &(const binstruction[43]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0x8C100701, // 0001 GETMET R4 R3 K1 + 0x5C180400, // 0002 MOVE R6 R2 + 0x7C100400, // 0003 CALL R4 2 + 0x88140102, // 0004 GETMBR R5 R0 K2 + 0x78160004, // 0005 JMPF R5 #000B + 0x88140102, // 0006 GETMBR R5 R0 K2 + 0x8C140B03, // 0007 GETMET R5 R5 K3 + 0x5C1C0800, // 0008 MOVE R7 R4 + 0x7C140400, // 0009 CALL R5 2 + 0x70020004, // 000A JMP #0010 + 0xB8160800, // 000B GETNGBL R5 K4 + 0x8C140B05, // 000C GETMET R5 R5 K5 + 0x5C1C0800, // 000D MOVE R7 R4 + 0x7C140400, // 000E CALL R5 2 + 0x90020405, // 000F SETMBR R0 K2 R5 + 0x88140102, // 0010 GETMBR R5 R0 K2 + 0x88140B06, // 0011 GETMBR R5 R5 K6 + 0x8C180107, // 0012 GETMET R6 R0 K7 + 0x5C200A00, // 0013 MOVE R8 R5 + 0x7C180400, // 0014 CALL R6 2 + 0x881C0108, // 0015 GETMBR R7 R0 K8 + 0x941C0E05, // 0016 GETIDX R7 R7 R5 + 0x60200004, // 0017 GETGBL R8 G4 + 0x5C240E00, // 0018 MOVE R9 R7 + 0x7C200200, // 0019 CALL R8 1 + 0x1C201109, // 001A EQ R8 R8 K9 + 0x78220004, // 001B JMPF R8 #0021 + 0x5C200E00, // 001C MOVE R8 R7 + 0x5C240C00, // 001D MOVE R9 R6 + 0x88280102, // 001E GETMBR R10 R0 K2 + 0x7C200400, // 001F CALL R8 2 + 0x70020008, // 0020 JMP #002A + 0x6020000C, // 0021 GETGBL R8 G12 + 0x5C240E00, // 0022 MOVE R9 R7 + 0x7C200200, // 0023 CALL R8 1 + 0x14200208, // 0024 LT R8 R1 R8 + 0x78220003, // 0025 JMPF R8 #002A + 0x94200E01, // 0026 GETIDX R8 R7 R1 + 0x5C240C00, // 0027 MOVE R9 R6 + 0x88280102, // 0028 GETMBR R10 R0 K2 + 0x7C200400, // 0029 CALL R8 2 + 0x80000000, // 002A RET 0 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: deregister_obj ********************************************************************/ @@ -573,466 +1122,40 @@ be_local_closure(LVGL_glob_create_custom_widget, /* name */ /*******************************************************************/ -/******************************************************************** -** Solidified function: lvgl_timer_dispatch -********************************************************************/ -be_local_closure(LVGL_glob_lvgl_timer_dispatch, /* name */ - be_nested_proto( - 7, /* nstack */ - 2, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(introspect), - /* K1 */ be_nested_str(toptr), - /* K2 */ be_nested_str(cb_event_closure), - }), - &be_const_str_lvgl_timer_dispatch, - &be_const_str_solidified, - ( &(const binstruction[10]) { /* code */ - 0xA40A0000, // 0000 IMPORT R2 K0 - 0x8C0C0501, // 0001 GETMET R3 R2 K1 - 0x5C140200, // 0002 MOVE R5 R1 - 0x7C0C0400, // 0003 CALL R3 2 - 0x88100102, // 0004 GETMBR R4 R0 K2 - 0x94100803, // 0005 GETIDX R4 R4 R3 - 0x5C140800, // 0006 MOVE R5 R4 - 0x5C180600, // 0007 MOVE R6 R3 - 0x7C140200, // 0008 CALL R5 1 - 0x80000000, // 0009 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: lvgl_event_dispatch -********************************************************************/ -be_local_closure(LVGL_glob_lvgl_event_dispatch, /* name */ - be_nested_proto( - 10, /* nstack */ - 2, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 9]) { /* constants */ - /* K0 */ be_nested_str(introspect), - /* K1 */ be_nested_str(toptr), - /* K2 */ be_nested_str(event), - /* K3 */ be_nested_str(_change_buffer), - /* K4 */ be_nested_str(lv), - /* K5 */ be_nested_str(lv_event), - /* K6 */ be_nested_str(target), - /* K7 */ be_nested_str(cb_event_closure), - /* K8 */ be_nested_str(get_object_from_ptr), - }), - &be_const_str_lvgl_event_dispatch, - &be_const_str_solidified, - ( &(const binstruction[28]) { /* code */ - 0xA40A0000, // 0000 IMPORT R2 K0 - 0x8C0C0501, // 0001 GETMET R3 R2 K1 - 0x5C140200, // 0002 MOVE R5 R1 - 0x7C0C0400, // 0003 CALL R3 2 - 0x88100102, // 0004 GETMBR R4 R0 K2 - 0x78120004, // 0005 JMPF R4 #000B - 0x88100102, // 0006 GETMBR R4 R0 K2 - 0x8C100903, // 0007 GETMET R4 R4 K3 - 0x5C180600, // 0008 MOVE R6 R3 - 0x7C100400, // 0009 CALL R4 2 - 0x70020004, // 000A JMP #0010 - 0xB8120800, // 000B GETNGBL R4 K4 - 0x8C100905, // 000C GETMET R4 R4 K5 - 0x5C180600, // 000D MOVE R6 R3 - 0x7C100400, // 000E CALL R4 2 - 0x90020404, // 000F SETMBR R0 K2 R4 - 0x88100102, // 0010 GETMBR R4 R0 K2 - 0x88100906, // 0011 GETMBR R4 R4 K6 - 0x88140107, // 0012 GETMBR R5 R0 K7 - 0x94140A04, // 0013 GETIDX R5 R5 R4 - 0x8C180108, // 0014 GETMET R6 R0 K8 - 0x5C200800, // 0015 MOVE R8 R4 - 0x7C180400, // 0016 CALL R6 2 - 0x5C1C0A00, // 0017 MOVE R7 R5 - 0x5C200C00, // 0018 MOVE R8 R6 - 0x88240102, // 0019 GETMBR R9 R0 K2 - 0x7C1C0400, // 001A CALL R7 2 - 0x80000000, // 001B RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: widget_dtor_impl -********************************************************************/ -be_local_closure(LVGL_glob_widget_dtor_impl, /* name */ - be_nested_proto( - 10, /* nstack */ - 3, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 7]) { /* constants */ - /* K0 */ be_nested_str(introspect), - /* K1 */ be_nested_str(lv), - /* K2 */ be_nested_str(lv_obj_class), - /* K3 */ be_nested_str(get_object_from_ptr), - /* K4 */ be_nested_str(instance), - /* K5 */ be_nested_str(get), - /* K6 */ be_nested_str(widget_destructor), - }), - &be_const_str_widget_dtor_impl, - &be_const_str_solidified, - ( &(const binstruction[22]) { /* code */ - 0xA40E0000, // 0000 IMPORT R3 K0 - 0xB8120200, // 0001 GETNGBL R4 K1 - 0x8C100902, // 0002 GETMET R4 R4 K2 - 0x5C180200, // 0003 MOVE R6 R1 - 0x7C100400, // 0004 CALL R4 2 - 0x8C140103, // 0005 GETMET R5 R0 K3 - 0x5C1C0400, // 0006 MOVE R7 R2 - 0x7C140400, // 0007 CALL R5 2 - 0x60180004, // 0008 GETGBL R6 G4 - 0x5C1C0A00, // 0009 MOVE R7 R5 - 0x7C180200, // 000A CALL R6 1 - 0x1C180D04, // 000B EQ R6 R6 K4 - 0x781A0007, // 000C JMPF R6 #0015 - 0x8C180705, // 000D GETMET R6 R3 K5 - 0x5C200A00, // 000E MOVE R8 R5 - 0x58240006, // 000F LDCONST R9 K6 - 0x7C180600, // 0010 CALL R6 3 - 0x781A0002, // 0011 JMPF R6 #0015 - 0x8C180B06, // 0012 GETMET R6 R5 K6 - 0x5C200800, // 0013 MOVE R8 R4 - 0x7C180400, // 0014 CALL R6 2 - 0x80000000, // 0015 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: widget_event_impl -********************************************************************/ -be_local_closure(LVGL_glob_widget_event_impl, /* name */ - be_nested_proto( - 12, /* nstack */ - 3, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[12]) { /* constants */ - /* K0 */ be_nested_str(introspect), - /* K1 */ be_nested_str(lv), - /* K2 */ be_nested_str(lv_obj_class), - /* K3 */ be_nested_str(lv_event), - /* K4 */ be_nested_str(target), - /* K5 */ be_nested_str(get_object_from_ptr), - /* K6 */ be_nested_str(instance), - /* K7 */ be_nested_str(code), - /* K8 */ be_nested_str(EVENT_DELETE), - /* K9 */ be_nested_str(get), - /* K10 */ be_nested_str(before_del), - /* K11 */ be_nested_str(widget_event), - }), - &be_const_str_widget_event_impl, - &be_const_str_solidified, - ( &(const binstruction[43]) { /* code */ - 0xA40E0000, // 0000 IMPORT R3 K0 - 0xB8120200, // 0001 GETNGBL R4 K1 - 0x8C100902, // 0002 GETMET R4 R4 K2 - 0x5C180200, // 0003 MOVE R6 R1 - 0x7C100400, // 0004 CALL R4 2 - 0xB8160200, // 0005 GETNGBL R5 K1 - 0x8C140B03, // 0006 GETMET R5 R5 K3 - 0x5C1C0400, // 0007 MOVE R7 R2 - 0x7C140400, // 0008 CALL R5 2 - 0x88180B04, // 0009 GETMBR R6 R5 K4 - 0x8C1C0105, // 000A GETMET R7 R0 K5 - 0x5C240C00, // 000B MOVE R9 R6 - 0x7C1C0400, // 000C CALL R7 2 - 0x60200004, // 000D GETGBL R8 G4 - 0x5C240E00, // 000E MOVE R9 R7 - 0x7C200200, // 000F CALL R8 1 - 0x1C201106, // 0010 EQ R8 R8 K6 - 0x78220017, // 0011 JMPF R8 #002A - 0x88200B07, // 0012 GETMBR R8 R5 K7 - 0xB8260200, // 0013 GETNGBL R9 K1 - 0x88241308, // 0014 GETMBR R9 R9 K8 - 0x1C201009, // 0015 EQ R8 R8 R9 - 0x78220009, // 0016 JMPF R8 #0021 - 0x8C200709, // 0017 GETMET R8 R3 K9 - 0x5C280E00, // 0018 MOVE R10 R7 - 0x582C000A, // 0019 LDCONST R11 K10 - 0x7C200600, // 001A CALL R8 3 - 0x78220004, // 001B JMPF R8 #0021 - 0x8C200F0A, // 001C GETMET R8 R7 K10 - 0x5C280800, // 001D MOVE R10 R4 - 0x5C2C0A00, // 001E MOVE R11 R5 - 0x7C200600, // 001F CALL R8 3 - 0x70020008, // 0020 JMP #002A - 0x8C200709, // 0021 GETMET R8 R3 K9 - 0x5C280E00, // 0022 MOVE R10 R7 - 0x582C000B, // 0023 LDCONST R11 K11 - 0x7C200600, // 0024 CALL R8 3 - 0x78220003, // 0025 JMPF R8 #002A - 0x8C200F0B, // 0026 GETMET R8 R7 K11 - 0x5C280800, // 0027 MOVE R10 R4 - 0x5C2C0A00, // 0028 MOVE R11 R5 - 0x7C200600, // 0029 CALL R8 3 - 0x80000000, // 002A RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: _anonymous_ -********************************************************************/ -be_local_closure(LVGL_glob__anonymous_, /* name */ - be_nested_proto( - 2, /* nstack */ - 0, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(LVG_X3A_X20call_X20to_X20unsupported_X20callback), - }), - &be_const_str__anonymous_, - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x60000001, // 0000 GETGBL R0 G1 - 0x58040000, // 0001 LDCONST R1 K0 - 0x7C000200, // 0002 CALL R0 1 - 0x80000000, // 0003 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: widget_cb -********************************************************************/ -be_local_closure(LVGL_glob_widget_cb, /* name */ - be_nested_proto( - 5, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 1, /* has sup protos */ - ( &(const struct bproto*[ 3]) { - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 0, /* varg */ - 1, /* has upvals */ - ( &(const bupvaldesc[ 1]) { /* upvals */ - be_local_const_upval(1, 0), - }), - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(widget_ctor_impl), - }), - &be_const_str__X3Clambda_X3E, - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0x68080000, // 0000 GETUPV R2 U0 - 0x8C080500, // 0001 GETMET R2 R2 K0 - 0x5C100000, // 0002 MOVE R4 R0 - 0x5C140200, // 0003 MOVE R5 R1 - 0x7C080600, // 0004 CALL R2 3 - 0x80040400, // 0005 RET 1 R2 - }) - ), - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 0, /* varg */ - 1, /* has upvals */ - ( &(const bupvaldesc[ 1]) { /* upvals */ - be_local_const_upval(1, 0), - }), - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(widget_dtor_impl), - }), - &be_const_str__X3Clambda_X3E, - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0x68080000, // 0000 GETUPV R2 U0 - 0x8C080500, // 0001 GETMET R2 R2 K0 - 0x5C100000, // 0002 MOVE R4 R0 - 0x5C140200, // 0003 MOVE R5 R1 - 0x7C080600, // 0004 CALL R2 3 - 0x80040400, // 0005 RET 1 R2 - }) - ), - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 0, /* varg */ - 1, /* has upvals */ - ( &(const bupvaldesc[ 1]) { /* upvals */ - be_local_const_upval(1, 0), - }), - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str(widget_event_impl), - }), - &be_const_str__X3Clambda_X3E, - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0x68080000, // 0000 GETUPV R2 U0 - 0x8C080500, // 0001 GETMET R2 R2 K0 - 0x5C100000, // 0002 MOVE R4 R0 - 0x5C140200, // 0003 MOVE R5 R1 - 0x7C080600, // 0004 CALL R2 3 - 0x80040400, // 0005 RET 1 R2 - }) - ), - }), - 1, /* has constants */ - ( &(const bvalue[15]) { /* constants */ - /* K0 */ be_nested_str(cb), - /* K1 */ be_nested_str(widget_ctor_cb), - /* K2 */ be_nested_str(gen_cb), - /* K3 */ be_nested_str(widget_dtor_cb), - /* K4 */ be_nested_str(widget_event_cb), - /* K5 */ be_nested_str(widget_struct_default), - /* K6 */ be_nested_str(lv), - /* K7 */ be_nested_str(lv_obj_class), - /* K8 */ be_nested_str(lv_obj), - /* K9 */ be_nested_str(_class), - /* K10 */ be_nested_str(copy), - /* K11 */ be_nested_str(base_class), - /* K12 */ be_nested_str(constructor_cb), - /* K13 */ be_nested_str(destructor_cb), - /* K14 */ be_nested_str(event_cb), - }), - &be_const_str_widget_cb, - &be_const_str_solidified, - ( &(const binstruction[54]) { /* code */ - 0xA4060000, // 0000 IMPORT R1 K0 - 0x88080101, // 0001 GETMBR R2 R0 K1 - 0x4C0C0000, // 0002 LDNIL R3 - 0x1C080403, // 0003 EQ R2 R2 R3 - 0x780A0003, // 0004 JMPF R2 #0009 - 0x8C080302, // 0005 GETMET R2 R1 K2 - 0x84100000, // 0006 CLOSURE R4 P0 - 0x7C080400, // 0007 CALL R2 2 - 0x90020202, // 0008 SETMBR R0 K1 R2 - 0x88080103, // 0009 GETMBR R2 R0 K3 - 0x4C0C0000, // 000A LDNIL R3 - 0x1C080403, // 000B EQ R2 R2 R3 - 0x780A0003, // 000C JMPF R2 #0011 - 0x8C080302, // 000D GETMET R2 R1 K2 - 0x84100001, // 000E CLOSURE R4 P1 - 0x7C080400, // 000F CALL R2 2 - 0x90020602, // 0010 SETMBR R0 K3 R2 - 0x88080104, // 0011 GETMBR R2 R0 K4 - 0x4C0C0000, // 0012 LDNIL R3 - 0x1C080403, // 0013 EQ R2 R2 R3 - 0x780A0003, // 0014 JMPF R2 #0019 - 0x8C080302, // 0015 GETMET R2 R1 K2 - 0x84100002, // 0016 CLOSURE R4 P2 - 0x7C080400, // 0017 CALL R2 2 - 0x90020802, // 0018 SETMBR R0 K4 R2 - 0x88080105, // 0019 GETMBR R2 R0 K5 - 0x4C0C0000, // 001A LDNIL R3 - 0x1C080403, // 001B EQ R2 R2 R3 - 0x780A0016, // 001C JMPF R2 #0034 - 0xB80A0C00, // 001D GETNGBL R2 K6 - 0x8C080507, // 001E GETMET R2 R2 K7 - 0xB8120C00, // 001F GETNGBL R4 K6 - 0x88100908, // 0020 GETMBR R4 R4 K8 - 0x88100909, // 0021 GETMBR R4 R4 K9 - 0x7C080400, // 0022 CALL R2 2 - 0x8C08050A, // 0023 GETMET R2 R2 K10 - 0x7C080200, // 0024 CALL R2 1 - 0x90020A02, // 0025 SETMBR R0 K5 R2 - 0x88080105, // 0026 GETMBR R2 R0 K5 - 0xB80E0C00, // 0027 GETNGBL R3 K6 - 0x880C0708, // 0028 GETMBR R3 R3 K8 - 0x880C0709, // 0029 GETMBR R3 R3 K9 - 0x900A1603, // 002A SETMBR R2 K11 R3 - 0x88080105, // 002B GETMBR R2 R0 K5 - 0x880C0101, // 002C GETMBR R3 R0 K1 - 0x900A1803, // 002D SETMBR R2 K12 R3 - 0x88080105, // 002E GETMBR R2 R0 K5 - 0x880C0103, // 002F GETMBR R3 R0 K3 - 0x900A1A03, // 0030 SETMBR R2 K13 R3 - 0x88080105, // 0031 GETMBR R2 R0 K5 - 0x880C0104, // 0032 GETMBR R3 R0 K4 - 0x900A1C03, // 0033 SETMBR R2 K14 R3 - 0xA0000000, // 0034 CLOSE R0 - 0x80000000, // 0035 RET 0 - }) - ) -); -/*******************************************************************/ - - /******************************************************************** ** Solidified class: LVGL_glob ********************************************************************/ be_local_class(LVGL_glob, 11, NULL, - be_nested_map(24, + be_nested_map(26, ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key(widget_ctor_cb, -1), be_const_var(6) }, - { be_const_key(make_cb, 8), be_const_closure(LVGL_glob_make_cb_closure) }, - { be_const_key(widget_struct_by_class, 4), be_const_var(10) }, - { be_const_key(init, -1), be_const_closure(LVGL_glob_init_closure) }, - { be_const_key(register_obj, -1), be_const_closure(LVGL_glob_register_obj_closure) }, - { be_const_key(widget_dtor_cb, -1), be_const_var(7) }, - { be_const_key(deregister_obj, -1), be_const_closure(LVGL_glob_deregister_obj_closure) }, - { be_const_key(widget_ctor_impl, -1), be_const_closure(LVGL_glob_widget_ctor_impl_closure) }, - { be_const_key(widget_event_impl, 11), be_const_closure(LVGL_glob_widget_event_impl_closure) }, - { be_const_key(get_object_from_ptr, 12), be_const_closure(LVGL_glob_get_object_from_ptr_closure) }, - { be_const_key(widget_event_cb, 21), be_const_var(8) }, - { be_const_key(lvgl_timer_dispatch, -1), be_const_closure(LVGL_glob_lvgl_timer_dispatch_closure) }, - { be_const_key(event_cb, 6), be_const_var(2) }, { be_const_key(cb_event_closure, -1), be_const_var(1) }, + { be_const_key(create_custom_widget, 20), be_const_closure(LVGL_glob_create_custom_widget_closure) }, + { be_const_key(widget_event_cb, -1), be_const_var(8) }, + { be_const_key(event_cb, -1), be_const_var(2) }, + { be_const_key(cb_do_nothing, 15), be_const_static_closure(LVGL_glob__anonymous__closure) }, + { be_const_key(get_object_from_ptr, 9), be_const_closure(LVGL_glob_get_object_from_ptr_closure) }, + { be_const_key(timer_cb, 22), be_const_var(3) }, + { be_const_key(add_cb_event_closure, -1), be_const_closure(LVGL_glob_add_cb_event_closure_closure) }, + { be_const_key(null_cb, -1), be_const_var(5) }, + { be_const_key(widget_ctor_impl, -1), be_const_closure(LVGL_glob_widget_ctor_impl_closure) }, { be_const_key(lvgl_event_dispatch, -1), be_const_closure(LVGL_glob_lvgl_event_dispatch_closure) }, { be_const_key(event, -1), be_const_var(4) }, - { be_const_key(timer_cb, 19), be_const_var(3) }, + { be_const_key(widget_ctor_cb, -1), be_const_var(6) }, { be_const_key(widget_struct_default, -1), be_const_var(9) }, - { be_const_key(cb_obj, 16), be_const_var(0) }, + { be_const_key(init, -1), be_const_closure(LVGL_glob_init_closure) }, + { be_const_key(register_obj, -1), be_const_closure(LVGL_glob_register_obj_closure) }, + { be_const_key(get_event_cb, 10), be_const_closure(LVGL_glob_get_event_cb_closure) }, + { be_const_key(lvgl_timer_dispatch, -1), be_const_closure(LVGL_glob_lvgl_timer_dispatch_closure) }, + { be_const_key(make_cb, 14), be_const_closure(LVGL_glob_make_cb_closure) }, + { be_const_key(widget_dtor_cb, 18), be_const_var(7) }, { be_const_key(widget_dtor_impl, -1), be_const_closure(LVGL_glob_widget_dtor_impl_closure) }, - { be_const_key(null_cb, -1), be_const_var(5) }, - { be_const_key(create_custom_widget, -1), be_const_closure(LVGL_glob_create_custom_widget_closure) }, - { be_const_key(cb_do_nothing, -1), be_const_static_closure(LVGL_glob__anonymous__closure) }, - { be_const_key(widget_cb, -1), be_const_closure(LVGL_glob_widget_cb_closure) }, + { be_const_key(widget_event_impl, -1), be_const_closure(LVGL_glob_widget_event_impl_closure) }, + { be_const_key(cb_obj, -1), be_const_var(0) }, + { be_const_key(deregister_obj, -1), be_const_closure(LVGL_glob_deregister_obj_closure) }, + { be_const_key(widget_struct_by_class, 1), be_const_var(10) }, + { be_const_key(widget_cb, 0), be_const_closure(LVGL_glob_widget_cb_closure) }, })), be_str_literal("LVGL_glob") ); diff --git a/lib/libesp32_lvgl/lv_binding_berry/src/embedded/lvgl_glob.be b/lib/libesp32_lvgl/lv_binding_berry/src/embedded/lvgl_glob.be index 0fde41f24..53d117e5c 100644 --- a/lib/libesp32_lvgl/lv_binding_berry/src/embedded/lvgl_glob.be +++ b/lib/libesp32_lvgl/lv_binding_berry/src/embedded/lvgl_glob.be @@ -5,8 +5,8 @@ class LVGL_glob # all variables are lazily initialized to reduce the memory pressure. Until they are used, they consume zero memory var cb_obj # map between a native C pointer (as int) and the corresponding lv.lv_* berry object, also helps marking the objects as non-gc-able - var cb_event_closure # mapping for event closures per LVGL native pointer (int) - var event_cb # native callback for lv.lv_event + var cb_event_closure # mapping for event closures per LVGL native pointer (int). For each int key, contains either a closure or an array with multiple closures + var event_cb # array of native callback for lv.lv_event (when multiple are needed) var timer_cb # native callback for lv.lv_timer var event # keep aroud the current lv_event to avoid repeated allocation @@ -14,7 +14,7 @@ class LVGL_glob var null_cb # cb called if type is not supported var widget_ctor_cb var widget_dtor_cb - var widget_event_cb + var widget_event_cb # callback object that calls `widget_event_impl(object, event)` var widget_struct_default var widget_struct_by_class @@ -36,25 +36,42 @@ class LVGL_glob self.cb_obj[obj._p] = obj end + # get event callback by rank number, expand the list if needed + def get_event_cb(n) + if self.event_cb == nil self.event_cb = [] end # lazy initial initialization + + var cb_arr = self.event_cb + for i: size(cb_arr) .. n + var next_cb = cb.gen_cb(/ event_ptr -> self.lvgl_event_dispatch(i, event_ptr)) + cb_arr.push(next_cb) + end + + return cb_arr[n] + end + def get_object_from_ptr(ptr) if self.cb_obj != nil return self.cb_obj.find(ptr) # raise an exception if something is wrong end end - def lvgl_event_dispatch(event_ptr_i) + def lvgl_event_dispatch(rank, event_ptr_i) import introspect var event_ptr = introspect.toptr(event_ptr_i) + # use always the same instance of lv.lv_event by changing pointer, create a new the first time if self.event self.event._change_buffer(event_ptr) else self.event = lv.lv_event(event_ptr) end - var target = self.event.target - var f = self.cb_event_closure[target] - var obj = self.get_object_from_ptr(target) - #print('>> lvgl_event_dispatch', f, obj, event) - f(obj, self.event) + var target = self.event.target # LVGL native object as target of the event (comptr) + var obj = self.get_object_from_ptr(target) # get the corresponding Berry LVGL object previously recorded as its container + var f = self.cb_event_closure[target] # get the closure or closure list known for this object + if type(f) == 'function' # if only one callback, just use it + f(obj, self.event) + elif rank < size(f) # if more than one, then it's a list - use the closure for `rank` + f[rank](obj, self.event) + end end def lvgl_timer_dispatch(timer_int) @@ -63,7 +80,38 @@ class LVGL_glob var timer_ptr = introspect.toptr(timer_int) var f = self.cb_event_closure[timer_ptr] #print('>> lvgl_timer_dispatch', f, obj, event) - f(timer_ptr) + if type(f) == 'function' + f(timer_ptr) + else + # array + var i = 0 + while i < size(f) + f[i](timer_ptr) + i += 1 + end + end + end + + # add a closure `f` to the object `o` + # + # returns: rank of the cb for this object, starting at `0` + def add_cb_event_closure(o, f) + if self.cb_event_closure == nil self.cb_event_closure = {} end # lazy instanciation + if self.cb_event_closure.contains(o) + # contains already a value, create an array if needed + var cur = self.cb_event_closure[o] + if type(cur) == 'function' + self.cb_event_closure[o] = [cur, f] + return 1 + else + # should be already an array + self.cb_event_closure[o].push(f) + return size(self.cb_event_closure[o]) - 1 + end + else + self.cb_event_closure[o] = f + return 0 + end end def make_cb(f, obj, name) @@ -71,25 +119,18 @@ class LVGL_glob # print('>> make_cb', f, name, obj) # record the object, whatever the callback - if name == "lv_event_cb" - if self.cb_event_closure == nil self.cb_event_closure = {} end # lazy instanciation - if self.event_cb == nil self.event_cb = cb.gen_cb(/ event_ptr -> self.lvgl_event_dispatch(event_ptr)) end # encapsulate 'self' in closure - + if name == "lv_event_cb" self.register_obj(obj) # keep a record of the object to prevent from being gc'ed - if self.cb_event_closure.contains(obj._p) - tasmota.log("LVG: object:" + str(obj) + "has already an event callback", 2) - end - self.cb_event_closure[obj._p] = f # keep a mapping of the closure to call, indexed by internal lvgl native pointer - return self.event_cb + var rank = self.add_cb_event_closure(obj._p, f) + # if self.cb_event_closure.contains(obj._p) + # tasmota.log("LVG: object:" + str(obj) + "has already an event callback", 2) + # end + # self.cb_event_closure[obj._p] = f # keep a mapping of the closure to call, indexed by internal lvgl native pointer + return self.get_event_cb(rank) elif name == "lv_timer_cb" - if self.cb_event_closure == nil self.cb_event_closure = {} end # lazy instanciation if self.timer_cb == nil self.timer_cb = cb.gen_cb(/ timer_ptr -> self.lvgl_timer_dispatch(timer_ptr)) end # encapsulate 'self' in closure - # no need to register the object since it's only a pointer to a timer - if self.cb_event_closure.contains(obj._p) - tasmota.log("LVG: object:" + str(obj) + "has already an event callback", 2) - end - self.cb_event_closure[obj._p] = f # keep a mapping of the closure to call, indexed by internal lvgl native pointer + self.add_cb_event_closure(obj._p, f) return self.timer_cb # elif name == "" @@ -133,7 +174,6 @@ class LVGL_glob obj.widget_event(cl, event) end end - # print("widget_event_impl", cl, obj_ptr, obj, event) end diff --git a/tasmota/berry/lvgl_examples/lv.be b/tasmota/berry/lvgl_examples/lv.be index 24b70f0d0..dcf116b67 100644 --- a/tasmota/berry/lvgl_examples/lv.be +++ b/tasmota/berry/lvgl_examples/lv.be @@ -1,4 +1,6 @@ #- start LVGL and init environment -# +import global + lv.start() hres = lv.get_hor_res() # should be 320 @@ -80,28 +82,33 @@ prev_btn.add_event_cb(btn_clicked_cb, lv.EVENT_CLICKED, 0) next_btn.add_event_cb(btn_clicked_cb, lv.EVENT_CLICKED, 0) home_btn.add_event_cb(btn_clicked_cb, lv.EVENT_CLICKED, 0) - import lv_wifi_graph ws_h = 40 ws_w = 80 ws = lv_wifi_graph(scr) ws.set_size(ws_w,ws_h) -ws.set_pos(hres-ws_w, stat_line.get_height()) -tasmota.add_driver(ws) +ws.set_pos(hres-ws_w - 3, stat_line.get_height() + 3) # info bloc import lv_tasmota_info var info = lv_tasmota_info(scr) -info.set_pos(0, stat_line.get_height()) -info.set_size(hres - 80 + 1, 40) -tasmota.add_driver(info) +info.set_pos(3, stat_line.get_height()+ 3) +info.set_size(hres - 80 + 1 - 10, 40) # logs import lv_tasmota_log_roboto var lg = lv_tasmota_log_roboto(scr, 6) -lg.set_size(hres, 90) -lg.set_pos(0, stat_line.get_height() + 40 - 1) -tasmota.add_driver(lg) +lg.set_size(hres - 6, 90) +lg.set_pos(3, stat_line.get_height() + 40 + 6) + +# 3D cube +var cube +if global.accelerator + import lv_3D_cube_widget + cube = lv_3D_cube_widget(scr, global.accelerator) + cube.set_pos(3,161) +end + #- sb120 = lv.load_freetype_font("sketchbook.ttf", 120, 0) diff --git a/tasmota/berry/lvgl_examples/lv_tasmota_info.be b/tasmota/berry/lvgl_examples/lv_tasmota_info.be index 250e7b417..a8fcc2621 100644 --- a/tasmota/berry/lvgl_examples/lv_tasmota_info.be +++ b/tasmota/berry/lvgl_examples/lv_tasmota_info.be @@ -26,14 +26,17 @@ class lv_tasmota_info : lv.label self.msg = "IP: - \nFree: - kB" self.set_text(self.msg) self.delay = 1 + + self.add_event_cb(/->self.before_del(), lv.EVENT_DELETE, 0) # register `before_del` to be called when object is deleted + tasmota.add_driver(self) end def update() - var wifi_ip = "IP: " + tasmota.wifi().find('ip', '') + " " + tasmota.eth().find('ip', '') + var wifi_ip = "IP: " + tasmota.wifi().find('ip', '') + " " + tasmota.eth().find('ip', '') var tas_mem = tasmota.memory() - var mem_msg = "Free: " + str(tas_mem['heap_free']) + " kB" + var mem_msg = "Free: " + str(tas_mem['heap_free']) + " kB" if tas_mem.contains('psram_free') - mem_msg += " | PSRam: " + str(tas_mem['psram_free']) + " kB" + mem_msg += " PSRam: " + str(tas_mem['psram_free']) + " kB" end var msg = wifi_ip + "\n" + mem_msg @@ -51,6 +54,9 @@ class lv_tasmota_info : lv.label end end + def before_del() + tasmota.remove_driver(self) + end end return lv_tasmota_info diff --git a/tasmota/berry/lvgl_examples/lv_tasmota_log.be b/tasmota/berry/lvgl_examples/lv_tasmota_log.be index 40261a99b..0bf2b42de 100644 --- a/tasmota/berry/lvgl_examples/lv_tasmota_log.be +++ b/tasmota/berry/lvgl_examples/lv_tasmota_log.be @@ -1,12 +1,13 @@ # lv_tasmota_log class -class lv_tasmota_log : lv.label +class lv_tasmota_log : lv.obj + var label # contains the sub lv_label object var lines var line_len var log_reader var log_level - def init(parent, line_len) + def init(parent) super(self).init(parent) self.set_width(parent.get_width()) self.set_pos(0, 0) @@ -19,21 +20,68 @@ class lv_tasmota_log : lv.label self.set_style_pad_all(2, lv.PART_MAIN | lv.STATE_DEFAULT) self.set_style_border_color(lv.color(0x0099EE), lv.PART_MAIN | lv.STATE_DEFAULT) self.set_style_border_width(1, lv.PART_MAIN | lv.STATE_DEFAULT) + self.refr_size() + self.refr_pos() - self.set_style_text_color(lv.color(0x00FF00), lv.PART_MAIN | lv.STATE_DEFAULT) - self.set_long_mode(lv.LABEL_LONG_CLIP) - var lg_font = lv.font_montserrat(10) - self.set_style_text_font(lg_font, lv.PART_MAIN | lv.STATE_DEFAULT) - self.set_text("") + self.label = lv.label(self) + self.label.set_width(self.get_width() - 12) - self.line_len = line_len + self.label.set_style_text_color(lv.color(0x00FF00), lv.PART_MAIN | lv.STATE_DEFAULT) + self.label.set_long_mode(lv.LABEL_LONG_CLIP) + self.label.set_text("") # bug, still displays "Text" + + self.add_event_cb( / obj, evt -> self.size_changed_cb(obj, evt), lv.EVENT_SIZE_CHANGED | lv.EVENT_STYLE_CHANGED | lv.EVENT_DELETE, 0) + + self.lines = [] + self.line_len = 0 self.log_reader = tasmota_log_reader() self.log_level = 2 + self._size_changed() - # fill with empty strings - self.lines = [] - for i:1..line_len - self.lines.push("") + tasmota.add_driver(self) + end + + def set_lines_count(line_len) + if line_len > self.line_len # increase lines + for i: self.line_len .. line_len-1 + self.lines.insert(0, "") + end + elif line_len < self.line_len # decrease lines + for i: line_len .. self.line_len-1 + self.lines.remove(0) + end + end + self.line_len = line_len + end + + def _size_changed() + # print(">>> lv.EVENT_SIZE_CHANGED") + var pad_hor = self.get_style_pad_left(lv.PART_MAIN | lv.STATE_DEFAULT) + + self.get_style_pad_right(lv.PART_MAIN | lv.STATE_DEFAULT) + + self.get_style_border_width(lv.PART_MAIN | lv.STATE_DEFAULT) * 2 + + 3 + var pad_ver = self.get_style_pad_top(lv.PART_MAIN | lv.STATE_DEFAULT) + + self.get_style_pad_bottom(lv.PART_MAIN | lv.STATE_DEFAULT) + + self.get_style_border_width(lv.PART_MAIN | lv.STATE_DEFAULT) * 2 + + 3 + var w = self.get_width() - pad_hor + var h = self.get_height() - pad_ver + self.label.set_size(w, h) + # print("w",w,"h",h,"pad_hor",pad_hor,"pad_ver",pad_ver) + + # compute how many lines should be displayed + var h_font = lv.font_get_line_height(self.label.get_style_text_font(0)) # current font's height + var lines_count = ((h * 2 / h_font) + 1 ) / 2 + # print("h_font",h_font,"h",h,"lines_count",lines_count) + self.set_lines_count(lines_count) + end + + def size_changed_cb(obj, event) + var code = event.code + if code == lv.EVENT_SIZE_CHANGED || code == lv.EVENT_STYLE_CHANGED + self._size_changed() + elif code == lv.EVENT_DELETE + tasmota.remove_driver(self) end end @@ -51,14 +99,8 @@ class lv_tasmota_log : lv.label def update() var msg = self.lines.concat("\n") - self.set_text(msg) + self.label.set_text(msg) end end return lv_tasmota_log - -# import lv_tasmota_log -# var lg = lv_tasmota_log(scr, 8) -# lg.set_size(hres, 95) -# lg.set_pos(0, stat_line.get_height() + 40) -# tasmota.add_driver(lg) diff --git a/tasmota/berry/lvgl_examples/lv_tasmota_log_roboto.be b/tasmota/berry/lvgl_examples/lv_tasmota_log_roboto.be index c002d9b5a..79462aa85 100644 --- a/tasmota/berry/lvgl_examples/lv_tasmota_log_roboto.be +++ b/tasmota/berry/lvgl_examples/lv_tasmota_log_roboto.be @@ -1,12 +1,13 @@ # lv_tasmota_log class -class lv_tasmota_log_roboto : lv.label +class lv_tasmota_log_roboto : lv.obj + var label # contains the sub lv_label object var lines var line_len var log_reader var log_level - def init(parent, line_len) + def init(parent) super(self).init(parent) self.set_width(parent.get_width()) self.set_pos(0, 0) @@ -19,23 +20,71 @@ class lv_tasmota_log_roboto : lv.label self.set_style_pad_all(2, lv.PART_MAIN | lv.STATE_DEFAULT) self.set_style_border_color(lv.color(0x0099EE), lv.PART_MAIN | lv.STATE_DEFAULT) self.set_style_border_width(1, lv.PART_MAIN | lv.STATE_DEFAULT) + self.refr_size() + self.refr_pos() - self.set_style_text_color(lv.color(0x00FF00), lv.PART_MAIN | lv.STATE_DEFAULT) - self.set_long_mode(lv.LABEL_LONG_CLIP) + self.label = lv.label(self) + self.label.set_width(self.get_width() - 12) + + self.label.set_style_text_color(lv.color(0x00FF00), lv.PART_MAIN | lv.STATE_DEFAULT) + self.label.set_long_mode(lv.LABEL_LONG_CLIP) var roboto12 = lv.font_robotocondensed_latin1(12) - self.set_style_text_font(roboto12, lv.PART_MAIN | lv.STATE_DEFAULT) + self.label.set_style_text_font(roboto12, lv.PART_MAIN | lv.STATE_DEFAULT) # var lg_font = lv.font_montserrat(10) # self.set_style_text_font(lg_font, lv.PART_MAIN | lv.STATE_DEFAULT) - self.set_text("") + self.label.set_text("") # bug, still displays "Text" - self.line_len = line_len + self.add_event_cb( / obj, evt -> self.size_changed_cb(obj, evt), lv.EVENT_SIZE_CHANGED | lv.EVENT_STYLE_CHANGED | lv.EVENT_DELETE, 0) + + self.lines = [] + self.line_len = 0 self.log_reader = tasmota_log_reader() self.log_level = 2 + self._size_changed() - # fill with empty strings - self.lines = [] - for i:1..line_len - self.lines.push("") + tasmota.add_driver(self) + end + + def set_lines_count(line_len) + if line_len > self.line_len # increase lines + for i: self.line_len .. line_len-1 + self.lines.insert(0, "") + end + elif line_len < self.line_len # decrease lines + for i: line_len .. self.line_len-1 + self.lines.remove(0) + end + end + self.line_len = line_len + end + + def _size_changed() + # print(">>> lv.EVENT_SIZE_CHANGED") + var pad_hor = self.get_style_pad_left(lv.PART_MAIN | lv.STATE_DEFAULT) + + self.get_style_pad_right(lv.PART_MAIN | lv.STATE_DEFAULT) + + self.get_style_border_width(lv.PART_MAIN | lv.STATE_DEFAULT) * 2 + + 3 + var pad_ver = self.get_style_pad_top(lv.PART_MAIN | lv.STATE_DEFAULT) + + self.get_style_pad_bottom(lv.PART_MAIN | lv.STATE_DEFAULT) + + self.get_style_border_width(lv.PART_MAIN | lv.STATE_DEFAULT) * 2 + + 3 + var w = self.get_width() - pad_hor + var h = self.get_height() - pad_ver + self.label.set_size(w, h) + + # compute how many lines should be displayed + var h_font = lv.font_get_line_height(self.label.get_style_text_font(0)) # current font's height + var lines_count = ((h * 2 / h_font) + 1 ) / 2 + # print("h_font",h_font,"h",h,"lines_count",lines_count) + self.set_lines_count(lines_count) + end + + def size_changed_cb(obj, event) + var code = event.code + if code == lv.EVENT_SIZE_CHANGED || code == lv.EVENT_STYLE_CHANGED + self._size_changed() + elif code == lv.EVENT_DELETE + tasmota.remove_driver(self) end end @@ -53,7 +102,7 @@ class lv_tasmota_log_roboto : lv.label def update() var msg = self.lines.concat("\n") - self.set_text(msg) + self.label.set_text(msg) end end diff --git a/tasmota/berry/lvgl_examples/lv_wifi_graph.be b/tasmota/berry/lvgl_examples/lv_wifi_graph.be index f522da5d1..bb03ec6c7 100644 --- a/tasmota/berry/lvgl_examples/lv_wifi_graph.be +++ b/tasmota/berry/lvgl_examples/lv_wifi_graph.be @@ -38,6 +38,9 @@ class lv_wifi_graph : lv.chart self.wsl.set_align(lv.ALIGN_BOTTOM_MID) self.delay = 1 + + self.add_event_cb(/->self.before_del(), lv.EVENT_DELETE, 0) # register `before_del` to be called when object is deleted + tasmota.add_driver(self) end def add_wifi_point() @@ -55,6 +58,10 @@ class lv_wifi_graph : lv.chart self.delay = 2 end end + + def before_del() + tasmota.remove_driver(self) + end end return lv_wifi_graph From 8b988397296101a467c608858b6ffbf998975125 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Tue, 5 Apr 2022 21:55:05 +0200 Subject: [PATCH 341/355] Add non-teleperiod data to influxdb --- CHANGELOG.md | 1 + RELEASENOTES.md | 1 + tasmota/xdrv_59_influxdb.ino | 18 +++++++++++++----- tasmota/xdrv_interface.ino | 8 +++++++- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 10889660d..2a715c1cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. ## [11.0.0.5] ### Added - Support for improv as used by esp-web-tools +- Non-teleperiod data to influxdb ### Changed - Remove support for Internet Explorer by allowing ECMAScript6 syntax using less JavaScript code bytes (#15280) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b77ef3e22..7ad7dc9f7 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -120,6 +120,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - Support for PCF85363 RTC as used in Shelly 3EM [#13515](https://github.com/arendst/Tasmota/issues/13515) - Full RTC chip integration and synchronisation when using UBX (=GPS), NTP or manual time - NeoPool JSON modules, power module, cell info, chlorine, conductivity and ionization +- Non-teleperiod data to influxdb - ESP32 Berry always enable rules - ESP32 Berry bootloop protection - ESP32 support for BLE Mi scale V1 [#13517](https://github.com/arendst/Tasmota/issues/13517) diff --git a/tasmota/xdrv_59_influxdb.ino b/tasmota/xdrv_59_influxdb.ino index 435a3ed2f..21380fc80 100644 --- a/tasmota/xdrv_59_influxdb.ino +++ b/tasmota/xdrv_59_influxdb.ino @@ -257,15 +257,19 @@ char* InfluxDbNumber(char* alternative, JsonParserToken value) { return nullptr; } -void InfluxDbProcessJson(void) { +void InfluxDbProcessJson(bool use_copy = false) { if (!IFDB.init) { return; } - AddLog(IFDB.log_level, PSTR("IFX: Process %s"), ResponseData()); + char *json_data = ResponseData(); + if (use_copy) { + json_data = (char*)malloc(ResponseSize()+2); + if (!json_data) { return; } + strlcpy(json_data, ResponseData(), ResponseSize()); + } -// String jsonStr = ResponseData(); // Make a copy before use -// JsonParser parser((char *)jsonStr.c_str()); - JsonParser parser((char *)ResponseData()); // Destroys ResponseData but saves heap space + AddLog(IFDB.log_level, PSTR("IFX: Process %s"), json_data); + JsonParser parser(json_data); // Destroys json_data JsonParserObject root = parser.getRootObject(); if (root) { char number[12]; // '1' to '255' @@ -355,6 +359,10 @@ void InfluxDbProcessJson(void) { InfluxDbPostData(data.c_str()); } } + + if (use_copy) { + free(json_data); + } } void InfluxDbPublishPowerState(uint32_t device) { diff --git a/tasmota/xdrv_interface.ino b/tasmota/xdrv_interface.ino index dcf763935..6017ee95b 100644 --- a/tasmota/xdrv_interface.ino +++ b/tasmota/xdrv_interface.ino @@ -1093,8 +1093,14 @@ bool XdrvRulesProcess(bool teleperiod, const char* event) { } bool XdrvRulesProcess(bool teleperiod) { +#ifdef USE_INFLUXDB + if (!teleperiod) { // Only process ad-hoc data here + InfluxDbProcessJson(1); // Use a copy + } +#endif + bool result = XdrvRulesProcess(teleperiod, ResponseData()); - ResponseClear(); // Free heap space + ResponseClear(); // Free heap space return result; } From eacecb233991ffdbb836d6b5219421e1803d1557 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Tue, 5 Apr 2022 21:59:51 +0200 Subject: [PATCH 342/355] Change weight_absconv to signed --- tasmota/settings.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/settings.h b/tasmota/settings.h index 75f67e517..1010fde1a 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -634,8 +634,8 @@ typedef struct { int8_t shutter_tilt_pos[MAX_SHUTTERS]; //51C uint16_t influxdb_period; // 520 uint16_t rf_duplicate_time; // 522 - uint32_t weight_absconv_a; // 524 - uint32_t weight_absconv_b; // 528 + int32_t weight_absconv_a; // 524 + int32_t weight_absconv_b; // 528 uint16_t mqtt_keepalive; // 52C uint16_t mqtt_socket_timeout; // 52E uint8_t mqtt_wifi_timeout; // 530 From c84f5fe6073beb5e29e6f083532abfa8f1cf774b Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:14:41 +0200 Subject: [PATCH 343/355] Add command ``IfxSensor 1`` to send non-teleperiod data to influxdb --- CHANGELOG.md | 2 +- RELEASENOTES.md | 2 +- tasmota/settings.h | 2 +- tasmota/xdrv_59_influxdb.ino | 19 +++++++++++++++++-- tasmota/xdrv_interface.ino | 2 +- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a715c1cf..8c189d9bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ All notable changes to this project will be documented in this file. ## [11.0.0.5] ### Added - Support for improv as used by esp-web-tools -- Non-teleperiod data to influxdb +- Command ``IfxSensor 1`` to send non-teleperiod data to influxdb ### Changed - Remove support for Internet Explorer by allowing ECMAScript6 syntax using less JavaScript code bytes (#15280) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7ad7dc9f7..487d6768d 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -110,6 +110,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - Command ``SspmMap 0`` to reset Sonoff SPM default mapping - Command ``TcpConnect `` to add client connection mode [#14874](https://github.com/arendst/Tasmota/issues/14874) - Command ``RfTimeout 100..60000`` to disable duplicate RfReceive. Default 1000 [#15061](https://github.com/arendst/Tasmota/issues/15061) +- Command ``IfxSensor 1`` to send non-teleperiod data to influxdb - Commands ``Sensor12 D0 .. D5, S0 .. S5`` allowing differential or single-ended modes [#15001](https://github.com/arendst/Tasmota/issues/15001) - NeoPool commands ``NPpHMin``, ``NPpHMax``, ``NPpH``, ``NPRedox``, ``NPHydrolysis``, ``NPIonization``, ``NPChlorine`` and ``NPControl`` [#15015](https://github.com/arendst/Tasmota/issues/15015) - NeoPool system voltages display @@ -120,7 +121,6 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - Support for PCF85363 RTC as used in Shelly 3EM [#13515](https://github.com/arendst/Tasmota/issues/13515) - Full RTC chip integration and synchronisation when using UBX (=GPS), NTP or manual time - NeoPool JSON modules, power module, cell info, chlorine, conductivity and ionization -- Non-teleperiod data to influxdb - ESP32 Berry always enable rules - ESP32 Berry bootloop protection - ESP32 support for BLE Mi scale V1 [#13517](https://github.com/arendst/Tasmota/issues/13517) diff --git a/tasmota/settings.h b/tasmota/settings.h index 1010fde1a..1acf9d376 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -252,7 +252,7 @@ typedef union { uint32_t influxdb_state : 1; // bit 7 (v9.5.0.5) - CMND_IFX - Enable influxdb support uint32_t sspm_display : 1; // bit 8 (v10.0.0.4) - CMND_SSPMDISPLAY - Enable gui display of powered on relays only uint32_t local_ntp_server : 1; // bit 9 (v11.0.0.4) - CMND_RTCNTPSERVER - Enable local NTP server - uint32_t spare10 : 1; // bit 10 + uint32_t influxdb_sensor : 1; // bit 10 (v11.0.0.5) - CMND_IFXSENSOR - Enable sensor support in addition to teleperiod support uint32_t spare11 : 1; // bit 11 uint32_t spare12 : 1; // bit 12 uint32_t spare13 : 1; // bit 13 diff --git a/tasmota/xdrv_59_influxdb.ino b/tasmota/xdrv_59_influxdb.ino index 21380fc80..999820427 100644 --- a/tasmota/xdrv_59_influxdb.ino +++ b/tasmota/xdrv_59_influxdb.ino @@ -38,6 +38,7 @@ * IfxOrg - Set Influxdb v2 and organization * IfxToken - Set Influxdb v2 and token * IfxPeriod - Set Influxdb period. If not set (or 0), use Teleperiod + * IfxSensor - Set Influxdb sensor logging off (0) or on (1) * * Set influxdb update interval with command teleperiod * @@ -365,6 +366,12 @@ void InfluxDbProcessJson(bool use_copy = false) { } } +void InfluxDbProcess(bool use_copy = false) { + if (Settings->sbflag1.influxdb_sensor) { + InfluxDbProcessJson(use_copy); + } +} + void InfluxDbPublishPowerState(uint32_t device) { Response_P(PSTR("{\"power%d\":\"%d\"}"), device, bitRead(TasmotaGlobal.power, device -1)); InfluxDbProcessJson(); @@ -419,6 +426,7 @@ void InfluxDbLoop(void) { #define D_CMND_INFLUXDBDATABASE "Database" #define D_CMND_INFLUXDBBUCKET "Bucket" #define D_CMND_INFLUXDBPERIOD "Period" +#define D_CMND_INFLUXDBSENSOR "Sensor" const char kInfluxDbCommands[] PROGMEM = D_PRFX_INFLUXDB "|" // Prefix "|" D_CMND_INFLUXDBLOG "|" @@ -426,7 +434,7 @@ const char kInfluxDbCommands[] PROGMEM = D_PRFX_INFLUXDB "|" // Prefix D_CMND_INFLUXDBUSER "|" D_CMND_INFLUXDBORG "|" D_CMND_INFLUXDBPASSWORD "|" D_CMND_INFLUXDBTOKEN "|" D_CMND_INFLUXDBDATABASE "|" D_CMND_INFLUXDBBUCKET "|" - D_CMND_INFLUXDBPERIOD; + D_CMND_INFLUXDBPERIOD "|" D_CMND_INFLUXDBSENSOR; void (* const InfluxCommand[])(void) PROGMEM = { &CmndInfluxDbState, &CmndInfluxDbLog, @@ -434,7 +442,7 @@ void (* const InfluxCommand[])(void) PROGMEM = { &CmndInfluxDbUser, &CmndInfluxDbUser, &CmndInfluxDbPassword, &CmndInfluxDbPassword, &CmndInfluxDbDatabase, &CmndInfluxDbDatabase, - &CmndInfluxDbPeriod }; + &CmndInfluxDbPeriod, &CmndInfluxDbSensor }; void InfluxDbReinit(void) { IFDB.init = false; @@ -459,6 +467,13 @@ void CmndInfluxDbState(void) { } } +void CmndInfluxDbSensor(void) { + if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 1)) { + Settings->sbflag1.influxdb_sensor = XdrvMailbox.payload; + } + ResponseCmndStateText(Settings->sbflag1.influxdb_sensor); +} + void CmndInfluxDbLog(void) { if ((XdrvMailbox.payload >= LOG_LEVEL_NONE) && (XdrvMailbox.payload <= LOG_LEVEL_DEBUG_MORE)) { IFDB.log_level = XdrvMailbox.payload; diff --git a/tasmota/xdrv_interface.ino b/tasmota/xdrv_interface.ino index 6017ee95b..cec38d34e 100644 --- a/tasmota/xdrv_interface.ino +++ b/tasmota/xdrv_interface.ino @@ -1095,7 +1095,7 @@ bool XdrvRulesProcess(bool teleperiod, const char* event) { bool XdrvRulesProcess(bool teleperiod) { #ifdef USE_INFLUXDB if (!teleperiod) { // Only process ad-hoc data here - InfluxDbProcessJson(1); // Use a copy + InfluxDbProcess(1); // Use a copy } #endif From 916605557e84ad83c35f370276e66449d1363460 Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Wed, 6 Apr 2022 07:50:51 +0200 Subject: [PATCH 344/355] modbus client, >WS,>WM --- tasmota/xdrv_10_scripter.ino | 157 +++++++++++++++++++++++++++++++---- 1 file changed, 141 insertions(+), 16 deletions(-) diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino index 3a7f50a85..bbe68a68d 100755 --- a/tasmota/xdrv_10_scripter.ino +++ b/tasmota/xdrv_10_scripter.ino @@ -451,7 +451,7 @@ struct SCRIPT_MEM { char *fast_script = 0; char *event_script = 0; char *html_script = 0; - char *web_pages[5]; + char *web_pages[7]; uint32_t script_lastmillis; bool event_handeled = false; #ifdef USE_BUTTON_EVENT @@ -4058,6 +4058,105 @@ extern char *SML_GetSVal(uint32_t index); len = 0; goto exit; } + // serial read array + if (!strncmp(lp, "sra(", 4)) { + fvar = -1; + if (glob_script_mem.sp) { + uint16_t alen; + float *array; + lp = get_array_by_name(lp + 4, &array, &alen); + if (!array) { + goto exit; + } + uint16_t index; + for (index = 0; index < alen; index++) { + if (!glob_script_mem.sp->available()) { + break; + } + array[index] = glob_script_mem.sp->read(); + } + fvar = index; +#ifdef USE_SML_M + if (index == 8) { + uint8_t modbus_response[10]; + for (uint8_t cnt = 0; cnt < 8; cnt++) { + modbus_response[cnt] = array[cnt]; + } + uint16_t crc = MBUS_calculateCRC(modbus_response, 6); + if ( (lowByte(crc) != modbus_response[6]) || (highByte(crc) != modbus_response[7]) ) { + fvar = -2; + } + } +#endif + } + lp++; + len = 0; + goto exit; + } +#ifdef USE_SML_M + // serial modbus write float, 010404ffffffffxxxx + if (!strncmp(lp, "smw(", 4)) { + fvar = -1; + if (glob_script_mem.sp) { + float addr; + lp = GetNumericArgument(lp + 4, OPER_EQU, &addr, 0); + SCRIPT_SKIP_SPACES + float mode; + lp = GetNumericArgument(lp, OPER_EQU, &mode, 0); + SCRIPT_SKIP_SPACES + float mval; + lp = GetNumericArgument(lp, OPER_EQU, &mval, 0); + SCRIPT_SKIP_SPACES + uint32_t uval, *uvp; + uvp = &uval; + *(uvp) = *(uint32_t*)&mval; + + uint8_t modbus_response[10]; + + uint32_t ui32 = mval; + modbus_response[0] = addr; + modbus_response[1] = 4; + switch ((uint8_t)mode) { + case 0: + // UINT16 + modbus_response[2] = 2; + modbus_response[3] = (ui32 >> 16); + modbus_response[4] = (ui32 >> 0); + break; + case 1: + // UINT32 + modbus_response[2] = 4; + modbus_response[3] = (ui32 >> 24); + modbus_response[4] = (ui32 >> 16); + modbus_response[5] = (ui32 >> 8); + modbus_response[6] = (ui32 >> 0); + break; + + default: + // float + modbus_response[2] = 4; + modbus_response[3] = (uval >> 24); + modbus_response[4] = (uval >> 16); + modbus_response[5] = (uval >> 8); + modbus_response[6] = (uval >> 0); + break; + } + + + // calc mobus checksum + uint16_t crc = MBUS_calculateCRC(modbus_response, modbus_response[2] + 3); + modbus_response[modbus_response[2] + 3] = lowByte(crc); + modbus_response[modbus_response[2] + 4] = highByte(crc); + glob_script_mem.sp->write(modbus_response, 9); + fvar = 0; + + } + lp++; + len = 0; + goto exit; + } +#endif + #endif //USE_SCRIPT_SERIAL @@ -4149,6 +4248,19 @@ extern char *SML_GetSVal(uint32_t index); goto exit; } #endif // USE_SCRIPT_SPI + if (!strncmp(lp, "s2hms(", 6)) { + lp = GetNumericArgument(lp + 6, OPER_EQU, &fvar, 0); + lp++; + char tbuff[16]; + uint8_t hours = (uint32_t)fvar / 3600; + fvar -= (hours * 3600); + uint8_t mins = (uint32_t)fvar / 60; + uint8_t secs = (uint32_t)fvar % 60; + sprintf_P(tbuff,PSTR("%02d:%02d:%02d"), hours, mins, secs); + if (sp) strlcpy(sp, tbuff, glob_script_mem.max_ssize); + len = 0; + goto strexit; + } break; case 't': @@ -6713,11 +6825,13 @@ void set_callbacks() { } void script_set_web_pages(void) { - if (Run_Scripter1(">W", -2, 0) == 99) {glob_script_mem.web_pages[0] = glob_script_mem.section_ptr;} else {glob_script_mem.web_pages[0] = 0;} - if (Run_Scripter1(">w ", -3, 0) == 99) {glob_script_mem.web_pages[1] = glob_script_mem.section_ptr;} else {glob_script_mem.web_pages[1] = 0;} - if (Run_Scripter1(">w1 ", -4, 0) == 99) {glob_script_mem.web_pages[2] = glob_script_mem.section_ptr;} else {glob_script_mem.web_pages[2] = 0;} - if (Run_Scripter1(">w2 ", -4, 0) == 99) {glob_script_mem.web_pages[3] = glob_script_mem.section_ptr;} else {glob_script_mem.web_pages[3] = 0;} - if (Run_Scripter1(">w3 ", -4, 0) == 99) {glob_script_mem.web_pages[4] = glob_script_mem.section_ptr;} else {glob_script_mem.web_pages[4] = 0;} + if (Run_Scripter1(">W", -2, 0) == 99) {glob_script_mem.web_pages[0] = glob_script_mem.section_ptr + 2;} else {glob_script_mem.web_pages[0] = 0;} + if (Run_Scripter1(">w ", -3, 0) == 99) {glob_script_mem.web_pages[1] = glob_script_mem.section_ptr + 2;} else {glob_script_mem.web_pages[1] = 0;} + if (Run_Scripter1(">w1 ", -4, 0) == 99) {glob_script_mem.web_pages[2] = glob_script_mem.section_ptr + 3;} else {glob_script_mem.web_pages[2] = 0;} + if (Run_Scripter1(">w2 ", -4, 0) == 99) {glob_script_mem.web_pages[3] = glob_script_mem.section_ptr + 3;} else {glob_script_mem.web_pages[3] = 0;} + if (Run_Scripter1(">w3 ", -4, 0) == 99) {glob_script_mem.web_pages[4] = glob_script_mem.section_ptr + 3;} else {glob_script_mem.web_pages[4] = 0;} + if (Run_Scripter1(">WS", -3, 0) == 99) {glob_script_mem.web_pages[5] = glob_script_mem.section_ptr + 3;} else {glob_script_mem.web_pages[5] = 0;} + if (Run_Scripter1(">WM", -3, 0) == 99) {glob_script_mem.web_pages[6] = glob_script_mem.section_ptr + 3;} else {glob_script_mem.web_pages[6] = 0;} } #endif // USE_WEBSERVER @@ -7069,7 +7183,7 @@ const char sHUE_ERROR_JSON[] PROGMEM = // get alexa arguments -void Script_Handle_Hue(String *path) { +void Script_Handle_Hue(String path) { String response; int code = 200; uint16_t tmp = 0; @@ -7079,7 +7193,7 @@ void Script_Handle_Hue(String *path) { uint16_t ct = 0; bool resp = false; - uint8_t device = DecodeLightId(atoi(path->c_str())); + uint8_t device = DecodeLightId(atoi(path.c_str())); uint8_t index = device - TasmotaGlobal.devices_present - 1; if (Webserver->args()) { @@ -8308,7 +8422,7 @@ void ScriptWebShow(char mc, uint8_t page) { //uint8_t web_script; glob_script_mem.web_mode = mc; - if (mc == 'w' || mc == 'x') { + if (mc == 'w' || mc == 'x' || page >= 5) { if (mc == 'x') { mc = '$'; } @@ -8321,7 +8435,7 @@ void ScriptWebShow(char mc, uint8_t page) { chartindex = 1; google_libs = 0; - char *lp = glob_script_mem.section_ptr + 2; + char *lp = glob_script_mem.section_ptr; if (mc == 'w') { while (*lp) { if (*lp == '\n') break; @@ -8758,10 +8872,12 @@ const char *gc_str; // end standard web interface } else { // main section interface - if (*lin == mc) { + if (*lin == mc || mc == 'z') { #ifdef USE_GOOGLE_CHARTS - lin++; + if (mc != 'z') { + lin++; + } exgc: char *lp; if (!strncmp(lin, "gc(", 3)) { @@ -8961,7 +9077,8 @@ exgc: WSContentSend_PD("['"); char lbl[16]; if (todflg >= 0) { - sprintf(lbl, "%d:%02d", todflg / divflg, (todflg % divflg) * (60 / divflg) ); + uint16_t mins = (float)(todflg % divflg) * (float)((float)60 / (float)divflg); + sprintf(lbl, "%d:%02d", todflg / divflg, mins); todflg++; if (hmflg == 0) { if (todflg >= entries) { @@ -9933,7 +10050,7 @@ void script_add_subpage(uint8_t num) { //uint8_t web_script = Run_Scripter(code, -strlen(code), 0); if (glob_script_mem.web_pages[num]) { char bname[48]; - cpy2lf(bname, sizeof(bname), glob_script_mem.web_pages[num] + 3); + cpy2lf(bname, sizeof(bname), glob_script_mem.web_pages[num] + 1); void (*wptr)(void); @@ -10184,7 +10301,11 @@ bool Xdrv10(uint8_t function) #ifdef USE_SCRIPT_WEB_DISPLAY case FUNC_WEB_ADD_MAIN_BUTTON: if (bitRead(Settings->rule_enabled, 0)) { - ScriptWebShow('$', 0); + if (glob_script_mem.web_pages[6]) { + ScriptWebShow('z', 6); + } else { + ScriptWebShow('$', 0); + } #ifdef SCRIPT_FULL_WEBPAGE script_add_subpage(1); script_add_subpage(2); @@ -10225,7 +10346,11 @@ bool Xdrv10(uint8_t function) #ifdef USE_SCRIPT_WEB_DISPLAY case FUNC_WEB_SENSOR: if (bitRead(Settings->rule_enabled, 0)) { - ScriptWebShow(0, 0); + if (glob_script_mem.web_pages[5]) { + ScriptWebShow(0, 5); + } else { + ScriptWebShow(0, 0); + } } break; #endif //USE_SCRIPT_WEB_DISPLAY From 721bb4143bd5b36fa453beace57c301e40daa7a8 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 6 Apr 2022 09:45:17 +0200 Subject: [PATCH 345/355] Limit number of possible influxdb publish situations Limit number of possible influxdb publish situations (#15257) --- tasmota/xdrv_02_9_mqtt.ino | 3 +++ tasmota/xdrv_interface.ino | 8 +------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/tasmota/xdrv_02_9_mqtt.ino b/tasmota/xdrv_02_9_mqtt.ino index 04834fe20..05432e965 100644 --- a/tasmota/xdrv_02_9_mqtt.ino +++ b/tasmota/xdrv_02_9_mqtt.ino @@ -791,6 +791,9 @@ void MqttPublishPrefixTopicRulesProcess_P(uint32_t prefix, const char* subtopic) void MqttPublishTeleSensor(void) { // Publish tele//SENSOR default ResponseData string with optional retained // then process rules +#ifdef USE_INFLUXDB + InfluxDbProcess(1); // Use a copy of ResponseData +#endif MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR(D_RSLT_SENSOR), Settings->flag.mqtt_sensor_retain); // CMND_SENSORRETAIN } diff --git a/tasmota/xdrv_interface.ino b/tasmota/xdrv_interface.ino index cec38d34e..dcf763935 100644 --- a/tasmota/xdrv_interface.ino +++ b/tasmota/xdrv_interface.ino @@ -1093,14 +1093,8 @@ bool XdrvRulesProcess(bool teleperiod, const char* event) { } bool XdrvRulesProcess(bool teleperiod) { -#ifdef USE_INFLUXDB - if (!teleperiod) { // Only process ad-hoc data here - InfluxDbProcess(1); // Use a copy - } -#endif - bool result = XdrvRulesProcess(teleperiod, ResponseData()); - ResponseClear(); // Free heap space + ResponseClear(); // Free heap space return result; } From 973354470c31e3c918a6b06ec6ff8845bea556cb Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 6 Apr 2022 09:50:48 +0200 Subject: [PATCH 346/355] Fix compilation --- tasmota/tasmota_globals.h | 3 +++ tasmota/xdrv_59_influxdb.ino | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tasmota/tasmota_globals.h b/tasmota/tasmota_globals.h index e021ac664..e30bfe22f 100644 --- a/tasmota/tasmota_globals.h +++ b/tasmota/tasmota_globals.h @@ -44,6 +44,9 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack extern "C" void resetPins(); extern "C" int startWaveformClockCycles(uint8_t pin, uint32_t highCcys, uint32_t lowCcys, uint32_t runTimeCcys, int8_t alignPhase, uint32_t phaseOffsetCcys, bool autoPwm); +#ifdef USE_INFLUXDB +void InfluxDbProcess(bool use_copy = false); +#endif #ifdef ESP32 #if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4 diff --git a/tasmota/xdrv_59_influxdb.ino b/tasmota/xdrv_59_influxdb.ino index 999820427..70f9b2803 100644 --- a/tasmota/xdrv_59_influxdb.ino +++ b/tasmota/xdrv_59_influxdb.ino @@ -366,7 +366,7 @@ void InfluxDbProcessJson(bool use_copy = false) { } } -void InfluxDbProcess(bool use_copy = false) { +void InfluxDbProcess(bool use_copy) { if (Settings->sbflag1.influxdb_sensor) { InfluxDbProcessJson(use_copy); } From 218d62686afb7212b950870c1873e08789bdf8b2 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 6 Apr 2022 12:41:06 +0200 Subject: [PATCH 347/355] Fix javascript regression failing page refreshes --- tasmota/xdrv_01_webserver.ino | 4 ++-- tasmota/xdrv_23_zigbee_A_impl.ino | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino index b90247d95..f6539799c 100644 --- a/tasmota/xdrv_01_webserver.ino +++ b/tasmota/xdrv_01_webserver.ino @@ -116,7 +116,7 @@ const char HTTP_SCRIPT_HIDE[] PROGMEM = "}"; const char HTTP_SCRIPT_RELOAD_TIME[] PROGMEM = - "setTimeout(()=>{location.href='.';},%d);"; + "setTimeout(function(){location.href='.';},%d);"; #ifdef USE_UNISHOX_COMPRESSION #include "./html_compressed/HTTP_SCRIPT_CONSOL.h" @@ -984,7 +984,7 @@ void WebRestart(uint32_t type) #if ((RESTART_AFTER_INITIAL_WIFI_CONFIG) && (AFTER_INITIAL_WIFI_CONFIG_GO_TO_NEW_IP)) // In case of type 3 (New network has been configured) go to the new device's IP in the new Network if (3 == type) { - WSContentSend_P("setTimeout(()=>{location.href='http://%_I';},%d);", + WSContentSend_P("setTimeout(function(){location.href='http://%_I';},%d);", (uint32_t)WiFi.localIP(), HTTP_RESTART_RECONNECT_TIME ); diff --git a/tasmota/xdrv_23_zigbee_A_impl.ino b/tasmota/xdrv_23_zigbee_A_impl.ino index 8cc355a6b..41ee70119 100644 --- a/tasmota/xdrv_23_zigbee_A_impl.ino +++ b/tasmota/xdrv_23_zigbee_A_impl.ino @@ -1716,7 +1716,7 @@ const char ZB_WEB_U[] PROGMEM = // index 4 // Auto-refresh //=ZB_WEB_AUTO_REFRESH - "" + "" "\0" // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ From fcec346db8f455f7f080366bed9274b687131bcf Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 6 Apr 2022 15:02:15 +0200 Subject: [PATCH 348/355] Fix ESP32 save settings after OTA upload Fix ESP32 save settings after OTA upload regression from v10.0.0.3 --- CHANGELOG.md | 2 +- RELEASENOTES.md | 1 + tasmota/support_tasmota.ino | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c189d9bd..47ee6ba4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ All notable changes to this project will be documented in this file. - Remove support for Internet Explorer by allowing ECMAScript6 syntax using less JavaScript code bytes (#15280) ### Fixed - +- ESP32 save settings after OTA upload regression from v10.0.0.3 ## [11.0.0.4] 20220402 ### Added diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 487d6768d..075f722ab 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -153,6 +153,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - Wiegand 34-bit rfid reading and presentation [#14834](https://github.com/arendst/Tasmota/issues/14834) - Orno WE517 power meter phase 2 current reactive [#14841](https://github.com/arendst/Tasmota/issues/14841) - NeoPool NPBit and NPRead/NPReadL output +- ESP32 save settings after OTA upload regression from v10.0.0.3 - ESP32 PowerOnState [#15084](https://github.com/arendst/Tasmota/issues/15084) ### Removed diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino index fed56a30c..9af1b89f1 100644 --- a/tasmota/support_tasmota.ino +++ b/tasmota/support_tasmota.ino @@ -1172,7 +1172,6 @@ void Every250mSeconds(void) if (2 == TasmotaGlobal.ota_state_flag) { RtcSettings.ota_loader = 0; // Try requested image first ota_retry_counter = OTA_ATTEMPTS; - ESPhttpUpdate.rebootOnUpdate(false); SettingsSave(1); // Free flash for OTA update } if (TasmotaGlobal.ota_state_flag <= 0) { @@ -1247,10 +1246,12 @@ void Every250mSeconds(void) AddLog(LOG_LEVEL_INFO, "OTA: unsupported protocol"); ota_result = -999; } else { + httpUpdateLight.rebootOnUpdate(false); ota_result = (HTTP_UPDATE_FAILED != httpUpdateLight.update(OTAclient, version)); } #else // standard OTA over HTTP WiFiClient OTAclient; + ESPhttpUpdate.rebootOnUpdate(false); ota_result = (HTTP_UPDATE_FAILED != ESPhttpUpdate.update(OTAclient, full_ota_url, version)); #endif if (!ota_result) { From 5a507a5c6e53b03ff74149d7499fb11452a5c894 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 6 Apr 2022 15:09:35 +0200 Subject: [PATCH 349/355] Fix HX711 false readings by removing large deviations --- CHANGELOG.md | 1 + RELEASENOTES.md | 1 + tasmota/support.ino | 6 --- tasmota/xsns_34_hx711.ino | 84 +++++++++++++++++++-------------------- 4 files changed, 44 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47ee6ba4b..5ddd7e164 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ All notable changes to this project will be documented in this file. ### Fixed - ESP32 save settings after OTA upload regression from v10.0.0.3 +- HX711 false readings by removing large deviations ## [11.0.0.4] 20220402 ### Added diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 075f722ab..b76d9dfdf 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -153,6 +153,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - Wiegand 34-bit rfid reading and presentation [#14834](https://github.com/arendst/Tasmota/issues/14834) - Orno WE517 power meter phase 2 current reactive [#14841](https://github.com/arendst/Tasmota/issues/14841) - NeoPool NPBit and NPRead/NPReadL output +- HX711 false readings by removing large deviations - ESP32 save settings after OTA upload regression from v10.0.0.3 - ESP32 PowerOnState [#15084](https://github.com/arendst/Tasmota/issues/15084) diff --git a/tasmota/support.ino b/tasmota/support.ino index a40412bc1..2ee1a71b3 100644 --- a/tasmota/support.ino +++ b/tasmota/support.ino @@ -1990,9 +1990,6 @@ uint8_t TasShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) { } else { value |= digitalRead(dataPin) << (7 - i); } -#ifdef ESP32 - delayMicroseconds(1); -#endif digitalWrite(clockPin, LOW); #ifdef ESP32 delayMicroseconds(1); @@ -2008,9 +2005,6 @@ void TasShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t va } else { digitalWrite(dataPin, !!(val & (1 << (7 - i)))); } -#ifdef ESP32 - delayMicroseconds(1); -#endif digitalWrite(clockPin, HIGH); #ifdef ESP32 delayMicroseconds(1); diff --git a/tasmota/xsns_34_hx711.ino b/tasmota/xsns_34_hx711.ino index 8570d9c3b..63f215f5f 100644 --- a/tasmota/xsns_34_hx711.ino +++ b/tasmota/xsns_34_hx711.ino @@ -65,11 +65,10 @@ enum HxCalibrationSteps { HX_CAL_END, HX_CAL_LIMBO, HX_CAL_FINISH, HX_CAL_FAIL, const char kHxCalibrationStates[] PROGMEM = D_HX_CAL_FAIL "|" D_HX_CAL_DONE "|" D_HX_CAL_REFERENCE "|" D_HX_CAL_REMOVE; struct HX { + long reads[HX_SAMPLES]; long weight = 0; long raw = 0; long last_weight = 0; - long sum_weight = 0; - long sum_raw = 0; long offset = 0; long scale = 1; long weight_diff = 0; @@ -87,8 +86,7 @@ struct HX { /*********************************************************************************************/ -bool HxIsReady(uint16_t timeout) -{ +bool HxIsReady(uint16_t timeout) { // A reading can take up to 100 mS or 600mS after power on uint32_t start = millis(); while ((digitalRead(Hx.pin_dout) == HIGH) && (millis() - start < timeout)) { @@ -97,8 +95,7 @@ bool HxIsReady(uint16_t timeout) return (digitalRead(Hx.pin_dout) == LOW); } -long HxRead(void) -{ +long HxRead(void) { if (!HxIsReady(HX_TIMEOUT)) { return -1; } uint8_t data[3] = { 0 }; @@ -135,22 +132,18 @@ long HxRead(void) /*********************************************************************************************/ -void HxResetPart(void) -{ +void HxResetPart(void) { Hx.tare_flg = true; - Hx.sum_weight = 0; Hx.sample_count = 0; Hx.last_weight = 0; } -void HxReset(void) -{ +void HxReset(void) { HxResetPart(); Settings->energy_frequency_calibration = 0; } -void HxCalibrationStateTextJson(uint8_t msg_id) -{ +void HxCalibrationStateTextJson(uint8_t msg_id) { char cal_text[30]; Hx.calibrate_msg = msg_id; @@ -159,8 +152,7 @@ void HxCalibrationStateTextJson(uint8_t msg_id) if (msg_id < 3) { MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_STAT, PSTR("Sensor34")); } } -void SetWeightDelta() -{ +void SetWeightDelta(void) { // backwards compatible: restore old default value of 4 grams if (Settings->weight_change == 0) { Hx.weight_delta = 4; @@ -197,8 +189,7 @@ void SetWeightDelta() * Sensor34 9 - Set minimum delta to trigger JSON message \*********************************************************************************************/ -bool HxCommand(void) -{ +bool HxCommand(void) { bool serviced = true; bool show_parms = false; char argument[XdrvMailbox.data_len]; @@ -259,8 +250,8 @@ bool HxCommand(void) break; case 9: // WeightDelta if (strchr(XdrvMailbox.data, ',') != nullptr) { - Settings->weight_change = strtol(ArgV(argument, 2), nullptr, 10); - SetWeightDelta(); + Settings->weight_change = strtol(ArgV(argument, 2), nullptr, 10); + SetWeightDelta(); } show_parms = true; break; @@ -282,13 +273,11 @@ bool HxCommand(void) /*********************************************************************************************/ -long HxWeight(void) -{ +long HxWeight(void) { return (Hx.calibrate_step < HX_CAL_FAIL) ? Hx.weight : 0; } -void HxInit(void) -{ +void HxInit(void) { Hx.type = 0; if (PinUsed(GPIO_HX711_DAT) && PinUsed(GPIO_HX711_SCK)) { Hx.pin_sck = Pin(GPIO_HX711_SCK); @@ -313,21 +302,40 @@ void HxInit(void) } } -void HxEvery100mSecond(void) -{ +void HxEvery100mSecond(void) { long raw = HxRead(); if (-1 == raw) { return; } - Hx.sum_raw += raw; - Hx.sum_weight += raw; + if (Hx.sample_count < HX_SAMPLES) { // Test for HxSaveBeforeRestart() + Hx.reads[Hx.sample_count] = raw; + } Hx.sample_count++; if (HX_SAMPLES == Hx.sample_count) { - long average = Hx.sum_weight / Hx.sample_count; // grams - long raw_average = Hx.sum_raw / Hx.sample_count; // grams + Hx.sample_count = 0; + // Sort HX_SAMPLES + for (uint32_t i = 0; i < HX_SAMPLES; i++) { + for (uint32_t j = i + 1; j < HX_SAMPLES; j++) { + if (Hx.reads[j] > Hx.reads[i]) { + std::swap(Hx.reads[i], Hx.reads[j]); + } + } + } + // Drop two lows and two highs from average + long sum_raw = 0; + for (uint32_t i = 2; i < HX_SAMPLES -2; i++) { + sum_raw += Hx.reads[i]; + } + long average = sum_raw / (HX_SAMPLES -4); // grams + + if ((Hx.reads[0] < (average -4)) || (Hx.reads[9] > (average +4))) { + AddLog(LOG_LEVEL_DEBUG, PSTR("HX7: Range %d"), Hx.reads[9] - Hx.reads[0]); +// return; // Consider to drop samples with too much deviation (will fail too on quick load changes like filling a barrel!) + } + long value = average - Hx.offset; // grams Hx.weight = value / Hx.scale; // grams - Hx.raw = raw_average / Hx.scale; + Hx.raw = average / Hx.scale; if (Hx.weight < 0) { if (Settings->energy_frequency_calibration) { long difference = Settings->energy_frequency_calibration + Hx.weight; @@ -414,15 +422,10 @@ void HxEvery100mSecond(void) } } } - - Hx.sum_weight = 0; - Hx.sum_raw = 0; - Hx.sample_count = 0; } } -void HxSaveBeforeRestart(void) -{ +void HxSaveBeforeRestart(void) { Settings->energy_frequency_calibration = Hx.weight; Hx.sample_count = HX_SAMPLES +1; // Stop updating Hx.weight } @@ -436,8 +439,7 @@ const char HTTP_HX711_CAL[] PROGMEM = "{s}HX711 %s{m}{e}"; #endif // USE_WEBSERVER -void HxShow(bool json) -{ +void HxShow(bool json) { char scount[30] = { 0 }; uint16_t count = 0; @@ -496,8 +498,7 @@ const char HTTP_FORM_HX711[] PROGMEM = "" "

" D_ITEM_WEIGHT " (" D_UNIT_KILOGRAM ")

"; -void HandleHxAction(void) -{ +void HandleHxAction(void) { if (!HttpCheckPriviledgedAccess()) { return; } AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_CONFIGURE_HX711)); @@ -550,8 +551,7 @@ void HandleHxAction(void) * Interface \*********************************************************************************************/ -bool Xsns34(uint8_t function) -{ +bool Xsns34(uint8_t function) { bool result = false; if (Hx.type) { From 4629bb4436367c810585677095ea72ef8d898984 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Wed, 6 Apr 2022 19:19:17 +0200 Subject: [PATCH 350/355] Berry support for int keys in map in solidification --- lib/libesp32/berry/src/be_constobj.h | 12 ++++++++++ lib/libesp32/berry/src/be_solidifylib.c | 31 ++++++++++++++----------- lib/libesp32/berry/src/be_string.c | 2 +- tasmota/xdrv_52_3_berry_tasmota.ino | 1 + 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/lib/libesp32/berry/src/be_constobj.h b/lib/libesp32/berry/src/be_constobj.h index 708cce03d..96ac1b794 100644 --- a/lib/libesp32/berry/src/be_constobj.h +++ b/lib/libesp32/berry/src/be_constobj.h @@ -33,6 +33,12 @@ extern "C" { .next = (uint32_t)(_next) & 0xFFFFFF \ } +#define be_const_key_int(_i, _next) { \ + .v.i = _i, \ + .type = BE_INT, \ + .next = (uint32_t)(_next) & 0xFFFFFF \ +} + #define be_const_func(_func) { \ .v.nf = (_func), \ .type = BE_NTVFUNC \ @@ -249,6 +255,12 @@ const bntvmodule be_native_module(_module) = { \ uint32_t((_next)&0xFFFFFF) \ } +#define be_const_key_int(_i, _next) { \ + bvaldata(i), \ + BE_INT, \ + uint32_t((_next)&0xFFFFFF) \ +} + #define be_const_func(_func) { \ bvaldata(_func), \ BE_NTVFUNC \ diff --git a/lib/libesp32/berry/src/be_solidifylib.c b/lib/libesp32/berry/src/be_solidifylib.c index 5a8937928..1f08389d6 100644 --- a/lib/libesp32/berry/src/be_solidifylib.c +++ b/lib/libesp32/berry/src/be_solidifylib.c @@ -109,22 +109,26 @@ static void m_solidify_map(bvm *vm, bmap * map, const char *class_name) if (node->key.type == BE_NIL) { continue; /* key not used */ } - if (node->key.type != BE_STRING) { - char error[64]; - snprintf(error, sizeof(error), "Unsupported type in key: %i", node->key.type); - be_raise(vm, "internal_error", error); - } int key_next = node->key.next; if (0xFFFFFF == key_next) { key_next = -1; /* more readable */ } - /* convert the string literal to identifier */ - const char * key = str(node->key.v.s); - size_t id_len = toidentifier_length(key); - char id_buf[id_len]; - toidentifier(id_buf, key); - logfmt(" { be_const_key(%s, %i), ", id_buf, key_next); - m_solidify_bvalue(vm, &node->value, class_name, str(node->key.v.s)); + if (node->key.type == BE_STRING) { + /* convert the string literal to identifier */ + const char * key = str(node->key.v.s); + size_t id_len = toidentifier_length(key); + char id_buf[id_len]; + toidentifier(id_buf, key); + logfmt(" { be_const_key(%s, %i), ", id_buf, key_next); + m_solidify_bvalue(vm, &node->value, class_name, str(node->key.v.s)); + } else if (node->key.type == BE_INT) { + logfmt(" { be_const_key_int(%i, %i), ", node->key.v.i, key_next); + m_solidify_bvalue(vm, &node->value, class_name, NULL); + } else { + char error[64]; + snprintf(error, sizeof(error), "Unsupported type in key: %i", node->key.type); + be_raise(vm, "internal_error", error); + } logfmt(" },\n"); } @@ -358,7 +362,8 @@ static void m_solidify_closure(bvm *vm, bclosure *cl, const char * classname, in const char * func_name = str(pr->name); if (cl->nupvals > 0) { - be_raise(vm, "internal_error", "Unsupported upvals in closure"); + logfmt("--> Unsupported upvals in closure <---"); + // be_raise(vm, "internal_error", "Unsupported upvals in closure"); } int indent = 2; diff --git a/lib/libesp32/berry/src/be_string.c b/lib/libesp32/berry/src/be_string.c index 798437420..2ab0d1004 100644 --- a/lib/libesp32/berry/src/be_string.c +++ b/lib/libesp32/berry/src/be_string.c @@ -113,7 +113,7 @@ static void free_sstring(bvm *vm, bstring *str) static uint32_t str_hash(const char *str, size_t len) { uint32_t hash = 2166136261u; - be_assert(str || len); + be_assert(str || !len); while (len--) { hash = (hash ^ (unsigned char)*str++) * 16777619u; } diff --git a/tasmota/xdrv_52_3_berry_tasmota.ino b/tasmota/xdrv_52_3_berry_tasmota.ino index 9e306ca8f..6b9fd8842 100644 --- a/tasmota/xdrv_52_3_berry_tasmota.ino +++ b/tasmota/xdrv_52_3_berry_tasmota.ino @@ -92,6 +92,7 @@ extern "C" { int32_t top = be_top(vm); // Get the number of arguments if (top >= 2 && be_isstring(vm, 2)) { // 1 mandatory string argument const char * payload = be_tostring(vm, 2); + be_pop(vm, top); // clear the stack before calling, because of re-entrant call to Berry in a Rule bool handled = XdrvRulesProcess(0, payload); be_pushbool(vm, handled); be_return(vm); // Return From e3ebffcc724f3383912136482b3ae9554e077cf6 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Wed, 6 Apr 2022 21:29:24 +0200 Subject: [PATCH 351/355] OpenHASP v1.0 --- .../berry_tasmota/src/embedded/openhasp.be | 764 --------- .../lvgl_examples/lv_tasmota_log_roboto.be | 117 -- tasmota/berry/openhasp/openhasp.tapp | Bin 0 -> 53454 bytes tasmota/berry/openhasp/openhasp_widgets.tapp | Bin 0 -> 8367 bytes tasmota/berry/openhasp/pages.jsonl | 33 + .../openhasp/robotocondensed_latin1.tapp | Bin 0 -> 61585 bytes tasmota/berry/openhasp_src/openhasp.tapp | Bin 0 -> 53454 bytes .../openhasp_src/openhasp_core/autoexec.be | 7 + .../openhasp_src/openhasp_core/openhasp.be | 1489 +++++++++++++++++ .../openhasp_examples}/demo-all.jsonl | 0 .../openhasp_examples}/demo1.jsonl | 1 + .../openhasp_examples}/demo2.jsonl | 0 .../openhasp_examples}/demo3.jsonl | 0 .../openhasp_src/openhasp_examples/lv.jsonl | 44 + .../berry/openhasp_src/openhasp_widgets.tapp | Bin 0 -> 8367 bytes .../openhasp_src/openhasp_widgets/autoexec.be | 6 + .../openhasp_widgets}/lv_tasmota_info.be | 0 .../openhasp_widgets}/lv_tasmota_log.be | 21 +- .../openhasp_widgets}/lv_wifi_graph.be | 0 19 files changed, 1588 insertions(+), 894 deletions(-) delete mode 100644 lib/libesp32/berry_tasmota/src/embedded/openhasp.be delete mode 100644 tasmota/berry/lvgl_examples/lv_tasmota_log_roboto.be create mode 100644 tasmota/berry/openhasp/openhasp.tapp create mode 100644 tasmota/berry/openhasp/openhasp_widgets.tapp create mode 100644 tasmota/berry/openhasp/pages.jsonl create mode 100644 tasmota/berry/openhasp/robotocondensed_latin1.tapp create mode 100644 tasmota/berry/openhasp_src/openhasp.tapp create mode 100644 tasmota/berry/openhasp_src/openhasp_core/autoexec.be create mode 100644 tasmota/berry/openhasp_src/openhasp_core/openhasp.be rename {lib/libesp32/berry_tasmota/src/embedded/openhasp => tasmota/berry/openhasp_src/openhasp_examples}/demo-all.jsonl (100%) rename {lib/libesp32/berry_tasmota/src/embedded/openhasp => tasmota/berry/openhasp_src/openhasp_examples}/demo1.jsonl (99%) rename {lib/libesp32/berry_tasmota/src/embedded/openhasp => tasmota/berry/openhasp_src/openhasp_examples}/demo2.jsonl (100%) rename {lib/libesp32/berry_tasmota/src/embedded/openhasp => tasmota/berry/openhasp_src/openhasp_examples}/demo3.jsonl (100%) create mode 100644 tasmota/berry/openhasp_src/openhasp_examples/lv.jsonl create mode 100644 tasmota/berry/openhasp_src/openhasp_widgets.tapp create mode 100644 tasmota/berry/openhasp_src/openhasp_widgets/autoexec.be rename tasmota/berry/{lvgl_examples => openhasp_src/openhasp_widgets}/lv_tasmota_info.be (100%) rename tasmota/berry/{lvgl_examples => openhasp_src/openhasp_widgets}/lv_tasmota_log.be (87%) rename tasmota/berry/{lvgl_examples => openhasp_src/openhasp_widgets}/lv_wifi_graph.be (100%) diff --git a/lib/libesp32/berry_tasmota/src/embedded/openhasp.be b/lib/libesp32/berry_tasmota/src/embedded/openhasp.be deleted file mode 100644 index 4232a605b..000000000 --- a/lib/libesp32/berry_tasmota/src/embedded/openhasp.be +++ /dev/null @@ -1,764 +0,0 @@ -import string -import json - -# lv.start() -# scr = lv.scr_act() # default screean object -# scr.set_style_bg_color(lv.color(0x0000A0), lv.PART_MAIN | lv.STATE_DEFAULT) - -lv.start() - -hres = lv.get_hor_res() # should be 320 -vres = lv.get_ver_res() # should be 240 - -scr = lv.scr_act() # default screean object -#f20 = lv.montserrat_font(20) # load embedded Montserrat 20 -r20 = lv.font_robotocondensed_latin1(20) -r16 = lv.font_robotocondensed_latin1(16) - -th2 = lv.theme_openhasp_init(0, lv.color(0xFF00FF), lv.color(0x303030), false, r16) -scr.get_disp().set_theme(th2) -# TODO -scr.set_style_bg_color(lv.color(lv.COLOR_WHITE),0) - -# apply theme to layer_top, but keep it transparent -lv.theme_apply(lv.layer_top()) -lv.layer_top().set_style_bg_opa(0,0) - - -# takes an attribute name and responds if it needs color conversion -def is_color_attribute(t) - import string - t = str(t) - # contains `color` but does not contain `color_` - return (string.find(t, "color") >= 0) && (string.find(t, "color_") < 0) -end - -# parse hex string -def parse_hex(s) - import string - s = string.toupper(s) # turn to uppercase - var val = 0 - for i:0..size(s)-1 - var c = s[i] - # var c_int = string.byte(c) - if c == "#" continue end # skip '#' prefix if any - if c == "x" || c == "X" continue end # skip 'x' or 'X' - - if c >= "A" && c <= "F" - val = (val << 4) | string.byte(c) - 55 - elif c >= "0" && c <= "9" - val = (val << 4) | string.byte(c) - 48 - end - end - return val -end - -def parse_color(s) - s = str(s) - if s[0] == '#' - return lv.color(parse_hex(s)) - else - import string - import introspect - var col_name = "COLOR_" + string.toupper(s) - var col_try = introspect.get(lv, col_name) - if col_try != nil - return lv.color(col_try) - end - end - # fail safe with black color - return lv.color(0x000000) -end - -#- ------------------------------------------------------------ - Class `lvh_obj` encapsulating `lv_obj`` - - Provide a mapping for virtual members - Stores the associated page and object id - - Adds specific virtual members used by OpenHASP -- ------------------------------------------------------------ -# -class lvh_obj - # _lv_class refers to the lvgl class encapsulated, and is overriden by subclasses - static _lv_class = lv.obj - static _lv_part2_selector # selector for secondary part (like knob of arc) - - # attributes to ignore when set at object level (they are managed by page) - static _attr_ignore = [ - "id", - "obj", - "page", - "comment", - "parentid", - "auto_size", # TODO not sure it's still needed in LVGL8 - ] - #- mapping from OpenHASP attribute to LVGL attribute -# - #- if mapping is null, we use set_X and get_X from our own class -# - static _attr_map = { - "x": "x", - "y": "y", - "w": "width", - "h": "height", - # arc - "asjustable": nil, - "mode": nil, - "start_angle": "bg_start_angle", - "start_angle1": "start_angle", - "end_angle": "bg_end_angle", - "end_angle1": "end_angle", - "radius": "style_radius", - "border_side": "style_border_side", - "bg_opa": "style_bg_opa", - "border_width": "style_border_width", - "line_width": nil, # depebds on class - "line_width1": nil, # depebds on class - "action": nil, # store the action in self._action - "hidden": nil, # apply to self - "enabled": nil, # apply to self - "click": nil, # synonym to enabled - "toggle": nil, - "bg_color": "style_bg_color", - "bg_grad_color": "style_bg_grad_color", - "type": nil, - # below automatically create a sub-label - "text": nil, # apply to self - "value_str": nil, # synonym to 'text' - "align": nil, - "text_font": nil, - "value_font": nil, # synonym to text_font - "text_color": nil, - "value_color": nil, # synonym to text_color - "value_ofs_x": nil, - "value_ofs_y": nil, - # - "min": nil, - "max": nil, - "val": "value", - "rotation": "rotation", - # img - "src": "src", - "image_recolor": "style_img_recolor", - "image_recolor_opa": "style_img_recolor_opa", - # spinner - "angle": nil, - "speed": nil, - # padding of knob - "pad_top2": nil, - "pad_bottom2": nil, - "pad_left2": nil, - "pad_right2": nil, - "pad_all2": nil, - "radius2": nil, - } - - var _lv_obj # native lvgl object - var _lv_label # sub-label if exists - var _action # action for OpenHASP - - # init - # - create the LVGL encapsulated object - # arg1: parent object - # arg2: json line object - def init(parent, jline) - var obj_class = self._lv_class # need to assign to a var to distinguish from method call - self._lv_obj = obj_class(parent) # instanciate LVGL object - self.post_init() - end - - # post-init, to be overriden - def post_init() - end - - # get LVGL encapsulated object - def get_obj() - return self._lv_obj - end - - def set_action(t) - self._action = str(t) - end - def get_action() - return self._action() - end - - def set_line_width(t) - self._lv_obj.set_style_line_width(int(t), lv.PART_MAIN | lv.STATE_DEFAULT) - end - def get_line_width() - return self._lv_obj.get_style_line_width(lv.PART_MAIN | lv.STATE_DEFAULT) - end - - #- ------------------------------------------------------------ - Mapping of synthetic attributes - - text - - hidden - - enabled - - ------------------------------------------------------------ -# - #- `hidden` attributes mapped to OBJ_FLAG_HIDDEN -# - def set_hidden(h) - if h - self._lv_obj.add_flag(lv.OBJ_FLAG_HIDDEN) - else - self._lv_obj.clear_flag(lv.OBJ_FLAG_HIDDEN) - end - end - - def get_hidden() - return self._lv_obj.has_flag(lv.OBJ_FLAG_HIDDEN) - end - - #- `enabled` attributes mapped to OBJ_FLAG_CLICKABLE -# - def set_enabled(h) - if h - self._lv_obj.add_flag(lv.OBJ_FLAG_CLICKABLE) - else - self._lv_obj.clear_flag(lv.OBJ_FLAG_CLICKABLE) - end - end - - def get_enabled() - return self._lv_obj.has_flag(lv.OBJ_FLAG_CLICKABLE) - end - # click is synonym to enabled - def set_click(t) self.set_enabled(t) end - def get_click() return self.get_enabled() end - - #- `toggle` attributes mapped to STATE_CHECKED -# - def set_toggle(t) - if t == "TRUE" t = true end - if t == "FALSE" t = false end - if t - self._lv_obj.add_state(lv.STATE_CHECKED) - else - self._lv_obj.clear_state(lv.STATE_CHECKED) - end - end - - def get_toggle() - return self._lv_obj.has_state(lv.STATE_CHECKED) - end - - def set_adjustable(t) - if t - self._lv_obj.add_flag(lv.OBJ_FLAG_CLICKABLE) - else - self._lv_obj.clear_flag(lv.OBJ_FLAG_CLICKABLE) - end - end - def get_adjustable() - return self._lv_obj.has_flag(lv.OBJ_FLAG_CLICKABLE) - end - - #- set_text: create a `lv_label` sub object to the current object -# - #- (default case, may be overriden by object that directly take text) -# - def check_label() - if self._lv_label == nil - self._lv_label = lv.label(self.get_obj()) - self._lv_label.set_align(lv.ALIGN_CENTER); - end - end - - def set_text(t) - self.check_label() - self._lv_label.set_text(str(t)) - end - def set_value_str(t) self.set_text(t) end - - def get_text() - if self._lv_label == nil return nil end - return self._lv_label.get_text() - end - def get_value_str() return self.get_text() end - - def set_align(t) - var align - self.check_label() - if t == 0 || t == "left" - align = lv.TEXT_ALIGN_LEFT - elif t == 1 || t == "center" - align = lv.TEXT_ALIGN_CENTER - elif t == 2 || t == "right" - align = lv.TEXT_ALIGN_RIGHT - end - self._lv_label.set_style_text_align(align, lv.PART_MAIN | lv.STATE_DEFAULT) - end - - def get_align() - if self._lv_label == nil return nil end - var align self._lv_label.get_style_text_align(lv.PART_MAIN | lv.STATE_DEFAULT) - if align == lv.TEXT_ALIGN_LEFT - return "left" - elif align == lv.TEXT_ALIGN_CENTER - return "center" - elif align == lv.TEXT_ALIGN_RIGHT - return "right" - else - return nil - end - end - - def set_text_font(t) - self.check_label() - var f = lv.font_robotocondensed_latin1(int(t)) - if f != nil - self._lv_label.set_style_text_font(f, lv.PART_MAIN | lv.STATE_DEFAULT) - else - print("HSP: Unsupported font size: robotocondensed-latin1", t) - end - end - def get_text_font() - end - def set_value_font(t) self.set_text_font(t) end - def get_value_font() return self.get_text_font() end - - def set_text_color(t) - self.check_label() - self._lv_label.set_style_text_color(parse_color(t), lv.PART_MAIN | lv.STATE_DEFAULT) - end - def get_text_color() - return self._text_color - end - def set_value_color(t) self.set_text_color(t) end - def get_value_color() return self.get_value_color() end - - def set_value_ofs_x(t) - self.check_label() - self._lv_label.set_x(int(t)) - end - def get_value_ofs_x() - return self._lv_label.get_x() - end - def set_value_ofs_y(t) - self.check_label() - self._lv_label.set_y(int(t)) - end - def get_value_ofs_y() - return self._lv_label.get_y() - end - - # secondary element - def set_pad_top2(t) - if self._lv_part2_selector != nil - self._lv_obj.set_style_pad_top(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - def set_pad_bottom2(t) - if self._lv_part2_selector != nil - self._lv_obj.set_style_pad_bottom(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - def set_pad_left2(t) - if self._lv_part2_selector != nil - self._lv_obj.set_style_pad_left(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - def set_pad_right2(t) - if self._lv_part2_selector != nil - self._lv_obj.set_style_pad_right(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - def set_pad_all2(t) - if self._lv_part2_selector != nil - self._lv_obj.set_style_pad_all(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - - def get_pad_top() - if self._lv_part2_selector != nil - return self._lv_obj.get_style_pad_top(self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - def get_pad_bottomo() - if self._lv_part2_selector != nil - return self._lv_obj.get_style_pad_bottom(self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - def get_pad_left() - if self._lv_part2_selector != nil - return self._lv_obj.get_style_pad_left(self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - def get_pad_right() - if self._lv_part2_selector != nil - return self._lv_obj.get_style_pad_right(self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - def get_pad_all() - end - - def set_radius2(t) - if self._lv_part2_selector != nil - self._lv_obj.set_style_radius(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - def get_radius2() - if self._lv_part2_selector != nil - return self._lv_obj.get_style_radius(self._lv_part2_selector | lv.STATE_DEFAULT) - end - end - - #- ------------------------------------------------------------ - Mapping of virtual attributes - - ------------------------------------------------------------ -# - def member(k) - # tostring is a special case, we shouldn't raise an exception for it - if k == 'tostring' return nil end - # - if self._attr_map.has(k) - import introspect - var kv = self._attr_map[k] - if kv - var f = introspect.get(self._lv_obj, "get_" + kv) - if type(f) == 'function' - return f(self._lv_obj) - end - else - # call self method - var f = introspect.get(self, "get_" + k) - if type(f) == 'function' - return f(self, k) - end - end - end - raise "value_error", "unknown attribute " + str(k) - end - - def setmember(k, v) - import string - # print(">> setmember", k, v) - # print(">>", classname(self), self._attr_map) - if self._attr_ignore.find(k) != nil - return - elif self._attr_map.has(k) - import introspect - var kv = self._attr_map[k] - if kv - var f = introspect.get(self._lv_obj, "set_" + kv) - # if the attribute contains 'color', convert to lv_color - if type(kv) == 'string' && is_color_attribute(kv) - v = parse_color(v) - end - # print("f=", f, v, kv, self._lv_obj, self) - if type(f) == 'function' - if string.find(kv, "style_") == 0 - # style function need a selector as second parameter - f(self._lv_obj, v, lv.PART_MAIN | lv.STATE_DEFAULT) - else - f(self._lv_obj, v) - end - return - else - print("HSP: Could not find function set_"+kv) - end - else - # call self method - var f = introspect.get(self, "set_" + k) - # print("f==",f) - if type(f) == 'function' - f(self, v) - return - end - end - - else - print("HSP: unknown attribute:", k) - end - # silently ignore if the attribute name is not supported - end -end - -#- ------------------------------------------------------------ - Other widgets -- ------------------------------------------------------------ -# - -#- ------------------------------------------------------------ - label -#- ------------------------------------------------------------# -class lvh_label : lvh_obj - static _lv_class = lv.label - # label do not need a sub-label - def post_init() - self._lv_label = self._lv_obj - end -end - -#- ------------------------------------------------------------ - arc -#- ------------------------------------------------------------# -class lvh_arc : lvh_obj - static _lv_class = lv.arc - static _lv_part2_selector = lv.PART_KNOB - - # line_width converts to arc_width - def set_line_width(t) - self._lv_obj.set_style_arc_width(int(t), lv.PART_MAIN | lv.STATE_DEFAULT) - end - def get_line_width() - return self._lv_obj.get_arc_line_width(lv.PART_MAIN | lv.STATE_DEFAULT) - end - def set_line_width1(t) - self._lv_obj.set_style_arc_width(int(t), lv.PART_INDICATOR | lv.STATE_DEFAULT) - end - def get_line_width1() - return self._lv_obj.get_arc_line_width(lv.PART_INDICATOR | lv.STATE_DEFAULT) - end - - def set_min(t) - self._lv_obj.set_range(int(t), self.get_max()) - end - def set_max(t) - self._lv_obj.set_range(self.get_min(), int(t)) - end - def get_min() - return self._lv_obj.get_min_value() - end - def get_max() - return self._lv_obj.get_max_value() - end - def set_type(t) - var mode - if t == 0 mode = lv.ARC_MODE_NORMAL - elif t == 1 mode = lv.ARC_MODE_REVERSE - elif t == 2 mode = lv.ARC_MODE_SYMMETRICAL - end - if mode != nil - self._lv_obj.set_mode(mode) - end - end - def get_type() - return self._lv_obj.get_mode() - end - # mode - def set_mode(t) - var mode - if mode == "expand" self._lv_obj.set_width(lv.SIZE_CONTENT) - elif mode == "break" mode = lv.LABEL_LONG_WRAP - elif mode == "dots" mode = lv.LABEL_LONG_DOT - elif mode == "scroll" mode = lv.LABEL_LONG_SCROLL - elif mode == "loop" mode = lv.LABEL_LONG_SCROLL_CIRCULAR - elif mode == "crop" mode = lv.LABEL_LONG_CLIP - end - if mode != nil - self._lv_obj.lv_label_set_long_mode(mode) - end - end - def get_mode() - end - -end - -#- ------------------------------------------------------------ - switch -#- ------------------------------------------------------------# -class lvh_switch : lvh_obj - static _lv_class = lv.switch - static _lv_part2_selector = lv.PART_KNOB -end - -#- ------------------------------------------------------------ - spinner -#- ------------------------------------------------------------# -class lvh_spinner : lvh_arc - static _lv_class = lv.spinner - - # init - # - create the LVGL encapsulated object - # arg1: parent object - # arg2: json line object - def init(parent, jline) - var angle = jline.find("angle", 60) - var speed = jline.find("speed", 1000) - self._lv_obj = lv.spinner(parent, speed, angle) - self.post_init() - end - - # ignore attributes, spinner can't be changed once created - def set_angle(t) end - def get_angle() end - def set_speed(t) end - def get_speed() end -end - -#- creat sub-classes of lvh_obj and map the LVGL class in static '_lv_class' attribute -# -class lvh_bar : lvh_obj static _lv_class = lv.bar end -class lvh_btn : lvh_obj static _lv_class = lv.btn end -class lvh_btnmatrix : lvh_obj static _lv_class = lv.btnmatrix end -class lvh_checkbox : lvh_obj static _lv_class = lv.checkbox end -class lvh_dropdown : lvh_obj static _lv_class = lv.dropdown end -class lvh_img : lvh_obj static _lv_class = lv.img end -class lvh_line : lvh_obj static _lv_class = lv.line end -class lvh_roller : lvh_obj static _lv_class = lv.roller end -class lvh_slider : lvh_obj static _lv_class = lv.slider end -class lvh_textarea : lvh_obj static _lv_class = lv.textarea end - -#- ---------------------------------------------------------------------------- - Class `lvh_page` encapsulating `lv_obj` as screen (created with lv.obj(0)) -- ----------------------------------------------------------------------------- -# -# ex of transition: lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, false) -class lvh_page - var _obj_id # (map) of objects by id numbers - var _page_id # (int) id number of the page - var _lv_scr # (lv_obj) lvgl screen object - - #- init(page_number) -# - def init(page_number) - import global - - # if no parameter, default to page #1 - if page_number == nil page_number = 1 end - - self._page_id = page_number # remember our page_number - self._obj_id = {} # init list of objects - if page_number == 1 - self._lv_scr = lv.scr_act() # default screen - elif page_number == 0 - self._lv_scr = lv.layer_top() # top layer, visible over all screens - else - self._lv_scr = lv.obj(0) # allocate a new screen - # self._lv_scr.set_style_bg_color(lv.color(0x000000), lv.PART_MAIN | lv.STATE_DEFAULT) # set black background - self._lv_scr.set_style_bg_color(lv.color(0xFFFFFF), lv.PART_MAIN | lv.STATE_DEFAULT) # set white background - end - - # create a global for this page of form p, ex p1 - var glob_name = string.format("p%i", self._page_id) - global.(glob_name) = self - end - - #- retrieve lvgl screen object for this page -# - def get_scr() - return self._lv_scr - end - - #- add an object to this page -# - def set_obj(id, o) - self._obj_id[id] = o - end - def get_obj(id) - return self._obj_id.find(id) - end - - #- return id of this page -# - def id() - return self._page_id - end - - #- show this page, with animation -# - def show(anim, duration) - # ignore if there is no screen, like for id 0 - if self._lv_scr == nil return nil end - # ignore if the screen is already active - if self._lv_scr._p == lv.scr_act()._p return end # do nothing - - # default animation is lv.SCR_LOAD_ANIM_MOVE_RIGHT - if anim == nil anim = lv.SCR_LOAD_ANIM_MOVE_RIGHT end - # default duration of 500ms - if duration == nil duration = 500 end - - # load new screen with anumation, no delay, 500ms transition time, no auto-delete - lv.scr_load_anim(self._lv_scr, lv.SCR_LOAD_ANIM_MOVE_RIGHT, duration, 0, false) - end -end - -#- pages -# -var lvh_page_cur = lvh_page(1) -var lvh_pages = { 1: lvh_page_cur } # always create page #1 - -f = open("pages.jsonl","r") -var jsonl = string.split(f.read(), "\n") -f.close() - -#- ------------------------------------------------------------ - Parse page information - - Create a new page object if required - Change the active page -- ------------------------------------------------------------ -# -def parse_page(jline) - if jline.has("page") && type(jline["page"]) == 'int' - var page = int(jline["page"]) - # does the page already exist? - if lvh_pages.has(page) - # yes, just change the current page - lvh_page_cur = lvh_pages[page] - else - # no, create a new page - lvh_page_cur = lvh_page(page) - lvh_pages[page] = lvh_page_cur - end - end -end - -#- ------------------------------------------------------------ - Parse single object - -- ------------------------------------------------------------ -# -def parse_obj(jline, page) - import global - import introspect - - # line must contain 'obj' and 'id', otherwise it is ignored - if jline.has("obj") && jline.has("id") && type(jline["id"]) == 'int' - # 'obj_id' must be between 1 and 254 - var obj_id = int(jline["id"]) - if obj_id < 1 || obj_id > 254 - raise "value error", "invalid id " + str(obj_id) - end - - # extract openhasp class, prefix with `lvh_`. Ex: `btn` becomes `lvh_btn` - var obj_type = jline["obj"] - - # extract parent - var parent - var parent_id = int(jline.find("parentid")) - if parent_id != nil - var parent_obj = lvh_page_cur.get_obj(parent_id) - if parent_obj != nil - parent = parent_obj._lv_obj - end - end - if parent == nil - parent = page.get_scr() - end - - # check if a class with the requested name exists - var obj_class = introspect.get(global, "lvh_" + obj_type) - if obj_class == nil - raise "value error", "cannot find object of type " + str(obj_type) - end - - # instanciate the object, passing the lvgl screen as paren object - var obj = obj_class(parent, jline) - - # add object to page object - lvh_page_cur.set_obj(obj_id, obj) - # set attributes - # try every attribute, if not supported it is silently ignored - for k:jline.keys() - # introspect.set(obj, k, jline[k]) - obj.(k) = jline[k] - end - - # create a global variable for this object of form pb, ex p1b2 - var glob_name = string.format("p%ib%i", lvh_page_cur.id(), obj_id) - global.(glob_name) = obj - end -end - -# ex: -# {'page': 1, 'h': 50, 'obj': 'label', 'hidden': false, 'text': 'Hello', 'x': 5, 'id': 1, 'enabled': true, 'y': 5, 'w': 50} -# {"page":1,"id":2,"obj":"btn","x":5,"y":90,"h":90,"w":50,"text":"World","enabled":false,"hidden":false} - -#- ------------------------------------------------------------ - Parse jsonl file line by line - -- ------------------------------------------------------------ -# -tasmota.yield() -for j:jsonl - var jline = json.load(j) - - # parse page first - if type(jline) == 'instance' - parse_page(jline) - parse_obj(jline, lvh_page_cur) - end -end diff --git a/tasmota/berry/lvgl_examples/lv_tasmota_log_roboto.be b/tasmota/berry/lvgl_examples/lv_tasmota_log_roboto.be deleted file mode 100644 index 79462aa85..000000000 --- a/tasmota/berry/lvgl_examples/lv_tasmota_log_roboto.be +++ /dev/null @@ -1,117 +0,0 @@ -# lv_tasmota_log class - -class lv_tasmota_log_roboto : lv.obj - var label # contains the sub lv_label object - var lines - var line_len - var log_reader - var log_level - - def init(parent) - super(self).init(parent) - self.set_width(parent.get_width()) - self.set_pos(0, 0) - - self.set_style_bg_color(lv.color(0x000000), lv.PART_MAIN | lv.STATE_DEFAULT) - self.set_style_bg_opa(255, lv.PART_MAIN | lv.STATE_DEFAULT) - self.move_background() - self.set_style_border_opa(255, lv.PART_MAIN | lv.STATE_DEFAULT) - self.set_style_radius(0, lv.PART_MAIN | lv.STATE_DEFAULT) - self.set_style_pad_all(2, lv.PART_MAIN | lv.STATE_DEFAULT) - self.set_style_border_color(lv.color(0x0099EE), lv.PART_MAIN | lv.STATE_DEFAULT) - self.set_style_border_width(1, lv.PART_MAIN | lv.STATE_DEFAULT) - self.refr_size() - self.refr_pos() - - self.label = lv.label(self) - self.label.set_width(self.get_width() - 12) - - self.label.set_style_text_color(lv.color(0x00FF00), lv.PART_MAIN | lv.STATE_DEFAULT) - self.label.set_long_mode(lv.LABEL_LONG_CLIP) - var roboto12 = lv.font_robotocondensed_latin1(12) - self.label.set_style_text_font(roboto12, lv.PART_MAIN | lv.STATE_DEFAULT) - # var lg_font = lv.font_montserrat(10) - # self.set_style_text_font(lg_font, lv.PART_MAIN | lv.STATE_DEFAULT) - self.label.set_text("") # bug, still displays "Text" - - self.add_event_cb( / obj, evt -> self.size_changed_cb(obj, evt), lv.EVENT_SIZE_CHANGED | lv.EVENT_STYLE_CHANGED | lv.EVENT_DELETE, 0) - - self.lines = [] - self.line_len = 0 - self.log_reader = tasmota_log_reader() - self.log_level = 2 - self._size_changed() - - tasmota.add_driver(self) - end - - def set_lines_count(line_len) - if line_len > self.line_len # increase lines - for i: self.line_len .. line_len-1 - self.lines.insert(0, "") - end - elif line_len < self.line_len # decrease lines - for i: line_len .. self.line_len-1 - self.lines.remove(0) - end - end - self.line_len = line_len - end - - def _size_changed() - # print(">>> lv.EVENT_SIZE_CHANGED") - var pad_hor = self.get_style_pad_left(lv.PART_MAIN | lv.STATE_DEFAULT) - + self.get_style_pad_right(lv.PART_MAIN | lv.STATE_DEFAULT) - + self.get_style_border_width(lv.PART_MAIN | lv.STATE_DEFAULT) * 2 - + 3 - var pad_ver = self.get_style_pad_top(lv.PART_MAIN | lv.STATE_DEFAULT) - + self.get_style_pad_bottom(lv.PART_MAIN | lv.STATE_DEFAULT) - + self.get_style_border_width(lv.PART_MAIN | lv.STATE_DEFAULT) * 2 - + 3 - var w = self.get_width() - pad_hor - var h = self.get_height() - pad_ver - self.label.set_size(w, h) - - # compute how many lines should be displayed - var h_font = lv.font_get_line_height(self.label.get_style_text_font(0)) # current font's height - var lines_count = ((h * 2 / h_font) + 1 ) / 2 - # print("h_font",h_font,"h",h,"lines_count",lines_count) - self.set_lines_count(lines_count) - end - - def size_changed_cb(obj, event) - var code = event.code - if code == lv.EVENT_SIZE_CHANGED || code == lv.EVENT_STYLE_CHANGED - self._size_changed() - elif code == lv.EVENT_DELETE - tasmota.remove_driver(self) - end - end - - def every_second() - var dirty = false - for n:0..20 - var line = self.log_reader.get_log(self.log_level) - if line == nil break end # no more logs - self.lines.remove(0) # remove first line - self.lines.push(line) - dirty = true - end - if dirty self.update() end - end - - def update() - var msg = self.lines.concat("\n") - self.label.set_text(msg) - end -end - -return lv_tasmota_log_roboto - -# import lv_tasmota_log -# var lg = lv_tasmota_log(scr, 6) -# lg.set_size(hres, 95) -# lg.set_pos(0, stat_line.get_height() + 40) -# tasmota.add_driver(lg) - -# var roboto12 = lv.font_robotocondensed_latin1(12) lg.set_style_text_font(roboto12, lv.PART_MAIN | lv.STATE_DEFAULT) \ No newline at end of file diff --git a/tasmota/berry/openhasp/openhasp.tapp b/tasmota/berry/openhasp/openhasp.tapp new file mode 100644 index 0000000000000000000000000000000000000000..f664abf69947b70ba600494a7b6b7c4a3c828b5b GIT binary patch literal 53454 zcmdsgOK&7el3vZutbnOGEwB)D5QLbddYRNDv&rh7fkai+fL+Dzu9O(P%7 zAQ{bMMk*tdMfT&M%bfPG|6l<@m%V8<|3KLDLO(*+1$5k_zRw;W9+{DBR!>mEC}+Bu z8R2ejZf0(7Zf5TO^4CB7(cL@zjQ;9(hkyO>!QyZ5o&Wvh&cD1fSj_YEGCk@J)6Win zeCLOq-#;66@!#U|CwG4EqksCrojX7Ja}?c3iuqtRPx5IxIUN+!yV?0PkAL6YNJi;# zID$p3d64J3Bj_E{{8OX{@FkN z!<{?)k9~Bcy^nvFJsbY-|6bF_7wFxm`>$UnNBQ{_s137mHor35?{1)viy}?>OMUN4 zr+{cOKTVTgy?*ihDQS^SGVNS8N&3^lNm_KjEb_^?FM#$*3iJeh%f1pSB>kOaV>=mN zbYJejI_y2$fAT!}hCg2)?jIiX9v^(X|Jl>SWP78ZWJNMdr{lp9$n`dxpQ0+EUJPb| zHpv4+yWR5cx3=!y-DvuA8xWI6<3Uj*{qeUBcAOn81EUa(lHpb2;&K}_Xq-<+LQ^B@-Gt+Gj=uFkOnvo$vIa6F{A@%o zW*pa`TrR{LU!05+tx>Wi9d(3?5X}4{oz1|I2`N-8hEg;wsx3~TOYZfGbPSq;Vl^h|r4L7SXS@?nx6Cxh7$WSLkF=JQ!LT+GSYJjqTbU~=;I6s>bS z4xq4uWZ`CL*<;Olezyyukov_MLpds zvae8HF*tnj_(d|w=c;0}`6dK*oNJ4%#py*nO*f}i-|XiuZec_DCd|vo|M!!vL7sGQ7QhHX)*^t zWFDF(qihCA8-w?gY865xAgOb3xfjNCRILA2G%m3PT>(*A?!V1O^V5E4@X2vdKo|v+ z#dzGov?db<=djPE11IwBc$S|h`2x!N?L>zXp!j$c@k3is;9ui0Wbd-I$A3(GuK4T9 zf4$`|!Ni}O^2uqMot(NXfp)Va1vMzXT%e)hI7O*RHa3`;oU0FHV(kqkCsMFAJn6+x ztXA}BmyJfh9hr18sz51!8;tNkAcS9De>NCpi$Z~4jnkg}w#vhNHcDq06@oq5XOZ|} zwVaYk5RD2}h=-2m(?Qvu{eEXS<7|@lygkyHj9mTDW`fCqxh5|K0UR%@lPqiNud6;d zqTz8}O+ke=9n~erfL5W>fEGUP>Q9xK(`*E7egkN<=w!qZgw{QdV-bB6m6_+$DiA)1-VgKnJU_1% zv1d^!*!0yRd{7nhjpXeto2T2bd9REkSJR4~*+_;d=7ofl+d0h<0J*Xm1O^?fhwbqI zMXWYwsB4CUjjvi^x)_WXDU=vlv35Ky3Df2r4Q^`NgE1@ut6O5zJI*m<$C^~zi5{;G zdOoQLEt?TY5nz{xQgjt^{Ja+QDrBjmpcO`bT=Y1nEW_q=&Mx6OXHsaR^Q_wQ^TA4O z)M^QE7o-{1Zl;7<;k$~@Mv|SMDCA;x#G3qLqLrP)FzI2ku8vaF2oLK@R<(9iT3&d& z1(pYsbf#_lapUS{o zeT*SceW-I@<=I9u!(uua4!96mOh+)d#4HZRu%TZprd*}72fz)>MDR#gt9=R`jTi72 z4`JginFRh2f;l_K%B#{@k=T_g;pz2tQdnZOX49Hj}C!x^U^ zu06OkhQWS=&qmVDCi5+~XzA?Ws!&02wd6~r^{_Tzwa&8(cr>_HQqwpBAS!KrZM?xC zcGZ_;$4Ppb6?5-JPnN9LRu>4mfY1eQ6$P8?uLrRKl0justY{zjQa9;qZAg&|TPG<_ z^Tl{H*_=b2C)DAP%6?==^pheZLtqZS9ZcXR!AcU+e`0F~n8)wyIz2gFOvH96niYvx z94+bO1Xh`^2()*ysK7|zQ_3@mypdq}2yDfc;Lzdhw5_8Ih8h;2vZM_B@R4#YJ#ECo zse~01RyuT#O@*>HCY_otCl1xeQZ4iiTMZr01}9uRDrEv)xn|3h_u{=^Ir@ZOIi<67v0}i5NtP$q=Hs~X`AYhdZ;C{u}?Mt2B z{mX}a`gm@Gc$jVINP}Yo`0L7`7m#Vs*=z!nN8IHzb-K*b`2t#CnCIj6EQOC73-r@= zOK|f+d3@x%Xi*%;rV%>XVPKj+B0@Y*{N(988}iuqWo(6e^iRuh^4@w&BCReD&&+ zPd@rcd@2bZY%Kl0ugs)N=wTnC1NWZ#^5#dUP)-mFxQ4rrUOavAs#h)B2IfhBmX7+s z98(m$_}QdLCk15vLj6nIAdpF_~SOwgH{_u@^llEow-(36_Nd#aV^`%>?dD z1RLNWJkBmV30!WVhnbH%pZg1|WCE_@Vb2Qqu=GK9p2HMH5U1D@3`G3FFL_9ISPhzK zn6glB$DTk$l5B6M+okUl)wg%;g&Jf>Y~oG!MR-WNWtJTE(4DgN;nh5C!(}Y}$3I{u zDn3YB8!dk%f2laK39KHBIuc6gu(`2mG+;eYWfjb2EBWRd1NnJN^v^1o%T1DS^K)HM zR)IVOF8i(IFa82R?&JH%t?-`xBthEzbN_zw;TEDoMpf$@JAFrFgUR1*r`}8WgLG!73xV9gDAWDIEuy zsFN&v1}4vPhG|@Mh4=ZmM->4)TB-|L${zunSjhdwkKMmJ@I; zJtQt3vHVXTaII{B5`^SLtV6G?m{)Yt`QHsuBuOzihFQ!Yp6VQ-h`?Ni=gNoxjocdz zESeqw92HA8FRgqvan)X=PM5$XHH`%|Sw*T1W+%IQ>JSGLX@XkSwgkyA#5EpZ-W+|& z4$vumat})ROZvL{D`8V#c*K~5MaVooNAwemUTuY5ORSeH(iEV7u$QzEVBJ#m3=r6d zjt<6%QjD%_WhJipx0u2#c7frZVWd5-6lL!%@VuxR{F$^L) zVRfbVK#Isy;Eoa;N)S6L3oYgmJSn4U5ye7OuUd%ELHnYBKZ`vah`z*^5!RTP-4V0W%QUK+tkB?;Qy(R9P0jd3zw><)AHX4~h6uKiKq;$K#i3_YISn?%QOZyqBwR=zbbBneXwO;F zSpR+#`&?FCEe&^(aY=RO_%cQNXAUAU-uw-8#%LtUfB|9+u}g$TLcJ6x2Bd)?zs6+h zqFyP;?~_@bL`*(B=xX(nMTWns zO`9>}URVYEX-*3FNr|E4nb1f!av_Ar)hxQ8_J~f9A4z}%3tPTh4tPth5tWTZl-uWn zD~aBVULG-0D^pK0Vx0H^3iXs8FJB$JetqzmeS!rYzcEV5n=$lT{7!21p1yc}D6eNo zzTi42g8S;=>A}7O9_LuYN*ZuvAHkJc6Fy*hY#u&)grox;_QVsr~AwAPStn zDRlvtXzAeSR7bVoMyvW59IqYjVOEPqyVMdu7kfHRJxi|&Q^RfquAi`MhB6DZn2BDXxRV2ibkh)|%9~5W6xXRXp$C`py(L?d0lKJsdXLRz7HNa-< z6B>xw7FUj+8$09I6&^t|R3#+Z1-Uj&U7nBvQ>l zi2_tt*07}}WRyTA5=o>gpyI^SKDnBo@=K9VPic=LKNOk+)|b@L_?su1@)1-ov;0g0 z!;Is@LropENoJhqQ)}4d0MpK+kC zO2b0?z-2nu97ai9*@{0xaEr!8EJKtcu7{ba0Y0%I1Aqx{lwv^!8h6mRU?zbpLrO3Z zwj@XgUQYG(Jm1sqDEAp&IE1A)sIDlR@uegbcs&W$=?LhSlRy`%)=|6U7ch>BR~GSg zz6P=vL?wU4Th^u5axiaie%)ewt-Y^X)AzFBds%C*^2N0?<6QmK~epsD8@)_s@tPogUl9QZ4N61vJoB{ zM>b0NOE%Fh7A%owU3N1RE-6GmL3gw`pSF{)H%Xn%z2s|lYcHz*?YBwUZyS@q{z0pQ zfBnr`q3{>e#c+(Zszk2o8;hjEwLcIPWnn_OWMIl$mf)!Q-uj57`hFToYu<`ZBIrLr zD|vNMMgK4L5)pBJbFrcu0dAljHkx0WCC@Cq91(G3oIz+9^$CFV5ol|C8RQPaZ!$c#h2jK!(#Zsi`&Fr#j@I z6;JV!A5|EUVQ@SioWL2{T>_^S*LZchM_6CXde>K#rCfDEXILrh%7V@if?Bx_YU6A2 zq;HJ-E*i_sxc|}912Vj!6^--CQ21WV3V3}lel6FoVVNWMjy$VCZk%mmlrW-Pn;zOU zf21||N_6aSbU9J*tSaDIbj!m9GT7+J@CsVKK^cM;Efb0xgzK_d0(WOoMS+kQnwlLI zt(j%$ zy-7LERLF1>rFCu18ii$aST8u7W7Y$0Tvs8hPTYOWR_rI7GH-$TWfMUFkbkp|87uR4 zMO$MumI2zzXkRnyFW0VNN`&9_jJY1Q#+f6ACyctiGL+eeDI!^%eFh$FAx*EXEF~7R zC=g0UCT$Errj}rtQKa;kTvg*uSoWz)005BG5_T)ixrLSnB?;2xl!bhmqciP-dDh$k zzzkPSP}MNwvV7P(`pM+0t}dx)(F1P9rJ{%iw-l0HyplrC;l2O#$tTZykKoxqc(wKK zrGo1AQo}pVT~bBFR*?>pSGGcGwXsk~P2y4oiDjbh0>ImHrj{xz)3iL*?yRGYPvMNl zYD24mBE^jK2>?r+__)Mr)g;g=0vmmSD+t~Xd~tQopH3kz_w2Q3S@1x0b$U64U#3+x z>PcVOo+Rq_$$x}1{sq|a{7^eADI`{Zh)DSvls$n%or8Z*_dhy#ia-M50e|^w|D`gJ zNhelgl+O$1)zsE_{DM&d>W{KQaWupJz*c>Q*NBQAyTg1cm0#KPBy|#`Z7^#= zgz)g-^TVEMlBWkBM=~X~cFX$OPfvcThoHKs6cd4QuY{p{sIEog)ss&?H7rbQYLt`O zq8!ydrH%ai&Q>rGp$ee(P%!VVrl>BI7E5Rn=n9(eU^2^aQOKA;pe^bc71U&_;rnxdW zjbtD0!j`zT#0>BaVF2dJiT6sN>`OwIZh?{4%)68-{rbi=TNkN~adq{SZzU~)ko382 z`DPo~nT^{z$EyMx%m?%BdppvFhSg6Xv(J$h@>;bcI2wo_x}ZxG>{FzP014j2O4U8x zLJtvY>C6&6U^bB%-k6BwJOZRNaagO1FIADplU{*?QJ{f5+#o;O$Wq$e-qe9EI7&XO zm)=T{?s<>cQxZ^nlq0X(^59ufdd9cxYVj4Ia|Q0z-)!%G;h?pMB~XR}NWk5`_XUDe zIEe$H4`8BA&C=l_LmmJPUm*`GhQ??(eU&`KDxb+}OyK2fAd4rJ&jx~8Id%k`Ia zSU@m>ic!>2#iSyAeD$+lWp1 z-M{%?^g}wgY5~}WFfni=waL|e`C7(@fCm+1Jgt~`40yeEG ziu$il3Z>w)`{g@YeQItBe#TP`(XG&@M^4j1Pa6O8-UX z`*$I+|3Fuoo++r(ee~*Bys0W!)~_@#%4ywUuG16sJ4+VVc!sr>3y!>)9XuaLgvu7|?45JZ(6I-##;5 z>P~$1#-I^#nCQ8YmHzR$t-%$5bC_-s5`vu_sadCITeeHoV?{Pj30)Q! z%%7$61WE2pR>3JlZzqCPm|6rT^We>$Q+Q7ZBcNQZ%vWa@*#AfU1Css zSKpk;*^y)pI=}+eowlGI^qzD`v4*=y5c#~lMRlbg@#?9kE8f)0rf|+B@n$Y9I7D6$ z9^b^rb`lKPLnq#`dIS9cl+vLVoXW=%3RNLvO|{VFTj|vaZIS18N|5lxs2?2~%9_`7 zp=++ExGNWB>+A3))anQOkn;sIxAC8M58IwekW4+IT0V%9NjCOc*co~)p^fj@*V6E{ z@;Jr-Q8zZ>OgBIC729of@rM1aGk67c$d{;@$)r>*JNpiP4~G>w)$~y<=#q3X>*DXu zQ2)yf+_sAWzIF93($Nk=mBVr|ks-~k|2(X95C|e-IvX%;Uyn}f!55B`2|-n_Q$n#F z>^kyIg)}l1^f4PR>t8%-RR4x1+Gm}_L^SBuhui~bD4_4PCGcGKc2isFAoEqTD-2~G zJm0m7oRVAW7cKMM>KWR&WWc-WLyBBiv0>Rr;=ysaS8KE6cHmy)vdVBSj-SK-gwUET5>7O>r4wKLnm2G$rR# z!O<-LJHvk} zAHWTISbvo*ID*$q0hBP?9KyXOgm{~}aak#%xhC}D3fPhcu^uEHRfPs7EUDNycJYX3 z!-?+WHk_dTIO=4)g=oHJ<~v2ker6lkDPJ1Qydc64Cq)Y}vRZ+^wJu z8zn+p;x>e5r@R^3$ldc}Bl@lnbhDV4rPtv5UU&C6`5*u7(QPcYom0Nr<{sX29Cm@_ zO?r{#3tT2a213^Ta3iWSnJ~R-^{5-)lA~aB2UfLwtU^sxJu@nRlmNHm=VXC49w&m7-( zpkb(cQzC{6Wrq|yAmmgGWjOaqwxhgUL&i{gnU3MbjR+Y^*HJRO45VBko(&eKp^8kX zXK&*URr$DF@>(nmT0n-Y9Mvn5VvE%u^CQlua;zoRBIT_HsN$HrbO1G?~u=89_h6*y=4x2a`j~8L{Ca@xHZE3bznd=}E8jhnx3x;#Foz+F6gyaWTBKaO) zjZ7i?0f+x2OhOic!2);1ACj2gqpHDLl8L~x@6_@%M3T+-icM^Ld#^~^?-g4#)sf=} z^@$d0wq!1kN$++YFUt-o=l(EWR;6c!nJcfq7dKa-d~bF}p#BK>8DXo;s$=L%p@^e0 z1(`ONSs2{6kr?D4R`$#>h|GB`BVz~>J@AQ1V8e!!`} z$GC+G>lCU1Y{N8caRY2y%@OE zmSQnR@Z^P1DJ-MpQDvDg@9Slq6E?=87&vfa__+)ESO#`)qN6BUMukc(okS@|(uSZ% z>;O;;$>TpZ9dbl_g^!y4;6}JcmXKK5NX}40;KbdB?D13E zi?k=-;hO=^{E#O)lH^Xa2TU{9);S}{H=a2{e=9G;qVvp;(?@-3j@o1QqODIR%<2z< z%F;t36f!+<<3jg(nb#giWV-(WiJCm-7C*PTQ7f+Y07*j)ECysKJSspPSU_N={Ot4g)_Rd zu*95n;Nx|YppZ%kXcW86*X3yvr|bEP5}G|C^IZZRDSds4Ba3{;E;s4$cTk&9TvSQyhBO*xsRBnW zADuP?uhftV_6ADQ+OJGw*XzlK`)_w3H9bYx-AYCQC?^P8G!;ZMwco;o0*D>q{9XBi zQ~BlM$TCY|%@MCWHyTGygJ$I!W&%OaljaFjGOLt_tZ~AZV}!L%<;-Q3LshYIK3R0! zGDoA_5`}>$2Q+KUu%$Ogb&_Amair?$k-MXo%ISSl9eAO4tYoapbu=3>!g0`2hj*#s z=DG;C$dW)`MIwZH%i&IV43)pIGW4ojV{d!`Z#_nGY@ab zS}iO{x3#cJYvX1r?_S*ed;5rwFaAz^Oth#<>v z1kNA1ECmbZ1iSQ;_S@482fcC$Bqwj;wnjDIwjw!Y!6gC!YE8R5HzE3H2OIB+6aJ$ye+%Ev(@*hrfIDQ zr3Xgf{uZXxF#;+V%9FHRpwok=lDF$-=WYCw@}to&UMUvz(JJ}N0c2nmwJl(@DL0R7qY8*EqKK@Dohr7$-03d z$Q3w#tzIZDox&lnn8`~Fl+ddfn2@38Cu0gCZ;Lh+@3@!et(Mg{%01P~C$C0_vWCQ! zLL7|5NA4A3Di>~=z$G{mMka|EG3~&qaEXnba(u0{74=R0p$ezZ!rYC(;{3}B{REel z&+|#c7u+R%8aNU>c3TKGQeQZs+`%19Sp9631d(pa8KNO94MQnhfYjgZGa@V(jO%PE z2fc@~QhkS-z!U`>a#@k#03+UI%;Z6qD7qon7^(uXapY-^2Uob-02gR#Y+lW_etz0d zj7MP~Ja&i=MkSxocGRK0@>E^HMY|cc%ZnRfT_+mxwWycC3`ZnzILsM@&#Ml!CTBk@Y}CPSyW$6tuCp|>POYDcirUlK1dY|Wwn;A>oyjU6~JxSI1?E+oJX)@5~!lV4d>sMy|?Nl zC=7TQbkI1aXFS-$cYYEwVg_;IET;-)p|L@ul876QOBUsApnMZJi?b;5rryHEDtA+& zJe-FnoCZV6>{8631bO{?c{Y=J0By{;QtDGNV{W8u!>heQT)(|4tOQWrRsvcPW;Cb3 zDp&y~3-^eg!^Qm?%8l^ldg5y-xDKq~u^_Q8-t02J)%yukB3{e&5 zP$T3sfIfU{Py~o-WWQ>Asdv$~Coj>yskaQRdL0T!4UJqrmFJO9(CfAR%gr<9&??qG zocPgM>hO~p^QDzu^i3!|L{d~<#Xh2oSngL3=a<_{u2T@!!074YUO5Eg?aCavYZX)M z32hCPA5J-_#Ro#hQ+{j1Y|_jS%tZcGk~HyBrAO~|$4}0a$fLp~KiN!9N>>~NWz$A7 z6y=64Z_0b5i$zp6y{tpbW^6J556+Y6{YWMsGH(j=&aUDQXSXiumtg2HEi*=8PQnhT z02;zrQBXsfeG|i?+qUDek@TWHkmhlEHNr}wVWo45^7_I|vl#9$aXs`}4PVr5#Ec`H z6XSa;*MEg@axLSiPEsAm;99f!t4Q?AW6! zJugaY3yUiJrbKcI;7V*S+1^cLgC|WfZbpUsPyX_^zVO2!**)8jN0dq~b?ic0z>{`a zt|5`PML64&l_S{mHNfM8@Z z2}=;u<>9Mr#7%>|7ej8EWnnqs3r6Sa z1~9wo_{h!>RX9S}C2Vl71PwrQ1ps<`i;oPs;7ZXj_$l}C36#>Zbb3+sL6Aj`#bOOF zbkiM%tx*=jLWz$%&6MHnoc50F3dE?oqM)BF(n4>%QgfNRq9jefzFz`ETN5O8ETK6w zQBJ#}EddM5MxFJkRF%^aI(D~+H^NE+FMy%{LO`Ji6wPI5LLOoB#0i=5-GL4r8HEcKBxtPLC7w615$Q3+13GX?O0&?{{N?~`Lpl0lj zJU_CeRCAYM1H-x;4zbrqXHX$nBQ{P9L|j$swd?!h6{tn7kZd1M$&pW(k z=i$yq8SUz8MNVouz>#-A3->)@^kZCrwscs)_eedFPvED3zecu4tIGm+z0nzI4o=4( z?4X?B=$SLopKJetbBOnRZ_)dq#nH}r`bz_FihWvGl;PiX5Zt?jBKa5_wsY z>+0BZRCUjpFP3D@9MlTI%yxg#NoMz!PGpNAD;S;thQpt#ClJCW#3_Dqwp+6M3nAk@ zYR|~MrgjLYNw(%gaBX){we8D)E`~TXw}L}}zm`Gud^E>6%XcSTtPwDYkFc;%Z;fDz zd%^I)_OCebS*n`CuGLxr?P^@op%ntxM^y6=r~dT5Ht?`77OP*l>b<7~a!ViP_vj80 zU}KL$Icj*-S%RwF+sb9T2qoRqp#BmZ_8|f^L@Y?*;9K>Tg{}4Na%h?@huDo4@t;*F znir)dED!6)-2W@RBNV2L+iQ3ce;mE>aHU~j!RfdJ#K-F5Tcxf19X~Hl7$nnD`eV7sd@#Jo;6Twb_N%5) zSz!6)(G zr&0odtjFL)v=y1TXlId`ur%(ODvpB}WS9K&}$Fy%uA6xUJvauF%J()+c2` z2tVEY^C!F0=j9U;MUc|qCN84O<_t>0_JU0si3P4znC0iV^>3VR7gxAl`8;|5 zeYvw%JegR2!Cl8d2NDBt9tw)d!MFt6(AtY~00ExO+cX-GGan>a32MTKc}VYJ;!+|M z36A;7Gc}L_I35lZJLC6H39Or5!kb>SOJLd_($)0zfh@<-1K2Rmta$18CbuV*#px^C zlt_>q6jA0?vlY?v*x5b4@Nki@c%-lC2oWGVjur;*=>Q%>P+D?eY0L^ewpdjR6JEl; zRA2g17F82nEPAoM9wd|wA?a51j%Jmp9Pu}w=Cd9ih;Lny=BCsS#8NSru~=YKK~e#} z@tO+vKGcPwv`*_w%HsYNBnX%EBqBQ31YD4z8mE3FKz%*V5;|4dlc>Fw?C1Eb!I7qAx0}PIBQ6uByj%oZ{V= z_S$HEshDId@c@#ZJN$LsC^GZQ7#}2OF+WQ(79u1+#%HUe;SME1>H4PxOE|y?gvbzd zj*no1gbjVCzyTP)=whw|9Q zg|9O#BR~(e^x~W1F_XxkqzL1hSKxo5e_8X!D612bMG1yx?=Au1*^CeE;#&6r>Pp;t^y{G!h zY9`5-$u`2V_R}?eD10U_{IU6h#&{?^#otD#MmT?@p^e4Nt`au?8Vv-lp!z;+LM{*b z*x7x5 zXuSgi;IJ*8_(E^1wE5Xd;6D`c-p&W-x3Fy zA#Vp)*dwk1Oc4}hRR}0H$=l62%|*(y)0)}ZfCXeRfngK@MQ0PmqOpEq5!T32!a-#TD4J1_Li0m16ozL+`Zs^i{>h zi)2Nt-#I#SSkS^wm`XCl7|J52#hhjJcw~0v6;A+y9I+aflkm#C+3DtCNuKi?1&gu=$+pCm8%j$cQru1qtm?2Gfr;FmWJ(ayFf;!fYM}yf&-dg&cYkS94uwZW_Te2`MCiD-OlO^~V zS3?)Vgu%WaAx%upJ}$;&p&(6I3LWcLJ{t+s0M2m;laY<03quMvfO>QsLH+wPD^-E9 z@&nG$d?AD1*H+L1G)Ax+$d30ETth%qfNPM`yH%lpgiSRP&c=)a77br+o@*zKr6qE@ zB~FKlE$>o-g@2X)y9(GRq)V-q zB#+=LUhp6ckb9V7AeRyFw&s68ikTR)MRk0Viyi}pR7uO)j3xMN1UMOU1rS+ck62u* zxXv&D%;JEn342hyDs#_O*0puAQnFQ$U16up*%M}WRO>Q--RcU$UJ&UU)q`ml=aD+1_^R%ahdST5G7$l&XnA+(xRzC+Gv$T-44%f#=g=cKo@Kni zjZ)~1sF#|Sd@z{IMHv!nw7?3CSR>SG0qp;i+>P36&`KZX}vCf3Il*xf$3j>|5S66(mA+HkEmP*+7Vf3F#=^#XEBNT`U9E8IEy@k z12R$G^YCKgn5YFth=T zib|VijU+*7C<^g{+u1%Wrte&B(X!!_2GztUr!yX!5)Rc*w=9*4;q1|XIS!gP z+*=**L`xfQb@Xqi*d-7!Xtu0EUDX zVHj9ZiydX)JFsJsn_(x@A*G_`BXcmZ12n@<e zNu@H>xLgW}YhY>Y$(RmFM~u>;wsanLW#BbMMC-pn?1Hy`mPl{tHu~Z$o0`K9^9xTv zKmwc}-woa)jw-G|rZ3HOF&^w|jto1;*xG#1>ex5!Ksno5@&V%?j^E0)pe1sI9Bd7n z&8>G8eNwzJU|)14H#qbU>jbzHE>1}+4)(|(P!W-+dGk~D%hDm0O_VE|!Do}|BlDK71c9T;-q~lgO>@gx&r6twW zB%ob{%d;OONbb1>Ruv_FT9uyijuk@kF{g8!&*t?(1_QYittj3QPEDwRk1g6@HBI!q zzbR%Z;D=7Z34pQQ%0{g{-|iRqK~uTSS3-Axy^JsRVVZBHCJx00%dRbEGIO9jRfRHL z8==leh6rYTOT1pGC^~nwA|GF0QKsb8ihR6O(akaa+xTeJ!KzuoX5xZ7O`4}Vz9M&U zDQD&4?-I%D5v_Jc}ZJ9Hj)n0Zm!K=DL{oc;zs} z32w(TsB5wU0Fp$xxaNb%Bh%^uGCjgh3{ii&x+W5_B-RTpK`(`46qbk2)bGzDQ0Yl4 z&vj1xa_E3CHYv}pkO{~1*yS#Vcj&lOz?ciqICr%$64ZT;3AS?5D}sYK4HXLxJ6*aw zv^fAMH48SOp?x(!t-PEX&EtBcUG}#EFE~4wPLA~ho#FY!ygYAP;8EwCwjSTSn0O$7 ztqMAr+;OznZ(HvbzilBABOK?9kr&Xd9Oqmc9s_kGq!X_Gz-57xWD}g(6boWA8}S+t zo$T0K;~9I0y7(o+TUpFwc=L7iadS#5W2+91bkie{LZH-ui6A?dI8|8-c;xFAiV+b+ z!<)%DPY{9)HB9GkxoLJ+u)g>64~+*Uj`#8In{OQ6!=xhj9~4Y3O$o zxefsd$~bufcjcZVBGTs|;}Zj2!h?3wD|Fe6&fI(;8)2+)^t4vnC{Dksw2BXWb{X-4c)5{!U%)FDM`R5Dg)EO!fOJc zu?W)~s{y&xO_M%DJynY1JUnXPOxl6rmI+G+fA*Gxh zB)tkjLfgX5hs6|$Wkwhq*4DKuM@`vSj19``)NHbWdbPBY(BCQ8t0kbDV=x@i{c`T6 zc()ZXI9^tUKXAk59n>)ic6(bMs+}z;xTQ^+;$1{(Dd~fUa$o9}L>hFKlAIhX6X&B;0hQNTMM`e#;4IKu*hmWdg~fV89zS(6Z0 zT3dFK#lzwKY@`QbOm~MKK%kUz%=^}rB`a6(#oGlnV_lJ&JlR`jUED>LQTV=-uObcWT5q=PLIHTg%>r);LC zi_{L4peSrY3^tuhKE|WjPij|jwx%c-=pFhgtM=+*HW&*M;8U-z@r72{j;hH(6wT=l zF%tI$Q!UY-iw)ZzK7oyC=U^?SQ}LD3uR!-3(s(D_ZK5`)_MH?u+tbBUB{hNL#8+(; zJ&K*&cPM3X#zF)d5E9xzkZ40{`Gc_%k%S0OkGO` z**N=3Pbp|5w>SoZJ|x@#4M%3ih!qIEq-ngjFsJJ{YMYjAA?hfZR{6@`dhE>DwCIX^pVj33e8vvc%H3otSy)2!B$vUEYwJBVbMj zvmtd5_Bo7U%OL!zX=LI@!UjrU<~Vmsc=B}!K8O1@j~#lpL{+V!0{l4x%1X?x~w zJY#0s>)Qwk1&I@i_!3AwBEcKt6Y#)0-+?FKE#is#(>>E;`?7y>iVg`!z8!a0S65e6 zSN*Cc$3MBbRxaTu`s7)EP2B$TuizQKua>@7a%U=*Pvx*VkoWuRrJKL}5Wop?OQ;)A*P9Jgt6<1dEkwuN<|ur(M-(}DINurX`HA>FcpSkAcY$y()G?o z5Q&ML#L0P?DMWbYC^wzN%5}ncykaznMzJ+K4@QAAPTZ+qKF*Hu??3&z|M;Je|MK^* zluG#hCLF_Jj4aG)p8c*jcx}~b7U;z=bknq4ra!in$V}|ONHcT?GAs*m<|bm2j`fo# zL-)K4KRh{t;|8iabrTt>8Vm`M&ZaV{rZODWn#+?g+)Sl%K%vUl>zbfiJy6p;4B0eJ ztF5|d)o?rDZN^h|9!h60c7|~nCsh!YA6ida^r_WR{NwgX-#Kh|kHjzV=V`y)?>PIN zgZBMie_^AHVLWxKTP@i0^6Mw@8OY)epNx}u7J1dxtmDL!iG%F7-+JpR>``4TUgCPe zj1+Qt;qui}*K^!3tZrX#^8p`Vg~H!`x6`?TK9VAlX)05kkqDpWVx_wPpVaY+47C3BKH_7!pN1nmWb%ulL z8;w1>UIRIb6X^hbm6g|d&^hYEwdr;G9lVNg4>v?2$3d!OA|B=RkA#Xb5)Q%3B*aW# zMj{?OmO~|i6oN%4mGnqj9S@r*fR_YkCSbs%j64%sW>e2qQeP+3Iz`4{YV=SMuM5Ko zr>eE)D1iI78B90pVso7u;oZ@i2wtRHU*minWrkL z>b380`qG^`BQVeAhb(|GQ7|$aK(LCG8$@Y!bDAdZgvr@h0<#Bg@j94Wh~v`}cd|og zC~RXbT-XOSh`~|^Z8(k58>r)h2nE(#uq%LEc%mQfa(IPjTCSrlA9i67gUSj=JZ?GB)Mr@bLhmlz2OtE%ZRsg-e#5}wXvsdAMQ29czs=gVO1 zt14u@j4lm6l2t#EDO~P%APv0f#{hCmfVmecOfI?kQ<+DCUg`&2_@=DP;3{=?qonVEpSBHdW><&X-(n-K8NI@v-aN_{yc#Z4gGrp;)h1=X=RjqFykL1MI>mDv#i zU>ZvSc+U{h!ZQlUCWeGAgc%arP}y%hEMmwY8bWkWB~fAuzz={=5$v#OvlY!|#;w7S z0ZDUZL7@rQTVbgPUaL7VDgdcN5GP~x<9rz@6dBQH0}$%-<;m8ADA~TqV6{AK_$uUX zW}eBSu~~ry7{#zJD!FJM$eMK_&vcoM&4~aMU)kH+!y;ta<+UO(J!9$TgJLzr!+XiW z1}8!}0{dO2TGpDPKY)6%7%#F)2+n+dUb@!gP;wDF@gwciMe*Jw)tl1;5M6zG6;EH# z;Rmr&@#Fm;suF12T@0Em`Yf& zj)67WX*HYMltDCZhhrI|=b3|UHT>j00*+Jiz>U|bT0@z|?yiUeXnjHqe}V#GNRMIx ztxt&P@fZU-P-l@YZDv8yzNpwrKnN>FL6R!6_tL`YEcGeFXbH^OR5GKZadcgWFwZlz zrzsmrR|Sok8Q90Jk}XN0bQwY;2dibvCOKvyd;~SIF$I}pxp)LEEVOWc>sLOCzgjBc z_v>7s%$lO=3?NaW;Ed=E^VIS4$GLuloQc_#2~3}tO6%*@ zSHMdfJnuTbBt2S7pqHYLiJIETZo2M1TP@BT3uvlacL^o-0%!;zZe$4As<&$E>l8yMCKfkP=TnP+|KV}R>2;4f z%(6(z+NA2t>f?8h_Pcl5{d*@hh*Mr1Z7NJFb9hvYJr}G&l2Jn+$_k7$dAqjT?;M^k z9ELZgMVw@PhjJ-xv-mvAG6oZ@{ zlg%uvKhNqQjkFBF+CUw0kF zqm)73qx+W_ujWzr887PF11x|3oy`l%TVIU71DrhPLMj)M7nIXa#HfL@) zlZ-Gh57o^YzE_;mDX;Q-#uYG!E-Y*QlC9*GXV!ul6EcEZ+W+&nlu6nAUbom#wk9x7 zgYIv&%J789{T+OwOUK5d_1s#XrxpSS>N+m20XYq09}3&Z4P=D{IDdZsG5#&QQh$YCsV}@vw;3+K&bAr;6&Nmb(+L{^U&KbA z!FRa{Zu9*Ipe~Cqz%#=ZTjHO=7R4<>H=FGz-zK)X84cH!!oKol)YlsP_W=G!gF8RK GU;hRDME=MC literal 0 HcmV?d00001 diff --git a/tasmota/berry/openhasp/pages.jsonl b/tasmota/berry/openhasp/pages.jsonl new file mode 100644 index 000000000..59578d84a --- /dev/null +++ b/tasmota/berry/openhasp/pages.jsonl @@ -0,0 +1,33 @@ +{"page":0,"comment":"---------- Upper stat line ----------"} +{"id":0,"text_color":"#FFFFFF"} +{"id":11,"obj":"label","x":0,"y":0,"w":320,"pad_right":90,"h":22,"bg_color":"#D00000","bg_opa":255,"radius":0,"border_side":0,"text":"Tasmota","text_font":"montserrat-20"} + +{"id":15,"obj":"lv_wifi_arcs","x":291,"y":0,"w":29,"h":22,"radius":0,"border_side":0,"bg_color":"#000000","line_color":"#FFFFFF"} +{"id":16,"obj":"lv_clock","x":232,"y":3,"w":55,"h":16,"radius":0,"border_side":0} + +{"comment":"---------- Bottom buttons - prev/home/next ----------"} +{"id":101,"obj":"btn","x":20,"y":210,"w":80,"h":25,"action":"prev","bg_color":"#1fa3ec","radius":10,"border_side":1,"text":"\uF053","text_font":"montserrat-20"} +{"id":102,"obj":"btn","x":120,"y":210,"w":80,"h":25,"action":"back","bg_color":"#1fa3ec","radius":10,"border_side":1,"text":"\uF015","text_font":"montserrat-20"} +{"id":103,"obj":"btn","x":220,"y":210,"w":80,"h":25,"action":"next","bg_color":"#1fa3ec","radius":10,"border_side":1,"text":"\uF054","text_font":"montserrat-20"} + +{"page":2,"comment":"---------- Page 2 ----------"} +{"id":0,"bg_color":"#0000A0","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#FFFFFF"} + +{"comment":"---------- Wifi status ----------"} +{"id":20,"obj":"lv_wifi_graph","x":257,"y":25,"w":60,"h":40,"radius":0} +{"id":21,"obj":"lv_tasmota_info","x":3,"y":25,"w":251,"h":40,"radius":0} +{"id":22,"obj":"lv_tasmota_log","x":3,"y":68,"w":314,"h":90,"radius":0,"text_font":12} + +{"page":1,"comment":"---------- Page 1 ----------"} +{"id":0,"bg_color":"#0000A0","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#FFFFFF"} + +{"id":2,"obj":"arc","x":20,"y":65,"w":80,"h":100,"border_side":0,"type":0,"rotation":0,"start_angle":180,"end_angle":0,"start_angle1":180,"value_font":12,"value_ofs_x":0,"value_ofs_y":-14,"bg_opa":0,"text":"--.-°C","min":200,"max":800,"val":0,"val_rule":"ESP32#Temperature","val_rule_formula":"val * 10","text_rule":"ESP32#Temperature","text_rule_format":"%2.1f °C"} + +{"id":5,"obj":"label","x":2,"y":35,"w":120,"text":"Temperature","align":1} + +{"id":10,"obj":"label","x":172,"y":35,"w":140,"text":"MPU","align":0} +{"id":11,"obj":"label","x":172,"y":55,"w":140,"text":"x=","align":0,"text_rule":"MPU9250#AX","text_rule_format":"x=%6.3f","text_rule_formula":"val / 1000"} +{"id":12,"obj":"label","x":172,"y":75,"w":140,"text":"y=","align":0,"text_rule":"MPU9250#AY","text_rule_format":"y=%6.3f","text_rule_formula":"val / 1000"} +{"id":13,"obj":"label","x":172,"y":95,"w":140,"text":"z=","align":0,"text_rule":"MPU9250#AZ","text_rule_format":"z=%6.3f","text_rule_formula":"val / 1000"} + +{"comment":"--- Trigger sensors every 2 seconds ---","berry_run":"tasmota.add_cron('*/2 * * * * *', def () tasmota.publish_rule(tasmota.read_sensors()) end, 'oh_every_5_s')"} diff --git a/tasmota/berry/openhasp/robotocondensed_latin1.tapp b/tasmota/berry/openhasp/robotocondensed_latin1.tapp new file mode 100644 index 0000000000000000000000000000000000000000..e4c8ca84ceeb371d83f63d49a0ae2d1f47679b1e GIT binary patch literal 61585 zcmeFZd0Z1$_b`5E$xITmOu`n{42Xz|8gT}{kIzZ#e)5xm9Qf=hULY7`%*mgbU64JgYi9Q7G#S9YeHEK| zsU|*iPJtId@FoNR+y{cTquGCgWa-H>^XTa_v*zSx(`@csmYz2yKZj-~&zzAzF>hw( z%>0>?X3ogUo-sQ+YhrFj{*)Qrqh?Q8klm4$%co4Y%*@ND|MyUG^WTa6F{>bL%cOkg zbsPXs34p}@?>qgC^xo+SnX$0^H_`_bAUp+kZPRy5C=Tqr(3KRCq_Z z{692zoibxeKE#xjJ(-T0-ce4|e{m^yE`0V-FfR)>=V#2GJ~Ka~EBr#!?daJVbF=A5 zbMo@CXXMlKX68+sGUEd}Yf7FR_L-EMF?;sEVe-V>nHgExc@XMvxc~mxM&qQ6NjceV zRUUdgq(#lk@(|_unVp?G*+W1-NYX!7{i7#r`fyQO6J)xF7P@U-oU$)~$^{R@p}E}p4C(Lfn_5Ot*Uvh(NU&G-}l zKidB*fm3GCGw0;dxicqa7f2|IC9nIe5m43Qvj;r#pL8t26zty!dO?PV@lG&d>7@z2divYIOj3O31&plM}ngc;xq=%)G&~Gr$D}%|5_@0`3rRMI|f%7B5&w z!2&P|E`b0Zm}vNC()0`q>UoBRhGimbnF!Ff?+*Aq_c;r!5SypB2Ka(LU@R!oXWjnr z_R`zCZ|}c-vad#|tO78q| zC%z`3rhm<}nxdK&HJfU-*IcVfxjXgloV!czmfSsh_t@Rzcc0&Vd$;wjvQ||aP}{Dy zZ*5|2X6?+{4{OiV{$A^pSHG~ny#8YS+j{W8>p|6nUmqwQ_IcR+ zsQhW`&)3RK=r85ZgIq%gK?57w++m+7#j#8W!{9eZ9c8#0ag@)QO8C_F;fA-EICU>ic!eXajl~aRxQ$cTB%I`9=}o8>o1b z)4EqjOj@J^S(F^miAN;ddL$P$0cU&e3#^u#zykxg;$MqCcI@blHS<3R(nx0IeptC4 z`RTcy6YDtGuCGc`z5;(;%-a)l z9K;OVO%F7C`9W#Uh?OHqGjLD|c@_hTy^!FX5QXl;t3yUz^=7?PTq-c&dyS{vWcg{g z0lmcP)(D?h<6FVis>w8n0*AZpToYt2&^p5DVAL_0Z~;@_Sjk+b_f|7rgrHilLE&eX z9LtIcKrZ4`u;EnYhOe55F8#m|^5PS!O?4XL2;v~JiW!D-xn5w@QK^X8y&bXOim}Z9 z4yfjj0(Uie58Ob$M4B0>7pR*VRR+hX zY_?wVYUafYf9ide0UX8)^zLiipcN$#J>+yVXE>=2 zumiN{0KSe~j)W_uJJ*(YMl&8p-$n)V7|j%J^m@fu8@bqoSIQ>t%`KVXLYB;KY)a*0 zay0#Sq+^9SiaZ1CaR_xgLP|nP{O>W}VU_ma`jB*wj?|-1-!-^4$X0*C^%+yrCw5@_ zK9m7mwLYqWoGO4rS^P2a`@sbB?rS*kbJ{DKTagUOUF-@%8QBKV-W-rX>;!O%E>&_V zXFo#^TFf0uat;L%GLXt$Uuz~TgSar%!^h*2Q_&`*V!<)A(Ff#iuliNW{{#DwPXCUh0o6$yLG=@J$!B6#s?Pdf1{ov$ze zS&uBlOLTT$M+BDwbO|4REm&U~04?8(An}qB=!>3?sKigp%V;X=_%O}@F6(R24*_eF zIFWCGL4jIr25`-ycTaO+J?M`O#-@n#i+j>-aEg|tJZC3lAk1Ou@etB^ji^<(DqbLk zAcw-a3hoCjm{1JsAx;l080#8r_2Ud5G|*t9YS%c0ZR%2ou^AZRuXQ-Sp=#-J5J5x` zId-^hZ76L))1dWNpXdV*9^jMagWhWm&p=vxYu1SW|04AbG-@_@`|Ryro|T5KQM z(HY3-KpNCO)`WB|eA*;AT$n{A<7&vW1W3x9$H*2CiHY0bvwt1>cu819F-MsYnbg#^ zfrF$#fbRjVMZ}YlCPkI}6)EB#0#9tH!csUbrp0=tMqxEt{sYOL^>*! z@;#Ai519CcyMU;~IgMQfCcUELw;)u83>0FOHi`!+>Ox>giggS72qHB8TPh`jH=q~V z@uCRIuBPyl77&ZqMHYpp=PzB}0Jkq%v9xPSVLNDRt57KNpVfI_Px>xG}V9rt=ydUKy*0|8AejX0(b8auDVMW0sNN*Dqq?8$Ca{afAtQs)UbDu7s15X-8l7+e*k$yYdW2%-5@(l6 zuhc$cKCbz?3YCUY=_bVQ_JR%!i)9kIW)E+;UWn1=j_fIqv;!oJY)BYZ2mGo4R6vN`cyBEh!)>{}WUVZT>) zDqY>WE8X~aO)Eiw3%=6JyC3ifOwi=Ah9l;AEqIS=)r?(ggFw#Az{4mz&D0EmG zM=oybbpO<>0Hka!U%6y8bO+^ht&-|9SUp$E}S9y zxGUN30?F5{Woo+IWprO`m8!$UGPeIaWF6Cdh5SU2dLQ?4KE(93@@on7a?S zpk4DvWKj432QG6kuWOjZ{*85n+mU~;NFVo-V+??n#$MfBqf!G8xnAvpiAc>`Dph|2|dXMLL^g6Bx+T3y#5uo7nJ!i*+uO9QXv9VDyr43fp#<*&TO4o?^gck=CnR4hulYf zJB7R#K|T^)A$$vfTt=LsiG%1F-vld|3dLAP>W>`)3yUx+^4Bn1aD#%}fw`+8dqT=f zWMV!3k<0jIc_CO`zT!!@AEA)a$Qohew@>x^xx<{0WbP}K%d4c$TI9IYhS_{)XJDo* z6`U(>QvLdvpv@&J$3l}j1DsjP9QPeU4}XE_D*;;`OS(lv%(tD;sP(k(NM-W++|`)4 z*r{%f6pT&1%FXO@wEQJ|>c=J$4i7TGPvCx4NRH|~KA1^Oz9hFBpaS4!diR``gVzhc zc!`NN&)O{uuJj4JB59gHWN5KTwk!*)au|r5 z^>n}T<5REf=ll=VG9O2#OJ>%30L36Mv8l?dwWqooby%ssoLPO{DvY+e8QTiV z^d6E36M5kZHWmy@F>~GDK?<3^?YKL=VM&C~39v5dJtPF{Y?8w12^Xpq_{I>SCmS4i z9RG@)dl305^RZtEVH$%^hvr60it=S* zgjC&SibLJ%(3nm!9gs>D7Y?j%qF=XELM0PhPfrvnV{5$Fw9HMs<)Cdus@f^R&sYp$ zP(Mac!4aG)IXl(CTGNS0?2jsSWQ8zhMsE#~$@X_db=6|ke5Jx9=PKffuF@W(%$<$U zk}MiWijs%S)l)~q(u1dBXOL&YY%(n%@F5o%RfbAda1JSVjZgPuX20Ou)>F7W_KuSe zMkeTmcePkes(N{EHaCtpg{$Am(` zfF^xZC0V?>8(>*u0V(<-cQHG6qi8Vr6i*{YcR|4r#;4RfbwEX@;2UOXbvGaMm%$2r z-W$rJM6`7>`Sc_>zQea@U-LF_OuF7vT590C0Jt##OlN0(@|NWA{FF>sfX~Z5}X=0Il!r6(rcBdfp4$eGkQeR~CYh7_^%dqZO zKe+JJn!Dw}njN1%D1a+~yr!;Hx1z53?~#GoPIOrdcW^hi2jd{E)6k9lN5~de3XLOJ zcoN6vbl*zrPJW8jo&4B`&ffC@O(kXpu(T60SMcBpL+5nPg@Tbp4BTBD!3J}wM~>lBI^r;>SE5- zt8kEyikpEq(U}PgsqUeOr4M$7%Tj+am8_}eIjA7`6GL~g0=e-fL$eqCTx+(ES zhl5>1e*X2!YBVXfSLtRa_WDUBYwbGG&RjYf5Ni+t&oRki^RHl#@b+3@7KHyFZMf2wCL z_O6tJaR{}C4o{1bsLq2SN6Ya34Q8lkdF0CDiq}8cd#l`JDQ&C~RcmGZYH9Mhw@+n4pb5fKF=y0P-!icr|%qpmXf17J3CZRtY+Z@an z23x}K7E8|spo`anO@qzSWiE&3j4%TG&XtwKyywM5$$aJxTUuncD;<5`AmNs_Q{3Ax ziWQ%-3R>vcR5i7;k6E9_Ef9=pOz1gi0>}7r?UOF|R{K6&Ja*OPK}&w>FV@2u2dv833=(F0o3p14Ul zZF-J;95)`^1Z!f|tsev{Zwdp%ot~xhm(En9X5a6zZCJg~2)NoC$ogCpYORO(Q?>5@ zzGwFzUjBCN+oklJ{>WRdRaoF?FS0mm+`PYa@gJf=(oL{7MCrf3Kt6X^tL5X1lwL-A zluO188GwDGo(qwBOl~Vz@Y_Xfy{2(y=HgeW>x($?PA(>{gNKqX8?H&&0p`Ds;CoWm zm;HJA*1HEBf(L!b7%leNm00Xhs5`1tw3~PKf5vztEfzhp9++ZLqZV^2$e(Qy%6ZU2OW5xuEjo+fO(aThoKiY>@PMlLD3r1=RSBHx`X(zvlFf z-mA9Nb#5596Y64;8GmJHm(V^Tj=#Tj13Vz38!F+4F~T+fuT99z3Uvzt56JFcp+_s4 z;If!1<2uxik7;1KGdV<*g5#j?{U0G_Pw2$!iLNNSK}%6QpM z*-4p8_F5J$A1u$8Z?R4Se*e3gTg zS<21Ilgfw6My06qS9Mj5RjpPXS3On*sYj_lRBurqg2$~EbtKiD`hZ$Wl~TV^zM5oB zhQ_Md1%n`3tx3B?`;GRFR^y%Go#DO4`<(YPZ^|dmXS@&Ra{`7vI{1$FUG96t_onX~ z-}Zh3{XXz3@^kuK^Ly*p%YVB67XS19fB36)eRLyrvvr^AuIZX|-2&bXSQ1bc@I%0Z z09{~eU_s!xi!py+n}k`3*!bMU~j$b1BRhw zc4qU(;Lru=yEcJM%N@aE7#(qPGhW?29sMdz*<+tN{y8>!4w`SMRGe0DjsqMVk^7$C zI$3yslklw?>G3N{(?MSj$3IWwSLJKe!9@Dc45bS1L@cCZ(-9_;up^Ex++fg3Td8ni zGg>A+BB7-&I@T0}SR_t06ONnVy{eh_!TYm*i%WY0gLD#SQU7v%f9A;IV(#5~#ZVB7 z<|F1Du52L=r&*x*a1w-PUY@%6$To%L1~QG2EMk* zINCRaTU&-EI3&!9Ou62B9)wBLO)kc*oIS}Nq3u_+_Pqfduhk3NNsE0`zXKtIk< zH938f!z%@PHM5sBW6?VgXGEZEsvV2w>C%E+u*!)Njt3jNt#Wz$ zM?@<=HfSbUjLQjlNLfj0WngvQA7EVKL1qgp4ZU51d$f8Sb{^Eov9uD!_iUz}QouNz zaWyz_Az8ZKi;i(IOt$EdeZj0xC7-2FTrc~A9Xt-J84}jZ;!#j*nf4+ha;2CH~na{jtRiq zPjx*ygR7D1iilE)`?&0TT84;cnS`Zqy57@<1N#PV95_xT(Y zjdlhv>1a5e&Owd-@ojIJQw!J48xO&2n69LFBX0zEFq4B{FA;xG;aVKgdVxxU@dLIn z5V4UM&*W|-Qm9xboesV_0UElF06eb6EsN>Y4og`L;k01OPuc@YWpZ#?u;_}R==ecvDctBxKBdezSzu zCWZ1&NJkd-J#xS@c^0y8(g)m9yuTUug!SgEfw!`WcFhI8KZ0FS8;m=Px!m{Q!py>; zvGTF8>_EN_&!DcvoQ3?&=GS6k(J@D-iZBIW#26x6hwg{<`Pg^pFLLPzj&l!*n}kfT zjYc+agVCDN+=-=!LNtLjy&#EPY<%{T6E*viDd@J0R>7|Om@W;{wf$3}0nCPU)ZDgV z+Yl9-$ylGm@NlnH1Hw2M`!eZU1_75@#^;gZXmm7ZXe0Vw4pD@35PqU!l8Lo^l_O4o zTU;YtAL*b}ojA6t+vV0=L`A))t|3JWoV_}ceqZpJOH#(>Hi8T3xQj*RQ>lt{y`g*7 z&f;b7T4LkptW9JlZbFlxf_5!2d3BW(($)syA9Uj?dNQd|AY*917wT3i4N~~u8%Q`{ zD+4(u`3{-Z8w_PD@ZdWLxr%$<_gtk;2;fq3_&k( zop?Gqov23B5uDosx6+M6uyySWMP9qQ3yzU#NoqeW_(5X84FVU2!!T)9SM10*#ZVfR z@Xfd|)Rp}y4E1IIitJ$IjG5jiL_6gxKoT_d3HSxD8-*RZJ)c;{jIc|E&fsHqB(Rq| zplE{Uo*Osp)s@+#hV6j0$}hW zNxiiA>{4N4$U5PDC?x=*R3k~3>;iVR7>W^TYJj1wJI%R42r#M7@z%1~1*03)n7CfJ zC8#O==a@Sd%|h;S@dJ9S`jU|fVfp^MKG(3GZQ2kk#5NdzY<=hVq%afCQc==mgz~8l7?Q< z3G$y7Bb`*(@hIiHqrpK1i*ZRD(~f&7Fc#)4uqbst2W~x<*f&dHG;@3*=G~-j9RwZT z>)F^(+>G|-GupzOLBvyUKID7f{DB*X{mgd}57EB-CafzFrE~=}#O^>=-@L|IPJE8u zwkbP6kCGnd22|}pjzTp0W5+E;N06o}V=&WnA3VDZoXBNlkjkQ%eHppC4HGOCi;<>A z&^TOs$@VH%62!za)GRa&@dHm)mJdL0x?Kfsk(*~FL+{!%B$RF^c(JpKVo`y%oGpR@ z?=`3J*||xV`&X0#JJZIa(>rb;YsNk@d!69tI|p)tg0I#aCScE4KAw!06f)n~v=_V+ z$=CzV6(-GA_3$<(MJvHnJ=)G zBZ^QXmfArODcnE_u&+W&2h!eQ zLJZg_l_KLPq_Uk^Q+^mgSZ=5=;kKolneKbbLnR_ws@DEQp3ilZFhcSJHx^<&nMtgVyH7Y^f8qy$MlR2tYW&~yD zgE6e}*NI$f2c%Ve%NUG5fHrZS9RC74TNI2rs{3Olk$}0Bi@k)wk;Awb)vl0D=N~jE z7&pTvLZ^JB05OwdGxz1pE4+6rCRV_fjpB>`PUDYH#8VI*v>ERR?dLu6Bhv;WVYU$t z1>;>INv5iLg!#kOa2T9Je1y%|$6wWlzEA5t%z|sK?<;x`MN+|P3$BJ|Kllee639-J z&LqZXk$t#V>p0E>+QqIKbAdlGy(++tQ&YC~|Avp%!PpgRj1ihQlUL!KOItaMZKqlU zHybRcii;Q-=_JmQqH`8n%r}oDH?xbnW9OKJoRIG5yZmmNZPUzCc2ewpqrFq<2x5ZP z_d&$-(Ae;MutqlDF_e3UkNDIOPZtC;$5lL19bz6tDIJQ}k8HlLGyde@sWKCiPT1qM z9G$ci2TK88Tb1u8gtV8*2i|t0?`7mz7}2%ea3t2}<_o2Fv%$kCw@}eMP;#t{o9Q;_ zA2Vg4bQb9dfO}6(2fC;Kbf((cpb@N|0U&5k**#saeqT|Y`?u;)U*r&alu1#nzk+~E zolS-gn(3p_qQ{xMQ`}FJ$OY%Wq7N-0=rjVQvk-*ofjV^Fw)Ig;$xU-_y&Jda+g5~F zVJ*=^U*k->D1l#Uo_=wTXACdB2a&Kq=)Nl`@K zpJ5P}j72*oRSen)atrvMT>U~5@pcvSzRhKP`qxSyv{~+FXosJ;n-?_VCVCO2FVRl0 zqqqGAwHEL%Xeg&-qOuNWc4POrXF|R(sU$=i_VD-8oC* zJ>DCp*L-$ubs0gYa5jyru(*pZ)EchFYNUY!UpYfJjOXBlBfca1^j zUU~Acq36e=3b4VO`*0skpTqVM9hwS)p5?|G0@j^Z70jFYqsiL*vn8<({m894CUThg zlC_F5k?&G|Wwo2IUQ&sS!O}XHcei4uD1|M=6fB5$>^^det5jc7R1}xADbw!H$UmI? zv!A~Kp3bWMrp?9i|p0g$s6!$3M!;osG1U*UjL~SZz4(CtLZ*{O9WAY4ZUR|t? zjTdHfK56r0Q#O!DujQ!jMAc zUQik6FpdNkVF@ozCPzuNOt75y(}fUNh5D8%q9lmhGJ$DpO(i390yz^(5n$GV5k8k< zCH-(Nv%dn~wBGda%$|$l-yWbBa(mMkGoO5mh(der;A8SFV>S-6tLp^oei^qPxujxx zdv)Nnz>@egq+aCB`kdKE$jls+x9=lLl@B9UM9b_h?M5s-7D)wF0a-y{H~6`bQ|!a4 zEFC_$agWV@IJByb+v1sA@(mjrC4q5WcejT|u-+O+OOGqE5l^bv)c#XOA(=sdaizv9kE9bLT!-GWF+ux99ybF|qaBh%$??3278O*MN>#HPu&6 zCQp1A*3E5jEaEZGcBbamoF%E~A#^NXgI55??kiVZrw1HGvrkt$uCtD_P) zv4)NP9IOFVQu5MYJ5PBn!OXygS_ubZMXwcVyHGgxjny9HFg8u;AAw#$;gN?qvutLA z^rPq4Cz!a$=F8;$_A^&seS-XH8~H+*zX4iv=1g&IGk2(b7q$_jVh$jUrQ5Kd$8N#C z1q+}j%oPf^F~*W`AE}4CKqUDTY6IOXd}NIl8)bn$l!j;qhICMFJLCNZnA zMwmRZZzCnSH=cJ?+q<1 z**k%r^s(mQulK=ceN`MZ49Acf#+pkPrf|;|BWLT%g0I7v1Kp_}J>h!@iD;jMd=Wzh z25XTE6QEbcMOzAw^5W@r+}roDFL64!U0TS9;L+Iw?wwZn8p4@kq&4R5+?ZD#_taF; zOQcyz@VZs+IUVt><*o8gq-HEuLbtRYY39h+}=nVDT3_KSPH}k4)E^Z4%n1s{x0<1&L){f(Cnrgy> zrs)* zdYjbC1Q)6HnuJdwVpUE|Sm@d2JbP!Q(XM~56sf&PFFXn(qTZtV*o$CmQ=TrAU1@yb z&}_{y`()h*9^#PuUxAh{Qq{jwMi@76gcoQTzgv?X)a_=wH`U#OZQb z^lyvQn6_pYqWp%2I$QjGyYa8u`(gD?{jd{ws*HO@FRZ{GQ+mo+%Jz-uLQ6{<;d(e- zWIa8z73m63Z_w}!*NqF7Pj4ZXyGty|6@NC}ZZ2aQPclZR*HP+E026LWk^OLjGkCTN z@w6!NQt_=f1|9be?_n=mo{}~F6zbQ4^+JECwc^9~*B-@gNk8Uuo?|-$CQ+6`xTk%C zyj_*9{&=Mpt0Vh;(+SfJ2dQvNzQMOnM&JkTvSPS*Bg7 zT797_`9RJ$7s3OsM-*p|t811cR7Y;=!0@ko6w8T*+L=5WjaS12Uwkkt<>>c8Jwa>S z4WY3(vv3?lU3eBpACiGlMSSBUN52aS^-;hsWQN3pf_M3JVtmjE?EG!)*2X!nb& zk)c#TL*Q?VXFSlmU}CfiXWXJA&}ppqT;bd!XXCE3zpi$=;PO$6mtY3B>K!GKuyqx) zY72iik|{U_fii!m=YIHs9fDX}Icvj|k+agmN~>9}^cLzGIfK0Y5IT#_Agz`ZGNt~% z;aT%5@(gAJykPR%46Rrpx`mrBpfbT5(a&#(H)01W=h}kL^F1)JG-vb9qoa$pwjrcm zZ1VA}Xt83VJ?Jen@zKgl*!i%974~i2ktRaWan-=J9^|4ugh&MXs;e}fr{1=p0|bD{liz2VPX%`KuBv3cll^1E13u#Y3b+%cF96nqIZN*(>-Y+fRjef zgQg#+okDWi4-Sna?+)DX3e0sg;+>FkiWpvzaqJG~0jl8K2QF}{UV^cwOZ40Q#cQb8 z2&@pU?i6_!Slr8?{&5SC=UA1x#A@d<7h}wL${a&+1&)5;6*C{<{%hEKbmHv6igo~a z%6|%b_x?W%dsDy@^49zn_Etkb+~3091oHph82rC|V^9J7K^Pbe=7Z0{Rd55m0y-ob z>5rr$X~?_CJj9M{M@}R65fbfy4n?QIVE30W*nJ7TgZ_cySUW5mTMc7vSK$t=#M|LR z@d@k% ze{ur3fLufFCk65X`78O7bdzdnurywpE}bLgrJqO-O23m0EdNb{OCW@SQ)iSH9PBuVY?!y|gg6Jyo$xu}^VQaa~cbc&kWO z<|sEQzfjgH+pET?IMqq`mS2eaUG+lsx9a=qU@C&@Ne!o_P#;q+N~0O3S*$s)d8-N1 z8ngqn3$%N+hqW)YA>NF4q4)RRPhem>#%G+*MxWb0fxel(rM}mEm3}6_>3*etb$&Yk zUjEtstNg$8cl)R47V5s!z1DRI7!|M};ERAC16~LC1P%{e5V$w+QDEnwi9u_Fz76^< zNDpc!Ajnb zQ$FD;J9$S+BgxEG-Xq{0rjH|wGf~lkK!d(u_$6#gMCUx0D*zFzV~ONrU4sVGG~F2_ z=!@rrcC__1M}z)gVwL>cATXj=k_m7>=+&mH+DGL}qX&NRfYY`8ocDo_?CG&)6)e)>V_YuvEHTckY!qamJG9 zc`a}9gTrDvV*O0Y37p>nE`Q!#c%#oDfLT#Ucn;ZH8d!q53O@#2B$gz~zJOVQ7iFvyD%8!qUmVI7I8znM7+On=S~+&vGL}Tyve>&MOg&hx6dn9 z`MGpTl*4+-Ts|=QMj#lxo$QTmCDw;3cT*ljAuUL7biO1Ymg|is0oNdhv4!MAlbHzV z($6Wsx$yw5*gh}mf#+<*c7r;Nw0XR~0hmpnhJ3yXI^Z}c%RX-Y7=1;sKJ$MGjyg2( zWYlgb=v~{^l5~uMEsejt@U$58Zl`BZm|PI}I3Mp7Z!_T~{#Y`6B~7HeUsDS3wN`!7 zmYs{Y9i*b@{=KlNFzjfxNsiJfE@O-Er$xEok?Ip5Hf|=P@DF{>XXdydjlIwls=>@d zyK(^5i@U7FybXP$h-4f2DLp$_JyL+Q^uol(D}wSkXP`&*p(i!S2_}nhqzEY-4SzpD zsx%d-D=Sc{`j84e?@Hhdi75(5L?3J_!oR>O4gI1*v-tylD|HrYOSqawX zLR9Eb&Lf3(Q_Ot6t3pF48(j2LT!AdIicFKa=@@>NXX}0pH4cJL~7=8M(xF>K0!7wSD+sd zoUPMW1AH$$fM6ZO@nN|msg0!A09goMT2+gCg!d#P24O481SqHu*omD;m`O;dpqpRC ztOZ31y8T%uw@ApMm`t-hcm-C?!eHtoe{`GtDokjPP6kCN-H?0|M)7CiUhA$bVTnR=o zX=pB-5hP_o6gvbhBXlZL8os(cxPFS6?1NpRjc=eS=&x>Fdh4ug7L!#FqQQEA`pN(s zIgm^Obszcoegmj}!Cbl7RjY2j^eqhQ_n3f%Gb#1}b1ynm7vSp6WKjWZZ+0?FxTZpa zxnsYfjP=!Qy+ucK=h9)8J;miWNM=iYq`J^p;f?j;lS&^seTn`E=}&`rW@43OZck&R zWo#ZAXCpN*KM7gE&l*ZYmFo-Ba$h^%Il~P638|oZz#u=BGM$oTI)eY|*IOQ0y%c3a z>4p7~s1fZ>eLJGfW<7w{%!xL|Zbmr+H^A_0ekHk*y#U};=h zRj1=Rk4N|h@Ask*hhLe;A`vZ?gX904CXocq1WXIBg<8rm3Zmp?4+vNL;bS&<(AlA%d|<`3K^X z+gl`Q%yCx^t?lX1bi&ysAULFN2QXhKmP@k`_PD~v=!z915xXN-8btS)fq%*{u=8;D zkQ=DB7pQVZY*T8`$^5QJX_wD@LZX=p#TlA;$aqy1_r)aL;%i4Yu7l73fwshw2{*p$qCik;&h0dYrb$8zlkAxC)TVtgXP6#c(3$#I5Z zCV?8RbxR|;0p$vysF^Hsb(oMiUPzobmF`dzIS+7!(R}OunJ<_LS@4cHoaqL(N(d!q ziKJBMxOVV8*mmFpdaOgq{QyoDGO@VX4*?lKCwWBP!Z(7_j=lDwv-bz3ppOf+z`(Wc zlhJmWd9{N9iy84=B}}7%x!X+?4qvH6XuT)T;04Uc!fJ%)^a7+1a+iIpt%izQi!ka$Kg9>Lmx#F|R1C6TPZi+Mhk zGb`w<=2b&Q_#ZO#kKrdu{{*-^$i$kn)H{X3(@4uI z=WaJq?_thU=h{Z~g3%Ktb{~j;q>+Hx(VrU+^H}F#?{#b8#aBNe`$B=NjoKeHlvDkm3}+c@^W%KlWC8`RY()%_)L0&i=k}jjhqZr$i04`v z>&q^7zoAHU(D-I2GjS4nvk_@G(}deYQ`RHR?Uk)QdyL^7u#dPn>|-GmTf?NZV$-3o z#F)zzrYUxGzu7_?ZPq3)UKFu+6Y%j3IC;6cnEuVh~W2D$jrW( zc;1mi*qXsMeMqqyFpHD8w>iqGozOB^O-58mAJc%@6$4hIvC{v=-nWNERjz%nwVpMz z1{h{75Mh9USs)-H>VSl($UGn!9?J2MnN}{5%1RT>%mXpcLNYS6$vjY5j)#iMirSX$ zz1y3GqGC~@VVlam837SZb3jxMGqb*XsQ3Nez2EnHzw5oO@6Yd2U=Hi}toyl-zx(%G z%Kb|2yM(vT*SY+kX~cEn{e_wZV(Et=3&e%Qzwb-*>7~rXB=OP{%ZAhQk7$p;D3XpA zd0^9srRWd)e(ccPCvARM`~XYI(mV8kbD_CGz)*J#MJom91zaIFOq0JlL?$`cyib|_ z^2`JHblu$LEM7Xd3^k-E-yU)(6Lk}V4_QVg!HnMfy6k^_$YRKwp?vGa;xnuYDZXtw zzF)AmH9$|-LUTKGfQ*E&H-l?3{OKPZ0i)zIII-4EVPym(wNz-WLRDrw{YrgOa0OY` z4U>WDIL7xJCF;0)T-LwM`GS?p;;Fqk!7}O=Go(^w4Wtl1L%m2S;9sX|-gHcn%&Yn` zDgSM@KP%eTJ^&FHSf@bw6-5Z-@MTNy!q1OY>Cq*c_h&){9?VnRnf1)flCVz($6`!vqIz53N0)wbWT0)O znMYcJ^)wzuJxV!-=@}jW^|pH?8(%nrJ{?yaWyv_Xg*}0Wi-z&_w^nem=U>4T3@mjE z+kafZwO0gC>)W)&`Wo{j+GgDyg`CZOb>?>eoFW9Hh`}|KUQB|1Ts#|1g)p$JTP^=H6FSf7D{PZ)RdYj@<5pE79b2noaDaO(a8sGN+e*6k;AaF=!^?jXr~4H>!) ze40KDXx5W6zeG2S09XM%m3zyzIhn_T=+j#6q+}JWEj$!#r_!gPIEf#Fq`yykW<9@H z5@Dt)pu&ILgql~y(O(IFLyfwc5t^s(CXEy06Gi_Vf4Ie5FIhiy+LHnH*Qb}e34YY} zrZ01L1D5mN6a$WIN1%vXW>Hmme_n-o7Vd81-^S~ILY??ZMQCI2D8{3>U^0+K8RmHZ zwu^6W+YvZ@)kP~D`#2~)yqLPCs4igwSxL>K&O4o^*PP@wUL)SkGGgQlRL9;4MOk2ab%w(%`CwnZ!HoVTJZ_p~ybV%LW2)tcv(#lr#T5=JtDtbM9 zbJSMyUD;&4{GoAD3bQ~ZIeYpY*!mPGmNvGvy&`Cgo7H5xEBRjOe!5dz#QUt$y+ob( zraS6|RWDJeR`xLUyzBQJ5}4NQcbz!o(p?_s8Np_8(=>6)c$E1q?VG5?$kPnPV)D(R z?el3(!sc@Ac;B~lA!mYX{!b?}JVXu$I&p)(p$Nd0e`YGQ;>PS&(lENDKs$aFkmA^f z?iAY4d^=nvM9?wJ9(VLDQe$nb8ShcPk+e|i#6)_GBF+%X78puDVGKx?-=w#i8c;zt z{Y?e)vylA~0IKma2A#`ag#J+cfqX3TetiG(fQM4v$J5W-%=g3p1x{Vy2O*0JKOiX% zR2{7RNdK+J|FrsrxwlV@xf!ZnU2e|i)X0nWTbYYH<7WP>!)1BNrayJ?N6=+RzeiL= zM0ZTJRU^Cd$1^$wru0%3Ia>pHsaB9U0qcpIACd?yEKCE8nzVWLqt}nqy5Y;{qfadSfb6Pu zjZ*sz7Q6SZnmo30SUOhHGYlRMqA&!=`A~{3ZMm+x-*>{P0bvuIm)WT&Lm2sx@bob^VQ%Zhq;FX?u7wb zvJ4)by_WW@6w+4&)P0s_eri|HvOSkxUMe_~ZM-imkL<^^t|)02Eryp-03l*N?V4n}7)^{x6L`dhtrUenmJKi{q%%X~72y8kMfA6dKnZv6P` z)FaXcuJ$n@Hb>B|;cj`sC|Dp^-~is?ie$m>!OPg6=W^+5KB3##ACNO-C4Pf>+?i}- z9f4HcFXT{Q3{+FpaIT+ziTGw?yyPkTmap1ymI*_JNB`l9&vPUQrl-9zisKu>m1-Ll zi|WVAow^D@VYtnJkRc7`lM7}y`fVxh#0lue#NEmobC?(1Xjgn+0AP0o*B$LPI^GDb zL@ggKzQn$`uj}vG+a8SmW(r-h(Yr2^E5!E27~C6R9eIoLHSjG`&dCW%h~YlUY47Ju z=w>BA*j_@FdT}gswVAYiaKz3;YI@dC~hyp3sIKzpWSpH{zrHvju(=M&M@mr}U<-+UB* zFK{?bOcSjG>weoTwwzKg{S|Nr6-Ifx6w6%DOPVLC62rgK_Iq(#9f7 zq0Wi(X++eEVY*m+Ezy)xT{g9O;|HVZZ_suN{oRiddhH~(%q8NSWy+vrZrFi(R?|1H z$X8qzJ`+cwAISno2s?TzP({8VMQ$mMzEzfsmgljCv5+Oa%O?8GWm^G%t6A<~w7H_z zF_yuGNe40uj(_~8j{3XvZAW1U=gbKk(~$DZ$FuH1jN5T@-Z1B5?_I5mS-TDIfL33YVDTx+ zH`bl@%=1Fz@`f?w=9^bYFL(sc_cD9I!TpFn7ERw~9@5DvmzKwB=fI$)&67Jg{}S>-1jzWzujfH0QlXJ^sk&c z7y2nUSyd`|-#K(a3{({^;N*2enq(z*_spRjn>RK^gObrzO_pqkb8zk^@ ze;?My+Vk33$F}KfCS8e=6Tp52Pr$L)7t>-q2Q7Gj@m){rw)g7XnHH}}5vwyRIc z4S}My8bHfb|0M3^wlBn(1J^BnX$@EIu8Ddg=H3y`x4ffk-B#3da(8aEDjVfffJ6K{-9ttpwX(KJqlTSP=lazM03SF0AU$!BdVF(@6(HznfH+H6 z(LIv`88Is%iy>+%C07JG?meR0O6_IjLT#4*8LAt7-;4ZaiKuTN-?u;JuOWAQV}zL1(jhOuWE*#7mTNR-t)oO;BM*>B{12?xQyV~jBi5gtf$ zXzTfQXmdL5S2*DDE$}^|`$C-CGF9DAo;)R%^ojPt43m6voRl!8$N8TgtU>tf3B`O28#^k};hG1Jq4 z2r0DqpNXclwM~SZR;6z2kLMFmoNTn}U`w{iOAaBSVAK*Z$vOA9yf z$qT3_%m{$W#(-L>A@zyua+m10S$n2{=x+veXDj@L0CvxGACd5gHE#{2MJ_@D=q}mU zHM4kuD}7;6jd_k>K6$_58*zXe_?&Y2ALW1qQI5lWigX1yp2ooq^Mh9PrW%S22`Ez+ zTorl*8b9CtRtOQTP}Unxr~E{}&UEIH()p}pht5j>gZ);VynlZUKjN^o&Q->};j}*j zSKwXP$mOopB*(1!6EppK8MY22@BPnzJVTVUJv$2l|dDrO4Sfn8sc zlXRrTbPRlKtp1XCA+aLstK?joa&PX2~D_3|QI4O@YqQ8|i_6kkV1b5t7{<3CFTk@w3Lm z!6A3FcsWSiLKs(LZ|>>&=QqVsKePT~gv}&@rWy zI3rxCcs*G}{Xw_gs1-L;Qz-?QN<@~-w2$lgNy2p5%l22%-lONPiR=F1ora(IjBYx| zUZ12{UZGh$AKT}%L{vJ0bWFt47k3rSKQ~N!yne@-!bQTrBk4`g1^oQRZ{LT`3~kZ2B>suYY-8_3D@m&>Ei3p7WGD5maZg{I z{0xSR+l+kqnt_b>##L)IKOewVI_5Ft(v|gG6v%`0csa@)u)l8wI!Tv~31wN=y`|K{ z7h{zb;*QZwium}adc}9w3#xck28CjPnm1XX!J1Jh0Yxd4JW9~cxA10a~fAQ@mVyMj&! z-3dz6FVJt%AJVt#2lZUA33wi62R{d-*MANEHP~#h7?v0|7+wW1Ofa7VP?$sf-}qL3 zm@o!d9_|*31X=i4I4fKfl0rTR2?@O~bQcg@M-Q7ctbADgFk@Ij*lS^b3S)*R4lfw~ z)bQ;9fteM)CH!#s)$pYeCn9b|tTujb>^9Dclq0W4W&-48bJVL*e~J1&YHaj7(Z5DN zV0yhcVyAbjM`IZi(Fydm}d5Y%|xHGsIWKuf>44`{VYejP>Bv1~`0iY5{P1|=*jnx8`*qiWChFFA8J2xW7QY}|} z4{H$f$xR$hFF9E{x^4&K7{2+~rWdP&%Cf}Opf-0MS~+6jD5%L+m%iLpOAB>+gKN9a z1Qn9(DppY}Irl4P-dDot6Te=oqoE>%{G7UkrY ztYvf_ZHNTIsnFnovaBGTrp73wh8#r|8Z1uABVr$ z&Y{uzZoPJrFy*U%(CP1^YEn}0Z~)nW`(kr>|Cj|s5p(z6D?ZXj}1{Z3n)ChS@x8nt}N5)1Wjoo z=?18VIAV5P+4SQhpy=E(Dxi!2{4K9ntJAEdD}W}rSFZ@lYGSDiqr0e7W`@$&G$kG7 zoS?qs>#8@>AyC|Zoql&(2m5qlvGHmFKZZ(8ocpR_4;O#)lQwY zSo3i%^7F!A+A`MY~Wv4+>wMsMsGmf zbz87qbcohD>j63BB>m-7IalpUR@Rr(TF!zi7_FibTROVQVAaKPz-Wx)@Ex64z>5VL z;zP3`JJv2mdrqKU3ZfcSPzK8Il8!3AgRJTe9 zhkxhUUZ=UOAJu+l3VCVZ10&wkFCO4rMKVOl&iTUG28(W+$i zyt&>mQh5%#crPAR3QPTJVYXTg9p#Xqym7r*Kie_^x+}cIe|2yB%7gba>q+^lAN8n+Y!brtBAN7s&SxXFekHJ z6HCRC<>mabS^WMm{KN|DqjajTW)$F#{}Iy8de0MWWy zi6fpedMfHKpHBNu#1U2OlI)FPkOra@yIat5Bpa@*gEK2OzRzjx;`+lt5%O&>qX8Y) zy;SzH2m}FM_g8SeI=&bAB)c0H>iCb(J76$G$u%N5AEBx)amr@Yzqt;nAHq*%T`t`g zNs+5rWi{Fzxi$MfGX>74{^~cbvsG-p+z{=paFu3tP-wU^yNDO{9+Z#jCcV#|gP(3NC1gb2U_r zJiK~VXTar*oSYmOaVvm4C`V%|gIe)`D`%gm_aup*gxyB5md1)@{VQp4O`rUzrIDm-c9@nH^?b|@!sn<@`>Ov@7 zpY|eyg%B!N7sTqcI#xH#1PU)+$2cUTlw_RBC>EvW1RF`^GGe)|PQVSKjZN1XfGlS7 zDO7clPKc9RL~vo`dKw^Vyr|O?F=qr_FNtv7(|Qedf-9o7&>__8LQpxjDJOLyfngOej2pE1OgQbEQZdQOFgrrQ2;++9fb>Ou9> z@MK?4;+k-dEXJn7Z%4KR=akVm6O;jTv{AS3m@#`yYcG?{G!9kV?ym}Qfur-CbA35z z`6(}=1~F$TeJv|Cm+sN=s}=a=z?&*LhXf?zEmHOg)S-*5q>QF9H+m8@X+z2&ypVDT z2>~;3CA#X0T}n65;)F0;da@-USt1wp$!viLcum{8t*=^LCO!?7>)peaQU{7s#d+Z4 zI7YE$4dI#VvYrH^@F62T(^?aC{0*kyE{A5bSn8S;w3Sk(g1hz^)olUww-1ULyS>!6 z4uc#yP>z#m(FvWcZJbB(NhR2)kXcMF_J6ZTjG_MN4C}@H4!y7iO=FdBY4vNVFjueb zYiiKmH}&z&q{guj6z_a8xRz5lmNo=0L~~G zw?oG@CBU)vDE5A(K-|3K)mqEZtJPs1W%hr*k@G!Tyhd%WWPWJt&TxbC*=NZccCjl`!0(y+}!q1<+uPt0K!@1P=EC zI&D_Oqr!`@5sb{fm9;oy%Vy`wr&t_MISB;6;89OR>MPSI@X_dpUHOdjJ{crKy+Qpp zl8KkA|S?@{_IxeMvEBS71X7U+h?QY|rw5Rh+A0a7U4tvOz~SCPX>zlApx;UMSRV2>26oaX)p;w&(AGY(Z=du(1AWW zLFK}~6C??Mz_|=wkshWmtD_s7_*x)p7t)UVr=m?UaE-DPJEhGUdt9^YntXlac!J^-PYl#K*$pp^9ls&FNz&?zlfVvLPbvS2KqQB>ej@|Y<)2eSO*sBJ=^4r~Ab!p)v^txOjI-H~jX$5?FR zS@3lM>70jhsWWeA_YmVl!@(c0v439t|g{d5RGdX9=Sx%B_Mi ztt?g|Lj0Dhw9Q7pHc?t>)zzw~2}#tf&Zf!vyzdXr(n|do17&s#NZlS~Ws_NT=Kz>T zi?6@}NAcn$-*ZmuAUNkx_8-eVmZi);JKff#WG&FM#d$&+gP&zw%U?;vnWjQ#o5K{6 z!b~C-W-)bxcx2R5%y%hm(Ax?nB&1&B)Q}qUPGS|YA||Dgfl^WvY)O-fBrTStov^kR zg!9&Rho%B*B2IG$=P-L&_~m~y^l5kP`$%=Zt1ibq=N)OAgkgvH?!zoB@I^6OUR{y^?}G1MZZj8r%`U^g}V^+`e>IlveGnpP(CH)tfSwRoCuqI=0zt#jcVe8)9$3oJ1OQCcgx zP;Bj6E?R48i*m!2b3nFPB&uFfchKrr!1t24L$ddXI!=wHozS7GG=lDMZGtw+e9ol- z7@HHAjNOvI00cM&$==NSG^o!x*=?!-@7*(&Ym{#&>uaDa--ajAgKo1k1f=S9no>J} zr@99OKGYf}O@)mIYKbA|Sj`RaKwsQV(1APz*4kp@IZJ2M-&*#1ZEMC8DIIWH@ z;3-M2r24V7Z^jWgGgLKt_5+4uzhb>KmDs;}ky3Y2s!G)M6mX@f`B`uRo6GDO4qv+O z4<@SXgE*+zd?=PkODid_VD=C-WRmg-$!#2+uZ<;RO>3|BekEv=M&VMw9VXG z2;M7vd3GyN-wY(`PS{4d&zUWea@;S%37(+U6vk=Yh2V0x&|3*y&ItcaplKQ0-BRnLRIS_Wnb^mdR`NGNzJGV!?0pD%6sdFADzLDx zr0z&|H-yl#r~^1LyU?(|Zn~5%*VNZUl_`Y_wTYy~!7StpDVMe1NV51s93W*TlA&*! zBmA2lfqj(a<}7Xio4XW6l6HZ_`_LWOVYHi9DNnW8GlNtAp!x)}x}?wVBi(=q`*GDH zhVi~cm}Zn!?b8PjvtOdBUQ>xNuz>GQfjFd3w*xlN1a1SH8wmARVVGi_O*LAq7G>zy z_x`u)uPVS1MH#T*MEc7*O1(Hv1t=)+ZP)VsC$^0eWcBqe(+cdRb82tGGhc&yeLHema63UZqY79Q>n|;V z;1qBRyA&;+e6@W>3mw9Y8wuWsn&t;{d)Z;9F62MJn9S^CY($dwP`Qu5hk>d3pg% z$V)6$b(sHl3pqF}o%#zRYn|T=<}ILmZuw8ANC%$ThP<;D@;}a)Nne{$Ig|c0Rr8W$ z+>JgRQ(j{(T!++MFSYRgH!=Q?nfjXO(BnIlO`)Fxf{c>zA!1iyB6h>9o~_90HK3vJ ztmo8W{j}NxGew9c5JARHr27lGQ!1$B{#vyg5RlYTF@wNdN)F_%GGvLvyr+YK(l@jL z^wa<0W6*#w4OEc2%WfVP$XV6L`H-)e_wjCC5zQ*EJP&di0pD1O+U29c<+=0)@_M)d zdmregB_C0qJ69ojl8jTKkwNb8D>(SY%G*&tT@_N#zw#w<+4wGvBBl=i(Z;fC$n56n z3%G5|B(oC?XR`SVt|0bV<`Zd7Aqy)oPNhXtAe`kGx*?XVW~3tSwrKBm#DWCcVqJiC zrV5c;+E=asbDAgmA(#X(26HKwy(vKUC1{-`TcIG*Ecetys(qHuoidC8HYzrceVB1B zQ;vZ@g6}}@AqU+ESTwo>xHg@)g#}8licsg8Yb2$~{I2%{1d9he8?JhHiS|lb?SuJH zOVrDy$frVN8Lhfw{KMt4dabJLw7cV7R=0sj0Os{QPTN7id}fmurb zuXLrhl5fi^Cna6x55oAf>v3e0VlRsIRy`zpR;E)Qf;k2u@qq~o{{k-ODg|1_M82kd zS#mqj;$Y8ev>Q(72!$^{Fo0G2s20qbM^U@%Ln)UQm9)AA5Cjei72o&L>Me1j#X$QO z%8hzOh0=Nda)Sg66H)M?dU_v>`zp{Ly{cNtsRu!quktHfNGnvCJuy0DG2a%~yR5GV z6*8%OGnShoqK#v-Jr4RA>I|Vz130o8^3fUE$F$rf>bAgtD|?gy#ad;057L6Q=RqCbO{*tBQmF4r8~JfM zG>MrH+|^EdwPbh4z=#(NSt$sNlnjtl_|OR7`2`^q^&oXS?nXaD)~(;#$JaxsF4=d1 zQ#E?PX}x08Naiyy4QPp%l}skS-ZCE4(Nzxui$UOC=kw|ge?rd&HsBo^CLaJg)Lr0N zVX3;fRs|@;aq0N7T4j}cXoy_vm(q(}=F0$mP^{lMtv?WTtfJ1sz)kYCCFcn4>Efet zNe?=Wt$@-2eMP`PsqHESc|kYWNs#$2zsKhVsRzUt`ehbB8L!QyJHnXMLT~~nh zli6hRRU@M_w{dE6nbxBfi{JwxFcNhaQn1-8dO1Hs)Ym&>7H+z|)RptPL(|1|zj?dd z;1`}|*+hP%&*S9c;aPfzE!YT+nk$3|R3WYnpz>y+1f^394GRe5(x~t(<}|`hkVe@o zJ|PWj3h3e-Cfuf7qISa&Y@@!QT7Z><0K||bp;Q6y^H9Hb?0!IvOx=O{3v0d+snb{}==9`Ko5&Be7o$`xop9#?D@e~#)magBUwwaePK z%fzXn2T3cr$-vul)Oiz4pOvp}A5Kq0s#xr_cN-AA>VOsq>-i{Hq;241z|{PASL`{8 zrg66b8d*!PA}lm}3Pf{~Qt}f0%iM|R3iTLi(QgQ*rEGl6>^VXf^1@igHXg6g zW;SjLIVnH59cTu3L4t?a<^6LGCe3v4h8Az zPUSwefZ5ATtdU!G&|v@gC$}UL)d4+L9uqW=)YaEud&}-Xm-W+BI#jVlhbk*(E(IGI zTdynxt@gsV=(f08v9EGV`%5SYgspw>r~pZ;9!~`SP_zTtYn@{6EjD{bfE`5*W>4r6 zRe>h}o75>-IO@=2S^^N~+a?qX*t@tcV>`s{BJuuTReK_FEd6rs0e-!{q z;leb!PH7m@326{Kqg*4$p`?*rQRp2pn3Np7MqmLvnetz^>KbzMe)2!;qk~i{q_&Mj zEM#lx8_K30kg{qxJ6Q)zc3Q>S|1)(PCddu=#D3GNw$bXh&&%&g_BRWd?H23VBmUpt zD;dzv^PK9z%gvtU$0AhMSg?HcWvc1`&D0+j?DxTcSIsVapIvRItIeLRwB2R3gIkc{ z_x}M}*QI1}RV_v{6oP&L^#Yt{Y*p-X4uNgl(80`Q$78^w_}%|gH6gJy(73@m}7 z%)^88x!ctwrM*Vi14b}Qu6abzu0^EIHcq+U5E91U(iAJIE3L%|3-uHU(2xl~^#TNH zxrLyL_q+XHp7n30AC4f6Eqy8KyXLZBt{Y>C|G+K_gr=Y;K#YB;ch@!kdu2*CGXWS) zzjv5DAe~nnzdOhf974oZudgoV-^CEcHE_cd4fNO4iZL8@8~fvkSMi)9s3RX0K=DU1 zdvy3s+P8v(RTQZKWlFO7yW{gfF8F20H8eZ+!@`9WL^=m)=%P3)=WKz2x|JuN1!`O! z;6UfIpzxVE7JMvFwB8KpAa;l7#@$3;kuv!pstyc62hsUJZfMT|i!c_en1>+OxfVpo z0`dnAHs^7fZ<1$eAK75D_9e@J%(vfc0&+}y6Q2S!5w;vq5JAMxOa(wcm!uStHf;Zb z_7W+loF=QK$1t!xC*f`h(!-MdZ3xC8_6HhDSm5wh5r480cPonotu*n*k064-?=4s* z6ThF5Oba6&6VQbKNA^P9^VDj&T*xBpCvG=xC23nkUC0S7n|mS#QjzuI3q_yO8rL|SicDG_F=pGea30O6^>ec4H~$A5OoNu+CS!MA&mJ_3kwY&9Rzlb7FdJ{ z;`#1mU4&~2)OPMdUhI!4Lm;^9!BWmgK*Ht(d4&#LR3+KJm#ofx73OKWEZKy6q}9YG z-xA7DMV47y%u;t6%&VsvS%wIa<;HxzS)WVQqwim#23V!5jOfJq)41x$a@M(1z8@cR zKAv~pku6J)w#+M4o{UHDRgeT0;)BUJ5=~1gqBn9>uRlOYMLpg0&Mv;c^_H~Wui8Bh z2>G1WzO@=qYgTOC%80s9(R_ia{eZr+f_Vv?0;kb2Y*;U(Frx&}0mr3$L1`4RdP$gy zEHbm)uLy>dp-nhM=O3bLY{7qZg?kc=ZVI49MTCXUz3?aSql=xqnMGgJpz zgRO&`D3wU!5z_Of_WWM=%sJ!(C zPBk`&b_%9k8IV^&qvO@FAW5!zzQK@H2#p@aMreQ;Ut@uMLwylH9+pyxm5-2#vXehk z6Dvhh=h0;fk0L7EW}e^RS^KJaUtxF|TykLnmh5|#OA~Ha@TV8xmyhw#8BVHA%aMJ> zZObHT1APXt?|vO{x%SA|sT5hI3)x6jVm4YZx8bA)(qEH*kI~%BX?Al1RGtn}$PKWL z9jBgln>~{_)j+`4S9-lr0p~!8j-XuTv|4=1OZmk0pxnSY`31bTTaZ>6P~GO6&TO&d zlL_^(bd`4FmfY5^89)#GO*cKIk}lovc&@bkz3a@Ets&HHQ8O^~wXf;-uith`&T@ai zhtysd;8Y_aCY;Ol*V)XMHQ2tFwu9D=Q6f|~1nzdXKXg~%dzC(gJ(75ss2#Pg>{b4_ z&_q(P>Qbgq^#Qa4`p7kqUvTJUF`Gb0=!_+6#9(R-^(iQY!eDQK*~C5z$GZ=W_Cm^P zy?N^!plW{+{S#Fkse1k|iWydA_QkA()A>&d;mdXmA=8KGJ9)6i+Mf(-&GjhuZh-Jt zY-N13hpixXw-ZsSE01mAZ%UIyYclr(eFghUL*Ih2++;KlMc@AtSZz^i%WZdPtoom`q~ye!yj9x{2pD^x}$;h{vZU-cU)7zYktv3tAzNqVJRv_>XG$4(7c*| z1uTHoQ_gqS^QZNoHsOL%b(E}r=hp_ORS-w`*9`w&qWfUz?2cFnA54$|5`ia$K!>+a z1AQne=zx)Cc^aaR)kTaROp{xTKdyV7eB~Si>uFiGj zB2O;l3v&HGyRHp%jrq1_Gr9h1XrKkR-Pd6u&;No8_?|ttKzNCIs}xQF_vsCR zA^HA~VA*F-v-q}#VKhEV!?KrWlr&=iB`vg!J^ocw!0x4MLW({J-CVHT@u%hdQ_e4s z@uE^MSqBO%X-0n08|bI5abu}hcT~>^jyo{5X3Y`i(W-|?ye#Siw`d&%5Wa=}BY#7C zoNyBtN3M}dKtLH)Egy zg(Rgwn1ZvkWpZa84hof?e`!hcZZrr_gY&@7K#g$RDdD|Dy|`z+xvg_R%$fImB=Y_u zuCKB7Y3_xk0G50x+TBq|Z9A&i-Md72jN6Q}-)H#>$b!`y5;!l_h1vo^ezP%@41y@58`KE)QeFz69`T$LY6D@AEu7%@zF&nCJBF$q ztJJ=Qd@Dp8^TDu}*NQn3J`Aw`TIlqMYGUDbf)8kk{d+On!GBj{tuZg>yyPbE24H*l zBRFsuOc(8uW^h!((0pRkIVaI0ik>4gxHX(%&(1?Jo5L)ydpEq6zyT=pKy@35Oa zxPcclQH!4RFi>x^m}^+B1K9^5ihz(({nbvvp5^~HsVGu1Ir?TgRX{C_b(ZO((BHL%lmd!~Z=+5$D$BmTb;zjaxpZ$7p+B>jd!&(a}$naSmMwn}WNm z1v~XbAG5BCSC&bV5em2G;o3OWN144m_O3Udkvj~6ic8hNs?UOdhU?<{#w|iePcmpj8f$CKa4u|`p55W5D zhHCy>`WD%!Sl^buC2D2A?DpT4deMKpq1uQ%IYP^Mjo~1x3nL-2R%`ruCA)eGd~Xl{ zKrgBtPS9@_vf60A%u&vLshCR~VoVYZs9^yv9UQS@6ib=;t6Z8l^;uPcn68B(Zb zqTW`0w2uN46=qgFT2nBsrkxy4d-JgK2!`ks;Bdnp7KQ|8pEs#|;#h6ZHqztVB$m zbQ@F!#85*CR_M0@;h7KW`oJF5^C(0r;5BFZQ&bGF1^F{m0MY#Y#n04GifSl%4kK_w8(E%_Y0OUOi6`_?#t?Z0o7KSQay{80zU9E2c5b$_I~c}K)W7<7ce z*%$|>xC;^)zxq>^=@8mOHnuXSlQf zw{}`$M?loFfz_(upo#<>>v}1Z6G)SSdo>bL+XK>wstDJJs@N)U{5>1dI4G*|twTE1 zGoW=!P$f`4cG|lSpOeR_j$vX=3U`Zsr5ols60&3{$<-S~cw*k6WUD_7>$2bZH>Hh- zEKmE;ygT2=sV*}-I$CW4NB_V2`;Euyu?{JEwPR?XOTX;{TE%|TPPc-}mQ{!o_Q8uc ze=`w-OTa<(_UZr6C-SG<+u?i)CB>X1wUFLXn^nd7d!l(2m>0G1w8w!rNDofa`@c;ML|m5_953)e~a_`t^@-sp@Ntf;vEC zlY`skwV6K*rq5IN%dL$X=7gDfBb=nCmENR>wElq^UUq*);Y zr?r!J@NlwLGBN*k?fP~tBp$|jIQwq}Y%rJb!GEl8do%m^M3=Si2mhZbAbMBquF0xm zG#ib7}UA;sDh0^d&v2#RcLFdZOr#qkP+}io4&f3m1orcSsE|*-M()CF;B+qj|q)^K2~pj*xX>&iL1r;#a3~6+>E${_`UJo_^~5)jF_76T|!#o zU}9m?Uy~M(e0StS$=@W;9QE+14Wk-H-5ynzGI8`LqgSL}OWiwW?AWrgbz`YTs&fu47 zfk{;@09(5W_C5)cMx}7eU!)>iSXfB=tAC0B*P=2=Zi8U{3DQUs1nw|5j?@a-QzMpbx83s99bS^M5BxYrT0bC~7cn&lcrlaM9y?@i)rMeE=!PAu_IpQF8u7>01f zHL8K7Md+(#Ib?z40I*BO#1ousxgG>ZY!%X4cO1?|Hw$oWM zr+8c$o&rT>$+cz_G|m}g@>zqlQJV{XT0QE~2aEc0`W}=CK3XWYZ^yAzyiRu*)}WK@ zhebWHCeY#*GDtqEF>s9x1OBJZ+(=VOaSp6@lz=)&*KnXwh-nI9#B&5vW3+(V%MQ`eyDkq?l;V#F-(@ z+F))&>+z{lJ!(PA*td)HxobCP(lM{nfH}!oUNi~;N07-tl(2B^$8JhrCGdr9m1!9iVVUELn4qRF+y8+xg^!!&hk#zZwfw_THe#*~6gG-EpZUtO~XbT`C z^!|!beO)d zBwj%kLtq375SFRzW8SLR4GwJ~>*U1EiZeL6Fpw=1pF}JIJijK{AnF!Wm>^Nn!XVFa z(QXs?PJriIjNENn@qt(08!uWj1LQsc*R^nHkXo^)UWutypsek`5%!Z?(%R~PS!@e( z{IAyD2R@4G>K~pvv%9lNHknBXF@%sEAVQ!4mOl*vLiQ37qo8aNZ3Ha~B1Vf65D^rz zcS6)v0arl`im)o$_&->Rw6Gd*#HXb|87+JqGPiVv5ruA_Pux3Leb;FrKHCr1HQ<(o% zn(su09DY&Y2Xd6oVT99wa?$()a;!+W3uG7Rl^RFDm2!$r6L_<)N2n$6G*uhQxwc_b zNyD2G71;J3Y$^%%ZU2Ek^#ltR3vYdqfXS194WEclWZ&}S<46KO~{6F-X|ax#X#nb{Sg+77lplFCI~@UO|soDj0>0} zImQRCA7{1}haH4YgL~{s^9(%}%yG6ROA&xbL5pnWBf$l{Xo1s|<2;Wo$BKai z$o(%9u*p3_(3fIi;eIK6zT3O9jZGvqR&675#qY06Nw;7S9JEfB)WWj@y_eW#dWSh! z%iM+>3rJyi9}HaW%}Cl`SCnJ7g>r_HIz-O0w16l>hMI*+g16S<7S2z=_Oxn2+!{K_ z-!COAE@`XkiQG(a5wA!7GR;kNdGvR@n%%lz>U+?&(swJu7u-bIdW&6qkSN-X@ zyEU5-a>%#mig?|CIzpO5(3r5dU$}3YwmE?+>6(nw2r#d z;fPsHM#xf^!6Ev(R1ZJ=n)Fv;L16r!*n+^+wWL(u%?6VnrJgmUMw%u>ZLOr#+K4;j z3F{VU<(YO{u61&oapYa$n3bim5$V=ff~j6LPQ4~T8_4xYW&~@zi_nOxBx{mQYLiG8 zu{+HqB-Q=2$NiSe9hs?gACn;%E$NvPl-UR5bH3kEU;8ip_BR5~Z)Sl0^M=&b&&2dA zBPL20U(zoOm7-PNWeL*Ulllyyk^bE42o|d-lIUL{iU-+;dfIr4iUcj!Ks(b`I*21~ z3zkUTFA}|sVg&)nv1Nvo3{0lIzzBovrp-hi$YbP$cRcwJK!Ikc%r#`zOp+j8MO?qW z)!AT-R#Ux0Cb6}SVmhivz}}~)5arC=3ny~zp*^yA_+bOY^KO!Q@! zf(}PZy~Mz)z&y9-%G3IS&LL{@2GYb<1_lyO!jVZtNKKS>SRN*{ht0rFPjKJ)kbqr} z&XGZ^L3RtZJI}sbNk}Jom-*SU}8za9| z3tFmRIX(XyZ@#mOVlOCB=P59!B!GWt^vyE=6M_Wp@En3I2UYXym_N<-@qb}btty6Q zZ2lgTQ?uy)xie|HAzx4$MZ2b}4lGT4^z&x|{@|nwG z($3w4A2tzTT3t`q+A?kzxJ!E`-?tK+)Z}QQ#va9g0?u85vTa-KBJTUCv9u-)aEV z6%oSK;Q|kN9eV6A^m5T4s~*C`FIP1>E5>L{T*0bk1mM3Z`NUb%$N47>#7SsDWT23~H><8km?HO>zyswmw36 z$mIPen9NM3A_)S+2u*>v{!D~SV9^AZb&KEr3G3Ddct?XQ+IfEHS%u;ZIZrTZtZkbG&onh|FY#oqrdM}a z`lkhET{NXf+PMRB?zaz?!cv$3eS+-NUf}mZyR#Lgicgn_WamznCq;k7?nijd9EVO} zgyP=^(XDbmS!w@-o@HBUiGDzC`x6TlKP;TrX}(=PB@0X~gk`Kpsoy5^DNOT4Ahc=7 zlXr(Jm1Y}euxhtq@(Q6r@#Hg+;SO7jvhl{XH3PMk?fL~8`Jsd05(k5UD%R9Hql3KA zLvNXSh=X{%?r6X&wEb-#(RsFDaJUPYkY})0bFZNJo)g%~KY8u)lnEpqw=gcnSdQ}| zPBUv=_Lzc(bm>09<8IcW08#0EX38+T3@fy!reM8x-4dITunD%I_2nIs;7Uyj;wBat zMr#baMc!7S#T$HtxJ>Q}IxdmUc6KuZER~=~@6>Xf-9klxMuaH`l#52b)0HU9Nvebq z@mYgGW%bsj7JAK0%y(g!V9#~)GhSfbYsuCRYsuvPIch?jAz#!mM<^uuBETY~k1alB4BQTVlux_es za=>B>y0VO%bTfAiwX+!P^CpB0uq@e8lcA6Xu#ELGsyYx}6EK15HH+pxCDKf#lN_+f z(Ty`80p2I@5ISven^4qkfBJmR*}d0z~Wtb$Kn?_g~f#{F4zrUI{|E`jt4 z2K*EkmYXqdZ=w6JkfV6)Shf!_HpohXHX5{BJa*g6ROp}w1qKCxWmQ!gEm$bh5FiaE zQy)Yz-%{c{N{A3+!-)_H%ohxZQo3DsL5U2K&=7;>5O^&!u_ZvO}_{>V%_0{Q(sgB?rM-$Dm+g>t#yv*N%4KRzXvQM&*+aYaK9Ykso zdkGAm+$rr^svHxZ@02`40tL`Wk(r{DEvYEj`Mt0|+i=|{KDbB2YX45J8JK32S|ZtXj~9;0GD5J0FBTl=wj(gZv#5QbqauR7(yxak44hJkss|cSg)fOxj|Ga~26<*FwdPbNabk_bB z&0wmkpR&eXIB^~sxX-Zsc%U}Sv<${!Z2BI$q}^XB*4tm!70 z>l`kd4fCV}f@;_=fj9 zT076SMorL$ZK@E-mV5l!R(1mRDu&y<`&aORhXFTZYs2)4`oY3H)j>T;``^Su#Y&4{ zC7cj7R~GbtD*{~6ESZmCE!YK}P&La?sWE{vPtxyl>{d3a#6h2|B+!so%z6h8oiD$s z4P;ASvq;)q3zvzcDg#=xTh*vL!zxK^?wR19B|wzL)bgjILg*!oAMf5hc4rhRMj%P zHzAxD$Sh8goHdC?hh{F29hYbMJC`&-Ez2xTmPbT2)pn0&5oTy32-Eb_H5Mu8o+)v7@6M`!x*Xp?f8)j`P^4_dnSt_Imme;Ld0exP}5IO#~ zhBSeN6fkk4utQOoYx70#opud^H@ug83Wgoh7xz`jWg`elvl=DeOW8uRB@t>u%oJ=d z`8?Bmo(8(-qV~Z;5u;0yJx=_zSj(13nFaGDU;*wslqRz_J55Ju*PfL<0mYkUYJ~>V z*0U;Sy-mVm>>Vw{4|98_t(8~kjwGN9nhp?{VY3*El?9T8jf4f#L}Q7-G}XMjY7qsE z86_lr7_kwe*@qrX_gd_%UQE|2q`+D@v%^VKsw!T^=qh2BI784@N?NXkMFefBmGugA zrGU@I{Q_l~f;?<;i_KS)B$DbRA?UFbX&%Iq==jB{S81yW%)EwdERrZM=|w=1=q54d ziNuZCgTg+M92K)GC>%Kom)$SwRD;&kGUQor*LtRu`;njTP(_AvampeI8C$XwGYtNVj;(xcT}W>!5k-SZ>)Sj5+f3*H~)b}_^9x7FM;RHS*nt4 zAnUSC+ODk(V%u7yH4dA}`bC-F&qCOC=$RSn=!)R_`oYH9%%&6xL?l!gihUzcfD9gc zl6Mr|O3rF@UMHwmEXf1NhFQAvl#nXpw!NRr>Ru^J($B|BRY`KI?8laiRn7x8d04iZ zH`Ex9ksm``1BrQ8chmwUM(-!|XeHfj(;u57|5h?a*y|luRKysB;*86s5f!vVrqxB# zZ-(CG4?b=U5$5thlSVdo32`{PD)?_!#h5h?vS^Ml}dG*bb)S@ zUXlY%ajx{TWQlrhY!91f31&~C_btalcc+G63lHWhAV%}q#YzOO(-ZG;GQk%XOe#qf zaq?R$CYKS%dv!iY(b@qPbs&5{HY~>4Vv9f&|G4tc=MgT$&*2nm_Nz4%hvuW1jQ z5AGE4w3YaxFz93bkA$Jtax17{=9@p}F==(LOSq%%aW0X2P&gjXyF@2oBSrLGy8Z>L zOT@!}>R8__Ni~*$jb{P9E#_Fs_LwBSpG=mIt_8k+O?|#?cDob4E7$%)dYZa|?kiV8 zm9Ry;e<{5TqgQ(d!IH4em!Dz2 zFZ9@Id7(nsJjLUaMmZhM_)R=f~Xqq7d7C z9+Vcn+8KqFD7VuqKFKHJVvEUlymgt(-8%mc^pVmJ2tSJcf&B%=4JpgjTaT6t^ZJCI zg<%nullccQ`6H{?t+?}?q!4I)iH(}C6Pc$XG7^NnFgrU!7K6GY`8wn%`-fIw5|fYS z%U#shF$6zg1V7=)GUad#^Sv&zP(di3ElH9-5zyZucU^+IQY^E0m(K{LlJu-P)nf6M z*MS1u4Ki@lfX*<+8@_xHoX^2x+{n%evxMd(^NI%qFMdD7T%Kh8h+5{jU8>*6PU_Jz zXLKTiup(?0a)(g^gKCaE+dhL&qvh8!zLfd8R)i9GC+T?{s$n!zwP0U;ACm#CZ@&V9Gu=V8aG7peIfE%gUF`|KPG^68TOP-u!Egw zkE@`*_C_!Em+f!`;X-z#UrDd!he?Tzhe1M${)hodsLEXIQ7+Cxp#%3R+B@BrqL9~fJ?%r|iUVgGmmR}Gtujb2+D zvq*>M#w3aV=^!>uei+Tz4E%P^h<@#TtO=7~3G~bQ8EDyFWF8!@%Y@je=&t26jQ&Gi zQlCFx`K?ioZ^EJJ_}n(bFu!ctXpR`)=$~fKS7HeD;P+UhCGaO71JFGU`hrnfpJoT@ zmt?sA;*d#i@+g_K&3IWY!xPf9Q2IvJHlt~VvB966B=sjgEGYp#ZWL0_!$J81?c1(B zq!uUP!FUi_hbQ9Mn8z~d)3vsqP ze4zj8HCkwzS~kR=pM+-~$(0RCQAC1|^IlGMHS37%wdlAIZ-pmI{SD32&J?4xNFocl zmke!^dl#GYMvmSHvFT{&ssG)#aB=SSmLrYu>wq-&1f8cx&r5q>y7M8S#+f57k-O?L z$Q9=KhW@m8~E5* z$YR<|$kMTV0~x z;Q2Xr(dEt;1x%}TC@qpNx+b#W5(<6DxZ5Yf=Ahk(m04Ia$_AiBLhNN$YVe&P)p~vT zVjj-K+$6XT1xFkqyMgPna3{@fL__w=_qR4VqcU9oB$tJo8IqB9=&DhI=8pWT5m{nU zlv|12y&OIAiC>A`1kl$~DmzECCMTo6srO=QRwY{FQXS!c$HI%37B-ga|jOyzG-J1J(q3{|YQ9l@W zzc`vw`?y^B+=?*PjM-4*+qnj+G!M;=G9Qk`W5VozeYw!+4!0byhgHED_GAP3c$CXo zOntp;p!`}Os|%5)a1?aR=Y=t^V=bt%@9?_A_cWUMMlr|MemUZ+pjx6k*>M!!T&e^y z^<+L>@4fuO6D7ER#&X(}RHuX^gNQakLr5S4o0}Y4;5YF-WBaasTbk`zh4XB=%9B#G zQ89dVAeUBA-)V-8utrI(^zbLNgS=7v!w%xgm9+`mUy@n?G5|deP81hhW9DZ!ITk|B zs$heKkHX?H%Duje?MN;*mzg8yvA19J`B>1`j{U1HOpwhAM%R2L@khZG{TW^dcFQEt z{-bF!2Ewjn$XyoY8R^?2QfG?;7EF?MYl8lwRFjgfPSei=V9ZppNBZlc+ zX82rV}A<$43PRhY}b!9!UWnY{PK7cm;JjT z)4SU!|8Cm>B{mP6VqP{9-h8$u^VtLGm@}iXHw!$f^UsN6c)jv<+dguX|H|kH-T_)`@$y`` z>4!@iY??~PJ}i4HrHc^Cu(Q+aYhNtXE-~dVH=Y%kV!YHryCtYh2gOE&X&66x1mLY+9a=^R~ax|98yg-+u(#h!4z#$-#G( zK{11}f~nnlrP%>}D_m4?<=VFM&Y*MIvwT!2AF~1bZX*?-KA3K5tIPJ@<-U4s3~!-@ zG=5REf&g6M$MO?;VNP8Gtn9>WUXAyJ^I_iMqm?lAZ>-Hmi+8^Nt(qo9uJ1YQcLtp9 zTX3j238}FuQXq4s)UjrQ?3qR)%hR;{K!)Dg{XVuM&6YmjX~c38jqYEoNcW&?MkB^( z)7D%`d5BKYUxRHA$}!1Kg?y+;&b&N{gWZphG`~6wuamhYEDMEIRMQ&@!N%;%NHAzT%(6Nzo9J#tW_I^X$KK_ zGsQwR40gNU+4n9s*u_i$?BVMG!H-wg5AXu5AfF3-s$8!idR$+uw8-5&3@mEZdc?ja zwd5>fq0MQ|V<3yNK#+c(hoiWp412v-^o5KDUSG$}+hG-r zfeBcO6RXWk3LihK(ec;Wv+?&dY;=BjpWUZ}nMt8>yCl*8?7$IMukGchTJHX8W>x2SI z4~cw5eRr}>W_La&u?u32J8K4;Z$WtvNmFx`SR%O!k?J#=z08i7t_1~fV}pP}d<}4V zA!!yub|qU|C#vvmfz@8VfKt%-Jr3rwddsIs!pCe*eaZnAdXP$!FVQQs^}SNZKDlrD zU71a+-`|iqgbowgm$j5{qba;i&BTr@`>L3)SkO?Uy+o~h94&o1V?MXWAfPAOjx!L=mYdUsodWZw*g{0o9 z>Hb0FG2+iaeaDPOYfS>&5vDTLl4$UrAafa7v6!lSTOSva+6T5MvER?;Ps`8LMnMYQ zZumOyVRU4}0hwr_)1uC2RtQKhsK=#7#yOnS6ljP`FQXroU^4SJef{KXvF@!4&f zy(S*z5rYmE@^v1VslTJhlqChEh)E7!hsYV~wqfTsUIgU`^%$JCFrU)BovNP&Uk2nhS#Fg#6l}Z@D-%;ILgitbK0u|DYETZZnrnO z!yQOC><45ZQdi-p1O`D7M6_AvP8HcF8iee~=5aAK`Bn2Wc+8kMV-1Z`|4_<9i;f4} z;Rn&&wE!_tzUQNDP&VgLHvn!pxR~q@Sc7t)(yQPZ;O-zehsNSEW?l}M)(HCA=Ry&V zz^V7)rvs;ZQ6aI>8I41B-gRj8YB){?)UAqT-sKM8hi6R(RG{R_X;FIg1M1tp^(6c9 zh64&JI1G}S&9GgW8|2tcK!oz7T`!}>D@()~CD6W4oe0xq(1}mcdc6VmJ!VPosPz*T z5&mIbbl?Z*?~y#}b)y1%tYVK6TRq&Ptcba!rU5W~&H|Z7&EgT3e_^XSx75q0lr7m9 zt85$I1~0mr29fu_jQUWu(RZogB(%Wb9am13`aI70@_Ces7J}v8iNf82(J9mqq22-% zQ5gzz9m&8dB0@M+R><&uoDiV{x@n{P1?@h=cYNs+A*WifP%Hch-M&)7_|%v^`40u$ zLcVsR-@bafJ^huC`){Y&@9<(Bss#%%5R%^s;U-#KEVooDN1M}~(I)7t7UsQ=`SLBV zNj-Ve*}=l&Bw8Ug&k(L6ee0y|7E7CAYS4mtyhZ0<`gkYhZQIy-7ziItXv~_dxx;H; zmr-VtKl*s^zKWnbyv`=)W0KA`>zetxZ^E?>6&JIQuomCLO7O&xzEApD8M_jr|TF1X?U*W9{zlsAaRVBU&FiJ!|Gz-yf6U{*q0_RQ@CA!qK9 zd^xR7`DRb4Z0=oo3Cv5W?n+(a4J|JBA%KA~qDS-`^t{J?0xeE}i&O`@8y_LkM!g=( zq3%X8SY92s#zwa<@hjm!6r!g!r{fObwVR5y+!ZItV!=8 zsGvl=4tq#OwStx6`~+5_hg*m~AyFDvpIDr0AyBSf)pYEK3+;9kDiazY%ykpc{mbmm zXe$C2i0`2=Rk#9#gRox=<~yS|h}#Chl4{J>?3gd<5_8#59!P*?l@cgeE(C|9Ti?BY zudrHqRZCdQ@<{alrHvSQD>LP*6Ey1gj!6HYMfv!G8Y@2v6@LxQ0!tn> zDbBjwy}2my3uiFU|3$=8xVry)_)dd7ro+V#mzWz6=Zux>AOngtcoOr+HOpJP zE5F$DfC_E=j}P$T0qOtx0VzUj0-1S_uy08v?M?B%E#_@ZF>cd~Q9pHpyrd)vPDLdf zFV@v;4oY-FiSh-zkIZV6QYC2*==xHhI-pL;G|s+J4DM*ZnmOuqM`r)!_Y!}K!Z6*% z_*vlNT%BI+e2edsu##LE9A?7KIPE)3-B08nFq6KeYv4JQW};tLnF4YRqMOk+CAO+c ziQQw>QQzOA#BP(cpM{mv(4(1*hw^RgY5~F%7<4l(7%y#OFzI-Qz!{9IKgfI?gzYat zyyMWz@6-))C1lgse2cuF4!D;_tFzWB%j8Q^2P>t>BeK~HY{*PUSsYsqvRF`~c1uTY zqcdQ0#S=P-s+mOy;JU-ua1E&p-ttk;1zeVRI5)*fdbGqLA0hKWRjom{-lR|0I zCtrqUYWX3#W&-ts({|P$w*wdgTMKn{X|I@*F8^5@f1PnRVgQ4iH6QT9*aLL5JX%~T ze;tfxox#MlJXq*<4QrWTsa;-NoJUsQ^K+ppd!tRLS8_$wm_g^E3eY608dsBph_ zD~1L}_AWM&hu*jDMnkqe0wcj}S0x&FG=LC+@@aw0%S}3z&AS0CX}Now;x^VT@cOoy zRByi5V?X|GFmIsVSDpHC$}a;l){R^AUiA7tJqC@HLET}vwJ^ggJk9|ojF2nr%roqu z_KWwx#h#q2aM0#4=K=~QmU=GX*ta$k*me7%;m9GYDPm=&Mh|IUM zIu5AAO^xn!%f7?e7 zO}i-d6+i?xwJU`NZz(kPNr(O#`yw#i<=l;JBX3+Ie-9=Of4D#lCEkXKzhR!GI_pN? zKKfwLz3Eb5`~wFO{8bx9z03nBXoi{7 zO0U3ql`=eb&6tjN-_8K(9p6KOzKdqrt^9hl22(%bUCZ2%J3Q?>6lOYs?z@-b3St`% z0Kd2nWa4i43ysQ&1hsIc@|?qu=w#C^6+q&`o9xb@^Msp40?EPgL0@pdCRwP(j+ajf zV9y1I2$!VZi$Z7<+DVxY^4;-jboL#DjSZfA7k!G zw*a+06PyBpP?=d;*9D%9H`{A2DoagV0wXvz_)8v}E&`mMBuCzrj>0CW_~R4x17FJ^ zFp<5<feG~g-jf=YC-$onNY4E9d8 z7c%h}yb#_zD-O&2Qw-`;9XsY;uW!^6DKdujy>UaMGrEaliL1(5syt1aEm)#@5%dSC zCZf05Kr)J8-*)dRsh2da9g+O6WC^gQfr1_S2#r5FrT`)GsnD4OuIi7og9KSsq zV_+04`}8~2dC~B-CwxF+nynJdGF%}+vRB{%47QVg(R<$!R~>8R{(()nMD zWj^)K{dmycn6?3ew{n~@by1m%QoDo%B|9GqAJvv18h}*S+fFfW$1Eg9CotBSV zqUv5agnAhWj-gJj$#3Yv)I5$wq|k?fF)K`VK+0i$z>;ulCer^HLEepA4GTjKz>5Kd z4_Fe_p_{Q08){_X>$+^DmmCHL+HbU0AW%AzcYn&OoX3~+KYYvFvaGqJHOfYy!B_DZ z*jupe#_{Oma18>l;}ucv1T?hEX8nE=Ym&RJWPOiOcTtkmv{8uFWzx(UW-wB~0R$t_ zbi^WWXS^9`l{*~XjyfwfN(>(5Hry>x{V#6chEou-42Q9O03w*U_6%$!^JXrK7IL@E zs3Qn9c4-KHx|GK4Qumbtn$he1$5Fv$Uc?>6{FNHW}uK-O-Cv$w)# zJXq%`oP!Ef6$sCLw#o8NH@p5(sc$^Fi(JtZSMTf~jm|xoVTSKxIIK%i1q=QWWXn}J zyMMVN*QJFlSXan*=q zr4E$4PtR4V1|b8?0t!yK2KrbE%n4*|*#rZeHC~|eqguWVaZgxISak_gD+I%z1)?Dc zg2pcqpU~>6$a`D2%Q3r>^og#+XJoZRR>7D7aH-%gQFLH5p+l5`|;Y&X>jRH z;EFHq$^&%exfRuy56>Yo45fh3EJyE<8bs-HHDe!y;x{IB$?vSwMhY`6?Q-!z;id6p z!GmP`Q;h>!2u;<7XoH0u+u&~l13F4=&qY7Pmc{H&I?DptsIe$~xIn{t2B8y!!$ocK ze`zC|8xwyX34nXgR`OTVa>=SOuPkR_HFQXSC&`J zS_vg!HjWQ+S+ekZ#>!lfK+yh}sXYLK)OnT7ykjKdJ6CHXik8C8+i_+W@R^)p%-8hT--IVb{-NVHi++#t9Upr5#53ZTfDyzRVf@GeFUuh^XQ2zrh=t7^D0T{IO%T2A=VQq}zER8r1iBN*K*a!q}1(9P8qTlk`{t;`PG3=nRZo`RR}u83DWe`yGPs z;*CpW{vzy(%WU)W@5RV>G153YN>gjiLY)1y1Tz9$YraGEZZq8IMV1?Vj|UX2VwWR( zJx{jEJoptXlX>JP#?-2S`&(ZisRHQavmHX2vkyDO9?7>n8=AhN)ke$VNx~dL#){G{ zFb*PkxI#8d4_g=Uc2^cObLj6O!#zgo)8YzYOp_8D$ItgK$p2$XWetU5pf6UW!?D?t z9`d!HD+2oY|Cv(Pk^w@sa-xmqA*|j2y(u-R7Gh6iox)5wZpF%Z$#yk*KGnJf8+WoD z>1ja!Y6e*(VK`~UlAk7@ifP!!Z3!((H1XaMvYUq& zqf&RJ{MQ=i^JVV76!?P`7`2|$CIjn@Fbe+l2OC>}H=lwoE4y#P39Y;`e%VuP5+b=6 zV)l?+?5xo%b>7j%*Y0>uP;I=4ogu zBGd-`&#dS#=V8r!==!&?UfvbE3*B=N^m`}+KzN6-UL9&#s6z@puonZ)=pGo)nKJ*G z=8hD*CZg5=5Wn2x;k4n46+5H9hjI#| zz9A3im@!B6yD*z?BB6}au@U4c6;}q+Lok*%+P&D;!Fkc^O);F_@)}us(mRqpfEdd+ zRifNR5m4A_YGM0(hVMr=_vGW@Q-%ujggu&j#P`yE@gCOI4T}NO=mvBS*05(79KVLG z!nLp@r`Z#?q0R$CK8m|hK>@GBBw7lis2B)WEag;uSmv|qsjqXuz4A{G`VTE~w3Y!R zaLG?{Z{c>#rWIRf`<+jtTc2sdJLSq=U*ySFvqVblr;DP)(w)%(5%xF4>qBFBC^!Z0 zS}{X(0hlrV_nPaDaWO6HJ?@wJt&pE54PVE}5r7NK<;M%RyUujg6ZKY;kAPqw>OKSR z)CNKHr=?tnkT}%vr9GGt;PG?_U>0>ekN6+}tSdgr1RdkJ7oGjAU0Y&9#{Uvq@PRtp zKC)Z{D1jtT3z5p)v1&LV$T59b>gg2M3Q_AiiN9?|F~9`P##S$oy63%Ay&(r-$YUn; z=$J`8swx5X=n+<6KnhzdFm-+n1u`jWdqL+HurBN~d>2co@8SyPCi8}!5ZY9XVHGeZ&`%@7QIi_E=x0}eRTCSnT~`DA z_?h{*wAPZ7kr7RUxgQbvlrT=ODHarkSvIwel8VYN7IJ93I(vs(zC5?`g`d zYQf2IM*O0nbGA>oIYxayHj3alc@VBSI>!My-y(LZ&gdh=%v?S~bG>+zwZsMU;s)&( za6YDC^e;O=yc|ZvMdZ=)F$4;0y#s(<2KyZ6U$sj5v`Eg=ZeJxuyR>;Z(kd($UDDaL zRvsqpN{6GLSOnz|5sY=$)`?QLV05eqIAk+N?IW#x2Du1EXQ75$4HHmz0@j$JW`!_e zP~oNp=NzJIE9E_&LV6TVT^?R}awr{35G^k?x$o-?ceqPOgnTPfi(>OMT!$^vqx~AF zV1Y4q!JSbX;Hh(g(~E5Afi=)H~E7jQ82M<=lM9zi z1{iYtY(Q$J-HGF4-+5cw&AYWbgkkhL!m}(DC0Z^S*BocP`ar!v7n<8n)tUN`i?ECN zkXzg&HcyCv*3-S5@=J3se+Q0r8V@AEdSX|`#M%8`xu0sexu^Mrxv_q)JL0ZR;9O+2 ztdm2lwN0vp-Xrh9m=29Ir^iRLO%rOcuMVT~FHd;6_~f{YOE0l!6ESx4W9}JkjUl%KnFA5c2%OVT=(I<{}vsd8WKmHbnh@TERV>|4a?aO8U8=!5$ z|7|<@PyLCi3d%cEtt0su{ZK7}7knRP-07&?XW;gi?NqMcQb@C-a&%#sfy>bMU%bJ_ zLrC8V|NS0)EadY$qs|i&Z`iSz?!A zT{BOj@RaCXX7LP=w4aN?yR8(7-1S5oui29fS7xzRpleeEx^9zP<6S>PYH}4EmSC^} zi<+AQ?L3L{H9Y)uo7dOnXj6XR;i(6$InLGqKg*Wn=Gg%vjqd}zC#mfCdSxqKY2h5;VE!8w7t~ivl{1&@|_WHjB zZ>su3(V`0nMQu|~vL%kJq%I>OT0XKQ%^?0{i-=4`Fbu?e=K;2^@YsiJOroCjST*Mdmk+K<37QYmNV3A7!exc6a117lLj(={3~_G9M4aBnK9X>JEFLWib{( z=zQP=81iDBAB5~YB`xX&n0y`(pPBX1C~CgPp{0WWYEm(zbPV^5r~TIrWBu1%jd8|x zk0WX%fR71l9|wx%kY_d#v!r-rJqp5s1NYA#|KSURO7YqJNf6S_!~Or;qnm#g-@kgr z9c%Bnee9AuZklfur1!h?m)yTLK_Hee5d=#rPWi_he!6t+{O4|8UGs%S5X_%J|8&E* zaQ3PdOIEC2ar=sUm)>#jeRnKfw0!aEyY3zT_uJ={6#SoVZ?^Y!{{Ds*G}HVU@=v$_ z!us!Szi9kV|i>il2XegzEhFkC=410`33q5jPdycdcW%AecY@ z{0O=5-#;SnKY7ID!pHym$2>tWfByLqcQ5|8kC^Zuy~RHl=lw_7*--UwAMy86z5lMG UtTt2dWc+`(CO(P%7 zAQ{bMMk*tdMfT&M%bfPG|6l<@m%V8<|3KLDLO(*+1$5k_zRw;W9+{DBR!>mEC}+Bu z8R2ejZf0(7Zf5TO^4CB7(cL@zjQ;9(hkyO>!QyZ5o&Wvh&cD1fSj_YEGCk@J)6Win zeCLOq-#;66@!#U|CwG4EqksCrojX7Ja}?c3iuqtRPx5IxIUN+!yV?0PkAL6YNJi;# zID$p3d64J3Bj_E{{8OX{@FkN z!<{?)k9~Bcy^nvFJsbY-|6bF_7wFxm`>$UnNBQ{_s137mHor35?{1)viy}?>OMUN4 zr+{cOKTVTgy?*ihDQS^SGVNS8N&3^lNm_KjEb_^?FM#$*3iJeh%f1pSB>kOaV>=mN zbYJejI_y2$fAT!}hCg2)?jIiX9v^(X|Jl>SWP78ZWJNMdr{lp9$n`dxpQ0+EUJPb| zHpv4+yWR5cx3=!y-DvuA8xWI6<3Uj*{qeUBcAOn81EUa(lHpb2;&K}_Xq-<+LQ^B@-Gt+Gj=uFkOnvo$vIa6F{A@%o zW*pa`TrR{LU!05+tx>Wi9d(3?5X}4{oz1|I2`N-8hEg;wsx3~TOYZfGbPSq;Vl^h|r4L7SXS@?nx6Cxh7$WSLkF=JQ!LT+GSYJjqTbU~=;I6s>bS z4xq4uWZ`CL*<;Olezyyukov_MLpds zvae8HF*tnj_(d|w=c;0}`6dK*oNJ4%#py*nO*f}i-|XiuZec_DCd|vo|M!!vL7sGQ7QhHX)*^t zWFDF(qihCA8-w?gY865xAgOb3xfjNCRILA2G%m3PT>(*A?!V1O^V5E4@X2vdKo|v+ z#dzGov?db<=djPE11IwBc$S|h`2x!N?L>zXp!j$c@k3is;9ui0Wbd-I$A3(GuK4T9 zf4$`|!Ni}O^2uqMot(NXfp)Va1vMzXT%e)hI7O*RHa3`;oU0FHV(kqkCsMFAJn6+x ztXA}BmyJfh9hr18sz51!8;tNkAcS9De>NCpi$Z~4jnkg}w#vhNHcDq06@oq5XOZ|} zwVaYk5RD2}h=-2m(?Qvu{eEXS<7|@lygkyHj9mTDW`fCqxh5|K0UR%@lPqiNud6;d zqTz8}O+ke=9n~erfL5W>fEGUP>Q9xK(`*E7egkN<=w!qZgw{QdV-bB6m6_+$DiA)1-VgKnJU_1% zv1d^!*!0yRd{7nhjpXeto2T2bd9REkSJR4~*+_;d=7ofl+d0h<0J*Xm1O^?fhwbqI zMXWYwsB4CUjjvi^x)_WXDU=vlv35Ky3Df2r4Q^`NgE1@ut6O5zJI*m<$C^~zi5{;G zdOoQLEt?TY5nz{xQgjt^{Ja+QDrBjmpcO`bT=Y1nEW_q=&Mx6OXHsaR^Q_wQ^TA4O z)M^QE7o-{1Zl;7<;k$~@Mv|SMDCA;x#G3qLqLrP)FzI2ku8vaF2oLK@R<(9iT3&d& z1(pYsbf#_lapUS{o zeT*SceW-I@<=I9u!(uua4!96mOh+)d#4HZRu%TZprd*}72fz)>MDR#gt9=R`jTi72 z4`JginFRh2f;l_K%B#{@k=T_g;pz2tQdnZOX49Hj}C!x^U^ zu06OkhQWS=&qmVDCi5+~XzA?Ws!&02wd6~r^{_Tzwa&8(cr>_HQqwpBAS!KrZM?xC zcGZ_;$4Ppb6?5-JPnN9LRu>4mfY1eQ6$P8?uLrRKl0justY{zjQa9;qZAg&|TPG<_ z^Tl{H*_=b2C)DAP%6?==^pheZLtqZS9ZcXR!AcU+e`0F~n8)wyIz2gFOvH96niYvx z94+bO1Xh`^2()*ysK7|zQ_3@mypdq}2yDfc;Lzdhw5_8Ih8h;2vZM_B@R4#YJ#ECo zse~01RyuT#O@*>HCY_otCl1xeQZ4iiTMZr01}9uRDrEv)xn|3h_u{=^Ir@ZOIi<67v0}i5NtP$q=Hs~X`AYhdZ;C{u}?Mt2B z{mX}a`gm@Gc$jVINP}Yo`0L7`7m#Vs*=z!nN8IHzb-K*b`2t#CnCIj6EQOC73-r@= zOK|f+d3@x%Xi*%;rV%>XVPKj+B0@Y*{N(988}iuqWo(6e^iRuh^4@w&BCReD&&+ zPd@rcd@2bZY%Kl0ugs)N=wTnC1NWZ#^5#dUP)-mFxQ4rrUOavAs#h)B2IfhBmX7+s z98(m$_}QdLCk15vLj6nIAdpF_~SOwgH{_u@^llEow-(36_Nd#aV^`%>?dD z1RLNWJkBmV30!WVhnbH%pZg1|WCE_@Vb2Qqu=GK9p2HMH5U1D@3`G3FFL_9ISPhzK zn6glB$DTk$l5B6M+okUl)wg%;g&Jf>Y~oG!MR-WNWtJTE(4DgN;nh5C!(}Y}$3I{u zDn3YB8!dk%f2laK39KHBIuc6gu(`2mG+;eYWfjb2EBWRd1NnJN^v^1o%T1DS^K)HM zR)IVOF8i(IFa82R?&JH%t?-`xBthEzbN_zw;TEDoMpf$@JAFrFgUR1*r`}8WgLG!73xV9gDAWDIEuy zsFN&v1}4vPhG|@Mh4=ZmM->4)TB-|L${zunSjhdwkKMmJ@I; zJtQt3vHVXTaII{B5`^SLtV6G?m{)Yt`QHsuBuOzihFQ!Yp6VQ-h`?Ni=gNoxjocdz zESeqw92HA8FRgqvan)X=PM5$XHH`%|Sw*T1W+%IQ>JSGLX@XkSwgkyA#5EpZ-W+|& z4$vumat})ROZvL{D`8V#c*K~5MaVooNAwemUTuY5ORSeH(iEV7u$QzEVBJ#m3=r6d zjt<6%QjD%_WhJipx0u2#c7frZVWd5-6lL!%@VuxR{F$^L) zVRfbVK#Isy;Eoa;N)S6L3oYgmJSn4U5ye7OuUd%ELHnYBKZ`vah`z*^5!RTP-4V0W%QUK+tkB?;Qy(R9P0jd3zw><)AHX4~h6uKiKq;$K#i3_YISn?%QOZyqBwR=zbbBneXwO;F zSpR+#`&?FCEe&^(aY=RO_%cQNXAUAU-uw-8#%LtUfB|9+u}g$TLcJ6x2Bd)?zs6+h zqFyP;?~_@bL`*(B=xX(nMTWns zO`9>}URVYEX-*3FNr|E4nb1f!av_Ar)hxQ8_J~f9A4z}%3tPTh4tPth5tWTZl-uWn zD~aBVULG-0D^pK0Vx0H^3iXs8FJB$JetqzmeS!rYzcEV5n=$lT{7!21p1yc}D6eNo zzTi42g8S;=>A}7O9_LuYN*ZuvAHkJc6Fy*hY#u&)grox;_QVsr~AwAPStn zDRlvtXzAeSR7bVoMyvW59IqYjVOEPqyVMdu7kfHRJxi|&Q^RfquAi`MhB6DZn2BDXxRV2ibkh)|%9~5W6xXRXp$C`py(L?d0lKJsdXLRz7HNa-< z6B>xw7FUj+8$09I6&^t|R3#+Z1-Uj&U7nBvQ>l zi2_tt*07}}WRyTA5=o>gpyI^SKDnBo@=K9VPic=LKNOk+)|b@L_?su1@)1-ov;0g0 z!;Is@LropENoJhqQ)}4d0MpK+kC zO2b0?z-2nu97ai9*@{0xaEr!8EJKtcu7{ba0Y0%I1Aqx{lwv^!8h6mRU?zbpLrO3Z zwj@XgUQYG(Jm1sqDEAp&IE1A)sIDlR@uegbcs&W$=?LhSlRy`%)=|6U7ch>BR~GSg zz6P=vL?wU4Th^u5axiaie%)ewt-Y^X)AzFBds%C*^2N0?<6QmK~epsD8@)_s@tPogUl9QZ4N61vJoB{ zM>b0NOE%Fh7A%owU3N1RE-6GmL3gw`pSF{)H%Xn%z2s|lYcHz*?YBwUZyS@q{z0pQ zfBnr`q3{>e#c+(Zszk2o8;hjEwLcIPWnn_OWMIl$mf)!Q-uj57`hFToYu<`ZBIrLr zD|vNMMgK4L5)pBJbFrcu0dAljHkx0WCC@Cq91(G3oIz+9^$CFV5ol|C8RQPaZ!$c#h2jK!(#Zsi`&Fr#j@I z6;JV!A5|EUVQ@SioWL2{T>_^S*LZchM_6CXde>K#rCfDEXILrh%7V@if?Bx_YU6A2 zq;HJ-E*i_sxc|}912Vj!6^--CQ21WV3V3}lel6FoVVNWMjy$VCZk%mmlrW-Pn;zOU zf21||N_6aSbU9J*tSaDIbj!m9GT7+J@CsVKK^cM;Efb0xgzK_d0(WOoMS+kQnwlLI zt(j%$ zy-7LERLF1>rFCu18ii$aST8u7W7Y$0Tvs8hPTYOWR_rI7GH-$TWfMUFkbkp|87uR4 zMO$MumI2zzXkRnyFW0VNN`&9_jJY1Q#+f6ACyctiGL+eeDI!^%eFh$FAx*EXEF~7R zC=g0UCT$Errj}rtQKa;kTvg*uSoWz)005BG5_T)ixrLSnB?;2xl!bhmqciP-dDh$k zzzkPSP}MNwvV7P(`pM+0t}dx)(F1P9rJ{%iw-l0HyplrC;l2O#$tTZykKoxqc(wKK zrGo1AQo}pVT~bBFR*?>pSGGcGwXsk~P2y4oiDjbh0>ImHrj{xz)3iL*?yRGYPvMNl zYD24mBE^jK2>?r+__)Mr)g;g=0vmmSD+t~Xd~tQopH3kz_w2Q3S@1x0b$U64U#3+x z>PcVOo+Rq_$$x}1{sq|a{7^eADI`{Zh)DSvls$n%or8Z*_dhy#ia-M50e|^w|D`gJ zNhelgl+O$1)zsE_{DM&d>W{KQaWupJz*c>Q*NBQAyTg1cm0#KPBy|#`Z7^#= zgz)g-^TVEMlBWkBM=~X~cFX$OPfvcThoHKs6cd4QuY{p{sIEog)ss&?H7rbQYLt`O zq8!ydrH%ai&Q>rGp$ee(P%!VVrl>BI7E5Rn=n9(eU^2^aQOKA;pe^bc71U&_;rnxdW zjbtD0!j`zT#0>BaVF2dJiT6sN>`OwIZh?{4%)68-{rbi=TNkN~adq{SZzU~)ko382 z`DPo~nT^{z$EyMx%m?%BdppvFhSg6Xv(J$h@>;bcI2wo_x}ZxG>{FzP014j2O4U8x zLJtvY>C6&6U^bB%-k6BwJOZRNaagO1FIADplU{*?QJ{f5+#o;O$Wq$e-qe9EI7&XO zm)=T{?s<>cQxZ^nlq0X(^59ufdd9cxYVj4Ia|Q0z-)!%G;h?pMB~XR}NWk5`_XUDe zIEe$H4`8BA&C=l_LmmJPUm*`GhQ??(eU&`KDxb+}OyK2fAd4rJ&jx~8Id%k`Ia zSU@m>ic!>2#iSyAeD$+lWp1 z-M{%?^g}wgY5~}WFfni=waL|e`C7(@fCm+1Jgt~`40yeEG ziu$il3Z>w)`{g@YeQItBe#TP`(XG&@M^4j1Pa6O8-UX z`*$I+|3Fuoo++r(ee~*Bys0W!)~_@#%4ywUuG16sJ4+VVc!sr>3y!>)9XuaLgvu7|?45JZ(6I-##;5 z>P~$1#-I^#nCQ8YmHzR$t-%$5bC_-s5`vu_sadCITeeHoV?{Pj30)Q! z%%7$61WE2pR>3JlZzqCPm|6rT^We>$Q+Q7ZBcNQZ%vWa@*#AfU1Css zSKpk;*^y)pI=}+eowlGI^qzD`v4*=y5c#~lMRlbg@#?9kE8f)0rf|+B@n$Y9I7D6$ z9^b^rb`lKPLnq#`dIS9cl+vLVoXW=%3RNLvO|{VFTj|vaZIS18N|5lxs2?2~%9_`7 zp=++ExGNWB>+A3))anQOkn;sIxAC8M58IwekW4+IT0V%9NjCOc*co~)p^fj@*V6E{ z@;Jr-Q8zZ>OgBIC729of@rM1aGk67c$d{;@$)r>*JNpiP4~G>w)$~y<=#q3X>*DXu zQ2)yf+_sAWzIF93($Nk=mBVr|ks-~k|2(X95C|e-IvX%;Uyn}f!55B`2|-n_Q$n#F z>^kyIg)}l1^f4PR>t8%-RR4x1+Gm}_L^SBuhui~bD4_4PCGcGKc2isFAoEqTD-2~G zJm0m7oRVAW7cKMM>KWR&WWc-WLyBBiv0>Rr;=ysaS8KE6cHmy)vdVBSj-SK-gwUET5>7O>r4wKLnm2G$rR# z!O<-LJHvk} zAHWTISbvo*ID*$q0hBP?9KyXOgm{~}aak#%xhC}D3fPhcu^uEHRfPs7EUDNycJYX3 z!-?+WHk_dTIO=4)g=oHJ<~v2ker6lkDPJ1Qydc64Cq)Y}vRZ+^wJu z8zn+p;x>e5r@R^3$ldc}Bl@lnbhDV4rPtv5UU&C6`5*u7(QPcYom0Nr<{sX29Cm@_ zO?r{#3tT2a213^Ta3iWSnJ~R-^{5-)lA~aB2UfLwtU^sxJu@nRlmNHm=VXC49w&m7-( zpkb(cQzC{6Wrq|yAmmgGWjOaqwxhgUL&i{gnU3MbjR+Y^*HJRO45VBko(&eKp^8kX zXK&*URr$DF@>(nmT0n-Y9Mvn5VvE%u^CQlua;zoRBIT_HsN$HrbO1G?~u=89_h6*y=4x2a`j~8L{Ca@xHZE3bznd=}E8jhnx3x;#Foz+F6gyaWTBKaO) zjZ7i?0f+x2OhOic!2);1ACj2gqpHDLl8L~x@6_@%M3T+-icM^Ld#^~^?-g4#)sf=} z^@$d0wq!1kN$++YFUt-o=l(EWR;6c!nJcfq7dKa-d~bF}p#BK>8DXo;s$=L%p@^e0 z1(`ONSs2{6kr?D4R`$#>h|GB`BVz~>J@AQ1V8e!!`} z$GC+G>lCU1Y{N8caRY2y%@OE zmSQnR@Z^P1DJ-MpQDvDg@9Slq6E?=87&vfa__+)ESO#`)qN6BUMukc(okS@|(uSZ% z>;O;;$>TpZ9dbl_g^!y4;6}JcmXKK5NX}40;KbdB?D13E zi?k=-;hO=^{E#O)lH^Xa2TU{9);S}{H=a2{e=9G;qVvp;(?@-3j@o1QqODIR%<2z< z%F;t36f!+<<3jg(nb#giWV-(WiJCm-7C*PTQ7f+Y07*j)ECysKJSspPSU_N={Ot4g)_Rd zu*95n;Nx|YppZ%kXcW86*X3yvr|bEP5}G|C^IZZRDSds4Ba3{;E;s4$cTk&9TvSQyhBO*xsRBnW zADuP?uhftV_6ADQ+OJGw*XzlK`)_w3H9bYx-AYCQC?^P8G!;ZMwco;o0*D>q{9XBi zQ~BlM$TCY|%@MCWHyTGygJ$I!W&%OaljaFjGOLt_tZ~AZV}!L%<;-Q3LshYIK3R0! zGDoA_5`}>$2Q+KUu%$Ogb&_Amair?$k-MXo%ISSl9eAO4tYoapbu=3>!g0`2hj*#s z=DG;C$dW)`MIwZH%i&IV43)pIGW4ojV{d!`Z#_nGY@ab zS}iO{x3#cJYvX1r?_S*ed;5rwFaAz^Oth#<>v z1kNA1ECmbZ1iSQ;_S@482fcC$Bqwj;wnjDIwjw!Y!6gC!YE8R5HzE3H2OIB+6aJ$ye+%Ev(@*hrfIDQ zr3Xgf{uZXxF#;+V%9FHRpwok=lDF$-=WYCw@}to&UMUvz(JJ}N0c2nmwJl(@DL0R7qY8*EqKK@Dohr7$-03d z$Q3w#tzIZDox&lnn8`~Fl+ddfn2@38Cu0gCZ;Lh+@3@!et(Mg{%01P~C$C0_vWCQ! zLL7|5NA4A3Di>~=z$G{mMka|EG3~&qaEXnba(u0{74=R0p$ezZ!rYC(;{3}B{REel z&+|#c7u+R%8aNU>c3TKGQeQZs+`%19Sp9631d(pa8KNO94MQnhfYjgZGa@V(jO%PE z2fc@~QhkS-z!U`>a#@k#03+UI%;Z6qD7qon7^(uXapY-^2Uob-02gR#Y+lW_etz0d zj7MP~Ja&i=MkSxocGRK0@>E^HMY|cc%ZnRfT_+mxwWycC3`ZnzILsM@&#Ml!CTBk@Y}CPSyW$6tuCp|>POYDcirUlK1dY|Wwn;A>oyjU6~JxSI1?E+oJX)@5~!lV4d>sMy|?Nl zC=7TQbkI1aXFS-$cYYEwVg_;IET;-)p|L@ul876QOBUsApnMZJi?b;5rryHEDtA+& zJe-FnoCZV6>{8631bO{?c{Y=J0By{;QtDGNV{W8u!>heQT)(|4tOQWrRsvcPW;Cb3 zDp&y~3-^eg!^Qm?%8l^ldg5y-xDKq~u^_Q8-t02J)%yukB3{e&5 zP$T3sfIfU{Py~o-WWQ>Asdv$~Coj>yskaQRdL0T!4UJqrmFJO9(CfAR%gr<9&??qG zocPgM>hO~p^QDzu^i3!|L{d~<#Xh2oSngL3=a<_{u2T@!!074YUO5Eg?aCavYZX)M z32hCPA5J-_#Ro#hQ+{j1Y|_jS%tZcGk~HyBrAO~|$4}0a$fLp~KiN!9N>>~NWz$A7 z6y=64Z_0b5i$zp6y{tpbW^6J556+Y6{YWMsGH(j=&aUDQXSXiumtg2HEi*=8PQnhT z02;zrQBXsfeG|i?+qUDek@TWHkmhlEHNr}wVWo45^7_I|vl#9$aXs`}4PVr5#Ec`H z6XSa;*MEg@axLSiPEsAm;99f!t4Q?AW6! zJugaY3yUiJrbKcI;7V*S+1^cLgC|WfZbpUsPyX_^zVO2!**)8jN0dq~b?ic0z>{`a zt|5`PML64&l_S{mHNfM8@Z z2}=;u<>9Mr#7%>|7ej8EWnnqs3r6Sa z1~9wo_{h!>RX9S}C2Vl71PwrQ1ps<`i;oPs;7ZXj_$l}C36#>Zbb3+sL6Aj`#bOOF zbkiM%tx*=jLWz$%&6MHnoc50F3dE?oqM)BF(n4>%QgfNRq9jefzFz`ETN5O8ETK6w zQBJ#}EddM5MxFJkRF%^aI(D~+H^NE+FMy%{LO`Ji6wPI5LLOoB#0i=5-GL4r8HEcKBxtPLC7w615$Q3+13GX?O0&?{{N?~`Lpl0lj zJU_CeRCAYM1H-x;4zbrqXHX$nBQ{P9L|j$swd?!h6{tn7kZd1M$&pW(k z=i$yq8SUz8MNVouz>#-A3->)@^kZCrwscs)_eedFPvED3zecu4tIGm+z0nzI4o=4( z?4X?B=$SLopKJetbBOnRZ_)dq#nH}r`bz_FihWvGl;PiX5Zt?jBKa5_wsY z>+0BZRCUjpFP3D@9MlTI%yxg#NoMz!PGpNAD;S;thQpt#ClJCW#3_Dqwp+6M3nAk@ zYR|~MrgjLYNw(%gaBX){we8D)E`~TXw}L}}zm`Gud^E>6%XcSTtPwDYkFc;%Z;fDz zd%^I)_OCebS*n`CuGLxr?P^@op%ntxM^y6=r~dT5Ht?`77OP*l>b<7~a!ViP_vj80 zU}KL$Icj*-S%RwF+sb9T2qoRqp#BmZ_8|f^L@Y?*;9K>Tg{}4Na%h?@huDo4@t;*F znir)dED!6)-2W@RBNV2L+iQ3ce;mE>aHU~j!RfdJ#K-F5Tcxf19X~Hl7$nnD`eV7sd@#Jo;6Twb_N%5) zSz!6)(G zr&0odtjFL)v=y1TXlId`ur%(ODvpB}WS9K&}$Fy%uA6xUJvauF%J()+c2` z2tVEY^C!F0=j9U;MUc|qCN84O<_t>0_JU0si3P4znC0iV^>3VR7gxAl`8;|5 zeYvw%JegR2!Cl8d2NDBt9tw)d!MFt6(AtY~00ExO+cX-GGan>a32MTKc}VYJ;!+|M z36A;7Gc}L_I35lZJLC6H39Or5!kb>SOJLd_($)0zfh@<-1K2Rmta$18CbuV*#px^C zlt_>q6jA0?vlY?v*x5b4@Nki@c%-lC2oWGVjur;*=>Q%>P+D?eY0L^ewpdjR6JEl; zRA2g17F82nEPAoM9wd|wA?a51j%Jmp9Pu}w=Cd9ih;Lny=BCsS#8NSru~=YKK~e#} z@tO+vKGcPwv`*_w%HsYNBnX%EBqBQ31YD4z8mE3FKz%*V5;|4dlc>Fw?C1Eb!I7qAx0}PIBQ6uByj%oZ{V= z_S$HEshDId@c@#ZJN$LsC^GZQ7#}2OF+WQ(79u1+#%HUe;SME1>H4PxOE|y?gvbzd zj*no1gbjVCzyTP)=whw|9Q zg|9O#BR~(e^x~W1F_XxkqzL1hSKxo5e_8X!D612bMG1yx?=Au1*^CeE;#&6r>Pp;t^y{G!h zY9`5-$u`2V_R}?eD10U_{IU6h#&{?^#otD#MmT?@p^e4Nt`au?8Vv-lp!z;+LM{*b z*x7x5 zXuSgi;IJ*8_(E^1wE5Xd;6D`c-p&W-x3Fy zA#Vp)*dwk1Oc4}hRR}0H$=l62%|*(y)0)}ZfCXeRfngK@MQ0PmqOpEq5!T32!a-#TD4J1_Li0m16ozL+`Zs^i{>h zi)2Nt-#I#SSkS^wm`XCl7|J52#hhjJcw~0v6;A+y9I+aflkm#C+3DtCNuKi?1&gu=$+pCm8%j$cQru1qtm?2Gfr;FmWJ(ayFf;!fYM}yf&-dg&cYkS94uwZW_Te2`MCiD-OlO^~V zS3?)Vgu%WaAx%upJ}$;&p&(6I3LWcLJ{t+s0M2m;laY<03quMvfO>QsLH+wPD^-E9 z@&nG$d?AD1*H+L1G)Ax+$d30ETth%qfNPM`yH%lpgiSRP&c=)a77br+o@*zKr6qE@ zB~FKlE$>o-g@2X)y9(GRq)V-q zB#+=LUhp6ckb9V7AeRyFw&s68ikTR)MRk0Viyi}pR7uO)j3xMN1UMOU1rS+ck62u* zxXv&D%;JEn342hyDs#_O*0puAQnFQ$U16up*%M}WRO>Q--RcU$UJ&UU)q`ml=aD+1_^R%ahdST5G7$l&XnA+(xRzC+Gv$T-44%f#=g=cKo@Kni zjZ)~1sF#|Sd@z{IMHv!nw7?3CSR>SG0qp;i+>P36&`KZX}vCf3Il*xf$3j>|5S66(mA+HkEmP*+7Vf3F#=^#XEBNT`U9E8IEy@k z12R$G^YCKgn5YFth=T zib|VijU+*7C<^g{+u1%Wrte&B(X!!_2GztUr!yX!5)Rc*w=9*4;q1|XIS!gP z+*=**L`xfQb@Xqi*d-7!Xtu0EUDX zVHj9ZiydX)JFsJsn_(x@A*G_`BXcmZ12n@<e zNu@H>xLgW}YhY>Y$(RmFM~u>;wsanLW#BbMMC-pn?1Hy`mPl{tHu~Z$o0`K9^9xTv zKmwc}-woa)jw-G|rZ3HOF&^w|jto1;*xG#1>ex5!Ksno5@&V%?j^E0)pe1sI9Bd7n z&8>G8eNwzJU|)14H#qbU>jbzHE>1}+4)(|(P!W-+dGk~D%hDm0O_VE|!Do}|BlDK71c9T;-q~lgO>@gx&r6twW zB%ob{%d;OONbb1>Ruv_FT9uyijuk@kF{g8!&*t?(1_QYittj3QPEDwRk1g6@HBI!q zzbR%Z;D=7Z34pQQ%0{g{-|iRqK~uTSS3-Axy^JsRVVZBHCJx00%dRbEGIO9jRfRHL z8==leh6rYTOT1pGC^~nwA|GF0QKsb8ihR6O(akaa+xTeJ!KzuoX5xZ7O`4}Vz9M&U zDQD&4?-I%D5v_Jc}ZJ9Hj)n0Zm!K=DL{oc;zs} z32w(TsB5wU0Fp$xxaNb%Bh%^uGCjgh3{ii&x+W5_B-RTpK`(`46qbk2)bGzDQ0Yl4 z&vj1xa_E3CHYv}pkO{~1*yS#Vcj&lOz?ciqICr%$64ZT;3AS?5D}sYK4HXLxJ6*aw zv^fAMH48SOp?x(!t-PEX&EtBcUG}#EFE~4wPLA~ho#FY!ygYAP;8EwCwjSTSn0O$7 ztqMAr+;OznZ(HvbzilBABOK?9kr&Xd9Oqmc9s_kGq!X_Gz-57xWD}g(6boWA8}S+t zo$T0K;~9I0y7(o+TUpFwc=L7iadS#5W2+91bkie{LZH-ui6A?dI8|8-c;xFAiV+b+ z!<)%DPY{9)HB9GkxoLJ+u)g>64~+*Uj`#8In{OQ6!=xhj9~4Y3O$o zxefsd$~bufcjcZVBGTs|;}Zj2!h?3wD|Fe6&fI(;8)2+)^t4vnC{Dksw2BXWb{X-4c)5{!U%)FDM`R5Dg)EO!fOJc zu?W)~s{y&xO_M%DJynY1JUnXPOxl6rmI+G+fA*Gxh zB)tkjLfgX5hs6|$Wkwhq*4DKuM@`vSj19``)NHbWdbPBY(BCQ8t0kbDV=x@i{c`T6 zc()ZXI9^tUKXAk59n>)ic6(bMs+}z;xTQ^+;$1{(Dd~fUa$o9}L>hFKlAIhX6X&B;0hQNTMM`e#;4IKu*hmWdg~fV89zS(6Z0 zT3dFK#lzwKY@`QbOm~MKK%kUz%=^}rB`a6(#oGlnV_lJ&JlR`jUED>LQTV=-uObcWT5q=PLIHTg%>r);LC zi_{L4peSrY3^tuhKE|WjPij|jwx%c-=pFhgtM=+*HW&*M;8U-z@r72{j;hH(6wT=l zF%tI$Q!UY-iw)ZzK7oyC=U^?SQ}LD3uR!-3(s(D_ZK5`)_MH?u+tbBUB{hNL#8+(; zJ&K*&cPM3X#zF)d5E9xzkZ40{`Gc_%k%S0OkGO` z**N=3Pbp|5w>SoZJ|x@#4M%3ih!qIEq-ngjFsJJ{YMYjAA?hfZR{6@`dhE>DwCIX^pVj33e8vvc%H3otSy)2!B$vUEYwJBVbMj zvmtd5_Bo7U%OL! openhasp.start()) diff --git a/tasmota/berry/openhasp_src/openhasp_core/openhasp.be b/tasmota/berry/openhasp_src/openhasp_core/openhasp.be new file mode 100644 index 000000000..85bae288f --- /dev/null +++ b/tasmota/berry/openhasp_src/openhasp_core/openhasp.be @@ -0,0 +1,1489 @@ +# OpenHASP compatibility module +# +# use `import openhasp` and set the JSONL definitions in `pages.jsonl` +# +# As an optimization `0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#` is replaced with `0` +# +var openhasp = module("openhasp") + +################################################################################# +################################################################################# +# Class `lvh_obj` encapsulating `lv_obj`` +# +# Provide a mapping for virtual members +# Stores the associated page and object id +# +# Adds specific virtual members used by OpenHASP +################################################################################# +################################################################################# +class lvh_obj + static _lv_class = lv.obj # _lv_class refers to the lvgl class encapsulated, and is overriden by subclasses + static _lv_part2_selector # selector for secondary part (like knob of arc) + + # attributes to ignore when set at object level (they are managed by page) + static _attr_ignore = [ + "tostring", # avoid issues with Berry `tostring` method + # "id", + "obj", + "page", + "comment", + "parentid", + "auto_size", # TODO not sure it's still needed in LVGL8 + # attributes for page + "prev", "next", "back", + "berry_run", # run Berry code after the object is created + ] + + # The following defines the mapping between the JSONL attribute name + # and the Berry or LVGL attribute to set + # + # We try to map directly an attribute to the LVGL + # Ex: OpenHASP attribute `w` is mapped to LVGL `width` + # + # If mapping is null, we use set_X and get_X from our own class + static _attr_map = { + "x": "x", + "y": "y", + "w": "width", + "h": "height", + # arc + "asjustable": nil, + "mode": nil, + "start_angle": "bg_start_angle", + "start_angle1": "start_angle", + "end_angle": "bg_end_angle", + "end_angle1": "end_angle", + "radius": "style_radius", + "border_side": "style_border_side", + "border_width": "style_border_width", + "bg_opa": "style_bg_opa", + "border_width": "style_border_width", + "line_width": nil, # depends on class + "line_width1": nil, # depends on class + "action": nil, # store the action in self.action + "hidden": nil, # apply to self + "enabled": nil, # apply to self + "click": nil, # synonym to enabled + "toggle": nil, + "bg_color": "style_bg_color", + "bg_opa": "style_bg_opa", + "bg_grad_color": "style_bg_grad_color", + "bg_grad_dir": "style_bg_grad_dir", + "line_color": "style_line_color", + "pad_left": "style_pad_left", + "pad_right": "style_pad_right", + "pad_top": "style_pad_top", + "pad_bottom": "style_pad_bottom", + "pad_all": "style_pad_all", # write-only + "type": nil, + # below automatically create a sub-label + "text": nil, # apply to self + "value_str": nil, # synonym to 'text' + "align": nil, + "text_font": nil, + "value_font": nil, # synonym to text_font + "text_color": nil, + "value_color": nil, # synonym to text_color + "value_ofs_x": nil, + "value_ofs_y": nil, + # + "min": nil, + "max": nil, + "val": "value", + "rotation": "rotation", + # img + "src": "src", + "image_recolor": "style_img_recolor", + "image_recolor_opa": "style_img_recolor_opa", + # spinner + "angle": nil, + "speed": nil, + # padding of knob + "pad_top2": nil, + "pad_bottom2": nil, + "pad_left2": nil, + "pad_right2": nil, + "pad_all2": nil, + "radius2": nil, + # rule based update of attributes + # supporting both `val` and `text` + "val_rule": nil, + "val_rule_formula": nil, + "text_rule": nil, + "text_rule_formula": nil, + "text_rule_format": nil, + } + + #==================================================================== + # Instance variables + var id # (int) object hasp id + var _lv_obj # native lvgl object + var _lv_label # sub-label if exists + var _page # parent page object + var _action # value of the OpenHASP `action` attribute, shouldn't be called `self.action` since we want to trigger the set/member functions + + #==================================================================== + # Rule engine to map value and text to rules + # hence enabling auto-updates ob objects + var _val_rule # rule pattern to map the `val` attribute + var _val_rule_formula # Berry fragment to transform the value grabbed from rule + var _val_rule_function # compiled function + var _text_rule # rule pattern to map the `text` attribute + var _text_rule_formula # Berry fragment to transform the value grabbed from rule before string format + var _text_rule_function # compiled function + var _text_rule_format # string format to transform the value grabbed from rule + + ################################################################################# + # General utilities + # + ################################################################################# + # Checks if the attribute is a color + # I.e. ends with `color` (to not conflict with attributes containing `color_`) + ################################################################################# + static def is_color_attribute(t) + import re + return bool(re.search("color$", str(t))) + end + + ################################################################################# + # Parses a color attribute + # + # `parse_color(hex:string) -> color:int` (as 24 bits RGB int) + # + # Parses colors in multiple forms: + # - `0xRRGGBB` + # - `#RRGGBB` + # - `` that are matched to `lv.COLOR_` (ex: `red`) - case insensitive + # - defaults to black `0x000000` if parsing fails + ################################################################################# + static def parse_color(s) + # inner function + def parse_hex(s) + # parse hex string + # parse_hex(string) -> int + # skip any `#` prefix, or `0x` and `0X` prefix + import string + s = string.toupper(s) # turn to uppercase + var val = 0 + for i:0..size(s)-1 + var c = s[i] + # var c_int = string.byte(c) + if c == "#" continue end # skip '#' prefix if any + if c == "x" || c == "X" continue end # skip 'x' or 'X' + + if c >= "A" && c <= "F" + val = (val << 4) | string.byte(c) - 55 + elif c >= "0" && c <= "9" + val = (val << 4) | string.byte(c) - 48 + end + end + return val + end + + s = str(s) + if s[0] == '#' + return lv.color(parse_hex(s)) + else + import string + import introspect + var col_name = "COLOR_" + string.toupper(s) + var col_try = introspect.get(lv, col_name) + if col_try != nil + return lv.color(col_try) + end + end + # fail safe with black color + return lv.color(0x000000) + end + + #==================================================================== + # init OpenHASP object from its jsonl definition + # + # arg1: LVGL parent object (used to create a sub-object) + # arg2: `jline` JSONL definition of the object from OpenHASP template (used in sub-classes) + # arg3: (opt) LVGL object if it already exists and was created prior to init() + #==================================================================== + def init(parent, page, jline, obj) + self._page = page + if obj == nil && self._lv_class + var obj_class = self._lv_class # assign to a var to distinguish from method call + self._lv_obj = obj_class(parent) # instanciate LVGL object + else + self._lv_obj = obj + end + self.post_init() + end + + #==================================================================== + # post-init, to be overriden and used by certain classes + #==================================================================== + def post_init() + self.register_event_cb() + end + + ##################################################################### + # General Setters and Getters + ##################################################################### + + #==================================================================== + # get LVGL encapsulated object + #==================================================================== + def get_obj() + return self._lv_obj + end + + #==================================================================== + # Value of the `action` attribute + #==================================================================== + def set_action(t) + self._action = str(t) + # add callback when clicked + # TODO + # self._lv_obj.add_event_cb(/ obj, event -> self.action_cb(obj, event), lv.EVENT_CLICKED, 0) + end + def get_action() + return self._action + end + + #==================================================================== + # Add cb for any action on the object + # + # Below is the mapping between HASP and LVGL (may need to adjust) + # down = LV_EVENT_PRESSED + # up = LV_EVENT_CLICKED + # lost = LV_EVENT_PRESS_LOST + # release = LV_EVENT_RELEASED + # long = LV_EVENT_LONG_PRESSED + # hold = LV_EVENT_LONG_PRESSED_REPEAT + # changed = LV_EVENT_VALUE_CHANGED + #==================================================================== + static _event_map = { + lv.EVENT_PRESSED: "down", + lv.EVENT_CLICKED: "up", + lv.EVENT_PRESS_LOST: "lost", + lv.EVENT_RELEASED: "release", + lv.EVENT_LONG_PRESSED: "long", + lv.EVENT_LONG_PRESSED_REPEAT: "hold", + lv.EVENT_VALUE_CHANGED: "changed", + } + def register_event_cb() + # register callback for each event + var f = / obj, event -> self.event_cb(obj, event) + for ev:self._event_map.keys() + self._lv_obj.add_event_cb(f, ev, 0) + end + # # print("register_event_cb") + # var mask = lv.EVENT_PRESSED | lv.EVENT_CLICKED | lv.EVENT_PRESS_LOST | lv.EVENT_RELEASED | + # lv.EVENT_LONG_PRESSED | lv.EVENT_LONG_PRESSED_REPEAT | lv.EVENT_VALUE_CHANGED + # var target = self + # mask = lv.EVENT_CLICKED + # self._lv_obj.add_event_cb(/ obj, event -> target.event_cb(obj, event), mask, 0) + end + + def event_cb(obj, event) + # the callback avoids doing anything sophisticated in the cb + # defer the actual action to the Tasmota event loop + # print("-> CB fired","self",self,"obj",obj,"event",event.tomap(),"code",event.code) + var oh = self._page._oh # openhasp global object + var code = event.code # materialize to a local variable, otherwise the value can change (and don't capture event object) + if self.action != nil && code == lv.EVENT_CLICKED + # if clicked and action is declared, do the page change event + tasmota.set_timer(0, /-> oh.do_action(self, code)) + end + + var event_hasp = self._event_map.find(code) + if event_hasp != nil + import string + var val = string.format('{"hasp":{"p%ib%i":"%s"}}', self._page._page_id, self.id, event_hasp) + # var pxby = "p" + self._page._page_id + "b" + self.id + # var val = '{"hasp":{"p' + str(self._page._page_id) + 'b' + str(self.id) + + # '":"' + event_hasp + '"}}' + # var val = json.dump( {'hasp': {pxby: event_hasp}} ) + # print("val=",val) + tasmota.set_timer(0, /-> tasmota.publish_rule(val)) + end + end + + # def action_cb(obj, event) + # # the callback avoids doing anything sophisticated in the cb + # # defer the actual action to the Tasmota event loop + # # print("-> CB fired","self",self,"obj",obj,"event",event.tomap(),"code",event.code) + # var oh = self._page._oh # openhasp global object + # var code = event.code # materialize to a local variable, otherwise the value can change (and don't capture event object) + # tasmota.set_timer(0, /-> oh.do_action(self, code)) + # end + + #==================================================================== + # Mapping of synthetic attributes + # - text + # - hidden + # - enabled + #==================================================================== + #- `hidden` attributes mapped to OBJ_FLAG_HIDDEN -# + def set_hidden(h) + if h + self._lv_obj.add_flag(lv.OBJ_FLAG_HIDDEN) + else + self._lv_obj.clear_flag(lv.OBJ_FLAG_HIDDEN) + end + end + def get_hidden() + return self._lv_obj.has_flag(lv.OBJ_FLAG_HIDDEN) + end + + #==================================================================== + # `enabled` attributes mapped to OBJ_FLAG_CLICKABLE + #==================================================================== + def set_enabled(h) + if h + self._lv_obj.add_flag(lv.OBJ_FLAG_CLICKABLE) + else + self._lv_obj.clear_flag(lv.OBJ_FLAG_CLICKABLE) + end + end + def get_enabled() + return self._lv_obj.has_flag(lv.OBJ_FLAG_CLICKABLE) + end + + #==================================================================== + # click is synonym to enabled + #==================================================================== + def set_click(t) self.set_enabled(t) end + def get_click() return self.get_enabled() end + + #==================================================================== + # line_width + #==================================================================== + def set_line_width(t) + self._lv_obj.set_style_line_width(int(t), 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + end + def get_line_width() + return self._lv_obj.get_style_line_width(0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + end + + #==================================================================== + # `toggle` attributes mapped to STATE_CHECKED + #==================================================================== + def set_toggle(t) + import string + t = string.toupper(str(t)) + if t == "TRUE" t = true end + if t == "FALSE" t = false end + if t + self._lv_obj.add_state(lv.STATE_CHECKED) + else + self._lv_obj.clear_state(lv.STATE_CHECKED) + end + end + def get_toggle() + return self._lv_obj.has_state(lv.STATE_CHECKED) + end + + #==================================================================== + # `adjustable` flag + #==================================================================== + def set_adjustable(t) + if t + self._lv_obj.add_flag(lv.OBJ_FLAG_CLICKABLE) + else + self._lv_obj.clear_flag(lv.OBJ_FLAG_CLICKABLE) + end + end + def get_adjustable() + return self._lv_obj.has_flag(lv.OBJ_FLAG_CLICKABLE) + end + + #==================================================================== + # set_text: create a `lv_label` sub object to the current object + # (default case, may be overriden by object that directly take text) + #==================================================================== + def check_label() + if self._lv_label == nil + self._lv_label = lv.label(self.get_obj()) + self._lv_label.set_align(lv.ALIGN_CENTER); + end + end + def set_text(t) + self.check_label() + self._lv_label.set_text(str(t)) + end + def set_value_str(t) self.set_text(t) end + def get_text() + if self._lv_label == nil return nil end + return self._lv_label.get_text() + end + def get_value_str() return self.get_text() end + + # mode + def set_mode(t) + var mode + if t == "expand" self._lv_obj.set_width(lv.SIZE_CONTENT) + elif t == "break" mode = lv.LABEL_LONG_WRAP + elif t == "dots" mode = lv.LABEL_LONG_DOT + elif t == "scroll" mode = lv.LABEL_LONG_SCROLL + elif t == "loop" mode = lv.LABEL_LONG_SCROLL_CIRCULAR + elif t == "crop" mode = lv.LABEL_LONG_CLIP + end + if mode != nil + self.check_label() + self._lv_label.set_long_mode(mode) + end + end + def get_mode() + end + + #==================================================================== + # `align`: `left`, `center`, `right` + #==================================================================== + def set_align(t) + var align + self.check_label() + if t == 0 || t == "left" + align = lv.TEXT_ALIGN_LEFT + elif t == 1 || t == "center" + align = lv.TEXT_ALIGN_CENTER + elif t == 2 || t == "right" + align = lv.TEXT_ALIGN_RIGHT + end + self._lv_label.set_style_text_align(align, 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + end + + def get_align() + if self._lv_label == nil return nil end + var align self._lv_label.get_style_text_align(0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + if align == lv.TEXT_ALIGN_LEFT + return "left" + elif align == lv.TEXT_ALIGN_CENTER + return "center" + elif align == lv.TEXT_ALIGN_RIGHT + return "right" + else + return nil + end + end + + #==================================================================== + # `text_font` + # + # For OpenHASP compatiblity, default to "robotocondensed-latin1" + # However we propose an extension to allow for other font names + # + # Arg1: (int) font size for `robotocondensed-latin1` + # or + # Arg1: (string) "font_name-font_size", ex: "montserrat-20" + #==================================================================== + def set_text_font(t) + # self.check_label() + var font + if type(t) == 'int' + font = lv.font_robotocondensed_latin1(t) + elif type(t) == 'string' + import string + var fn_split = string.split(t, '-') + if size(fn_split) >= 2 # it does contain '-' + var sz = int(fn_split[-1]) + var name = fn_split[0..-2].concat('-') # rebuild the font name + if sz > 0 && size(name) > 0 # looks good, let's have a try + try + font = lv.font_embedded(name, sz) + except .. + end + end + end + end + if font != nil + self._lv_obj.set_style_text_font(font, 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + else + print("HSP: Unsupported font:", t) + end + end + def get_text_font() + end + def set_value_font(t) self.set_text_font(t) end + def get_value_font() return self.get_text_font() end + + #==================================================================== + # `text_color` + #==================================================================== + def set_text_color(t) + self._lv_obj.set_style_text_color(self.parse_color(t), 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + end + def get_text_color() + return self._lv_obj.get_style_text_color(0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + end + def set_value_color(t) self.set_text_color(t) end + def get_value_color() return self.get_value_color() end + + #==================================================================== + # `ofs_x`, `ofs_y` + #==================================================================== + def set_value_ofs_x(t) + self.check_label() + self._lv_label.set_x(int(t)) + end + def get_value_ofs_x() + return self._lv_label.get_x() + end + def set_value_ofs_y(t) + self.check_label() + self._lv_label.set_y(int(t)) + end + def get_value_ofs_y() + return self._lv_label.get_y() + end + + #==================================================================== + # `pad_top2`, `pad_bottom2`, `pad_left2`, `pad_right2`, `pad_alL2` + # secondary element + #==================================================================== + def set_pad_top2(t) + if self._lv_part2_selector != nil + self._lv_obj.set_style_pad_top(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + def set_pad_bottom2(t) + if self._lv_part2_selector != nil + self._lv_obj.set_style_pad_bottom(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + def set_pad_left2(t) + if self._lv_part2_selector != nil + self._lv_obj.set_style_pad_left(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + def set_pad_right2(t) + if self._lv_part2_selector != nil + self._lv_obj.set_style_pad_right(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + def set_pad_all2(t) + if self._lv_part2_selector != nil + self._lv_obj.set_style_pad_all(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + + #==================================================================== + # `pad_top`, `pad_bottom`, `pad_left`, `pad_right`, `pad_all` + #==================================================================== + def get_pad_top() + if self._lv_part2_selector != nil + return self._lv_obj.get_style_pad_top(self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + def get_pad_bottom() + if self._lv_part2_selector != nil + return self._lv_obj.get_style_pad_bottom(self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + def get_pad_left() + if self._lv_part2_selector != nil + return self._lv_obj.get_style_pad_left(self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + def get_pad_right() + if self._lv_part2_selector != nil + return self._lv_obj.get_style_pad_right(self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + def get_pad_all() + end + + #==================================================================== + # `radius2` + #==================================================================== + def set_radius2(t) + if self._lv_part2_selector != nil + self._lv_obj.set_style_radius(int(t), self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + def get_radius2() + if self._lv_part2_selector != nil + return self._lv_obj.get_style_radius(self._lv_part2_selector | lv.STATE_DEFAULT) + end + end + + #- ------------------------------------------------------------# + # Internal utility functions + # + # Mapping of virtual attributes + # + #- ------------------------------------------------------------# + # `member` virtual getter + #- ------------------------------------------------------------# + def member(k) + import string + # ignore attributes + # print("member","self=",self,"k=",k) + if self._attr_ignore.find(k) != nil return end + + # check if the key is known + if self._attr_map.contains(k) + # attribute is known + # kv: (if string) the LVGL attribute name of the object - direct mapping + # kv: (if `nil`) call `get_` method of the object + import introspect + var kv = self._attr_map[k] + + if kv == nil + # call the object's `get_X()` + var f = introspect.get(self, "get_" + k) # call self method + if type(f) == 'function' + return f(self) + end + else + # call the native LVGL object method + var f = introspect.get(self._lv_obj, "get_" + kv) + if type(f) == 'function' # found and function, call it + if string.find(kv, "style_") == 0 + # style function need a selector as second parameter + return f(self._lv_obj, 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + else + return f(self._lv_obj) + end + end + end + end + # fallback to exception if attribute unknown or not a function + raise "value_error", "unknown attribute " + str(k) + end + + #- ------------------------------------------------------------# + # `setmember` virtual setter + #- ------------------------------------------------------------# + def setmember(k, v) + # print(">> setmember", k, v) + # print(">>", classname(self), self._attr_map) + # ignore attributes + if self._attr_ignore.find(k) != nil return end + + # is attribute known + if self._attr_map.contains(k) + import string + import introspect + var kv = self._attr_map[k] + # if a string is attached to the name, then set the corresponding LVGL attribute + if kv + var f = introspect.get(self._lv_obj, "set_" + kv) + # if the attribute contains 'color', convert to lv_color + if type(kv) == 'string' && self.is_color_attribute(kv) + v = self.parse_color(v) + end + # print("f=", f, v, kv, self._lv_obj, self) + if type(f) == 'function' + if string.find(kv, "style_") == 0 + # style function need a selector as second parameter + f(self._lv_obj, v, 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + else + f(self._lv_obj, v) + end + return + else + print("HSP: Could not find function set_"+kv) + end + else + # else call the specific method from self + var f = introspect.get(self, "set_" + k) + # print("f==",f) + if type(f) == 'function' + f(self, v) + return + end + end + + else + print("HSP: unknown attribute:", k) + end + end + + #==================================================================== + # Rule based updates of `val` and `text` + # + # `val_rule`: rule pattern to grab a value, ex: `ESP32#Temperature` + # `val_rule_formula`: formula in Berry to transform the value + # Ex: `val * 10` + # `text_rule`: rule pattern to grab a value for text, ex: `ESP32#Temparature` + # `text_rule_format`: format used by `string.format()` + # Ex: `%.1f °C` + #==================================================================== + def set_val_rule(t) + # remove previous rule if any + if self._val_rule != nil + tasmota.remove_rule(self._val_rule, self) + end + + self._val_rule = str(t) + tasmota.add_rule(self._val_rule, / val -> self.val_rule_matched(val), self) + end + def get_val_rule() + return self._val_rule + end + # text_rule + def set_text_rule(t) + # remove previous rule if any + if self._text_rule != nil + tasmota.remove_rule(self._text_rule, self) + end + + self._text_rule = str(t) + tasmota.add_rule(self._text_rule, / val -> self.text_rule_matched(val), self) + end + def get_text_rule() + return self._text_rule + end + def set_text_rule_format(t) + self._text_rule_format = str(t) + end + def get_text_rule_format() + return self._text_rule_format + end + # formula that gets compiled as Berry code + def set_val_rule_formula(t) + self._val_rule_formula = str(t) + var code = "return / val -> (" + self._val_rule_formula + ")" + try + var func = compile(code) + self._val_rule_function = func() + except .. as e, m + import string + print(string.format("HSP: failed to compile '%s' - %s (%s)", code, e, m)) + end + end + def get_val_rule_formula() + return self._val_rule_formula + end + # formula that gets compiled as Berry code + def set_text_rule_formula(t) + self._text_rule_formula = str(t) + var code = "return / val -> (" + self._text_rule_formula + ")" + try + var func = compile(code) + self._text_rule_function = func() + except .. as e, m + import string + print(string.format("HSP: failed to compile '%s' - %s (%s)", code, e, m)) + end + end + def get_text_rule_formula() + return self._text_rule_formula + end + # rule matched for val + def val_rule_matched(val) + + # print(">> rule matched", "val=", val) + var val_n = real(val) # force float type + var func = self._val_rule_function + if func != nil + try + val_n = func(val_n) + except .. as e, m + import string + print(string.format("HSP: failed to run self._val_rule_function - %s (%s)", e, m)) + end + end + + self.val = int(val_n) # set value, truncate to int + return false # propagate the event further + end + # rule matched for text + def text_rule_matched(val) + + # print(">> rule matched text", "val=", val) + var val_n = real(val) # force float type + + var func = self._text_rule_function + if func != nil + try + val_n = func(val_n) + except .. as e, m + import string + print(string.format("HSP: failed to run self._text_rule_function - %s (%s)", e, m)) + end + end + + var format = self._text_rule_format + if type(format) == 'string' + import string + format = string.format(format, val_n) + else + format = "" + end + + self.text = format + return false # propagate the event further + end +end + +################################################################################# +# +# Other widgets +# +################################################################################# + +#==================================================================== +# label +#==================================================================== +class lvh_label : lvh_obj + static _lv_class = lv.label + # label do not need a sub-label + def post_init() + self._lv_label = self._lv_obj # the label is also the object itself + super(self).post_init() # call super + end +end + +#==================================================================== +# arc +#==================================================================== +class lvh_arc : lvh_obj + static _lv_class = lv.arc + static _lv_part2_selector = lv.PART_KNOB + + # line_width converts to arc_width + def set_line_width(t) + self._lv_obj.set_style_arc_width(int(t), 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + end + def get_line_width() + return self._lv_obj.get_arc_line_width(0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) + end + def set_line_width1(t) + self._lv_obj.set_style_arc_width(int(t), lv.PART_INDICATOR | lv.STATE_DEFAULT) + end + def get_line_width1() + return self._lv_obj.get_arc_line_width(lv.PART_INDICATOR | lv.STATE_DEFAULT) + end + + def set_min(t) + self._lv_obj.set_range(int(t), self.get_max()) + end + def set_max(t) + self._lv_obj.set_range(self.get_min(), int(t)) + end + def get_min() + return self._lv_obj.get_min_value() + end + def get_max() + return self._lv_obj.get_max_value() + end + def set_type(t) + var mode + if t == 0 mode = lv.ARC_MODE_NORMAL + elif t == 1 mode = lv.ARC_MODE_REVERSE + elif t == 2 mode = lv.ARC_MODE_SYMMETRICAL + end + if mode != nil + self._lv_obj.set_mode(mode) + end + end + def get_type() + return self._lv_obj.get_mode() + end +end + +#==================================================================== +# switch +#==================================================================== +class lvh_switch : lvh_obj + static _lv_class = lv.switch + static _lv_part2_selector = lv.PART_KNOB +end + +#==================================================================== +# spinner +#==================================================================== +class lvh_spinner : lvh_arc + static _lv_class = lv.spinner + + # init + # - create the LVGL encapsulated object + # arg1: parent object + # arg2: json line object + def init(parent, page, jline) + self._page = page + var angle = jline.find("angle", 60) + var speed = jline.find("speed", 1000) + self._lv_obj = lv.spinner(parent, speed, angle) + self.post_init() + end + + # ignore attributes, spinner can't be changed once created + def set_angle(t) end + def get_angle() end + def set_speed(t) end + def get_speed() end +end + +################################################################################# +# +# All other subclasses than just map the LVGL object +# and doesn't have any specific behavior +# +################################################################################# +class lvh_bar : lvh_obj static _lv_class = lv.bar end +class lvh_btn : lvh_obj static _lv_class = lv.btn end +class lvh_btnmatrix : lvh_obj static _lv_class = lv.btnmatrix end +class lvh_checkbox : lvh_obj static _lv_class = lv.checkbox end +class lvh_dropdown : lvh_obj static _lv_class = lv.dropdown end +class lvh_img : lvh_obj static _lv_class = lv.img end +class lvh_line : lvh_obj static _lv_class = lv.line end +class lvh_roller : lvh_obj static _lv_class = lv.roller end +class lvh_slider : lvh_obj static _lv_class = lv.slider end +class lvh_textarea : lvh_obj static _lv_class = lv.textarea end +# special case for scr (which is actually lv_obj) +class lvh_scr : lvh_obj static _lv_class = nil end # no class for screen + + +################################################################################# +# Class `lvh_page` +# +# Encapsulates a `lv_screen` which is `lv.obj(0)` object +################################################################################# +# +# ex of transition: lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, false) +class lvh_page + var _obj_id # (map) of `lvh_obj` objects by id numbers + var _page_id # (int) id number of this page + var _lv_scr # (lv_obj) lvgl screen object + var _oh # OpenHASP global object + # openhasp attributes for page are on item `#0` + var prev, next, back # (int) id values for `prev`, `next`, `back` buttons + + #==================================================================== + # `init` + # + # arg1: `page_number` (int) OpenHASP page id + # defaults to `1` if not specified + # page 0 is special, visible on all pages. Internally uses `layer_top` + # arg2: `oh` global OpenHASP monad object + # page_number: openhasp page number, defaults to `1` if not specified + #==================================================================== + def init(page_number, oh) + import global + self._oh = oh # memorize OpenHASP parent object + + # if no parameter, default to page #1 + page_number = int(page_number) + if page_number == nil page_number = 1 end + + self._page_id = page_number # remember our page_number + self._obj_id = {} # init list of objects + + # initialize the LVGL object for the page + # uses a lv_scr object except for page 0 where we use layer_top + # page 1 is mapped directly to the default screen `scr_act` + if page_number == 1 + self._lv_scr = lv.scr_act() # default screen + elif page_number == 0 + self._lv_scr = lv.layer_top() # top layer, visible over all screens + else + self._lv_scr = lv.obj(0) # allocate a new screen + var bg_color = lv.scr_act().get_style_bg_color(0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) # bg_color of default screen + self._lv_scr.set_style_bg_color(bg_color, 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#) # set white background + end + + # page object is also stored in the object map at id `0` as instance of `lvg_scr` + var obj_scr = lvh_scr(nil, self, nil, self._lv_scr) # store screen in a virtual object + self._obj_id[0] = obj_scr + + # create a global for this page of form p, ex `p1` + # create a global for the page attributes as pb0, ex `p1b0` + global.("p" + str(self._page_id)) = self + global.("p" + str(self._page_id) + "b0") = obj_scr + end + + ##################################################################### + # General Setters and Getters + ##################################################################### + + #==================================================================== + # retrieve lvgl screen object for this page + #==================================================================== + def get_scr() + return self._lv_scr + end + + #==================================================================== + # return id of this page + #==================================================================== + def id() + return self._page_id + end + + #==================================================================== + # add an object to this page + #==================================================================== + def set_obj(id, o) + self._obj_id[id] = o + end + def get_obj(id) + return self._obj_id.find(id) + end + + #==================================================================== + # `show` transition from one page to another + # duration: in ms, default 500 ms + # anim: -1 right to left, 1 left to right (default) + # + # show this page, with animation + #==================================================================== + static show_anim = { + 1: lv.SCR_LOAD_ANIM_MOVE_LEFT, + -1: lv.SCR_LOAD_ANIM_MOVE_RIGHT, + -2: lv.SCR_LOAD_ANIM_MOVE_TOP, + 2: lv.SCR_LOAD_ANIM_MOVE_BOTTOM, + 0: lv.SCR_LOAD_ANIM_NONE, + } + def show(anim, duration) + # ignore if the page does not contain a screen, like when id==0 + if self._lv_scr == nil return nil end + + # ignore if the screen is already active + # compare native LVGL objects with current screen + if self._lv_scr._p == lv.scr_act()._p return end # do nothing + + # default duration of 500ms + if duration == nil duration = 500 end + + # if anim is `nil` try to guess the direction from current screen + if anim == nil + anim = self._oh.page_dir_to(self.id()) + end + + # change current page + self._oh.lvh_page_cur_idx = self._page_id + + var anim_lvgl = self.show_anim.find(anim, lv.SCR_LOAD_ANIM_NONE) + # load new screen with animation, no delay, 500ms transition time, no auto-delete + lv.scr_load_anim(self._lv_scr, anim_lvgl, duration, 0, false) + end +end + +################################################################################# +# +# class `OpenHASP` to initialize the OpenHASP parsing +# +################################################################################# + +# main class controller, meant to be a singleton and the only externally used class +class OpenHASP + var dark # (bool) use dark theme? + var hres, vres # (int) resolution + var scr # (lv_obj) default LVGL screen + var r16, r20 # (lv_font) robotocondensed fonts size 16 and 20 + # openhasp objects + var lvh_pages # (list of lvg_page) list of pages + var lvh_page_cur_idx # (int) current page index number + # regex patterns + var re_page_target # compiled regex for action `p` + + # assign lvh_page to a static attribute + static lvh_page = lvh_page + # assign all classes as static attributes + static lvh_btn = lvh_btn + static lvh_switch = lvh_switch + static lvh_checkbox = lvh_checkbox + static lvh_label = lvh_label + # static lvh_led = lvh_led + static lvh_spinner = lvh_spinner + static lvh_obj = lvh_obj + static lvh_line = lvh_line + static lvh_img = lvh_img + static lvh_dropdown = lvh_dropdown + static lvh_roller = lvh_roller + static lvh_btnmatrix = lvh_btnmatrix + # static lvh_msgbox = lvh_msgbox + # static lvh_tabview = lvh_tabview + # static lvh_tab = lvh_tab + # static lvh_cpiker = lvh_cpiker + static lvh_bar = lvh_bar + static lvh_slider = lvh_slider + static lvh_arc = lvh_arc + # static lvh_linemeter = lvh_linemeter + # static lvh_gauge = lvh_gauge + static lvh_textarea = lvh_textarea # additional? + + static def_templ_name = "pages.jsonl" # default template name + + def init() + import re + self.re_page_target = re.compile("p\\d+") + # nothing to put here up to now + end + + def deinit() + # remove previous rule if any + if self._val_rule != nil + tasmota.remove_rule(self._val_rule, self) + end + if self._text_rule != nil + tasmota.remove_rule(self._text_rule, self) + end + end + + #==================================================================== + # init + # + # arg1: (bool) use dark theme if `true` + # + # implicitly loads `pages.jsonl` from file-system // TODO allow to specicify file name + #==================================================================== + def start(dark, templ_name) + import path + if templ_name == nil templ_name = self.def_templ_name end + if !path.exists(templ_name) + raise "io_erorr", "file '" + templ_name + "' not found" + end + # start lv if not already started. It does no harm to call lv.start() if LVGL was already started + lv.start() + + self.dark = bool(dark) + + self.hres = lv.get_hor_res() # ex: 320 + self.vres = lv.get_ver_res() # ex: 240 + self.scr = lv.scr_act() # LVGL default screean object + + self.r20 = lv.font_robotocondensed_latin1(20) # // TODO what if does not exist + self.r16 = lv.font_robotocondensed_latin1(16) # // TODO what if does not exist + + # set the theme for OpenHASP + var th2 = lv.theme_openhasp_init(0, lv.color(0xFF00FF), lv.color(0x303030), self.dark, self.r16) + self.scr.get_disp().set_theme(th2) + self.scr.set_style_bg_color(self.dark ? lv.color(0x000000) : lv.color(0xFFFFFF),0) # set background to white + # apply theme to layer_top, but keep it transparent + lv.theme_apply(lv.layer_top()) + lv.layer_top().set_style_bg_opa(0,0) + + self.lvh_pages = {} + # load from JSONL + self._load(templ_name) + end + + ################################################################################# + # Simple insertion sort - sorts the list in place, and returns the list + ################################################################################# + static def sort(l) + # insertion sort + for i:1..size(l)-1 + var k = l[i] + var j = i + while (j > 0) && (l[j-1] > k) + l[j] = l[j-1] + j -= 1 + end + l[j] = k + end + return l + end + + + ##################################################################### + # General Setters and Getters + ##################################################################### + + #==================================================================== + # return the current page as `lvh_page` object + #==================================================================== + def get_page_cur() + return self.lvh_pages[self.lvh_page_cur_idx] + end + + #==================================================================== + # load JSONL template + #==================================================================== + def _load(templ_name) + import string + import json + #- pages -# + self.lvh_page_cur_idx = 1 + var lvh_page_class = self.lvh_page + self.lvh_pages[1] = lvh_page_class(1, self) # always create page #1 + + var f = open(templ_name,"r") + var jsonl = string.split(f.read(), "\n") + f.close() + + # parse each line + for j:jsonl + var jline = json.load(j) + + if type(jline) == 'instance' + self.parse_page(jline) # parse page first to create any page related objects, may change self.lvh_page_cur_idx + # objects are created in the current page + self.parse_obj(jline, self.lvh_pages[self.lvh_page_cur_idx]) # then parse object within this page + end + end + + # current page is always 1 when we start + self.lvh_page_cur_idx = 1 + end + + #==================================================================== + # `parse` + # + # Manually parse a single JSON line, after initial load + #==================================================================== + def parse(j) + import json + var jline = json.load(j) + + if type(jline) == 'instance' + self.parse_page(jline) # parse page first to create any page related objects, may change self.lvh_page_cur_idx + # objects are created in the current page + self.parse_obj(jline, self.lvh_pages[self.lvh_page_cur_idx]) # then parse object within this page + else + raise "value_error", "unable to parse JSON line" + end + end + + #==================================================================== + # `pages_list_sorted` + # + # Return the sorted list of page (ids without page 0) starting + # from the current page. + # Ex: if pages are [0,1,3,4,5,6] + # pages_list_sorted(4) -> [4,5,6,1,3] + # + # Arg1: number of current page, or `0` for current page, or `nil` to return just the list of pages + # Returns: list of ints, or nil if current page is not found + #==================================================================== + def pages_list_sorted(cur_page) + # get list of pages as sorted array + var pages = [] + if cur_page == 0 cur_page = self.lvh_page_cur_idx end + for p: self.lvh_pages.keys() + if p != 0 pages.push(p) end # discard page 0 + end + pages = self.sort(pages) + if cur_page == nil return cur_page end + + var count_pages = size(pages) # how many pages are defined + pages = pages + pages # double the list to splice it + var cur_idx = pages.find(cur_page) + if cur_idx == nil return nil end # internal error, current page not found + + pages = pages[cur_idx .. cur_idx + count_pages - 1] # splice the list + + return pages + end + + #==================================================================== + # `page_dir_to` + # + # Compute the best direction (right or left) to go from + # the current page to the destination page + # + # Returns: + # 1: scroll to the next page (right) + # 0: unknown + # -1: scroll to the prev page (left) + # -2: scroll to the home page (up or left) + #==================================================================== + def page_dir_to(to_page) + var sorted_pages_list = self.pages_list_sorted(0) # list of pages sorted by number, page 0 excluded + if sorted_pages_list == nil return 0 end + + var count_pages = size(sorted_pages_list) # how many pages are possible + if count_pages <= 1 return 0 end + # if we have 2 pages, then only 1 direction is possible + if count_pages == 2 return 1 end + # we have at least 3 pages + + var to_page_idx = sorted_pages_list.find(to_page) # find index of target page + if to_page_idx == nil return 0 end # target page not found + if to_page_idx <= (count_pages + 1) / 2 + return 1 + else + return -1 + end + end + + #==================================================================== + # Execute a page changing action from `action` attribute + # + # This is called in async mode after a button callback + # + # Arg1: lvh_X object that fired the action + # Arg2: LVGL event fired + # Returns: nil + #==================================================================== + def do_action(lvh_obj, event_code) + if event_code != lv.EVENT_CLICKED return end + var action = lvh_obj._action + var cur_page = self.lvh_pages[self.lvh_page_cur_idx] + # print("do_action","lvh_obj",lvh_obj,"action",action,"cur_page",cur_page,self.lvh_page_cur_idx) + + # action can be `prev`, `next`, `back`, or `p` like `p1` + var to_page = nil + var sorted_pages_list = self.pages_list_sorted(self.lvh_page_cur_idx) + if size(sorted_pages_list) <= 1 return end # if only 1 page, do nothing + # handle prev/next/back values + # get the corresponding value from page object, + # if absent, revert to next page, previous page and page 1 + # print("sorted_pages_list",sorted_pages_list) + if action == 'prev' + to_page = int(cur_page.prev) + if to_page == nil to_page = sorted_pages_list[-1] end # if no prev, take the previous page + elif action == 'next' + to_page = int(cur_page.next) + if to_page == nil to_page = sorted_pages_list[1] end # if no next, take the next page + elif action == 'back' + to_page = int(cur_page.back) + if to_page == nil to_page = 1 end # if no nack, take page number 1 + elif self.re_page_target.match(action) + # action is supposed to be `p` format + to_page = int(action[1..-1]) # just skip first char and convert the rest to a string + end + + # print("to_page=",to_page) + if to_page != nil && to_page > 0 # we have a target + self.lvh_pages[to_page].show() # switvh to the target page + end + end + + #==================================================================== + # Parse page information + # + # Create a new page object if required + # Change the active page + #==================================================================== + def parse_page(jline) + if jline.has("page") && type(jline["page"]) == 'int' + var page = int(jline["page"]) + self.lvh_page_cur_idx = page # change current page + + # create the page object if it doesn't exist already + if !self.lvh_pages.contains(page) + var lvh_page_class = self.lvh_page + self.lvh_pages[page] = lvh_page_class(page, self) + end + + # check if there is "id":0 + if jline.find("id") == 0 + var lvh_page_cur = self.get_page_cur() + lvh_page_cur.prev = int(jline.find("prev", nil)) + lvh_page_cur.next = int(jline.find("next", nil)) + lvh_page_cur.back = int(jline.find("back", nil)) + end + end + end + + #==================================================================== + # Parse single object + #==================================================================== + def parse_obj(jline, page) + import global + import string + import introspect + + var obj_id = int(jline.find("id")) # id number or nil + var obj_type = str(jline.find("obj")) # obj class or nil + var obj_lvh # lvgl object created + var lvh_page_cur = self.get_page_cur() # current page object + + # first run any Berry code embedded + var berry_run = str(jline.find("berry_run")) + if berry_run != "nil" + try + var func_compiled = compile(berry_run) + # run the compiled code once + func_compiled() + except .. as e,m + print(string.format("HSP: unable to run berry code \"%s\" - '%s' - %s", berry_run, e, m)) + end + end + + # if line contains botn 'obj' and 'id', create the object + if obj_id == nil return end # if no object id, ignore line + if obj_type != "nil" && obj_id != nil + # 'obj_id' must be between 1 and 254 + if obj_id < 1 || obj_id > 254 + print("HSP: invalid 'id': " + str(obj_id) + " for 'obj':" + obj_type) + return + end + + # extract openhasp class, prefix with `lvh_`. Ex: `btn` becomes `lvh_btn` + # extract parent + var parent_lvgl + var parent_id = int(jline.find("parentid")) + + if parent_id != nil + var parent_obj = lvh_page_cur.get_obj(parent_id) # get parent object + if parent_obj != nil parent_lvgl = parent_obj._lv_obj end # parent + end + if parent_lvgl == nil + parent_lvgl = lvh_page_cur.get_scr() # if not parent, use the current page screen + end + + # check if a class with the requested name exists + # first look for a class with name `lvh_` exists + var obj_class = introspect.get(self, "lvh_" + obj_type) + var lv_instance = nil # allows to pre-instanciate the object + + # there is no lvh_X class, try to load the class name from the global namespace + if obj_class == nil + # if not found, check if a LVGL class with name `lv_` exists + var lv_cl = introspect.get(global, obj_type) + if lv_cl != nil && type(lv_cl) == 'class' + lv_instance = lv_cl(parent_lvgl) + obj_class = lvh_obj # use the basic lvh_obj component to encapsulate + end + end + + # still not found, try to load a module with the name of the class + if obj_class == nil + var lv_cl = introspect.module(obj_type) + if lv_cl != nil && type(lv_cl) == 'class' + lv_instance = lv_cl(parent_lvgl) + obj_class = lvh_obj # use the basic lvh_obj component to encapsulate + end + end + + if obj_class == nil + print("HSP: cannot find object of type " + str(obj_type)) + return + end + + # instanciate the object, passing the lvgl screen as parent object + obj_lvh = obj_class(parent_lvgl, page, jline, lv_instance) + + # add object to page object + lvh_page_cur.set_obj(obj_id, obj_lvh) + + # create a global variable for this object of form pb, ex p1b2 + var glob_name = string.format("p%ib%i", lvh_page_cur.id(), obj_id) + global.(glob_name) = obj_lvh + end + + if obj_id == 0 && obj_type != "nil" + print("HSP: cannot specify 'obj' for 'id':0") + return + end + + # if id==0, retrieve the 'scr' object of the current page + if obj_id == 0 + obj_lvh = self.get_page_cur().get_obj(0) # get object id '0' + end + + # set attributes + # try every attribute, if not supported it is silently ignored + for k:jline.keys() + # introspect.set(obj, k, jline[k]) + obj_lvh.(k) = jline[k] + end + end +end +openhasp.OpenHASP = OpenHASP + +################################################################################# +# General module initilization +################################################################################# + +# automatically instanciate the OpenHASP() monad +# note: value is cached in the module cache +# and is returned whenever you call `import openhasp` again +# This means that the object is never garbage collected +# +openhasp.init = def (m) # `init(m)` is called during first `import openhasp` + return openhasp.OpenHASP() +end + +return openhasp diff --git a/lib/libesp32/berry_tasmota/src/embedded/openhasp/demo-all.jsonl b/tasmota/berry/openhasp_src/openhasp_examples/demo-all.jsonl similarity index 100% rename from lib/libesp32/berry_tasmota/src/embedded/openhasp/demo-all.jsonl rename to tasmota/berry/openhasp_src/openhasp_examples/demo-all.jsonl diff --git a/lib/libesp32/berry_tasmota/src/embedded/openhasp/demo1.jsonl b/tasmota/berry/openhasp_src/openhasp_examples/demo1.jsonl similarity index 99% rename from lib/libesp32/berry_tasmota/src/embedded/openhasp/demo1.jsonl rename to tasmota/berry/openhasp_src/openhasp_examples/demo1.jsonl index 684e0d324..bc34ee5fb 100644 --- a/lib/libesp32/berry_tasmota/src/embedded/openhasp/demo1.jsonl +++ b/tasmota/berry/openhasp_src/openhasp_examples/demo1.jsonl @@ -1,5 +1,6 @@ {"page":1,"comment":"---------- Page 1 ----------"} {"page":1,"id":0,"bg_color":"#FFFFFF","bg_grad_color":"#FFFFFF","text_color":"#000000","radius":0,"border_side":0} + {"page":1,"id":1,"obj":"btn","x":0,"y":0,"w":240,"h":30,"text":"LIVING ROOM","value_font":22,"bg_color":"#2C3E50","bg_grad_color":"#2C3E50","text_color":"#FFFFFF","radius":0,"border_side":0} {"page":1,"id":2,"obj":"arc","x":20,"y":65,"w":80,"h":100,"max":40,"border_side":0,"type":0,"rotation":0,"start_angle":180,"end_angle":0,"start_angle1":180,"value_font":12,"value_ofs_x":0,"value_ofs_y":-14,"bg_opa":0,"text":"21.2°C","min":-20,"max":50,"val":21} diff --git a/lib/libesp32/berry_tasmota/src/embedded/openhasp/demo2.jsonl b/tasmota/berry/openhasp_src/openhasp_examples/demo2.jsonl similarity index 100% rename from lib/libesp32/berry_tasmota/src/embedded/openhasp/demo2.jsonl rename to tasmota/berry/openhasp_src/openhasp_examples/demo2.jsonl diff --git a/lib/libesp32/berry_tasmota/src/embedded/openhasp/demo3.jsonl b/tasmota/berry/openhasp_src/openhasp_examples/demo3.jsonl similarity index 100% rename from lib/libesp32/berry_tasmota/src/embedded/openhasp/demo3.jsonl rename to tasmota/berry/openhasp_src/openhasp_examples/demo3.jsonl diff --git a/tasmota/berry/openhasp_src/openhasp_examples/lv.jsonl b/tasmota/berry/openhasp_src/openhasp_examples/lv.jsonl new file mode 100644 index 000000000..a9af406b9 --- /dev/null +++ b/tasmota/berry/openhasp_src/openhasp_examples/lv.jsonl @@ -0,0 +1,44 @@ +{"page":0,"comment":"---------- Upper stat line ----------"} +{"id":0,"text_color":"#FFFFFF"} +{"id":11,"obj":"label","x":0,"y":0,"w":320,"pad_right":90,"h":22,"bg_color":"#D00000","bg_opa":255,"radius":0,"border_side":0,"text":"Tasmota","text_font":"montserrat-20"} + +{"id":15,"obj":"lv_wifi_arcs","x":291,"y":0,"w":29,"h":22,"radius":0,"border_side":0,"bg_color":"#000000","line_color":"#FFFFFF"} +{"id":16,"obj":"lv_clock","x":232,"y":3,"w":55,"h":16,"radius":0,"border_side":0} + +{"comment":"---------- Bottom buttons - prev/home/next ----------"} +{"id":101,"obj":"btn","x":20,"y":210,"w":80,"h":25,"action":"prev","bg_color":"#1fa3ec","radius":10,"border_side":1,"text":"\uF053","text_font":"montserrat-20"} +{"id":102,"obj":"btn","x":120,"y":210,"w":80,"h":25,"action":"back","bg_color":"#1fa3ec","radius":10,"border_side":1,"text":"\uF015","text_font":"montserrat-20"} +{"id":103,"obj":"btn","x":220,"y":210,"w":80,"h":25,"action":"next","bg_color":"#1fa3ec","radius":10,"border_side":1,"text":"\uF054","text_font":"montserrat-20"} + +{"page":2,"comment":"---------- Page 2 ----------"} +{"id":0,"bg_color":"#0000A0","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#FFFFFF"} + +{"comment":"---------- Wifi status ----------"} +{"id":20,"obj":"lv_wifi_graph","x":257,"y":25,"w":60,"h":40,"radius":0} +{"id":21,"obj":"lv_tasmota_info","x":3,"y":25,"w":251,"h":40,"radius":0} +{"id":22,"obj":"lv_tasmota_log","x":3,"y":68,"w":314,"h":90,"radius":0,"text_font":12} + +{"page":1,"comment":"---------- Page 1 ----------"} +{"id":0,"bg_color":"#0000A0","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#FFFFFF"} + +{"id":2,"obj":"arc","x":20,"y":65,"w":80,"h":100,"border_side":0,"type":0,"rotation":0,"start_angle":180,"end_angle":0,"start_angle1":180,"value_font":12,"value_ofs_x":0,"value_ofs_y":-14,"bg_opa":0,"text":"--.-°C","min":200,"max":800,"val":0,"val_rule":"ESP32#Temperature","val_rule_formula":"val * 10","text_rule":"ESP32#Temperature","text_rule_format":"%2.1f °C"} + +{"id":5,"obj":"label","x":2,"y":35,"w":140,"text":"Temperature","align":1} + +{"id":10,"obj":"label","x":172,"y":35,"w":140,"text":"MPU","align":0} +{"id":11,"obj":"label","x":172,"y":55,"w":140,"text":"x=","align":0,"text_rule":"MPU9250#AX","text_rule_format":"x=%6.3f","text_rule_formula":"val / 1000"} +{"id":12,"obj":"label","x":172,"y":75,"w":140,"text":"y=","align":0,"text_rule":"MPU9250#AY","text_rule_format":"y=%6.3f","text_rule_formula":"val / 1000"} +{"id":13,"obj":"label","x":172,"y":95,"w":140,"text":"z=","align":0,"text_rule":"MPU9250#AZ","text_rule_format":"z=%6.3f","text_rule_formula":"val / 1000"} + + +{"page":3,"comment":"---------- Page 3 ----------"} +{"page":3,"id":1,"obj":"btn","x":0,"y":20,"w":240,"h":30,"text":"PAGE 3","text_font":16,"bg_color":"#2C3E50","text_color":"#FFFFFF","radius":0,"border_side":0,"click":0} + +{"page":3,"id":11,"obj":"img","src":"A:/noun_Fan_35097_140.png","auto_size":1,"w":140,"h":140,"x":50,"y":75,"image_recolor":"lime","image_recolor_opa":150} +{"page":3,"id":12,"obj":"spinner","parentid":11,"x":7,"y":6,"w":126,"h":126,"bg_opa":0,"border_width":0,"line_width":7,"line_width1":7,"type":2,"angle":120,"speed":1000,"value_str":3,"value_font":24} + +{"page":4,"comment":"---------- Page 4 ----------"} +{"page":4,"id":1,"obj":"btn","x":0,"y":20,"w":240,"h":30,"text":"PAGE 4","value_font":24,"bg_color":"#2C3E50","text_color":"#FFFFFF","radius":0,"border_side":0,"click":0} +{"page":4,"id":2,"obj":"obj","x":5,"y":35,"w":230,"h":250,"click":0} + +{"comment":"--- Trigger sensors every 2 seconds ---","berry_run":"tasmota.add_cron('*/2 * * * * *', def () tasmota.publish_rule(tasmota.read_sensors()) end, 'oh_every_5_s')"} diff --git a/tasmota/berry/openhasp_src/openhasp_widgets.tapp b/tasmota/berry/openhasp_src/openhasp_widgets.tapp new file mode 100644 index 0000000000000000000000000000000000000000..45212df04b3b0cf12b418c6b9475107751ea88b9 GIT binary patch literal 8367 zcmeHNUymb45%+N$U>zX=LI@!UjrU<~Vmsc=B}!K8O1@j~#lpL{+V!0{l4x%1X?x~w zJY#0s>)Qwk1&I@i_!3AwBEcKt6Y#)0-+?FKE#is#(>>E;`?7y>iVg`!z8!a0S65e6 zSN*Cc$3MBbRxaTu`s7)EP2B$TuizQKua>@7a%U=*Pvx*VkoWuRrJKL}5Wop?OQ;)A*P9Jgt6<1dEkwuN<|ur(M-(}DINurX`HA>FcpSkAcY$y()G?o z5Q&ML#L0P?DMWbYC^wzN%5}ncykaznMzJ+K4@QAAPTZ+qKF*Hu??3&z|M;Je|MK^* zluG#hCLF_Jj4aG)p8c*jcx}~b7U;z=bknq4ra!in$V}|ONHcT?GAs*m<|bm2j`fo# zL-)K4KRh{t;|8iabrTt>8Vm`M&ZaV{rZODWn#+?g+)Sl%K%vUl>zbfiJy6p;4B0eJ ztF5|d)o?rDZN^h|9!h60c7|~nCsh!YA6ida^r_WR{NwgX-#Kh|kHjzV=V`y)?>PIN zgZBMie_^AHVLWxKTP@i0^6Mw@8OY)epNx}u7J1dxtmDL!iG%F7-+JpR>``4TUgCPe zj1+Qt;qui}*K^!3tZrX#^8p`Vg~H!`x6`?TK9VAlX)05kkqDpWVx_wPpVaY+47C3BKH_7!pN1nmWb%ulL z8;w1>UIRIb6X^hbm6g|d&^hYEwdr;G9lVNg4>v?2$3d!OA|B=RkA#Xb5)Q%3B*aW# zMj{?OmO~|i6oN%4mGnqj9S@r*fR_YkCSbs%j64%sW>e2qQeP+3Iz`4{YV=SMuM5Ko zr>eE)D1iI78B90pVso7u;oZ@i2wtRHU*minWrkL z>b380`qG^`BQVeAhb(|GQ7|$aK(LCG8$@Y!bDAdZgvr@h0<#Bg@j94Wh~v`}cd|og zC~RXbT-XOSh`~|^Z8(k58>r)h2nE(#uq%LEc%mQfa(IPjTCSrlA9i67gUSj=JZ?GB)Mr@bLhmlz2OtE%ZRsg-e#5}wXvsdAMQ29czs=gVO1 zt14u@j4lm6l2t#EDO~P%APv0f#{hCmfVmecOfI?kQ<+DCUg`&2_@=DP;3{=?qonVEpSBHdW><&X-(n-K8NI@v-aN_{yc#Z4gGrp;)h1=X=RjqFykL1MI>mDv#i zU>ZvSc+U{h!ZQlUCWeGAgc%arP}y%hEMmwY8bWkWB~fAuzz={=5$v#OvlY!|#;w7S z0ZDUZL7@rQTVbgPUaL7VDgdcN5GP~x<9rz@6dBQH0}$%-<;m8ADA~TqV6{AK_$uUX zW}eBSu~~ry7{#zJD!FJM$eMK_&vcoM&4~aMU)kH+!y;ta<+UO(J!9$TgJLzr!+XiW z1}8!}0{dO2TGpDPKY)6%7%#F)2+n+dUb@!gP;wDF@gwciMe*Jw)tl1;5M6zG6;EH# z;Rmr&@#Fm;suF12T@0Em`Yf& zj)67WX*HYMltDCZhhrI|=b3|UHT>j00*+Jiz>U|bT0@z|?yiUeXnjHqe}V#GNRMIx ztxt&P@fZU-P-l@YZDv8yzNpwrKnN>FL6R!6_tL`YEcGeFXbH^OR5GKZadcgWFwZlz zrzsmrR|Sok8Q90Jk}XN0bQwY;2dibvCOKvyd;~SIF$I}pxp)LEEVOWc>sLOCzgjBc z_v>7s%$lO=3?NaW;Ed=E^VIS4$GLuloQc_#2~3}tO6%*@ zSHMdfJnuTbBt2S7pqHYLiJIETZo2M1TP@BT3uvlacL^o-0%!;zZe$4As<&$E>l8yMCKfkP=TnP+|KV}R>2;4f z%(6(z+NA2t>f?8h_Pcl5{d*@hh*Mr1Z7NJFb9hvYJr}G&l2Jn+$_k7$dAqjT?;M^k z9ELZgMVw@PhjJ-xv-mvAG6oZ@{ zlg%uvKhNqQjkFBF+CUw0kF zqm)73qx+W_ujWzr887PF11x|3oy`l%TVIU71DrhPLMj)M7nIXa#HfL@) zlZ-Gh57o^YzE_;mDX;Q-#uYG!E-Y*QlC9*GXV!ul6EcEZ+W+&nlu6nAUbom#wk9x7 zgYIv&%J789{T+OwOUK5d_1s#XrxpSS>N+m20XYq09}3&Z4P=D{IDdZsG5#&QQh$YCsV}@vw;3+K&bAr;6&Nmb(+L{^U&KbA z!FRa{Zu9*Ipe~Cqz%#=ZTjHO=7R4<>H=FGz-zK)X84cH!!oKol)YlsP_W=G!gF8RK GU;hRDME=MC literal 0 HcmV?d00001 diff --git a/tasmota/berry/openhasp_src/openhasp_widgets/autoexec.be b/tasmota/berry/openhasp_src/openhasp_widgets/autoexec.be new file mode 100644 index 000000000..edada704e --- /dev/null +++ b/tasmota/berry/openhasp_src/openhasp_widgets/autoexec.be @@ -0,0 +1,6 @@ +# pre-load widgets so future `import` will be already in memory +# create tapp file with: +# rm rm openhasp_widgets.tapp; zip -j -0 openhasp_widgets.tapp openhasp_widgets/* +import lv_tasmota_log +import lv_tasmota_info +import lv_wifi_graph diff --git a/tasmota/berry/lvgl_examples/lv_tasmota_info.be b/tasmota/berry/openhasp_src/openhasp_widgets/lv_tasmota_info.be similarity index 100% rename from tasmota/berry/lvgl_examples/lv_tasmota_info.be rename to tasmota/berry/openhasp_src/openhasp_widgets/lv_tasmota_info.be diff --git a/tasmota/berry/lvgl_examples/lv_tasmota_log.be b/tasmota/berry/openhasp_src/openhasp_widgets/lv_tasmota_log.be similarity index 87% rename from tasmota/berry/lvgl_examples/lv_tasmota_log.be rename to tasmota/berry/openhasp_src/openhasp_widgets/lv_tasmota_log.be index 0bf2b42de..8db31f48b 100644 --- a/tasmota/berry/lvgl_examples/lv_tasmota_log.be +++ b/tasmota/berry/openhasp_src/openhasp_widgets/lv_tasmota_log.be @@ -24,14 +24,18 @@ class lv_tasmota_log : lv.obj self.refr_pos() self.label = lv.label(self) - self.label.set_width(self.get_width() - 12) self.label.set_style_text_color(lv.color(0x00FF00), lv.PART_MAIN | lv.STATE_DEFAULT) self.label.set_long_mode(lv.LABEL_LONG_CLIP) self.label.set_text("") # bug, still displays "Text" - self.add_event_cb( / obj, evt -> self.size_changed_cb(obj, evt), lv.EVENT_SIZE_CHANGED | lv.EVENT_STYLE_CHANGED | lv.EVENT_DELETE, 0) + self.label.set_width(self.get_width() - 12) + self.label.set_height(self.get_height() - 6) + self.add_event_cb( / -> self._size_changed(), lv.EVENT_SIZE_CHANGED, 0) + self.add_event_cb( / -> self._size_changed(), lv.EVENT_STYLE_CHANGED, 0) + self.add_event_cb( / -> tasmota.remove_driver(self), lv.EVENT_DELETE, 0) + self.lines = [] self.line_len = 0 self.log_reader = tasmota_log_reader() @@ -54,7 +58,7 @@ class lv_tasmota_log : lv.obj self.line_len = line_len end - def _size_changed() + def _size_changed(obj, evt) # print(">>> lv.EVENT_SIZE_CHANGED") var pad_hor = self.get_style_pad_left(lv.PART_MAIN | lv.STATE_DEFAULT) + self.get_style_pad_right(lv.PART_MAIN | lv.STATE_DEFAULT) @@ -64,7 +68,7 @@ class lv_tasmota_log : lv.obj + self.get_style_pad_bottom(lv.PART_MAIN | lv.STATE_DEFAULT) + self.get_style_border_width(lv.PART_MAIN | lv.STATE_DEFAULT) * 2 + 3 - var w = self.get_width() - pad_hor + var w = self.get_width() - pad_hor - 2 var h = self.get_height() - pad_ver self.label.set_size(w, h) # print("w",w,"h",h,"pad_hor",pad_hor,"pad_ver",pad_ver) @@ -76,15 +80,6 @@ class lv_tasmota_log : lv.obj self.set_lines_count(lines_count) end - def size_changed_cb(obj, event) - var code = event.code - if code == lv.EVENT_SIZE_CHANGED || code == lv.EVENT_STYLE_CHANGED - self._size_changed() - elif code == lv.EVENT_DELETE - tasmota.remove_driver(self) - end - end - def every_second() var dirty = false for n:0..20 diff --git a/tasmota/berry/lvgl_examples/lv_wifi_graph.be b/tasmota/berry/openhasp_src/openhasp_widgets/lv_wifi_graph.be similarity index 100% rename from tasmota/berry/lvgl_examples/lv_wifi_graph.be rename to tasmota/berry/openhasp_src/openhasp_widgets/lv_wifi_graph.be From 1e49909961e8455e276c530fa7b6c830e5a113b8 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Thu, 7 Apr 2022 13:49:58 +0200 Subject: [PATCH 352/355] Add ESP32 Support for OpenHASP v1.0 Add ESP32 Support for OpenHASP v1.0 by Stephan Hadinger (#15307) --- CHANGELOG.md | 1 + RELEASENOTES.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ddd7e164..b9699b86a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file. ### Added - Support for improv as used by esp-web-tools - Command ``IfxSensor 1`` to send non-teleperiod data to influxdb +- ESP32 Support for OpenHASP v1.0 by Stephan Hadinger (#15307) ### Changed - Remove support for Internet Explorer by allowing ECMAScript6 syntax using less JavaScript code bytes (#15280) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b76d9dfdf..953f5ae25 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -123,6 +123,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - NeoPool JSON modules, power module, cell info, chlorine, conductivity and ionization - ESP32 Berry always enable rules - ESP32 Berry bootloop protection +- ESP32 Support for OpenHASP v1.0 by Stephan Hadinger [#15307](https://github.com/arendst/Tasmota/issues/15307) - ESP32 support for BLE Mi scale V1 [#13517](https://github.com/arendst/Tasmota/issues/13517) - ESP32 integrate Homekit in Bluetooth binary [#14818](https://github.com/arendst/Tasmota/issues/14818) - ESP32 Berry virtual Alexa hue device [#14833](https://github.com/arendst/Tasmota/issues/14833) From d63077ab93a38797c1e5657229825cf5b10e73b7 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Thu, 7 Apr 2022 13:58:40 +0200 Subject: [PATCH 353/355] Fix tfminiplus (#15305) --- tasmota/xsns_86_tfminiplus.ino | 38 +++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/tasmota/xsns_86_tfminiplus.ino b/tasmota/xsns_86_tfminiplus.ino index 703817f79..0f31032e0 100644 --- a/tasmota/xsns_86_tfminiplus.ino +++ b/tasmota/xsns_86_tfminiplus.ino @@ -115,27 +115,27 @@ void TfmpTrigger(void) } } -void TfmpProcessData(void) -{ - uint16_t crc = 0; - // distance to object (default in cm) - tfminiplus_sensor.distance = (Tfmp_buffer[3] << 8) + Tfmp_buffer[2]; - // signal strength (between 100 and 65535 fine, otherwise 0 due to out of range of non-reflective surface) - tfminiplus_sensor.sigstrength = (Tfmp_buffer[5] << 8) + Tfmp_buffer[4]; - // chip temperature - tfminiplus_sensor.chiptemp = (((Tfmp_buffer[7] << 8) + Tfmp_buffer[6]) >> 3) - 256; +void TfmpProcessData(void) { // check crc sum - for (int i = 0; i < TFMP_MAX_DATA_LEN - 1; ++i) - { + uint16_t crc = 0; + for (int i = 0; i < TFMP_MAX_DATA_LEN - 1; ++i) { crc += (uint16_t)Tfmp_buffer[i]; } - if (!(char)(crc & 0xff) != Tfmp_buffer[TFMP_MAX_DATA_LEN]) - { + + if ((char)(crc & 0xff) == Tfmp_buffer[TFMP_MAX_DATA_LEN-1]) { + // distance to object (default in cm) + tfminiplus_sensor.distance = (Tfmp_buffer[3] << 8) + Tfmp_buffer[2]; + // signal strength (between 100 and 65535 fine, otherwise 0 due to out of range of non-reflective surface) + tfminiplus_sensor.sigstrength = (Tfmp_buffer[5] << 8) + Tfmp_buffer[4]; + // chip temperature + tfminiplus_sensor.chiptemp = (((Tfmp_buffer[7] << 8) + Tfmp_buffer[6]) >> 3) - 256; + + DEBUG_SENSOR_LOG(PSTR("TFmini Plus: Distance: %d"), tfminiplus_sensor.distance); + DEBUG_SENSOR_LOG(PSTR("TFmini Plus: Signal: %d"), tfminiplus_sensor.sigstrength); + DEBUG_SENSOR_LOG(PSTR("TFmini Plus: Chip Temp: %d"), tfminiplus_sensor.chiptemp); + } else { DEBUG_SENSOR_LOG(PSTR("TFmini Plus: crc error")); } - DEBUG_SENSOR_LOG(PSTR("TFmini Plus: Distance: %d"), tfminiplus_sensor.distance); - DEBUG_SENSOR_LOG(PSTR("TFmini Plus: Signal: %d"), tfminiplus_sensor.sigstrength); - DEBUG_SENSOR_LOG(PSTR("TFmini Plus: Chip Temp: %d"), tfminiplus_sensor.chiptemp); TfmpSerial->flush(); } @@ -162,10 +162,14 @@ bool TfmpAddData(char nextChar) // Buffer position static uint8_t currentIndex = 0; // Store data into buffer at position + if ((currentIndex >0) && (0x59 == Tfmp_buffer[currentIndex-1]) && (0x59 == nextChar)) + { + currentIndex = 1; + } Tfmp_buffer[currentIndex] = nextChar; currentIndex++; // Check for too many data - if (currentIndex >= TFMP_MAX_DATA_LEN) + if (currentIndex > TFMP_MAX_DATA_LEN) { // Terminate buffer and reset position Tfmp_buffer[TFMP_MAX_DATA_LEN] = '\0'; From ccdd8c9861124a83860a733cd171a72dd181706a Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Thu, 7 Apr 2022 15:06:21 +0200 Subject: [PATCH 354/355] Add Sensor34 commands Add commands ``Sensor34 10 `` and ``Sensor34 11 `` to use HX711 absolute weight conversion (#15292) --- CHANGELOG.md | 6 ++- RELEASENOTES.md | 3 +- tasmota/settings.ino | 16 +++++--- tasmota/tasmota_version.h | 2 +- tasmota/xsns_34_hx711.ino | 84 ++++++++++++++++++++------------------- 5 files changed, 62 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9699b86a..d5265255c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,11 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - Development -## [11.0.0.5] +## [11.0.0.6] +### Added +- Commands ``Sensor34 10 `` and ``Sensor34 11 `` to use HX711 absolute weight conversion (#15292) + +## [11.0.0.5] 20220407 ### Added - Support for improv as used by esp-web-tools - Command ``IfxSensor 1`` to send non-teleperiod data to influxdb diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 953f5ae25..34ef99c74 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -103,7 +103,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo [Complete list](BUILDS.md) of available feature and sensors. -## Changelog v11.0.0.5 +## Changelog v11.0.0.6 ### Added - Command ``SetOption135 1`` to disable LVGL splash screen - Command ``SetOption136 1`` to disable single sensor reports from Tuya devices while keeping teleperiod reports [#15216](https://github.com/arendst/Tasmota/issues/15216) @@ -112,6 +112,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo - Command ``RfTimeout 100..60000`` to disable duplicate RfReceive. Default 1000 [#15061](https://github.com/arendst/Tasmota/issues/15061) - Command ``IfxSensor 1`` to send non-teleperiod data to influxdb - Commands ``Sensor12 D0 .. D5, S0 .. S5`` allowing differential or single-ended modes [#15001](https://github.com/arendst/Tasmota/issues/15001) +- Commands ``Sensor34 10 `` and ``Sensor34 11 `` to use HX711 absolute weight conversion [#15292](https://github.com/arendst/Tasmota/issues/15292) - NeoPool commands ``NPpHMin``, ``NPpHMax``, ``NPpH``, ``NPRedox``, ``NPHydrolysis``, ``NPIonization``, ``NPChlorine`` and ``NPControl`` [#15015](https://github.com/arendst/Tasmota/issues/15015) - NeoPool system voltages display - TasmotaSerial implement ``end()`` diff --git a/tasmota/settings.ino b/tasmota/settings.ino index 6f7e89783..eb76cf664 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -627,7 +627,7 @@ void SettingsSave(uint8_t rotate) { Settings->cfg_size = sizeof(TSettings); Settings->cfg_crc = GetSettingsCrc(); // Keep for backward compatibility in case of fall-back just after upgrade Settings->cfg_crc32 = GetSettingsCrc32(); -#ifdef USE_COUNTER +#ifdef USE_COUNTER CounterInterruptDisable(true); #endif #ifdef ESP8266 @@ -655,7 +655,7 @@ void SettingsSave(uint8_t rotate) { } #endif // FIRMWARE_MINIMAL RtcSettingsSave(); -#ifdef USE_COUNTER +#ifdef USE_COUNTER CounterInterruptDisable(false); #endif } @@ -1489,11 +1489,11 @@ void SettingsDelta(void) { Settings->flag5.disable_referer_chk |= true; #endif } - if (Settings->version < 0x09050009) { + if (Settings->version < 0x09050009) { // 9.5.0.9 memset(&Settings->energy_kWhtoday_ph, 0, 36); memset(&RtcSettings.energy_kWhtoday_ph, 0, 24); } - if (Settings->version < 0x0A000003) { + if (Settings->version < 0x0A000003) { // 10.0.0.3 if (0 == Settings->param[P_ARP_GRATUITOUS]) { Settings->param[P_ARP_GRATUITOUS] = WIFI_ARP_INTERVAL; #ifdef USE_TLS @@ -1506,16 +1506,20 @@ void SettingsDelta(void) { #endif } } - if (Settings->version < 0x0A010003) { + if (Settings->version < 0x0A010003) { // 10.1.0.3 Settings->sserial_config = Settings->serial_config; } - if (Settings->version < 0x0A010006) { + if (Settings->version < 0x0A010006) { // 10.1.0.6 Settings->web_time_start = 0; Settings->web_time_end = 0; } if (Settings->version < 0x0B000003) { // 11.0.0.3 memcpy(Settings->pulse_timer, Settings->ex_pulse_timer, 16); } + if (Settings->version < 0x0B000006) { // 11.0.0.6 + Settings->weight_absconv_a = 0; + Settings->weight_absconv_b = 0; + } Settings->version = VERSION; SettingsSave(1); diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h index dbf3330d5..f5c1f170e 100644 --- a/tasmota/tasmota_version.h +++ b/tasmota/tasmota_version.h @@ -20,6 +20,6 @@ #ifndef _TASMOTA_VERSION_H_ #define _TASMOTA_VERSION_H_ -const uint32_t VERSION = 0x0B000005; // 11.0.0.5 +const uint32_t VERSION = 0x0B000006; // 11.0.0.6 #endif // _TASMOTA_VERSION_H_ diff --git a/tasmota/xsns_34_hx711.ino b/tasmota/xsns_34_hx711.ino index 63f215f5f..f25eda0ab 100644 --- a/tasmota/xsns_34_hx711.ino +++ b/tasmota/xsns_34_hx711.ino @@ -52,13 +52,15 @@ #define HX_GAIN_32 2 // Channel B, gain factor 32 #define HX_GAIN_64 3 // Channel A, gain factor 64 -#define D_JSON_WEIGHT_REF "WeightRef" -#define D_JSON_WEIGHT_CAL "WeightCal" -#define D_JSON_WEIGHT_MAX "WeightMax" -#define D_JSON_WEIGHT_ITEM "WeightItem" -#define D_JSON_WEIGHT_CHANGE "WeightChange" #define D_JSON_WEIGHT_RAW "WeightRaw" -#define D_JSON_WEIGHT_DELTA "WeightDelta" +#define D_JSON_WEIGHT_REF "Ref" +#define D_JSON_WEIGHT_CAL "Cal" +#define D_JSON_WEIGHT_MAX "Max" +#define D_JSON_WEIGHT_ITEM "Item" +#define D_JSON_WEIGHT_CHANGE "Change" +#define D_JSON_WEIGHT_DELTA "Delta" +#define D_JSON_WEIGHT_ABSC_A "AbsConvA" +#define D_JSON_WEIGHT_ABSC_B "AbsConvB" enum HxCalibrationSteps { HX_CAL_END, HX_CAL_LIMBO, HX_CAL_FINISH, HX_CAL_FAIL, HX_CAL_DONE, HX_CAL_FIRST, HX_CAL_RESET, HX_CAL_START }; @@ -187,85 +189,83 @@ void SetWeightDelta(void) { * Sensor34 8 0 - Disable JSON weight change message * Sensor34 8 1 - Enable JSON weight change message * Sensor34 9 - Set minimum delta to trigger JSON message + * Sensor34 10 - Set A = a * 10^9 for raw to absolute weight conversion: y=a*x+b + * Sensor34 11 - Set B = b * 10^6 for raw to absolute weight conversion: y=a*x+b \*********************************************************************************************/ bool HxCommand(void) { bool serviced = true; - bool show_parms = false; + bool show_parms = true; char argument[XdrvMailbox.data_len]; + long value = 0; for (uint32_t ca = 0; ca < XdrvMailbox.data_len; ca++) { if ((' ' == XdrvMailbox.data[ca]) || ('=' == XdrvMailbox.data[ca])) { XdrvMailbox.data[ca] = ','; } } + bool any_value = (strchr(XdrvMailbox.data, ',') != nullptr); + if (any_value) { value = strtol(ArgV(argument, 2), nullptr, 10); } switch (XdrvMailbox.payload) { case 1: // Reset scale HxReset(); Response_P(S_JSON_SENSOR_INDEX_SVALUE, XSNS_34, "Reset"); + show_parms = false; break; case 2: // Calibrate - if (strchr(XdrvMailbox.data, ',') != nullptr) { - Settings->weight_reference = strtol(ArgV(argument, 2), nullptr, 10); - } + if (any_value) { Settings->weight_reference = value; } Hx.scale = 1; HxReset(); Hx.calibrate_step = HX_CAL_START; Hx.calibrate_timer = 1; HxCalibrationStateTextJson(3); + show_parms = false; break; case 3: // WeightRef to user reference - if (strchr(XdrvMailbox.data, ',') != nullptr) { - Settings->weight_reference = strtol(ArgV(argument, 2), nullptr, 10); - } - show_parms = true; + if (any_value) { Settings->weight_reference = value; } break; case 4: // WeightCal to user calculated value - if (strchr(XdrvMailbox.data, ',') != nullptr) { - Settings->weight_calibration = strtol(ArgV(argument, 2), nullptr, 10); + if (any_value) { + Settings->weight_calibration = value; Hx.scale = Settings->weight_calibration; } - show_parms = true; break; case 5: // WeightMax - if (strchr(XdrvMailbox.data, ',') != nullptr) { - Settings->weight_max = strtol(ArgV(argument, 2), nullptr, 10) / 1000; - } - show_parms = true; + if (any_value) { Settings->weight_max = value; } break; case 6: // WeightItem if (strchr(XdrvMailbox.data, ',') != nullptr) { Settings->weight_item = (unsigned long)(CharToFloat(ArgV(argument, 2)) * 10); } - show_parms = true; break; case 7: // WeightSave Settings->energy_frequency_calibration = Hx.weight; Response_P(S_JSON_SENSOR_INDEX_SVALUE, XSNS_34, PSTR(D_JSON_DONE)); + show_parms = false; break; case 8: // Json on weight change - if (strchr(XdrvMailbox.data, ',') != nullptr) { - Settings->SensorBits1.hx711_json_weight_change = strtol(ArgV(argument, 2), nullptr, 10) & 1; - } - show_parms = true; + if (any_value) { Settings->SensorBits1.hx711_json_weight_change = value &1; } break; case 9: // WeightDelta - if (strchr(XdrvMailbox.data, ',') != nullptr) { - Settings->weight_change = strtol(ArgV(argument, 2), nullptr, 10); + if (any_value) { + Settings->weight_change = value; SetWeightDelta(); } - show_parms = true; break; - default: - show_parms = true; + case 10: // AbsoluteConversion, A + if (any_value) { Settings->weight_absconv_a = value; } + break; + case 11: // AbsoluteConversion, B + if (any_value) { Settings->weight_absconv_b = value; } + break; } if (show_parms) { - char item[33]; - dtostrfd((float)Settings->weight_item / 10, 1, item); Response_P(PSTR("{\"Sensor34\":{\"" D_JSON_WEIGHT_REF "\":%d,\"" D_JSON_WEIGHT_CAL "\":%d,\"" D_JSON_WEIGHT_MAX "\":%d,\"" - D_JSON_WEIGHT_ITEM "\":%s,\"" D_JSON_WEIGHT_CHANGE "\":\"%s\",\"" D_JSON_WEIGHT_DELTA "\":%d}}"), + D_JSON_WEIGHT_ITEM "\":%1_f,\"" D_JSON_WEIGHT_CHANGE "\":\"%s\",\"" D_JSON_WEIGHT_DELTA "\":%d,\"" + D_JSON_WEIGHT_ABSC_A "\":%d,\"" D_JSON_WEIGHT_ABSC_B "\":%d}}"), Settings->weight_reference, Settings->weight_calibration, Settings->weight_max * 1000, - item, GetStateText(Settings->SensorBits1.hx711_json_weight_change), Settings->weight_change); + &Settings->weight_item, GetStateText(Settings->SensorBits1.hx711_json_weight_change), Settings->weight_change, + Settings->weight_absconv_a, Settings->weight_absconv_b); } return serviced; @@ -445,13 +445,17 @@ void HxShow(bool json) { uint16_t count = 0; float weight = 0; if (Hx.calibrate_step < HX_CAL_FAIL) { - if (Hx.weight && Settings->weight_item) { - count = (Hx.weight * 10) / Settings->weight_item; - if (count > 1) { - snprintf_P(scount, sizeof(scount), PSTR(",\"" D_JSON_COUNT "\":%d"), count); + if ((Settings->weight_absconv_a != 0) && (Settings->weight_absconv_b != 0)) { + weight = (float)Settings->weight_absconv_a / 1e9 * Hx.raw + (float)Settings->weight_absconv_b / 1e6; + } else { + if (Hx.weight && Settings->weight_item) { + count = (Hx.weight * 10) / Settings->weight_item; + if (count > 1) { + snprintf_P(scount, sizeof(scount), PSTR(",\"" D_JSON_COUNT "\":%d"), count); + } } + weight = (float)Hx.weight / 1000; // kilograms } - weight = (float)Hx.weight / 1000; // kilograms } char weight_chr[33]; dtostrfd(weight, Settings->flag2.weight_resolution, weight_chr); From 97da53193c6a966eb9c17d8e8d6020e99adb261b Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Thu, 7 Apr 2022 15:52:55 +0200 Subject: [PATCH 355/355] Fix weight_item display regression --- tasmota/xsns_34_hx711.ino | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tasmota/xsns_34_hx711.ino b/tasmota/xsns_34_hx711.ino index f25eda0ab..332c98c7e 100644 --- a/tasmota/xsns_34_hx711.ino +++ b/tasmota/xsns_34_hx711.ino @@ -260,11 +260,13 @@ bool HxCommand(void) { } if (show_parms) { + char item[33]; + dtostrfd((float)Settings->weight_item / 10, 1, item); Response_P(PSTR("{\"Sensor34\":{\"" D_JSON_WEIGHT_REF "\":%d,\"" D_JSON_WEIGHT_CAL "\":%d,\"" D_JSON_WEIGHT_MAX "\":%d,\"" - D_JSON_WEIGHT_ITEM "\":%1_f,\"" D_JSON_WEIGHT_CHANGE "\":\"%s\",\"" D_JSON_WEIGHT_DELTA "\":%d,\"" + D_JSON_WEIGHT_ITEM "\":%s,\"" D_JSON_WEIGHT_CHANGE "\":\"%s\",\"" D_JSON_WEIGHT_DELTA "\":%d,\"" D_JSON_WEIGHT_ABSC_A "\":%d,\"" D_JSON_WEIGHT_ABSC_B "\":%d}}"), Settings->weight_reference, Settings->weight_calibration, Settings->weight_max * 1000, - &Settings->weight_item, GetStateText(Settings->SensorBits1.hx711_json_weight_change), Settings->weight_change, + item, GetStateText(Settings->SensorBits1.hx711_json_weight_change), Settings->weight_change, Settings->weight_absconv_a, Settings->weight_absconv_b); }