diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f6351450a..2f3081d31 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -7,7 +7,7 @@ - [ ] Only relevant files were touched - [ ] Only one feature/fix was added per PR and the code change compiles without warnings - [ ] The code change is tested and works with Tasmota core ESP8266 V.2.7.4.9 - - [ ] The code change is tested and works with Tasmota core ESP32 V.1.0.7.5 + - [ ] The code change is tested and works with Tasmota core ESP32 V.2.0.1 - [ ] I accept the [CLA](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md#contributor-license-agreement-cla). _NOTE: The code change must pass CI tests. **Your PR cannot be merged unless tests pass**_ diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a85f404d..cd72e5052 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,21 +3,31 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - Development +## [10.0.0.2] +### Added +- Support for HDC2010 temperature/humidity sensor by Luc Boudreau (#13633) + +### Changed +- ESP32 core library from v1.0.7.5 to v2.0.1 + ## [10.0.0.1] ### Added - Berry add module ``python_compat`` to be closer to Python syntax (#13428) - 1 second heartbeat GPIO +- Command ``TcpConfig`` for TCPBridge protocol configuration (#13565) ### Changed - File editor no-wrap (#13427) - ESP32 core library from v1.0.7.4 to v1.0.7.5 -- ESP32C3 core library from v2.0.0-post to v2.0.1-rc1 +- ESP32-C3 core library from v2.0.0-post to v2.0.1-rc1 ### Fixed - Initial reset RTC memory based variables like EnergyToday and EnergyTotal - ESP32 Telegram compile error (#13435) - SML compile error (#13441) - GUI checkbox MQTT TLS not saved regression from v9.2.0.3 (#13442) +- Discovery of shutters (#13572) +- ESP32-C3 OneWire as used by DS18x20 (#13583) ## [Released] diff --git a/I2CDEVICES.md b/I2CDEVICES.md index 07094954b..65b38dae9 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -97,3 +97,4 @@ Index | Define | Driver | Device | Address(es) | Description 61 | USE_T67XX | xsns_89 | T67XX | 0x15 | CO2 sensor 62 | USE_SCD40 | xsns_92 | SCD40 | 0x62 | CO2 sensor Sensirion SCD40/SCD41 63 | USE_HM330X | xsns_93 | HM330X | 0x40 | Particule sensor + 64 | USE_HDC2010 | xsns_94 | HDC2010 | 0x40 | Temperature and Humidity sensor diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 4c85900cd..af4c13ba3 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -100,20 +100,25 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo [Complete list](BUILDS.md) of available feature and sensors. -## Changelog v10.0.0.1 +## Changelog v10.0.0.2 ### Added - 1 second heartbeat GPIO - ESP32 Berry add module ``python_compat`` to be closer to Python syntax [#13428](https://github.com/arendst/Tasmota/issues/13428) +- Command ``TcpConfig`` for TCPBridge protocol configuration [#13565](https://github.com/arendst/Tasmota/issues/13565) +- Support for HDC2010 temperature/humidity sensor by Luc Boudreau [#13633](https://github.com/arendst/Tasmota/issues/13633) ### Breaking Changed ### Changed - File editor no-wrap [#13427](https://github.com/arendst/Tasmota/issues/13427) -- ESP32 core library from v1.0.7.4 to v1.0.7.5 -- ESP32C3 core library from v2.0.0-post to v2.0.1-rc1 +- ESP32 core library from v1.0.7.4 to v2.0.1 +- ESP32-C3 core library from v2.0.0-post to v2.0.1-rc1 ### Fixed - Initial reset RTC memory based variables like EnergyToday and EnergyTotal - ESP32 Telegram compile error [#13435](https://github.com/arendst/Tasmota/issues/13435) - SML compile error [#13441](https://github.com/arendst/Tasmota/issues/13441) - GUI checkbox MQTT TLS not saved regression from v9.2.0.3 [#13442](https://github.com/arendst/Tasmota/issues/13442) +- Discovery of shutters [#13572](https://github.com/arendst/Tasmota/issues/13572) +- ESP32-C3 OneWire as used by DS18x20 [#13583](https://github.com/arendst/Tasmota/issues/13583) + diff --git a/lib/default/TasmotaLList/library.json b/lib/default/TasmotaLList/library.json new file mode 100644 index 000000000..d49f03f71 --- /dev/null +++ b/lib/default/TasmotaLList/library.json @@ -0,0 +1,14 @@ +{ + "name": "TasmotaLList", + "version": "1.0", + "description": "Simple yet powerful linked-list", + "license": "MIT", + "homepage": "https://github.com/arendst/Tasmota", + "frameworks": "*", + "platforms": "*", + "authors": + { + "name": "Stephan Hadinger", + "maintainer": true + } + } diff --git a/tasmota/support_light_list.ino b/lib/default/TasmotaLList/src/LList.h similarity index 97% rename from tasmota/support_light_list.ino rename to lib/default/TasmotaLList/src/LList.h index eaaea1322..82653448b 100644 --- a/tasmota/support_light_list.ino +++ b/lib/default/TasmotaLList/src/LList.h @@ -1,5 +1,5 @@ /* - support_light_list.ino - Lightweight Linked List for simple objects - optimized for low code size and low memory + LList.h - Lightweight Linked List for simple objects - optimized for low code size and low memory Copyright (C) 2021 Theo Arends and Stephan Hadinger @@ -17,6 +17,11 @@ along with this program. If not, see . */ +#ifndef __LLIST__ +#define __LLIST__ + +#include + /*********************************************************************************************\ * * private class for Linked List element @@ -206,3 +211,5 @@ T & LList::addToLast(LList_elt * elt) { elt->_next = nullptr; return elt->_val; } + +#endif // __LLIST__ \ No newline at end of file diff --git a/lib/lib_basic/OneWire-Stickbreaker-20190506-1.1/OneWire.h b/lib/lib_basic/OneWire-Stickbreaker-20190506-1.1/OneWire.h index 9290221cd..eb20f2b20 100644 --- a/lib/lib_basic/OneWire-Stickbreaker-20190506-1.1/OneWire.h +++ b/lib/lib_basic/OneWire-Stickbreaker-20190506-1.1/OneWire.h @@ -197,6 +197,9 @@ void directWriteHigh(IO_REG_TYPE pin) static inline __attribute__((always_inline)) void directModeInput(IO_REG_TYPE pin) { +#if CONFIG_IDF_TARGET_ESP32C3 + GPIO.enable_w1tc.val = ((uint32_t)1 << (pin)); +#else if ( digitalPinIsValid(pin) ) { #if ESP_IDF_VERSION_MAJOR < 4 // IDF 3.x ESP32/PICO-D4 @@ -208,9 +211,6 @@ void directModeInput(IO_REG_TYPE pin) ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown); } #elif ESP_IDF_VERSION_MAJOR > 3 // ESP32-S2 needs IDF 4.2 or later -#if CONFIG_IDF_TARGET_ESP32C3 - // Esp32c3 has no full RTC IO subsystem, so GPIO is 100% "independent" of RTC -#else // plain ESP32 uint32_t rtc_reg(rtc_io_desc[pin].reg); if ( rtc_reg ) // RTC pins PULL settings @@ -219,16 +219,11 @@ void directModeInput(IO_REG_TYPE pin) ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[pin].pullup | rtc_io_desc[pin].pulldown); } #endif -#endif -#if CONFIG_IDF_TARGET_ESP32C3 - GPIO.enable_w1tc.val = ((uint32_t)1 << (pin - 32)); -#else // plain ESP32 if ( pin < 32 ) GPIO.enable_w1tc = ((uint32_t)1 << pin); else GPIO.enable1_w1tc.val = ((uint32_t)1 << (pin - 32)); -#endif uint32_t pinFunction((uint32_t)2 << FUN_DRV_S); // what are the drivers? pinFunction |= FUN_IE; // input enable but required for output as well? @@ -238,11 +233,15 @@ void directModeInput(IO_REG_TYPE pin) GPIO.pin[pin].val = 0; } +#endif } static inline __attribute__((always_inline)) void directModeOutput(IO_REG_TYPE pin) { +#if CONFIG_IDF_TARGET_ESP32C3 + GPIO.enable_w1ts.val = ((uint32_t)1 << (pin)); +#else if ( digitalPinIsValid(pin) && pin <= 33 ) // pins above 33 can be only inputs { #if ESP_IDF_VERSION_MAJOR < 4 // IDF 3.x ESP32/PICO-D4 @@ -254,9 +253,6 @@ void directModeOutput(IO_REG_TYPE pin) ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown); } #elif ESP_IDF_VERSION_MAJOR > 3 // ESP32-S2 needs IDF 4.2 or later -#if CONFIG_IDF_TARGET_ESP32C3 - // Esp32c3 has no full RTC IO subsystem, so GPIO is 100% "independent" of RTC -#else // plain ESP32 uint32_t rtc_reg(rtc_io_desc[pin].reg); if ( rtc_reg ) // RTC pins PULL settings @@ -265,16 +261,11 @@ void directModeOutput(IO_REG_TYPE pin) ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[pin].pullup | rtc_io_desc[pin].pulldown); } #endif -#endif -#if CONFIG_IDF_TARGET_ESP32C3 - GPIO.enable_w1ts.val = ((uint32_t)1 << (pin - 32)); -#else // plain ESP32 if ( pin < 32 ) GPIO.enable_w1ts = ((uint32_t)1 << pin); else // already validated to pins <= 33 GPIO.enable1_w1ts.val = ((uint32_t)1 << (pin - 32)); -#endif uint32_t pinFunction((uint32_t)2 << FUN_DRV_S); // what are the drivers? pinFunction |= FUN_IE; // input enable but required for output as well? @@ -284,6 +275,7 @@ void directModeOutput(IO_REG_TYPE pin) GPIO.pin[pin].val = 0; } +#endif } #define DIRECT_READ(base, pin) directRead(pin) diff --git a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp index ff87d3112..6f66915f3 100755 --- a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp +++ b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp @@ -204,6 +204,8 @@ void WiFiClientSecure_light::_clear() { _ta_P = nullptr; _ta_size = 0; _max_thunkstack_use = 0; + _alpn_names = nullptr; + _alpn_num = 0; } // Constructor @@ -949,8 +951,6 @@ extern "C" { // we support only P256 EC curve for AWS IoT, no EC curve for Letsencrypt unless forced br_ssl_engine_set_ec(&cc->eng, &br_ec_p256_m15); // TODO #endif - static const char * alpn_mqtt = "mqtt"; - br_ssl_engine_set_protocol_names(&cc->eng, &alpn_mqtt, 1); } } @@ -983,6 +983,9 @@ bool WiFiClientSecure_light::_connectSSL(const char* hostName) { _eng = &_sc->eng; // Allocation/deallocation taken care of by the _sc shared_ptr br_ssl_client_base_init(_sc.get()); + if (_alpn_names && _alpn_num > 0) { + br_ssl_engine_set_protocol_names(_eng, _alpn_names, _alpn_num); + } // ============================================================ // Allocatte and initialize Decoder Context diff --git a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h index d0ff43407..3736749ab 100755 --- a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h +++ b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h @@ -93,6 +93,12 @@ class WiFiClientSecure_light : public WiFiClient { void setTrustAnchor(const br_x509_trust_anchor *ta, size_t ta_size); + void setALPN(const char **names, size_t num) { + // set ALPN extensions, used mostly by AWS IoT on port 443. Need to be static pointers + _alpn_names = names; + _alpn_num = num; + } + // Sets the requested buffer size for transmit and receive void setBufferSizes(int recv, int xmit); @@ -165,6 +171,10 @@ class WiFiClientSecure_light : public WiFiClient { // record the maximum use of ThunkStack for monitoring size_t _max_thunkstack_use; + // ALPN + const char ** _alpn_names; + size_t _alpn_num; + }; #define ERR_OOM -1000 @@ -237,6 +247,44 @@ class WiFiClientSecure_light : public WiFiClient { // #define BR_ERR_X509_WEAK_PUBLIC_KEY 60 // #define BR_ERR_X509_NOT_TRUSTED 62 +// Alert types for TLSContentType.ALERT messages +// See RFC 8466, section B.2 + +// CLOSE_NOTIFY = 0 +// UNEXPECTED_MESSAGE = 10 +// BAD_RECORD_MAC = 20 +// DECRYPTION_FAILED = 21 +// RECORD_OVERFLOW = 22 +// DECOMPRESSION_FAILURE = 30 +// HANDSHAKE_FAILURE = 40 +// NO_CERTIFICATE = 41 +// BAD_CERTIFICATE = 42 +// UNSUPPORTED_CERTIFICATE = 43 +// CERTIFICATE_REVOKED = 44 +// CERTIFICATE_EXPIRED = 45 +// CERTIFICATE_UNKNOWN = 46 +// ILLEGAL_PARAMETER = 47 +// UNKNOWN_CA = 48 +// ACCESS_DENIED = 49 +// DECODE_ERROR = 50 +// DECRYPT_ERROR = 51 +// EXPORT_RESTRICTION = 60 +// PROTOCOL_VERSION = 70 +// INSUFFICIENT_SECURITY = 71 +// INTERNAL_ERROR = 80 +// INAPPROPRIATE_FALLBACK = 86 +// USER_CANCELED = 90 +// NO_RENEGOTIATION = 100 +// MISSING_EXTENSION = 109 +// UNSUPPORTED_EXTENSION = 110 +// CERTIFICATE_UNOBTAINABLE = 111 +// UNRECOGNIZED_NAME = 112 +// BAD_CERTIFICATE_STATUS_RESPONSE = 113 +// BAD_CERTIFICATE_HASH_VALUE = 114 +// UNKNOWN_PSK_IDENTITY = 115 +// CERTIFICATE_REQUIRED = 116 +// NO_APPLICATION_PROTOCOL = 120 + }; #endif // USE_TLS diff --git a/lib/libesp32/Berry/default/be_driverlib.c b/lib/libesp32/Berry/default/be_driverlib.c index dbef17a94..13f1d211e 100644 --- a/lib/libesp32/Berry/default/be_driverlib.c +++ b/lib/libesp32/Berry/default/be_driverlib.c @@ -20,8 +20,8 @@ be_local_closure(init, /* name */ NULL, /* no sub protos */ 0, /* has constants */ NULL, /* no const */ - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 1]) { /* code */ 0x80000000, // 0000 RET 0 }) @@ -47,7 +47,7 @@ be_local_closure(get_tasmota, /* name */ /* K0 */ be_nested_string("tasmota", 424643812, 7), }), (be_nested_const_str("get_tasmota", 334356779, 11)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 2]) { /* code */ 0xB8060000, // 0000 GETNGBL R1 K0 0x80040200, // 0001 RET 1 R1 @@ -83,7 +83,7 @@ be_local_closure(add_cmd, /* name */ 0, /* has constants */ NULL, /* no const */ (be_nested_const_str("", 607256038, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 8]) { /* code */ 0x68100000, // 0000 GETUPV R4 U0 0x68140001, // 0001 GETUPV R5 U1 @@ -102,7 +102,7 @@ be_local_closure(add_cmd, /* name */ /* K1 */ be_nested_string("add_cmd", -933336417, 7), }), (be_nested_const_str("add_cmd", -933336417, 7)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 7]) { /* code */ 0xB80E0000, // 0000 GETNGBL R3 K0 0x8C0C0701, // 0001 GETMET R3 R3 K1 diff --git a/lib/libesp32/Berry/default/be_energylib.c b/lib/libesp32/Berry/default/be_energylib.c index a6fb58898..e115a8507 100644 --- a/lib/libesp32/Berry/default/be_energylib.c +++ b/lib/libesp32/Berry/default/be_energylib.c @@ -53,8 +53,8 @@ be_local_closure(init, /* name */ /* K2 */ be_nested_string("energy_struct", 1655792843, 13), /* K3 */ be_nested_string("_ptr", 306235816, 4), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 6]) { /* code */ 0xA4060000, // 0000 IMPORT R1 K0 0xB80A0400, // 0001 GETNGBL R2 K2 @@ -86,7 +86,7 @@ be_local_closure(read, /* name */ /* K1 */ be_nested_string("tomap", 612167626, 5), }), (be_nested_const_str("", 1160973142, 11)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 4]) { /* code */ 0xB8020000, // 0000 GETNGBL R0 K0 0x8C000101, // 0001 GETMET R0 R0 K1 @@ -114,7 +114,7 @@ be_local_closure(member, /* name */ /* K0 */ be_nested_string("_energy", 535372070, 7), }), (be_nested_const_str("member", 719708611, 6)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 3]) { /* code */ 0xB8060000, // 0000 GETNGBL R1 K0 0x88040200, // 0001 GETMBR R1 R1 R0 @@ -142,7 +142,7 @@ be_local_closure(setmember, /* name */ /* K0 */ be_nested_string("_energy", 535372070, 7), }), (be_nested_const_str("setmember", 1432909441, 9)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 3]) { /* code */ 0xB80A0000, // 0000 GETNGBL R2 K0 0x90080001, // 0001 SETMBR R2 R0 R1 diff --git a/lib/libesp32/Berry/default/be_gpio_lib.c b/lib/libesp32/Berry/default/be_gpio_lib.c index 650360101..3f0b2b3ed 100644 --- a/lib/libesp32/Berry/default/be_gpio_lib.c +++ b/lib/libesp32/Berry/default/be_gpio_lib.c @@ -9,6 +9,7 @@ // Tasmota specific +extern int gp_member(bvm *vm); extern int gp_pin_mode(bvm *vm); extern int gp_digital_write(bvm *vm); extern int gp_digital_read(bvm *vm); @@ -19,275 +20,7 @@ extern int gp_pin(bvm *vm); /* @const_object_info_begin module gpio (scope: global) { - LOW, int(0) - HIGH, int(1) - - INPUT, int(1) - OUTPUT, int(2) - PULLUP, int(4) - INPUT_PULLUP, int(5) - PULLDOWN, int(8) - INPUT_PULLDOWN, int(9) - OPEN_DRAIN, int(16) - OUTPUT_OPEN_DRAIN, int(18) - DAC, int(-1) - - RISING, int(1) - FALLING, int(2) - CHANGE, int(4) - - NONE, int(0) - KEY1, int(1) - KEY1_NP, int(2) - KEY1_INV, int(3) - KEY1_INV_NP, int(4) - SWT1, int(5) - SWT1_NP, int(6) - REL1, int(7) - REL1_INV, int(8) - LED1, int(9) - LED1_INV, int(10) - CNTR1, int(11) - CNTR1_NP, int(12) - PWM1, int(13) - PWM1_INV, int(14) - BUZZER, int(15) - BUZZER_INV, int(16) - LEDLNK, int(17) - LEDLNK_INV, int(18) - I2C_SCL, int(19) - I2C_SDA, int(20) - SPI_MISO, int(21) - SPI_MOSI, int(22) - SPI_CLK, int(23) - SPI_CS, int(24) - SPI_DC, int(25) - SSPI_MISO, int(26) - SSPI_MOSI, int(27) - SSPI_SCLK, int(28) - SSPI_CS, int(29) - SSPI_DC, int(30) - BACKLIGHT, int(31) - OLED_RESET, int(32) - IRSEND, int(33) - IRRECV, int(34) - RFSEND, int(35) - RFRECV, int(36) - DHT11, int(37) - DHT22, int(38) - SI7021, int(39) - DHT11_OUT, int(40) - DSB, int(41) - DSB_OUT, int(42) - WS2812, int(43) - MHZ_TXD, int(44) - MHZ_RXD, int(45) - PZEM0XX_TX, int(46) - PZEM004_RX, int(47) - PZEM016_RX, int(48) - PZEM017_RX, int(49) - SAIR_TX, int(50) - SAIR_RX, int(51) - PMS5003_TX, int(52) - PMS5003_RX, int(53) - SDS0X1_TX, int(54) - SDS0X1_RX, int(55) - SBR_TX, int(56) - SBR_RX, int(57) - SR04_TRIG, int(58) - SR04_ECHO, int(59) - SDM120_TX, int(60) - SDM120_RX, int(61) - SDM630_TX, int(62) - SDM630_RX, int(63) - TM1638CLK, int(64) - TM1638DIO, int(65) - TM1638STB, int(66) - MP3_DFR562, int(67) - HX711_SCK, int(68) - HX711_DAT, int(69) - TX2X_TXD_BLACK, int(70) - TUYA_TX, int(71) - TUYA_RX, int(72) - MGC3130_XFER, int(73) - MGC3130_RESET, int(74) - RF_SENSOR, int(75) - AZ_TXD, int(76) - AZ_RXD, int(77) - MAX31855CS, int(78) - MAX31855CLK, int(79) - MAX31855DO, int(80) - NRG_SEL, int(81) - NRG_SEL_INV, int(82) - NRG_CF1, int(83) - HLW_CF, int(84) - HJL_CF, int(85) - MCP39F5_TX, int(86) - MCP39F5_RX, int(87) - MCP39F5_RST, int(88) - PN532_TXD, int(89) - PN532_RXD, int(90) - SM16716_CLK, int(91) - SM16716_DAT, int(92) - SM16716_SEL, int(93) - DI, int(94) - DCKI, int(95) - CSE7766_TX, int(96) - CSE7766_RX, int(97) - ARIRFRCV, int(98) - ARIRFSEL, int(99) - TXD, int(100) - RXD, int(101) - ROT1A, int(102) - ROT1B, int(103) - ADC_JOY, int(104) - SSPI_MAX31865_CS1, int(105) - HRE_CLOCK, int(106) - HRE_DATA, int(107) - ADE7953_IRQ, int(108) - SOLAXX1_TX, int(109) - SOLAXX1_RX, int(110) - ZIGBEE_TX, int(111) - ZIGBEE_RX, int(112) - RDM6300_RX, int(113) - IBEACON_TX, int(114) - IBEACON_RX, int(115) - A4988_DIR, int(116) - A4988_STP, int(117) - A4988_ENA, int(118) - A4988_MS1, int(119) - OUTPUT_HI, int(120) - OUTPUT_LO, int(121) - DDS2382_TX, int(122) - DDS2382_RX, int(123) - DDSU666_TX, int(124) - DDSU666_RX, int(125) - SM2135_CLK, int(126) - SM2135_DAT, int(127) - DEEPSLEEP, int(128) - EXS_ENABLE, int(129) - TASMOTACLIENT_TXD, int(130) - TASMOTACLIENT_RXD, int(131) - TASMOTACLIENT_RST, int(132) - TASMOTACLIENT_RST_INV, int(133) - HPMA_RX, int(134) - HPMA_TX, int(135) - GPS_RX, int(136) - GPS_TX, int(137) - HM10_RX, int(138) - HM10_TX, int(139) - LE01MR_RX, int(140) - LE01MR_TX, int(141) - CC1101_GDO0, int(142) - CC1101_GDO2, int(143) - HRXL_RX, int(144) - ELECTRIQ_MOODL_TX, int(145) - AS3935, int(146) - ADC_INPUT, int(147) - ADC_TEMP, int(148) - ADC_LIGHT, int(149) - ADC_BUTTON, int(150) - ADC_BUTTON_INV, int(151) - ADC_RANGE, int(152) - ADC_CT_POWER, int(153) - WEBCAM_PWDN, int(154) - WEBCAM_RESET, int(155) - WEBCAM_XCLK, int(156) - WEBCAM_SIOD, int(157) - WEBCAM_SIOC, int(158) - WEBCAM_DATA, int(159) - WEBCAM_VSYNC, int(160) - WEBCAM_HREF, int(161) - WEBCAM_PCLK, int(162) - WEBCAM_PSCLK, int(163) - WEBCAM_HSD, int(164) - WEBCAM_PSRCS, int(165) - BOILER_OT_RX, int(166) - BOILER_OT_TX, int(167) - WINDMETER_SPEED, int(168) - KEY1_TC, int(169) - BL0940_RX, int(170) - TCP_TX, int(171) - TCP_RX, int(172) - ETH_PHY_POWER, int(173) - ETH_PHY_MDC, int(174) - ETH_PHY_MDIO, int(175) - TELEINFO_RX, int(176) - TELEINFO_ENABLE, int(177) - LMT01, int(178) - IEM3000_TX, int(179) - IEM3000_RX, int(180) - ZIGBEE_RST, int(181) - DYP_RX, int(182) - MIEL_HVAC_TX, int(183) - MIEL_HVAC_RX, int(184) - WE517_TX, int(185) - WE517_RX, int(186) - AS608_TX, int(187) - AS608_RX, int(188) - SHELLY_DIMMER_BOOT0, int(189) - SHELLY_DIMMER_RST_INV, int(190) - RC522_RST, int(191) - P9813_CLK, int(192) - P9813_DAT, int(193) - OPTION_A, int(194) - FTC532, int(195) - RC522_CS, int(196) - NRF24_CS, int(197) - NRF24_DC, int(198) - ILI9341_CS, int(199) - ILI9341_DC, int(200) - ILI9488_CS, int(201) - EPAPER29_CS, int(202) - EPAPER42_CS, int(203) - SSD1351_CS, int(204) - RA8876_CS, int(205) - ST7789_CS, int(206) - ST7789_DC, int(207) - SSD1331_CS, int(208) - SSD1331_DC, int(209) - SDCARD_CS, int(210) - ROT1A_NP, int(211) - ROT1B_NP, int(212) - ADC_PH, int(213) - BS814_CLK, int(214) - BS814_DAT, int(215) - WIEGAND_D0, int(216) - WIEGAND_D1, int(217) - NEOPOOL_TX, int(218) - NEOPOOL_RX, int(219) - SDM72_TX, int(220) - SDM72_RX, int(221) - TM1637CLK, int(222) - TM1637DIO, int(223) - PROJECTOR_CTRL_TX, int(224) - PROJECTOR_CTRL_RX, int(225) - SSD1351_DC, int(226) - XPT2046_CS, int(227) - CSE7761_TX, int(228) - CSE7761_RX, int(229) - VL53L0X_XSHUT1, int(230) - MAX7219CLK, int(231) - MAX7219DIN, int(232) - MAX7219CS, int(233) - TFMINIPLUS_TX, int(234) - TFMINIPLUS_RX, int(235) - ZEROCROSS, int(236) - HALLEFFECT, int(237) - EPD_DATA, int(238) - INPUT, int(239) - KEY1_PD, int(240) - KEY1_INV_PD, int(241) - SWT1_PD, int(242) - I2S_OUT_DATA, int(243) - I2S_OUT_CLK, int(244) - I2S_OUT_SLCT, int(245) - I2S_IN_DATA, int(246) - I2S_IN_CLK, int(247) - I2S_IN_SLCT, int(248) - INTERRUPT, int(249) - - SENSOR_END, int(250) + member, func(gp_member) pin_mode, func(gp_pin_mode) digital_write, func(gp_digital_write) diff --git a/lib/libesp32/Berry/default/be_i2c_axp192_lib.c b/lib/libesp32/Berry/default/be_i2c_axp192_lib.c index 5eba55476..7449780d6 100644 --- a/lib/libesp32/Berry/default/be_i2c_axp192_lib.c +++ b/lib/libesp32/Berry/default/be_i2c_axp192_lib.c @@ -21,7 +21,7 @@ be_local_closure(get_warning_level, /* name */ /* K1 */ be_const_int(1), }), (be_nested_const_str("get_warning_level", 1737834441, 17)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 0x540E0046, // 0001 LDINT R3 71 @@ -52,7 +52,7 @@ be_local_closure(get_vbus_current, /* name */ /* K1 */ be_const_real_hex(0x3EC00000), }), (be_nested_const_str("get_vbus_current", 1205347942, 16)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 0x540E005B, // 0001 LDINT R3 92 @@ -83,7 +83,7 @@ be_local_closure(set_chg_current, /* name */ /* K1 */ be_nested_string("read8", -1492179129, 5), }), (be_nested_const_str("set_chg_current", 336304386, 15)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[12]) { /* code */ 0x8C080100, // 0000 GETMET R2 R0 K0 0x54120032, // 0001 LDINT R4 51 @@ -121,7 +121,7 @@ be_local_closure(get_bat_current, /* name */ /* K1 */ be_const_real_hex(0x3F000000), }), (be_nested_const_str("get_bat_current", 1912106073, 15)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 9]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 0x540E0079, // 0001 LDINT R3 122 @@ -156,7 +156,7 @@ be_local_closure(get_bat_power, /* name */ /* K1 */ be_const_real_hex(0x3A102DE1), }), (be_nested_const_str("get_bat_power", -1227592443, 13)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 0x540E006F, // 0001 LDINT R3 112 @@ -186,7 +186,7 @@ be_local_closure(json_append, /* name */ /* K0 */ be_nested_string("wire", -212213352, 4), }), (be_nested_const_str("json_append", -1292948012, 11)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 0x74060001, // 0001 JMPT R1 #0004 @@ -217,7 +217,7 @@ be_local_closure(get_vbus_voltage, /* name */ /* K1 */ be_const_real_hex(0x3ADED28A), }), (be_nested_const_str("get_vbus_voltage", -1896756895, 16)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 0x540E0059, // 0001 LDINT R3 90 @@ -249,7 +249,7 @@ be_local_closure(get_temp, /* name */ /* K2 */ be_const_real_hex(0x4310B333), }), (be_nested_const_str("get_temp", -924047810, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 6]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 0x540E005D, // 0001 LDINT R3 94 @@ -283,7 +283,7 @@ be_local_closure(battery_present, /* name */ /* K3 */ be_const_int(1), }), (be_nested_const_str("battery_present", -706570238, 15)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[15]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 0x8C040301, // 0001 GETMET R1 R1 K1 @@ -324,7 +324,7 @@ be_local_closure(get_aps_voltage, /* name */ /* K1 */ be_const_real_hex(0x3AB78035), }), (be_nested_const_str("get_aps_voltage", -2001930861, 15)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 0x540E007D, // 0001 LDINT R3 126 @@ -358,7 +358,7 @@ be_local_closure(set_dcdc_enable, /* name */ /* K4 */ be_const_int(3), }), (be_nested_const_str("set_dcdc_enable", 1594690786, 15)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[22]) { /* code */ 0x1C0C0300, // 0000 EQ R3 R1 K0 0x780E0004, // 0001 JMPF R3 #0007 @@ -408,7 +408,7 @@ be_local_closure(set_ldo_voltage, /* name */ /* K3 */ be_const_int(3), }), (be_nested_const_str("set_ldo_voltage", -204466136, 15)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[39]) { /* code */ 0x540E0CE3, // 0000 LDINT R3 3300 0x240C0403, // 0001 GT R3 R2 R3 @@ -473,8 +473,8 @@ be_local_closure(init, /* name */ /* K1 */ be_nested_string("init", 380752755, 4), /* K2 */ be_nested_string("AXP192", 757230128, 6), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 9]) { /* code */ 0x60040003, // 0000 GETGBL R1 G3 0x5C080000, // 0001 MOVE R2 R0 @@ -509,7 +509,7 @@ be_local_closure(get_bat_voltage, /* name */ /* K1 */ be_const_real_hex(0x3A902DE0), }), (be_nested_const_str("get_bat_voltage", 706676538, 15)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 0x540E0077, // 0001 LDINT R3 120 @@ -541,7 +541,7 @@ be_local_closure(set_ldo_enable, /* name */ /* K2 */ be_const_int(3), }), (be_nested_const_str("set_ldo_enable", -1378465255, 14)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[15]) { /* code */ 0x1C0C0300, // 0000 EQ R3 R1 K0 0x780E0004, // 0001 JMPF R3 #0007 @@ -586,7 +586,7 @@ be_local_closure(set_dc_voltage, /* name */ /* K5 */ be_nested_string("read8", -1492179129, 5), }), (be_nested_const_str("set_dc_voltage", -2112985360, 14)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[48]) { /* code */ 0x140C0300, // 0000 LT R3 R1 K0 0x740E0001, // 0001 JMPT R3 #0004 @@ -662,7 +662,7 @@ be_local_closure(write_gpio, /* name */ /* K3 */ be_const_int(3), }), (be_nested_const_str("write_gpio", -2027026962, 10)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[21]) { /* code */ 0x280C0300, // 0000 GE R3 R1 K0 0x780E0007, // 0001 JMPF R3 #000A @@ -721,7 +721,7 @@ be_local_closure(web_sensor, /* name */ /* K13 */ be_nested_string("web_send_decimal", 1407210204, 16), }), (be_nested_const_str("web_sensor", -1394870324, 10)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[26]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 0x74060001, // 0001 JMPT R1 #0004 @@ -773,7 +773,7 @@ be_local_closure(get_bat_charge_current, /* name */ /* K1 */ be_const_real_hex(0x3F000000), }), (be_nested_const_str("get_bat_charge_current", 1385293050, 22)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x8C040100, // 0000 GETMET R1 R0 K0 0x540E0079, // 0001 LDINT R3 122 @@ -806,7 +806,7 @@ be_local_closure(get_battery_chargin_status, /* name */ /* K3 */ be_const_int(1), }), (be_nested_const_str("get_battery_chargin_status", -2061725725, 26)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 7]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 0x8C040301, // 0001 GETMET R1 R1 K1 @@ -842,7 +842,7 @@ be_local_closure(get_input_power_status, /* name */ /* K4 */ be_const_int(1), }), (be_nested_const_str("get_input_power_status", -192138119, 22)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 7]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 0x8C040301, // 0001 GETMET R1 R1 K1 diff --git a/lib/libesp32/Berry/default/be_i2c_driverlib.c b/lib/libesp32/Berry/default/be_i2c_driverlib.c index 2ac5627d9..f1cedfe8b 100644 --- a/lib/libesp32/Berry/default/be_i2c_driverlib.c +++ b/lib/libesp32/Berry/default/be_i2c_driverlib.c @@ -34,7 +34,7 @@ be_local_closure(read32, /* name */ /* K6 */ be_const_int(3), }), (be_nested_const_str("read32", 1741276240, 6)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[20]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x8C080501, // 0001 GETMET R2 R2 K1 @@ -82,7 +82,7 @@ be_local_closure(write8, /* name */ /* K3 */ be_const_int(1), }), (be_nested_const_str("write8", -1160975764, 6)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 8]) { /* code */ 0x880C0100, // 0000 GETMBR R3 R0 K0 0x8C0C0701, // 0001 GETMET R3 R3 K1 @@ -120,7 +120,7 @@ be_local_closure(read12, /* name */ /* K5 */ be_const_int(1), }), (be_nested_const_str("read12", -3890326, 6)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[12]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x8C080501, // 0001 GETMET R2 R2 K1 @@ -160,7 +160,7 @@ be_local_closure(write_bit, /* name */ /* K3 */ be_nested_string("read8", -1492179129, 5), }), (be_nested_const_str("write_bit", -1633976860, 9)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[26]) { /* code */ 0x14100500, // 0000 LT R4 R2 K0 0x74120002, // 0001 JMPT R4 #0005 @@ -217,7 +217,7 @@ be_local_closure(read24, /* name */ /* K6 */ be_const_int(2), }), (be_nested_const_str("read24", 1808533811, 6)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[16]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x8C080501, // 0001 GETMET R2 R2 K1 @@ -261,7 +261,7 @@ be_local_closure(read8, /* name */ /* K3 */ be_const_int(1), }), (be_nested_const_str("read8", -1492179129, 5)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 7]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x8C080501, // 0001 GETMET R2 R2 K1 @@ -301,8 +301,8 @@ be_local_closure(init, /* name */ /* K8 */ be_nested_string("detected on bus", 1432002650, 15), /* K9 */ be_nested_string("bus", 1607822841, 3), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[44]) { /* code */ 0x8C100100, // 0000 GETMET R4 R0 K0 0x7C100200, // 0001 CALL R4 1 @@ -376,7 +376,7 @@ be_local_closure(read13, /* name */ /* K5 */ be_const_int(1), }), (be_nested_const_str("read13", 12887293, 6)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[12]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x8C080501, // 0001 GETMET R2 R2 K1 diff --git a/lib/libesp32/Berry/default/be_lvgl_clock_icon_lib.c b/lib/libesp32/Berry/default/be_lvgl_clock_icon_lib.c index 484b79ee2..4cef73ac9 100644 --- a/lib/libesp32/Berry/default/be_lvgl_clock_icon_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_clock_icon_lib.c @@ -33,7 +33,7 @@ be_local_closure(set_time, /* name */ /* K9 */ be_nested_string("set_text", 1849641155, 8), }), (be_nested_const_str("set_time", 900236405, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[27]) { /* code */ 0xA4120000, // 0000 IMPORT R4 K0 0x88140101, // 0001 GETMBR R5 R0 K1 @@ -93,7 +93,7 @@ be_local_closure(every_second, /* name */ /* K8 */ be_nested_string("sec", -1155074638, 3), }), (be_nested_const_str("every_second", 2075451465, 12)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[17]) { /* code */ 0xB8060000, // 0000 GETNGBL R1 K0 0x8C040301, // 0001 GETMET R1 R1 K1 @@ -155,8 +155,8 @@ be_local_closure(init, /* name */ /* K20 */ be_nested_string("tasmota", 424643812, 7), /* K21 */ be_nested_string("add_driver", 1654458371, 10), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[82]) { /* code */ 0x60080003, // 0000 GETGBL R2 G3 0x5C0C0000, // 0001 MOVE R3 R0 @@ -265,7 +265,7 @@ be_local_closure(del, /* name */ /* K2 */ be_nested_string("remove_driver", 1030243768, 13), }), (be_nested_const_str("del", -816214454, 3)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[10]) { /* code */ 0x60040003, // 0000 GETGBL R1 G3 0x5C080000, // 0001 MOVE R2 R0 diff --git a/lib/libesp32/Berry/default/be_lvgl_glob_lib.c b/lib/libesp32/Berry/default/be_lvgl_glob_lib.c index e60d7606f..31619f1c4 100644 --- a/lib/libesp32/Berry/default/be_lvgl_glob_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_glob_lib.c @@ -25,7 +25,7 @@ be_local_closure(get_object_from_ptr, /* name */ /* K1 */ be_nested_string("find", -1108310694, 4), }), (be_nested_const_str("get_object_from_ptr", -1949948095, 19)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[10]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x4C0C0000, // 0001 LDNIL R3 @@ -68,7 +68,7 @@ be_local_closure(widget_event_impl, /* name */ /* K8 */ be_nested_string("widget_event", 1951408186, 12), }), (be_nested_const_str("widget_event_impl", -2116536735, 17)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[30]) { /* code */ 0xA40E0000, // 0000 IMPORT R3 K0 0xB8120200, // 0001 GETNGBL R4 K1 @@ -129,7 +129,7 @@ be_local_closure(lvgl_event_dispatch, /* name */ /* K6 */ be_nested_string("get_object_from_ptr", -1949948095, 19), }), (be_nested_const_str("lvgl_event_dispatch", 2104396622, 19)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[20]) { /* code */ 0xA40A0000, // 0000 IMPORT R2 K0 0xB80E0200, // 0001 GETNGBL R3 K1 @@ -180,7 +180,7 @@ be_local_closure(widget_dtor_impl, /* name */ /* K6 */ be_nested_string("widget_destructor", -87578951, 17), }), (be_nested_const_str("widget_dtor_impl", 520430610, 16)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[22]) { /* code */ 0xA40E0000, // 0000 IMPORT R3 K0 0xB8120200, // 0001 GETNGBL R4 K1 @@ -228,7 +228,7 @@ be_local_closure(register_obj, /* name */ /* K1 */ be_nested_string("_p", 1594591802, 2), }), (be_nested_const_str("register_obj", -312352526, 12)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[13]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x4C0C0000, // 0001 LDNIL R3 @@ -276,7 +276,7 @@ be_local_closure(gen_cb, /* name */ /* K0 */ be_nested_string("lvgl_event_dispatch", 2104396622, 19), }), (be_nested_const_str("", 607256038, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x68040000, // 0000 GETUPV R1 U0 0x8C040300, // 0001 GETMET R1 R1 K0 @@ -298,7 +298,7 @@ be_local_closure(gen_cb, /* name */ /* K7 */ be_nested_string("cb_do_nothing", 1488730702, 13), }), (be_nested_const_str("gen_cb", -1049739745, 6)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[41]) { /* code */ 0x1C140300, // 0000 EQ R5 R1 K0 0x78160018, // 0001 JMPF R5 #001B @@ -366,7 +366,7 @@ be_local_closure(deregister_obj, /* name */ /* K2 */ be_nested_string("cb_event_closure", -466699971, 16), }), (be_nested_const_str("deregister_obj", -385000303, 14)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[17]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x4C0C0000, // 0001 LDNIL R3 @@ -418,7 +418,7 @@ be_local_closure(widget_cb, /* name */ /* K0 */ be_nested_string("widget_ctor_impl", 194252479, 16), }), (be_nested_const_str("", 607256038, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 6]) { /* code */ 0x68080000, // 0000 GETUPV R2 U0 0x8C080500, // 0001 GETMET R2 R2 K0 @@ -443,7 +443,7 @@ be_local_closure(widget_cb, /* name */ /* K0 */ be_nested_string("widget_dtor_impl", 520430610, 16), }), (be_nested_const_str("", 607256038, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 6]) { /* code */ 0x68080000, // 0000 GETUPV R2 U0 0x8C080500, // 0001 GETMET R2 R2 K0 @@ -468,7 +468,7 @@ be_local_closure(widget_cb, /* name */ /* K0 */ be_nested_string("widget_event_impl", -2116536735, 17), }), (be_nested_const_str("", 607256038, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 6]) { /* code */ 0x68080000, // 0000 GETUPV R2 U0 0x8C080500, // 0001 GETMET R2 R2 K0 @@ -498,7 +498,7 @@ be_local_closure(widget_cb, /* name */ /* K14 */ be_nested_string("event_cb", -1166269279, 8), }), (be_nested_const_str("widget_cb", -1531384241, 9)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[56]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 0x4C080000, // 0001 LDNIL R2 @@ -579,7 +579,7 @@ be_local_closure(_anonymous_, /* name */ /* K0 */ be_nested_string("LVG: call to unsupported callback", 504176819, 33), }), (be_nested_const_str("_anonymous_", 1957281476, 11)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 4]) { /* code */ 0x60000001, // 0000 GETGBL R0 G1 0x58040000, // 0001 LDCONST R1 K0 @@ -634,7 +634,7 @@ be_local_closure(create_custom_widget, /* name */ /* K26 */ be_nested_string("class_init_obj", 178410604, 14), }), (be_nested_const_str("create_custom_widget", 1140594778, 20)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[86]) { /* code */ 0xA40E0000, // 0000 IMPORT R3 K0 0x6010000F, // 0001 GETGBL R4 G15 @@ -753,7 +753,7 @@ be_local_closure(widget_ctor_impl, /* name */ /* K8 */ be_nested_string("widget_constructor", -1751181362, 18), }), (be_nested_const_str("widget_ctor_impl", 194252479, 16)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[29]) { /* code */ 0xA40E0000, // 0000 IMPORT R3 K0 0xB8120200, // 0001 GETNGBL R4 K1 diff --git a/lib/libesp32/Berry/default/be_lvgl_signal_arcs_lib.c b/lib/libesp32/Berry/default/be_lvgl_signal_arcs_lib.c index 496ef4aa1..f3452ba57 100644 --- a/lib/libesp32/Berry/default/be_lvgl_signal_arcs_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_signal_arcs_lib.c @@ -26,7 +26,7 @@ be_local_closure(set_percentage, /* name */ /* K2 */ be_nested_string("invalidate", -1645232368, 10), }), (be_nested_const_str("set_percentage", -1342944572, 14)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[18]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x540E0018, // 0001 LDINT R3 25 @@ -77,8 +77,8 @@ be_local_closure(init, /* name */ /* K8 */ be_nested_string("line_dsc", -200476318, 8), /* K9 */ be_nested_string("draw_line_dsc", -74291093, 13), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[24]) { /* code */ 0xB80A0000, // 0000 GETNGBL R2 K0 0x8C080501, // 0001 GETMET R2 R2 K1 @@ -135,7 +135,7 @@ be_local_closure(widget_event, /* name */ /* K0 */ be_const_int(1), }), (be_nested_const_str("atleast1", 1956331672, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 6]) { /* code */ 0x28040100, // 0000 GE R1 R0 K0 0x78060001, // 0001 JMPF R1 #0004 @@ -185,7 +185,7 @@ be_local_closure(widget_event, /* name */ /* K34 */ be_const_int(0), }), (be_nested_const_str("widget_event", 1951408186, 12)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[182]) { /* code */ 0xB80E0000, // 0000 GETNGBL R3 K0 0x8C0C0701, // 0001 GETMET R3 R3 K1 @@ -392,7 +392,7 @@ be_local_closure(get_percentage, /* name */ /* K0 */ be_nested_string("percentage", -1756136011, 10), }), (be_nested_const_str("get_percentage", -1414483304, 14)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 2]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 0x80040200, // 0001 RET 1 R1 diff --git a/lib/libesp32/Berry/default/be_lvgl_signal_bars_lib.c b/lib/libesp32/Berry/default/be_lvgl_signal_bars_lib.c index 0022034ab..161afc65d 100644 --- a/lib/libesp32/Berry/default/be_lvgl_signal_bars_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_signal_bars_lib.c @@ -26,7 +26,7 @@ be_local_closure(set_percentage, /* name */ /* K2 */ be_nested_string("invalidate", -1645232368, 10), }), (be_nested_const_str("set_percentage", -1342944572, 14)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[18]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x540E0013, // 0001 LDINT R3 20 @@ -77,8 +77,8 @@ be_local_closure(init, /* name */ /* K8 */ be_nested_string("line_dsc", -200476318, 8), /* K9 */ be_nested_string("draw_line_dsc", -74291093, 13), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[24]) { /* code */ 0xB80A0000, // 0000 GETNGBL R2 K0 0x8C080501, // 0001 GETMET R2 R2 K1 @@ -135,7 +135,7 @@ be_local_closure(widget_event, /* name */ /* K0 */ be_const_int(1), }), (be_nested_const_str("atleast1", 1956331672, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 6]) { /* code */ 0x28040100, // 0000 GE R1 R0 K0 0x78060001, // 0001 JMPF R1 #0004 @@ -187,7 +187,7 @@ be_local_closure(widget_event, /* name */ /* K36 */ be_nested_string("EVENT_DRAW_PART_END", -993342004, 19), }), (be_nested_const_str("widget_event", 1951408186, 12)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[138]) { /* code */ 0xB80E0000, // 0000 GETNGBL R3 K0 0x8C0C0701, // 0001 GETMET R3 R3 K1 @@ -350,7 +350,7 @@ be_local_closure(get_percentage, /* name */ /* K0 */ be_nested_string("percentage", -1756136011, 10), }), (be_nested_const_str("get_percentage", -1414483304, 14)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 2]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 0x80040200, // 0001 RET 1 R1 diff --git a/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_icon_lib.c b/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_icon_lib.c index 93e83c7ba..9a2c742ff 100644 --- a/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_icon_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_icon_lib.c @@ -40,8 +40,8 @@ be_local_closure(init, /* name */ /* K16 */ be_nested_string("set_style_pad_right", -980898242, 19), /* K17 */ be_const_int(1), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[67]) { /* code */ 0x60080003, // 0000 GETGBL R2 G3 0x5C0C0000, // 0001 MOVE R3 R0 diff --git a/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_lib.c b/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_lib.c index 91c207196..59132af9e 100644 --- a/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_lib.c @@ -30,7 +30,7 @@ be_local_closure(every_second, /* name */ /* K6 */ be_const_int(0), }), (be_nested_const_str("every_second", 2075451465, 12)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[23]) { /* code */ 0xB8060000, // 0000 GETNGBL R1 K0 0x8C040301, // 0001 GETMET R1 R1 K1 @@ -81,8 +81,8 @@ be_local_closure(init, /* name */ /* K3 */ be_nested_string("set_percentage", -1342944572, 14), /* K4 */ be_const_int(0), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[14]) { /* code */ 0x60080003, // 0000 GETGBL R2 G3 0x5C0C0000, // 0001 MOVE R3 R0 @@ -123,7 +123,7 @@ be_local_closure(del, /* name */ /* K2 */ be_nested_string("remove_driver", 1030243768, 13), }), (be_nested_const_str("del", -816214454, 3)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[10]) { /* code */ 0x60040003, // 0000 GETGBL R1 G3 0x5C080000, // 0001 MOVE R2 R0 diff --git a/lib/libesp32/Berry/default/be_lvgl_wifi_bars_icon_lib.c b/lib/libesp32/Berry/default/be_lvgl_wifi_bars_icon_lib.c index 8912af6a6..9adcdeba5 100644 --- a/lib/libesp32/Berry/default/be_lvgl_wifi_bars_icon_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_wifi_bars_icon_lib.c @@ -39,8 +39,8 @@ be_local_closure(init, /* name */ /* K15 */ be_nested_string("set_style_pad_right", -980898242, 19), /* K16 */ be_const_int(1), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[64]) { /* code */ 0x60080003, // 0000 GETGBL R2 G3 0x5C0C0000, // 0001 MOVE R3 R0 diff --git a/lib/libesp32/Berry/default/be_lvgl_wifi_bars_lib.c b/lib/libesp32/Berry/default/be_lvgl_wifi_bars_lib.c index 15abf0a57..9bbb51bf0 100644 --- a/lib/libesp32/Berry/default/be_lvgl_wifi_bars_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_wifi_bars_lib.c @@ -30,7 +30,7 @@ be_local_closure(every_second, /* name */ /* K6 */ be_const_int(0), }), (be_nested_const_str("every_second", 2075451465, 12)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[23]) { /* code */ 0xB8060000, // 0000 GETNGBL R1 K0 0x8C040301, // 0001 GETMET R1 R1 K1 @@ -81,8 +81,8 @@ be_local_closure(init, /* name */ /* K3 */ be_nested_string("set_percentage", -1342944572, 14), /* K4 */ be_const_int(0), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[14]) { /* code */ 0x60080003, // 0000 GETGBL R2 G3 0x5C0C0000, // 0001 MOVE R3 R0 @@ -123,7 +123,7 @@ be_local_closure(del, /* name */ /* K2 */ be_nested_string("remove_driver", 1030243768, 13), }), (be_nested_const_str("del", -816214454, 3)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[10]) { /* code */ 0x60040003, // 0000 GETGBL R1 G3 0x5C080000, // 0001 MOVE R2 R0 diff --git a/lib/libesp32/Berry/default/be_path_tasmota_lib.c b/lib/libesp32/Berry/default/be_path_tasmota_lib.c index c4208203f..81711a053 100644 --- a/lib/libesp32/Berry/default/be_path_tasmota_lib.c +++ b/lib/libesp32/Berry/default/be_path_tasmota_lib.c @@ -18,13 +18,17 @@ #include "be_sys.h" #include +extern int m_path_listdir(bvm *vm); + static int m_path_exists(bvm *vm) { const char *path = NULL; if (be_top(vm) >= 1 && be_isstring(vm, 1)) { path = be_tostring(vm, 1); + be_pushbool(vm, be_isexist(path)); + } else { + be_pushbool(vm, bfalse); } - be_pushbool(vm, be_isexist(path)); be_return(vm); } extern time_t be_last_modified(void *hfile); @@ -43,10 +47,24 @@ static int m_path_last_modified(bvm *vm) be_return_nil(vm); } +static int m_path_remove(bvm *vm) +{ + const char *path = NULL; + if (be_top(vm) >= 1 && be_isstring(vm, 1)) { + path = be_tostring(vm, 1); + be_pushbool(vm, be_unlink(path)); + } else { + be_pushbool(vm, bfalse); + } + be_return(vm); +} + /* @const_object_info_begin module path (scope: global, file: tasmota_path) { exists, func(m_path_exists) last_modified, func(m_path_last_modified) + listdir, func(m_path_listdir) + remove, func(m_path_remove) } @const_object_info_end */ #include "../generate/be_fixed_tasmota_path.h" diff --git a/lib/libesp32/Berry/default/be_persist_lib.c b/lib/libesp32/Berry/default/be_persist_lib.c index 3c4c17f28..e0a92dcd9 100644 --- a/lib/libesp32/Berry/default/be_persist_lib.c +++ b/lib/libesp32/Berry/default/be_persist_lib.c @@ -8,61 +8,74 @@ #include "be_constobj.h" /******************************************************************** -** Solidified function: save +** Solidified function: json_fdump_map ********************************************************************/ -be_local_closure(save, /* name */ +be_local_closure(json_fdump_map, /* name */ be_nested_proto( - 8, /* nstack */ - 1, /* argc */ + 13, /* nstack */ + 3, /* argc */ 0, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 8]) { /* constants */ + ( &(const bvalue[10]) { /* constants */ /* K0 */ be_nested_string("json", 916562499, 4), - /* K1 */ be_nested_string("_filename", 1430813195, 9), - /* K2 */ be_nested_string("w", -234078410, 1), - /* K3 */ be_nested_string("write", -1104765092, 5), + /* K1 */ be_nested_string("write", -1104765092, 5), + /* K2 */ be_nested_string("{", -32746982, 1), + /* K3 */ be_nested_string("keys", -112588595, 4), /* K4 */ be_nested_string("dump", -631966073, 4), - /* K5 */ be_nested_string("_p", 1594591802, 2), - /* K6 */ be_nested_string("close", 667630371, 5), - /* K7 */ be_nested_string("_dirty", 283846766, 6), + /* K5 */ be_nested_string(":", 1057798253, 1), + /* K6 */ be_nested_string("json_fdump_any", -946337911, 14), + /* K7 */ be_nested_string(",", 688690635, 1), + /* K8 */ be_nested_string("stop_iteration", -121173395, 14), + /* K9 */ be_nested_string("}", -133412696, 1), }), - (be_nested_const_str("save", -855671224, 4)), - (be_nested_const_str("input", -103256197, 5)), - ( &(const binstruction[30]) { /* code */ - 0xA4060000, // 0000 IMPORT R1 K0 - 0x4C080000, // 0001 LDNIL R2 - 0xA802000D, // 0002 EXBLK 0 #0011 - 0x600C0011, // 0003 GETGBL R3 G17 - 0x88100101, // 0004 GETMBR R4 R0 K1 - 0x58140002, // 0005 LDCONST R5 K2 - 0x7C0C0400, // 0006 CALL R3 2 - 0x5C080600, // 0007 MOVE R2 R3 - 0x8C0C0503, // 0008 GETMET R3 R2 K3 - 0x8C140304, // 0009 GETMET R5 R1 K4 - 0x881C0105, // 000A GETMBR R7 R0 K5 - 0x7C140400, // 000B CALL R5 2 - 0x7C0C0400, // 000C CALL R3 2 - 0x8C0C0506, // 000D GETMET R3 R2 K6 - 0x7C0C0200, // 000E CALL R3 1 - 0xA8040001, // 000F EXBLK 1 1 - 0x70020009, // 0010 JMP #001B - 0xAC0C0002, // 0011 CATCH R3 0 2 - 0x70020006, // 0012 JMP #001A - 0x4C140000, // 0013 LDNIL R5 - 0x20140405, // 0014 NE R5 R2 R5 - 0x78160001, // 0015 JMPF R5 #0018 - 0x8C140506, // 0016 GETMET R5 R2 K6 - 0x7C140200, // 0017 CALL R5 1 - 0xB0040604, // 0018 RAISE 1 R3 R4 - 0x70020000, // 0019 JMP #001B - 0xB0080000, // 001A RAISE 2 R0 R0 - 0x500C0000, // 001B LDBOOL R3 0 0 - 0x90020E03, // 001C SETMBR R0 K7 R3 - 0x80000000, // 001D RET 0 + (be_nested_const_str("json_fdump_map", -203012643, 14)), + ((bstring*) &be_const_str_input), + ( &(const binstruction[41]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0x8C100301, // 0001 GETMET R4 R1 K1 + 0x58180002, // 0002 LDCONST R6 K2 + 0x7C100400, // 0003 CALL R4 2 + 0x4C100000, // 0004 LDNIL R4 + 0x60140010, // 0005 GETGBL R5 G16 + 0x8C180503, // 0006 GETMET R6 R2 K3 + 0x7C180200, // 0007 CALL R6 1 + 0x7C140200, // 0008 CALL R5 1 + 0xA8020017, // 0009 EXBLK 0 #0022 + 0x5C180A00, // 000A MOVE R6 R5 + 0x7C180000, // 000B CALL R6 0 + 0x4C1C0000, // 000C LDNIL R7 + 0x201C0807, // 000D NE R7 R4 R7 + 0x781E0002, // 000E JMPF R7 #0012 + 0x8C1C0301, // 000F GETMET R7 R1 K1 + 0x5C240800, // 0010 MOVE R9 R4 + 0x7C1C0400, // 0011 CALL R7 2 + 0x8C1C0301, // 0012 GETMET R7 R1 K1 + 0x8C240704, // 0013 GETMET R9 R3 K4 + 0x602C0008, // 0014 GETGBL R11 G8 + 0x5C300C00, // 0015 MOVE R12 R6 + 0x7C2C0200, // 0016 CALL R11 1 + 0x7C240400, // 0017 CALL R9 2 + 0x7C1C0400, // 0018 CALL R7 2 + 0x8C1C0301, // 0019 GETMET R7 R1 K1 + 0x58240005, // 001A LDCONST R9 K5 + 0x7C1C0400, // 001B CALL R7 2 + 0x8C1C0106, // 001C GETMET R7 R0 K6 + 0x5C240200, // 001D MOVE R9 R1 + 0x94280406, // 001E GETIDX R10 R2 R6 + 0x7C1C0600, // 001F CALL R7 3 + 0x58100007, // 0020 LDCONST R4 K7 + 0x7001FFE7, // 0021 JMP #000A + 0x58140008, // 0022 LDCONST R5 K8 + 0xAC140200, // 0023 CATCH R5 1 0 + 0xB0080000, // 0024 RAISE 2 R0 R0 + 0x8C140301, // 0025 GETMET R5 R1 K1 + 0x581C0009, // 0026 LDCONST R7 K9 + 0x7C140400, // 0027 CALL R5 2 + 0x80000000, // 0028 RET 0 }) ) ); @@ -87,7 +100,7 @@ be_local_closure(setmember, /* name */ /* K1 */ be_nested_string("_dirty", 283846766, 6), }), (be_nested_const_str("setmember", 1432909441, 9)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x880C0100, // 0000 GETMBR R3 R0 K0 0x980C0202, // 0001 SETIDX R3 R1 R2 @@ -100,158 +113,6 @@ be_local_closure(setmember, /* name */ /*******************************************************************/ -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(init, /* name */ - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 6]) { /* constants */ - /* K0 */ be_nested_string("_filename", 1430813195, 9), - /* K1 */ be_nested_string("_persist.json", 2008425138, 13), - /* K2 */ be_nested_string("_p", 1594591802, 2), - /* K3 */ be_nested_string("copy", -446502332, 4), - /* K4 */ be_nested_string("load", -435725847, 4), - /* K5 */ be_nested_string("_dirty", 283846766, 6), - }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), - ( &(const binstruction[20]) { /* code */ - 0x90020101, // 0000 SETMBR R0 K0 K1 - 0x6008000F, // 0001 GETGBL R2 G15 - 0x5C0C0200, // 0002 MOVE R3 R1 - 0x60100013, // 0003 GETGBL R4 G19 - 0x7C080400, // 0004 CALL R2 2 - 0x780A0003, // 0005 JMPF R2 #000A - 0x8C080303, // 0006 GETMET R2 R1 K3 - 0x7C080200, // 0007 CALL R2 1 - 0x90020402, // 0008 SETMBR R0 K2 R2 - 0x70020002, // 0009 JMP #000D - 0x60080013, // 000A GETGBL R2 G19 - 0x7C080000, // 000B CALL R2 0 - 0x90020402, // 000C SETMBR R0 K2 R2 - 0x8C080104, // 000D GETMET R2 R0 K4 - 0x88100102, // 000E GETMBR R4 R0 K2 - 0x88140100, // 000F GETMBR R5 R0 K0 - 0x7C080600, // 0010 CALL R2 3 - 0x50080000, // 0011 LDBOOL R2 0 0 - 0x90020A02, // 0012 SETMBR R0 K5 R2 - 0x80000000, // 0013 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: load -********************************************************************/ -be_local_closure(load, /* name */ - be_nested_proto( - 9, /* nstack */ - 1, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[10]) { /* constants */ - /* K0 */ be_nested_string("json", 916562499, 4), - /* K1 */ be_nested_string("path", -2071507658, 4), - /* K2 */ be_nested_string("exists", 1002329533, 6), - /* K3 */ be_nested_string("_filename", 1430813195, 9), - /* K4 */ be_nested_string("r", -150190315, 1), - /* K5 */ be_nested_string("load", -435725847, 4), - /* K6 */ be_nested_string("read", -824204347, 4), - /* K7 */ be_nested_string("close", 667630371, 5), - /* K8 */ be_nested_string("_p", 1594591802, 2), - /* K9 */ be_nested_string("_dirty", 283846766, 6), - }), - (be_nested_const_str("load", -435725847, 4)), - (be_nested_const_str("input", -103256197, 5)), - ( &(const binstruction[37]) { /* code */ - 0xA4060000, // 0000 IMPORT R1 K0 - 0xA40A0200, // 0001 IMPORT R2 K1 - 0x4C0C0000, // 0002 LDNIL R3 - 0x4C100000, // 0003 LDNIL R4 - 0x8C140502, // 0004 GETMET R5 R2 K2 - 0x881C0103, // 0005 GETMBR R7 R0 K3 - 0x7C140400, // 0006 CALL R5 2 - 0x7816001B, // 0007 JMPF R5 #0024 - 0xA802000D, // 0008 EXBLK 0 #0017 - 0x60140011, // 0009 GETGBL R5 G17 - 0x88180103, // 000A GETMBR R6 R0 K3 - 0x581C0004, // 000B LDCONST R7 K4 - 0x7C140400, // 000C CALL R5 2 - 0x5C0C0A00, // 000D MOVE R3 R5 - 0x8C140305, // 000E GETMET R5 R1 K5 - 0x8C1C0706, // 000F GETMET R7 R3 K6 - 0x7C1C0200, // 0010 CALL R7 1 - 0x7C140400, // 0011 CALL R5 2 - 0x5C100A00, // 0012 MOVE R4 R5 - 0x8C140707, // 0013 GETMET R5 R3 K7 - 0x7C140200, // 0014 CALL R5 1 - 0xA8040001, // 0015 EXBLK 1 1 - 0x70020009, // 0016 JMP #0021 - 0xAC140002, // 0017 CATCH R5 0 2 - 0x70020006, // 0018 JMP #0020 - 0x4C1C0000, // 0019 LDNIL R7 - 0x201C0607, // 001A NE R7 R3 R7 - 0x781E0001, // 001B JMPF R7 #001E - 0x8C1C0707, // 001C GETMET R7 R3 K7 - 0x7C1C0200, // 001D CALL R7 1 - 0xB0040A06, // 001E RAISE 1 R5 R6 - 0x70020000, // 001F JMP #0021 - 0xB0080000, // 0020 RAISE 2 R0 R0 - 0x90021004, // 0021 SETMBR R0 K8 R4 - 0x50140000, // 0022 LDBOOL R5 0 0 - 0x90021205, // 0023 SETMBR R0 K9 R5 - 0x80000000, // 0024 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: has -********************************************************************/ -be_local_closure(has, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 0, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_string("_p", 1594591802, 2), - /* K1 */ be_nested_string("has", -306245661, 3), - }), - (be_nested_const_str("has", -306245661, 3)), - (be_nested_const_str("input", -103256197, 5)), - ( &(const binstruction[ 5]) { /* code */ - 0x88080100, // 0000 GETMBR R2 R0 K0 - 0x8C080501, // 0001 GETMET R2 R2 K1 - 0x5C100200, // 0002 MOVE R4 R1 - 0x7C080400, // 0003 CALL R2 2 - 0x80040400, // 0004 RET 1 R2 - }) - ) -); -/*******************************************************************/ - - /******************************************************************** ** Solidified function: zero ********************************************************************/ @@ -270,7 +131,7 @@ be_local_closure(zero, /* name */ /* K1 */ be_nested_string("_dirty", 283846766, 6), }), (be_nested_const_str("zero", -1955600541, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 6]) { /* code */ 0x60040013, // 0000 GETGBL R1 G19 0x7C040000, // 0001 CALL R1 0 @@ -302,7 +163,7 @@ be_local_closure(member, /* name */ /* K1 */ be_nested_string("find", -1108310694, 4), }), (be_nested_const_str("member", 719708611, 6)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x8C080501, // 0001 GETMET R2 R2 K1 @@ -315,6 +176,48 @@ be_local_closure(member, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: json_fdump +********************************************************************/ +be_local_closure(json_fdump, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_string("json", 916562499, 4), + /* K1 */ be_nested_string("_p", 1594591802, 2), + /* K2 */ be_nested_string("json_fdump_map", -203012643, 14), + /* K3 */ be_nested_string("internal_error", -1775809127, 14), + /* K4 */ be_nested_string("persist._p is not a map", 1176528732, 23), + }), + (be_nested_const_str("json_fdump", 1694216580, 10)), + ((bstring*) &be_const_str_input), + ( &(const binstruction[13]) { /* code */ + 0xA40A0000, // 0000 IMPORT R2 K0 + 0x600C000F, // 0001 GETGBL R3 G15 + 0x88100101, // 0002 GETMBR R4 R0 K1 + 0x60140013, // 0003 GETGBL R5 G19 + 0x7C0C0400, // 0004 CALL R3 2 + 0x780E0004, // 0005 JMPF R3 #000B + 0x8C0C0102, // 0006 GETMET R3 R0 K2 + 0x5C140200, // 0007 MOVE R5 R1 + 0x88180101, // 0008 GETMBR R6 R0 K1 + 0x7C0C0600, // 0009 CALL R3 3 + 0x70020000, // 000A JMP #000C + 0xB0060704, // 000B RAISE 1 K3 K4 + 0x80000000, // 000C RET 0 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: remove ********************************************************************/ @@ -334,7 +237,7 @@ be_local_closure(remove, /* name */ /* K2 */ be_nested_string("_dirty", 283846766, 6), }), (be_nested_const_str("remove", -611183107, 6)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 7]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x8C080501, // 0001 GETMET R2 R2 K1 @@ -349,6 +252,211 @@ be_local_closure(remove, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: json_fdump_any +********************************************************************/ +be_local_closure(json_fdump_any, /* name */ + be_nested_proto( + 9, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_string("json", 916562499, 4), + /* K1 */ be_nested_string("json_fdump_map", -203012643, 14), + /* K2 */ be_nested_string("json_fdump_list", -391087443, 15), + /* K3 */ be_nested_string("write", -1104765092, 5), + /* K4 */ be_nested_string("dump", -631966073, 4), + }), + (be_nested_const_str("json_fdump_any", -946337911, 14)), + ((bstring*) &be_const_str_input), + ( &(const binstruction[27]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0x6010000F, // 0001 GETGBL R4 G15 + 0x5C140400, // 0002 MOVE R5 R2 + 0x60180013, // 0003 GETGBL R6 G19 + 0x7C100400, // 0004 CALL R4 2 + 0x78120004, // 0005 JMPF R4 #000B + 0x8C100101, // 0006 GETMET R4 R0 K1 + 0x5C180200, // 0007 MOVE R6 R1 + 0x5C1C0400, // 0008 MOVE R7 R2 + 0x7C100600, // 0009 CALL R4 3 + 0x7002000E, // 000A JMP #001A + 0x6010000F, // 000B GETGBL R4 G15 + 0x5C140400, // 000C MOVE R5 R2 + 0x60180012, // 000D GETGBL R6 G18 + 0x7C100400, // 000E CALL R4 2 + 0x78120004, // 000F JMPF R4 #0015 + 0x8C100102, // 0010 GETMET R4 R0 K2 + 0x5C180200, // 0011 MOVE R6 R1 + 0x5C1C0400, // 0012 MOVE R7 R2 + 0x7C100600, // 0013 CALL R4 3 + 0x70020004, // 0014 JMP #001A + 0x8C100303, // 0015 GETMET R4 R1 K3 + 0x8C180704, // 0016 GETMET R6 R3 K4 + 0x5C200400, // 0017 MOVE R8 R2 + 0x7C180400, // 0018 CALL R6 2 + 0x7C100400, // 0019 CALL R4 2 + 0x80000000, // 001A RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: save +********************************************************************/ +be_local_closure(save, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_string("_filename", 1430813195, 9), + /* K1 */ be_nested_string("w", -234078410, 1), + /* K2 */ be_nested_string("json_fdump", 1694216580, 10), + /* K3 */ be_nested_string("close", 667630371, 5), + /* K4 */ be_nested_string("write", -1104765092, 5), + /* K5 */ be_nested_string("{}", 1415952421, 2), + /* K6 */ be_nested_string("_dirty", 283846766, 6), + }), + (be_nested_const_str("save", -855671224, 4)), + ((bstring*) &be_const_str_input), + ( &(const binstruction[37]) { /* code */ + 0x4C040000, // 0000 LDNIL R1 + 0xA802000B, // 0001 EXBLK 0 #000E + 0x60080011, // 0002 GETGBL R2 G17 + 0x880C0100, // 0003 GETMBR R3 R0 K0 + 0x58100001, // 0004 LDCONST R4 K1 + 0x7C080400, // 0005 CALL R2 2 + 0x5C040400, // 0006 MOVE R1 R2 + 0x8C080102, // 0007 GETMET R2 R0 K2 + 0x5C100200, // 0008 MOVE R4 R1 + 0x7C080400, // 0009 CALL R2 2 + 0x8C080303, // 000A GETMET R2 R1 K3 + 0x7C080200, // 000B CALL R2 1 + 0xA8040001, // 000C EXBLK 1 1 + 0x70020013, // 000D JMP #0022 + 0xAC080002, // 000E CATCH R2 0 2 + 0x70020010, // 000F JMP #0021 + 0x4C100000, // 0010 LDNIL R4 + 0x20100204, // 0011 NE R4 R1 R4 + 0x78120001, // 0012 JMPF R4 #0015 + 0x8C100303, // 0013 GETMET R4 R1 K3 + 0x7C100200, // 0014 CALL R4 1 + 0x60100011, // 0015 GETGBL R4 G17 + 0x88140100, // 0016 GETMBR R5 R0 K0 + 0x58180001, // 0017 LDCONST R6 K1 + 0x7C100400, // 0018 CALL R4 2 + 0x5C040800, // 0019 MOVE R1 R4 + 0x8C100304, // 001A GETMET R4 R1 K4 + 0x58180005, // 001B LDCONST R6 K5 + 0x7C100400, // 001C CALL R4 2 + 0x8C100303, // 001D GETMET R4 R1 K3 + 0x7C100200, // 001E CALL R4 1 + 0xB0040403, // 001F RAISE 1 R2 R3 + 0x70020000, // 0020 JMP #0022 + 0xB0080000, // 0021 RAISE 2 R0 R0 + 0x50080000, // 0022 LDBOOL R2 0 0 + 0x90020C02, // 0023 SETMBR R0 K6 R2 + 0x80000000, // 0024 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: load +********************************************************************/ +be_local_closure(load, /* name */ + be_nested_proto( + 9, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[11]) { /* constants */ + /* K0 */ be_nested_string("json", 916562499, 4), + /* K1 */ be_nested_string("path", -2071507658, 4), + /* K2 */ be_nested_string("exists", 1002329533, 6), + /* K3 */ be_nested_string("_filename", 1430813195, 9), + /* K4 */ be_nested_string("r", -150190315, 1), + /* K5 */ be_nested_string("load", -435725847, 4), + /* K6 */ be_nested_string("read", -824204347, 4), + /* K7 */ be_nested_string("close", 667630371, 5), + /* K8 */ be_nested_string("_p", 1594591802, 2), + /* K9 */ be_nested_string("BRY: failed to load _persist.json", -1303053851, 33), + /* K10 */ be_nested_string("_dirty", 283846766, 6), + }), + (be_nested_const_str("load", -435725847, 4)), + ((bstring*) &be_const_str_input), + ( &(const binstruction[46]) { /* code */ + 0xA4060000, // 0000 IMPORT R1 K0 + 0xA40A0200, // 0001 IMPORT R2 K1 + 0x4C0C0000, // 0002 LDNIL R3 + 0x4C100000, // 0003 LDNIL R4 + 0x8C140502, // 0004 GETMET R5 R2 K2 + 0x881C0103, // 0005 GETMBR R7 R0 K3 + 0x7C140400, // 0006 CALL R5 2 + 0x78160024, // 0007 JMPF R5 #002D + 0xA802000D, // 0008 EXBLK 0 #0017 + 0x60140011, // 0009 GETGBL R5 G17 + 0x88180103, // 000A GETMBR R6 R0 K3 + 0x581C0004, // 000B LDCONST R7 K4 + 0x7C140400, // 000C CALL R5 2 + 0x5C0C0A00, // 000D MOVE R3 R5 + 0x8C140305, // 000E GETMET R5 R1 K5 + 0x8C1C0706, // 000F GETMET R7 R3 K6 + 0x7C1C0200, // 0010 CALL R7 1 + 0x7C140400, // 0011 CALL R5 2 + 0x5C100A00, // 0012 MOVE R4 R5 + 0x8C140707, // 0013 GETMET R5 R3 K7 + 0x7C140200, // 0014 CALL R5 1 + 0xA8040001, // 0015 EXBLK 1 1 + 0x70020009, // 0016 JMP #0021 + 0xAC140002, // 0017 CATCH R5 0 2 + 0x70020006, // 0018 JMP #0020 + 0x4C1C0000, // 0019 LDNIL R7 + 0x201C0607, // 001A NE R7 R3 R7 + 0x781E0001, // 001B JMPF R7 #001E + 0x8C1C0707, // 001C GETMET R7 R3 K7 + 0x7C1C0200, // 001D CALL R7 1 + 0xB0040A06, // 001E RAISE 1 R5 R6 + 0x70020000, // 001F JMP #0021 + 0xB0080000, // 0020 RAISE 2 R0 R0 + 0x6014000F, // 0021 GETGBL R5 G15 + 0x5C180800, // 0022 MOVE R6 R4 + 0x601C0013, // 0023 GETGBL R7 G19 + 0x7C140400, // 0024 CALL R5 2 + 0x78160001, // 0025 JMPF R5 #0028 + 0x90021004, // 0026 SETMBR R0 K8 R4 + 0x70020002, // 0027 JMP #002B + 0x60140001, // 0028 GETGBL R5 G1 + 0x58180009, // 0029 LDCONST R6 K9 + 0x7C140200, // 002A CALL R5 1 + 0x50140000, // 002B LDBOOL R5 0 0 + 0x90021405, // 002C SETMBR R0 K10 R5 + 0x80000000, // 002D RET 0 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: find ********************************************************************/ @@ -367,7 +475,7 @@ be_local_closure(find, /* name */ /* K1 */ be_nested_string("find", -1108310694, 4), }), (be_nested_const_str("find", -1108310694, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 6]) { /* code */ 0x880C0100, // 0000 GETMBR R3 R0 K0 0x8C0C0701, // 0001 GETMET R3 R3 K1 @@ -381,26 +489,168 @@ be_local_closure(find, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_string("_filename", 1430813195, 9), + /* K1 */ be_nested_string("_persist.json", 2008425138, 13), + /* K2 */ be_nested_string("_p", 1594591802, 2), + /* K3 */ be_nested_string("copy", -446502332, 4), + /* K4 */ be_nested_string("load", -435725847, 4), + /* K5 */ be_nested_string("_dirty", 283846766, 6), + }), + (be_nested_const_str("init", 380752755, 4)), + ((bstring*) &be_const_str_input), + ( &(const binstruction[20]) { /* code */ + 0x90020101, // 0000 SETMBR R0 K0 K1 + 0x6008000F, // 0001 GETGBL R2 G15 + 0x5C0C0200, // 0002 MOVE R3 R1 + 0x60100013, // 0003 GETGBL R4 G19 + 0x7C080400, // 0004 CALL R2 2 + 0x780A0003, // 0005 JMPF R2 #000A + 0x8C080303, // 0006 GETMET R2 R1 K3 + 0x7C080200, // 0007 CALL R2 1 + 0x90020402, // 0008 SETMBR R0 K2 R2 + 0x70020002, // 0009 JMP #000D + 0x60080013, // 000A GETGBL R2 G19 + 0x7C080000, // 000B CALL R2 0 + 0x90020402, // 000C SETMBR R0 K2 R2 + 0x8C080104, // 000D GETMET R2 R0 K4 + 0x88100102, // 000E GETMBR R4 R0 K2 + 0x88140100, // 000F GETMBR R5 R0 K0 + 0x7C080600, // 0010 CALL R2 3 + 0x50080000, // 0011 LDBOOL R2 0 0 + 0x90020A02, // 0012 SETMBR R0 K5 R2 + 0x80000000, // 0013 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: json_fdump_list +********************************************************************/ +be_local_closure(json_fdump_list, /* name */ + be_nested_proto( + 9, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 8]) { /* constants */ + /* K0 */ be_nested_string("json", 916562499, 4), + /* K1 */ be_nested_string("write", -1104765092, 5), + /* K2 */ be_nested_string("[", -569630790, 1), + /* K3 */ be_const_int(0), + /* K4 */ be_nested_string(",", 688690635, 1), + /* K5 */ be_nested_string("json_fdump_any", -946337911, 14), + /* K6 */ be_const_int(1), + /* K7 */ be_nested_string("]", -670296504, 1), + }), + (be_nested_const_str("json_fdump_list", -391087443, 15)), + ((bstring*) &be_const_str_input), + ( &(const binstruction[25]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0x8C100301, // 0001 GETMET R4 R1 K1 + 0x58180002, // 0002 LDCONST R6 K2 + 0x7C100400, // 0003 CALL R4 2 + 0x58100003, // 0004 LDCONST R4 K3 + 0x6014000C, // 0005 GETGBL R5 G12 + 0x5C180400, // 0006 MOVE R6 R2 + 0x7C140200, // 0007 CALL R5 1 + 0x14140805, // 0008 LT R5 R4 R5 + 0x7816000A, // 0009 JMPF R5 #0015 + 0x24140903, // 000A GT R5 R4 K3 + 0x78160002, // 000B JMPF R5 #000F + 0x8C140301, // 000C GETMET R5 R1 K1 + 0x581C0004, // 000D LDCONST R7 K4 + 0x7C140400, // 000E CALL R5 2 + 0x8C140105, // 000F GETMET R5 R0 K5 + 0x5C1C0200, // 0010 MOVE R7 R1 + 0x94200404, // 0011 GETIDX R8 R2 R4 + 0x7C140600, // 0012 CALL R5 3 + 0x00100906, // 0013 ADD R4 R4 K6 + 0x7001FFEF, // 0014 JMP #0005 + 0x8C140301, // 0015 GETMET R5 R1 K1 + 0x581C0007, // 0016 LDCONST R7 K7 + 0x7C140400, // 0017 CALL R5 2 + 0x80000000, // 0018 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: has +********************************************************************/ +be_local_closure(has, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("_p", 1594591802, 2), + /* K1 */ be_nested_string("has", -306245661, 3), + }), + (be_nested_const_str("has", -306245661, 3)), + ((bstring*) &be_const_str_input), + ( &(const binstruction[ 5]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x5C100200, // 0002 MOVE R4 R1 + 0x7C080400, // 0003 CALL R2 2 + 0x80040400, // 0004 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified class: Persist ********************************************************************/ be_local_class(Persist, 3, NULL, - be_nested_map(12, + be_nested_map(16, ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("json_fdump_map", -203012643, 14, 5), be_const_closure(json_fdump_map_closure) }, + { be_nested_key("setmember", 1432909441, 9, -1), be_const_closure(setmember_closure) }, + { be_nested_key("zero", -1955600541, 4, 15), be_const_closure(zero_closure) }, + { be_nested_key("member", 719708611, 6, 12), be_const_closure(member_closure) }, + { be_nested_key("json_fdump", 1694216580, 10, -1), be_const_closure(json_fdump_closure) }, + { be_nested_key("remove", -611183107, 6, -1), be_const_closure(remove_closure) }, + { be_nested_key("json_fdump_any", -946337911, 14, -1), be_const_closure(json_fdump_any_closure) }, + { be_nested_key("_p", 1594591802, 2, -1), be_const_var(1) }, { be_nested_key("save", -855671224, 4, -1), be_const_closure(save_closure) }, - { be_nested_key("setmember", 1432909441, 9, 4), be_const_closure(setmember_closure) }, - { be_nested_key("_p", 1594591802, 2, 5), be_const_var(1) }, - { be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) }, - { be_nested_key("load", -435725847, 4, -1), be_const_closure(load_closure) }, + { be_nested_key("load", -435725847, 4, 6), be_const_closure(load_closure) }, + { be_nested_key("find", -1108310694, 4, 7), be_const_closure(find_closure) }, + { be_nested_key("_filename", 1430813195, 9, -1), be_const_var(0) }, + { be_nested_key("init", 380752755, 4, 2), be_const_closure(init_closure) }, + { be_nested_key("json_fdump_list", -391087443, 15, 0), be_const_closure(json_fdump_list_closure) }, { be_nested_key("_dirty", 283846766, 6, -1), be_const_var(2) }, { be_nested_key("has", -306245661, 3, -1), be_const_closure(has_closure) }, - { be_nested_key("zero", -1955600541, 4, 8), be_const_closure(zero_closure) }, - { be_nested_key("member", 719708611, 6, 6), be_const_closure(member_closure) }, - { be_nested_key("remove", -611183107, 6, -1), be_const_closure(remove_closure) }, - { be_nested_key("find", -1108310694, 4, -1), be_const_closure(find_closure) }, - { be_nested_key("_filename", 1430813195, 9, -1), be_const_var(0) }, })), (be_nested_const_str("Persist", 1456346147, 7)) ); @@ -422,7 +672,7 @@ be_local_closure(_anonymous_, /* name */ /* K0 */ be_const_class(be_class_Persist), }), (be_nested_const_str("_anonymous_", 1957281476, 11)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 5]) { /* code */ 0x58040000, // 0000 LDCONST R1 K0 0xB4000000, // 0001 CLASS K0 @@ -434,9 +684,16 @@ be_local_closure(_anonymous_, /* name */ ); /*******************************************************************/ -/* @const_object_info_begin -module persist (scope: global) { - init, closure(_anonymous__closure) -} -@const_object_info_end */ -#include "../generate/be_fixed_persist.h" + +/******************************************************************** +** Solidified module: persist +********************************************************************/ +be_local_module(persist, + "persist", + be_nested_map(1, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("init", 380752755, 4, -1), be_const_closure(_anonymous__closure) }, + })) +); +BE_EXPORT_VARIABLE be_define_const_native_module(persist); +/********************************************************************/ diff --git a/lib/libesp32/Berry/default/be_port.cpp b/lib/libesp32/Berry/default/be_port.cpp index 88815a000..1870d3ae3 100644 --- a/lib/libesp32/Berry/default/be_port.cpp +++ b/lib/libesp32/Berry/default/be_port.cpp @@ -18,7 +18,9 @@ // Local pointer for file managment #ifdef USE_UFILESYS #include + #include "ZipReadFS.h" extern FS *ufsp; + FS zip_ufsp(ZipReadFSImplPtr(new ZipReadFSImpl(&ufsp))); #endif // USE_UFILESYS /* this file contains configuration for the file system. */ @@ -95,10 +97,42 @@ BERRY_API void be_writebuffer(const char *buffer, size_t length) // be_fwrite(stdout, buffer, length); } + +extern "C" { + int m_path_listdir(bvm *vm) + { + if (be_top(vm) >= 1 && be_isstring(vm, 1)) { + const char *path = be_tostring(vm, 1); + be_newobject(vm, "list"); + + File dir = ufsp->open(path, "r"); + if (dir) { + dir.rewindDirectory(); + while (1) { + File entry = dir.openNextFile(); + if (!entry) { + break; + } + const char * fn = entry.name(); + if (strcmp(fn, ".") && strcmp(fn, "..")) { + be_pushstring(vm, fn); + be_data_push(vm, -2); + be_pop(vm, 1); + } + + } + } + be_pop(vm, 1); + be_return(vm); + + } + be_return_nil(vm); + } +} + BERRY_API char* be_readstring(char *buffer, size_t size) { - return 0; - // return be_fgets(stdin, buffer, (int)size); + return be_fgets(stdin, buffer, (int)size); } /* use the standard library implementation file API. */ @@ -106,7 +140,7 @@ BERRY_API char* be_readstring(char *buffer, size_t size) void* be_fopen(const char *filename, const char *modes) { #ifdef USE_UFILESYS - if (ufsp != nullptr && filename != nullptr && modes != nullptr) { + if (filename != nullptr && modes != nullptr) { char fname2[strlen(filename) + 2]; if (filename[0] == '/') { strcpy(fname2, filename); // copy unchanged @@ -115,7 +149,7 @@ void* be_fopen(const char *filename, const char *modes) strcpy(fname2 + 1, filename); // prepend with '/' } // Serial.printf("be_fopen filename=%s, modes=%s\n", filename, modes); - File f = ufsp->open(fname2, modes); // returns an object, not a pointer + File f = zip_ufsp.open(fname2, modes); // returns an object, not a pointer if (f) { File * f_ptr = new File(f); // copy to dynamic object *f_ptr = f; // TODO is this necessary? @@ -127,11 +161,24 @@ void* be_fopen(const char *filename, const char *modes) // return fopen(filename, modes); } +// Tasmota specific, get the underlying Arduino File +File * be_get_arduino_file(void *hfile) +{ +#ifdef USE_UFILESYS + if (hfile != nullptr) { + File * f_ptr = (File*) hfile; + return f_ptr; + } +#endif // USE_UFILESYS + return nullptr; + // return fopen(filename, modes); +} + int be_fclose(void *hfile) { #ifdef USE_UFILESYS // Serial.printf("be_fclose\n"); - if (ufsp != nullptr && hfile != nullptr) { + if (hfile != nullptr) { File * f_ptr = (File*) hfile; f_ptr->close(); delete f_ptr; @@ -146,7 +193,7 @@ size_t be_fwrite(void *hfile, const void *buffer, size_t length) { #ifdef USE_UFILESYS // Serial.printf("be_fwrite %d\n", length); - if (ufsp != nullptr && hfile != nullptr && buffer != nullptr) { + if (hfile != nullptr && buffer != nullptr) { File * f_ptr = (File*) hfile; return f_ptr->write((const uint8_t*) buffer, length); } @@ -159,7 +206,7 @@ size_t be_fread(void *hfile, void *buffer, size_t length) { #ifdef USE_UFILESYS // Serial.printf("be_fread %d\n", length); - if (ufsp != nullptr && hfile != nullptr && buffer != nullptr) { + if (hfile != nullptr && buffer != nullptr) { File * f_ptr = (File*) hfile; int32_t ret = f_ptr->read((uint8_t*) buffer, length); if (ret >= 0) { @@ -175,13 +222,19 @@ size_t be_fread(void *hfile, void *buffer, size_t length) char* be_fgets(void *hfile, void *buffer, int size) { #ifdef USE_UFILESYS - // Serial.printf("be_fgets %d\n", size); + if (size <= 2) { return nullptr; } // can't work if size is 2 or less + // Serial.printf("be_fgets size=%d hfile=%p buf=%p\n", size, hfile, buffer); uint8_t * buf = (uint8_t*) buffer; - if (ufsp != nullptr && hfile != nullptr && buffer != nullptr && size > 0) { + if (hfile != nullptr && buffer != nullptr && size > 0) { File * f_ptr = (File*) hfile; - int ret = f_ptr->readBytesUntil('\n', buf, size - 1); + int ret = f_ptr->readBytesUntil('\n', buf, size - 2); + // Serial.printf("be_fgets ret=%d\n", ret); if (ret >= 0) { buf[ret] = 0; // add string terminator + if (ret > 0 && ret < size - 2) { + buf[ret] = '\n'; + buf[ret+1] = 0; + } return (char*) buffer; } } @@ -194,7 +247,7 @@ int be_fseek(void *hfile, long offset) { #ifdef USE_UFILESYS // Serial.printf("be_fseek %d\n", offset); - if (ufsp != nullptr && hfile != nullptr) { + if (hfile != nullptr) { File * f_ptr = (File*) hfile; if (f_ptr->seek(offset)) { return 0; // success @@ -209,7 +262,7 @@ long int be_ftell(void *hfile) { #ifdef USE_UFILESYS // Serial.printf("be_ftell\n"); - if (ufsp != nullptr && hfile != nullptr) { + if (hfile != nullptr) { File * f_ptr = (File*) hfile; return f_ptr->position(); } @@ -222,7 +275,7 @@ long int be_fflush(void *hfile) { #ifdef USE_UFILESYS // Serial.printf("be_fflush\n"); - if (ufsp != nullptr && hfile != nullptr) { + if (hfile != nullptr) { File * f_ptr = (File*) hfile; f_ptr->flush(); } @@ -235,7 +288,7 @@ size_t be_fsize(void *hfile) { #ifdef USE_UFILESYS // Serial.printf("be_fsize\n"); - if (ufsp != nullptr && hfile != nullptr) { + if (hfile != nullptr) { File * f_ptr = (File*) hfile; return f_ptr->size(); } @@ -251,7 +304,7 @@ size_t be_fsize(void *hfile) extern "C" time_t be_last_modified(void *hfile) { #ifdef USE_UFILESYS - if (ufsp != nullptr && hfile != nullptr) { + if (hfile != nullptr) { File * f_ptr = (File*) hfile; return f_ptr->getLastWrite(); } @@ -262,16 +315,29 @@ extern "C" time_t be_last_modified(void *hfile) int be_isexist(const char *filename) { #ifdef USE_UFILESYS - if (ufsp != nullptr) { - char fname2[strlen(filename) + 2]; - if (filename[0] == '/') { - strcpy(fname2, filename); // copy unchanged - } else { - fname2[0] = '/'; - strcpy(fname2 + 1, filename); // prepend with '/' - } - return ufsp->exists(fname2); + char fname2[strlen(filename) + 2]; + if (filename[0] == '/') { + strcpy(fname2, filename); // copy unchanged + } else { + fname2[0] = '/'; + strcpy(fname2 + 1, filename); // prepend with '/' } + return zip_ufsp.exists(fname2); +#endif // USE_UFILESYS + return 0; +} + +int be_unlink(const char *filename) +{ +#ifdef USE_UFILESYS + char fname2[strlen(filename) + 2]; + if (filename[0] == '/') { + strcpy(fname2, filename); // copy unchanged + } else { + fname2[0] = '/'; + strcpy(fname2 + 1, filename); // prepend with '/' + } + return zip_ufsp.remove(fname2); #endif // USE_UFILESYS return 0; } diff --git a/lib/libesp32/Berry/default/be_tasmotalib.c b/lib/libesp32/Berry/default/be_tasmotalib.c index bcc8dd9a5..dd5c986d8 100644 --- a/lib/libesp32/Berry/default/be_tasmotalib.c +++ b/lib/libesp32/Berry/default/be_tasmotalib.c @@ -12,6 +12,7 @@ extern struct dummy_struct be_tasmota_global_struct; extern struct dummy_struct be_tasmota_settings_struct; extern int l_getFreeHeap(bvm *vm); +extern int l_arch(bvm *vm); extern int l_publish(bvm *vm); extern int l_publish_result(bvm *vm); extern int l_cmd(bvm *vm); @@ -68,8 +69,8 @@ be_local_closure(kv_init, /* name */ /* K0 */ be_nested_string("k", -301188886, 1), /* K1 */ be_nested_string("v", -217300791, 1), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 3]) { /* code */ 0x90020001, // 0000 SETMBR R0 K0 R1 0x90020202, // 0001 SETMBR R0 K1 R2 @@ -112,7 +113,7 @@ be_local_closure(kv, /* name */ /* K0 */ be_const_class(be_class_KV), }), (be_nested_const_str("kv", 1497177492, 2)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 7]) { /* code */ 0x580C0000, // 0000 LDCONST R3 K0 0xB4000000, // 0001 CLASS K0 @@ -153,7 +154,7 @@ be_local_closure(init, /* name */ /* K9 */ be_nested_string("toptr", -915119842, 5), /* K10 */ be_nested_string("_settings_def", -519406989, 13), }), - (be_nested_const_str("init", 380752755, 4)), + ((bstring*) &be_const_str_init), (be_nested_const_str("tasmota.be", 1128870755, 10)), ( &(const binstruction[23]) { /* code */ 0xB8060200, // 0000 GETNGBL R1 K1 @@ -202,7 +203,7 @@ be_local_closure(add_driver, /* name */ /* K1 */ be_nested_string("push", -2022703139, 4), }), (be_nested_const_str("add_driver", 1654458371, 10)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[12]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x780A0004, // 0001 JMPF R2 #0007 @@ -245,7 +246,7 @@ be_local_closure(gen_cb, /* name */ /* K6 */ be_nested_string("No callback available", 633786138, 21), }), (be_nested_const_str("gen_cb", -1049739745, 6)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[34]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x4C0C0000, // 0001 LDNIL R3 @@ -306,7 +307,7 @@ be_local_closure(set_light, /* name */ /* K2 */ be_nested_string("set", -970520829, 3), }), (be_nested_const_str("set_light", -1118891144, 9)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[18]) { /* code */ 0x600C0001, // 0000 GETGBL R3 G1 0x58100000, // 0001 LDCONST R4 K0 @@ -353,7 +354,7 @@ be_local_closure(remove_rule, /* name */ /* K4 */ be_const_int(1), }), (be_nested_const_str("remove_rule", -838755968, 11)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[21]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x780A0011, // 0001 JMPF R2 #0014 @@ -402,7 +403,7 @@ be_local_closure(add_cmd, /* name */ /* K3 */ be_nested_string("the second argument is not a function", -340392827, 37), }), (be_nested_const_str("add_cmd", -933336417, 7)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[15]) { /* code */ 0x880C0100, // 0000 GETMBR R3 R0 K0 0x740E0002, // 0001 JMPT R3 #0005 @@ -446,7 +447,7 @@ be_local_closure(wire_scan, /* name */ /* K4 */ be_nested_string("wire2", -1065468258, 5), }), (be_nested_const_str("wire_scan", -1623691416, 9)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[33]) { /* code */ 0x4C0C0000, // 0000 LDNIL R3 0x200C0403, // 0001 NE R3 R2 R3 @@ -508,7 +509,7 @@ be_local_closure(find_key_i, /* name */ /* K4 */ be_nested_string("stop_iteration", -121173395, 14), }), (be_nested_const_str("find_key_i", 850136726, 10)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[30]) { /* code */ 0xA40E0000, // 0000 IMPORT R3 K0 0x8C100701, // 0001 GETMET R4 R3 K1 @@ -564,7 +565,7 @@ be_local_closure(chars_in_string, /* name */ /* K1 */ be_const_int(1), }), (be_nested_const_str("chars_in_string", -1146182164, 15)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[31]) { /* code */ 0x780E0001, // 0000 JMPF R3 #0003 0x50100200, // 0001 LDBOOL R4 1 0 @@ -623,7 +624,7 @@ be_local_closure(set_timer, /* name */ /* K3 */ be_nested_string("millis", 1214679063, 6), }), (be_nested_const_str("set_timer", 2135414533, 9)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[16]) { /* code */ 0x88100100, // 0000 GETMBR R4 R0 K0 0x74120002, // 0001 JMPT R4 #0005 @@ -669,7 +670,7 @@ be_local_closure(add_rule, /* name */ /* K5 */ be_nested_string("the second argument is not a function", -340392827, 37), }), (be_nested_const_str("add_rule", 596540743, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[20]) { /* code */ 0x880C0100, // 0000 GETMBR R3 R0 K0 0x740E0002, // 0001 JMPT R3 #0005 @@ -721,7 +722,7 @@ be_local_closure(run_deferred, /* name */ /* K7 */ be_const_int(1), }), (be_nested_const_str("run_deferred", 371594696, 12)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[27]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 0x78060017, // 0001 JMPF R1 #001A @@ -822,7 +823,7 @@ be_local_closure(time_str, /* name */ /* K9 */ be_nested_string("sec", -1155074638, 3), }), (be_nested_const_str("time_str", -1681139684, 8)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[14]) { /* code */ 0xA40A0000, // 0000 IMPORT R2 K0 0x8C0C0101, // 0001 GETMET R3 R0 K1 @@ -878,7 +879,7 @@ be_local_closure(load, /* name */ /* K17 */ be_nested_string("BRY: could not save compiled file %s (%s)", 736659787, 41), }), (be_nested_const_str("load", -435725847, 4)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[87]) { /* code */ 0xA40A0000, // 0000 IMPORT R2 K0 0xA40E0200, // 0001 IMPORT R3 K1 @@ -995,7 +996,7 @@ be_local_closure(find_op, /* name */ /* K5 */ be_const_int(1), }), (be_nested_const_str("find_op", -528253920, 7)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[42]) { /* code */ 0xA40A0000, // 0000 IMPORT R2 K0 0x580C0001, // 0001 LDCONST R3 K1 @@ -1068,7 +1069,7 @@ be_local_closure(remove_timer, /* name */ /* K6 */ be_const_int(1), }), (be_nested_const_str("remove_timer", -153495081, 12)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[23]) { /* code */ 0xB80A0000, // 0000 GETNGBL R2 K0 0x88080501, // 0001 GETMBR R2 R2 K1 @@ -1118,7 +1119,7 @@ be_local_closure(get_light, /* name */ /* K2 */ be_nested_string("get", 1410115415, 3), }), (be_nested_const_str("get_light", 381930476, 9)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[16]) { /* code */ 0x60080001, // 0000 GETGBL R2 G1 0x580C0000, // 0001 LDCONST R3 K0 @@ -1170,7 +1171,7 @@ be_local_closure(exec_rules, /* name */ /* K11 */ be_const_int(1), }), (be_nested_const_str("exec_rules", 1445221092, 10)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[48]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x740A0003, // 0001 JMPT R2 #0006 @@ -1254,7 +1255,7 @@ be_local_closure(exec_tele, /* name */ /* K11 */ be_const_int(1), }), (be_nested_const_str("exec_tele", 1020751601, 9)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[41]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x780A0024, // 0001 JMPF R2 #0027 @@ -1322,7 +1323,7 @@ be_local_closure(remove_driver, /* name */ /* K2 */ be_nested_string("pop", 1362321360, 3), }), (be_nested_const_str("remove_driver", 1030243768, 13)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[14]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x780A000A, // 0001 JMPF R2 #000D @@ -1376,7 +1377,7 @@ be_local_closure(try_rule, /* name */ /* K15 */ be_nested_string("<=", -1795743310, 2), }), (be_nested_const_str("try_rule", 1986449405, 8)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[141]) { /* code */ 0xA4120000, // 0000 IMPORT R4 K0 0x8C140101, // 0001 GETMET R5 R0 K1 @@ -1544,7 +1545,7 @@ be_local_closure(cb_dispatch, /* name */ /* K2 */ be_nested_string("find", -1108310694, 4), }), (be_nested_const_str("cb_dispatch", 1741510499, 11)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[20]) { /* code */ 0x88180100, // 0000 GETMBR R6 R0 K0 0x4C1C0000, // 0001 LDNIL R7 @@ -1591,7 +1592,7 @@ be_local_closure(gc, /* name */ /* K2 */ be_nested_string("allocated", 429986098, 9), }), (be_nested_const_str("gc", 1042313471, 2)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 6]) { /* code */ 0xA4060000, // 0000 IMPORT R1 K0 0x8C080301, // 0001 GETMET R2 R1 K1 @@ -1761,7 +1762,7 @@ be_local_closure(remove_cmd, /* name */ /* K1 */ be_nested_string("remove", -611183107, 6), }), (be_nested_const_str("remove_cmd", -462651594, 10)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 7]) { /* code */ 0x88080100, // 0000 GETMBR R2 R0 K0 0x780A0003, // 0001 JMPF R2 #0006 @@ -1797,7 +1798,7 @@ be_local_closure(exec_cmd, /* name */ /* K4 */ be_nested_string("resolvecmnd", 993361485, 11), }), (be_nested_const_str("exec_cmd", 493567399, 8)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[27]) { /* code */ 0x88100100, // 0000 GETMBR R4 R0 K0 0x78120016, // 0001 JMPF R4 #0019 @@ -1865,6 +1866,7 @@ class be_class_tasmota (scope: global, name: Tasmota) { kv, closure(kv_closure) get_free_heap, func(l_getFreeHeap) + arch, func(l_arch) publish, func(l_publish) publish_result, func(l_publish_result) _cmd, func(l_cmd) diff --git a/lib/libesp32/Berry/default/be_timer_class.c b/lib/libesp32/Berry/default/be_timer_class.c index e6c495851..2646fd6b2 100644 --- a/lib/libesp32/Berry/default/be_timer_class.c +++ b/lib/libesp32/Berry/default/be_timer_class.c @@ -27,7 +27,7 @@ be_local_closure(tostring, /* name */ /* K5 */ be_nested_string("id", 926444256, 2), }), (be_nested_const_str("tostring", -1995258651, 8)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_input), ( &(const binstruction[19]) { /* code */ 0xA4060000, // 0000 IMPORT R1 K0 0x8C080301, // 0001 GETMET R2 R1 K1 @@ -72,8 +72,8 @@ be_local_closure(init, /* name */ /* K1 */ be_nested_string("f", -485742695, 1), /* K2 */ be_nested_string("id", 926444256, 2), }), - (be_nested_const_str("init", 380752755, 4)), - (be_nested_const_str("Tasmota.be", 825809411, 10)), + ((bstring*) &be_const_str_init), + ((bstring*) &be_const_str_input), ( &(const binstruction[ 4]) { /* code */ 0x90020001, // 0000 SETMBR R0 K0 R1 0x90020202, // 0001 SETMBR R0 K1 R2 diff --git a/lib/libesp32/Berry/default/be_webclient_lib.c b/lib/libesp32/Berry/default/be_webclient_lib.c index bc24705d6..0e4b66e90 100644 --- a/lib/libesp32/Berry/default/be_webclient_lib.c +++ b/lib/libesp32/Berry/default/be_webclient_lib.c @@ -21,6 +21,7 @@ extern int wc_addheader(bvm *vm); extern int wc_GET(bvm *vm); extern int wc_POST(bvm *vm); extern int wc_getstring(bvm *vm); +extern int wc_writefile(bvm *vm); extern int wc_getsize(bvm *vm); #include "../generate/be_fixed_be_class_webclient.h" @@ -48,6 +49,7 @@ class be_class_webclient (scope: global, name: webclient) { GET, func(wc_GET) POST, func(wc_POST) get_string, func(wc_getstring) + write_file, func(wc_writefile) get_size, func(wc_getsize) } @const_object_info_end */ diff --git a/lib/libesp32/Berry/default/be_wirelib.c b/lib/libesp32/Berry/default/be_wirelib.c index 089ed5cf5..63c4da93a 100644 --- a/lib/libesp32/Berry/default/be_wirelib.c +++ b/lib/libesp32/Berry/default/be_wirelib.c @@ -44,7 +44,7 @@ be_local_closure(write_bytes, /* name */ /* K2 */ be_nested_string("_end_transmission", -1057486896, 17), }), (be_nested_const_str("write_bytes", 1227543792, 11)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[12]) { /* code */ 0x8C100100, // 0000 GETMET R4 R0 K0 0x5C180200, // 0001 MOVE R6 R1 @@ -86,7 +86,7 @@ be_local_closure(read_bytes, /* name */ /* K5 */ be_nested_string("_read", 346717030, 5), }), (be_nested_const_str("read_bytes", -718234123, 10)), - (be_nested_const_str("input", -103256197, 5)), + ((bstring*) &be_const_str_input), ( &(const binstruction[24]) { /* code */ 0x8C100100, // 0000 GETMET R4 R0 K0 0x5C180200, // 0001 MOVE R6 R1 diff --git a/lib/libesp32/Berry/default/embedded/persist.be b/lib/libesp32/Berry/default/embedded/persist.be index c69ac726d..e0bb8025f 100644 --- a/lib/libesp32/Berry/default/embedded/persist.be +++ b/lib/libesp32/Berry/default/embedded/persist.be @@ -75,7 +75,11 @@ persist_module.init = def (m) if f != nil f.close() end raise e, m end - self._p = val + if isinstance(val, map) + self._p = val # sucess + else + print("BRY: failed to load _persist.json") + end self._dirty = false end @@ -83,22 +87,72 @@ persist_module.init = def (m) end def save() - import json - var f # file object try f = open(self._filename, "w") - f.write(json.dump(self._p)) + self.json_fdump(f) f.close() except .. as e, m if f != nil f.close() end + f = open(self._filename, "w") + f.write('{}') # fallback write empty map + f.close() raise e, m end self._dirty = false # print("Saving") end + + def json_fdump_any(f, v) + import json + if isinstance(v, map) + self.json_fdump_map(f, v) + elif isinstance(v, list)v + self.json_fdump_list(f, v) + else + f.write(json.dump(v)) + end + end + + def json_fdump_map(f, v) + import json + f.write('{') + var sep = nil + for k:v.keys() + if sep != nil f.write(sep) end + + f.write(json.dump(str(k))) + f.write(':') + self.json_fdump_any(f, v[k]) + + sep = "," + end + f.write('}') + end + + def json_fdump_list(f, v) + import json + f.write('[') + var i = 0 + while i < size(v) + if i > 0 f.write(',') end + self.json_fdump_any(f, v[i]) + i += 1 + end + f.write(']') + end + + def json_fdump(f) + import json + if isinstance(self._p, map) + self.json_fdump_map(f, self._p) + else + raise "internal_error", "persist._p is not a map" + end + end end + return Persist() # return an instance of this class end diff --git a/lib/libesp32/Berry/default/gpio.txt b/lib/libesp32/Berry/default/gpio.txt deleted file mode 100644 index ccece9c15..000000000 --- a/lib/libesp32/Berry/default/gpio.txt +++ /dev/null @@ -1,239 +0,0 @@ -GPIO_NONE 0 -GPIO_KEY1 1 -GPIO_KEY1_NP 2 -GPIO_KEY1_INV 3 -GPIO_KEY1_INV_NP 4 -GPIO_SWT1 5 -GPIO_SWT1_NP 6 -GPIO_REL1 7 -GPIO_REL1_INV 8 -GPIO_LED1 9 -GPIO_LED1_INV 10 -GPIO_CNTR1 11 -GPIO_CNTR1_NP 12 -GPIO_PWM1 13 -GPIO_PWM1_INV 14 -GPIO_BUZZER 15 -GPIO_BUZZER_INV 16 -GPIO_LEDLNK 17 -GPIO_LEDLNK_INV 18 -GPIO_I2C_SCL 19 -GPIO_I2C_SDA 20 -GPIO_SPI_MISO 21 -GPIO_SPI_MOSI 22 -GPIO_SPI_CLK 23 -GPIO_SPI_CS 24 -GPIO_SPI_DC 25 -GPIO_SSPI_MISO 26 -GPIO_SSPI_MOSI 27 -GPIO_SSPI_SCLK 28 -GPIO_SSPI_CS 29 -GPIO_SSPI_DC 30 -GPIO_BACKLIGHT 31 -GPIO_OLED_RESET 32 -GPIO_IRSEND 33 -GPIO_IRRECV 34 -GPIO_RFSEND 35 -GPIO_RFRECV 36 -GPIO_DHT11 37 -GPIO_DHT22 38 -GPIO_SI7021 39 -GPIO_DHT11_OUT 40 -GPIO_DSB 41 -GPIO_DSB_OUT 42 -GPIO_WS2812 43 -GPIO_MHZ_TXD 44 -GPIO_MHZ_RXD 45 -GPIO_PZEM0XX_TX 46 -GPIO_PZEM004_RX 47 -GPIO_PZEM016_RX 48 -GPIO_PZEM017_RX 49 -GPIO_SAIR_TX 50 -GPIO_SAIR_RX 51 -GPIO_PMS5003_TX 52 -GPIO_PMS5003_RX 53 -GPIO_SDS0X1_TX 54 -GPIO_SDS0X1_RX 55 -GPIO_SBR_TX 56 -GPIO_SBR_RX 57 -GPIO_SR04_TRIG 58 -GPIO_SR04_ECHO 59 -GPIO_SDM120_TX 60 -GPIO_SDM120_RX 61 -GPIO_SDM630_TX 62 -GPIO_SDM630_RX 63 -GPIO_TM1638CLK 64 -GPIO_TM1638DIO 65 -GPIO_TM1638STB 66 -GPIO_MP3_DFR562 67 -GPIO_HX711_SCK 68 -GPIO_HX711_DAT 69 -GPIO_TX2X_TXD_BLACK 70 -GPIO_TUYA_TX 71 -GPIO_TUYA_RX 72 -GPIO_MGC3130_XFER 73 -GPIO_MGC3130_RESET 74 -GPIO_RF_SENSOR 75 -GPIO_AZ_TXD 76 -GPIO_AZ_RXD 77 -GPIO_MAX31855CS 78 -GPIO_MAX31855CLK 79 -GPIO_MAX31855DO 80 -GPIO_NRG_SEL 81 -GPIO_NRG_SEL_INV 82 -GPIO_NRG_CF1 83 -GPIO_HLW_CF 84 -GPIO_HJL_CF 85 -GPIO_MCP39F5_TX 86 -GPIO_MCP39F5_RX 87 -GPIO_MCP39F5_RST 88 -GPIO_PN532_TXD 89 -GPIO_PN532_RXD 90 -GPIO_SM16716_CLK 91 -GPIO_SM16716_DAT 92 -GPIO_SM16716_SEL 93 -GPIO_DI 94 -GPIO_DCKI 95 -GPIO_CSE7766_TX 96 -GPIO_CSE7766_RX 97 -GPIO_ARIRFRCV 98 -GPIO_ARIRFSEL 99 -GPIO_TXD 100 -GPIO_RXD 101 -GPIO_ROT1A 102 -GPIO_ROT1B 103 -GPIO_ADC_JOY 104 -GPIO_SSPI_MAX31865_CS1 105 -GPIO_HRE_CLOCK 106 -GPIO_HRE_DATA 107 -GPIO_ADE7953_IRQ 108 -GPIO_SOLAXX1_TX 109 -GPIO_SOLAXX1_RX 110 -GPIO_ZIGBEE_TX 111 -GPIO_ZIGBEE_RX 112 -GPIO_RDM6300_RX 113 -GPIO_IBEACON_TX 114 -GPIO_IBEACON_RX 115 -GPIO_A4988_DIR 116 -GPIO_A4988_STP 117 -GPIO_A4988_ENA 118 -GPIO_A4988_MS1 119 -GPIO_OUTPUT_HI 120 -GPIO_OUTPUT_LO 121 -GPIO_DDS2382_TX 122 -GPIO_DDS2382_RX 123 -GPIO_DDSU666_TX 124 -GPIO_DDSU666_RX 125 -GPIO_SM2135_CLK 126 -GPIO_SM2135_DAT 127 -GPIO_DEEPSLEEP 128 -GPIO_EXS_ENABLE 129 -GPIO_TASMOTACLIENT_TXD 130 -GPIO_TASMOTACLIENT_RXD 131 -GPIO_TASMOTACLIENT_RST 132 -GPIO_TASMOTACLIENT_RST_INV 133 -GPIO_HPMA_RX 134 -GPIO_HPMA_TX 135 -GPIO_GPS_RX 136 -GPIO_GPS_TX 137 -GPIO_HM10_RX 138 -GPIO_HM10_TX 139 -GPIO_LE01MR_RX 140 -GPIO_LE01MR_TX 141 -GPIO_CC1101_GDO0 142 -GPIO_CC1101_GDO2 143 -GPIO_HRXL_RX 144 -GPIO_ELECTRIQ_MOODL_TX 145 -GPIO_AS3935 146 -GPIO_ADC_INPUT 147 -GPIO_ADC_TEMP 148 -GPIO_ADC_LIGHT 149 -GPIO_ADC_BUTTON 150 -GPIO_ADC_BUTTON_INV 151 -GPIO_ADC_RANGE 152 -GPIO_ADC_CT_POWER 153 -GPIO_WEBCAM_PWDN 154 -GPIO_WEBCAM_RESET 155 -GPIO_WEBCAM_XCLK 156 -GPIO_WEBCAM_SIOD 157 -GPIO_WEBCAM_SIOC 158 -GPIO_WEBCAM_DATA 159 -GPIO_WEBCAM_VSYNC 160 -GPIO_WEBCAM_HREF 161 -GPIO_WEBCAM_PCLK 162 -GPIO_WEBCAM_PSCLK 163 -GPIO_WEBCAM_HSD 164 -GPIO_WEBCAM_PSRCS 165 -GPIO_BOILER_OT_RX 166 -GPIO_BOILER_OT_TX 167 -GPIO_WINDMETER_SPEED 168 -GPIO_KEY1_TC 169 -GPIO_BL0940_RX 170 -GPIO_TCP_TX 171 -GPIO_TCP_RX 172 -GPIO_ETH_PHY_POWER 173 -GPIO_ETH_PHY_MDC 174 -GPIO_ETH_PHY_MDIO 175 -GPIO_TELEINFO_RX 176 -GPIO_TELEINFO_ENABLE 177 -GPIO_LMT01 178 -GPIO_IEM3000_TX 179 -GPIO_IEM3000_RX 180 -GPIO_ZIGBEE_RST 181 -GPIO_DYP_RX 182 -GPIO_MIEL_HVAC_TX 183 -GPIO_MIEL_HVAC_RX 184 -GPIO_WE517_TX 185 -GPIO_WE517_RX 186 -GPIO_AS608_TX 187 -GPIO_AS608_RX 188 -GPIO_SHELLY_DIMMER_BOOT0 189 -GPIO_SHELLY_DIMMER_RST_INV 190 -GPIO_RC522_RST 191 -GPIO_P9813_CLK 192 -GPIO_P9813_DAT 193 -GPIO_OPTION_A 194 -GPIO_FTC532 195 -GPIO_RC522_CS 196 -GPIO_NRF24_CS 197 -GPIO_NRF24_DC 198 -GPIO_ILI9341_CS 199 -GPIO_ILI9341_DC 200 -GPIO_ILI9488_CS 201 -GPIO_EPAPER29_CS 202 -GPIO_EPAPER42_CS 203 -GPIO_SSD1351_CS 204 -GPIO_RA8876_CS 205 -GPIO_ST7789_CS 206 -GPIO_ST7789_DC 207 -GPIO_SSD1331_CS 208 -GPIO_SSD1331_DC 209 -GPIO_SDCARD_CS 210 -GPIO_ROT1A_NP 211 -GPIO_ROT1B_NP 212 -GPIO_ADC_PH 213 -GPIO_BS814_CLK 214 -GPIO_BS814_DAT 215 -GPIO_WIEGAND_D0 216 -GPIO_WIEGAND_D1 217 -GPIO_NEOPOOL_TX 218 -GPIO_NEOPOOL_RX 219 -GPIO_SDM72_TX 220 -GPIO_SDM72_RX 221 -GPIO_TM1637CLK 222 -GPIO_TM1637DIO 223 -GPIO_PROJECTOR_CTRL_TX 224 -GPIO_PROJECTOR_CTRL_RX 225 -GPIO_SSD1351_DC 226 -GPIO_XPT2046_CS 227 -GPIO_CSE7761_TX 228 -GPIO_CSE7761_RX 229 -GPIO_VL53L0X_XSHUT1 230 -GPIO_MAX7219CLK 231 -GPIO_MAX7219DIN 232 -GPIO_MAX7219CS 233 -GPIO_TFMINIPLUS_TX 234 -GPIO_TFMINIPLUS_RX 235 -GPIO_ZEROCROSS 236 -GPIO_HALLEFFECT 237 -GPIO_SENSOR_END 238 \ No newline at end of file diff --git a/lib/libesp32/Berry/generate/be_const_strtab.h b/lib/libesp32/Berry/generate/be_const_strtab.h index 519c2b601..aaf1a94a3 100644 --- a/lib/libesp32/Berry/generate/be_const_strtab.h +++ b/lib/libesp32/Berry/generate/be_const_strtab.h @@ -1,604 +1,343 @@ -extern const bcstring be_const_str_memory; -extern const bcstring be_const_str_resp_cmnd; -extern const bcstring be_const_str_LE01MR_TX; -extern const bcstring be_const_str_RA8876_CS; -extern const bcstring be_const_str_HX711_DAT; -extern const bcstring be_const_str_OUTPUT_HI; -extern const bcstring be_const_str_FALLING; -extern const bcstring be_const_str_content_send; -extern const bcstring be_const_str_while; -extern const bcstring be_const_str_AudioFileSourceFS; -extern const bcstring be_const_str_clear; -extern const bcstring be_const_str_pin; -extern const bcstring be_const_str_response_append; -extern const bcstring be_const_str_write_bit; -extern const bcstring be_const_str_try; -extern const bcstring be_const_str_get_free_heap; -extern const bcstring be_const_str_pow; -extern const bcstring be_const_str_set_light; -extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN; -extern const bcstring be_const_str_ILI9488_CS; -extern const bcstring be_const_str_WIEGAND_D1; -extern const bcstring be_const_str__available; -extern const bcstring be_const_str__settings_def; -extern const bcstring be_const_str_find_key_i; -extern const bcstring be_const_str_event; -extern const bcstring be_const_str_SERIAL_6O1; -extern const bcstring be_const_str_ST7789_DC; -extern const bcstring be_const_str_WE517_TX; -extern const bcstring be_const_str_byte; -extern const bcstring be_const_str_set_useragent; -extern const bcstring be_const_str_SERIAL_7E2; -extern const bcstring be_const_str_TASMOTACLIENT_TXD; -extern const bcstring be_const_str_WEBCAM_PCLK; -extern const bcstring be_const_str_toptr; -extern const bcstring be_const_str_Tasmota; -extern const bcstring be_const_str__def; -extern const bcstring be_const_str_KEY1_INV_NP; -extern const bcstring be_const_str_dump; -extern const bcstring be_const_str_MAX31855DO; -extern const bcstring be_const_str_ZIGBEE_RX; -extern const bcstring be_const_str_opt_call; -extern const bcstring be_const_str_HPMA_RX; -extern const bcstring be_const_str_I2S_IN_DATA; -extern const bcstring be_const_str_AudioOutputI2S; -extern const bcstring be_const_str_WEBCAM_SIOC; -extern const bcstring be_const_str_bytes; -extern const bcstring be_const_str_getbits; -extern const bcstring be_const_str_setrange; -extern const bcstring be_const_str_RC522_CS; -extern const bcstring be_const_str_WIEGAND_D0; -extern const bcstring be_const_str_char; -extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV; -extern const bcstring be_const_str_available; -extern const bcstring be_const_str_FTC532; -extern const bcstring be_const_str_MCP39F5_RST; -extern const bcstring be_const_str_MP3_DFR562; -extern const bcstring be_const_str_cmd; -extern const bcstring be_const_str_ST7789_CS; -extern const bcstring be_const_str_load; -extern const bcstring be_const_str_ADC_INPUT; -extern const bcstring be_const_str_Wire; -extern const bcstring be_const_str_floor; -extern const bcstring be_const_str_MAX7219CLK; -extern const bcstring be_const_str_ZIGBEE_RST; -extern const bcstring be_const_str__cmd; -extern const bcstring be_const_str_tolower; -extern const bcstring be_const_str_webclient; -extern const bcstring be_const_str_true; -extern const bcstring be_const_str_SDCARD_CS; -extern const bcstring be_const_str_ADC_CT_POWER; -extern const bcstring be_const_str_BL0940_RX; -extern const bcstring be_const_str_OPEN_DRAIN; -extern const bcstring be_const_str_dot_len; -extern const bcstring be_const_str_dot_size; -extern const bcstring be_const_str_return; -extern const bcstring be_const_str_SERIAL_7O1; -extern const bcstring be_const_str_module; -extern const bcstring be_const_str_shared_key; -extern const bcstring be_const_str_DCKI; -extern const bcstring be_const_str_add_cmd; -extern const bcstring be_const_str_iter; -extern const bcstring be_const_str_read32; -extern const bcstring be_const_str_PN532_RXD; -extern const bcstring be_const_str_SM2135_DAT; -extern const bcstring be_const_str_var; -extern const bcstring be_const_str_WINDMETER_SPEED; -extern const bcstring be_const_str_raise; -extern const bcstring be_const_str_CSE7761_RX; -extern const bcstring be_const_str_SAIR_RX; -extern const bcstring be_const_str_cb_dispatch; -extern const bcstring be_const_str_MIEL_HVAC_RX; -extern const bcstring be_const_str_count; -extern const bcstring be_const_str_REL1; -extern const bcstring be_const_str_SWT1; -extern const bcstring be_const_str_WS2812; -extern const bcstring be_const_str_rand; -extern const bcstring be_const_str_break; -extern const bcstring be_const_str_MAX7219CS; -extern const bcstring be_const_str_tag; -extern const bcstring be_const_str_write; -extern const bcstring be_const_str_WEBCAM_HSD; -extern const bcstring be_const_str_compile; -extern const bcstring be_const_str_type; -extern const bcstring be_const_str_TASMOTACLIENT_RST_INV; -extern const bcstring be_const_str_contains; -extern const bcstring be_const_str_rad; -extern const bcstring be_const_str_HALLEFFECT; -extern const bcstring be_const_str_PZEM017_RX; -extern const bcstring be_const_str_SSD1331_DC; -extern const bcstring be_const_str_PULLDOWN; -extern const bcstring be_const_str_get_power; -extern const bcstring be_const_str_isnan; -extern const bcstring be_const_str_add_rule; -extern const bcstring be_const_str_finish; -extern const bcstring be_const_str_NRF24_DC; -extern const bcstring be_const_str_SERIAL_7O2; -extern const bcstring be_const_str_remove; -extern const bcstring be_const_str_ADC_JOY; -extern const bcstring be_const_str_SERIAL_6O2; -extern const bcstring be_const_str_WEBCAM_XCLK; -extern const bcstring be_const_str__end_transmission; -extern const bcstring be_const_str_has; -extern const bcstring be_const_str_wire_scan; -extern const bcstring be_const_str_MHZ_TXD; -extern const bcstring be_const_str_SERIAL_7E1; -extern const bcstring be_const_str_range; -extern const bcstring be_const_str_time_reached; -extern const bcstring be_const_str_KEY1_PD; -extern const bcstring be_const_str_MAX31855CS; -extern const bcstring be_const_str_SSPI_CS; -extern const bcstring be_const_str_content_flush; -extern const bcstring be_const_str_PROJECTOR_CTRL_RX; -extern const bcstring be_const_str__settings_ptr; -extern const bcstring be_const_str_ILI9341_CS; -extern const bcstring be_const_str_WE517_RX; -extern const bcstring be_const_str_setitem; -extern const bcstring be_const_str_DDSU666_TX; -extern const bcstring be_const_str_TUYA_RX; -extern const bcstring be_const_str_scan; -extern const bcstring be_const_str_; -extern const bcstring be_const_str__request_from; -extern const bcstring be_const_str_find_op; -extern const bcstring be_const_str_has_arg; -extern const bcstring be_const_str_dot_w; -extern const bcstring be_const_str_PMS5003_TX; -extern const bcstring be_const_str_read13; -extern const bcstring be_const_str_EC_C25519; -extern const bcstring be_const_str_SBR_RX; -extern const bcstring be_const_str_ZEROCROSS; -extern const bcstring be_const_str_calldepth; -extern const bcstring be_const_str_codedump; -extern const bcstring be_const_str_gc; -extern const bcstring be_const_str_SERIAL_6N2; -extern const bcstring be_const_str_reset; -extern const bcstring be_const_str_deinit; -extern const bcstring be_const_str_ARIRFSEL; -extern const bcstring be_const_str_IEM3000_RX; -extern const bcstring be_const_str_tob64; -extern const bcstring be_const_str_PZEM016_RX; -extern const bcstring be_const_str_SERIAL_8E1; -extern const bcstring be_const_str_fromb64; -extern const bcstring be_const_str_members; -extern const bcstring be_const_str_reduce; -extern const bcstring be_const_str_wifi; -extern const bcstring be_const_str_KEY1_NP; -extern const bcstring be_const_str_content_send_style; -extern const bcstring be_const_str_GET; -extern const bcstring be_const_str_GPS_RX; -extern const bcstring be_const_str_dac_voltage; -extern const bcstring be_const_str_sinh; -extern const bcstring be_const_str_else; -extern const bcstring be_const_str_set_timer; -extern const bcstring be_const_str_update; -extern const bcstring be_const_str_HRE_DATA; -extern const bcstring be_const_str_I2C_Driver; -extern const bcstring be_const_str_RDM6300_RX; -extern const bcstring be_const_str_MCP39F5_TX; -extern const bcstring be_const_str_enabled; -extern const bcstring be_const_str_lower; -extern const bcstring be_const_str_remove_timer; -extern const bcstring be_const_str_wire; -extern const bcstring be_const_str_digital_read; -extern const bcstring be_const_str_get_switch; -extern const bcstring be_const_str_SDM120_RX; -extern const bcstring be_const_str_acos; -extern const bcstring be_const_str_read_bytes; -extern const bcstring be_const_str_BACKLIGHT; -extern const bcstring be_const_str_KEY1_INV_PD; -extern const bcstring be_const_str_NRG_SEL_INV; -extern const bcstring be_const_str_on; -extern const bcstring be_const_str_BS814_DAT; -extern const bcstring be_const_str_CC1101_GDO0; -extern const bcstring be_const_str_HRE_CLOCK; -extern const bcstring be_const_str_delay; -extern const bcstring be_const_str_log; -extern const bcstring be_const_str_ROT1A; -extern const bcstring be_const_str_XPT2046_CS; -extern const bcstring be_const_str_exp; -extern const bcstring be_const_str_SERIAL_5O2; -extern const bcstring be_const_str__write; -extern const bcstring be_const_str_add; -extern const bcstring be_const_str_imax; -extern const bcstring be_const_str_DDS2382_RX; -extern const bcstring be_const_str_ADC_BUTTON; -extern const bcstring be_const_str_NRG_SEL; -extern const bcstring be_const_str_SENSOR_END; -extern const bcstring be_const_str_set_timeouts; -extern const bcstring be_const_str_SDS0X1_TX; -extern const bcstring be_const_str_SOLAXX1_RX; -extern const bcstring be_const_str_WEBCAM_SIOD; -extern const bcstring be_const_str___upper__; -extern const bcstring be_const_str_BOILER_OT_TX; -extern const bcstring be_const_str__global_def; -extern const bcstring be_const_str_ADE7953_IRQ; -extern const bcstring be_const_str_if; -extern const bcstring be_const_str_static; -extern const bcstring be_const_str_WEBCAM_RESET; -extern const bcstring be_const_str_publish; -extern const bcstring be_const_str_RC522_RST; -extern const bcstring be_const_str_pin_used; -extern const bcstring be_const_str_MGC3130_XFER; -extern const bcstring be_const_str_SM16716_SEL; -extern const bcstring be_const_str_TELEINFO_RX; -extern const bcstring be_const_str_asin; -extern const bcstring be_const_str_get_option; -extern const bcstring be_const_str_resolvecmnd; -extern const bcstring be_const_str_write8; -extern const bcstring be_const_str_CSE7766_TX; -extern const bcstring be_const_str_GPS_TX; -extern const bcstring be_const_str_search; -extern const bcstring be_const_str_TFMINIPLUS_RX; -extern const bcstring be_const_str_PROJECTOR_CTRL_TX; -extern const bcstring be_const_str_collect; -extern const bcstring be_const_str_NONE; -extern const bcstring be_const_str_WEBCAM_PSRCS; -extern const bcstring be_const_str_attrdump; -extern const bcstring be_const_str_continue; -extern const bcstring be_const_str_ADC_PH; -extern const bcstring be_const_str_RISING; -extern const bcstring be_const_str_SERIAL_6N1; -extern const bcstring be_const_str_arg_size; -extern const bcstring be_const_str_cos; -extern const bcstring be_const_str_loop; -extern const bcstring be_const_str_exists; -extern const bcstring be_const_str_SPI_CS; -extern const bcstring be_const_str_srand; -extern const bcstring be_const_str_SERIAL_8E2; -extern const bcstring be_const_str_A4988_STP; -extern const bcstring be_const_str_CC1101_GDO2; -extern const bcstring be_const_str_LE01MR_RX; -extern const bcstring be_const_str_keys; -extern const bcstring be_const_str_BUZZER_INV; -extern const bcstring be_const_str_bus; -extern const bcstring be_const_str_SM2135_CLK; -extern const bcstring be_const_str_sqrt; -extern const bcstring be_const_str_DHT11_OUT; -extern const bcstring be_const_str_DSB_OUT; -extern const bcstring be_const_str_INPUT_PULLUP; -extern const bcstring be_const_str_MHZ_RXD; -extern const bcstring be_const_str_SDM630_RX; -extern const bcstring be_const_str_skip; -extern const bcstring be_const_str_ctypes_bytes_dyn; -extern const bcstring be_const_str_AudioGenerator; -extern const bcstring be_const_str_NEOPOOL_TX; -extern const bcstring be_const_str_IBEACON_RX; -extern const bcstring be_const_str_RFRECV; -extern const bcstring be_const_str_setmember; -extern const bcstring be_const_str_NRG_CF1; -extern const bcstring be_const_str_pin_mode; -extern const bcstring be_const_str_list; -extern const bcstring be_const_str_get; -extern const bcstring be_const_str_LEDLNK_INV; -extern const bcstring be_const_str_close; -extern const bcstring be_const_str_read; -extern const bcstring be_const_str_ROT1B; -extern const bcstring be_const_str_SDM120_TX; -extern const bcstring be_const_str_false; -extern const bcstring be_const_str_PMS5003_RX; -extern const bcstring be_const_str_SERIAL_5O1; -extern const bcstring be_const_str_WEBCAM_HREF; -extern const bcstring be_const_str__read; -extern const bcstring be_const_str_allocated; -extern const bcstring be_const_str_read8; -extern const bcstring be_const_str_LEDLNK; -extern const bcstring be_const_str_exec_tele; -extern const bcstring be_const_str_SDM72_TX; -extern const bcstring be_const_str_chars_in_string; -extern const bcstring be_const_str_ZIGBEE_TX; -extern const bcstring be_const_str_member; -extern const bcstring be_const_str_settings; -extern const bcstring be_const_str_time_dump; -extern const bcstring be_const_str_time_str; -extern const bcstring be_const_str_CSE7761_TX; -extern const bcstring be_const_str___iterator__; -extern const bcstring be_const_str_concat; -extern const bcstring be_const_str_split; -extern const bcstring be_const_str_upper; -extern const bcstring be_const_str_TCP_TX; -extern const bcstring be_const_str__buffer; -extern const bcstring be_const_str_addr; -extern const bcstring be_const_str_detect; -extern const bcstring be_const_str_TM1638CLK; -extern const bcstring be_const_str_import; -extern const bcstring be_const_str_DSB; -extern const bcstring be_const_str_DYP_RX; -extern const bcstring be_const_str_SSPI_SCLK; -extern const bcstring be_const_str_atan; -extern const bcstring be_const_str_input; -extern const bcstring be_const_str_EPAPER29_CS; -extern const bcstring be_const_str_HX711_SCK; -extern const bcstring be_const_str_nan; -extern const bcstring be_const_str_opt_connect; -extern const bcstring be_const_str_exec_rules; -extern const bcstring be_const_str_tan; -extern const bcstring be_const_str_copy; -extern const bcstring be_const_str_P9813_DAT; -extern const bcstring be_const_str_cmd_res; -extern const bcstring be_const_str_AudioGeneratorWAV; -extern const bcstring be_const_str_content_button; -extern const bcstring be_const_str_name; -extern const bcstring be_const_str_SM16716_CLK; -extern const bcstring be_const_str_ADC_TEMP; -extern const bcstring be_const_str_AS3935; -extern const bcstring be_const_str_BS814_CLK; -extern const bcstring be_const_str_TXD; -extern const bcstring be_const_str_TX2X_TXD_BLACK; -extern const bcstring be_const_str_MIEL_HVAC_TX; -extern const bcstring be_const_str_TASMOTACLIENT_RST; -extern const bcstring be_const_str_I2C_SDA; -extern const bcstring be_const_str_SM16716_DAT; -extern const bcstring be_const_str_get_string; -extern const bcstring be_const_str_elif; -extern const bcstring be_const_str_KEY1_INV; -extern const bcstring be_const_str_write_bytes; -extern const bcstring be_const_str_HJL_CF; -extern const bcstring be_const_str_SSD1331_CS; -extern const bcstring be_const_str_MAX31855CLK; -extern const bcstring be_const_str_DHT11; -extern const bcstring be_const_str_HM10_TX; -extern const bcstring be_const_str_global; -extern const bcstring be_const_str_hex; -extern const bcstring be_const_str_yield; -extern const bcstring be_const_str_url_encode; -extern const bcstring be_const_str_OUTPUT_LO; -extern const bcstring be_const_str_erase; -extern const bcstring be_const_str_setbits; -extern const bcstring be_const_str_EPAPER42_CS; -extern const bcstring be_const_str_NEOPOOL_RX; -extern const bcstring be_const_str_i2c_enabled; -extern const bcstring be_const_str_SSPI_DC; -extern const bcstring be_const_str_isinstance; -extern const bcstring be_const_str_end; -extern const bcstring be_const_str_INTERRUPT; -extern const bcstring be_const_str___lower__; -extern const bcstring be_const_str_insert; -extern const bcstring be_const_str_TELEINFO_ENABLE; -extern const bcstring be_const_str_MCP39F5_RX; extern const bcstring be_const_str_SERIAL_5N1; -extern const bcstring be_const_str_TASMOTACLIENT_RXD; -extern const bcstring be_const_str_remove_driver; -extern const bcstring be_const_str_HRXL_RX; -extern const bcstring be_const_str_AZ_TXD; -extern const bcstring be_const_str_asstring; -extern const bcstring be_const_str_BUZZER; -extern const bcstring be_const_str_WEBCAM_VSYNC; -extern const bcstring be_const_str_DDSU666_RX; -extern const bcstring be_const_str_TUYA_TX; -extern const bcstring be_const_str_AS608_TX; -extern const bcstring be_const_str_SERIAL_5E1; -extern const bcstring be_const_str_SSD1351_DC; -extern const bcstring be_const_str_HLW_CF; -extern const bcstring be_const_str_REL1_INV; -extern const bcstring be_const_str_RXD; -extern const bcstring be_const_str_SERIAL_6E2; -extern const bcstring be_const_str_ctypes_bytes; -extern const bcstring be_const_str_try_rule; -extern const bcstring be_const_str_PN532_TXD; -extern const bcstring be_const_str_PWM1; -extern const bcstring be_const_str_TM1637DIO; -extern const bcstring be_const_str_eth; -extern const bcstring be_const_str_ADC_BUTTON_INV; -extern const bcstring be_const_str_arg; -extern const bcstring be_const_str_rtc; -extern const bcstring be_const_str_TCP_RX; -extern const bcstring be_const_str_ceil; -extern const bcstring be_const_str_isrunning; -extern const bcstring be_const_str_def; -extern const bcstring be_const_str_ETH_PHY_MDIO; -extern const bcstring be_const_str_fromptr; -extern const bcstring be_const_str_DHT22; -extern const bcstring be_const_str_IRSEND; -extern const bcstring be_const_str_VL53L0X_XSHUT1; -extern const bcstring be_const_str_depower; -extern const bcstring be_const_str_SERIAL_5E2; -extern const bcstring be_const_str_WEBCAM_PWDN; -extern const bcstring be_const_str_LMT01; -extern const bcstring be_const_str_ROT1A_NP; -extern const bcstring be_const_str_SERIAL_6E1; -extern const bcstring be_const_str_SPI_CLK; -extern const bcstring be_const_str_SSD1351_CS; -extern const bcstring be_const_str_set; -extern const bcstring be_const_str_MGC3130_RESET; -extern const bcstring be_const_str_ETH_PHY_MDC; -extern const bcstring be_const_str_HIGH; -extern const bcstring be_const_str__drivers; -extern const bcstring be_const_str_AudioOutput; -extern const bcstring be_const_str_reverse_gamma10; -extern const bcstring be_const_str_reverse; -extern const bcstring be_const_str_EPD_DATA; -extern const bcstring be_const_str_SAIR_TX; -extern const bcstring be_const_str_deg; -extern const bcstring be_const_str_INPUT_PULLDOWN; -extern const bcstring be_const_str_state; -extern const bcstring be_const_str_strftime; -extern const bcstring be_const_str_opt_neq; -extern const bcstring be_const_str_CNTR1_NP; -extern const bcstring be_const_str__timers; -extern const bcstring be_const_str_classname; -extern const bcstring be_const_str_DEEPSLEEP; -extern const bcstring be_const_str_pop; -extern const bcstring be_const_str_seti; -extern const bcstring be_const_str_AudioGeneratorMP3; -extern const bcstring be_const_str_NRF24_CS; -extern const bcstring be_const_str_last_modified; -extern const bcstring be_const_str_DAC; -extern const bcstring be_const_str_MD5; -extern const bcstring be_const_str_begin; -extern const bcstring be_const_str_gen_cb; -extern const bcstring be_const_str_init; -extern const bcstring be_const_str_ADC_LIGHT; -extern const bcstring be_const_str_HM10_RX; -extern const bcstring be_const_str_SOLAXX1_TX; -extern const bcstring be_const_str_SSPI_MOSI; -extern const bcstring be_const_str_run_deferred; -extern const bcstring be_const_str_BOILER_OT_RX; -extern const bcstring be_const_str_SR04_TRIG; -extern const bcstring be_const_str_TM1637CLK; -extern const bcstring be_const_str_map; -extern const bcstring be_const_str_opt_add; -extern const bcstring be_const_str_CNTR1; -extern const bcstring be_const_str_SERIAL_5N2; -extern const bcstring be_const_str_arg_name; -extern const bcstring be_const_str_check_privileged_access; -extern const bcstring be_const_str_as; -extern const bcstring be_const_str_PWM1_INV; -extern const bcstring be_const_str_classof; -extern const bcstring be_const_str_WEBCAM_DATA; -extern const bcstring be_const_str_content_stop; -extern const bcstring be_const_str_str; -extern const bcstring be_const_str_resp_cmnd_failed; -extern const bcstring be_const_str_for; -extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0; -extern const bcstring be_const_str__ptr; -extern const bcstring be_const_str_resp_cmnd_error; -extern const bcstring be_const_str_OneWire; -extern const bcstring be_const_str_HPMA_TX; -extern const bcstring be_const_str_P9813_CLK; -extern const bcstring be_const_str_open; -extern const bcstring be_const_str_remove_cmd; -extern const bcstring be_const_str_target_search; -extern const bcstring be_const_str_SERIAL_7N2; -extern const bcstring be_const_str_stop; -extern const bcstring be_const_str_redirect; -extern const bcstring be_const_str_resp_cmnd_done; -extern const bcstring be_const_str_nil; -extern const bcstring be_const_str_AudioFileSource; -extern const bcstring be_const_str_toupper; -extern const bcstring be_const_str_dot_p2; -extern const bcstring be_const_str_DDS2382_TX; -extern const bcstring be_const_str_AS608_RX; -extern const bcstring be_const_str_cosh; -extern const bcstring be_const_str_wire1; -extern const bcstring be_const_str_OPTION_A; -extern const bcstring be_const_str_SDM630_TX; -extern const bcstring be_const_str_set_auth; -extern const bcstring be_const_str_ADC_RANGE; -extern const bcstring be_const_str_SDS0X1_RX; -extern const bcstring be_const_str_ILI9341_DC; -extern const bcstring be_const_str_RF_SENSOR; -extern const bcstring be_const_str_SWT1_PD; -extern const bcstring be_const_str_A4988_MS1; -extern const bcstring be_const_str_DI; -extern const bcstring be_const_str_CHANGE; -extern const bcstring be_const_str_I2S_OUT_DATA; -extern const bcstring be_const_str_AZ_RXD; -extern const bcstring be_const_str_except; -extern const bcstring be_const_str_SERIAL_7N1; -extern const bcstring be_const_str_tomap; -extern const bcstring be_const_str_digital_write; -extern const bcstring be_const_str_public_key; -extern const bcstring be_const_str_read24; -extern const bcstring be_const_str_atan2; -extern const bcstring be_const_str_publish_result; -extern const bcstring be_const_str_A4988_DIR; -extern const bcstring be_const_str_POST; -extern const bcstring be_const_str_SI7021; -extern const bcstring be_const_str_TFMINIPLUS_TX; -extern const bcstring be_const_str_real; -extern const bcstring be_const_str_select; -extern const bcstring be_const_str_traceback; -extern const bcstring be_const_str_gamma10; -extern const bcstring be_const_str_int; -extern const bcstring be_const_str_dot_p1; -extern const bcstring be_const_str_SWT1_NP; -extern const bcstring be_const_str_kv; -extern const bcstring be_const_str_sin; -extern const bcstring be_const_str_super; -extern const bcstring be_const_str_wire2; -extern const bcstring be_const_str_SBR_TX; -extern const bcstring be_const_str_SDM72_RX; -extern const bcstring be_const_str__ccmd; -extern const bcstring be_const_str_encrypt; -extern const bcstring be_const_str_number; -extern const bcstring be_const_str_save; -extern const bcstring be_const_str_tanh; -extern const bcstring be_const_str_A4988_ENA; -extern const bcstring be_const_str_add_header; -extern const bcstring be_const_str_item; -extern const bcstring be_const_str_tostring; -extern const bcstring be_const_str_IEM3000_TX; -extern const bcstring be_const_str_gamma8; -extern const bcstring be_const_str_millis; -extern const bcstring be_const_str_resp_cmnd_str; -extern const bcstring be_const_str_top; -extern const bcstring be_const_str_counters; -extern const bcstring be_const_str_get_light; -extern const bcstring be_const_str_I2S_IN_SLCT; -extern const bcstring be_const_str_remove_rule; -extern const bcstring be_const_str_imin; -extern const bcstring be_const_str_issubclass; -extern const bcstring be_const_str_set_power; -extern const bcstring be_const_str__rules; -extern const bcstring be_const_str_web_send; -extern const bcstring be_const_str_OUTPUT; -extern const bcstring be_const_str_TM1638STB; -extern const bcstring be_const_str_content_start; -extern const bcstring be_const_str_EXS_ENABLE; -extern const bcstring be_const_str_geti; -extern const bcstring be_const_str_log10; -extern const bcstring be_const_str_RFSEND; -extern const bcstring be_const_str_WEBCAM_PSCLK; -extern const bcstring be_const_str_CSE7766_RX; -extern const bcstring be_const_str_SERIAL_8O2; -extern const bcstring be_const_str_format; -extern const bcstring be_const_str_push; -extern const bcstring be_const_str_IBEACON_TX; -extern const bcstring be_const_str_SERIAL_8N1; -extern const bcstring be_const_str_web_send_decimal; -extern const bcstring be_const_str_ARIRFRCV; -extern const bcstring be_const_str_IRRECV; -extern const bcstring be_const_str_ROT1B_NP; extern const bcstring be_const_str__global_addr; -extern const bcstring be_const_str_exec_cmd; -extern const bcstring be_const_str_opt_eq; -extern const bcstring be_const_str_PZEM0XX_TX; -extern const bcstring be_const_str_abs; -extern const bcstring be_const_str_resize; -extern const bcstring be_const_str_fromstring; -extern const bcstring be_const_str_get_size; -extern const bcstring be_const_str_pi; -extern const bcstring be_const_str_MAX7219DIN; -extern const bcstring be_const_str_TM1638DIO; -extern const bcstring be_const_str_I2C_SCL; -extern const bcstring be_const_str_OLED_RESET; -extern const bcstring be_const_str_PZEM004_RX; -extern const bcstring be_const_str_SR04_ECHO; -extern const bcstring be_const_str_LED1_INV; -extern const bcstring be_const_str_I2S_IN_CLK; -extern const bcstring be_const_str_SSPI_MISO; -extern const bcstring be_const_str_PULLUP; -extern const bcstring be_const_str_SERIAL_8O1; -extern const bcstring be_const_str_call; -extern const bcstring be_const_str_INPUT; -extern const bcstring be_const_str_SERIAL_8N2; -extern const bcstring be_const_str_SPI_DC; -extern const bcstring be_const_str_SSPI_MAX31865_CS1; -extern const bcstring be_const_str_ETH_PHY_POWER; -extern const bcstring be_const_str_SPI_MISO; -extern const bcstring be_const_str_KEY1; -extern const bcstring be_const_str_add_driver; -extern const bcstring be_const_str_do; -extern const bcstring be_const_str_LOW; +extern const bcstring be_const_str_setmember; +extern const bcstring be_const_str_OneWire; extern const bcstring be_const_str__get_cb; -extern const bcstring be_const_str_assert; -extern const bcstring be_const_str_class; -extern const bcstring be_const_str_LED1; -extern const bcstring be_const_str_scale_uint; +extern const bcstring be_const_str_classof; +extern const bcstring be_const_str_SERIAL_8O2; +extern const bcstring be_const_str___upper__; +extern const bcstring be_const_str_gamma10; +extern const bcstring be_const_str_copy; +extern const bcstring be_const_str_tostring; +extern const bcstring be_const_str_dot_p1; +extern const bcstring be_const_str_item; +extern const bcstring be_const_str_read8; +extern const bcstring be_const_str_setbits; +extern const bcstring be_const_str_upper; +extern const bcstring be_const_str_rad; +extern const bcstring be_const_str_web_send; +extern const bcstring be_const_str_load; +extern const bcstring be_const_str_opt_add; +extern const bcstring be_const_str_hex; extern const bcstring be_const_str_read12; -extern const bcstring be_const_str_size; -extern const bcstring be_const_str_find; -extern const bcstring be_const_str__begin_transmission; -extern const bcstring be_const_str_decrypt; -extern const bcstring be_const_str_KEY1_TC; -extern const bcstring be_const_str__cb; -extern const bcstring be_const_str_serial; +extern const bcstring be_const_str_end; +extern const bcstring be_const_str_chars_in_string; +extern const bcstring be_const_str_write8; +extern const bcstring be_const_str_def; +extern const bcstring be_const_str_select; +extern const bcstring be_const_str_type; +extern const bcstring be_const_str_global; +extern const bcstring be_const_str_yield; +extern const bcstring be_const_str_opt_eq; +extern const bcstring be_const_str_SERIAL_8E1; +extern const bcstring be_const_str_rtc; +extern const bcstring be_const_str_else; +extern const bcstring be_const_str_get_power; +extern const bcstring be_const_str_addr; +extern const bcstring be_const_str_allocated; +extern const bcstring be_const_str_finish; extern const bcstring be_const_str_dot_p; -extern const bcstring be_const_str_I2S_OUT_SLCT; -extern const bcstring be_const_str_flush; +extern const bcstring be_const_str_getbits; +extern const bcstring be_const_str_tag; +extern const bcstring be_const_str_add; +extern const bcstring be_const_str_pin; +extern const bcstring be_const_str_set_timeouts; +extern const bcstring be_const_str_import; +extern const bcstring be_const_str_SERIAL_6N1; +extern const bcstring be_const_str_SERIAL_8O1; +extern const bcstring be_const_str__settings_ptr; +extern const bcstring be_const_str_remove_cmd; +extern const bcstring be_const_str___iterator__; +extern const bcstring be_const_str_atan2; +extern const bcstring be_const_str_ctypes_bytes; +extern const bcstring be_const_str_millis; +extern const bcstring be_const_str_available; +extern const bcstring be_const_str_delay; +extern const bcstring be_const_str_imin; +extern const bcstring be_const_str_shared_key; +extern const bcstring be_const_str_wire; +extern const bcstring be_const_str__drivers; +extern const bcstring be_const_str_last_modified; +extern const bcstring be_const_str_serial; +extern const bcstring be_const_str_opt_call; +extern const bcstring be_const_str_webclient; +extern const bcstring be_const_str_SERIAL_6E2; +extern const bcstring be_const_str_ctypes_bytes_dyn; +extern const bcstring be_const_str_time_dump; +extern const bcstring be_const_str_static; +extern const bcstring be_const_str_classname; +extern const bcstring be_const_str_isrunning; +extern const bcstring be_const_str_top; +extern const bcstring be_const_str_remove; +extern const bcstring be_const_str_begin; +extern const bcstring be_const_str_content_stop; +extern const bcstring be_const_str_deg; +extern const bcstring be_const_str_gc; +extern const bcstring be_const_str_gen_cb; +extern const bcstring be_const_str_reset; +extern const bcstring be_const_str_clear; +extern const bcstring be_const_str_skip; +extern const bcstring be_const_str_SERIAL_5E1; +extern const bcstring be_const_str_has; +extern const bcstring be_const_str_raise; +extern const bcstring be_const_str_setitem; +extern const bcstring be_const_str_write_bit; +extern const bcstring be_const_str_stop; extern const bcstring be_const_str_AES_GCM; -extern const bcstring be_const_str_ELECTRIQ_MOODL_TX; -extern const bcstring be_const_str_SPI_MOSI; +extern const bcstring be_const_str_exec_cmd; +extern const bcstring be_const_str_iter; +extern const bcstring be_const_str_ceil; +extern const bcstring be_const_str_exp; +extern const bcstring be_const_str_tob64; +extern const bcstring be_const_str_wire_scan; +extern const bcstring be_const_str_call; +extern const bcstring be_const_str_cmd_res; +extern const bcstring be_const_str_opt_connect; +extern const bcstring be_const_str_resolvecmnd; +extern const bcstring be_const_str_SERIAL_6E1; +extern const bcstring be_const_str_try; +extern const bcstring be_const_str__cb; +extern const bcstring be_const_str_AudioOutput; +extern const bcstring be_const_str_check_privileged_access; +extern const bcstring be_const_str_SERIAL_6O2; +extern const bcstring be_const_str_content_send; +extern const bcstring be_const_str_tolower; +extern const bcstring be_const_str_detect; +extern const bcstring be_const_str_imax; +extern const bcstring be_const_str_set_auth; +extern const bcstring be_const_str_depower; +extern const bcstring be_const_str_read24; +extern const bcstring be_const_str_add_header; +extern const bcstring be_const_str_kv; +extern const bcstring be_const_str_pin_used; +extern const bcstring be_const_str_publish_result; +extern const bcstring be_const_str_do; +extern const bcstring be_const_str_pow; +extern const bcstring be_const_str_read_bytes; +extern const bcstring be_const_str_SERIAL_5E2; +extern const bcstring be_const_str_scale_uint; +extern const bcstring be_const_str_get; +extern const bcstring be_const_str_remove_timer; +extern const bcstring be_const_str_dot_len; +extern const bcstring be_const_str_Wire; +extern const bcstring be_const_str__begin_transmission; +extern const bcstring be_const_str_toupper; +extern const bcstring be_const_str_SERIAL_5N2; +extern const bcstring be_const_str_arg_size; +extern const bcstring be_const_str_AudioFileSource; +extern const bcstring be_const_str_I2C_Driver; +extern const bcstring be_const_str_decrypt; +extern const bcstring be_const_str_digital_write; +extern const bcstring be_const_str_input; +extern const bcstring be_const_str_char; +extern const bcstring be_const_str_floor; +extern const bcstring be_const_str_real; +extern const bcstring be_const_str_AudioGenerator; +extern const bcstring be_const_str__cmd; +extern const bcstring be_const_str_enabled; +extern const bcstring be_const_str_int; +extern const bcstring be_const_str_byte; +extern const bcstring be_const_str_resp_cmnd_error; +extern const bcstring be_const_str_dot_size; +extern const bcstring be_const_str_list; extern const bcstring be_const_str_reset_search; +extern const bcstring be_const_str_SERIAL_7N2; +extern const bcstring be_const_str_set; +extern const bcstring be_const_str_elif; +extern const bcstring be_const_str_Tasmota; +extern const bcstring be_const_str_get_switch; +extern const bcstring be_const_str_read; +extern const bcstring be_const_str___lower__; +extern const bcstring be_const_str__read; +extern const bcstring be_const_str_asin; +extern const bcstring be_const_str_POST; +extern const bcstring be_const_str_arg; +extern const bcstring be_const_str_reduce; +extern const bcstring be_const_str_deinit; +extern const bcstring be_const_str_save; +extern const bcstring be_const_str_SERIAL_8E2; +extern const bcstring be_const_str_get_size; +extern const bcstring be_const_str_search; +extern const bcstring be_const_str_srand; +extern const bcstring be_const_str_isnan; +extern const bcstring be_const_str_arg_name; +extern const bcstring be_const_str_content_flush; +extern const bcstring be_const_str_get_light; +extern const bcstring be_const_str_sqrt; +extern const bcstring be_const_str__end_transmission; +extern const bcstring be_const_str_listdir; +extern const bcstring be_const_str_log10; +extern const bcstring be_const_str_pop; +extern const bcstring be_const_str_read32; +extern const bcstring be_const_str_for; +extern const bcstring be_const_str_exec_tele; +extern const bcstring be_const_str_log; +extern const bcstring be_const_str_map; +extern const bcstring be_const_str_redirect; +extern const bcstring be_const_str_format; +extern const bcstring be_const_str_pi; +extern const bcstring be_const_str_range; +extern const bcstring be_const_str_SERIAL_7E2; +extern const bcstring be_const_str_count; +extern const bcstring be_const_str_update; +extern const bcstring be_const_str_SERIAL_7N1; +extern const bcstring be_const_str_find_key_i; +extern const bcstring be_const_str_content_button; +extern const bcstring be_const_str_AudioGeneratorMP3; +extern const bcstring be_const_str_AudioGeneratorWAV; +extern const bcstring be_const_str__buffer; +extern const bcstring be_const_str_remove_driver; +extern const bcstring be_const_str_false; +extern const bcstring be_const_str_fromptr; +extern const bcstring be_const_str_geti; +extern const bcstring be_const_str_lower; +extern const bcstring be_const_str_nan; +extern const bcstring be_const_str_assert; +extern const bcstring be_const_str_time_str; +extern const bcstring be_const_str_exists; +extern const bcstring be_const_str_read13; +extern const bcstring be_const_str_set_power; +extern const bcstring be_const_str_seti; +extern const bcstring be_const_str_toptr; +extern const bcstring be_const_str_acos; +extern const bcstring be_const_str_find_op; +extern const bcstring be_const_str_isinstance; +extern const bcstring be_const_str_cb_dispatch; +extern const bcstring be_const_str_SERIAL_5O2; +extern const bcstring be_const_str_bytes; +extern const bcstring be_const_str_public_key; +extern const bcstring be_const_str_continue; +extern const bcstring be_const_str_; +extern const bcstring be_const_str__available; +extern const bcstring be_const_str__def; +extern const bcstring be_const_str_i2c_enabled; +extern const bcstring be_const_str_reverse; +extern const bcstring be_const_str_true; +extern const bcstring be_const_str_dac_voltage; +extern const bcstring be_const_str_name; +extern const bcstring be_const_str_reverse_gamma10; +extern const bcstring be_const_str_add_rule; +extern const bcstring be_const_str_dump; +extern const bcstring be_const_str_AudioOutputI2S; +extern const bcstring be_const_str_attrdump; +extern const bcstring be_const_str_fromstring; +extern const bcstring be_const_str_publish; +extern const bcstring be_const_str_wifi; +extern const bcstring be_const_str__write; +extern const bcstring be_const_str_resp_cmnd; +extern const bcstring be_const_str_tomap; +extern const bcstring be_const_str_content_start; +extern const bcstring be_const_str_traceback; +extern const bcstring be_const_str_as; +extern const bcstring be_const_str_memory; +extern const bcstring be_const_str_pin_mode; +extern const bcstring be_const_str_EC_C25519; +extern const bcstring be_const_str_str; +extern const bcstring be_const_str_tanh; +extern const bcstring be_const_str_write_bytes; +extern const bcstring be_const_str_except; +extern const bcstring be_const_str_get_option; +extern const bcstring be_const_str_dot_w; +extern const bcstring be_const_str_SERIAL_7O1; +extern const bcstring be_const_str_SERIAL_8N1; +extern const bcstring be_const_str_init; +extern const bcstring be_const_str__timers; +extern const bcstring be_const_str_super; +extern const bcstring be_const_str_GET; +extern const bcstring be_const_str_fromb64; +extern const bcstring be_const_str_break; +extern const bcstring be_const_str__global_def; +extern const bcstring be_const_str_bus; +extern const bcstring be_const_str_find; +extern const bcstring be_const_str_resp_cmnd_failed; +extern const bcstring be_const_str_SERIAL_6N2; +extern const bcstring be_const_str__request_from; +extern const bcstring be_const_str_cos; +extern const bcstring be_const_str_cosh; +extern const bcstring be_const_str_set_useragent; +extern const bcstring be_const_str_size; +extern const bcstring be_const_str_web_send_decimal; +extern const bcstring be_const_str_write; +extern const bcstring be_const_str_module; +extern const bcstring be_const_str_try_rule; +extern const bcstring be_const_str_var; +extern const bcstring be_const_str_content_send_style; +extern const bcstring be_const_str_sinh; +extern const bcstring be_const_str_return; +extern const bcstring be_const_str_asstring; +extern const bcstring be_const_str_digital_read; +extern const bcstring be_const_str_has_arg; +extern const bcstring be_const_str_number; +extern const bcstring be_const_str_remove_rule; +extern const bcstring be_const_str_get_string; +extern const bcstring be_const_str_resize; +extern const bcstring be_const_str_encrypt; +extern const bcstring be_const_str_opt_neq; +extern const bcstring be_const_str_add_driver; +extern const bcstring be_const_str_close; +extern const bcstring be_const_str_member; +extern const bcstring be_const_str_response_append; +extern const bcstring be_const_str_split; +extern const bcstring be_const_str_strftime; +extern const bcstring be_const_str_exec_rules; +extern const bcstring be_const_str_AudioFileSourceFS; +extern const bcstring be_const_str__ccmd; +extern const bcstring be_const_str_set_timer; +extern const bcstring be_const_str_time_reached; +extern const bcstring be_const_str_SERIAL_7O2; +extern const bcstring be_const_str_SERIAL_8N2; +extern const bcstring be_const_str_if; +extern const bcstring be_const_str__ptr; +extern const bcstring be_const_str_insert; extern const bcstring be_const_str_print; -extern const bcstring be_const_str_I2S_OUT_CLK; +extern const bcstring be_const_str_run_deferred; +extern const bcstring be_const_str_scan; +extern const bcstring be_const_str_settings; +extern const bcstring be_const_str_arch; +extern const bcstring be_const_str_open; +extern const bcstring be_const_str_cmd; +extern const bcstring be_const_str_loop; +extern const bcstring be_const_str_wire1; +extern const bcstring be_const_str_nil; +extern const bcstring be_const_str_SERIAL_7E1; +extern const bcstring be_const_str_keys; +extern const bcstring be_const_str_sin; +extern const bcstring be_const_str_calldepth; +extern const bcstring be_const_str_while; +extern const bcstring be_const_str_counters; +extern const bcstring be_const_str_members; +extern const bcstring be_const_str_on; +extern const bcstring be_const_str__rules; +extern const bcstring be_const_str_collect; +extern const bcstring be_const_str_url_encode; +extern const bcstring be_const_str_codedump; +extern const bcstring be_const_str_dot_p2; +extern const bcstring be_const_str_MD5; +extern const bcstring be_const_str__settings_def; +extern const bcstring be_const_str_erase; +extern const bcstring be_const_str_gamma8; +extern const bcstring be_const_str_rand; +extern const bcstring be_const_str_resp_cmnd_str; +extern const bcstring be_const_str_state; +extern const bcstring be_const_str_SERIAL_6O1; +extern const bcstring be_const_str_contains; +extern const bcstring be_const_str_set_light; +extern const bcstring be_const_str_setrange; +extern const bcstring be_const_str_tan; +extern const bcstring be_const_str_target_search; +extern const bcstring be_const_str_abs; +extern const bcstring be_const_str_resp_cmnd_done; +extern const bcstring be_const_str_eth; +extern const bcstring be_const_str_SERIAL_5O1; +extern const bcstring be_const_str_concat; +extern const bcstring be_const_str_flush; +extern const bcstring be_const_str_get_free_heap; +extern const bcstring be_const_str_push; +extern const bcstring be_const_str_compile; +extern const bcstring be_const_str_wire2; +extern const bcstring be_const_str_add_cmd; +extern const bcstring be_const_str_atan; +extern const bcstring be_const_str_event; +extern const bcstring be_const_str_issubclass; +extern const bcstring be_const_str_write_file; +extern const bcstring be_const_str_class; diff --git a/lib/libesp32/Berry/generate/be_const_strtab_def.h b/lib/libesp32/Berry/generate/be_const_strtab_def.h index 2587194d0..792cbd7f6 100644 --- a/lib/libesp32/Berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/Berry/generate/be_const_strtab_def.h @@ -1,904 +1,512 @@ -be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_resp_cmnd); -be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); -be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, NULL); -be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, 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, NULL); -be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, NULL); -be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_while); -be_define_const_str(while, "while", 231090382u, 53, 5, NULL); -be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str_clear); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, NULL); -be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_response_append); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_write_bit); -be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL); -be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_pow); -be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_set_light); -be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); -be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, NULL); -be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_WIEGAND_D1); -be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str__available); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str__settings_def); -be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, NULL); -be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL); -be_define_const_str(event, "event", 4264611999u, 0, 5, NULL); -be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_ST7789_DC); -be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, &be_const_str_WE517_TX); -be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, &be_const_str_byte); -be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_set_useragent); -be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, NULL); -be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_TASMOTACLIENT_TXD); -be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, NULL); -be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_toptr); -be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, NULL); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str__def); -be_define_const_str(_def, "_def", 1985022181u, 0, 4, NULL); -be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, &be_const_str_dump); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); -be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, NULL); -be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, NULL); -be_define_const_str(opt_call, "()", 685372826u, 0, 2, &be_const_str_HPMA_RX); -be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, NULL); -be_define_const_str(I2S_IN_DATA, "I2S_IN_DATA", 4125971460u, 0, 11, NULL); -be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_WEBCAM_SIOC); -be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, &be_const_str_bytes); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, NULL); -be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_setrange); -be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); -be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, &be_const_str_WIEGAND_D0); -be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, &be_const_str_char); -be_define_const_str(char, "char", 2823553821u, 0, 4, NULL); -be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, NULL); -be_define_const_str(available, "available", 1727918744u, 0, 9, NULL); -be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_MCP39F5_RST); -be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_MP3_DFR562); -be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_cmd); -be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, NULL); -be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, &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_Wire); -be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, NULL); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL); -be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_ZIGBEE_RST); -be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, NULL); -be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_tolower); -be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, &be_const_str_webclient); -be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, &be_const_str_true); -be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); -be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, NULL); -be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, NULL); -be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, &be_const_str_OPEN_DRAIN); -be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, NULL); -be_define_const_str(dot_len, ".len", 850842136u, 0, 4, &be_const_str_dot_size); -be_define_const_str(dot_size, ".size", 1965188224u, 0, 5, NULL); -be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); -be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_module); -be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_shared_key); -be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL); -be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_add_cmd); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_iter); -be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_read32); -be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL); -be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_SM2135_DAT); -be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, &be_const_str_var); -be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); -be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, &be_const_str_raise); -be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_SAIR_RX); -be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, NULL); -be_define_const_str(cb_dispatch, "cb_dispatch", 1741510499u, 0, 11, NULL); -be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_count); -be_define_const_str(count, "count", 967958004u, 0, 5, NULL); -be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, &be_const_str_SWT1); -be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, &be_const_str_WS2812); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_rand); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_break); -be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); -be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_tag); -be_define_const_str(tag, "tag", 2516003219u, 0, 3, &be_const_str_write); -be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); -be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, &be_const_str_compile); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_type); -be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); -be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, &be_const_str_contains); -be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_rad); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL); -be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, &be_const_str_PZEM017_RX); -be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_SSD1331_DC); -be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, NULL); -be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, &be_const_str_get_power); -be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, &be_const_str_isnan); -be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, NULL); -be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_finish); -be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL); -be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, &be_const_str_SERIAL_7O2); -be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, NULL); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); -be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, &be_const_str_SERIAL_6O2); -be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_WEBCAM_XCLK); -be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, &be_const_str__end_transmission); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_has); -be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_wire_scan); -be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); -be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_SERIAL_7E1); -be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_range); -be_define_const_str(range, "range", 4208725202u, 0, 5, &be_const_str_time_reached); -be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); -be_define_const_str(KEY1_PD, "KEY1_PD", 3934075620u, 0, 7, &be_const_str_MAX31855CS); -be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, &be_const_str_SSPI_CS); -be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, &be_const_str_content_flush); -be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, NULL); -be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, &be_const_str__settings_ptr); -be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, NULL); -be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_WE517_RX); -be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, &be_const_str_setitem); -be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); -be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, &be_const_str_TUYA_RX); -be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, &be_const_str_scan); -be_define_const_str(scan, "scan", 3974641896u, 0, 4, NULL); -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str__request_from); -be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_find_op); -be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_has_arg); -be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, NULL); -be_define_const_str(dot_w, ".w", 1255414514u, 0, 2, NULL); -be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, NULL); -be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL); -be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_SBR_RX); -be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, &be_const_str_ZEROCROSS); -be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, &be_const_str_calldepth); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_codedump); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_gc); -be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL); -be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_reset); -be_define_const_str(reset, "reset", 1695364032u, 0, 5, NULL); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, NULL); -be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str_IEM3000_RX); -be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, &be_const_str_tob64); -be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL); -be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str_SERIAL_8E1); -be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_fromb64); -be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, &be_const_str_members); -be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_reduce); -be_define_const_str(reduce, "reduce", 2002030311u, 0, 6, &be_const_str_wifi); -be_define_const_str(wifi, "wifi", 120087624u, 0, 4, NULL); -be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, &be_const_str_content_send_style); -be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, NULL); -be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_GPS_RX); -be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, NULL); -be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, NULL); -be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); -be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); -be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, &be_const_str_update); -be_define_const_str(update, "update", 672109684u, 0, 6, NULL); -be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, &be_const_str_I2C_Driver); -be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_RDM6300_RX); -be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, NULL); -be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, &be_const_str_enabled); -be_define_const_str(enabled, "enabled", 49525662u, 0, 7, NULL); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_remove_timer); -be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, &be_const_str_wire); -be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_get_switch); -be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, NULL); -be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_acos); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_read_bytes); -be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); -be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, &be_const_str_KEY1_INV_PD); -be_define_const_str(KEY1_INV_PD, "KEY1_INV_PD", 3828014584u, 0, 11, NULL); -be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, &be_const_str_on); -be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); -be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, &be_const_str_CC1101_GDO0); -be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, &be_const_str_HRE_CLOCK); -be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, &be_const_str_delay); -be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_log); -be_define_const_str(log, "log", 1062293841u, 0, 3, NULL); -be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, NULL); -be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, &be_const_str_exp); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, NULL); -be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str__write); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_add); -be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_imax); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL); -be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, NULL); -be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_NRG_SEL); -be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, &be_const_str_SENSOR_END); -be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, &be_const_str_set_timeouts); -be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL); -be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, &be_const_str_SOLAXX1_RX); -be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, &be_const_str_WEBCAM_SIOD); -be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, &be_const_str___upper__); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL); -be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str__global_def); -be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, NULL); -be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_if); -be_define_const_str(if, "if", 959999494u, 50, 2, &be_const_str_static); -be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); -be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, &be_const_str_publish); -be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); -be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, &be_const_str_pin_used); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL); -be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, &be_const_str_SM16716_SEL); -be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, NULL); -be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, &be_const_str_asin); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_get_option); -be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_resolvecmnd); -be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, &be_const_str_write8); -be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL); -be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str_GPS_TX); -be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, &be_const_str_search); -be_define_const_str(search, "search", 2150836393u, 0, 6, NULL); -be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, NULL); -be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, &be_const_str_collect); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, NULL); -be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, NULL); -be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, &be_const_str_attrdump); -be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_continue); -be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str_RISING); -be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, NULL); -be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_arg_size); -be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, &be_const_str_cos); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_loop); -be_define_const_str(loop, "loop", 3723446379u, 0, 4, NULL); -be_define_const_str(exists, "exists", 1002329533u, 0, 6, NULL); -be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, &be_const_str_srand); -be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); -be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, NULL); -be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, &be_const_str_CC1101_GDO2); -be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, &be_const_str_LE01MR_RX); -be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, NULL); -be_define_const_str(keys, "keys", 4182378701u, 0, 4, NULL); -be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_bus); -be_define_const_str(bus, "bus", 1607822841u, 0, 3, NULL); -be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_sqrt); -be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); -be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, &be_const_str_DSB_OUT); -be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, &be_const_str_INPUT_PULLUP); -be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_MHZ_RXD); -be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str_SDM630_RX); -be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, &be_const_str_skip); -be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL); -be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, NULL); -be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str_NEOPOOL_TX); -be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, NULL); -be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_RFRECV); -be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, &be_const_str_setmember); +be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, NULL); +be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, &be_const_str_setmember); be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); -be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_pin_mode); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); -be_define_const_str(list, "list", 217798785u, 0, 4, NULL); -be_define_const_str(get, "get", 1410115415u, 0, 3, NULL); -be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_close); -be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_read); -be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); -be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, &be_const_str_SDM120_TX); -be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, NULL); -be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, &be_const_str_SERIAL_5O1); -be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_WEBCAM_HREF); -be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, &be_const_str__read); -be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_allocated); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_read8); -be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL); -be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, &be_const_str_exec_tele); -be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, NULL); -be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_chars_in_string); -be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, NULL); -be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, &be_const_str_member); -be_define_const_str(member, "member", 719708611u, 0, 6, &be_const_str_settings); -be_define_const_str(settings, "settings", 1745255176u, 0, 8, NULL); -be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, &be_const_str_time_str); -be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); -be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str___iterator__); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_concat); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_split); -be_define_const_str(split, "split", 2276994531u, 0, 5, &be_const_str_upper); -be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); -be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, NULL); -be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str_addr); -be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_detect); -be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL); -be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, &be_const_str_import); -be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(DSB, "DSB", 98073254u, 0, 3, &be_const_str_DYP_RX); -be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, &be_const_str_SSPI_SCLK); -be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, NULL); -be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_input); -be_define_const_str(input, "input", 4191711099u, 0, 5, NULL); -be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, &be_const_str_HX711_SCK); -be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, &be_const_str_nan); -be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL); -be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_exec_rules); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, NULL); -be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, NULL); -be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, NULL); -be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, NULL); -be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_content_button); -be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_name); -be_define_const_str(name, "name", 2369371622u, 0, 4, NULL); -be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, NULL); -be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str_AS3935); -be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_BS814_CLK); -be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, &be_const_str_TXD); -be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, NULL); -be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, NULL); -be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, &be_const_str_TASMOTACLIENT_RST); -be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, NULL); -be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, NULL); -be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, &be_const_str_get_string); -be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, &be_const_str_elif); -be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); -be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str_write_bytes); -be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); -be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, &be_const_str_SSD1331_CS); -be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, NULL); -be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, NULL); -be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, &be_const_str_HM10_TX); -be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_global); -be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_hex); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_yield); -be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); -be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL); -be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, &be_const_str_erase); -be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_setbits); -be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL); -be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str_NEOPOOL_RX); -be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, &be_const_str_i2c_enabled); -be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); -be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, &be_const_str_isinstance); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_end); -be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(INTERRUPT, "INTERRUPT", 3809502704u, 0, 9, &be_const_str___lower__); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_insert); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, NULL); -be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, NULL); -be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, &be_const_str_SERIAL_5N1); -be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_TASMOTACLIENT_RXD); -be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_remove_driver); -be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, NULL); -be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, NULL); -be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, &be_const_str_asstring); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL); -be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, &be_const_str_WEBCAM_VSYNC); -be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, NULL); -be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_TUYA_TX); -be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, NULL); -be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_SERIAL_5E1); -be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str_SSD1351_DC); -be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, NULL); -be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, &be_const_str_REL1_INV); -be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, &be_const_str_RXD); -be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, &be_const_str_SERIAL_6E2); -be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_ctypes_bytes); -be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_try_rule); -be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); -be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, NULL); -be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, &be_const_str_TM1637DIO); -be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, &be_const_str_eth); -be_define_const_str(eth, "eth", 2191266556u, 0, 3, NULL); -be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, NULL); -be_define_const_str(arg, "arg", 1047474471u, 0, 3, NULL); -be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); -be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, &be_const_str_ceil); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_isrunning); -be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, NULL); -be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, &be_const_str_fromptr); -be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, NULL); -be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_IRSEND); -be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, &be_const_str_VL53L0X_XSHUT1); -be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, &be_const_str_depower); -be_define_const_str(depower, "depower", 3563819571u, 0, 7, NULL); -be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_WEBCAM_PWDN); -be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, NULL); -be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, &be_const_str_ROT1A_NP); -be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, &be_const_str_SERIAL_6E1); -be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_SPI_CLK); -be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, &be_const_str_SSD1351_CS); -be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, &be_const_str_set); -be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); -be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, NULL); -be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_HIGH); -be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str__drivers); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, NULL); -be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, NULL); -be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); -be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); -be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, &be_const_str_SAIR_TX); -be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, &be_const_str_deg); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, NULL); -be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_state); -be_define_const_str(state, "state", 2016490230u, 0, 5, &be_const_str_strftime); -be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); -be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_CNTR1_NP); -be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, &be_const_str__timers); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_classname); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, NULL); -be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, NULL); -be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_seti); -be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL); -be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_NRF24_CS); -be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, NULL); -be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, NULL); -be_define_const_str(DAC, "DAC", 788912847u, 0, 3, &be_const_str_MD5); -be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_begin); -be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_gen_cb); -be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_init); -be_define_const_str(init, "init", 380752755u, 0, 4, NULL); -be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_HM10_RX); -be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, NULL); -be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_SSPI_MOSI); -be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, &be_const_str_run_deferred); -be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); -be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, &be_const_str_SR04_TRIG); -be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, &be_const_str_TM1637CLK); -be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, &be_const_str_map); -be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); -be_define_const_str(opt_add, "+", 772578730u, 0, 1, NULL); -be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, NULL); -be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_arg_name); -be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_check_privileged_access); -be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_as); -be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, &be_const_str_classof); +be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str__get_cb); +be_define_const_str(_get_cb, "_get_cb", 1448849122u, 0, 7, &be_const_str_classof); be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL); -be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, &be_const_str_content_stop); -be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_str); -be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); -be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, &be_const_str_for); -be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str__ptr); -be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_resp_cmnd_error); -be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); -be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, NULL); -be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_P9813_CLK); -be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, &be_const_str_open); -be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); -be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_target_search); -be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); -be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_stop); -be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL); -be_define_const_str(redirect, "redirect", 389758641u, 0, 8, &be_const_str_resp_cmnd_done); -be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, &be_const_str_nil); -be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, NULL); -be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); -be_define_const_str(dot_p2, ".p2", 232398067u, 0, 3, &be_const_str_DDS2382_TX); -be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, NULL); -be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, &be_const_str_cosh); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_wire1); -be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_SDM630_TX); -be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, &be_const_str_set_auth); -be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL); -be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, &be_const_str_SDS0X1_RX); -be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, NULL); -be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, &be_const_str_RF_SENSOR); -be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, NULL); -be_define_const_str(SWT1_PD, "SWT1_PD", 4166278953u, 0, 7, NULL); -be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_DI); -be_define_const_str(DI, "DI", 1070498734u, 0, 2, NULL); -be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, &be_const_str_I2S_OUT_DATA); -be_define_const_str(I2S_OUT_DATA, "I2S_OUT_DATA", 1176288293u, 0, 12, NULL); -be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str_except); -be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_tomap); -be_define_const_str(tomap, "tomap", 612167626u, 0, 5, NULL); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_public_key); -be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_read24); -be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL); -be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, &be_const_str_publish_result); -be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, NULL); -be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, &be_const_str_POST); -be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_SI7021); -be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, &be_const_str_TFMINIPLUS_TX); -be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, &be_const_str_real); -be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_select); -be_define_const_str(select, "select", 297952813u, 0, 6, &be_const_str_traceback); -be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); -be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_int); -be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); -be_define_const_str(dot_p1, ".p1", 249175686u, 0, 3, &be_const_str_SWT1_NP); -be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, &be_const_str_kv); -be_define_const_str(kv, "kv", 1497177492u, 0, 2, NULL); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_super); -be_define_const_str(super, "super", 4152230356u, 0, 5, &be_const_str_wire2); -be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); -be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, NULL); -be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, &be_const_str__ccmd); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_encrypt); -be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_number); -be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_save); -be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_tanh); -be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); -be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_add_header); -be_define_const_str(add_header, "add_header", 927130612u, 0, 10, &be_const_str_item); -be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_tostring); +be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str___upper__); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_gamma10); +be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, NULL); be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); -be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, NULL); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_millis); -be_define_const_str(millis, "millis", 1214679063u, 0, 6, &be_const_str_resp_cmnd_str); -be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL); -be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); -be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_get_light); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, NULL); -be_define_const_str(I2S_IN_SLCT, "I2S_IN_SLCT", 706051516u, 0, 11, NULL); -be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_issubclass); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_set_power); -be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); -be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_web_send); +be_define_const_str(dot_p1, ".p1", 249175686u, 0, 3, &be_const_str_item); +be_define_const_str(item, "item", 2671260646u, 0, 4, NULL); +be_define_const_str(read8, "read8", 2802788167u, 0, 5, &be_const_str_setbits); +be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, &be_const_str_upper); +be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_web_send); be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL); -be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str_TM1638STB); -be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, &be_const_str_content_start); -be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, NULL); -be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, &be_const_str_geti); -be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_log10); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL); -be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_WEBCAM_PSCLK); -be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, NULL); -be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, &be_const_str_SERIAL_8O2); -be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_format); -be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_push); -be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); -be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, &be_const_str_SERIAL_8N1); -be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_web_send_decimal); -be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); -be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_IRRECV); -be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_ROT1B_NP); -be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str__global_addr); -be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, &be_const_str_exec_cmd); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, NULL); -be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_PZEM0XX_TX); -be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, NULL); -be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_resize); -be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); -be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_get_size); -be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_pi); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL); -be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_TM1638DIO); -be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, NULL); -be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, &be_const_str_OLED_RESET); -be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, &be_const_str_PZEM004_RX); -be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str_SR04_ECHO); -be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, NULL); -be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, NULL); -be_define_const_str(I2S_IN_CLK, "I2S_IN_CLK", 2996930120u, 0, 10, &be_const_str_SSPI_MISO); -be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, NULL); -be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, &be_const_str_SERIAL_8O1); -be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str_call); -be_define_const_str(call, "call", 3018949801u, 0, 4, NULL); -be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str_SERIAL_8N2); -be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_SPI_DC); -be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, &be_const_str_SSPI_MAX31865_CS1); -be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, NULL); -be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, &be_const_str_SPI_MISO); -be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, NULL); -be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, NULL); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_do); -be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); -be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, &be_const_str__get_cb); -be_define_const_str(_get_cb, "_get_cb", 1448849122u, 0, 7, &be_const_str_assert); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_class); -be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_scale_uint); -be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); -be_define_const_str(read12, "read12", 4291076970u, 0, 6, &be_const_str_size); -be_define_const_str(size, "size", 597743964u, 0, 4, NULL); -be_define_const_str(find, "find", 3186656602u, 0, 4, NULL); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_decrypt); -be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, NULL); -be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str__cb); -be_define_const_str(_cb, "_cb", 4043300367u, 0, 3, &be_const_str_serial); +be_define_const_str(load, "load", 3859241449u, 0, 4, NULL); +be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_hex); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_read12); +be_define_const_str(read12, "read12", 4291076970u, 0, 6, &be_const_str_end); +be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); +be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_write8); +be_define_const_str(write8, "write8", 3133991532u, 0, 6, &be_const_str_def); +be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); +be_define_const_str(select, "select", 297952813u, 0, 6, &be_const_str_type); +be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); +be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_yield); +be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); +be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, NULL); +be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_rtc); +be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, &be_const_str_else); +be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); +be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); +be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_allocated); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_finish); +be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL); +be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_getbits); +be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_tag); +be_define_const_str(tag, "tag", 2516003219u, 0, 3, NULL); +be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_pin); +be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_set_timeouts); +be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, &be_const_str_import); +be_define_const_str(import, "import", 288002260u, 66, 6, NULL); +be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, NULL); +be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str__settings_ptr); +be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_remove_cmd); +be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_atan2); +be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, &be_const_str_ctypes_bytes); +be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_millis); +be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); +be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_delay); +be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_imin); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_shared_key); +be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, &be_const_str_wire); +be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_last_modified); +be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, &be_const_str_serial); be_define_const_str(serial, "serial", 3687697785u, 0, 6, NULL); -be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_I2S_OUT_SLCT); -be_define_const_str(I2S_OUT_SLCT, "I2S_OUT_SLCT", 4037293837u, 0, 12, &be_const_str_flush); -be_define_const_str(flush, "flush", 3002334877u, 0, 5, NULL); -be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, &be_const_str_ELECTRIQ_MOODL_TX); -be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, &be_const_str_SPI_MOSI); -be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, &be_const_str_reset_search); +be_define_const_str(opt_call, "()", 685372826u, 0, 2, &be_const_str_webclient); +be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, NULL); +be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_ctypes_bytes_dyn); +be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, &be_const_str_time_dump); +be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, &be_const_str_static); +be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_isrunning); +be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, &be_const_str_top); +be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); +be_define_const_str(begin, "begin", 1748273790u, 0, 5, NULL); +be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_deg); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_gc); +be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_gen_cb); +be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, NULL); +be_define_const_str(reset, "reset", 1695364032u, 0, 5, NULL); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_skip); +be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL); +be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str_has); +be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_raise); +be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); +be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, &be_const_str_write_bit); +be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL); +be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL); +be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, NULL); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_iter); +be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_exp); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_tob64); +be_define_const_str(tob64, "tob64", 373777640u, 0, 5, &be_const_str_wire_scan); +be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); +be_define_const_str(call, "call", 3018949801u, 0, 4, NULL); +be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, NULL); +be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_resolvecmnd); +be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); +be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_try); +be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); +be_define_const_str(_cb, "_cb", 4043300367u, 0, 3, NULL); +be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, &be_const_str_check_privileged_access); +be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, NULL); +be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_content_send); +be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_tolower); +be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); +be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_imax); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_set_auth); +be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL); +be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_read24); +be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL); +be_define_const_str(add_header, "add_header", 927130612u, 0, 10, &be_const_str_kv); +be_define_const_str(kv, "kv", 1497177492u, 0, 2, &be_const_str_pin_used); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_publish_result); +be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, &be_const_str_do); +be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); +be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_read_bytes); +be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); +be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_scale_uint); +be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); +be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_remove_timer); +be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, NULL); +be_define_const_str(dot_len, ".len", 850842136u, 0, 4, &be_const_str_Wire); +be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str__begin_transmission); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_toupper); +be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); +be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_arg_size); +be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, NULL); +be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, &be_const_str_I2C_Driver); +be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_decrypt); +be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, NULL); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_input); +be_define_const_str(input, "input", 4191711099u, 0, 5, NULL); +be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_floor); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_real); +be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); +be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str__cmd); +be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_enabled); +be_define_const_str(enabled, "enabled", 49525662u, 0, 7, &be_const_str_int); +be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); +be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_resp_cmnd_error); +be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); +be_define_const_str(dot_size, ".size", 1965188224u, 0, 5, NULL); +be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_reset_search); be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL); -be_define_const_str(print, "print", 372738696u, 0, 5, NULL); -be_define_const_str(I2S_OUT_CLK, "I2S_OUT_CLK", 2580200387u, 0, 11, NULL); +be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_set); +be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_elif); +be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_get_switch); +be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, NULL); +be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str__read); +be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_asin); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, NULL); +be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_arg); +be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_reduce); +be_define_const_str(reduce, "reduce", 2002030311u, 0, 6, NULL); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_save); +be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); +be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_get_size); +be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_search); +be_define_const_str(search, "search", 2150836393u, 0, 6, &be_const_str_srand); +be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); +be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, NULL); +be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_content_flush); +be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, NULL); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, NULL); +be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_listdir); +be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, &be_const_str_log10); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_pop); +be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_read32); +be_define_const_str(read32, "read32", 1741276240u, 0, 6, &be_const_str_for); +be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); +be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_log); +be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_map); +be_define_const_str(map, "map", 3751997361u, 0, 3, &be_const_str_redirect); +be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_pi); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_range); +be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); +be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_count); +be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_update); +be_define_const_str(update, "update", 672109684u, 0, 6, NULL); +be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_find_key_i); +be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL); +be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, NULL); +be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_AudioGeneratorWAV); +be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str__buffer); +be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str_remove_driver); +be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, &be_const_str_false); +be_define_const_str(false, "false", 184981848u, 62, 5, NULL); +be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, NULL); +be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_lower); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_nan); +be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, NULL); +be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); +be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_read13); +be_define_const_str(read13, "read13", 12887293u, 0, 6, &be_const_str_set_power); +be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); +be_define_const_str(seti, "seti", 1500556254u, 0, 4, &be_const_str_toptr); +be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, NULL); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, NULL); +be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, NULL); +be_define_const_str(cb_dispatch, "cb_dispatch", 1741510499u, 0, 11, NULL); +be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str_bytes); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_public_key); +be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_continue); +be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str__available); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str__def); +be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_i2c_enabled); +be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, &be_const_str_reverse); +be_define_const_str(reverse, "reverse", 558918661u, 0, 7, &be_const_str_true); +be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); +be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_name); +be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_reverse_gamma10); +be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); +be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_dump); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); +be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_attrdump); +be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_fromstring); +be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_publish); +be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_wifi); +be_define_const_str(wifi, "wifi", 120087624u, 0, 4, NULL); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, NULL); +be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_tomap); +be_define_const_str(tomap, "tomap", 612167626u, 0, 5, NULL); +be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_traceback); +be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, &be_const_str_as); +be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); +be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_pin_mode); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); +be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, NULL); +be_define_const_str(str, "str", 3259748752u, 0, 3, &be_const_str_tanh); +be_define_const_str(tanh, "tanh", 153638352u, 0, 4, &be_const_str_write_bytes); +be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, &be_const_str_except); +be_define_const_str(except, "except", 950914032u, 69, 6, NULL); +be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL); +be_define_const_str(dot_w, ".w", 1255414514u, 0, 2, NULL); +be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_SERIAL_8N1); +be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_init); +be_define_const_str(init, "init", 380752755u, 0, 4, NULL); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_super); +be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); +be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_fromb64); +be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, NULL); +be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); +be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_bus); +be_define_const_str(bus, "bus", 1607822841u, 0, 3, NULL); +be_define_const_str(find, "find", 3186656602u, 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(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str__request_from); +be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_cos); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_cosh); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_set_useragent); +be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, &be_const_str_size); +be_define_const_str(size, "size", 597743964u, 0, 4, &be_const_str_web_send_decimal); +be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, &be_const_str_write); +be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); +be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_try_rule); +be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); +be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); +be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, &be_const_str_sinh); +be_define_const_str(sinh, "sinh", 282220607u, 0, 4, &be_const_str_return); +be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_digital_read); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_has_arg); +be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_number); +be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_remove_rule); +be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); +be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, &be_const_str_resize); +be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); +be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, NULL); +be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_add_driver); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_close); +be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_member); +be_define_const_str(member, "member", 719708611u, 0, 6, &be_const_str_response_append); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_split); +be_define_const_str(split, "split", 2276994531u, 0, 5, &be_const_str_strftime); +be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, NULL); +be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str__ccmd); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_set_timer); +be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, &be_const_str_time_reached); +be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); +be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_SERIAL_8N2); +be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_if); +be_define_const_str(if, "if", 959999494u, 50, 2, NULL); +be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_insert); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_print); +be_define_const_str(print, "print", 372738696u, 0, 5, &be_const_str_run_deferred); +be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, &be_const_str_scan); +be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_settings); +be_define_const_str(settings, "settings", 1745255176u, 0, 8, NULL); +be_define_const_str(arch, "arch", 2952804297u, 0, 4, &be_const_str_open); +be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); +be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_loop); +be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_wire1); +be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); +be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); +be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_keys); +be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_sin); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_while); +be_define_const_str(while, "while", 231090382u, 53, 5, NULL); +be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_members); +be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_on); +be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); +be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_collect); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_url_encode); +be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, NULL); +be_define_const_str(dot_p2, ".p2", 232398067u, 0, 3, &be_const_str_MD5); +be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str__settings_def); +be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, NULL); +be_define_const_str(erase, "erase", 1010949589u, 0, 5, NULL); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_rand); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_resp_cmnd_str); +be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_state); +be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); +be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_contains); +be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_set_light); +be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, &be_const_str_setrange); +be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, &be_const_str_tan); +be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); +be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); +be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_resp_cmnd_done); +be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); +be_define_const_str(eth, "eth", 2191266556u, 0, 3, NULL); +be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_concat); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_flush); +be_define_const_str(flush, "flush", 3002334877u, 0, 5, &be_const_str_get_free_heap); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_push); +be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_wire2); +be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_atan); +be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_event); +be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_issubclass); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_write_file); +be_define_const_str(write_file, "write_file", 3177658879u, 0, 10, &be_const_str_class); +be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); static const bstring* const m_string_table[] = { - (const bstring *)&be_const_str_memory, - (const bstring *)&be_const_str_LE01MR_TX, - (const bstring *)&be_const_str_RA8876_CS, - (const bstring *)&be_const_str_HX711_DAT, - (const bstring *)&be_const_str_FALLING, - NULL, - NULL, - (const bstring *)&be_const_str_content_send, - (const bstring *)&be_const_str_AudioFileSourceFS, - (const bstring *)&be_const_str_pin, - (const bstring *)&be_const_str_try, - (const bstring *)&be_const_str_get_free_heap, - (const bstring *)&be_const_str_OUTPUT_OPEN_DRAIN, - (const bstring *)&be_const_str_ILI9488_CS, - (const bstring *)&be_const_str_find_key_i, - (const bstring *)&be_const_str_event, - (const bstring *)&be_const_str_SERIAL_6O1, - (const bstring *)&be_const_str_SERIAL_7E2, - (const bstring *)&be_const_str_WEBCAM_PCLK, - (const bstring *)&be_const_str_Tasmota, - (const bstring *)&be_const_str_KEY1_INV_NP, - (const bstring *)&be_const_str_MAX31855DO, - (const bstring *)&be_const_str_ZIGBEE_RX, - (const bstring *)&be_const_str_opt_call, - (const bstring *)&be_const_str_I2S_IN_DATA, - (const bstring *)&be_const_str_AudioOutputI2S, - (const bstring *)&be_const_str_getbits, - (const bstring *)&be_const_str_RC522_CS, - (const bstring *)&be_const_str_SHELLY_DIMMER_RST_INV, - (const bstring *)&be_const_str_available, - (const bstring *)&be_const_str_FTC532, - (const bstring *)&be_const_str_ST7789_CS, - (const bstring *)&be_const_str_ADC_INPUT, - (const bstring *)&be_const_str_floor, - NULL, - (const bstring *)&be_const_str_MAX7219CLK, - (const bstring *)&be_const_str__cmd, - (const bstring *)&be_const_str_SDCARD_CS, - (const bstring *)&be_const_str_ADC_CT_POWER, - (const bstring *)&be_const_str_BL0940_RX, - (const bstring *)&be_const_str_dot_len, - (const bstring *)&be_const_str_return, - (const bstring *)&be_const_str_SERIAL_7O1, - (const bstring *)&be_const_str_DCKI, - (const bstring *)&be_const_str_PN532_RXD, - (const bstring *)&be_const_str_WINDMETER_SPEED, - (const bstring *)&be_const_str_CSE7761_RX, - (const bstring *)&be_const_str_cb_dispatch, - (const bstring *)&be_const_str_MIEL_HVAC_RX, - (const bstring *)&be_const_str_REL1, - (const bstring *)&be_const_str_MAX7219CS, - (const bstring *)&be_const_str_WEBCAM_HSD, - (const bstring *)&be_const_str_TASMOTACLIENT_RST_INV, - (const bstring *)&be_const_str_HALLEFFECT, - (const bstring *)&be_const_str_PULLDOWN, - (const bstring *)&be_const_str_add_rule, - (const bstring *)&be_const_str_NRF24_DC, - (const bstring *)&be_const_str_remove, - (const bstring *)&be_const_str_ADC_JOY, - (const bstring *)&be_const_str_MHZ_TXD, - (const bstring *)&be_const_str_KEY1_PD, - (const bstring *)&be_const_str_PROJECTOR_CTRL_RX, - (const bstring *)&be_const_str_ILI9341_CS, - (const bstring *)&be_const_str_DDSU666_TX, - (const bstring *)&be_const_str_, - (const bstring *)&be_const_str_dot_w, - (const bstring *)&be_const_str_PMS5003_TX, - (const bstring *)&be_const_str_read13, - (const bstring *)&be_const_str_EC_C25519, - (const bstring *)&be_const_str_SERIAL_6N2, - (const bstring *)&be_const_str_deinit, - (const bstring *)&be_const_str_ARIRFSEL, - (const bstring *)&be_const_str_PZEM016_RX, - (const bstring *)&be_const_str_KEY1_NP, - (const bstring *)&be_const_str_GET, - (const bstring *)&be_const_str_dac_voltage, - NULL, - (const bstring *)&be_const_str_sinh, - (const bstring *)&be_const_str_else, - (const bstring *)&be_const_str_set_timer, - (const bstring *)&be_const_str_HRE_DATA, - (const bstring *)&be_const_str_MCP39F5_TX, - (const bstring *)&be_const_str_lower, - (const bstring *)&be_const_str_digital_read, - (const bstring *)&be_const_str_SDM120_RX, - (const bstring *)&be_const_str_BACKLIGHT, - (const bstring *)&be_const_str_NRG_SEL_INV, - (const bstring *)&be_const_str_BS814_DAT, - (const bstring *)&be_const_str_ROT1A, - (const bstring *)&be_const_str_XPT2046_CS, - NULL, - (const bstring *)&be_const_str_SERIAL_5O2, - (const bstring *)&be_const_str_DDS2382_RX, - NULL, - (const bstring *)&be_const_str_ADC_BUTTON, - (const bstring *)&be_const_str_SDS0X1_TX, - (const bstring *)&be_const_str_BOILER_OT_TX, - (const bstring *)&be_const_str_ADE7953_IRQ, - (const bstring *)&be_const_str_WEBCAM_RESET, - (const bstring *)&be_const_str_RC522_RST, - (const bstring *)&be_const_str_MGC3130_XFER, - NULL, - (const bstring *)&be_const_str_TELEINFO_RX, - (const bstring *)&be_const_str_CSE7766_TX, - (const bstring *)&be_const_str_TFMINIPLUS_RX, - (const bstring *)&be_const_str_PROJECTOR_CTRL_TX, - (const bstring *)&be_const_str_NONE, - (const bstring *)&be_const_str_WEBCAM_PSRCS, - (const bstring *)&be_const_str_ADC_PH, - NULL, - NULL, - (const bstring *)&be_const_str_SERIAL_6N1, - (const bstring *)&be_const_str_exists, - (const bstring *)&be_const_str_SPI_CS, - (const bstring *)&be_const_str_SERIAL_8E2, - (const bstring *)&be_const_str_A4988_STP, - (const bstring *)&be_const_str_keys, - (const bstring *)&be_const_str_BUZZER_INV, - NULL, - (const bstring *)&be_const_str_SM2135_CLK, - (const bstring *)&be_const_str_DHT11_OUT, - NULL, - (const bstring *)&be_const_str_ctypes_bytes_dyn, - (const bstring *)&be_const_str_AudioGenerator, - (const bstring *)&be_const_str_IBEACON_RX, - (const bstring *)&be_const_str_NRG_CF1, - (const bstring *)&be_const_str_list, - NULL, - (const bstring *)&be_const_str_get, - (const bstring *)&be_const_str_LEDLNK_INV, - (const bstring *)&be_const_str_ROT1B, - NULL, - (const bstring *)&be_const_str_false, - (const bstring *)&be_const_str_PMS5003_RX, - (const bstring *)&be_const_str_LEDLNK, - (const bstring *)&be_const_str_SDM72_TX, - (const bstring *)&be_const_str_ZIGBEE_TX, - (const bstring *)&be_const_str_time_dump, - (const bstring *)&be_const_str_CSE7761_TX, - (const bstring *)&be_const_str_TCP_TX, - (const bstring *)&be_const_str__buffer, - NULL, - (const bstring *)&be_const_str_TM1638CLK, - (const bstring *)&be_const_str_DSB, - (const bstring *)&be_const_str_atan, - NULL, - (const bstring *)&be_const_str_EPAPER29_CS, - (const bstring *)&be_const_str_opt_connect, - (const bstring *)&be_const_str_tan, + (const bstring *)&be_const_str_SERIAL_5N1, + (const bstring *)&be_const_str__global_addr, + (const bstring *)&be_const_str_OneWire, + (const bstring *)&be_const_str_SERIAL_8O2, (const bstring *)&be_const_str_copy, - (const bstring *)&be_const_str_P9813_DAT, - (const bstring *)&be_const_str_cmd_res, - (const bstring *)&be_const_str_AudioGeneratorWAV, - (const bstring *)&be_const_str_SM16716_CLK, - (const bstring *)&be_const_str_ADC_TEMP, - (const bstring *)&be_const_str_TX2X_TXD_BLACK, - (const bstring *)&be_const_str_MIEL_HVAC_TX, - (const bstring *)&be_const_str_I2C_SDA, - (const bstring *)&be_const_str_SM16716_DAT, - (const bstring *)&be_const_str_KEY1_INV, - NULL, - NULL, - (const bstring *)&be_const_str_HJL_CF, - (const bstring *)&be_const_str_MAX31855CLK, - (const bstring *)&be_const_str_DHT11, - (const bstring *)&be_const_str_url_encode, - (const bstring *)&be_const_str_OUTPUT_LO, - (const bstring *)&be_const_str_EPAPER42_CS, - NULL, - (const bstring *)&be_const_str_SSPI_DC, - (const bstring *)&be_const_str_INTERRUPT, - (const bstring *)&be_const_str_TELEINFO_ENABLE, - (const bstring *)&be_const_str_MCP39F5_RX, - (const bstring *)&be_const_str_HRXL_RX, - (const bstring *)&be_const_str_AZ_TXD, - (const bstring *)&be_const_str_BUZZER, - NULL, - (const bstring *)&be_const_str_DDSU666_RX, - (const bstring *)&be_const_str_AS608_TX, - (const bstring *)&be_const_str_HLW_CF, - (const bstring *)&be_const_str_PN532_TXD, - (const bstring *)&be_const_str_PWM1, - (const bstring *)&be_const_str_ADC_BUTTON_INV, - (const bstring *)&be_const_str_arg, - (const bstring *)&be_const_str_rtc, - (const bstring *)&be_const_str_TCP_RX, - (const bstring *)&be_const_str_def, - NULL, - (const bstring *)&be_const_str_ETH_PHY_MDIO, - (const bstring *)&be_const_str_DHT22, - NULL, - NULL, - (const bstring *)&be_const_str_SERIAL_5E2, - (const bstring *)&be_const_str_LMT01, - (const bstring *)&be_const_str_MGC3130_RESET, - NULL, - (const bstring *)&be_const_str_ETH_PHY_MDC, - (const bstring *)&be_const_str_AudioOutput, - (const bstring *)&be_const_str_reverse_gamma10, - (const bstring *)&be_const_str_reverse, - (const bstring *)&be_const_str_EPD_DATA, - (const bstring *)&be_const_str_INPUT_PULLDOWN, - (const bstring *)&be_const_str_opt_neq, - (const bstring *)&be_const_str_DEEPSLEEP, - (const bstring *)&be_const_str_pop, - (const bstring *)&be_const_str_AudioGeneratorMP3, - (const bstring *)&be_const_str_last_modified, - (const bstring *)&be_const_str_DAC, - (const bstring *)&be_const_str_ADC_LIGHT, - (const bstring *)&be_const_str_SOLAXX1_TX, - (const bstring *)&be_const_str_BOILER_OT_RX, + (const bstring *)&be_const_str_tostring, + (const bstring *)&be_const_str_dot_p1, + (const bstring *)&be_const_str_read8, + (const bstring *)&be_const_str_rad, + (const bstring *)&be_const_str_load, (const bstring *)&be_const_str_opt_add, NULL, - (const bstring *)&be_const_str_CNTR1, - (const bstring *)&be_const_str_SERIAL_5N2, - NULL, - (const bstring *)&be_const_str_PWM1_INV, - (const bstring *)&be_const_str_WEBCAM_DATA, - NULL, - (const bstring *)&be_const_str_resp_cmnd_failed, - (const bstring *)&be_const_str_SHELLY_DIMMER_BOOT0, - (const bstring *)&be_const_str_OneWire, - (const bstring *)&be_const_str_HPMA_TX, - (const bstring *)&be_const_str_remove_cmd, - (const bstring *)&be_const_str_SERIAL_7N2, - (const bstring *)&be_const_str_redirect, - (const bstring *)&be_const_str_AudioFileSource, - NULL, - (const bstring *)&be_const_str_toupper, - (const bstring *)&be_const_str_dot_p2, - (const bstring *)&be_const_str_AS608_RX, - (const bstring *)&be_const_str_OPTION_A, - (const bstring *)&be_const_str_ADC_RANGE, - (const bstring *)&be_const_str_ILI9341_DC, - (const bstring *)&be_const_str_SWT1_PD, - (const bstring *)&be_const_str_A4988_MS1, - (const bstring *)&be_const_str_CHANGE, - (const bstring *)&be_const_str_AZ_RXD, - (const bstring *)&be_const_str_SERIAL_7N1, - (const bstring *)&be_const_str_digital_write, - (const bstring *)&be_const_str_atan2, - (const bstring *)&be_const_str_A4988_DIR, - (const bstring *)&be_const_str_gamma10, - (const bstring *)&be_const_str_dot_p1, - (const bstring *)&be_const_str_sin, - (const bstring *)&be_const_str_SBR_TX, - (const bstring *)&be_const_str_SDM72_RX, - (const bstring *)&be_const_str_A4988_ENA, - (const bstring *)&be_const_str_IEM3000_TX, - (const bstring *)&be_const_str_gamma8, - (const bstring *)&be_const_str_top, - (const bstring *)&be_const_str_counters, - NULL, - (const bstring *)&be_const_str_I2S_IN_SLCT, - (const bstring *)&be_const_str_remove_rule, - (const bstring *)&be_const_str_imin, - (const bstring *)&be_const_str__rules, - (const bstring *)&be_const_str_OUTPUT, - (const bstring *)&be_const_str_EXS_ENABLE, - (const bstring *)&be_const_str_RFSEND, - (const bstring *)&be_const_str_CSE7766_RX, - (const bstring *)&be_const_str_IBEACON_TX, - (const bstring *)&be_const_str_ARIRFRCV, + (const bstring *)&be_const_str_chars_in_string, + (const bstring *)&be_const_str_select, + (const bstring *)&be_const_str_global, (const bstring *)&be_const_str_opt_eq, + (const bstring *)&be_const_str_SERIAL_8E1, + (const bstring *)&be_const_str_get_power, + (const bstring *)&be_const_str_addr, + (const bstring *)&be_const_str_dot_p, + (const bstring *)&be_const_str_add, + (const bstring *)&be_const_str_SERIAL_6N1, + (const bstring *)&be_const_str_SERIAL_8O1, + (const bstring *)&be_const_str___iterator__, + (const bstring *)&be_const_str_available, + (const bstring *)&be_const_str__drivers, + (const bstring *)&be_const_str_opt_call, + (const bstring *)&be_const_str_SERIAL_6E2, + (const bstring *)&be_const_str_classname, + (const bstring *)&be_const_str_remove, + (const bstring *)&be_const_str_begin, + (const bstring *)&be_const_str_content_stop, + (const bstring *)&be_const_str_reset, + NULL, + (const bstring *)&be_const_str_clear, + (const bstring *)&be_const_str_SERIAL_5E1, + (const bstring *)&be_const_str_setitem, + (const bstring *)&be_const_str_stop, + (const bstring *)&be_const_str_AES_GCM, + (const bstring *)&be_const_str_exec_cmd, + (const bstring *)&be_const_str_ceil, + (const bstring *)&be_const_str_call, + (const bstring *)&be_const_str_cmd_res, + NULL, + NULL, + (const bstring *)&be_const_str_opt_connect, + (const bstring *)&be_const_str_SERIAL_6E1, + (const bstring *)&be_const_str__cb, + (const bstring *)&be_const_str_AudioOutput, + (const bstring *)&be_const_str_SERIAL_6O2, + (const bstring *)&be_const_str_detect, + (const bstring *)&be_const_str_depower, + (const bstring *)&be_const_str_add_header, + (const bstring *)&be_const_str_pow, + (const bstring *)&be_const_str_SERIAL_5E2, + (const bstring *)&be_const_str_get, + (const bstring *)&be_const_str_dot_len, + (const bstring *)&be_const_str_SERIAL_5N2, + (const bstring *)&be_const_str_AudioFileSource, + (const bstring *)&be_const_str_digital_write, + NULL, + (const bstring *)&be_const_str_char, + (const bstring *)&be_const_str_AudioGenerator, + (const bstring *)&be_const_str_byte, + (const bstring *)&be_const_str_dot_size, + (const bstring *)&be_const_str_list, + NULL, + (const bstring *)&be_const_str_SERIAL_7N2, + (const bstring *)&be_const_str_Tasmota, + (const bstring *)&be_const_str_read, + (const bstring *)&be_const_str___lower__, + (const bstring *)&be_const_str_POST, + (const bstring *)&be_const_str_deinit, + (const bstring *)&be_const_str_SERIAL_8E2, + (const bstring *)&be_const_str_isnan, + (const bstring *)&be_const_str_arg_name, + (const bstring *)&be_const_str_get_light, + NULL, + NULL, + (const bstring *)&be_const_str_sqrt, + (const bstring *)&be_const_str__end_transmission, + (const bstring *)&be_const_str_exec_tele, + (const bstring *)&be_const_str_format, + NULL, + (const bstring *)&be_const_str_SERIAL_7E2, + NULL, + (const bstring *)&be_const_str_SERIAL_7N1, + (const bstring *)&be_const_str_content_button, + (const bstring *)&be_const_str_AudioGeneratorMP3, + (const bstring *)&be_const_str_fromptr, + (const bstring *)&be_const_str_geti, + (const bstring *)&be_const_str_assert, + (const bstring *)&be_const_str_time_str, + (const bstring *)&be_const_str_exists, + (const bstring *)&be_const_str_seti, + (const bstring *)&be_const_str_acos, + (const bstring *)&be_const_str_find_op, + NULL, + (const bstring *)&be_const_str_isinstance, + (const bstring *)&be_const_str_cb_dispatch, + (const bstring *)&be_const_str_SERIAL_5O2, + (const bstring *)&be_const_str_, + (const bstring *)&be_const_str_dac_voltage, + (const bstring *)&be_const_str_add_rule, + (const bstring *)&be_const_str_AudioOutputI2S, + (const bstring *)&be_const_str__write, + (const bstring *)&be_const_str_resp_cmnd, + NULL, + NULL, + (const bstring *)&be_const_str_content_start, + (const bstring *)&be_const_str_memory, + (const bstring *)&be_const_str_EC_C25519, + (const bstring *)&be_const_str_str, + (const bstring *)&be_const_str_get_option, + (const bstring *)&be_const_str_dot_w, + (const bstring *)&be_const_str_SERIAL_7O1, + (const bstring *)&be_const_str__timers, + NULL, + NULL, + (const bstring *)&be_const_str_GET, + (const bstring *)&be_const_str_break, + (const bstring *)&be_const_str__global_def, + (const bstring *)&be_const_str_find, + NULL, + (const bstring *)&be_const_str_SERIAL_6N2, + (const bstring *)&be_const_str_module, + (const bstring *)&be_const_str_var, + (const bstring *)&be_const_str_content_send_style, + (const bstring *)&be_const_str_asstring, + (const bstring *)&be_const_str_get_string, + (const bstring *)&be_const_str_encrypt, + (const bstring *)&be_const_str_opt_neq, + (const bstring *)&be_const_str_exec_rules, + (const bstring *)&be_const_str_AudioFileSourceFS, + (const bstring *)&be_const_str_SERIAL_7O2, + NULL, + (const bstring *)&be_const_str__ptr, + (const bstring *)&be_const_str_arch, + NULL, + (const bstring *)&be_const_str_cmd, + (const bstring *)&be_const_str_nil, + (const bstring *)&be_const_str_SERIAL_7E1, + (const bstring *)&be_const_str_calldepth, + NULL, + (const bstring *)&be_const_str_counters, + (const bstring *)&be_const_str__rules, + (const bstring *)&be_const_str_codedump, + (const bstring *)&be_const_str_dot_p2, + NULL, + (const bstring *)&be_const_str_erase, + (const bstring *)&be_const_str_gamma8, + NULL, + (const bstring *)&be_const_str_SERIAL_6O1, + (const bstring *)&be_const_str_target_search, NULL, (const bstring *)&be_const_str_abs, - (const bstring *)&be_const_str_fromstring, - (const bstring *)&be_const_str_MAX7219DIN, - NULL, - (const bstring *)&be_const_str_I2C_SCL, - NULL, - (const bstring *)&be_const_str_LED1_INV, - (const bstring *)&be_const_str_I2S_IN_CLK, - NULL, - (const bstring *)&be_const_str_PULLUP, - (const bstring *)&be_const_str_INPUT, - (const bstring *)&be_const_str_ETH_PHY_POWER, - (const bstring *)&be_const_str_KEY1, - (const bstring *)&be_const_str_add_driver, - NULL, - (const bstring *)&be_const_str_LOW, - (const bstring *)&be_const_str_LED1, - (const bstring *)&be_const_str_read12, - (const bstring *)&be_const_str_find, - (const bstring *)&be_const_str__begin_transmission, - (const bstring *)&be_const_str_KEY1_TC, - (const bstring *)&be_const_str_dot_p, - (const bstring *)&be_const_str_AES_GCM, - (const bstring *)&be_const_str_print, - NULL, - (const bstring *)&be_const_str_I2S_OUT_CLK + (const bstring *)&be_const_str_eth, + (const bstring *)&be_const_str_SERIAL_5O1, + (const bstring *)&be_const_str_compile, + (const bstring *)&be_const_str_add_cmd }; static const struct bconststrtab m_const_string_table = { - .size = 291, - .count = 582, + .size = 160, + .count = 321, .table = m_string_table }; diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota.h b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota.h index a9f54b4b4..34b9c0a05 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota.h @@ -1,85 +1,86 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_tasmota_map) { - { be_const_key(set_light, -1), be_const_closure(set_light_closure) }, - { be_const_key(gc, -1), be_const_closure(gc_closure) }, - { be_const_key(remove_cmd, -1), be_const_closure(remove_cmd_closure) }, - { be_const_key(set_timer, 42), be_const_closure(set_timer_closure) }, - { be_const_key(_settings_ptr, -1), be_const_comptr(&Settings) }, - { be_const_key(set_power, -1), be_const_func(l_setpower) }, - { be_const_key(remove_driver, -1), be_const_closure(remove_driver_closure) }, - { be_const_key(try_rule, -1), be_const_closure(try_rule_closure) }, - { be_const_key(find_op, 58), be_const_closure(find_op_closure) }, - { be_const_key(resp_cmnd_str, -1), be_const_func(l_respCmndStr) }, - { be_const_key(find_key_i, -1), be_const_closure(find_key_i_closure) }, - { be_const_key(_cb, 3), be_const_var(0) }, - { be_const_key(web_send, -1), be_const_func(l_webSend) }, - { be_const_key(log, 1), be_const_func(l_logInfo) }, - { be_const_key(get_switch, 50), be_const_func(l_getswitch) }, - { be_const_key(_ccmd, 19), be_const_var(1) }, - { be_const_key(eth, -1), be_const_func(l_eth) }, - { be_const_key(_settings_def, -1), be_const_comptr(&be_tasmota_settings_struct) }, - { be_const_key(init, 39), be_const_closure(init_closure) }, - { be_const_key(strftime, -1), be_const_func(l_strftime) }, - { be_const_key(kv, -1), be_const_closure(kv_closure) }, { be_const_key(resp_cmnd_done, -1), be_const_func(l_respCmndDone) }, - { be_const_key(cmd_res, 67), be_const_var(2) }, - { be_const_key(wire1, 43), be_const_var(3) }, - { be_const_key(get_light, -1), be_const_closure(get_light_closure) }, - { be_const_key(resp_cmnd_error, 62), be_const_func(l_respCmndError) }, - { be_const_key(publish_result, 9), be_const_func(l_publish_result) }, - { be_const_key(gen_cb, -1), be_const_closure(gen_cb_closure) }, - { be_const_key(yield, -1), be_const_func(l_yield) }, - { be_const_key(add_rule, -1), be_const_closure(add_rule_closure) }, - { be_const_key(settings, -1), be_const_var(4) }, - { be_const_key(chars_in_string, -1), be_const_closure(chars_in_string_closure) }, - { be_const_key(resp_cmnd, 31), be_const_func(l_respCmnd) }, - { be_const_key(exec_tele, 68), be_const_closure(exec_tele_closure) }, - { be_const_key(exec_rules, 51), be_const_closure(exec_rules_closure) }, - { be_const_key(load, -1), be_const_closure(load_closure) }, - { be_const_key(remove_rule, 22), be_const_closure(remove_rule_closure) }, - { be_const_key(_rules, 18), be_const_var(5) }, - { be_const_key(publish, -1), be_const_func(l_publish) }, - { be_const_key(get_option, 15), be_const_func(l_getoption) }, - { be_const_key(global, -1), be_const_var(6) }, - { be_const_key(add_driver, 33), be_const_closure(add_driver_closure) }, - { be_const_key(cmd, -1), be_const_closure(cmd_closure) }, + { be_const_key(settings, 70), be_const_var(0) }, + { be_const_key(set_light, -1), be_const_closure(set_light_closure) }, + { be_const_key(gc, 35), be_const_closure(gc_closure) }, { be_const_key(add_cmd, -1), be_const_closure(add_cmd_closure) }, - { be_const_key(run_deferred, -1), be_const_closure(run_deferred_closure) }, - { be_const_key(get_free_heap, -1), be_const_func(l_getFreeHeap) }, - { be_const_key(wifi, -1), be_const_func(l_wifi) }, - { be_const_key(time_dump, -1), be_const_func(l_time_dump) }, - { be_const_key(rtc, 24), be_const_func(l_rtc) }, - { be_const_key(cb_dispatch, -1), be_const_closure(cb_dispatch_closure) }, - { be_const_key(_get_cb, -1), be_const_func(l_get_cb) }, - { be_const_key(resp_cmnd_failed, 72), be_const_func(l_respCmndFailed) }, - { be_const_key(wire_scan, -1), be_const_closure(wire_scan_closure) }, - { be_const_key(exec_cmd, -1), be_const_closure(exec_cmd_closure) }, - { be_const_key(_cmd, 46), be_const_func(l_cmd) }, - { be_const_key(remove_timer, -1), be_const_closure(remove_timer_closure) }, - { be_const_key(time_str, 34), be_const_closure(time_str_closure) }, - { be_const_key(response_append, -1), be_const_func(l_respAppend) }, - { be_const_key(web_send_decimal, 60), be_const_func(l_webSendDecimal) }, - { be_const_key(_drivers, 71), be_const_var(7) }, + { be_const_key(try_rule, -1), be_const_closure(try_rule_closure) }, + { be_const_key(publish, 20), be_const_func(l_publish) }, + { be_const_key(_settings_ptr, 28), be_const_comptr(&Settings) }, + { be_const_key(exec_tele, 36), be_const_closure(exec_tele_closure) }, { be_const_key(delay, -1), be_const_func(l_delay) }, + { be_const_key(_drivers, -1), be_const_var(1) }, + { be_const_key(find_key_i, -1), be_const_closure(find_key_i_closure) }, + { be_const_key(resp_cmnd_failed, -1), be_const_func(l_respCmndFailed) }, + { be_const_key(wire2, 64), be_const_var(2) }, + { be_const_key(gen_cb, 56), be_const_closure(gen_cb_closure) }, + { be_const_key(resp_cmnd_str, -1), be_const_func(l_respCmndStr) }, + { be_const_key(_timers, 25), be_const_var(3) }, + { be_const_key(kv, -1), be_const_closure(kv_closure) }, + { be_const_key(set_power, -1), be_const_func(l_setpower) }, + { be_const_key(cmd, 38), be_const_closure(cmd_closure) }, + { be_const_key(global, -1), be_const_var(4) }, + { be_const_key(response_append, -1), be_const_func(l_respAppend) }, + { be_const_key(_get_cb, -1), be_const_func(l_get_cb) }, { be_const_key(time_reached, -1), be_const_func(l_timereached) }, + { be_const_key(wifi, 19), be_const_func(l_wifi) }, + { be_const_key(rtc, -1), be_const_func(l_rtc) }, + { be_const_key(i2c_enabled, 8), be_const_func(l_i2cenabled) }, + { be_const_key(publish_result, 34), be_const_func(l_publish_result) }, + { be_const_key(_settings_def, -1), be_const_comptr(&be_tasmota_settings_struct) }, + { be_const_key(yield, 6), be_const_func(l_yield) }, + { be_const_key(init, -1), be_const_closure(init_closure) }, + { be_const_key(eth, -1), be_const_func(l_eth) }, + { be_const_key(get_free_heap, -1), be_const_func(l_getFreeHeap) }, + { be_const_key(get_option, -1), be_const_func(l_getoption) }, + { be_const_key(get_power, -1), be_const_func(l_getpower) }, + { be_const_key(run_deferred, -1), be_const_closure(run_deferred_closure) }, + { be_const_key(get_light, 11), be_const_closure(get_light_closure) }, + { be_const_key(cmd_res, -1), be_const_var(5) }, + { be_const_key(event, -1), be_const_closure(event_closure) }, + { be_const_key(load, -1), be_const_closure(load_closure) }, + { be_const_key(remove_timer, -1), be_const_closure(remove_timer_closure) }, + { be_const_key(wire_scan, -1), be_const_closure(wire_scan_closure) }, + { be_const_key(_cb, 50), be_const_var(6) }, + { be_const_key(remove_driver, 67), be_const_closure(remove_driver_closure) }, + { be_const_key(wire1, 61), be_const_var(7) }, + { be_const_key(memory, -1), be_const_func(l_memory) }, + { be_const_key(_global_addr, -1), be_const_comptr(&TasmotaGlobal) }, + { be_const_key(time_dump, -1), be_const_func(l_time_dump) }, + { be_const_key(_ccmd, -1), be_const_var(8) }, + { be_const_key(exec_cmd, 39), be_const_closure(exec_cmd_closure) }, + { be_const_key(exec_rules, 68), be_const_closure(exec_rules_closure) }, + { be_const_key(resp_cmnd, 14), be_const_func(l_respCmnd) }, + { be_const_key(remove_cmd, -1), be_const_closure(remove_cmd_closure) }, + { be_const_key(remove_rule, 69), be_const_closure(remove_rule_closure) }, + { be_const_key(web_send_decimal, -1), be_const_func(l_webSendDecimal) }, + { be_const_key(_rules, 41), be_const_var(9) }, + { be_const_key(strftime, 59), be_const_func(l_strftime) }, + { be_const_key(chars_in_string, -1), be_const_closure(chars_in_string_closure) }, + { be_const_key(set_timer, -1), be_const_closure(set_timer_closure) }, { be_const_key(_global_def, -1), be_const_comptr(&be_tasmota_global_struct) }, { be_const_key(resolvecmnd, -1), be_const_func(l_resolveCmnd) }, - { be_const_key(_timers, -1), be_const_var(8) }, - { be_const_key(event, 7), be_const_closure(event_closure) }, - { be_const_key(wire2, -1), be_const_var(9) }, { be_const_key(scale_uint, -1), be_const_func(l_scaleuint) }, - { be_const_key(get_power, 73), be_const_func(l_getpower) }, - { be_const_key(millis, -1), be_const_func(l_millis) }, - { be_const_key(save, 44), be_const_func(l_save) }, - { be_const_key(_global_addr, -1), be_const_comptr(&TasmotaGlobal) }, - { be_const_key(memory, -1), be_const_func(l_memory) }, - { be_const_key(i2c_enabled, -1), be_const_func(l_i2cenabled) }, + { be_const_key(time_str, -1), be_const_closure(time_str_closure) }, + { be_const_key(millis, 48), be_const_func(l_millis) }, + { be_const_key(resp_cmnd_error, -1), be_const_func(l_respCmndError) }, + { be_const_key(arch, -1), be_const_func(l_arch) }, + { be_const_key(log, -1), be_const_func(l_logInfo) }, + { be_const_key(add_rule, -1), be_const_closure(add_rule_closure) }, + { be_const_key(_cmd, 17), be_const_func(l_cmd) }, + { be_const_key(get_switch, -1), be_const_func(l_getswitch) }, + { be_const_key(find_op, -1), be_const_closure(find_op_closure) }, + { be_const_key(add_driver, 3), be_const_closure(add_driver_closure) }, + { be_const_key(save, 65), be_const_func(l_save) }, + { be_const_key(web_send, -1), be_const_func(l_webSend) }, + { be_const_key(cb_dispatch, -1), be_const_closure(cb_dispatch_closure) }, }; static be_define_const_map( be_class_tasmota_map, - 74 + 75 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_webclient.h b/lib/libesp32/Berry/generate/be_fixed_be_class_webclient.h index 6a7044c15..15eaa21d7 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_webclient.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_webclient.h @@ -1,26 +1,27 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_webclient_map) { - { be_const_key(url_encode, 3), be_const_func(wc_urlencode) }, - { be_const_key(POST, -1), be_const_func(wc_POST) }, - { be_const_key(dot_p, -1), be_const_var(0) }, - { be_const_key(begin, 5), be_const_func(wc_begin) }, - { be_const_key(set_useragent, 2), be_const_func(wc_set_useragent) }, - { be_const_key(set_auth, 12), be_const_func(wc_set_auth) }, { be_const_key(close, -1), be_const_func(wc_close) }, - { be_const_key(add_header, 9), be_const_func(wc_addheader) }, - { be_const_key(get_size, -1), be_const_func(wc_getsize) }, + { be_const_key(get_string, 5), be_const_func(wc_getstring) }, + { be_const_key(dot_w, 11), be_const_var(0) }, + { be_const_key(dot_p, 13), be_const_var(1) }, + { be_const_key(add_header, 10), be_const_func(wc_addheader) }, + { be_const_key(url_encode, -1), be_const_func(wc_urlencode) }, + { be_const_key(POST, -1), be_const_func(wc_POST) }, + { be_const_key(GET, 6), be_const_func(wc_GET) }, { be_const_key(deinit, -1), be_const_func(wc_deinit) }, + { be_const_key(get_size, -1), be_const_func(wc_getsize) }, { be_const_key(set_timeouts, -1), be_const_func(wc_set_timeouts) }, - { be_const_key(GET, 13), be_const_func(wc_GET) }, - { be_const_key(init, -1), be_const_func(wc_init) }, - { be_const_key(dot_w, -1), be_const_var(1) }, - { be_const_key(get_string, 11), be_const_func(wc_getstring) }, + { be_const_key(set_auth, -1), be_const_func(wc_set_auth) }, + { be_const_key(set_useragent, -1), be_const_func(wc_set_useragent) }, + { be_const_key(init, 0), be_const_func(wc_init) }, + { be_const_key(begin, -1), be_const_func(wc_begin) }, + { be_const_key(write_file, -1), be_const_func(wc_writefile) }, }; static be_define_const_map( be_class_webclient_map, - 15 + 16 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_gpio.h b/lib/libesp32/Berry/generate/be_fixed_gpio.h index 091842bca..d87b01643 100644 --- a/lib/libesp32/Berry/generate/be_fixed_gpio.h +++ b/lib/libesp32/Berry/generate/be_fixed_gpio.h @@ -1,281 +1,18 @@ #include "be_constobj.h" static be_define_const_map_slots(m_libgpio_map) { - { be_const_key(SENSOR_END, 167), be_const_int(250) }, - { be_const_key(DHT11_OUT, -1), be_const_int(40) }, - { be_const_key(HM10_TX, 199), be_const_int(139) }, - { be_const_key(DHT22, 6), be_const_int(38) }, - { be_const_key(ARIRFRCV, 226), be_const_int(98) }, - { be_const_key(WEBCAM_HREF, 183), be_const_int(161) }, - { be_const_key(SM16716_CLK, 168), be_const_int(91) }, - { be_const_key(ZIGBEE_RST, 264), be_const_int(181) }, - { be_const_key(KEY1_INV_NP, 223), be_const_int(4) }, - { be_const_key(KEY1_TC, 81), be_const_int(169) }, - { be_const_key(PROJECTOR_CTRL_RX, -1), be_const_int(225) }, - { be_const_key(TFMINIPLUS_RX, -1), be_const_int(235) }, - { be_const_key(SSD1331_CS, -1), be_const_int(208) }, - { be_const_key(MP3_DFR562, 162), be_const_int(67) }, - { be_const_key(WEBCAM_VSYNC, 140), be_const_int(160) }, - { be_const_key(CNTR1, 246), be_const_int(11) }, - { be_const_key(ROT1B_NP, -1), be_const_int(212) }, - { be_const_key(ELECTRIQ_MOODL_TX, -1), be_const_int(145) }, - { be_const_key(TASMOTACLIENT_RXD, -1), be_const_int(131) }, - { be_const_key(NONE, -1), be_const_int(0) }, - { be_const_key(RF_SENSOR, -1), be_const_int(75) }, - { be_const_key(MAX31855CS, -1), be_const_int(78) }, - { be_const_key(SPI_MOSI, 233), be_const_int(22) }, - { be_const_key(I2S_OUT_DATA, -1), be_const_int(243) }, - { be_const_key(HPMA_TX, 108), be_const_int(135) }, - { be_const_key(TASMOTACLIENT_RST_INV, 156), be_const_int(133) }, - { be_const_key(IEM3000_RX, -1), be_const_int(180) }, - { be_const_key(BS814_DAT, 196), be_const_int(215) }, - { be_const_key(OUTPUT_LO, -1), be_const_int(121) }, - { be_const_key(SSD1351_CS, 236), be_const_int(204) }, - { be_const_key(TM1637DIO, -1), be_const_int(223) }, - { be_const_key(INTERRUPT, 240), be_const_int(249) }, - { be_const_key(PN532_RXD, 195), be_const_int(90) }, - { be_const_key(SM2135_CLK, -1), be_const_int(126) }, - { be_const_key(DI, -1), be_const_int(94) }, - { be_const_key(TM1638CLK, 87), be_const_int(64) }, - { be_const_key(DSB_OUT, 65), be_const_int(42) }, - { be_const_key(I2S_OUT_SLCT, -1), be_const_int(245) }, - { be_const_key(RDM6300_RX, -1), be_const_int(113) }, - { be_const_key(TUYA_RX, 59), be_const_int(72) }, - { be_const_key(WIEGAND_D1, -1), be_const_int(217) }, - { be_const_key(EPAPER42_CS, 133), be_const_int(203) }, - { be_const_key(INPUT_PULLDOWN, -1), be_const_int(9) }, - { be_const_key(A4988_DIR, 75), be_const_int(116) }, - { be_const_key(NEOPOOL_RX, -1), be_const_int(219) }, - { be_const_key(PZEM016_RX, 36), be_const_int(48) }, - { be_const_key(digital_write, 225), be_const_func(gp_digital_write) }, - { be_const_key(NRG_CF1, -1), be_const_int(83) }, - { be_const_key(FTC532, -1), be_const_int(195) }, - { be_const_key(DDS2382_TX, -1), be_const_int(122) }, - { be_const_key(WEBCAM_RESET, 230), be_const_int(155) }, - { be_const_key(TELEINFO_ENABLE, 42), be_const_int(177) }, - { be_const_key(IRRECV, 89), be_const_int(34) }, - { be_const_key(SDM120_RX, 148), be_const_int(61) }, - { be_const_key(PMS5003_TX, -1), be_const_int(52) }, - { be_const_key(CC1101_GDO2, -1), be_const_int(143) }, - { be_const_key(HPMA_RX, 238), be_const_int(134) }, - { be_const_key(MAX7219CS, -1), be_const_int(233) }, - { be_const_key(CSE7766_RX, 46), be_const_int(97) }, - { be_const_key(RISING, 103), be_const_int(1) }, - { be_const_key(SPI_MISO, -1), be_const_int(21) }, - { be_const_key(RFRECV, -1), be_const_int(36) }, - { be_const_key(SHELLY_DIMMER_RST_INV, 228), be_const_int(190) }, - { be_const_key(TASMOTACLIENT_RST, -1), be_const_int(132) }, - { be_const_key(PULLDOWN, 189), be_const_int(8) }, - { be_const_key(SSPI_CS, -1), be_const_int(29) }, - { be_const_key(TUYA_TX, -1), be_const_int(71) }, - { be_const_key(LED1_INV, 0), be_const_int(10) }, - { be_const_key(digital_read, -1), be_const_func(gp_digital_read) }, - { be_const_key(CSE7766_TX, 215), be_const_int(96) }, - { be_const_key(DCKI, -1), be_const_int(95) }, - { be_const_key(ILI9341_CS, -1), be_const_int(199) }, - { be_const_key(pin_used, -1), be_const_func(gp_pin_used) }, - { be_const_key(ADC_RANGE, 237), be_const_int(152) }, - { be_const_key(PZEM0XX_TX, 31), be_const_int(46) }, - { be_const_key(ROT1A_NP, -1), be_const_int(211) }, - { be_const_key(ROT1A, 202), be_const_int(102) }, - { be_const_key(HALLEFFECT, -1), be_const_int(237) }, - { be_const_key(OPEN_DRAIN, -1), be_const_int(16) }, - { be_const_key(TM1638DIO, 220), be_const_int(65) }, - { be_const_key(IEM3000_TX, -1), be_const_int(179) }, - { be_const_key(MAX7219DIN, 118), be_const_int(232) }, - { be_const_key(A4988_ENA, -1), be_const_int(118) }, - { be_const_key(MHZ_TXD, 23), be_const_int(44) }, - { be_const_key(WEBCAM_PWDN, -1), be_const_int(154) }, - { be_const_key(SDS0X1_RX, -1), be_const_int(55) }, - { be_const_key(SPI_CS, -1), be_const_int(24) }, - { be_const_key(BS814_CLK, -1), be_const_int(214) }, - { be_const_key(CSE7761_RX, -1), be_const_int(229) }, - { be_const_key(ADC_JOY, -1), be_const_int(104) }, - { be_const_key(OPTION_A, 171), be_const_int(194) }, - { be_const_key(RFSEND, -1), be_const_int(35) }, - { be_const_key(HRE_DATA, 135), be_const_int(107) }, - { be_const_key(BOILER_OT_TX, 221), be_const_int(167) }, - { be_const_key(ETH_PHY_MDC, 30), be_const_int(174) }, - { be_const_key(LED1, 11), be_const_int(9) }, - { be_const_key(DDSU666_RX, 64), be_const_int(125) }, - { be_const_key(MAX31855CLK, -1), be_const_int(79) }, - { be_const_key(RA8876_CS, -1), be_const_int(205) }, - { be_const_key(AZ_TXD, -1), be_const_int(76) }, - { be_const_key(SBR_TX, -1), be_const_int(56) }, - { be_const_key(REL1_INV, 212), be_const_int(8) }, - { be_const_key(CC1101_GDO0, -1), be_const_int(142) }, - { be_const_key(AZ_RXD, 149), be_const_int(77) }, - { be_const_key(EPAPER29_CS, 229), be_const_int(202) }, - { be_const_key(P9813_DAT, 177), be_const_int(193) }, - { be_const_key(PWM1, -1), be_const_int(13) }, - { be_const_key(INPUT, -1), be_const_int(239) }, - { be_const_key(PN532_TXD, -1), be_const_int(89) }, - { be_const_key(I2S_IN_DATA, -1), be_const_int(246) }, - { be_const_key(SOLAXX1_TX, -1), be_const_int(109) }, - { be_const_key(LEDLNK_INV, 208), be_const_int(18) }, - { be_const_key(ADC_LIGHT, -1), be_const_int(149) }, - { be_const_key(SDS0X1_TX, 92), be_const_int(54) }, - { be_const_key(ADC_PH, 1), be_const_int(213) }, - { be_const_key(WEBCAM_XCLK, 267), be_const_int(156) }, - { be_const_key(ADC_BUTTON_INV, -1), be_const_int(151) }, - { be_const_key(IBEACON_TX, 13), be_const_int(114) }, - { be_const_key(SWT1_NP, -1), be_const_int(6) }, - { be_const_key(SDCARD_CS, 62), be_const_int(210) }, - { be_const_key(KEY1_PD, -1), be_const_int(240) }, - { be_const_key(BUZZER, 69), be_const_int(15) }, - { be_const_key(SM2135_DAT, -1), be_const_int(127) }, - { be_const_key(CNTR1_NP, -1), be_const_int(12) }, - { be_const_key(NRF24_CS, 49), be_const_int(197) }, - { be_const_key(DYP_RX, -1), be_const_int(182) }, - { be_const_key(IRSEND, -1), be_const_int(33) }, - { be_const_key(WEBCAM_SIOC, 258), be_const_int(158) }, - { be_const_key(MAX7219CLK, 56), be_const_int(231) }, - { be_const_key(WIEGAND_D0, 165), be_const_int(216) }, - { be_const_key(ZIGBEE_RX, -1), be_const_int(112) }, - { be_const_key(CHANGE, 33), be_const_int(4) }, - { be_const_key(AS608_RX, -1), be_const_int(188) }, - { be_const_key(TCP_RX, -1), be_const_int(172) }, - { be_const_key(PZEM017_RX, -1), be_const_int(49) }, - { be_const_key(NRF24_DC, -1), be_const_int(198) }, - { be_const_key(BACKLIGHT, 35), be_const_int(31) }, - { be_const_key(SSPI_MOSI, -1), be_const_int(27) }, - { be_const_key(MAX31855DO, -1), be_const_int(80) }, - { be_const_key(LE01MR_RX, -1), be_const_int(140) }, - { be_const_key(I2S_IN_SLCT, -1), be_const_int(248) }, - { be_const_key(ETH_PHY_POWER, -1), be_const_int(173) }, - { be_const_key(ADE7953_IRQ, 29), be_const_int(108) }, - { be_const_key(SSPI_MISO, -1), be_const_int(26) }, - { be_const_key(WINDMETER_SPEED, 79), be_const_int(168) }, - { be_const_key(IBEACON_RX, -1), be_const_int(115) }, - { be_const_key(TX2X_TXD_BLACK, 8), be_const_int(70) }, - { be_const_key(TM1637CLK, 102), be_const_int(222) }, - { be_const_key(KEY1_INV, -1), be_const_int(3) }, - { be_const_key(BOILER_OT_RX, -1), be_const_int(166) }, - { be_const_key(DDSU666_TX, -1), be_const_int(124) }, - { be_const_key(WEBCAM_DATA, -1), be_const_int(159) }, - { be_const_key(DDS2382_RX, -1), be_const_int(123) }, - { be_const_key(EXS_ENABLE, 53), be_const_int(129) }, - { be_const_key(AS608_TX, -1), be_const_int(187) }, - { be_const_key(OLED_RESET, 100), be_const_int(32) }, - { be_const_key(AS3935, -1), be_const_int(146) }, - { be_const_key(LMT01, -1), be_const_int(178) }, - { be_const_key(ADC_INPUT, -1), be_const_int(147) }, - { be_const_key(SDM72_TX, 235), be_const_int(220) }, - { be_const_key(ADC_TEMP, -1), be_const_int(148) }, - { be_const_key(LEDLNK, 7), be_const_int(17) }, - { be_const_key(DAC, -1), be_const_int(-1) }, - { be_const_key(SAIR_RX, -1), be_const_int(51) }, - { be_const_key(SOLAXX1_RX, -1), be_const_int(110) }, - { be_const_key(WEBCAM_PCLK, -1), be_const_int(162) }, - { be_const_key(KEY1_NP, 14), be_const_int(2) }, - { be_const_key(TFMINIPLUS_TX, -1), be_const_int(234) }, - { be_const_key(SR04_TRIG, -1), be_const_int(58) }, - { be_const_key(A4988_STP, 182), be_const_int(117) }, - { be_const_key(TASMOTACLIENT_TXD, -1), be_const_int(130) }, - { be_const_key(HX711_DAT, 207), be_const_int(69) }, - { be_const_key(HM10_RX, -1), be_const_int(138) }, - { be_const_key(ARIRFSEL, 249), be_const_int(99) }, - { be_const_key(MIEL_HVAC_TX, 141), be_const_int(183) }, - { be_const_key(NRG_SEL, -1), be_const_int(81) }, - { be_const_key(DEEPSLEEP, 132), be_const_int(128) }, - { be_const_key(CSE7761_TX, -1), be_const_int(228) }, - { be_const_key(WS2812, 18), be_const_int(43) }, - { be_const_key(WE517_RX, 188), be_const_int(186) }, - { be_const_key(PROJECTOR_CTRL_TX, -1), be_const_int(224) }, - { be_const_key(SI7021, 242), be_const_int(39) }, - { be_const_key(SM16716_SEL, -1), be_const_int(93) }, - { be_const_key(KEY1_INV_PD, -1), be_const_int(241) }, - { be_const_key(SPI_CLK, -1), be_const_int(23) }, - { be_const_key(ZEROCROSS, -1), be_const_int(236) }, - { be_const_key(OUTPUT_OPEN_DRAIN, -1), be_const_int(18) }, - { be_const_key(REL1, -1), be_const_int(7) }, - { be_const_key(NRG_SEL_INV, -1), be_const_int(82) }, - { be_const_key(RC522_CS, -1), be_const_int(196) }, - { be_const_key(ADC_BUTTON, -1), be_const_int(150) }, - { be_const_key(SAIR_TX, -1), be_const_int(50) }, - { be_const_key(OUTPUT_HI, 105), be_const_int(120) }, - { be_const_key(LE01MR_TX, -1), be_const_int(141) }, - { be_const_key(ILI9341_DC, 22), be_const_int(200) }, - { be_const_key(SR04_ECHO, 263), be_const_int(59) }, - { be_const_key(HJL_CF, 241), be_const_int(85) }, - { be_const_key(I2S_OUT_CLK, -1), be_const_int(244) }, - { be_const_key(MIEL_HVAC_RX, 12), be_const_int(184) }, - { be_const_key(GPS_RX, 247), be_const_int(136) }, - { be_const_key(pin_mode, -1), be_const_func(gp_pin_mode) }, - { be_const_key(P9813_CLK, -1), be_const_int(192) }, - { be_const_key(ZIGBEE_TX, 262), be_const_int(111) }, - { be_const_key(dac_voltage, -1), be_const_func(gp_dac_voltage) }, - { be_const_key(INPUT_PULLUP, -1), be_const_int(5) }, - { be_const_key(SDM120_TX, -1), be_const_int(60) }, - { be_const_key(HRXL_RX, -1), be_const_int(144) }, { be_const_key(pin, -1), be_const_func(gp_pin) }, - { be_const_key(HRE_CLOCK, -1), be_const_int(106) }, - { be_const_key(DHT11, -1), be_const_int(37) }, - { be_const_key(PWM1_INV, 109), be_const_int(14) }, - { be_const_key(A4988_MS1, 94), be_const_int(119) }, - { be_const_key(SBR_RX, -1), be_const_int(57) }, - { be_const_key(SWT1_PD, -1), be_const_int(242) }, - { be_const_key(FALLING, 5), be_const_int(2) }, - { be_const_key(PULLUP, -1), be_const_int(4) }, - { be_const_key(TELEINFO_RX, -1), be_const_int(176) }, - { be_const_key(MCP39F5_RX, -1), be_const_int(87) }, - { be_const_key(ETH_PHY_MDIO, -1), be_const_int(175) }, - { be_const_key(BL0940_RX, -1), be_const_int(170) }, - { be_const_key(NEOPOOL_TX, 248), be_const_int(218) }, - { be_const_key(VL53L0X_XSHUT1, -1), be_const_int(230) }, - { be_const_key(MCP39F5_RST, 203), be_const_int(88) }, - { be_const_key(HLW_CF, 231), be_const_int(84) }, - { be_const_key(WEBCAM_PSRCS, -1), be_const_int(165) }, - { be_const_key(SSD1331_DC, -1), be_const_int(209) }, - { be_const_key(ST7789_CS, -1), be_const_int(206) }, - { be_const_key(SDM72_RX, 66), be_const_int(221) }, - { be_const_key(SSD1351_DC, -1), be_const_int(226) }, - { be_const_key(SSPI_SCLK, -1), be_const_int(28) }, - { be_const_key(I2S_IN_CLK, -1), be_const_int(247) }, - { be_const_key(SM16716_DAT, -1), be_const_int(92) }, - { be_const_key(I2C_SDA, -1), be_const_int(20) }, - { be_const_key(PZEM004_RX, -1), be_const_int(47) }, - { be_const_key(TCP_TX, -1), be_const_int(171) }, - { be_const_key(SDM630_RX, -1), be_const_int(63) }, - { be_const_key(SWT1, -1), be_const_int(5) }, - { be_const_key(ROT1B, -1), be_const_int(103) }, - { be_const_key(I2C_SCL, -1), be_const_int(19) }, - { be_const_key(RXD, -1), be_const_int(101) }, - { be_const_key(DSB, 261), be_const_int(41) }, - { be_const_key(MCP39F5_TX, 252), be_const_int(86) }, - { be_const_key(HIGH, 266), be_const_int(1) }, - { be_const_key(RC522_RST, -1), be_const_int(191) }, - { be_const_key(SSPI_DC, -1), be_const_int(30) }, - { be_const_key(LOW, -1), be_const_int(0) }, - { be_const_key(BUZZER_INV, -1), be_const_int(16) }, - { be_const_key(XPT2046_CS, -1), be_const_int(227) }, - { be_const_key(WEBCAM_HSD, -1), be_const_int(164) }, - { be_const_key(TM1638STB, -1), be_const_int(66) }, - { be_const_key(PMS5003_RX, -1), be_const_int(53) }, - { be_const_key(SPI_DC, -1), be_const_int(25) }, - { be_const_key(MHZ_RXD, -1), be_const_int(45) }, - { be_const_key(ILI9488_CS, 119), be_const_int(201) }, - { be_const_key(HX711_SCK, 57), be_const_int(68) }, - { be_const_key(SDM630_TX, 227), be_const_int(62) }, - { be_const_key(SHELLY_DIMMER_BOOT0, -1), be_const_int(189) }, - { be_const_key(EPD_DATA, -1), be_const_int(238) }, - { be_const_key(WE517_TX, -1), be_const_int(185) }, - { be_const_key(TXD, 234), be_const_int(100) }, - { be_const_key(OUTPUT, -1), be_const_int(2) }, - { be_const_key(SSPI_MAX31865_CS1, -1), be_const_int(105) }, - { be_const_key(WEBCAM_PSCLK, -1), be_const_int(163) }, - { be_const_key(WEBCAM_SIOD, -1), be_const_int(157) }, - { be_const_key(MGC3130_RESET, -1), be_const_int(74) }, - { be_const_key(KEY1, -1), be_const_int(1) }, - { be_const_key(MGC3130_XFER, -1), be_const_int(73) }, - { be_const_key(ST7789_DC, 245), be_const_int(207) }, - { be_const_key(GPS_TX, 123), be_const_int(137) }, - { be_const_key(ADC_CT_POWER, 58), be_const_int(153) }, + { be_const_key(member, -1), be_const_func(gp_member) }, + { be_const_key(digital_write, -1), be_const_func(gp_digital_write) }, + { be_const_key(pin_mode, 1), be_const_func(gp_pin_mode) }, + { be_const_key(pin_used, -1), be_const_func(gp_pin_used) }, + { be_const_key(dac_voltage, -1), be_const_func(gp_dac_voltage) }, + { be_const_key(digital_read, 3), be_const_func(gp_digital_read) }, }; static be_define_const_map( m_libgpio_map, - 270 + 7 ); static be_define_const_module( diff --git a/lib/libesp32/Berry/generate/be_fixed_persist.h b/lib/libesp32/Berry/generate/be_fixed_persist.h deleted file mode 100644 index 4cea6af1d..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_persist.h +++ /dev/null @@ -1,17 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(m_libpersist_map) { - { be_const_key(init, -1), be_const_closure(_anonymous__closure) }, -}; - -static be_define_const_map( - m_libpersist_map, - 1 -); - -static be_define_const_module( - m_libpersist, - "persist" -); - -BE_EXPORT_VARIABLE be_define_const_native_module(persist); diff --git a/lib/libesp32/Berry/generate/be_fixed_tasmota_path.h b/lib/libesp32/Berry/generate/be_fixed_tasmota_path.h index 4689021c4..90ae43054 100644 --- a/lib/libesp32/Berry/generate/be_fixed_tasmota_path.h +++ b/lib/libesp32/Berry/generate/be_fixed_tasmota_path.h @@ -1,13 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(m_libpath_map) { - { be_const_key(exists, -1), be_const_func(m_path_exists) }, - { be_const_key(last_modified, 0), be_const_func(m_path_last_modified) }, + { be_const_key(listdir, -1), be_const_func(m_path_listdir) }, + { be_const_key(last_modified, 2), be_const_func(m_path_last_modified) }, + { be_const_key(exists, 3), be_const_func(m_path_exists) }, + { be_const_key(remove, -1), be_const_func(m_path_remove) }, }; static be_define_const_map( m_libpath_map, - 2 + 4 ); static be_define_const_module( diff --git a/lib/libesp32/Berry/src/be_class.c b/lib/libesp32/Berry/src/be_class.c index a6b94a1cf..c8c826371 100644 --- a/lib/libesp32/Berry/src/be_class.c +++ b/lib/libesp32/Berry/src/be_class.c @@ -217,18 +217,18 @@ static binstance* newobject(bvm *vm, bclass *c) /* Instanciate new instance from stack with argc parameters */ /* Pushes the constructor on the stack to be executed if a construtor is found */ /* Returns true if a constructor is found */ -bbool be_class_newobj(bvm *vm, bclass *c, bvalue *reg, int argc, int mode) +bbool be_class_newobj(bvm *vm, bclass *c, int32_t pos, int argc, int mode) { bvalue init; - size_t pos = reg - vm->reg; binstance *obj = newobject(vm, c); /* create empty object hierarchy from class hierarchy */ - reg = vm->reg + pos - mode; /* the stack may have changed, mode=1 when class is instanciated from module #104 */ - var_setinstance(reg, obj); - var_setinstance(reg + mode, obj); /* copy to reg and reg+1 if mode==1 */ + // reg = vm->reg + pos - mode; /* the stack may have changed, mode=1 when class is instanciated from module #104 */ + var_setinstance(vm->reg + pos, obj); + var_setinstance(vm->reg + pos - mode, obj); /* copy to reg and reg+1 if mode==1 */ /* find constructor */ obj = instance_member(vm, obj, str_literal(vm, "init"), &init); if (obj && var_type(&init) != MT_VARIABLE) { /* copy argv */ + bvalue * reg; for (reg = vm->reg + pos + 1; argc > 0; --argc) { reg[argc] = reg[argc - 2]; } diff --git a/lib/libesp32/Berry/src/be_class.h b/lib/libesp32/Berry/src/be_class.h index 6a114f53b..8bc0a6af7 100644 --- a/lib/libesp32/Berry/src/be_class.h +++ b/lib/libesp32/Berry/src/be_class.h @@ -58,7 +58,7 @@ void be_prim_method_bind(bvm *vm, bclass *c, bstring *name, bntvfunc f); void be_closure_method_bind(bvm *vm, bclass *c, bstring *name, bclosure *cl); int be_class_closure_count(bclass *c); void be_class_upvalue_init(bvm *vm, bclass *c); -bbool be_class_newobj(bvm *vm, bclass *c, bvalue *argv, int argc, int mode); +bbool be_class_newobj(bvm *vm, bclass *c, int32_t pos, int argc, int mode); int be_instance_member_simple(bvm *vm, binstance *obj, bstring *name, bvalue *dst); int be_instance_member(bvm *vm, binstance *obj, bstring *name, bvalue *dst); int be_class_member(bvm *vm, bclass *obj, bstring *name, bvalue *dst); diff --git a/lib/libesp32/Berry/src/be_solidifylib.c b/lib/libesp32/Berry/src/be_solidifylib.c index 7ed14c601..d72e3aff5 100644 --- a/lib/libesp32/Berry/src/be_solidifylib.c +++ b/lib/libesp32/Berry/src/be_solidifylib.c @@ -243,7 +243,9 @@ static void m_solidify_proto(bvm *vm, bproto *pr, const char * func_name, int bu } logfmt("%*s(be_nested_const_str(\"%s\", %i, %i)),\n", indent, "", str(pr->name), be_strhash(pr->name), str_len(pr->name)); - logfmt("%*s(be_nested_const_str(\"%s\", %i, %i)),\n", indent, "", func_source, be_strhash(pr->source), str_len(pr->source)); + // logfmt("%*s(be_nested_const_str(\"%s\", %i, %i)),\n", indent, "", func_source, be_strhash(pr->source), str_len(pr->source)); + // hard-code source as "input" for solidified + logfmt("%*s((bstring*) &be_const_str_input),\n", indent, ""); logfmt("%*s( &(const binstruction[%2d]) { /* code */\n", indent, "", pr->codesize); for (int pc = 0; pc < pr->codesize; pc++) { @@ -388,7 +390,7 @@ static void m_solidify_module(bvm *vm, bmodule *ml, int builtins) logfmt(" NULL,\n"); } logfmt(");\n"); - logfmt("BE_EXPORT_VARIABLE be_define_const_native_module(%s, NULL);\n", module_name); + logfmt("BE_EXPORT_VARIABLE be_define_const_native_module(%s);\n", module_name); logfmt("/********************************************************************/\n"); } diff --git a/lib/libesp32/Berry/src/be_vm.c b/lib/libesp32/Berry/src/be_vm.c index 83d1d5cfb..ac2ede585 100644 --- a/lib/libesp32/Berry/src/be_vm.c +++ b/lib/libesp32/Berry/src/be_vm.c @@ -142,7 +142,7 @@ _vm->cf->status = PRIM_FUNC; \ } -static void prep_closure(bvm *vm, bvalue *reg, int argc, int mode); +static void prep_closure(bvm *vm, int32_t pos, int argc, int mode); static void attribute_error(bvm *vm, const char *t, bvalue *b, bvalue *c) { @@ -1062,10 +1062,11 @@ newframe: /* a new call frame */ ++var, --argc, mode = 1; goto recall; case BE_CLASS: - if (be_class_newobj(vm, var_toobj(var), var, ++argc, mode)) { /* instanciate object and find constructor */ + if (be_class_newobj(vm, var_toobj(var), var - reg, ++argc, mode)) { /* instanciate object and find constructor */ reg = vm->reg + mode; /* constructor found */ mode = 0; var = RA() + 1; /* to next register */ + reg = vm->reg; goto recall; /* call constructor */ } break; @@ -1101,7 +1102,7 @@ newframe: /* a new call frame */ // *(reg + proto->argc - 1) = *(vm->top-2); /* change the vararg argument to now contain the list instance */ // vm->top = top_save; /* restore top of stack pointer */ // } - prep_closure(vm, var, argc, mode); + prep_closure(vm, var - reg, argc, mode); reg = vm->reg; /* `reg` has changed, now new base register */ goto newframe; /* continue execution of the closure */ } @@ -1163,14 +1164,13 @@ newframe: /* a new call frame */ } } -static void prep_closure(bvm *vm, bvalue *reg, int argc, int mode) +static void prep_closure(bvm *vm, int32_t pos, int argc, int mode) { bvalue *v, *end; - bproto *proto = var2cl(reg)->proto; - push_closure(vm, reg, proto->nstack, mode); - v = vm->reg + argc; + bproto *proto = var2cl(vm->reg + pos)->proto; + push_closure(vm, vm->reg + pos, proto->nstack, mode); end = vm->reg + proto->argc; - for (; v <= end; ++v) { + for (v = vm->reg + argc; v <= end; ++v) { var_setnil(v); } if (proto->varg) { /* there are vararg at the last argument, build the list */ @@ -1189,7 +1189,7 @@ static void prep_closure(bvm *vm, bvalue *reg, int argc, int mode) } } -static void do_closure(bvm *vm, bvalue *reg, int argc) +static void do_closure(bvm *vm, int32_t pos, int argc) { // bvalue *v, *end; // bproto *proto = var2cl(reg)->proto; @@ -1199,31 +1199,31 @@ static void do_closure(bvm *vm, bvalue *reg, int argc) // for (; v <= end; ++v) { // var_setnil(v); // } - prep_closure(vm, reg, argc, 0); + prep_closure(vm, pos, argc, 0); vm_exec(vm); } -static void do_ntvclos(bvm *vm, bvalue *reg, int argc) +static void do_ntvclos(bvm *vm, int32_t pos, int argc) { - bntvclos *f = var_toobj(reg); - push_native(vm, reg, argc, 0); + bntvclos *f = var_toobj(vm->reg + pos); + push_native(vm, vm->reg + pos, argc, 0); f->f(vm); /* call C primitive function */ ret_native(vm); } -static void do_ntvfunc(bvm *vm, bvalue *reg, int argc) +static void do_ntvfunc(bvm *vm, int32_t pos, int argc) { - bntvfunc f = var_tontvfunc(reg); - push_native(vm, reg, argc, 0); + bntvfunc f = var_tontvfunc(vm->reg + pos); + push_native(vm, vm->reg + pos, argc, 0); f(vm); /* call C primitive function */ ret_native(vm); } -static void do_class(bvm *vm, bvalue *reg, int argc) +static void do_class(bvm *vm, int32_t pos, int argc) { - if (be_class_newobj(vm, var_toobj(reg), reg, ++argc, 0)) { + if (be_class_newobj(vm, var_toobj(vm->reg + pos), pos, ++argc, 0)) { be_incrtop(vm); - be_dofunc(vm, reg + 1, argc); + be_dofunc(vm, vm->reg + pos + 1, argc); be_stackpop(vm, 1); } } @@ -1232,11 +1232,12 @@ void be_dofunc(bvm *vm, bvalue *v, int argc) { be_assert(vm->reg <= v && v < vm->stacktop); be_assert(vm->stack <= vm->reg && vm->reg < vm->stacktop); + int32_t pos = v - vm->reg; switch (var_type(v)) { - case BE_CLASS: do_class(vm, v, argc); break; - case BE_CLOSURE: do_closure(vm, v, argc); break; - case BE_NTVCLOS: do_ntvclos(vm, v, argc); break; - case BE_NTVFUNC: do_ntvfunc(vm, v, argc); break; + case BE_CLASS: do_class(vm, pos, argc); break; + case BE_CLOSURE: do_closure(vm, pos, argc); break; + case BE_NTVCLOS: do_ntvclos(vm, pos, argc); break; + case BE_NTVFUNC: do_ntvfunc(vm, pos, argc); break; default: call_error(vm, v); } } diff --git a/lib/libesp32/Zip-readonly-FS/library.json b/lib/libesp32/Zip-readonly-FS/library.json new file mode 100644 index 000000000..a8c83f81b --- /dev/null +++ b/lib/libesp32/Zip-readonly-FS/library.json @@ -0,0 +1,14 @@ +{ + "name": "Zip-readonly-FS", + "version": "1.0", + "description": "Simple filesystem to open an uncompressed ZIP file and read-only", + "license": "MIT", + "homepage": "https://github.com/arendst/Tasmota", + "frameworks": "*", + "platforms": "*", + "authors": + { + "name": "Stephan Hadinger", + "maintainer": true + } + } diff --git a/lib/libesp32/Zip-readonly-FS/src/ZipReadFS.cpp b/lib/libesp32/Zip-readonly-FS/src/ZipReadFS.cpp new file mode 100644 index 000000000..a7282c128 --- /dev/null +++ b/lib/libesp32/Zip-readonly-FS/src/ZipReadFS.cpp @@ -0,0 +1,463 @@ +/* + ZipReadFS.cpp - FS overlay to read uncompressed ZIP files + + Copyright (C) 2021 Stephan Hadinger + + 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 ESP32 + +#include "ZipReadFS.h" + +extern FS *zip_ufsp; + +#define USE_TASMOTA_LOG + +#ifdef USE_TASMOTA_LOG +extern void AddLog(uint32_t loglevel, PGM_P formatP, ...); +enum LoggingLevels {LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE}; +#endif + +/******************************************************************** +** Convert DOS time to time_t +** from: https://opensource.apple.com/source/gcc3/gcc3-1161/fastjar/dostime.c +********************************************************************/ +time_t dos2unixtime(uint32_t dostime) + /* Return the Unix time_t value (GMT/UTC time) for the DOS format (local) + * time dostime, where dostime is a four byte value (date in most + * significant word, time in least significant word), see dostime() + * function. + */ +{ + struct tm *t; /* argument for mktime() */ + time_t clock = time(NULL); + + t = localtime(&clock); + t->tm_isdst = -1; /* let mktime() determine if DST is in effect */ + /* Convert DOS time to UNIX time_t format */ + t->tm_sec = (((int)dostime) << 1) & 0x3e; + t->tm_min = (((int)dostime) >> 5) & 0x3f; + t->tm_hour = (((int)dostime) >> 11) & 0x1f; + t->tm_mday = (int)(dostime >> 16) & 0x1f; + t->tm_mon = ((int)(dostime >> 21) & 0x0f) - 1; + t->tm_year = ((int)(dostime >> 25) & 0x7f) + 80; + + return mktime(t); +} + +/******************************************************************** +** Zip file parser +** +********************************************************************/ +template class LList; + +struct ZipHeader { + uint16_t padding; // need to offset by 16 bites so that 32 bits below are aligned to 4 bytes boundaries + uint16_t signature1; + uint16_t signature2; + uint16_t version; + uint16_t gen_purpose_flags; + uint16_t compression; + uint16_t last_mod_time; + uint16_t last_mod_date; + uint32_t crc32; + uint32_t size_compressed; + uint32_t size_uncompressed; + uint16_t filename_size; + uint16_t extra_field_size; +}; + +class ZipEntry { +public: + ZipEntry() : + file_name(), file_start(0), file_len(0), last_mod(0) + {}; + // ZipEntry(const char * fname, uint32_t start, uint32_t len) : + // file_name(fname), file_start(start), file_len(len) + // {}; + + String file_name; // name of the file as used by Berry, with all directories removed + uint32_t file_start; // offset in bytes where this file starts in the archive + uint32_t file_len; // length in bytes of the file + time_t last_mod; +}; + +class ZipArchive { +public: + ZipArchive(File * _f) : + f(_f), entries() + {}; + ~ZipArchive(void) { + f->close(); // TODO + } + + bool parse(void); + + File * f; + LList entries; +}; + +class ZipEntryFileImpl : public FileImpl { +public: + ZipEntryFileImpl(File * f) : zip(f) { } + +protected: + ZipArchive zip; +}; + +/******************************************************************** +** Neutral file overlay +** +********************************************************************/ + +class ZipReadFileImpl; +typedef std::shared_ptr ZipReadFileImplPtr; + +class ZipReadFileImpl : public FileImpl { +public: + ZipReadFileImpl(File f) { _f = f; } + virtual ~ZipReadFileImpl() {} + size_t write(const uint8_t *buf, size_t size) { + return _f.write(buf, size); + } + size_t read(uint8_t* buf, size_t size) { + return _f.read(buf, size); + } + void flush() { + _f.flush(); + } + bool seek(uint32_t pos, SeekMode mode) { + return _f.seek(pos, mode); + } + size_t position() const { + return _f.position(); + } + size_t size() const { + return _f.size(); + } + void close() { + _f.close(); + } + time_t getLastWrite() { + return _f.getLastWrite(); + } + const char* path() const { + return _f.path(); + } + const char* name() const { + return _f.name(); + } + boolean isDirectory(void) { + return _f.isDirectory(); + } + FileImplPtr openNextFile(const char* mode) { + return nullptr; // TODO + } + void rewindDirectory(void) { + return _f.rewindDirectory(); + } + operator bool() { + return (bool) _f; + } + +protected: + File _f; +}; + +/******************************************************************** +** Subfile implementation +** +** Takes a `File` object of the ZIP archive +** First byte in archive and len +********************************************************************/ + +class ZipItemImpl; +typedef std::shared_ptr ZipItemImplPtr; + +class ZipItemImpl : public FileImpl { +public: + + ZipItemImpl(File f, uint32_t first_byte, uint32_t len, time_t last_mod) { + _f = f; + _first_byte = first_byte; + _len = len; + _seek = 0; + _last_mod = last_mod; + } + + virtual ~ZipItemImpl() {} + + size_t write(const uint8_t *buf, size_t size) { + return 0; // not accepted + } + + size_t read(uint8_t* buf, size_t size) { + // AddLog(LOG_LEVEL_DEBUG, "ZIP: read bytes=%i seek=%i len=%i", size, _seek, _len); + if (_seek < _len) { + if (size + _seek > _len) { + size = _len - _seek; // always > 0 because of guarding test + } + bool bret = _f.seek(_first_byte + _seek, SeekSet); + // AddLog(LOG_LEVEL_DEBUG, "ZIP: seek_ret ret=%i zip_seek=%i", bret, _first_byte + _seek); + if (bret) { + size_t ret = _f.read(buf, size); + // AddLog(LOG_LEVEL_DEBUG, "ZIP: read done ret=%i zip_seek=%i", ret, size); + _seek += ret; + if (_seek > _len) { _seek = _len; } + return ret; + } + } + return 0; // abort + } + + void flush() { + // do nothing + } + + bool seek(uint32_t pos, SeekMode mode) { + AddLog(LOG_LEVEL_DEBUG, "ZIP: seek pos=%i mode=%i", pos, mode); + if (SeekSet == mode) { + if (pos <= _len) { + _seek = pos; + return true; + } + } else if (SeekCur == mode) { + if (_seek + pos <= _len) { + _seek += pos; + return true; + } + } else if (SeekEnd == mode) { + _seek = _len; + return true; + } + return false; + } + + size_t position() const { + AddLog(LOG_LEVEL_DEBUG, "ZIP: position return=%i", _seek); + return _seek; + } + + size_t size() const { + AddLog(LOG_LEVEL_DEBUG, "ZIP: size return=%i", _len); + return _len; + } + + void close() { + // do nothing + } + time_t getLastWrite() { + return _last_mod; + } + + const char* path() const { + return _f.path(); // TODO + } + + const char* name() const { + return _f.name(); // TODO + } + + boolean isDirectory(void) { + return false; // no directory allowed + } + + FileImplPtr openNextFile(const char* mode) { + return nullptr; // TODO + } + + void rewindDirectory(void) { + // ignore + } + + operator bool() { + return true; + } + +protected: + File _f; + uint32_t _first_byte; + uint32_t _len; + uint32_t _seek; + time_t _last_mod; +}; + +/******************************************************************** +** Zip file parser +** Implementation +********************************************************************/ + +// parse the Zip archive to extract all entries +// returns true if ok +bool ZipArchive::parse(void) { + ZipHeader header; + f->seek(0); // start of file + int32_t offset = 0; + const size_t zip_header_size = sizeof(header) - sizeof(header.padding); + + while (1) { + f->seek(offset); + int32_t bytes_read = f->read(sizeof(header.padding) + (uint8_t*) &header, zip_header_size); + if (bytes_read != zip_header_size) { + break; + } + // AddLog(LOG_LEVEL_DEBUG, "ZIG: header version=%i flags=%p compress=%i mod_time=%i mod_date=%i size=%i-%i fnamesize=%i", + // header.version, header.gen_purpose_flags, header.compression, header.last_mod_time, header.last_mod_date, + // header.size_compressed, header.size_uncompressed, header.filename_size); + // Check signature + if (header.signature1 != 0x4B50) { + AddLog(LOG_LEVEL_INFO, "ZIP: invalid zip signature"); + return false; + } + if (header.signature2 != 0x0403) { + AddLog(LOG_LEVEL_DEBUG, "ZIP: end of file section"); + break; + } + // Check no extra field + if (header.gen_purpose_flags != 0x0000) { + AddLog(LOG_LEVEL_INFO, "ZIP: invalid general purpose flags 0x%04X", header.gen_purpose_flags); + return false; + } + // Check no compression + if (header.compression != 0x0000) { + AddLog(LOG_LEVEL_INFO, "ZIP: compressed files unsupported 0x%04X", header.compression); + return false; + } + // Check size is the same for compressed and uncompressed + if (header.size_compressed != header.size_uncompressed) { + AddLog(LOG_LEVEL_INFO, "ZIP: compressed size differs from uncompressed %i - %i", header.size_compressed, header.size_uncompressed); + return false; + } + // Check file name size + if (header.filename_size > 64) { + AddLog(LOG_LEVEL_INFO, "ZIP: entry filename size too long %i", header.filename_size); + return false; + } + + // read full filename + char fname[header.filename_size + 1]; + if (f->read((uint8_t*) &fname[0], header.filename_size) != header.filename_size) { + return false; + } + fname[header.filename_size] = 0; // add NULL termination + + // Remove any directory names, and keep only what's after the last `/`` + char * fname_suffix; + char * saveptr; + fname_suffix = strtok_r(&fname[0], "#", &saveptr); + char * res = fname_suffix; + while (res) { + res = strtok_r(nullptr, "#", &saveptr); + if (res) { fname_suffix = res; } + } + offset += zip_header_size + header.filename_size + header.extra_field_size; + + ZipEntry & entry = entries.addToLast(); + entry.file_name = fname_suffix; + entry.file_start = offset; + entry.file_len = header.size_uncompressed; + entry.last_mod = dos2unixtime((header.last_mod_date << 16) | header.last_mod_time); + offset += header.size_uncompressed; + + AddLog(LOG_LEVEL_DEBUG, "ZIP: found file '%s' (%i bytes - offset %i) - next entry %i", &fname[0], header.size_uncompressed, entry.file_start, offset); + } + + return true; +} + + +/******************************************************************** +** Encapsulation of FS and File to piggyback on Arduino +** +********************************************************************/ + +FileImplPtr ZipReadFSImpl::open(const char* path, const char* mode, const bool create) { + if (*_fs == nullptr) { return nullptr; } + + if (strchr(path, '#')) { + // we don't support any other mode than "r" and no-create + if (strcmp(mode, "r") != 0 || create) { + AddLog(LOG_LEVEL_INFO, "ZIP: writing to zip is not supported"); + return ZipReadFileImplPtr(); // return an error + } + // treat as a ZIP archive + char sub_path[strlen(path)+1]; + strcpy(sub_path, path); + + // extract the suffix + char *tok; + char *prefix = strtok_r(sub_path, "#", &tok); + char *suffix = strtok_r(NULL, "", &tok); + AddLog(LOG_LEVEL_DEBUG, "ZIP: prefix=%s suffix=%s", prefix, suffix); + // parse ZIP archive + File zipfile = (*_fs)->open(prefix, "r", false); + if ((bool)zipfile) { + // we could read the file + ZipArchive zip_archive = ZipArchive(&zipfile); + zip_archive.parse(); + + for (auto & entry : zip_archive.entries) { + if (entry.file_name.equals(suffix)) { + // found + AddLog(LOG_LEVEL_DEBUG, "ZIP: file '%s' in archive (start=%i - len=%i - last_mod=%i)", suffix, entry.file_start, entry.file_len, entry.last_mod); + return ZipItemImplPtr(new ZipItemImpl((*_fs)->open(prefix, "r", false), entry.file_start, entry.file_len, entry.last_mod)); + } + } + return ZipReadFileImplPtr(); // return an error + } else { + AddLog(LOG_LEVEL_INFO, "ZIP: could not open '%s'", prefix); + return ZipReadFileImplPtr(); // return an error + } + } else { + // simple file, do nothing + return ZipReadFileImplPtr(new ZipReadFileImpl((*_fs)->open(path, mode, create))); + } +} + +bool ZipReadFSImpl::exists(const char* path) { + if (*_fs == nullptr) { return false; } + + if (strchr(path, '#')) { + // treat as a ZIP archive + char sub_path[strlen(path)+1]; + strcpy(sub_path, path); + + // extract the suffix + char *tok; + char *prefix = strtok_r(sub_path, "#", &tok); + char *suffix = strtok_r(NULL, "", &tok); + // parse ZIP archive + File zipfile = (*_fs)->open(prefix, "r", false); + if ((bool)zipfile) { + // we could read the file + ZipArchive zip_archive = ZipArchive(&zipfile); + zip_archive.parse(); + + for (auto & entry : zip_archive.entries) { + if (entry.file_name.equals(suffix)) { + return true; + } + } + } + return false; + } else { + // simple file, do nothing + return (*_fs)->exists(path); + } +} + +ZipReadFSImpl::~ZipReadFSImpl() {}; + +#endif // ESP32 \ No newline at end of file diff --git a/lib/libesp32/Zip-readonly-FS/src/ZipReadFS.h b/lib/libesp32/Zip-readonly-FS/src/ZipReadFS.h new file mode 100644 index 000000000..ff0e2f997 --- /dev/null +++ b/lib/libesp32/Zip-readonly-FS/src/ZipReadFS.h @@ -0,0 +1,67 @@ + +#ifndef __ZIP_READ_FS__ +#define __ZIP_READ_FS__ + +#include + +#ifdef ESP32 + +#include +#include +#include + +class ZipReadFSImpl; +typedef std::shared_ptr ZipReadFSImplPtr; + + +class ZipReadFSImpl : public FSImpl { +public: + + ZipReadFSImpl(FS **fs) : _fs(fs) {}; + virtual ~ZipReadFSImpl(); + + FileImplPtr open(const char* path, const char* mode, const bool create); + + bool exists(const char* path); + + bool rename(const char* pathFrom, const char* pathTo) { + if (*_fs) { + return (*_fs)->rename(pathFrom, pathTo); + } else { + return false; + } + } + bool remove(const char* path) { + if (*_fs) { + return (*_fs)->remove(path); + } else { + return false; + } + } + bool mkdir(const char *path) { + if (*_fs) { + return (*_fs)->mkdir(path); + } else { + return false; + } + } + bool rmdir(const char *path) { + if (*_fs) { + return (*_fs)->rmdir(path); + } else { + return false; + } + } + void mountpoint(const char *) { + }; + const char * mountpoint() { + return nullptr; + } + +private: + FS **_fs; +}; + +#endif // ESP32 + +#endif // __ZIP_READ_FS__ diff --git a/lib/libesp32_div/ESP32-HomeKit/src/esp_mfi_debug.h b/lib/libesp32_div/ESP32-HomeKit/src/esp_mfi_debug.h index 4c0ae62ee..282276e9d 100644 --- a/lib/libesp32_div/ESP32-HomeKit/src/esp_mfi_debug.h +++ b/lib/libesp32_div/ESP32-HomeKit/src/esp_mfi_debug.h @@ -35,12 +35,12 @@ extern "C"{ #define ESP_MFI_DEBUG_FL "\n" #define CONFIG_ESP_MFI_DEBUG_ENABLE #ifdef CONFIG_ESP_MFI_DEBUG_ENABLE -#define ESP_MFI_DEBUG_ENABLE +// #define ESP_MFI_DEBUG_ENABLE #endif /* CONFIG_ESP_MFI_DEBUG_ENABLE */ #define CONFIG_ESP_MFI_ASSERT #ifdef CONFIG_ESP_MFI_ASSERT -#define ESP_MFI_ASSERT_ENABLE +// #define ESP_MFI_ASSERT_ENABLE #endif /* CONFIG_ESP_MFI_ASSERT */ #define CONFIG_MFI_DEBUG_LEVEL_INIT 0 diff --git a/lib/libesp32_div/ESP32-HomeKit/src/port/bignum.h b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum.h index 5ead8cc6f..b6d6f1c1f 100644 --- a/lib/libesp32_div/ESP32-HomeKit/src/port/bignum.h +++ b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum.h @@ -13,68 +13,8 @@ // limitations under the License. #pragma once -#include_next "mbedtls/bignum.h" -#include "sdkconfig.h" - -/** - * This is a wrapper for the main mbedtls/bignum.h. This wrapper - * provides a few additional ESP32-only functions. - * - * This is because we don't set MBEDTLS_BIGNUM_ALT in the same way we - * do for AES, SHA, etc. Because we still use most of the bignum.h - * implementation and just replace a few hardware accelerated - * functions (see MBEDTLS_MPI_EXP_MOD_ALT & MBEDTLS_MPI_MUL_MPI_ALT in - * esp_config.h). - * - * @note Unlike the other hardware accelerator support functions in esp32/hwcrypto, there is no - * generic "hwcrypto/bignum.h" header for using these functions without mbedTLS. The reason for this - * is that all of the function implementations depend strongly upon the mbedTLS MPI implementation. - */ - -/** - * @brief Lock access to RSA Accelerator (MPI/bignum operations) - * - * RSA Accelerator hardware unit can only be used by one - * consumer at a time. - * - * @note This function is non-recursive (do not call it twice from the - * same task.) - * - * @note You do not need to call this if you are using the mbedTLS bignum.h - * API or esp_mpi_xxx functions. This function is only needed if you - * want to call ROM RSA functions or access the registers directly. - * - */ -void esp_mpi_acquire_hardware(void); - -/** - * @brief Unlock access to RSA Accelerator (MPI/bignum operations) - * - * Has to be called once for each call to esp_mpi_acquire_hardware(). - * - * @note You do not need to call this if you are using the mbedTLS bignum.h - * API or esp_mpi_xxx functions. This function is only needed if you - * want to call ROM RSA functions or access the registers directly. - */ -void esp_mpi_release_hardware(void); - -//#if CONFIG_MBEDTLS_HARDWARE_MPI - -/* @brief MPI modular mupltiplication function - * - * Calculates Z = (X * Y) mod M using MPI hardware acceleration. - * - * This is not part of the standard mbedTLS bignum API. - * - * @note All of X, Y & Z should be less than 4096 bit long or an error is returned. - * - * @param Z Result bignum, should be pre-initialised with mbedtls_mpi_init(). - * @param X First multiplication argument. - * @param Y Second multiplication argument. - * @param M Modulus value for result. - * - * @return 0 on success, mbedTLS MPI error codes on failure. - */ -int esp_mpi_mul_mpi_mod(mbedtls_mpi *Z, const mbedtls_mpi *X, const mbedtls_mpi *Y, const mbedtls_mpi *M); - -//#endif // CONFIG_MBEDTLS_HARDWARE_MPI +#if CONFIG_IDF_TARGET_ESP32 +#include "bignum_ESP32.h" +#elif CONFIG_IDF_TARGET_ESP32C3 +#include "bignum_ESP32_C3.h" +#endif diff --git a/lib/libesp32_div/ESP32-HomeKit/src/port/bignum.c b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32.c similarity index 98% rename from lib/libesp32_div/ESP32-HomeKit/src/port/bignum.c rename to lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32.c index 5fab344e5..1a63ffe7f 100644 --- a/lib/libesp32_div/ESP32-HomeKit/src/port/bignum.c +++ b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32.c @@ -21,6 +21,7 @@ * */ +#if CONFIG_IDF_TARGET_ESP32 #if __has_include("esp_idf_version.h") #include "esp_idf_version.h" #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0) @@ -35,6 +36,9 @@ #include "bignum_impl.h" #include #include +#if CONFIG_IDF_TARGET_ESP32C3 +#include "esp32c3/dport_access.h" +#endif static _lock_t mpi_lock; @@ -284,3 +288,4 @@ void esp_mpi_mult_mpi_failover_mod_mult_hw_op(const mbedtls_mpi *X, const mbedtl start_op(RSA_MULT_START_REG); } +#endif //CONFIG_IDF_TARGET_ESP32 diff --git a/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32.h b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32.h new file mode 100644 index 000000000..90c3325b5 --- /dev/null +++ b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32.h @@ -0,0 +1,82 @@ +// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#if CONFIG_IDF_TARGET_ESP32 +#pragma once + +#include_next "mbedtls/bignum.h" +#include "sdkconfig.h" + +/** + * This is a wrapper for the main mbedtls/bignum.h. This wrapper + * provides a few additional ESP32-only functions. + * + * This is because we don't set MBEDTLS_BIGNUM_ALT in the same way we + * do for AES, SHA, etc. Because we still use most of the bignum.h + * implementation and just replace a few hardware accelerated + * functions (see MBEDTLS_MPI_EXP_MOD_ALT & MBEDTLS_MPI_MUL_MPI_ALT in + * esp_config.h). + * + * @note Unlike the other hardware accelerator support functions in esp32/hwcrypto, there is no + * generic "hwcrypto/bignum.h" header for using these functions without mbedTLS. The reason for this + * is that all of the function implementations depend strongly upon the mbedTLS MPI implementation. + */ + +/** + * @brief Lock access to RSA Accelerator (MPI/bignum operations) + * + * RSA Accelerator hardware unit can only be used by one + * consumer at a time. + * + * @note This function is non-recursive (do not call it twice from the + * same task.) + * + * @note You do not need to call this if you are using the mbedTLS bignum.h + * API or esp_mpi_xxx functions. This function is only needed if you + * want to call ROM RSA functions or access the registers directly. + * + */ +void esp_mpi_acquire_hardware(void); + +/** + * @brief Unlock access to RSA Accelerator (MPI/bignum operations) + * + * Has to be called once for each call to esp_mpi_acquire_hardware(). + * + * @note You do not need to call this if you are using the mbedTLS bignum.h + * API or esp_mpi_xxx functions. This function is only needed if you + * want to call ROM RSA functions or access the registers directly. + */ +void esp_mpi_release_hardware(void); + +//#if CONFIG_MBEDTLS_HARDWARE_MPI + +/* @brief MPI modular mupltiplication function + * + * Calculates Z = (X * Y) mod M using MPI hardware acceleration. + * + * This is not part of the standard mbedTLS bignum API. + * + * @note All of X, Y & Z should be less than 4096 bit long or an error is returned. + * + * @param Z Result bignum, should be pre-initialised with mbedtls_mpi_init(). + * @param X First multiplication argument. + * @param Y Second multiplication argument. + * @param M Modulus value for result. + * + * @return 0 on success, mbedTLS MPI error codes on failure. + */ +int esp_mpi_mul_mpi_mod(mbedtls_mpi *Z, const mbedtls_mpi *X, const mbedtls_mpi *Y, const mbedtls_mpi *M); + +//#endif // CONFIG_MBEDTLS_HARDWARE_MPI +#endif CONFIG_IDF_TARGET_ESP32 diff --git a/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32_C3.c b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32_C3.c new file mode 100644 index 000000000..a96d514b9 --- /dev/null +++ b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32_C3.c @@ -0,0 +1,108 @@ +/** + * \brief Multi-precision integer library, ESP-IDF hardware accelerated parts + * + * based on mbedTLS implementation + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * Additions Copyright (C) 2016-2020, Espressif Systems (Shanghai) PTE Ltd + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#if CONFIG_IDF_TARGET_ESP32C3 +#if __has_include("esp_idf_version.h") +#include "esp_idf_version.h" +#endif + +#include +#include "soc/hwcrypto_periph.h" +#include "driver/periph_ctrl.h" +#include "mbedtls/bignum.h" +#include "bignum_impl.h" +#include "soc/system_reg.h" +#include "soc/periph_defs.h" +#include "esp_crypto_lock.h" + +/* Copy mbedTLS MPI bignum 'mpi' to hardware memory block at 'mem_base'. + + If hw_words is higher than the number of words in the bignum then + these additional words will be zeroed in the memory buffer. + +*/ +static inline void mpi_to_mem_block(uint32_t mem_base, const mbedtls_mpi *mpi, size_t num_words) +{ + uint32_t *pbase = (uint32_t *)mem_base; + uint32_t copy_words = MIN(num_words, mpi->n); + + /* Copy MPI data to memory block registers */ + for (int i = 0; i < copy_words; i++) { + pbase[i] = mpi->p[i]; + } + + /* Zero any remaining memory block data */ + for (int i = copy_words; i < num_words; i++) { + pbase[i] = 0; + } +} + +/* Read mbedTLS MPI bignum back from hardware memory block. + + Reads num_words words from block. + + Bignum 'x' should already be grown to at least num_words by caller (can be done while + calculation is in progress, to save some cycles) +*/ +static inline void mem_block_to_mpi(mbedtls_mpi *x, uint32_t mem_base, int num_words) +{ + + /* Copy data from memory block registers */ + const size_t REG_WIDTH = sizeof(uint32_t); + for (size_t i = 0; i < num_words; i++) { + x->p[i] = REG_READ(mem_base + (i * REG_WIDTH)); + } + /* Zero any remaining limbs in the bignum, if the buffer is bigger + than num_words */ + for (size_t i = num_words; i < x->n; i++) { + x->p[i] = 0; + } + +} + +/* Begin an RSA operation. op_reg specifies which 'START' register + to write to. +*/ +static inline void start_op(uint32_t op_reg) +{ + /* Clear interrupt status */ + REG_WRITE(RSA_CLEAR_INTERRUPT_REG, 1); + + /* Note: above REG_WRITE includes a memw, so we know any writes + to the memory blocks are also complete. */ + + REG_WRITE(op_reg, 1); +} + +/* Wait for an RSA operation to complete. +*/ +static inline void wait_op_complete(void) +{ + while (REG_READ(RSA_QUERY_INTERRUPT_REG) != 1) + { } + + /* clear the interrupt */ + REG_WRITE(RSA_CLEAR_INTERRUPT_REG, 1); +} + +#endif //CONFIG_IDF_TARGET_ESP32C3 diff --git a/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32_C3.h b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32_C3.h new file mode 100644 index 000000000..333615c3f --- /dev/null +++ b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_ESP32_C3.h @@ -0,0 +1,87 @@ +// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#if CONFIG_IDF_TARGET_ESP32C3 +#pragma once + +#include_next "mbedtls/bignum.h" +#include "sdkconfig.h" + +/** + * This is a wrapper for the main mbedtls/bignum.h. This wrapper + * provides a few additional ESP32-only functions. + * + * This is because we don't set MBEDTLS_BIGNUM_ALT in the same way we + * do for AES, SHA, etc. Because we still use most of the bignum.h + * implementation and just replace a few hardware accelerated + * functions (see MBEDTLS_MPI_EXP_MOD_ALT & MBEDTLS_MPI_MUL_MPI_ALT in + * esp_config.h). + * + * @note Unlike the other hardware accelerator support functions in esp32/hwcrypto, there is no + * generic "hwcrypto/bignum.h" header for using these functions without mbedTLS. The reason for this + * is that all of the function implementations depend strongly upon the mbedTLS MPI implementation. + */ + +/** + * @brief Lock access to RSA Accelerator (MPI/bignum operations) + * + * RSA Accelerator hardware unit can only be used by one + * consumer at a time. + * + * @note This function is non-recursive (do not call it twice from the + * same task.) + * + * @note You do not need to call this if you are using the mbedTLS bignum.h + * API or esp_mpi_xxx functions. This function is only needed if you + * want to call ROM RSA functions or access the registers directly. + * + */ +void esp_mpi_acquire_hardware(void); + +/** + * @brief Unlock access to RSA Accelerator (MPI/bignum operations) + * + * Has to be called once for each call to esp_mpi_acquire_hardware(). + * + * @note You do not need to call this if you are using the mbedTLS bignum.h + * API or esp_mpi_xxx functions. This function is only needed if you + * want to call ROM RSA functions or access the registers directly. + */ +void esp_mpi_release_hardware(void); + +//#if CONFIG_MBEDTLS_HARDWARE_MPI + +/* @brief MPI modular mupltiplication function + * + * Calculates Z = (X * Y) mod M using MPI hardware acceleration. + * + * This is not part of the standard mbedTLS bignum API. + * + * @note All of X, Y & Z should be less than 4096 bit long or an error is returned. + * + * @param Z Result bignum, should be pre-initialised with mbedtls_mpi_init(). + * @param X First multiplication argument. + * @param Y Second multiplication argument. + * @param M Modulus value for result. + * + * @return 0 on success, mbedTLS MPI error codes on failure. + */ +int esp_mpi_mul_mpi_mod(mbedtls_mpi *Z, const mbedtls_mpi *X, const mbedtls_mpi *Y, const mbedtls_mpi *M); + +void esp_mpi_mul_mpi_mod_hw_op(const mbedtls_mpi *X, const mbedtls_mpi *Y, const mbedtls_mpi *M, const mbedtls_mpi *Rinv, mbedtls_mpi_uint Mprime, size_t num_words); +static inline void mpi_to_mem_block(uint32_t mem_base, const mbedtls_mpi *mpi, size_t num_words); +void esp_mpi_mul_mpi_hw_op(const mbedtls_mpi *X, const mbedtls_mpi *Y, size_t num_words); + + +//#endif // CONFIG_MBEDTLS_HARDWARE_MPI +#endif //CONFIG_IDF_TARGET_ESP32C3 diff --git a/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_impl.h b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_impl.h index 0c70fa339..20943499b 100644 --- a/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_impl.h +++ b/lib/libesp32_div/ESP32-HomeKit/src/port/bignum_impl.h @@ -10,7 +10,7 @@ exponentiation instead. */ -#define CONFIG_IDF_TARGET_ESP32 1 +// #define CONFIG_IDF_TARGET_ESP32 1 #if CONFIG_IDF_TARGET_ESP32 #define ESP_MPI_USE_MONT_EXP @@ -19,7 +19,7 @@ //#define MBEDTLS_MPI_MUL_MPI_ALT #endif - +#if CONFIG_IDF_TARGET_ESP32 int esp_mpi_exp_mod( mbedtls_mpi *Z, const mbedtls_mpi *X, const mbedtls_mpi *Y, const mbedtls_mpi *M, mbedtls_mpi *_Rinv ); /** @@ -86,7 +86,11 @@ int esp_mont_hw_op(mbedtls_mpi* Z, const mbedtls_mpi* X, const mbedtls_mpi* Y, c * */ void esp_mpi_exp_mpi_mod_hw_op(const mbedtls_mpi *X, const mbedtls_mpi *Y, const mbedtls_mpi *M, const mbedtls_mpi *Rinv, mbedtls_mpi_uint Mprime, size_t hw_words); - +#endif //CONFIG_IDF_TARGET_ESP32 #endif //ESP_MPI_USE_MONT_EXP +#if CONFIG_IDF_TARGET_ESP32C3 +void esp_mpi_exp_mpi_mod_hw_op(const mbedtls_mpi *X, const mbedtls_mpi *Y, const mbedtls_mpi *M, const mbedtls_mpi *Rinv, mbedtls_mpi_uint Mprime, size_t num_words); +#endif //CONFIG_IDF_TARGET_ESP32C3 + #endif diff --git a/lib/libesp32_div/ESP32-HomeKit/src/port/esp_bignum.c b/lib/libesp32_div/ESP32-HomeKit/src/port/esp_bignum.c index 44e0a798c..8d6936e60 100644 --- a/lib/libesp32_div/ESP32-HomeKit/src/port/esp_bignum.c +++ b/lib/libesp32_div/ESP32-HomeKit/src/port/esp_bignum.c @@ -79,7 +79,7 @@ static inline size_t bits_to_words(size_t bits) /* Return the number of words actually used to represent an mpi number. */ -#if defined(MBEDTLS_MPI_EXP_MOD_ALT) +#if defined(MBEDTLS_MPI_EXP_MOD_ALT) || defined(CONFIG_IDF_TARGET_ESP32C3) static size_t mpi_words(const mbedtls_mpi *mpi) { for (size_t i = mpi->n; i > 0; i--) { @@ -369,6 +369,87 @@ cleanup: #endif /* MBEDTLS_MPI_EXP_MOD_ALT */ +#if CONFIG_IDF_TARGET_ESP32C3 +int esp_mpi_exp_mod( mbedtls_mpi *Z, const mbedtls_mpi *X, const mbedtls_mpi *Y, const mbedtls_mpi *M, mbedtls_mpi *_Rinv ) +{ + int ret = 0; + size_t x_words = mpi_words(X); + size_t y_words = mpi_words(Y); + size_t m_words = mpi_words(M); + + + /* "all numbers must be the same length", so choose longest number + as cardinal length of operation... + */ + size_t num_words = esp_mpi_hardware_words(MAX(m_words, MAX(x_words, y_words))); + + mbedtls_mpi Rinv_new; /* used if _Rinv == NULL */ + mbedtls_mpi *Rinv; /* points to _Rinv (if not NULL) othwerwise &RR_new */ + mbedtls_mpi_uint Mprime; + + if (mbedtls_mpi_cmp_int(M, 0) <= 0 || (M->p[0] & 1) == 0) { + return MBEDTLS_ERR_MPI_BAD_INPUT_DATA; + } + + if (mbedtls_mpi_cmp_int(Y, 0) < 0) { + return MBEDTLS_ERR_MPI_BAD_INPUT_DATA; + } + + if (mbedtls_mpi_cmp_int(Y, 0) == 0) { + return mbedtls_mpi_lset(Z, 1); + } + + if (num_words * 32 > SOC_RSA_MAX_BIT_LEN) { + return MBEDTLS_ERR_MPI_NOT_ACCEPTABLE; + } + + /* Determine RR pointer, either _RR for cached value + or local RR_new */ + if (_Rinv == NULL) { + mbedtls_mpi_init(&Rinv_new); + Rinv = &Rinv_new; + } else { + Rinv = _Rinv; + } + if (Rinv->p == NULL) { + MBEDTLS_MPI_CHK(calculate_rinv(Rinv, M, num_words)); + } + + Mprime = modular_inverse(M); + + // Montgomery exponentiation: Z = X ^ Y mod M (HAC 14.94) +#ifdef ESP_MPI_USE_MONT_EXP + ret = mpi_montgomery_exp_calc(Z, X, Y, M, Rinv, num_words, Mprime) ; + MBEDTLS_MPI_CHK(ret); +#else + esp_mpi_enable_hardware_hw_op(); + + esp_mpi_exp_mpi_mod_hw_op(X, Y, M, Rinv, Mprime, num_words); + ret = mbedtls_mpi_grow(Z, m_words); + if (ret != 0) { + esp_mpi_disable_hardware_hw_op(); + goto cleanup; + } + esp_mpi_read_result_hw_op(Z, m_words); + esp_mpi_disable_hardware_hw_op(); +#endif + + // Compensate for negative X + if (X->s == -1 && (Y->p[0] & 1) != 0) { + Z->s = -1; + MBEDTLS_MPI_CHK(mbedtls_mpi_add_mpi(Z, M, Z)); + } else { + Z->s = 1; + } + +cleanup: + if (_Rinv == NULL) { + mbedtls_mpi_free(&Rinv_new); + } + return ret; +} +#endif //CONFIG_IDF_TARGET_ESP32C3 + #if defined(MBEDTLS_MPI_MUL_MPI_ALT) /* MBEDTLS_MPI_MUL_MPI_ALT */ diff --git a/lib/libesp32_epdiy/.gitignore b/lib/libesp32_eink/epdiy/.gitignore similarity index 100% rename from lib/libesp32_epdiy/.gitignore rename to lib/libesp32_eink/epdiy/.gitignore diff --git a/lib/libesp32_epdiy/.gitmodules b/lib/libesp32_eink/epdiy/.gitmodules similarity index 100% rename from lib/libesp32_epdiy/.gitmodules rename to lib/libesp32_eink/epdiy/.gitmodules diff --git a/lib/libesp32_epdiy/.readthedocs.yml b/lib/libesp32_eink/epdiy/.readthedocs.yml similarity index 100% rename from lib/libesp32_epdiy/.readthedocs.yml rename to lib/libesp32_eink/epdiy/.readthedocs.yml diff --git a/lib/libesp32_epdiy/Makefile b/lib/libesp32_eink/epdiy/Makefile similarity index 100% rename from lib/libesp32_epdiy/Makefile rename to lib/libesp32_eink/epdiy/Makefile diff --git a/lib/libesp32_epdiy/README.md b/lib/libesp32_eink/epdiy/README.md similarity index 100% rename from lib/libesp32_epdiy/README.md rename to lib/libesp32_eink/epdiy/README.md diff --git a/lib/libesp32_epdiy/boards.local.txt b/lib/libesp32_eink/epdiy/boards.local.txt similarity index 100% rename from lib/libesp32_epdiy/boards.local.txt rename to lib/libesp32_eink/epdiy/boards.local.txt diff --git a/lib/libesp32_epdiy/library.properties b/lib/libesp32_eink/epdiy/library.properties similarity index 100% rename from lib/libesp32_epdiy/library.properties rename to lib/libesp32_eink/epdiy/library.properties diff --git a/lib/libesp32_epdiy/scripts/LICENSE b/lib/libesp32_eink/epdiy/scripts/LICENSE similarity index 100% rename from lib/libesp32_epdiy/scripts/LICENSE rename to lib/libesp32_eink/epdiy/scripts/LICENSE diff --git a/lib/libesp32_epdiy/scripts/epdiy_waveform_gen.py b/lib/libesp32_eink/epdiy/scripts/epdiy_waveform_gen.py similarity index 100% rename from lib/libesp32_epdiy/scripts/epdiy_waveform_gen.py rename to lib/libesp32_eink/epdiy/scripts/epdiy_waveform_gen.py diff --git a/lib/libesp32_epdiy/scripts/fontconvert.py b/lib/libesp32_eink/epdiy/scripts/fontconvert.py similarity index 100% rename from lib/libesp32_epdiy/scripts/fontconvert.py rename to lib/libesp32_eink/epdiy/scripts/fontconvert.py diff --git a/lib/libesp32_epdiy/scripts/imgconvert.py b/lib/libesp32_eink/epdiy/scripts/imgconvert.py similarity index 100% rename from lib/libesp32_epdiy/scripts/imgconvert.py rename to lib/libesp32_eink/epdiy/scripts/imgconvert.py diff --git a/lib/libesp32_epdiy/scripts/modenames.py b/lib/libesp32_eink/epdiy/scripts/modenames.py similarity index 100% rename from lib/libesp32_epdiy/scripts/modenames.py rename to lib/libesp32_eink/epdiy/scripts/modenames.py diff --git a/lib/libesp32_epdiy/scripts/waveform_hdrgen.py b/lib/libesp32_eink/epdiy/scripts/waveform_hdrgen.py similarity index 100% rename from lib/libesp32_epdiy/scripts/waveform_hdrgen.py rename to lib/libesp32_eink/epdiy/scripts/waveform_hdrgen.py diff --git a/lib/libesp32_epdiy/src/epd4in7.cpp b/lib/libesp32_eink/epdiy/src/epd4in7.cpp similarity index 100% rename from lib/libesp32_epdiy/src/epd4in7.cpp rename to lib/libesp32_eink/epdiy/src/epd4in7.cpp diff --git a/lib/libesp32_epdiy/src/epd4in7.h b/lib/libesp32_eink/epdiy/src/epd4in7.h similarity index 100% rename from lib/libesp32_epdiy/src/epd4in7.h rename to lib/libesp32_eink/epdiy/src/epd4in7.h diff --git a/lib/libesp32_epdiy/src/epd_driver.h b/lib/libesp32_eink/epdiy/src/epd_driver.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver.h rename to lib/libesp32_eink/epdiy/src/epd_driver.h diff --git a/lib/libesp32_epdiy/src/epd_driver/CMakeLists.txt b/lib/libesp32_eink/epdiy/src/epd_driver/CMakeLists.txt similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/CMakeLists.txt rename to lib/libesp32_eink/epdiy/src/epd_driver/CMakeLists.txt diff --git a/lib/libesp32_epdiy/src/epd_driver/Kconfig b/lib/libesp32_eink/epdiy/src/epd_driver/Kconfig similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/Kconfig rename to lib/libesp32_eink/epdiy/src/epd_driver/Kconfig diff --git a/lib/libesp32_epdiy/src/epd_driver/LICENSE b/lib/libesp32_eink/epdiy/src/epd_driver/LICENSE similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/LICENSE rename to lib/libesp32_eink/epdiy/src/epd_driver/LICENSE diff --git a/lib/libesp32_epdiy/src/epd_driver/Makefile b/lib/libesp32_eink/epdiy/src/epd_driver/Makefile similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/Makefile rename to lib/libesp32_eink/epdiy/src/epd_driver/Makefile diff --git a/lib/libesp32_epdiy/src/epd_driver/builtin_waveforms.c b/lib/libesp32_eink/epdiy/src/epd_driver/builtin_waveforms.c similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/builtin_waveforms.c rename to lib/libesp32_eink/epdiy/src/epd_driver/builtin_waveforms.c diff --git a/lib/libesp32_epdiy/src/epd_driver/config_reg_v2.h b/lib/libesp32_eink/epdiy/src/epd_driver/config_reg_v2.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/config_reg_v2.h rename to lib/libesp32_eink/epdiy/src/epd_driver/config_reg_v2.h diff --git a/lib/libesp32_epdiy/src/epd_driver/config_reg_v4.h b/lib/libesp32_eink/epdiy/src/epd_driver/config_reg_v4.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/config_reg_v4.h rename to lib/libesp32_eink/epdiy/src/epd_driver/config_reg_v4.h diff --git a/lib/libesp32_epdiy/src/epd_driver/display_ops.c b/lib/libesp32_eink/epdiy/src/epd_driver/display_ops.c similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/display_ops.c rename to lib/libesp32_eink/epdiy/src/epd_driver/display_ops.c diff --git a/lib/libesp32_epdiy/src/epd_driver/display_ops.h b/lib/libesp32_eink/epdiy/src/epd_driver/display_ops.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/display_ops.h rename to lib/libesp32_eink/epdiy/src/epd_driver/display_ops.h diff --git a/lib/libesp32_epdiy/src/epd_driver/epd_driver.c b/lib/libesp32_eink/epdiy/src/epd_driver/epd_driver.c similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/epd_driver.c rename to lib/libesp32_eink/epdiy/src/epd_driver/epd_driver.c diff --git a/lib/libesp32_epdiy/src/epd_driver/epd_temperature.c b/lib/libesp32_eink/epdiy/src/epd_driver/epd_temperature.c similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/epd_temperature.c rename to lib/libesp32_eink/epdiy/src/epd_driver/epd_temperature.c diff --git a/lib/libesp32_epdiy/src/epd_driver/epd_temperature.h b/lib/libesp32_eink/epdiy/src/epd_driver/epd_temperature.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/epd_temperature.h rename to lib/libesp32_eink/epdiy/src/epd_driver/epd_temperature.h diff --git a/lib/libesp32_epdiy/src/epd_driver/font.c b/lib/libesp32_eink/epdiy/src/epd_driver/font.c similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/font.c rename to lib/libesp32_eink/epdiy/src/epd_driver/font.c diff --git a/lib/libesp32_epdiy/src/epd_driver/hacks.cmake b/lib/libesp32_eink/epdiy/src/epd_driver/hacks.cmake similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/hacks.cmake rename to lib/libesp32_eink/epdiy/src/epd_driver/hacks.cmake diff --git a/lib/libesp32_epdiy/src/epd_driver/highlevel.c b/lib/libesp32_eink/epdiy/src/epd_driver/highlevel.c similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/highlevel.c rename to lib/libesp32_eink/epdiy/src/epd_driver/highlevel.c diff --git a/lib/libesp32_epdiy/src/epd_driver/i2s_data_bus.c b/lib/libesp32_eink/epdiy/src/epd_driver/i2s_data_bus.c similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/i2s_data_bus.c rename to lib/libesp32_eink/epdiy/src/epd_driver/i2s_data_bus.c diff --git a/lib/libesp32_epdiy/src/epd_driver/i2s_data_bus.h b/lib/libesp32_eink/epdiy/src/epd_driver/i2s_data_bus.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/i2s_data_bus.h rename to lib/libesp32_eink/epdiy/src/epd_driver/i2s_data_bus.h diff --git a/lib/libesp32_epdiy/src/epd_driver/include/epd_driver.h b/lib/libesp32_eink/epdiy/src/epd_driver/include/epd_driver.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/include/epd_driver.h rename to lib/libesp32_eink/epdiy/src/epd_driver/include/epd_driver.h diff --git a/lib/libesp32_epdiy/src/epd_driver/include/epd_highlevel.h b/lib/libesp32_eink/epdiy/src/epd_driver/include/epd_highlevel.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/include/epd_highlevel.h rename to lib/libesp32_eink/epdiy/src/epd_driver/include/epd_highlevel.h diff --git a/lib/libesp32_epdiy/src/epd_driver/include/epd_internals.h b/lib/libesp32_eink/epdiy/src/epd_driver/include/epd_internals.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/include/epd_internals.h rename to lib/libesp32_eink/epdiy/src/epd_driver/include/epd_internals.h diff --git a/lib/libesp32_epdiy/src/epd_driver/lut.c b/lib/libesp32_eink/epdiy/src/epd_driver/lut.c similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/lut.c rename to lib/libesp32_eink/epdiy/src/epd_driver/lut.c diff --git a/lib/libesp32_epdiy/src/epd_driver/lut.h b/lib/libesp32_eink/epdiy/src/epd_driver/lut.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/lut.h rename to lib/libesp32_eink/epdiy/src/epd_driver/lut.h diff --git a/lib/libesp32_epdiy/src/epd_driver/render.c b/lib/libesp32_eink/epdiy/src/epd_driver/render.c similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/render.c rename to lib/libesp32_eink/epdiy/src/epd_driver/render.c diff --git a/lib/libesp32_epdiy/src/epd_driver/rmt_pulse.c b/lib/libesp32_eink/epdiy/src/epd_driver/rmt_pulse.c similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/rmt_pulse.c rename to lib/libesp32_eink/epdiy/src/epd_driver/rmt_pulse.c diff --git a/lib/libesp32_epdiy/src/epd_driver/rmt_pulse.h b/lib/libesp32_eink/epdiy/src/epd_driver/rmt_pulse.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/rmt_pulse.h rename to lib/libesp32_eink/epdiy/src/epd_driver/rmt_pulse.h diff --git a/lib/libesp32_epdiy/src/epd_driver/waveforms/ED047TC2.h b/lib/libesp32_eink/epdiy/src/epd_driver/waveforms/ED047TC2.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/waveforms/ED047TC2.h rename to lib/libesp32_eink/epdiy/src/epd_driver/waveforms/ED047TC2.h diff --git a/lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED047TC1.h b/lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED047TC1.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED047TC1.h rename to lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED047TC1.h diff --git a/lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED060SC4.h b/lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED060SC4.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED060SC4.h rename to lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED060SC4.h diff --git a/lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED060SCT.h b/lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED060SCT.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED060SCT.h rename to lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED060SCT.h diff --git a/lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED060XC3.h b/lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED060XC3.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED060XC3.h rename to lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED060XC3.h diff --git a/lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED097OC4.h b/lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED097OC4.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED097OC4.h rename to lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED097OC4.h diff --git a/lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED097TC2.h b/lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED097TC2.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED097TC2.h rename to lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED097TC2.h diff --git a/lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED133UT2.h b/lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED133UT2.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_driver/waveforms/epdiy_ED133UT2.h rename to lib/libesp32_eink/epdiy/src/epd_driver/waveforms/epdiy_ED133UT2.h diff --git a/lib/libesp32_epdiy/src/epd_highlevel.h b/lib/libesp32_eink/epdiy/src/epd_highlevel.h similarity index 100% rename from lib/libesp32_epdiy/src/epd_highlevel.h rename to lib/libesp32_eink/epdiy/src/epd_highlevel.h diff --git a/pio-tools/add_c_flags.py b/pio-tools/add_c_flags.py new file mode 100644 index 000000000..c93059b36 --- /dev/null +++ b/pio-tools/add_c_flags.py @@ -0,0 +1,4 @@ +Import("env") + +# General options that are passed to the C compiler (C only; not C++). +env.Append(CFLAGS=["-Wno-discarded-qualifiers"]) diff --git a/platformio.ini b/platformio.ini index fdb0e328a..660bf4d96 100644 --- a/platformio.ini +++ b/platformio.ini @@ -64,6 +64,7 @@ lib_extra_dirs = [scripts_defaults] extra_scripts = pio-tools/strip-floats.py + pio-tools/add_c_flags.py pio-tools/name-firmware.py pio-tools/gzip-firmware.py pio-tools/override_copy.py diff --git a/platformio_override_sample.ini b/platformio_override_sample.ini index 3ce7709fe..5d3175b06 100644 --- a/platformio_override_sample.ini +++ b/platformio_override_sample.ini @@ -89,9 +89,9 @@ lib_extra_dirs = ${library.lib_extra_dirs} [env:tasmota32_base] -; *** Uncomment next lines ";" to enable Beta Tasmota Arduino version ESP32 IDF4.4 +; *** Uncomment next lines ";" to enable development Tasmota Arduino version ESP32 ;platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master -;platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1rc1/framework-arduinoespressif32-release_IDF4.4.tar.gz +;platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1/framework-arduinoespressif32-release_IDF4.4.tar.gz ; platformio/tool-esptoolpy @ https://github.com/tasmota/esptool/releases/download/v3.2/esptool-v3.2.zip ; platformio/tool-mklittlefs @ ~1.203.200522 build_unflags = ${esp32_defaults.build_unflags} @@ -134,7 +134,7 @@ lib_extra_dirs = ${library.lib_extra_dirs} ; *** uncomment the following line if you use Bluetooth or Apple Homekit in a Tasmota32 build. Reduces compile time ; lib/libesp32_div ; *** uncomment the following line if you use Epaper driver epidy in your Tasmota32 build. Reduces compile time -; lib/libesp32_epdiy +; lib/libesp32_eink [library] diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini index 64e78a073..e89969b3f 100644 --- a/platformio_tasmota32.ini +++ b/platformio_tasmota32.ini @@ -2,9 +2,15 @@ [esp32_defaults] build_unflags = ${esp_defaults.build_unflags} + -Wswitch-unreachable + -Wstringop-overflow + -Wincompatible-pointer-types + -Wnonnull-compare -fexceptions -Wpointer-arith build_flags = ${esp_defaults.build_flags} + -Wno-switch-unreachable + -Wno-stringop-overflow -fno-exceptions -DBUFFER_LENGTH=128 -DHTTP_UPLOAD_BUFLEN=2048 @@ -26,9 +32,8 @@ build_flags = ${esp_defaults.build_flags} -Wl,--wrap=panicHandler -Wl,--wrap=xt_unhandled_exception [core32] -platform = espressif32 @ 3.3.1 -platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/1.0.7.5/tasmota-arduinoespressif32-release_v3.3.5.tar.gz - platformio/toolchain-xtensa32 @ ~2.50200.0 +platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master +platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1/framework-arduinoespressif32-release_IDF4.4.tar.gz platformio/tool-esptoolpy @ https://github.com/tasmota/esptool/releases/download/v3.2/esptool-v3.2.zip platformio/tool-mklittlefs @ ~1.203.200522 build_unflags = ${esp32_defaults.build_unflags} @@ -36,9 +41,8 @@ build_flags = ${esp32_defaults.build_flags} [core32solo1] -platform = espressif32 @ 3.3.1 -platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/1.0.7.5/tasmota-arduinoespressif32-solo1-release_v3.3.5.tar.gz - platformio/toolchain-xtensa32 @ ~2.50200.0 +platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master +platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1/framework-arduinoespressif32-solo1-release_IDF4.4.tar.gz platformio/tool-esptoolpy @ https://github.com/tasmota/esptool/releases/download/v3.2/esptool-v3.2.zip platformio/tool-mklittlefs @ ~1.203.200522 build_unflags = ${esp32_defaults.build_unflags} diff --git a/platformio_tasmota_cenv_sample.ini b/platformio_tasmota_cenv_sample.ini index 85ed09e49..ea5114455 100644 --- a/platformio_tasmota_cenv_sample.ini +++ b/platformio_tasmota_cenv_sample.ini @@ -1,25 +1,14 @@ -; *** Tasmota32 development core version ESP32 IDF4.4 -[env:tasmota32-dev] -extends = env:tasmota32idf4 -platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/511/framework-arduinoespressif32-release_v4.4-432c3c78c.tar.gz - platformio/tool-esptoolpy @ https://github.com/tasmota/esptool/releases/download/v3.2/esptool-v3.2.zip - platformio/tool-mklittlefs @ ~1.203.200522 -build_flags = ${env:tasmota32idf4.build_flags} - -D FIRMWARE_TASMOTA32 - ;*** Beta Tasmota version for ESP32-S2 -;*** Example how to override the standard core with [tasmota32-dev] core [env:tasmota32s2] -extends = env:tasmota32-dev -platform_packages = ${env:tasmota32-dev.platform_packages} +extends = env:tasmota32_base board = esp32s2 -build_flags = ${env:tasmota32idf4.build_flags} -lib_extra_dirs = lib/libesp32 - lib/libesp32_lvgl - lib/lib_basic - lib/lib_i2c - lib/lib_ssl - lib/lib_display +build_flags = ${env:tasmota32_base.build_flags} -D FIRMWARE_TASMOTA32 +lib_ignore = + ESP8266Audio + ESP8266SAM + TTGO TWatch Library + NimBLE-Arduino + epdiy [env:tasmota-rangeextender] build_flags = ${env.build_flags} @@ -29,8 +18,8 @@ build_flags = ${env.build_flags} -D USE_WIFI_RANGE_EXTENDER_NAPT [env:tasmota32-rangeextender] -extends = env:tasmota32idf4 -build_flags = ${env:tasmota32idf4.build_flags} +extends = env:tasmota32_base +build_flags = ${env:tasmota32_base.build_flags} -D FIRMWARE_TASMOTA32 -D USE_WIFI_RANGE_EXTENDER -D USE_WIFI_RANGE_EXTENDER_NAPT diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini index ab7351d3f..b41146635 100644 --- a/platformio_tasmota_env32.ini +++ b/platformio_tasmota_env32.ini @@ -17,7 +17,7 @@ lib_extra_dirs = ${common.lib_extra_dirs} lib/libesp32 lib/libesp32_lvgl lib/libesp32_div - lib/libesp32_epdiy + lib/libesp32_eink lib_ignore = ESP RainMaker WiFiProv @@ -33,20 +33,6 @@ lib_ignore = ; Disable next if you want to use ArduinoOTA in Tasmota32 (default disabled) ArduinoOTA -[env:tasmota32idf4] -extends = env:tasmota32_base -platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master -platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1rc1/framework-arduinoespressif32-release_IDF4.4.tar.gz - platformio/tool-esptoolpy @ https://github.com/tasmota/esptool/releases/download/v3.2/esptool-v3.2.zip - platformio/tool-mklittlefs @ ~1.203.200522 -build_unflags = ${env:tasmota32_base.build_unflags} - -Wswitch-unreachable - -Wstringop-overflow - -Wincompatible-pointer-types -build_flags = ${env:tasmota32_base.build_flags} - -Wno-switch-unreachable - -Wno-stringop-overflow - [env:tasmota32] extends = env:tasmota32_base build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32 @@ -106,29 +92,17 @@ build_flags = ${env:tasmota32_base.build_flags} -DUSE_IR_REMOTE_FULL lib_extra_dirs = lib/libesp32, lib/lib_basic [env:tasmota32c3] -extends = env:tasmota32idf4 +extends = env:tasmota32_base board = esp32c3 -platform = ${env:tasmota32idf4.platform} -platform_packages = ${env:tasmota32idf4.platform_packages} -build_unflags = ${env:tasmota32idf4.build_unflags} +build_unflags = ${env:tasmota32_base.build_unflags} -mtarget-align - -DNDEBUG -build_flags = ${env:tasmota32idf4.build_flags} -; *** Comment next two lines to disable BLE -; -DUSE_BLE_ESP32 -; -DUSE_MI_ESP32 - ;-DESP32_STAGE=true -lib_extra_dirs = lib/libesp32 - lib/libesp32_div - lib/libesp32_lvgl - lib/lib_basic - lib/lib_i2c - lib/lib_ssl - lib/lib_display +build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32 lib_ignore = + ESP8266Audio + ESP8266SAM TTGO TWatch Library - ESP32-HomeKit Micro-RTSP + epdiy [env:tasmota32-AF] extends = env:tasmota32_base diff --git a/tasmota/berry/include/be_gpio_defines.h b/tasmota/berry/include/be_gpio_defines.h new file mode 100644 index 000000000..73f37825e --- /dev/null +++ b/tasmota/berry/include/be_gpio_defines.h @@ -0,0 +1,284 @@ +/******************************************************************** + * Generated code, don't edit + *******************************************************************/ + +const be_constint_t lv_gpio_constants[] = { + + { "A4988_DIR", (int32_t) GPIO_A4988_DIR }, + { "A4988_ENA", (int32_t) GPIO_A4988_ENA }, + { "A4988_MS1", (int32_t) GPIO_A4988_MS1 }, + { "A4988_STP", (int32_t) GPIO_A4988_STP }, + { "ADC_BUTTON", (int32_t) GPIO_ADC_BUTTON }, + { "ADC_BUTTON_INV", (int32_t) GPIO_ADC_BUTTON_INV }, + { "ADC_CT_POWER", (int32_t) GPIO_ADC_CT_POWER }, + { "ADC_INPUT", (int32_t) GPIO_ADC_INPUT }, + { "ADC_JOY", (int32_t) GPIO_ADC_JOY }, + { "ADC_LIGHT", (int32_t) GPIO_ADC_LIGHT }, + { "ADC_PH", (int32_t) GPIO_ADC_PH }, + { "ADC_RANGE", (int32_t) GPIO_ADC_RANGE }, + { "ADC_TEMP", (int32_t) GPIO_ADC_TEMP }, + { "ADE7953_IRQ", (int32_t) GPIO_ADE7953_IRQ }, + { "ARIRFRCV", (int32_t) GPIO_ARIRFRCV }, + { "ARIRFSEL", (int32_t) GPIO_ARIRFSEL }, + { "AS3935", (int32_t) GPIO_AS3935 }, + { "AS608_RX", (int32_t) GPIO_AS608_RX }, + { "AS608_TX", (int32_t) GPIO_AS608_TX }, + { "AZ_RXD", (int32_t) GPIO_AZ_RXD }, + { "AZ_TXD", (int32_t) GPIO_AZ_TXD }, + { "BACKLIGHT", (int32_t) GPIO_BACKLIGHT }, + { "BL0939_RX", (int32_t) GPIO_BL0939_RX }, + { "BL0940_RX", (int32_t) GPIO_BL0940_RX }, + { "BL0942_RX", (int32_t) GPIO_BL0942_RX }, + { "BOILER_OT_RX", (int32_t) GPIO_BOILER_OT_RX }, + { "BOILER_OT_TX", (int32_t) GPIO_BOILER_OT_TX }, + { "BS814_CLK", (int32_t) GPIO_BS814_CLK }, + { "BS814_DAT", (int32_t) GPIO_BS814_DAT }, + { "BUZZER", (int32_t) GPIO_BUZZER }, + { "BUZZER_INV", (int32_t) GPIO_BUZZER_INV }, + { "CC1101_GDO0", (int32_t) GPIO_CC1101_GDO0 }, + { "CC1101_GDO2", (int32_t) GPIO_CC1101_GDO2 }, + { "CHANGE", CHANGE }, + { "CNTR1", (int32_t) GPIO_CNTR1 }, + { "CNTR1_NP", (int32_t) GPIO_CNTR1_NP }, + { "CSE7761_RX", (int32_t) GPIO_CSE7761_RX }, + { "CSE7761_TX", (int32_t) GPIO_CSE7761_TX }, + { "CSE7766_RX", (int32_t) GPIO_CSE7766_RX }, + { "CSE7766_TX", (int32_t) GPIO_CSE7766_TX }, + { "DAC", (int32_t) -1 }, + { "DCKI", (int32_t) GPIO_DCKI }, + { "DDS2382_RX", (int32_t) GPIO_DDS2382_RX }, + { "DDS2382_TX", (int32_t) GPIO_DDS2382_TX }, + { "DDSU666_RX", (int32_t) GPIO_DDSU666_RX }, + { "DDSU666_TX", (int32_t) GPIO_DDSU666_TX }, + { "DEEPSLEEP", (int32_t) GPIO_DEEPSLEEP }, + { "DHT11", (int32_t) GPIO_DHT11 }, + { "DHT11_OUT", (int32_t) GPIO_DHT11_OUT }, + { "DHT22", (int32_t) GPIO_DHT22 }, + { "DI", (int32_t) GPIO_DI }, + { "DSB", (int32_t) GPIO_DSB }, + { "DSB_OUT", (int32_t) GPIO_DSB_OUT }, + { "DYP_RX", (int32_t) GPIO_DYP_RX }, + { "ELECTRIQ_MOODL_TX", (int32_t) GPIO_ELECTRIQ_MOODL_TX }, + { "EPAPER29_CS", (int32_t) GPIO_EPAPER29_CS }, + { "EPAPER42_CS", (int32_t) GPIO_EPAPER42_CS }, + { "EPD_DATA", (int32_t) GPIO_EPD_DATA }, + { "ETH_PHY_MDC", (int32_t) GPIO_ETH_PHY_MDC }, + { "ETH_PHY_MDIO", (int32_t) GPIO_ETH_PHY_MDIO }, + { "ETH_PHY_POWER", (int32_t) GPIO_ETH_PHY_POWER }, + { "EXS_ENABLE", (int32_t) GPIO_EXS_ENABLE }, + { "FALLING", FALLING }, + { "FTC532", (int32_t) GPIO_FTC532 }, + { "GPS_RX", (int32_t) GPIO_GPS_RX }, + { "GPS_TX", (int32_t) GPIO_GPS_TX }, + { "HALLEFFECT", (int32_t) GPIO_HALLEFFECT }, + { "HEARTBEAT", (int32_t) GPIO_HEARTBEAT }, + { "HEARTBEAT_INV", (int32_t) GPIO_HEARTBEAT_INV }, + { "HIGH", HIGH }, + { "HJL_CF", (int32_t) GPIO_HJL_CF }, + { "HLW_CF", (int32_t) GPIO_HLW_CF }, + { "HM10_RX", (int32_t) GPIO_HM10_RX }, + { "HM10_TX", (int32_t) GPIO_HM10_TX }, + { "HM330X_SET", (int32_t) GPIO_HM330X_SET }, + { "HPMA_RX", (int32_t) GPIO_HPMA_RX }, + { "HPMA_TX", (int32_t) GPIO_HPMA_TX }, + { "HRE_CLOCK", (int32_t) GPIO_HRE_CLOCK }, + { "HRE_DATA", (int32_t) GPIO_HRE_DATA }, + { "HRG15_TX", (int32_t) GPIO_HRG15_TX }, + { "HRXL_RX", (int32_t) GPIO_HRXL_RX }, + { "HX711_DAT", (int32_t) GPIO_HX711_DAT }, + { "HX711_SCK", (int32_t) GPIO_HX711_SCK }, + { "I2C_SCL", (int32_t) GPIO_I2C_SCL }, + { "I2C_SDA", (int32_t) GPIO_I2C_SDA }, + { "I2S_IN_CLK", (int32_t) GPIO_I2S_IN_CLK }, + { "I2S_IN_DATA", (int32_t) GPIO_I2S_IN_DATA }, + { "I2S_IN_SLCT", (int32_t) GPIO_I2S_IN_SLCT }, + { "I2S_OUT_CLK", (int32_t) GPIO_I2S_OUT_CLK }, + { "I2S_OUT_DATA", (int32_t) GPIO_I2S_OUT_DATA }, + { "I2S_OUT_SLCT", (int32_t) GPIO_I2S_OUT_SLCT }, + { "IBEACON_RX", (int32_t) GPIO_IBEACON_RX }, + { "IBEACON_TX", (int32_t) GPIO_IBEACON_TX }, + { "IEM3000_RX", (int32_t) GPIO_IEM3000_RX }, + { "IEM3000_TX", (int32_t) GPIO_IEM3000_TX }, + { "ILI9341_CS", (int32_t) GPIO_ILI9341_CS }, + { "ILI9341_DC", (int32_t) GPIO_ILI9341_DC }, + { "ILI9488_CS", (int32_t) GPIO_ILI9488_CS }, + { "INPUT", (int32_t) GPIO_INPUT }, + { "INPUT_PULLDOWN", INPUT_PULLDOWN }, + { "INPUT_PULLUP", INPUT_PULLUP }, + { "INTERRUPT", (int32_t) GPIO_INTERRUPT }, + { "IRRECV", (int32_t) GPIO_IRRECV }, + { "IRSEND", (int32_t) GPIO_IRSEND }, + { "KEY1", (int32_t) GPIO_KEY1 }, + { "KEY1_INV", (int32_t) GPIO_KEY1_INV }, + { "KEY1_INV_NP", (int32_t) GPIO_KEY1_INV_NP }, + { "KEY1_INV_PD", (int32_t) GPIO_KEY1_INV_PD }, + { "KEY1_NP", (int32_t) GPIO_KEY1_NP }, + { "KEY1_PD", (int32_t) GPIO_KEY1_PD }, + { "KEY1_TC", (int32_t) GPIO_KEY1_TC }, + { "LE01MR_RX", (int32_t) GPIO_LE01MR_RX }, + { "LE01MR_TX", (int32_t) GPIO_LE01MR_TX }, + { "LED1", (int32_t) GPIO_LED1 }, + { "LED1_INV", (int32_t) GPIO_LED1_INV }, + { "LEDLNK", (int32_t) GPIO_LEDLNK }, + { "LEDLNK_INV", (int32_t) GPIO_LEDLNK_INV }, + { "LMT01", (int32_t) GPIO_LMT01 }, + { "LOW", LOW }, + { "MAX31855CLK", (int32_t) GPIO_MAX31855CLK }, + { "MAX31855CS", (int32_t) GPIO_MAX31855CS }, + { "MAX31855DO", (int32_t) GPIO_MAX31855DO }, + { "MAX7219CLK", (int32_t) GPIO_MAX7219CLK }, + { "MAX7219CS", (int32_t) GPIO_MAX7219CS }, + { "MAX7219DIN", (int32_t) GPIO_MAX7219DIN }, + { "MCP2515_CS", (int32_t) GPIO_MCP2515_CS }, + { "MCP39F5_RST", (int32_t) GPIO_MCP39F5_RST }, + { "MCP39F5_RX", (int32_t) GPIO_MCP39F5_RX }, + { "MCP39F5_TX", (int32_t) GPIO_MCP39F5_TX }, + { "MGC3130_RESET", (int32_t) GPIO_MGC3130_RESET }, + { "MGC3130_XFER", (int32_t) GPIO_MGC3130_XFER }, + { "MHZ_RXD", (int32_t) GPIO_MHZ_RXD }, + { "MHZ_TXD", (int32_t) GPIO_MHZ_TXD }, + { "MIEL_HVAC_RX", (int32_t) GPIO_MIEL_HVAC_RX }, + { "MIEL_HVAC_TX", (int32_t) GPIO_MIEL_HVAC_TX }, + { "MP3_DFR562", (int32_t) GPIO_MP3_DFR562 }, + { "NEOPOOL_RX", (int32_t) GPIO_NEOPOOL_RX }, + { "NEOPOOL_TX", (int32_t) GPIO_NEOPOOL_TX }, + { "NONE", (int32_t) GPIO_NONE }, + { "NRF24_CS", (int32_t) GPIO_NRF24_CS }, + { "NRF24_DC", (int32_t) GPIO_NRF24_DC }, + { "NRG_CF1", (int32_t) GPIO_NRG_CF1 }, + { "NRG_SEL", (int32_t) GPIO_NRG_SEL }, + { "NRG_SEL_INV", (int32_t) GPIO_NRG_SEL_INV }, + { "OLED_RESET", (int32_t) GPIO_OLED_RESET }, + { "OPEN_DRAIN", OPEN_DRAIN }, + { "OPTION_A", (int32_t) GPIO_OPTION_A }, + { "OUTPUT", OUTPUT }, + { "OUTPUT_HI", (int32_t) GPIO_OUTPUT_HI }, + { "OUTPUT_LO", (int32_t) GPIO_OUTPUT_LO }, + { "OUTPUT_OPEN_DRAIN", OUTPUT_OPEN_DRAIN }, + { "P9813_CLK", (int32_t) GPIO_P9813_CLK }, + { "P9813_DAT", (int32_t) GPIO_P9813_DAT }, + { "PMS5003_RX", (int32_t) GPIO_PMS5003_RX }, + { "PMS5003_TX", (int32_t) GPIO_PMS5003_TX }, + { "PN532_RXD", (int32_t) GPIO_PN532_RXD }, + { "PN532_TXD", (int32_t) GPIO_PN532_TXD }, + { "PROJECTOR_CTRL_RX", (int32_t) GPIO_PROJECTOR_CTRL_RX }, + { "PROJECTOR_CTRL_TX", (int32_t) GPIO_PROJECTOR_CTRL_TX }, + { "PULLDOWN", PULLDOWN }, + { "PULLUP", PULLUP }, + { "PWM1", (int32_t) GPIO_PWM1 }, + { "PWM1_INV", (int32_t) GPIO_PWM1_INV }, + { "PZEM004_RX", (int32_t) GPIO_PZEM004_RX }, + { "PZEM016_RX", (int32_t) GPIO_PZEM016_RX }, + { "PZEM017_RX", (int32_t) GPIO_PZEM017_RX }, + { "PZEM0XX_TX", (int32_t) GPIO_PZEM0XX_TX }, + { "RA8876_CS", (int32_t) GPIO_RA8876_CS }, + { "RC522_CS", (int32_t) GPIO_RC522_CS }, + { "RC522_RST", (int32_t) GPIO_RC522_RST }, + { "RDM6300_RX", (int32_t) GPIO_RDM6300_RX }, + { "REL1", (int32_t) GPIO_REL1 }, + { "REL1_INV", (int32_t) GPIO_REL1_INV }, + { "RFRECV", (int32_t) GPIO_RFRECV }, + { "RFSEND", (int32_t) GPIO_RFSEND }, + { "RF_SENSOR", (int32_t) GPIO_RF_SENSOR }, + { "RISING", RISING }, + { "ROT1A", (int32_t) GPIO_ROT1A }, + { "ROT1A_NP", (int32_t) GPIO_ROT1A_NP }, + { "ROT1B", (int32_t) GPIO_ROT1B }, + { "ROT1B_NP", (int32_t) GPIO_ROT1B_NP }, + { "RXD", (int32_t) GPIO_RXD }, + { "SAIR_RX", (int32_t) GPIO_SAIR_RX }, + { "SAIR_TX", (int32_t) GPIO_SAIR_TX }, + { "SBR_RX", (int32_t) GPIO_SBR_RX }, + { "SBR_TX", (int32_t) GPIO_SBR_TX }, + { "SDCARD_CS", (int32_t) GPIO_SDCARD_CS }, + { "SDM120_RX", (int32_t) GPIO_SDM120_RX }, + { "SDM120_TX", (int32_t) GPIO_SDM120_TX }, + { "SDM630_RX", (int32_t) GPIO_SDM630_RX }, + { "SDM630_TX", (int32_t) GPIO_SDM630_TX }, + { "SDM72_RX", (int32_t) GPIO_SDM72_RX }, + { "SDM72_TX", (int32_t) GPIO_SDM72_TX }, + { "SDS0X1_RX", (int32_t) GPIO_SDS0X1_RX }, + { "SDS0X1_TX", (int32_t) GPIO_SDS0X1_TX }, + { "SENSOR_END", (int32_t) GPIO_SENSOR_END }, + { "SHELLY_DIMMER_BOOT0", (int32_t) GPIO_SHELLY_DIMMER_BOOT0 }, + { "SHELLY_DIMMER_RST_INV", (int32_t) GPIO_SHELLY_DIMMER_RST_INV }, + { "SI7021", (int32_t) GPIO_SI7021 }, + { "SM16716_CLK", (int32_t) GPIO_SM16716_CLK }, + { "SM16716_DAT", (int32_t) GPIO_SM16716_DAT }, + { "SM16716_SEL", (int32_t) GPIO_SM16716_SEL }, + { "SM2135_CLK", (int32_t) GPIO_SM2135_CLK }, + { "SM2135_DAT", (int32_t) GPIO_SM2135_DAT }, + { "SOLAXX1_RX", (int32_t) GPIO_SOLAXX1_RX }, + { "SOLAXX1_TX", (int32_t) GPIO_SOLAXX1_TX }, + { "SPI_CLK", (int32_t) GPIO_SPI_CLK }, + { "SPI_CS", (int32_t) GPIO_SPI_CS }, + { "SPI_DC", (int32_t) GPIO_SPI_DC }, + { "SPI_MISO", (int32_t) GPIO_SPI_MISO }, + { "SPI_MOSI", (int32_t) GPIO_SPI_MOSI }, + { "SR04_ECHO", (int32_t) GPIO_SR04_ECHO }, + { "SR04_TRIG", (int32_t) GPIO_SR04_TRIG }, + { "SSD1331_CS", (int32_t) GPIO_SSD1331_CS }, + { "SSD1331_DC", (int32_t) GPIO_SSD1331_DC }, + { "SSD1351_CS", (int32_t) GPIO_SSD1351_CS }, + { "SSD1351_DC", (int32_t) GPIO_SSD1351_DC }, + { "SSPI_CS", (int32_t) GPIO_SSPI_CS }, + { "SSPI_DC", (int32_t) GPIO_SSPI_DC }, + { "SSPI_MAX31865_CS1", (int32_t) GPIO_SSPI_MAX31865_CS1 }, + { "SSPI_MISO", (int32_t) GPIO_SSPI_MISO }, + { "SSPI_MOSI", (int32_t) GPIO_SSPI_MOSI }, + { "SSPI_SCLK", (int32_t) GPIO_SSPI_SCLK }, + { "ST7789_CS", (int32_t) GPIO_ST7789_CS }, + { "ST7789_DC", (int32_t) GPIO_ST7789_DC }, + { "SWT1", (int32_t) GPIO_SWT1 }, + { "SWT1_NP", (int32_t) GPIO_SWT1_NP }, + { "SWT1_PD", (int32_t) GPIO_SWT1_PD }, + { "TASMOTACLIENT_RST", (int32_t) GPIO_TASMOTACLIENT_RST }, + { "TASMOTACLIENT_RST_INV", (int32_t) GPIO_TASMOTACLIENT_RST_INV }, + { "TASMOTACLIENT_RXD", (int32_t) GPIO_TASMOTACLIENT_RXD }, + { "TASMOTACLIENT_TXD", (int32_t) GPIO_TASMOTACLIENT_TXD }, + { "TCP_RX", (int32_t) GPIO_TCP_RX }, + { "TCP_TX", (int32_t) GPIO_TCP_TX }, + { "TELEINFO_ENABLE", (int32_t) GPIO_TELEINFO_ENABLE }, + { "TELEINFO_RX", (int32_t) GPIO_TELEINFO_RX }, + { "TFMINIPLUS_RX", (int32_t) GPIO_TFMINIPLUS_RX }, + { "TFMINIPLUS_TX", (int32_t) GPIO_TFMINIPLUS_TX }, + { "TM1637CLK", (int32_t) GPIO_TM1637CLK }, + { "TM1637DIO", (int32_t) GPIO_TM1637DIO }, + { "TM1638CLK", (int32_t) GPIO_TM1638CLK }, + { "TM1638DIO", (int32_t) GPIO_TM1638DIO }, + { "TM1638STB", (int32_t) GPIO_TM1638STB }, + { "TUYA_RX", (int32_t) GPIO_TUYA_RX }, + { "TUYA_TX", (int32_t) GPIO_TUYA_TX }, + { "TX2X_TXD_BLACK", (int32_t) GPIO_TX2X_TXD_BLACK }, + { "TXD", (int32_t) GPIO_TXD }, + { "VINDRIKTNING_RX", (int32_t) GPIO_VINDRIKTNING_RX }, + { "VL53L0X_XSHUT1", (int32_t) GPIO_VL53L0X_XSHUT1 }, + { "WE517_RX", (int32_t) GPIO_WE517_RX }, + { "WE517_TX", (int32_t) GPIO_WE517_TX }, + { "WEBCAM_DATA", (int32_t) GPIO_WEBCAM_DATA }, + { "WEBCAM_HREF", (int32_t) GPIO_WEBCAM_HREF }, + { "WEBCAM_HSD", (int32_t) GPIO_WEBCAM_HSD }, + { "WEBCAM_PCLK", (int32_t) GPIO_WEBCAM_PCLK }, + { "WEBCAM_PSCLK", (int32_t) GPIO_WEBCAM_PSCLK }, + { "WEBCAM_PSRCS", (int32_t) GPIO_WEBCAM_PSRCS }, + { "WEBCAM_PWDN", (int32_t) GPIO_WEBCAM_PWDN }, + { "WEBCAM_RESET", (int32_t) GPIO_WEBCAM_RESET }, + { "WEBCAM_SIOC", (int32_t) GPIO_WEBCAM_SIOC }, + { "WEBCAM_SIOD", (int32_t) GPIO_WEBCAM_SIOD }, + { "WEBCAM_VSYNC", (int32_t) GPIO_WEBCAM_VSYNC }, + { "WEBCAM_XCLK", (int32_t) GPIO_WEBCAM_XCLK }, + { "WIEGAND_D0", (int32_t) GPIO_WIEGAND_D0 }, + { "WIEGAND_D1", (int32_t) GPIO_WIEGAND_D1 }, + { "WINDMETER_SPEED", (int32_t) GPIO_WINDMETER_SPEED }, + { "WS2812", (int32_t) GPIO_WS2812 }, + { "XPT2046_CS", (int32_t) GPIO_XPT2046_CS }, + { "ZEROCROSS", (int32_t) GPIO_ZEROCROSS }, + { "ZIGBEE_RST", (int32_t) GPIO_ZIGBEE_RST }, + { "ZIGBEE_RX", (int32_t) GPIO_ZIGBEE_RX }, + { "ZIGBEE_TX", (int32_t) GPIO_ZIGBEE_TX }, + +}; + +const size_t lv_gpio_constants_size = sizeof(lv_gpio_constants)/sizeof(lv_gpio_constants[0]); + +/********************************************************************/ diff --git a/tasmota/i18n.h b/tasmota/i18n.h index 9c8aed881..c08703e0f 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -692,6 +692,8 @@ #define D_CMND_SHUTTER_INVERTWEBBUTTONS "InvertWebButtons" #define D_CMND_SHUTTER_PWMRANGE "PWMRange" #define D_CMND_SHUTTER_UNITTEST "UnitTest" +#define D_CMND_SHUTTER_TILTCONFIG "TiltConfig" +#define D_CMND_SHUTTER_SETTILT "Tilt" // Commands xdrv_32_hotplug.ino #define D_CMND_HOTPLUG "HotPlug" diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index c861049b5..6f708f58b 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -658,6 +658,7 @@ // #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_HM330X // [I2cDriver63] Enable support for SeedStudio Grove Particule sensor (I2C address 0x40) (+1k5 code) +// #define USE_HDC2010 // [I2cDriver64] Enable HDC2010 temperature/humidity sensor (I2C address 0x40) (+1k5 code) // #define HM330X_DEFAULT_ADDRESS 0x40 // Option: change default I2C address for HM330X used in SeedSTudio Particucle Sensor // #define HM330X_WARMUP_DELAY 30 // Option: change warmup delay during which data are not read from sensor after a power up // #define HM330X_HIDE_OUT_OF_DATE false // Option: change to true to hide data from web GUI and SENSOR while sensor is asleep @@ -853,8 +854,8 @@ #define IR_RCV_WHILE_SENDING 0 // Turns on receiver while sending messages, i.e. receive your own. This is unreliable and can cause IR timing issues // -- Zigbee interface ---------------------------- -//#define USE_ZIGBEE // Enable serial communication with Zigbee CC2530 flashed with ZNP (+49k code, +3k mem) - #define USE_ZIGBEE_ZNP // Enable ZNP protocol, needed for CC2530 based devices +//#define USE_ZIGBEE // Enable serial communication with Zigbee CC2530/CC2652 flashed with ZNP or EFR32 flashed with EZSP (+49k code, +3k mem) + #define USE_ZIGBEE_ZNP // Enable ZNP protocol, needed for CC2530/CC2652 based devices // #define USE_ZIGBEE_EZSP // Enable EZSP protocol, needed for EFR32 EmberZNet based devices, like Sonoff Zigbee bridge // Note: USE_ZIGBEE_ZNP and USE_ZIGBEE_EZSP are mutually incompatible, you must select exactly one // #define USE_ZIGBEE_EEPROM // Use the EEPROM from the Sonoff ZBBridge to save Zigbee configuration and data diff --git a/tasmota/settings.h b/tasmota/settings.h index d16568768..de77a0390 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -591,7 +591,9 @@ typedef struct { uint16_t influxdb_port; // 4CE power_t interlock[MAX_INTERLOCKS_SET]; // 4D0 MAX_INTERLOCKS = MAX_RELAYS / 2 - uint8_t free_508[36]; // 508 + int8_t shutter_tilt_config[5][MAX_SHUTTERS]; //508 + int8_t shutter_tilt_pos[MAX_SHUTTERS]; //51C + uint8_t free_520[12]; // 520 uint16_t mqtt_keepalive; // 52C uint16_t mqtt_socket_timeout; // 52E @@ -761,6 +763,8 @@ typedef struct { uint32_t cfg_crc32; // FFC } TSettings; +static_assert(sizeof(TSettings) == 4096, "TSettings Size is not correct"); + typedef struct { uint16_t valid; // 280 (RTC memory offset 100 - sizeof(RTCRBT)) uint8_t fast_reboot_count; // 282 diff --git a/tasmota/support_esp.ino b/tasmota/support_esp.ino index 87db014c0..93abe9daa 100644 --- a/tasmota/support_esp.ino +++ b/tasmota/support_esp.ino @@ -103,6 +103,19 @@ String GetDeviceHardware(void) { #ifdef ESP32 +// ESP32_ARCH contains the name of the architecture (used by autoconf) +#if CONFIG_IDF_TARGET_ESP32 + #define ESP32_ARCH "esp32" +#elif CONFIG_IDF_TARGET_ESP32S2 + #define ESP32_ARCH "esp32s2" +#elif CONFIG_IDF_TARGET_ESP32S3 + #define ESP32_ARCH "esp32s3" +#elif CONFIG_IDF_TARGET_ESP32C3 + #define ESP32_ARCH "esp32c3" +#else + #define ESP32_ARCH "" +#endif + // Handle 20k of NVM #include diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino index 6a2d73b37..6ed9eff6f 100644 --- a/tasmota/support_features.ino +++ b/tasmota/support_features.ino @@ -772,10 +772,12 @@ void ResponseAppendFeatures(void) feature8 |= 0x00004000; // xsns_92_scd40.ino #endif #if defined(USE_I2C) && defined(USE_HM330X) - feature8 |= 0x00008000; + feature8 |= 0x00008000; // xsns_93_hm330x.ino #endif -// feature8 |= 0x00010000; +#if defined(USE_I2C) && defined(USE_HDC2010) + feature8 |= 0x00010000; // xsns_94_hdc2010.ino +#endif // feature8 |= 0x00020000; // feature8 |= 0x00040000; // feature8 |= 0x00080000; diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino index 97fba4b6c..10bbcc495 100644 --- a/tasmota/support_tasmota.ino +++ b/tasmota/support_tasmota.ino @@ -565,7 +565,7 @@ bool SendKey(uint32_t key, uint32_t device, uint32_t state) result = XdrvRulesProcess(0); } #ifdef USE_PWM_DIMMER - if (PWM_DIMMER != TasmotaGlobal.module_type || !result) { + if (PWM_DIMMER != TasmotaGlobal.module_type || (!result && !Settings->flag3.mqtt_buttons)) { #endif // USE_PWM_DIMMER int32_t payload_save = XdrvMailbox.payload; XdrvMailbox.payload = device_save << 24 | key << 16 | state << 8 | device; diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index 231eb03f0..f4008b93d 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -38,6 +38,7 @@ #include // Webserver, Updater #include #include +#include #include #include #ifdef USE_ARDUINO_OTA diff --git a/tasmota/tasmota_configurations.h b/tasmota/tasmota_configurations.h index 59810fccd..f2fe27392 100644 --- a/tasmota/tasmota_configurations.h +++ b/tasmota/tasmota_configurations.h @@ -148,6 +148,7 @@ //#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_HDC2010 // [I2cDriver64] Enable HDC2010 temperature/humidity sensor (I2C address 0x40) (+1k5 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) diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h index f131a366f..5c33aeeaf 100644 --- a/tasmota/tasmota_version.h +++ b/tasmota/tasmota_version.h @@ -20,6 +20,6 @@ #ifndef _TASMOTA_VERSION_H_ #define _TASMOTA_VERSION_H_ -const uint32_t VERSION = 0x0A000001; +const uint32_t VERSION = 0x0A000002; #endif // _TASMOTA_VERSION_H_ diff --git a/tasmota/xdrv_02_9_mqtt.ino b/tasmota/xdrv_02_9_mqtt.ino index 181917fa1..f5302330f 100644 --- a/tasmota/xdrv_02_9_mqtt.ino +++ b/tasmota/xdrv_02_9_mqtt.ino @@ -216,6 +216,12 @@ void MqttInit(void) { tlsClient = new BearSSL::WiFiClientSecure_light(1024,1024); #endif +#ifdef USE_MQTT_AWS_IOT_LIGHT + if (443 == Settings->mqtt_port) { + static const char * alpn_mqtt = "mqtt"; // needs to be static + tlsClient->setALPN(&alpn_mqtt, 1); // need to set alpn to 'mqtt' for AWS IoT + } +#endif #ifdef USE_MQTT_AWS_IOT loadTlsDir(); // load key and certificate data from Flash if ((nullptr != AWS_IoT_Private_Key) && (nullptr != AWS_IoT_Client_Certificate)) { diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index cde3d2e35..1a71d5adb 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -600,7 +600,7 @@ void ResponseCmndEnergyTotalYesterdayToday(void) { Energy.total[i] = (float)(RtcSettings.energy_kWhtotal_ph[i] + Energy.kWhtoday_offset[i] + Energy.kWhtoday[i]) / 100000; } - Response_P(PSTR("{\"%s\":{\"" D_JSON_TOTAL "\":%s,\"" D_JSON_YESTERDAY "\":%s,\"" D_JSON_TODAY "\":%s}"), + Response_P(PSTR("{\"%s\":{\"" D_JSON_TOTAL "\":%s,\"" D_JSON_YESTERDAY "\":%s,\"" D_JSON_TODAY "\":%s}}"), XdrvMailbox.command, EnergyFormat(value_chr, Energy.total, Settings->flag2.energy_resolution, true), EnergyFormat(value2_chr, energy_yesterday_ph, Settings->flag2.energy_resolution, true), diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino index 16ab3db18..c1dd8a64b 100644 --- a/tasmota/xdrv_10_rules.ino +++ b/tasmota/xdrv_10_rules.ino @@ -1941,6 +1941,7 @@ void ExecuteCommandBlock(const char * commands, int len) //Going to insert the command into backlog String sCurrentCommand = oneCommand; sCurrentCommand.trim(); +/* if (sCurrentCommand.length() > 0 && backlog.size() < MAX_BACKLOG && !TasmotaGlobal.backlog_mutex) { @@ -1950,6 +1951,12 @@ void ExecuteCommandBlock(const char * commands, int len) TasmotaGlobal.backlog_mutex = false; insertPosition++; } +*/ + if ((sCurrentCommand.length() > 0) && (backlog.size() < MAX_BACKLOG)) { + //Insert into backlog + backlog.add(insertPosition, sCurrentCommand); + insertPosition++; + } } return; } diff --git a/tasmota/xdrv_12_home_assistant.ino b/tasmota/xdrv_12_home_assistant.ino index e57981677..efb7a253d 100644 --- a/tasmota/xdrv_12_home_assistant.ino +++ b/tasmota/xdrv_12_home_assistant.ino @@ -128,6 +128,24 @@ const char HASS_DISCOVER_SHUTTER_POS[] PROGMEM = "\"pos_open\":100," "\"set_pos_t\":\"%s%d\""; // cmnd/%topic%/ShutterPosition1 +const char HASS_DISCOVER_SHUTTER_TILT[] PROGMEM = + ",\"tilt_cmd_t\":\"%s%d\"," // cmnd/%topic%/ShutterTilt1 + "\"tilt_opnd_val\":%d," + "\"tilt_clsd_val\":%d"; + +/* +"tilt_clsd_val": "tilt_closed_value", +"tilt_cmd_t": "tilt_command_topic", +"tilt_cmd_tpl": "tilt_command_template", +"tilt_inv_stat": "tilt_invert_state", +"tilt_max": "tilt_max", +"tilt_min": "tilt_min", +"tilt_opnd_val": "tilt_opened_value", +"tilt_opt": "tilt_optimistic", +"tilt_status_t": "tilt_status_topic", +"tilt_status_tpl": "tilt_status_template", +*/ + const char HASS_DISCOVER_SENSOR_HASS_STATUS[] PROGMEM = ",\"json_attr_t\":\"%s\"," "\"unit_of_meas\":\"%%\"," @@ -1020,7 +1038,10 @@ void HAssAnnounceShutters(void) GetTopic_P(stemp1, STAT, TasmotaGlobal.mqtt_topic, PSTR("SHUTTER")); GetTopic_P(stemp2, CMND, TasmotaGlobal.mqtt_topic, PSTR("ShutterPosition")); TryResponseAppend_P(HASS_DISCOVER_SHUTTER_POS, stemp1, i + 1, stemp2, i + 1); - + + GetTopic_P(stemp1, CMND, TasmotaGlobal.mqtt_topic, PSTR("ShutterTilt")); + TryResponseAppend_P(HASS_DISCOVER_SHUTTER_TILT, stemp1, i + 1, Settings->shutter_tilt_config[3][i], Settings->shutter_tilt_config[4][i]); + TryResponseAppend_P(HASS_DISCOVER_DEVICE_INFO_SHORT, unique_id, ESP_getChipId()); TryResponseAppend_P(PSTR("}")); } else { diff --git a/tasmota/xdrv_23_zigbee_2_devices.ino b/tasmota/xdrv_23_zigbee_2_devices.ino index e349691c7..23004f9db 100644 --- a/tasmota/xdrv_23_zigbee_2_devices.ino +++ b/tasmota/xdrv_23_zigbee_2_devices.ino @@ -95,6 +95,8 @@ protected: uint8_t _reserved; // power state if the type supports it }; +Z_Data z_data_unk; // dummy object to mark that data is unknown + Z_Data_Type Z_Data::CharToDataType(char c) { if (c) { if (c == '_') { @@ -676,7 +678,7 @@ const M & Z_Data_Set::find(uint8_t ep) const { // Output: if reference is null, instantiate object and add it at the end of the list template M & Z_Data_Set::addIfNull(M & cur, uint8_t ep) { - if (nullptr == &cur) { + if (&z_data_unk == &cur) { LList_elt * elt = new LList_elt(); elt->val()._endpoint = ep; this->addToLast((LList_elt*)elt); @@ -697,7 +699,7 @@ const Z_Data & Z_Data_Set::find(Z_Data_Type type, uint8_t ep) const { } } } - return *(Z_Data*)nullptr; + return z_data_unk; // mark as unknown } /*********************************************************************************************\ diff --git a/tasmota/xdrv_23_zigbee_2a_devices_impl.ino b/tasmota/xdrv_23_zigbee_2a_devices_impl.ino index 3f4f324df..543916efa 100644 --- a/tasmota/xdrv_23_zigbee_2a_devices_impl.ino +++ b/tasmota/xdrv_23_zigbee_2a_devices_impl.ino @@ -796,7 +796,7 @@ String Z_Devices::dumpCoordinator(void) const { String Z_Devices::dumpDevice(uint32_t dump_mode, const Z_Device & device) const { JsonGeneratorArray json_arr; - if (&device == nullptr) { + if (&device == &device_unk) { if (dump_mode < 2) { // dump light mode for all devices for (const auto & device2 : _devices) { diff --git a/tasmota/xdrv_23_zigbee_3_hue.ino b/tasmota/xdrv_23_zigbee_3_hue.ino index a90966ab9..01b7a5fda 100644 --- a/tasmota/xdrv_23_zigbee_3_hue.ino +++ b/tasmota/xdrv_23_zigbee_3_hue.ino @@ -152,21 +152,22 @@ void ZigbeeHueGroups(String * lights) { } void ZigbeeSendHue(uint16_t shortaddr, uint16_t cluster, uint8_t cmd, const SBuffer & s) { - ZCLMessage zcl(&s ? s.len() : 0); + ZCLMessage zcl(s.len()); zcl.shortaddr = shortaddr; zcl.cluster = cluster; zcl.cmd = cmd; zcl.clusterSpecific = true; zcl.needResponse = true; zcl.direct = false; // discover route - if (&s) { zcl.buf.replace(s); } + zcl.buf.replace(s); zigbeeZCLSendCmd(zcl); } // Send commands // Power On/Off void ZigbeeHuePower(uint16_t shortaddr, bool power) { - ZigbeeSendHue(shortaddr, 0x0006, power ? 1 : 0, *(SBuffer*)nullptr); + SBuffer s(0); + ZigbeeSendHue(shortaddr, 0x0006, power ? 1 : 0, s); zigbee_devices.getShortAddr(shortaddr).setPower(power, 0); } diff --git a/tasmota/xdrv_23_zigbee_9_serial.ino b/tasmota/xdrv_23_zigbee_9_serial.ino index 649f377a4..3eaea4048 100644 --- a/tasmota/xdrv_23_zigbee_9_serial.ino +++ b/tasmota/xdrv_23_zigbee_9_serial.ino @@ -281,7 +281,6 @@ void ZigbeeInputLoop(void) { // Initialize internal structures void ZigbeeInitSerial(void) { -// AddLog(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem1 = %d"), ESP_getFreeHeap()); zigbee.active = false; if (PinUsed(GPIO_ZIGBEE_RX) && PinUsed(GPIO_ZIGBEE_TX)) { AddLog(LOG_LEVEL_DEBUG_MORE, PSTR(D_LOG_ZIGBEE "GPIOs Rx:%d Tx:%d"), Pin(GPIO_ZIGBEE_RX), Pin(GPIO_ZIGBEE_TX)); @@ -293,9 +292,7 @@ void ZigbeeInitSerial(void) uint32_t aligned_buffer = ((uint32_t)TasmotaGlobal.serial_in_buffer + 3) & ~3; zigbee_buffer = new PreAllocatedSBuffer(sizeof(TasmotaGlobal.serial_in_buffer) - 3, (char*) aligned_buffer); } else { -// AddLog(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem2 = %d"), ESP_getFreeHeap()); zigbee_buffer = new SBuffer(ZIGBEE_BUFFER_SIZE); -// AddLog(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem3 = %d"), ESP_getFreeHeap()); } if (PinUsed(GPIO_ZIGBEE_RST)) { @@ -312,7 +309,6 @@ void ZigbeeInitSerial(void) zigbee.state_machine = true; // start the state machine ZigbeeSerial->flush(); } -// AddLog(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem9 = %d"), ESP_getFreeHeap()); } #ifdef USE_ZIGBEE_ZNP diff --git a/tasmota/xdrv_23_zigbee_A_impl.ino b/tasmota/xdrv_23_zigbee_A_impl.ino index bb241d5e4..5f2e412a4 100644 --- a/tasmota/xdrv_23_zigbee_A_impl.ino +++ b/tasmota/xdrv_23_zigbee_A_impl.ino @@ -68,10 +68,6 @@ void (* const ZigbeeCommand[])(void) PROGMEM = { // Initialize internal structures void ZigbeeInit(void) { -// #pragma GCC diagnostic push -// #pragma GCC diagnostic ignored "-Winvalid-offsetof" -// Serial.printf(">>> offset %d %d %d\n", Z_offset(Z_Data_Light, dimmer), Z_offset(Z_Data_Light, x), Z_offset(Z_Data_Thermo, temperature)); -// #pragma GCC diagnostic pop // Check if settings in Flash are set if (PinUsed(GPIO_ZIGBEE_RX) && PinUsed(GPIO_ZIGBEE_TX)) { if (0 == Settings->zb_channel) { @@ -108,11 +104,13 @@ void ZigbeeInit(void) #ifdef USE_ZIGBEE_EZSP // Check the I2C EEprom - Wire.beginTransmission(USE_ZIGBEE_ZBBRIDGE_EEPROM); - uint8_t error = Wire.endTransmission(); - if (0 == error) { - AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS " 0x%02X"), USE_ZIGBEE_ZBBRIDGE_EEPROM); - zigbee.eeprom_present = true; + if (TasmotaGlobal.i2c_enabled) { + Wire.beginTransmission(USE_ZIGBEE_ZBBRIDGE_EEPROM); + uint8_t error = Wire.endTransmission(); + if (0 == error) { + AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE D_ZIGBEE_EEPROM_FOUND_AT_ADDRESS " 0x%02X"), USE_ZIGBEE_ZBBRIDGE_EEPROM); + zigbee.eeprom_present = true; + } } #endif } @@ -1222,7 +1220,7 @@ void CmndZbOccupancy(void) { zigbee_devices.dirty(); } else { const Z_Data_PIR & pir_found = (const Z_Data_PIR&) device.data.find(Z_Data_Type::Z_PIR); - if (&pir_found != nullptr) { + if (&pir_found != &z_data_unk) { occupancy_time = pir_found.getTimeoutSeconds(); } } @@ -1547,7 +1545,7 @@ void CmndZbStatus(void) { dump = zigbee_devices.dumpDevice(XdrvMailbox.index, device); } else { if (XdrvMailbox.index >= 2) { ResponseCmndChar_P(PSTR(D_ZIGBEE_UNKNOWN_DEVICE)); return; } - dump = zigbee_devices.dumpDevice(XdrvMailbox.index, *(Z_Device*)nullptr); + dump = zigbee_devices.dumpDevice(XdrvMailbox.index, device_unk); } } @@ -1992,7 +1990,7 @@ void ZigbeeShow(bool json) // Sensors const Z_Data_Thermo & thermo = device.data.find(); - if (&thermo != nullptr) { + if (&thermo != &z_data_unk) { bool validTemp = thermo.validTemperature(); bool validTempTarget = thermo.validTempTarget(); bool validThSetpoint = thermo.validThSetpoint(); @@ -2027,12 +2025,12 @@ void ZigbeeShow(bool json) // Light, switches and plugs const Z_Data_OnOff & onoff = device.data.find(); - bool onoff_display = (&onoff != nullptr) ? onoff.validPower() : false; + bool onoff_display = (&onoff != &z_data_unk) ? onoff.validPower() : false; const Z_Data_Light & light = device.data.find(); - bool light_display = (&light != nullptr) ? light.validDimmer() : false; + bool light_display = (&light != &z_data_unk) ? light.validDimmer() : false; const Z_Data_Plug & plug = device.data.find(); - bool plug_voltage = (&plug != nullptr) ? plug.validMainsVoltage() : false; - bool plug_power = (&plug != nullptr) ? plug.validMainsPower() : false; + bool plug_voltage = (&plug != &z_data_unk) ? plug.validMainsVoltage() : false; + bool plug_power = (&plug != &z_data_unk) ? plug.validMainsPower() : false; if (onoff_display || light_display || plug_voltage || plug_power) { int8_t channels = device.getLightChannels(); if (channels < 0) { channels = 5; } // if number of channel is unknown, display all known attributes @@ -2040,7 +2038,7 @@ void ZigbeeShow(bool json) if (onoff_display) { WSContentSend_P(PSTR(" %s"), onoff.getPower() ? PSTR(D_ON) : PSTR(D_OFF)); } - if (&light != nullptr) { + if (&light != &z_data_unk) { if (light.validDimmer() && (channels >= 1)) { WSContentSend_P(PSTR(" 🔅 %d%%"), changeUIntScale(light.getDimmer(),0,254,0,100)); } @@ -2108,7 +2106,7 @@ void ZigbeeShowMap(void) { if (zigbee.init_phase) { WSContentSend_P(PSTR(D_ZIGBEE_NOT_STARTED)); } else if (zigbee.mapping_in_progress) { - int32_t mapping_remaining = 1 + (zigbee.mapping_end_time - millis()) / 1000; + int32_t mapping_remaining = 1 + ((int32_t) zigbee.mapping_end_time - millis()) / 1000; if (mapping_remaining < 0) { mapping_remaining = 0; } WSContentSend_P(PSTR(D_ZIGBEE_MAPPING_IN_PROGRESS_SEC), mapping_remaining); WSContentSend_P(msg[ZB_WEB_AUTO_REFRESH]); diff --git a/tasmota/xdrv_27_shutter.ino b/tasmota/xdrv_27_shutter.ino index 9e57438a8..0e1e1e23a 100644 --- a/tasmota/xdrv_27_shutter.ino +++ b/tasmota/xdrv_27_shutter.ino @@ -59,7 +59,7 @@ const char kShutterCommands[] PROGMEM = D_PRFX_SHUTTER "|" D_CMND_SHUTTER_SETHALFWAY "|" D_CMND_SHUTTER_SETCLOSE "|" D_CMND_SHUTTER_SETOPEN "|" D_CMND_SHUTTER_INVERT "|" D_CMND_SHUTTER_CLIBRATION "|" D_CMND_SHUTTER_MOTORDELAY "|" D_CMND_SHUTTER_FREQUENCY "|" D_CMND_SHUTTER_BUTTON "|" D_CMND_SHUTTER_LOCK "|" D_CMND_SHUTTER_ENABLEENDSTOPTIME "|" D_CMND_SHUTTER_INVERTWEBBUTTONS "|" D_CMND_SHUTTER_STOPOPEN "|" D_CMND_SHUTTER_STOPCLOSE "|" D_CMND_SHUTTER_STOPTOGGLE "|" D_CMND_SHUTTER_STOPTOGGLEDIR "|" D_CMND_SHUTTER_STOPPOSITION "|" D_CMND_SHUTTER_INCDEC "|" - D_CMND_SHUTTER_UNITTEST "|"; + D_CMND_SHUTTER_UNITTEST "|" D_CMND_SHUTTER_TILTCONFIG "|" D_CMND_SHUTTER_SETTILT "|"; void (* const ShutterCommand[])(void) PROGMEM = { &CmndShutterOpen, &CmndShutterClose, &CmndShutterToggle, &CmndShutterToggleDir, &CmndShutterStop, &CmndShutterPosition, @@ -67,9 +67,9 @@ void (* const ShutterCommand[])(void) PROGMEM = { &CmndShutterSetHalfway, &CmndShutterSetClose, &CmndShutterSetOpen, &CmndShutterInvert, &CmndShutterCalibration , &CmndShutterMotorDelay, &CmndShutterFrequency, &CmndShutterButton, &CmndShutterLock, &CmndShutterEnableEndStopTime, &CmndShutterInvertWebButtons, &CmndShutterStopOpen, &CmndShutterStopClose, &CmndShutterStopToggle, &CmndShutterStopToggleDir, &CmndShutterStopPosition, &CmndShutterIncDec, - &CmndShutterUnitTest}; + &CmndShutterUnitTest,&CmndShutterTiltConfig,&CmndShutterSetTilt}; - const char JSON_SHUTTER_POS[] PROGMEM = "\"" D_PRFX_SHUTTER "%d\":{\"Position\":%d,\"Direction\":%d,\"Target\":%d}"; + const char JSON_SHUTTER_POS[] PROGMEM = "\"" D_PRFX_SHUTTER "%d\":{\"Position\":%d,\"Direction\":%d,\"Target\":%d,\"Tilt\":%d}"; const char JSON_SHUTTER_BUTTON[] PROGMEM = "\"" D_PRFX_SHUTTER "%d\":{\"Button%d\":%d}"; #include @@ -93,6 +93,12 @@ struct SHUTTER { uint16_t pwm_value; // dutyload of PWM 0..1023 on ESP8266 uint16_t close_velocity_max; // maximum of PWM change during closeing. Defines velocity on opening. Steppers and Servos only int32_t accelerator; // speed of ramp-up, ramp down of shutters with velocity control. Steppers and Servos only + int8_t tilt_config[5]; // tilt_min, tilt_max, duration, tilt_closed_value, tilt_opened_value + int8_t tilt_real_pos; // -90 to 90 + int16_t tilt_target_pos; + int16_t tilt_start_pos; + uint8_t tilt_velocity; // degree rotation per step 0.05sec + uint16_t venetian_delay = 0; // Delay in steps before venetian shutter start physical moving. Based on tilt position } Shutter[MAX_SHUTTERS]; struct SHUTTERGLOBAL { @@ -103,6 +109,7 @@ struct SHUTTERGLOBAL { uint8_t skip_relay_change; // avoid overrun at endstops uint8_t start_reported = 0; // indicates of the shutter start was reported through MQTT JSON uint16_t open_velocity_max = 1000; // maximum of PWM change during opening. Defines velocity on opening. Steppers and Servos only + uint16_t venetian_delay = 0; } ShutterGlobal; #define SHT_DIV_ROUND(__A, __B) (((__A) + (__B)/2) / (__B)) @@ -111,8 +118,9 @@ void ShutterLogPos(uint32_t i) { char stemp2[10]; dtostrfd((float)Shutter[i].time / STEPS_PER_SECOND, 2, stemp2); - AddLog(LOG_LEVEL_DEBUG, PSTR("SHT: Shtr%d Real %d, Start %d, Stop %d, Dir %d, Delay %d, Rtc %s [s], Freq %d, PWM %d"), - i+1, Shutter[i].real_position, Shutter[i].start_position, Shutter[i].target_position, Shutter[i].direction, Shutter[i].motordelay, stemp2, Shutter[i].pwm_velocity, Shutter[i].pwm_value); + AddLog(LOG_LEVEL_DEBUG, PSTR("SHT: Shtr%d Real %d, Start %d, Stop %d, Dir %d, Delay %d, Rtc %s [s], Freq %d, PWM %d, Tilt %d"), + i+1, Shutter[i].real_position, Shutter[i].start_position, Shutter[i].target_position, Shutter[i].direction, Shutter[i].motordelay, stemp2, + Shutter[i].pwm_velocity, Shutter[i].pwm_value,Shutter[i].tilt_real_pos); } void ExecuteCommandPowerShutter(uint32_t device, uint32_t state, uint32_t source) @@ -312,6 +320,14 @@ void ShutterInit(void) Shutter[i].motordelay = Settings->shutter_motordelay[i]; Shutter[i].lastdirection = (50 < Settings->shutter_position[i]) ? 1 : -1; + // Venetian Blind + for (uint8_t k=0; k<5; k++) { + Shutter[i].tilt_config[k] = Settings->shutter_tilt_config[k][i]; + } + Shutter[i].tilt_real_pos = Settings->shutter_tilt_pos[i]; + Shutter[i].tilt_velocity = Shutter[i].tilt_config[2] > 0 ? (Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0])/Shutter[i].tilt_config[2] : 1; + + switch (ShutterGlobal.position_mode) { case SHT_PWM_VALUE: ShutterGlobal.open_velocity_max = RESOLUTION; @@ -323,9 +339,9 @@ void ShutterInit(void) Shutter[i].close_velocity_max = ShutterGlobal.open_velocity_max*Shutter[i].open_time / Shutter[i].close_time; //AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Shtr%d Openvel %d, Closevel: %d"),i, ShutterGlobal.open_velocity_max, Shutter[i].close_velocity_max); - AddLog(LOG_LEVEL_DEBUG, PSTR("SHT: Shtr%d Init. Pos %d, Inverted %d, Locked %d, End stop time enabled %d, webButtons inverted %d"), + AddLog(LOG_LEVEL_DEBUG, PSTR("SHT: Shtr%d Init. Pos %d, Inverted %d, Locked %d, End stop time enabled %d, webButtons inverted %d, delay: %d"), i+1, Shutter[i].real_position, - (Settings->shutter_options[i]&1) ? 1 : 0, (Settings->shutter_options[i]&2) ? 1 : 0, (Settings->shutter_options[i]&4) ? 1 : 0, (Settings->shutter_options[i]&8) ? 1 : 0); + (Settings->shutter_options[i]&1) ? 1 : 0, (Settings->shutter_options[i]&2) ? 1 : 0, (Settings->shutter_options[i]&4) ? 1 : 0, (Settings->shutter_options[i]&8) ? 1 : 0), Shutter[i].motordelay; } else { // terminate loop at first INVALID Shutter[i]. @@ -355,7 +371,7 @@ void ShutterReportPosition(bool always, uint32_t index) } if (i && index == MAX_SHUTTERS) { ResponseAppend_P(PSTR(",")); } uint32_t target = ShutterRealToPercentPosition(Shutter[i].target_position, i); - ResponseAppend_P(JSON_SHUTTER_POS, i+1, (Settings->shutter_options[i] & 1) ? 100-position : position, Shutter[i].direction,(Settings->shutter_options[i] & 1) ? 100-target : target ); + ResponseAppend_P(JSON_SHUTTER_POS, i+1, (Settings->shutter_options[i] & 1) ? 100-position : position, Shutter[i].direction,(Settings->shutter_options[i] & 1) ? 100-target : target, Shutter[i].tilt_real_pos ); } ResponseJsonEnd(); if (always || (TasmotaGlobal.rules_flag.shutter_moving)) { @@ -431,11 +447,12 @@ void ShutterDecellerateForStop(uint8_t i) //prepare for stop PWM Shutter[i].accelerator = 0; Shutter[i].pwm_velocity = 0; + //AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Remain %d count %d -> target %d, dir %d"), missing_steps, RtcSettings.pulse_counter[i], (uint32_t)(Shutter[i].target_position-Shutter[i].start_position)*Shutter[i].direction*ShutterGlobal.open_velocity_max/RESOLUTION/STEPS_PER_SECOND, Shutter[i].direction); while (RtcSettings.pulse_counter[i] < (uint32_t)(Shutter[i].target_position-Shutter[i].start_position)*Shutter[i].direction*ShutterGlobal.open_velocity_max/RESOLUTION/STEPS_PER_SECOND && missing_steps > 0) { } analogWrite(Pin(GPIO_PWM1, i), 0); // removed with 8.3 because of reset caused by watchog Shutter[i].real_position = ShutterCalculatePosition(i); - AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Remain steps %d"), missing_steps); + //AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Remain steps %d"), missing_steps); AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Real %d, Pulsecount %d, tobe %d, Start %d"), Shutter[i].real_position,RtcSettings.pulse_counter[i], (uint32_t)(Shutter[i].target_position-Shutter[i].start_position)*Shutter[i].direction*ShutterGlobal.open_velocity_max/RESOLUTION/STEPS_PER_SECOND, Shutter[i].start_position); } Shutter[i].direction = 0; @@ -501,11 +518,13 @@ void ShutterUpdatePosition(void) XdrvRulesProcess(0); ShutterGlobal.start_reported = 1; } - AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Time %d, cStop %d, cVelo %d, mVelo %d, aVelo %d, mRun %d, aPos %d, nStop %d, Trgt %d, mVelo %d, Dir %d"), - Shutter[i].time, current_stop_way, current_pwm_velocity, velocity_max, Shutter[i].accelerator, min_runtime_ms, current_real_position, - next_possible_stop_position, Shutter[i].target_position, velocity_change_per_step_max, Shutter[i].direction); + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Time %d, cStop %d, cVelo %d, mVelo %d, aVelo %d, mRun %d, aPos %d, aPos2 %d, nStop %d, Trgt %d, mVelo %d, Dir %d, Tilt %d"), + Shutter[i].time, current_stop_way, current_pwm_velocity, velocity_max, Shutter[i].accelerator, min_runtime_ms, current_real_position,Shutter[i].real_position, + next_possible_stop_position, Shutter[i].target_position, velocity_change_per_step_max, Shutter[i].direction,Shutter[i].tilt_real_pos); - if ( Shutter[i].real_position * Shutter[i].direction >= Shutter[i].target_position * Shutter[i].direction || (ShutterGlobal.position_mode == SHT_COUNTER && Shutter[i].accelerator <0 && Shutter[i].pwm_velocity+Shutter[i].accelerator= Shutter[i].target_position * Shutter[i].direction && + Shutter[i].tilt_real_pos * Shutter[i].direction * Shutter[i].tilt_config[2] >= Shutter[i].tilt_target_pos * Shutter[i].direction * Shutter[i].tilt_config[2]) + || (ShutterGlobal.position_mode == SHT_COUNTER && Shutter[i].accelerator <0 && Shutter[i].pwm_velocity+Shutter[i].acceleratorshutter_position[i] = ShutterRealToPercentPosition(Shutter[i].real_position, i); Shutter[i].start_position = Shutter[i].real_position; + // manage venetian blinds + Shutter[i].tilt_target_pos = Settings->shutter_position[i] == 0 ? Shutter[i].tilt_config[0] : Shutter[i].tilt_target_pos; + Shutter[i].tilt_target_pos = Settings->shutter_position[i] == 100 ? Shutter[i].tilt_config[1] : Shutter[i].tilt_target_pos; + if (abs(Shutter[i].tilt_real_pos - Shutter[i].tilt_target_pos) > 10) { + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Tilt does not match akt %d, target %d"),Shutter[i].tilt_real_pos,Shutter[i].tilt_target_pos); + XdrvMailbox.payload = -99; + XdrvMailbox.index = i+1; + CmndShutterPosition(); + return; + } ShutterLogPos(i); // sending MQTT result to broker @@ -555,8 +584,8 @@ void ShutterAllowPreStartProcedure(uint8_t i) void ShutterStartInit(uint32_t i, int32_t direction, int32_t target_pos) { //AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: dir %d, delta1 %d, delta2 %d, grant %d"),direction, (Shutter[i].open_max - Shutter[i].real_position) / Shutter[i].close_velocity, Shutter[i].real_position / Shutter[i].close_velocity, 2+Shutter[i].motordelay); - if ( ( (1 == direction) && ((Shutter[i].open_max - Shutter[i].real_position) / 100 <= 2) ) - || ( (-1 == direction) && (Shutter[i].real_position / Shutter[i].close_velocity <= 2)) ) { + if ( ( ( (1 == direction) && ((Shutter[i].open_max - Shutter[i].real_position) / 100 <= 2)) + || ( (-1 == direction) && (Shutter[i].real_position / Shutter[i].close_velocity <= 2)) ) && abs(Shutter[i].tilt_real_pos-Shutter[i].tilt_target_pos)/Shutter[i].tilt_velocity <= 2) { ShutterGlobal.skip_relay_change = 1; } else { Shutter[i].pwm_velocity = 0; @@ -579,7 +608,14 @@ void ShutterStartInit(uint32_t i, int32_t direction, int32_t target_pos) ShutterGlobal.skip_relay_change = 0; TasmotaGlobal.rules_flag.shutter_moved = 0; ShutterGlobal.start_reported = 0; - //AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: real %d, start %d, counter %d,freq_max %d, dir %d, freq %d"),Shutter[i].real_position, Shutter[i].start_position ,RtcSettings.pulse_counter[i],ShutterGlobal.open_velocity_max , Shutter[i].direction ,ShutterGlobal.open_velocity_max ); + Shutter[i].tilt_real_pos = tmax(tmin(Shutter[i].tilt_real_pos,Shutter[i].tilt_config[1]),Shutter[i].tilt_config[0]); + Shutter[i].tilt_start_pos = Shutter[i].tilt_real_pos; + if (Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0] != 0) { + Shutter[i].venetian_delay = (Shutter[i].direction > 0 ? Shutter[i].tilt_config[1]-Shutter[i].tilt_real_pos : Shutter[i].tilt_real_pos-Shutter[i].tilt_config[0]) * Shutter[i].tilt_config[2] / (Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0]); + //AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: real %d, start %d, counter %d,freq_max %d, dir %d, freq %d"),Shutter[i].real_position, Shutter[i].start_position ,RtcSettings.pulse_counter[i],ShutterGlobal.open_velocity_max , Shutter[i].direction ,ShutterGlobal.open_velocity_max ); + //AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: %d VenetianDelay: %d, Pos: %d, Dir: %d, Delta: %d, Durat: %d, Start: %d, Target: %d"), + //i, Shutter[i].venetian_delay, Shutter[i].tilt_real_pos,Shutter[i].direction,(Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0]), Shutter[i].tilt_config[2],Shutter[i].tilt_start_pos,Shutter[i].tilt_target_pos); + } } //AddLog(LOG_LEVEL_DEBUG, PSTR("SHT: Start shtr%d from %d to %d in direction %d"), i, Shutter[i].start_position, Shutter[i].target_position, Shutter[i].direction); } @@ -595,7 +631,10 @@ int32_t ShutterCalculatePosition(uint32_t i) case SHT_TIME: case SHT_TIME_UP_DOWN: case SHT_TIME_GARAGE: - return Shutter[i].start_position + ( (Shutter[i].time - Shutter[i].motordelay) * (Shutter[i].direction > 0 ? RESOLUTION : -Shutter[i].close_velocity)); + if (Shutter[i].time <= Shutter[i].venetian_delay && Shutter[i].tilt_config[2] > 0) { + Shutter[i].tilt_real_pos = (Shutter[i].tilt_start_pos + ((Shutter[i].direction * (int16_t)Shutter[i].time * (Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0])) / Shutter[i].tilt_config[2])); + } + return Shutter[i].start_position + ( (Shutter[i].time - tmin(Shutter[i].venetian_delay+Shutter[i].motordelay, Shutter[i].time)) * (Shutter[i].direction > 0 ? RESOLUTION : -Shutter[i].close_velocity)); break; case SHT_PWM_TIME: break; @@ -1075,14 +1114,19 @@ void CmndShutterPosition(void) Shutter[index].target_position = ShutterPercentToRealPosition(target_pos_percent, index); //Shutter[i].accelerator[index] = ShutterGlobal.open_velocity_max / ((Shutter[i].motordelay[index] > 0) ? Shutter[i].motordelay[index] : 1); //Shutter[i].target_position[index] = XdrvMailbox.payload < 5 ? Settings->shuttercoeff[2][index] * XdrvMailbox.payload : Settings->shuttercoeff[1][index] * XdrvMailbox.payload + Settings->shuttercoeff[0,index]; - AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: lastsource %d:, real %d, target %d, payload %d"), TasmotaGlobal.last_source, Shutter[index].real_position ,Shutter[index].target_position,target_pos_percent); + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: lastsource %d:, real %d, target %d, tiltreal: %d, tilttarget: %d, payload %d"), TasmotaGlobal.last_source, Shutter[index].real_position ,Shutter[index].target_position,Shutter[index].tilt_real_pos, Shutter[index].tilt_target_pos,target_pos_percent); } - if ( (target_pos_percent >= 0) && (target_pos_percent <= 100) && abs(Shutter[index].target_position - Shutter[index].real_position ) / Shutter[index].close_velocity > 2) { + if ( (target_pos_percent >= 0) && (target_pos_percent <= 100) && + (abs(Shutter[index].target_position - Shutter[index].real_position ) / Shutter[index].close_velocity > 2 || + abs(Shutter[index].tilt_target_pos - Shutter[index].tilt_real_pos ) / Shutter[index].tilt_velocity > 2) ) { if (Settings->shutter_options[index] & 4) { if (0 == target_pos_percent) Shutter[index].target_position -= 1 * RESOLUTION * STEPS_PER_SECOND; if (100 == target_pos_percent) Shutter[index].target_position += 1 * RESOLUTION * STEPS_PER_SECOND; } int8_t new_shutterdirection = Shutter[index].real_position < Shutter[index].target_position ? 1 : -1; + if (Shutter[index].real_position == Shutter[index].target_position) { + new_shutterdirection = Shutter[index].tilt_real_pos < Shutter[index].tilt_target_pos ? 1 : -1; + } if (Shutter[index].direction == -new_shutterdirection) { ShutterPowerOff(index); } @@ -1187,6 +1231,7 @@ void CmndShutterMotorDelay(void) if (XdrvMailbox.data_len > 0) { Settings->shutter_motordelay[XdrvMailbox.index -1] = (uint8_t)(STEPS_PER_SECOND * CharToFloat(XdrvMailbox.data)); ShutterInit(); + //AddLog(LOG_LEVEL_DEBUG, PSTR("SHT: Shtr Init1. realdelay %d"),Shutter[XdrvMailbox.index -1].motordelay); } char time_chr[10]; dtostrfd((float)(Shutter[XdrvMailbox.index -1].motordelay) / STEPS_PER_SECOND, 2, time_chr); @@ -1371,6 +1416,29 @@ void CmndShutterSetHalfway(void) } } +void CmndShutterSetTilt(void) +{ + if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= TasmotaGlobal.shutters_present)) { + if (XdrvMailbox.payload != -99 && XdrvMailbox.payload >= Shutter[XdrvMailbox.index -1].tilt_config[0] && XdrvMailbox.payload <= Shutter[XdrvMailbox.index -1].tilt_config[1] ) { + Shutter[XdrvMailbox.index -1].tilt_target_pos = XdrvMailbox.payload; + XdrvMailbox.payload = -99; + } + if ((XdrvMailbox.data_len > 1) && (XdrvMailbox.payload <= 0)) { + if (!strcasecmp(XdrvMailbox.data,D_CMND_SHUTTER_OPEN) ) { + Shutter[XdrvMailbox.index -1].tilt_target_pos = Shutter[XdrvMailbox.index -1].tilt_config[3]; // open position + XdrvMailbox.payload = -99; + } + if (!strcasecmp(XdrvMailbox.data,D_CMND_SHUTTER_CLOSE) ) { + Shutter[XdrvMailbox.index -1].tilt_target_pos = Shutter[XdrvMailbox.index -1].tilt_config[4]; // close position + XdrvMailbox.payload = -99; + } + } + } + XdrvMailbox.data[0] = '\0'; + ResponseCmndNumber(Shutter[XdrvMailbox.index -1].tilt_target_pos); + CmndShutterPosition(); +} + void CmndShutterFrequency(void) { if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 20000)) { @@ -1387,6 +1455,7 @@ void CmndShutterSetClose(void) { if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= TasmotaGlobal.shutters_present)) { Shutter[XdrvMailbox.index -1].real_position = 0; + Shutter[XdrvMailbox.index -1].tilt_real_pos = Shutter[XdrvMailbox.index -1].tilt_config[0]; ShutterStartInit(XdrvMailbox.index -1, 0, 0); Settings->shutter_position[XdrvMailbox.index -1] = 0; ResponseCmndIdxChar(D_CONFIGURATION_RESET); @@ -1397,6 +1466,7 @@ void CmndShutterSetOpen(void) { if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= TasmotaGlobal.shutters_present)) { Shutter[XdrvMailbox.index -1].real_position = Shutter[XdrvMailbox.index -1].open_max; + Shutter[XdrvMailbox.index -1].tilt_real_pos = Shutter[XdrvMailbox.index -1].tilt_config[1]; ShutterStartInit(XdrvMailbox.index -1, 0, Shutter[XdrvMailbox.index -1].open_max); Settings->shutter_position[XdrvMailbox.index -1] = 100; ResponseCmndIdxChar(D_CONFIGURATION_RESET); @@ -1494,6 +1564,28 @@ void CmndShutterInvertWebButtons(void) { ShutterOptionsSetHelper(8); } +void CmndShutterTiltConfig(void) { + if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= TasmotaGlobal.shutters_present)) { + if (XdrvMailbox.data_len > 0) { + uint8_t i = 0; + char *str_ptr; + char data_copy[strlen(XdrvMailbox.data) +1]; + strncpy(data_copy, XdrvMailbox.data, sizeof(data_copy)); // Duplicate data as strtok_r will modify it. + // Loop through the data string, splitting on ' ' seperators. + for (char *str = strtok_r(data_copy, " ", &str_ptr); str && i < 6; str = strtok_r(nullptr, " ", &str_ptr), i++) { + Shutter[XdrvMailbox.index -1].tilt_config[i] = Settings->shutter_tilt_config[i][XdrvMailbox.index -1] = atoi(str); + } + ShutterInit(); + ResponseCmndIdxChar(XdrvMailbox.data); + } else { + char setting_chr[30] = "0"; + snprintf_P(setting_chr, sizeof(setting_chr), PSTR("SHT:%d %d %d %d %d %d"), XdrvMailbox.index -1,Shutter[XdrvMailbox.index -1].tilt_config[0], Shutter[XdrvMailbox.index -1].tilt_config[1],Shutter[XdrvMailbox.index -1].tilt_config[2],Shutter[XdrvMailbox.index -1].tilt_config[3],Shutter[XdrvMailbox.index -1].tilt_config[4]); + ResponseCmndIdxChar(setting_chr); + } + AddLog(LOG_LEVEL_INFO, PSTR("SHT: TiltConfig %d, min: %d, max %d, runtime %d, close_pos: %d, open_pos: %d"), XdrvMailbox.index ,Shutter[XdrvMailbox.index -1].tilt_config[0], Shutter[XdrvMailbox.index -1].tilt_config[1],Shutter[XdrvMailbox.index -1].tilt_config[2],Shutter[XdrvMailbox.index -1].tilt_config[3],Shutter[XdrvMailbox.index -1].tilt_config[4]); + } +} + /*********************************************************************************************\ * Interface \*********************************************************************************************/ @@ -1524,7 +1616,7 @@ bool Xdrv27(uint8_t function) uint8_t target = (Settings->shutter_options[i] & 1) ? 100 - ShutterRealToPercentPosition(Shutter[i].target_position, i) : ShutterRealToPercentPosition(Shutter[i].target_position, i); ResponseAppend_P(","); - ResponseAppend_P(JSON_SHUTTER_POS, i+1, position, Shutter[i].direction,target); + ResponseAppend_P(JSON_SHUTTER_POS, i+1, position, Shutter[i].direction,target, Shutter[i].tilt_real_pos); #ifdef USE_DOMOTICZ if ((0 == TasmotaGlobal.tele_period) && (0 == i)) { DomoticzSensor(DZ_SHUTTER, position); diff --git a/tasmota/xdrv_35_pwm_dimmer.ino b/tasmota/xdrv_35_pwm_dimmer.ino index 261caa0c7..4b5101818 100644 --- a/tasmota/xdrv_35_pwm_dimmer.ino +++ b/tasmota/xdrv_35_pwm_dimmer.ino @@ -758,7 +758,7 @@ bool Xdrv35(uint8_t function) case FUNC_BUTTON_PRESSED: // If the button is pressed or was just released, ... - if (!XdrvMailbox.payload || button_pressed[XdrvMailbox.index]) { + if (!Settings->flag3.mqtt_buttons && (!XdrvMailbox.payload || button_pressed[XdrvMailbox.index])) { uint32_t button_index = XdrvMailbox.index; uint32_t now = millis(); diff --git a/tasmota/xdrv_39_thermostat.ino b/tasmota/xdrv_39_thermostat.ino index e1a3f21ca..a11db79b8 100644 --- a/tasmota/xdrv_39_thermostat.ino +++ b/tasmota/xdrv_39_thermostat.ino @@ -778,7 +778,7 @@ void ThermostatCalculatePI(uint8_t ctr_output) // Minimum action limiter // If result is less than the minimum action time, adjust to minimum value - if ((Thermostat[ctr_output].time_total_pi <= abs(((uint32_t)Thermostat[ctr_output].time_min_action * 60))) + if ((Thermostat[ctr_output].time_total_pi <= abs(((int32_t)Thermostat[ctr_output].time_min_action * 60))) && (Thermostat[ctr_output].time_total_pi != 0)) { Thermostat[ctr_output].time_total_pi = ((int32_t)Thermostat[ctr_output].time_min_action * 60); } diff --git a/tasmota/xdrv_52_2_berry_native.ino b/tasmota/xdrv_52_2_berry_native.ino index 906db8a9d..e8acc8039 100644 --- a/tasmota/xdrv_52_2_berry_native.ino +++ b/tasmota/xdrv_52_2_berry_native.ino @@ -494,6 +494,49 @@ int32_t be_convert_single_elt(bvm *vm, int32_t idx, const char * arg_type = null return ret; } +extern "C" { + + /*********************************************************************************************\ + * Generalized virtual members for modules + * + * Takes a pointer to be_constint_t array and size + * Returns true if a match was found. In such case the result is on Berry stack + * + * Encoding depend on prefix (which is skipped when matching names): + * 1. `COLOR_WHITE` int value + * 3. `$SYMBOL_OK"` string pointer + * 4. `&seg7_font` comptr + \*********************************************************************************************/ + bool be_module_member(bvm *vm, const be_constint_t * definitions, size_t def_len); + bool be_module_member(bvm *vm, const be_constint_t * definitions, size_t def_len) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc == 1 && be_isstring(vm, 1)) { + const char * needle = be_tostring(vm, 1); + int32_t idx; + + idx = bin_search(needle, &definitions[0].name, sizeof(definitions[0]), def_len); + if (idx >= 0) { + // we did have a match + const char * key = definitions[idx].name; + switch (key[0]) { + // switch depending on the first char of the key, indicating the type + case '$': // string + be_pushstring(vm, (const char*) definitions[idx].value); + break; + case '&': // native function + be_pushntvfunction(vm, (bntvfunc) definitions[idx].value); + break; + default: // int + be_pushint(vm, definitions[idx].value); + break; + } + return true; + } + } + return false; + } +} + /*********************************************************************************************\ * Manage timeout for Berry code * diff --git a/tasmota/xdrv_52_3_berry_gpio.ino b/tasmota/xdrv_52_3_berry_gpio.ino index 9672724dc..f694b6444 100644 --- a/tasmota/xdrv_52_3_berry_gpio.ino +++ b/tasmota/xdrv_52_3_berry_gpio.ino @@ -34,6 +34,18 @@ \*********************************************************************************************/ extern "C" { + #include "berry/include/be_gpio_defines.h" + + // virtual member + int gp_member(bvm *vm); + int gp_member(bvm *vm) { + if (be_module_member(vm, lv_gpio_constants, lv_gpio_constants_size)) { + be_return(vm); + } else { + be_return_nil(vm); + } + } + int gp_pin_mode(bvm *vm); int gp_pin_mode(bvm *vm) { int32_t argc = be_top(vm); // Get the number of arguments @@ -161,7 +173,12 @@ extern "C" { if (argc == 2 && be_isint(vm, 2)) { index = be_toint(vm, 2); } - bool ret = PinUsed(pin, index); + bool ret; + if (pin == GPIO_OPTION_A) { + ret = bitRead(TasmotaGlobal.gpio_optiona.data, index); + } else { + ret = PinUsed(pin, index); + } be_pushbool(vm, ret); be_return(vm); } diff --git a/tasmota/xdrv_52_3_berry_lvgl.ino b/tasmota/xdrv_52_3_berry_lvgl.ino index 1a0629c9d..af435851b 100644 --- a/tasmota/xdrv_52_3_berry_lvgl.ino +++ b/tasmota/xdrv_52_3_berry_lvgl.ino @@ -726,30 +726,16 @@ extern "C" { int lv0_member(bvm *vm); int lv0_member(bvm *vm) { + // first try the standard way + if (be_module_member(vm, lv0_constants, lv0_constants_size)) { + be_return(vm); + } + // try alternative members int32_t argc = be_top(vm); // Get the number of arguments if (argc == 1 && be_isstring(vm, 1)) { const char * needle = be_tostring(vm, 1); int32_t idx; - idx = bin_search(needle, &lv0_constants[0].name, sizeof(lv0_constants[0]), lv0_constants_size); - if (idx >= 0) { - // we did have a match - const char * key = lv0_constants[idx].name; - switch (key[0]) { - // switch depending on the first char of the key, indicating the type - case '$': // string - be_pushstring(vm, (const char*) lv0_constants[idx].value); - break; - case '&': // native function - be_pushntvfunction(vm, (bntvfunc) lv0_constants[idx].value); - break; - default: // int - be_pushint(vm, lv0_constants[idx].value); - break; - } - be_return(vm); - } - // search for a class with this name char cl_prefixed[32]; snprintf(cl_prefixed, sizeof(cl_prefixed), "lv_%s", needle); // we try both actual name and prefixed with `lv_` so both `lv.obj` and `lv.lv_obj` work diff --git a/tasmota/xdrv_52_3_berry_tasmota.ino b/tasmota/xdrv_52_3_berry_tasmota.ino index f98a5820a..573298789 100644 --- a/tasmota/xdrv_52_3_berry_tasmota.ino +++ b/tasmota/xdrv_52_3_berry_tasmota.ino @@ -519,6 +519,14 @@ extern "C" { be_return(vm); } + // Berry: `arvh() -> string` + // ESP object + int32_t l_arch(bvm *vm); + int32_t l_arch(bvm *vm) { + be_pushstring(vm, ESP32_ARCH); + be_return(vm); + } + // Berry: `save(file:string, f:closure) -> bool` int32_t l_save(struct bvm *vm); int32_t l_save(struct bvm *vm) { diff --git a/tasmota/xdrv_52_3_berry_webclient.ino b/tasmota/xdrv_52_3_berry_webclient.ino index e95dcf9d9..b7b56a39e 100644 --- a/tasmota/xdrv_52_3_berry_webclient.ino +++ b/tasmota/xdrv_52_3_berry_webclient.ino @@ -24,6 +24,10 @@ #include #include "HttpClientLight.h" +#include "be_sys.h" + +// Tasmota extension +extern File * be_get_arduino_file(void *hfile); String wc_UrlEncode(const String& text) { const char hex[] = "0123456789ABCDEF"; @@ -298,6 +302,26 @@ extern "C" { be_return(vm); /* return code */ } + int32_t wc_writefile(struct bvm *vm); + int32_t wc_writefile(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 2 && be_isstring(vm, 2)) { + HTTPClientLight * cl = wc_getclient(vm); + const char * fname = be_tostring(vm, 2); + + void * f = be_fopen(fname, "w"); + int ret = -1; + if (f) { + File * fptr = be_get_arduino_file(f); + ret = cl->writeToStream(fptr); + } + be_fclose(f); + be_pushint(vm, ret); + be_return(vm); /* return code */ + } + be_raise(vm, kTypeError, nullptr); + } + int32_t wc_getsize(struct bvm *vm); int32_t wc_getsize(struct bvm *vm) { HTTPClientLight * cl = wc_getclient(vm); diff --git a/tasmota/xdrv_52_9_berry.ino b/tasmota/xdrv_52_9_berry.ino index e8577b7aa..61879a761 100644 --- a/tasmota/xdrv_52_9_berry.ino +++ b/tasmota/xdrv_52_9_berry.ino @@ -24,6 +24,7 @@ #include #include "be_vm.h" +#include "ZipReadFS.h" extern "C" { extern void be_load_custom_libs(bvm *vm); diff --git a/tasmota/xdrv_84_esp32_core2.ino b/tasmota/xdrv_84_esp32_core2.ino index b88814219..b2cfe5720 100644 --- a/tasmota/xdrv_84_esp32_core2.ino +++ b/tasmota/xdrv_84_esp32_core2.ino @@ -265,7 +265,7 @@ void Core2EverySecond(void) { if (core2_globs.ready) { Core2GetADC(); - if (Rtc.utc_time > START_VALID_TIME && core2_globs.tset==false && abs(Rtc.utc_time - Core2GetUtc()) > 3) { + if (Rtc.utc_time > START_VALID_TIME && core2_globs.tset==false && abs((int32_t)Rtc.utc_time - (int32_t)Core2GetUtc()) > 3) { Core2SetUtc(Rtc.utc_time); AddLog(LOG_LEVEL_INFO, PSTR("CR2: Write Time TO BM8563 from NTP (" D_UTC_TIME ") %s, (" D_DST_TIME ") %s, (" D_STD_TIME ") %s"), GetDateAndTime(DT_UTC).c_str(), GetDateAndTime(DT_DST).c_str(), GetDateAndTime(DT_STD).c_str()); diff --git a/tasmota/xsns_21_sgp30.ino b/tasmota/xsns_21_sgp30.ino index ff5445455..e012813cb 100644 --- a/tasmota/xsns_21_sgp30.ino +++ b/tasmota/xsns_21_sgp30.ino @@ -114,14 +114,14 @@ void Sgp30Show(bool json) { if (sgp30_ready) { char abs_hum[33]; - - if (TasmotaGlobal.global_update && (TasmotaGlobal.humidity > 0) && !isnan(TasmotaGlobal.temperature_celsius)) { + bool ahum_available = TasmotaGlobal.global_update && (TasmotaGlobal.humidity > 0) && !isnan(TasmotaGlobal.temperature_celsius); + if (ahum_available) { // has humidity + temperature dtostrfd(sgp30_abshum,4,abs_hum); } if (json) { ResponseAppend_P(PSTR(",\"SGP30\":{\"" D_JSON_ECO2 "\":%d,\"" D_JSON_TVOC "\":%d"), sgp.eCO2, sgp.TVOC); - if (TasmotaGlobal.global_update && TasmotaGlobal.humidity>0 && !isnan(TasmotaGlobal.temperature_celsius)) { + if (ahum_available) { ResponseAppend_P(PSTR(",\"" D_JSON_AHUM "\":%s"),abs_hum); } ResponseJsonEnd(); @@ -131,7 +131,7 @@ void Sgp30Show(bool json) #ifdef USE_WEBSERVER } else { WSContentSend_PD(HTTP_SNS_SGP30, sgp.eCO2, sgp.TVOC); - if (TasmotaGlobal.global_update) { + if (ahum_available) { WSContentSend_PD(HTTP_SNS_AHUM, abs_hum); } #endif diff --git a/tasmota/xsns_87_mcp2515.ino b/tasmota/xsns_87_mcp2515.ino index 801a18c67..3aad58d09 100644 --- a/tasmota/xsns_87_mcp2515.ino +++ b/tasmota/xsns_87_mcp2515.ino @@ -75,7 +75,7 @@ #define BMS_CHARGE_VOLT_MAX 0x8 #define BMS_CHARGE_VOLT_MIN 0x10 #define BMS_CHARGE_AMP_MAX 0x20 - #define BMS_CHARGE_AMP_MIN 0x40 + #define BMS_DISCHARGE_AMP_MAX 0x40 #define BMS_VOLT 0x80 #define BMS_AMP 0x100 #define BMS_TEMP 0x200 @@ -166,7 +166,7 @@ void MCP2515_Read() { bms.maxChargeCurrent = (canFrame.data[3] << 8) | canFrame.data[2]; bms.maxDischargeCurrent = (canFrame.data[5] << 8) | canFrame.data[4]; bms.dischargeVolt = (canFrame.data[7] << 8) | canFrame.data[6]; - bms.setFields |= BMS_CHARGE_VOLT_MAX | BMS_CHARGE_VOLT_MIN | BMS_CHARGE_AMP_MAX | BMS_CHARGE_AMP_MIN; + bms.setFields |= BMS_CHARGE_VOLT_MAX | BMS_CHARGE_VOLT_MIN | BMS_CHARGE_AMP_MAX | BMS_DISCHARGE_AMP_MAX; } else { MCP2515_FrameSizeError(canFrame.can_dlc, canFrame.can_id); } @@ -323,6 +323,23 @@ void MCP2515_Show(bool Json) { ResponseAppend_P(PSTR("%s\"BattTemp\":%d.%d"), jsonFirstField ? PSTR("") : PSTR(","), bms.battTemp / 10, bms.battTemp % 10); jsonFirstField = false; } + if (bms.setFields & BMS_CHARGE_VOLT_MAX) { + ResponseAppend_P(PSTR("%s\"MaxVoltage\":%d.%d"), jsonFirstField ? PSTR("") : PSTR(","), bms.chargeVoltLimit / 10, bms.chargeVoltLimit % 10); + jsonFirstField = false; + } + if (bms.setFields & BMS_CHARGE_VOLT_MIN) { + ResponseAppend_P(PSTR("%s\"MinVoltage\":%d.%d"), jsonFirstField ? PSTR("") : PSTR(","), bms.dischargeVolt / 10, bms.dischargeVolt % 10); + jsonFirstField = false; + } + if (bms.setFields & BMS_CHARGE_AMP_MAX) { + ResponseAppend_P(PSTR("%s\"MaxChargeAmp\":%d.%d"), jsonFirstField ? PSTR("") : PSTR(","), bms.maxChargeCurrent / 10, bms.maxChargeCurrent % 10); + jsonFirstField = false; + } + if (bms.setFields & BMS_DISCHARGE_AMP_MAX) { + ResponseAppend_P(PSTR("%s\"MaxDischargeAmp\":%d.%d"), jsonFirstField ? PSTR("") : PSTR(","), bms.maxDischargeCurrent / 10, bms.maxDischargeCurrent % 10); + jsonFirstField = false; + } + ResponseAppend_P(PSTR("}")); } } else { @@ -333,8 +350,6 @@ void MCP2515_Show(bool Json) { } else { #ifdef MCP2515_BMS_CLIENT if (bms.setFields & BMS_MANUFACTURER) { - char ampStr[6]; - dtostrf((float(bms.battAmp) / 10), 5, 1, ampStr); if (bms.setFields & BMS_SOC) { WSContentSend_PD(HTTP_SNS_SOC, bms.manuf, bms.stateOfCharge); } @@ -345,11 +360,34 @@ void MCP2515_Show(bool Json) { WSContentSend_Voltage(bms.manuf, (float(bms.battVoltage) / 100)); } if (bms.setFields & BMS_AMP) { + char ampStr[6]; + dtostrf((float(bms.battAmp) / 10), 5, 1, ampStr); WSContentSend_PD(PSTR("{s}%s " D_CURRENT "{m}%s " D_UNIT_AMPERE "{e}"), bms.manuf, ampStr); } if (bms.setFields & BMS_TEMP) { WSContentSend_Temp(bms.manuf, ConvertTemp(float(bms.battTemp) / 10)); } + if (bms.setFields & BMS_CHARGE_VOLT_MAX) { + char voltStr[6]; + dtostrf((float(bms.chargeVoltLimit) / 10), 5, 1, voltStr); + WSContentSend_PD(PSTR("{s}%s Max Voltage{m}%s " D_UNIT_AMPERE "{e}"), bms.manuf, voltStr); + } + if (bms.setFields & BMS_CHARGE_VOLT_MIN) { + char voltStr[6]; + dtostrf((float(bms.dischargeVolt) / 10), 5, 1, voltStr); + WSContentSend_PD(PSTR("{s}%s Min Voltage{m}%s " D_UNIT_AMPERE "{e}"), bms.manuf, voltStr); + } + if (bms.setFields & BMS_CHARGE_AMP_MAX) { + char ampStr[6]; + dtostrf((float(bms.maxChargeCurrent) / 10), 5, 1, ampStr); + WSContentSend_PD(PSTR("{s}%s Max Charge Current{m}%s " D_UNIT_AMPERE "{e}"), bms.manuf, ampStr); + } + if (bms.setFields & BMS_DISCHARGE_AMP_MAX) { + char ampStr[6]; + dtostrf((float(bms.maxDischargeCurrent) / 10), 5, 1, ampStr); + WSContentSend_PD(PSTR("{s}%s Max Discharge Current{m}%s " D_UNIT_AMPERE "{e}"), bms.manuf, ampStr); + } + } else { WSContentSend_PD(PSTR("{s}MCP2515 {m} Waiting for data{e}")); } diff --git a/tasmota/xsns_94_hdc2010.ino b/tasmota/xsns_94_hdc2010.ino new file mode 100755 index 000000000..edacc2adf --- /dev/null +++ b/tasmota/xsns_94_hdc2010.ino @@ -0,0 +1,215 @@ +/* + xsns_94_hdc2010.ino - Texas Instruments HDC1080 temperature and humidity sensor support for Tasmota + + Copyright (C) 2021 Luc Boudreau + + 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_HDC2010 + +/*********************************************************************************************\ + * HDC2010 - Temperature and Humidity sensor + * + * Source: Luc Boudreau + * Other sources: Luis Teixeira from the HDC1080 code (GPL3+) + * sSense arduino library (Public Domain) + * + * I2C Address: 0x40 +\*********************************************************************************************/ + +#define XSNS_94 94 +#define XI2C_64 64 // See I2CDEVICES.md + +#define HDC2010_ADDR 0x40 + +// Registers: + +#define HDC2010_REG_TEMP_LSB 0x00 // Temperature register LSB +#define HDC2010_REG_TEMP_MSB 0x01 // Temperature register MSB +#define HDC2010_REG_RH_LSB 0x02 // Humidity register LSB +#define HDC2010_REG_RH_MSB 0x03 // Humidity register MSB +#define HDC2010_REG_INTR_DRDY 0x04 // Interrupt / Data Ready register +#define HDC2010_REG_CONFIG 0x0F // Configuration register +#define HDC2010_REG_RESET 0x0E // Reset register +#define HDC2010_REG_MAN_LSB 0xFC // Manufacturer LSB +#define HDC2010_REG_MAN_MSB 0xFD // Manufacturer MSB +#define HDC2010_REG_DEV_LSB 0xFE // Device ID LSB +#define HDC2010_REG_DEV_MSB 0xFF // Device ID MSB + +// Note: These are bit flipped. Actual IDs need to shift byte 0 and 1 +#define HDC2010_MAN_ID 0x4954 // Manufacturer ID (Texas Instruments) +#define HDC2010_DEV_ID 0xD007 // Device ID (valid for the HDC2010) + +#define HDC2010_CONV_TIME 50 + +struct HDC2010 { + const char* hdc_type_name = "HDC2010"; + uint16_t hdc_manufacturer_id = 0; + uint16_t hdc_device_id = 0; + float hdc_temperature = 0.0; + float hdc_humidity = 0.0; + uint8_t hdc_valid = 0; +} HDC2010; + +/** + * Reads the device ID register. + */ +uint16_t Hdc2010ReadDeviceId(void) { + return I2cRead16(HDC2010_ADDR, HDC2010_REG_DEV_LSB); +} + +/** + * Reads the manufacturer ID register. + */ +uint16_t Hdc2010ReadManufacturerId(void) { + return I2cRead16(HDC2010_ADDR, HDC2010_REG_MAN_LSB); +} + +/** + * The various initialization steps for this sensor. + */ +void Hdc2010Init(void) { + Hdc2010Reset(); + Hdc2010SetMeasurementConfig(); + HDC2010.hdc_valid = 1; +} + +/** + * Performs a temp and humidity read + */ +void Hdc2010Read(void) { + uint8_t byte[2]; + uint16_t temp; + uint16_t humidity; + byte[0] = I2cRead8(HDC2010_ADDR, HDC2010_REG_TEMP_LSB); + byte[1] = I2cRead8(HDC2010_ADDR, HDC2010_REG_TEMP_MSB); + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcRead: temperature raw data: 0x%02x 0x%02x"), byte[0], byte[1]); + temp = (unsigned int)(byte[1]) << 8 | (unsigned int) byte[0]; + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcRead: temperature shifted data: %d"), temp); + HDC2010.hdc_temperature = (float)(temp) * 165 / 65536 - 40; + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcRead: temperature : %f"), hdc_temperature); + + byte[0] = I2cRead8(HDC2010_ADDR, HDC2010_REG_RH_LSB); + byte[1] = I2cRead8(HDC2010_ADDR, HDC2010_REG_RH_MSB); + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcRead: humidity raw data: 0x%02x 0x%02x"), byte[0], byte[1]); + humidity = (unsigned int)byte[1] << 8 | byte[0]; + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcRead: humidity shifted data: %d"), humidity); + HDC2010.hdc_humidity = (float)(humidity)/( 65536 )* 100; + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcRead: humidity : %f"), hdc_humidity); +} + +/** + * Performs a reset of the sensor (slow oper) + */ +void Hdc2010Reset(void) { + uint8_t current = I2cRead8(HDC2010_ADDR, HDC2010_REG_RESET); + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcReset: current reset registry value = %d"), current); + current |= 0x80; + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcReset: new reset registry value = %d"), current); + I2cWrite8(HDC2010_ADDR, HDC2010_REG_RESET, current); + delay(HDC2010_CONV_TIME); +} + +/** + * Detects the sensor + */ +bool Hdc2010Detect(void) { + if (!I2cSetDevice(HDC2010_ADDR)) { return false; } + + HDC2010.hdc_manufacturer_id = Hdc2010ReadManufacturerId(); + HDC2010.hdc_device_id = Hdc2010ReadDeviceId(); + + AddLog(LOG_LEVEL_DEBUG, PSTR("HdcDetect: detected device with manufacturerId = 0x%04X and deviceId = 0x%04X"), HDC2010.hdc_manufacturer_id, HDC2010.hdc_device_id); + + if (HDC2010.hdc_device_id == HDC2010_DEV_ID && HDC2010.hdc_manufacturer_id == HDC2010_MAN_ID) { + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcDetect: adding device HDC2010")); + Hdc2010Init(); + I2cSetActiveFound(HDC2010_ADDR, HDC2010.hdc_type_name); + return true; + } + return false; +} + +/** + * Shows the sensor in the ui + */ +void Hdc2010Show(bool json) { + if (HDC2010.hdc_valid) { + TempHumDewShow(json, (0 == TasmotaGlobal.tele_period), HDC2010.hdc_type_name, HDC2010.hdc_temperature, HDC2010.hdc_humidity); + } +} + +/** + * Configures measurement settings + */ +void Hdc2010SetMeasurementConfig() { + uint8_t resetContents = I2cRead8(HDC2010_ADDR, HDC2010_REG_RESET); + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcSetMeasureRate: current reset registry value = %d"), resetContents); + // Measure twice per second + resetContents |= 0x60; + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcSetMeasureRate: new reset registry value = %d"), resetContents); + I2cWrite8(HDC2010_ADDR, HDC2010_REG_RESET, resetContents); + + uint8_t configContents = I2cRead8(HDC2010_ADDR, HDC2010_REG_CONFIG); + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcSetMeasureRate: current config registry value = %d"), configContents); + // Measure both temp and humidity + configContents |= 0x01; + //AddLog(LOG_LEVEL_DEBUG, PSTR("HdcSetMeasureRate: new config registry value = %d"), configContents); + I2cWrite8(HDC2010_ADDR, HDC2010_REG_CONFIG, configContents); +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xsns94(uint8_t function) +{ + if (!I2cEnabled(XI2C_64)) { + return false; + } + + bool result = false; + + if (FUNC_INIT == function) { + result = Hdc2010Detect(); + } + else if (HDC2010.hdc_device_id) { + switch (function) { + case FUNC_EVERY_SECOND: + if (HDC2010.hdc_valid) { + Hdc2010Read(); + result = true; + } + break; + case FUNC_JSON_APPEND: + if (HDC2010.hdc_valid) { + Hdc2010Show(1); + } + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_SENSOR: + Hdc2010Show(0); + result = true; + break; +#endif // USE_WEBSERVER + } + } + return result; +} + +#endif // USE_HDC2010 +#endif // USE_I2C + diff --git a/tools/decode-status.py b/tools/decode-status.py index 0fef90db9..f6d8a9b36 100755 --- a/tools/decode-status.py +++ b/tools/decode-status.py @@ -259,7 +259,7 @@ a_features = [[ "USE_BM8563","USE_ENERGY_DUMMY","USE_AM2320","USE_T67XX", "USE_MCP2515","USE_TASMESH","USE_WIFI_RANGE_EXTENDER","USE_INFLUXDB", "USE_HRG15","USE_VINDRIKTNING","USE_SCD40","USE_HM330X", - "","","","", + "USE_HDC2010","","","", "","","","", "","","","", "","","","" @@ -290,7 +290,7 @@ else: obj = json.load(fp) def StartDecode(): - print ("\n*** decode-status.py v20211008 by Theo Arends and Jacek Ziolkowski ***") + print ("\n*** decode-status.py v20211111 by Theo Arends and Jacek Ziolkowski ***") # print("Decoding\n{}".format(obj)) diff --git a/tools/lv_gpio/gpio_convert.py b/tools/lv_gpio/gpio_convert.py new file mode 100644 index 000000000..dfa3d78f0 --- /dev/null +++ b/tools/lv_gpio/gpio_convert.py @@ -0,0 +1,101 @@ +import re +import sys + +lv_module_file = "lv_gpio_enum.h" + +out_prefix = "../../tasmota/berry/include/" + +be_gpio_defines = "be_gpio_defines.h" + +lv_module = [] + +def try_int(s): + try: + v = int(s) + return v + except ValueError: + return None + +# parse module file containing numerical constants +with open(lv_module_file) as f: + for l_raw in f: + l_raw = l_raw.strip(" \t\n\r") # remove leading or trailing spaces + if l_raw.startswith("//"): + lv_module.append( [ None, l_raw ] ) # if key in None then add comment line + l_raw = re.sub('//.*$', '', l_raw) # remove trailing comments + l_raw = re.sub('\s+', '', l_raw) # remove all spaces + l_raw = re.sub(',.*$', '', l_raw) # remove comma and anything after it + if (len(l_raw) == 0): continue + + k_v = l_raw.split("=") + if len(k_v) > 2: + print(f"Error: cannot match {l_raw}") + continue + # extract the key name + k = k_v[0] + if k.startswith("_"): + continue # skip any label starting with '_' + k = re.sub('^LV_', '', k) # remove remove any LV_ prefix + v = None + if len(k_v) == 2: # value is included + v = k_v[1] + if k is None or v is None: continue # we skip if key is void or value is void + + if not k.isidentifier(): + print(f"Error: {k} is not an identifier") + continue + + lv_module.append( [k, v] ) # keep as string or None + + + + +sys.stdout = open(out_prefix + be_gpio_defines, 'w') +print("/********************************************************************") +print(" * Generated code, don't edit") +print(" *******************************************************************/") + +print(""" +const be_constint_t lv_gpio_constants[] = { +""") + +lv_module2 = {} +for k_v in lv_module: + (k,v) = k_v + if k is not None: + lv_module2[k] = v + +# print the enums, symbols and functions +# Ex: { "ALIGN_BOTTOM_LEFT", LV_ALIGN_BOTTOM_LEFT }, +# +# Encoding: +# 1. `COLOR_WHITE=0xFFFFFF` enum with explicit value +# 2. `LV_EVENT_ALL` enum with implicit value with same name resolved by C compiler +# 3. `$SYMBOL_OK="\xef\x80\x8c"` if starts with `$` then it's a string +# 4. `&seg7_font=lv0_load_seg7_font` if starts with `&` then it's a native function +# +# We need to sort ignoring the first char if it's not a letter +for k in sorted(lv_module2): + v = lv_module2[k] + # check the type of the value + # if first char is '"' then it's a string and prefix with '$' + # if first char is '&' then it's a function and prefix with '&' + # if no value, then it's an enum, prefix with `LV_` + # otherwise it's an int, leave if unchanged + if v is not None: + v_prefix = "" + if v[0] == '"': v_prefix = "$" + if v[0] == '&': v_prefix = "&" + print(f" {{ \"{v_prefix}{k}\", (int32_t) {v} }},") + else: + print(f" {{ \"{k}\", {k} }},") + +print(""" +}; + +const size_t lv_gpio_constants_size = sizeof(lv_gpio_constants)/sizeof(lv_gpio_constants[0]); +""") + +print("/********************************************************************/") +sys.stdout.close() + diff --git a/tools/lv_gpio/lv_gpio_enum.h b/tools/lv_gpio/lv_gpio_enum.h new file mode 100644 index 000000000..74f6c64f3 --- /dev/null +++ b/tools/lv_gpio/lv_gpio_enum.h @@ -0,0 +1,281 @@ +// Enum values for GPIOs + +LOW +HIGH + +INPUT +OUTPUT +PULLUP +INPUT_PULLUP +PULLDOWN +INPUT_PULLDOWN +OPEN_DRAIN +OUTPUT_OPEN_DRAIN +DAC = -1 // special case + +RISING +FALLING +CHANGE + +NONE = GPIO_NONE +KEY1 = GPIO_KEY1 +KEY1_NP = GPIO_KEY1_NP +KEY1_INV = GPIO_KEY1_INV +KEY1_INV_NP = GPIO_KEY1_INV_NP +SWT1 = GPIO_SWT1 +SWT1_NP = GPIO_SWT1_NP +REL1 = GPIO_REL1 +REL1_INV = GPIO_REL1_INV +LED1 = GPIO_LED1 +LED1_INV = GPIO_LED1_INV +CNTR1 = GPIO_CNTR1 +CNTR1_NP = GPIO_CNTR1_NP +PWM1 = GPIO_PWM1 +PWM1_INV = GPIO_PWM1_INV +BUZZER = GPIO_BUZZER +BUZZER_INV = GPIO_BUZZER_INV +LEDLNK = GPIO_LEDLNK +LEDLNK_INV = GPIO_LEDLNK_INV +I2C_SCL = GPIO_I2C_SCL +I2C_SDA = GPIO_I2C_SDA +SPI_MISO = GPIO_SPI_MISO +SPI_MOSI = GPIO_SPI_MOSI +SPI_CLK = GPIO_SPI_CLK +SPI_CS = GPIO_SPI_CS +SPI_DC = GPIO_SPI_DC +SSPI_MISO = GPIO_SSPI_MISO +SSPI_MOSI = GPIO_SSPI_MOSI +SSPI_SCLK = GPIO_SSPI_SCLK +SSPI_CS = GPIO_SSPI_CS +SSPI_DC = GPIO_SSPI_DC +BACKLIGHT = GPIO_BACKLIGHT +OLED_RESET = GPIO_OLED_RESET +IRSEND = GPIO_IRSEND +IRRECV = GPIO_IRRECV +RFSEND = GPIO_RFSEND +RFRECV = GPIO_RFRECV +DHT11 = GPIO_DHT11 +DHT22 = GPIO_DHT22 +SI7021 = GPIO_SI7021 +DHT11_OUT = GPIO_DHT11_OUT +DSB = GPIO_DSB +DSB_OUT = GPIO_DSB_OUT +WS2812 = GPIO_WS2812 +MHZ_TXD = GPIO_MHZ_TXD +MHZ_RXD = GPIO_MHZ_RXD +PZEM0XX_TX = GPIO_PZEM0XX_TX +PZEM004_RX = GPIO_PZEM004_RX +PZEM016_RX = GPIO_PZEM016_RX +PZEM017_RX = GPIO_PZEM017_RX +SAIR_TX = GPIO_SAIR_TX +SAIR_RX = GPIO_SAIR_RX +PMS5003_TX = GPIO_PMS5003_TX +PMS5003_RX = GPIO_PMS5003_RX +SDS0X1_TX = GPIO_SDS0X1_TX +SDS0X1_RX = GPIO_SDS0X1_RX +SBR_TX = GPIO_SBR_TX +SBR_RX = GPIO_SBR_RX +SR04_TRIG = GPIO_SR04_TRIG +SR04_ECHO = GPIO_SR04_ECHO +SDM120_TX = GPIO_SDM120_TX +SDM120_RX = GPIO_SDM120_RX +SDM630_TX = GPIO_SDM630_TX +SDM630_RX = GPIO_SDM630_RX +TM1638CLK = GPIO_TM1638CLK +TM1638DIO = GPIO_TM1638DIO +TM1638STB = GPIO_TM1638STB +MP3_DFR562 = GPIO_MP3_DFR562 +HX711_SCK = GPIO_HX711_SCK +HX711_DAT = GPIO_HX711_DAT +TX2X_TXD_BLACK = GPIO_TX2X_TXD_BLACK +TUYA_TX = GPIO_TUYA_TX +TUYA_RX = GPIO_TUYA_RX +MGC3130_XFER = GPIO_MGC3130_XFER +MGC3130_RESET = GPIO_MGC3130_RESET +RF_SENSOR = GPIO_RF_SENSOR +AZ_TXD = GPIO_AZ_TXD +AZ_RXD = GPIO_AZ_RXD +MAX31855CS = GPIO_MAX31855CS +MAX31855CLK = GPIO_MAX31855CLK +MAX31855DO = GPIO_MAX31855DO +NRG_SEL = GPIO_NRG_SEL +NRG_SEL_INV = GPIO_NRG_SEL_INV +NRG_CF1 = GPIO_NRG_CF1 +HLW_CF = GPIO_HLW_CF +HJL_CF = GPIO_HJL_CF +MCP39F5_TX = GPIO_MCP39F5_TX +MCP39F5_RX = GPIO_MCP39F5_RX +MCP39F5_RST = GPIO_MCP39F5_RST +PN532_TXD = GPIO_PN532_TXD +PN532_RXD = GPIO_PN532_RXD +SM16716_CLK = GPIO_SM16716_CLK +SM16716_DAT = GPIO_SM16716_DAT +SM16716_SEL = GPIO_SM16716_SEL +DI = GPIO_DI +DCKI = GPIO_DCKI +CSE7766_TX = GPIO_CSE7766_TX +CSE7766_RX = GPIO_CSE7766_RX +ARIRFRCV = GPIO_ARIRFRCV +ARIRFSEL = GPIO_ARIRFSEL +TXD = GPIO_TXD +RXD = GPIO_RXD +ROT1A = GPIO_ROT1A +ROT1B = GPIO_ROT1B +ADC_JOY = GPIO_ADC_JOY +SSPI_MAX31865_CS1 = GPIO_SSPI_MAX31865_CS1 +HRE_CLOCK = GPIO_HRE_CLOCK +HRE_DATA = GPIO_HRE_DATA +ADE7953_IRQ = GPIO_ADE7953_IRQ +SOLAXX1_TX = GPIO_SOLAXX1_TX +SOLAXX1_RX = GPIO_SOLAXX1_RX +ZIGBEE_TX = GPIO_ZIGBEE_TX +ZIGBEE_RX = GPIO_ZIGBEE_RX +RDM6300_RX = GPIO_RDM6300_RX +IBEACON_TX = GPIO_IBEACON_TX +IBEACON_RX = GPIO_IBEACON_RX +A4988_DIR = GPIO_A4988_DIR +A4988_STP = GPIO_A4988_STP +A4988_ENA = GPIO_A4988_ENA +A4988_MS1 = GPIO_A4988_MS1 +OUTPUT_HI = GPIO_OUTPUT_HI +OUTPUT_LO = GPIO_OUTPUT_LO +DDS2382_TX = GPIO_DDS2382_TX +DDS2382_RX = GPIO_DDS2382_RX +DDSU666_TX = GPIO_DDSU666_TX +DDSU666_RX = GPIO_DDSU666_RX +SM2135_CLK = GPIO_SM2135_CLK +SM2135_DAT = GPIO_SM2135_DAT +DEEPSLEEP = GPIO_DEEPSLEEP +EXS_ENABLE = GPIO_EXS_ENABLE +TASMOTACLIENT_TXD = GPIO_TASMOTACLIENT_TXD +TASMOTACLIENT_RXD = GPIO_TASMOTACLIENT_RXD +TASMOTACLIENT_RST = GPIO_TASMOTACLIENT_RST +TASMOTACLIENT_RST_INV = GPIO_TASMOTACLIENT_RST_INV +HPMA_RX = GPIO_HPMA_RX +HPMA_TX = GPIO_HPMA_TX +GPS_RX = GPIO_GPS_RX +GPS_TX = GPIO_GPS_TX +HM10_RX = GPIO_HM10_RX +HM10_TX = GPIO_HM10_TX +LE01MR_RX = GPIO_LE01MR_RX +LE01MR_TX = GPIO_LE01MR_TX +CC1101_GDO0 = GPIO_CC1101_GDO0 +CC1101_GDO2 = GPIO_CC1101_GDO2 +HRXL_RX = GPIO_HRXL_RX +ELECTRIQ_MOODL_TX = GPIO_ELECTRIQ_MOODL_TX +AS3935 = GPIO_AS3935 +ADC_INPUT = GPIO_ADC_INPUT +ADC_TEMP = GPIO_ADC_TEMP +ADC_LIGHT = GPIO_ADC_LIGHT +ADC_BUTTON = GPIO_ADC_BUTTON +ADC_BUTTON_INV = GPIO_ADC_BUTTON_INV +ADC_RANGE = GPIO_ADC_RANGE +ADC_CT_POWER = GPIO_ADC_CT_POWER +WEBCAM_PWDN = GPIO_WEBCAM_PWDN +WEBCAM_RESET = GPIO_WEBCAM_RESET +WEBCAM_XCLK = GPIO_WEBCAM_XCLK +WEBCAM_SIOD = GPIO_WEBCAM_SIOD +WEBCAM_SIOC = GPIO_WEBCAM_SIOC +WEBCAM_DATA = GPIO_WEBCAM_DATA +WEBCAM_VSYNC = GPIO_WEBCAM_VSYNC +WEBCAM_HREF = GPIO_WEBCAM_HREF +WEBCAM_PCLK = GPIO_WEBCAM_PCLK +WEBCAM_PSCLK = GPIO_WEBCAM_PSCLK +WEBCAM_HSD = GPIO_WEBCAM_HSD +WEBCAM_PSRCS = GPIO_WEBCAM_PSRCS +BOILER_OT_RX = GPIO_BOILER_OT_RX +BOILER_OT_TX = GPIO_BOILER_OT_TX +WINDMETER_SPEED = GPIO_WINDMETER_SPEED +KEY1_TC = GPIO_KEY1_TC +BL0940_RX = GPIO_BL0940_RX +TCP_TX = GPIO_TCP_TX +TCP_RX = GPIO_TCP_RX +ETH_PHY_POWER = GPIO_ETH_PHY_POWER +ETH_PHY_MDC = GPIO_ETH_PHY_MDC +ETH_PHY_MDIO = GPIO_ETH_PHY_MDIO +TELEINFO_RX = GPIO_TELEINFO_RX +TELEINFO_ENABLE = GPIO_TELEINFO_ENABLE +LMT01 = GPIO_LMT01 +IEM3000_TX = GPIO_IEM3000_TX +IEM3000_RX = GPIO_IEM3000_RX +ZIGBEE_RST = GPIO_ZIGBEE_RST +DYP_RX = GPIO_DYP_RX +MIEL_HVAC_TX = GPIO_MIEL_HVAC_TX +MIEL_HVAC_RX = GPIO_MIEL_HVAC_RX +WE517_TX = GPIO_WE517_TX +WE517_RX = GPIO_WE517_RX +AS608_TX = GPIO_AS608_TX +AS608_RX = GPIO_AS608_RX +SHELLY_DIMMER_BOOT0 = GPIO_SHELLY_DIMMER_BOOT0 +SHELLY_DIMMER_RST_INV = GPIO_SHELLY_DIMMER_RST_INV +RC522_RST = GPIO_RC522_RST +P9813_CLK = GPIO_P9813_CLK +P9813_DAT = GPIO_P9813_DAT +OPTION_A = GPIO_OPTION_A +FTC532 = GPIO_FTC532 +RC522_CS = GPIO_RC522_CS +NRF24_CS = GPIO_NRF24_CS +NRF24_DC = GPIO_NRF24_DC +ILI9341_CS = GPIO_ILI9341_CS +ILI9341_DC = GPIO_ILI9341_DC +ILI9488_CS = GPIO_ILI9488_CS +EPAPER29_CS = GPIO_EPAPER29_CS +EPAPER42_CS = GPIO_EPAPER42_CS +SSD1351_CS = GPIO_SSD1351_CS +RA8876_CS = GPIO_RA8876_CS +ST7789_CS = GPIO_ST7789_CS +ST7789_DC = GPIO_ST7789_DC +SSD1331_CS = GPIO_SSD1331_CS +SSD1331_DC = GPIO_SSD1331_DC +SDCARD_CS = GPIO_SDCARD_CS +ROT1A_NP = GPIO_ROT1A_NP +ROT1B_NP = GPIO_ROT1B_NP +ADC_PH = GPIO_ADC_PH +BS814_CLK = GPIO_BS814_CLK +BS814_DAT = GPIO_BS814_DAT +WIEGAND_D0 = GPIO_WIEGAND_D0 +WIEGAND_D1 = GPIO_WIEGAND_D1 +NEOPOOL_TX = GPIO_NEOPOOL_TX +NEOPOOL_RX = GPIO_NEOPOOL_RX +SDM72_TX = GPIO_SDM72_TX +SDM72_RX = GPIO_SDM72_RX +TM1637CLK = GPIO_TM1637CLK +TM1637DIO = GPIO_TM1637DIO +PROJECTOR_CTRL_TX = GPIO_PROJECTOR_CTRL_TX +PROJECTOR_CTRL_RX = GPIO_PROJECTOR_CTRL_RX +SSD1351_DC = GPIO_SSD1351_DC +XPT2046_CS = GPIO_XPT2046_CS +CSE7761_TX = GPIO_CSE7761_TX +CSE7761_RX = GPIO_CSE7761_RX +VL53L0X_XSHUT1 = GPIO_VL53L0X_XSHUT1 +MAX7219CLK = GPIO_MAX7219CLK +MAX7219DIN = GPIO_MAX7219DIN +MAX7219CS = GPIO_MAX7219CS +TFMINIPLUS_TX = GPIO_TFMINIPLUS_TX +TFMINIPLUS_RX = GPIO_TFMINIPLUS_RX +ZEROCROSS = GPIO_ZEROCROSS +HALLEFFECT = GPIO_HALLEFFECT +EPD_DATA = GPIO_EPD_DATA +INPUT = GPIO_INPUT +KEY1_PD = GPIO_KEY1_PD +KEY1_INV_PD = GPIO_KEY1_INV_PD +SWT1_PD = GPIO_SWT1_PD +I2S_OUT_DATA = GPIO_I2S_OUT_DATA +I2S_OUT_CLK = GPIO_I2S_OUT_CLK +I2S_OUT_SLCT = GPIO_I2S_OUT_SLCT +I2S_IN_DATA = GPIO_I2S_IN_DATA +I2S_IN_CLK = GPIO_I2S_IN_CLK +I2S_IN_SLCT = GPIO_I2S_IN_SLCT +INTERRUPT = GPIO_INTERRUPT + +MCP2515_CS = GPIO_MCP2515_CS + +HRG15_TX = GPIO_HRG15_TX, HRG15_RX = GPIO_HRG15_RX +VINDRIKTNING_RX = GPIO_VINDRIKTNING_RX +BL0939_RX = GPIO_BL0939_RX +BL0942_RX = GPIO_BL0942_RX +HM330X_SET = GPIO_HM330X_SET +HEARTBEAT = GPIO_HEARTBEAT +HEARTBEAT_INV = GPIO_HEARTBEAT_INV + +SENSOR_END = GPIO_SENSOR_END