From fa8643012dbb88f12bfea92ab8829b084bc8d34b Mon Sep 17 00:00:00 2001
From: hk2k2 <70974088+hk2k2@users.noreply.github.com>
Date: Tue, 6 Jul 2021 00:07:09 +0200
Subject: [PATCH 01/16] Update xsns_35_tx20.ino
Extended tx20.ino for supporting Technoline WS2300-15 Anemometer.
This Model is very similar to TX20 - but use a slightly different Datagram.
use it with #ifdef USE_WS2300_WIND_SENSOR -> choose only one of them (TX20 || TX23 || WS2300-15)
Usage is the same as TX20/23, values are proofed with original Weather Station from Technoline.
Sorry for my Code.. was try and error some hours to get it working with the #ifdef stuff..
Documentation Update follows soon..
---
tasmota/xsns_35_tx20.ino | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/tasmota/xsns_35_tx20.ino b/tasmota/xsns_35_tx20.ino
index f1594c4c3..3e1cfd25b 100644
--- a/tasmota/xsns_35_tx20.ino
+++ b/tasmota/xsns_35_tx20.ino
@@ -17,7 +17,7 @@
along with this program. If not, see .
*/
-#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR)
+#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR) || defined(USE_WS2300_WIND_SENSOR)
/*********************************************************************************************\
* La Crosse TX20/TX23 Anemometer
@@ -55,6 +55,16 @@
#warning **** use USE_TX20_WIND_SENSOR or USE_TX23_WIND_SENSOR but not both together, TX20 disabled ****
#endif // USE_TX20_WIND_SENSOR && USE_TX23_WIND_SENSOR
+#if defined(USE_WS2300_WIND_SENSOR) && defined(USE_TX23_WIND_SENSOR)
+#undef USE_WS2300_WIND_SENSOR
+#warning **** use USE_WS2300_WIND_SENSOR or USE_TX23_WIND_SENSOR but not both together, WS2300 disabled ****
+#endif // USE_TX20_WIND_SENSOR && USE_TX23_WIND_SENSOR
+
+#if defined(USE_WS2300_WIND_SENSOR) && defined(USE_TX20_WIND_SENSOR)
+#undef USE_WS2300_WIND_SENSOR
+#warning **** use USE_WS2300_WIND_SENSOR or USE_TX20_WIND_SENSOR but not both together, WS2300 disabled ****
+#endif // USE_TX20_WIND_SENSOR && USE_TX23_WIND_SENSOR
+
// #define USE_TX2X_WIND_SENSOR_NOSTATISTICS // suppress statistics (speed/dir avg/min/max/range)
#define TX2X_BIT_TIME 1220 // microseconds
#define TX2X_WEIGHT_AVG_SAMPLE 150 // seconds
@@ -70,9 +80,14 @@ extern "C" {
#ifdef USE_TX20_WIND_SENSOR
#undef D_TX2x_NAME
#define D_TX2x_NAME "TX20"
-#else // USE_TX20_WIND_SENSOR
+#endif
+#ifdef USE_TX23_WIND_SENSOR // USE_TX23_WIND_SENSOR
#undef D_TX2x_NAME
#define D_TX2x_NAME "TX23"
+#endif
+#ifdef USE_WS2300_WIND_SENSOR // USE_WS2300_WIND_SENSOR
+#undef D_TX2x_NAME
+#define D_TX2x_NAME "WS2300-15"
#endif // USE_TX20_WIND_SENSOR
#ifdef USE_WEBSERVER
@@ -236,7 +251,14 @@ void IRAM_ATTR TX2xStartRead(void)
#ifdef USE_TX23_WIND_SENSOR
if ((chk == tx2x_sd) && (0x1b==tx2x_sa) && (tx2x_sb==tx2x_se) && (tx2x_sc==tx2x_sf) && (tx2x_sc < 511)) {
#else
- if ((chk == tx2x_sd) && (tx2x_sb==tx2x_se) && (tx2x_sc==tx2x_sf) && (tx2x_sc < 511)) {
+ if
+ #ifdef USE_TX20_WIND_SENSOR
+ ((chk == tx2x_sd) && (tx2x_sb==tx2x_se) && (tx2x_sc==tx2x_sf) && (tx2x_sc < 511))
+ #endif
+ #ifdef USE_WS2300_WIND_SENSOR
+ ((chk == tx2x_sd) && (tx2x_sc < 511))
+ #endif
+ {
#endif
tx2x_last_available = TasmotaGlobal.uptime;
// Wind speed spec: 0 to 180 km/h (0 to 50 m/s)
@@ -590,4 +612,4 @@ bool Xsns35(uint8_t function)
return result;
}
-#endif // USE_TX20_WIND_SENSOR || USE_TX23_WIND_SENSOR
\ No newline at end of file
+#endif // USE_TX20_WIND_SENSOR || USE_TX23_WIND_SENSOR
From edd6839e484c1084f425e4734c1c2c579e794275 Mon Sep 17 00:00:00 2001
From: Alexander Savchenko
Date: Sun, 11 Jul 2021 00:16:31 +0300
Subject: [PATCH 02/16] Telaire T67XX CO2 sensor support
---
I2CDEVICES.md | 3 +-
tasmota/my_user_config.h | 1 +
tasmota/tasmota_configurations.h | 1 +
tasmota/tasmota_configurations_ESP32.h | 1 +
tasmota/xsns_89_t67xx.ino | 350 +++++++++++++++++++++++++
5 files changed, 355 insertions(+), 1 deletion(-)
create mode 100644 tasmota/xsns_89_t67xx.ino
diff --git a/I2CDEVICES.md b/I2CDEVICES.md
index 2b18c3d4c..730d24113 100644
--- a/I2CDEVICES.md
+++ b/I2CDEVICES.md
@@ -93,4 +93,5 @@ Index | Define | Driver | Device | Address(es) | Description
57 | USE_TOF10120 | xsns_84 | TOF10120 | 0x52 | Time-of-flight (ToF) distance sensor
58 | USE_MPU_ACCEL | xsns_85 | MPU_ACCEL| 0x68 | MPU6886/MPU9250 6-axis MotionTracking sensor from M5Stack
59 | USE_BM8563 | xdrv_56 | BM8563 | 0x51 | BM8563 RTC from M5Stack
- 60 | USE_AM2320 | xsns_88 | AM2320 | 0x5C | Temperature and Humidity sensor
\ No newline at end of file
+ 60 | USE_AM2320 | xsns_88 | AM2320 | 0x5C | Temperature and Humidity sensor
+ 61 | USE_T67XX | xsns_89 | T67XX | 0x15 | CO2 sensor
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 1a105d8c4..dbb51063c 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -575,6 +575,7 @@
#define USE_APDS9960_PROXIMITY // Enable APDS9960 Proximity feature (>50 code)
#define USE_APDS9960_COLOR // Enable APDS9960 Color feature (+0.8k code)
#define USE_APDS9960_STARTMODE 0 // Default to enable Gesture mode
+// #define USE_T67XX // Enable Telaire T67XX CO2 sensor (+1.3k code)
// #define USE_MCP230xx // [I2cDriver22] Enable MCP23008/MCP23017 - Must define I2C Address in #define USE_MCP230xx_ADDR below - range 0x20 - 0x27 (+5k1 code)
// #define USE_MCP230xx_ADDR 0x20 // Enable MCP23008/MCP23017 I2C Address to use (Must be within range 0x20 through 0x26 - set according to your wired setup)
// #define USE_MCP230xx_OUTPUT // Enable MCP23008/MCP23017 OUTPUT support through sensor29 commands (+2k2 code)
diff --git a/tasmota/tasmota_configurations.h b/tasmota/tasmota_configurations.h
index b2aff921c..1330accc2 100644
--- a/tasmota/tasmota_configurations.h
+++ b/tasmota/tasmota_configurations.h
@@ -148,6 +148,7 @@
//#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)
+#define USE_T67XX // Add support for T67XX CO2 sensor (+1.3k code)
#define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
#ifndef CO2_LOW
#define CO2_LOW 800 // Below this CO2 value show green light (needs PWM or WS2812 RG(B) led and enable with SetOption18 1)
diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h
index 5ebf6ba9e..c0380cb47 100644
--- a/tasmota/tasmota_configurations_ESP32.h
+++ b/tasmota/tasmota_configurations_ESP32.h
@@ -303,6 +303,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_T67XX // Add support for T67XX CO2 sensor (+1.3k code)
//#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
//#define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
#ifndef CO2_LOW
diff --git a/tasmota/xsns_89_t67xx.ino b/tasmota/xsns_89_t67xx.ino
new file mode 100644
index 000000000..204b5fadb
--- /dev/null
+++ b/tasmota/xsns_89_t67xx.ino
@@ -0,0 +1,350 @@
+/*
+ xsns_89_t67xx.ino - Telaire T6700 Series CO2 sensor support for Tasmota
+
+ Copyright (c) 2021 Alexander Savchenko (alexander@savchenko.by)
+
+ 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
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifdef USE_I2C
+#ifdef USE_T67XX
+/*********************************************************************************************\
+ * Telaire T6703/T6713 - CO2
+ *
+ * Based on https://github.com/drug123/T67XX/ by Yaroslav Osadchyy
+ * (drug123@gmail.com)
+ *
+ * I2C Address: 0x15
+\*********************************************************************************************/
+
+#define XSNS_89 89
+#define XI2C_61 61 // See I2CDEVICES.md
+
+#define T67XX_I2C_ADDR 0x15
+#define T67XX_REG_VAL_ENABLE 0xFF00
+#define T67XX_REG_VAL_DISABLE 0x0000
+
+#define T67XX_READ_DELAY 10 // Recommended value
+
+#define T67XX_MEASURE_INTERVAL 15 // Seconds
+#define T67XX_MEASURE_DELAY 115 // Seconds
+
+// Registers
+enum
+{
+ T67XX_REG_FIRMWARE = 0x1389,
+ T67XX_REG_STATUS = 0x138A,
+ T67XX_REG_PPM = 0x138B,
+ T67XX_REG_RESET = 0x03E8,
+ T67XX_REG_SPCAL = 0x03EC,
+ T67XX_REG_FLASH_UPDATE = 0x03ED,
+ T67XX_REG_ADDRESS = 0x0FA5,
+ T67XX_REG_ABC_LOGIC = 0x03EE,
+ T67XX_REG_MOD_MODE = 0x100B
+};
+
+class T67XX
+{
+public:
+ T67XX();
+ void Read(void);
+ uint16_t readPPM(void);
+ uint16_t PPM(void);
+ uint16_t getStatus(void);
+ uint16_t getFirmwareVersion(void);
+ void detect(void);
+ void reset(void);
+ void setABCMode(bool Enabled);
+ void setSlaveAddress(uint8_t Address);
+ void flashUpdate(void);
+ void beginCalibration(void);
+ void endCalibration(void);
+ const char *getLastStatusMsg(void);
+ bool found(void);
+
+ // 0: no error; 1: error has occurred
+ struct status
+ {
+ uint16_t ERROR : 1;
+ uint16_t FLASH_ERROR : 1;
+ uint16_t CALIBRATION_ERROR : 1;
+ uint16_t REBOOT : 1;
+ uint16_t WARMUP : 1;
+ uint16_t SINGLE_POINT_CAL : 1;
+
+ void set(uint16_t data)
+ {
+ ERROR = data & 0x01;
+ FLASH_ERROR = (data >> 0x01) & 0x01;
+ CALIBRATION_ERROR = (data >> 0x02) & 0x01;
+ REBOOT = (data >> 0x0A) & 0x01;
+ WARMUP = (data >> 0x0B) & 0x01;
+ SINGLE_POINT_CAL = (data >> 0x0F) & 0x01;
+ }
+ };
+
+private:
+ uint8_t _data[6];
+ uint16_t _ppm = 0;
+ const char *getStatusMsg(uint16_t sensorStatus);
+ uint16_t read16(uint16_t reg);
+ void write16(uint16_t reg, uint16_t data);
+
+ uint8_t _init = 0;
+ uint8_t _sta = 0;
+ status _status;
+ bool _found = 0;
+};
+
+T67XX::T67XX()
+{
+}
+
+uint16_t T67XX::readPPM(void)
+{
+ _ppm = read16(T67XX_REG_PPM);
+ return _ppm;
+}
+
+uint16_t T67XX::PPM(void)
+{
+ return _ppm;
+}
+
+uint16_t T67XX::getStatus(void)
+{
+ _sta = read16(T67XX_REG_STATUS);
+ _status.set(_sta);
+
+ return _sta;
+};
+
+uint16_t T67XX::getFirmwareVersion(void)
+{
+ return read16(T67XX_REG_FIRMWARE);
+};
+
+void T67XX::detect(void)
+{
+ if (I2cActive(T67XX_I2C_ADDR))
+ {
+ return;
+ }
+
+ reset();
+ delay(100);
+ uint16_t fw = getFirmwareVersion();
+
+ if ((fw > 0) && (fw < 0xFFFF))
+ {
+ AddLog(LOG_LEVEL_INFO, PSTR("T67XX firmware version: %d"), fw);
+ I2cSetActiveFound(T67XX_I2C_ADDR, "T67XX");
+ _found = true;
+ }
+}
+
+bool T67XX::found(void)
+{
+ return _found;
+}
+
+void T67XX::reset(void)
+{
+ write16(T67XX_REG_RESET, T67XX_REG_VAL_ENABLE);
+ _init = 1;
+};
+
+void T67XX::setABCMode(bool Enabled)
+{
+ write16(T67XX_REG_ABC_LOGIC,
+ Enabled ? T67XX_REG_VAL_ENABLE : T67XX_REG_VAL_DISABLE);
+};
+
+void T67XX::setSlaveAddress(uint8_t Address){
+ // TODO:
+};
+
+void T67XX::flashUpdate(void)
+{
+ write16(T67XX_REG_FLASH_UPDATE, T67XX_REG_VAL_ENABLE);
+}
+
+void T67XX::beginCalibration(void)
+{
+ write16(T67XX_REG_SPCAL, T67XX_REG_VAL_ENABLE);
+};
+
+void T67XX::endCalibration(void)
+{
+ write16(T67XX_REG_SPCAL, T67XX_REG_VAL_DISABLE);
+};
+
+/*** Private Section ***/
+
+uint16_t T67XX::read16(uint16_t reg)
+{
+ Wire.beginTransmission(T67XX_I2C_ADDR);
+ Wire.write(0x04);
+ Wire.write(byte(reg >> 8));
+ Wire.write(byte(reg & 0xFF));
+ Wire.write(0x00);
+ Wire.write(0x01);
+ Wire.endTransmission();
+
+ delay(T67XX_READ_DELAY);
+
+ Wire.requestFrom(int(T67XX_I2C_ADDR), 4);
+ _data[0] = Wire.read();
+ _data[1] = Wire.read();
+ _data[2] = Wire.read();
+ _data[3] = Wire.read();
+ return ((_data[2] << 8) | _data[3]);
+}
+
+void T67XX::write16(uint16_t reg, uint16_t data)
+{
+ Wire.beginTransmission(T67XX_I2C_ADDR);
+ Wire.write(0x05);
+ Wire.write(byte(reg >> 8));
+ Wire.write(byte(reg & 0xFF));
+ Wire.write(byte(data >> 8));
+ Wire.write(byte(data & 0xFF));
+ Wire.endTransmission();
+
+ delay(T67XX_READ_DELAY);
+
+ Wire.requestFrom(int(T67XX_I2C_ADDR), 5);
+ _data[0] = Wire.read();
+ _data[1] = Wire.read();
+ _data[2] = Wire.read();
+ _data[3] = Wire.read();
+ _data[4] = Wire.read();
+}
+
+const char *T67XX::getLastStatusMsg()
+{
+ return getStatusMsg(_sta);
+}
+
+const char *T67XX::getStatusMsg(uint16_t sensorStatus)
+{
+ T67XX::status statusStruct;
+
+ statusStruct.set(sensorStatus);
+
+ if (sensorStatus)
+ {
+ if (statusStruct.ERROR)
+ return PSTR("GENERAL ERROR");
+ if (statusStruct.CALIBRATION_ERROR)
+ return PSTR("CALIBRATION ERROR");
+ if (statusStruct.FLASH_ERROR)
+ return PSTR("FLASH ERROR");
+ if (statusStruct.REBOOT)
+ return PSTR("REBOOT");
+ if (statusStruct.WARMUP)
+ return PSTR("WARMUP");
+ if (statusStruct.SINGLE_POINT_CAL)
+ return PSTR("CALIBRATING");
+ }
+
+ if (TasmotaGlobal.uptime < T67XX_MEASURE_DELAY)
+ {
+ return PSTR("WARMUP");
+ }
+
+ return PSTR("OK");
+}
+
+void T67XX::Read(void)
+{
+ if ((TasmotaGlobal.uptime < T67XX_MEASURE_DELAY) || (TasmotaGlobal.uptime % T67XX_MEASURE_INTERVAL > 0))
+ {
+ return;
+ }
+
+ uint16_t sensorStatus = getStatus();
+ if (!sensorStatus)
+ {
+ if (_init)
+ {
+ setABCMode(true);
+ _init = 0;
+ }
+ _ppm = readPPM();
+ //AddLog_P(LOG_LEVEL_INFO, PSTR("T67XX %d PPM"), _ppm);
+ }
+ else
+ {
+ //AddLog_P(LOG_LEVEL_INFO, PSTR("T67XX status: %s"), getLastStatusMsg());
+ }
+}
+
+T67XX t67xx;
+
+/*********************************************************************************************\
+ * Interface
+\*********************************************************************************************/
+
+bool Xsns89(uint8_t function)
+{
+ uint16_t ppm = 0;
+ if (!I2cEnabled(XI2C_61))
+ {
+ return false;
+ }
+
+ bool result = false;
+
+ if (FUNC_INIT == function)
+ {
+ t67xx.detect();
+ }
+ else if (t67xx.found())
+ {
+ switch (function)
+ {
+ case FUNC_INIT:
+ break;
+ case FUNC_EVERY_SECOND:
+ t67xx.Read();
+ break;
+ case FUNC_JSON_APPEND:
+ ppm = t67xx.PPM();
+ if ((ppm > 100) && (ppm < 5000))
+ {
+ ResponseAppend_P(PSTR(",\"T67XX\":{\"" D_JSON_CO2 "\":%d,\"" D_JSON_STATUS "\":\"%s\"}"), t67xx.PPM(), t67xx.getLastStatusMsg());
+ }
+ else
+ {
+ ResponseAppend_P(PSTR(",\"T67XX\":{\"" D_JSON_CO2 "\":null,\"" D_JSON_STATUS "\":\"%s\"}"), t67xx.getLastStatusMsg());
+ }
+ break;
+#ifdef USE_WEBSERVER
+ case FUNC_WEB_SENSOR:
+ ppm = t67xx.PPM();
+ if (ppm > 0)
+ {
+ WSContentSend_PD(PSTR("{s}T67XX " D_CO2 "{m}%d " D_UNIT_PARTS_PER_MILLION "{e}"), ppm);
+ }
+ break;
+#endif // USE_WEBSERVER
+ }
+ }
+
+ return result;
+}
+
+#endif // USE_T67xx
+#endif // USE_I2C
From a268e11680118e29af82039cdc4e21c74b99dc80 Mon Sep 17 00:00:00 2001
From: hk2k2 <70974088+hk2k2@users.noreply.github.com>
Date: Sun, 11 Jul 2021 16:44:56 +0200
Subject: [PATCH 03/16] Update support_features.ino
---
tasmota/support_features.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino
index aff6030e3..661315c00 100644
--- a/tasmota/support_features.ino
+++ b/tasmota/support_features.ino
@@ -364,7 +364,7 @@ void ResponseAppendFeatures(void)
#if defined(USE_ENERGY_SENSOR) && defined(USE_PZEM_DC)
feature4 |= 0x00001000; // xnrg_06_pzem_dc.ino
#endif
-#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR)
+#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR) || defined(USE_WS2300_WIND_SENSOR)
feature4 |= 0x00002000; // xsns_35_tx20.ino
#endif
#if defined(USE_I2C) && defined(USE_MGC3130)
From 11ffd24d7551a8f33e6465054ff471e0a3b55547 Mon Sep 17 00:00:00 2001
From: hk2k2 <70974088+hk2k2@users.noreply.github.com>
Date: Sun, 11 Jul 2021 16:46:20 +0200
Subject: [PATCH 04/16] Update tasmota_template.h
---
tasmota/tasmota_template.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h
index c7b901e26..d9beffa07 100644
--- a/tasmota/tasmota_template.h
+++ b/tasmota/tasmota_template.h
@@ -740,7 +740,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_PMS5003_TX), // Plantower PMS5003 Serial interface
AGPIO(GPIO_PMS5003_RX), // Plantower PMS5003 Serial interface
#endif
-#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR)
+#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR) || defined(USE_WS2300_WIND_SENSOR)
AGPIO(GPIO_TX2X_TXD_BLACK), // TX20/TX23 Transmission Pin
#endif
#ifdef USE_WINDMETER
From aebf57a7645838fdddb2b31f0548176c2c5e18cd Mon Sep 17 00:00:00 2001
From: hk2k2 <70974088+hk2k2@users.noreply.github.com>
Date: Sun, 11 Jul 2021 16:56:21 +0200
Subject: [PATCH 05/16] Update xsns_35_tx20.ino
From 56ed94db42d37fe7b7381c9f1f35a83166f1a01c Mon Sep 17 00:00:00 2001
From: Michael Hanselmann
Date: Sun, 11 Jul 2021 19:51:46 +0200
Subject: [PATCH 06/16] prometheus: Fix typos in comments
Signed-off-by: Michael Hanselmann
---
tasmota/xsns_75_prometheus.ino | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/tasmota/xsns_75_prometheus.ino b/tasmota/xsns_75_prometheus.ino
index 196cbbae9..2727119e4 100644
--- a/tasmota/xsns_75_prometheus.ino
+++ b/tasmota/xsns_75_prometheus.ino
@@ -24,7 +24,8 @@
#define XSNS_75 75
-const char *UnitfromType(const char *type) // find unit for measurment type
+// Find appropriate unit for measurement type.
+const char *UnitfromType(const char *type)
{
if (strcmp(type, "time") == 0) {
return "seconds";
@@ -56,7 +57,9 @@ const char *UnitfromType(const char *type) // find unit for measurment type
return "";
}
-String FormatMetricName(const char *metric) { // cleanup spaces and uppercases for Prmetheus metrics conventions
+// Replace spaces and periods in metric name to match Prometheus metrics
+// convention.
+String FormatMetricName(const char *metric) {
String formatted = metric;
formatted.toLowerCase();
formatted.replace(" ", "_");
@@ -135,7 +138,7 @@ void HandleMetrics(void) {
String jsonStr = TasmotaGlobal.mqtt_data;
JsonParser parser((char *)jsonStr.c_str());
JsonParserObject root = parser.getRootObject();
- if (root) { // did JSON parsing went ok?
+ if (root) { // did JSON parsing succeed?
for (auto key1 : root) {
JsonParserToken value1 = key1.getValue();
if (value1.isObject()) {
@@ -160,7 +163,7 @@ void HandleMetrics(void) {
String sensor = FormatMetricName(key1.getStr());
String type = FormatMetricName(key2.getStr());
const char *unit = UnitfromType(type.c_str());
- if (strcmp(type.c_str(), "totalstarttime") != 0) { // this metric causes prometheus of fail
+ if (strcmp(type.c_str(), "totalstarttime") != 0) { // this metric causes Prometheus of fail
if (strcmp(type.c_str(), "id") == 0) { // this metric is NaN, so convert it to a label, see Wi-Fi metrics above
WSContentSend_P(PSTR("# TYPE tasmota_sensors_%s_%s gauge\ntasmota_sensors_%s_%s{sensor=\"%s\",id=\"%s\"} 1\n"),
type.c_str(), unit, type.c_str(), unit, sensor.c_str(), value);
From 9e441630f110d160737d75357621d5e1d6ad13c0 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann
Date: Sun, 11 Jul 2021 19:52:23 +0200
Subject: [PATCH 07/16] prometheus: Add comment with link to exposition format
Signed-off-by: Michael Hanselmann
---
tasmota/xsns_75_prometheus.ino | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/tasmota/xsns_75_prometheus.ino b/tasmota/xsns_75_prometheus.ino
index 2727119e4..574bd75a8 100644
--- a/tasmota/xsns_75_prometheus.ino
+++ b/tasmota/xsns_75_prometheus.ino
@@ -20,6 +20,13 @@
#ifdef USE_PROMETHEUS
/*********************************************************************************************\
* Prometheus support
+ *
+ * The text format for metrics, labels and values is documented at [1]. Only
+ * the UTF-8 text encoding is supported.
+ *
+ * [1]
+ * https://github.com/prometheus/docs/blob/master/content/docs/instrumenting/exposition_formats.md
+ *
\*********************************************************************************************/
#define XSNS_75 75
From 16b5f2fe92a1da8040670257a91c0fe0f9ea93c5 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann
Date: Sun, 11 Jul 2021 20:15:01 +0200
Subject: [PATCH 08/16] prometheus: Expose device name as part of device info
The device name can be useful to identify a particular instance in
Prometheus.
Example:
```
tasmota_info{...,devicename="livingroom"} 1
```
Signed-off-by: Michael Hanselmann
---
tasmota/xsns_75_prometheus.ino | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/tasmota/xsns_75_prometheus.ino b/tasmota/xsns_75_prometheus.ino
index 574bd75a8..d997016b5 100644
--- a/tasmota/xsns_75_prometheus.ino
+++ b/tasmota/xsns_75_prometheus.ino
@@ -74,6 +74,16 @@ String FormatMetricName(const char *metric) {
return formatted;
}
+// Labels can be any sequence of UTF-8 characters, but backslash, double-quote
+// and line feed must be escaped.
+String FormatLabelValue(const char *value) {
+ String formatted = value;
+ formatted.replace("\\", "\\\\");
+ formatted.replace("\"", "\\\"");
+ formatted.replace("\n", "\\n");
+ return formatted;
+}
+
void HandleMetrics(void) {
if (!HttpCheckPriviledgedAccess()) { return; }
@@ -84,8 +94,8 @@ void HandleMetrics(void) {
char parameter[FLOATSZ];
// Pseudo-metric providing metadata about the running firmware version.
- WSContentSend_P(PSTR("# TYPE tasmota_info gauge\ntasmota_info{version=\"%s\",image=\"%s\",build_timestamp=\"%s\"} 1\n"),
- TasmotaGlobal.version, TasmotaGlobal.image_name, GetBuildDateAndTime().c_str());
+ WSContentSend_P(PSTR("# TYPE tasmota_info gauge\ntasmota_info{version=\"%s\",image=\"%s\",build_timestamp=\"%s\",devicename=\"%s\"} 1\n"),
+ TasmotaGlobal.version, TasmotaGlobal.image_name, GetBuildDateAndTime().c_str(), FormatLabelValue(SettingsText(SET_DEVICENAME)).c_str());
WSContentSend_P(PSTR("# TYPE tasmota_uptime_seconds gauge\ntasmota_uptime_seconds %d\n"), TasmotaGlobal.uptime);
WSContentSend_P(PSTR("# TYPE tasmota_boot_count counter\ntasmota_boot_count %d\n"), Settings->bootcount);
WSContentSend_P(PSTR("# TYPE tasmota_flash_writes_total counter\ntasmota_flash_writes_total %d\n"), Settings->save_flag);
From 5a5843b5ab9be3e1b93f468a939b48c582c36aed Mon Sep 17 00:00:00 2001
From: mikep1998 <44448320+mikep1998@users.noreply.github.com>
Date: Sun, 11 Jul 2021 12:21:04 -0700
Subject: [PATCH 09/16] Until we provide a way to have our own modifiable copy
tasmota_lv_conf.h I would like LV_USE_THEME_MONO defined. (#12625)
* Update xdrv_54_lvgl.ino
Fix compile error with LVGL define and without USE_BERRY defined
* Update xdrv_54_lvgl.ino
Fix compile error without Berry define.
* GPIO_XPT2046_CS is not specific to ILI9341
GPIO_XPT2046_CS is not specific to ILI9341 it is also used with ILI9488
* Update tasmota_lv_conf.h
---
tasmota/lvgl_berry/tasmota_lv_conf.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/lvgl_berry/tasmota_lv_conf.h b/tasmota/lvgl_berry/tasmota_lv_conf.h
index 5d31e8a2e..a52cb9a7e 100644
--- a/tasmota/lvgl_berry/tasmota_lv_conf.h
+++ b/tasmota/lvgl_berry/tasmota_lv_conf.h
@@ -501,7 +501,7 @@ typedef void * lv_font_user_data_t;
* texts and borders will be black and the background will be
* white. Else the colors are inverted.
* No flags. Set LV_THEME_DEFAULT_FLAG 0 */
-#define LV_USE_THEME_MONO 0
+#define LV_USE_THEME_MONO 1
#define LV_THEME_DEFAULT_INCLUDE /*Include a header for the init. function*/
#define LV_THEME_DEFAULT_INIT lv_theme_material_init
From 95997716249913c0b0e2e43e2ae3bdf82ee70ba1 Mon Sep 17 00:00:00 2001
From: Stephan Hadinger
Date: Mon, 12 Jul 2021 12:41:57 +0200
Subject: [PATCH 10/16] Berry fix web buttons broken by #12524
---
lib/libesp32/Berry/default/be_tasmotalib.c | 114 ++++++++++++---------
1 file changed, 68 insertions(+), 46 deletions(-)
diff --git a/lib/libesp32/Berry/default/be_tasmotalib.c b/lib/libesp32/Berry/default/be_tasmotalib.c
index 4ef09830a..f0268439e 100644
--- a/lib/libesp32/Berry/default/be_tasmotalib.c
+++ b/lib/libesp32/Berry/default/be_tasmotalib.c
@@ -1368,7 +1368,7 @@ be_local_closure(event, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[23]) { /* upvals */
+ ( &(const bvalue[29]) { /* upvals */
{ { .s=be_nested_const_str("cmd", -158181397, 3) }, BE_STRING},
{ { .s=be_nested_const_str("exec_cmd", 493567399, 8) }, BE_STRING},
{ { .s=be_nested_const_str("rule", -64077613, 4) }, BE_STRING},
@@ -1382,20 +1382,26 @@ be_local_closure(event, /* name */
{ { .s=be_nested_const_str("every_100ms", 1546407804, 11) }, BE_STRING},
{ { .s=be_nested_const_str("web_add_button", -757092238, 14) }, BE_STRING},
{ { .s=be_nested_const_str("web_add_main_button", -334599632, 19) }, BE_STRING},
+ { { .s=be_nested_const_str("web_add_management_button", -1556090110, 25) }, BE_STRING},
+ { { .s=be_nested_const_str("web_add_config_button", 639674325, 21) }, BE_STRING},
+ { { .s=be_nested_const_str("web_add_console_button", -813531104, 22) }, BE_STRING},
{ { .s=be_nested_const_str("save_before_restart", 1253239338, 19) }, BE_STRING},
{ { .s=be_nested_const_str("web_add_handler", -304792334, 15) }, BE_STRING},
{ { .s=be_nested_const_str("web_sensor", -1394870324, 10) }, BE_STRING},
{ { .s=be_nested_const_str("json_append", -1292948012, 11) }, BE_STRING},
{ { .s=be_nested_const_str("button_pressed", 1694209616, 14) }, BE_STRING},
+ { { .s=be_nested_const_str("button_preselif", 491115394, 15) }, BE_STRING},
{ { .s=be_nested_const_str("display", 1164572437, 7) }, BE_STRING},
{ { .s=be_nested_const_str("string", 398550328, 6) }, BE_STRING},
+ { { .s=be_nested_const_str("log", 1062293841, 3) }, BE_STRING},
{ { .s=be_nested_const_str("format", -1180859054, 6) }, BE_STRING},
- { { .s=be_nested_const_str("BRY: Exception> '%s' - %s", -2047976332, 25) }, BE_STRING},
+ { { .s=be_nested_const_str("BRY: exception %s - %m", -1290966132, 22) }, BE_STRING},
+ { { .i=3 }, BE_INT},
{ { .s=be_nested_const_str("stop_iteration", -121173395, 14) }, BE_STRING},
}),
(be_nested_const_str("event", -30355297, 5)),
(be_nested_const_str("input", -103256197, 5)),
- ( &(const binstruction[137]) { /* code */
+ ( &(const binstruction[153]) { /* code */
0x1C140300, // 0000 EQ R5 R1 R256
0x78160006, // 0001 JMPF R5 #0009
0x8C140101, // 0002 GETMET R5 R0 R257
@@ -1404,135 +1410,151 @@ be_local_closure(event, /* name */
0x5C240800, // 0005 MOVE R9 R4
0x7C140800, // 0006 CALL R5 4
0x80040A00, // 0007 RET 1 R5
- 0x7002007E, // 0008 JMP #0088
+ 0x7002008E, // 0008 JMP #0098
0x1C140302, // 0009 EQ R5 R1 R258
0x78160004, // 000A JMPF R5 #0010
0x8C140103, // 000B GETMET R5 R0 R259
0x5C1C0800, // 000C MOVE R7 R4
0x7C140400, // 000D CALL R5 2
0x80040A00, // 000E RET 1 R5
- 0x70020077, // 000F JMP #0088
+ 0x70020087, // 000F JMP #0098
0x1C140304, // 0010 EQ R5 R1 R260
0x78160002, // 0011 JMPF R5 #0015
0x4C140000, // 0012 LDNIL 5
0x80040A00, // 0013 RET 1 R5
- 0x70020072, // 0014 JMP #0088
+ 0x70020082, // 0014 JMP #0098
0x1C140305, // 0015 EQ R5 R1 R261
0x78160003, // 0016 JMPF R5 #001B
0x8C140105, // 0017 GETMET R5 R0 R261
0x7C140200, // 0018 CALL R5 1
0x80040A00, // 0019 RET 1 R5
- 0x7002006C, // 001A JMP #0088
+ 0x7002007C, // 001A JMP #0098
0x1C140306, // 001B EQ R5 R1 R262
0x78160003, // 001C JMPF R5 #0021
0x8C140107, // 001D GETMET R5 R0 R263
0x7C140200, // 001E CALL R5 1
0x80040A00, // 001F RET 1 R5
- 0x70020066, // 0020 JMP #0088
+ 0x70020076, // 0020 JMP #0098
0x88140108, // 0021 GETMBR R5 R0 R264
- 0x78160064, // 0022 JMPF R5 #0088
+ 0x78160074, // 0022 JMPF R5 #0098
0x60140000, // 0023 GETGBL R5 G0
0x88180108, // 0024 GETMBR R6 R0 R264
0x7C140200, // 0025 CALL R5 1
- 0xA802005D, // 0026 EXBLK 0 #0085
+ 0xA802006D, // 0026 EXBLK 0 #0095
0x5C180A00, // 0027 MOVE R6 R5
0x7C180000, // 0028 CALL R6 0
- 0xA802004D, // 0029 EXBLK 0 #0078
+ 0xA802005E, // 0029 EXBLK 0 #0089
0x1C1C0309, // 002A EQ R7 R1 R265
0x781E0004, // 002B JMPF R7 #0031
0x881C0D09, // 002C GETMBR R7 R6 R265
0x781E0002, // 002D JMPF R7 #0031
0x8C1C0D09, // 002E GETMET R7 R6 R265
0x7C1C0200, // 002F CALL R7 1
- 0x70020044, // 0030 JMP #0076
+ 0x70020055, // 0030 JMP #0087
0x1C1C030A, // 0031 EQ R7 R1 R266
0x781E0004, // 0032 JMPF R7 #0038
0x881C0D0A, // 0033 GETMBR R7 R6 R266
0x781E0002, // 0034 JMPF R7 #0038
0x8C1C0D0A, // 0035 GETMET R7 R6 R266
0x7C1C0200, // 0036 CALL R7 1
- 0x7002003D, // 0037 JMP #0076
+ 0x7002004E, // 0037 JMP #0087
0x1C1C030B, // 0038 EQ R7 R1 R267
0x781E0004, // 0039 JMPF R7 #003F
0x881C0D0B, // 003A GETMBR R7 R6 R267
0x781E0002, // 003B JMPF R7 #003F
0x8C1C0D0B, // 003C GETMET R7 R6 R267
0x7C1C0200, // 003D CALL R7 1
- 0x70020036, // 003E JMP #0076
+ 0x70020047, // 003E JMP #0087
0x1C1C030C, // 003F EQ R7 R1 R268
0x781E0004, // 0040 JMPF R7 #0046
0x881C0D0C, // 0041 GETMBR R7 R6 R268
0x781E0002, // 0042 JMPF R7 #0046
0x8C1C0D0C, // 0043 GETMET R7 R6 R268
0x7C1C0200, // 0044 CALL R7 1
- 0x7002002F, // 0045 JMP #0076
+ 0x70020040, // 0045 JMP #0087
0x1C1C030D, // 0046 EQ R7 R1 R269
0x781E0004, // 0047 JMPF R7 #004D
0x881C0D0D, // 0048 GETMBR R7 R6 R269
0x781E0002, // 0049 JMPF R7 #004D
0x8C1C0D0D, // 004A GETMET R7 R6 R269
0x7C1C0200, // 004B CALL R7 1
- 0x70020028, // 004C JMP #0076
+ 0x70020039, // 004C JMP #0087
0x1C1C030E, // 004D EQ R7 R1 R270
0x781E0004, // 004E JMPF R7 #0054
0x881C0D0E, // 004F GETMBR R7 R6 R270
0x781E0002, // 0050 JMPF R7 #0054
0x8C1C0D0E, // 0051 GETMET R7 R6 R270
0x7C1C0200, // 0052 CALL R7 1
- 0x70020021, // 0053 JMP #0076
+ 0x70020032, // 0053 JMP #0087
0x1C1C030F, // 0054 EQ R7 R1 R271
0x781E0004, // 0055 JMPF R7 #005B
0x881C0D0F, // 0056 GETMBR R7 R6 R271
0x781E0002, // 0057 JMPF R7 #005B
0x8C1C0D0F, // 0058 GETMET R7 R6 R271
0x7C1C0200, // 0059 CALL R7 1
- 0x7002001A, // 005A JMP #0076
+ 0x7002002B, // 005A JMP #0087
0x1C1C0310, // 005B EQ R7 R1 R272
0x781E0004, // 005C JMPF R7 #0062
0x881C0D10, // 005D GETMBR R7 R6 R272
0x781E0002, // 005E JMPF R7 #0062
0x8C1C0D10, // 005F GETMET R7 R6 R272
0x7C1C0200, // 0060 CALL R7 1
- 0x70020013, // 0061 JMP #0076
+ 0x70020024, // 0061 JMP #0087
0x1C1C0311, // 0062 EQ R7 R1 R273
0x781E0004, // 0063 JMPF R7 #0069
0x881C0D11, // 0064 GETMBR R7 R6 R273
0x781E0002, // 0065 JMPF R7 #0069
0x8C1C0D11, // 0066 GETMET R7 R6 R273
0x7C1C0200, // 0067 CALL R7 1
- 0x7002000C, // 0068 JMP #0076
- 0x1C1C030E, // 0069 EQ R7 R1 R270
+ 0x7002001D, // 0068 JMP #0087
+ 0x1C1C0312, // 0069 EQ R7 R1 R274
0x781E0004, // 006A JMPF R7 #0070
0x881C0D12, // 006B GETMBR R7 R6 R274
0x781E0002, // 006C JMPF R7 #0070
0x8C1C0D12, // 006D GETMET R7 R6 R274
0x7C1C0200, // 006E CALL R7 1
- 0x70020005, // 006F JMP #0076
- 0x1C1C0312, // 0070 EQ R7 R1 R274
- 0x781E0003, // 0071 JMPF R7 #0076
- 0x881C0D12, // 0072 GETMBR R7 R6 R274
- 0x781E0001, // 0073 JMPF R7 #0076
- 0x8C1C0D12, // 0074 GETMET R7 R6 R274
+ 0x70020016, // 006F JMP #0087
+ 0x1C1C0313, // 0070 EQ R7 R1 R275
+ 0x781E0004, // 0071 JMPF R7 #0077
+ 0x881C0D13, // 0072 GETMBR R7 R6 R275
+ 0x781E0002, // 0073 JMPF R7 #0077
+ 0x8C1C0D13, // 0074 GETMET R7 R6 R275
0x7C1C0200, // 0075 CALL R7 1
- 0xA8040001, // 0076 EXBLK 1 1
- 0x7002000B, // 0077 JMP #0084
- 0xAC1C0002, // 0078 CATCH R7 0 2
- 0x70020008, // 0079 JMP #0083
- 0xA4262600, // 007A IMPORT R9 R275
- 0x6028000F, // 007B GETGBL R10 G15
- 0x8C2C1314, // 007C GETMET R11 R9 R276
- 0x58340015, // 007D LDCONST R13 K21
- 0x5C380E00, // 007E MOVE R14 R7
- 0x5C3C1000, // 007F MOVE R15 R8
- 0x7C2C0800, // 0080 CALL R11 4
- 0x7C280200, // 0081 CALL R10 1
- 0x70020000, // 0082 JMP #0084
- 0xB0080000, // 0083 RAISE 2 R0 R0
- 0x7001FFA1, // 0084 JMP #0027
- 0x58140016, // 0085 LDCONST R5 K22
- 0xAC140200, // 0086 CATCH R5 1 0
- 0xB0080000, // 0087 RAISE 2 R0 R0
- 0x80000000, // 0088 RET 0 R0
+ 0x7002000F, // 0076 JMP #0087
+ 0x1C1C0314, // 0077 EQ R7 R1 R276
+ 0x781E0007, // 0078 JMPF R7 #0081
+ 0x881C0D14, // 0079 GETMBR R7 R6 R276
+ 0x781E0005, // 007A JMPF R7 #0081
+ 0x1C1C0311, // 007B EQ R7 R1 R273
+ 0x781DFFFE, // 007C JMPF R7 #007C
+ 0x881C0D16, // 007D GETMBR R7 R6 R278
+ 0x8C1C0D16, // 007E GETMET R7 R6 R278
+ 0x7C1C0200, // 007F CALL R7 1
+ 0x70020005, // 0080 JMP #0087
+ 0x1C1C0316, // 0081 EQ R7 R1 R278
+ 0x781E0003, // 0082 JMPF R7 #0087
+ 0x881C0D16, // 0083 GETMBR R7 R6 R278
+ 0x781E0001, // 0084 JMPF R7 #0087
+ 0x8C1C0D16, // 0085 GETMET R7 R6 R278
+ 0x7C1C0200, // 0086 CALL R7 1
+ 0xA8040001, // 0087 EXBLK 1 1
+ 0x7002000A, // 0088 JMP #0094
+ 0xAC1C0002, // 0089 CATCH R7 0 2
+ 0x70020007, // 008A JMP #0093
+ 0xA4262E00, // 008B IMPORT R9 R279
+ 0x8C280118, // 008C GETMET R10 R0 R280
+ 0x8C301319, // 008D GETMET R12 R9 R281
+ 0x5838001A, // 008E LDCONST R14 K26
+ 0x583C001B, // 008F LDCONST R15 K27
+ 0x7C300600, // 0090 CALL R12 3
+ 0x7C280400, // 0091 CALL R10 2
+ 0x70020000, // 0092 JMP #0094
+ 0xB0080000, // 0093 RAISE 2 R0 R0
+ 0x7001FF91, // 0094 JMP #0027
+ 0x5814001C, // 0095 LDCONST R5 K28
+ 0xAC140200, // 0096 CATCH R5 1 0
+ 0xB0080000, // 0097 RAISE 2 R0 R0
+ 0x80000000, // 0098 RET 0 R0
})
)
);
From 76a0635491dbbb980d13ef660d83b126e4f73bac Mon Sep 17 00:00:00 2001
From: s-hadinger <49731213+s-hadinger@users.noreply.github.com>
Date: Mon, 12 Jul 2021 22:53:31 +0200
Subject: [PATCH 11/16] LVGL add all callbacks (#12636)
* LVGL add all callbacks
* LVGL allow nil argument for init()
* Final touch
---
.../Berry/default/be_lv_lvgl_module.c | 59 +-
lib/libesp32/Berry/default/be_lvgl_cb.c | 216 ++
lib/libesp32/Berry/default/be_lvgl_ctypes.c | 25 +-
.../default/be_lvgl_ctypes_definitions.c | 190 +-
.../Berry/default/be_lvgl_widgets_lib.c | 29 +-
lib/libesp32/Berry/default/be_modtab.c | 4 +
lib/libesp32/Berry/generate/be_const_strtab.h | 1227 +++++------
.../Berry/generate/be_const_strtab_def.h | 1791 +++++++++--------
.../be_fixed_be_class_ctypes_classes.h | 38 +-
.../generate/be_fixed_be_class_lv_draw_line.h | 20 +
.../generate/be_fixed_be_class_lv_indev.h | 2 +-
.../generate/be_fixed_be_class_lv_style.h | 2 +-
.../Berry/generate/be_fixed_be_lv_design_cb.h | 17 +
.../Berry/generate/be_fixed_be_lv_event_cb.h | 17 +
.../generate/be_fixed_be_lv_gauge_format_cb.h | 17 +
.../generate/be_fixed_be_lv_group_focus_cb.h | 17 +
.../Berry/generate/be_fixed_be_lv_signal_cb.h | 17 +
.../Berry/generate/be_fixed_be_lvgl_cb.h | 20 +
tasmota/berry/modules/lvgl_ctypes.be | 312 +--
tasmota/lvgl_berry/be_lv_c_mapping.h | 19 +-
tasmota/xdrv_52_2_berry_native.ino | 63 +-
tasmota/xdrv_52_3_berry_lvgl.ino | 77 +-
tasmota/xdrv_52_7_berry_embedded.ino | 14 +
tools/lv_berry/convert.py | 117 +-
tools/lv_berry/lv_module.h | 15 +
tools/lv_berry/lv_widgets.h | 80 +-
26 files changed, 2490 insertions(+), 1915 deletions(-)
create mode 100644 lib/libesp32/Berry/default/be_lvgl_cb.c
create mode 100644 lib/libesp32/Berry/generate/be_fixed_be_class_lv_draw_line.h
create mode 100644 lib/libesp32/Berry/generate/be_fixed_be_lv_design_cb.h
create mode 100644 lib/libesp32/Berry/generate/be_fixed_be_lv_event_cb.h
create mode 100644 lib/libesp32/Berry/generate/be_fixed_be_lv_gauge_format_cb.h
create mode 100644 lib/libesp32/Berry/generate/be_fixed_be_lv_group_focus_cb.h
create mode 100644 lib/libesp32/Berry/generate/be_fixed_be_lv_signal_cb.h
create mode 100644 lib/libesp32/Berry/generate/be_fixed_be_lvgl_cb.h
diff --git a/lib/libesp32/Berry/default/be_lv_lvgl_module.c b/lib/libesp32/Berry/default/be_lv_lvgl_module.c
index a461d3f06..0e5db42fc 100644
--- a/lib/libesp32/Berry/default/be_lv_lvgl_module.c
+++ b/lib/libesp32/Berry/default/be_lv_lvgl_module.c
@@ -27,24 +27,47 @@ extern int lv0_screenshot(bvm *vm);
static int lv_get_hor_res(void) {
return lv_disp_get_hor_res(lv_disp_get_default());
}
-static int lv_get_ver_res(bvm *vm) {
+static int lv_get_ver_res(void) {
return lv_disp_get_ver_res(lv_disp_get_default());
}
/* `lv` methods */
const lvbe_call_c_t lv_func[] = {
- // resolution
+
+ { "draw_arc", (void*) &lv_draw_arc, "", "iiiii(lv_area)(lv_draw_line_dsc)" },
+ { "draw_img", (void*) &lv_draw_img, "", "(lv_area)(lv_area).(lv_draw_img_dsc)" },
+ { "draw_img_dsc_init", (void*) &lv_draw_img_dsc_init, "", "(lv_draw_img_dsc)" },
+ { "draw_label", (void*) &lv_draw_label, "", "(lv_area)(lv_area)(lv_draw_label_dsc)s(lv_draw_label_hint)" },
+ { "draw_label_dsc_init", (void*) &lv_draw_label_dsc_init, "", "(lv_draw_label_dsc)" },
+ { "draw_line", (void*) &lv_draw_line, "", "(lv_point)(lv_point)(lv_area)(lv_draw_line_dsc)" },
+ { "draw_line_dsc_init", (void*) &lv_draw_line_dsc_init, "", "(lv_draw_line_dsc)" },
+ { "draw_mask_add", (void*) &lv_draw_mask_add, "i", ".." },
+ { "draw_mask_angle_init", (void*) &lv_draw_mask_angle_init, "", "(lv_draw_mask_angle_param)iiii" },
+ { "draw_mask_fade_init", (void*) &lv_draw_mask_fade_init, "", "(lv_draw_mask_fade_param)(lv_area)iiii" },
+ { "draw_mask_get_cnt", (void*) &lv_draw_mask_get_cnt, "i", "" },
+ { "draw_mask_line_angle_init", (void*) &lv_draw_mask_line_angle_init, "", "(lv_draw_mask_line_param)iii(lv_draw_mask_line_side)" },
+ { "draw_mask_line_points_init", (void*) &lv_draw_mask_line_points_init, "", "(lv_draw_mask_line_param)iiii(lv_draw_mask_line_side)" },
+ { "draw_mask_map_init", (void*) &lv_draw_mask_map_init, "", "(lv_draw_mask_map_param)(lv_area)(lv_opa)" },
+ { "draw_mask_radius_init", (void*) &lv_draw_mask_radius_init, "", "(lv_draw_mask_radius_param)(lv_area)ib" },
+ { "draw_mask_remove_custom", (void*) &lv_draw_mask_remove_custom, ".", "." },
+ { "draw_mask_remove_id", (void*) &lv_draw_mask_remove_id, ".", "i" },
+ { "draw_polygon", (void*) &lv_draw_polygon, "", "ii(lv_area)(lv_draw_rect_dsc)" },
+ { "draw_px", (void*) &lv_draw_px, "", "(lv_point)(lv_area)(lv_style)" },
+ { "draw_rect", (void*) &lv_draw_rect, "", "(lv_area)(lv_area)(lv_draw_rect_dsc)" },
+ { "draw_triangle", (void*) &lv_draw_triangle, "", "i(lv_area)(lv_draw_rect_dsc)" },
+ { "event_get_data", (void*) &lv_event_get_data, ".", "" },
+ { "event_send", (void*) &lv_event_send, "i", "(lv_obj)i." },
+ { "event_send_refresh", (void*) &lv_event_send_refresh, "i", "(lv_obj)" },
+ { "event_send_refresh_recursive", (void*) &lv_event_send_refresh_recursive, "", "(lv_obj)" },
{ "get_hor_res", (void*) &lv_get_hor_res, "i", "" },
{ "get_ver_res", (void*) &lv_get_ver_res, "i", "" },
-
- // layers
{ "layer_sys", (void*) &lv_layer_sys, "lv_obj", "" },
{ "layer_top", (void*) &lv_layer_top, "lv_obj", "" },
-
- // screens
{ "scr_act", (void*) &lv_scr_act, "lv_obj", "" },
{ "scr_load", (void*) &lv_scr_load, "", "(lv_obj)" },
- { "scr_load_anim", (void*) &lv_scr_load_anim, "", "(lv_obj)iiib" },
+ { "scr_load_anim", (void*) &lv_scr_load_anim, "", "(lv_obj)(lv_scr_load_anim)iib" },
+ { "signal_send", (void*) &lv_signal_send, "i", "(lv_obj)i." },
+
};
const size_t lv_func_size = sizeof(lv_func) / sizeof(lv_func[0]);
@@ -160,6 +183,19 @@ const be_constint_t lv0_constants[] = {
{ "DRAG_DIR_HOR", LV_DRAG_DIR_HOR },
{ "DRAG_DIR_ONE", LV_DRAG_DIR_ONE },
{ "DRAG_DIR_VER", LV_DRAG_DIR_VER },
+ { "DRAW_MASK_LINE_SIDE_BOTTOM", LV_DRAW_MASK_LINE_SIDE_BOTTOM },
+ { "DRAW_MASK_LINE_SIDE_LEFT", LV_DRAW_MASK_LINE_SIDE_LEFT },
+ { "DRAW_MASK_LINE_SIDE_RIGHT", LV_DRAW_MASK_LINE_SIDE_RIGHT },
+ { "DRAW_MASK_LINE_SIDE_TOP", LV_DRAW_MASK_LINE_SIDE_TOP },
+ { "DRAW_MASK_RES_CHANGED", LV_DRAW_MASK_RES_CHANGED },
+ { "DRAW_MASK_RES_FULL_COVER", LV_DRAW_MASK_RES_FULL_COVER },
+ { "DRAW_MASK_RES_TRANSP", LV_DRAW_MASK_RES_TRANSP },
+ { "DRAW_MASK_RES_UNKNOWN", LV_DRAW_MASK_RES_UNKNOWN },
+ { "DRAW_MASK_TYPE_ANGLE", LV_DRAW_MASK_TYPE_ANGLE },
+ { "DRAW_MASK_TYPE_FADE", LV_DRAW_MASK_TYPE_FADE },
+ { "DRAW_MASK_TYPE_LINE", LV_DRAW_MASK_TYPE_LINE },
+ { "DRAW_MASK_TYPE_MAP", LV_DRAW_MASK_TYPE_MAP },
+ { "DRAW_MASK_TYPE_RADIUS", LV_DRAW_MASK_TYPE_RADIUS },
{ "DROPDOWN_DIR_DOWN", LV_DROPDOWN_DIR_DOWN },
{ "DROPDOWN_DIR_LEFT", LV_DROPDOWN_DIR_LEFT },
{ "DROPDOWN_DIR_RIGHT", LV_DROPDOWN_DIR_RIGHT },
@@ -496,11 +532,7 @@ const be_constint_t lv0_constants[] = {
};
const size_t lv0_constants_size = sizeof(lv0_constants)/sizeof(lv0_constants[0]);
-
-
#if !BE_USE_PRECOMPILED_OBJECT
-//#if 1 // TODO we will do pre-compiled later
-
be_native_module_attr_table(lvgl) {
// Symbols
@@ -582,8 +614,6 @@ be_native_module_attr_table(lvgl) {
be_native_module_function("load_freetype_font", lv0_load_freetype_font),
be_native_module_function("screenshot", lv0_screenshot),
-
-
};
be_define_native_module(lvgl, NULL);
@@ -729,9 +759,6 @@ module lvgl (scope: global) {
load_freetype_font, func(lv0_load_freetype_font)
screenshot, func(lv0_screenshot)
-
-
-
}
@const_object_info_end */
#include "../generate/be_fixed_lvgl.h"
diff --git a/lib/libesp32/Berry/default/be_lvgl_cb.c b/lib/libesp32/Berry/default/be_lvgl_cb.c
new file mode 100644
index 000000000..01c5e8d76
--- /dev/null
+++ b/lib/libesp32/Berry/default/be_lvgl_cb.c
@@ -0,0 +1,216 @@
+/********************************************************************
+ * Tasmota LVGL callbacks
+ *
+ *******************************************************************/
+#include "be_constobj.h"
+
+extern int lv0_init(bvm *vm);
+extern int lvx_tostring(bvm *vm);
+extern int be_call_c_func(bvm *vm, void * func, const char * return_type, const char * arg_type);
+
+
+int lv_cb_call_any(bvm *vm, const char * return_type, const char * arg_type) {
+ int argc = be_top(vm);
+ // get pointer to callback
+ be_getmember(vm, 1, ".p");
+ void * cb = be_tocomptr(vm, -1);
+ be_pop(vm, 1);
+ // remove first argument which is the instance `self`
+ for (int i=1; i 1 && (be_isint(vm, 2) || be_iscomptr(vm,2))) {
+ src_data = (void*) be_toint(vm, 2);
+ }
+
// get global array of classes from global variable '.ctypes_classes'
be_getglobal(vm, ".ctypes_classes");
const be_ctypes_classes_t * be_ctypes_classes = (const be_ctypes_classes_t *) be_tocomptr(vm, -1);
@@ -125,6 +136,18 @@ int be_ctypes_init(bvm *vm) {
be_pushint(vm, definitions->size_bytes);
be_call(vm, 2);
be_pop(vm, 3);
+
+ // if src_data then copy source data to the new structure
+ if (src_data) {
+ // call self._buffer()
+ be_getmember(vm, 1, "_buffer");
+ be_pushvalue(vm, 1);
+ be_call(vm, 1); // call with 1 parameter
+ void * dst_data = be_tocomptr(vm, -2);
+ be_pop(vm, 2);
+ // copy data
+ memmove(dst_data, src_data, definitions->size_bytes);
+ }
}
be_return(vm);
diff --git a/lib/libesp32/Berry/default/be_lvgl_ctypes_definitions.c b/lib/libesp32/Berry/default/be_lvgl_ctypes_definitions.c
index 5eb47a24d..767e3830e 100644
--- a/lib/libesp32/Berry/default/be_lvgl_ctypes_definitions.c
+++ b/lib/libesp32/Berry/default/be_lvgl_ctypes_definitions.c
@@ -98,7 +98,7 @@ void ctypes_register_class(bvm *vm, const bclass * ctypes_class, const be_ctypes
/********************************************************************
* Generated code, don't edit
*******************************************************************/
-const be_ctypes_structure_t be_lv_point_t = {
+const be_ctypes_structure_t be_lv_point = {
4, /* size in bytes */
2, /* number of elements */
(const be_ctypes_structure_item_t[2]) {
@@ -106,7 +106,7 @@ const be_ctypes_structure_t be_lv_point_t = {
{ "y", 2, 0, 0, 12 },
}};
-const be_ctypes_structure_t be_lv_area_t = {
+const be_ctypes_structure_t be_lv_area = {
8, /* size in bytes */
4, /* number of elements */
(const be_ctypes_structure_item_t[4]) {
@@ -116,7 +116,7 @@ const be_ctypes_structure_t be_lv_area_t = {
{ "y2", 6, 0, 0, 12 },
}};
-const be_ctypes_structure_t be_lv_draw_rect_dsc_t = {
+const be_ctypes_structure_t be_lv_draw_rect_dsc = {
77, /* size in bytes */
43, /* number of elements */
(const be_ctypes_structure_item_t[43]) {
@@ -165,7 +165,7 @@ const be_ctypes_structure_t be_lv_draw_rect_dsc_t = {
{ "value_str", 56, 0, 0, 4 },
}};
-const be_ctypes_structure_t be_lv_draw_line_dsc_t = {
+const be_ctypes_structure_t be_lv_draw_line_dsc = {
10, /* size in bytes */
9, /* number of elements */
(const be_ctypes_structure_item_t[9]) {
@@ -180,7 +180,7 @@ const be_ctypes_structure_t be_lv_draw_line_dsc_t = {
{ "width", 2, 0, 0, 12 },
}};
-const be_ctypes_structure_t be_lv_draw_img_dsc_t = {
+const be_ctypes_structure_t be_lv_draw_img_dsc = {
14, /* size in bytes */
9, /* number of elements */
(const be_ctypes_structure_item_t[9]) {
@@ -195,7 +195,7 @@ const be_ctypes_structure_t be_lv_draw_img_dsc_t = {
{ "zoom", 7, 0, 0, 2 },
}};
-const be_ctypes_structure_t be_lv_draw_label_dsc_t = {
+const be_ctypes_structure_t be_lv_draw_label_dsc = {
31, /* size in bytes */
15, /* number of elements */
(const be_ctypes_structure_item_t[15]) {
@@ -216,7 +216,7 @@ const be_ctypes_structure_t be_lv_draw_label_dsc_t = {
{ "sel_start", 15, 0, 0, 4 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_common_dsc_t = {
+const be_ctypes_structure_t be_lv_draw_mask_common_dsc = {
5, /* size in bytes */
2, /* number of elements */
(const be_ctypes_structure_item_t[2]) {
@@ -224,7 +224,7 @@ const be_ctypes_structure_t be_lv_draw_mask_common_dsc_t = {
{ "type", 4, 0, 0, 1 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_line_param_cfg_t = {
+const be_ctypes_structure_t be_lv_draw_mask_line_param_cfg = {
9, /* size in bytes */
5, /* number of elements */
(const be_ctypes_structure_item_t[5]) {
@@ -235,7 +235,7 @@ const be_ctypes_structure_t be_lv_draw_mask_line_param_cfg_t = {
{ "side", 8, 0, 2, 0 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_line_param_t = {
+const be_ctypes_structure_t be_lv_draw_mask_line_param = {
35, /* size in bytes */
15, /* number of elements */
(const be_ctypes_structure_item_t[15]) {
@@ -256,7 +256,7 @@ const be_ctypes_structure_t be_lv_draw_mask_line_param_t = {
{ "yx_steep", 22, 0, 0, 14 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_angle_param_cfg_t = {
+const be_ctypes_structure_t be_lv_draw_mask_angle_param_cfg = {
8, /* size in bytes */
4, /* number of elements */
(const be_ctypes_structure_item_t[4]) {
@@ -266,7 +266,7 @@ const be_ctypes_structure_t be_lv_draw_mask_angle_param_cfg_t = {
{ "vertex_p_y", 2, 0, 0, 12 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_angle_param_t = {
+const be_ctypes_structure_t be_lv_draw_mask_angle_param = {
85, /* size in bytes */
37, /* number of elements */
(const be_ctypes_structure_item_t[37]) {
@@ -309,7 +309,7 @@ const be_ctypes_structure_t be_lv_draw_mask_angle_param_t = {
{ "start_line_yx_steep", 35, 0, 0, 14 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_radius_param_cfg_t = {
+const be_ctypes_structure_t be_lv_draw_mask_radius_param_cfg = {
11, /* size in bytes */
6, /* number of elements */
(const be_ctypes_structure_item_t[6]) {
@@ -321,7 +321,7 @@ const be_ctypes_structure_t be_lv_draw_mask_radius_param_cfg_t = {
{ "rect_y2", 6, 0, 0, 12 },
}};
-const be_ctypes_structure_t be_lv_sqrt_res_t = {
+const be_ctypes_structure_t be_lv_sqrt_res = {
4, /* size in bytes */
2, /* number of elements */
(const be_ctypes_structure_item_t[2]) {
@@ -329,7 +329,7 @@ const be_ctypes_structure_t be_lv_sqrt_res_t = {
{ "i", 0, 0, 0, 2 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_radius_param_t = {
+const be_ctypes_structure_t be_lv_draw_mask_radius_param = {
24, /* size in bytes */
11, /* number of elements */
(const be_ctypes_structure_item_t[11]) {
@@ -346,7 +346,7 @@ const be_ctypes_structure_t be_lv_draw_mask_radius_param_t = {
{ "y_prev_x_i", 20, 0, 0, 2 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_fade_param_cfg_t = {
+const be_ctypes_structure_t be_lv_draw_mask_fade_param_cfg = {
14, /* size in bytes */
8, /* number of elements */
(const be_ctypes_structure_item_t[8]) {
@@ -360,7 +360,7 @@ const be_ctypes_structure_t be_lv_draw_mask_fade_param_cfg_t = {
{ "y_top", 8, 0, 0, 12 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_fade_param_t = {
+const be_ctypes_structure_t be_lv_draw_mask_fade_param = {
19, /* size in bytes */
10, /* number of elements */
(const be_ctypes_structure_item_t[10]) {
@@ -376,7 +376,7 @@ const be_ctypes_structure_t be_lv_draw_mask_fade_param_t = {
{ "dsc_type", 4, 0, 0, 1 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_map_param_cfg_t = {
+const be_ctypes_structure_t be_lv_draw_mask_map_param_cfg = {
12, /* size in bytes */
5, /* number of elements */
(const be_ctypes_structure_item_t[5]) {
@@ -387,7 +387,7 @@ const be_ctypes_structure_t be_lv_draw_mask_map_param_cfg_t = {
{ "map", 8, 0, 0, 4 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_map_param_t = {
+const be_ctypes_structure_t be_lv_draw_mask_map_param = {
17, /* size in bytes */
7, /* number of elements */
(const be_ctypes_structure_item_t[7]) {
@@ -400,7 +400,7 @@ const be_ctypes_structure_t be_lv_draw_mask_map_param_t = {
{ "dsc_type", 4, 0, 0, 1 },
}};
-const be_ctypes_structure_t be_lv_draw_mask_saved_t = {
+const be_ctypes_structure_t be_lv_draw_mask_saved = {
8, /* size in bytes */
2, /* number of elements */
(const be_ctypes_structure_item_t[2]) {
@@ -411,48 +411,48 @@ const be_ctypes_structure_t be_lv_draw_mask_saved_t = {
const be_ctypes_classes_t be_ctypes_classes[] = {
19,
(const be_ctypes_class_t[19]) {
- { "lv_area_t", &be_lv_area_t },
- { "lv_draw_img_dsc_t", &be_lv_draw_img_dsc_t },
- { "lv_draw_label_dsc_t", &be_lv_draw_label_dsc_t },
- { "lv_draw_line_dsc_t", &be_lv_draw_line_dsc_t },
- { "lv_draw_mask_angle_param_cfg_t", &be_lv_draw_mask_angle_param_cfg_t },
- { "lv_draw_mask_angle_param_t", &be_lv_draw_mask_angle_param_t },
- { "lv_draw_mask_common_dsc_t", &be_lv_draw_mask_common_dsc_t },
- { "lv_draw_mask_fade_param_cfg_t", &be_lv_draw_mask_fade_param_cfg_t },
- { "lv_draw_mask_fade_param_t", &be_lv_draw_mask_fade_param_t },
- { "lv_draw_mask_line_param_cfg_t", &be_lv_draw_mask_line_param_cfg_t },
- { "lv_draw_mask_line_param_t", &be_lv_draw_mask_line_param_t },
- { "lv_draw_mask_map_param_cfg_t", &be_lv_draw_mask_map_param_cfg_t },
- { "lv_draw_mask_map_param_t", &be_lv_draw_mask_map_param_t },
- { "lv_draw_mask_radius_param_cfg_t", &be_lv_draw_mask_radius_param_cfg_t },
- { "lv_draw_mask_radius_param_t", &be_lv_draw_mask_radius_param_t },
- { "lv_draw_mask_saved_t", &be_lv_draw_mask_saved_t },
- { "lv_draw_rect_dsc_t", &be_lv_draw_rect_dsc_t },
- { "lv_point_t", &be_lv_point_t },
- { "lv_sqrt_res_t", &be_lv_sqrt_res_t },
+ { "lv_area", &be_lv_area },
+ { "lv_draw_img_dsc", &be_lv_draw_img_dsc },
+ { "lv_draw_label_dsc", &be_lv_draw_label_dsc },
+ { "lv_draw_line_dsc", &be_lv_draw_line_dsc },
+ { "lv_draw_mask_angle_param", &be_lv_draw_mask_angle_param },
+ { "lv_draw_mask_angle_param_cfg", &be_lv_draw_mask_angle_param_cfg },
+ { "lv_draw_mask_common_dsc", &be_lv_draw_mask_common_dsc },
+ { "lv_draw_mask_fade_param", &be_lv_draw_mask_fade_param },
+ { "lv_draw_mask_fade_param_cfg", &be_lv_draw_mask_fade_param_cfg },
+ { "lv_draw_mask_line_param", &be_lv_draw_mask_line_param },
+ { "lv_draw_mask_line_param_cfg", &be_lv_draw_mask_line_param_cfg },
+ { "lv_draw_mask_map_param", &be_lv_draw_mask_map_param },
+ { "lv_draw_mask_map_param_cfg", &be_lv_draw_mask_map_param_cfg },
+ { "lv_draw_mask_radius_param", &be_lv_draw_mask_radius_param },
+ { "lv_draw_mask_radius_param_cfg", &be_lv_draw_mask_radius_param_cfg },
+ { "lv_draw_mask_saved", &be_lv_draw_mask_saved },
+ { "lv_draw_rect_dsc", &be_lv_draw_rect_dsc },
+ { "lv_point", &be_lv_point },
+ { "lv_sqrt_res", &be_lv_sqrt_res },
}};
/* @const_object_info_begin
class be_class_ctypes_classes (scope: global) {
- lv_area_t, int(0)
- lv_draw_img_dsc_t, int(0)
- lv_draw_label_dsc_t, int(0)
- lv_draw_line_dsc_t, int(0)
- lv_draw_mask_angle_param_cfg_t, int(0)
- lv_draw_mask_angle_param_t, int(0)
- lv_draw_mask_common_dsc_t, int(0)
- lv_draw_mask_fade_param_cfg_t, int(0)
- lv_draw_mask_fade_param_t, int(0)
- lv_draw_mask_line_param_cfg_t, int(0)
- lv_draw_mask_line_param_t, int(0)
- lv_draw_mask_map_param_cfg_t, int(0)
- lv_draw_mask_map_param_t, int(0)
- lv_draw_mask_radius_param_cfg_t, int(0)
- lv_draw_mask_radius_param_t, int(0)
- lv_draw_mask_saved_t, int(0)
- lv_draw_rect_dsc_t, int(0)
- lv_point_t, int(0)
- lv_sqrt_res_t, int(0)
+ lv_area, int(0)
+ lv_draw_img_dsc, int(0)
+ lv_draw_label_dsc, int(0)
+ lv_draw_line_dsc, int(0)
+ lv_draw_mask_angle_param, int(0)
+ lv_draw_mask_angle_param_cfg, int(0)
+ lv_draw_mask_common_dsc, int(0)
+ lv_draw_mask_fade_param, int(0)
+ lv_draw_mask_fade_param_cfg, int(0)
+ lv_draw_mask_line_param, int(0)
+ lv_draw_mask_line_param_cfg, int(0)
+ lv_draw_mask_map_param, int(0)
+ lv_draw_mask_map_param_cfg, int(0)
+ lv_draw_mask_radius_param, int(0)
+ lv_draw_mask_radius_param_cfg, int(0)
+ lv_draw_mask_saved, int(0)
+ lv_draw_rect_dsc, int(0)
+ lv_point, int(0)
+ lv_sqrt_res, int(0)
}
@const_object_info_end */
@@ -461,44 +461,44 @@ void be_load_ctypes_definitions_lib(bvm *vm) {
be_setglobal(vm, ".ctypes_classes");
be_pop(vm, 1);
- static be_define_const_empty_class(be_class_lv_area_t, &be_class_lv_ctypes, lv_area_t);
- ctypes_register_class(vm, &be_class_lv_area_t, &be_lv_area_t);
- static be_define_const_empty_class(be_class_lv_draw_img_dsc_t, &be_class_lv_ctypes, lv_draw_img_dsc_t);
- ctypes_register_class(vm, &be_class_lv_draw_img_dsc_t, &be_lv_draw_img_dsc_t);
- static be_define_const_empty_class(be_class_lv_draw_label_dsc_t, &be_class_lv_ctypes, lv_draw_label_dsc_t);
- ctypes_register_class(vm, &be_class_lv_draw_label_dsc_t, &be_lv_draw_label_dsc_t);
- static be_define_const_empty_class(be_class_lv_draw_line_dsc_t, &be_class_lv_ctypes, lv_draw_line_dsc_t);
- ctypes_register_class(vm, &be_class_lv_draw_line_dsc_t, &be_lv_draw_line_dsc_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_angle_param_cfg_t, &be_class_lv_ctypes, lv_draw_mask_angle_param_cfg_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_angle_param_cfg_t, &be_lv_draw_mask_angle_param_cfg_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_angle_param_t, &be_class_lv_ctypes, lv_draw_mask_angle_param_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_angle_param_t, &be_lv_draw_mask_angle_param_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_common_dsc_t, &be_class_lv_ctypes, lv_draw_mask_common_dsc_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_common_dsc_t, &be_lv_draw_mask_common_dsc_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_fade_param_cfg_t, &be_class_lv_ctypes, lv_draw_mask_fade_param_cfg_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_fade_param_cfg_t, &be_lv_draw_mask_fade_param_cfg_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_fade_param_t, &be_class_lv_ctypes, lv_draw_mask_fade_param_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_fade_param_t, &be_lv_draw_mask_fade_param_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_line_param_cfg_t, &be_class_lv_ctypes, lv_draw_mask_line_param_cfg_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_line_param_cfg_t, &be_lv_draw_mask_line_param_cfg_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_line_param_t, &be_class_lv_ctypes, lv_draw_mask_line_param_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_line_param_t, &be_lv_draw_mask_line_param_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_map_param_cfg_t, &be_class_lv_ctypes, lv_draw_mask_map_param_cfg_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_map_param_cfg_t, &be_lv_draw_mask_map_param_cfg_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_map_param_t, &be_class_lv_ctypes, lv_draw_mask_map_param_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_map_param_t, &be_lv_draw_mask_map_param_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_radius_param_cfg_t, &be_class_lv_ctypes, lv_draw_mask_radius_param_cfg_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_radius_param_cfg_t, &be_lv_draw_mask_radius_param_cfg_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_radius_param_t, &be_class_lv_ctypes, lv_draw_mask_radius_param_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_radius_param_t, &be_lv_draw_mask_radius_param_t);
- static be_define_const_empty_class(be_class_lv_draw_mask_saved_t, &be_class_lv_ctypes, lv_draw_mask_saved_t);
- ctypes_register_class(vm, &be_class_lv_draw_mask_saved_t, &be_lv_draw_mask_saved_t);
- static be_define_const_empty_class(be_class_lv_draw_rect_dsc_t, &be_class_lv_ctypes, lv_draw_rect_dsc_t);
- ctypes_register_class(vm, &be_class_lv_draw_rect_dsc_t, &be_lv_draw_rect_dsc_t);
- static be_define_const_empty_class(be_class_lv_point_t, &be_class_lv_ctypes, lv_point_t);
- ctypes_register_class(vm, &be_class_lv_point_t, &be_lv_point_t);
- static be_define_const_empty_class(be_class_lv_sqrt_res_t, &be_class_lv_ctypes, lv_sqrt_res_t);
- ctypes_register_class(vm, &be_class_lv_sqrt_res_t, &be_lv_sqrt_res_t);
+ static be_define_const_empty_class(be_class_lv_area, &be_class_lv_ctypes, lv_area);
+ ctypes_register_class(vm, &be_class_lv_area, &be_lv_area);
+ static be_define_const_empty_class(be_class_lv_draw_img_dsc, &be_class_lv_ctypes, lv_draw_img_dsc);
+ ctypes_register_class(vm, &be_class_lv_draw_img_dsc, &be_lv_draw_img_dsc);
+ static be_define_const_empty_class(be_class_lv_draw_label_dsc, &be_class_lv_ctypes, lv_draw_label_dsc);
+ ctypes_register_class(vm, &be_class_lv_draw_label_dsc, &be_lv_draw_label_dsc);
+ static be_define_const_empty_class(be_class_lv_draw_line_dsc, &be_class_lv_ctypes, lv_draw_line_dsc);
+ ctypes_register_class(vm, &be_class_lv_draw_line_dsc, &be_lv_draw_line_dsc);
+ static be_define_const_empty_class(be_class_lv_draw_mask_angle_param, &be_class_lv_ctypes, lv_draw_mask_angle_param);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_angle_param, &be_lv_draw_mask_angle_param);
+ static be_define_const_empty_class(be_class_lv_draw_mask_angle_param_cfg, &be_class_lv_ctypes, lv_draw_mask_angle_param_cfg);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_angle_param_cfg, &be_lv_draw_mask_angle_param_cfg);
+ static be_define_const_empty_class(be_class_lv_draw_mask_common_dsc, &be_class_lv_ctypes, lv_draw_mask_common_dsc);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_common_dsc, &be_lv_draw_mask_common_dsc);
+ static be_define_const_empty_class(be_class_lv_draw_mask_fade_param, &be_class_lv_ctypes, lv_draw_mask_fade_param);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_fade_param, &be_lv_draw_mask_fade_param);
+ static be_define_const_empty_class(be_class_lv_draw_mask_fade_param_cfg, &be_class_lv_ctypes, lv_draw_mask_fade_param_cfg);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_fade_param_cfg, &be_lv_draw_mask_fade_param_cfg);
+ static be_define_const_empty_class(be_class_lv_draw_mask_line_param, &be_class_lv_ctypes, lv_draw_mask_line_param);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_line_param, &be_lv_draw_mask_line_param);
+ static be_define_const_empty_class(be_class_lv_draw_mask_line_param_cfg, &be_class_lv_ctypes, lv_draw_mask_line_param_cfg);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_line_param_cfg, &be_lv_draw_mask_line_param_cfg);
+ static be_define_const_empty_class(be_class_lv_draw_mask_map_param, &be_class_lv_ctypes, lv_draw_mask_map_param);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_map_param, &be_lv_draw_mask_map_param);
+ static be_define_const_empty_class(be_class_lv_draw_mask_map_param_cfg, &be_class_lv_ctypes, lv_draw_mask_map_param_cfg);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_map_param_cfg, &be_lv_draw_mask_map_param_cfg);
+ static be_define_const_empty_class(be_class_lv_draw_mask_radius_param, &be_class_lv_ctypes, lv_draw_mask_radius_param);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_radius_param, &be_lv_draw_mask_radius_param);
+ static be_define_const_empty_class(be_class_lv_draw_mask_radius_param_cfg, &be_class_lv_ctypes, lv_draw_mask_radius_param_cfg);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_radius_param_cfg, &be_lv_draw_mask_radius_param_cfg);
+ static be_define_const_empty_class(be_class_lv_draw_mask_saved, &be_class_lv_ctypes, lv_draw_mask_saved);
+ ctypes_register_class(vm, &be_class_lv_draw_mask_saved, &be_lv_draw_mask_saved);
+ static be_define_const_empty_class(be_class_lv_draw_rect_dsc, &be_class_lv_ctypes, lv_draw_rect_dsc);
+ ctypes_register_class(vm, &be_class_lv_draw_rect_dsc, &be_lv_draw_rect_dsc);
+ static be_define_const_empty_class(be_class_lv_point, &be_class_lv_ctypes, lv_point);
+ ctypes_register_class(vm, &be_class_lv_point, &be_lv_point);
+ static be_define_const_empty_class(be_class_lv_sqrt_res, &be_class_lv_ctypes, lv_sqrt_res);
+ ctypes_register_class(vm, &be_class_lv_sqrt_res, &be_lv_sqrt_res);
}
/*******************************************************************/
diff --git a/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c b/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c
index c1b7bd816..5c2161432 100644
--- a/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c
+++ b/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c
@@ -47,6 +47,16 @@ extern int lvbe_img_get_angle(bvm *vm);
extern int lvbe_img_get_pivot(bvm *vm);
extern int lvbe_img_get_zoom(bvm *vm);
extern int lvbe_img_get_antialias(bvm *vm);
+extern int lvbe_img_cf_get_px_size(bvm *vm);
+extern int lvbe_img_cf_is_chroma_keyed(bvm *vm);
+extern int lvbe_img_cf_has_alpha(bvm *vm);
+extern int lvbe_img_buf_get_px_color(bvm *vm);
+extern int lvbe_img_buf_get_px_alpha(bvm *vm);
+extern int lvbe_img_buf_set_px_color(bvm *vm);
+extern int lvbe_img_buf_set_px_alpha(bvm *vm);
+extern int lvbe_img_buf_set_palette(bvm *vm);
+extern int lvbe_img_buf_free(bvm *vm);
+extern int lvbe_img_buf_get_img_size(bvm *vm);
/* `lv_style` external functions definitions */
extern int lvbe_style_copy(bvm *vm);
@@ -167,6 +177,7 @@ extern int lvbe_group_set_editing(bvm *vm);
extern int lvbe_group_set_click_focus(bvm *vm);
extern int lvbe_group_set_wrap(bvm *vm);
extern int lvbe_group_get_focused(bvm *vm);
+extern int lvbe_group_get_focus_cb(bvm *vm);
extern int lvbe_group_get_editing(bvm *vm);
extern int lvbe_group_get_click_focus(bvm *vm);
extern int lvbe_group_get_wrap(bvm *vm);
@@ -280,6 +291,9 @@ extern int lvbe_obj_get_base_dir(bvm *vm);
extern int lvbe_obj_get_protect(bvm *vm);
extern int lvbe_obj_is_protected(bvm *vm);
extern int lvbe_obj_get_state(bvm *vm);
+extern int lvbe_obj_get_signal_cb(bvm *vm);
+extern int lvbe_obj_get_design_cb(bvm *vm);
+extern int lvbe_obj_get_event_cb(bvm *vm);
extern int lvbe_obj_is_point_on_coords(bvm *vm);
extern int lvbe_obj_hittest(bvm *vm);
extern int lvbe_obj_get_ext_attr(bvm *vm);
@@ -479,6 +493,7 @@ extern int lvbe_obj_get_style_scale_grad_color(bvm *vm);
extern int lvbe_obj_set_style_local_scale_grad_color(bvm *vm);
extern int lvbe_obj_get_style_scale_end_color(bvm *vm);
extern int lvbe_obj_set_style_local_scale_end_color(bvm *vm);
+extern int lvbe_obj_signal_send(bvm *vm);
/* `lv_arc` external functions definitions */
extern int lvbe_arc_create(bvm *vm);
@@ -1159,11 +1174,6 @@ void be_load_lv_style_lib(bvm *vm) {
{ NULL, NULL }
};
be_regclass(vm, "lv_style", members);
-
- be_getglobal(vm, "lv_style");
- be_getglobal(vm, "lv_obj");
- be_setsuper(vm, -2);
- be_pop(vm, 2);
#else
be_pushntvclass(vm, &be_class_lv_style);
be_setglobal(vm, "lv_style");
@@ -1172,7 +1182,7 @@ void be_load_lv_style_lib(bvm *vm) {
};
/* @const_object_info_begin
-class be_class_lv_style (scope: global, name: lv_style, super: be_class_lv_obj) {
+class be_class_lv_style (scope: global, name: lv_style) {
.p, var
init, func(lvs_init)
tostring, func(lvs_tostring)
@@ -1226,11 +1236,6 @@ void be_load_lv_indev_lib(bvm *vm) {
{ NULL, NULL }
};
be_regclass(vm, "lv_indev", members);
-
- be_getglobal(vm, "lv_indev");
- be_getglobal(vm, "lv_obj");
- be_setsuper(vm, -2);
- be_pop(vm, 2);
#else
be_pushntvclass(vm, &be_class_lv_indev);
be_setglobal(vm, "lv_indev");
@@ -1239,7 +1244,7 @@ void be_load_lv_indev_lib(bvm *vm) {
};
/* @const_object_info_begin
-class be_class_lv_indev (scope: global, name: lv_indev, super: be_class_lv_obj) {
+class be_class_lv_indev (scope: global, name: lv_indev) {
.p, var
init, func(lv0_init)
tostring, func(lvx_tostring)
diff --git a/lib/libesp32/Berry/default/be_modtab.c b/lib/libesp32/Berry/default/be_modtab.c
index b9c2fddae..5e334a7e2 100644
--- a/lib/libesp32/Berry/default/be_modtab.c
+++ b/lib/libesp32/Berry/default/be_modtab.c
@@ -102,6 +102,8 @@ extern void be_load_md5_lib(bvm *vm);
extern void be_load_lvgl_color_lib(bvm *vm);
extern void be_load_lvgl_font_lib(bvm *vm);
extern void be_load_lv_all_lib(bvm *vm);
+extern void be_load_lvgl_cb_lib(bvm *vm);
+extern void be_load_lvgl_cb_all_lib(bvm *vm);
extern void be_load_lvgl_ctypes_lib(bvm *vm);
extern void be_load_ctypes_definitions_lib(bvm *vm);
#endif// USE_LVGL
@@ -128,6 +130,8 @@ BERRY_API void be_load_custom_libs(bvm *vm)
be_load_lvgl_font_lib(vm);
be_load_lv_all_lib(vm);
+ be_load_lvgl_cb_lib(vm);
+ be_load_lvgl_cb_all_lib(vm);
be_load_lvgl_ctypes_lib(vm);
be_load_ctypes_definitions_lib(vm);
#endif // USE_LVGL
diff --git a/lib/libesp32/Berry/generate/be_const_strtab.h b/lib/libesp32/Berry/generate/be_const_strtab.h
index a48347bfe..4db818aba 100644
--- a/lib/libesp32/Berry/generate/be_const_strtab.h
+++ b/lib/libesp32/Berry/generate/be_const_strtab.h
@@ -1,626 +1,633 @@
-extern const bcstring be_const_str_RF_SENSOR;
-extern const bcstring be_const_str_lv_label;
-extern const bcstring be_const_str_GPS_TX;
-extern const bcstring be_const_str_MAX31855DO;
-extern const bcstring be_const_str_SWT1;
-extern const bcstring be_const_str_resp_cmnd_failed;
-extern const bcstring be_const_str_lv_draw_mask_line_param_t;
-extern const bcstring be_const_str_TM1638DIO;
-extern const bcstring be_const_str_lv_draw_mask_line_param_cfg_t;
-extern const bcstring be_const_str_run_deferred;
-extern const bcstring be_const_str_REL1;
-extern const bcstring be_const_str_lv_font;
-extern const bcstring be_const_str_CSE7766_TX;
-extern const bcstring be_const_str_MD5;
-extern const bcstring be_const_str_SYMBOL_SHUFFLE;
-extern const bcstring be_const_str_allocated;
-extern const bcstring be_const_str_KEY1_TC;
-extern const bcstring be_const_str_list;
-extern const bcstring be_const_str_lv_page;
-extern const bcstring be_const_str_raise;
-extern const bcstring be_const_str_SPI_MOSI;
-extern const bcstring be_const_str_try;
-extern const bcstring be_const_str_RFRECV;
-extern const bcstring be_const_str_SYMBOL_WIFI;
-extern const bcstring be_const_str_lv_gauge;
-extern const bcstring be_const_str_try_rule;
-extern const bcstring be_const_str_PROJECTOR_CTRL_TX;
-extern const bcstring be_const_str_SYMBOL_CALL;
-extern const bcstring be_const_str_str;
-extern const bcstring be_const_str_SDCARD_CS;
-extern const bcstring be_const_str_reverse;
-extern const bcstring be_const_str_add;
-extern const bcstring be_const_str_insert;
-extern const bcstring be_const_str_rtc;
-extern const bcstring be_const_str_CC1101_GDO0;
-extern const bcstring be_const_str_MGC3130_RESET;
-extern const bcstring be_const_str_NONE;
-extern const bcstring be_const_str_set_timer;
-extern const bcstring be_const_str_FTC532;
-extern const bcstring be_const_str_GPS_RX;
-extern const bcstring be_const_str_INPUT_PULLUP;
-extern const bcstring be_const_str_find;
-extern const bcstring be_const_str_cb_dispatch;
-extern const bcstring be_const_str_DDSU666_TX;
-extern const bcstring be_const_str_lower;
-extern const bcstring be_const_str_lv_draw_mask_radius_param_cfg_t;
-extern const bcstring be_const_str_IBEACON_RX;
-extern const bcstring be_const_str_SYMBOL_IMAGE;
-extern const bcstring be_const_str__ccmd;
-extern const bcstring be_const_str_TELEINFO_ENABLE;
-extern const bcstring be_const_str_SYMBOL_PLAY;
-extern const bcstring be_const_str_clear;
-extern const bcstring be_const_str_has_arg;
-extern const bcstring be_const_str_publish;
-extern const bcstring be_const_str_web_add_button;
-extern const bcstring be_const_str_add_cmd;
-extern const bcstring be_const_str_input;
-extern const bcstring be_const_str_lv_tileview;
-extern const bcstring be_const_str_AZ_RXD;
-extern const bcstring be_const_str_lv_group;
-extern const bcstring be_const_str_pow;
-extern const bcstring be_const_str_PN532_TXD;
-extern const bcstring be_const_str_lv_msgbox;
-extern const bcstring be_const_str_print;
-extern const bcstring be_const_str_remove_cmd;
-extern const bcstring be_const_str_SYMBOL_DIRECTORY;
-extern const bcstring be_const_str_keys;
-extern const bcstring be_const_str_member;
-extern const bcstring be_const_str_ctypes_bytes;
-extern const bcstring be_const_str_get_power;
-extern const bcstring be_const_str_millis;
-extern const bcstring be_const_str_SYMBOL_MINUS;
-extern const bcstring be_const_str_web_sensor;
-extern const bcstring be_const_str_CC1101_GDO2;
-extern const bcstring be_const_str_gc;
extern const bcstring be_const_str_lv_style;
-extern const bcstring be_const_str_gamma8;
-extern const bcstring be_const_str_ST7789_DC;
-extern const bcstring be_const_str_SYMBOL_PASTE;
-extern const bcstring be_const_str_display;
-extern const bcstring be_const_str_dump;
-extern const bcstring be_const_str_lv_led;
-extern const bcstring be_const_str_IRRECV;
-extern const bcstring be_const_str_nil;
-extern const bcstring be_const_str_SM2135_CLK;
-extern const bcstring be_const_str_type;
-extern const bcstring be_const_str_ILI9341_DC;
-extern const bcstring be_const_str_asin;
-extern const bcstring be_const_str_lv_list;
-extern const bcstring be_const_str_save_before_restart;
-extern const bcstring be_const_str_TFMINIPLUS_TX;
-extern const bcstring be_const_str_exec_cmd;
-extern const bcstring be_const_str__request_from;
-extern const bcstring be_const_str_read12;
-extern const bcstring be_const_str_super;
-extern const bcstring be_const_str_A4988_DIR;
-extern const bcstring be_const_str_MAX7219DIN;
-extern const bcstring be_const_str_module;
-extern const bcstring be_const_str_tolower;
-extern const bcstring be_const_str_ADC_BUTTON_INV;
-extern const bcstring be_const_str_SSD1331_CS;
-extern const bcstring be_const_str_hex;
-extern const bcstring be_const_str_resp_cmnd_error;
-extern const bcstring be_const_str_response_append;
-extern const bcstring be_const_str_traceback;
-extern const bcstring be_const_str_MAX7219CS;
-extern const bcstring be_const_str_OPTION_A;
-extern const bcstring be_const_str_compile;
-extern const bcstring be_const_str_lv_line;
-extern const bcstring be_const_str_MAX31855CS;
-extern const bcstring be_const_str_open;
-extern const bcstring be_const_str_read13;
-extern const bcstring be_const_str_time_dump;
-extern const bcstring be_const_str_TASMOTACLIENT_TXD;
-extern const bcstring be_const_str_LE01MR_RX;
-extern const bcstring be_const_str_lv_draw_mask_common_dsc_t;
-extern const bcstring be_const_str_ADE7953_IRQ;
-extern const bcstring be_const_str_range;
-extern const bcstring be_const_str_DHT22;
-extern const bcstring be_const_str_SYMBOL_BATTERY_FULL;
-extern const bcstring be_const_str_SR04_ECHO;
-extern const bcstring be_const_str_SYMBOL_OK;
-extern const bcstring be_const_str_check_privileged_access;
-extern const bcstring be_const_str_BS814_DAT;
-extern const bcstring be_const_str_MAX31855CLK;
-extern const bcstring be_const_str_SYMBOL_EJECT;
-extern const bcstring be_const_str_SYMBOL_NEW_LINE;
-extern const bcstring be_const_str_SYMBOL_UP;
-extern const bcstring be_const_str_lv_draw_label_dsc_t;
-extern const bcstring be_const_str_SYMBOL_SD_CARD;
-extern const bcstring be_const_str_codedump;
-extern const bcstring be_const_str_toupper;
-extern const bcstring be_const_str_break;
-extern const bcstring be_const_str_SYMBOL_LIST;
-extern const bcstring be_const_str_imax;
-extern const bcstring be_const_str_lv_chart;
-extern const bcstring be_const_str_pin;
-extern const bcstring be_const_str_erase;
-extern const bcstring be_const_str_load;
-extern const bcstring be_const_str_sqrt;
-extern const bcstring be_const_str__buffer;
-extern const bcstring be_const_str_lv_arc;
-extern const bcstring be_const_str_memory;
-extern const bcstring be_const_str_content_send_style;
-extern const bcstring be_const_str_as;
-extern const bcstring be_const_str_json_append;
-extern const bcstring be_const_str_web_add_main_button;
-extern const bcstring be_const_str_ETH_PHY_MDC;
-extern const bcstring be_const_str_LEDLNK_INV;
-extern const bcstring be_const_str_arg_name;
-extern const bcstring be_const_str_TX2X_TXD_BLACK;
-extern const bcstring be_const_str_EXS_ENABLE;
-extern const bcstring be_const_str_content_start;
-extern const bcstring be_const_str_I2C_SCL;
-extern const bcstring be_const_str_Wire;
-extern const bcstring be_const_str_lv_area_t;
-extern const bcstring be_const_str_PZEM016_RX;
-extern const bcstring be_const_str_CNTR1_NP;
extern const bcstring be_const_str_ETH_PHY_MDIO;
-extern const bcstring be_const_str_WEBCAM_RESET;
-extern const bcstring be_const_str_TUYA_TX;
-extern const bcstring be_const_str_ROT1B_NP;
-extern const bcstring be_const_str__available;
-extern const bcstring be_const_str_IEM3000_RX;
-extern const bcstring be_const_str_log10;
-extern const bcstring be_const_str_lv_img;
-extern const bcstring be_const_str_setmember;
-extern const bcstring be_const_str_PZEM004_RX;
-extern const bcstring be_const_str_lv_draw_mask_fade_param_cfg_t;
-extern const bcstring be_const_str_NRG_SEL;
-extern const bcstring be_const_str_KEY1_NP;
-extern const bcstring be_const_str_ceil;
-extern const bcstring be_const_str_BUZZER_INV;
-extern const bcstring be_const_str_RXD;
-extern const bcstring be_const_str_lv_obj;
-extern const bcstring be_const_str_NRF24_CS;
-extern const bcstring be_const_str_SYMBOL_CLOSE;
-extern const bcstring be_const_str_WEBCAM_PSCLK;
-extern const bcstring be_const_str_tanh;
-extern const bcstring be_const_str_EPAPER42_CS;
-extern const bcstring be_const_str_CSE7761_RX;
-extern const bcstring be_const_str_find_key_i;
-extern const bcstring be_const_str_int;
-extern const bcstring be_const_str_if;
-extern const bcstring be_const_str_SM16716_SEL;
-extern const bcstring be_const_str_WEBCAM_XCLK;
-extern const bcstring be_const_str_log;
-extern const bcstring be_const_str_lv_canvas;
-extern const bcstring be_const_str_HRXL_RX;
-extern const bcstring be_const_str_OPEN_DRAIN;
-extern const bcstring be_const_str_SDM120_RX;
-extern const bcstring be_const_str_SR04_TRIG;
-extern const bcstring be_const_str_lv_draw_mask_map_param_t;
-extern const bcstring be_const_str_tostring;
-extern const bcstring be_const_str_MAX7219CLK;
-extern const bcstring be_const_str_SYMBOL_DRIVE;
-extern const bcstring be_const_str_SAIR_RX;
-extern const bcstring be_const_str_SYMBOL_HOME;
-extern const bcstring be_const_str_SYMBOL_BLUETOOTH;
-extern const bcstring be_const_str_SYMBOL_WARNING;
-extern const bcstring be_const_str_AZ_TXD;
-extern const bcstring be_const_str_exec_rules;
-extern const bcstring be_const_str_pin_mode;
-extern const bcstring be_const_str_SDM630_TX;
-extern const bcstring be_const_str_lv_draw_mask_map_param_cfg_t;
-extern const bcstring be_const_str_LE01MR_TX;
-extern const bcstring be_const_str_TM1638STB;
-extern const bcstring be_const_str_return;
-extern const bcstring be_const_str_A4988_ENA;
-extern const bcstring be_const_str_resp_cmnd_str;
-extern const bcstring be_const_str_seti;
-extern const bcstring be_const_str_time_str;
-extern const bcstring be_const_str_SSPI_MOSI;
-extern const bcstring be_const_str_ZEROCROSS;
-extern const bcstring be_const_str_map;
-extern const bcstring be_const_str_sinh;
-extern const bcstring be_const_str_on;
-extern const bcstring be_const_str_KEY1;
-extern const bcstring be_const_str_SYMBOL_BACKSPACE;
-extern const bcstring be_const_str_TASMOTACLIENT_RST_INV;
-extern const bcstring be_const_str_read_bytes;
-extern const bcstring be_const_str_SYMBOL_STOP;
-extern const bcstring be_const_str__drivers;
-extern const bcstring be_const_str_get;
-extern const bcstring be_const_str_ZIGBEE_TX;
-extern const bcstring be_const_str_MCP39F5_RX;
-extern const bcstring be_const_str_opt_connect;
-extern const bcstring be_const_str_imin;
-extern const bcstring be_const_str_rand;
-extern const bcstring be_const_str_read32;
-extern const bcstring be_const_str_PZEM0XX_TX;
-extern const bcstring be_const_str_RA8876_CS;
-extern const bcstring be_const_str_remove_rule;
-extern const bcstring be_const_str_web_send;
-extern const bcstring be_const_str_wire_scan;
-extern const bcstring be_const_str_A4988_MS1;
-extern const bcstring be_const_str_SSD1351_CS;
-extern const bcstring be_const_str__cmd;
-extern const bcstring be_const_str_CHANGE;
-extern const bcstring be_const_str_HALLEFFECT;
-extern const bcstring be_const_str_TFMINIPLUS_RX;
-extern const bcstring be_const_str_lv_draw_mask_fade_param_t;
-extern const bcstring be_const_str_SPI_MISO;
-extern const bcstring be_const_str_SYMBOL_EYE_CLOSE;
-extern const bcstring be_const_str_digital_read;
-extern const bcstring be_const_str_TUYA_RX;
-extern const bcstring be_const_str_arg_size;
-extern const bcstring be_const_str_BS814_CLK;
-extern const bcstring be_const_str_end;
-extern const bcstring be_const_str_wire1;
-extern const bcstring be_const_str_IEM3000_TX;
-extern const bcstring be_const_str_name;
-extern const bcstring be_const_str_NRF24_DC;
-extern const bcstring be_const_str_SDM72_RX;
-extern const bcstring be_const_str_SSPI_MISO;
-extern const bcstring be_const_str_content_send;
-extern const bcstring be_const_str_digital_write;
-extern const bcstring be_const_str_lv_calendar;
-extern const bcstring be_const_str_write8;
-extern const bcstring be_const_str_EPD_DATA;
-extern const bcstring be_const_str_MCP39F5_TX;
-extern const bcstring be_const_str_get_free_heap;
-extern const bcstring be_const_str_i2c_enabled;
-extern const bcstring be_const_str_WS2812;
-extern const bcstring be_const_str_web_add_console_button;
-extern const bcstring be_const_str_ILI9488_CS;
-extern const bcstring be_const_str_WE517_RX;
-extern const bcstring be_const_str_lv_draw_mask_radius_param_t;
-extern const bcstring be_const_str_PWM1;
-extern const bcstring be_const_str_lv_sqrt_res_t;
-extern const bcstring be_const_str_wire2;
-extern const bcstring be_const_str_HIGH;
-extern const bcstring be_const_str_RFSEND;
-extern const bcstring be_const_str_ZIGBEE_RST;
-extern const bcstring be_const_str_srand;
-extern const bcstring be_const_str_SSPI_SCLK;
-extern const bcstring be_const_str_CSE7766_RX;
-extern const bcstring be_const_str_web_send_decimal;
-extern const bcstring be_const_str_resolvecmnd;
-extern const bcstring be_const_str_opt_call;
-extern const bcstring be_const_str_AS608_RX;
-extern const bcstring be_const_str_SYMBOL_GPS;
-extern const bcstring be_const_str_WEBCAM_PWDN;
-extern const bcstring be_const_str_detect;
-extern const bcstring be_const_str_HM10_TX;
-extern const bcstring be_const_str_SM2135_DAT;
-extern const bcstring be_const_str_WEBCAM_PSRCS;
-extern const bcstring be_const_str_get_light;
-extern const bcstring be_const_str_geti;
-extern const bcstring be_const_str_set_light;
-extern const bcstring be_const_str_WEBCAM_VSYNC;
-extern const bcstring be_const_str_WIEGAND_D1;
-extern const bcstring be_const_str_write;
-extern const bcstring be_const_str_ROT1A_NP;
-extern const bcstring be_const_str_SSPI_DC;
-extern const bcstring be_const_str_SWT1_NP;
-extern const bcstring be_const_str_WEBCAM_SIOC;
-extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN;
-extern const bcstring be_const_str_copy;
-extern const bcstring be_const_str_add_rule;
-extern const bcstring be_const_str_SYMBOL_DOWN;
-extern const bcstring be_const_str_SYMBOL_DOWNLOAD;
-extern const bcstring be_const_str_pin_used;
-extern const bcstring be_const_str_BOILER_OT_RX;
-extern const bcstring be_const_str_RC522_RST;
-extern const bcstring be_const_str_EPAPER29_CS;
-extern const bcstring be_const_str_WIEGAND_D0;
-extern const bcstring be_const_str_class;
extern const bcstring be_const_str_SYMBOL_PLUS;
-extern const bcstring be_const_str_BUZZER;
-extern const bcstring be_const_str_KEY1_INV;
-extern const bcstring be_const_str_lv_btnmatrix;
-extern const bcstring be_const_str_MIEL_HVAC_RX;
-extern const bcstring be_const_str_PZEM017_RX;
-extern const bcstring be_const_str_ZIGBEE_RX;
-extern const bcstring be_const_str_do;
-extern const bcstring be_const_str_AS3935;
-extern const bcstring be_const_str_DYP_RX;
-extern const bcstring be_const_str_push;
-extern const bcstring be_const_str_DHT11;
-extern const bcstring be_const_str_SM16716_CLK;
-extern const bcstring be_const_str_lv_imgbtn;
-extern const bcstring be_const_str_resize;
-extern const bcstring be_const_str_OUTPUT;
-extern const bcstring be_const_str_Tasmota;
-extern const bcstring be_const_str_classname;
-extern const bcstring be_const_str_SI7021;
-extern const bcstring be_const_str_SYMBOL_LEFT;
-extern const bcstring be_const_str_arg;
-extern const bcstring be_const_str_SYMBOL_CUT;
-extern const bcstring be_const_str_WEBCAM_HREF;
-extern const bcstring be_const_str_read8;
-extern const bcstring be_const_str_HM10_RX;
-extern const bcstring be_const_str_SYMBOL_DUMMY;
-extern const bcstring be_const_str_gamma10;
-extern const bcstring be_const_str_redirect;
-extern const bcstring be_const_str_CSE7761_TX;
-extern const bcstring be_const_str_SYMBOL_FILE;
-extern const bcstring be_const_str_register_button_encoder;
-extern const bcstring be_const_str_SYMBOL_SAVE;
-extern const bcstring be_const_str_SYMBOL_VOLUME_MAX;
-extern const bcstring be_const_str_HRE_DATA;
-extern const bcstring be_const_str_SAIR_TX;
-extern const bcstring be_const_str_DEEPSLEEP;
-extern const bcstring be_const_str_write_bytes;
-extern const bcstring be_const_str_TCP_TX;
-extern const bcstring be_const_str_read;
-extern const bcstring be_const_str_HPMA_TX;
-extern const bcstring be_const_str_SYMBOL_LOOP;
-extern const bcstring be_const_str_dot_p;
-extern const bcstring be_const_str_WEBCAM_DATA;
-extern const bcstring be_const_str_cmd;
-extern const bcstring be_const_str_read24;
-extern const bcstring be_const_str_SSD1351_DC;
-extern const bcstring be_const_str_DCKI;
-extern const bcstring be_const_str_RC522_CS;
-extern const bcstring be_const_str_RDM6300_RX;
-extern const bcstring be_const_str_cos;
-extern const bcstring be_const_str_lv_draw_mask_saved_t;
-extern const bcstring be_const_str_asstring;
-extern const bcstring be_const_str_abs;
-extern const bcstring be_const_str_attrdump;
-extern const bcstring be_const_str_lv_draw_mask_angle_param_t;
-extern const bcstring be_const_str_AS608_TX;
-extern const bcstring be_const_str_IRSEND;
-extern const bcstring be_const_str_TM1638CLK;
-extern const bcstring be_const_str_lv_btn;
-extern const bcstring be_const_str_MCP39F5_RST;
-extern const bcstring be_const_str_save;
-extern const bcstring be_const_str_SPI_DC;
-extern const bcstring be_const_str_gen_cb;
-extern const bcstring be_const_str_lv_draw_line_dsc_t;
-extern const bcstring be_const_str_lv_objmask;
-extern const bcstring be_const_str_reverse_gamma10;
-extern const bcstring be_const_str_LOW;
-extern const bcstring be_const_str_HX711_DAT;
-extern const bcstring be_const_str_OUTPUT_HI;
-extern const bcstring be_const_str_lv_draw_img_dsc_t;
-extern const bcstring be_const_str_lv_textarea;
-extern const bcstring be_const_str_TXD;
-extern const bcstring be_const_str_lv_keyboard;
-extern const bcstring be_const_str_SPI_CLK;
-extern const bcstring be_const_str_SYMBOL_AUDIO;
-extern const bcstring be_const_str_write_bit;
-extern const bcstring be_const_str_DSB_OUT;
-extern const bcstring be_const_str_dot_def;
-extern const bcstring be_const_str_ADC_LIGHT;
-extern const bcstring be_const_str_WEBCAM_SIOD;
-extern const bcstring be_const_str_button_pressed;
-extern const bcstring be_const_str_deinit;
-extern const bcstring be_const_str_lv_cont;
-extern const bcstring be_const_str_HRE_CLOCK;
-extern const bcstring be_const_str_TM1637CLK;
-extern const bcstring be_const_str___iterator__;
-extern const bcstring be_const_str__write;
-extern const bcstring be_const_str_lv_color;
-extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0;
-extern const bcstring be_const_str_else;
-extern const bcstring be_const_str_;
-extern const bcstring be_const_str_A4988_STP;
-extern const bcstring be_const_str_ELECTRIQ_MOODL_TX;
-extern const bcstring be_const_str_REL1_INV;
-extern const bcstring be_const_str_SYMBOL_COPY;
-extern const bcstring be_const_str_lv_linemeter;
-extern const bcstring be_const_str_delay;
-extern const bcstring be_const_str_isinstance;
-extern const bcstring be_const_str_BOILER_OT_TX;
-extern const bcstring be_const_str_LEDLNK;
-extern const bcstring be_const_str_SDS0X1_RX;
-extern const bcstring be_const_str_WEBCAM_PCLK;
-extern const bcstring be_const_str__read;
-extern const bcstring be_const_str_content_button;
-extern const bcstring be_const_str_HX711_SCK;
-extern const bcstring be_const_str_calldepth;
-extern const bcstring be_const_str_every_100ms;
-extern const bcstring be_const_str_getbits;
-extern const bcstring be_const_str_start;
-extern const bcstring be_const_str__get_cb;
-extern const bcstring be_const_str_size;
-extern const bcstring be_const_str_var;
-extern const bcstring be_const_str_ADC_RANGE;
-extern const bcstring be_const_str_get_option;
-extern const bcstring be_const_str_get_tasmota;
-extern const bcstring be_const_str_NRG_SEL_INV;
-extern const bcstring be_const_str_SYMBOL_MUTE;
-extern const bcstring be_const_str_number;
-extern const bcstring be_const_str_LMT01;
-extern const bcstring be_const_str_DHT11_OUT;
-extern const bcstring be_const_str_SOLAXX1_TX;
-extern const bcstring be_const_str_false;
-extern const bcstring be_const_str_ILI9341_CS;
-extern const bcstring be_const_str_SSD1331_DC;
-extern const bcstring be_const_str_DDS2382_TX;
-extern const bcstring be_const_str__timers;
-extern const bcstring be_const_str_opt_neq;
-extern const bcstring be_const_str_ARIRFSEL;
-extern const bcstring be_const_str_MGC3130_XFER;
-extern const bcstring be_const_str_fromstring;
-extern const bcstring be_const_str_lv_roller;
+extern const bcstring be_const_str_hex;
+extern const bcstring be_const_str_setrange;
extern const bcstring be_const_str_bus;
-extern const bcstring be_const_str_format;
-extern const bcstring be_const_str_load_freetype_font;
-extern const bcstring be_const_str_tan;
-extern const bcstring be_const_str___upper__;
-extern const bcstring be_const_str_SSPI_MAX31865_CS1;
-extern const bcstring be_const_str__rules;
-extern const bcstring be_const_str_P9813_DAT;
-extern const bcstring be_const_str_cosh;
-extern const bcstring be_const_str_LED1;
-extern const bcstring be_const_str_SDM630_RX;
-extern const bcstring be_const_str_init;
-extern const bcstring be_const_str_opt_add;
-extern const bcstring be_const_str_SYMBOL_KEYBOARD;
-extern const bcstring be_const_str_SYMBOL_POWER;
-extern const bcstring be_const_str_resp_cmnd_done;
-extern const bcstring be_const_str_rad;
-extern const bcstring be_const_str_ARIRFRCV;
-extern const bcstring be_const_str_lv_indev;
-extern const bcstring be_const_str_SDM120_TX;
-extern const bcstring be_const_str_iter;
-extern const bcstring be_const_str_lv_draw_mask_angle_param_cfg_t;
-extern const bcstring be_const_str_seg7_font;
-extern const bcstring be_const_str_BACKLIGHT;
-extern const bcstring be_const_str_bytes;
-extern const bcstring be_const_str_for;
-extern const bcstring be_const_str_HLW_CF;
-extern const bcstring be_const_str_BL0940_RX;
-extern const bcstring be_const_str_SYMBOL_BATTERY_EMPTY;
-extern const bcstring be_const_str_TASMOTACLIENT_RST;
-extern const bcstring be_const_str_floor;
-extern const bcstring be_const_str_Driver;
-extern const bcstring be_const_str_lv_cpicker;
-extern const bcstring be_const_str_FALLING;
-extern const bcstring be_const_str_PN532_RXD;
-extern const bcstring be_const_str_SYMBOL_USB;
-extern const bcstring be_const_str_update;
-extern const bcstring be_const_str_web_add_management_button;
-extern const bcstring be_const_str_lv_dropdown;
-extern const bcstring be_const_str_SYMBOL_PAUSE;
-extern const bcstring be_const_str_lv_table;
-extern const bcstring be_const_str_PULLUP;
-extern const bcstring be_const_str_SYMBOL_CHARGE;
-extern const bcstring be_const_str__end_transmission;
-extern const bcstring be_const_str_P9813_CLK;
-extern const bcstring be_const_str_SYMBOL_REFRESH;
-extern const bcstring be_const_str_SYMBOL_VIDEO;
-extern const bcstring be_const_str_ADC_JOY;
-extern const bcstring be_const_str_KEY1_INV_NP;
-extern const bcstring be_const_str_NEOPOOL_TX;
-extern const bcstring be_const_str_lv_tabview;
-extern const bcstring be_const_str_event;
-extern const bcstring be_const_str_real;
-extern const bcstring be_const_str_elif;
-extern const bcstring be_const_str_MHZ_RXD;
-extern const bcstring be_const_str_load_font;
-extern const bcstring be_const_str_DI;
-extern const bcstring be_const_str_wire;
-extern const bcstring be_const_str_HJL_CF;
-extern const bcstring be_const_str_assert;
-extern const bcstring be_const_str_SPI_CS;
-extern const bcstring be_const_str_SYMBOL_BULLET;
-extern const bcstring be_const_str_SDM72_TX;
-extern const bcstring be_const_str_lv_point_t;
-extern const bcstring be_const_str_HPMA_RX;
-extern const bcstring be_const_str_I2C_Driver;
-extern const bcstring be_const_str_PMS5003_RX;
-extern const bcstring be_const_str_XPT2046_CS;
-extern const bcstring be_const_str_yield;
-extern const bcstring be_const_str_LED1_INV;
-extern const bcstring be_const_str__cb;
-extern const bcstring be_const_str_IBEACON_TX;
-extern const bcstring be_const_str_time_reached;
-extern const bcstring be_const_str_TASMOTACLIENT_RXD;
-extern const bcstring be_const_str_scale_uint;
extern const bcstring be_const_str_concat;
-extern const bcstring be_const_str_content_flush;
-extern const bcstring be_const_str_PMS5003_TX;
-extern const bcstring be_const_str_SOLAXX1_RX;
-extern const bcstring be_const_str_SYMBOL_TRASH;
-extern const bcstring be_const_str__begin_transmission;
-extern const bcstring be_const_str_SBR_RX;
-extern const bcstring be_const_str_SYMBOL_NEXT;
-extern const bcstring be_const_str_atan;
-extern const bcstring be_const_str_collect;
-extern const bcstring be_const_str_lv_bar;
-extern const bcstring be_const_str_addr;
-extern const bcstring be_const_str_chars_in_string;
-extern const bcstring be_const_str_I2C_SDA;
-extern const bcstring be_const_str_SYMBOL_EYE_OPEN;
-extern const bcstring be_const_str_WEBCAM_HSD;
-extern const bcstring be_const_str_lv_win;
-extern const bcstring be_const_str_every_second;
+extern const bcstring be_const_str_raise;
extern const bcstring be_const_str_ROT1A;
-extern const bcstring be_const_str___lower__;
-extern const bcstring be_const_str_find_op;
-extern const bcstring be_const_str_finish;
-extern const bcstring be_const_str_def;
-extern const bcstring be_const_str_MHZ_TXD;
+extern const bcstring be_const_str_SPI_CLK;
+extern const bcstring be_const_str_SYMBOL_MINUS;
+extern const bcstring be_const_str_WEBCAM_PSCLK;
+extern const bcstring be_const_str_top;
+extern const bcstring be_const_str_EPAPER42_CS;
+extern const bcstring be_const_str_return;
+extern const bcstring be_const_str_MCP39F5_RST;
+extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN;
+extern const bcstring be_const_str_write_bytes;
extern const bcstring be_const_str_SYMBOL_SETTINGS;
-extern const bcstring be_const_str_ADC_PH;
-extern const bcstring be_const_str_NEOPOOL_RX;
-extern const bcstring be_const_str_INPUT;
-extern const bcstring be_const_str_screenshot;
-extern const bcstring be_const_str_lv_switch;
+extern const bcstring be_const_str_call;
+extern const bcstring be_const_str_lv_draw_mask_angle_param;
+extern const bcstring be_const_str_pi;
extern const bcstring be_const_str_acos;
-extern const bcstring be_const_str_lv_spinbox;
+extern const bcstring be_const_str_atan;
+extern const bcstring be_const_str_content_flush;
+extern const bcstring be_const_str_SYMBOL_BACKSPACE;
+extern const bcstring be_const_str_TM1638STB;
+extern const bcstring be_const_str_resp_cmnd;
+extern const bcstring be_const_str_web_add_management_button;
+extern const bcstring be_const_str_NRG_SEL;
+extern const bcstring be_const_str_SYMBOL_OK;
+extern const bcstring be_const_str_Wire;
+extern const bcstring be_const_str_SYMBOL_BATTERY_3;
+extern const bcstring be_const_str_init;
+extern const bcstring be_const_str_redirect;
+extern const bcstring be_const_str_ADC_TEMP;
+extern const bcstring be_const_str__get_cb;
+extern const bcstring be_const_str_finish;
+extern const bcstring be_const_str_SPI_DC;
+extern const bcstring be_const_str_MIEL_HVAC_RX;
+extern const bcstring be_const_str_NEOPOOL_TX;
+extern const bcstring be_const_str_SSD1331_CS;
+extern const bcstring be_const_str_TELEINFO_RX;
+extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV;
+extern const bcstring be_const_str_MAX7219CS;
+extern const bcstring be_const_str_pin_mode;
+extern const bcstring be_const_str_SDM72_RX;
+extern const bcstring be_const_str_SYMBOL_HOME;
+extern const bcstring be_const_str_TM1637CLK;
+extern const bcstring be_const_str_char;
+extern const bcstring be_const_str_resp_cmnd_done;
+extern const bcstring be_const_str_ADC_LIGHT;
+extern const bcstring be_const_str_ZIGBEE_TX;
+extern const bcstring be_const_str_lv_dropdown;
+extern const bcstring be_const_str_A4988_DIR;
+extern const bcstring be_const_str_AS3935;
+extern const bcstring be_const_str_lv_sqrt_res;
+extern const bcstring be_const_str_IEM3000_TX;
+extern const bcstring be_const_str_cosh;
+extern const bcstring be_const_str_web_sensor;
extern const bcstring be_const_str_continue;
-extern const bcstring be_const_str_import;
-extern const bcstring be_const_str_INPUT_PULLDOWN;
+extern const bcstring be_const_str_BS814_DAT;
+extern const bcstring be_const_str_opt_add;
+extern const bcstring be_const_str_A4988_ENA;
+extern const bcstring be_const_str_lv_point;
+extern const bcstring be_const_str_delay;
+extern const bcstring be_const_str_resp_cmnd_str;
+extern const bcstring be_const_str_iter;
+extern const bcstring be_const_str_fromstring;
+extern const bcstring be_const_str_lv_event_cb;
+extern const bcstring be_const_str_CNTR1_NP;
+extern const bcstring be_const_str_tanh;
+extern const bcstring be_const_str_lv_objmask;
+extern const bcstring be_const_str_SOLAXX1_RX;
+extern const bcstring be_const_str_HRE_CLOCK;
+extern const bcstring be_const_str_MAX31855CS;
+extern const bcstring be_const_str_SDM630_TX;
+extern const bcstring be_const_str_every_second;
+extern const bcstring be_const_str_SYMBOL_AUDIO;
+extern const bcstring be_const_str_RC522_CS;
+extern const bcstring be_const_str_def;
+extern const bcstring be_const_str_REL1;
+extern const bcstring be_const_str_load_font;
+extern const bcstring be_const_str_real;
+extern const bcstring be_const_str_set;
+extern const bcstring be_const_str_PZEM016_RX;
+extern const bcstring be_const_str_SSPI_CS;
+extern const bcstring be_const_str_SYMBOL_TRASH;
+extern const bcstring be_const_str_wire;
+extern const bcstring be_const_str_REL1_INV;
+extern const bcstring be_const_str_FTC532;
+extern const bcstring be_const_str_OUTPUT_HI;
+extern const bcstring be_const_str_classof;
+extern const bcstring be_const_str_web_send_decimal;
+extern const bcstring be_const_str_opt_neq;
+extern const bcstring be_const_str_LED1_INV;
+extern const bcstring be_const_str_load;
+extern const bcstring be_const_str_ADC_INPUT;
+extern const bcstring be_const_str_SPI_CS;
+extern const bcstring be_const_str_WEBCAM_RESET;
+extern const bcstring be_const_str_ceil;
+extern const bcstring be_const_str_clear;
+extern const bcstring be_const_str_cmd;
+extern const bcstring be_const_str_response_append;
+extern const bcstring be_const_str_lv_btn;
+extern const bcstring be_const_str_lv_draw_line_dsc;
+extern const bcstring be_const_str_gc;
+extern const bcstring be_const_str_WINDMETER_SPEED;
+extern const bcstring be_const_str_number;
+extern const bcstring be_const_str_write_bit;
+extern const bcstring be_const_str_WEBCAM_SIOC;
+extern const bcstring be_const_str_I2C_SCL;
+extern const bcstring be_const_str_XPT2046_CS;
+extern const bcstring be_const_str_lv_calendar;
+extern const bcstring be_const_str_RISING;
+extern const bcstring be_const_str_arg;
+extern const bcstring be_const_str__read;
+extern const bcstring be_const_str_rand;
+extern const bcstring be_const_str_SYMBOL_SHUFFLE;
+extern const bcstring be_const_str_DDSU666_TX;
+extern const bcstring be_const_str_web_add_button;
+extern const bcstring be_const_str_except;
+extern const bcstring be_const_str_RFRECV;
+extern const bcstring be_const_str_PZEM017_RX;
+extern const bcstring be_const_str_RA8876_CS;
+extern const bcstring be_const_str_KEY1_INV;
+extern const bcstring be_const_str___iterator__;
+extern const bcstring be_const_str_lv_draw_mask_map_param_cfg;
+extern const bcstring be_const_str_module;
+extern const bcstring be_const_str_ADC_BUTTON;
+extern const bcstring be_const_str_get_tasmota;
+extern const bcstring be_const_str_read24;
+extern const bcstring be_const_str_start;
+extern const bcstring be_const_str_MIEL_HVAC_TX;
+extern const bcstring be_const_str_SYMBOL_DRIVE;
+extern const bcstring be_const_str_SYMBOL_WARNING;
+extern const bcstring be_const_str_gamma8;
+extern const bcstring be_const_str_lv_draw_mask_line_param;
+extern const bcstring be_const_str_memory;
+extern const bcstring be_const_str_SPI_MOSI;
+extern const bcstring be_const_str_digital_read;
+extern const bcstring be_const_str_lv_design_cb;
+extern const bcstring be_const_str_MD5;
+extern const bcstring be_const_str_get_option;
+extern const bcstring be_const_str_lv_checkbox;
+extern const bcstring be_const_str_PMS5003_RX;
+extern const bcstring be_const_str_SYMBOL_BATTERY_2;
+extern const bcstring be_const_str_read32;
+extern const bcstring be_const_str_dump;
+extern const bcstring be_const_str_SYMBOL_EYE_CLOSE;
+extern const bcstring be_const_str_SYMBOL_IMAGE;
+extern const bcstring be_const_str_abs;
+extern const bcstring be_const_str_traceback;
+extern const bcstring be_const_str_HPMA_RX;
+extern const bcstring be_const_str_SM16716_DAT;
+extern const bcstring be_const_str_SYMBOL_PAUSE;
+extern const bcstring be_const_str_attrdump;
+extern const bcstring be_const_str_lv_draw_mask_fade_param;
+extern const bcstring be_const_str_CC1101_GDO0;
+extern const bcstring be_const_str_super;
+extern const bcstring be_const_str_if;
+extern const bcstring be_const_str_TCP_RX;
+extern const bcstring be_const_str_keys;
+extern const bcstring be_const_str_lv_led;
+extern const bcstring be_const_str_time_dump;
+extern const bcstring be_const_str_HPMA_TX;
+extern const bcstring be_const_str_PN532_TXD;
+extern const bcstring be_const_str_compile;
+extern const bcstring be_const_str_TCP_TX;
+extern const bcstring be_const_str_lv_gauge_format_cb;
+extern const bcstring be_const_str_remove_rule;
+extern const bcstring be_const_str_KEY1_TC;
+extern const bcstring be_const_str_TASMOTACLIENT_RST;
+extern const bcstring be_const_str_tolower;
+extern const bcstring be_const_str_type;
+extern const bcstring be_const_str_lv_cont;
+extern const bcstring be_const_str_every_100ms;
+extern const bcstring be_const_str_lv_list;
+extern const bcstring be_const_str_CSE7766_TX;
+extern const bcstring be_const_str__available;
+extern const bcstring be_const_str_display;
+extern const bcstring be_const_str_sin;
+extern const bcstring be_const_str_SM2135_DAT;
+extern const bcstring be_const_str_WEBCAM_SIOD;
+extern const bcstring be_const_str_publish;
+extern const bcstring be_const_str_input;
+extern const bcstring be_const_str_map;
+extern const bcstring be_const_str_IRRECV;
+extern const bcstring be_const_str_SSD1351_CS;
+extern const bcstring be_const_str_SYMBOL_PLAY;
+extern const bcstring be_const_str_MGC3130_RESET;
+extern const bcstring be_const_str_SYMBOL_SAVE;
+extern const bcstring be_const_str_lv_draw_mask_radius_param_cfg;
+extern const bcstring be_const_str_resp_cmnd_failed;
+extern const bcstring be_const_str_ADC_RANGE;
+extern const bcstring be_const_str_PZEM0XX_TX;
+extern const bcstring be_const_str_SYMBOL_USB;
+extern const bcstring be_const_str_int;
+extern const bcstring be_const_str_time_str;
+extern const bcstring be_const_str_LEDLNK_INV;
+extern const bcstring be_const_str_VL53L0X_XSHUT1;
+extern const bcstring be_const_str_set_power;
+extern const bcstring be_const_str__end_transmission;
+extern const bcstring be_const_str_get;
+extern const bcstring be_const_str_SPI_MISO;
+extern const bcstring be_const_str_print;
+extern const bcstring be_const_str_format;
+extern const bcstring be_const_str_MAX7219DIN;
+extern const bcstring be_const_str_lv_img;
+extern const bcstring be_const_str_HM10_RX;
+extern const bcstring be_const_str_allocated;
+extern const bcstring be_const_str_while;
+extern const bcstring be_const_str_getbits;
+extern const bcstring be_const_str_lv_spinner;
+extern const bcstring be_const_str_pow;
+extern const bcstring be_const_str_A4988_MS1;
+extern const bcstring be_const_str_SYMBOL_KEYBOARD;
+extern const bcstring be_const_str_lv_slider;
+extern const bcstring be_const_str_read13;
+extern const bcstring be_const_str_NRF24_CS;
+extern const bcstring be_const_str_PWM1;
+extern const bcstring be_const_str_SWT1;
+extern const bcstring be_const_str_SSD1331_DC;
+extern const bcstring be_const_str_PMS5003_TX;
+extern const bcstring be_const_str_TM1638DIO;
+extern const bcstring be_const_str__cmd;
+extern const bcstring be_const_str_asin;
+extern const bcstring be_const_str_read12;
+extern const bcstring be_const_str_state;
+extern const bcstring be_const_str_exec_cmd;
+extern const bcstring be_const_str_HLW_CF;
+extern const bcstring be_const_str_SYMBOL_DIRECTORY;
+extern const bcstring be_const_str_SYMBOL_PASTE;
+extern const bcstring be_const_str_resolvecmnd;
+extern const bcstring be_const_str_ST7789_CS;
+extern const bcstring be_const_str_SYMBOL_BATTERY_FULL;
+extern const bcstring be_const_str_log10;
+extern const bcstring be_const_str_TXD;
+extern const bcstring be_const_str_SYMBOL_EYE_OPEN;
+extern const bcstring be_const_str__buffer;
+extern const bcstring be_const_str_EXS_ENABLE;
+extern const bcstring be_const_str_HJL_CF;
+extern const bcstring be_const_str_lv_draw_mask_fade_param_cfg;
+extern const bcstring be_const_str_PROJECTOR_CTRL_RX;
+extern const bcstring be_const_str_SBR_TX;
+extern const bcstring be_const_str_sqrt;
+extern const bcstring be_const_str_MAX31855DO;
+extern const bcstring be_const_str_SYMBOL_DOWN;
+extern const bcstring be_const_str_save_before_restart;
+extern const bcstring be_const_str_write8;
+extern const bcstring be_const_str_byte;
+extern const bcstring be_const_str_write;
+extern const bcstring be_const_str_GPS_TX;
+extern const bcstring be_const_str_ELECTRIQ_MOODL_TX;
extern const bcstring be_const_str_SYMBOL_BATTERY_1;
-extern const bcstring be_const_str_content_stop;
-extern const bcstring be_const_str_DSB;
+extern const bcstring be_const_str_WE517_RX;
+extern const bcstring be_const_str_digital_write;
+extern const bcstring be_const_str_lv_spinbox;
+extern const bcstring be_const_str_lv_switch;
+extern const bcstring be_const_str_pin;
+extern const bcstring be_const_str_pin_used;
+extern const bcstring be_const_str_SAIR_RX;
+extern const bcstring be_const_str_SI7021;
+extern const bcstring be_const_str_WE517_TX;
+extern const bcstring be_const_str_lv_obj;
+extern const bcstring be_const_str_SSPI_MAX31865_CS1;
+extern const bcstring be_const_str_DHT22;
+extern const bcstring be_const_str_arg_size;
+extern const bcstring be_const_str_millis;
+extern const bcstring be_const_str_remove;
+extern const bcstring be_const_str_deinit;
+extern const bcstring be_const_str_wire2;
+extern const bcstring be_const_str_SYMBOL_FILE;
+extern const bcstring be_const_str_lv_canvas;
+extern const bcstring be_const_str_ROT1A_NP;
+extern const bcstring be_const_str_WEBCAM_DATA;
+extern const bcstring be_const_str_IEM3000_RX;
+extern const bcstring be_const_str_NEOPOOL_RX;
+extern const bcstring be_const_str_OUTPUT;
+extern const bcstring be_const_str_lv_msgbox;
+extern const bcstring be_const_str_has_arg;
+extern const bcstring be_const_str_lv_table;
+extern const bcstring be_const_str_SSPI_MOSI;
+extern const bcstring be_const_str_CSE7761_TX;
+extern const bcstring be_const_str_P9813_DAT;
+extern const bcstring be_const_str_WEBCAM_PWDN;
+extern const bcstring be_const_str_count;
+extern const bcstring be_const_str_LMT01;
+extern const bcstring be_const_str_read8;
+extern const bcstring be_const_str_PN532_RXD;
+extern const bcstring be_const_str_PZEM004_RX;
+extern const bcstring be_const_str__begin_transmission;
+extern const bcstring be_const_str_web_add_console_button;
extern const bcstring be_const_str_web_add_handler;
+extern const bcstring be_const_str_INPUT_PULLDOWN;
+extern const bcstring be_const_str_CSE7761_RX;
+extern const bcstring be_const_str_find;
+extern const bcstring be_const_str_break;
+extern const bcstring be_const_str_NRG_SEL_INV;
+extern const bcstring be_const_str_ILI9488_CS;
+extern const bcstring be_const_str_MCP39F5_RX;
+extern const bcstring be_const_str_ROT1B;
+extern const bcstring be_const_str_opt_call;
+extern const bcstring be_const_str_SOLAXX1_TX;
+extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0;
+extern const bcstring be_const_str_WEBCAM_VSYNC;
+extern const bcstring be_const_str_tan;
+extern const bcstring be_const_str_web_send;
+extern const bcstring be_const_str_LED1;
+extern const bcstring be_const_str_INPUT_PULLUP;
+extern const bcstring be_const_str_chars_in_string;
+extern const bcstring be_const_str_else;
+extern const bcstring be_const_str_nil;
+extern const bcstring be_const_str_MAX31855CLK;
+extern const bcstring be_const_str_SYMBOL_GPS;
+extern const bcstring be_const_str_lv_draw_mask_map_param;
+extern const bcstring be_const_str_SWT1_NP;
+extern const bcstring be_const_str_log;
+extern const bcstring be_const_str_read_bytes;
+extern const bcstring be_const_str_dot_def;
+extern const bcstring be_const_str_SYMBOL_CALL;
+extern const bcstring be_const_str_DHT11;
+extern const bcstring be_const_str_NRG_CF1;
+extern const bcstring be_const_str_SYMBOL_MUTE;
+extern const bcstring be_const_str_ETH_PHY_POWER;
+extern const bcstring be_const_str_TFMINIPLUS_TX;
+extern const bcstring be_const_str_EPAPER29_CS;
+extern const bcstring be_const_str_lv_chart;
+extern const bcstring be_const_str_name;
+extern const bcstring be_const_str_event;
+extern const bcstring be_const_str_ADC_JOY;
+extern const bcstring be_const_str_FALLING;
+extern const bcstring be_const_str_remove_cmd;
+extern const bcstring be_const_str_CSE7766_RX;
+extern const bcstring be_const_str_DYP_RX;
+extern const bcstring be_const_str_LEDLNK;
+extern const bcstring be_const_str_IRSEND;
+extern const bcstring be_const_str_lv_textarea;
+extern const bcstring be_const_str_RFSEND;
+extern const bcstring be_const_str_SSD1351_DC;
+extern const bcstring be_const_str_SYMBOL_COPY;
+extern const bcstring be_const_str_SYMBOL_UP;
+extern const bcstring be_const_str_TX2X_TXD_BLACK;
+extern const bcstring be_const_str_json_append;
+extern const bcstring be_const_str_TUYA_RX;
+extern const bcstring be_const_str_HRE_DATA;
+extern const bcstring be_const_str_DDSU666_RX;
+extern const bcstring be_const_str_reverse_gamma10;
+extern const bcstring be_const_str_SM16716_SEL;
+extern const bcstring be_const_str_TASMOTACLIENT_RST_INV;
+extern const bcstring be_const_str_add_rule;
+extern const bcstring be_const_str_resize;
+extern const bcstring be_const_str_resp_cmnd_error;
+extern const bcstring be_const_str_ADC_BUTTON_INV;
+extern const bcstring be_const_str_TASMOTACLIENT_TXD;
+extern const bcstring be_const_str_MP3_DFR562;
+extern const bcstring be_const_str_RC522_RST;
+extern const bcstring be_const_str_SYMBOL_LEFT;
+extern const bcstring be_const_str_rad;
+extern const bcstring be_const_str_ARIRFSEL;
+extern const bcstring be_const_str_MHZ_TXD;
+extern const bcstring be_const_str_SAIR_TX;
+extern const bcstring be_const_str_sinh;
+extern const bcstring be_const_str_lv_group_focus_cb;
+extern const bcstring be_const_str_SENSOR_END;
+extern const bcstring be_const_str_assert;
+extern const bcstring be_const_str_reverse;
+extern const bcstring be_const_str_codedump;
+extern const bcstring be_const_str_CNTR1;
+extern const bcstring be_const_str_lv_draw_mask_saved;
+extern const bcstring be_const_str_read;
+extern const bcstring be_const_str_DDS2382_TX;
+extern const bcstring be_const_str_ROT1B_NP;
+extern const bcstring be_const_str_SSPI_MISO;
+extern const bcstring be_const_str___upper__;
+extern const bcstring be_const_str_pop;
+extern const bcstring be_const_str_SDCARD_CS;
+extern const bcstring be_const_str__write;
+extern const bcstring be_const_str_lv_draw_mask_line_param_cfg;
+extern const bcstring be_const_str_setmember;
+extern const bcstring be_const_str_I2C_Driver;
+extern const bcstring be_const_str_addr;
+extern const bcstring be_const_str_find_key_i;
+extern const bcstring be_const_str_BOILER_OT_TX;
+extern const bcstring be_const_str_P9813_CLK;
+extern const bcstring be_const_str_lv_area;
+extern const bcstring be_const_str_split;
+extern const bcstring be_const_str_CHANGE;
+extern const bcstring be_const_str_SM2135_CLK;
+extern const bcstring be_const_str_ZEROCROSS;
+extern const bcstring be_const_str_i2c_enabled;
+extern const bcstring be_const_str_lv_color;
+extern const bcstring be_const_str_wire1;
+extern const bcstring be_const_str_lv_draw_rect_dsc;
+extern const bcstring be_const_str_seti;
+extern const bcstring be_const_str_ST7789_DC;
+extern const bcstring be_const_str_var;
+extern const bcstring be_const_str_MCP39F5_TX;
+extern const bcstring be_const_str__ccmd;
+extern const bcstring be_const_str_AS608_TX;
+extern const bcstring be_const_str_TM1638CLK;
+extern const bcstring be_const_str_get_free_heap;
+extern const bcstring be_const_str_lv_keyboard;
+extern const bcstring be_const_str_elif;
+extern const bcstring be_const_str_KEY1;
+extern const bcstring be_const_str_LE01MR_TX;
+extern const bcstring be_const_str_lv_tileview;
+extern const bcstring be_const_str_class;
+extern const bcstring be_const_str_BUZZER_INV;
+extern const bcstring be_const_str_lv_roller;
extern const bcstring be_const_str_ADC_CT_POWER;
+extern const bcstring be_const_str_asstring;
+extern const bcstring be_const_str_lv_draw_mask_angle_param_cfg;
+extern const bcstring be_const_str_save;
+extern const bcstring be_const_str_size;
+extern const bcstring be_const_str_NONE;
+extern const bcstring be_const_str_exp;
+extern const bcstring be_const_str_on;
+extern const bcstring be_const_str_BL0940_RX;
+extern const bcstring be_const_str_WIEGAND_D0;
+extern const bcstring be_const_str_check_privileged_access;
+extern const bcstring be_const_str_lv_indev;
+extern const bcstring be_const_str_opt_eq;
+extern const bcstring be_const_str_TFMINIPLUS_RX;
+extern const bcstring be_const_str_PULLDOWN;
+extern const bcstring be_const_str_;
+extern const bcstring be_const_str_arg_name;
+extern const bcstring be_const_str_screenshot;
+extern const bcstring be_const_str_setbits;
+extern const bcstring be_const_str_SYMBOL_LOOP;
+extern const bcstring be_const_str_MHZ_RXD;
+extern const bcstring be_const_str_get_power;
+extern const bcstring be_const_str_lv_font;
+extern const bcstring be_const_str_BACKLIGHT;
+extern const bcstring be_const_str_BS814_CLK;
+extern const bcstring be_const_str_PULLUP;
+extern const bcstring be_const_str_TM1637DIO;
+extern const bcstring be_const_str_lv_btnmatrix;
+extern const bcstring be_const_str_SR04_ECHO;
+extern const bcstring be_const_str_ADE7953_IRQ;
+extern const bcstring be_const_str_classname;
+extern const bcstring be_const_str_str;
+extern const bcstring be_const_str_SYMBOL_PREV;
+extern const bcstring be_const_str_add_driver;
+extern const bcstring be_const_str_content_button;
+extern const bcstring be_const_str_HX711_DAT;
+extern const bcstring be_const_str_dot_p;
+extern const bcstring be_const_str_content_stop;
+extern const bcstring be_const_str_GPS_RX;
+extern const bcstring be_const_str_HX711_SCK;
+extern const bcstring be_const_str_RDM6300_RX;
+extern const bcstring be_const_str_AZ_RXD;
+extern const bcstring be_const_str_Tasmota;
+extern const bcstring be_const_str_ZIGBEE_RX;
+extern const bcstring be_const_str_imax;
+extern const bcstring be_const_str_montserrat_font;
+extern const bcstring be_const_str_srand;
+extern const bcstring be_const_str_time_reached;
+extern const bcstring be_const_str_try_rule;
+extern const bcstring be_const_str_LOW;
+extern const bcstring be_const_str_SDM120_TX;
+extern const bcstring be_const_str_SYMBOL_BELL;
+extern const bcstring be_const_str_tostring;
+extern const bcstring be_const_str_DDS2382_RX;
+extern const bcstring be_const_str_HRXL_RX;
+extern const bcstring be_const_str_button_pressed;
+extern const bcstring be_const_str_lv_arc;
+extern const bcstring be_const_str_SDM120_RX;
+extern const bcstring be_const_str_SYMBOL_POWER;
+extern const bcstring be_const_str_list;
+extern const bcstring be_const_str_lv_bar;
+extern const bcstring be_const_str_lv_linemeter;
+extern const bcstring be_const_str_lv_page;
+extern const bcstring be_const_str_upper;
+extern const bcstring be_const_str_wire_scan;
+extern const bcstring be_const_str_SBR_RX;
+extern const bcstring be_const_str_gamma10;
+extern const bcstring be_const_str_PWM1_INV;
+extern const bcstring be_const_str_exec_rules;
+extern const bcstring be_const_str_ETH_PHY_MDC;
+extern const bcstring be_const_str_content_send_style;
+extern const bcstring be_const_str_run_deferred;
+extern const bcstring be_const_str_SYMBOL_REFRESH;
+extern const bcstring be_const_str_TASMOTACLIENT_RXD;
+extern const bcstring be_const_str_WS2812;
+extern const bcstring be_const_str_PROJECTOR_CTRL_TX;
+extern const bcstring be_const_str_lv_line;
+extern const bcstring be_const_str_SYMBOL_VOLUME_MAX;
+extern const bcstring be_const_str_MAX7219CLK;
+extern const bcstring be_const_str_RF_SENSOR;
+extern const bcstring be_const_str_WEBCAM_PCLK;
+extern const bcstring be_const_str_lv_imgbtn;
+extern const bcstring be_const_str_try;
+extern const bcstring be_const_str_EPD_DATA;
+extern const bcstring be_const_str_cb_dispatch;
+extern const bcstring be_const_str_ADC_PH;
+extern const bcstring be_const_str_DHT11_OUT;
+extern const bcstring be_const_str_SYMBOL_RIGHT;
+extern const bcstring be_const_str_IBEACON_TX;
+extern const bcstring be_const_str_gen_cb;
+extern const bcstring be_const_str_open;
+extern const bcstring be_const_str_OLED_RESET;
+extern const bcstring be_const_str_lv_cpicker;
+extern const bcstring be_const_str_scan;
+extern const bcstring be_const_str_toupper;
+extern const bcstring be_const_str_SDS0X1_RX;
+extern const bcstring be_const_str_content_send;
+extern const bcstring be_const_str_lv_group;
+extern const bcstring be_const_str_AS608_RX;
+extern const bcstring be_const_str_SYMBOL_CHARGE;
+extern const bcstring be_const_str_get_light;
+extern const bcstring be_const_str_load_freetype_font;
+extern const bcstring be_const_str_setitem;
+extern const bcstring be_const_str_opt_connect;
+extern const bcstring be_const_str_SDM72_TX;
+extern const bcstring be_const_str_SYMBOL_VOLUME_MID;
+extern const bcstring be_const_str_TELEINFO_ENABLE;
+extern const bcstring be_const_str_collect;
+extern const bcstring be_const_str__timers;
+extern const bcstring be_const_str_add;
+extern const bcstring be_const_str_isinstance;
+extern const bcstring be_const_str_rtc;
+extern const bcstring be_const_str_lv_draw_img_dsc;
+extern const bcstring be_const_str_HIGH;
+extern const bcstring be_const_str_add_cmd;
+extern const bcstring be_const_str_erase;
+extern const bcstring be_const_str_as;
+extern const bcstring be_const_str_DSB;
+extern const bcstring be_const_str_KEY1_INV_NP;
+extern const bcstring be_const_str___lower__;
+extern const bcstring be_const_str_set_light;
+extern const bcstring be_const_str_ARIRFRCV;
+extern const bcstring be_const_str_KEY1_NP;
+extern const bcstring be_const_str_WIEGAND_D1;
+extern const bcstring be_const_str_find_op;
+extern const bcstring be_const_str_NRF24_DC;
+extern const bcstring be_const_str_content_start;
+extern const bcstring be_const_str_SYMBOL_STOP;
+extern const bcstring be_const_str_lv_win;
+extern const bcstring be_const_str_false;
+extern const bcstring be_const_str_A4988_STP;
+extern const bcstring be_const_str_SYMBOL_NEXT;
+extern const bcstring be_const_str_WEBCAM_XCLK;
+extern const bcstring be_const_str_WEBCAM_PSRCS;
+extern const bcstring be_const_str_scale_uint;
+extern const bcstring be_const_str_do;
+extern const bcstring be_const_str_OUTPUT_LO;
+extern const bcstring be_const_str_SSPI_DC;
+extern const bcstring be_const_str_import;
+extern const bcstring be_const_str_push;
+extern const bcstring be_const_str_cos;
+extern const bcstring be_const_str_lv_tabview;
+extern const bcstring be_const_str_set_timer;
+extern const bcstring be_const_str_DEEPSLEEP;
+extern const bcstring be_const_str_ILI9341_DC;
+extern const bcstring be_const_str_yield;
+extern const bcstring be_const_str_SDM630_RX;
+extern const bcstring be_const_str_DI;
+extern const bcstring be_const_str_SYMBOL_BLUETOOTH;
+extern const bcstring be_const_str_lv_draw_label_dsc;
+extern const bcstring be_const_str_update;
+extern const bcstring be_const_str_INPUT;
+extern const bcstring be_const_str_SYMBOL_NEW_LINE;
+extern const bcstring be_const_str_ZIGBEE_RST;
+extern const bcstring be_const_str_SYMBOL_SD_CARD;
+extern const bcstring be_const_str_CC1101_GDO2;
+extern const bcstring be_const_str_MGC3130_XFER;
+extern const bcstring be_const_str__drivers;
+extern const bcstring be_const_str_copy;
+extern const bcstring be_const_str_detect;
+extern const bcstring be_const_str_SR04_TRIG;
+extern const bcstring be_const_str_TUYA_TX;
+extern const bcstring be_const_str__cb;
+extern const bcstring be_const_str_HALLEFFECT;
+extern const bcstring be_const_str_RXD;
+extern const bcstring be_const_str_imin;
+extern const bcstring be_const_str_SYMBOL_VIDEO;
+extern const bcstring be_const_str_SYMBOL_LIST;
+extern const bcstring be_const_str_calldepth;
+extern const bcstring be_const_str_AZ_TXD;
+extern const bcstring be_const_str_DSB_OUT;
+extern const bcstring be_const_str_end;
+extern const bcstring be_const_str_SYMBOL_BATTERY_EMPTY;
+extern const bcstring be_const_str_lv_gauge;
+extern const bcstring be_const_str_for;
+extern const bcstring be_const_str_BUZZER;
+extern const bcstring be_const_str_member;
+extern const bcstring be_const_str_SSPI_SCLK;
+extern const bcstring be_const_str_lv_draw_mask_radius_param;
+extern const bcstring be_const_str_range;
+extern const bcstring be_const_str_issubclass;
+extern const bcstring be_const_str_WEBCAM_HREF;
+extern const bcstring be_const_str_bytes;
+extern const bcstring be_const_str_lv_signal_cb;
+extern const bcstring be_const_str_Driver;
+extern const bcstring be_const_str_OPTION_A;
+extern const bcstring be_const_str_SYMBOL_DUMMY;
+extern const bcstring be_const_str_WEBCAM_HSD;
+extern const bcstring be_const_str_IBEACON_RX;
+extern const bcstring be_const_str_SYMBOL_WIFI;
+extern const bcstring be_const_str_HM10_TX;
+extern const bcstring be_const_str_BOILER_OT_RX;
+extern const bcstring be_const_str_SM16716_CLK;
+extern const bcstring be_const_str_SYMBOL_EJECT;
+extern const bcstring be_const_str_item;
extern const bcstring be_const_str_SDS0X1_TX;
extern const bcstring be_const_str_deg;
-extern const bcstring be_const_str_pop;
-extern const bcstring be_const_str_scan;
-extern const bcstring be_const_str_set;
-extern const bcstring be_const_str_OLED_RESET;
-extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV;
-extern const bcstring be_const_str_remove;
-extern const bcstring be_const_str_true;
-extern const bcstring be_const_str_OUTPUT_LO;
-extern const bcstring be_const_str_SYMBOL_VOLUME_MID;
-extern const bcstring be_const_str_SYMBOL_BATTERY_2;
-extern const bcstring be_const_str_lv_checkbox;
-extern const bcstring be_const_str_web_add_config_button;
-extern const bcstring be_const_str_DDSU666_RX;
-extern const bcstring be_const_str_PULLDOWN;
-extern const bcstring be_const_str_TM1637DIO;
-extern const bcstring be_const_str_setbits;
-extern const bcstring be_const_str_ADC_TEMP;
-extern const bcstring be_const_str_WINDMETER_SPEED;
-extern const bcstring be_const_str_top;
-extern const bcstring be_const_str_opt_eq;
-extern const bcstring be_const_str_issubclass;
-extern const bcstring be_const_str_DDS2382_RX;
-extern const bcstring be_const_str_MIEL_HVAC_TX;
+extern const bcstring be_const_str_OPEN_DRAIN;
+extern const bcstring be_const_str_SYMBOL_DOWNLOAD;
extern const bcstring be_const_str_SYMBOL_EDIT;
-extern const bcstring be_const_str_item;
-extern const bcstring be_const_str_setitem;
-extern const bcstring be_const_str_setrange;
-extern const bcstring be_const_str_RISING;
-extern const bcstring be_const_str_SYMBOL_BATTERY_3;
-extern const bcstring be_const_str_byte;
-extern const bcstring be_const_str_ADC_BUTTON;
-extern const bcstring be_const_str_ST7789_CS;
-extern const bcstring be_const_str_montserrat_font;
-extern const bcstring be_const_str_ROT1B;
-extern const bcstring be_const_str_SYMBOL_PREV;
-extern const bcstring be_const_str_lv_slider;
-extern const bcstring be_const_str_sin;
-extern const bcstring be_const_str_ETH_PHY_POWER;
-extern const bcstring be_const_str_exp;
-extern const bcstring be_const_str_resp_cmnd;
-extern const bcstring be_const_str_while;
-extern const bcstring be_const_str_VL53L0X_XSHUT1;
-extern const bcstring be_const_str_CNTR1;
-extern const bcstring be_const_str_SENSOR_END;
-extern const bcstring be_const_str_count;
-extern const bcstring be_const_str_SYMBOL_RIGHT;
-extern const bcstring be_const_str_pi;
-extern const bcstring be_const_str_except;
-extern const bcstring be_const_str_char;
-extern const bcstring be_const_str_lv_draw_rect_dsc_t;
-extern const bcstring be_const_str_PROJECTOR_CTRL_RX;
-extern const bcstring be_const_str_state;
-extern const bcstring be_const_str_MP3_DFR562;
-extern const bcstring be_const_str_NRG_CF1;
-extern const bcstring be_const_str_WE517_TX;
-extern const bcstring be_const_str_upper;
-extern const bcstring be_const_str_add_driver;
-extern const bcstring be_const_str_SM16716_DAT;
-extern const bcstring be_const_str_SBR_TX;
-extern const bcstring be_const_str_set_power;
-extern const bcstring be_const_str_ADC_INPUT;
-extern const bcstring be_const_str_classof;
-extern const bcstring be_const_str_SYMBOL_BELL;
-extern const bcstring be_const_str_TCP_RX;
-extern const bcstring be_const_str_split;
-extern const bcstring be_const_str_PWM1_INV;
-extern const bcstring be_const_str_TELEINFO_RX;
-extern const bcstring be_const_str_SSPI_CS;
+extern const bcstring be_const_str_geti;
+extern const bcstring be_const_str_lv_label;
+extern const bcstring be_const_str__rules;
+extern const bcstring be_const_str_insert;
+extern const bcstring be_const_str_register_button_encoder;
+extern const bcstring be_const_str_web_add_config_button;
+extern const bcstring be_const_str_true;
+extern const bcstring be_const_str_SYMBOL_BULLET;
+extern const bcstring be_const_str_SYMBOL_CLOSE;
+extern const bcstring be_const_str_SYMBOL_CUT;
+extern const bcstring be_const_str__request_from;
+extern const bcstring be_const_str_lower;
extern const bcstring be_const_str_SYMBOL_UPLOAD;
-extern const bcstring be_const_str_lv_spinner;
+extern const bcstring be_const_str_ctypes_bytes;
+extern const bcstring be_const_str_lv_draw_mask_common_dsc;
+extern const bcstring be_const_str_LE01MR_RX;
+extern const bcstring be_const_str_web_add_main_button;
+extern const bcstring be_const_str_floor;
+extern const bcstring be_const_str_seg7_font;
+extern const bcstring be_const_str_DCKI;
+extern const bcstring be_const_str_I2C_SDA;
+extern const bcstring be_const_str_ILI9341_CS;
+extern const bcstring be_const_str_lv_cb;
diff --git a/lib/libesp32/Berry/generate/be_const_strtab_def.h b/lib/libesp32/Berry/generate/be_const_strtab_def.h
index 9568b3f2d..9e7f626ed 100644
--- a/lib/libesp32/Berry/generate/be_const_strtab_def.h
+++ b/lib/libesp32/Berry/generate/be_const_strtab_def.h
@@ -1,937 +1,948 @@
-be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, &be_const_str_lv_label);
-be_define_const_str(lv_label, "lv_label", 4199664246u, 0, 8, NULL);
-be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, &be_const_str_MAX31855DO);
-be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str_SWT1);
-be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, &be_const_str_resp_cmnd_failed);
-be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL);
-be_define_const_str(lv_draw_mask_line_param_t, "lv_draw_mask_line_param_t", 3055103275u, 0, 25, NULL);
-be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, &be_const_str_lv_draw_mask_line_param_cfg_t);
-be_define_const_str(lv_draw_mask_line_param_cfg_t, "lv_draw_mask_line_param_cfg_t", 1955310178u, 0, 29, &be_const_str_run_deferred);
-be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL);
-be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, &be_const_str_lv_font);
-be_define_const_str(lv_font, "lv_font", 1550958453u, 0, 7, NULL);
-be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str_MD5);
-be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_SYMBOL_SHUFFLE);
-be_define_const_str(SYMBOL_SHUFFLE, "SYMBOL_SHUFFLE", 1123310147u, 0, 14, NULL);
-be_define_const_str(allocated, "allocated", 429986098u, 0, 9, NULL);
-be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str_list);
-be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_lv_page);
-be_define_const_str(lv_page, "lv_page", 2373170067u, 0, 7, &be_const_str_raise);
-be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL);
-be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, &be_const_str_try);
-be_define_const_str(try, "try", 2887626766u, 68, 3, NULL);
-be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, &be_const_str_SYMBOL_WIFI);
-be_define_const_str(SYMBOL_WIFI, "SYMBOL_WIFI", 682141303u, 0, 11, &be_const_str_lv_gauge);
-be_define_const_str(lv_gauge, "lv_gauge", 118613531u, 0, 8, &be_const_str_try_rule);
-be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL);
-be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, &be_const_str_SYMBOL_CALL);
-be_define_const_str(SYMBOL_CALL, "SYMBOL_CALL", 1444504366u, 0, 11, &be_const_str_str);
-be_define_const_str(str, "str", 3259748752u, 0, 3, NULL);
-be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, &be_const_str_reverse);
-be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL);
-be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_insert);
-be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_rtc);
-be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL);
-be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, &be_const_str_MGC3130_RESET);
-be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, &be_const_str_NONE);
-be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, &be_const_str_set_timer);
-be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL);
-be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_GPS_RX);
-be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, &be_const_str_INPUT_PULLUP);
-be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_find);
-be_define_const_str(find, "find", 3186656602u, 0, 4, NULL);
-be_define_const_str(cb_dispatch, "cb_dispatch", 1741510499u, 0, 11, NULL);
-be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, &be_const_str_lower);
-be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_lv_draw_mask_radius_param_cfg_t);
-be_define_const_str(lv_draw_mask_radius_param_cfg_t, "lv_draw_mask_radius_param_cfg_t", 4276521150u, 0, 31, NULL);
-be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_SYMBOL_IMAGE);
-be_define_const_str(SYMBOL_IMAGE, "SYMBOL_IMAGE", 815601151u, 0, 12, &be_const_str__ccmd);
-be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, NULL);
-be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, NULL);
-be_define_const_str(SYMBOL_PLAY, "SYMBOL_PLAY", 1750902100u, 0, 11, &be_const_str_clear);
-be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_has_arg);
-be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_publish);
-be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_web_add_button);
-be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, NULL);
-be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_input);
-be_define_const_str(input, "input", 4191711099u, 0, 5, NULL);
-be_define_const_str(lv_tileview, "lv_tileview", 2419887973u, 0, 11, NULL);
-be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str_lv_group);
-be_define_const_str(lv_group, "lv_group", 3852039019u, 0, 8, &be_const_str_pow);
-be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL);
-be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_lv_msgbox);
-be_define_const_str(lv_msgbox, "lv_msgbox", 689085206u, 0, 9, &be_const_str_print);
-be_define_const_str(print, "print", 372738696u, 0, 5, &be_const_str_remove_cmd);
-be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL);
-be_define_const_str(SYMBOL_DIRECTORY, "SYMBOL_DIRECTORY", 1886053449u, 0, 16, &be_const_str_keys);
-be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_member);
-be_define_const_str(member, "member", 719708611u, 0, 6, NULL);
-be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_get_power);
-be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, &be_const_str_millis);
-be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL);
-be_define_const_str(SYMBOL_MINUS, "SYMBOL_MINUS", 1806749158u, 0, 12, &be_const_str_web_sensor);
-be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, NULL);
-be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, &be_const_str_gc);
-be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_lv_style);
be_define_const_str(lv_style, "lv_style", 4151611549u, 0, 8, NULL);
-be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, NULL);
-be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, NULL);
-be_define_const_str(SYMBOL_PASTE, "SYMBOL_PASTE", 2281577421u, 0, 12, &be_const_str_display);
-be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_dump);
-be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_lv_led);
-be_define_const_str(lv_led, "lv_led", 3192184733u, 0, 6, NULL);
-be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_nil);
-be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL);
-be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_type);
-be_define_const_str(type, "type", 1361572173u, 0, 4, NULL);
-be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, &be_const_str_asin);
-be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_lv_list);
-be_define_const_str(lv_list, "lv_list", 2876551248u, 0, 7, &be_const_str_save_before_restart);
-be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL);
-be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, &be_const_str_exec_cmd);
-be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, NULL);
-be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_read12);
-be_define_const_str(read12, "read12", 4291076970u, 0, 6, &be_const_str_super);
-be_define_const_str(super, "super", 4152230356u, 0, 5, NULL);
-be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, &be_const_str_MAX7219DIN);
-be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_module);
-be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_tolower);
-be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL);
-be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, &be_const_str_SSD1331_CS);
-be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_hex);
-be_define_const_str(hex, "hex", 4273249610u, 0, 3, NULL);
-be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, &be_const_str_response_append);
-be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_traceback);
-be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL);
-be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_OPTION_A);
-be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_compile);
-be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_lv_line);
-be_define_const_str(lv_line, "lv_line", 2692732914u, 0, 7, NULL);
-be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, &be_const_str_open);
-be_define_const_str(open, "open", 3546203337u, 0, 4, &be_const_str_read13);
-be_define_const_str(read13, "read13", 12887293u, 0, 6, &be_const_str_time_dump);
-be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL);
-be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, NULL);
-be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, &be_const_str_lv_draw_mask_common_dsc_t);
-be_define_const_str(lv_draw_mask_common_dsc_t, "lv_draw_mask_common_dsc_t", 3736892783u, 0, 25, NULL);
-be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_range);
-be_define_const_str(range, "range", 4208725202u, 0, 5, NULL);
-be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_SYMBOL_BATTERY_FULL);
-be_define_const_str(SYMBOL_BATTERY_FULL, "SYMBOL_BATTERY_FULL", 2638935545u, 0, 19, NULL);
-be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, &be_const_str_SYMBOL_OK);
-be_define_const_str(SYMBOL_OK, "SYMBOL_OK", 4033162940u, 0, 9, &be_const_str_check_privileged_access);
-be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, NULL);
-be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, &be_const_str_MAX31855CLK);
-be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, &be_const_str_SYMBOL_EJECT);
-be_define_const_str(SYMBOL_EJECT, "SYMBOL_EJECT", 873760647u, 0, 12, &be_const_str_SYMBOL_NEW_LINE);
-be_define_const_str(SYMBOL_NEW_LINE, "SYMBOL_NEW_LINE", 2014334315u, 0, 15, &be_const_str_SYMBOL_UP);
-be_define_const_str(SYMBOL_UP, "SYMBOL_UP", 3886401511u, 0, 9, &be_const_str_lv_draw_label_dsc_t);
-be_define_const_str(lv_draw_label_dsc_t, "lv_draw_label_dsc_t", 3829436761u, 0, 19, NULL);
-be_define_const_str(SYMBOL_SD_CARD, "SYMBOL_SD_CARD", 2542376484u, 0, 14, &be_const_str_codedump);
-be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_toupper);
-be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, &be_const_str_break);
-be_define_const_str(break, "break", 3378807160u, 58, 5, NULL);
-be_define_const_str(SYMBOL_LIST, "SYMBOL_LIST", 70793990u, 0, 11, &be_const_str_imax);
-be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL);
-be_define_const_str(lv_chart, "lv_chart", 2652494144u, 0, 8, &be_const_str_pin);
-be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL);
-be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_load);
-be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_sqrt);
-be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL);
-be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str_lv_arc);
-be_define_const_str(lv_arc, "lv_arc", 4170125384u, 0, 6, &be_const_str_memory);
-be_define_const_str(memory, "memory", 2229924270u, 0, 6, NULL);
-be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, &be_const_str_as);
-be_define_const_str(as, "as", 1579491469u, 67, 2, NULL);
-be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, NULL);
-be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL);
-be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_LEDLNK_INV);
-be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_arg_name);
-be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, NULL);
-be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, NULL);
-be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, &be_const_str_content_start);
-be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, NULL);
-be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, &be_const_str_Wire);
-be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str_lv_area_t);
-be_define_const_str(lv_area_t, "lv_area_t", 3379304266u, 0, 9, NULL);
-be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, NULL);
-be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, &be_const_str_ETH_PHY_MDIO);
-be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, &be_const_str_WEBCAM_RESET);
-be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, NULL);
-be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, NULL);
-be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, NULL);
-be_define_const_str(_available, "_available", 1306196581u, 0, 10, NULL);
-be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, &be_const_str_log10);
-be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL);
-be_define_const_str(lv_img, "lv_img", 2474052327u, 0, 6, &be_const_str_setmember);
-be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL);
-be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str_lv_draw_mask_fade_param_cfg_t);
-be_define_const_str(lv_draw_mask_fade_param_cfg_t, "lv_draw_mask_fade_param_cfg_t", 3088649206u, 0, 29, NULL);
-be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, NULL);
-be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, &be_const_str_ceil);
-be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, NULL);
-be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_RXD);
-be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, &be_const_str_lv_obj);
-be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL);
-be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, &be_const_str_SYMBOL_CLOSE);
-be_define_const_str(SYMBOL_CLOSE, "SYMBOL_CLOSE", 2654402806u, 0, 12, &be_const_str_WEBCAM_PSCLK);
-be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, &be_const_str_tanh);
-be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL);
-be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, NULL);
-be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_find_key_i);
-be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_int);
-be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_if);
-be_define_const_str(if, "if", 959999494u, 50, 2, NULL);
-be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, &be_const_str_WEBCAM_XCLK);
-be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, &be_const_str_log);
-be_define_const_str(log, "log", 1062293841u, 0, 3, NULL);
-be_define_const_str(lv_canvas, "lv_canvas", 142865412u, 0, 9, NULL);
-be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, &be_const_str_OPEN_DRAIN);
-be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, NULL);
-be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_SR04_TRIG);
-be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, &be_const_str_lv_draw_mask_map_param_t);
-be_define_const_str(lv_draw_mask_map_param_t, "lv_draw_mask_map_param_t", 3323994495u, 0, 24, &be_const_str_tostring);
-be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL);
-be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_SYMBOL_DRIVE);
-be_define_const_str(SYMBOL_DRIVE, "SYMBOL_DRIVE", 567203502u, 0, 12, NULL);
-be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, &be_const_str_SYMBOL_HOME);
-be_define_const_str(SYMBOL_HOME, "SYMBOL_HOME", 730845525u, 0, 11, NULL);
-be_define_const_str(SYMBOL_BLUETOOTH, "SYMBOL_BLUETOOTH", 679376572u, 0, 16, &be_const_str_SYMBOL_WARNING);
-be_define_const_str(SYMBOL_WARNING, "SYMBOL_WARNING", 4119913686u, 0, 14, NULL);
-be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, NULL);
-be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_pin_mode);
-be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL);
-be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, NULL);
-be_define_const_str(lv_draw_mask_map_param_cfg_t, "lv_draw_mask_map_param_cfg_t", 3850234334u, 0, 28, NULL);
-be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, &be_const_str_TM1638STB);
-be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, &be_const_str_return);
+be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, &be_const_str_SYMBOL_PLUS);
+be_define_const_str(SYMBOL_PLUS, "SYMBOL_PLUS", 2860093262u, 0, 11, &be_const_str_hex);
+be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_setrange);
+be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL);
+be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_concat);
+be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_raise);
+be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL);
+be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, &be_const_str_SPI_CLK);
+be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, &be_const_str_SYMBOL_MINUS);
+be_define_const_str(SYMBOL_MINUS, "SYMBOL_MINUS", 1806749158u, 0, 12, &be_const_str_WEBCAM_PSCLK);
+be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, &be_const_str_top);
+be_define_const_str(top, "top", 2802900028u, 0, 3, NULL);
+be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str_return);
be_define_const_str(return, "return", 2246981567u, 60, 6, NULL);
-be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_resp_cmnd_str);
-be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_seti);
-be_define_const_str(seti, "seti", 1500556254u, 0, 4, &be_const_str_time_str);
-be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL);
-be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, &be_const_str_ZEROCROSS);
-be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, &be_const_str_map);
-be_define_const_str(map, "map", 3751997361u, 0, 3, &be_const_str_sinh);
-be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL);
-be_define_const_str(on, "on", 1630810064u, 0, 2, NULL);
-be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str_SYMBOL_BACKSPACE);
-be_define_const_str(SYMBOL_BACKSPACE, "SYMBOL_BACKSPACE", 1997168681u, 0, 16, &be_const_str_TASMOTACLIENT_RST_INV);
-be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, &be_const_str_read_bytes);
-be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL);
-be_define_const_str(SYMBOL_STOP, "SYMBOL_STOP", 2836505202u, 0, 11, NULL);
-be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_get);
-be_define_const_str(get, "get", 1410115415u, 0, 3, NULL);
-be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, NULL);
-be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, NULL);
-be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, NULL);
-be_define_const_str(imin, "imin", 2714127864u, 0, 4, NULL);
-be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_read32);
-be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL);
-be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, &be_const_str_RA8876_CS);
-be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, &be_const_str_remove_rule);
-be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, &be_const_str_web_send);
-be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, &be_const_str_wire_scan);
-be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL);
-be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, NULL);
-be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, &be_const_str__cmd);
-be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, NULL);
-be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, &be_const_str_HALLEFFECT);
-be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, &be_const_str_TFMINIPLUS_RX);
-be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, &be_const_str_lv_draw_mask_fade_param_t);
-be_define_const_str(lv_draw_mask_fade_param_t, "lv_draw_mask_fade_param_t", 2055191655u, 0, 25, NULL);
-be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, &be_const_str_SYMBOL_EYE_CLOSE);
-be_define_const_str(SYMBOL_EYE_CLOSE, "SYMBOL_EYE_CLOSE", 404721792u, 0, 16, &be_const_str_digital_read);
-be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, NULL);
-be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, &be_const_str_arg_size);
-be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, NULL);
-be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, &be_const_str_end);
-be_define_const_str(end, "end", 1787721130u, 56, 3, NULL);
-be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL);
-be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str_name);
-be_define_const_str(name, "name", 2369371622u, 0, 4, NULL);
-be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, &be_const_str_SDM72_RX);
-be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, &be_const_str_SSPI_MISO);
-be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, &be_const_str_content_send);
-be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_digital_write);
-be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, NULL);
-be_define_const_str(lv_calendar, "lv_calendar", 3284396894u, 0, 11, &be_const_str_write8);
-be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL);
-be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, &be_const_str_MCP39F5_TX);
-be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, &be_const_str_get_free_heap);
-be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_i2c_enabled);
-be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL);
-be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_web_add_console_button);
-be_define_const_str(web_add_console_button, "web_add_console_button", 3481436192u, 0, 22, NULL);
-be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_WE517_RX);
-be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, NULL);
-be_define_const_str(lv_draw_mask_radius_param_t, "lv_draw_mask_radius_param_t", 3584005663u, 0, 27, NULL);
-be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, &be_const_str_lv_sqrt_res_t);
-be_define_const_str(lv_sqrt_res_t, "lv_sqrt_res_t", 2980354776u, 0, 13, &be_const_str_wire2);
-be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL);
-be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_RFSEND);
-be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_ZIGBEE_RST);
-be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, &be_const_str_srand);
-be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL);
-be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, NULL);
-be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, NULL);
-be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL);
-be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL);
-be_define_const_str(opt_call, "()", 685372826u, 0, 2, &be_const_str_AS608_RX);
-be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, &be_const_str_SYMBOL_GPS);
-be_define_const_str(SYMBOL_GPS, "SYMBOL_GPS", 3044165570u, 0, 10, &be_const_str_WEBCAM_PWDN);
-be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, &be_const_str_detect);
-be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL);
-be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_SM2135_DAT);
-be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, &be_const_str_WEBCAM_PSRCS);
-be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, &be_const_str_get_light);
-be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_geti);
-be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_set_light);
-be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL);
-be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, &be_const_str_WIEGAND_D1);
-be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str_write);
-be_define_const_str(write, "write", 3190202204u, 0, 5, NULL);
-be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, NULL);
-be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, NULL);
-be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, &be_const_str_WEBCAM_SIOC);
-be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, NULL);
-be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, &be_const_str_copy);
-be_define_const_str(copy, "copy", 3848464964u, 0, 4, NULL);
-be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, NULL);
-be_define_const_str(SYMBOL_DOWN, "SYMBOL_DOWN", 1107513570u, 0, 11, &be_const_str_SYMBOL_DOWNLOAD);
-be_define_const_str(SYMBOL_DOWNLOAD, "SYMBOL_DOWNLOAD", 2607324090u, 0, 15, &be_const_str_pin_used);
-be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL);
-be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, &be_const_str_RC522_RST);
-be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, NULL);
-be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, NULL);
-be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, &be_const_str_class);
-be_define_const_str(class, "class", 2872970239u, 57, 5, NULL);
-be_define_const_str(SYMBOL_PLUS, "SYMBOL_PLUS", 2860093262u, 0, 11, NULL);
-be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, &be_const_str_KEY1_INV);
-be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str_lv_btnmatrix);
-be_define_const_str(lv_btnmatrix, "lv_btnmatrix", 626248489u, 0, 12, NULL);
-be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_PZEM017_RX);
-be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_ZIGBEE_RX);
-be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, &be_const_str_do);
-be_define_const_str(do, "do", 1646057492u, 65, 2, NULL);
-be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_DYP_RX);
-be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, &be_const_str_push);
-be_define_const_str(push, "push", 2272264157u, 0, 4, NULL);
-be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, &be_const_str_SM16716_CLK);
-be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, &be_const_str_lv_imgbtn);
-be_define_const_str(lv_imgbtn, "lv_imgbtn", 2402844429u, 0, 9, &be_const_str_resize);
-be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL);
-be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str_Tasmota);
-be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_classname);
-be_define_const_str(classname, "classname", 1998589948u, 0, 9, NULL);
-be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, &be_const_str_SYMBOL_LEFT);
-be_define_const_str(SYMBOL_LEFT, "SYMBOL_LEFT", 1563517575u, 0, 11, &be_const_str_arg);
-be_define_const_str(arg, "arg", 1047474471u, 0, 3, NULL);
-be_define_const_str(SYMBOL_CUT, "SYMBOL_CUT", 3455112394u, 0, 10, &be_const_str_WEBCAM_HREF);
-be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, NULL);
-be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL);
-be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_SYMBOL_DUMMY);
-be_define_const_str(SYMBOL_DUMMY, "SYMBOL_DUMMY", 3621732138u, 0, 12, NULL);
-be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_redirect);
-be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL);
-be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str_SYMBOL_FILE);
-be_define_const_str(SYMBOL_FILE, "SYMBOL_FILE", 237085260u, 0, 11, &be_const_str_register_button_encoder);
-be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL);
-be_define_const_str(SYMBOL_SAVE, "SYMBOL_SAVE", 2439821015u, 0, 11, &be_const_str_SYMBOL_VOLUME_MAX);
-be_define_const_str(SYMBOL_VOLUME_MAX, "SYMBOL_VOLUME_MAX", 3582646093u, 0, 17, NULL);
-be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, &be_const_str_SAIR_TX);
-be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, NULL);
-be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, &be_const_str_write_bytes);
+be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_OUTPUT_OPEN_DRAIN);
+be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, &be_const_str_write_bytes);
be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL);
-be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, &be_const_str_read);
-be_define_const_str(read, "read", 3470762949u, 0, 4, NULL);
-be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_SYMBOL_LOOP);
-be_define_const_str(SYMBOL_LOOP, "SYMBOL_LOOP", 2762053208u, 0, 11, NULL);
-be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_WEBCAM_DATA);
-be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, &be_const_str_cmd);
-be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_read24);
-be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL);
-be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, NULL);
-be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_RC522_CS);
-be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, &be_const_str_RDM6300_RX);
-be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, &be_const_str_cos);
-be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_lv_draw_mask_saved_t);
-be_define_const_str(lv_draw_mask_saved_t, "lv_draw_mask_saved_t", 784906324u, 0, 20, NULL);
-be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL);
-be_define_const_str(abs, "abs", 709362235u, 0, 3, NULL);
-be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_lv_draw_mask_angle_param_t);
-be_define_const_str(lv_draw_mask_angle_param_t, "lv_draw_mask_angle_param_t", 709438642u, 0, 26, NULL);
-be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_IRSEND);
-be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, &be_const_str_TM1638CLK);
-be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, &be_const_str_lv_btn);
-be_define_const_str(lv_btn, "lv_btn", 1612829968u, 0, 6, NULL);
-be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_save);
-be_define_const_str(save, "save", 3439296072u, 0, 4, NULL);
-be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, &be_const_str_gen_cb);
-be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_lv_draw_line_dsc_t);
-be_define_const_str(lv_draw_line_dsc_t, "lv_draw_line_dsc_t", 3914614175u, 0, 18, &be_const_str_lv_objmask);
-be_define_const_str(lv_objmask, "lv_objmask", 1311221665u, 0, 10, NULL);
-be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL);
-be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, NULL);
-be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, &be_const_str_OUTPUT_HI);
-be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_lv_draw_img_dsc_t);
-be_define_const_str(lv_draw_img_dsc_t, "lv_draw_img_dsc_t", 2114977152u, 0, 17, &be_const_str_lv_textarea);
-be_define_const_str(lv_textarea, "lv_textarea", 2864635074u, 0, 11, NULL);
-be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, &be_const_str_lv_keyboard);
-be_define_const_str(lv_keyboard, "lv_keyboard", 197530229u, 0, 11, NULL);
-be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, &be_const_str_SYMBOL_AUDIO);
-be_define_const_str(SYMBOL_AUDIO, "SYMBOL_AUDIO", 3056537956u, 0, 12, &be_const_str_write_bit);
-be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL);
-be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, NULL);
-be_define_const_str(dot_def, ".def", 4095748648u, 0, 4, &be_const_str_ADC_LIGHT);
-be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_WEBCAM_SIOD);
-be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, &be_const_str_button_pressed);
-be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_deinit);
-be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_lv_cont);
-be_define_const_str(lv_cont, "lv_cont", 1391686552u, 0, 7, NULL);
-be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, &be_const_str_TM1637CLK);
-be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, &be_const_str___iterator__);
-be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str__write);
-be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_lv_color);
-be_define_const_str(lv_color, "lv_color", 1419148319u, 0, 8, NULL);
-be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str_else);
-be_define_const_str(else, "else", 3183434736u, 52, 4, NULL);
-be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_A4988_STP);
-be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, &be_const_str_ELECTRIQ_MOODL_TX);
-be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, &be_const_str_REL1_INV);
-be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, &be_const_str_SYMBOL_COPY);
-be_define_const_str(SYMBOL_COPY, "SYMBOL_COPY", 4193681815u, 0, 11, &be_const_str_lv_linemeter);
-be_define_const_str(lv_linemeter, "lv_linemeter", 1413069363u, 0, 12, NULL);
-be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_isinstance);
-be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, NULL);
-be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str_LEDLNK);
-be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, &be_const_str_SDS0X1_RX);
-be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str_WEBCAM_PCLK);
-be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, NULL);
-be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL);
-be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, NULL);
-be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, &be_const_str_calldepth);
-be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_every_100ms);
-be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, NULL);
-be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_start);
-be_define_const_str(start, "start", 1697318111u, 0, 5, NULL);
-be_define_const_str(_get_cb, "_get_cb", 1448849122u, 0, 7, &be_const_str_size);
-be_define_const_str(size, "size", 597743964u, 0, 4, &be_const_str_var);
-be_define_const_str(var, "var", 2317739966u, 64, 3, NULL);
-be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, &be_const_str_get_option);
-be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_get_tasmota);
-be_define_const_str(get_tasmota, "get_tasmota", 334356779u, 0, 11, NULL);
-be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, &be_const_str_SYMBOL_MUTE);
-be_define_const_str(SYMBOL_MUTE, "SYMBOL_MUTE", 563116043u, 0, 11, NULL);
-be_define_const_str(number, "number", 467038368u, 0, 6, NULL);
-be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, NULL);
-be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, &be_const_str_SOLAXX1_TX);
-be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_false);
-be_define_const_str(false, "false", 184981848u, 62, 5, NULL);
-be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_SSD1331_DC);
-be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, NULL);
-be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, &be_const_str__timers);
-be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, NULL);
-be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_ARIRFSEL);
-be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str_MGC3130_XFER);
-be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, NULL);
-be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_lv_roller);
-be_define_const_str(lv_roller, "lv_roller", 661902064u, 0, 9, NULL);
-be_define_const_str(bus, "bus", 1607822841u, 0, 3, NULL);
-be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_load_freetype_font);
-be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_tan);
-be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL);
-be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL);
-be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, NULL);
-be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, NULL);
-be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, &be_const_str_cosh);
-be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, NULL);
-be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_SDM630_RX);
-be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, &be_const_str_init);
-be_define_const_str(init, "init", 380752755u, 0, 4, NULL);
-be_define_const_str(opt_add, "+", 772578730u, 0, 1, NULL);
-be_define_const_str(SYMBOL_KEYBOARD, "SYMBOL_KEYBOARD", 1621492879u, 0, 15, &be_const_str_SYMBOL_POWER);
-be_define_const_str(SYMBOL_POWER, "SYMBOL_POWER", 1125993627u, 0, 12, &be_const_str_resp_cmnd_done);
-be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL);
-be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL);
-be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_lv_indev);
-be_define_const_str(lv_indev, "lv_indev", 225602374u, 0, 8, NULL);
-be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, &be_const_str_iter);
-be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_lv_draw_mask_angle_param_cfg_t);
-be_define_const_str(lv_draw_mask_angle_param_cfg_t, "lv_draw_mask_angle_param_cfg_t", 1346928979u, 0, 30, &be_const_str_seg7_font);
-be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL);
-be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, &be_const_str_bytes);
-be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_for);
-be_define_const_str(for, "for", 2901640080u, 54, 3, NULL);
-be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, NULL);
-be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, &be_const_str_SYMBOL_BATTERY_EMPTY);
-be_define_const_str(SYMBOL_BATTERY_EMPTY, "SYMBOL_BATTERY_EMPTY", 3945064277u, 0, 20, &be_const_str_TASMOTACLIENT_RST);
-be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, &be_const_str_floor);
-be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL);
-be_define_const_str(Driver, "Driver", 3576386303u, 0, 6, &be_const_str_lv_cpicker);
-be_define_const_str(lv_cpicker, "lv_cpicker", 1935129251u, 0, 10, NULL);
-be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, &be_const_str_PN532_RXD);
-be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_SYMBOL_USB);
-be_define_const_str(SYMBOL_USB, "SYMBOL_USB", 1962656552u, 0, 10, &be_const_str_update);
-be_define_const_str(update, "update", 672109684u, 0, 6, &be_const_str_web_add_management_button);
-be_define_const_str(web_add_management_button, "web_add_management_button", 2738877186u, 0, 25, NULL);
-be_define_const_str(lv_dropdown, "lv_dropdown", 2797165301u, 0, 11, NULL);
-be_define_const_str(SYMBOL_PAUSE, "SYMBOL_PAUSE", 641998172u, 0, 12, &be_const_str_lv_table);
-be_define_const_str(lv_table, "lv_table", 1675691020u, 0, 8, NULL);
-be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, NULL);
-be_define_const_str(SYMBOL_CHARGE, "SYMBOL_CHARGE", 2106391946u, 0, 13, NULL);
-be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, NULL);
-be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, &be_const_str_SYMBOL_REFRESH);
-be_define_const_str(SYMBOL_REFRESH, "SYMBOL_REFRESH", 1266229761u, 0, 14, &be_const_str_SYMBOL_VIDEO);
-be_define_const_str(SYMBOL_VIDEO, "SYMBOL_VIDEO", 789726913u, 0, 12, NULL);
-be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, &be_const_str_KEY1_INV_NP);
-be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, &be_const_str_NEOPOOL_TX);
-be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, &be_const_str_lv_tabview);
-be_define_const_str(lv_tabview, "lv_tabview", 2109024786u, 0, 10, NULL);
-be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_real);
-be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_elif);
-be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL);
-be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str_load_font);
-be_define_const_str(load_font, "load_font", 1875840019u, 0, 9, NULL);
-be_define_const_str(DI, "DI", 1070498734u, 0, 2, &be_const_str_wire);
-be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL);
-be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, &be_const_str_assert);
-be_define_const_str(assert, "assert", 2774883451u, 0, 6, NULL);
-be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, &be_const_str_SYMBOL_BULLET);
-be_define_const_str(SYMBOL_BULLET, "SYMBOL_BULLET", 587181862u, 0, 13, NULL);
-be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_lv_point_t);
-be_define_const_str(lv_point_t, "lv_point_t", 2932758181u, 0, 10, NULL);
-be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, &be_const_str_I2C_Driver);
-be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_PMS5003_RX);
-be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, &be_const_str_XPT2046_CS);
-be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, &be_const_str_yield);
-be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL);
-be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, &be_const_str__cb);
-be_define_const_str(_cb, "_cb", 4043300367u, 0, 3, NULL);
-be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, &be_const_str_time_reached);
-be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL);
-be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_scale_uint);
-be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL);
-be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_content_flush);
+be_define_const_str(SYMBOL_SETTINGS, "SYMBOL_SETTINGS", 339656335u, 0, 15, &be_const_str_call);
+be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_lv_draw_mask_angle_param);
+be_define_const_str(lv_draw_mask_angle_param, "lv_draw_mask_angle_param", 4192166041u, 0, 24, NULL);
+be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL);
+be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_atan);
+be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_content_flush);
be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, NULL);
-be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, &be_const_str_SOLAXX1_RX);
-be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, &be_const_str_SYMBOL_TRASH);
-be_define_const_str(SYMBOL_TRASH, "SYMBOL_TRASH", 3169100368u, 0, 12, &be_const_str__begin_transmission);
-be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, NULL);
-be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, &be_const_str_SYMBOL_NEXT);
-be_define_const_str(SYMBOL_NEXT, "SYMBOL_NEXT", 1102844455u, 0, 11, &be_const_str_atan);
-be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_collect);
-be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_lv_bar);
-be_define_const_str(lv_bar, "lv_bar", 1582673229u, 0, 6, NULL);
-be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_chars_in_string);
-be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, NULL);
-be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, &be_const_str_SYMBOL_EYE_OPEN);
-be_define_const_str(SYMBOL_EYE_OPEN, "SYMBOL_EYE_OPEN", 3449311676u, 0, 15, &be_const_str_WEBCAM_HSD);
-be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, &be_const_str_lv_win);
-be_define_const_str(lv_win, "lv_win", 780927558u, 0, 6, NULL);
+be_define_const_str(SYMBOL_BACKSPACE, "SYMBOL_BACKSPACE", 1997168681u, 0, 16, &be_const_str_TM1638STB);
+be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, NULL);
+be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_web_add_management_button);
+be_define_const_str(web_add_management_button, "web_add_management_button", 2738877186u, 0, 25, NULL);
+be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, NULL);
+be_define_const_str(SYMBOL_OK, "SYMBOL_OK", 4033162940u, 0, 9, &be_const_str_Wire);
+be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, NULL);
+be_define_const_str(SYMBOL_BATTERY_3, "SYMBOL_BATTERY_3", 662591301u, 0, 16, &be_const_str_init);
+be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_redirect);
+be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL);
+be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str__get_cb);
+be_define_const_str(_get_cb, "_get_cb", 1448849122u, 0, 7, &be_const_str_finish);
+be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL);
+be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, NULL);
+be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_NEOPOOL_TX);
+be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, &be_const_str_SSD1331_CS);
+be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_TELEINFO_RX);
+be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, NULL);
+be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, NULL);
+be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_pin_mode);
+be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL);
+be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, &be_const_str_SYMBOL_HOME);
+be_define_const_str(SYMBOL_HOME, "SYMBOL_HOME", 730845525u, 0, 11, &be_const_str_TM1637CLK);
+be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, &be_const_str_char);
+be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_resp_cmnd_done);
+be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL);
+be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_ZIGBEE_TX);
+be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, NULL);
+be_define_const_str(lv_dropdown, "lv_dropdown", 2797165301u, 0, 11, NULL);
+be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, &be_const_str_AS3935);
+be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_lv_sqrt_res);
+be_define_const_str(lv_sqrt_res, "lv_sqrt_res", 2904473995u, 0, 11, NULL);
+be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str_cosh);
+be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_web_sensor);
+be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, &be_const_str_continue);
+be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL);
+be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, NULL);
+be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_A4988_ENA);
+be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_lv_point);
+be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, NULL);
+be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_resp_cmnd_str);
+be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL);
+be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL);
+be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_lv_event_cb);
+be_define_const_str(lv_event_cb, "lv_event_cb", 2480731016u, 0, 11, NULL);
+be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, NULL);
+be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL);
+be_define_const_str(lv_objmask, "lv_objmask", 1311221665u, 0, 10, NULL);
+be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, NULL);
+be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, &be_const_str_MAX31855CS);
+be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, &be_const_str_SDM630_TX);
+be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, &be_const_str_every_second);
be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, NULL);
-be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, &be_const_str___lower__);
-be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_find_op);
-be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_finish);
-be_define_const_str(finish, "finish", 1494643858u, 0, 6, &be_const_str_def);
+be_define_const_str(SYMBOL_AUDIO, "SYMBOL_AUDIO", 3056537956u, 0, 12, NULL);
+be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, &be_const_str_def);
be_define_const_str(def, "def", 3310976652u, 55, 3, NULL);
-be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_SYMBOL_SETTINGS);
-be_define_const_str(SYMBOL_SETTINGS, "SYMBOL_SETTINGS", 339656335u, 0, 15, NULL);
-be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str_NEOPOOL_RX);
-be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, NULL);
-be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str_screenshot);
-be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL);
-be_define_const_str(lv_switch, "lv_switch", 3407171508u, 0, 9, NULL);
-be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_lv_spinbox);
+be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, &be_const_str_load_font);
+be_define_const_str(load_font, "load_font", 1875840019u, 0, 9, &be_const_str_real);
+be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_set);
+be_define_const_str(set, "set", 3324446467u, 0, 3, NULL);
+be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str_SSPI_CS);
+be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, NULL);
+be_define_const_str(SYMBOL_TRASH, "SYMBOL_TRASH", 3169100368u, 0, 12, &be_const_str_wire);
+be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL);
+be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, NULL);
+be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_OUTPUT_HI);
+be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_classof);
+be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_web_send_decimal);
+be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL);
+be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_LED1_INV);
+be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, &be_const_str_load);
+be_define_const_str(load, "load", 3859241449u, 0, 4, NULL);
+be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_SPI_CS);
+be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, &be_const_str_WEBCAM_RESET);
+be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, &be_const_str_ceil);
+be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_clear);
+be_define_const_str(clear, "clear", 1550717474u, 0, 5, NULL);
+be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_response_append);
+be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL);
+be_define_const_str(lv_btn, "lv_btn", 1612829968u, 0, 6, &be_const_str_lv_draw_line_dsc);
+be_define_const_str(lv_draw_line_dsc, "lv_draw_line_dsc", 2422805236u, 0, 16, NULL);
+be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL);
+be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, &be_const_str_number);
+be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_write_bit);
+be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL);
+be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, NULL);
+be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, &be_const_str_XPT2046_CS);
+be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, &be_const_str_lv_calendar);
+be_define_const_str(lv_calendar, "lv_calendar", 3284396894u, 0, 11, NULL);
+be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, &be_const_str_arg);
+be_define_const_str(arg, "arg", 1047474471u, 0, 3, NULL);
+be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_rand);
+be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL);
+be_define_const_str(SYMBOL_SHUFFLE, "SYMBOL_SHUFFLE", 1123310147u, 0, 14, NULL);
+be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, &be_const_str_web_add_button);
+be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, &be_const_str_except);
+be_define_const_str(except, "except", 950914032u, 69, 6, NULL);
+be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, NULL);
+be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_RA8876_CS);
+be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, NULL);
+be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str___iterator__);
+be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_lv_draw_mask_map_param_cfg);
+be_define_const_str(lv_draw_mask_map_param_cfg, "lv_draw_mask_map_param_cfg", 3822900597u, 0, 26, &be_const_str_module);
+be_define_const_str(module, "module", 3617558685u, 0, 6, NULL);
+be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, NULL);
+be_define_const_str(get_tasmota, "get_tasmota", 334356779u, 0, 11, &be_const_str_read24);
+be_define_const_str(read24, "read24", 1808533811u, 0, 6, &be_const_str_start);
+be_define_const_str(start, "start", 1697318111u, 0, 5, NULL);
+be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, &be_const_str_SYMBOL_DRIVE);
+be_define_const_str(SYMBOL_DRIVE, "SYMBOL_DRIVE", 567203502u, 0, 12, &be_const_str_SYMBOL_WARNING);
+be_define_const_str(SYMBOL_WARNING, "SYMBOL_WARNING", 4119913686u, 0, 14, &be_const_str_gamma8);
+be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_lv_draw_mask_line_param);
+be_define_const_str(lv_draw_mask_line_param, "lv_draw_mask_line_param", 2692990704u, 0, 23, &be_const_str_memory);
+be_define_const_str(memory, "memory", 2229924270u, 0, 6, NULL);
+be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, &be_const_str_digital_read);
+be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_lv_design_cb);
+be_define_const_str(lv_design_cb, "lv_design_cb", 3822640502u, 0, 12, NULL);
+be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_get_option);
+be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_lv_checkbox);
+be_define_const_str(lv_checkbox, "lv_checkbox", 7454841u, 0, 11, NULL);
+be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, &be_const_str_SYMBOL_BATTERY_2);
+be_define_const_str(SYMBOL_BATTERY_2, "SYMBOL_BATTERY_2", 645813682u, 0, 16, &be_const_str_read32);
+be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL);
+be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL);
+be_define_const_str(SYMBOL_EYE_CLOSE, "SYMBOL_EYE_CLOSE", 404721792u, 0, 16, NULL);
+be_define_const_str(SYMBOL_IMAGE, "SYMBOL_IMAGE", 815601151u, 0, 12, &be_const_str_abs);
+be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_traceback);
+be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL);
+be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, &be_const_str_SM16716_DAT);
+be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, &be_const_str_SYMBOL_PAUSE);
+be_define_const_str(SYMBOL_PAUSE, "SYMBOL_PAUSE", 641998172u, 0, 12, &be_const_str_attrdump);
+be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_lv_draw_mask_fade_param);
+be_define_const_str(lv_draw_mask_fade_param, "lv_draw_mask_fade_param", 2743309964u, 0, 23, NULL);
+be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, NULL);
+be_define_const_str(super, "super", 4152230356u, 0, 5, &be_const_str_if);
+be_define_const_str(if, "if", 959999494u, 50, 2, NULL);
+be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, &be_const_str_keys);
+be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_lv_led);
+be_define_const_str(lv_led, "lv_led", 3192184733u, 0, 6, &be_const_str_time_dump);
+be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL);
+be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_PN532_TXD);
+be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_compile);
+be_define_const_str(compile, "compile", 1000265118u, 0, 7, NULL);
+be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, &be_const_str_lv_gauge_format_cb);
+be_define_const_str(lv_gauge_format_cb, "lv_gauge_format_cb", 4073149249u, 0, 18, NULL);
+be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL);
+be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str_TASMOTACLIENT_RST);
+be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, &be_const_str_tolower);
+be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, &be_const_str_type);
+be_define_const_str(type, "type", 1361572173u, 0, 4, NULL);
+be_define_const_str(lv_cont, "lv_cont", 1391686552u, 0, 7, NULL);
+be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, &be_const_str_lv_list);
+be_define_const_str(lv_list, "lv_list", 2876551248u, 0, 7, NULL);
+be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str__available);
+be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_display);
+be_define_const_str(display, "display", 1164572437u, 0, 7, &be_const_str_sin);
+be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL);
+be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, &be_const_str_WEBCAM_SIOD);
+be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, &be_const_str_publish);
+be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL);
+be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_map);
+be_define_const_str(map, "map", 3751997361u, 0, 3, NULL);
+be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_SSD1351_CS);
+be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, &be_const_str_SYMBOL_PLAY);
+be_define_const_str(SYMBOL_PLAY, "SYMBOL_PLAY", 1750902100u, 0, 11, NULL);
+be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, &be_const_str_SYMBOL_SAVE);
+be_define_const_str(SYMBOL_SAVE, "SYMBOL_SAVE", 2439821015u, 0, 11, &be_const_str_lv_draw_mask_radius_param_cfg);
+be_define_const_str(lv_draw_mask_radius_param_cfg, "lv_draw_mask_radius_param_cfg", 3889386773u, 0, 29, NULL);
+be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL);
+be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, NULL);
+be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, &be_const_str_SYMBOL_USB);
+be_define_const_str(SYMBOL_USB, "SYMBOL_USB", 1962656552u, 0, 10, &be_const_str_int);
+be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_time_str);
+be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL);
+be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_VL53L0X_XSHUT1);
+be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, &be_const_str_set_power);
+be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL);
+be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, NULL);
+be_define_const_str(get, "get", 1410115415u, 0, 3, NULL);
+be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, &be_const_str_print);
+be_define_const_str(print, "print", 372738696u, 0, 5, NULL);
+be_define_const_str(format, "format", 3114108242u, 0, 6, NULL);
+be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_lv_img);
+be_define_const_str(lv_img, "lv_img", 2474052327u, 0, 6, NULL);
+be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_allocated);
+be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_while);
+be_define_const_str(while, "while", 231090382u, 53, 5, NULL);
+be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_lv_spinner);
+be_define_const_str(lv_spinner, "lv_spinner", 3361501901u, 0, 10, &be_const_str_pow);
+be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL);
+be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_SYMBOL_KEYBOARD);
+be_define_const_str(SYMBOL_KEYBOARD, "SYMBOL_KEYBOARD", 1621492879u, 0, 15, &be_const_str_lv_slider);
+be_define_const_str(lv_slider, "lv_slider", 2274180781u, 0, 9, &be_const_str_read13);
+be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL);
+be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, &be_const_str_PWM1);
+be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, &be_const_str_SWT1);
+be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, NULL);
+be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, NULL);
+be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, &be_const_str_TM1638DIO);
+be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, &be_const_str__cmd);
+be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_asin);
+be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_read12);
+be_define_const_str(read12, "read12", 4291076970u, 0, 6, &be_const_str_state);
+be_define_const_str(state, "state", 2016490230u, 0, 5, NULL);
+be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, NULL);
+be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, NULL);
+be_define_const_str(SYMBOL_DIRECTORY, "SYMBOL_DIRECTORY", 1886053449u, 0, 16, &be_const_str_SYMBOL_PASTE);
+be_define_const_str(SYMBOL_PASTE, "SYMBOL_PASTE", 2281577421u, 0, 12, &be_const_str_resolvecmnd);
+be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL);
+be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, NULL);
+be_define_const_str(SYMBOL_BATTERY_FULL, "SYMBOL_BATTERY_FULL", 2638935545u, 0, 19, NULL);
+be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL);
+be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, NULL);
+be_define_const_str(SYMBOL_EYE_OPEN, "SYMBOL_EYE_OPEN", 3449311676u, 0, 15, &be_const_str__buffer);
+be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, NULL);
+be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, &be_const_str_HJL_CF);
+be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, &be_const_str_lv_draw_mask_fade_param_cfg);
+be_define_const_str(lv_draw_mask_fade_param_cfg, "lv_draw_mask_fade_param_cfg", 4158595197u, 0, 27, NULL);
+be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, NULL);
+be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, &be_const_str_sqrt);
+be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL);
+be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str_SYMBOL_DOWN);
+be_define_const_str(SYMBOL_DOWN, "SYMBOL_DOWN", 1107513570u, 0, 11, &be_const_str_save_before_restart);
+be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, &be_const_str_write8);
+be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL);
+be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL);
+be_define_const_str(write, "write", 3190202204u, 0, 5, NULL);
+be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, NULL);
+be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, &be_const_str_SYMBOL_BATTERY_1);
+be_define_const_str(SYMBOL_BATTERY_1, "SYMBOL_BATTERY_1", 629036063u, 0, 16, &be_const_str_WE517_RX);
+be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, &be_const_str_digital_write);
+be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_lv_spinbox);
be_define_const_str(lv_spinbox, "lv_spinbox", 2666096729u, 0, 10, NULL);
-be_define_const_str(continue, "continue", 2977070660u, 59, 8, &be_const_str_import);
-be_define_const_str(import, "import", 288002260u, 66, 6, NULL);
-be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_SYMBOL_BATTERY_1);
-be_define_const_str(SYMBOL_BATTERY_1, "SYMBOL_BATTERY_1", 629036063u, 0, 16, &be_const_str_content_stop);
-be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, NULL);
-be_define_const_str(DSB, "DSB", 98073254u, 0, 3, &be_const_str_web_add_handler);
+be_define_const_str(lv_switch, "lv_switch", 3407171508u, 0, 9, &be_const_str_pin);
+be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_pin_used);
+be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL);
+be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, &be_const_str_SI7021);
+be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, &be_const_str_WE517_TX);
+be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, &be_const_str_lv_obj);
+be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL);
+be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, NULL);
+be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_arg_size);
+be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, &be_const_str_millis);
+be_define_const_str(millis, "millis", 1214679063u, 0, 6, &be_const_str_remove);
+be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL);
+be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_wire2);
+be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL);
+be_define_const_str(SYMBOL_FILE, "SYMBOL_FILE", 237085260u, 0, 11, &be_const_str_lv_canvas);
+be_define_const_str(lv_canvas, "lv_canvas", 142865412u, 0, 9, NULL);
+be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, &be_const_str_WEBCAM_DATA);
+be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, NULL);
+be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, &be_const_str_NEOPOOL_RX);
+be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, &be_const_str_OUTPUT);
+be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str_lv_msgbox);
+be_define_const_str(lv_msgbox, "lv_msgbox", 689085206u, 0, 9, NULL);
+be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_lv_table);
+be_define_const_str(lv_table, "lv_table", 1675691020u, 0, 8, NULL);
+be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, NULL);
+be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str_P9813_DAT);
+be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, &be_const_str_WEBCAM_PWDN);
+be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, &be_const_str_count);
+be_define_const_str(count, "count", 967958004u, 0, 5, NULL);
+be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, &be_const_str_read8);
+be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL);
+be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_PZEM004_RX);
+be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str__begin_transmission);
+be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_web_add_console_button);
+be_define_const_str(web_add_console_button, "web_add_console_button", 3481436192u, 0, 22, &be_const_str_web_add_handler);
be_define_const_str(web_add_handler, "web_add_handler", 3990174962u, 0, 15, NULL);
-be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, &be_const_str_SDS0X1_TX);
+be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, NULL);
+be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_find);
+be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_break);
+be_define_const_str(break, "break", 3378807160u, 58, 5, NULL);
+be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, NULL);
+be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_MCP39F5_RX);
+be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, &be_const_str_ROT1B);
+be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, NULL);
+be_define_const_str(opt_call, "()", 685372826u, 0, 2, &be_const_str_SOLAXX1_TX);
+be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, NULL);
+be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str_WEBCAM_VSYNC);
+be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, &be_const_str_tan);
+be_define_const_str(tan, "tan", 2633446552u, 0, 3, &be_const_str_web_send);
+be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL);
+be_define_const_str(LED1, "LED1", 21005825u, 0, 4, NULL);
+be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_chars_in_string);
+be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_else);
+be_define_const_str(else, "else", 3183434736u, 52, 4, &be_const_str_nil);
+be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL);
+be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, NULL);
+be_define_const_str(SYMBOL_GPS, "SYMBOL_GPS", 3044165570u, 0, 10, &be_const_str_lv_draw_mask_map_param);
+be_define_const_str(lv_draw_mask_map_param, "lv_draw_mask_map_param", 1666886804u, 0, 22, NULL);
+be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, &be_const_str_log);
+be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_read_bytes);
+be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL);
+be_define_const_str(dot_def, ".def", 4095748648u, 0, 4, &be_const_str_SYMBOL_CALL);
+be_define_const_str(SYMBOL_CALL, "SYMBOL_CALL", 1444504366u, 0, 11, NULL);
+be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, &be_const_str_NRG_CF1);
+be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_SYMBOL_MUTE);
+be_define_const_str(SYMBOL_MUTE, "SYMBOL_MUTE", 563116043u, 0, 11, NULL);
+be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, NULL);
+be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, NULL);
+be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, &be_const_str_lv_chart);
+be_define_const_str(lv_chart, "lv_chart", 2652494144u, 0, 8, &be_const_str_name);
+be_define_const_str(name, "name", 2369371622u, 0, 4, NULL);
+be_define_const_str(event, "event", 4264611999u, 0, 5, NULL);
+be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, &be_const_str_FALLING);
+be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, &be_const_str_remove_cmd);
+be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL);
+be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, &be_const_str_DYP_RX);
+be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, &be_const_str_LEDLNK);
+be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, NULL);
+be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, &be_const_str_lv_textarea);
+be_define_const_str(lv_textarea, "lv_textarea", 2864635074u, 0, 11, NULL);
+be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_SSD1351_DC);
+be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, &be_const_str_SYMBOL_COPY);
+be_define_const_str(SYMBOL_COPY, "SYMBOL_COPY", 4193681815u, 0, 11, &be_const_str_SYMBOL_UP);
+be_define_const_str(SYMBOL_UP, "SYMBOL_UP", 3886401511u, 0, 9, NULL);
+be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, &be_const_str_json_append);
+be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, NULL);
+be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, NULL);
+be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, NULL);
+be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_reverse_gamma10);
+be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL);
+be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, &be_const_str_TASMOTACLIENT_RST_INV);
+be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, &be_const_str_add_rule);
+be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_resize);
+be_define_const_str(resize, "resize", 3514612129u, 0, 6, &be_const_str_resp_cmnd_error);
+be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL);
+be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, &be_const_str_TASMOTACLIENT_TXD);
+be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, NULL);
+be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_RC522_RST);
+be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, &be_const_str_SYMBOL_LEFT);
+be_define_const_str(SYMBOL_LEFT, "SYMBOL_LEFT", 1563517575u, 0, 11, NULL);
+be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL);
+be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str_MHZ_TXD);
+be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_SAIR_TX);
+be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, &be_const_str_sinh);
+be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL);
+be_define_const_str(lv_group_focus_cb, "lv_group_focus_cb", 4288873836u, 0, 17, NULL);
+be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, &be_const_str_assert);
+be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_reverse);
+be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL);
+be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, NULL);
+be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, &be_const_str_lv_draw_mask_saved);
+be_define_const_str(lv_draw_mask_saved, "lv_draw_mask_saved", 2063709159u, 0, 18, &be_const_str_read);
+be_define_const_str(read, "read", 3470762949u, 0, 4, NULL);
+be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, &be_const_str_ROT1B_NP);
+be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, NULL);
+be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, &be_const_str___upper__);
+be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL);
+be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL);
+be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, &be_const_str__write);
+be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_lv_draw_mask_line_param_cfg);
+be_define_const_str(lv_draw_mask_line_param_cfg, "lv_draw_mask_line_param_cfg", 2154874825u, 0, 27, &be_const_str_setmember);
+be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL);
+be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_addr);
+be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_find_key_i);
+be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL);
+be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str_P9813_CLK);
+be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, &be_const_str_lv_area);
+be_define_const_str(lv_area, "lv_area", 2521150401u, 0, 7, &be_const_str_split);
+be_define_const_str(split, "split", 2276994531u, 0, 5, NULL);
+be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, &be_const_str_SM2135_CLK);
+be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_ZEROCROSS);
+be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, &be_const_str_i2c_enabled);
+be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, &be_const_str_lv_color);
+be_define_const_str(lv_color, "lv_color", 1419148319u, 0, 8, &be_const_str_wire1);
+be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL);
+be_define_const_str(lv_draw_rect_dsc, "lv_draw_rect_dsc", 3246772488u, 0, 16, &be_const_str_seti);
+be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL);
+be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, NULL);
+be_define_const_str(var, "var", 2317739966u, 64, 3, NULL);
+be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, &be_const_str__ccmd);
+be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, NULL);
+be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_TM1638CLK);
+be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, NULL);
+be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_lv_keyboard);
+be_define_const_str(lv_keyboard, "lv_keyboard", 197530229u, 0, 11, &be_const_str_elif);
+be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL);
+be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str_LE01MR_TX);
+be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, &be_const_str_lv_tileview);
+be_define_const_str(lv_tileview, "lv_tileview", 2419887973u, 0, 11, &be_const_str_class);
+be_define_const_str(class, "class", 2872970239u, 57, 5, NULL);
+be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, NULL);
+be_define_const_str(lv_roller, "lv_roller", 661902064u, 0, 9, NULL);
+be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, NULL);
+be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_lv_draw_mask_angle_param_cfg);
+be_define_const_str(lv_draw_mask_angle_param_cfg, "lv_draw_mask_angle_param_cfg", 3599767368u, 0, 28, &be_const_str_save);
+be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_size);
+be_define_const_str(size, "size", 597743964u, 0, 4, NULL);
+be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, NULL);
+be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_on);
+be_define_const_str(on, "on", 1630810064u, 0, 2, NULL);
+be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, &be_const_str_WIEGAND_D0);
+be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, NULL);
+be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_lv_indev);
+be_define_const_str(lv_indev, "lv_indev", 225602374u, 0, 8, NULL);
+be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_TFMINIPLUS_RX);
+be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, NULL);
+be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, NULL);
+be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_arg_name);
+be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_screenshot);
+be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, &be_const_str_setbits);
+be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL);
+be_define_const_str(SYMBOL_LOOP, "SYMBOL_LOOP", 2762053208u, 0, 11, NULL);
+be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str_get_power);
+be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, &be_const_str_lv_font);
+be_define_const_str(lv_font, "lv_font", 1550958453u, 0, 7, NULL);
+be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, &be_const_str_BS814_CLK);
+be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, NULL);
+be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, &be_const_str_TM1637DIO);
+be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, &be_const_str_lv_btnmatrix);
+be_define_const_str(lv_btnmatrix, "lv_btnmatrix", 626248489u, 0, 12, NULL);
+be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, NULL);
+be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_classname);
+be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_str);
+be_define_const_str(str, "str", 3259748752u, 0, 3, NULL);
+be_define_const_str(SYMBOL_PREV, "SYMBOL_PREV", 2952615023u, 0, 11, &be_const_str_add_driver);
+be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_content_button);
+be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, NULL);
+be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, NULL);
+be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_content_stop);
+be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, NULL);
+be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, &be_const_str_HX711_SCK);
+be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, &be_const_str_RDM6300_RX);
+be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, NULL);
+be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, NULL);
+be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_ZIGBEE_RX);
+be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, &be_const_str_imax);
+be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_montserrat_font);
+be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, NULL);
+be_define_const_str(srand, "srand", 465518633u, 0, 5, &be_const_str_time_reached);
+be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, &be_const_str_try_rule);
+be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL);
+be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, &be_const_str_SDM120_TX);
+be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, &be_const_str_SYMBOL_BELL);
+be_define_const_str(SYMBOL_BELL, "SYMBOL_BELL", 1736196487u, 0, 11, &be_const_str_tostring);
+be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL);
+be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, &be_const_str_HRXL_RX);
+be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, &be_const_str_button_pressed);
+be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_lv_arc);
+be_define_const_str(lv_arc, "lv_arc", 4170125384u, 0, 6, NULL);
+be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_SYMBOL_POWER);
+be_define_const_str(SYMBOL_POWER, "SYMBOL_POWER", 1125993627u, 0, 12, &be_const_str_list);
+be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_lv_bar);
+be_define_const_str(lv_bar, "lv_bar", 1582673229u, 0, 6, &be_const_str_lv_linemeter);
+be_define_const_str(lv_linemeter, "lv_linemeter", 1413069363u, 0, 12, &be_const_str_lv_page);
+be_define_const_str(lv_page, "lv_page", 2373170067u, 0, 7, &be_const_str_upper);
+be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL);
+be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL);
+be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, &be_const_str_gamma10);
+be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL);
+be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, &be_const_str_exec_rules);
+be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, NULL);
+be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_content_send_style);
+be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, NULL);
+be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL);
+be_define_const_str(SYMBOL_REFRESH, "SYMBOL_REFRESH", 1266229761u, 0, 14, NULL);
+be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_WS2812);
+be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, NULL);
+be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, &be_const_str_lv_line);
+be_define_const_str(lv_line, "lv_line", 2692732914u, 0, 7, NULL);
+be_define_const_str(SYMBOL_VOLUME_MAX, "SYMBOL_VOLUME_MAX", 3582646093u, 0, 17, NULL);
+be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_RF_SENSOR);
+be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, NULL);
+be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_lv_imgbtn);
+be_define_const_str(lv_imgbtn, "lv_imgbtn", 2402844429u, 0, 9, NULL);
+be_define_const_str(try, "try", 2887626766u, 68, 3, NULL);
+be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, &be_const_str_cb_dispatch);
+be_define_const_str(cb_dispatch, "cb_dispatch", 1741510499u, 0, 11, NULL);
+be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str_DHT11_OUT);
+be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, &be_const_str_SYMBOL_RIGHT);
+be_define_const_str(SYMBOL_RIGHT, "SYMBOL_RIGHT", 2984010648u, 0, 12, NULL);
+be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, &be_const_str_gen_cb);
+be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_open);
+be_define_const_str(open, "open", 3546203337u, 0, 4, NULL);
+be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, &be_const_str_lv_cpicker);
+be_define_const_str(lv_cpicker, "lv_cpicker", 1935129251u, 0, 10, NULL);
+be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_toupper);
+be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL);
+be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str_content_send);
+be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_lv_group);
+be_define_const_str(lv_group, "lv_group", 3852039019u, 0, 8, NULL);
+be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, &be_const_str_SYMBOL_CHARGE);
+be_define_const_str(SYMBOL_CHARGE, "SYMBOL_CHARGE", 2106391946u, 0, 13, &be_const_str_get_light);
+be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_load_freetype_font);
+be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, &be_const_str_setitem);
+be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL);
+be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_SDM72_TX);
+be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_SYMBOL_VOLUME_MID);
+be_define_const_str(SYMBOL_VOLUME_MID, "SYMBOL_VOLUME_MID", 158835057u, 0, 17, &be_const_str_TELEINFO_ENABLE);
+be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, &be_const_str_collect);
+be_define_const_str(collect, "collect", 2399039025u, 0, 7, NULL);
+be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_add);
+be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_isinstance);
+be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_rtc);
+be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL);
+be_define_const_str(lv_draw_img_dsc, "lv_draw_img_dsc", 999847907u, 0, 15, NULL);
+be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_add_cmd);
+be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_erase);
+be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_as);
+be_define_const_str(as, "as", 1579491469u, 67, 2, NULL);
+be_define_const_str(DSB, "DSB", 98073254u, 0, 3, &be_const_str_KEY1_INV_NP);
+be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, &be_const_str___lower__);
+be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_set_light);
+be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL);
+be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_KEY1_NP);
+be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, &be_const_str_WIEGAND_D1);
+be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str_find_op);
+be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL);
+be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, &be_const_str_content_start);
+be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, NULL);
+be_define_const_str(SYMBOL_STOP, "SYMBOL_STOP", 2836505202u, 0, 11, &be_const_str_lv_win);
+be_define_const_str(lv_win, "lv_win", 780927558u, 0, 6, &be_const_str_false);
+be_define_const_str(false, "false", 184981848u, 62, 5, NULL);
+be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, &be_const_str_SYMBOL_NEXT);
+be_define_const_str(SYMBOL_NEXT, "SYMBOL_NEXT", 1102844455u, 0, 11, &be_const_str_WEBCAM_XCLK);
+be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, NULL);
+be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, &be_const_str_scale_uint);
+be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, &be_const_str_do);
+be_define_const_str(do, "do", 1646057492u, 65, 2, NULL);
+be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, &be_const_str_SSPI_DC);
+be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, &be_const_str_import);
+be_define_const_str(import, "import", 288002260u, 66, 6, NULL);
+be_define_const_str(push, "push", 2272264157u, 0, 4, NULL);
+be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_lv_tabview);
+be_define_const_str(lv_tabview, "lv_tabview", 2109024786u, 0, 10, NULL);
+be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL);
+be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, &be_const_str_ILI9341_DC);
+be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, &be_const_str_yield);
+be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL);
+be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, NULL);
+be_define_const_str(DI, "DI", 1070498734u, 0, 2, &be_const_str_SYMBOL_BLUETOOTH);
+be_define_const_str(SYMBOL_BLUETOOTH, "SYMBOL_BLUETOOTH", 679376572u, 0, 16, &be_const_str_lv_draw_label_dsc);
+be_define_const_str(lv_draw_label_dsc, "lv_draw_label_dsc", 265601842u, 0, 17, &be_const_str_update);
+be_define_const_str(update, "update", 672109684u, 0, 6, NULL);
+be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str_SYMBOL_NEW_LINE);
+be_define_const_str(SYMBOL_NEW_LINE, "SYMBOL_NEW_LINE", 2014334315u, 0, 15, &be_const_str_ZIGBEE_RST);
+be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, NULL);
+be_define_const_str(SYMBOL_SD_CARD, "SYMBOL_SD_CARD", 2542376484u, 0, 14, NULL);
+be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, &be_const_str_MGC3130_XFER);
+be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, &be_const_str__drivers);
+be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, NULL);
+be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_detect);
+be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL);
+be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, &be_const_str_TUYA_TX);
+be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, &be_const_str__cb);
+be_define_const_str(_cb, "_cb", 4043300367u, 0, 3, NULL);
+be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, &be_const_str_RXD);
+be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, NULL);
+be_define_const_str(imin, "imin", 2714127864u, 0, 4, NULL);
+be_define_const_str(SYMBOL_VIDEO, "SYMBOL_VIDEO", 789726913u, 0, 12, NULL);
+be_define_const_str(SYMBOL_LIST, "SYMBOL_LIST", 70793990u, 0, 11, &be_const_str_calldepth);
+be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, NULL);
+be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, &be_const_str_DSB_OUT);
+be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, NULL);
+be_define_const_str(end, "end", 1787721130u, 56, 3, NULL);
+be_define_const_str(SYMBOL_BATTERY_EMPTY, "SYMBOL_BATTERY_EMPTY", 3945064277u, 0, 20, &be_const_str_lv_gauge);
+be_define_const_str(lv_gauge, "lv_gauge", 118613531u, 0, 8, NULL);
+be_define_const_str(for, "for", 2901640080u, 54, 3, NULL);
+be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, &be_const_str_member);
+be_define_const_str(member, "member", 719708611u, 0, 6, NULL);
+be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, &be_const_str_lv_draw_mask_radius_param);
+be_define_const_str(lv_draw_mask_radius_param, "lv_draw_mask_radius_param", 3777679220u, 0, 25, &be_const_str_range);
+be_define_const_str(range, "range", 4208725202u, 0, 5, NULL);
+be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL);
+be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, &be_const_str_bytes);
+be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_lv_signal_cb);
+be_define_const_str(lv_signal_cb, "lv_signal_cb", 3295792564u, 0, 12, NULL);
+be_define_const_str(Driver, "Driver", 3576386303u, 0, 6, NULL);
+be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_SYMBOL_DUMMY);
+be_define_const_str(SYMBOL_DUMMY, "SYMBOL_DUMMY", 3621732138u, 0, 12, &be_const_str_WEBCAM_HSD);
+be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, NULL);
+be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_SYMBOL_WIFI);
+be_define_const_str(SYMBOL_WIFI, "SYMBOL_WIFI", 682141303u, 0, 11, NULL);
+be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, NULL);
+be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, &be_const_str_SM16716_CLK);
+be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, &be_const_str_SYMBOL_EJECT);
+be_define_const_str(SYMBOL_EJECT, "SYMBOL_EJECT", 873760647u, 0, 12, NULL);
+be_define_const_str(item, "item", 2671260646u, 0, 4, NULL);
be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, &be_const_str_deg);
be_define_const_str(deg, "deg", 3327754271u, 0, 3, NULL);
-be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_scan);
-be_define_const_str(scan, "scan", 3974641896u, 0, 4, NULL);
-be_define_const_str(set, "set", 3324446467u, 0, 3, NULL);
-be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, &be_const_str_SHELLY_DIMMER_RST_INV);
-be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, &be_const_str_remove);
-be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_true);
+be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, &be_const_str_SYMBOL_DOWNLOAD);
+be_define_const_str(SYMBOL_DOWNLOAD, "SYMBOL_DOWNLOAD", 2607324090u, 0, 15, &be_const_str_SYMBOL_EDIT);
+be_define_const_str(SYMBOL_EDIT, "SYMBOL_EDIT", 1396182822u, 0, 11, &be_const_str_geti);
+be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_lv_label);
+be_define_const_str(lv_label, "lv_label", 4199664246u, 0, 8, NULL);
+be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, NULL);
+be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_register_button_encoder);
+be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL);
+be_define_const_str(web_add_config_button, "web_add_config_button", 639674325u, 0, 21, &be_const_str_true);
be_define_const_str(true, "true", 1303515621u, 61, 4, NULL);
-be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, NULL);
-be_define_const_str(SYMBOL_VOLUME_MID, "SYMBOL_VOLUME_MID", 158835057u, 0, 17, NULL);
-be_define_const_str(SYMBOL_BATTERY_2, "SYMBOL_BATTERY_2", 645813682u, 0, 16, NULL);
-be_define_const_str(lv_checkbox, "lv_checkbox", 7454841u, 0, 11, &be_const_str_web_add_config_button);
-be_define_const_str(web_add_config_button, "web_add_config_button", 639674325u, 0, 21, NULL);
-be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_PULLDOWN);
-be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, NULL);
-be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, &be_const_str_setbits);
-be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL);
-be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str_WINDMETER_SPEED);
-be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, &be_const_str_top);
-be_define_const_str(top, "top", 2802900028u, 0, 3, NULL);
-be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_issubclass);
-be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL);
-be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, &be_const_str_MIEL_HVAC_TX);
-be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, &be_const_str_SYMBOL_EDIT);
-be_define_const_str(SYMBOL_EDIT, "SYMBOL_EDIT", 1396182822u, 0, 11, &be_const_str_item);
-be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_setitem);
-be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, &be_const_str_setrange);
-be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL);
-be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, &be_const_str_SYMBOL_BATTERY_3);
-be_define_const_str(SYMBOL_BATTERY_3, "SYMBOL_BATTERY_3", 662591301u, 0, 16, &be_const_str_byte);
-be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL);
-be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_ST7789_CS);
-be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, &be_const_str_montserrat_font);
-be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, NULL);
-be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, &be_const_str_SYMBOL_PREV);
-be_define_const_str(SYMBOL_PREV, "SYMBOL_PREV", 2952615023u, 0, 11, &be_const_str_lv_slider);
-be_define_const_str(lv_slider, "lv_slider", 2274180781u, 0, 9, &be_const_str_sin);
-be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL);
-be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, &be_const_str_exp);
-be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_resp_cmnd);
-be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_while);
-be_define_const_str(while, "while", 231090382u, 53, 5, NULL);
-be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, NULL);
-be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, &be_const_str_SENSOR_END);
-be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, NULL);
-be_define_const_str(count, "count", 967958004u, 0, 5, NULL);
-be_define_const_str(SYMBOL_RIGHT, "SYMBOL_RIGHT", 2984010648u, 0, 12, &be_const_str_pi);
-be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_except);
-be_define_const_str(except, "except", 950914032u, 69, 6, NULL);
-be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_lv_draw_rect_dsc_t);
-be_define_const_str(lv_draw_rect_dsc_t, "lv_draw_rect_dsc_t", 1045666835u, 0, 18, NULL);
-be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, &be_const_str_state);
-be_define_const_str(state, "state", 2016490230u, 0, 5, NULL);
-be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_NRG_CF1);
-be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_WE517_TX);
-be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, &be_const_str_upper);
-be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL);
-be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, NULL);
-be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, NULL);
-be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, &be_const_str_set_power);
-be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL);
-be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_classof);
-be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL);
-be_define_const_str(SYMBOL_BELL, "SYMBOL_BELL", 1736196487u, 0, 11, &be_const_str_TCP_RX);
-be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, &be_const_str_split);
-be_define_const_str(split, "split", 2276994531u, 0, 5, NULL);
-be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, &be_const_str_TELEINFO_RX);
-be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, NULL);
-be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, &be_const_str_SYMBOL_UPLOAD);
-be_define_const_str(SYMBOL_UPLOAD, "SYMBOL_UPLOAD", 3293679647u, 0, 13, &be_const_str_lv_spinner);
-be_define_const_str(lv_spinner, "lv_spinner", 3361501901u, 0, 10, NULL);
+be_define_const_str(SYMBOL_BULLET, "SYMBOL_BULLET", 587181862u, 0, 13, &be_const_str_SYMBOL_CLOSE);
+be_define_const_str(SYMBOL_CLOSE, "SYMBOL_CLOSE", 2654402806u, 0, 12, &be_const_str_SYMBOL_CUT);
+be_define_const_str(SYMBOL_CUT, "SYMBOL_CUT", 3455112394u, 0, 10, &be_const_str__request_from);
+be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_lower);
+be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL);
+be_define_const_str(SYMBOL_UPLOAD, "SYMBOL_UPLOAD", 3293679647u, 0, 13, &be_const_str_ctypes_bytes);
+be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, NULL);
+be_define_const_str(lv_draw_mask_common_dsc, "lv_draw_mask_common_dsc", 1429224708u, 0, 23, NULL);
+be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, NULL);
+be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL);
+be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_seg7_font);
+be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL);
+be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_I2C_SDA);
+be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, NULL);
+be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_lv_cb);
+be_define_const_str(lv_cb, "lv_cb", 1389787433u, 0, 5, NULL);
static const bstring* const m_string_table[] = {
- (const bstring *)&be_const_str_RF_SENSOR,
NULL,
- (const bstring *)&be_const_str_GPS_TX,
- (const bstring *)&be_const_str_lv_draw_mask_line_param_t,
- (const bstring *)&be_const_str_TM1638DIO,
+ (const bstring *)&be_const_str_lv_style,
+ (const bstring *)&be_const_str_ETH_PHY_MDIO,
+ (const bstring *)&be_const_str_bus,
+ (const bstring *)&be_const_str_ROT1A,
+ (const bstring *)&be_const_str_EPAPER42_CS,
+ (const bstring *)&be_const_str_MCP39F5_RST,
+ (const bstring *)&be_const_str_SYMBOL_SETTINGS,
+ (const bstring *)&be_const_str_pi,
+ (const bstring *)&be_const_str_acos,
+ NULL,
+ (const bstring *)&be_const_str_SYMBOL_BACKSPACE,
+ (const bstring *)&be_const_str_resp_cmnd,
+ (const bstring *)&be_const_str_NRG_SEL,
+ (const bstring *)&be_const_str_SYMBOL_OK,
+ (const bstring *)&be_const_str_SYMBOL_BATTERY_3,
+ (const bstring *)&be_const_str_ADC_TEMP,
+ (const bstring *)&be_const_str_SPI_DC,
+ (const bstring *)&be_const_str_MIEL_HVAC_RX,
+ (const bstring *)&be_const_str_SHELLY_DIMMER_RST_INV,
+ (const bstring *)&be_const_str_MAX7219CS,
+ (const bstring *)&be_const_str_SDM72_RX,
+ (const bstring *)&be_const_str_ADC_LIGHT,
+ (const bstring *)&be_const_str_lv_dropdown,
+ NULL,
+ (const bstring *)&be_const_str_A4988_DIR,
+ (const bstring *)&be_const_str_IEM3000_TX,
+ (const bstring *)&be_const_str_BS814_DAT,
+ (const bstring *)&be_const_str_opt_add,
+ NULL,
+ (const bstring *)&be_const_str_delay,
+ (const bstring *)&be_const_str_iter,
+ (const bstring *)&be_const_str_fromstring,
+ NULL,
+ (const bstring *)&be_const_str_CNTR1_NP,
+ NULL,
+ (const bstring *)&be_const_str_tanh,
+ (const bstring *)&be_const_str_lv_objmask,
+ (const bstring *)&be_const_str_SOLAXX1_RX,
+ (const bstring *)&be_const_str_HRE_CLOCK,
+ (const bstring *)&be_const_str_SYMBOL_AUDIO,
+ NULL,
+ (const bstring *)&be_const_str_RC522_CS,
(const bstring *)&be_const_str_REL1,
NULL,
- (const bstring *)&be_const_str_CSE7766_TX,
- (const bstring *)&be_const_str_allocated,
- (const bstring *)&be_const_str_KEY1_TC,
- (const bstring *)&be_const_str_SPI_MOSI,
- (const bstring *)&be_const_str_RFRECV,
- (const bstring *)&be_const_str_PROJECTOR_CTRL_TX,
- (const bstring *)&be_const_str_SDCARD_CS,
- (const bstring *)&be_const_str_add,
- (const bstring *)&be_const_str_CC1101_GDO0,
- (const bstring *)&be_const_str_FTC532,
- (const bstring *)&be_const_str_cb_dispatch,
- (const bstring *)&be_const_str_DDSU666_TX,
- (const bstring *)&be_const_str_IBEACON_RX,
- NULL,
- (const bstring *)&be_const_str_TELEINFO_ENABLE,
- (const bstring *)&be_const_str_SYMBOL_PLAY,
- (const bstring *)&be_const_str_add_cmd,
- NULL,
- (const bstring *)&be_const_str_lv_tileview,
- NULL,
- (const bstring *)&be_const_str_AZ_RXD,
- (const bstring *)&be_const_str_PN532_TXD,
- (const bstring *)&be_const_str_SYMBOL_DIRECTORY,
- NULL,
- (const bstring *)&be_const_str_ctypes_bytes,
- (const bstring *)&be_const_str_SYMBOL_MINUS,
- (const bstring *)&be_const_str_CC1101_GDO2,
- (const bstring *)&be_const_str_gamma8,
- (const bstring *)&be_const_str_ST7789_DC,
- NULL,
- (const bstring *)&be_const_str_SYMBOL_PASTE,
- (const bstring *)&be_const_str_IRRECV,
- (const bstring *)&be_const_str_SM2135_CLK,
- (const bstring *)&be_const_str_ILI9341_DC,
- (const bstring *)&be_const_str_TFMINIPLUS_TX,
- (const bstring *)&be_const_str__request_from,
- (const bstring *)&be_const_str_A4988_DIR,
- (const bstring *)&be_const_str_ADC_BUTTON_INV,
- (const bstring *)&be_const_str_resp_cmnd_error,
- (const bstring *)&be_const_str_MAX7219CS,
- (const bstring *)&be_const_str_MAX31855CS,
- (const bstring *)&be_const_str_TASMOTACLIENT_TXD,
- (const bstring *)&be_const_str_LE01MR_RX,
- (const bstring *)&be_const_str_ADE7953_IRQ,
- (const bstring *)&be_const_str_DHT22,
- (const bstring *)&be_const_str_SR04_ECHO,
- (const bstring *)&be_const_str_BS814_DAT,
- (const bstring *)&be_const_str_SYMBOL_SD_CARD,
- NULL,
- (const bstring *)&be_const_str_SYMBOL_LIST,
- NULL,
- (const bstring *)&be_const_str_lv_chart,
- (const bstring *)&be_const_str_erase,
- (const bstring *)&be_const_str__buffer,
- (const bstring *)&be_const_str_content_send_style,
- (const bstring *)&be_const_str_json_append,
- NULL,
- (const bstring *)&be_const_str_web_add_main_button,
- (const bstring *)&be_const_str_ETH_PHY_MDC,
- (const bstring *)&be_const_str_TX2X_TXD_BLACK,
- (const bstring *)&be_const_str_EXS_ENABLE,
- (const bstring *)&be_const_str_I2C_SCL,
(const bstring *)&be_const_str_PZEM016_RX,
- (const bstring *)&be_const_str_CNTR1_NP,
- (const bstring *)&be_const_str_TUYA_TX,
- (const bstring *)&be_const_str_ROT1B_NP,
- (const bstring *)&be_const_str__available,
- (const bstring *)&be_const_str_IEM3000_RX,
- (const bstring *)&be_const_str_lv_img,
- (const bstring *)&be_const_str_PZEM004_RX,
- (const bstring *)&be_const_str_NRG_SEL,
- (const bstring *)&be_const_str_KEY1_NP,
- (const bstring *)&be_const_str_BUZZER_INV,
- (const bstring *)&be_const_str_NRF24_CS,
- (const bstring *)&be_const_str_EPAPER42_CS,
- (const bstring *)&be_const_str_CSE7761_RX,
- (const bstring *)&be_const_str_SM16716_SEL,
- (const bstring *)&be_const_str_lv_canvas,
+ (const bstring *)&be_const_str_SYMBOL_TRASH,
+ (const bstring *)&be_const_str_REL1_INV,
+ (const bstring *)&be_const_str_FTC532,
+ (const bstring *)&be_const_str_opt_neq,
+ (const bstring *)&be_const_str_ADC_INPUT,
+ (const bstring *)&be_const_str_cmd,
+ (const bstring *)&be_const_str_lv_btn,
+ (const bstring *)&be_const_str_gc,
+ (const bstring *)&be_const_str_WINDMETER_SPEED,
+ (const bstring *)&be_const_str_WEBCAM_SIOC,
+ (const bstring *)&be_const_str_I2C_SCL,
+ (const bstring *)&be_const_str_RISING,
+ (const bstring *)&be_const_str__read,
+ (const bstring *)&be_const_str_SYMBOL_SHUFFLE,
+ (const bstring *)&be_const_str_DDSU666_TX,
+ (const bstring *)&be_const_str_RFRECV,
+ (const bstring *)&be_const_str_PZEM017_RX,
+ (const bstring *)&be_const_str_KEY1_INV,
+ (const bstring *)&be_const_str_ADC_BUTTON,
+ (const bstring *)&be_const_str_get_tasmota,
+ (const bstring *)&be_const_str_MIEL_HVAC_TX,
NULL,
- (const bstring *)&be_const_str_HRXL_RX,
- (const bstring *)&be_const_str_SDM120_RX,
- (const bstring *)&be_const_str_MAX7219CLK,
- (const bstring *)&be_const_str_SAIR_RX,
- (const bstring *)&be_const_str_SYMBOL_BLUETOOTH,
- (const bstring *)&be_const_str_AZ_TXD,
- (const bstring *)&be_const_str_exec_rules,
- (const bstring *)&be_const_str_SDM630_TX,
- (const bstring *)&be_const_str_lv_draw_mask_map_param_cfg_t,
- (const bstring *)&be_const_str_LE01MR_TX,
- (const bstring *)&be_const_str_A4988_ENA,
- (const bstring *)&be_const_str_SSPI_MOSI,
- (const bstring *)&be_const_str_on,
- (const bstring *)&be_const_str_KEY1,
- (const bstring *)&be_const_str_SYMBOL_STOP,
- NULL,
- NULL,
- (const bstring *)&be_const_str__drivers,
- (const bstring *)&be_const_str_ZIGBEE_TX,
- (const bstring *)&be_const_str_MCP39F5_RX,
- NULL,
- (const bstring *)&be_const_str_opt_connect,
- (const bstring *)&be_const_str_imin,
- NULL,
- (const bstring *)&be_const_str_rand,
+ (const bstring *)&be_const_str_SPI_MOSI,
+ (const bstring *)&be_const_str_MD5,
+ (const bstring *)&be_const_str_PMS5003_RX,
+ (const bstring *)&be_const_str_dump,
+ (const bstring *)&be_const_str_SYMBOL_EYE_CLOSE,
+ (const bstring *)&be_const_str_SYMBOL_IMAGE,
+ (const bstring *)&be_const_str_HPMA_RX,
+ (const bstring *)&be_const_str_CC1101_GDO0,
+ (const bstring *)&be_const_str_super,
+ (const bstring *)&be_const_str_TCP_RX,
+ (const bstring *)&be_const_str_HPMA_TX,
+ (const bstring *)&be_const_str_TCP_TX,
+ (const bstring *)&be_const_str_remove_rule,
+ (const bstring *)&be_const_str_KEY1_TC,
+ (const bstring *)&be_const_str_lv_cont,
NULL,
+ (const bstring *)&be_const_str_every_100ms,
+ (const bstring *)&be_const_str_CSE7766_TX,
+ (const bstring *)&be_const_str_SM2135_DAT,
+ (const bstring *)&be_const_str_input,
+ (const bstring *)&be_const_str_IRRECV,
+ (const bstring *)&be_const_str_MGC3130_RESET,
+ (const bstring *)&be_const_str_resp_cmnd_failed,
+ (const bstring *)&be_const_str_ADC_RANGE,
(const bstring *)&be_const_str_PZEM0XX_TX,
- (const bstring *)&be_const_str_A4988_MS1,
- (const bstring *)&be_const_str_SSD1351_CS,
- (const bstring *)&be_const_str_CHANGE,
+ (const bstring *)&be_const_str_LEDLNK_INV,
+ (const bstring *)&be_const_str__end_transmission,
+ (const bstring *)&be_const_str_get,
(const bstring *)&be_const_str_SPI_MISO,
- (const bstring *)&be_const_str_TUYA_RX,
- (const bstring *)&be_const_str_BS814_CLK,
- (const bstring *)&be_const_str_wire1,
- (const bstring *)&be_const_str_IEM3000_TX,
- (const bstring *)&be_const_str_NRF24_DC,
- (const bstring *)&be_const_str_lv_calendar,
- (const bstring *)&be_const_str_EPD_DATA,
- (const bstring *)&be_const_str_WS2812,
- (const bstring *)&be_const_str_ILI9488_CS,
NULL,
- (const bstring *)&be_const_str_lv_draw_mask_radius_param_t,
- (const bstring *)&be_const_str_PWM1,
- (const bstring *)&be_const_str_HIGH,
- (const bstring *)&be_const_str_SSPI_SCLK,
- (const bstring *)&be_const_str_CSE7766_RX,
- (const bstring *)&be_const_str_web_send_decimal,
- (const bstring *)&be_const_str_resolvecmnd,
+ (const bstring *)&be_const_str_format,
+ (const bstring *)&be_const_str_MAX7219DIN,
+ (const bstring *)&be_const_str_HM10_RX,
+ (const bstring *)&be_const_str_getbits,
+ NULL,
+ (const bstring *)&be_const_str_A4988_MS1,
+ NULL,
+ NULL,
+ (const bstring *)&be_const_str_NRF24_CS,
+ (const bstring *)&be_const_str_SSD1331_DC,
+ (const bstring *)&be_const_str_PMS5003_TX,
+ (const bstring *)&be_const_str_exec_cmd,
+ (const bstring *)&be_const_str_HLW_CF,
+ (const bstring *)&be_const_str_SYMBOL_DIRECTORY,
+ (const bstring *)&be_const_str_ST7789_CS,
+ (const bstring *)&be_const_str_SYMBOL_BATTERY_FULL,
+ (const bstring *)&be_const_str_log10,
+ (const bstring *)&be_const_str_TXD,
+ (const bstring *)&be_const_str_SYMBOL_EYE_OPEN,
+ (const bstring *)&be_const_str_EXS_ENABLE,
+ (const bstring *)&be_const_str_PROJECTOR_CTRL_RX,
+ (const bstring *)&be_const_str_SBR_TX,
+ (const bstring *)&be_const_str_MAX31855DO,
+ (const bstring *)&be_const_str_byte,
+ (const bstring *)&be_const_str_write,
+ NULL,
+ (const bstring *)&be_const_str_GPS_TX,
+ (const bstring *)&be_const_str_ELECTRIQ_MOODL_TX,
+ (const bstring *)&be_const_str_lv_switch,
+ (const bstring *)&be_const_str_SAIR_RX,
+ (const bstring *)&be_const_str_SSPI_MAX31865_CS1,
+ (const bstring *)&be_const_str_DHT22,
+ (const bstring *)&be_const_str_deinit,
+ NULL,
+ (const bstring *)&be_const_str_SYMBOL_FILE,
+ (const bstring *)&be_const_str_ROT1A_NP,
+ (const bstring *)&be_const_str_IEM3000_RX,
+ NULL,
+ (const bstring *)&be_const_str_has_arg,
+ (const bstring *)&be_const_str_SSPI_MOSI,
+ (const bstring *)&be_const_str_CSE7761_TX,
+ (const bstring *)&be_const_str_LMT01,
+ (const bstring *)&be_const_str_PN532_RXD,
+ (const bstring *)&be_const_str_INPUT_PULLDOWN,
+ (const bstring *)&be_const_str_CSE7761_RX,
+ (const bstring *)&be_const_str_NRG_SEL_INV,
+ NULL,
+ (const bstring *)&be_const_str_ILI9488_CS,
(const bstring *)&be_const_str_opt_call,
NULL,
- (const bstring *)&be_const_str_HM10_TX,
- NULL,
- (const bstring *)&be_const_str_WEBCAM_VSYNC,
- (const bstring *)&be_const_str_ROT1A_NP,
- (const bstring *)&be_const_str_SSPI_DC,
+ (const bstring *)&be_const_str_SHELLY_DIMMER_BOOT0,
+ (const bstring *)&be_const_str_LED1,
+ (const bstring *)&be_const_str_INPUT_PULLUP,
+ (const bstring *)&be_const_str_MAX31855CLK,
+ (const bstring *)&be_const_str_SYMBOL_GPS,
(const bstring *)&be_const_str_SWT1_NP,
- (const bstring *)&be_const_str_OUTPUT_OPEN_DRAIN,
- (const bstring *)&be_const_str_add_rule,
- (const bstring *)&be_const_str_SYMBOL_DOWN,
- (const bstring *)&be_const_str_BOILER_OT_RX,
- (const bstring *)&be_const_str_EPAPER29_CS,
- (const bstring *)&be_const_str_WIEGAND_D0,
- (const bstring *)&be_const_str_SYMBOL_PLUS,
- (const bstring *)&be_const_str_BUZZER,
- (const bstring *)&be_const_str_MIEL_HVAC_RX,
- (const bstring *)&be_const_str_AS3935,
- NULL,
+ (const bstring *)&be_const_str_dot_def,
(const bstring *)&be_const_str_DHT11,
- (const bstring *)&be_const_str_OUTPUT,
- (const bstring *)&be_const_str_SI7021,
- (const bstring *)&be_const_str_SYMBOL_CUT,
- (const bstring *)&be_const_str_read8,
- (const bstring *)&be_const_str_HM10_RX,
- (const bstring *)&be_const_str_gamma10,
- (const bstring *)&be_const_str_CSE7761_TX,
- (const bstring *)&be_const_str_SYMBOL_SAVE,
+ (const bstring *)&be_const_str_ETH_PHY_POWER,
+ (const bstring *)&be_const_str_TFMINIPLUS_TX,
+ (const bstring *)&be_const_str_EPAPER29_CS,
+ (const bstring *)&be_const_str_event,
+ (const bstring *)&be_const_str_ADC_JOY,
+ (const bstring *)&be_const_str_CSE7766_RX,
+ (const bstring *)&be_const_str_IRSEND,
+ (const bstring *)&be_const_str_RFSEND,
+ (const bstring *)&be_const_str_TX2X_TXD_BLACK,
+ (const bstring *)&be_const_str_TUYA_RX,
NULL,
(const bstring *)&be_const_str_HRE_DATA,
- (const bstring *)&be_const_str_DEEPSLEEP,
- (const bstring *)&be_const_str_TCP_TX,
- (const bstring *)&be_const_str_HPMA_TX,
- (const bstring *)&be_const_str_dot_p,
- NULL,
- (const bstring *)&be_const_str_SSD1351_DC,
- (const bstring *)&be_const_str_DCKI,
- NULL,
- (const bstring *)&be_const_str_asstring,
- (const bstring *)&be_const_str_abs,
- (const bstring *)&be_const_str_attrdump,
- NULL,
- (const bstring *)&be_const_str_AS608_TX,
- NULL,
- (const bstring *)&be_const_str_MCP39F5_RST,
- (const bstring *)&be_const_str_SPI_DC,
- (const bstring *)&be_const_str_reverse_gamma10,
- (const bstring *)&be_const_str_LOW,
- (const bstring *)&be_const_str_HX711_DAT,
- (const bstring *)&be_const_str_TXD,
- (const bstring *)&be_const_str_SPI_CLK,
- (const bstring *)&be_const_str_DSB_OUT,
- (const bstring *)&be_const_str_dot_def,
- (const bstring *)&be_const_str_HRE_CLOCK,
- (const bstring *)&be_const_str_SHELLY_DIMMER_BOOT0,
- (const bstring *)&be_const_str_,
- (const bstring *)&be_const_str_delay,
- (const bstring *)&be_const_str_BOILER_OT_TX,
- (const bstring *)&be_const_str__read,
- (const bstring *)&be_const_str_content_button,
- (const bstring *)&be_const_str_HX711_SCK,
- (const bstring *)&be_const_str_getbits,
- (const bstring *)&be_const_str__get_cb,
- (const bstring *)&be_const_str_ADC_RANGE,
- NULL,
- (const bstring *)&be_const_str_NRG_SEL_INV,
- (const bstring *)&be_const_str_number,
- (const bstring *)&be_const_str_LMT01,
- NULL,
- NULL,
- (const bstring *)&be_const_str_DHT11_OUT,
- (const bstring *)&be_const_str_ILI9341_CS,
- (const bstring *)&be_const_str_DDS2382_TX,
- (const bstring *)&be_const_str_opt_neq,
- (const bstring *)&be_const_str_fromstring,
- (const bstring *)&be_const_str_bus,
- (const bstring *)&be_const_str_format,
- (const bstring *)&be_const_str___upper__,
- (const bstring *)&be_const_str_SSPI_MAX31865_CS1,
- (const bstring *)&be_const_str__rules,
- (const bstring *)&be_const_str_P9813_DAT,
- (const bstring *)&be_const_str_LED1,
- (const bstring *)&be_const_str_opt_add,
- (const bstring *)&be_const_str_SYMBOL_KEYBOARD,
+ (const bstring *)&be_const_str_DDSU666_RX,
+ (const bstring *)&be_const_str_SM16716_SEL,
+ (const bstring *)&be_const_str_ADC_BUTTON_INV,
+ (const bstring *)&be_const_str_MP3_DFR562,
(const bstring *)&be_const_str_rad,
+ (const bstring *)&be_const_str_ARIRFSEL,
+ (const bstring *)&be_const_str_lv_group_focus_cb,
+ (const bstring *)&be_const_str_SENSOR_END,
+ (const bstring *)&be_const_str_codedump,
+ (const bstring *)&be_const_str_CNTR1,
+ (const bstring *)&be_const_str_DDS2382_TX,
+ (const bstring *)&be_const_str_SSPI_MISO,
+ (const bstring *)&be_const_str_pop,
+ (const bstring *)&be_const_str_SDCARD_CS,
+ (const bstring *)&be_const_str_I2C_Driver,
+ (const bstring *)&be_const_str_BOILER_OT_TX,
NULL,
- (const bstring *)&be_const_str_ARIRFRCV,
- (const bstring *)&be_const_str_SDM120_TX,
+ (const bstring *)&be_const_str_CHANGE,
+ (const bstring *)&be_const_str_lv_draw_rect_dsc,
+ (const bstring *)&be_const_str_ST7789_DC,
+ (const bstring *)&be_const_str_var,
+ (const bstring *)&be_const_str_MCP39F5_TX,
+ (const bstring *)&be_const_str_AS608_TX,
+ (const bstring *)&be_const_str_get_free_heap,
+ NULL,
+ (const bstring *)&be_const_str_KEY1,
+ NULL,
+ (const bstring *)&be_const_str_BUZZER_INV,
+ (const bstring *)&be_const_str_lv_roller,
+ (const bstring *)&be_const_str_ADC_CT_POWER,
+ (const bstring *)&be_const_str_asstring,
+ (const bstring *)&be_const_str_NONE,
+ (const bstring *)&be_const_str_exp,
+ (const bstring *)&be_const_str_BL0940_RX,
+ (const bstring *)&be_const_str_check_privileged_access,
+ (const bstring *)&be_const_str_opt_eq,
+ (const bstring *)&be_const_str_PULLDOWN,
+ (const bstring *)&be_const_str_,
+ (const bstring *)&be_const_str_SYMBOL_LOOP,
+ (const bstring *)&be_const_str_MHZ_RXD,
(const bstring *)&be_const_str_BACKLIGHT,
NULL,
- (const bstring *)&be_const_str_HLW_CF,
- (const bstring *)&be_const_str_BL0940_RX,
NULL,
- (const bstring *)&be_const_str_Driver,
- (const bstring *)&be_const_str_FALLING,
- (const bstring *)&be_const_str_lv_dropdown,
- (const bstring *)&be_const_str_SYMBOL_PAUSE,
(const bstring *)&be_const_str_PULLUP,
- (const bstring *)&be_const_str_SYMBOL_CHARGE,
+ (const bstring *)&be_const_str_SR04_ECHO,
NULL,
- (const bstring *)&be_const_str__end_transmission,
- (const bstring *)&be_const_str_P9813_CLK,
- (const bstring *)&be_const_str_ADC_JOY,
- (const bstring *)&be_const_str_event,
+ (const bstring *)&be_const_str_ADE7953_IRQ,
+ (const bstring *)&be_const_str_SYMBOL_PREV,
+ (const bstring *)&be_const_str_HX711_DAT,
+ (const bstring *)&be_const_str_dot_p,
+ (const bstring *)&be_const_str_GPS_RX,
+ (const bstring *)&be_const_str_AZ_RXD,
+ (const bstring *)&be_const_str_Tasmota,
+ (const bstring *)&be_const_str_srand,
+ NULL,
+ (const bstring *)&be_const_str_LOW,
+ (const bstring *)&be_const_str_DDS2382_RX,
+ (const bstring *)&be_const_str_SDM120_RX,
+ (const bstring *)&be_const_str_wire_scan,
+ (const bstring *)&be_const_str_SBR_RX,
+ (const bstring *)&be_const_str_PWM1_INV,
+ (const bstring *)&be_const_str_ETH_PHY_MDC,
+ (const bstring *)&be_const_str_run_deferred,
+ (const bstring *)&be_const_str_SYMBOL_REFRESH,
+ (const bstring *)&be_const_str_TASMOTACLIENT_RXD,
+ NULL,
+ (const bstring *)&be_const_str_PROJECTOR_CTRL_TX,
+ (const bstring *)&be_const_str_SYMBOL_VOLUME_MAX,
+ (const bstring *)&be_const_str_MAX7219CLK,
+ (const bstring *)&be_const_str_WEBCAM_PCLK,
+ (const bstring *)&be_const_str_try,
+ (const bstring *)&be_const_str_EPD_DATA,
+ (const bstring *)&be_const_str_ADC_PH,
NULL,
- (const bstring *)&be_const_str_MHZ_RXD,
- (const bstring *)&be_const_str_DI,
- (const bstring *)&be_const_str_HJL_CF,
- (const bstring *)&be_const_str_SPI_CS,
- (const bstring *)&be_const_str_SDM72_TX,
- (const bstring *)&be_const_str_HPMA_RX,
- (const bstring *)&be_const_str_LED1_INV,
NULL,
(const bstring *)&be_const_str_IBEACON_TX,
- (const bstring *)&be_const_str_TASMOTACLIENT_RXD,
- (const bstring *)&be_const_str_concat,
- (const bstring *)&be_const_str_PMS5003_TX,
- (const bstring *)&be_const_str_SBR_RX,
- (const bstring *)&be_const_str_addr,
- NULL,
- (const bstring *)&be_const_str_I2C_SDA,
- (const bstring *)&be_const_str_every_second,
- (const bstring *)&be_const_str_ROT1A,
- (const bstring *)&be_const_str_MHZ_TXD,
- (const bstring *)&be_const_str_ADC_PH,
- (const bstring *)&be_const_str_INPUT,
- (const bstring *)&be_const_str_lv_switch,
- (const bstring *)&be_const_str_acos,
- (const bstring *)&be_const_str_continue,
- (const bstring *)&be_const_str_INPUT_PULLDOWN,
- (const bstring *)&be_const_str_DSB,
- (const bstring *)&be_const_str_ADC_CT_POWER,
- (const bstring *)&be_const_str_pop,
- (const bstring *)&be_const_str_set,
NULL,
(const bstring *)&be_const_str_OLED_RESET,
+ (const bstring *)&be_const_str_scan,
+ (const bstring *)&be_const_str_SDS0X1_RX,
+ (const bstring *)&be_const_str_AS608_RX,
+ (const bstring *)&be_const_str_opt_connect,
+ (const bstring *)&be_const_str__timers,
+ (const bstring *)&be_const_str_lv_draw_img_dsc,
+ NULL,
+ (const bstring *)&be_const_str_HIGH,
+ (const bstring *)&be_const_str_DSB,
+ NULL,
+ (const bstring *)&be_const_str_ARIRFRCV,
+ (const bstring *)&be_const_str_NRF24_DC,
+ (const bstring *)&be_const_str_SYMBOL_STOP,
+ (const bstring *)&be_const_str_A4988_STP,
+ (const bstring *)&be_const_str_WEBCAM_PSRCS,
+ NULL,
(const bstring *)&be_const_str_OUTPUT_LO,
- (const bstring *)&be_const_str_SYMBOL_VOLUME_MID,
- (const bstring *)&be_const_str_SYMBOL_BATTERY_2,
- (const bstring *)&be_const_str_lv_checkbox,
- (const bstring *)&be_const_str_DDSU666_RX,
- (const bstring *)&be_const_str_TM1637DIO,
+ (const bstring *)&be_const_str_push,
+ (const bstring *)&be_const_str_cos,
+ (const bstring *)&be_const_str_set_timer,
+ (const bstring *)&be_const_str_DEEPSLEEP,
+ (const bstring *)&be_const_str_SDM630_RX,
+ (const bstring *)&be_const_str_DI,
+ (const bstring *)&be_const_str_INPUT,
+ (const bstring *)&be_const_str_SYMBOL_SD_CARD,
+ (const bstring *)&be_const_str_CC1101_GDO2,
+ (const bstring *)&be_const_str_copy,
+ (const bstring *)&be_const_str_SR04_TRIG,
NULL,
- NULL,
- (const bstring *)&be_const_str_ADC_TEMP,
- (const bstring *)&be_const_str_opt_eq,
- (const bstring *)&be_const_str_DDS2382_RX,
- (const bstring *)&be_const_str_RISING,
- (const bstring *)&be_const_str_ADC_BUTTON,
- (const bstring *)&be_const_str_ROT1B,
- (const bstring *)&be_const_str_ETH_PHY_POWER,
- (const bstring *)&be_const_str_VL53L0X_XSHUT1,
- NULL,
- (const bstring *)&be_const_str_CNTR1,
- (const bstring *)&be_const_str_count,
- NULL,
- (const bstring *)&be_const_str_SYMBOL_RIGHT,
- (const bstring *)&be_const_str_char,
- (const bstring *)&be_const_str_PROJECTOR_CTRL_RX,
- (const bstring *)&be_const_str_MP3_DFR562,
- NULL,
- (const bstring *)&be_const_str_add_driver,
- (const bstring *)&be_const_str_SM16716_DAT,
- (const bstring *)&be_const_str_SBR_TX,
- (const bstring *)&be_const_str_ADC_INPUT,
- (const bstring *)&be_const_str_SYMBOL_BELL,
- (const bstring *)&be_const_str_PWM1_INV,
- (const bstring *)&be_const_str_SSPI_CS
+ (const bstring *)&be_const_str_HALLEFFECT,
+ (const bstring *)&be_const_str_imin,
+ (const bstring *)&be_const_str_SYMBOL_VIDEO,
+ (const bstring *)&be_const_str_SYMBOL_LIST,
+ (const bstring *)&be_const_str_AZ_TXD,
+ (const bstring *)&be_const_str_end,
+ (const bstring *)&be_const_str_SYMBOL_BATTERY_EMPTY,
+ (const bstring *)&be_const_str_for,
+ (const bstring *)&be_const_str_BUZZER,
+ (const bstring *)&be_const_str_SSPI_SCLK,
+ (const bstring *)&be_const_str_issubclass,
+ (const bstring *)&be_const_str_WEBCAM_HREF,
+ (const bstring *)&be_const_str_Driver,
+ (const bstring *)&be_const_str_OPTION_A,
+ (const bstring *)&be_const_str_IBEACON_RX,
+ (const bstring *)&be_const_str_HM10_TX,
+ (const bstring *)&be_const_str_BOILER_OT_RX,
+ (const bstring *)&be_const_str_item,
+ (const bstring *)&be_const_str_SDS0X1_TX,
+ (const bstring *)&be_const_str_OPEN_DRAIN,
+ (const bstring *)&be_const_str__rules,
+ (const bstring *)&be_const_str_insert,
+ (const bstring *)&be_const_str_web_add_config_button,
+ (const bstring *)&be_const_str_SYMBOL_BULLET,
+ (const bstring *)&be_const_str_SYMBOL_UPLOAD,
+ (const bstring *)&be_const_str_lv_draw_mask_common_dsc,
+ (const bstring *)&be_const_str_LE01MR_RX,
+ (const bstring *)&be_const_str_web_add_main_button,
+ (const bstring *)&be_const_str_floor,
+ (const bstring *)&be_const_str_DCKI,
+ (const bstring *)&be_const_str_ILI9341_CS
};
static const struct bconststrtab m_const_string_table = {
- .size = 302,
- .count = 605,
+ .size = 306,
+ .count = 612,
.table = m_string_table
};
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_ctypes_classes.h b/lib/libesp32/Berry/generate/be_fixed_be_class_ctypes_classes.h
index ae0476edb..7f559c508 100644
--- a/lib/libesp32/Berry/generate/be_fixed_be_class_ctypes_classes.h
+++ b/lib/libesp32/Berry/generate/be_fixed_be_class_ctypes_classes.h
@@ -1,25 +1,25 @@
#include "be_constobj.h"
static be_define_const_map_slots(be_class_ctypes_classes_map) {
- { be_const_key(lv_draw_mask_line_param_cfg_t, 1), be_const_int(0) },
- { be_const_key(lv_draw_mask_radius_param_t, 8), be_const_int(0) },
- { be_const_key(lv_draw_mask_radius_param_cfg_t, 12), be_const_int(0) },
- { be_const_key(lv_draw_mask_saved_t, -1), be_const_int(0) },
- { be_const_key(lv_draw_mask_line_param_t, 9), be_const_int(0) },
- { be_const_key(lv_area_t, -1), be_const_int(0) },
- { be_const_key(lv_draw_mask_map_param_cfg_t, -1), be_const_int(0) },
- { be_const_key(lv_draw_mask_map_param_t, -1), be_const_int(0) },
- { be_const_key(lv_draw_line_dsc_t, -1), be_const_int(0) },
- { be_const_key(lv_draw_label_dsc_t, -1), be_const_int(0) },
- { be_const_key(lv_draw_mask_common_dsc_t, 2), be_const_int(0) },
- { be_const_key(lv_draw_rect_dsc_t, -1), be_const_int(0) },
- { be_const_key(lv_draw_mask_fade_param_cfg_t, -1), be_const_int(0) },
- { be_const_key(lv_sqrt_res_t, 7), be_const_int(0) },
- { be_const_key(lv_point_t, -1), be_const_int(0) },
- { be_const_key(lv_draw_mask_angle_param_cfg_t, -1), be_const_int(0) },
- { be_const_key(lv_draw_mask_fade_param_t, -1), be_const_int(0) },
- { be_const_key(lv_draw_mask_angle_param_t, 15), be_const_int(0) },
- { be_const_key(lv_draw_img_dsc_t, -1), be_const_int(0) },
+ { be_const_key(lv_draw_mask_radius_param_cfg, -1), be_const_int(0) },
+ { be_const_key(lv_draw_img_dsc, 14), be_const_int(0) },
+ { be_const_key(lv_draw_mask_radius_param, -1), be_const_int(0) },
+ { be_const_key(lv_point, 4), be_const_int(0) },
+ { be_const_key(lv_draw_mask_fade_param_cfg, 5), be_const_int(0) },
+ { be_const_key(lv_draw_mask_map_param, -1), be_const_int(0) },
+ { be_const_key(lv_draw_label_dsc, -1), be_const_int(0) },
+ { be_const_key(lv_area, 17), be_const_int(0) },
+ { be_const_key(lv_draw_mask_angle_param_cfg, 3), be_const_int(0) },
+ { be_const_key(lv_draw_mask_line_param_cfg, -1), be_const_int(0) },
+ { be_const_key(lv_draw_mask_saved, 12), be_const_int(0) },
+ { be_const_key(lv_draw_mask_map_param_cfg, -1), be_const_int(0) },
+ { be_const_key(lv_draw_rect_dsc, -1), be_const_int(0) },
+ { be_const_key(lv_draw_mask_angle_param, -1), be_const_int(0) },
+ { be_const_key(lv_draw_line_dsc, 15), be_const_int(0) },
+ { be_const_key(lv_draw_mask_common_dsc, -1), be_const_int(0) },
+ { be_const_key(lv_draw_mask_line_param, -1), be_const_int(0) },
+ { be_const_key(lv_sqrt_res, -1), be_const_int(0) },
+ { be_const_key(lv_draw_mask_fade_param, 13), be_const_int(0) },
};
static be_define_const_map(
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_draw_line.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_draw_line.h
new file mode 100644
index 000000000..834966f29
--- /dev/null
+++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_draw_line.h
@@ -0,0 +1,20 @@
+#include "be_constobj.h"
+
+static be_define_const_map_slots(be_class_lv_draw_line_map) {
+ { be_const_key(init, 2), be_const_func(lvbe_draw_line_create) },
+ { be_const_key(tostring, -1), be_const_func(lvx_tostring) },
+ { be_const_key(dot_p, -1), be_const_int(0) },
+ { be_const_key(member, 0), be_const_func(lvx_member) },
+};
+
+static be_define_const_map(
+ be_class_lv_draw_line_map,
+ 4
+);
+
+BE_EXPORT_VARIABLE be_define_const_class(
+ be_class_lv_draw_line,
+ 1,
+ NULL,
+ lv_draw_line
+);
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h
index c8428ec95..002804d30 100644
--- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h
+++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h
@@ -15,6 +15,6 @@ static be_define_const_map(
BE_EXPORT_VARIABLE be_define_const_class(
be_class_lv_indev,
1,
- (bclass *)&be_class_lv_obj,
+ NULL,
lv_indev
);
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h
index f3bc896ad..1ef46979f 100644
--- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h
+++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h
@@ -15,6 +15,6 @@ static be_define_const_map(
BE_EXPORT_VARIABLE be_define_const_class(
be_class_lv_style,
1,
- (bclass *)&be_class_lv_obj,
+ NULL,
lv_style
);
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_lv_design_cb.h b/lib/libesp32/Berry/generate/be_fixed_be_lv_design_cb.h
new file mode 100644
index 000000000..57553ca9b
--- /dev/null
+++ b/lib/libesp32/Berry/generate/be_fixed_be_lv_design_cb.h
@@ -0,0 +1,17 @@
+#include "be_constobj.h"
+
+static be_define_const_map_slots(be_lv_design_cb_map) {
+ { be_const_key(call, -1), be_const_func(lv_design_cb_call) },
+};
+
+static be_define_const_map(
+ be_lv_design_cb_map,
+ 1
+);
+
+BE_EXPORT_VARIABLE be_define_const_class(
+ be_lv_design_cb,
+ 0,
+ (bclass *)&be_lvgl_cb,
+ lv_design_cb
+);
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_lv_event_cb.h b/lib/libesp32/Berry/generate/be_fixed_be_lv_event_cb.h
new file mode 100644
index 000000000..80882b52b
--- /dev/null
+++ b/lib/libesp32/Berry/generate/be_fixed_be_lv_event_cb.h
@@ -0,0 +1,17 @@
+#include "be_constobj.h"
+
+static be_define_const_map_slots(be_lv_event_cb_map) {
+ { be_const_key(call, -1), be_const_func(lv_event_cb_call) },
+};
+
+static be_define_const_map(
+ be_lv_event_cb_map,
+ 1
+);
+
+BE_EXPORT_VARIABLE be_define_const_class(
+ be_lv_event_cb,
+ 0,
+ (bclass *)&be_lvgl_cb,
+ lv_event_cb
+);
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_lv_gauge_format_cb.h b/lib/libesp32/Berry/generate/be_fixed_be_lv_gauge_format_cb.h
new file mode 100644
index 000000000..a04edfe20
--- /dev/null
+++ b/lib/libesp32/Berry/generate/be_fixed_be_lv_gauge_format_cb.h
@@ -0,0 +1,17 @@
+#include "be_constobj.h"
+
+static be_define_const_map_slots(be_lv_gauge_format_cb_map) {
+ { be_const_key(call, -1), be_const_func(lv_gauge_format_cb_call) },
+};
+
+static be_define_const_map(
+ be_lv_gauge_format_cb_map,
+ 1
+);
+
+BE_EXPORT_VARIABLE be_define_const_class(
+ be_lv_gauge_format_cb,
+ 0,
+ (bclass *)&be_lvgl_cb,
+ lv_gauge_format_cb
+);
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_lv_group_focus_cb.h b/lib/libesp32/Berry/generate/be_fixed_be_lv_group_focus_cb.h
new file mode 100644
index 000000000..b1f6902e4
--- /dev/null
+++ b/lib/libesp32/Berry/generate/be_fixed_be_lv_group_focus_cb.h
@@ -0,0 +1,17 @@
+#include "be_constobj.h"
+
+static be_define_const_map_slots(be_lv_group_focus_cb_map) {
+ { be_const_key(call, -1), be_const_func(lv_group_focus_cb_call) },
+};
+
+static be_define_const_map(
+ be_lv_group_focus_cb_map,
+ 1
+);
+
+BE_EXPORT_VARIABLE be_define_const_class(
+ be_lv_group_focus_cb,
+ 0,
+ (bclass *)&be_lvgl_cb,
+ lv_group_focus_cb
+);
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_lv_signal_cb.h b/lib/libesp32/Berry/generate/be_fixed_be_lv_signal_cb.h
new file mode 100644
index 000000000..c7841a809
--- /dev/null
+++ b/lib/libesp32/Berry/generate/be_fixed_be_lv_signal_cb.h
@@ -0,0 +1,17 @@
+#include "be_constobj.h"
+
+static be_define_const_map_slots(be_lv_signal_cb_map) {
+ { be_const_key(call, -1), be_const_func(lv_signal_cb_call) },
+};
+
+static be_define_const_map(
+ be_lv_signal_cb_map,
+ 1
+);
+
+BE_EXPORT_VARIABLE be_define_const_class(
+ be_lv_signal_cb,
+ 0,
+ (bclass *)&be_lvgl_cb,
+ lv_signal_cb
+);
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_lvgl_cb.h b/lib/libesp32/Berry/generate/be_fixed_be_lvgl_cb.h
new file mode 100644
index 000000000..7348587a9
--- /dev/null
+++ b/lib/libesp32/Berry/generate/be_fixed_be_lvgl_cb.h
@@ -0,0 +1,20 @@
+#include "be_constobj.h"
+
+static be_define_const_map_slots(be_lvgl_cb_map) {
+ { be_const_key(dot_p, -1), be_const_int(0) },
+ { be_const_key(tostring, 2), be_const_func(lvx_tostring) },
+ { be_const_key(call, -1), be_const_func(lv_cb_call) },
+ { be_const_key(init, 0), be_const_func(lv0_init) },
+};
+
+static be_define_const_map(
+ be_lvgl_cb_map,
+ 4
+);
+
+BE_EXPORT_VARIABLE be_define_const_class(
+ be_lvgl_cb,
+ 1,
+ NULL,
+ lv_cb
+);
diff --git a/tasmota/berry/modules/lvgl_ctypes.be b/tasmota/berry/modules/lvgl_ctypes.be
index e314fb40a..61b3fdf7c 100644
--- a/tasmota/berry/modules/lvgl_ctypes.be
+++ b/tasmota/berry/modules/lvgl_ctypes.be
@@ -10,17 +10,17 @@ import ctypes
ctypes.print_types()
-lv_style_int_t = ctypes.i16
-lv_color_t = ctypes.u16 # depends on colors
-lv_grad_dir_t = ctypes.u8
-lv_opa_t = ctypes.u8
-lv_blend_mode_t = ctypes.u8
-lv_align_t = ctypes.u8
-lv_coord_t = ctypes.i16
-lv_bidi_dir_t = ctypes.u8
-lv_txt_flag_t = ctypes.u8
-lv_text_decor_t = ctypes.u8
-lv_font_t = ctypes.u32
+lv_style_int = ctypes.i16
+lv_color = ctypes.u16 # depends on colors
+lv_grad_dir = ctypes.u8
+lv_opa = ctypes.u8
+lv_blend_mode = ctypes.u8
+lv_align = ctypes.u8
+lv_coord = ctypes.i16
+lv_bidi_dir = ctypes.u8
+lv_txt_flag = ctypes.u8
+lv_text_decor = ctypes.u8
+lv_font = ctypes.u32
uint8_t_1 = ctypes.bf_1
uint8_t_2 = ctypes.bf_2
uint8_t = ctypes.u8
@@ -29,158 +29,158 @@ uint32_t = ctypes.u32
int32_t = ctypes.i32
ptr = ctypes.u32
-lv_point_t = [
- [lv_coord_t, "x"],
- [lv_coord_t, "y"],
+lv_point = [
+ [lv_coord, "x"],
+ [lv_coord, "y"],
]
-lv_point_t = ctypes.structure(lv_point_t, "lv_point_t")
+lv_point = ctypes.structure(lv_point, "lv_point")
-lv_area_t = [
- [lv_coord_t, "x1"],
- [lv_coord_t, "y1"],
- [lv_coord_t, "x2"],
- [lv_coord_t, "y2"],
+lv_area = [
+ [lv_coord, "x1"],
+ [lv_coord, "y1"],
+ [lv_coord, "x2"],
+ [lv_coord, "y2"],
]
-lv_area_t = ctypes.structure(lv_area_t, "lv_area_t")
+lv_area = ctypes.structure(lv_area, "lv_area")
# test_t = [
-# [lv_area_t, "a"],
-# [lv_area_t, "b"]
+# [lv_area, "a"],
+# [lv_area, "b"]
# ]
# test_t = ctypes.structure(test_t, "test_t")
-lv_draw_rect_dsc_t = [
- [lv_style_int_t, "radius"],
+lv_draw_rect_dsc = [
+ [lv_style_int, "radius"],
#/*Background*/
- [lv_color_t, "bg_color"],
- [lv_color_t, "bg_grad_color"],
- [lv_grad_dir_t, "bg_grad_dir"],
- [lv_style_int_t, "bg_main_color_stop"],
- [lv_style_int_t, "bg_grad_color_stop"],
- [lv_opa_t, "bg_opa"],
- [lv_blend_mode_t, "bg_blend_mode"],
+ [lv_color, "bg_color"],
+ [lv_color, "bg_grad_color"],
+ [lv_grad_dir, "bg_grad_dir"],
+ [lv_style_int, "bg_main_color_stop"],
+ [lv_style_int, "bg_grad_color_stop"],
+ [lv_opa, "bg_opa"],
+ [lv_blend_mode, "bg_blend_mode"],
#/*Border*/
- [lv_color_t, "border_color"],
- [lv_style_int_t, "border_width"],
- [lv_style_int_t, "border_side"],
- [lv_opa_t, "border_opa"],
- [lv_blend_mode_t, "border_blend_mode"],
+ [lv_color, "border_color"],
+ [lv_style_int, "border_width"],
+ [lv_style_int, "border_side"],
+ [lv_opa, "border_opa"],
+ [lv_blend_mode, "border_blend_mode"],
[uint8_t_1, "border_post"],
#/*Outline*/
- [lv_color_t, "outline_color"],
- [lv_style_int_t, "outline_width"],
- [lv_style_int_t, "outline_pad"],
- [lv_opa_t, "outline_opa"],
- [lv_blend_mode_t, "outline_blend_mode"],
+ [lv_color, "outline_color"],
+ [lv_style_int, "outline_width"],
+ [lv_style_int, "outline_pad"],
+ [lv_opa, "outline_opa"],
+ [lv_blend_mode, "outline_blend_mode"],
#/*Shadow*/
- [lv_color_t, "shadow_color"],
- [lv_style_int_t, "shadow_width"],
- [lv_style_int_t, "shadow_ofs_x"],
- [lv_style_int_t, "shadow_ofs_y"],
- [lv_style_int_t, "shadow_spread"],
- [lv_opa_t, "shadow_opa"],
- [lv_blend_mode_t, "shadow_blend_mode"],
+ [lv_color, "shadow_color"],
+ [lv_style_int, "shadow_width"],
+ [lv_style_int, "shadow_ofs_x"],
+ [lv_style_int, "shadow_ofs_y"],
+ [lv_style_int, "shadow_spread"],
+ [lv_opa, "shadow_opa"],
+ [lv_blend_mode, "shadow_blend_mode"],
#/*Pattern*/
[ptr, "pattern_image"],
[ptr, "pattern_font"],
- [lv_color_t, "pattern_recolor"],
- [lv_opa_t, "pattern_opa"],
- [lv_opa_t, "pattern_recolor_opa"],
+ [lv_color, "pattern_recolor"],
+ [lv_opa, "pattern_opa"],
+ [lv_opa, "pattern_recolor_opa"],
[uint8_t_1, "pattern_repeat"],
- [lv_blend_mode_t, "pattern_blend_mode"],
+ [lv_blend_mode, "pattern_blend_mode"],
#/*Value*/
[ptr, "value_str"],
[ptr, "value_font"],
- [lv_opa_t, "value_opa"],
- [lv_color_t, "value_color"],
- [lv_style_int_t, "value_ofs_x"],
- [lv_style_int_t, "value_ofs_y"],
- [lv_style_int_t, "value_letter_space"],
- [lv_style_int_t, "value_line_space"],
- [lv_align_t, "value_align"],
- [lv_blend_mode_t, "value_blend_mode"],
+ [lv_opa, "value_opa"],
+ [lv_color, "value_color"],
+ [lv_style_int, "value_ofs_x"],
+ [lv_style_int, "value_ofs_y"],
+ [lv_style_int, "value_letter_space"],
+ [lv_style_int, "value_line_space"],
+ [lv_align, "value_align"],
+ [lv_blend_mode, "value_blend_mode"],
]
-lv_draw_rect_dsc_t = ctypes.structure(lv_draw_rect_dsc_t, "lv_draw_rect_dsc_t")
+lv_draw_rect_dsc = ctypes.structure(lv_draw_rect_dsc, "lv_draw_rect_dsc")
-lv_draw_line_dsc_t = [
- [lv_color_t, "color"],
- [lv_style_int_t, "width"],
- [lv_style_int_t, "dash_width"],
- [lv_style_int_t, "dash_gap"],
- [lv_opa_t, "opa"],
+lv_draw_line_dsc = [
+ [lv_color, "color"],
+ [lv_style_int, "width"],
+ [lv_style_int, "dash_width"],
+ [lv_style_int, "dash_gap"],
+ [lv_opa, "opa"],
[uint8_t_2, "blend_mode"],
[uint8_t_1, "round_start"],
[uint8_t_1, "round_end"],
[uint8_t_1, "raw_end"],
]
-lv_draw_line_dsc_t = ctypes.structure(lv_draw_line_dsc_t, "lv_draw_line_dsc_t")
+lv_draw_line_dsc = ctypes.structure(lv_draw_line_dsc, "lv_draw_line_dsc")
-lv_draw_img_dsc_t = [
- [lv_opa_t, "opa"],
+lv_draw_img_dsc = [
+ [lv_opa, "opa"],
[uint16_t, "angle"],
- [lv_point_t, "pivot"],
+ [lv_point, "pivot"],
[uint16_t, "zoom"],
- [lv_opa_t, "recolor_opa"],
- [lv_color_t, "recolor"],
- [lv_blend_mode_t, "blend_mode"],
+ [lv_opa, "recolor_opa"],
+ [lv_color, "recolor"],
+ [lv_blend_mode, "blend_mode"],
[uint8_t_1, "antialias"],
]
-lv_draw_img_dsc_t = ctypes.structure(lv_draw_img_dsc_t, "lv_draw_img_dsc_t")
+lv_draw_img_dsc = ctypes.structure(lv_draw_img_dsc, "lv_draw_img_dsc")
-lv_draw_label_dsc_t = [
- [lv_color_t, "color"],
- [lv_color_t, "sel_color"],
- [lv_color_t, "sel_bg_color"],
- [lv_font_t, "font"],
- [lv_opa_t, "opa"],
- [lv_style_int_t, "line_space"],
- [lv_style_int_t, "letter_space"],
+lv_draw_label_dsc = [
+ [lv_color, "color"],
+ [lv_color, "sel_color"],
+ [lv_color, "sel_bg_color"],
+ [lv_font, "font"],
+ [lv_opa, "opa"],
+ [lv_style_int, "line_space"],
+ [lv_style_int, "letter_space"],
[uint32_t, "sel_start"],
[uint32_t, "sel_end"],
- [lv_coord_t, "ofs_x"],
- [lv_coord_t, "ofs_y"],
- [lv_bidi_dir_t, "bidi_dir"],
- [lv_txt_flag_t, "flag"],
- [lv_text_decor_t, "decor"],
- [lv_blend_mode_t, "blend_mode"],
+ [lv_coord, "ofs_x"],
+ [lv_coord, "ofs_y"],
+ [lv_bidi_dir, "bidi_dir"],
+ [lv_txt_flag, "flag"],
+ [lv_text_decor, "decor"],
+ [lv_blend_mode, "blend_mode"],
]
-lv_draw_label_dsc_t = ctypes.structure(lv_draw_label_dsc_t, "lv_draw_label_dsc_t")
+lv_draw_label_dsc = ctypes.structure(lv_draw_label_dsc, "lv_draw_label_dsc")
#- --------- lv_mask --------- -#
-lv_draw_mask_xcb_t = ptr # callback
-lv_draw_mask_type_t = ctypes.u8
-lv_draw_mask_line_side_t = ctypes.u8
+lv_draw_mask_xcb = ptr # callback
+lv_draw_mask_type = ctypes.u8
+lv_draw_mask_line_side = ctypes.u8
-lv_draw_mask_common_dsc_t = [
- [lv_draw_mask_xcb_t, "cb"],
- [lv_draw_mask_type_t, "type"],
+lv_draw_mask_common_dsc = [
+ [lv_draw_mask_xcb, "cb"],
+ [lv_draw_mask_type, "type"],
]
-lv_draw_mask_common_dsc_t = ctypes.structure(lv_draw_mask_common_dsc_t, "lv_draw_mask_common_dsc_t")
+lv_draw_mask_common_dsc = ctypes.structure(lv_draw_mask_common_dsc, "lv_draw_mask_common_dsc")
-lv_draw_mask_line_param_cfg_t = [
+lv_draw_mask_line_param_cfg = [
#/*First point */
- [lv_point_t, "p1"],
+ [lv_point, "p1"],
#/*Second point*/
- [lv_point_t, "p2"],
+ [lv_point, "p2"],
#/*Which side to keep?*/
[uint8_t_2, "side"],
]
-lv_draw_mask_line_param_cfg_t = ctypes.structure(lv_draw_mask_line_param_cfg_t, "lv_draw_mask_line_param_cfg_t")
+lv_draw_mask_line_param_cfg = ctypes.structure(lv_draw_mask_line_param_cfg, "lv_draw_mask_line_param_cfg")
-lv_draw_mask_line_param_t = [
+lv_draw_mask_line_param = [
#/*The first element must be the common descriptor*/
- [lv_draw_mask_common_dsc_t, "dsc"],
- [lv_draw_mask_line_param_cfg_t, "cfg"],
+ [lv_draw_mask_common_dsc, "dsc"],
+ [lv_draw_mask_line_param_cfg, "cfg"],
#/*A point of the line*/
- [lv_point_t, "origo"],
+ [lv_point, "origo"],
#/* X / (1024*Y) steepness (X is 0..1023 range). What is the change of X in 1024 Y?*/
[int32_t, "xy_steep"],
#/* Y / (1024*X) steepness (Y is 0..1023 range). What is the change of Y in 1024 X?*/
@@ -195,85 +195,85 @@ lv_draw_mask_line_param_t = [
# * It is used to select left/right/top/bottom*/
[uint8_t_1, "inv"],
]
-lv_draw_mask_line_param_t = ctypes.structure(lv_draw_mask_line_param_t, "lv_draw_mask_line_param_t")
+lv_draw_mask_line_param = ctypes.structure(lv_draw_mask_line_param, "lv_draw_mask_line_param")
-lv_draw_mask_angle_param_cfg_t = [
- [lv_point_t, "vertex_p"],
- [lv_coord_t, "start_angle"],
- [lv_coord_t, "end_angle"],
+lv_draw_mask_angle_param_cfg = [
+ [lv_point, "vertex_p"],
+ [lv_coord, "start_angle"],
+ [lv_coord, "end_angle"],
]
-lv_draw_mask_angle_param_cfg_t = ctypes.structure(lv_draw_mask_angle_param_cfg_t, "lv_draw_mask_angle_param_cfg_t")
+lv_draw_mask_angle_param_cfg = ctypes.structure(lv_draw_mask_angle_param_cfg, "lv_draw_mask_angle_param_cfg")
-lv_draw_mask_angle_param_t = [
+lv_draw_mask_angle_param = [
#/*The first element must be the common descriptor*/
- [lv_draw_mask_common_dsc_t, "dsc"],
- [lv_draw_mask_angle_param_cfg_t, "cfg"],
+ [lv_draw_mask_common_dsc, "dsc"],
+ [lv_draw_mask_angle_param_cfg, "cfg"],
- [lv_draw_mask_line_param_t, "start_line"],
- [lv_draw_mask_line_param_t, "end_line"],
+ [lv_draw_mask_line_param, "start_line"],
+ [lv_draw_mask_line_param, "end_line"],
[uint16_t, "delta_deg"],
]
-lv_draw_mask_angle_param_t = ctypes.structure(lv_draw_mask_angle_param_t, "lv_draw_mask_angle_param_t")
+lv_draw_mask_angle_param = ctypes.structure(lv_draw_mask_angle_param, "lv_draw_mask_angle_param")
-lv_draw_mask_radius_param_cfg_t = [
- [lv_area_t, "rect"],
- [lv_coord_t, "radius"],
+lv_draw_mask_radius_param_cfg = [
+ [lv_area, "rect"],
+ [lv_coord, "radius"],
[uint8_t_1, "outer"],
]
-lv_draw_mask_radius_param_cfg_t = ctypes.structure(lv_draw_mask_radius_param_cfg_t, "lv_draw_mask_radius_param_cfg_t")
+lv_draw_mask_radius_param_cfg = ctypes.structure(lv_draw_mask_radius_param_cfg, "lv_draw_mask_radius_param_cfg")
-lv_sqrt_res_t = [
+lv_sqrt_res = [
[uint16_t, "i"],
[uint16_t, "f"],
]
-lv_sqrt_res_t = ctypes.structure(lv_sqrt_res_t, "lv_sqrt_res_t")
+lv_sqrt_res = ctypes.structure(lv_sqrt_res, "lv_sqrt_res")
-lv_draw_mask_radius_param_t = [
+lv_draw_mask_radius_param = [
#/*The first element must be the common descriptor*/
- [lv_draw_mask_common_dsc_t, "dsc"],
- [lv_draw_mask_radius_param_cfg_t, "cfg"],
+ [lv_draw_mask_common_dsc, "dsc"],
+ [lv_draw_mask_radius_param_cfg, "cfg"],
[int32_t, "y_prev"],
- [lv_sqrt_res_t, "y_prev_x"],
+ [lv_sqrt_res, "y_prev_x"],
]
-lv_draw_mask_radius_param_t = ctypes.structure(lv_draw_mask_radius_param_t, "lv_draw_mask_radius_param_t")
+lv_draw_mask_radius_param = ctypes.structure(lv_draw_mask_radius_param, "lv_draw_mask_radius_param")
-lv_draw_mask_fade_param_cfg_t = [
- [lv_area_t, "coords"],
- [lv_coord_t, "y_top"],
- [lv_coord_t, "y_bottom"],
- [lv_opa_t, "opa_top"],
- [lv_opa_t, "opa_bottom"],
+lv_draw_mask_fade_param_cfg = [
+ [lv_area, "coords"],
+ [lv_coord, "y_top"],
+ [lv_coord, "y_bottom"],
+ [lv_opa, "opa_top"],
+ [lv_opa, "opa_bottom"],
]
-lv_draw_mask_fade_param_cfg_t = ctypes.structure(lv_draw_mask_fade_param_cfg_t, "lv_draw_mask_fade_param_cfg_t")
+lv_draw_mask_fade_param_cfg = ctypes.structure(lv_draw_mask_fade_param_cfg, "lv_draw_mask_fade_param_cfg")
-lv_draw_mask_fade_param_t = [
+lv_draw_mask_fade_param = [
# /*The first element must be the common descriptor*/
- [lv_draw_mask_common_dsc_t, "dsc"],
- [lv_draw_mask_fade_param_cfg_t, "cfg"],
+ [lv_draw_mask_common_dsc, "dsc"],
+ [lv_draw_mask_fade_param_cfg, "cfg"],
]
-lv_draw_mask_fade_param_t = ctypes.structure(lv_draw_mask_fade_param_t, "lv_draw_mask_fade_param_t")
+lv_draw_mask_fade_param = ctypes.structure(lv_draw_mask_fade_param, "lv_draw_mask_fade_param")
-lv_draw_mask_map_param_cfg_t = [
- [lv_area_t, "coords"],
+lv_draw_mask_map_param_cfg = [
+ [lv_area, "coords"],
[ptr, "map"],
]
-lv_draw_mask_map_param_cfg_t = ctypes.structure(lv_draw_mask_map_param_cfg_t, "lv_draw_mask_map_param_cfg_t")
+lv_draw_mask_map_param_cfg = ctypes.structure(lv_draw_mask_map_param_cfg, "lv_draw_mask_map_param_cfg")
-lv_draw_mask_map_param_t = [
+lv_draw_mask_map_param = [
#/*The first element must be the common descriptor*/
- [lv_draw_mask_common_dsc_t, "dsc"],
- [lv_draw_mask_map_param_cfg_t, "cfg"],
+ [lv_draw_mask_common_dsc, "dsc"],
+ [lv_draw_mask_map_param_cfg, "cfg"],
]
-lv_draw_mask_map_param_t = ctypes.structure(lv_draw_mask_map_param_t, "lv_draw_mask_map_param_t")
+lv_draw_mask_map_param = ctypes.structure(lv_draw_mask_map_param, "lv_draw_mask_map_param")
-lv_draw_mask_saved_t = [
+lv_draw_mask_saved = [
[ptr, "param"],
[ptr, "custom_id"],
]
-lv_draw_mask_saved_t = ctypes.structure(lv_draw_mask_saved_t, "lv_draw_mask_saved_t")
+lv_draw_mask_saved = ctypes.structure(lv_draw_mask_saved, "lv_draw_mask_saved")
#
ctypes.print_classes()
@@ -286,7 +286,7 @@ ctypes.print_classes()
#- Ex
-bb=ctypes.buffer(lv_draw_line_dsc_t)
+bb=ctypes.buffer(lv_draw_line_dsc)
bb.color
bb.blend_mode
@@ -302,12 +302,12 @@ bb.raw_end = 1
bb.blend_mode=0
- bytes('FFFF0000000000000010')
-lv_draw_line_dsc_t = [
- [lv_color_t, "color"],
- [lv_style_int_t, "width"],
- [lv_style_int_t, "dash_width"],
- [lv_style_int_t, "dash_gap"],
- [lv_opa_t, "opa"],
+lv_draw_line_dsc = [
+ [lv_color, "color"],
+ [lv_style_int, "width"],
+ [lv_style_int, "dash_width"],
+ [lv_style_int, "dash_gap"],
+ [lv_opa, "opa"],
[uint8_t_2, "blend_mode"],
[uint8_t_1, "round_start"],
[uint8_t_1, "round_end"],
diff --git a/tasmota/lvgl_berry/be_lv_c_mapping.h b/tasmota/lvgl_berry/be_lv_c_mapping.h
index 95eeaeb33..2ffb0a49d 100644
--- a/tasmota/lvgl_berry/be_lv_c_mapping.h
+++ b/tasmota/lvgl_berry/be_lv_c_mapping.h
@@ -12,6 +12,16 @@ extern "C" {
/* `lv_img` methods */
#if BE_LV_WIDGET_IMG
const lvbe_call_c_t lv_img_func[] = {
+ { "buf_free", (void*) &lv_img_buf_free, "", "(lv_img_dsc)" },
+ { "buf_get_img_size", (void*) &lv_img_buf_get_img_size, "i", "ii(lv_img_cf)" },
+ { "buf_get_px_alpha", (void*) &lv_img_buf_get_px_alpha, "i", "(lv_img_dsc)ii" },
+ { "buf_get_px_color", (void*) &lv_img_buf_get_px_color, "lv_color", "(lv_img_dsc)ii(lv_color)" },
+ { "buf_set_palette", (void*) &lv_img_buf_set_palette, "", "(lv_img_dsc)i(lv_color)" },
+ { "buf_set_px_alpha", (void*) &lv_img_buf_set_px_alpha, "", "(lv_img_dsc)iii" },
+ { "buf_set_px_color", (void*) &lv_img_buf_set_px_color, "", "(lv_img_dsc)ii(lv_color)" },
+ { "cf_get_px_size", (void*) &lv_img_cf_get_px_size, "i", "(lv_img_cf)" },
+ { "cf_has_alpha", (void*) &lv_img_cf_has_alpha, "b", "(lv_img_cf)" },
+ { "cf_is_chroma_keyed", (void*) &lv_img_cf_is_chroma_keyed, "b", "(lv_img_cf)" },
{ "create", (void*) &lv_img_create, "+lv_img", "(lv_obj)(lv_obj)" },
{ "get_angle", (void*) &lv_img_get_angle, "i", "(lv_obj)" },
{ "get_antialias", (void*) &lv_img_get_antialias, "b", "(lv_obj)" },
@@ -149,6 +159,7 @@ const lvbe_call_c_t lv_group_func[] = {
{ "focus_prev", (void*) &lv_group_focus_prev, "", "(lv_group)" },
{ "get_click_focus", (void*) &lv_group_get_click_focus, "b", "(lv_group)" },
{ "get_editing", (void*) &lv_group_get_editing, "b", "(lv_group)" },
+ { "get_focus_cb", (void*) &lv_group_get_focus_cb, "lv_group_focus_cb", "(lv_group)" },
{ "get_focused", (void*) &lv_group_get_focused, "lv_obj", "(lv_group)" },
{ "get_wrap", (void*) &lv_group_get_wrap, "b", "(lv_group)" },
{ "remove_all_objs", (void*) &lv_group_remove_all_objs, "", "(lv_group)" },
@@ -203,11 +214,13 @@ const lvbe_call_c_t lv_obj_func[] = {
{ "get_child_back", (void*) &lv_obj_get_child_back, "lv_obj", "(lv_obj)(lv_obj)" },
{ "get_click", (void*) &lv_obj_get_click, "b", "(lv_obj)" },
{ "get_coords", (void*) &lv_obj_get_coords, "", "(lv_obj)(lv_area)" },
+ { "get_design_cb", (void*) &lv_obj_get_design_cb, "lv_design_cb", "(lv_obj)" },
{ "get_drag", (void*) &lv_obj_get_drag, "b", "(lv_obj)" },
{ "get_drag_dir", (void*) &lv_obj_get_drag_dir, "i", "(lv_obj)" },
{ "get_drag_parent", (void*) &lv_obj_get_drag_parent, "b", "(lv_obj)" },
{ "get_drag_throw", (void*) &lv_obj_get_drag_throw, "b", "(lv_obj)" },
{ "get_draw_rect_ext_pad_size", (void*) &lv_obj_get_draw_rect_ext_pad_size, "i", "(lv_obj)i" },
+ { "get_event_cb", (void*) &lv_obj_get_event_cb, "lv_event_cb", "(lv_obj)" },
{ "get_ext_attr", (void*) &lv_obj_get_ext_attr, ".", "(lv_obj)" },
{ "get_ext_click_pad_bottom", (void*) &lv_obj_get_ext_click_pad_bottom, "i", "(lv_obj)" },
{ "get_ext_click_pad_left", (void*) &lv_obj_get_ext_click_pad_left, "i", "(lv_obj)" },
@@ -229,6 +242,7 @@ const lvbe_call_c_t lv_obj_func[] = {
{ "get_parent_event", (void*) &lv_obj_get_parent_event, "b", "(lv_obj)" },
{ "get_protect", (void*) &lv_obj_get_protect, "i", "(lv_obj)" },
{ "get_screen", (void*) &lv_obj_get_screen, "lv_obj", "(lv_obj)" },
+ { "get_signal_cb", (void*) &lv_obj_get_signal_cb, "lv_signal_cb", "(lv_obj)" },
{ "get_state", (void*) &lv_obj_get_state, "i", "(lv_obj)i" },
{ "get_style_bg_blend_mode", (void*) &lv_obj_get_style_bg_blend_mode, "i", "(lv_obj)i" },
{ "get_style_bg_color", (void*) &lv_obj_get_style_bg_color, "lv_color", "(lv_obj)i" },
@@ -472,6 +486,7 @@ const lvbe_call_c_t lv_obj_func[] = {
{ "set_width_margin", (void*) &lv_obj_set_width_margin, "", "(lv_obj)i" },
{ "set_x", (void*) &lv_obj_set_x, "", "(lv_obj)i" },
{ "set_y", (void*) &lv_obj_set_y, "", "(lv_obj)i" },
+ { "signal_send", (void*) &lv_obj_signal_send, "i", "(lv_obj)i." },
};
/* `lv_arc` methods */
@@ -772,7 +787,7 @@ const lvbe_call_c_t lv_imgbtn_func[] = {
#if BE_LV_WIDGET_KEYBOARD
const lvbe_call_c_t lv_keyboard_func[] = {
{ "create", (void*) &lv_keyboard_create, "+lv_keyboard", "(lv_obj)(lv_obj)" },
- { "def_event_cb", (void*) &lv_keyboard_def_event_cb, "", "(lv_obj)(lv_event)" },
+ { "def_event_cb", (void*) &lv_keyboard_def_event_cb, "", "(lv_obj)i" },
{ "get_cursor_manage", (void*) &lv_keyboard_get_cursor_manage, "b", "(lv_obj)" },
{ "get_mode", (void*) &lv_keyboard_get_mode, "i", "(lv_obj)" },
{ "get_textarea", (void*) &lv_keyboard_get_textarea, "lv_obj", "(lv_obj)" },
@@ -1159,7 +1174,7 @@ const lvbe_call_c_t lv_win_func[] = {
{ "add_btn_left", (void*) &lv_win_add_btn_left, "lv_obj", "(lv_obj)." },
{ "add_btn_right", (void*) &lv_win_add_btn_right, "lv_obj", "(lv_obj)." },
{ "clean", (void*) &lv_win_clean, "", "(lv_obj)" },
- { "close_event_cb", (void*) &lv_win_close_event_cb, "", "(lv_obj)(lv_event)" },
+ { "close_event_cb", (void*) &lv_win_close_event_cb, "", "(lv_obj)i" },
{ "create", (void*) &lv_win_create, "+lv_win", "(lv_obj)(lv_obj)" },
{ "focus", (void*) &lv_win_focus, "", "(lv_obj)(lv_obj)(lv_anim_enable)" },
{ "get_anim_time", (void*) &lv_win_get_anim_time, "i", "(lv_obj)" },
diff --git a/tasmota/xdrv_52_2_berry_native.ino b/tasmota/xdrv_52_2_berry_native.ino
index 410c9b959..2f07aacca 100644
--- a/tasmota/xdrv_52_2_berry_native.ino
+++ b/tasmota/xdrv_52_2_berry_native.ino
@@ -314,11 +314,10 @@ extern "C" {
* Optional argument:
* - return_type: the C function return value is int32_t and is converted to the
* relevant Berry object depending on this char:
- * '0' (default): nil, no value
+ * '' (default): nil, no value
* 'i' be_int
* 'b' be_boot
* 's' be_str
- * 'o' instance of `lv_obj` (needs to be improved)
*
* - arg_type: optionally check the types of input arguments, or throw an error
* string of argument types, '+' marks optional arguments
@@ -326,6 +325,7 @@ extern "C" {
* 'i' be_int
* 'b' be_bool
* 's' be_string
+ * 'c' C callback
* 'lv_obj' be_instance of type or subtype
* '0'..'5' callback
*
@@ -394,6 +394,8 @@ int32_t be_convert_single_elt(bvm *vm, int32_t idx, const char * arg_type = null
int32_t ret = 0;
char provided_type = 0;
idx = be_absindex(vm, idx); // make sure we have an absolute index
+
+ // berry_log_C(">> 0 idx=%i arg_type=%s", idx, arg_type ? arg_type : "NULL");
if (arg_type == nullptr) { arg_type = "."; } // if no type provided, replace with wildchar
size_t arg_type_len = strlen(arg_type);
@@ -453,7 +455,7 @@ int32_t be_convert_single_elt(bvm *vm, int32_t idx, const char * arg_type = null
if (be_isint(vm, idx)) { ret = be_toint(vm, idx); provided_type = 'i'; }
else if (be_isbool(vm, idx)) { ret = be_tobool(vm, idx); provided_type = 'b'; }
else if (be_isstring(vm, idx)) { ret = (int32_t) be_tostring(vm, idx); provided_type = 's'; }
- else if (be_iscomptr(vm, idx)) { ret = (int32_t) be_tocomptr(vm, idx); provided_type = 'i'; }
+ else if (be_iscomptr(vm, idx)) { ret = (int32_t) be_tocomptr(vm, idx); provided_type = 'c'; }
// check if simple type was a match
if (provided_type) {
@@ -470,34 +472,45 @@ int32_t be_convert_single_elt(bvm *vm, int32_t idx, const char * arg_type = null
// non-simple type
if (be_isinstance(vm, idx)) {
- be_getmember(vm, idx, ".p");
- int32_t ret = be_convert_single_elt(vm, -1, nullptr); // recurse
- be_pop(vm, 1);
-
- if (arg_type_len > 1) {
- // Check type
- be_classof(vm, idx);
- bool class_found = be_getglobal(vm, arg_type);
- // Stack: class_of_idx, class_of_target (or nil)
- if (class_found) {
- if (!be_isderived(vm, -2)) {
- berry_log_P("Unexpected class type '%s', expected '%s'", be_classname(vm, idx), arg_type);
- }
- } else {
- berry_log_P("Unable to find class '%s' (%d)", arg_type, arg_type_len);
- }
+ // check if the instance is a subclass of `bytes()``
+ be_getbuiltin(vm, "bytes"); // add "list" class
+ if (be_isderived(vm, idx)) {
+ be_pop(vm, 1);
+ be_getmember(vm, idx, "_buffer");
+ be_pushvalue(vm, idx);
+ be_call(vm, 1);
+ int32_t ret = (int32_t) be_tocomptr(vm, -2);
be_pop(vm, 2);
- } else if (arg_type[0] != '.') {
- berry_log_P("Unexpected instance type '%s', expected '%s'", be_classname(vm, idx), arg_type);
- }
+ return ret;
+ } else {
+ be_pop(vm, 1);
+ be_getmember(vm, idx, ".p");
+ int32_t ret = be_convert_single_elt(vm, -1, nullptr); // recurse
+ be_pop(vm, 1);
- return ret;
+ if (arg_type_len > 1) {
+ // Check type
+ be_classof(vm, idx);
+ bool class_found = be_getglobal(vm, arg_type);
+ // Stack: class_of_idx, class_of_target (or nil)
+ if (class_found) {
+ if (!be_isderived(vm, -2)) {
+ berry_log_P("Unexpected class type '%s', expected '%s'", be_classname(vm, idx), arg_type);
+ }
+ } else {
+ berry_log_P("Unable to find class '%s' (%d)", arg_type, arg_type_len);
+ }
+ be_pop(vm, 2);
+ } else if (arg_type[0] != '.') {
+ berry_log_P("Unexpected instance type '%s', expected '%s'", be_classname(vm, idx), arg_type);
+ }
+
+ return ret;
+ }
} else {
be_raise(vm, kTypeError, nullptr);
}
- //
-
return ret;
}
diff --git a/tasmota/xdrv_52_3_berry_lvgl.ino b/tasmota/xdrv_52_3_berry_lvgl.ino
index 7e2ce71c4..85e66aaba 100644
--- a/tasmota/xdrv_52_3_berry_lvgl.ino
+++ b/tasmota/xdrv_52_3_berry_lvgl.ino
@@ -230,7 +230,7 @@ void be_check_arg_type(bvm *vm, int32_t argc, const char * arg_type, int32_t p[5
void be_check_arg_type(bvm *vm, int32_t argc, const char * arg_type, int32_t p[5]) {
bool arg_type_check = (arg_type != nullptr); // is type checking activated
int32_t arg_idx = 0; // position in arg_type string
- char type_short_name[16];
+ char type_short_name[32];
for (uint32_t i = 0; i < argc; i++) {
type_short_name[0] = 0; // clear string
@@ -293,15 +293,15 @@ extern "C" {
if (argc > 1) {
obj1 = (lv_obj_t*) be_convert_single_elt(vm, 2);
}
- if (argc > 2) {
+ if (argc > 2 && !be_isnil(vm, 3)) {
obj2 = (lv_obj_t*) be_convert_single_elt(vm, 3);
}
// AddLog(LOG_LEVEL_INFO, "argc %d obj1 %p obj2 %p", argc, obj1, obj2);
fn_any_callable f = (fn_any_callable) func;
// AddLog(LOG_LEVEL_INFO, ">> be_call_c_func(%p) - %p,%p,%p,%p,%p", f, p[0], p[1], p[2], p[3], p[4]);
lv_obj_t * obj;
- if ((int32_t)obj1 == -1) { // special semantics of first ptr is -1, then just encapsulate
- obj = obj2;
+ if ((int32_t)obj2 == -1) { // special semantics if second ptr is -1, then just encapsulate
+ obj = obj1;
} else { // otherwise call the LVGL creator
obj = (lv_obj_t*) (*f)((int32_t)obj1, (int32_t)obj2, 0, 0, 0);
}
@@ -338,36 +338,33 @@ extern "C" {
// look for class descriptor
int32_t class_idx = bin_search(class_name, &lv_classes[0].name, sizeof(lv_classes[0]), lv_classes_size);
- if (class_idx < 0) {
- // class not found, abort
- // berry_log_C("lvx_member class not found");
- be_return_nil(vm);
- }
- const lvbe_call_c_t * methods_calls = lv_classes[class_idx].func_table;
- size_t methods_size = lv_classes[class_idx].size;
+ if (class_idx >= 0) {
+ const lvbe_call_c_t * methods_calls = lv_classes[class_idx].func_table;
+ size_t methods_size = lv_classes[class_idx].size;
- int32_t method_idx = bin_search(method_name, methods_calls, sizeof(lvbe_call_c_t), methods_size);
- if (method_idx >= 0) {
- // method found
- const lvbe_call_c_t * method = &methods_calls[method_idx];
- // berry_log_C("lvx_member method found func=%p return_type=%s arg_type=%s", method->func, method->return_type, method->arg_type);
- // push native closure
- be_pushntvclosure(vm, &lvx_call_c, 3); // 3 upvals
+ int32_t method_idx = bin_search(method_name, methods_calls, sizeof(lvbe_call_c_t), methods_size);
+ if (method_idx >= 0) {
+ // method found
+ const lvbe_call_c_t * method = &methods_calls[method_idx];
+ // berry_log_C("lvx_member method found func=%p return_type=%s arg_type=%s", method->func, method->return_type, method->arg_type);
+ // push native closure
+ be_pushntvclosure(vm, &lvx_call_c, 3); // 3 upvals
- be_pushcomptr(vm, method->func);
- be_setupval(vm, -2, 0);
- be_pop(vm, 1);
+ be_pushcomptr(vm, method->func);
+ be_setupval(vm, -2, 0);
+ be_pop(vm, 1);
- be_pushstring(vm, method->return_type);
- be_setupval(vm, -2, 1);
- be_pop(vm, 1);
+ be_pushstring(vm, method->return_type);
+ be_setupval(vm, -2, 1);
+ be_pop(vm, 1);
- be_pushstring(vm, method->arg_type);
- be_setupval(vm, -2, 2);
- be_pop(vm, 1);
+ be_pushstring(vm, method->arg_type);
+ be_setupval(vm, -2, 2);
+ be_pop(vm, 1);
- // all good
- be_return(vm);
+ // all good
+ be_return(vm);
+ }
}
// get super if any, or nil if none
@@ -393,7 +390,7 @@ extern "C" {
fn_any_callable f = (fn_any_callable) func;
be_check_arg_type(vm, argc, arg_type, p);
- // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func(%p) - %p,%p,%p,%p,%p - %s", f, p[0], p[1], p[2], p[3], p[4], return_type);
+ // berry_log_C(">> be_call_c_func(%p) - %p,%p,%p,%p,%p - %s", f, p[0], p[1], p[2], p[3], p[4], return_type ? return_type : "NULL");
int32_t ret = (*f)(p[0], p[1], p[2], p[3], p[4]);
// AddLog(LOG_LEVEL_INFO, ">> be_call_c_func, ret = %p", ret);
if ((return_type == nullptr) || (strlen(return_type) == 0)) { be_return_nil(vm); } // does not return
@@ -403,14 +400,15 @@ extern "C" {
case 'i': be_pushint(vm, ret); break;
case 'b': be_pushbool(vm, ret); break;
case 's': be_pushstring(vm, (const char*) ret); break;
+ case 'c': be_pushint(vm, ret); break; // TODO missing 'c' general callback type
default: be_raise(vm, "internal_error", "Unsupported return type"); break;
}
be_return(vm);
} else { // class name
// AddLog(LOG_LEVEL_INFO, ">> be_call_c_func, create_obj", ret);
be_getglobal(vm, return_type); // stack = class
- be_pushcomptr(vm, (void*) -1); // stack = class, -1
- be_pushcomptr(vm, (void*) ret); // stack = class, -1, ptr
+ 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, -1, ptr
be_pop(vm, 2); // stack = instance
be_return(vm);
@@ -949,7 +947,7 @@ extern "C" {
int lvx_tostring(bvm *vm) {
lv_obj_t * obj = (lv_obj_t*) lv_get_arg(vm, 1);
const char * classname = be_classname(vm, 1);
- char s[32];
+ char s[48];
snprintf(s, sizeof(s), "", classname, obj);
be_pushnstring(vm, s, strlen(s)); /* make escape string from buffer */
be_return(vm);
@@ -1007,6 +1005,19 @@ extern "C" {
}
}
+// ======================================================================
+// Patch for ill-named functions
+// ======================================================================
+
+extern "C" {
+ // lv_signal_send should be renamed lv_obj_signal_send
+ // lv_res_t lv_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param);
+ lv_res_t lv_obj_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param) {
+ return lv_signal_send(obj, signal, param);
+ }
+}
+
+
#include "lvgl_berry/be_lv_c_mapping.h"
#else // USE_LVGL
diff --git a/tasmota/xdrv_52_7_berry_embedded.ino b/tasmota/xdrv_52_7_berry_embedded.ino
index 37995bce2..d97fb565e 100644
--- a/tasmota/xdrv_52_7_berry_embedded.ino
+++ b/tasmota/xdrv_52_7_berry_embedded.ino
@@ -96,12 +96,26 @@ const char berry_prog[] =
// "end "
// "lv = lvgl() "
"import lvgl as lv "
+ // 'lv_group_focus_cb', 'lv_event_cb', 'lv_signal_cb', 'lv_design_cb', 'lv_gauge_format_cb'
"_lvgl_cb = [ {}, {}, {}, {}, {}, {} ] "
"_lvgl_cb_obj = [ {}, {}, {}, {}, {}, {} ] "
"def _lvgl_cb_dispatch(idx, obj, v1, v2, v3, v4) "
// "import string print(string.format('>>> idx=%i obj=0x%08X v1=%i', idx, obj, v1)) "
"var func = _lvgl_cb[idx].find(obj) "
"var inst = _lvgl_cb_obj[idx].find(obj) "
+ // convert arguments to ctypes if needed
+
+ // typedef void (*lv_group_focus_cb_t)(struct _lv_group_t *);
+ // typedef void (*lv_event_cb_t)(struct _lv_obj_t * obj, lv_event_t event);
+ // typedef lv_res_t (*lv_signal_cb_t)(struct _lv_obj_t * obj, lv_signal_t sign, void * param);
+ // typedef lv_design_res_t (*lv_design_cb_t)(struct _lv_obj_t * obj, const lv_area_t * clip_area, lv_design_mode_t mode);
+ // typedef void (*lv_gauge_format_cb_t)(lv_obj_t * gauge, char * buf, int bufsize, int32_t value);
+
+ "if idx == 3 "
+ // lv_signal_cb - arg2 is lv_area
+ "v1 = lv_area(v1) "
+ "end "
+
"if func != nil "
"return func(inst, v1, v2, v3, v4) "
"end "
diff --git a/tools/lv_berry/convert.py b/tools/lv_berry/convert.py
index 483b53c82..8b35f32ad 100644
--- a/tools/lv_berry/convert.py
+++ b/tools/lv_berry/convert.py
@@ -75,9 +75,14 @@ return_types = {
"lv_border_side_t": "i",
"lv_align_t": "i",
"lv_keyboard_mode_t": "i",
- # "lv_group_focus_cb_t": "i",
"lv_indev_type_t": "i",
+ "lv_event_t": "i",
+ "lv_signal_t": "i",
+ # "lv_signal_cb_t": "c",
+ # "lv_design_cb_t": "c",
+ # "lv_event_cb_t": "c",
+ # "lv_group_focus_cb_t": "c",
"lv_obj_t *": "lv_obj",
"lv_color_t": "lv_color",
@@ -85,19 +90,27 @@ return_types = {
"lv_group_t *": "lv_group",
#"lv_disp_t*": "lv_disp",
#"lv_style_list_t*": "",
+
+ # callbacks
+ "lv_group_focus_cb_t": "lv_group_focus_cb",
+ "lv_event_cb_t": "lv_event_cb",
+ "lv_signal_cb_t": "lv_signal_cb",
+ "lv_design_cb_t": "lv_design_cb",
+ "lv_gauge_format_cb_t": "lv_gauge_format_cb",
}
lv = {}
lvs = [] # special case for case for lv_style
lv0 = [] # function in lvlg module
lv_module = []
-lv_cb_types = [] # list of callback types that will need each a separate C callback, later sorted by first argument
+lv_cb_types = ['lv_group_focus_cb', 'lv_event_cb', 'lv_signal_cb', 'lv_design_cb', 'lv_gauge_format_cb']
+# list of callback types that will need each a separate C callback
lv_widgets = ['arc', 'bar', 'btn', 'btnmatrix', 'calendar', 'canvas', 'chart', 'checkbox',
'cont', 'cpicker', 'dropdown', 'gauge', 'img', 'imgbtn', 'keyboard', 'label', 'led', 'line',
'linemeter', 'list', 'msgbox', 'objmask', 'templ', 'page', 'roller', 'slider', 'spinbox',
'spinner', 'switch', 'table', 'tabview', 'textarea', 'tileview', 'win']
-lv_prefix = ['obj', 'group', 'style', 'indev'] + lv_widgets
+lv_prefix = ['obj', 'group', 'style', 'indev', ] + lv_widgets
def try_int(s):
try:
@@ -115,6 +128,7 @@ def c_convert_ret_type(c_ret):
with open(lv_widgets_file) as f:
for l_raw in f:
l_raw = re.sub('//.*$', '', l_raw) # remove trailing comments
+ l_raw = re.sub('LV_ATTRIBUTE_FAST_MEM ', '', l_raw) # remove LV_ATTRIBUTE_FAST_MEM marker
l_raw = re.sub('\s+', ' ', l_raw) # replace any multi-space with a single space
l_raw = l_raw.strip(" \t\n\r") # remove leading or trailing spaces
l_raw = re.sub('static ', '', l_raw)
@@ -128,12 +142,16 @@ with open(lv_widgets_file) as f:
ret_type = g.group(1) # return type of the function
# Ex: ret_type -> 'void'
- if ret_type not in return_types:
+ ret_type_without_t = re.sub(r"_t$", "", ret_type)
+ if ret_type in return_types:
+ # convert return type
+ c_ret = c_convert_ret_type(ret_type)
+ elif ret_type_without_t in lv_cb_types:
+ c_ret = "c" # general callback, if not already captured by explicit type
+ else:
print(f" // Skipping unsupported return type: {ret_type}")
continue
- # convert return type
- c_ret = c_convert_ret_type(ret_type)
# convert arguments
c_args = ""
@@ -155,7 +173,7 @@ with open(lv_widgets_file) as f:
ga_type = re.sub(r"_t$", "", ga_type)
# if the type is a single letter, we just add it
- if len(ga_type) == 1:
+ if len(ga_type) == 1 and ga_type != 'c': # callbacks are different
c_args += ga_type
else:
if ga_type.endswith("_cb"):
@@ -175,22 +193,25 @@ with open(lv_widgets_file) as f:
c_func_name = ""
+ if func_name == "lv_style_init":
+ continue # no need for init as it would collied with native init (and called behind the scene anyways)
+
found = False
for subtype in lv_prefix:
- if func_name == "lv_style_init": continue # no need for init as it would collied with native init (and called behind the scene anyways)
if func_name.startswith("lv_" + subtype + "_"):
be_name = re.sub("^lv_" + subtype + "_", '', func_name)
c_func_name = "lvbe_" + subtype + "_" + be_name
if subtype not in lv: lv[subtype] = [] # add entry
# special case if the function is create, we change the return type to macth the class
- # if be_name == 'create':
- # c_ret = "lv_" + subtype
- # lv0.append( [ c_func_name, c_ret, c_args, func_name, subtype ] ) # also add to lvgl
lv[subtype].append( [ c_func_name, c_ret, c_args, func_name, be_name ] )
found = True
break
if found: continue
+ # not found, we treat it as lv top level function
+ be_name = re.sub("^lv_", '', func_name)
+ lv0.append( [ func_name, c_ret, c_args, func_name, be_name ] )
+ # print(lv0[-1])
print("| callback types"+str(lv_cb_types))
@@ -444,7 +465,7 @@ for subtype, flv in lv.items():
print(f" {{ NULL, NULL }}")
print(f" }};")
print(f" be_regclass(vm, \"lv_{subtype}\", members);")
- if subtype != "obj" and subtype != "group": # lv_obj and lv_group do not inherit from lv_obj
+ if subtype in lv_widgets: # only for subclasses of lv_obj
print()
print(f" be_getglobal(vm, \"lv_{subtype}\");")
print(f" be_getglobal(vm, \"lv_obj\");")
@@ -460,7 +481,7 @@ for subtype, flv in lv.items():
print(f"}};")
print()
print(f"/* @const_object_info_begin")
- if subtype != "obj" and subtype != "group": # lv_obj and lv_group do not inherit from lv_obj
+ if subtype in lv_widgets: # only for subclasses of lv_obj
print(f"class be_class_lv_{subtype} (scope: global, name: lv_{subtype}, super: be_class_lv_obj) {{")
else:
print(f"class be_class_lv_{subtype} (scope: global, name: lv_{subtype}) {{")
@@ -524,24 +545,43 @@ extern int lv0_screenshot(bvm *vm);
static int lv_get_hor_res(void) {
return lv_disp_get_hor_res(lv_disp_get_default());
}
-static int lv_get_ver_res(bvm *vm) {
+static int lv_get_ver_res(void) {
return lv_disp_get_ver_res(lv_disp_get_default());
}
/* `lv` methods */
const lvbe_call_c_t lv_func[] = {
- // resolution
- { "get_hor_res", (void*) &lv_get_hor_res, "i", "" },
- { "get_ver_res", (void*) &lv_get_ver_res, "i", "" },
+""")
- // layers
- { "layer_sys", (void*) &lv_layer_sys, "lv_obj", "" },
- { "layer_top", (void*) &lv_layer_top, "lv_obj", "" },
+func_out = {} # used to sort output
+for f in lv0:
+ c_func_name = f[0]
+ c_ret_type = f[1]
+ c_argc = f[2]
+ if c_argc is not None: c_argc = "\"" + c_argc + "\""
+ orig_func_name = f[3]
+ be_name = f[4]
+ func_out[be_name] = f" {{ \"{be_name}\", (void*) &{orig_func_name}, \"{c_ret_type}\", { c_argc if c_argc else 'nullptr'} }},"
- // screens
- { "scr_act", (void*) &lv_scr_act, "lv_obj", "" },
- { "scr_load", (void*) &lv_scr_load, "", "(lv_obj)" },
- { "scr_load_anim", (void*) &lv_scr_load_anim, "", "(lv_obj)iiib" },
+for be_name in sorted(func_out):
+ print(func_out[be_name])
+
+
+
+
+ # // resolution
+ # { "get_hor_res", (void*) &lv_get_hor_res, "i", "" },
+ # { "get_ver_res", (void*) &lv_get_ver_res, "i", "" },
+
+ # // layers
+ # { "layer_sys", (void*) &lv_layer_sys, "lv_obj", "" },
+ # { "layer_top", (void*) &lv_layer_top, "lv_obj", "" },
+
+ # // screens
+ # { "scr_act", (void*) &lv_scr_act, "lv_obj", "" },
+ # { "scr_load", (void*) &lv_scr_load, "", "(lv_obj)" },
+ # { "scr_load_anim", (void*) &lv_scr_load_anim, "", "(lv_obj)iiib" },
+print("""
};
const size_t lv_func_size = sizeof(lv_func) / sizeof(lv_func[0]);
@@ -574,17 +614,7 @@ print("""
};
const size_t lv0_constants_size = sizeof(lv0_constants)/sizeof(lv0_constants[0]);
-""")
-
-for f in lv0:
- c_func_name = f[0]
- print(f"extern int {c_func_name}(bvm *vm);")
-
-
-print("""
#if !BE_USE_PRECOMPILED_OBJECT
-//#if 1 // TODO we will do pre-compiled later
-
be_native_module_attr_table(lvgl) {
// Symbols
@@ -686,15 +716,6 @@ print("""
be_native_module_function("load_freetype_font", lv0_load_freetype_font),
be_native_module_function("screenshot", lv0_screenshot),
-""")
-
-for f in lv0:
-
- c_func_name = f[0]
- be_name = f[4]
- print(f" be_native_module_function(\"{be_name}\", {c_func_name}),")
-
-print("""
};
be_define_native_module(lvgl, NULL);
@@ -849,16 +870,6 @@ print("""
load_freetype_font, func(lv0_load_freetype_font)
screenshot, func(lv0_screenshot)
-
-""")
-
-for f in lv0:
-
- c_func_name = f[0]
- be_name = f[4]
- print(f" {be_name}, func({c_func_name})")
-
-print("""
}
@const_object_info_end */
#include "../generate/be_fixed_lvgl.h"
diff --git a/tools/lv_berry/lv_module.h b/tools/lv_berry/lv_module.h
index a47312f24..fa4fb8b7f 100644
--- a/tools/lv_berry/lv_module.h
+++ b/tools/lv_berry/lv_module.h
@@ -618,3 +618,18 @@ TEXTAREA_CURSOR_LAST
// };
+LV_DRAW_MASK_RES_TRANSP
+LV_DRAW_MASK_RES_FULL_COVER
+LV_DRAW_MASK_RES_CHANGED
+LV_DRAW_MASK_RES_UNKNOWN
+
+LV_DRAW_MASK_TYPE_LINE
+LV_DRAW_MASK_TYPE_ANGLE
+LV_DRAW_MASK_TYPE_RADIUS
+LV_DRAW_MASK_TYPE_FADE
+LV_DRAW_MASK_TYPE_MAP
+
+LV_DRAW_MASK_LINE_SIDE_LEFT
+LV_DRAW_MASK_LINE_SIDE_RIGHT
+LV_DRAW_MASK_LINE_SIDE_TOP
+LV_DRAW_MASK_LINE_SIDE_BOTTOM
diff --git a/tools/lv_berry/lv_widgets.h b/tools/lv_berry/lv_widgets.h
index 5e3553196..3e709a6ef 100644
--- a/tools/lv_berry/lv_widgets.h
+++ b/tools/lv_berry/lv_widgets.h
@@ -158,7 +158,6 @@ void lv_event_send_refresh_recursive(lv_obj_t * obj);
// lv_res_t lv_event_send_func(lv_event_cb_t event_xcb, lv_obj_t * obj, lv_event_t event, const void * data);
const void * lv_event_get_data(void);
void lv_obj_set_signal_cb(lv_obj_t * obj, lv_signal_cb_t signal_cb);
-lv_res_t lv_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param);
void lv_obj_set_design_cb(lv_obj_t * obj, lv_design_cb_t design_cb);
void * lv_obj_allocate_ext_attr(lv_obj_t * obj, uint16_t ext_size);
void lv_obj_refresh_ext_draw_pad(lv_obj_t * obj);
@@ -1163,3 +1162,82 @@ void lv_win_focus(lv_obj_t * win, lv_obj_t * obj, lv_anim_enable_t anim_en);
static inline void lv_win_scroll_hor(lv_obj_t * win, lv_coord_t dist)
static inline void lv_win_scroll_ver(lv_obj_t * win, lv_coord_t dist)
+// ======================================================================
+// Patch
+// ======================================================================
+
+// lv_signal_send should be renamed lv_obj_signal_send
+// lv_res_t lv_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param);
+lv_res_t lv_obj_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param);
+
+// ======================================================================
+// LV top level functions
+// ======================================================================
+
+// resolution
+lv_coord_t lv_get_hor_res(void);
+lv_coord_t lv_get_ver_res(void);
+
+// layers
+static inline lv_obj_t * lv_layer_sys(void);
+static inline lv_obj_t * lv_layer_top(void);
+
+// screens
+static inline lv_obj_t * lv_scr_act(void);
+static inline void lv_scr_load(lv_obj_t * scr);
+void lv_scr_load_anim(lv_obj_t * scr, lv_scr_load_anim_t anim_type, uint32_t time, uint32_t delay, bool auto_del);
+
+lv_res_t lv_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param);
+
+// ======================================================================
+// LV DRAW
+// ======================================================================
+
+void lv_draw_arc(lv_coord_t center_x, lv_coord_t center_y, uint16_t radius, uint16_t start_angle, uint16_t end_angle, const lv_area_t * clip_area, const lv_draw_line_dsc_t * dsc);
+
+LV_ATTRIBUTE_FAST_MEM void _lv_blend_fill(const lv_area_t * clip_area, const lv_area_t * fill_area, lv_color_t color, lv_opa_t * mask, lv_draw_mask_res_t mask_res, lv_opa_t opa, lv_blend_mode_t mode);
+LV_ATTRIBUTE_FAST_MEM void _lv_blend_map(const lv_area_t * clip_area, const lv_area_t * map_area, const lv_color_t * map_buf, lv_opa_t * mask, lv_draw_mask_res_t mask_res, lv_opa_t opa, lv_blend_mode_t mode);
+
+void lv_draw_img_dsc_init(lv_draw_img_dsc_t * dsc);
+void lv_draw_img(const lv_area_t * coords, const lv_area_t * mask, const void * src, const lv_draw_img_dsc_t * dsc);
+lv_img_src_t lv_img_src_get_type(const void * src);
+uint8_t lv_img_cf_get_px_size(lv_img_cf_t cf);
+bool lv_img_cf_is_chroma_keyed(lv_img_cf_t cf);
+bool lv_img_cf_has_alpha(lv_img_cf_t cf);
+
+LV_ATTRIBUTE_FAST_MEM void lv_draw_label_dsc_init(lv_draw_label_dsc_t * dsc);
+LV_ATTRIBUTE_FAST_MEM void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_draw_label_dsc_t * dsc, const char * txt, lv_draw_label_hint_t * hint);
+
+LV_ATTRIBUTE_FAST_MEM void lv_draw_line(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * clip, const lv_draw_line_dsc_t * dsc);
+LV_ATTRIBUTE_FAST_MEM void lv_draw_line_dsc_init(lv_draw_line_dsc_t * dsc);
+
+int16_t lv_draw_mask_add(void * param, void * custom_id);
+LV_ATTRIBUTE_FAST_MEM lv_draw_mask_res_t lv_draw_mask_apply(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len);
+void * lv_draw_mask_remove_id(int16_t id);
+void * lv_draw_mask_remove_custom(void * custom_id);
+LV_ATTRIBUTE_FAST_MEM uint8_t lv_draw_mask_get_cnt(void);
+void lv_draw_mask_line_points_init(lv_draw_mask_line_param_t * param, lv_coord_t p1x, lv_coord_t p1y, lv_coord_t p2x, lv_coord_t p2y, lv_draw_mask_line_side_t side);
+void lv_draw_mask_line_angle_init(lv_draw_mask_line_param_t * param, lv_coord_t p1x, lv_coord_t py, int16_t angle, lv_draw_mask_line_side_t side);
+void lv_draw_mask_angle_init(lv_draw_mask_angle_param_t * param, lv_coord_t vertex_x, lv_coord_t vertex_y, lv_coord_t start_angle, lv_coord_t end_angle);
+void lv_draw_mask_radius_init(lv_draw_mask_radius_param_t * param, const lv_area_t * rect, lv_coord_t radius, bool inv);
+void lv_draw_mask_fade_init(lv_draw_mask_fade_param_t * param, const lv_area_t * coords, lv_opa_t opa_top, lv_coord_t y_top, lv_opa_t opa_bottom, lv_coord_t y_bottom);
+void lv_draw_mask_map_init(lv_draw_mask_map_param_t * param, const lv_area_t * coords, const lv_opa_t * map);
+
+void lv_draw_rect(const lv_area_t * coords, const lv_area_t * mask, const lv_draw_rect_dsc_t * dsc);
+void lv_draw_px(const lv_point_t * point, const lv_area_t * clip_area, const lv_style_t * style);
+
+void lv_draw_triangle(const lv_point_t points[], const lv_area_t * clip, const lv_draw_rect_dsc_t * draw_dsc);
+void lv_draw_polygon(const lv_point_t points[], uint16_t point_cnt, const lv_area_t * mask, const lv_draw_rect_dsc_t * draw_dsc);
+
+lv_img_dsc_t * lv_img_buf_alloc(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf);
+lv_color_t lv_img_buf_get_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t color);
+lv_opa_t lv_img_buf_get_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y);
+void lv_img_buf_set_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t c);
+void lv_img_buf_set_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_opa_t opa);
+void lv_img_buf_set_palette(lv_img_dsc_t * dsc, uint8_t id, lv_color_t c);
+void lv_img_buf_free(lv_img_dsc_t * dsc);
+uint32_t lv_img_buf_get_img_size(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf);
+
+// void lv_img_cache_set_size(uint16_t new_slot_num);
+// void lv_img_cache_invalidate_src(const void * src);
+
From 499134e1bc11c066ccb756448ac462071e0b2117 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 13 Jul 2021 11:40:13 +0200
Subject: [PATCH 12/16] Release of Tasmota WebInstaller
---
CHANGELOG.md | 4 +++-
RELEASENOTES.md | 9 ++++++++-
tasmota/support_features.ino | 4 +++-
tasmota/xsns_89_t67xx.ino | 2 +-
tools/decode-status.py | 4 ++--
5 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3e4c11eb3..124e5227d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,10 +8,12 @@ All notable changes to this project will be documented in this file.
- Initial support for Tasmota Mesh (TasMesh) providing node/broker communication using ESP-NOW (#11939)
- MQTT minimum password length restriction in GUI (#12553)
- Command ``SetOption127 1`` to force Wifi in no-sleep mode even if ``Sleep 0`` is not enabled
-- IRremoteESP8266 library from v2.7.18 to v2.7.19
+- Support for Technoline WS2300-15 Anemometer (#12573)
+- Support for Telaire T6700 Series CO2 sensor by Alexander Savchenko (#12618)
### Changed
- ESP32 core library from v1.0.7 to v1.0.7.1
+- IRremoteESP8266 library from v2.7.18 to v2.7.19
- ESP32 Ethernet Phy Type information to IDF v3+
- Allow buttons to work in AP normal mode (#12518)
- Enable Ping and rule features for any device compiled with more than 1M flash size (#12539)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 2c7e4034c..84ccc6d9d 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -38,6 +38,10 @@ In addition to TLS using fingerprints now also user supplied CA certs, AWS IoT a
For initial configuration this release supports Webserver based **WifiManager** or **Serial** based command interface only. Support for **WPS** and **SmartConfig** has been removed.
+## Initial installation
+
+Easy initial installation of Tasmota can be performed using the [Tasmota WebInstaller](https://arendst.github.io/Tasmota/).
+
## Provided Binary Downloads
### ESP8266 or ESP8285 based
@@ -52,7 +56,6 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- **tasmota-display.bin** = The Display version without Energy Monitoring but adds display support for 1M+ flash.
- **tasmota-zbbridge.bin** = The dedicated Sonoff Zigbee Bridge version for 2M+ flash.
- **tasmota-zigbee.bin** = The dedicated cc25xx Zigbee Bridge version for 4M+ flash.
-- **tasmota-minimal.bin** = The Minimal version allows intermediate OTA uploads to support larger versions and does NOT change any persistent parameter for 1M+ flash. This version **should NOT be used for initial installation**.
Above binaries are also available as gzipped version allowing faster uploads.
@@ -97,15 +100,19 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
## Changelog v9.5.0.2
### Added
+- Release of [Tasmota WebInstaller](https://arendst.github.io/Tasmota/)
- Command ``SetOption127 1`` to force Wifi in no-sleep mode even if ``Sleep 0`` is not enabled
- Initial support for Tasmota Mesh (TasMesh) providing node/broker communication using ESP-NOW [#11939](https://github.com/arendst/Tasmota/issues/11939)
- Berry ESP32 partition manager [#12465](https://github.com/arendst/Tasmota/issues/12465)
- Support for AM2320 Temperature and Humidity Sensor by Lars Wessels [#12485](https://github.com/arendst/Tasmota/issues/12485)
- Rule event support as JSON payload [#12496](https://github.com/arendst/Tasmota/issues/12496)
- MQTT minimum password length restriction in GUI [#12553](https://github.com/arendst/Tasmota/issues/12553)
+- Support for Technoline WS2300-15 Anemometer [#12573](https://github.com/arendst/Tasmota/issues/12573)
+- Support for Telaire T6700 Series CO2 sensor by Alexander Savchenko [#12618](https://github.com/arendst/Tasmota/issues/12618)
### Changed
- ESP32 core library from v1.0.6 to v1.0.7.1
+- IRremoteESP8266 library from v2.7.18 to v2.7.19
- ESP32 Ethernet Phy Type information to IDF v3+
- Speed up initial GUI console refresh
- Enable UFILESYS, GUI_TRASH_FILE and GUI_EDIT_FILE for any device compiled with more than 1M flash size
diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino
index 661315c00..fba6b5e6e 100644
--- a/tasmota/support_features.ino
+++ b/tasmota/support_features.ino
@@ -746,7 +746,9 @@ void ResponseAppendFeatures(void)
#if defined(USE_I2C) && defined(USE_AM2320)
feature8 |= 0x00000040;
#endif
-// feature8 |= 0x00000080;
+#if defined(USE_I2C) && defined(USE_T67XX)
+ feature8 |= 0x00000080;
+#endif
// feature8 |= 0x00000100;
// feature8 |= 0x00000200;
diff --git a/tasmota/xsns_89_t67xx.ino b/tasmota/xsns_89_t67xx.ino
index 204b5fadb..0abeb4f98 100644
--- a/tasmota/xsns_89_t67xx.ino
+++ b/tasmota/xsns_89_t67xx.ino
@@ -1,7 +1,7 @@
/*
xsns_89_t67xx.ino - Telaire T6700 Series CO2 sensor support for Tasmota
- Copyright (c) 2021 Alexander Savchenko (alexander@savchenko.by)
+ Copyright (c) 2021 Alexander Savchenko (alexander@savchenko.by)
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
diff --git a/tools/decode-status.py b/tools/decode-status.py
index b4a7ba16d..00b1e7aee 100755
--- a/tools/decode-status.py
+++ b/tools/decode-status.py
@@ -254,7 +254,7 @@ a_features = [[
"USE_TOF10120","USE_SDM72","USE_DISPLAY_TM1637","USE_PROJECTOR_CTRL"
],[
"USE_MPU_ACCEL","USE_TFMINIPLUS","USE_CSE7761","USE_BERRY",
- "USE_BM8563","USE_ENERGY_DUMMY","USE_AM2320","",
+ "USE_BM8563","USE_ENERGY_DUMMY","USE_AM2320","USE_T67XX",
"","","","",
"","","","",
"","","","",
@@ -288,7 +288,7 @@ else:
obj = json.load(fp)
def StartDecode():
- print ("\n*** decode-status.py v20210627 by Theo Arends and Jacek Ziolkowski ***")
+ print ("\n*** decode-status.py v20210713 by Theo Arends and Jacek Ziolkowski ***")
# print("Decoding\n{}".format(obj))
From bd148f0775139cba28b6d7614b0be9db87f28fab Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 13 Jul 2021 11:43:50 +0200
Subject: [PATCH 13/16] Add Tasmota WebInstaller
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index db8aafd5c..3f8e113d7 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,8 @@ 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/).
+
## Development
[](https://github.com/arendst/Tasmota)
From a7297892ab0f7960f50f549ebd34d420d6d844de Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 13 Jul 2021 12:01:46 +0200
Subject: [PATCH 14/16] Update T67XX default configs
---
tasmota/my_user_config.h | 4 ++--
tasmota/tasmota_configurations.h | 5 ++++-
tasmota/tasmota_configurations_ESP32.h | 5 ++++-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index dbb51063c..16df7aa0a 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -575,7 +575,6 @@
#define USE_APDS9960_PROXIMITY // Enable APDS9960 Proximity feature (>50 code)
#define USE_APDS9960_COLOR // Enable APDS9960 Color feature (+0.8k code)
#define USE_APDS9960_STARTMODE 0 // Default to enable Gesture mode
-// #define USE_T67XX // Enable Telaire T67XX CO2 sensor (+1.3k code)
// #define USE_MCP230xx // [I2cDriver22] Enable MCP23008/MCP23017 - Must define I2C Address in #define USE_MCP230xx_ADDR below - range 0x20 - 0x27 (+5k1 code)
// #define USE_MCP230xx_ADDR 0x20 // Enable MCP23008/MCP23017 I2C Address to use (Must be within range 0x20 through 0x26 - set according to your wired setup)
// #define USE_MCP230xx_OUTPUT // Enable MCP23008/MCP23017 OUTPUT support through sensor29 commands (+2k2 code)
@@ -635,8 +634,9 @@
// #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_MPU_ACCEL // [I2cDriver58] Enable MPU6886/MPU9250 - found in M5Stack - support both I2C buses on ESP32 (I2C address 0x68) (+2k code)
-// #define USE_BM8563 // [I2cDriver59] Enable BM8563 RTC - found in M5Stack - support both I2C buses on ESP32 (I2C address 0x51) (+2.5k code)
+// #define USE_BM8563 // [I2cDriver59] Enable BM8563 RTC - found in M5Stack - support both I2C buses on ESP32 (I2C address 0x51) (+2k5 code)
// #define USE_AM2320 // [I2cDriver60] Enable AM2320 temperature and humidity Sensor (I2C address 0x5C) (+1k code)
+// #define USE_T67XX // [I2cDriver61] Enable Telaire T67XX CO2 sensor (I2C address 0x15) (+1k3 code)
// #define USE_DISPLAY // Add I2C Display Support (+2k code)
#define USE_DISPLAY_MODES1TO5 // Enable display mode 1 to 5 in addition to mode 0
#define USE_DISPLAY_LCD // [DisplayModel 1] [I2cDriver3] Enable Lcd display (I2C addresses 0x27 and 0x3F) (+6k code)
diff --git a/tasmota/tasmota_configurations.h b/tasmota/tasmota_configurations.h
index 1330accc2..c77b2c03e 100644
--- a/tasmota/tasmota_configurations.h
+++ b/tasmota/tasmota_configurations.h
@@ -143,12 +143,15 @@
//#define USE_EZORGB // [I2cDriver55] Enable support for EZO's RGB sensor (+0k5 code) - Shared EZO code required for any EZO device (+1k2 code)
//#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_MPU_ACCEL // [I2cDriver58] Enable MPU6886/MPU9250 - found in M5Stack - support both I2C buses on ESP32 (I2C address 0x68) (+2k code)
+//#define USE_BM8563 // [I2cDriver59] Enable BM8563 RTC - found in M5Stack - support both I2C buses on ESP32 (I2C address 0x51) (+2k5 code)
+//#define USE_AM2320 // [I2cDriver60] Enable AM2320 temperature and humidity Sensor (I2C address 0x5C) (+1k code)
+//#define USE_T67XX // [I2cDriver61] Enable Telaire T67XX CO2 sensor (I2C address 0x15) (+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_RC522 // Add support for MFRC522 13.56Mhz Rfid reader (+6k code)
#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
-#define USE_T67XX // Add support for T67XX CO2 sensor (+1.3k code)
#define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
#ifndef CO2_LOW
#define CO2_LOW 800 // Below this CO2 value show green light (needs PWM or WS2812 RG(B) led and enable with SetOption18 1)
diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h
index c0380cb47..5f944082d 100644
--- a/tasmota/tasmota_configurations_ESP32.h
+++ b/tasmota/tasmota_configurations_ESP32.h
@@ -302,8 +302,11 @@
//#define USE_EZORGB // [I2cDriver55] Enable support for EZO's RGB sensor (+0k5 code) - Shared EZO code required for any EZO device (+1k2 code)
//#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_MPU_ACCEL // [I2cDriver58] Enable MPU6886/MPU9250 - found in M5Stack - support both I2C buses on ESP32 (I2C address 0x68) (+2k code)
+//#define USE_BM8563 // [I2cDriver59] Enable BM8563 RTC - found in M5Stack - support both I2C buses on ESP32 (I2C address 0x51) (+2k5 code)
+//#define USE_AM2320 // [I2cDriver60] Enable AM2320 temperature and humidity Sensor (I2C address 0x5C) (+1k code)
+//#define USE_T67XX // [I2cDriver61] Enable Telaire T67XX CO2 sensor (I2C address 0x15) (+1k3 code)
-//#define USE_T67XX // Add support for T67XX CO2 sensor (+1.3k code)
//#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
//#define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
#ifndef CO2_LOW
From 179d25155dff62bfdf75f78a0ce4ed628f438522 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Tue, 13 Jul 2021 14:44:59 +0200
Subject: [PATCH 15/16] Move PSRAM cache fixe definitions in boards.json
* PSRAM defs are in boards.json
* -mfix-esp32-psram-cache-strategy=memw
* -mfix-esp32-psram-cache-strategy=memw
* -mfix-esp32-psram-cache-strategy=memw
---
boards/esp32-cam.json | 2 +-
boards/esp32-m5core2.json | 2 +-
boards/esp32-odroid.json | 2 +-
platformio_tasmota_env32.ini | 6 +++---
4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/boards/esp32-cam.json b/boards/esp32-cam.json
index 52f9ee817..ce02822f5 100644
--- a/boards/esp32-cam.json
+++ b/boards/esp32-cam.json
@@ -4,7 +4,7 @@
"ldscript": "esp32_out.ld"
},
"core": "esp32",
- "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue",
+ "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dout",
diff --git a/boards/esp32-m5core2.json b/boards/esp32-m5core2.json
index e358f9778..21789a077 100644
--- a/boards/esp32-m5core2.json
+++ b/boards/esp32-m5core2.json
@@ -4,7 +4,7 @@
"ldscript": "esp32_out.ld"
},
"core": "esp32",
- "extra_flags": "-DARDUINO_M5STACK_Core2 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue",
+ "extra_flags": "-DARDUINO_M5STACK_Core2 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dout",
diff --git a/boards/esp32-odroid.json b/boards/esp32-odroid.json
index a5aca814e..690119675 100644
--- a/boards/esp32-odroid.json
+++ b/boards/esp32-odroid.json
@@ -4,7 +4,7 @@
"ldscript": "esp32_out.ld"
},
"core": "esp32",
- "extra_flags": "-DARDUINO_ODROID_ESP32 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue",
+ "extra_flags": "-DARDUINO_ODROID_ESP32 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dout",
diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini
index fbe68f545..c7443be68 100644
--- a/platformio_tasmota_env32.ini
+++ b/platformio_tasmota_env32.ini
@@ -55,19 +55,19 @@ build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
[env:tasmota32-webcam]
extends = env:tasmota32_base
board = esp32-cam
-build_flags = ${env:tasmota32_base.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -lc-psram-workaround -lm-psram-workaround -DFIRMWARE_WEBCAM
+build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_WEBCAM
lib_extra_dirs = lib/libesp32, lib/lib_basic
[env:tasmota32-odroidgo]
extends = env:tasmota32_base
board = esp32-odroid
-build_flags = ${env:tasmota32_base.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -lc-psram-workaround -lm-psram-workaround -DFIRMWARE_ODROID_GO
+build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_ODROID_GO
lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div, lib/lib_ssl, lib/lib_display
[env:tasmota32-core2]
extends = env:tasmota32_base
board = esp32-m5core2
-build_flags = ${env:tasmota32_base.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -lc-psram-workaround -lm-psram-workaround -DFIRMWARE_M5STACK_CORE2
+build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_M5STACK_CORE2
lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div, lib/lib_ssl, lib/lib_display, lib/lib_audio
[env:tasmota32-bluetooth]
From 5abadbf221268fcfd80096a3e1b05db28a485b02 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 13 Jul 2021 16:44:28 +0200
Subject: [PATCH 16/16] Fix ESP32 do not use chip temperature sensor as global
temperature if external temperature sensor is used (#12630)
---
CHANGELOG.md | 1 +
RELEASENOTES.md | 1 +
tasmota/support.ino | 43 ++++++++++++++++++++++++-------
tasmota/support_esp.ino | 2 +-
tasmota/support_tasmota.ino | 30 +++++++++++++++++++++
tasmota/tasmota.ino | 6 -----
tasmota/xsns_87_esp32_sensors.ino | 11 +++++++-
7 files changed, 76 insertions(+), 18 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 124e5227d..a8022faa8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -28,6 +28,7 @@ All notable changes to this project will be documented in this file.
- AM2320 value reporting (#12552)
- Exception 28 when unable to send MQTT message and a topic name without a slash '/' (#12555)
- Wi-Fi initial setup workaround for 11n only routers (#12566)
+- ESP32 do not use chip temperature sensor as global temperature if external temperature sensor is used (#12630)
## [9.5.0.1] 20210701
### Added
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 84ccc6d9d..dc46ac674 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -135,6 +135,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
- Zigbee Hue angle encoding [#12545](https://github.com/arendst/Tasmota/issues/12545)
- Exception 28 when unable to send MQTT message and a topic name without a slash '/' [#12555](https://github.com/arendst/Tasmota/issues/12555)
- Wi-Fi initial setup workaround for 11n only routers [#12566](https://github.com/arendst/Tasmota/issues/12566)
+- ESP32 do not use chip temperature sensor as global temperature if external temperature sensor is used [#12630](https://github.com/arendst/Tasmota/issues/12630)
### Noted
- ESP32 single core **tasmota32solo1.bin** binary can only be uploaded using the GUI as OTA upload will trigger the watchdog timer
\ No newline at end of file
diff --git a/tasmota/support.ino b/tasmota/support.ino
index b58a04aad..e85983807 100644
--- a/tasmota/support.ino
+++ b/tasmota/support.ino
@@ -720,31 +720,37 @@ char* GetPowerDevice(char* dest, uint32_t idx, size_t size)
return GetPowerDevice(dest, idx, size, 0);
}
-float ConvertTemp(float c)
-{
+float ConvertTempToFahrenheit(float c) {
float result = c;
- TasmotaGlobal.global_update = TasmotaGlobal.uptime;
- TasmotaGlobal.temperature_celsius = c;
-
if (!isnan(c) && Settings->flag.temperature_conversion) { // SetOption8 - Switch between Celsius or Fahrenheit
- result = c * 1.8 + 32; // Fahrenheit
+ result = c * 1.8 + 32; // Fahrenheit
}
result = result + (0.1 * Settings->temp_comp);
return result;
}
-float ConvertTempToCelsius(float c)
-{
+float ConvertTempToCelsius(float c) {
float result = c;
- if (!isnan(c) && Settings->flag.temperature_conversion) { // SetOption8 - Switch between Celsius or Fahrenheit
- result = (c - 32) / 1.8; // Celsius
+ if (!isnan(c) && !Settings->flag.temperature_conversion) { // SetOption8 - Switch between Celsius or Fahrenheit
+ result = (c - 32) / 1.8; // Celsius
}
result = result + (0.1 * Settings->temp_comp);
return result;
}
+void UpdateGlobalTemperature(float c) {
+ TasmotaGlobal.global_update = TasmotaGlobal.uptime;
+ TasmotaGlobal.temperature_celsius = c;
+}
+
+float ConvertTemp(float c) {
+ UpdateGlobalTemperature(c);
+
+ return ConvertTempToFahrenheit(c);
+}
+
char TempUnit(void)
{
// SetOption8 - Switch between Celsius or Fahrenheit
@@ -1328,6 +1334,23 @@ bool ResponseContains_P(const char* needle) {
#endif
}
+/*
+uint32_t ResponseContains_P(const char* needle) {
+ const char *tmp;
+#ifdef MQTT_DATA_STRING
+ tmp = TasmotaGlobal.mqtt_data.c_str();
+#else
+ tmp = TasmotaGlobal.mqtt_data;
+#endif
+ uint32_t count = 0;
+ while (tmp = strstr_P(tmp, needle)) {
+ count++;
+ tmp++;
+ }
+ return count;
+}
+*/
+
/*********************************************************************************************\
* GPIO Module and Template management
\*********************************************************************************************/
diff --git a/tasmota/support_esp.ino b/tasmota/support_esp.ino
index b2799b337..9ec26b785 100644
--- a/tasmota/support_esp.ino
+++ b/tasmota/support_esp.ino
@@ -487,7 +487,7 @@ void *special_calloc(size_t num, size_t size) {
}
float CpuTemperature(void) {
- return ConvertTemp(temperatureRead());
+ return (float)temperatureRead(); // In Celsius
}
/*
diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino
index c519fc1a5..a3b22a9f8 100644
--- a/tasmota/support_tasmota.ino
+++ b/tasmota/support_tasmota.ino
@@ -837,6 +837,36 @@ bool MqttShowSensor(void)
XsnsCall(FUNC_JSON_APPEND);
XdrvCall(FUNC_JSON_APPEND);
+ if (TasmotaGlobal.global_update) {
+ if ((TasmotaGlobal.humidity > 0) || !isnan(TasmotaGlobal.temperature_celsius) || (TasmotaGlobal.pressure_hpa != 0)) {
+ uint32_t add_comma = 0;
+ ResponseAppend_P(PSTR(",\"Global\":{"));
+ if (!isnan(TasmotaGlobal.temperature_celsius)) {
+ float t = ConvertTempToFahrenheit(TasmotaGlobal.temperature_celsius);
+ ResponseAppend_P(PSTR("\"" D_JSON_TEMPERATURE "\":%*_f"),
+ Settings->flag2.temperature_resolution, &t);
+ add_comma++;
+ }
+ if (TasmotaGlobal.humidity > 0) {
+ ResponseAppend_P(PSTR("%s\"" D_JSON_HUMIDITY "\":%*_f"),
+ (add_comma)?",":"", Settings->flag2.humidity_resolution, &TasmotaGlobal.humidity);
+ add_comma++;
+ }
+ if (2 == add_comma) {
+ float dewpoint = CalcTempHumToDew(TasmotaGlobal.temperature_celsius, TasmotaGlobal.humidity);
+ ResponseAppend_P(PSTR("%s\"" D_JSON_DEWPOINT "\":%*_f"),
+ (add_comma)?",":"", Settings->flag2.temperature_resolution, &dewpoint);
+ }
+ if (TasmotaGlobal.pressure_hpa != 0) {
+ float p = ConvertPressure(TasmotaGlobal.pressure_hpa);
+ float s = ConvertPressureForSeaLevel(TasmotaGlobal.pressure_hpa);
+ ResponseAppend_P(PSTR("%s\"" D_JSON_PRESSURE "\":%*_f,\"" D_JSON_PRESSUREATSEALEVEL "\":%*_f"),
+ (add_comma)?",":"", Settings->flag2.pressure_resolution, &p, Settings->flag2.pressure_resolution, &s);
+ }
+ ResponseJsonEnd();
+ }
+ }
+
bool json_data_available = (ResponseLength() - json_data_start);
if (ResponseContains_P(PSTR(D_JSON_PRESSURE))) {
ResponseAppend_P(PSTR(",\"" D_JSON_PRESSURE_UNIT "\":\"%s\""), PressureUnit().c_str());
diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino
index db3b28cf3..52dad8f3e 100644
--- a/tasmota/tasmota.ino
+++ b/tasmota/tasmota.ino
@@ -193,15 +193,11 @@ struct {
char mqtt_client[99]; // Composed MQTT Clientname
char mqtt_topic[TOPSZ]; // Composed MQTT topic
-#ifdef ESP8266
#ifdef PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48_SECHEAP_SHARED
char* log_buffer = nullptr; // Log buffer in IRAM
#else
char log_buffer[LOG_BUFFER_SIZE]; // Log buffer in DRAM
#endif // PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48_SECHEAP_SHARED
-#else // Not ESP8266
- char log_buffer[LOG_BUFFER_SIZE]; // Log buffer in DRAM
-#endif // ESP8266
} TasmotaGlobal;
TSettings* Settings = nullptr;
@@ -262,7 +258,6 @@ void setup(void) {
// Serial.setRxBufferSize(INPUT_BUFFER_SIZE); // Default is 256 chars
TasmotaGlobal.seriallog_level = LOG_LEVEL_INFO; // Allow specific serial messages until config loaded
-#ifdef ESP8266
#ifdef PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48_SECHEAP_SHARED
ESP.setIramHeap();
Settings = (TSettings*)malloc(sizeof(TSettings)); // Allocate in "new" 16k heap space
@@ -275,7 +270,6 @@ void setup(void) {
TasmotaGlobal.log_buffer[0] = '\0';
}
#endif // PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48_SECHEAP_SHARED
-#endif // ESP8266
if (Settings == nullptr) {
Settings = (TSettings*)malloc(sizeof(TSettings));
}
diff --git a/tasmota/xsns_87_esp32_sensors.ino b/tasmota/xsns_87_esp32_sensors.ino
index 2cadd0cd9..f4ac6e758 100644
--- a/tasmota/xsns_87_esp32_sensors.ino
+++ b/tasmota/xsns_87_esp32_sensors.ino
@@ -52,7 +52,16 @@ void Esp32SensorInit(void) {
#endif // CONFIG_IDF_TARGET_ESP32
void Esp32SensorShow(bool json) {
- float t = CpuTemperature();
+ static bool add_global_temp = false;
+
+ if (json) {
+ add_global_temp = !ResponseContains_P(PSTR(D_JSON_TEMPERATURE));
+ }
+ float c = CpuTemperature(); // in Celsius
+ if (add_global_temp) {
+ UpdateGlobalTemperature(c);
+ }
+ float t = ConvertTempToFahrenheit(c);
#if CONFIG_IDF_TARGET_ESP32
int value = 0;