diff --git a/.gitattributes b/.gitattributes
index 745bc27a1..d8f6caa99 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -15,3 +15,6 @@
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
+
+# Apply Python syntax highlighting to berry (.be) files
+*.be linguist-language=Python
diff --git a/.github/workflows/build_all_the_things.yml b/.github/workflows/build_all_the_things.yml
index a802af99d..1f9c6bc24 100644
--- a/.github/workflows/build_all_the_things.yml
+++ b/.github/workflows/build_all_the_things.yml
@@ -30,6 +30,7 @@ jobs:
- tasmota-zbbridge
- tasmota-zigbee
- tasmota32
+ - tasmota32-webcam
- tasmota32-bluetooth
- tasmota32-core2
- tasmota32-display
diff --git a/.gitpod.yml b/.gitpod.yml
index 5da99208f..50d9a86d9 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -7,7 +7,6 @@ image:
vscode:
extensions:
- - eamodio.gitlens
- Atishay-Jain.All-Autocomplete
- CoenraadS.bracket-pair-colorizer
- esbenp.prettier-vscode
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ff6a13515..626febe14 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,17 +6,21 @@ All notable changes to this project will be documented in this file.
## [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/RELEASENOTES.md b/RELEASENOTES.md
index e1c2708a5..12187d41b 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -102,17 +102,22 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
## Changelog v10.0.0.1
### 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)
### 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-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/default/Unishox-1.0-shadinger/src/unishox.cpp b/lib/default/Unishox-1.0-shadinger/src/unishox.cpp
index 51c9d4701..1c0fd7142 100644
--- a/lib/default/Unishox-1.0-shadinger/src/unishox.cpp
+++ b/lib/default/Unishox-1.0-shadinger/src/unishox.cpp
@@ -76,13 +76,6 @@ static char sets[][11] PROGMEM =
{'.', ',', '-', '/', '?', '+', ' ', '(', ')', '$', '@'},
{';', '#', ':', '<', '^', '*', '"', '{', '}', '[', ']'},
{'=', '%', '\'', '>', '&', '_', '!', '\\', '|', '~', '`'}};
- // {{ 0, ' ', 'e', 0, 't', 'a', 'o', 'i', 'n', 's', 'r'},
- // { 0, 'l', 'c', 'd', 'h', 'u', 'p', 'm', 'b', 'g', 'w'},
- // {'f', 'y', 'v', 'k', 'q', 'j', 'x', 'z', 0, 0, 0},
- // { 0, '9', '0', '1', '2', '3', '4', '5', '6', '7', '8'},
- // {'.', ',', '-', '/', '=', '+', ' ', '(', ')', '$', '%'},
- // {'&', ';', ':', '<', '>', '*', '"', '{', '}', '[', ']'},
- // {'@', '?', '\'', '^', '#', '_', '!', '\\', '|', '~', '`'}};
// Decoder is designed for using less memory, not speed
// Decode lookup table for code index and length
@@ -117,28 +110,16 @@ static const uint16_t DICT_CODE = 0x0000;
static const uint16_t DICT_CODE_LEN = 5;
static const uint16_t DICT_OTHER_CODE = 0x0000; // not used
static const uint16_t DICT_OTHER_CODE_LEN = 6;
-// const uint16_t RPT_CODE = 0x2370;
-// const uint16_t RPT_CODE_LEN = 13;
static const uint16_t RPT_CODE_TASMOTA = 0x3780;
static const uint16_t RPT_CODE_TASMOTA_LEN = 10;
static const uint16_t BACK2_STATE1_CODE = 0x2000; // 0010 = back to lower case
static const uint16_t BACK2_STATE1_CODE_LEN = 4;
static const uint16_t BACK_FROM_UNI_CODE = 0xFE00;
static const uint16_t BACK_FROM_UNI_CODE_LEN = 8;
-// const uint16_t CRLF_CODE = 0x3780;
-// const uint16_t CRLF_CODE_LEN = 10;
static const uint16_t LF_CODE = 0x3700;
static const uint16_t LF_CODE_LEN = 9;
static const uint16_t TAB_CODE = 0x2400;
static const uint16_t TAB_CODE_LEN = 7;
-// const uint16_t UNI_CODE = 0x8000; // Unicode disabled
-// const uint16_t UNI_CODE_LEN = 3;
-// const uint16_t UNI_STATE_SPL_CODE = 0xF800;
-// const uint16_t UNI_STATE_SPL_CODE_LEN = 5;
-// const uint16_t UNI_STATE_DICT_CODE = 0xFC00;
-// const uint16_t UNI_STATE_DICT_CODE_LEN = 7;
-// const uint16_t CONT_UNI_CODE = 0x2800;
-// const uint16_t CONT_UNI_CODE_LEN = 7;
static const uint16_t ALL_UPPER_CODE = 0x2200;
static const uint16_t ALL_UPPER_CODE_LEN = 8;
static const uint16_t SW2_STATE2_CODE = 0x3800;
@@ -147,8 +128,6 @@ static const uint16_t ST2_SPC_CODE = 0x3B80;
static const uint16_t ST2_SPC_CODE_LEN = 11;
static const uint16_t BIN_CODE_TASMOTA = 0x8000;
static const uint16_t BIN_CODE_TASMOTA_LEN = 3;
-// const uint16_t BIN_CODE = 0x2000;
-// const uint16_t BIN_CODE_LEN = 9;
#define NICE_LEN 5
@@ -467,9 +446,9 @@ void Unishox::decodeRepeat(void) {
uint32_t dict_len = readCount() + NICE_LEN;
uint32_t dist = readCount() + NICE_LEN - 1;
if (ol + dict_len <= len_out) {
- memcpy(out + ol, out + ol - dist, dict_len);
- ol += dict_len;
-}
+ memcpy(out + ol, out + ol - dist, dict_len);
+ ol += dict_len;
+ }
}
int32_t Unishox::unishox_decompress(const char *p_in, size_t p_len, char *p_out, size_t p_len_out) {
@@ -485,10 +464,10 @@ int32_t Unishox::unishox_decompress(const char *p_in, size_t p_len, char *p_out,
dstate = SHX_SET1;
is_all_upper = 0;
- out[ol] = 0;
+ if (out) out[ol] = 0;
// while ((byte_no << 3) + bit_no - 8 < len) {
while (!in_eof) {
- if (ol >= len_out) {
+ if (out && ol >= len_out) {
break;
}
int32_t h, v;
@@ -535,7 +514,8 @@ int32_t Unishox::unishox_decompress(const char *p_in, size_t p_len, char *p_out,
if (v == 0 && h == SHX_SET1A) {
if (is_upper) {
- out[ol++] = 255 - readCount(); // binary
+ if (out) out[ol] = 255 - readCount(); // binary
+ ol++;
} else {
decodeRepeat(); // dist
}
@@ -544,7 +524,8 @@ int32_t Unishox::unishox_decompress(const char *p_in, size_t p_len, char *p_out,
if (h == SHX_SET1 && v == 3) {
// was Unicode, will do Binary instead
- out[ol++] = 255 - readCount(); // binary
+ if (out) out[ol] = 255 - readCount(); // binary
+ ol++;
continue;
}
if (h < 7 && v < 11) // TODO: are these the actual limits? Not 11x7 ?
@@ -557,17 +538,22 @@ int32_t Unishox::unishox_decompress(const char *p_in, size_t p_len, char *p_out,
c = '\t'; // If UpperCase Space, change to TAB
if (h == SHX_SET1B) {
if (8 == v) { // was LF or RPT, now only LF
- out[ol++] = '\n';
+ if (out) out[ol] = '\n';
+ ol++;
continue;
}
if (9 == v) { // was CRLF, now RPT
uint32_t count = readCount() + 4;
- if (ol + count >= len_out) {
+ if (out && ol + count >= len_out) {
return -1; // overflow
}
- char rpt_c = out[ol - 1];
- while (count--)
- out[ol++] = rpt_c;
+ if (out) {
+ char rpt_c = out[ol - 1];
+ while (count--)
+ out[ol++] = rpt_c;
+ } else {
+ ol += count;
+ }
continue;
}
if (10 == v) {
@@ -576,10 +562,11 @@ int32_t Unishox::unishox_decompress(const char *p_in, size_t p_len, char *p_out,
}
}
// Serial.printf(">>>>>>>>>>>>>>>>>>>>>> Out = %c\n", c);
- out[ol++] = c;
+ if (out) out[ol] = c;
+ ol++;
}
- if (ol > len_out) {
+ if (out && ol > len_out) {
return -1; // overflow
} else {
return ol;
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/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 328b1e02c..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,8 +129,8 @@ 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)),
- ( &(const binstruction[18]) { /* code */
+ ((bstring*) &be_const_str_input),
+ ( &(const binstruction[20]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0xB80E0200, // 0001 GETNGBL R3 K1
0x8C0C0702, // 0002 GETMET R3 R3 K2
@@ -138,17 +138,19 @@ be_local_closure(lvgl_event_dispatch, /* name */
0x5C1C0200, // 0004 MOVE R7 R1
0x7C140400, // 0005 CALL R5 2
0x7C0C0400, // 0006 CALL R3 2
- 0x88100704, // 0007 GETMBR R4 R3 K4
- 0x88140105, // 0008 GETMBR R5 R0 K5
- 0x94140A04, // 0009 GETIDX R5 R5 R4
- 0x8C180106, // 000A GETMET R6 R0 K6
- 0x5C200800, // 000B MOVE R8 R4
- 0x7C180400, // 000C CALL R6 2
- 0x5C1C0A00, // 000D MOVE R7 R5
- 0x5C200C00, // 000E MOVE R8 R6
- 0x5C240600, // 000F MOVE R9 R3
- 0x7C1C0400, // 0010 CALL R7 2
- 0x80000000, // 0011 RET 0
+ 0x60100009, // 0007 GETGBL R4 G9
+ 0x88140704, // 0008 GETMBR R5 R3 K4
+ 0x7C100200, // 0009 CALL R4 1
+ 0x88140105, // 000A GETMBR R5 R0 K5
+ 0x94140A04, // 000B GETIDX R5 R5 R4
+ 0x8C180106, // 000C GETMET R6 R0 K6
+ 0x5C200800, // 000D MOVE R8 R4
+ 0x7C180400, // 000E CALL R6 2
+ 0x5C1C0A00, // 000F MOVE R7 R5
+ 0x5C200C00, // 0010 MOVE R8 R6
+ 0x5C240600, // 0011 MOVE R9 R3
+ 0x7C1C0400, // 0012 CALL R7 2
+ 0x80000000, // 0013 RET 0
})
)
);
@@ -178,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
@@ -226,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
@@ -274,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
@@ -296,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
@@ -364,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
@@ -416,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
@@ -441,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
@@ -466,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
@@ -496,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
@@ -577,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
@@ -632,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
@@ -751,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_module.c b/lib/libesp32/Berry/default/be_lvgl_module.c
index 5facd5586..890efd2ff 100644
--- a/lib/libesp32/Berry/default/be_lvgl_module.c
+++ b/lib/libesp32/Berry/default/be_lvgl_module.c
@@ -99,6 +99,7 @@ const lvbe_call_c_t lv_func[] = {
{ "theme_get_font_normal", (void*) &lv_theme_get_font_normal, "lv.lv_font", "(lv.lv_obj)" },
{ "theme_get_font_small", (void*) &lv_theme_get_font_small, "lv.lv_font", "(lv.lv_obj)" },
{ "theme_get_from_obj", (void*) &lv_theme_get_from_obj, "lv.lv_theme", "(lv.lv_obj)" },
+ { "theme_mono_init", (void*) &lv_theme_mono_init, "lv.lv_theme", "(lv.lv_disp)b(lv.lv_font)" },
{ "theme_openhasp_init", (void*) &lv_theme_openhasp_init, "lv.lv_theme", "(lv.lv_disp)(lv.lv_color)(lv.lv_color)b(lv.lv_font)" },
{ "theme_openhasp_is_inited", (void*) &lv_theme_openhasp_is_inited, "b", "" },
{ "theme_set_apply_cb", (void*) &lv_theme_set_apply_cb, "", "(lv.lv_theme)^lv_theme_apply_cb^" },
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_modtab.c b/lib/libesp32/Berry/default/be_modtab.c
index 3ce4cecd3..46b5528a9 100644
--- a/lib/libesp32/Berry/default/be_modtab.c
+++ b/lib/libesp32/Berry/default/be_modtab.c
@@ -32,6 +32,7 @@ be_extern_native_module(energy);
be_extern_native_module(webserver);
be_extern_native_module(flash);
be_extern_native_module(path);
+be_extern_native_module(unishox);
#ifdef USE_LVGL
be_extern_native_module(lv);
#endif // USE_LVGL
@@ -89,6 +90,10 @@ BERRY_LOCAL const bntvmodule* const be_module_table[] = {
&be_native_module(light),
#endif
+#ifdef USE_UNISHOX_COMPRESSION
+ &be_native_module(unishox),
+#endif // USE_UNISHOX_COMPRESSION
+
#ifdef USE_LVGL
&be_native_module(lv),
#endif // USE_LVGL
diff --git a/lib/libesp32/Berry/default/be_persist_lib.c b/lib/libesp32/Berry/default/be_persist_lib.c
index 3c4c17f28..0f42adb88 100644
--- a/lib/libesp32/Berry/default/be_persist_lib.c
+++ b/lib/libesp32/Berry/default/be_persist_lib.c
@@ -31,7 +31,7 @@ be_local_closure(save, /* name */
/* K7 */ be_nested_string("_dirty", 283846766, 6),
}),
(be_nested_const_str("save", -855671224, 4)),
- (be_nested_const_str("input", -103256197, 5)),
+ ((bstring*) &be_const_str_input),
( &(const binstruction[30]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x4C080000, // 0001 LDNIL R2
@@ -87,7 +87,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
@@ -121,8 +121,8 @@ be_local_closure(init, /* name */
/* 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)),
+ ((bstring*) &be_const_str_init),
+ ((bstring*) &be_const_str_input),
( &(const binstruction[20]) { /* code */
0x90020101, // 0000 SETMBR R0 K0 K1
0x6008000F, // 0001 GETGBL R2 G15
@@ -176,7 +176,7 @@ be_local_closure(load, /* name */
/* K9 */ be_nested_string("_dirty", 283846766, 6),
}),
(be_nested_const_str("load", -435725847, 4)),
- (be_nested_const_str("input", -103256197, 5)),
+ ((bstring*) &be_const_str_input),
( &(const binstruction[37]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0xA40A0200, // 0001 IMPORT R2 K1
@@ -239,7 +239,7 @@ be_local_closure(has, /* name */
/* K1 */ be_nested_string("has", -306245661, 3),
}),
(be_nested_const_str("has", -306245661, 3)),
- (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
@@ -270,7 +270,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 +302,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
@@ -334,7 +334,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
@@ -367,7 +367,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
@@ -422,7 +422,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
diff --git a/lib/libesp32/Berry/default/be_tasmotalib.c b/lib/libesp32/Berry/default/be_tasmotalib.c
index 0951e1d21..a1094079e 100644
--- a/lib/libesp32/Berry/default/be_tasmotalib.c
+++ b/lib/libesp32/Berry/default/be_tasmotalib.c
@@ -50,6 +50,83 @@ extern int l_getswitch(bvm *vm);
extern int l_i2cenabled(bvm *vm);
+// KV class
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(kv_init, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 3, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_string("k", -301188886, 1),
+ /* K1 */ be_nested_string("v", -217300791, 1),
+ }),
+ ((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
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: KV
+********************************************************************/
+be_local_class(KV,
+ 2,
+ NULL,
+ be_nested_map(3,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_nested_key("k", -301188886, 1, 2), be_const_var(0) },
+ { be_nested_key("v", -217300791, 1, -1), be_const_var(1) },
+ { be_nested_key("init", 380752755, 4, -1), be_const_closure(kv_init_closure) },
+ })),
+ (be_nested_const_str("KV", 955173972, 2))
+);
+
+/********************************************************************
+** Solidified function: kv
+********************************************************************/
+be_local_closure(kv, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_const_class(be_class_KV),
+ }),
+ (be_nested_const_str("kv", 1497177492, 2)),
+ ((bstring*) &be_const_str_input),
+ ( &(const binstruction[ 7]) { /* code */
+ 0x580C0000, // 0000 LDCONST R3 K0
+ 0xB4000000, // 0001 CLASS K0
+ 0x5C100600, // 0002 MOVE R4 R3
+ 0x5C140200, // 0003 MOVE R5 R1
+ 0x5C180400, // 0004 MOVE R6 R2
+ 0x7C100400, // 0005 CALL R4 2
+ 0x80040800, // 0006 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: init
********************************************************************/
@@ -76,7 +153,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
@@ -125,7 +202,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
@@ -168,7 +245,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
@@ -229,7 +306,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
@@ -260,7 +337,7 @@ be_local_closure(set_light, /* name */
********************************************************************/
be_local_closure(remove_rule, /* name */
be_nested_proto(
- 5, /* nstack */
+ 6, /* nstack */
2, /* argc */
0, /* varg */
0, /* has upvals */
@@ -268,20 +345,37 @@ be_local_closure(remove_rule, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
+ ( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_string("_rules", -28750191, 6),
- /* K1 */ be_nested_string("remove", -611183107, 6),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_string("k", -301188886, 1),
+ /* K3 */ be_nested_string("remove", -611183107, 6),
+ /* K4 */ be_const_int(1),
}),
(be_nested_const_str("remove_rule", -838755968, 11)),
- (be_nested_const_str("Tasmota.be", 825809411, 10)),
- ( &(const binstruction[ 7]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x780A0003, // 0001 JMPF R2 #0006
- 0x88080100, // 0002 GETMBR R2 R0 K0
- 0x8C080501, // 0003 GETMET R2 R2 K1
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x80000000, // 0006 RET 0
+ ((bstring*) &be_const_str_input),
+ ( &(const binstruction[21]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x780A0011, // 0001 JMPF R2 #0014
+ 0x58080001, // 0002 LDCONST R2 K1
+ 0x600C000C, // 0003 GETGBL R3 G12
+ 0x88100100, // 0004 GETMBR R4 R0 K0
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x140C0403, // 0006 LT R3 R2 R3
+ 0x780E000B, // 0007 JMPF R3 #0014
+ 0x880C0100, // 0008 GETMBR R3 R0 K0
+ 0x940C0602, // 0009 GETIDX R3 R3 R2
+ 0x880C0702, // 000A GETMBR R3 R3 K2
+ 0x1C0C0601, // 000B EQ R3 R3 R1
+ 0x780E0004, // 000C JMPF R3 #0012
+ 0x880C0100, // 000D GETMBR R3 R0 K0
+ 0x8C0C0703, // 000E GETMET R3 R3 K3
+ 0x5C140400, // 000F MOVE R5 R2
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x70020000, // 0011 JMP #0013
+ 0x00080504, // 0012 ADD R2 R2 K4
+ 0x7001FFEE, // 0013 JMP #0003
+ 0x80000000, // 0014 RET 0
})
)
);
@@ -308,7 +402,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
@@ -344,40 +438,49 @@ be_local_closure(wire_scan, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
+ ( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_string("i2c_enabled", 218388101, 11),
/* K1 */ be_nested_string("wire1", -1082245877, 5),
- /* K2 */ be_nested_string("detect", 8884370, 6),
- /* K3 */ be_nested_string("wire2", -1065468258, 5),
+ /* K2 */ be_nested_string("enabled", 49525662, 7),
+ /* K3 */ be_nested_string("detect", 8884370, 6),
+ /* K4 */ be_nested_string("wire2", -1065468258, 5),
}),
(be_nested_const_str("wire_scan", -1623691416, 9)),
- (be_nested_const_str("Tasmota.be", 825809411, 10)),
- ( &(const binstruction[25]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x200C0403, // 0001 NE R3 R2 R3
- 0x780E0005, // 0002 JMPF R3 #0009
- 0x8C0C0100, // 0003 GETMET R3 R0 K0
- 0x5C140400, // 0004 MOVE R5 R2
- 0x7C0C0400, // 0005 CALL R3 2
- 0x740E0001, // 0006 JMPT R3 #0009
- 0x4C0C0000, // 0007 LDNIL R3
- 0x80040600, // 0008 RET 1 R3
- 0x880C0101, // 0009 GETMBR R3 R0 K1
- 0x8C0C0702, // 000A GETMET R3 R3 K2
- 0x5C140200, // 000B MOVE R5 R1
- 0x7C0C0400, // 000C CALL R3 2
- 0x780E0001, // 000D JMPF R3 #0010
- 0x880C0101, // 000E GETMBR R3 R0 K1
- 0x80040600, // 000F RET 1 R3
- 0x880C0103, // 0010 GETMBR R3 R0 K3
- 0x8C0C0702, // 0011 GETMET R3 R3 K2
- 0x5C140200, // 0012 MOVE R5 R1
- 0x7C0C0400, // 0013 CALL R3 2
- 0x780E0001, // 0014 JMPF R3 #0017
- 0x880C0103, // 0015 GETMBR R3 R0 K3
- 0x80040600, // 0016 RET 1 R3
- 0x4C0C0000, // 0017 LDNIL R3
- 0x80040600, // 0018 RET 1 R3
+ ((bstring*) &be_const_str_input),
+ ( &(const binstruction[33]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x200C0403, // 0001 NE R3 R2 R3
+ 0x780E0005, // 0002 JMPF R3 #0009
+ 0x8C0C0100, // 0003 GETMET R3 R0 K0
+ 0x5C140400, // 0004 MOVE R5 R2
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x740E0001, // 0006 JMPT R3 #0009
+ 0x4C0C0000, // 0007 LDNIL R3
+ 0x80040600, // 0008 RET 1 R3
+ 0x880C0101, // 0009 GETMBR R3 R0 K1
+ 0x8C0C0702, // 000A GETMET R3 R3 K2
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x780E0006, // 000C JMPF R3 #0014
+ 0x880C0101, // 000D GETMBR R3 R0 K1
+ 0x8C0C0703, // 000E GETMET R3 R3 K3
+ 0x5C140200, // 000F MOVE R5 R1
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x780E0001, // 0011 JMPF R3 #0014
+ 0x880C0101, // 0012 GETMBR R3 R0 K1
+ 0x80040600, // 0013 RET 1 R3
+ 0x880C0104, // 0014 GETMBR R3 R0 K4
+ 0x8C0C0702, // 0015 GETMET R3 R3 K2
+ 0x7C0C0200, // 0016 CALL R3 1
+ 0x780E0006, // 0017 JMPF R3 #001F
+ 0x880C0104, // 0018 GETMBR R3 R0 K4
+ 0x8C0C0703, // 0019 GETMET R3 R3 K3
+ 0x5C140200, // 001A MOVE R5 R1
+ 0x7C0C0400, // 001B CALL R3 2
+ 0x780E0001, // 001C JMPF R3 #001F
+ 0x880C0104, // 001D GETMBR R3 R0 K4
+ 0x80040600, // 001E RET 1 R3
+ 0x4C0C0000, // 001F LDNIL R3
+ 0x80040600, // 0020 RET 1 R3
})
)
);
@@ -405,7 +508,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
@@ -461,7 +564,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
@@ -520,7 +623,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
@@ -549,7 +652,7 @@ be_local_closure(set_timer, /* name */
********************************************************************/
be_local_closure(add_rule, /* name */
be_nested_proto(
- 5, /* nstack */
+ 9, /* nstack */
3, /* argc */
0, /* varg */
0, /* has upvals */
@@ -557,30 +660,37 @@ be_local_closure(add_rule, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
+ ( &(const bvalue[ 6]) { /* constants */
/* K0 */ be_nested_string("_rules", -28750191, 6),
/* K1 */ be_nested_string("function", -1630125495, 8),
- /* K2 */ be_nested_string("value_error", 773297791, 11),
- /* K3 */ be_nested_string("the second argument is not a function", -340392827, 37),
+ /* K2 */ be_nested_string("push", -2022703139, 4),
+ /* K3 */ be_nested_string("kv", 1497177492, 2),
+ /* K4 */ be_nested_string("value_error", 773297791, 11),
+ /* 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("Tasmota.be", 825809411, 10)),
- ( &(const binstruction[15]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x740E0002, // 0001 JMPT R3 #0005
- 0x600C0013, // 0002 GETGBL R3 G19
- 0x7C0C0000, // 0003 CALL R3 0
- 0x90020003, // 0004 SETMBR R0 K0 R3
- 0x600C0004, // 0005 GETGBL R3 G4
- 0x5C100400, // 0006 MOVE R4 R2
- 0x7C0C0200, // 0007 CALL R3 1
- 0x1C0C0701, // 0008 EQ R3 R3 K1
- 0x780E0002, // 0009 JMPF R3 #000D
- 0x880C0100, // 000A GETMBR R3 R0 K0
- 0x980C0202, // 000B SETIDX R3 R1 R2
- 0x70020000, // 000C JMP #000E
- 0xB0060503, // 000D RAISE 1 K2 K3
- 0x80000000, // 000E RET 0
+ ((bstring*) &be_const_str_input),
+ ( &(const binstruction[20]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x740E0002, // 0001 JMPT R3 #0005
+ 0x600C0012, // 0002 GETGBL R3 G18
+ 0x7C0C0000, // 0003 CALL R3 0
+ 0x90020003, // 0004 SETMBR R0 K0 R3
+ 0x600C0004, // 0005 GETGBL R3 G4
+ 0x5C100400, // 0006 MOVE R4 R2
+ 0x7C0C0200, // 0007 CALL R3 1
+ 0x1C0C0701, // 0008 EQ R3 R3 K1
+ 0x780E0007, // 0009 JMPF R3 #0012
+ 0x880C0100, // 000A GETMBR R3 R0 K0
+ 0x8C0C0702, // 000B GETMET R3 R3 K2
+ 0x8C140103, // 000C GETMET R5 R0 K3
+ 0x5C1C0200, // 000D MOVE R7 R1
+ 0x5C200400, // 000E MOVE R8 R2
+ 0x7C140600, // 000F CALL R5 3
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x70020000, // 0011 JMP #0013
+ 0xB0060905, // 0012 RAISE 1 K4 K5
+ 0x80000000, // 0013 RET 0
})
)
);
@@ -611,7 +721,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
@@ -712,7 +822,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
@@ -768,7 +878,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
@@ -885,7 +995,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
@@ -958,7 +1068,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
@@ -1008,7 +1118,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
@@ -1037,47 +1147,15 @@ be_local_closure(get_light, /* name */
********************************************************************/
be_local_closure(exec_rules, /* name */
be_nested_proto(
- 10, /* nstack */
+ 12, /* nstack */
2, /* argc */
0, /* varg */
0, /* has upvals */
NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 1]) {
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 2]) { /* upvals */
- be_local_const_upval(1, 0),
- be_local_const_upval(1, 3),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_string("try_rule", 1986449405, 8),
- }),
- (be_nested_const_str("", 607256038, 8)),
- (be_nested_const_str("tasmota.be", 1128870755, 10)),
- ( &(const binstruction[11]) { /* code */
- 0x680C0000, // 0000 GETUPV R3 U0
- 0x8C0C0700, // 0001 GETMET R3 R3 K0
- 0x68140001, // 0002 GETUPV R5 U1
- 0x5C180000, // 0003 MOVE R6 R0
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x7C0C0800, // 0005 CALL R3 4
- 0x740E0001, // 0006 JMPT R3 #0009
- 0x740A0000, // 0007 JMPT R2 #0009
- 0x50080001, // 0008 LDBOOL R2 0 1
- 0x50080200, // 0009 LDBOOL R2 1 0
- 0x80040400, // 000A RET 1 R2
- })
- ),
- }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
+ ( &(const bvalue[12]) { /* constants */
/* K0 */ be_nested_string("_rules", -28750191, 6),
/* K1 */ be_nested_string("cmd_res", 921166762, 7),
/* K2 */ be_nested_string("json", 916562499, 4),
@@ -1085,18 +1163,21 @@ be_local_closure(exec_rules, /* name */
/* K4 */ be_nested_string("log", 1062293841, 3),
/* K5 */ be_nested_string("BRY: ERROR, bad json: ", -1579831487, 22),
/* K6 */ be_const_int(3),
- /* K7 */ be_nested_string("reduce", 2002030311, 6),
- /* K8 */ be_nested_string("stop_iteration", -121173395, 14),
+ /* K7 */ be_const_int(0),
+ /* K8 */ be_nested_string("try_rule", 1986449405, 8),
+ /* K9 */ be_nested_string("k", -301188886, 1),
+ /* K10 */ be_nested_string("v", -217300791, 1),
+ /* K11 */ be_const_int(1),
}),
(be_nested_const_str("exec_rules", 1445221092, 10)),
- (be_nested_const_str("tasmota.be", 1128870755, 10)),
- ( &(const binstruction[47]) { /* code */
+ ((bstring*) &be_const_str_input),
+ ( &(const binstruction[48]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
0x740A0003, // 0001 JMPT R2 #0006
0x88080101, // 0002 GETMBR R2 R0 K1
0x4C0C0000, // 0003 LDNIL R3
0x20080403, // 0004 NE R2 R2 R3
- 0x780A0025, // 0005 JMPF R2 #002C
+ 0x780A0027, // 0005 JMPF R2 #002E
0xA40A0400, // 0006 IMPORT R2 K2
0x8C0C0503, // 0007 GETMET R3 R2 K3
0x5C140200, // 0008 MOVE R5 R1
@@ -1116,28 +1197,29 @@ be_local_closure(exec_rules, /* name */
0x78160000, // 0016 JMPF R5 #0018
0x90020203, // 0017 SETMBR R0 K1 R3
0x88140100, // 0018 GETMBR R5 R0 K0
- 0x7816000E, // 0019 JMPF R5 #0029
- 0xA8020008, // 001A EXBLK 0 #0024
- 0x88140100, // 001B GETMBR R5 R0 K0
- 0x8C140B07, // 001C GETMET R5 R5 K7
- 0x841C0000, // 001D CLOSURE R7 P0
- 0x4C200000, // 001E LDNIL R8
- 0x50240000, // 001F LDBOOL R9 0 0
- 0x7C140800, // 0020 CALL R5 4
- 0x5C100A00, // 0021 MOVE R4 R5
- 0xA8040001, // 0022 EXBLK 1 1
- 0x70020004, // 0023 JMP #0029
- 0x58140008, // 0024 LDCONST R5 K8
- 0xAC140200, // 0025 CATCH R5 1 0
- 0x70020000, // 0026 JMP #0028
- 0x70020000, // 0027 JMP #0029
- 0xB0080000, // 0028 RAISE 2 R0 R0
- 0xA0000000, // 0029 CLOSE R0
- 0x80040800, // 002A RET 1 R4
- 0xA0080000, // 002B CLOSE R2
- 0x50080000, // 002C LDBOOL R2 0 0
- 0xA0000000, // 002D CLOSE R0
- 0x80040400, // 002E RET 1 R2
+ 0x78160012, // 0019 JMPF R5 #002D
+ 0x58140007, // 001A LDCONST R5 K7
+ 0x6018000C, // 001B GETGBL R6 G12
+ 0x881C0100, // 001C GETMBR R7 R0 K0
+ 0x7C180200, // 001D CALL R6 1
+ 0x14180A06, // 001E LT R6 R5 R6
+ 0x781A000C, // 001F JMPF R6 #002D
+ 0x88180100, // 0020 GETMBR R6 R0 K0
+ 0x94180C05, // 0021 GETIDX R6 R6 R5
+ 0x8C1C0108, // 0022 GETMET R7 R0 K8
+ 0x5C240600, // 0023 MOVE R9 R3
+ 0x88280D09, // 0024 GETMBR R10 R6 K9
+ 0x882C0D0A, // 0025 GETMBR R11 R6 K10
+ 0x7C1C0800, // 0026 CALL R7 4
+ 0x741E0001, // 0027 JMPT R7 #002A
+ 0x74120000, // 0028 JMPT R4 #002A
+ 0x50100001, // 0029 LDBOOL R4 0 1
+ 0x50100200, // 002A LDBOOL R4 1 0
+ 0x00140B0B, // 002B ADD R5 R5 K11
+ 0x7001FFED, // 002C JMP #001B
+ 0x80040800, // 002D RET 1 R4
+ 0x50080000, // 002E LDBOOL R2 0 0
+ 0x80040400, // 002F RET 1 R2
})
)
);
@@ -1149,47 +1231,15 @@ be_local_closure(exec_rules, /* name */
********************************************************************/
be_local_closure(exec_tele, /* name */
be_nested_proto(
- 10, /* nstack */
+ 12, /* nstack */
2, /* argc */
0, /* varg */
0, /* has upvals */
NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 1]) {
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 2]) { /* upvals */
- be_local_const_upval(1, 0),
- be_local_const_upval(1, 3),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_string("try_rule", 1986449405, 8),
- }),
- (be_nested_const_str("", 607256038, 8)),
- (be_nested_const_str("tasmota.be", 1128870755, 10)),
- ( &(const binstruction[11]) { /* code */
- 0x680C0000, // 0000 GETUPV R3 U0
- 0x8C0C0700, // 0001 GETMET R3 R3 K0
- 0x68140001, // 0002 GETUPV R5 U1
- 0x5C180000, // 0003 MOVE R6 R0
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x7C0C0800, // 0005 CALL R3 4
- 0x740E0001, // 0006 JMPT R3 #0009
- 0x740A0000, // 0007 JMPT R2 #0009
- 0x50080001, // 0008 LDBOOL R2 0 1
- 0x50080200, // 0009 LDBOOL R2 1 0
- 0x80040400, // 000A RET 1 R2
- })
- ),
- }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
+ ( &(const bvalue[12]) { /* constants */
/* K0 */ be_nested_string("_rules", -28750191, 6),
/* K1 */ be_nested_string("json", 916562499, 4),
/* K2 */ be_nested_string("load", -435725847, 4),
@@ -1197,14 +1247,17 @@ be_local_closure(exec_tele, /* name */
/* K4 */ be_nested_string("BRY: ERROR, bad json: ", -1579831487, 22),
/* K5 */ be_const_int(3),
/* K6 */ be_nested_string("Tele", 1329980653, 4),
- /* K7 */ be_nested_string("reduce", 2002030311, 6),
- /* K8 */ be_nested_string("stop_iteration", -121173395, 14),
+ /* K7 */ be_const_int(0),
+ /* K8 */ be_nested_string("try_rule", 1986449405, 8),
+ /* K9 */ be_nested_string("k", -301188886, 1),
+ /* K10 */ be_nested_string("v", -217300791, 1),
+ /* K11 */ be_const_int(1),
}),
(be_nested_const_str("exec_tele", 1020751601, 9)),
- (be_nested_const_str("tasmota.be", 1128870755, 10)),
- ( &(const binstruction[40]) { /* code */
+ ((bstring*) &be_const_str_input),
+ ( &(const binstruction[41]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
- 0x780A0022, // 0001 JMPF R2 #0025
+ 0x780A0024, // 0001 JMPF R2 #0027
0xA40A0200, // 0002 IMPORT R2 K1
0x8C0C0502, // 0003 GETMET R3 R2 K2
0x5C140200, // 0004 MOVE R5 R1
@@ -1222,27 +1275,28 @@ be_local_closure(exec_tele, /* name */
0x7C140000, // 0010 CALL R5 0
0x98160C03, // 0011 SETIDX R5 K6 R3
0x5C0C0A00, // 0012 MOVE R3 R5
- 0xA8020008, // 0013 EXBLK 0 #001D
- 0x88140100, // 0014 GETMBR R5 R0 K0
- 0x8C140B07, // 0015 GETMET R5 R5 K7
- 0x841C0000, // 0016 CLOSURE R7 P0
- 0x4C200000, // 0017 LDNIL R8
- 0x50240000, // 0018 LDBOOL R9 0 0
- 0x7C140800, // 0019 CALL R5 4
- 0x5C100A00, // 001A MOVE R4 R5
- 0xA8040001, // 001B EXBLK 1 1
- 0x70020004, // 001C JMP #0022
- 0x58140008, // 001D LDCONST R5 K8
- 0xAC140200, // 001E CATCH R5 1 0
- 0x70020000, // 001F JMP #0021
- 0x70020000, // 0020 JMP #0022
- 0xB0080000, // 0021 RAISE 2 R0 R0
- 0xA0000000, // 0022 CLOSE R0
- 0x80040800, // 0023 RET 1 R4
- 0xA0080000, // 0024 CLOSE R2
- 0x50080000, // 0025 LDBOOL R2 0 0
- 0xA0000000, // 0026 CLOSE R0
- 0x80040400, // 0027 RET 1 R2
+ 0x58140007, // 0013 LDCONST R5 K7
+ 0x6018000C, // 0014 GETGBL R6 G12
+ 0x881C0100, // 0015 GETMBR R7 R0 K0
+ 0x7C180200, // 0016 CALL R6 1
+ 0x14180A06, // 0017 LT R6 R5 R6
+ 0x781A000C, // 0018 JMPF R6 #0026
+ 0x88180100, // 0019 GETMBR R6 R0 K0
+ 0x94180C05, // 001A GETIDX R6 R6 R5
+ 0x8C1C0108, // 001B GETMET R7 R0 K8
+ 0x5C240600, // 001C MOVE R9 R3
+ 0x88280D09, // 001D GETMBR R10 R6 K9
+ 0x882C0D0A, // 001E GETMBR R11 R6 K10
+ 0x7C1C0800, // 001F CALL R7 4
+ 0x741E0001, // 0020 JMPT R7 #0023
+ 0x74120000, // 0021 JMPT R4 #0023
+ 0x50100001, // 0022 LDBOOL R4 0 1
+ 0x50100200, // 0023 LDBOOL R4 1 0
+ 0x00140B0B, // 0024 ADD R5 R5 K11
+ 0x7001FFED, // 0025 JMP #0014
+ 0x80040800, // 0026 RET 1 R4
+ 0x50080000, // 0027 LDBOOL R2 0 0
+ 0x80040400, // 0028 RET 1 R2
})
)
);
@@ -1268,7 +1322,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
@@ -1322,7 +1376,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
@@ -1490,7 +1544,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
@@ -1537,7 +1591,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
@@ -1707,7 +1761,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
@@ -1743,7 +1797,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
@@ -1808,6 +1862,7 @@ class be_class_tasmota (scope: global, name: Tasmota) {
_settings_ptr, comptr(&Settings)
init, closure(init_closure)
+ kv, closure(kv_closure)
get_free_heap, func(l_getFreeHeap)
publish, func(l_publish)
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_unishox_lib.c b/lib/libesp32/Berry/default/be_unishox_lib.c
new file mode 100644
index 000000000..867e0870a
--- /dev/null
+++ b/lib/libesp32/Berry/default/be_unishox_lib.c
@@ -0,0 +1,28 @@
+/********************************************************************
+ * Berry module `unishox`
+ *
+ * To use: `import unishox`
+ *
+ * Allows to respond to HTTP request
+ *******************************************************************/
+#include "be_constobj.h"
+
+#ifdef USE_UNISHOX_COMPRESSION
+
+extern int be_unishox_compress(bvm *vm);
+extern int be_unishox_decompress(bvm *vm);
+
+/********************************************************************
+** Solidified module: unishox
+********************************************************************/
+be_local_module(unishox,
+ "unishox",
+ be_nested_map(2,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_nested_key("decompress", -1407935646, 10, -1), be_const_func(be_unishox_decompress) },
+ { be_nested_key("compress", -1476883059, 8, -1), be_const_func(be_unishox_compress) },
+ }))
+);
+BE_EXPORT_VARIABLE be_define_const_native_module(unishox);
+
+#endif // USE_UNISHOX_COMPRESSION
diff --git a/lib/libesp32/Berry/default/be_wirelib.c b/lib/libesp32/Berry/default/be_wirelib.c
index 8aabeb462..63c4da93a 100644
--- a/lib/libesp32/Berry/default/be_wirelib.c
+++ b/lib/libesp32/Berry/default/be_wirelib.c
@@ -23,6 +23,7 @@ extern int b_wire_scan(bvm *vm);
extern int b_wire_validwrite(bvm *vm);
extern int b_wire_validread(bvm *vm);
extern int b_wire_detect(bvm *vm);
+extern int b_wire_enabled(bvm *vm);
/********************************************************************
** Solidified function: write_bytes
@@ -43,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
@@ -85,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
@@ -140,6 +141,7 @@ class be_class_tasmota_wire (scope: global, name: Wire) {
write, func(b_wire_validwrite)
read, func(b_wire_validread)
detect, func(b_wire_detect)
+ enabled, func(b_wire_enabled)
read_bytes, closure(read_bytes_closure)
write_bytes, closure(write_bytes_closure)
diff --git a/lib/libesp32/Berry/default/embedded/Tasmota.be b/lib/libesp32/Berry/default/embedded/Tasmota.be
index d0ca48821..5bccfa66c 100644
--- a/lib/libesp32/Berry/default/embedded/Tasmota.be
+++ b/lib/libesp32/Berry/default/embedded/Tasmota.be
@@ -38,6 +38,20 @@ class Tasmota
end
end
+ # create a specific sub-class for rules: pattern(string) -> closure
+ # Classs KV has two members k and v
+ def kv(k, v)
+ class KV
+ var k, v
+ def init(k,v)
+ self.k = k
+ self.v = v
+ end
+ end
+
+ return KV(k, v)
+ end
+
# add `chars_in_string(s:string,c:string) -> int``
# looks for any char in c, and return the position of the first char
# or -1 if not found
@@ -98,10 +112,10 @@ class Tasmota
# Rules
def add_rule(pat,f)
if !self._rules
- self._rules={}
+ self._rules=[]
end
if type(f) == 'function'
- self._rules[pat] = f
+ self._rules.push(self.kv(pat, f))
else
raise 'value_error', 'the second argument is not a function'
end
@@ -109,7 +123,14 @@ class Tasmota
def remove_rule(pat)
if self._rules
- self._rules.remove(pat)
+ var i = 0
+ while i < size(self._rules)
+ if self._rules[i].k == pat
+ self._rules.remove(i) #- don't increment i since we removed the object -#
+ else
+ i += 1
+ end
+ end
end
end
@@ -170,10 +191,11 @@ class Tasmota
end
# try all rule handlers
if self._rules
- try
- ret = self._rules.reduce( /k,v,r-> self.try_rule(ev,k,v) || r, nil, false)
- except "stop_iteration"
- # silence stop_iteration which means that the map was resized during iteration
+ var i = 0
+ while i < size(self._rules)
+ var kv = self._rules[i]
+ ret = self.try_rule(ev,kv.k,kv.v) || ret #- call should be first to avoid evaluation shortcut if ret is already true -#
+ i += 1
end
end
return ret
@@ -193,10 +215,12 @@ class Tasmota
end
# insert tele prefix
ev = { "Tele": ev }
- try
- ret = self._rules.reduce( /k,v,r-> self.try_rule(ev,k,v) || r, nil, false)
- except "stop_iteration"
- # silence stop_iteration which means that the map was resized during iteration
+
+ var i = 0
+ while i < size(self._rules)
+ var kv = self._rules[i]
+ ret = self.try_rule(ev,kv.k,kv.v) || ret #- call should be first to avoid evaluation shortcut -#
+ i += 1
end
return ret
end
@@ -285,8 +309,8 @@ class Tasmota
def wire_scan(addr,idx)
# skip if the I2C index is disabled
if idx != nil && !self.i2c_enabled(idx) return nil end
- if self.wire1.detect(addr) return self.wire1 end
- if self.wire2.detect(addr) return self.wire2 end
+ if self.wire1.enabled() && self.wire1.detect(addr) return self.wire1 end
+ if self.wire2.enabled() && self.wire2.detect(addr) return self.wire2 end
return nil
end
diff --git a/lib/libesp32/Berry/default/embedded/lvgl_glob.be b/lib/libesp32/Berry/default/embedded/lvgl_glob.be
index a85b42d93..f7f6b8e84 100644
--- a/lib/libesp32/Berry/default/embedded/lvgl_glob.be
+++ b/lib/libesp32/Berry/default/embedded/lvgl_glob.be
@@ -38,7 +38,7 @@ class LVGL_glob
var event = lv.lv_event(introspect.toptr(event_ptr))
- var target = event.target
+ var target = int(event.target)
var f = self.cb_event_closure[target]
var obj = self.get_object_from_ptr(target)
#print('>> lvgl_event_dispatch', f, obj, event)
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 09f64285c..18fc29fcf 100644
--- a/lib/libesp32/Berry/generate/be_const_strtab.h
+++ b/lib/libesp32/Berry/generate/be_const_strtab.h
@@ -1,601 +1,340 @@
-extern const bcstring be_const_str_WEBCAM_PWDN;
-extern const bcstring be_const_str_gc;
-extern const bcstring be_const_str_pin_mode;
-extern const bcstring be_const_str_SERIAL_7N2;
-extern const bcstring be_const_str_WEBCAM_XCLK;
-extern const bcstring be_const_str_list;
-extern const bcstring be_const_str_top;
-extern const bcstring be_const_str_CSE7761_RX;
-extern const bcstring be_const_str_I2S_OUT_CLK;
-extern const bcstring be_const_str_MCP39F5_RST;
-extern const bcstring be_const_str_SBR_RX;
-extern const bcstring be_const_str_codedump;
-extern const bcstring be_const_str_SERIAL_7E2;
-extern const bcstring be_const_str_exec_rules;
-extern const bcstring be_const_str_insert;
-extern const bcstring be_const_str_SI7021;
-extern const bcstring be_const_str_WE517_TX;
-extern const bcstring be_const_str_pi;
-extern const bcstring be_const_str_TCP_RX;
-extern const bcstring be_const_str_RFSEND;
-extern const bcstring be_const_str_fromb64;
-extern const bcstring be_const_str_resp_cmnd;
-extern const bcstring be_const_str_format;
-extern const bcstring be_const_str_update;
-extern const bcstring be_const_str_classof;
-extern const bcstring be_const_str___lower__;
-extern const bcstring be_const_str_finish;
-extern const bcstring be_const_str_getbits;
-extern const bcstring be_const_str_pow;
-extern const bcstring be_const_str_PULLDOWN;
-extern const bcstring be_const_str_SBR_TX;
-extern const bcstring be_const_str_SERIAL_7N1;
-extern const bcstring be_const_str_cmd;
-extern const bcstring be_const_str_sin;
-extern const bcstring be_const_str_time_reached;
-extern const bcstring be_const_str_MP3_DFR562;
-extern const bcstring be_const_str_TUYA_TX;
-extern const bcstring be_const_str_WEBCAM_SIOD;
-extern const bcstring be_const_str_WIEGAND_D1;
-extern const bcstring be_const_str_SERIAL_8E1;
-extern const bcstring be_const_str_byte;
-extern const bcstring be_const_str_WINDMETER_SPEED;
-extern const bcstring be_const_str_A4988_STP;
-extern const bcstring be_const_str_WEBCAM_PSRCS;
-extern const bcstring be_const_str_XPT2046_CS;
-extern const bcstring be_const_str_gen_cb;
-extern const bcstring be_const_str_scale_uint;
-extern const bcstring be_const_str_ADC_RANGE;
-extern const bcstring be_const_str_PMS5003_TX;
-extern const bcstring be_const_str_SM16716_DAT;
-extern const bcstring be_const_str_asin;
-extern const bcstring be_const_str_tomap;
-extern const bcstring be_const_str_PZEM0XX_TX;
-extern const bcstring be_const_str_call;
-extern const bcstring be_const_str_get_string;
-extern const bcstring be_const_str_SR04_ECHO;
-extern const bcstring be_const_str_isnan;
-extern const bcstring be_const_str_super;
-extern const bcstring be_const_str_REL1;
-extern const bcstring be_const_str_get;
-extern const bcstring be_const_str_remove;
-extern const bcstring be_const_str_for;
-extern const bcstring be_const_str_TCP_TX;
-extern const bcstring be_const_str_TM1638STB;
-extern const bcstring be_const_str_collect;
-extern const bcstring be_const_str_LE01MR_RX;
-extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0;
-extern const bcstring be_const_str_TUYA_RX;
-extern const bcstring be_const_str_module;
-extern const bcstring be_const_str_set_timeouts;
-extern const bcstring be_const_str_skip;
-extern const bcstring be_const_str_ROT1A_NP;
-extern const bcstring be_const_str_WIEGAND_D0;
-extern const bcstring be_const_str_else;
-extern const bcstring be_const_str_wifi;
-extern const bcstring be_const_str_wire1;
-extern const bcstring be_const_str_ADC_INPUT;
-extern const bcstring be_const_str_ceil;
-extern const bcstring be_const_str_sqrt;
-extern const bcstring be_const_str_srand;
-extern const bcstring be_const_str_try;
-extern const bcstring be_const_str_DHT11_OUT;
-extern const bcstring be_const_str_SDM120_TX;
-extern const bcstring be_const_str_ARIRFSEL;
-extern const bcstring be_const_str_AS608_TX;
-extern const bcstring be_const_str_ETH_PHY_POWER;
-extern const bcstring be_const_str_get_free_heap;
-extern const bcstring be_const_str_GPS_TX;
-extern const bcstring be_const_str_IBEACON_TX;
-extern const bcstring be_const_str_INPUT_PULLDOWN;
-extern const bcstring be_const_str_isrunning;
-extern const bcstring be_const_str_wire_scan;
-extern const bcstring be_const_str_LE01MR_TX;
-extern const bcstring be_const_str_arg;
-extern const bcstring be_const_str_digital_write;
-extern const bcstring be_const_str_NRG_SEL_INV;
-extern const bcstring be_const_str_LEDLNK_INV;
-extern const bcstring be_const_str_ROT1B_NP;
-extern const bcstring be_const_str_scan;
-extern const bcstring be_const_str_SWT1_PD;
-extern const bcstring be_const_str_classname;
-extern const bcstring be_const_str_PZEM016_RX;
-extern const bcstring be_const_str_TELEINFO_ENABLE;
-extern const bcstring be_const_str_TX2X_TXD_BLACK;
-extern const bcstring be_const_str_deinit;
-extern const bcstring be_const_str_setmember;
-extern const bcstring be_const_str_wire2;
-extern const bcstring be_const_str_SDM630_RX;
-extern const bcstring be_const_str_SERIAL_7E1;
-extern const bcstring be_const_str_SSPI_SCLK;
-extern const bcstring be_const_str_web_send;
-extern const bcstring be_const_str_content_stop;
-extern const bcstring be_const_str_OUTPUT_HI;
-extern const bcstring be_const_str_nil;
-extern const bcstring be_const_str_opt_neq;
-extern const bcstring be_const_str_allocated;
-extern const bcstring be_const_str_gamma8;
-extern const bcstring be_const_str_i2c_enabled;
-extern const bcstring be_const_str__drivers;
-extern const bcstring be_const_str_seti;
-extern const bcstring be_const_str_;
-extern const bcstring be_const_str_KEY1_NP;
-extern const bcstring be_const_str_MD5;
-extern const bcstring be_const_str_RC522_RST;
-extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV;
-extern const bcstring be_const_str_SM16716_CLK;
-extern const bcstring be_const_str_HRXL_RX;
-extern const bcstring be_const_str_EC_C25519;
-extern const bcstring be_const_str_SDM120_RX;
-extern const bcstring be_const_str_upper;
-extern const bcstring be_const_str_HPMA_RX;
-extern const bcstring be_const_str_OneWire;
-extern const bcstring be_const_str_read12;
-extern const bcstring be_const_str_SERIAL_8E2;
-extern const bcstring be_const_str_time_str;
-extern const bcstring be_const_str_DYP_RX;
-extern const bcstring be_const_str_KEY1_INV_PD;
-extern const bcstring be_const_str_RC522_CS;
-extern const bcstring be_const_str_SDS0X1_RX;
-extern const bcstring be_const_str_SSPI_MISO;
-extern const bcstring be_const_str_lower;
-extern const bcstring be_const_str_SDCARD_CS;
-extern const bcstring be_const_str_member;
extern const bcstring be_const_str_size;
-extern const bcstring be_const_str_eth;
-extern const bcstring be_const_str_members;
-extern const bcstring be_const_str_TXD;
-extern const bcstring be_const_str_issubclass;
-extern const bcstring be_const_str_MAX7219DIN;
-extern const bcstring be_const_str_Wire;
-extern const bcstring be_const_str_HM10_RX;
-extern const bcstring be_const_str_MAX7219CLK;
-extern const bcstring be_const_str_MIEL_HVAC_TX;
-extern const bcstring be_const_str_check_privileged_access;
-extern const bcstring be_const_str_SPI_CS;
-extern const bcstring be_const_str_WEBCAM_PCLK;
-extern const bcstring be_const_str_WEBCAM_RESET;
-extern const bcstring be_const_str_SPI_MOSI;
-extern const bcstring be_const_str_last_modified;
-extern const bcstring be_const_str_log;
-extern const bcstring be_const_str_tob64;
-extern const bcstring be_const_str_A4988_MS1;
-extern const bcstring be_const_str_DAC;
-extern const bcstring be_const_str_SSPI_MOSI;
-extern const bcstring be_const_str_encrypt;
-extern const bcstring be_const_str_P9813_DAT;
-extern const bcstring be_const_str__ccmd;
-extern const bcstring be_const_str_cmd_res;
-extern const bcstring be_const_str_content_start;
-extern const bcstring be_const_str_settings;
-extern const bcstring be_const_str_NRF24_CS;
-extern const bcstring be_const_str_PZEM004_RX;
-extern const bcstring be_const_str_resp_cmnd_done;
-extern const bcstring be_const_str_dot_size;
-extern const bcstring be_const_str_EPAPER42_CS;
-extern const bcstring be_const_str_I2C_SCL;
-extern const bcstring be_const_str_INTERRUPT;
-extern const bcstring be_const_str_dac_voltage;
-extern const bcstring be_const_str_break;
-extern const bcstring be_const_str_AZ_TXD;
-extern const bcstring be_const_str_CNTR1;
-extern const bcstring be_const_str_PULLUP;
-extern const bcstring be_const_str_shared_key;
-extern const bcstring be_const_str_A4988_DIR;
-extern const bcstring be_const_str_HLW_CF;
-extern const bcstring be_const_str_end;
-extern const bcstring be_const_str_SSPI_MAX31865_CS1;
-extern const bcstring be_const_str_opt_call;
-extern const bcstring be_const_str_print;
-extern const bcstring be_const_str_begin;
-extern const bcstring be_const_str_isinstance;
-extern const bcstring be_const_str_public_key;
-extern const bcstring be_const_str_wire;
-extern const bcstring be_const_str_static;
-extern const bcstring be_const_str_exists;
-extern const bcstring be_const_str_INPUT_PULLUP;
-extern const bcstring be_const_str_SERIAL_6N2;
-extern const bcstring be_const_str_chars_in_string;
-extern const bcstring be_const_str_CHANGE;
-extern const bcstring be_const_str_SM16716_SEL;
-extern const bcstring be_const_str_IBEACON_RX;
-extern const bcstring be_const_str_SPI_DC;
-extern const bcstring be_const_str_TELEINFO_RX;
-extern const bcstring be_const_str_find_op;
-extern const bcstring be_const_str_PMS5003_RX;
-extern const bcstring be_const_str_read32;
-extern const bcstring be_const_str_MAX7219CS;
-extern const bcstring be_const_str_SDM72_RX;
-extern const bcstring be_const_str_TM1638DIO;
-extern const bcstring be_const_str_CSE7766_RX;
-extern const bcstring be_const_str_VL53L0X_XSHUT1;
-extern const bcstring be_const_str_content_send_style;
-extern const bcstring be_const_str__end_transmission;
-extern const bcstring be_const_str_cos;
-extern const bcstring be_const_str_SERIAL_8N1;
-extern const bcstring be_const_str_publish_result;
-extern const bcstring be_const_str_remove_driver;
-extern const bcstring be_const_str_A4988_ENA;
-extern const bcstring be_const_str_DEEPSLEEP;
-extern const bcstring be_const_str__write;
-extern const bcstring be_const_str_asstring;
-extern const bcstring be_const_str_addr;
-extern const bcstring be_const_str_BL0940_RX;
-extern const bcstring be_const_str__global_def;
-extern const bcstring be_const_str_EXS_ENABLE;
-extern const bcstring be_const_str_OPTION_A;
-extern const bcstring be_const_str__available;
-extern const bcstring be_const_str_read_bytes;
-extern const bcstring be_const_str_try_rule;
-extern const bcstring be_const_str_write8;
-extern const bcstring be_const_str_BOILER_OT_RX;
-extern const bcstring be_const_str_DHT11;
-extern const bcstring be_const_str_tostring;
-extern const bcstring be_const_str_write_bit;
-extern const bcstring be_const_str_PWM1;
-extern const bcstring be_const_str_SDS0X1_TX;
-extern const bcstring be_const_str_ctypes_bytes_dyn;
-extern const bcstring be_const_str_SERIAL_8N2;
-extern const bcstring be_const_str_write_bytes;
-extern const bcstring be_const_str_TM1637DIO;
-extern const bcstring be_const_str_read;
-extern const bcstring be_const_str_DDS2382_TX;
-extern const bcstring be_const_str_LEDLNK;
-extern const bcstring be_const_str_SAIR_RX;
-extern const bcstring be_const_str_ILI9488_CS;
-extern const bcstring be_const_str__request_from;
-extern const bcstring be_const_str_content_flush;
-extern const bcstring be_const_str_SSPI_CS;
-extern const bcstring be_const_str_log10;
-extern const bcstring be_const_str_BOILER_OT_TX;
-extern const bcstring be_const_str_exp;
-extern const bcstring be_const_str_on;
extern const bcstring be_const_str_type;
-extern const bcstring be_const_str_add_header;
-extern const bcstring be_const_str_strftime;
-extern const bcstring be_const_str_as;
-extern const bcstring be_const_str_KEY1_PD;
-extern const bcstring be_const_str_PROJECTOR_CTRL_RX;
-extern const bcstring be_const_str_clear;
-extern const bcstring be_const_str_I2S_IN_CLK;
-extern const bcstring be_const_str_SERIAL_6N1;
-extern const bcstring be_const_str_LMT01;
-extern const bcstring be_const_str_RXD;
-extern const bcstring be_const_str_item;
-extern const bcstring be_const_str_PN532_RXD;
-extern const bcstring be_const_str_char;
-extern const bcstring be_const_str_MAX31855CS;
-extern const bcstring be_const_str_ELECTRIQ_MOODL_TX;
-extern const bcstring be_const_str_find;
-extern const bcstring be_const_str_gamma10;
-extern const bcstring be_const_str_dot_len;
-extern const bcstring be_const_str_AudioOutputI2S;
-extern const bcstring be_const_str_CC1101_GDO0;
-extern const bcstring be_const_str_DSB_OUT;
-extern const bcstring be_const_str_pin_used;
-extern const bcstring be_const_str_BUZZER_INV;
-extern const bcstring be_const_str_SERIAL_5N1;
-extern const bcstring be_const_str_set_power;
-extern const bcstring be_const_str_acos;
-extern const bcstring be_const_str_str;
-extern const bcstring be_const_str_add_driver;
-extern const bcstring be_const_str_content_button;
-extern const bcstring be_const_str_save;
-extern const bcstring be_const_str_yield;
-extern const bcstring be_const_str_NONE;
-extern const bcstring be_const_str_TASMOTACLIENT_RST;
-extern const bcstring be_const_str_exec_tele;
-extern const bcstring be_const_str_read24;
-extern const bcstring be_const_str_search;
-extern const bcstring be_const_str_web_send_decimal;
-extern const bcstring be_const_str_IEM3000_RX;
-extern const bcstring be_const_str_SM2135_CLK;
-extern const bcstring be_const_str_erase;
-extern const bcstring be_const_str_Tasmota;
extern const bcstring be_const_str_has_arg;
-extern const bcstring be_const_str_target_search;
-extern const bcstring be_const_str_var;
-extern const bcstring be_const_str_IRRECV;
-extern const bcstring be_const_str_MHZ_RXD;
-extern const bcstring be_const_str_TM1638CLK;
-extern const bcstring be_const_str_raise;
-extern const bcstring be_const_str_MGC3130_RESET;
-extern const bcstring be_const_str_TFMINIPLUS_TX;
-extern const bcstring be_const_str_elif;
-extern const bcstring be_const_str_HRE_CLOCK;
-extern const bcstring be_const_str_tag;
-extern const bcstring be_const_str_class;
-extern const bcstring be_const_str_IEM3000_TX;
-extern const bcstring be_const_str__ptr;
+extern const bcstring be_const_str_remove;
+extern const bcstring be_const_str_SERIAL_6E1;
+extern const bcstring be_const_str_SERIAL_8O1;
extern const bcstring be_const_str_cosh;
-extern const bcstring be_const_str_HPMA_TX;
-extern const bcstring be_const_str_ctypes_bytes;
-extern const bcstring be_const_str_loop;
-extern const bcstring be_const_str_setitem;
-extern const bcstring be_const_str_TASMOTACLIENT_RXD;
-extern const bcstring be_const_str_WS2812;
-extern const bcstring be_const_str_HX711_DAT;
-extern const bcstring be_const_str_add;
-extern const bcstring be_const_str_rtc;
-extern const bcstring be_const_str_LED1;
-extern const bcstring be_const_str_POST;
-extern const bcstring be_const_str__settings_def;
-extern const bcstring be_const_str_delay;
-extern const bcstring be_const_str_GPS_RX;
-extern const bcstring be_const_str_LED1_INV;
-extern const bcstring be_const_str_reduce;
+extern const bcstring be_const_str_global;
+extern const bcstring be_const_str_last_modified;
+extern const bcstring be_const_str_public_key;
+extern const bcstring be_const_str_dac_voltage;
+extern const bcstring be_const_str_set_power;
extern const bcstring be_const_str_url_encode;
-extern const bcstring be_const_str_CC1101_GDO2;
-extern const bcstring be_const_str_TASMOTACLIENT_RST_INV;
-extern const bcstring be_const_str_WEBCAM_HSD;
-extern const bcstring be_const_str_AudioFileSource;
-extern const bcstring be_const_str_reset;
-extern const bcstring be_const_str_NEOPOOL_TX;
-extern const bcstring be_const_str_publish;
-extern const bcstring be_const_str_setrange;
-extern const bcstring be_const_str_DDS2382_RX;
-extern const bcstring be_const_str_SAIR_TX;
-extern const bcstring be_const_str_BS814_CLK;
-extern const bcstring be_const_str_RISING;
-extern const bcstring be_const_str_decrypt;
-extern const bcstring be_const_str_PWM1_INV;
-extern const bcstring be_const_str_rand;
-extern const bcstring be_const_str_AS3935;
-extern const bcstring be_const_str_if;
+extern const bcstring be_const_str_SERIAL_7N2;
+extern const bcstring be_const_str_content_button;
+extern const bcstring be_const_str__cb;
+extern const bcstring be_const_str_atan;
extern const bcstring be_const_str_dot_p2;
-extern const bcstring be_const_str_continue;
-extern const bcstring be_const_str_SERIAL_6E2;
-extern const bcstring be_const_str_WEBCAM_VSYNC;
-extern const bcstring be_const_str_find_key_i;
-extern const bcstring be_const_str_SERIAL_5N2;
-extern const bcstring be_const_str_HRE_DATA;
-extern const bcstring be_const_str_SERIAL_6O1;
-extern const bcstring be_const_str_ZIGBEE_RST;
-extern const bcstring be_const_str_HJL_CF;
-extern const bcstring be_const_str_MAX31855CLK;
-extern const bcstring be_const_str_RF_SENSOR;
-extern const bcstring be_const_str_init;
-extern const bcstring be_const_str_SERIAL_5O2;
-extern const bcstring be_const_str_resp_cmnd_error;
-extern const bcstring be_const_str_ADC_BUTTON_INV;
-extern const bcstring be_const_str_ARIRFRCV;
-extern const bcstring be_const_str_available;
+extern const bcstring be_const_str_iter;
+extern const bcstring be_const_str_remove_timer;
extern const bcstring be_const_str_select;
-extern const bcstring be_const_str_ADC_PH;
-extern const bcstring be_const_str_tanh;
-extern const bcstring be_const_str_false;
-extern const bcstring be_const_str_SWT1;
+extern const bcstring be_const_str_setmember;
+extern const bcstring be_const_str_top;
+extern const bcstring be_const_str_decrypt;
+extern const bcstring be_const_str_gamma10;
+extern const bcstring be_const_str_i2c_enabled;
+extern const bcstring be_const_str_on;
+extern const bcstring be_const_str_pin_mode;
+extern const bcstring be_const_str_SERIAL_7O1;
+extern const bcstring be_const_str_chars_in_string;
+extern const bcstring be_const_str_wifi;
+extern const bcstring be_const_str_SERIAL_5N2;
+extern const bcstring be_const_str_allocated;
+extern const bcstring be_const_str_set_timer;
+extern const bcstring be_const_str_SERIAL_8N2;
+extern const bcstring be_const_str_ceil;
+extern const bcstring be_const_str_clear;
+extern const bcstring be_const_str_wire1;
+extern const bcstring be_const_str_resp_cmnd_failed;
+extern const bcstring be_const_str_SERIAL_5E1;
+extern const bcstring be_const_str_classname;
+extern const bcstring be_const_str__global_def;
+extern const bcstring be_const_str_event;
+extern const bcstring be_const_str_pin;
+extern const bcstring be_const_str_response_append;
+extern const bcstring be_const_str_else;
+extern const bcstring be_const_str__rules;
+extern const bcstring be_const_str_deinit;
+extern const bcstring be_const_str_end;
+extern const bcstring be_const_str___upper__;
+extern const bcstring be_const_str_char;
+extern const bcstring be_const_str_add_header;
+extern const bcstring be_const_str_OneWire;
+extern const bcstring be_const_str_deg;
+extern const bcstring be_const_str_digital_read;
+extern const bcstring be_const_str_srand;
+extern const bcstring be_const_str_close;
+extern const bcstring be_const_str_enabled;
+extern const bcstring be_const_str_read13;
+extern const bcstring be_const_str_AudioOutput;
+extern const bcstring be_const_str_copy;
+extern const bcstring be_const_str_exp;
+extern const bcstring be_const_str_remove_rule;
+extern const bcstring be_const_str_gen_cb;
+extern const bcstring be_const_str_opt_neq;
+extern const bcstring be_const_str_assert;
+extern const bcstring be_const_str_isinstance;
+extern const bcstring be_const_str_pow;
+extern const bcstring be_const_str_count;
+extern const bcstring be_const_str_read_bytes;
+extern const bcstring be_const_str_web_send;
+extern const bcstring be_const_str_classof;
+extern const bcstring be_const_str_cos;
+extern const bcstring be_const_str_redirect;
+extern const bcstring be_const_str_write_bytes;
+extern const bcstring be_const_str_rand;
+extern const bcstring be_const_str_class;
+extern const bcstring be_const_str_cb_dispatch;
+extern const bcstring be_const_str_ctypes_bytes_dyn;
+extern const bcstring be_const_str_floor;
+extern const bcstring be_const_str_number;
+extern const bcstring be_const_str_toptr;
+extern const bcstring be_const_str_SERIAL_5N1;
+extern const bcstring be_const_str__def;
+extern const bcstring be_const_str_find_op;
+extern const bcstring be_const_str_wire_scan;
+extern const bcstring be_const_str_get_switch;
+extern const bcstring be_const_str__read;
+extern const bcstring be_const_str_member;
+extern const bcstring be_const_str_target_search;
+extern const bcstring be_const_str_traceback;
+extern const bcstring be_const_str_static;
+extern const bcstring be_const_str_opt_eq;
+extern const bcstring be_const_str_fromptr;
+extern const bcstring be_const_str_getbits;
+extern const bcstring be_const_str_setbits;
+extern const bcstring be_const_str_stop;
+extern const bcstring be_const_str_issubclass;
+extern const bcstring be_const_str_flush;
+extern const bcstring be_const_str_I2C_Driver;
+extern const bcstring be_const_str_atan2;
+extern const bcstring be_const_str_resp_cmnd_str;
+extern const bcstring be_const_str__settings_def;
+extern const bcstring be_const_str_name;
+extern const bcstring be_const_str_acos;
+extern const bcstring be_const_str_asin;
+extern const bcstring be_const_str_members;
+extern const bcstring be_const_str_split;
+extern const bcstring be_const_str_exists;
+extern const bcstring be_const_str_super;
+extern const bcstring be_const_str_EC_C25519;
+extern const bcstring be_const_str_calldepth;
+extern const bcstring be_const_str_ctypes_bytes;
+extern const bcstring be_const_str_get_free_heap;
+extern const bcstring be_const_str_bus;
+extern const bcstring be_const_str_log;
+extern const bcstring be_const_str_raise;
+extern const bcstring be_const_str_bytes;
+extern const bcstring be_const_str_set;
+extern const bcstring be_const_str_SERIAL_6N1;
+extern const bcstring be_const_str__cmd;
+extern const bcstring be_const_str_dot_size;
+extern const bcstring be_const_str_SERIAL_5O1;
+extern const bcstring be_const_str_AES_GCM;
+extern const bcstring be_const_str_AudioFileSourceFS;
+extern const bcstring be_const_str_sinh;
+extern const bcstring be_const_str_time_str;
+extern const bcstring be_const_str_cmd;
+extern const bcstring be_const_str_tostring;
+extern const bcstring be_const_str__buffer;
+extern const bcstring be_const_str_exec_tele;
+extern const bcstring be_const_str_except;
+extern const bcstring be_const_str_dot_len;
+extern const bcstring be_const_str_AudioGeneratorMP3;
+extern const bcstring be_const_str__global_addr;
+extern const bcstring be_const_str_SERIAL_6E2;
+extern const bcstring be_const_str_SERIAL_7E1;
+extern const bcstring be_const_str_SERIAL_8O2;
+extern const bcstring be_const_str_get;
+extern const bcstring be_const_str_SERIAL_8E2;
+extern const bcstring be_const_str_init;
+extern const bcstring be_const_str_module;
+extern const bcstring be_const_str_skip;
+extern const bcstring be_const_str__ptr;
+extern const bcstring be_const_str_find;
+extern const bcstring be_const_str_item;
+extern const bcstring be_const_str_GET;
+extern const bcstring be_const_str_format;
+extern const bcstring be_const_str_sqrt;
+extern const bcstring be_const_str_byte;
+extern const bcstring be_const_str_true;
+extern const bcstring be_const_str__write;
+extern const bcstring be_const_str_content_send_style;
+extern const bcstring be_const_str_rtc;
+extern const bcstring be_const_str_Wire;
+extern const bcstring be_const_str_digital_write;
+extern const bcstring be_const_str_get_light;
+extern const bcstring be_const_str_SERIAL_8N1;
+extern const bcstring be_const_str_read12;
+extern const bcstring be_const_str_exec_cmd;
+extern const bcstring be_const_str_remove_cmd;
+extern const bcstring be_const_str_str;
+extern const bcstring be_const_str_available;
+extern const bcstring be_const_str_read24;
+extern const bcstring be_const_str_scale_uint;
+extern const bcstring be_const_str_try_rule;
+extern const bcstring be_const_str_publish_result;
+extern const bcstring be_const_str_state;
+extern const bcstring be_const_str_strftime;
+extern const bcstring be_const_str_toupper;
+extern const bcstring be_const_str_;
+extern const bcstring be_const_str_break;
+extern const bcstring be_const_str_SERIAL_6N2;
+extern const bcstring be_const_str_resolvecmnd;
+extern const bcstring be_const_str_AudioOutputI2S;
+extern const bcstring be_const_str_SERIAL_5O2;
+extern const bcstring be_const_str_erase;
+extern const bcstring be_const_str_lower;
+extern const bcstring be_const_str_fromstring;
+extern const bcstring be_const_str_print;
+extern const bcstring be_const_str_def;
+extern const bcstring be_const_str__request_from;
+extern const bcstring be_const_str_read8;
+extern const bcstring be_const_str_detect;
+extern const bcstring be_const_str_dump;
+extern const bcstring be_const_str_isrunning;
+extern const bcstring be_const_str_push;
+extern const bcstring be_const_str_time_dump;
+extern const bcstring be_const_str_return;
+extern const bcstring be_const_str_nil;
+extern const bcstring be_const_str_remove_driver;
+extern const bcstring be_const_str_SERIAL_7E2;
+extern const bcstring be_const_str_add_driver;
+extern const bcstring be_const_str_keys;
+extern const bcstring be_const_str_run_deferred;
+extern const bcstring be_const_str_SERIAL_8E1;
+extern const bcstring be_const_str_delay;
+extern const bcstring be_const_str_depower;
+extern const bcstring be_const_str_imin;
+extern const bcstring be_const_str_write8;
+extern const bcstring be_const_str_add;
+extern const bcstring be_const_str_add_cmd;
+extern const bcstring be_const_str_add_rule;
+extern const bcstring be_const_str_compile;
+extern const bcstring be_const_str_geti;
+extern const bcstring be_const_str_upper;
+extern const bcstring be_const_str_webclient;
+extern const bcstring be_const_str_has;
+extern const bcstring be_const_str_codedump;
+extern const bcstring be_const_str_reduce;
+extern const bcstring be_const_str_as;
+extern const bcstring be_const_str_get_size;
+extern const bcstring be_const_str_tag;
+extern const bcstring be_const_str_opt_connect;
+extern const bcstring be_const_str__get_cb;
+extern const bcstring be_const_str_try;
+extern const bcstring be_const_str_while;
+extern const bcstring be_const_str_gc;
+extern const bcstring be_const_str_begin;
+extern const bcstring be_const_str_kv;
+extern const bcstring be_const_str_open;
+extern const bcstring be_const_str_web_send_decimal;
+extern const bcstring be_const_str_cmd_res;
+extern const bcstring be_const_str_settings;
+extern const bcstring be_const_str_insert;
+extern const bcstring be_const_str___iterator__;
+extern const bcstring be_const_str_asstring;
+extern const bcstring be_const_str_get_option;
+extern const bcstring be_const_str_SERIAL_7N1;
+extern const bcstring be_const_str_call;
+extern const bcstring be_const_str_eth;
+extern const bcstring be_const_str_if;
+extern const bcstring be_const_str_int;
+extern const bcstring be_const_str_time_reached;
extern const bcstring be_const_str_dot_p1;
-extern const bcstring be_const_str_ADC_LIGHT;
+extern const bcstring be_const_str_concat;
+extern const bcstring be_const_str_content_flush;
+extern const bcstring be_const_str_list;
+extern const bcstring be_const_str_map;
+extern const bcstring be_const_str_for;
+extern const bcstring be_const_str_dot_p;
+extern const bcstring be_const_str_set_timeouts;
+extern const bcstring be_const_str_SERIAL_7O2;
+extern const bcstring be_const_str_POST;
extern const bcstring be_const_str_abs;
extern const bcstring be_const_str_reverse;
-extern const bcstring be_const_str__cmd;
-extern const bcstring be_const_str_attrdump;
-extern const bcstring be_const_str_depower;
-extern const bcstring be_const_str_OUTPUT_LO;
-extern const bcstring be_const_str_import;
-extern const bcstring be_const_str_SERIAL_6E1;
-extern const bcstring be_const_str_def;
-extern const bcstring be_const_str_IRSEND;
-extern const bcstring be_const_str_keys;
-extern const bcstring be_const_str_time_dump;
-extern const bcstring be_const_str_AS608_RX;
-extern const bcstring be_const_str_AudioGeneratorWAV;
-extern const bcstring be_const_str_ST7789_CS;
-extern const bcstring be_const_str_set_timer;
-extern const bcstring be_const_str_ILI9341_DC;
-extern const bcstring be_const_str_SPI_MISO;
-extern const bcstring be_const_str_dot_p;
-extern const bcstring be_const_str_P9813_CLK;
-extern const bcstring be_const_str_REL1_INV;
-extern const bcstring be_const_str_fromptr;
-extern const bcstring be_const_str_INPUT;
-extern const bcstring be_const_str_iter;
-extern const bcstring be_const_str_AES_GCM;
-extern const bcstring be_const_str_load;
-extern const bcstring be_const_str_MGC3130_XFER;
-extern const bcstring be_const_str_TFMINIPLUS_RX;
-extern const bcstring be_const_str_resize;
-extern const bcstring be_const_str_SWT1_NP;
-extern const bcstring be_const_str_count;
-extern const bcstring be_const_str_input;
-extern const bcstring be_const_str_SPI_CLK;
-extern const bcstring be_const_str_deg;
-extern const bcstring be_const_str_AudioGenerator;
-extern const bcstring be_const_str_SSD1331_DC;
-extern const bcstring be_const_str_global;
-extern const bcstring be_const_str_traceback;
-extern const bcstring be_const_str_do;
-extern const bcstring be_const_str_KEY1;
-extern const bcstring be_const_str_SERIAL_8O2;
-extern const bcstring be_const_str_SSPI_DC;
-extern const bcstring be_const_str__global_addr;
-extern const bcstring be_const_str_exec_cmd;
-extern const bcstring be_const_str_toupper;
-extern const bcstring be_const_str_true;
-extern const bcstring be_const_str_AudioGeneratorMP3;
-extern const bcstring be_const_str_atan;
-extern const bcstring be_const_str_SDM72_TX;
-extern const bcstring be_const_str_remove_timer;
-extern const bcstring be_const_str_I2C_Driver;
-extern const bcstring be_const_str_close;
-extern const bcstring be_const_str_ZEROCROSS;
-extern const bcstring be_const_str_while;
-extern const bcstring be_const_str_opt_eq;
-extern const bcstring be_const_str_counters;
-extern const bcstring be_const_str_imax;
-extern const bcstring be_const_str_I2S_OUT_DATA;
-extern const bcstring be_const_str_ST7789_DC;
-extern const bcstring be_const_str_AudioFileSourceFS;
-extern const bcstring be_const_str_SM2135_DAT;
-extern const bcstring be_const_str__cb;
-extern const bcstring be_const_str_read13;
-extern const bcstring be_const_str_CSE7761_TX;
-extern const bcstring be_const_str_LOW;
-extern const bcstring be_const_str_SERIAL_6O2;
-extern const bcstring be_const_str_SERIAL_8O1;
-extern const bcstring be_const_str_MHZ_TXD;
-extern const bcstring be_const_str_dump;
-extern const bcstring be_const_str_get_power;
-extern const bcstring be_const_str_number;
-extern const bcstring be_const_str_ROT1A;
-extern const bcstring be_const_str_SERIAL_5O1;
-extern const bcstring be_const_str_TM1637CLK;
-extern const bcstring be_const_str__begin_transmission;
-extern const bcstring be_const_str_EPAPER29_CS;
-extern const bcstring be_const_str_name;
-extern const bcstring be_const_str_resp_cmnd_failed;
-extern const bcstring be_const_str_return;
-extern const bcstring be_const_str_calldepth;
-extern const bcstring be_const_str_FALLING;
-extern const bcstring be_const_str_push;
-extern const bcstring be_const_str_real;
-extern const bcstring be_const_str_PN532_TXD;
-extern const bcstring be_const_str_RFRECV;
-extern const bcstring be_const_str_SOLAXX1_TX;
-extern const bcstring be_const_str_get_light;
-extern const bcstring be_const_str_millis;
-extern const bcstring be_const_str_pop;
-extern const bcstring be_const_str___iterator__;
-extern const bcstring be_const_str_remove_rule;
-extern const bcstring be_const_str_ADC_BUTTON;
-extern const bcstring be_const_str_PROJECTOR_CTRL_TX;
-extern const bcstring be_const_str_HX711_SCK;
-extern const bcstring be_const_str_webclient;
-extern const bcstring be_const_str_DDSU666_RX;
-extern const bcstring be_const_str_I2C_SDA;
-extern const bcstring be_const_str_add_cmd;
-extern const bcstring be_const_str__get_cb;
-extern const bcstring be_const_str_copy;
-extern const bcstring be_const_str_detect;
-extern const bcstring be_const_str_digital_read;
-extern const bcstring be_const_str_setbits;
-extern const bcstring be_const_str_NRF24_DC;
-extern const bcstring be_const_str_SSD1351_CS;
-extern const bcstring be_const_str_BACKLIGHT;
-extern const bcstring be_const_str_SOLAXX1_RX;
-extern const bcstring be_const_str_WEBCAM_PSCLK;
-extern const bcstring be_const_str_get_size;
-extern const bcstring be_const_str_SDM630_TX;
-extern const bcstring be_const_str_geti;
-extern const bcstring be_const_str_open;
-extern const bcstring be_const_str_ADC_JOY;
-extern const bcstring be_const_str_ETH_PHY_MDC;
-extern const bcstring be_const_str_DDSU666_TX;
-extern const bcstring be_const_str_run_deferred;
-extern const bcstring be_const_str_opt_add;
-extern const bcstring be_const_str__settings_ptr;
-extern const bcstring be_const_str_tan;
-extern const bcstring be_const_str_KEY1_TC;
-extern const bcstring be_const_str_split;
-extern const bcstring be_const_str_stop;
-extern const bcstring be_const_str_tolower;
-extern const bcstring be_const_str_AZ_RXD;
-extern const bcstring be_const_str_HIGH;
-extern const bcstring be_const_str_fromstring;
-extern const bcstring be_const_str_redirect;
-extern const bcstring be_const_str_ADC_TEMP;
-extern const bcstring be_const_str_DSB;
-extern const bcstring be_const_str_add_rule;
-extern const bcstring be_const_str_CNTR1_NP;
-extern const bcstring be_const_str_TASMOTACLIENT_TXD;
-extern const bcstring be_const_str_MAX31855DO;
-extern const bcstring be_const_str_MIEL_HVAC_RX;
-extern const bcstring be_const_str_SR04_TRIG;
-extern const bcstring be_const_str_get_option;
-extern const bcstring be_const_str_ETH_PHY_MDIO;
-extern const bcstring be_const_str_I2S_IN_SLCT;
-extern const bcstring be_const_str_NRG_CF1;
-extern const bcstring be_const_str_hex;
-extern const bcstring be_const_str_map;
-extern const bcstring be_const_str_rad;
-extern const bcstring be_const_str_bus;
-extern const bcstring be_const_str_concat;
-extern const bcstring be_const_str_WEBCAM_SIOC;
-extern const bcstring be_const_str_SENSOR_END;
-extern const bcstring be_const_str_ZIGBEE_TX;
-extern const bcstring be_const_str_assert;
-extern const bcstring be_const_str_AudioOutput;
-extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN;
-extern const bcstring be_const_str_state;
-extern const bcstring be_const_str_int;
-extern const bcstring be_const_str_I2S_IN_DATA;
-extern const bcstring be_const_str_ROT1B;
-extern const bcstring be_const_str_dot_w;
-extern const bcstring be_const_str_ADE7953_IRQ;
-extern const bcstring be_const_str_SSD1351_DC;
-extern const bcstring be_const_str_reset_search;
-extern const bcstring be_const_str_opt_connect;
-extern const bcstring be_const_str_BUZZER;
-extern const bcstring be_const_str_PZEM017_RX;
-extern const bcstring be_const_str_RA8876_CS;
-extern const bcstring be_const_str__def;
-extern const bcstring be_const_str_DI;
-extern const bcstring be_const_str_I2S_OUT_SLCT;
-extern const bcstring be_const_str_NRG_SEL;
-extern const bcstring be_const_str_floor;
-extern const bcstring be_const_str_NEOPOOL_RX;
-extern const bcstring be_const_str_OUTPUT;
-extern const bcstring be_const_str_reverse_gamma10;
-extern const bcstring be_const_str_ILI9341_CS;
-extern const bcstring be_const_str_KEY1_INV_NP;
-extern const bcstring be_const_str_ZIGBEE_RX;
-extern const bcstring be_const_str_set_light;
-extern const bcstring be_const_str_HM10_TX;
-extern const bcstring be_const_str_cb_dispatch;
-extern const bcstring be_const_str_MCP39F5_TX;
-extern const bcstring be_const_str_toptr;
-extern const bcstring be_const_str_sinh;
-extern const bcstring be_const_str_imin;
-extern const bcstring be_const_str_nan;
-extern const bcstring be_const_str_SERIAL_7O1;
-extern const bcstring be_const_str_set_auth;
-extern const bcstring be_const_str__rules;
-extern const bcstring be_const_str_event;
-extern const bcstring be_const_str_OLED_RESET;
-extern const bcstring be_const_str__read;
-extern const bcstring be_const_str___upper__;
-extern const bcstring be_const_str_content_send;
-extern const bcstring be_const_str_ADC_CT_POWER;
-extern const bcstring be_const_str_BS814_DAT;
-extern const bcstring be_const_str_arg_size;
-extern const bcstring be_const_str_SERIAL_5E1;
-extern const bcstring be_const_str_resp_cmnd_str;
-extern const bcstring be_const_str_RDM6300_RX;
-extern const bcstring be_const_str_WEBCAM_DATA;
-extern const bcstring be_const_str_WEBCAM_HREF;
-extern const bcstring be_const_str_bytes;
-extern const bcstring be_const_str_DCKI;
-extern const bcstring be_const_str_memory;
-extern const bcstring be_const_str_CSE7766_TX;
-extern const bcstring be_const_str_response_append;
-extern const bcstring be_const_str_EPD_DATA;
-extern const bcstring be_const_str_SERIAL_7O2;
-extern const bcstring be_const_str_SSD1331_CS;
-extern const bcstring be_const_str_arg_name;
-extern const bcstring be_const_str_serial;
-extern const bcstring be_const_str_HALLEFFECT;
-extern const bcstring be_const_str_read8;
-extern const bcstring be_const_str_write;
-extern const bcstring be_const_str_OPEN_DRAIN;
-extern const bcstring be_const_str_WE517_RX;
-extern const bcstring be_const_str_has;
-extern const bcstring be_const_str_pin;
-extern const bcstring be_const_str_remove_cmd;
-extern const bcstring be_const_str_GET;
-extern const bcstring be_const_str_MCP39F5_RX;
-extern const bcstring be_const_str_SERIAL_5E2;
-extern const bcstring be_const_str_resolvecmnd;
-extern const bcstring be_const_str_set;
extern const bcstring be_const_str_set_useragent;
-extern const bcstring be_const_str_except;
-extern const bcstring be_const_str_DHT22;
-extern const bcstring be_const_str_compile;
-extern const bcstring be_const_str_get_switch;
-extern const bcstring be_const_str_KEY1_INV;
-extern const bcstring be_const_str__timers;
+extern const bcstring be_const_str_wire2;
+extern const bcstring be_const_str_hex;
+extern const bcstring be_const_str_set_light;
+extern const bcstring be_const_str_SERIAL_5E2;
+extern const bcstring be_const_str_seti;
+extern const bcstring be_const_str_opt_add;
+extern const bcstring be_const_str_content_send;
+extern const bcstring be_const_str_real;
+extern const bcstring be_const_str_publish;
+extern const bcstring be_const_str_reset_search;
+extern const bcstring be_const_str_log10;
+extern const bcstring be_const_str__drivers;
+extern const bcstring be_const_str_resp_cmnd_error;
+extern const bcstring be_const_str_arg;
+extern const bcstring be_const_str_collect;
+extern const bcstring be_const_str_loop;
+extern const bcstring be_const_str_wire;
+extern const bcstring be_const_str_dot_w;
+extern const bcstring be_const_str_addr;
+extern const bcstring be_const_str_tob64;
+extern const bcstring be_const_str_scan;
+extern const bcstring be_const_str_set_auth;
+extern const bcstring be_const_str_AudioFileSource;
+extern const bcstring be_const_str_arg_name;
+extern const bcstring be_const_str_contains;
+extern const bcstring be_const_str_content_stop;
+extern const bcstring be_const_str_nan;
+extern const bcstring be_const_str_MD5;
+extern const bcstring be_const_str_gamma8;
+extern const bcstring be_const_str_isnan;
+extern const bcstring be_const_str_pin_used;
+extern const bcstring be_const_str_read;
+extern const bcstring be_const_str_reverse_gamma10;
+extern const bcstring be_const_str_SERIAL_6O2;
+extern const bcstring be_const_str_check_privileged_access;
+extern const bcstring be_const_str_load;
+extern const bcstring be_const_str_resize;
+extern const bcstring be_const_str_content_start;
+extern const bcstring be_const_str_write;
+extern const bcstring be_const_str_AudioGenerator;
+extern const bcstring be_const_str_AudioGeneratorWAV;
extern const bcstring be_const_str_range;
-extern const bcstring be_const_str_atan2;
-extern const bcstring be_const_str_FTC532;
-extern const bcstring be_const_str__buffer;
-extern const bcstring be_const_str_flush;
+extern const bcstring be_const_str_encrypt;
+extern const bcstring be_const_str_exec_rules;
+extern const bcstring be_const_str_fromb64;
+extern const bcstring be_const_str_get_power;
+extern const bcstring be_const_str_serial;
+extern const bcstring be_const_str__available;
+extern const bcstring be_const_str_finish;
+extern const bcstring be_const_str_attrdump;
+extern const bcstring be_const_str_continue;
+extern const bcstring be_const_str_do;
+extern const bcstring be_const_str_false;
+extern const bcstring be_const_str_tomap;
+extern const bcstring be_const_str_find_key_i;
+extern const bcstring be_const_str_pop;
+extern const bcstring be_const_str_reset;
+extern const bcstring be_const_str_tolower;
+extern const bcstring be_const_str_sin;
+extern const bcstring be_const_str_input;
+extern const bcstring be_const_str_resp_cmnd;
+extern const bcstring be_const_str_Tasmota;
+extern const bcstring be_const_str_rad;
+extern const bcstring be_const_str_read32;
+extern const bcstring be_const_str__begin_transmission;
+extern const bcstring be_const_str_pi;
+extern const bcstring be_const_str_save;
+extern const bcstring be_const_str_shared_key;
+extern const bcstring be_const_str_write_bit;
+extern const bcstring be_const_str__settings_ptr;
+extern const bcstring be_const_str_search;
+extern const bcstring be_const_str_opt_call;
+extern const bcstring be_const_str_setrange;
+extern const bcstring be_const_str_var;
+extern const bcstring be_const_str_resp_cmnd_done;
+extern const bcstring be_const_str_tan;
+extern const bcstring be_const_str_update;
+extern const bcstring be_const_str_get_string;
+extern const bcstring be_const_str_setitem;
+extern const bcstring be_const_str_memory;
+extern const bcstring be_const_str_tanh;
+extern const bcstring be_const_str_SERIAL_6O1;
+extern const bcstring be_const_str__end_transmission;
+extern const bcstring be_const_str__timers;
+extern const bcstring be_const_str_counters;
+extern const bcstring be_const_str_millis;
+extern const bcstring be_const_str_import;
+extern const bcstring be_const_str___lower__;
+extern const bcstring be_const_str_yield;
+extern const bcstring be_const_str__ccmd;
+extern const bcstring be_const_str_arg_size;
+extern const bcstring be_const_str_imax;
+extern const bcstring be_const_str_elif;
diff --git a/lib/libesp32/Berry/generate/be_const_strtab_def.h b/lib/libesp32/Berry/generate/be_const_strtab_def.h
index c0271b5d7..09b11b23d 100644
--- a/lib/libesp32/Berry/generate/be_const_strtab_def.h
+++ b/lib/libesp32/Berry/generate/be_const_strtab_def.h
@@ -1,899 +1,508 @@
-be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, &be_const_str_gc);
-be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL);
-be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL);
-be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_WEBCAM_XCLK);
-be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, &be_const_str_list);
-be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_top);
-be_define_const_str(top, "top", 2802900028u, 0, 3, NULL);
-be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_I2S_OUT_CLK);
-be_define_const_str(I2S_OUT_CLK, "I2S_OUT_CLK", 2580200387u, 0, 11, &be_const_str_MCP39F5_RST);
-be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_SBR_RX);
-be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, &be_const_str_codedump);
-be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, NULL);
-be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_exec_rules);
-be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_insert);
-be_define_const_str(insert, "insert", 3332609576u, 0, 6, NULL);
-be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, &be_const_str_WE517_TX);
-be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, &be_const_str_pi);
-be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL);
-be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, NULL);
-be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, NULL);
-be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, NULL);
-be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL);
-be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_update);
-be_define_const_str(update, "update", 672109684u, 0, 6, NULL);
-be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL);
-be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_finish);
-be_define_const_str(finish, "finish", 1494643858u, 0, 6, &be_const_str_getbits);
-be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_pow);
-be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL);
-be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, &be_const_str_SBR_TX);
-be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, &be_const_str_SERIAL_7N1);
-be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_cmd);
-be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_sin);
-be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_time_reached);
-be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL);
-be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_TUYA_TX);
-be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, &be_const_str_WEBCAM_SIOD);
-be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, &be_const_str_WIEGAND_D1);
-be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, NULL);
-be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_byte);
-be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL);
-be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, NULL);
-be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, NULL);
-be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, &be_const_str_XPT2046_CS);
-be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, &be_const_str_gen_cb);
-be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_scale_uint);
-be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL);
-be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, &be_const_str_PMS5003_TX);
-be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, &be_const_str_SM16716_DAT);
-be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, &be_const_str_asin);
-be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_tomap);
-be_define_const_str(tomap, "tomap", 612167626u, 0, 5, NULL);
-be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, &be_const_str_call);
-be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_get_string);
-be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, NULL);
-be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, &be_const_str_isnan);
-be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, &be_const_str_super);
-be_define_const_str(super, "super", 4152230356u, 0, 5, NULL);
-be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, NULL);
-be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_remove);
-be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_for);
-be_define_const_str(for, "for", 2901640080u, 54, 3, NULL);
-be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, &be_const_str_TM1638STB);
-be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, &be_const_str_collect);
-be_define_const_str(collect, "collect", 2399039025u, 0, 7, NULL);
-be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, &be_const_str_SHELLY_DIMMER_BOOT0);
-be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str_TUYA_RX);
-be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, &be_const_str_module);
-be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_set_timeouts);
-be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL);
-be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL);
-be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, &be_const_str_WIEGAND_D0);
-be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, &be_const_str_else);
-be_define_const_str(else, "else", 3183434736u, 52, 4, NULL);
-be_define_const_str(wifi, "wifi", 120087624u, 0, 4, &be_const_str_wire1);
-be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL);
-be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_ceil);
-be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, NULL);
-be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, &be_const_str_srand);
-be_define_const_str(srand, "srand", 465518633u, 0, 5, &be_const_str_try);
-be_define_const_str(try, "try", 2887626766u, 68, 3, NULL);
-be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, &be_const_str_SDM120_TX);
-be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, NULL);
-be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str_AS608_TX);
-be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_ETH_PHY_POWER);
-be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, NULL);
-be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, NULL);
-be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, &be_const_str_IBEACON_TX);
-be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, &be_const_str_INPUT_PULLDOWN);
-be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_isrunning);
-be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, &be_const_str_wire_scan);
-be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL);
-be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, &be_const_str_arg);
-be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_digital_write);
-be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, NULL);
-be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, NULL);
-be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_ROT1B_NP);
-be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str_scan);
-be_define_const_str(scan, "scan", 3974641896u, 0, 4, NULL);
-be_define_const_str(SWT1_PD, "SWT1_PD", 4166278953u, 0, 7, NULL);
-be_define_const_str(classname, "classname", 1998589948u, 0, 9, NULL);
-be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str_TELEINFO_ENABLE);
-be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, &be_const_str_TX2X_TXD_BLACK);
-be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, &be_const_str_deinit);
-be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_setmember);
-be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, &be_const_str_wire2);
-be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL);
-be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, &be_const_str_SERIAL_7E1);
-be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_SSPI_SCLK);
-be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, &be_const_str_web_send);
-be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL);
-be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, NULL);
-be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_nil);
-be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL);
-be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_allocated);
-be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_gamma8);
-be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_i2c_enabled);
-be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL);
-be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_seti);
-be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL);
-be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_KEY1_NP);
-be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, &be_const_str_MD5);
-be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_RC522_RST);
-be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, NULL);
-be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, &be_const_str_SM16716_CLK);
-be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, NULL);
-be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, NULL);
-be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_SDM120_RX);
-be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_upper);
-be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL);
-be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, &be_const_str_OneWire);
-be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_read12);
-be_define_const_str(read12, "read12", 4291076970u, 0, 6, NULL);
-be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_time_str);
-be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL);
-be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, &be_const_str_KEY1_INV_PD);
-be_define_const_str(KEY1_INV_PD, "KEY1_INV_PD", 3828014584u, 0, 11, &be_const_str_RC522_CS);
-be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, NULL);
-be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str_SSPI_MISO);
-be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, &be_const_str_lower);
-be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL);
-be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, &be_const_str_member);
-be_define_const_str(member, "member", 719708611u, 0, 6, &be_const_str_size);
-be_define_const_str(size, "size", 597743964u, 0, 4, NULL);
-be_define_const_str(eth, "eth", 2191266556u, 0, 3, &be_const_str_members);
-be_define_const_str(members, "members", 937576464u, 0, 7, NULL);
-be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, &be_const_str_issubclass);
-be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL);
-be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_Wire);
-be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, NULL);
-be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_MAX7219CLK);
-be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_MIEL_HVAC_TX);
-be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, &be_const_str_check_privileged_access);
-be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, NULL);
-be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, &be_const_str_WEBCAM_PCLK);
-be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_WEBCAM_RESET);
-be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, NULL);
-be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, &be_const_str_last_modified);
-be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, &be_const_str_log);
-be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_tob64);
-be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL);
-be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_DAC);
-be_define_const_str(DAC, "DAC", 788912847u, 0, 3, &be_const_str_SSPI_MOSI);
-be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, &be_const_str_encrypt);
-be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, NULL);
-be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, &be_const_str__ccmd);
-be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_cmd_res);
-be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_content_start);
-be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, NULL);
-be_define_const_str(settings, "settings", 1745255176u, 0, 8, NULL);
-be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, &be_const_str_PZEM004_RX);
-be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str_resp_cmnd_done);
-be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL);
-be_define_const_str(dot_size, ".size", 1965188224u, 0, 5, &be_const_str_EPAPER42_CS);
-be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str_I2C_SCL);
-be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, NULL);
-be_define_const_str(INTERRUPT, "INTERRUPT", 3809502704u, 0, 9, &be_const_str_dac_voltage);
-be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_break);
-be_define_const_str(break, "break", 3378807160u, 58, 5, NULL);
-be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, &be_const_str_CNTR1);
-be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, &be_const_str_PULLUP);
-be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, &be_const_str_shared_key);
-be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL);
-be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, &be_const_str_HLW_CF);
-be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, &be_const_str_end);
-be_define_const_str(end, "end", 1787721130u, 56, 3, NULL);
-be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, NULL);
-be_define_const_str(opt_call, "()", 685372826u, 0, 2, NULL);
-be_define_const_str(print, "print", 372738696u, 0, 5, NULL);
-be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_isinstance);
-be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_public_key);
-be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, &be_const_str_wire);
-be_define_const_str(wire, "wire", 4082753944u, 0, 4, &be_const_str_static);
-be_define_const_str(static, "static", 3532702267u, 71, 6, NULL);
-be_define_const_str(exists, "exists", 1002329533u, 0, 6, NULL);
-be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_SERIAL_6N2);
-be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_chars_in_string);
-be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, NULL);
-be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, NULL);
-be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, NULL);
-be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_SPI_DC);
-be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, NULL);
-be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, &be_const_str_find_op);
-be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL);
-be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, &be_const_str_read32);
-be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL);
-be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, NULL);
-be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, NULL);
-be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, NULL);
-be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, &be_const_str_VL53L0X_XSHUT1);
-be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, &be_const_str_content_send_style);
-be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, NULL);
-be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_cos);
-be_define_const_str(cos, "cos", 4220379804u, 0, 3, NULL);
-be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_publish_result);
-be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, &be_const_str_remove_driver);
-be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, NULL);
-be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_DEEPSLEEP);
-be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, &be_const_str__write);
-be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_asstring);
-be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL);
-be_define_const_str(addr, "addr", 1087856498u, 0, 4, NULL);
-be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, &be_const_str__global_def);
-be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, NULL);
-be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, NULL);
-be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, NULL);
-be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_read_bytes);
-be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, &be_const_str_try_rule);
-be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL);
-be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL);
-be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, &be_const_str_DHT11);
-be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, &be_const_str_tostring);
-be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL);
-be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL);
-be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, &be_const_str_SDS0X1_TX);
-be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, NULL);
-be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, NULL);
-be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_write_bytes);
-be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL);
-be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, &be_const_str_read);
-be_define_const_str(read, "read", 3470762949u, 0, 4, NULL);
-be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, &be_const_str_LEDLNK);
-be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, &be_const_str_SAIR_RX);
-be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, NULL);
-be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str__request_from);
-be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_content_flush);
-be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, NULL);
-be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, NULL);
-be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL);
-be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str_exp);
-be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_on);
-be_define_const_str(on, "on", 1630810064u, 0, 2, &be_const_str_type);
+be_define_const_str(size, "size", 597743964u, 0, 4, &be_const_str_type);
be_define_const_str(type, "type", 1361572173u, 0, 4, NULL);
-be_define_const_str(add_header, "add_header", 927130612u, 0, 10, &be_const_str_strftime);
-be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL);
-be_define_const_str(as, "as", 1579491469u, 67, 2, NULL);
-be_define_const_str(KEY1_PD, "KEY1_PD", 3934075620u, 0, 7, &be_const_str_PROJECTOR_CTRL_RX);
-be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, &be_const_str_clear);
-be_define_const_str(clear, "clear", 1550717474u, 0, 5, NULL);
-be_define_const_str(I2S_IN_CLK, "I2S_IN_CLK", 2996930120u, 0, 10, NULL);
-be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, NULL);
-be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, &be_const_str_RXD);
-be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, &be_const_str_item);
-be_define_const_str(item, "item", 2671260646u, 0, 4, NULL);
-be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_char);
-be_define_const_str(char, "char", 2823553821u, 0, 4, NULL);
-be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, NULL);
-be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, &be_const_str_find);
-be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_gamma10);
-be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL);
-be_define_const_str(dot_len, ".len", 850842136u, 0, 4, &be_const_str_AudioOutputI2S);
-be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_CC1101_GDO0);
-be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, &be_const_str_DSB_OUT);
-be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, &be_const_str_pin_used);
-be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL);
-be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_SERIAL_5N1);
-be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_set_power);
-be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL);
-be_define_const_str(acos, "acos", 1006755615u, 0, 4, NULL);
-be_define_const_str(str, "str", 3259748752u, 0, 3, NULL);
-be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_content_button);
-be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_save);
-be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_yield);
-be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL);
-be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, NULL);
-be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, NULL);
-be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, &be_const_str_read24);
-be_define_const_str(read24, "read24", 1808533811u, 0, 6, &be_const_str_search);
-be_define_const_str(search, "search", 2150836393u, 0, 6, &be_const_str_web_send_decimal);
-be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL);
-be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, &be_const_str_SM2135_CLK);
-be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_erase);
-be_define_const_str(erase, "erase", 1010949589u, 0, 5, NULL);
-be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, NULL);
-be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_target_search);
-be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL);
-be_define_const_str(var, "var", 2317739966u, 64, 3, NULL);
-be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_MHZ_RXD);
-be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str_TM1638CLK);
-be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, &be_const_str_raise);
-be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL);
-be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, &be_const_str_TFMINIPLUS_TX);
-be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, &be_const_str_elif);
-be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL);
-be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, NULL);
-be_define_const_str(tag, "tag", 2516003219u, 0, 3, &be_const_str_class);
-be_define_const_str(class, "class", 2872970239u, 57, 5, NULL);
-be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str__ptr);
-be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_cosh);
-be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, NULL);
-be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_ctypes_bytes);
-be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_loop);
-be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_setitem);
-be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL);
-be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_WS2812);
-be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, NULL);
-be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, &be_const_str_add);
-be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_rtc);
-be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL);
-be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_POST);
-be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str__settings_def);
-be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, &be_const_str_delay);
-be_define_const_str(delay, "delay", 1322381784u, 0, 5, NULL);
-be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, NULL);
-be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, &be_const_str_reduce);
-be_define_const_str(reduce, "reduce", 2002030311u, 0, 6, &be_const_str_url_encode);
-be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL);
-be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, &be_const_str_TASMOTACLIENT_RST_INV);
-be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, &be_const_str_WEBCAM_HSD);
-be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, NULL);
-be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, &be_const_str_reset);
-be_define_const_str(reset, "reset", 1695364032u, 0, 5, NULL);
-be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, &be_const_str_publish);
-be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL);
-be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL);
-be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, &be_const_str_SAIR_TX);
-be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, NULL);
-be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, NULL);
-be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, &be_const_str_decrypt);
-be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, NULL);
-be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, &be_const_str_rand);
-be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL);
-be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_if);
-be_define_const_str(if, "if", 959999494u, 50, 2, NULL);
-be_define_const_str(dot_p2, ".p2", 232398067u, 0, 3, &be_const_str_continue);
-be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL);
-be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_WEBCAM_VSYNC);
-be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, &be_const_str_find_key_i);
-be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL);
-be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, NULL);
-be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, &be_const_str_SERIAL_6O1);
-be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_ZIGBEE_RST);
-be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, NULL);
-be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, &be_const_str_MAX31855CLK);
-be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, &be_const_str_RF_SENSOR);
-be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, &be_const_str_init);
-be_define_const_str(init, "init", 380752755u, 0, 4, NULL);
-be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str_resp_cmnd_error);
-be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL);
-be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, NULL);
-be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_available);
-be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_select);
-be_define_const_str(select, "select", 297952813u, 0, 6, NULL);
-be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str_tanh);
-be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL);
-be_define_const_str(false, "false", 184981848u, 62, 5, NULL);
-be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, NULL);
-be_define_const_str(dot_p1, ".p1", 249175686u, 0, 3, &be_const_str_ADC_LIGHT);
-be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_abs);
-be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_reverse);
-be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL);
-be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_attrdump);
-be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_depower);
-be_define_const_str(depower, "depower", 3563819571u, 0, 7, NULL);
-be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, &be_const_str_import);
-be_define_const_str(import, "import", 288002260u, 66, 6, NULL);
-be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_def);
-be_define_const_str(def, "def", 3310976652u, 55, 3, NULL);
-be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, &be_const_str_keys);
-be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_time_dump);
-be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL);
-be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, &be_const_str_AudioGeneratorWAV);
-be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_ST7789_CS);
-be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, &be_const_str_set_timer);
-be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL);
-be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, &be_const_str_SPI_MISO);
-be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, NULL);
-be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_P9813_CLK);
-be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, &be_const_str_REL1_INV);
-be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, &be_const_str_fromptr);
-be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, NULL);
-be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str_iter);
-be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL);
-be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, &be_const_str_load);
-be_define_const_str(load, "load", 3859241449u, 0, 4, NULL);
-be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, &be_const_str_TFMINIPLUS_RX);
-be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, &be_const_str_resize);
-be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL);
-be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, NULL);
-be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_input);
-be_define_const_str(input, "input", 4191711099u, 0, 5, NULL);
-be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, &be_const_str_deg);
-be_define_const_str(deg, "deg", 3327754271u, 0, 3, NULL);
-be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str_SSD1331_DC);
-be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, &be_const_str_global);
-be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_traceback);
-be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, &be_const_str_do);
-be_define_const_str(do, "do", 1646057492u, 65, 2, NULL);
-be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str_SERIAL_8O2);
-be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, NULL);
-be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, &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(toupper, "toupper", 3691983576u, 0, 7, &be_const_str_true);
-be_define_const_str(true, "true", 1303515621u, 61, 4, NULL);
-be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_atan);
-be_define_const_str(atan, "atan", 108579519u, 0, 4, NULL);
-be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_remove_timer);
-be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, NULL);
-be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, NULL);
-be_define_const_str(close, "close", 667630371u, 0, 5, NULL);
-be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, &be_const_str_while);
-be_define_const_str(while, "while", 231090382u, 53, 5, NULL);
-be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_counters);
-be_define_const_str(counters, "counters", 4095866864u, 0, 8, &be_const_str_imax);
-be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL);
-be_define_const_str(I2S_OUT_DATA, "I2S_OUT_DATA", 1176288293u, 0, 12, &be_const_str_ST7789_DC);
-be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, NULL);
-be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str_SM2135_DAT);
-be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, &be_const_str__cb);
-be_define_const_str(_cb, "_cb", 4043300367u, 0, 3, &be_const_str_read13);
-be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL);
-be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str_LOW);
-be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, &be_const_str_SERIAL_6O2);
-be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_SERIAL_8O1);
+be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, NULL);
+be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL);
+be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_SERIAL_8O1);
be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, NULL);
-be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_dump);
-be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_get_power);
-be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, &be_const_str_number);
-be_define_const_str(number, "number", 467038368u, 0, 6, NULL);
-be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, &be_const_str_SERIAL_5O1);
-be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_TM1637CLK);
-be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, &be_const_str__begin_transmission);
-be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, NULL);
-be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, &be_const_str_name);
-be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_resp_cmnd_failed);
-be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, &be_const_str_return);
-be_define_const_str(return, "return", 2246981567u, 60, 6, NULL);
-be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, NULL);
-be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, NULL);
-be_define_const_str(push, "push", 2272264157u, 0, 4, NULL);
-be_define_const_str(real, "real", 3604983901u, 0, 4, NULL);
-be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_RFRECV);
-be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, &be_const_str_SOLAXX1_TX);
-be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_get_light);
-be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_millis);
-be_define_const_str(millis, "millis", 1214679063u, 0, 6, &be_const_str_pop);
-be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL);
-be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_remove_rule);
+be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_global);
+be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_last_modified);
+be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, &be_const_str_public_key);
+be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, NULL);
+be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, &be_const_str_set_power);
+be_define_const_str(set_power, "set_power", 549820893u, 0, 9, &be_const_str_url_encode);
+be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL);
+be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, &be_const_str_content_button);
+be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, NULL);
+be_define_const_str(_cb, "_cb", 4043300367u, 0, 3, &be_const_str_atan);
+be_define_const_str(atan, "atan", 108579519u, 0, 4, NULL);
+be_define_const_str(dot_p2, ".p2", 232398067u, 0, 3, &be_const_str_iter);
+be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_remove_timer);
+be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, &be_const_str_select);
+be_define_const_str(select, "select", 297952813u, 0, 6, &be_const_str_setmember);
+be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, &be_const_str_top);
+be_define_const_str(top, "top", 2802900028u, 0, 3, NULL);
+be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_gamma10);
+be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_i2c_enabled);
+be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, &be_const_str_on);
+be_define_const_str(on, "on", 1630810064u, 0, 2, &be_const_str_pin_mode);
+be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL);
+be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_chars_in_string);
+be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_wifi);
+be_define_const_str(wifi, "wifi", 120087624u, 0, 4, NULL);
+be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_allocated);
+be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_set_timer);
+be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL);
+be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_ceil);
+be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_clear);
+be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_wire1);
+be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL);
+be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL);
+be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str_classname);
+be_define_const_str(classname, "classname", 1998589948u, 0, 9, NULL);
+be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_event);
+be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_pin);
+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_else);
+be_define_const_str(else, "else", 3183434736u, 52, 4, NULL);
+be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_deinit);
+be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_end);
+be_define_const_str(end, "end", 1787721130u, 56, 3, NULL);
+be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL);
+be_define_const_str(char, "char", 2823553821u, 0, 4, NULL);
+be_define_const_str(add_header, "add_header", 927130612u, 0, 10, NULL);
+be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_deg);
+be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_digital_read);
+be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_srand);
+be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL);
+be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_enabled);
+be_define_const_str(enabled, "enabled", 49525662u, 0, 7, NULL);
+be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL);
+be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, &be_const_str_copy);
+be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_exp);
+be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_remove_rule);
be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL);
-be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_PROJECTOR_CTRL_TX);
-be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, NULL);
-be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, &be_const_str_webclient);
-be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, NULL);
-be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_I2C_SDA);
-be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, &be_const_str_add_cmd);
-be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, NULL);
-be_define_const_str(_get_cb, "_get_cb", 1448849122u, 0, 7, NULL);
-be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_detect);
-be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_digital_read);
-be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, NULL);
-be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL);
-be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, NULL);
-be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, NULL);
-be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, &be_const_str_SOLAXX1_RX);
-be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, &be_const_str_WEBCAM_PSCLK);
-be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, &be_const_str_get_size);
-be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, NULL);
-be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, &be_const_str_geti);
-be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_open);
-be_define_const_str(open, "open", 3546203337u, 0, 4, NULL);
-be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, NULL);
-be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, NULL);
-be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, &be_const_str_run_deferred);
-be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL);
-be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str__settings_ptr);
-be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, NULL);
-be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL);
-be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str_split);
-be_define_const_str(split, "split", 2276994531u, 0, 5, &be_const_str_stop);
-be_define_const_str(stop, "stop", 3411225317u, 0, 4, &be_const_str_tolower);
-be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL);
-be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str_HIGH);
-be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_fromstring);
-be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_redirect);
-be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL);
-be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str_DSB);
-be_define_const_str(DSB, "DSB", 98073254u, 0, 3, &be_const_str_add_rule);
-be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, NULL);
-be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, &be_const_str_TASMOTACLIENT_TXD);
-be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, NULL);
-be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str_MIEL_HVAC_RX);
-be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_SR04_TRIG);
-be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, &be_const_str_get_option);
-be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL);
-be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, &be_const_str_I2S_IN_SLCT);
-be_define_const_str(I2S_IN_SLCT, "I2S_IN_SLCT", 706051516u, 0, 11, &be_const_str_NRG_CF1);
-be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_hex);
-be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_map);
-be_define_const_str(map, "map", 3751997361u, 0, 3, &be_const_str_rad);
-be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL);
-be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_concat);
-be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL);
-be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, NULL);
-be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, &be_const_str_ZIGBEE_TX);
-be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, &be_const_str_assert);
-be_define_const_str(assert, "assert", 2774883451u, 0, 6, NULL);
-be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, &be_const_str_OUTPUT_OPEN_DRAIN);
-be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, &be_const_str_state);
-be_define_const_str(state, "state", 2016490230u, 0, 5, NULL);
-be_define_const_str(int, "int", 2515107422u, 0, 3, NULL);
-be_define_const_str(I2S_IN_DATA, "I2S_IN_DATA", 4125971460u, 0, 11, &be_const_str_ROT1B);
-be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, NULL);
-be_define_const_str(dot_w, ".w", 1255414514u, 0, 2, &be_const_str_ADE7953_IRQ);
-be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_SSD1351_DC);
-be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, &be_const_str_reset_search);
-be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL);
-be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_BUZZER);
-be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, &be_const_str_PZEM017_RX);
-be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_RA8876_CS);
-be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, &be_const_str__def);
-be_define_const_str(_def, "_def", 1985022181u, 0, 4, NULL);
-be_define_const_str(DI, "DI", 1070498734u, 0, 2, &be_const_str_I2S_OUT_SLCT);
-be_define_const_str(I2S_OUT_SLCT, "I2S_OUT_SLCT", 4037293837u, 0, 12, &be_const_str_NRG_SEL);
-be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, NULL);
-be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL);
-be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, &be_const_str_OUTPUT);
-be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str_reverse_gamma10);
-be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL);
-be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_KEY1_INV_NP);
-be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, &be_const_str_ZIGBEE_RX);
-be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, &be_const_str_set_light);
-be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL);
-be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_cb_dispatch);
-be_define_const_str(cb_dispatch, "cb_dispatch", 1741510499u, 0, 11, NULL);
-be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, &be_const_str_toptr);
+be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, NULL);
+be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_assert);
+be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_isinstance);
+be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, NULL);
+be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL);
+be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_read_bytes);
+be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL);
+be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL);
+be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_cos);
+be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_redirect);
+be_define_const_str(redirect, "redirect", 389758641u, 0, 8, &be_const_str_write_bytes);
+be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL);
+be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_class);
+be_define_const_str(class, "class", 2872970239u, 57, 5, NULL);
+be_define_const_str(cb_dispatch, "cb_dispatch", 1741510499u, 0, 11, &be_const_str_ctypes_bytes_dyn);
+be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, NULL);
+be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_number);
+be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_toptr);
be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, NULL);
-be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL);
-be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_nan);
-be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL);
-be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_set_auth);
-be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL);
-be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_event);
-be_define_const_str(event, "event", 4264611999u, 0, 5, NULL);
-be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, &be_const_str__read);
-be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL);
-be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_content_send);
-be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, NULL);
-be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, &be_const_str_BS814_DAT);
-be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, &be_const_str_arg_size);
-be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, NULL);
-be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, &be_const_str_resp_cmnd_str);
-be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL);
-be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, &be_const_str_WEBCAM_DATA);
-be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, &be_const_str_WEBCAM_HREF);
-be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, &be_const_str_bytes);
-be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, NULL);
-be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_memory);
-be_define_const_str(memory, "memory", 2229924270u, 0, 6, NULL);
-be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str_response_append);
-be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL);
-be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, &be_const_str_SERIAL_7O2);
-be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_SSD1331_CS);
-be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_arg_name);
-be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, NULL);
-be_define_const_str(serial, "serial", 3687697785u, 0, 6, NULL);
-be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, &be_const_str_read8);
-be_define_const_str(read8, "read8", 2802788167u, 0, 5, &be_const_str_write);
-be_define_const_str(write, "write", 3190202204u, 0, 5, NULL);
-be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, NULL);
-be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, NULL);
-be_define_const_str(has, "has", 3988721635u, 0, 3, &be_const_str_pin);
-be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_remove_cmd);
-be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL);
-be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_MCP39F5_RX);
-be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, &be_const_str_SERIAL_5E2);
-be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_resolvecmnd);
-be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, &be_const_str_set);
-be_define_const_str(set, "set", 3324446467u, 0, 3, &be_const_str_set_useragent);
-be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, &be_const_str_except);
-be_define_const_str(except, "except", 950914032u, 69, 6, NULL);
-be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_compile);
-be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_get_switch);
+be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str__def);
+be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_find_op);
+be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_wire_scan);
+be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL);
be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, NULL);
-be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str__timers);
-be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_range);
-be_define_const_str(range, "range", 4208725202u, 0, 5, NULL);
-be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, NULL);
-be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str__buffer);
-be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, NULL);
+be_define_const_str(_read, "_read", 346717030u, 0, 5, &be_const_str_member);
+be_define_const_str(member, "member", 719708611u, 0, 6, &be_const_str_target_search);
+be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, &be_const_str_traceback);
+be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, &be_const_str_static);
+be_define_const_str(static, "static", 3532702267u, 71, 6, NULL);
+be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_fromptr);
+be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, &be_const_str_getbits);
+be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, NULL);
+be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL);
+be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL);
+be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL);
be_define_const_str(flush, "flush", 3002334877u, 0, 5, NULL);
+be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, NULL);
+be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, &be_const_str_resp_cmnd_str);
+be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL);
+be_define_const_str(_settings_def, "_settings_def", 3775560307u, 0, 13, NULL);
+be_define_const_str(name, "name", 2369371622u, 0, 4, NULL);
+be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_asin);
+be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_members);
+be_define_const_str(members, "members", 937576464u, 0, 7, &be_const_str_split);
+be_define_const_str(split, "split", 2276994531u, 0, 5, NULL);
+be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_super);
+be_define_const_str(super, "super", 4152230356u, 0, 5, NULL);
+be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_calldepth);
+be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_ctypes_bytes);
+be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_get_free_heap);
+be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, NULL);
+be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_log);
+be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_raise);
+be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL);
+be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_set);
+be_define_const_str(set, "set", 3324446467u, 0, 3, NULL);
+be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str__cmd);
+be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, NULL);
+be_define_const_str(dot_size, ".size", 1965188224u, 0, 5, &be_const_str_SERIAL_5O1);
+be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, NULL);
+be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, &be_const_str_AudioFileSourceFS);
+be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str_sinh);
+be_define_const_str(sinh, "sinh", 282220607u, 0, 4, &be_const_str_time_str);
+be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL);
+be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, NULL);
+be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL);
+be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str_exec_tele);
+be_define_const_str(exec_tele, "exec_tele", 1020751601u, 0, 9, NULL);
+be_define_const_str(except, "except", 950914032u, 69, 6, NULL);
+be_define_const_str(dot_len, ".len", 850842136u, 0, 4, &be_const_str_AudioGeneratorMP3);
+be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str__global_addr);
+be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, NULL);
+be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_SERIAL_7E1);
+be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, &be_const_str_SERIAL_8O2);
+be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, &be_const_str_get);
+be_define_const_str(get, "get", 1410115415u, 0, 3, NULL);
+be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_init);
+be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_module);
+be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_skip);
+be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL);
+be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, &be_const_str_find);
+be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_item);
+be_define_const_str(item, "item", 2671260646u, 0, 4, NULL);
+be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_format);
+be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_sqrt);
+be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL);
+be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL);
+be_define_const_str(true, "true", 1303515621u, 61, 4, NULL);
+be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_content_send_style);
+be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, &be_const_str_rtc);
+be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL);
+be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str_digital_write);
+be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_get_light);
+be_define_const_str(get_light, "get_light", 381930476u, 0, 9, NULL);
+be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_read12);
+be_define_const_str(read12, "read12", 4291076970u, 0, 6, NULL);
+be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_remove_cmd);
+be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_str);
+be_define_const_str(str, "str", 3259748752u, 0, 3, NULL);
+be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_read24);
+be_define_const_str(read24, "read24", 1808533811u, 0, 6, &be_const_str_scale_uint);
+be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, &be_const_str_try_rule);
+be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL);
+be_define_const_str(publish_result, "publish_result", 2013351252u, 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, &be_const_str_toupper);
+be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL);
+be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_break);
+be_define_const_str(break, "break", 3378807160u, 58, 5, NULL);
+be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, &be_const_str_resolvecmnd);
+be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL);
+be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_SERIAL_5O2);
+be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str_erase);
+be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_lower);
+be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL);
+be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, NULL);
+be_define_const_str(print, "print", 372738696u, 0, 5, &be_const_str_def);
+be_define_const_str(def, "def", 3310976652u, 55, 3, NULL);
+be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_read8);
+be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL);
+be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_dump);
+be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_isrunning);
+be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, &be_const_str_push);
+be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_time_dump);
+be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, &be_const_str_return);
+be_define_const_str(return, "return", 2246981567u, 60, 6, NULL);
+be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL);
+be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, NULL);
+be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_add_driver);
+be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_keys);
+be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_run_deferred);
+be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL);
+be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_delay);
+be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_depower);
+be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_imin);
+be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_write8);
+be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL);
+be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_add_cmd);
+be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_add_rule);
+be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, NULL);
+be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_geti);
+be_define_const_str(geti, "geti", 2381006490u, 0, 4, &be_const_str_upper);
+be_define_const_str(upper, "upper", 176974407u, 0, 5, &be_const_str_webclient);
+be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, NULL);
+be_define_const_str(has, "has", 3988721635u, 0, 3, NULL);
+be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, NULL);
+be_define_const_str(reduce, "reduce", 2002030311u, 0, 6, NULL);
+be_define_const_str(as, "as", 1579491469u, 67, 2, NULL);
+be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_tag);
+be_define_const_str(tag, "tag", 2516003219u, 0, 3, NULL);
+be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, NULL);
+be_define_const_str(_get_cb, "_get_cb", 1448849122u, 0, 7, &be_const_str_try);
+be_define_const_str(try, "try", 2887626766u, 68, 3, &be_const_str_while);
+be_define_const_str(while, "while", 231090382u, 53, 5, NULL);
+be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL);
+be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_kv);
+be_define_const_str(kv, "kv", 1497177492u, 0, 2, &be_const_str_open);
+be_define_const_str(open, "open", 3546203337u, 0, 4, &be_const_str_web_send_decimal);
+be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL);
+be_define_const_str(cmd_res, "cmd_res", 921166762u, 0, 7, &be_const_str_settings);
+be_define_const_str(settings, "settings", 1745255176u, 0, 8, NULL);
+be_define_const_str(insert, "insert", 3332609576u, 0, 6, NULL);
+be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_asstring);
+be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_get_option);
+be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL);
+be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_call);
+be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_eth);
+be_define_const_str(eth, "eth", 2191266556u, 0, 3, &be_const_str_if);
+be_define_const_str(if, "if", 959999494u, 50, 2, NULL);
+be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_time_reached);
+be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL);
+be_define_const_str(dot_p1, ".p1", 249175686u, 0, 3, &be_const_str_concat);
+be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_content_flush);
+be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, &be_const_str_list);
+be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_map);
+be_define_const_str(map, "map", 3751997361u, 0, 3, &be_const_str_for);
+be_define_const_str(for, "for", 2901640080u, 54, 3, NULL);
+be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_set_timeouts);
+be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL);
+be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, NULL);
+be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_abs);
+be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_reverse);
+be_define_const_str(reverse, "reverse", 558918661u, 0, 7, &be_const_str_set_useragent);
+be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, &be_const_str_wire2);
+be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL);
+be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_set_light);
+be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL);
+be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_seti);
+be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL);
+be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_content_send);
+be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_real);
+be_define_const_str(real, "real", 3604983901u, 0, 4, NULL);
+be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_reset_search);
+be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL);
+be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL);
+be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_resp_cmnd_error);
+be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL);
+be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_collect);
+be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_loop);
+be_define_const_str(loop, "loop", 3723446379u, 0, 4, NULL);
+be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL);
+be_define_const_str(dot_w, ".w", 1255414514u, 0, 2, &be_const_str_addr);
+be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_tob64);
+be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL);
+be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_set_auth);
+be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL);
+be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, &be_const_str_arg_name);
+be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_contains);
+be_define_const_str(contains, "contains", 1825239352u, 0, 8, &be_const_str_content_stop);
+be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, NULL);
+be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL);
+be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_gamma8);
+be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_isnan);
+be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, &be_const_str_pin_used);
+be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_read);
+be_define_const_str(read, "read", 3470762949u, 0, 4, &be_const_str_reverse_gamma10);
+be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL);
+be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_check_privileged_access);
+be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_load);
+be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_resize);
+be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL);
+be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_write);
+be_define_const_str(write, "write", 3190202204u, 0, 5, NULL);
+be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, NULL);
+be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_range);
+be_define_const_str(range, "range", 4208725202u, 0, 5, NULL);
+be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_exec_rules);
+be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_fromb64);
+be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, &be_const_str_get_power);
+be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, &be_const_str_serial);
+be_define_const_str(serial, "serial", 3687697785u, 0, 6, NULL);
+be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_finish);
+be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL);
+be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_continue);
+be_define_const_str(continue, "continue", 2977070660u, 59, 8, &be_const_str_do);
+be_define_const_str(do, "do", 1646057492u, 65, 2, NULL);
+be_define_const_str(false, "false", 184981848u, 62, 5, NULL);
+be_define_const_str(tomap, "tomap", 612167626u, 0, 5, NULL);
+be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL);
+be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_reset);
+be_define_const_str(reset, "reset", 1695364032u, 0, 5, &be_const_str_tolower);
+be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL);
+be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL);
+be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_resp_cmnd);
+be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL);
+be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_rad);
+be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_read32);
+be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL);
+be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_pi);
+be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL);
+be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_shared_key);
+be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, &be_const_str_write_bit);
+be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL);
+be_define_const_str(_settings_ptr, "_settings_ptr", 1825772182u, 0, 13, &be_const_str_search);
+be_define_const_str(search, "search", 2150836393u, 0, 6, NULL);
+be_define_const_str(opt_call, "()", 685372826u, 0, 2, &be_const_str_setrange);
+be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, &be_const_str_var);
+be_define_const_str(var, "var", 2317739966u, 64, 3, NULL);
+be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL);
+be_define_const_str(tan, "tan", 2633446552u, 0, 3, &be_const_str_update);
+be_define_const_str(update, "update", 672109684u, 0, 6, NULL);
+be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, &be_const_str_setitem);
+be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL);
+be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_tanh);
+be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL);
+be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str__end_transmission);
+be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str__timers);
+be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, NULL);
+be_define_const_str(counters, "counters", 4095866864u, 0, 8, NULL);
+be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL);
+be_define_const_str(import, "import", 288002260u, 66, 6, NULL);
+be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_yield);
+be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL);
+be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_arg_size);
+be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, NULL);
+be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL);
+be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL);
static const bstring* const m_string_table[] = {
+ (const bstring *)&be_const_str_size,
+ (const bstring *)&be_const_str_has_arg,
NULL,
+ (const bstring *)&be_const_str_remove,
+ (const bstring *)&be_const_str_SERIAL_6E1,
+ (const bstring *)&be_const_str_cosh,
+ (const bstring *)&be_const_str_dac_voltage,
NULL,
- (const bstring *)&be_const_str_WEBCAM_PWDN,
- (const bstring *)&be_const_str_pin_mode,
(const bstring *)&be_const_str_SERIAL_7N2,
+ (const bstring *)&be_const_str__cb,
+ (const bstring *)&be_const_str_dot_p2,
+ (const bstring *)&be_const_str_decrypt,
+ (const bstring *)&be_const_str_SERIAL_7O1,
+ (const bstring *)&be_const_str_SERIAL_5N2,
+ (const bstring *)&be_const_str_SERIAL_8N2,
+ (const bstring *)&be_const_str_resp_cmnd_failed,
+ (const bstring *)&be_const_str_SERIAL_5E1,
NULL,
- (const bstring *)&be_const_str_CSE7761_RX,
- (const bstring *)&be_const_str_SERIAL_7E2,
- (const bstring *)&be_const_str_SI7021,
- (const bstring *)&be_const_str_TCP_RX,
- (const bstring *)&be_const_str_RFSEND,
- (const bstring *)&be_const_str_fromb64,
- (const bstring *)&be_const_str_resp_cmnd,
- (const bstring *)&be_const_str_format,
- (const bstring *)&be_const_str_classof,
- NULL,
- (const bstring *)&be_const_str___lower__,
- (const bstring *)&be_const_str_PULLDOWN,
- (const bstring *)&be_const_str_MP3_DFR562,
- (const bstring *)&be_const_str_SERIAL_8E1,
- (const bstring *)&be_const_str_WINDMETER_SPEED,
- (const bstring *)&be_const_str_A4988_STP,
- (const bstring *)&be_const_str_WEBCAM_PSRCS,
- (const bstring *)&be_const_str_ADC_RANGE,
- (const bstring *)&be_const_str_PZEM0XX_TX,
- (const bstring *)&be_const_str_SR04_ECHO,
- (const bstring *)&be_const_str_REL1,
- (const bstring *)&be_const_str_get,
- (const bstring *)&be_const_str_TCP_TX,
- (const bstring *)&be_const_str_LE01MR_RX,
- (const bstring *)&be_const_str_skip,
- (const bstring *)&be_const_str_ROT1A_NP,
- (const bstring *)&be_const_str_wifi,
- (const bstring *)&be_const_str_ADC_INPUT,
- (const bstring *)&be_const_str_sqrt,
- NULL,
- (const bstring *)&be_const_str_DHT11_OUT,
- (const bstring *)&be_const_str_ARIRFSEL,
- (const bstring *)&be_const_str_get_free_heap,
- (const bstring *)&be_const_str_GPS_TX,
- (const bstring *)&be_const_str_LE01MR_TX,
- (const bstring *)&be_const_str_NRG_SEL_INV,
- (const bstring *)&be_const_str_LEDLNK_INV,
- (const bstring *)&be_const_str_SWT1_PD,
- (const bstring *)&be_const_str_classname,
- (const bstring *)&be_const_str_PZEM016_RX,
- (const bstring *)&be_const_str_SDM630_RX,
- (const bstring *)&be_const_str_content_stop,
- (const bstring *)&be_const_str_OUTPUT_HI,
+ (const bstring *)&be_const_str__global_def,
+ (const bstring *)&be_const_str__rules,
+ (const bstring *)&be_const_str___upper__,
+ (const bstring *)&be_const_str_char,
+ (const bstring *)&be_const_str_add_header,
+ (const bstring *)&be_const_str_OneWire,
+ (const bstring *)&be_const_str_close,
+ (const bstring *)&be_const_str_read13,
+ (const bstring *)&be_const_str_AudioOutput,
+ (const bstring *)&be_const_str_gen_cb,
(const bstring *)&be_const_str_opt_neq,
+ (const bstring *)&be_const_str_pow,
+ (const bstring *)&be_const_str_count,
+ (const bstring *)&be_const_str_web_send,
+ NULL,
+ (const bstring *)&be_const_str_classof,
+ (const bstring *)&be_const_str_rand,
+ (const bstring *)&be_const_str_cb_dispatch,
+ (const bstring *)&be_const_str_floor,
+ (const bstring *)&be_const_str_SERIAL_5N1,
+ (const bstring *)&be_const_str_get_switch,
+ NULL,
+ (const bstring *)&be_const_str__read,
+ (const bstring *)&be_const_str_opt_eq,
+ NULL,
+ (const bstring *)&be_const_str_setbits,
+ (const bstring *)&be_const_str_stop,
+ (const bstring *)&be_const_str_issubclass,
+ (const bstring *)&be_const_str_flush,
+ (const bstring *)&be_const_str_I2C_Driver,
+ (const bstring *)&be_const_str_atan2,
+ (const bstring *)&be_const_str__settings_def,
+ (const bstring *)&be_const_str_name,
+ (const bstring *)&be_const_str_acos,
+ (const bstring *)&be_const_str_exists,
+ (const bstring *)&be_const_str_EC_C25519,
+ (const bstring *)&be_const_str_bus,
+ (const bstring *)&be_const_str_bytes,
+ NULL,
+ (const bstring *)&be_const_str_SERIAL_6N1,
+ (const bstring *)&be_const_str_dot_size,
+ (const bstring *)&be_const_str_AES_GCM,
+ (const bstring *)&be_const_str_cmd,
+ (const bstring *)&be_const_str_tostring,
+ (const bstring *)&be_const_str__buffer,
+ (const bstring *)&be_const_str_except,
+ (const bstring *)&be_const_str_dot_len,
+ (const bstring *)&be_const_str_SERIAL_6E2,
+ (const bstring *)&be_const_str_SERIAL_8E2,
+ (const bstring *)&be_const_str__ptr,
+ (const bstring *)&be_const_str_GET,
+ NULL,
+ (const bstring *)&be_const_str_byte,
+ NULL,
+ (const bstring *)&be_const_str_true,
+ (const bstring *)&be_const_str__write,
+ (const bstring *)&be_const_str_Wire,
+ (const bstring *)&be_const_str_SERIAL_8N1,
+ (const bstring *)&be_const_str_exec_cmd,
+ (const bstring *)&be_const_str_available,
+ (const bstring *)&be_const_str_publish_result,
+ (const bstring *)&be_const_str_,
+ NULL,
+ (const bstring *)&be_const_str_SERIAL_6N2,
+ (const bstring *)&be_const_str_AudioOutputI2S,
+ (const bstring *)&be_const_str_fromstring,
+ (const bstring *)&be_const_str_print,
+ (const bstring *)&be_const_str__request_from,
+ (const bstring *)&be_const_str_detect,
+ (const bstring *)&be_const_str_nil,
+ (const bstring *)&be_const_str_remove_driver,
+ (const bstring *)&be_const_str_SERIAL_7E2,
+ (const bstring *)&be_const_str_SERIAL_8E1,
+ (const bstring *)&be_const_str_add,
+ NULL,
+ (const bstring *)&be_const_str_compile,
+ (const bstring *)&be_const_str_has,
+ (const bstring *)&be_const_str_codedump,
+ (const bstring *)&be_const_str_reduce,
+ (const bstring *)&be_const_str_as,
+ (const bstring *)&be_const_str_get_size,
+ (const bstring *)&be_const_str_opt_connect,
+ (const bstring *)&be_const_str__get_cb,
+ (const bstring *)&be_const_str_gc,
+ (const bstring *)&be_const_str_begin,
+ (const bstring *)&be_const_str_cmd_res,
+ (const bstring *)&be_const_str_insert,
+ (const bstring *)&be_const_str___iterator__,
+ (const bstring *)&be_const_str_SERIAL_7N1,
+ (const bstring *)&be_const_str_int,
+ (const bstring *)&be_const_str_dot_p1,
+ (const bstring *)&be_const_str_dot_p,
+ (const bstring *)&be_const_str_SERIAL_7O2,
+ NULL,
+ (const bstring *)&be_const_str_POST,
+ (const bstring *)&be_const_str_hex,
+ (const bstring *)&be_const_str_SERIAL_5E2,
+ (const bstring *)&be_const_str_opt_add,
+ (const bstring *)&be_const_str_publish,
+ (const bstring *)&be_const_str_log10,
(const bstring *)&be_const_str__drivers,
NULL,
- (const bstring *)&be_const_str_,
- (const bstring *)&be_const_str_SHELLY_DIMMER_RST_INV,
- (const bstring *)&be_const_str_HRXL_RX,
- (const bstring *)&be_const_str_EC_C25519,
- NULL,
- (const bstring *)&be_const_str_HPMA_RX,
- (const bstring *)&be_const_str_SERIAL_8E2,
- (const bstring *)&be_const_str_DYP_RX,
- (const bstring *)&be_const_str_SDS0X1_RX,
- NULL,
- (const bstring *)&be_const_str_SDCARD_CS,
- (const bstring *)&be_const_str_eth,
- (const bstring *)&be_const_str_TXD,
- (const bstring *)&be_const_str_MAX7219DIN,
- (const bstring *)&be_const_str_HM10_RX,
- (const bstring *)&be_const_str_SPI_CS,
- (const bstring *)&be_const_str_SPI_MOSI,
- (const bstring *)&be_const_str_A4988_MS1,
- (const bstring *)&be_const_str_P9813_DAT,
- (const bstring *)&be_const_str_settings,
- (const bstring *)&be_const_str_NRF24_CS,
- (const bstring *)&be_const_str_dot_size,
- (const bstring *)&be_const_str_INTERRUPT,
- (const bstring *)&be_const_str_AZ_TXD,
- (const bstring *)&be_const_str_A4988_DIR,
- (const bstring *)&be_const_str_SSPI_MAX31865_CS1,
- (const bstring *)&be_const_str_opt_call,
- (const bstring *)&be_const_str_print,
- (const bstring *)&be_const_str_begin,
- (const bstring *)&be_const_str_exists,
- (const bstring *)&be_const_str_INPUT_PULLUP,
- (const bstring *)&be_const_str_CHANGE,
- (const bstring *)&be_const_str_SM16716_SEL,
- (const bstring *)&be_const_str_IBEACON_RX,
- (const bstring *)&be_const_str_TELEINFO_RX,
- (const bstring *)&be_const_str_PMS5003_RX,
- (const bstring *)&be_const_str_MAX7219CS,
- (const bstring *)&be_const_str_SDM72_RX,
- NULL,
- (const bstring *)&be_const_str_TM1638DIO,
- NULL,
- (const bstring *)&be_const_str_CSE7766_RX,
- (const bstring *)&be_const_str__end_transmission,
- (const bstring *)&be_const_str_SERIAL_8N1,
- (const bstring *)&be_const_str_A4988_ENA,
- (const bstring *)&be_const_str_addr,
- NULL,
- (const bstring *)&be_const_str_BL0940_RX,
- (const bstring *)&be_const_str_EXS_ENABLE,
- (const bstring *)&be_const_str_OPTION_A,
- (const bstring *)&be_const_str__available,
- (const bstring *)&be_const_str_write8,
- (const bstring *)&be_const_str_BOILER_OT_RX,
- (const bstring *)&be_const_str_write_bit,
- (const bstring *)&be_const_str_PWM1,
- (const bstring *)&be_const_str_ctypes_bytes_dyn,
- (const bstring *)&be_const_str_SERIAL_8N2,
- (const bstring *)&be_const_str_TM1637DIO,
- (const bstring *)&be_const_str_DDS2382_TX,
- (const bstring *)&be_const_str_ILI9488_CS,
- NULL,
- (const bstring *)&be_const_str_SSPI_CS,
- (const bstring *)&be_const_str_log10,
- (const bstring *)&be_const_str_BOILER_OT_TX,
- (const bstring *)&be_const_str_add_header,
- (const bstring *)&be_const_str_as,
- (const bstring *)&be_const_str_KEY1_PD,
- NULL,
- (const bstring *)&be_const_str_I2S_IN_CLK,
- (const bstring *)&be_const_str_SERIAL_6N1,
- (const bstring *)&be_const_str_LMT01,
- (const bstring *)&be_const_str_PN532_RXD,
- (const bstring *)&be_const_str_MAX31855CS,
- (const bstring *)&be_const_str_ELECTRIQ_MOODL_TX,
- (const bstring *)&be_const_str_dot_len,
- (const bstring *)&be_const_str_BUZZER_INV,
- (const bstring *)&be_const_str_acos,
- (const bstring *)&be_const_str_str,
- (const bstring *)&be_const_str_add_driver,
- (const bstring *)&be_const_str_NONE,
- (const bstring *)&be_const_str_TASMOTACLIENT_RST,
- (const bstring *)&be_const_str_exec_tele,
- (const bstring *)&be_const_str_IEM3000_RX,
- (const bstring *)&be_const_str_Tasmota,
- (const bstring *)&be_const_str_has_arg,
- (const bstring *)&be_const_str_var,
- NULL,
- (const bstring *)&be_const_str_IRRECV,
- (const bstring *)&be_const_str_MGC3130_RESET,
- (const bstring *)&be_const_str_HRE_CLOCK,
- (const bstring *)&be_const_str_tag,
- NULL,
- NULL,
- (const bstring *)&be_const_str_IEM3000_TX,
- (const bstring *)&be_const_str_HPMA_TX,
- (const bstring *)&be_const_str_TASMOTACLIENT_RXD,
- (const bstring *)&be_const_str_HX711_DAT,
- (const bstring *)&be_const_str_LED1,
- (const bstring *)&be_const_str_GPS_RX,
- (const bstring *)&be_const_str_LED1_INV,
- (const bstring *)&be_const_str_CC1101_GDO2,
- (const bstring *)&be_const_str_AudioFileSource,
- (const bstring *)&be_const_str_NEOPOOL_TX,
- (const bstring *)&be_const_str_setrange,
- (const bstring *)&be_const_str_DDS2382_RX,
- (const bstring *)&be_const_str_BS814_CLK,
- NULL,
- (const bstring *)&be_const_str_RISING,
- (const bstring *)&be_const_str_PWM1_INV,
- (const bstring *)&be_const_str_AS3935,
- (const bstring *)&be_const_str_dot_p2,
- NULL,
- NULL,
- (const bstring *)&be_const_str_SERIAL_6E2,
- (const bstring *)&be_const_str_SERIAL_5N2,
- (const bstring *)&be_const_str_HRE_DATA,
- (const bstring *)&be_const_str_HJL_CF,
- (const bstring *)&be_const_str_SERIAL_5O2,
- (const bstring *)&be_const_str_ADC_BUTTON_INV,
- (const bstring *)&be_const_str_ARIRFRCV,
- (const bstring *)&be_const_str_ADC_PH,
- (const bstring *)&be_const_str_false,
- (const bstring *)&be_const_str_SWT1,
- (const bstring *)&be_const_str_dot_p1,
- (const bstring *)&be_const_str__cmd,
- (const bstring *)&be_const_str_OUTPUT_LO,
- (const bstring *)&be_const_str_SERIAL_6E1,
- (const bstring *)&be_const_str_IRSEND,
- (const bstring *)&be_const_str_AS608_RX,
- (const bstring *)&be_const_str_ILI9341_DC,
- NULL,
- (const bstring *)&be_const_str_dot_p,
- (const bstring *)&be_const_str_INPUT,
- (const bstring *)&be_const_str_AES_GCM,
- (const bstring *)&be_const_str_MGC3130_XFER,
- (const bstring *)&be_const_str_SWT1_NP,
- NULL,
- (const bstring *)&be_const_str_count,
- NULL,
- (const bstring *)&be_const_str_SPI_CLK,
- (const bstring *)&be_const_str_AudioGenerator,
- (const bstring *)&be_const_str_KEY1,
- (const bstring *)&be_const_str_SSPI_DC,
- (const bstring *)&be_const_str_toupper,
- (const bstring *)&be_const_str_AudioGeneratorMP3,
- NULL,
- (const bstring *)&be_const_str_SDM72_TX,
- (const bstring *)&be_const_str_I2C_Driver,
- (const bstring *)&be_const_str_close,
- NULL,
- (const bstring *)&be_const_str_ZEROCROSS,
- (const bstring *)&be_const_str_opt_eq,
- (const bstring *)&be_const_str_I2S_OUT_DATA,
- (const bstring *)&be_const_str_AudioFileSourceFS,
- (const bstring *)&be_const_str_CSE7761_TX,
- (const bstring *)&be_const_str_MHZ_TXD,
- (const bstring *)&be_const_str_ROT1A,
- (const bstring *)&be_const_str_EPAPER29_CS,
- (const bstring *)&be_const_str_calldepth,
- (const bstring *)&be_const_str_FALLING,
- (const bstring *)&be_const_str_push,
- (const bstring *)&be_const_str_real,
- (const bstring *)&be_const_str_PN532_TXD,
- NULL,
- (const bstring *)&be_const_str___iterator__,
- (const bstring *)&be_const_str_ADC_BUTTON,
- (const bstring *)&be_const_str_HX711_SCK,
- (const bstring *)&be_const_str_DDSU666_RX,
- (const bstring *)&be_const_str__get_cb,
- (const bstring *)&be_const_str_copy,
- (const bstring *)&be_const_str_setbits,
- (const bstring *)&be_const_str_NRF24_DC,
- (const bstring *)&be_const_str_SSD1351_CS,
- (const bstring *)&be_const_str_BACKLIGHT,
- (const bstring *)&be_const_str_SDM630_TX,
- NULL,
- (const bstring *)&be_const_str_ADC_JOY,
- (const bstring *)&be_const_str_ETH_PHY_MDC,
- (const bstring *)&be_const_str_DDSU666_TX,
- NULL,
- (const bstring *)&be_const_str_opt_add,
- (const bstring *)&be_const_str_tan,
- (const bstring *)&be_const_str_KEY1_TC,
- NULL,
- (const bstring *)&be_const_str_AZ_RXD,
- (const bstring *)&be_const_str_ADC_TEMP,
- (const bstring *)&be_const_str_CNTR1_NP,
- (const bstring *)&be_const_str_MAX31855DO,
- (const bstring *)&be_const_str_ETH_PHY_MDIO,
- (const bstring *)&be_const_str_bus,
- (const bstring *)&be_const_str_WEBCAM_SIOC,
- (const bstring *)&be_const_str_SENSOR_END,
- (const bstring *)&be_const_str_AudioOutput,
- (const bstring *)&be_const_str_int,
- NULL,
- (const bstring *)&be_const_str_I2S_IN_DATA,
+ (const bstring *)&be_const_str_arg,
+ (const bstring *)&be_const_str_wire,
(const bstring *)&be_const_str_dot_w,
- (const bstring *)&be_const_str_opt_connect,
+ (const bstring *)&be_const_str_scan,
+ (const bstring *)&be_const_str_AudioFileSource,
+ (const bstring *)&be_const_str_nan,
+ (const bstring *)&be_const_str_MD5,
+ (const bstring *)&be_const_str_SERIAL_6O2,
+ (const bstring *)&be_const_str_content_start,
+ (const bstring *)&be_const_str_AudioGenerator,
NULL,
- (const bstring *)&be_const_str_DI,
- (const bstring *)&be_const_str_floor,
- (const bstring *)&be_const_str_NEOPOOL_RX,
- (const bstring *)&be_const_str_ILI9341_CS,
+ (const bstring *)&be_const_str_AudioGeneratorWAV,
+ (const bstring *)&be_const_str_encrypt,
+ (const bstring *)&be_const_str__available,
+ (const bstring *)&be_const_str_attrdump,
+ (const bstring *)&be_const_str_false,
+ (const bstring *)&be_const_str_tomap,
+ (const bstring *)&be_const_str_find_key_i,
+ (const bstring *)&be_const_str_pop,
+ (const bstring *)&be_const_str_sin,
NULL,
- (const bstring *)&be_const_str_HM10_TX,
- (const bstring *)&be_const_str_MCP39F5_TX,
- (const bstring *)&be_const_str_sinh,
- (const bstring *)&be_const_str_imin,
- (const bstring *)&be_const_str_SERIAL_7O1,
- (const bstring *)&be_const_str__rules,
- (const bstring *)&be_const_str_OLED_RESET,
- NULL,
- (const bstring *)&be_const_str___upper__,
- (const bstring *)&be_const_str_ADC_CT_POWER,
- NULL,
- NULL,
- (const bstring *)&be_const_str_SERIAL_5E1,
- (const bstring *)&be_const_str_RDM6300_RX,
- (const bstring *)&be_const_str_DCKI,
- NULL,
- (const bstring *)&be_const_str_CSE7766_TX,
- (const bstring *)&be_const_str_EPD_DATA,
- (const bstring *)&be_const_str_serial,
- (const bstring *)&be_const_str_HALLEFFECT,
- NULL,
- (const bstring *)&be_const_str_OPEN_DRAIN,
- (const bstring *)&be_const_str_WE517_RX,
- (const bstring *)&be_const_str_has,
- NULL,
- (const bstring *)&be_const_str_GET,
- (const bstring *)&be_const_str_DHT22,
- NULL,
- (const bstring *)&be_const_str_KEY1_INV,
- (const bstring *)&be_const_str_atan2,
- (const bstring *)&be_const_str_FTC532,
- NULL,
- (const bstring *)&be_const_str_flush
+ (const bstring *)&be_const_str_input,
+ (const bstring *)&be_const_str_Tasmota,
+ (const bstring *)&be_const_str__begin_transmission,
+ (const bstring *)&be_const_str_save,
+ (const bstring *)&be_const_str__settings_ptr,
+ (const bstring *)&be_const_str_opt_call,
+ (const bstring *)&be_const_str_resp_cmnd_done,
+ (const bstring *)&be_const_str_tan,
+ (const bstring *)&be_const_str_get_string,
+ (const bstring *)&be_const_str_memory,
+ (const bstring *)&be_const_str_SERIAL_6O1,
+ (const bstring *)&be_const_str_counters,
+ (const bstring *)&be_const_str_millis,
+ (const bstring *)&be_const_str_import,
+ (const bstring *)&be_const_str___lower__,
+ (const bstring *)&be_const_str__ccmd,
+ (const bstring *)&be_const_str_imax,
+ (const bstring *)&be_const_str_elif
};
static const struct bconststrtab m_const_string_table = {
- .size = 289,
- .count = 579,
+ .size = 159,
+ .count = 318,
.table = m_string_table
};
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_map.h b/lib/libesp32/Berry/generate/be_fixed_be_class_map.h
index 408a47721..826e28329 100644
--- a/lib/libesp32/Berry/generate/be_fixed_be_class_map.h
+++ b/lib/libesp32/Berry/generate/be_fixed_be_class_map.h
@@ -1,24 +1,25 @@
#include "be_constobj.h"
static be_define_const_map_slots(be_class_map_map) {
- { be_const_key(tostring, -1), be_const_func(m_tostring) },
- { be_const_key(size, -1), be_const_func(m_size) },
- { be_const_key(item, 4), be_const_func(m_item) },
- { be_const_key(setitem, 9), be_const_func(m_setitem) },
- { be_const_key(has, -1), be_const_func(m_has) },
- { be_const_key(keys, -1), be_const_func(m_keys) },
- { be_const_key(init, -1), be_const_func(m_init) },
- { be_const_key(remove, 5), be_const_func(m_remove) },
- { be_const_key(reduce, -1), be_const_func(m_reduce) },
- { be_const_key(iter, -1), be_const_func(m_iter) },
+ { be_const_key(setitem, -1), be_const_func(m_setitem) },
+ { be_const_key(remove, 8), be_const_func(m_remove) },
{ be_const_key(insert, -1), be_const_func(m_insert) },
- { be_const_key(dot_p, -1), be_const_var(0) },
- { be_const_key(find, 1), be_const_func(m_find) },
+ { be_const_key(tostring, 4), be_const_func(m_tostring) },
+ { be_const_key(has, -1), be_const_func(m_contains) },
+ { be_const_key(init, -1), be_const_func(m_init) },
+ { be_const_key(contains, 9), be_const_func(m_contains) },
+ { be_const_key(dot_p, 13), be_const_var(0) },
+ { be_const_key(reduce, -1), be_const_func(m_reduce) },
+ { be_const_key(size, -1), be_const_func(m_size) },
+ { be_const_key(find, -1), be_const_func(m_find) },
+ { be_const_key(keys, -1), be_const_func(m_keys) },
+ { be_const_key(item, -1), be_const_func(m_item) },
+ { be_const_key(iter, -1), be_const_func(m_iter) },
};
static be_define_const_map(
be_class_map_map,
- 13
+ 14
);
BE_EXPORT_VARIABLE be_define_const_class(
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 bdd9ea780..a9f54b4b4 100644
--- a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota.h
+++ b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota.h
@@ -1,84 +1,85 @@
#include "be_constobj.h"
static be_define_const_map_slots(be_class_tasmota_map) {
- { be_const_key(add_rule, 52), be_const_closure(add_rule_closure) },
- { be_const_key(_global_addr, -1), be_const_comptr(&TasmotaGlobal) },
- { be_const_key(web_send, 14), be_const_func(l_webSend) },
- { be_const_key(settings, -1), be_const_var(0) },
- { be_const_key(set_power, -1), be_const_func(l_setpower) },
- { be_const_key(add_cmd, -1), be_const_closure(add_cmd_closure) },
- { be_const_key(publish, 13), be_const_func(l_publish) },
- { be_const_key(remove_timer, -1), be_const_closure(remove_timer_closure) },
- { be_const_key(resp_cmnd, 55), be_const_func(l_respCmnd) },
- { be_const_key(i2c_enabled, -1), be_const_func(l_i2cenabled) },
- { be_const_key(time_reached, 38), be_const_func(l_timereached) },
- { be_const_key(resp_cmnd_error, 3), be_const_func(l_respCmndError) },
- { be_const_key(init, -1), be_const_closure(init_closure) },
- { be_const_key(eth, 35), be_const_func(l_eth) },
- { be_const_key(time_dump, -1), be_const_func(l_time_dump) },
- { be_const_key(_rules, 29), be_const_var(1) },
- { be_const_key(millis, 41), be_const_func(l_millis) },
- { be_const_key(get_option, -1), be_const_func(l_getoption) },
- { be_const_key(exec_cmd, 49), be_const_closure(exec_cmd_closure) },
- { be_const_key(_cb, -1), be_const_var(2) },
- { be_const_key(wire_scan, -1), be_const_closure(wire_scan_closure) },
- { be_const_key(response_append, 58), be_const_func(l_respAppend) },
- { be_const_key(add_driver, 44), be_const_closure(add_driver_closure) },
- { be_const_key(find_key_i, 28), be_const_closure(find_key_i_closure) },
- { be_const_key(remove_driver, 34), be_const_closure(remove_driver_closure) },
- { be_const_key(get_power, -1), be_const_func(l_getpower) },
- { be_const_key(resp_cmnd_str, -1), be_const_func(l_respCmndStr) },
- { be_const_key(find_op, 21), be_const_closure(find_op_closure) },
- { be_const_key(resolvecmnd, -1), be_const_func(l_resolveCmnd) },
- { be_const_key(cb_dispatch, 40), be_const_closure(cb_dispatch_closure) },
- { be_const_key(get_free_heap, -1), be_const_func(l_getFreeHeap) },
- { be_const_key(log, -1), be_const_func(l_logInfo) },
- { be_const_key(cmd_res, 45), be_const_var(3) },
- { be_const_key(wire1, 43), be_const_var(4) },
- { be_const_key(get_light, -1), be_const_closure(get_light_closure) },
- { be_const_key(strftime, -1), be_const_func(l_strftime) },
{ be_const_key(set_light, -1), be_const_closure(set_light_closure) },
- { be_const_key(global, -1), be_const_var(5) },
- { be_const_key(publish_result, -1), be_const_func(l_publish_result) },
- { be_const_key(cmd, -1), be_const_closure(cmd_closure) },
- { be_const_key(_settings_def, 46), be_const_comptr(&be_tasmota_settings_struct) },
- { be_const_key(load, -1), be_const_closure(load_closure) },
- { be_const_key(resp_cmnd_done, 23), be_const_func(l_respCmndDone) },
- { be_const_key(event, 25), be_const_closure(event_closure) },
- { be_const_key(run_deferred, 57), be_const_closure(run_deferred_closure) },
- { be_const_key(_ccmd, -1), be_const_var(6) },
- { be_const_key(exec_rules, -1), be_const_closure(exec_rules_closure) },
- { be_const_key(exec_tele, -1), be_const_closure(exec_tele_closure) },
- { be_const_key(remove_rule, 63), be_const_closure(remove_rule_closure) },
- { be_const_key(_get_cb, -1), be_const_func(l_get_cb) },
- { be_const_key(try_rule, -1), be_const_closure(try_rule_closure) },
- { be_const_key(time_str, -1), be_const_closure(time_str_closure) },
- { be_const_key(scale_uint, -1), be_const_func(l_scaleuint) },
{ be_const_key(gc, -1), be_const_closure(gc_closure) },
- { be_const_key(yield, -1), be_const_func(l_yield) },
- { be_const_key(web_send_decimal, -1), be_const_func(l_webSendDecimal) },
- { be_const_key(_timers, 32), be_const_var(7) },
- { be_const_key(get_switch, -1), be_const_func(l_getswitch) },
{ be_const_key(remove_cmd, -1), be_const_closure(remove_cmd_closure) },
- { be_const_key(memory, -1), be_const_func(l_memory) },
- { be_const_key(save, 9), be_const_func(l_save) },
- { be_const_key(_settings_ptr, 26), be_const_comptr(&Settings) },
- { be_const_key(wire2, -1), be_const_var(8) },
- { be_const_key(_cmd, -1), be_const_func(l_cmd) },
- { be_const_key(set_timer, -1), be_const_closure(set_timer_closure) },
- { be_const_key(_drivers, 1), be_const_var(9) },
- { be_const_key(chars_in_string, -1), be_const_closure(chars_in_string_closure) },
- { be_const_key(rtc, -1), be_const_func(l_rtc) },
+ { 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(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(delay, -1), be_const_func(l_delay) },
- { be_const_key(_global_def, 37), be_const_comptr(&be_tasmota_global_struct) },
- { be_const_key(resp_cmnd_failed, 39), be_const_func(l_respCmndFailed) },
+ { be_const_key(time_reached, -1), be_const_func(l_timereached) },
+ { 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) },
};
static be_define_const_map(
be_class_tasmota_map,
- 73
+ 74
);
BE_EXPORT_VARIABLE be_define_const_class(
diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_wire.h b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_wire.h
index 71ade9f7e..be34d40b0 100644
--- a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_wire.h
+++ b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_wire.h
@@ -1,25 +1,26 @@
#include "be_constobj.h"
static be_define_const_map_slots(be_class_tasmota_wire_map) {
- { be_const_key(_end_transmission, 10), be_const_func(b_wire_endtransmission) },
- { be_const_key(bus, -1), be_const_var(0) },
- { be_const_key(_read, 7), be_const_func(b_wire_read) },
- { be_const_key(read, -1), be_const_func(b_wire_validread) },
- { be_const_key(_request_from, -1), be_const_func(b_wire_requestfrom) },
{ be_const_key(init, -1), be_const_func(b_wire_init) },
- { be_const_key(write_bytes, -1), be_const_closure(write_bytes_closure) },
- { be_const_key(_begin_transmission, -1), be_const_func(b_wire_begintransmission) },
- { be_const_key(scan, -1), be_const_func(b_wire_scan) },
- { be_const_key(_write, 1), be_const_func(b_wire_write) },
- { be_const_key(write, -1), be_const_func(b_wire_validwrite) },
{ be_const_key(_available, -1), be_const_func(b_wire_available) },
- { be_const_key(detect, -1), be_const_func(b_wire_detect) },
+ { be_const_key(bus, -1), be_const_var(0) },
{ be_const_key(read_bytes, -1), be_const_closure(read_bytes_closure) },
+ { be_const_key(_request_from, -1), be_const_func(b_wire_requestfrom) },
+ { be_const_key(detect, -1), be_const_func(b_wire_detect) },
+ { be_const_key(scan, 2), be_const_func(b_wire_scan) },
+ { be_const_key(enabled, -1), be_const_func(b_wire_enabled) },
+ { be_const_key(_write, 13), be_const_func(b_wire_write) },
+ { be_const_key(read, -1), be_const_func(b_wire_validread) },
+ { be_const_key(_end_transmission, 8), be_const_func(b_wire_endtransmission) },
+ { be_const_key(_begin_transmission, -1), be_const_func(b_wire_begintransmission) },
+ { be_const_key(write_bytes, 7), be_const_closure(write_bytes_closure) },
+ { be_const_key(_read, -1), be_const_func(b_wire_read) },
+ { be_const_key(write, -1), be_const_func(b_wire_validwrite) },
};
static be_define_const_map(
be_class_tasmota_wire_map,
- 14
+ 15
);
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/src/be_byteslib.c b/lib/libesp32/Berry/src/be_byteslib.c
index fd64bb009..ee58c5be5 100644
--- a/lib/libesp32/Berry/src/be_byteslib.c
+++ b/lib/libesp32/Berry/src/be_byteslib.c
@@ -1125,15 +1125,20 @@ static int m_buffer(bvm *vm)
/*
* External API
*/
-BERRY_API void be_pushbytes(bvm *vm, const void * bytes, size_t len)
+BERRY_API void * be_pushbytes(bvm *vm, const void * bytes, size_t len)
{
bytes_new_object(vm, len);
buf_impl attr = m_read_attributes(vm, -1);
if ((int32_t)len > attr.size) { len = attr.size; } /* double check if the buffer allocated was smaller */
- memmove((void*)attr.bufptr, bytes, len);
+ if (bytes) { /* if bytes is null, buffer is filled with zeros */
+ memmove((void*)attr.bufptr, bytes, len);
+ } else {
+ memset((void*)attr.bufptr, 0, len);
+ }
attr.len = len;
m_write_attributes(vm, -1, &attr); /* update instance */
/* bytes instance is on top of stack */
+ return (void*)attr.bufptr;
}
BERRY_API const void *be_tobytes(bvm *vm, int rel_index, size_t *len)
diff --git a/lib/libesp32/Berry/src/be_constobj.h b/lib/libesp32/Berry/src/be_constobj.h
index 5bb495c72..a565d83f9 100644
--- a/lib/libesp32/Berry/src/be_constobj.h
+++ b/lib/libesp32/Berry/src/be_constobj.h
@@ -15,6 +15,7 @@ extern "C" {
#include "be_object.h"
#include "be_gc.h"
#include "be_map.h"
+#include "be_list.h"
#include "be_class.h"
#include "be_string.h"
#include "be_module.h"
@@ -92,6 +93,21 @@ extern "C" {
.type = BE_MODULE \
}
+#define be_const_simple_instance(_instance) { \
+ .v.c = (_instance), \
+ .type = BE_INSTANCE \
+}
+
+#define be_const_map(_map) { \
+ .v.c = &(_map), \
+ .type = BE_MAP \
+}
+
+#define be_const_list(_list) { \
+ .v.c = &(_list), \
+ .type = BE_LIST \
+}
+
#define be_define_const_map_slots(_name) \
const bmapnode _name##_slots[] =
@@ -164,6 +180,26 @@ const bntvmodule be_native_module(_module) = { \
.info.name = _module_name \
}
+/* only instances with no super and no sub instance are supported */
+/* primarily for `list` and `map`*/
+#define be_nested_simple_instance(_class_ptr, _members) \
+ & (const binstance) { \
+ be_const_header(BE_INSTANCE), \
+ .super = NULL, \
+ .sub = NULL, \
+ ._class = (bclass*) _class_ptr, \
+ .members = _members \
+ }
+
+// #define be_local_instance(_name, _class_ptr, _members) \
+// static const binstance i_##_name = { \
+// be_const_header(BE_INSTANCE), \
+// .super = NULL, \
+// .sub = NULL, \
+// ._class = (bclass*) _class_ptr, \
+// .members = _members \
+// }
+
#define be_nested_map(_size, _slots) \
& (const bmap) { \
be_const_header(BE_MAP), \
@@ -173,6 +209,14 @@ const bntvmodule be_native_module(_module) = { \
.count = _size \
}
+#define be_nested_list(_size, _items) \
+ & (const blist) { \
+ be_const_header(BE_LIST), \
+ .count = _size, \
+ .capacity = _size, \
+ .data = _items \
+ }
+
#define be_nested_string(_str, _hash, _len) \
{ \
{ .s=(be_nested_const_str(_str, _hash, _len )) \
@@ -284,16 +328,19 @@ const bvector _name = { \
(void*)_data, (void*)(_data + (_size) - 1) \
}
-#define be_define_const_native_module(_module, _init) \
+#define be_define_const_native_module(_module) \
const bntvmodule be_native_module(_module) = { \
#_module, \
0, 0, \
- (bmodule*)&(m_lib##_module), \
- _init \
+ (bmodule*)&(m_lib##_module) \
}
#endif
+/* provide pointers to map and list classes for solidified code */
+extern const bclass be_class_list;
+extern const bclass be_class_map;
+
#ifdef __cplusplus
}
#endif
diff --git a/lib/libesp32/Berry/src/be_introspectlib.c b/lib/libesp32/Berry/src/be_introspectlib.c
index cd6b95f55..61f614daf 100644
--- a/lib/libesp32/Berry/src/be_introspectlib.c
+++ b/lib/libesp32/Berry/src/be_introspectlib.c
@@ -69,7 +69,6 @@ static int m_findmember(bvm *vm)
if (top >= 2 && (be_isinstance(vm, 1) || be_ismodule(vm, 1) || be_isclass(vm, 1)) && be_isstring(vm, 2)) {
int ret = be_execprotected(vm, &m_findmember_protected, (void*) be_tostring(vm, 2));
if (ret == BE_OK) {
- // be_getmember(vm, 1, be_tostring(vm, 2));
be_return(vm);
}
}
diff --git a/lib/libesp32/Berry/src/be_maplib.c b/lib/libesp32/Berry/src/be_maplib.c
index a25d80d6c..a8fc7309e 100644
--- a/lib/libesp32/Berry/src/be_maplib.c
+++ b/lib/libesp32/Berry/src/be_maplib.c
@@ -121,7 +121,7 @@ static int m_find(bvm *vm)
be_return(vm);
}
-static int m_has(bvm *vm)
+static int m_contains(bvm *vm)
{
be_getmember(vm, 1, ".p");
map_check_data(vm, 2);
@@ -279,6 +279,8 @@ void be_load_maplib(bvm *vm)
{ "item", m_item },
{ "setitem", m_setitem },
{ "find", m_find },
+ { "contains", m_contains },
+ { "has", m_contains }, /* deprecated */
{ "size", m_size },
{ "insert", m_insert },
{ "iter", m_iter },
@@ -298,7 +300,8 @@ class be_class_map (scope: global, name: map) {
item, func(m_item)
setitem, func(m_setitem)
find, func(m_find)
- has, func(m_has)
+ contains, func(m_contains)
+ has, func(m_contains)
size, func(m_size)
insert, func(m_insert)
iter, func(m_iter)
diff --git a/lib/libesp32/Berry/src/be_solidifylib.c b/lib/libesp32/Berry/src/be_solidifylib.c
index b3777cb28..c16c0976a 100644
--- a/lib/libesp32/Berry/src/be_solidifylib.c
+++ b/lib/libesp32/Berry/src/be_solidifylib.c
@@ -10,6 +10,7 @@
#include "be_string.h"
#include "be_vector.h"
#include "be_class.h"
+#include "be_list.h"
#include "be_debug.h"
#include "be_map.h"
#include "be_vm.h"
@@ -17,6 +18,9 @@
#include
#include
+extern const bclass be_class_list;
+extern const bclass be_class_map;
+
#if BE_USE_SOLIDIFY_MODULE
#include
@@ -33,6 +37,50 @@
be_writestring(__lbuf); \
} while (0)
+static void m_solidify_bvalue(bvm *vm, bvalue * value, const char *classname, const char *key);
+
+static void m_solidify_map(bvm *vm, bmap * map, const char *class_name)
+{
+ logfmt(" be_nested_map(%i,\n", map->count);
+
+ logfmt(" ( (struct bmapnode*) &(const bmapnode[]) {\n");
+ for (int i = 0; i < map->size; i++) {
+ bmapnode * node = &map->slots[i];
+ if (node->key.type == BE_NIL) {
+ continue; /* key not used */
+ }
+ if (node->key.type != BE_STRING) {
+ char error[64];
+ snprintf(error, sizeof(error), "Unsupported type in key: %i", node->key.type);
+ be_raise(vm, "internal_error", error);
+ }
+ int key_next = node->key.next;
+ size_t len = strlen(str(node->key.v.s));
+ if (0xFFFFFF == key_next) {
+ key_next = -1; /* more readable */
+ }
+ logfmt(" { be_nested_key(\"%s\", %i, %zu, %i), ", str(node->key.v.s), be_strhash(node->key.v.s), len >= 255 ? 255 : len, key_next);
+ m_solidify_bvalue(vm, &node->value, class_name, str(node->key.v.s));
+
+ logfmt(" },\n");
+ }
+ logfmt(" }))"); // TODO need terminal comma?
+
+}
+
+static void m_solidify_list(bvm *vm, blist * list, const char *class_name)
+{
+ logfmt(" be_nested_list(%i,\n", list->count);
+
+ logfmt(" ( (struct bvalue*) &(const bvalue[]) {\n");
+ for (int i = 0; i < list->count; i++) {
+ logfmt(" ");
+ m_solidify_bvalue(vm, &list->data[i], class_name, "");
+ logfmt(",\n");
+ }
+ logfmt(" }))"); // TODO need terminal comma?
+}
+
// pass key name in case of class, or NULL if none
static void m_solidify_bvalue(bvm *vm, bvalue * value, const char *classname, const char *key)
{
@@ -88,6 +136,35 @@ static void m_solidify_bvalue(bvm *vm, bvalue * value, const char *classname, co
case BE_NTVFUNC:
logfmt("be_const_func(be_ntv_%s_%s)", classname ? classname : "unknown", key ? key : "unknown");
break;
+ case BE_INSTANCE:
+ {
+ binstance * ins = (binstance *) var_toobj(value);
+ bclass * cl = ins->_class;
+ if (ins->super || ins->sub) {
+ be_raise(vm, "internal_error", "instance must not have a super/sub class");
+ } else if (cl->nvar != 1) {
+ be_raise(vm, "internal_error", "instance must have only one instance variable");
+ } else if ((cl != &be_class_map && cl != &be_class_list) || 1) { // TODO
+ const char * cl_ptr = "";
+ if (cl == &be_class_map) { cl_ptr = "map"; }
+ if (cl == &be_class_list) { cl_ptr = "list"; }
+ logfmt("be_const_simple_instance(be_nested_simple_instance(&be_class_%s, {\n", cl_ptr);
+ if (cl == &be_class_map) {
+ logfmt(" be_const_map( * ");
+ } else {
+ logfmt(" be_const_list( * ");
+ }
+ m_solidify_bvalue(vm, &ins->members[0], classname, key);
+ logfmt(" ) } ))");
+ }
+ }
+ break;
+ case BE_MAP:
+ m_solidify_map(vm, (bmap *) var_toobj(value), classname);
+ break;
+ case BE_LIST:
+ m_solidify_list(vm, (blist *) var_toobj(value), classname);
+ break;
default:
{
char error[64];
@@ -166,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");
logfmt("%*s( &(const binstruction[%2d]) { /* code */\n", indent, "", pr->codesize);
for (int pc = 0; pc < pr->codesize; pc++) {
@@ -253,27 +332,8 @@ static void m_solidify_subclass(bvm *vm, bclass *cl, int builtins)
}
if (cl->members) {
- logfmt(" be_nested_map(%i,\n", cl->members->count);
-
- logfmt(" ( (struct bmapnode*) &(const bmapnode[]) {\n");
- for (int i = 0; i < cl->members->count; i++) {
- bmapnode * node = &cl->members->slots[i];
- if (node->key.type != BE_STRING) {
- char error[64];
- snprintf(error, sizeof(error), "Unsupported type in key: %i", node->key.type);
- be_raise(vm, "internal_error", error);
- }
- int key_next = node->key.next;
- size_t len = strlen(str(node->key.v.s));
- if (0xFFFFFF == key_next) {
- key_next = -1; /* more readable */
- }
- logfmt(" { be_nested_key(\"%s\", %i, %zu, %i), ", str(node->key.v.s), be_strhash(node->key.v.s), len >= 255 ? 255 : len, key_next);
- m_solidify_bvalue(vm, &node->value, class_name, str(node->key.v.s));
-
- logfmt(" },\n");
- }
- logfmt(" })),\n");
+ m_solidify_map(vm, cl->members, class_name);
+ logfmt(",\n");
} else {
logfmt(" NULL,\n");
}
@@ -299,7 +359,8 @@ static void m_solidify_class(bvm *vm, bclass *cl, int builtins)
static void m_solidify_module(bvm *vm, bmodule *ml, int builtins)
{
- const char * module_name = ml->info.name;
+ const char * module_name = be_module_name(ml);
+ if (!module_name) { module_name = ""; }
/* iterate on members to dump closures */
if (ml->table) {
@@ -323,33 +384,14 @@ static void m_solidify_module(bvm *vm, bmodule *ml, int builtins)
logfmt(" \"%s\",\n", module_name);
if (ml->table) {
- logfmt(" be_nested_map(%i,\n", ml->table->count);
-
- logfmt(" ( (struct bmapnode*) &(const bmapnode[]) {\n");
- for (int i = 0; i < ml->table->count; i++) {
- bmapnode * node = &ml->table->slots[i];
- if (node->key.type != BE_STRING) {
- char error[64];
- snprintf(error, sizeof(error), "Unsupported type in key: %i", node->key.type);
- be_raise(vm, "internal_error", error);
- }
- int key_next = node->key.next;
- size_t len = strlen(str(node->key.v.s));
- if (0xFFFFFF == key_next) {
- key_next = -1; /* more readable */
- }
- logfmt(" { be_nested_key(\"%s\", %i, %zu, %i), ", str(node->key.v.s), be_strhash(node->key.v.s), len >= 255 ? 255 : len, key_next);
- m_solidify_bvalue(vm, &node->value, module_name, str(node->key.v.s));
-
- logfmt(" },\n");
- }
- logfmt(" }))\n");
+ m_solidify_map(vm, ml->table, module_name);
+ logfmt("\n");
} else {
logfmt(" NULL,\n");
}
logfmt(");\n");
logfmt("BE_EXPORT_VARIABLE be_define_const_native_module(%s, NULL);\n", module_name);
- logfmt("/********************************************************************\n");
+ logfmt("/********************************************************************/\n");
}
@@ -366,6 +408,8 @@ static int m_dump(bvm *vm)
m_solidify_class(vm, var_toobj(v), be_builtin_count(vm));
} else if (var_ismodule(v)) {
m_solidify_module(vm, var_toobj(v), be_builtin_count(vm));
+ } else {
+ be_raise(vm, "value_error", "unsupported type");
}
}
be_return_nil(vm);
diff --git a/lib/libesp32/Berry/src/be_vm.c b/lib/libesp32/Berry/src/be_vm.c
index 2adba89f4..83d1d5cfb 100644
--- a/lib/libesp32/Berry/src/be_vm.c
+++ b/lib/libesp32/Berry/src/be_vm.c
@@ -821,7 +821,6 @@ newframe: /* a new call frame */
vm->counter_get++;
#endif
bvalue a_temp; /* copy result to a temp variable because the stack may be relocated in virtual member calls */
- // bvalue *a = RA(), *b = RKB(), *c = RKC();
bvalue *b = RKB(), *c = RKC();
if (var_isinstance(b) && var_isstr(c)) {
obj_attribute(vm, b, var_tostr(c), &a_temp);
@@ -834,6 +833,7 @@ newframe: /* a new call frame */
reg = vm->reg;
} else {
attribute_error(vm, "attribute", b, c);
+ a_temp = *RA(); /* avoid gcc warning for uninitialized variable a_temp, this code is never reached */
}
bvalue *a = RA();
*a = a_temp; /* assign the resul to the specified register on the updated stack */
diff --git a/lib/libesp32/Berry/src/berry.h b/lib/libesp32/Berry/src/berry.h
index 232a92262..9a174e3f2 100644
--- a/lib/libesp32/Berry/src/berry.h
+++ b/lib/libesp32/Berry/src/berry.h
@@ -562,7 +562,7 @@ BERRY_API void be_module_path(bvm *vm);
BERRY_API void be_module_path_set(bvm *vm, const char *path);
/* bytes operations */
-BERRY_API void be_pushbytes(bvm *vm, const void *buf, size_t len);
+BERRY_API void* be_pushbytes(bvm *vm, const void *buf, size_t len);
BERRY_API const void* be_tobytes(bvm *vm, int index, size_t *len);
/* registry operation */
diff --git a/lib/libesp32_epdiy/src/epd_driver/builtin_waveforms.c b/lib/libesp32_epdiy/src/epd_driver/builtin_waveforms.c
index 1c6a83348..5d85cd8f1 100755
--- a/lib/libesp32_epdiy/src/epd_driver/builtin_waveforms.c
+++ b/lib/libesp32_epdiy/src/epd_driver/builtin_waveforms.c
@@ -1,6 +1,6 @@
#include "epd_driver.h"
-
+#include "waveforms/ED047TC2.h"
#include "waveforms/epdiy_ED047TC1.h"
#include "waveforms/epdiy_ED060SC4.h"
#include "waveforms/epdiy_ED060XC3.h"
diff --git a/lib/libesp32_epdiy/src/epd_driver/include/epd_internals.h b/lib/libesp32_epdiy/src/epd_driver/include/epd_internals.h
index 3c2eb648c..923430579 100755
--- a/lib/libesp32_epdiy/src/epd_driver/include/epd_internals.h
+++ b/lib/libesp32_epdiy/src/epd_driver/include/epd_internals.h
@@ -86,7 +86,7 @@ typedef struct {
-
+extern const EpdWaveform ed047tc2;
extern const EpdWaveform epdiy_ED060SC4;
extern const EpdWaveform epdiy_ED097OC4;
extern const EpdWaveform epdiy_ED047TC1;
@@ -96,7 +96,8 @@ extern const EpdWaveform epdiy_ED060SCT;
extern const EpdWaveform epdiy_ED133UT2;
#if defined(CONFIG_EPD_DISPLAY_TYPE_ED047TC1)
-#define EPD_BUILTIN_WAVEFORM &epdiy_ED047TC1
+//#define EPD_BUILTIN_WAVEFORM &epdiy_ED047TC1
+#define EPD_BUILTIN_WAVEFORM &ed047tc2
#elif defined(CONFIG_EPD_DISPLAY_TYPE_ED060SC4)
#define EPD_BUILTIN_WAVEFORM &epdiy_ED060SC4
#elif defined(CONFIG_EPD_DISPLAY_TYPE_ED060XC3)
@@ -143,5 +144,3 @@ typedef struct {
#endif // EPD_INTERNALS_H
-
-
diff --git a/lib/libesp32_epdiy/src/epd_driver/waveforms/ED047TC2.h b/lib/libesp32_epdiy/src/epd_driver/waveforms/ED047TC2.h
new file mode 100644
index 000000000..d213dd2f4
--- /dev/null
+++ b/lib/libesp32_epdiy/src/epd_driver/waveforms/ED047TC2.h
@@ -0,0 +1,52 @@
+#include
+const uint8_t epd_wp_ed047tc2_1_5_data[25][16][4] = {{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa0,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa8,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x80,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa0,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa8,0x00,0x00}},{{0x00,0x00,0x00,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0x80,0x00}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xa0,0x00}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xa8,0x00}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x00}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x00}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x00}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x00}},{{0x00,0x00,0x01,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x00}},{{0x00,0x00,0x05,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x80}},{{0x00,0x00,0x15,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa0}},{{0x00,0x01,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x05,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x15,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x01,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x05,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_1_5 = { .phases = 25, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_1_5_data[0] };
+const uint8_t epd_wp_ed047tc2_1_6_data[22][16][4] = {{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x84,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x84,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa8,0x00,0x00,0x04}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa8,0x00,0x00,0x04}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa8,0x00,0x00,0x04}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x80,0x00,0x04}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa0,0x00,0x04}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa8,0x00,0x04}},{{0x00,0x00,0x01,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xa0,0x04}},{{0x00,0x00,0x05,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xa0,0x04}},{{0x00,0x00,0x05,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xa8,0x18}},{{0x00,0x01,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x18}},{{0x00,0x05,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x98}},{{0x00,0x15,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x01,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x05,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x05,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_1_6 = { .phases = 22, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_1_6_data[0] };
+const uint8_t epd_wp_ed047tc2_1_7_data[22][16][4] = {{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa8,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa8,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x80,0x00,0x00}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa0,0x00,0x00}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa0,0x00,0x00}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0x00,0x00}},{{0x00,0x00,0x01,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xa0,0x00}},{{0x00,0x00,0x01,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xa8,0x00}},{{0x00,0x00,0x05,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xa8,0x00}},{{0x00,0x00,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x80}},{{0x00,0x05,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x80}},{{0x00,0x05,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x80}},{{0x00,0x15,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x90}},{{0x01,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa0}},{{0x01,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_1_7 = { .phases = 22, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_1_7_data[0] };
+const uint8_t epd_wp_ed047tc2_1_8_data[22][16][4] = {{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa8,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa8,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x00,0x00,0x04}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa0,0x00,0x04}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa8,0x00,0x04}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0x00,0x04}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x04}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x04}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x04}},{{0x00,0x00,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x88}},{{0x00,0x01,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x88}},{{0x00,0x05,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x88}},{{0x00,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x88}},{{0x01,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x01,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_1_8 = { .phases = 22, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_1_8_data[0] };
+const uint8_t epd_wp_ed047tc2_1_9_data[18][16][4] = {{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa0,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x15},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa0,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x80,0x00,0x00}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa8,0x00,0x00}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0x00,0x00}},{{0x00,0x00,0x15,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0x80,0x00}},{{0x00,0x00,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x00}},{{0x00,0x01,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x00}},{{0x00,0x15,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x04}},{{0x05,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x84}},{{0x05,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_1_9 = { .phases = 18, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_1_9_data[0] };
+const uint8_t epd_wp_ed047tc2_1_10_data[17][16][4] = {{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x90,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x01},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x90,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa4,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa8,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x80,0x00,0x00}},{{0x00,0x00,0x01,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa0,0x00,0x00}},{{0x00,0x00,0x05,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0x00,0x00}},{{0x00,0x00,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xa0,0x40}},{{0x00,0x05,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xa8,0x40}},{{0x00,0x15,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0x90}},{{0x00,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa0}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa4}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_1_10 = { .phases = 17, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_1_10_data[0] };
+const uint8_t epd_wp_ed047tc2_1_11_data[15][16][4] = {{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x54}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xa0,0x00,0x00,0x54}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x00,0x00,0x54}},{{0x00,0x00,0x00,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x80,0x00,0x54}},{{0x00,0x00,0x05,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x90,0x00,0x54}},{{0x00,0x00,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa0,0x00,0x54}},{{0x00,0x00,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xa0,0x00,0x54}},{{0x00,0x05,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0x40,0xa8}},{{0x00,0x15,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0x85,0xa8}},{{0x00,0x15,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x15,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x05,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_1_11 = { .phases = 15, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_1_11_data[0] };
+const EpdWaveformPhases* epd_wm_ed047tc2_1_ranges[7] = { &epd_wp_ed047tc2_1_5,&epd_wp_ed047tc2_1_6,&epd_wp_ed047tc2_1_7,&epd_wp_ed047tc2_1_8,&epd_wp_ed047tc2_1_9,&epd_wp_ed047tc2_1_10,&epd_wp_ed047tc2_1_11 };
+const EpdWaveformMode epd_wm_ed047tc2_1 = { .type = 1, .temp_ranges = 7, .range_data = &epd_wm_ed047tc2_1_ranges[0] };
+const uint8_t epd_wp_ed047tc2_2_5_data[46][16][4] = {{{0x00,0x00,0x00,0x00},{0x20,0x88,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x04,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x10,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x02,0x80,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x02},{0x00,0x00,0x08,0x00},{0x00,0x02,0x00,0x80},{0x04,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0xa2,0x88,0x20,0x88},{0x22,0xaa,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x04,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x20,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x02,0xa2,0x08},{0x00,0x00,0x20,0x00},{0x00,0x00,0x00,0x02},{0x00,0x44,0x08,0x00},{0xa0,0x02,0x20,0xa8},{0x08,0x62,0x88,0x80},{0x00,0x00,0x00,0x08},{0x08,0x22,0x88,0x80},{0x00,0x80,0x00,0x00}},{{0xaa,0xaa,0xa8,0xa8},{0x2a,0xaa,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x04,0x00,0x80,0x00},{0x00,0x00,0x00,0x00},{0x24,0x00,0x00,0x00},{0x00,0x00,0x20,0x00},{0x80,0x82,0xa2,0x08},{0x00,0x00,0x20,0x00},{0x00,0x00,0x00,0x02},{0x84,0x84,0x28,0x80},{0xa0,0x02,0x20,0xaa},{0xa8,0xaa,0x8a,0x80},{0x22,0x84,0x00,0x28},{0x2a,0xaa,0xaa,0xa0},{0x00,0x80,0x28,0x00}},{{0xaa,0xaa,0xa8,0xa8},{0x2a,0xaa,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x08,0x00,0x80,0x00},{0x00,0x00,0x00,0x00},{0x28,0x00,0x00,0x00},{0x00,0x40,0x20,0x00},{0x80,0xa2,0xa2,0x88},{0x00,0x00,0x20,0x02},{0x00,0x00,0x00,0x02},{0x84,0x88,0x2a,0xa2},{0xa0,0xaa,0xa8,0xa8},{0xa8,0xaa,0x8a,0x80},{0x2a,0xaa,0x08,0xa8},{0xaa,0xaa,0xaa,0xa8},{0x22,0x80,0x28,0x08}},{{0xaa,0xaa,0xa8,0xa8},{0x2a,0xaa,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x28,0x24,0x80,0x00},{0x00,0x00,0x00,0x00},{0x29,0x80,0x00,0x00},{0x00,0x40,0x20,0x00},{0x80,0xa2,0xa2,0x88},{0x00,0x02,0xa0,0x00},{0x02,0x00,0x00,0x81},{0x88,0xa8,0xaa,0xa9},{0xa2,0xaa,0xaa,0xa9},{0xaa,0xaa,0x8a,0x81},{0x2a,0xaa,0x2a,0xa8},{0xaa,0xaa,0xaa,0xa8},{0x22,0x80,0x28,0x04}},{{0xaa,0xaa,0xa8,0xa4},{0x2a,0xaa,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x28,0xa8,0x80,0x00},{0x00,0x20,0x00,0x00},{0x2a,0x84,0xa0,0x08},{0x2a,0x68,0x20,0x80},{0x80,0xa2,0xa2,0xa8},{0x80,0x02,0xa0,0x01},{0x02,0x80,0x00,0xa9},{0x9a,0xa8,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x89},{0x2a,0xaa,0xaa,0xa8},{0xaa,0xaa,0xaa,0xa8},{0x22,0x8a,0x28,0x04}},{{0xaa,0xaa,0xa8,0x64},{0x2a,0xaa,0xaa,0x01},{0x00,0x88,0x02,0x00},{0x29,0xa8,0x80,0x00},{0x00,0x28,0x08,0x02},{0x2a,0x88,0xa8,0x08},{0x2a,0xaa,0xa0,0xa0},{0xaa,0xa2,0xa2,0xa9},{0x80,0x02,0xa0,0x01},{0x02,0xa0,0x00,0xa9},{0x9a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0x2a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0x2a,0x8a,0xa8,0x84}},{{0xaa,0xaa,0xa8,0x54},{0x2a,0xaa,0xaa,0x01},{0x00,0x8a,0x02,0x08},{0x2a,0xa8,0x88,0x00},{0x00,0x28,0x8a,0x01},{0x2a,0x88,0xa8,0x08},{0x2a,0xaa,0xa0,0xa0},{0xaa,0xaa,0xaa,0xa9},{0x80,0x02,0xa0,0x01},{0x0a,0xaa,0x80,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x21},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0x6a,0x8a,0xaa,0x56}},{{0xaa,0xaa,0xa8,0x54},{0x2a,0xaa,0xaa,0x01},{0x20,0x8a,0x0a,0x08},{0x2a,0xa8,0xaa,0x00},{0x00,0x2a,0x8a,0x01},{0x2a,0xaa,0xa8,0x08},{0x2a,0xaa,0xa0,0xa1},{0xaa,0xaa,0xaa,0xa5},{0x80,0x02,0xa0,0x81},{0x2a,0xaa,0xa8,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x15},{0xaa,0xaa,0xaa,0x69},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x59},{0x69,0x8a,0xaa,0x56}},{{0xaa,0xaa,0xaa,0x54},{0x2a,0xaa,0xaa,0x01},{0xa0,0x8a,0x0a,0x0a},{0xaa,0xaa,0xaa,0x02},{0x08,0x2a,0x8a,0x01},{0x2a,0xaa,0xaa,0x09},{0x2a,0xaa,0xa0,0xa1},{0xaa,0xaa,0xaa,0xa5},{0x82,0x82,0xa0,0xa1},{0x2a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x69},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x55},{0x59,0x8a,0xaa,0x55}},{{0xaa,0xaa,0xaa,0x54},{0x2a,0xaa,0xaa,0x01},{0xa2,0x8a,0x2a,0x09},{0xaa,0xaa,0xaa,0x09},{0x28,0x2a,0x8a,0x01},{0x2a,0xaa,0xaa,0x89},{0x2a,0xaa,0xa8,0xa1},{0xaa,0xaa,0xaa,0x25},{0xaa,0xaa,0xa0,0xa9},{0x2a,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0x59,0xaa,0xaa,0x55}},{{0xaa,0xaa,0xaa,0x58},{0x2a,0xaa,0xa5,0x05},{0xaa,0x8a,0xaa,0x09},{0xaa,0xaa,0xaa,0x09},{0x2a,0xaa,0xaa,0x01},{0x2a,0xaa,0xaa,0x85},{0xaa,0xaa,0xa8,0x01},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa8,0xa9},{0xaa,0xaa,0xaa,0x01},{0xaa,0xaa,0xa6,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0x59,0xaa,0xaa,0x55}},{{0xaa,0xaa,0x96,0xa8},{0xaa,0xaa,0x55,0x09},{0xaa,0x8a,0xaa,0x09},{0xaa,0xaa,0xaa,0x09},{0x2a,0xaa,0xaa,0x21},{0xaa,0xaa,0xaa,0x85},{0xaa,0xaa,0xa8,0x51},{0xaa,0xaa,0xa9,0x55},{0xaa,0xaa,0x98,0xa9},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa4,0x55},{0xaa,0xa8,0x8a,0x55},{0xaa,0xaa,0xa5,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa5,0x55},{0x54,0xaa,0xaa,0x55}},{{0xaa,0xa5,0x96,0xa8},{0xaa,0xa5,0x55,0xa9},{0xaa,0xaa,0xaa,0x09},{0xaa,0xaa,0xaa,0x09},{0x2a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x85},{0xaa,0xaa,0xa8,0x51},{0xaa,0xa9,0x59,0x55},{0xaa,0xaa,0x9a,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0x95,0x55},{0xaa,0xa9,0x90,0x55},{0xaa,0xa9,0x65,0x55},{0xaa,0xaa,0xaa,0x55},{0xa6,0x99,0x55,0x55},{0x94,0xaa,0xa6,0x51}},{{0xaa,0xa5,0x56,0xa8},{0xaa,0x55,0x55,0xa9},{0xaa,0xaa,0xaa,0x05},{0xaa,0xaa,0xaa,0xa9},{0x2a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0x98,0x51},{0xaa,0xa9,0x59,0x55},{0xaa,0xaa,0x9a,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0x95,0x55},{0xaa,0xa9,0x15,0x55},{0x92,0x95,0x65,0x55},{0xaa,0xaa,0xa5,0x55},{0x95,0x95,0x55,0x55},{0x94,0xaa,0x96,0x01}},{{0xa9,0x55,0x56,0xa8},{0xa9,0x55,0x55,0xa9},{0xaa,0xaa,0xaa,0x05},{0xaa,0xaa,0xaa,0xa5},{0x2a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0x98,0x51},{0xaa,0xa9,0x59,0x55},{0xaa,0xa9,0x5a,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0x55,0x55},{0x9a,0x85,0x55,0x55},{0x94,0x95,0x55,0x55},{0x99,0xa9,0x95,0x55},{0x95,0x55,0x55,0x55},{0x94,0xaa,0x96,0x01}},{{0x95,0x55,0x56,0xa8},{0xa5,0x55,0x5a,0xa5},{0xaa,0xa6,0xaa,0x05},{0xaa,0xaa,0x6a,0xa5},{0x2a,0xaa,0xaa,0x95},{0xaa,0xaa,0x96,0x65},{0xaa,0xaa,0x1a,0x59},{0xaa,0x59,0x51,0x55},{0xaa,0xa9,0x5a,0x55},{0xaa,0xaa,0xaa,0x55},{0xa8,0x55,0x55,0x55},{0x98,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x94,0x6a,0x96,0x01}},{{0x95,0x55,0x55,0x94},{0x95,0x55,0xaa,0x95},{0xaa,0xa6,0xaa,0x05},{0xaa,0xaa,0x6a,0x95},{0x2a,0xaa,0xa5,0x55},{0x9a,0x6a,0x55,0x55},{0xaa,0x85,0x5a,0x55},{0xaa,0x59,0x55,0x55},{0xaa,0xa9,0x5a,0x55},{0xa8,0xaa,0x00,0x55},{0xa8,0x55,0x55,0x55},{0x91,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x90,0x69,0x95,0x01}},{{0x55,0x55,0x55,0x54},{0x96,0x5a,0xaa,0x15},{0xaa,0xa6,0xa9,0x05},{0xaa,0x9a,0x65,0x55},{0x2a,0x96,0x65,0x55},{0x96,0x65,0x55,0x55},{0xa1,0x95,0x56,0x55},{0x28,0x55,0x55,0x55},{0xaa,0xa9,0x52,0x55},{0xa9,0x01,0x05,0x55},{0x25,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa0,0x65,0x55,0x01}},{{0x55,0x55,0x69,0x55},{0x9a,0xaa,0xaa,0x55},{0xaa,0xa6,0xa5,0x85},{0x9a,0x56,0x55,0x55},{0xaa,0x95,0x65,0x55},{0x95,0x55,0x55,0x55},{0x95,0x95,0x56,0x55},{0x15,0x55,0x55,0x55},{0xa8,0xa1,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x25,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa0,0x65,0x55,0x01}},{{0x55,0x5a,0xa9,0x55},{0x9a,0xaa,0xaa,0x55},{0xaa,0xa5,0xa5,0x85},{0x92,0x55,0x55,0x55},{0xaa,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x15,0x56,0x55},{0x15,0x55,0x55,0x55},{0xa8,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa0,0x65,0x55,0x01}},{{0x56,0xaa,0xa9,0x55},{0x99,0xaa,0xa1,0x55},{0xaa,0x65,0x95,0x45},{0x95,0x55,0x55,0x55},{0xa6,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x54,0x55},{0x55,0x55,0x55,0x55},{0x05,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0xa0,0x55,0x55,0x01}},{{0x6a,0xaa,0xaa,0x55},{0x95,0xaa,0x15,0x55},{0x9a,0x65,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0xa0,0x55,0x55,0x01}},{{0xaa,0xaa,0xaa,0x55},{0x95,0xa5,0x55,0x55},{0x99,0x65,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0xa8,0x55,0x55,0x01}},{{0xaa,0xaa,0xaa,0x55},{0x95,0x55,0x55,0x55},{0x15,0x65,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0x55,0x55,0x01}},{{0xaa,0xaa,0xaa,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0x55,0x41,0x01}},{{0xaa,0xaa,0x56,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x65,0x55,0x55,0x56},{0x55,0x55,0x55,0x55},{0x69,0x55,0x55,0x55},{0xaa,0x55,0x41,0x01}},{{0xa9,0x55,0x55,0x41},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x68,0x55,0x55,0x96},{0x65,0x55,0x55,0x56},{0x6a,0x65,0x55,0xa6},{0xaa,0x94,0x49,0x02}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x6a,0x2a,0x8a,0xaa},{0x6a,0x55,0x55,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x15,0x55,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x51,0x56},{0x65,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x65,0x54},{0x55,0x55,0x55,0x55},{0x55,0x55,0x40,0xaa},{0x55,0x54,0x45,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x56,0xa6,0x50},{0x55,0x56,0x95,0x56},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x55,0x95,0x55,0x55},{0x55,0x55,0x95,0x04},{0x45,0x05,0x55,0xaa},{0x55,0x55,0x55,0xaa},{0x55,0x55,0x55,0x56},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x45,0x48,0x58,0x50},{0x55,0x55,0x41,0x06},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x54,0x55,0x55,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x15},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x54},{0x41,0x04,0x44,0x12},{0x6a,0x2a,0x21,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x65,0x55,0x55,0x69},{0x55,0x55,0x55,0x54},{0x45,0x05,0x15,0x16},{0x41,0x41,0x15,0x02},{0x6a,0x00,0xa0,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x65,0x55,0x55,0x66},{0x55,0x59,0x59,0xa6},{0x60,0x00,0x00,0x0a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x95},{0x6a,0x59,0x51,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x50,0x55,0x55,0x52},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x6a,0x55,0x55,0x02},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xa5,0x96,0xa6,0x5a},{0x80,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x56},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_2_5 = { .phases = 46, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_2_5_data[0] };
+const uint8_t epd_wp_ed047tc2_2_6_data[43][16][4] = {{{0x02,0xaa,0x00,0x00},{0x20,0x22,0xa8,0x80},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x08},{0x00,0x80,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x20,0x00,0x22,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x20,0x22,0xa8,0x20},{0x00,0x00,0x00,0x00},{0x20,0x02,0x08,0x80},{0x00,0x80,0x00,0x00},{0x20,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x2a,0xaa,0x00,0x00},{0x20,0xaa,0xaa,0x80},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x28},{0x00,0x80,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x20,0x22,0xaa,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x22,0x2a,0xaa,0x20},{0x00,0x00,0x00,0x00},{0x22,0x02,0x08,0x80},{0x00,0xa0,0x20,0x2a},{0x28,0x22,0xa8,0xa8},{0x28,0x00,0x00,0x00}},{{0xaa,0xaa,0x20,0x00},{0x20,0xaa,0xaa,0x80},{0x00,0x00,0x00,0x02},{0x00,0x00,0x00,0x28},{0x20,0x80,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x22,0x2a,0xaa,0x00},{0x00,0x00,0x00,0x02},{0x00,0x00,0x00,0x00},{0x22,0x2a,0xaa,0xa0},{0x00,0x00,0x00,0x00},{0x22,0x02,0x08,0x80},{0x00,0xa8,0x22,0x2a},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x80}},{{0xaa,0xaa,0x20,0x00},{0x20,0xaa,0xaa,0x80},{0x00,0x00,0x00,0x02},{0x00,0x00,0x00,0x2a},{0x20,0x80,0x00,0x00},{0x00,0x00,0x00,0x20},{0x00,0x00,0x00,0x00},{0x2a,0x2a,0xaa,0x80},{0x00,0x00,0x00,0x02},{0x00,0x00,0x00,0x00},{0x22,0x2a,0xaa,0xa0},{0x00,0x00,0x00,0x00},{0xa2,0x82,0x08,0x80},{0x08,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x42}},{{0xaa,0xaa,0x20,0x00},{0x20,0xaa,0xaa,0x80},{0x80,0x00,0x00,0x02},{0x00,0x88,0x00,0x2a},{0x20,0x80,0x00,0x00},{0x00,0x00,0x00,0x20},{0x20,0x00,0x00,0x02},{0xaa,0x2a,0xaa,0x80},{0x80,0x00,0x00,0x02},{0x00,0x00,0x00,0x00},{0x2a,0x2a,0xaa,0xa8},{0x00,0x00,0x00,0x00},{0xaa,0x82,0x88,0xa0},{0x8a,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0x94},{0x24,0x00,0x28,0x42}},{{0xaa,0xaa,0x20,0x00},{0x20,0xaa,0xaa,0x80},{0x80,0x00,0x00,0x02},{0x20,0x88,0x00,0x2a},{0x20,0x80,0x00,0x00},{0x00,0x00,0x00,0x28},{0x20,0x80,0x00,0x02},{0xaa,0x2a,0xaa,0x80},{0x80,0x00,0x00,0x02},{0x00,0x00,0x00,0x00},{0xaa,0x2a,0xaa,0xa8},{0x08,0x00,0x00,0x00},{0xaa,0x8a,0x8a,0xa0},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0x24,0x00,0x28,0x42}},{{0xaa,0xaa,0xa0,0x00},{0x20,0xaa,0xaa,0x80},{0x80,0x00,0x00,0x22},{0x20,0x88,0x00,0x2a},{0x22,0x80,0x00,0x00},{0x00,0x00,0x00,0x28},{0xa0,0xa0,0xa8,0x02},{0xaa,0x2a,0xaa,0x82},{0x80,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x2a,0xaa,0xa8},{0x08,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa5},{0xa6,0xaa,0xaa,0x95},{0x24,0x00,0x26,0x41}},{{0xaa,0xaa,0xa0,0x00},{0x20,0xaa,0xaa,0x42},{0x80,0x00,0x00,0x22},{0x20,0x88,0x00,0x2a},{0x2a,0x80,0x00,0x02},{0x20,0x80,0x20,0x28},{0xa2,0xa8,0xaa,0x02},{0xaa,0x2a,0xaa,0x82},{0x80,0x00,0x00,0x01},{0x20,0x00,0x00,0x20},{0xaa,0xaa,0xaa,0xa8},{0x08,0x00,0x00,0x20},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x95},{0xa6,0xaa,0xa6,0x55},{0x56,0x02,0x95,0x55}},{{0xaa,0xaa,0xa0,0x04},{0x20,0xaa,0xa5,0x4a},{0x80,0x00,0x00,0x29},{0xa0,0x88,0x00,0x26},{0x2a,0x80,0x00,0x02},{0x20,0x80,0x20,0x28},{0xaa,0xaa,0xaa,0x01},{0xaa,0x2a,0xaa,0x82},{0x80,0x00,0x00,0x01},{0x20,0x80,0x00,0xa2},{0xaa,0xaa,0xaa,0x98},{0x88,0x80,0x00,0xa2},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0xa5,0xa9,0x65,0x55},{0x56,0x0a,0x95,0x55}},{{0xaa,0xa9,0xa0,0x24},{0x20,0xa9,0x55,0x4a},{0x80,0x00,0x00,0x29},{0xa0,0x88,0x00,0x25},{0x2a,0x80,0x00,0x02},{0x20,0xa0,0x28,0x28},{0xaa,0xaa,0xaa,0x01},{0xaa,0x2a,0xaa,0x80},{0xa0,0x00,0x00,0x01},{0x20,0xa2,0xa8,0xa9},{0xaa,0xaa,0xaa,0x94},{0x88,0xa2,0xa8,0xaa},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x95},{0xa5,0x95,0x55,0x55},{0x56,0x0a,0x95,0x55}},{{0xaa,0x95,0xa8,0xa4},{0x20,0xa9,0x55,0x45},{0xa0,0x00,0x00,0x29},{0xa2,0x88,0x00,0x15},{0x2a,0x80,0x00,0x01},{0x20,0xa8,0x28,0x14},{0xaa,0xaa,0xaa,0x81},{0xaa,0xaa,0xaa,0x81},{0xa0,0x00,0x00,0x01},{0xa2,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x94},{0x88,0xaa,0xaa,0xa9},{0xaa,0xaa,0xa6,0x55},{0xaa,0xaa,0xaa,0x95},{0x95,0x55,0x55,0x55},{0x56,0x89,0x55,0x55}},{{0xaa,0x95,0x98,0x94},{0xa0,0xa9,0x55,0x45},{0xa0,0x00,0x00,0x25},{0xaa,0x88,0x00,0x15},{0xaa,0x80,0x00,0x21},{0x20,0xaa,0xa8,0x94},{0xaa,0xaa,0xaa,0x81},{0xaa,0xaa,0xaa,0xa1},{0xa0,0x22,0xa0,0x21},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x94},{0xa8,0xaa,0xaa,0xa9},{0xaa,0xa9,0xa6,0x55},{0xaa,0xaa,0xa9,0x55},{0x95,0x55,0x55,0x55},{0x55,0xa5,0x55,0x15}},{{0xa9,0x55,0x9a,0x98},{0xa8,0xa9,0x55,0x45},{0xa0,0x00,0x00,0x15},{0xaa,0x88,0x00,0x15},{0xaa,0x80,0x00,0x21},{0xa2,0xaa,0xaa,0x94},{0xaa,0xaa,0xaa,0x89},{0xaa,0xaa,0xa9,0xa1},{0xa2,0x2a,0xa0,0x21},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa5,0x56},{0xaa,0xaa,0xaa,0x95},{0xaa,0xa9,0xa6,0x55},{0xaa,0xaa,0x95,0x55},{0x95,0x55,0x55,0x55},{0x55,0xa5,0x55,0x15}},{{0xa5,0x55,0x5a,0xa8},{0xa8,0x95,0x55,0x45},{0xa0,0x82,0x20,0x15},{0xaa,0x88,0x00,0x15},{0xaa,0x80,0x20,0x21},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0x85,0x69},{0xaa,0x2a,0xa8,0x29},{0xaa,0xaa,0xaa,0x95},{0xaa,0xa9,0x55,0x55},{0xaa,0xaa,0xaa,0x95},{0xa9,0xa9,0xa5,0x55},{0xa6,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0xa5,0x41,0x15}},{{0x95,0x55,0x6a,0x68},{0xa8,0x55,0x55,0x85},{0xa8,0xaa,0xa0,0x15},{0xaa,0x88,0x00,0x15},{0xaa,0x80,0x20,0x21},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xa9,0x55,0x69},{0xaa,0x2a,0xaa,0x15},{0xaa,0xaa,0xaa,0x55},{0xaa,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x95},{0x99,0xa9,0x65,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x65,0x40,0x15}},{{0x95,0x55,0x66,0x58},{0xa8,0x55,0x5a,0x85},{0xa8,0xaa,0xa0,0x15},{0xaa,0xa8,0xa0,0x15},{0xaa,0x62,0xa8,0x19},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa5,0x95},{0xaa,0x95,0x55,0x55},{0xaa,0x2a,0xaa,0x95},{0xaa,0xaa,0xaa,0x55},{0xa9,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x55},{0x95,0x65,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x91,0x55,0x40,0x15}},{{0x95,0x56,0xa5,0x94},{0xa8,0x56,0xaa,0x85},{0xa8,0xaa,0xa0,0x95},{0xaa,0xa8,0xa0,0x15},{0xaa,0x6a,0xaa,0x15},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0x55,0x55},{0x89,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa5,0x55},{0x99,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x55},{0x95,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x50,0x00,0x15}},{{0x55,0x6a,0x89,0x94},{0x98,0x6a,0xaa,0x85},{0xaa,0xaa,0xa0,0x95},{0xaa,0xa6,0xa0,0x15},{0x8a,0x6a,0xaa,0x95},{0xaa,0xaa,0x96,0x55},{0xaa,0x55,0x55,0x55},{0x95,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xa9,0x55,0x55},{0x95,0x95,0x55,0x55},{0xa6,0xaa,0xa5,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x89,0x50,0x00,0x15}},{{0x56,0xaa,0x9a,0x14},{0x98,0xaa,0xaa,0x85},{0xaa,0xaa,0xaa,0x95},{0xaa,0x66,0xa2,0x15},{0x99,0x6a,0xaa,0x95},{0xaa,0x6a,0x95,0x55},{0x99,0x55,0x55,0x55},{0x95,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0x55,0x55,0x55},{0x95,0x95,0x55,0x55},{0xa6,0xa9,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0xa9,0x10,0x00,0x05}},{{0x5a,0xaa,0x12,0x54},{0xaa,0xaa,0xaa,0x81},{0xaa,0xaa,0xaa,0x95},{0xaa,0x66,0xaa,0x15},{0x95,0x6a,0xaa,0x95},{0xaa,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x95,0x55,0x55},{0xaa,0xa9,0x55,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa6,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x9a,0x55,0x55,0x55},{0xa9,0x10,0x00,0x05}},{{0x6a,0xaa,0x55,0x54},{0xaa,0xaa,0xaa,0x81},{0xaa,0xaa,0xaa,0x95},{0x9a,0x66,0xaa,0x15},{0x95,0x6a,0xaa,0x95},{0x9a,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x95,0x55,0x55},{0xaa,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa6,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x8a,0x55,0x55,0x55},{0xaa,0x00,0x00,0x01}},{{0x6a,0xaa,0x55,0x55},{0x9a,0x96,0xaa,0x41},{0x6a,0xaa,0xaa,0x55},{0x99,0x66,0xaa,0x95},{0x95,0x6a,0x95,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x59,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0x99,0x65},{0xaa,0x00,0x00,0x01}},{{0xaa,0xaa,0x55,0x55},{0x96,0x56,0xa5,0x51},{0x6a,0x69,0x8a,0x55},{0x95,0x66,0xaa,0x95},{0x95,0x69,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x00,0x00,0x01}},{{0xaa,0xa8,0x55,0x55},{0x96,0x55,0x55,0x55},{0x6a,0x65,0x58,0x55},{0x95,0x66,0x59,0x95},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x00,0x00,0x01}},{{0xa9,0x45,0x55,0x45},{0x96,0x55,0x55,0x55},{0x56,0x95,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x59,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x00,0x00,0x00}},{{0xa5,0x55,0x55,0x41},{0x96,0x55,0x55,0x55},{0x56,0x95,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x5a,0x55,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x95,0x55,0x55,0x41},{0x56,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x45,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0x56,0x59,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x00,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x00,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x51},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x2a},{0x55,0x55,0x55,0x61},{0x55,0x55,0x55,0x54},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x00,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x42},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x51},{0x59,0x55,0x55,0x2a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x00,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x51},{0x55,0x55,0x55,0x56},{0x55,0x15,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x55},{0x6a,0x6a,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0x6a,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x00,0x15},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x41},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0x6a,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x10,0x55},{0x55,0x55,0x55,0x5a},{0x55,0x55,0x55,0x40},{0x55,0x55,0x55,0x42},{0x6a,0x95,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x51,0x55,0x55,0x59},{0x15,0x55,0x55,0x82},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x51,0x55,0x55,0x55},{0x99,0x50,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0xaa},{0x40,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x51,0x55,0x55,0x54},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x51,0x55,0x55,0x6a},{0x00,0x00,0x00,0x00},{0xaa,0x99,0x55,0x6a},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_2_6 = { .phases = 43, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_2_6_data[0] };
+const uint8_t epd_wp_ed047tc2_2_7_data[40][16][4] = {{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x04,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x0a,0x08,0x80},{0x00,0x00,0x00,0x08},{0x00,0x80,0x00,0x20},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0xa0,0x80,0x00,0x00},{0x08,0x80,0x20,0x00},{0x00,0x12,0x22,0x00},{0x00,0x00,0x00,0x00},{0x1a,0x20,0x00,0x00},{0x01,0x80,0x00,0x00},{0x88,0x00,0x00,0x00},{0x00,0x10,0x80,0x00},{0x20,0x0a,0x88,0x82},{0x80,0x00,0x05,0x08},{0x0a,0xa0,0x00,0x20},{0x20,0x00,0x00,0x20},{0x00,0x80,0x00,0x08},{0x80,0x28,0x08,0x80},{0x2a,0x80,0xa0,0x28},{0x20,0x00,0x80,0x04}},{{0xa8,0xa0,0x00,0x00},{0x08,0x80,0x20,0x00},{0x11,0x22,0xa2,0x00},{0x04,0x04,0x00,0x00},{0x2a,0xa0,0x20,0x00},{0x22,0xa0,0x00,0x00},{0x98,0x12,0x00,0x0a},{0x18,0xa0,0x80,0x00},{0x28,0x0a,0x8a,0x82},{0x88,0x88,0x09,0x28},{0x0a,0xa2,0x20,0x20},{0x20,0x00,0x02,0xa0},{0x00,0xa4,0x00,0x08},{0xa8,0xa8,0xa8,0xa0},{0xaa,0xaa,0xaa,0xa8},{0x20,0x02,0x88,0x84}},{{0xa8,0xa0,0x00,0x00},{0x08,0x80,0x20,0x00},{0x22,0x22,0xa2,0x28},{0x04,0x08,0x00,0x00},{0x2a,0xa0,0x28,0x00},{0x2a,0xa0,0x20,0x0a},{0x98,0x56,0x02,0x8a},{0xa8,0xa4,0x80,0x00},{0x28,0x0a,0xaa,0x82},{0x88,0xaa,0x0a,0x28},{0x2a,0xaa,0xa8,0x22},{0x20,0x40,0xa2,0xa2},{0x12,0xa8,0xa0,0x28},{0xa8,0xaa,0xaa,0xa0},{0xaa,0xaa,0xaa,0xa8},{0x28,0x82,0xa8,0x85}},{{0xa8,0xa0,0x00,0x00},{0x08,0xa0,0x20,0x00},{0x26,0x22,0xa2,0x28},{0x05,0x08,0x00,0x00},{0x2a,0xa0,0x28,0x00},{0x2a,0xa0,0x28,0x0a},{0x99,0xaa,0x82,0x8a},{0xaa,0xa8,0xa2,0x00},{0x28,0x8a,0xaa,0x82},{0xaa,0xaa,0xaa,0x28},{0x2a,0xaa,0xa8,0xa2},{0x20,0xa6,0xa2,0xa2},{0x92,0xaa,0xa8,0x28},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x98},{0x58,0x8a,0xa8,0x95}},{{0xa8,0xa0,0x00,0x00},{0x0a,0xa0,0x20,0x00},{0x2a,0x66,0xa2,0x28},{0x09,0x0a,0x00,0x00},{0x2a,0xa2,0x28,0x00},{0x2a,0xa0,0xa8,0x0a},{0xa9,0xaa,0x82,0x8a},{0xaa,0xaa,0xaa,0x00},{0x28,0x8a,0xaa,0x82},{0xaa,0xaa,0xaa,0xa8},{0x2a,0xaa,0xaa,0xa2},{0x25,0xa6,0xaa,0xa2},{0xaa,0xaa,0xa8,0x2a},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0x58,0x8a,0xaa,0x95}},{{0xa8,0xa0,0x00,0x00},{0x0a,0xaa,0x20,0x80},{0x2a,0xa6,0xa2,0x28},{0x19,0x0a,0x00,0x00},{0x2a,0xa2,0xa8,0x00},{0x2a,0xaa,0xa8,0x89},{0xaa,0xaa,0x8a,0x89},{0xaa,0xaa,0xaa,0x02},{0x2a,0x8a,0xaa,0xa1},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0xaa,0x81},{0x2a,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0x58,0xaa,0xa9,0x95}},{{0xa8,0xa0,0x00,0x00},{0x0a,0xaa,0xa0,0x82},{0xaa,0xaa,0xa2,0x28},{0x9a,0x2a,0x00,0x00},{0x2a,0xaa,0xa8,0x04},{0x2a,0xaa,0xa8,0xa9},{0xaa,0xaa,0x8a,0x89},{0xaa,0xaa,0xaa,0x82},{0xaa,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0xa4},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0x58,0xaa,0xa9,0x95}},{{0xa8,0xa0,0x00,0x00},{0x0a,0xaa,0xa8,0x82},{0xaa,0xaa,0xa2,0x28},{0x9a,0x2a,0x00,0x00},{0xaa,0xaa,0xa8,0x88},{0x2a,0xaa,0xaa,0xa5},{0xaa,0xaa,0x8a,0x85},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0x96},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa9,0x95},{0x5a,0xaa,0xa9,0x55}},{{0xa8,0xa0,0x00,0x14},{0x0a,0xaa,0xa8,0x82},{0xaa,0xaa,0xaa,0x28},{0xaa,0x2a,0x00,0x00},{0xaa,0xaa,0xaa,0x99},{0x2a,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x85},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0x55,0x55},{0x5a,0xaa,0x69,0x55}},{{0xa8,0x50,0x00,0x14},{0x8a,0xaa,0x9a,0x81},{0xaa,0xaa,0xaa,0x16},{0xaa,0x2a,0x08,0x00},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x85},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa5,0x55},{0xa9,0xa5,0x55,0x55},{0x9a,0xaa,0x65,0x51}},{{0x98,0x50,0x00,0x14},{0x8a,0xaa,0x9a,0x81},{0xaa,0xaa,0xaa,0x15},{0xaa,0x2a,0x08,0x00},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x85},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x59},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xa9,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xa6,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0xa9,0x64,0x51}},{{0x98,0x50,0x00,0x28},{0x8a,0x6a,0x9a,0x41},{0xaa,0xaa,0xa9,0x15},{0xaa,0xaa,0x18,0x80},{0xaa,0xaa,0x96,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa9,0x65},{0xaa,0xaa,0x69,0x95},{0xaa,0xaa,0xa5,0x59},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0x80,0x55},{0xaa,0xaa,0xa9,0x55},{0xaa,0xaa,0x55,0x55},{0xaa,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0xa9,0x54,0x51}},{{0x94,0x50,0x00,0x28},{0xa6,0x55,0x55,0x61},{0xaa,0xaa,0xa9,0x15},{0xaa,0xaa,0x28,0x80},{0xa9,0x9a,0x96,0x95},{0xaa,0xaa,0x96,0x55},{0xaa,0xa9,0x69,0x65},{0xaa,0xaa,0x69,0x95},{0xaa,0xa5,0x65,0x55},{0xaa,0xa6,0x25,0x55},{0xaa,0x01,0x55,0x55},{0xaa,0xaa,0x59,0x55},{0xaa,0x55,0x55,0x55},{0x9a,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa9,0xa5,0x54,0x41}},{{0x94,0xa0,0x00,0x28},{0xa5,0x55,0x55,0x51},{0xaa,0xa9,0x59,0x15},{0xaa,0xaa,0x68,0xa1},{0xa5,0x59,0x55,0x55},{0xaa,0x5a,0x55,0x55},{0xaa,0xa9,0x65,0x55},{0xaa,0xaa,0x55,0x55},{0xaa,0xa5,0x55,0x55},{0xaa,0xa5,0x15,0x55},{0xa9,0x55,0x55,0x55},{0xaa,0xa9,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa9,0x65,0x54,0x41}},{{0x64,0xa0,0x00,0x14},{0xa5,0x55,0x55,0x59},{0xaa,0xa9,0x59,0x15},{0xaa,0xaa,0x68,0x95},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0xaa,0xa5,0x65,0x55},{0xaa,0x55,0x55,0x55},{0xaa,0xa5,0x55,0x55},{0xaa,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x9a,0x99,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa8,0x65,0x54,0x41}},{{0x64,0xa0,0x00,0x14},{0xa5,0x55,0x65,0x55},{0x8a,0x99,0x59,0x15},{0xaa,0xa5,0xaa,0x95},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa6,0xa5,0x65,0x55},{0xa5,0x55,0x55,0x55},{0x92,0x25,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x9a,0x99,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa4,0x55,0x54,0x40}},{{0x64,0xa0,0x00,0x14},{0xa5,0x55,0x65,0x95},{0x89,0x99,0x55,0x15},{0xaa,0xa5,0xaa,0x95},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x26,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x96,0x25,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x9a,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa4,0x55,0x54,0x40}},{{0x64,0x50,0x80,0x15},{0xa5,0x95,0x65,0x95},{0x99,0x95,0x55,0x15},{0xaa,0x95,0xa6,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x26,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa4,0x55,0x14,0x00}},{{0x58,0x5a,0x80,0x15},{0xa9,0xaa,0xaa,0x95},{0x15,0x55,0x55,0x15},{0xaa,0x95,0xa6,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x25,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa4,0x55,0x14,0x00}},{{0x98,0x5a,0x80,0x15},{0xaa,0xaa,0xaa,0x95},{0x15,0x55,0x55,0x15},{0x2a,0x95,0xa5,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0xa6,0x54,0x14,0x00}},{{0x98,0x5a,0x48,0x95},{0xaa,0xaa,0xaa,0x95},{0x15,0x55,0x55,0x15},{0x25,0x95,0x95,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x2a,0x55,0x55,0x65},{0xa6,0x54,0x10,0x00}},{{0x9a,0x55,0x68,0x55},{0x6a,0xaa,0x9a,0x55},{0x15,0x55,0x55,0x15},{0x25,0x55,0x95,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x25,0x55,0x55,0x66},{0x2a,0xaa,0xaa,0x6a},{0xa6,0x10,0x00,0x00}},{{0x9a,0x55,0x64,0x41},{0x5a,0xaa,0x9a,0x55},{0x15,0x55,0x55,0x15},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0x6a,0xaa,0xaa},{0x2a,0xaa,0xaa,0xaa},{0xa6,0x10,0x08,0x00}},{{0x9a,0x55,0x94,0x81},{0x5a,0x6a,0x9a,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x46,0x0a,0x9a,0x81},{0xa6,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x45,0x0a,0xa9,0x41},{0xa5,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x15,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x44,0x85,0x56},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x45,0x0a,0x65,0x41},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0x55,0x55,0x69},{0x55,0x55,0x55,0x69},{0x55,0x56,0x11,0x59},{0x55,0x55,0x55,0x61},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x66},{0x65,0x44,0x42,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x46,0x05,0x55,0x41},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x51},{0x55,0xaa,0xaa,0x54},{0x45,0x55,0x55,0x56},{0x59,0x59,0x11,0x56},{0x55,0x55,0x14,0x52},{0x55,0x55,0x55,0x55},{0x55,0x51,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x46,0x05,0x55,0x41},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x61},{0x40,0x55,0x55,0x80},{0x6a,0xaa,0xaa,0xaa},{0x55,0x04,0x02,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x59,0x55,0x65,0x46},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x45,0x05,0x55,0x55},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x51},{0x40,0x00,0x00,0x42},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x64,0x0a,0x9a,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x45,0x05,0x55,0x55},{0x55,0x55,0x55,0x59},{0x65,0x55,0x55,0x55},{0x55,0x64,0x55,0x41},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x5a},{0x6a,0x2a,0x82,0x2a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x45},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0xaa},{0x40,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x44},{0x40,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x40,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x40},{0x55,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x42},{0x95,0x55,0x51,0x42},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x50,0x50,0x02},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_2_7 = { .phases = 40, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_2_7_data[0] };
+const uint8_t epd_wp_ed047tc2_2_8_data[38][16][4] = {{{0x00,0x00,0x00,0x00},{0x08,0x00,0x8a,0x02},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x80,0x08,0x82},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x02},{0x00,0x00,0x00,0x08},{0x00,0x00,0x00,0x00},{0x02,0x80,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0xa8,0x00,0x0a,0x00},{0x08,0x00,0x8a,0x02},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0xa0,0x08,0x81},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x82},{0x20,0x00,0x00,0x08},{0x20,0x00,0x00,0x00},{0x02,0x82,0x00,0x20},{0x80,0x00,0x00,0x00},{0xaa,0x08,0xaa,0x08},{0x00,0x00,0x08,0x00}},{{0xa8,0x00,0x0a,0x00},{0x08,0x20,0x8a,0x02},{0x00,0x20,0x00,0x20},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0xa0,0x08,0x81},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x82},{0xa0,0x00,0x00,0x0a},{0x20,0x00,0x00,0x00},{0x02,0x82,0x00,0x2a},{0x80,0x00,0x00,0x01},{0xaa,0xaa,0xaa,0xa8},{0x00,0x20,0x08,0x00}},{{0xa8,0x00,0x0a,0x00},{0x08,0xa0,0x8a,0x02},{0x00,0x20,0x00,0x20},{0x80,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0xa0,0x08,0x81},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x81},{0xa0,0x00,0x00,0x05},{0x20,0x00,0x00,0x01},{0x02,0x82,0x00,0xa9},{0x80,0x00,0x00,0x01},{0xaa,0xaa,0xaa,0xa4},{0x12,0x28,0xaa,0x01}},{{0xa8,0x00,0x0a,0x00},{0x88,0xa0,0x8a,0x02},{0x00,0x20,0x00,0x20},{0x80,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x82,0xa8,0x08,0x81},{0x08,0x00,0x02,0x00},{0x00,0x00,0x00,0x08},{0x00,0x02,0x0a,0x80},{0x88,0x00,0x02,0x81},{0xa0,0x00,0x00,0x25},{0x28,0x00,0x00,0x21},{0x22,0x82,0x00,0xa5},{0x80,0x00,0x00,0x21},{0xaa,0xaa,0xaa,0xa4},{0x19,0x2a,0xaa,0x81}},{{0xa8,0x00,0x0a,0x00},{0x8a,0xa8,0x8a,0x0a},{0x00,0x20,0x00,0x28},{0x80,0x00,0x00,0x00},{0x20,0x00,0x00,0x0a},{0x82,0xaa,0x08,0x81},{0x08,0x20,0x02,0x02},{0x08,0x00,0x00,0x08},{0x28,0x02,0x0a,0x80},{0x88,0x08,0x0a,0x81},{0xa0,0x00,0x08,0x25},{0x2a,0x00,0x0a,0x21},{0x22,0xa2,0x00,0x95},{0x80,0x02,0x00,0xa1},{0xaa,0xaa,0xaa,0xa5},{0x19,0xaa,0xaa,0x81}},{{0xa8,0x00,0x05,0x00},{0x8a,0xaa,0x8a,0x0a},{0x02,0x20,0x00,0x28},{0x88,0x00,0x00,0x02},{0x20,0x00,0x00,0x09},{0xa2,0xaa,0xa8,0x85},{0x8a,0x28,0x0a,0x09},{0x88,0x00,0x00,0x08},{0x28,0x02,0x8a,0x80},{0x88,0x0a,0x0a,0x81},{0xa8,0x02,0x08,0x25},{0xaa,0xaa,0x0a,0x21},{0x2a,0xaa,0x2a,0x95},{0xa0,0x02,0x82,0x81},{0xaa,0xaa,0xaa,0x95},{0x19,0xaa,0xaa,0x81}},{{0xa8,0x00,0x05,0x00},{0x8a,0xaa,0xaa,0x09},{0x02,0x20,0x08,0x04},{0x88,0x00,0x00,0x21},{0x28,0x00,0x00,0x09},{0xaa,0xaa,0xa8,0x85},{0x8a,0xaa,0x0a,0x09},{0x88,0x08,0x00,0x04},{0xaa,0x82,0x8a,0x82},{0xaa,0xaa,0xaa,0x81},{0xa8,0x22,0xa8,0x15},{0xaa,0xaa,0xaa,0x15},{0xaa,0xaa,0x2a,0x95},{0xa0,0x22,0x82,0x91},{0xaa,0xaa,0xaa,0x95},{0x15,0x6a,0xaa,0x85}},{{0xa8,0x00,0x05,0x10},{0x8a,0xaa,0xaa,0x09},{0x22,0x20,0x28,0x14},{0x88,0x00,0x00,0x25},{0x28,0x00,0x00,0x05},{0xaa,0xaa,0xa8,0x45},{0xaa,0xaa,0xaa,0x05},{0x88,0x0a,0x00,0x85},{0xaa,0xa2,0x8a,0xa9},{0xaa,0xaa,0xaa,0xa1},{0xaa,0x2a,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xa2,0x2a,0x8a,0x95},{0xaa,0xaa,0xaa,0x95},{0x15,0x6a,0xa6,0x85}},{{0xa8,0x00,0x05,0x90},{0x8a,0xaa,0x65,0x09},{0xaa,0x22,0xaa,0x15},{0x88,0x00,0x00,0x25},{0xa8,0x00,0x00,0x25},{0xaa,0xaa,0xa8,0x65},{0xaa,0xaa,0xaa,0x25},{0xa8,0x2a,0x80,0xa5},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x55},{0xa2,0xaa,0x8a,0x95},{0xa9,0xaa,0x66,0x55},{0x15,0x6a,0x56,0x45}},{{0x94,0x00,0x05,0x90},{0x8a,0xaa,0x65,0x29},{0xaa,0x22,0xaa,0x95},{0x88,0x00,0x00,0x25},{0xa8,0x08,0x00,0x25},{0xaa,0xaa,0xa6,0x65},{0xaa,0xaa,0xaa,0x25},{0xaa,0x2a,0x8a,0xa5},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x45},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0x29,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0xa9,0xa9,0x55,0x55},{0x25,0x6a,0x55,0x55}},{{0x94,0x00,0x0a,0x64},{0x8a,0xaa,0x65,0x19},{0xaa,0x22,0xaa,0x95},{0x88,0x00,0x00,0x25},{0xa8,0x0a,0x0a,0x15},{0xaa,0x6a,0xa6,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0x8a,0xa5},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xa9,0x69,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0x99,0xa5,0x55,0x55},{0x21,0x15,0x55,0x55}},{{0x94,0x00,0x0a,0x64},{0xaa,0x9a,0x65,0x19},{0xaa,0x22,0xaa,0x95},{0x8a,0x00,0x00,0x15},{0xa8,0x2a,0x8a,0x15},{0xaa,0x5a,0xa6,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa8,0x55},{0x9a,0xaa,0xa6,0x55},{0x9a,0xaa,0xa5,0x55},{0xa9,0x69,0xaa,0x55},{0xaa,0xa9,0x6a,0x55},{0x95,0x55,0x55,0x55},{0x22,0x15,0x55,0x55}},{{0x94,0x00,0x0a,0xa5},{0xaa,0x5a,0x65,0x15},{0xaa,0x22,0xaa,0x95},{0xaa,0xa0,0x08,0x15},{0xa8,0x2a,0x8a,0x15},{0xaa,0x55,0x56,0x55},{0xaa,0xaa,0xa9,0x95},{0xaa,0xaa,0xaa,0x15},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa5,0x55},{0x9a,0xa9,0x56,0x55},{0x9a,0xa1,0x55,0x55},{0xa9,0x69,0x95,0x55},{0xaa,0xa9,0x69,0x55},{0x95,0x55,0x55,0x55},{0x22,0x15,0x55,0x55}},{{0x68,0x00,0x0a,0x95},{0xa6,0x55,0x55,0x15},{0xaa,0x12,0x8a,0x15},{0xaa,0xa0,0x28,0x15},{0xa8,0x2a,0x8a,0x15},{0xa9,0x55,0x56,0x55},{0xaa,0xaa,0xa5,0x95},{0xaa,0xaa,0xaa,0x55},{0xaa,0xa9,0xa5,0x55},{0xaa,0xa5,0x55,0x55},{0x9a,0xa9,0x55,0x55},{0x91,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x9a,0xa9,0x65,0x55},{0x95,0x55,0x55,0x55},{0xa2,0x15,0x55,0x55}},{{0x68,0x00,0x0a,0x55},{0xa6,0x55,0x9a,0x15},{0xaa,0x12,0x06,0x55},{0xaa,0xaa,0x28,0x15},{0xa8,0x2a,0xaa,0x15},{0xa9,0x55,0x56,0x55},{0xaa,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xa9,0x65,0x55},{0xaa,0xa5,0x55,0x55},{0x9a,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x99,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa2,0x15,0x55,0x55}},{{0x68,0x00,0x05,0x55},{0xa5,0x55,0x9a,0x25},{0xa9,0x91,0x55,0x55},{0xaa,0xaa,0x28,0x15},{0xa8,0x2a,0xaa,0x95},{0x59,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0xaa,0xa5,0x6a,0x55},{0xaa,0xa9,0x65,0x55},{0xa4,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0x15,0x55,0x55}},{{0x68,0x00,0x05,0x55},{0xa5,0x65,0x9a,0x25},{0x99,0x91,0x55,0x55},{0xaa,0xaa,0xa8,0x95},{0x9a,0x25,0x65,0x95},{0x51,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0xa6,0x85,0x65,0x55},{0x9a,0x29,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0x15,0x55,0x55}},{{0x54,0x00,0x05,0x55},{0xa9,0xa5,0x9a,0x25},{0x99,0x91,0x55,0x55},{0xa6,0xaa,0xaa,0x95},{0x96,0xa5,0x65,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa6,0x85,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x96,0x55,0x55,0x55},{0xaa,0x95,0x11,0x56}},{{0x94,0x00,0x05,0x55},{0x69,0xaa,0xaa,0x25},{0x95,0x99,0x55,0x55},{0xa6,0xaa,0x96,0x55},{0x96,0x95,0x55,0x55},{0x55,0x55,0x55,0x56},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x85,0x55,0x55,0x56},{0xa6,0x55,0x55,0x59},{0xaa,0x95,0x21,0x56}},{{0x94,0x00,0x85,0x51},{0x6a,0xaa,0xaa,0xa5},{0x95,0x99,0x55,0x55},{0x65,0x59,0x96,0x55},{0x96,0x95,0x55,0x55},{0x55,0x55,0x55,0x56},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x85,0x55,0x55,0x66},{0xaa,0x56,0x99,0x6a},{0xaa,0xaa,0xaa,0xaa}},{{0x94,0x22,0x85,0x51},{0x6a,0xaa,0x20,0x95},{0x55,0x59,0x55,0x55},{0x55,0x55,0x56,0x55},{0x96,0x95,0x55,0x55},{0x55,0x55,0x55,0x5a},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x66,0x56,0x95,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x96,0x2a,0x65,0x01},{0xa2,0x8a,0x65,0x95},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x96,0x95,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x15,0x55,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x96,0xa9,0x50,0x01},{0xa6,0x0a,0x65,0x95},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x45,0x55,0x55,0x4a},{0x55,0x55,0x55,0x55},{0x66,0x96,0x55,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x42,0x95,0x90,0x01},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x95,0x55,0x95},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x52},{0x65,0x54,0x01,0x2a},{0x65,0x55,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x41,0x56,0xa0,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x64},{0x66,0x6a,0xa9,0x50},{0x55,0x55,0x55,0x64},{0x55,0x55,0x55,0x5a},{0x55,0x55,0x55,0x55},{0x45,0x50,0x00,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x41,0x6a,0x60,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x56},{0x55,0x5a,0x95,0x5a},{0x55,0x15,0x55,0x20},{0x55,0x55,0x55,0x5a},{0x55,0x55,0x55,0x95},{0x55,0x55,0x55,0x56},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x42,0xa9,0x50,0x05},{0x55,0x55,0x55,0x55},{0x65,0x55,0x55,0x65},{0x55,0x55,0x55,0x55},{0x59,0x65,0x6a,0xa6},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x41,0x50,0x15,0x6a},{0x45,0x54,0x55,0x91},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x42,0x95,0x50,0x05},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x51},{0x65,0x55,0x55,0x54},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x45,0x54,0x10,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x41,0x55,0x50,0x15},{0x55,0x55,0x55,0x55},{0x6a,0xa2,0xaa,0xa2},{0x52,0xa6,0x65,0x92},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x41,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xa2},{0x6a,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x40,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x40,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x84,0x50,0x05,0x0a},{0x40,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x00,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x2a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0xa5,0x50,0x15,0x48},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x45},{0x00,0x00,0x00,0x00},{0x81,0x51,0x11,0x68},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x54},{0x45,0x55,0x55,0x44},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_2_8 = { .phases = 38, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_2_8_data[0] };
+const uint8_t epd_wp_ed047tc2_2_9_data[38][16][4] = {{{0x00,0x00,0x00,0x00},{0x0a,0x82,0x02,0x00},{0x40,0x00,0x00,0x00},{0x00,0x80,0x02,0x08},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x28,0x00,0x00,0x02},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x0a,0x8a,0x82,0x00},{0x40,0x08,0x00,0x40},{0x00,0x80,0x22,0x08},{0x00,0x08,0x08,0x08},{0x00,0x00,0x00,0x00},{0x00,0x00,0x02,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x10,0x04,0x00,0x00},{0x11,0x40,0x20,0x00},{0x81,0x00,0x00,0x20},{0x28,0x08,0x00,0x82},{0x00,0x20,0x80,0x80},{0x00,0x00,0x02,0x80}},{{0x80,0x00,0x00,0x00},{0x6a,0x8a,0x8a,0x00},{0x90,0x08,0x01,0x40},{0x00,0x80,0x22,0x08},{0x00,0x28,0x88,0x0a},{0x80,0x08,0x00,0x00},{0x00,0x08,0x02,0x00},{0x00,0x08,0x02,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x80,0x00},{0x14,0x14,0x00,0x00},{0x21,0x50,0x20,0x80},{0x81,0x18,0x00,0xa0},{0x29,0x0a,0x02,0x81},{0x2a,0xa2,0xaa,0xa0},{0x00,0x2a,0x02,0x40}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x00},{0xa0,0x08,0x02,0x80},{0x80,0x88,0x22,0x08},{0x20,0xa8,0x89,0x0a},{0x80,0xa8,0x00,0x02},{0xaa,0x8a,0x0a,0x08},{0x00,0x08,0x02,0x00},{0x00,0x00,0x00,0x02},{0x08,0x08,0x80,0x00},{0x24,0x54,0x22,0x80},{0x25,0x52,0x2a,0xa0},{0x86,0xa8,0x20,0xa8},{0xaa,0x2a,0x82,0x81},{0x2a,0xaa,0xaa,0xa0},{0x00,0xaa,0x22,0x40}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x00},{0xaa,0x8a,0x2a,0x80},{0x80,0x88,0x22,0x08},{0x22,0xaa,0x8a,0x0a},{0x82,0xa8,0x00,0x02},{0xaa,0xaa,0x0a,0x0a},{0x00,0x08,0x02,0x28},{0x00,0x00,0x00,0x02},{0x2a,0x8a,0x80,0x00},{0xa5,0xaa,0xa2,0xa0},{0x26,0x96,0xaa,0xa0},{0x8a,0xa8,0xa0,0xa8},{0xaa,0x2a,0x8a,0x81},{0x2a,0xaa,0xaa,0xa8},{0x00,0xaa,0x22,0x40}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x80},{0xaa,0x8a,0xaa,0x80},{0x80,0x88,0x22,0x24},{0xaa,0xaa,0x8a,0x0a},{0xa2,0xa8,0x02,0x02},{0xaa,0xaa,0x2a,0x0a},{0x00,0x08,0x02,0x2a},{0x00,0x00,0x00,0x02},{0x2a,0xaa,0x80,0x00},{0xa9,0xaa,0xa2,0xa0},{0x26,0xa6,0xaa,0xa0},{0x8a,0xaa,0xaa,0xaa},{0xaa,0x2a,0x8a,0x41},{0xaa,0xaa,0xaa,0xa8},{0x08,0xaa,0x12,0x41}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x80},{0xaa,0x8a,0xaa,0x80},{0x80,0x88,0x22,0x24},{0xaa,0xaa,0x8a,0x29},{0xa2,0xa8,0x02,0x02},{0xaa,0xaa,0xaa,0x0a},{0x00,0x08,0x02,0x2a},{0x00,0x00,0x08,0x80},{0x2a,0xaa,0x8a,0x22},{0xaa,0xaa,0xaa,0xa0},{0x2a,0xaa,0xaa,0xa0},{0x8a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x69},{0xaa,0xaa,0xaa,0xa8},{0x28,0xaa,0x12,0x41}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x80},{0xaa,0xaa,0xaa,0x80},{0x80,0x88,0x22,0x24},{0xaa,0xaa,0x8a,0x25},{0xaa,0xaa,0x0a,0x02},{0xaa,0xaa,0xaa,0x09},{0x20,0x08,0x02,0x28},{0x00,0x02,0x0a,0xa0},{0x2a,0xaa,0x8a,0x2a},{0xaa,0xaa,0xaa,0xa0},{0x2a,0xaa,0xaa,0xa8},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0xaa,0xa8},{0x28,0xaa,0x11,0x45}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x80},{0xaa,0xaa,0xaa,0x80},{0x81,0x88,0xa2,0x24},{0xaa,0xaa,0x8a,0x25},{0xaa,0xaa,0x0a,0x21},{0xaa,0xaa,0xaa,0x05},{0x2a,0x8a,0x02,0x28},{0x00,0x82,0xaa,0xa1},{0x2a,0xaa,0xaa,0x2a},{0xaa,0xaa,0xaa,0xa8},{0x2a,0xaa,0xaa,0xa8},{0xaa,0xaa,0xaa,0x95},{0xa6,0xaa,0xa9,0x55},{0xaa,0xaa,0xaa,0xa8},{0x2a,0xaa,0x91,0x45}},{{0x80,0x00,0x00,0x20},{0xaa,0xaa,0x89,0x80},{0xaa,0xaa,0xaa,0x80},{0x82,0x88,0xaa,0x24},{0xaa,0xaa,0xaa,0x25},{0xaa,0xaa,0x0a,0x21},{0xaa,0xaa,0xaa,0x05},{0x2a,0xaa,0x82,0x04},{0x20,0xa2,0xaa,0xa1},{0x2a,0xaa,0xaa,0x29},{0xaa,0xaa,0xaa,0xa8},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x55},{0x96,0xa5,0x65,0x55},{0xaa,0xaa,0xaa,0x54},{0x2a,0xaa,0x91,0x45}},{{0x80,0x00,0x00,0x10},{0xaa,0xaa,0x89,0x80},{0xaa,0xaa,0xaa,0xa0},{0xa2,0xa8,0x9a,0x14},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0x8a,0x21},{0xaa,0xaa,0xaa,0x85},{0x2a,0xaa,0x8a,0x15},{0x20,0xaa,0xaa,0xa1},{0x2a,0xaa,0xaa,0x25},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x5a},{0xaa,0xaa,0xaa,0x55},{0x96,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x56},{0x2a,0x99,0x91,0x45}},{{0x80,0x00,0x00,0x94},{0xaa,0xa9,0x45,0x44},{0xaa,0xaa,0xaa,0xa0},{0xa2,0xa8,0x99,0x16},{0xaa,0xa6,0xa6,0x95},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xa9,0xa5},{0xaa,0xaa,0xa9,0x95},{0x2a,0xaa,0xaa,0x69},{0x2a,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x5a},{0xaa,0xaa,0x9a,0x55},{0xaa,0xaa,0x9a,0x55},{0x95,0x95,0x55,0x55},{0xaa,0xaa,0x55,0x56},{0x1a,0x95,0x99,0x05}},{{0x80,0x00,0x00,0x64},{0xa9,0x65,0x45,0x48},{0xaa,0xaa,0xa9,0xa2},{0xa2,0x6a,0x99,0x15},{0xaa,0xa5,0x65,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xa5,0xa5},{0xaa,0xaa,0xa9,0x95},{0xaa,0xaa,0xaa,0x59},{0x2a,0xaa,0x6a,0x95},{0xaa,0xaa,0x99,0x55},{0xaa,0xaa,0x95,0x55},{0xaa,0xaa,0x9a,0x55},{0x95,0x95,0x55,0x55},{0xaa,0x99,0x55,0x55},{0x19,0x55,0x89,0x05}},{{0x40,0x00,0x00,0xa4},{0xa5,0x65,0x45,0x4a},{0xaa,0xaa,0xa9,0xa1},{0xa2,0x6a,0x99,0x15},{0xa9,0x95,0x65,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xa5,0x95,0xa5},{0xaa,0xa6,0xa9,0x95},{0xaa,0xaa,0xa6,0x55},{0x2a,0xaa,0x6a,0x95},{0xaa,0xaa,0x59,0x55},{0xaa,0xa9,0x55,0x55},{0xaa,0xa6,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa5,0x99,0x55,0x55},{0x15,0x55,0x49,0x15}},{{0x40,0x00,0x00,0x54},{0xa5,0x65,0x45,0x88},{0xaa,0xaa,0xa9,0xa1},{0xaa,0x66,0x11,0x15},{0xa9,0x55,0x65,0x55},{0xaa,0x96,0xa9,0x95},{0xa5,0x55,0x55,0x55},{0xaa,0xa6,0xa9,0x15},{0xaa,0xaa,0x95,0x55},{0x26,0xa5,0x65,0x95},{0xaa,0xa9,0x55,0x55},{0xaa,0xa9,0x55,0x55},{0xaa,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x15,0x55,0x45,0x15}},{{0x40,0x00,0x00,0x55},{0xa5,0x55,0x46,0x89},{0xaa,0xa6,0xa5,0x61},{0xaa,0x66,0x51,0x15},{0x95,0x55,0x55,0x55},{0x28,0x56,0xa5,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xa6,0xa9,0x55},{0xaa,0xa9,0x55,0x55},{0xa5,0x55,0x55,0x55},{0xaa,0xa9,0x55,0x55},{0x9a,0xa9,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x45,0x15}},{{0xa0,0x00,0x00,0x55},{0x95,0x56,0x8a,0x99},{0xaa,0xaa,0x9a,0x51},{0xaa,0x66,0x55,0x95},{0x95,0x55,0x55,0x55},{0x29,0x55,0xa5,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xa5,0x45,0x55},{0xaa,0xa9,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0x59,0x55,0x55},{0x9a,0xa9,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x45,0x16}},{{0xa0,0x00,0x00,0x55},{0x9a,0x9a,0x8a,0x65},{0xaa,0xa5,0x56,0x51},{0x6a,0x56,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x85,0x55,0x55,0x55},{0xaa,0x59,0x55,0x55},{0x95,0x55,0x55,0x55},{0x9a,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa9,0x55,0x55,0x96},{0x95,0x55,0x55,0x55},{0x05,0x55,0x45,0x16}},{{0xa0,0x00,0x20,0x51},{0x5a,0xaa,0x8a,0x65},{0xa5,0x65,0x56,0x59},{0x69,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0x6a,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x85,0x55,0x45,0x12}},{{0x60,0x28,0xa0,0x51},{0x6a,0xaa,0x8a,0x65},{0x95,0x55,0x56,0x55},{0x59,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x84,0x55,0x44,0x12}},{{0x6a,0xaa,0xa8,0x11},{0x6a,0xaa,0x8a,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0xa6,0x45,0x44,0x12}},{{0x5a,0xaa,0x64,0x01},{0xa6,0x99,0x45,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0xa6,0x44,0x46,0x12}},{{0x5a,0x95,0x56,0x01},{0x95,0x55,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x99,0x01},{0x95,0x55,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x56,0x5a,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x95},{0x95,0x55,0x55,0x51},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x65,0x55},{0x6a,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xa8}},{{0x25,0x6a,0x99,0x01},{0x15,0x55,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x65,0x65},{0x56,0x5a,0x56,0x56},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x65},{0x95,0x55,0x41,0x56},{0x95,0x55,0x55,0x41},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x5a,0x66,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa8}},{{0x2a,0xaa,0x56,0x05},{0x55,0x55,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x95,0x95,0x61},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x45},{0x55,0x55,0x55,0x59},{0x55,0x55,0x54,0x55},{0x55,0x54,0x00,0x15},{0x91,0x55,0x15,0x42},{0x55,0x55,0x24,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x2a,0x95,0x56,0x05},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x65,0x49,0x91},{0x55,0x55,0x54,0x44},{0x55,0x55,0x55,0x49},{0x15,0x55,0x55,0x54},{0x55,0x51,0x54,0x0a},{0x55,0x04,0x00,0x2a},{0xaa,0xaa,0xaa,0xaa},{0x55,0x54,0x10,0x55},{0x65,0x56,0x9a,0x55},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x05},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0xa2,0x1a,0x06,0x50},{0x68,0xa0,0xa8,0xaa},{0x55,0x45,0x55,0x06},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x45,0x04,0x00,0xaa},{0x55,0x55,0x65,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x51,0x05,0x01,0x02},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x00,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x6a},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x2a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x06},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x15,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x58},{0x55,0x55,0x55,0x00},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x58},{0x55,0x55,0x55,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x6a,0xaa,0xa9,0xa4},{0x55,0x55,0x55,0x00},{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x54},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_2_9 = { .phases = 38, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_2_9_data[0] };
+const uint8_t epd_wp_ed047tc2_2_10_data[44][16][4] = {{{0x00,0x00,0x00,0x00},{0x80,0x80,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x02,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x20,0x00},{0x00,0x00,0x00,0x00},{0x00,0x80,0x00,0x00},{0x80,0x00,0x08,0x02},{0x00,0x80,0x00,0x08},{0x10,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x02,0x00,0x00,0x00},{0xa2,0x88,0x20,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x02},{0x08,0x00,0x02,0x00},{0x00,0x00,0x00,0x00},{0x00,0x02,0x02,0x00},{0x00,0x00,0x00,0x02},{0x00,0x80,0x20,0x00},{0x00,0x80,0x00,0x00},{0x00,0x82,0x00,0x00},{0xa8,0x00,0x08,0x82},{0x00,0x80,0x20,0x0a},{0x92,0x00,0x00,0x8a},{0x2a,0x20,0xa2,0xa8},{0x00,0x00,0x00,0x08}},{{0x02,0x00,0x00,0x00},{0xa2,0x8a,0x20,0x05},{0x00,0x00,0x00,0x40},{0x00,0x00,0x00,0x02},{0x08,0x05,0x02,0x00},{0x00,0x00,0x00,0x02},{0x00,0x02,0x02,0x00},{0x00,0x00,0x00,0x0a},{0x00,0x80,0x20,0x00},{0x02,0xa0,0xa0,0x00},{0x00,0x82,0x00,0x02},{0xaa,0x20,0x08,0x82},{0x84,0x80,0xa0,0x0a},{0xa2,0x84,0x00,0x8a},{0x2a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x08}},{{0x82,0x00,0x00,0x00},{0xa2,0xaa,0xa0,0x05},{0x00,0x00,0x00,0x40},{0x00,0x00,0x00,0x02},{0x29,0x15,0x42,0x00},{0x00,0x00,0x00,0x02},{0x00,0x02,0x02,0x00},{0x00,0x00,0x00,0x0a},{0x02,0xa0,0x20,0x80},{0x02,0xaa,0xa8,0x00},{0x00,0x82,0x00,0x02},{0xaa,0xa8,0x2a,0x82},{0x9a,0x90,0xa8,0x0a},{0xa6,0xa8,0x00,0x8a},{0x2a,0xaa,0xaa,0xaa},{0x22,0x00,0x80,0x2a}},{{0x82,0x00,0x00,0x00},{0xa2,0xaa,0xa8,0x09},{0x00,0x00,0x00,0x40},{0x00,0x00,0x00,0x02},{0x29,0x1a,0x46,0x00},{0x00,0x00,0x00,0x02},{0x00,0x02,0x02,0x00},{0x00,0x00,0x00,0x0a},{0x02,0xaa,0x28,0x80},{0x2a,0xaa,0xa8,0x00},{0x02,0x82,0x00,0x02},{0xaa,0xa8,0x2a,0x8a},{0xaa,0xa8,0xaa,0x0a},{0xaa,0xaa,0x08,0x8a},{0x2a,0xaa,0xaa,0xaa},{0x22,0x8a,0x88,0x26}},{{0x82,0x00,0x00,0x00},{0xaa,0xaa,0xa8,0x09},{0x00,0x00,0x00,0x90},{0x02,0xa0,0x08,0x02},{0x2a,0x2a,0x86,0x20},{0x08,0x00,0x00,0x02},{0x00,0x02,0x02,0x20},{0x00,0x00,0x00,0x0a},{0x2a,0xaa,0xa8,0x80},{0x2a,0xaa,0xa8,0x20},{0x02,0x82,0x00,0x02},{0xaa,0xaa,0xaa,0x8a},{0xaa,0xa8,0xaa,0x0a},{0xaa,0xaa,0xa8,0x8a},{0xaa,0xaa,0xaa,0xaa},{0x1a,0x8a,0x8a,0xa6}},{{0x82,0x00,0x00,0x00},{0xaa,0xaa,0xa8,0x0a},{0x80,0x00,0x00,0x90},{0x02,0xaa,0x2a,0x02},{0x2a,0xaa,0x8a,0x20},{0x08,0x00,0x00,0x02},{0x00,0x02,0x02,0x20},{0x00,0x00,0x00,0x0a},{0x2a,0xaa,0xa8,0x82},{0x2a,0xaa,0xaa,0x20},{0x2a,0xa2,0xa2,0x02},{0xaa,0xaa,0xaa,0x8a},{0xaa,0xaa,0xaa,0x2a},{0xaa,0xaa,0xa8,0x8a},{0xaa,0xaa,0xaa,0xaa},{0x1a,0xaa,0x4a,0x55}},{{0x82,0x00,0x00,0x08},{0xaa,0xaa,0xaa,0x0a},{0x80,0x02,0x00,0x90},{0x02,0xaa,0xaa,0x02},{0x2a,0xaa,0xaa,0xa0},{0x08,0x00,0x00,0x02},{0x00,0x02,0x02,0x20},{0x00,0x00,0x00,0x0a},{0x2a,0xaa,0xa8,0x82},{0x2a,0xaa,0xaa,0x20},{0x2a,0xaa,0xaa,0x02},{0xaa,0xaa,0xaa,0x8a},{0xaa,0xaa,0xaa,0x2a},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x16,0xaa,0x46,0x55}},{{0x82,0x00,0x00,0x08},{0xaa,0xaa,0xaa,0x0a},{0x80,0x02,0x00,0xaa},{0x02,0xaa,0xaa,0x02},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x02},{0x00,0x02,0x82,0x20},{0x00,0x00,0x00,0x0a},{0x2a,0xaa,0xaa,0x82},{0x2a,0xaa,0xaa,0x20},{0x2a,0xaa,0xaa,0x02},{0xaa,0xaa,0xaa,0x8a},{0xaa,0xaa,0xaa,0x2a},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa4},{0x15,0x9a,0x65,0x55}},{{0x82,0x00,0x00,0x28},{0xaa,0xaa,0xaa,0x0a},{0x80,0x22,0x00,0xaa},{0x02,0xaa,0xaa,0x02},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x02},{0x00,0x02,0x82,0x20},{0x00,0x00,0x00,0x0a},{0x2a,0xaa,0xaa,0x82},{0x2a,0xaa,0xaa,0x20},{0x2a,0xaa,0xaa,0x02},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa2},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x55},{0x15,0x95,0x65,0x55}},{{0x81,0x00,0x00,0x28},{0xaa,0xaa,0xaa,0x0a},{0xa2,0x22,0x00,0xaa},{0x02,0xaa,0xaa,0x8a},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x02},{0x0a,0x02,0x82,0x20},{0x00,0x0a,0x00,0x09},{0x2a,0xaa,0xaa,0x82},{0x2a,0xaa,0xaa,0xa2},{0xaa,0xaa,0xaa,0x01},{0xaa,0xaa,0xa2,0xa9},{0xaa,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x55},{0x15,0x55,0x55,0x55}},{{0x81,0x00,0x80,0xa8},{0xaa,0xaa,0x9a,0x2a},{0xa2,0xa2,0x02,0xaa},{0x02,0xaa,0xaa,0xa9},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x02},{0x0a,0x82,0x82,0xa0},{0x00,0x8a,0x80,0x09},{0x2a,0xaa,0xaa,0x22},{0x2a,0xaa,0xaa,0xa2},{0xaa,0xaa,0xaa,0x01},{0xaa,0xaa,0xa2,0x21},{0xaa,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0xa9,0x55},{0x15,0x55,0x55,0x55}},{{0x81,0x00,0x80,0xa8},{0xaa,0x66,0x9a,0x2a},{0xa2,0xa2,0x22,0xaa},{0x02,0xaa,0xaa,0xa9},{0x2a,0xaa,0xa9,0xaa},{0xa8,0x00,0x00,0x01},{0x2a,0xa2,0xa0,0x80},{0x02,0x8a,0x80,0x05},{0x2a,0xaa,0x8a,0x20},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa1},{0xaa,0xaa,0xa0,0x61},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0x55,0x55},{0x15,0x55,0x55,0x55}},{{0x81,0x00,0x80,0x94},{0xaa,0x65,0x56,0x26},{0xa2,0xaa,0x22,0xaa},{0x82,0xaa,0xaa,0xa9},{0x2a,0xaa,0xa9,0xaa},{0xa8,0x00,0x00,0x01},{0xaa,0xaa,0xa8,0x82},{0x02,0x8a,0x82,0x05},{0x2a,0xaa,0x8a,0x21},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xa8,0xaa,0xa1},{0xaa,0xaa,0xa0,0x65},{0xaa,0xaa,0x20,0x85},{0xaa,0xaa,0xaa,0x65},{0xaa,0x95,0x55,0x55},{0x15,0x55,0x55,0x55}},{{0x41,0x00,0x40,0x94},{0x69,0x65,0x56,0x26},{0xa2,0xaa,0x22,0xaa},{0x82,0xaa,0xaa,0xa1},{0x2a,0xaa,0xaa,0xaa},{0xa8,0x00,0x00,0x01},{0xaa,0xaa,0xa8,0x8a},{0xaa,0xaa,0xa2,0x05},{0x2a,0xaa,0x8a,0x21},{0x2a,0xaa,0xaa,0x9a},{0xaa,0x28,0xaa,0xa9},{0xaa,0xaa,0x80,0x65},{0xaa,0x2a,0x00,0x85},{0xaa,0xaa,0xaa,0x65},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55}},{{0x42,0x00,0x48,0xa4},{0x59,0x55,0x55,0xa9},{0xa6,0xaa,0x22,0x69},{0x82,0xaa,0xaa,0x25},{0x2a,0xaa,0xaa,0x9a},{0xa8,0x80,0x00,0x01},{0xaa,0xaa,0xa8,0x8a},{0xaa,0xaa,0xaa,0x05},{0x2a,0xaa,0x8a,0x29},{0x2a,0xaa,0x56,0x99},{0xaa,0x28,0xa8,0xa9},{0xaa,0x82,0x80,0x65},{0xaa,0x2a,0x00,0x85},{0xaa,0xaa,0xa6,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55}},{{0x42,0x00,0x48,0x64},{0x59,0x59,0x65,0xa9},{0xa6,0xaa,0x22,0x69},{0x82,0xaa,0xa0,0x65},{0x2a,0xaa,0xa9,0x56},{0xaa,0x80,0x00,0x09},{0xaa,0xa9,0xa9,0x8a},{0xaa,0xaa,0xaa,0x05},{0xaa,0x2a,0x86,0x69},{0x2a,0x55,0x55,0x99},{0xaa,0x69,0x89,0xa9},{0x96,0x82,0x00,0x45},{0xaa,0x22,0x10,0x05},{0xa9,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55}},{{0x62,0x00,0x4a,0x54},{0x59,0x9a,0xa9,0x95},{0xaa,0xaa,0x22,0x65},{0x82,0xaa,0xa5,0x45},{0x26,0xaa,0xa9,0x55},{0xaa,0x80,0x00,0x09},{0xaa,0xa9,0x29,0x89},{0xaa,0xaa,0xaa,0x85},{0xaa,0x55,0x54,0x69},{0x21,0x55,0x55,0x55},{0xaa,0x69,0x45,0xa9},{0x95,0x55,0x55,0x55},{0xaa,0x22,0x10,0x05},{0x89,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55}},{{0xa2,0x00,0x8a,0x54},{0x66,0xaa,0xaa,0x95},{0xaa,0xaa,0x22,0x55},{0x82,0x95,0x55,0x55},{0x16,0xa5,0x55,0x55},{0xa2,0xa0,0x20,0x09},{0xaa,0xa9,0x29,0x09},{0xaa,0xaa,0xaa,0x85},{0xa9,0x55,0x55,0x59},{0x11,0x55,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa1,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x25,0x55,0x55,0x55}},{{0xa2,0x00,0x86,0x54},{0xa6,0xaa,0xaa,0xa5},{0xaa,0xaa,0x22,0x55},{0xa9,0x55,0x55,0x55},{0x16,0x5a,0xa9,0x55},{0xa2,0xaa,0x28,0x01},{0xaa,0xa9,0x29,0x55},{0xaa,0xaa,0xaa,0x85},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x29,0x55,0x55,0x55}},{{0xa1,0x00,0x85,0x54},{0xaa,0xa2,0xaa,0x65},{0xaa,0xaa,0x21,0x55},{0xa9,0x55,0x55,0x55},{0x15,0xa5,0x55,0x55},{0xa2,0xaa,0xa8,0x01},{0xaa,0xa9,0x69,0x55},{0xaa,0xa5,0x69,0xa5},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x29,0x45,0x55,0x55}},{{0xa1,0x00,0x85,0x54},{0x9a,0x95,0x55,0x55},{0xaa,0x99,0x21,0x55},{0xa9,0x55,0x55,0x55},{0x16,0x55,0x55,0x55},{0x96,0xaa,0xaa,0x85},{0xa2,0xa9,0x55,0x55},{0xaa,0xa5,0x69,0x65},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x2a,0x65,0x85,0x55}},{{0x61,0x00,0x45,0x54},{0x95,0x55,0x55,0x55},{0xaa,0x99,0x61,0x55},{0xa9,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x96,0xaa,0xaa,0x85},{0xa5,0x55,0x55,0x55},{0xaa,0x65,0x55,0x65},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x2a,0x65,0x89,0x95}},{{0x61,0x00,0x45,0x50},{0x95,0x55,0x55,0x55},{0x9a,0x99,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x96,0xaa,0xaa,0x85},{0x95,0x55,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x2a,0xaa,0x8a,0xa9}},{{0x61,0x00,0x45,0x10},{0x15,0x55,0x55,0x55},{0x59,0x55,0x95,0x55},{0xa9,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x96,0xaa,0xaa,0x65},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x2a,0xaa,0xaa,0xa9}},{{0x51,0x20,0x41,0x00},{0x55,0x55,0x55,0x55},{0x59,0x55,0x99,0x55},{0xa9,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x16,0x6a,0x94,0x65},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa}},{{0x50,0x2a,0x40,0x00},{0x55,0x55,0x55,0x55},{0x59,0x55,0x99,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa}},{{0x18,0x2a,0x00,0x01},{0x55,0x55,0x55,0x55},{0x51,0x55,0x99,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0xa9},{0xaa,0xaa,0xaa,0xaa}},{{0x28,0xa9,0x00,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x99,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x28,0x95,0x20,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x99,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x24,0x95,0x20,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x95},{0x55,0x55,0x55,0x99},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x99},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x9a},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x14,0x6a,0x20,0x01},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x95},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x95,0x55,0x55,0x65},{0x55,0x14,0x54,0x56},{0x41,0x55,0x55,0x56},{0x55,0x55,0x55,0x5a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x14,0x6a,0x10,0x01},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x95},{0x55,0x55,0x55,0x11},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x59,0x55,0x95,0x55},{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x15},{0x6a,0xaa,0xaa,0x99},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x18,0x96,0x10,0x05},{0x55,0x55,0x55,0x19},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x21},{0xa9,0x55,0x56,0xa5},{0x55,0x55,0x55,0x55},{0x66,0xa9,0x69,0x54},{0x55,0x50,0x14,0x1a},{0x6a,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x46},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x18,0x95,0x10,0x45},{0x55,0x55,0x55,0x15},{0x55,0x55,0x55,0x65},{0x6a,0x6a,0x9a,0x11},{0x95,0x55,0x55,0x55},{0x69,0x55,0x55,0x59},{0x51,0x56,0x16,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x18,0x55,0x10,0x55},{0x00,0x00,0x00,0x00},{0x55,0x65,0x56,0x54},{0x55,0x15,0x45,0x02},{0x80,0x00,0x00,0x0a},{0x55,0x55,0x55,0x16},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x15,0x55,0x15,0x55},{0x00,0x00,0x00,0x00},{0x59,0x55,0x55,0x14},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x65,0x45,0x54,0x0a},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_2_10 = { .phases = 44, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_2_10_data[0] };
+const uint8_t epd_wp_ed047tc2_2_11_data[57][16][4] = {{{0x20,0x8a,0x80,0x00},{0x15,0x55,0x5a,0xa4},{0x44,0x10,0x0a,0x41},{0x40,0x00,0x09,0x54},{0x10,0x50,0x00,0x00},{0x00,0x00,0x04,0x28},{0x40,0x00,0x00,0x00},{0x00,0x00,0x20,0x00},{0x00,0x00,0x40,0x00},{0x00,0x00,0x00,0x00},{0x00,0x40,0x00,0x68},{0x00,0x00,0x40,0x00},{0x00,0x00,0x0a,0x54},{0x00,0x0a,0x80,0x00},{0x10,0x09,0x60,0x00},{0x00,0x00,0x00,0x50}},{{0xaa,0xaa,0x8a,0x00},{0x0a,0x60,0x0a,0xa8},{0x54,0x54,0x8a,0x41},{0x41,0x02,0x09,0x54},{0x15,0x50,0x06,0x24},{0x00,0x08,0xa4,0x28},{0x44,0x00,0x09,0xa8},{0x05,0x00,0x2a,0xa8},{0x01,0x10,0x46,0xa8},{0x04,0x00,0x00,0xa8},{0x00,0x40,0x00,0x54},{0x04,0x00,0x44,0xa8},{0x00,0x00,0x8a,0x54},{0x00,0x0a,0x8a,0x58},{0x50,0x19,0x65,0x54},{0x00,0x00,0x00,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x2a,0x6a,0xaa,0xa8},{0x55,0x94,0x89,0x55},{0x41,0x02,0x09,0x54},{0x15,0x50,0x66,0x24},{0x40,0x04,0xa4,0x68},{0x44,0x0a,0x09,0x54},{0x05,0x08,0x55,0x54},{0x11,0x14,0x56,0x54},{0x04,0x40,0x00,0x58},{0x01,0x40,0x0a,0x54},{0x04,0x0a,0x44,0xa8},{0x01,0x00,0x8a,0x54},{0x00,0x0a,0x6a,0x54},{0x50,0x19,0x65,0x54},{0x00,0x00,0x01,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x2a,0x2a,0xaa,0xa8},{0x96,0x95,0x55,0x55},{0x51,0x0a,0x05,0x54},{0x15,0x50,0x66,0xa4},{0x40,0x04,0x54,0x54},{0x44,0x05,0x09,0x54},{0x05,0x18,0x55,0x54},{0x51,0x14,0x56,0x54},{0x04,0x40,0x02,0x54},{0x01,0x40,0x8a,0x54},{0x04,0x05,0x44,0x58},{0x01,0x0a,0x85,0x54},{0x01,0x05,0x65,0x54},{0x54,0x15,0x55,0x54},{0x00,0x00,0x01,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x6a,0xaa,0xaa,0xa8},{0x96,0xa5,0x55,0x55},{0x51,0x09,0x05,0x55},{0x15,0x50,0x65,0x94},{0x44,0x14,0x54,0x54},{0x54,0x15,0x95,0x54},{0x05,0x56,0x55,0x54},{0x51,0x14,0x55,0x54},{0x14,0x40,0x82,0x54},{0x01,0x40,0x8a,0x54},{0x04,0x05,0x44,0x54},{0x01,0x0a,0x45,0x54},{0x01,0x05,0x55,0x54},{0x54,0x15,0x55,0x54},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x6a,0xaa,0xaa,0xa8},{0x9a,0xa6,0x55,0x55},{0x51,0x49,0x25,0x55},{0x15,0x50,0x55,0x54},{0x54,0x14,0x54,0x54},{0x54,0x15,0x95,0x55},{0x05,0x55,0x55,0x55},{0x55,0x14,0x55,0x55},{0x14,0x40,0x8a,0x54},{0x01,0x40,0x85,0x54},{0x04,0x15,0x44,0x54},{0x01,0x0a,0x65,0x54},{0x01,0x05,0x55,0x54},{0x54,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x6a,0xaa,0xaa,0xa8},{0x9a,0xa6,0x55,0x55},{0x51,0x55,0x25,0x55},{0x15,0x50,0x55,0x54},{0x54,0x14,0x54,0x54},{0x54,0x15,0x95,0x55},{0x05,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x14,0x40,0xa9,0x54},{0x01,0x40,0x45,0x55},{0x04,0x15,0x44,0x54},{0x01,0x05,0x65,0x54},{0x01,0x05,0x55,0x54},{0x54,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xa6,0x65,0x55},{0x51,0x55,0x15,0x55},{0x15,0x50,0x55,0x54},{0x54,0x14,0x54,0x54},{0x54,0x15,0x55,0x55},{0x05,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x14,0x40,0x69,0x55},{0x01,0x40,0x65,0x55},{0x04,0x15,0x44,0x54},{0x01,0x05,0x55,0x54},{0x01,0x05,0x55,0x55},{0x54,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xa6,0x65,0x55},{0x51,0x55,0x15,0x55},{0x15,0x52,0x55,0x54},{0x54,0x14,0x56,0x54},{0x54,0x15,0x55,0x55},{0x05,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x15,0x40,0x65,0x55},{0x01,0x50,0x65,0x55},{0x04,0x15,0x64,0x54},{0x01,0x05,0x55,0x55},{0x11,0x05,0x55,0x55},{0x54,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xa6,0x65,0x55},{0x51,0x55,0x15,0x55},{0x15,0x92,0x55,0x55},{0x55,0x14,0x56,0x54},{0x54,0x55,0x55,0x55},{0x45,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x15,0x40,0x55,0x55},{0x01,0x50,0x55,0x55},{0x05,0x15,0x64,0x54},{0x01,0x05,0x55,0x55},{0x11,0x05,0x55,0x55},{0x55,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xa6,0x65,0x55},{0x91,0x55,0x15,0x55},{0x16,0x92,0x55,0x55},{0x55,0x14,0x56,0x55},{0x54,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x15,0x48,0x55,0x55},{0x01,0x50,0x55,0x55},{0x05,0x15,0x64,0x54},{0x01,0x05,0x55,0x55},{0x11,0x05,0x55,0x55},{0x55,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0x65,0x55},{0x92,0x55,0x95,0x55},{0x6a,0x91,0x55,0x55},{0x55,0x54,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x15,0x48,0x55,0x55},{0x01,0x5a,0x55,0x55},{0x05,0x15,0x54,0x55},{0x11,0x05,0x55,0x55},{0x55,0x05,0x55,0x55},{0xa5,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0x65,0x55},{0xa6,0x55,0x55,0x55},{0x6a,0x91,0x55,0x55},{0x95,0x54,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x4a,0x55,0x55},{0x01,0x5a,0x55,0x55},{0x15,0x55,0x54,0x55},{0x11,0x05,0x55,0x55},{0x55,0x05,0x55,0x55},{0xa5,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x4a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0x65,0x55},{0xa6,0x55,0x55,0x55},{0x6a,0xa1,0x55,0x55},{0x95,0x54,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x46,0x55,0x55},{0x01,0x5a,0x55,0x55},{0x15,0x55,0x54,0x55},{0x11,0x05,0x55,0x55},{0x55,0x05,0x55,0x55},{0xa9,0x15,0x55,0x55},{0x00,0x10,0x45,0x54}},{{0xaa,0xa5,0x45,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0x65,0x55},{0xa6,0x95,0x56,0x55},{0x6a,0xa5,0x55,0x55},{0x99,0x54,0x55,0x55},{0x99,0x55,0x55,0x55},{0x5a,0x55,0x55,0x55},{0x56,0x55,0x55,0x55},{0x15,0x46,0x55,0x55},{0x01,0x55,0x55,0x55},{0x15,0x55,0x54,0x55},{0x56,0x15,0x55,0x55},{0x56,0x05,0x55,0x55},{0xa9,0x66,0x55,0x55},{0x00,0x10,0x45,0x54}},{{0xaa,0x95,0x45,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0xa6,0x55},{0xa6,0xa5,0x56,0x55},{0x6a,0xa5,0x55,0x55},{0xa9,0x54,0x55,0x55},{0x99,0x55,0x55,0x55},{0x5a,0x55,0x55,0x55},{0xa6,0x55,0x55,0x55},{0x15,0x45,0x55,0x55},{0x11,0x55,0x55,0x55},{0x19,0x55,0x54,0x55},{0x56,0x15,0x55,0x55},{0x56,0x15,0x55,0x55},{0xa9,0x66,0x95,0x55},{0x00,0x10,0x55,0x54}},{{0xaa,0x95,0x45,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0xa6,0x96},{0xa6,0xa5,0x56,0x55},{0x6a,0xa5,0x99,0x55},{0xaa,0x68,0x59,0x55},{0xa9,0x55,0x55,0x55},{0x5a,0x95,0x55,0x55},{0xa6,0x55,0x55,0x55},{0x19,0x45,0x55,0x55},{0x11,0x95,0x55,0x55},{0x19,0x55,0x54,0x55},{0x56,0x15,0x55,0x55},{0x66,0x15,0x55,0x55},{0xaa,0x66,0x9a,0x55},{0x00,0x14,0x55,0x54}},{{0x9a,0x55,0x45,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0xaa,0x96},{0xaa,0xa6,0x56,0x55},{0xaa,0xa5,0x99,0x55},{0xaa,0x68,0x59,0x55},{0xa9,0x65,0x55,0x55},{0x5a,0xa5,0x55,0x55},{0xaa,0x65,0x55,0x55},{0x29,0x85,0x55,0x55},{0x12,0x95,0x55,0x55},{0x59,0x55,0x56,0x55},{0x56,0x15,0x55,0x55},{0xa6,0x15,0x55,0x55},{0xaa,0x6a,0x9a,0x55},{0x00,0x14,0x55,0x54}},{{0x95,0x55,0x45,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x56,0x55},{0xaa,0xa5,0x99,0x55},{0xaa,0xa8,0x59,0x55},{0xa9,0x65,0x55,0x55},{0x9a,0xa5,0x55,0x55},{0xaa,0x69,0x95,0x55},{0x2a,0x85,0x55,0x55},{0x52,0x95,0x55,0x55},{0x5a,0x55,0x95,0x55},{0x56,0x15,0x55,0x55},{0xaa,0x1a,0x95,0x55},{0xaa,0x6a,0xaa,0xa9},{0x00,0x15,0x55,0x54}},{{0x55,0x55,0x45,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x56,0xa9},{0xaa,0xa5,0x99,0x55},{0xaa,0xa8,0xa9,0x55},{0xa9,0xaa,0x56,0x55},{0xaa,0xa5,0x95,0x55},{0xaa,0x69,0xa9,0x55},{0x6a,0x95,0x55,0x55},{0x52,0x95,0x55,0x55},{0x5a,0x6a,0x99,0x55},{0x66,0x15,0x55,0x55},{0xaa,0x1a,0xaa,0xa5},{0xaa,0xaa,0xaa,0xa9},{0x20,0x95,0x55,0x54}},{{0x55,0x55,0x8a,0x00},{0xaa,0xaa,0xa5,0x5a},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x6a,0xa9},{0xaa,0xa5,0x99,0x59},{0xaa,0xa8,0xa9,0x55},{0xaa,0xaa,0x66,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0x6a,0xa9,0x55},{0x6a,0x95,0x55,0x55},{0x56,0x95,0x55,0x55},{0x5a,0x6a,0x99,0x55},{0xa6,0x15,0x55,0xa9},{0xaa,0x1a,0xaa,0xa9},{0xaa,0xaa,0xaa,0xaa},{0x26,0x95,0x55,0x54}},{{0x55,0x5a,0x8a,0x00},{0xaa,0xaa,0x55,0x56},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x6a,0xa9},{0xaa,0xa5,0xaa,0x59},{0xaa,0xa9,0xa9,0x95},{0xaa,0xaa,0x66,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa9,0x55},{0x6a,0x95,0x55,0x55},{0x56,0x95,0x55,0x55},{0x6a,0xaa,0x99,0x55},{0xaa,0x1a,0x9a,0xa9},{0xaa,0x1a,0xaa,0xa9},{0xaa,0xaa,0xaa,0xaa},{0x26,0x95,0x55,0x54}},{{0x55,0x6a,0x8a,0x00},{0xaa,0x55,0x5a,0x56},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x6a,0xaa},{0xaa,0xa9,0xaa,0x59},{0xaa,0xa9,0xa9,0x95},{0xaa,0xaa,0x66,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa9,0x55},{0x6a,0x95,0x55,0x55},{0x56,0xa5,0x55,0x95},{0x6a,0xaa,0x99,0x55},{0xaa,0x1a,0xaa,0xa9},{0xaa,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x26,0x95,0x55,0x54}},{{0x55,0xaa,0x8a,0x00},{0xa9,0x55,0x5a,0x56},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x6a,0xaa},{0xaa,0xaa,0xaa,0x59},{0xaa,0xa9,0xa9,0x95},{0xaa,0xaa,0x6a,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0x6a,0x95,0x55,0x55},{0x66,0xa5,0x55,0xa9},{0xaa,0xaa,0x99,0x55},{0xaa,0x2a,0xaa,0xa9},{0xaa,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x12,0x45,0x55,0x54}},{{0x6a,0xaa,0x8a,0x00},{0xa5,0x55,0xa5,0x56},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x59},{0xaa,0xa9,0xa9,0xa9},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0x95,0x55,0xa5},{0xa6,0xa5,0x9a,0xa9},{0xaa,0xaa,0x99,0xa5},{0xaa,0x2a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x11,0x41,0x55,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x95,0x6a,0xa5,0x56},{0xaa,0x69,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xa9,0xa9,0xa9},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x95,0x96,0xa9},{0xa6,0xa5,0xaa,0xaa},{0xaa,0xaa,0x99,0xa9},{0xaa,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x11,0x40,0x00,0x54}},{{0xaa,0xaa,0x85,0x00},{0x55,0x6a,0xa5,0x56},{0xa9,0x59,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xa9,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x95,0xaa,0xaa},{0xaa,0xa5,0xaa,0xaa},{0xaa,0xaa,0xa9,0xa9},{0xaa,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x11,0x40,0x00,0x54}},{{0xaa,0xaa,0x45,0x00},{0x5a,0x6a,0x55,0x56},{0xa9,0x59,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x99,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xa9,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x01,0x40,0x02,0xa0}},{{0xaa,0xa5,0x45,0x00},{0x6a,0x55,0x55,0x56},{0x69,0x59,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xa9,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x40,0x02,0xa8}},{{0xaa,0x55,0x45,0x00},{0x6a,0x95,0x55,0x55},{0x65,0x55,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa9}},{{0xa5,0x55,0x45,0x00},{0x66,0x95,0x55,0x55},{0x65,0x55,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa9}},{{0x55,0x55,0x45,0x00},{0x55,0x95,0x55,0x55},{0x55,0x55,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa9}},{{0x55,0x55,0x45,0x00},{0x95,0x95,0x55,0x55},{0x55,0x59,0x5a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x9a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa9}},{{0x55,0x55,0x45,0x00},{0x95,0x95,0x55,0x55},{0x55,0x59,0x99,0xaa},{0xa9,0xaa,0xaa,0xaa},{0xaa,0x9a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa9}},{{0x55,0x55,0x45,0x00},{0x95,0x95,0x55,0x55},{0x55,0x59,0x55,0x69},{0x69,0x6a,0xaa,0xaa},{0xaa,0x5a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa9}},{{0x55,0x55,0x45,0x00},{0x95,0x95,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0x6a,0xaa,0xaa},{0xa9,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x0a,0xa9}},{{0x55,0x55,0x45,0x00},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0x5a,0xa9,0xaa},{0xa5,0x6a,0xaa,0xaa},{0xaa,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x20,0x0a,0xa9}},{{0x55,0x55,0x40,0x00},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x94,0x95,0xa9,0xaa},{0x95,0x6a,0x66,0xaa},{0xaa,0x6a,0xaa,0xaa},{0xaa,0x9a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x20,0x8a,0xa9}},{{0x55,0x50,0x00,0x80},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x94,0x95,0x99,0xaa},{0x55,0x46,0x66,0xaa},{0xa8,0x6a,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x01,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x20,0x8a,0xa9}},{{0x50,0x00,0x00,0x80},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x94,0x95,0x95,0x56},{0x55,0x45,0x55,0xa6},{0x65,0x96,0x96,0xaa},{0x26,0x8a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xa9,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x02,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x08,0x28,0xaa,0xa9}},{{0x00,0x00,0x00,0x60},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x45,0x55,0xa6},{0x55,0x96,0x66,0xaa},{0x2a,0x4a,0xaa,0xaa},{0xaa,0x8a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xa9,0xaa,0xaa,0xaa},{0xa8,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x88,0x2a,0xaa,0xa8}},{{0x00,0x00,0x20,0x50},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x95,0x66,0x6a},{0x12,0x86,0xaa,0xaa},{0x85,0x4a,0xaa,0xaa},{0xa8,0xaa,0xaa,0xaa},{0xa8,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xa9,0xaa,0xaa,0xaa},{0xa8,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0xa8,0xaa,0xaa,0xa8}},{{0x00,0x00,0x10,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x61,0x09,0x55,0x55},{0x45,0x55,0x55,0xaa},{0xa8,0xaa,0xaa,0xaa},{0x98,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x00,0x10,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x45,0x99,0xaa},{0x55,0x55,0x55,0x55},{0x55,0x55,0x56,0xaa},{0x94,0x6a,0xaa,0xaa},{0x56,0x65,0x55,0x55},{0xa6,0x55,0x66,0xaa},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x00,0x00,0x25,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x68,0x95,0x55,0x55},{0xa9,0x8a,0xaa,0xaa},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x00,0x05,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xa4,0x6a,0xaa,0xaa},{0x02,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa}},{{0x05,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x01,0x50,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_2_11 = { .phases = 57, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_2_11_data[0] };
+const EpdWaveformPhases* epd_wm_ed047tc2_2_ranges[7] = { &epd_wp_ed047tc2_2_5,&epd_wp_ed047tc2_2_6,&epd_wp_ed047tc2_2_7,&epd_wp_ed047tc2_2_8,&epd_wp_ed047tc2_2_9,&epd_wp_ed047tc2_2_10,&epd_wp_ed047tc2_2_11 };
+const EpdWaveformMode epd_wm_ed047tc2_2 = { .type = 2, .temp_ranges = 7, .range_data = &epd_wm_ed047tc2_2_ranges[0] };
+const uint8_t epd_wp_ed047tc2_5_5_data[46][16][4] = {{{0x00,0x00,0x00,0x00},{0x20,0x88,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x04,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x10,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x02,0x80,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x02},{0x00,0x00,0x08,0x00},{0x00,0x02,0x00,0x80},{0x04,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0xa2,0x88,0x20,0x88},{0x22,0xaa,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x04,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x20,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x02,0xa2,0x08},{0x00,0x00,0x20,0x00},{0x00,0x00,0x00,0x02},{0x00,0x44,0x08,0x00},{0xa0,0x02,0x20,0xa8},{0x08,0x62,0x88,0x80},{0x00,0x00,0x00,0x08},{0x08,0x22,0x88,0x80},{0x00,0x80,0x00,0x00}},{{0xaa,0xaa,0xa8,0xa8},{0x2a,0xaa,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x04,0x00,0x80,0x00},{0x00,0x00,0x00,0x00},{0x24,0x00,0x00,0x00},{0x00,0x00,0x20,0x00},{0x80,0x82,0xa2,0x08},{0x00,0x00,0x20,0x00},{0x00,0x00,0x00,0x02},{0x84,0x84,0x28,0x80},{0xa0,0x02,0x20,0xaa},{0xa8,0xaa,0x8a,0x80},{0x22,0x84,0x00,0x28},{0x2a,0xaa,0xaa,0xa0},{0x00,0x80,0x28,0x00}},{{0xaa,0xaa,0xa8,0xa8},{0x2a,0xaa,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x08,0x00,0x80,0x00},{0x00,0x00,0x00,0x00},{0x28,0x00,0x00,0x00},{0x00,0x40,0x20,0x00},{0x80,0xa2,0xa2,0x88},{0x00,0x00,0x20,0x02},{0x00,0x00,0x00,0x02},{0x84,0x88,0x2a,0xa2},{0xa0,0xaa,0xa8,0xa8},{0xa8,0xaa,0x8a,0x80},{0x2a,0xaa,0x08,0xa8},{0xaa,0xaa,0xaa,0xa8},{0x22,0x80,0x28,0x08}},{{0xaa,0xaa,0xa8,0xa8},{0x2a,0xaa,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x28,0x24,0x80,0x00},{0x00,0x00,0x00,0x00},{0x29,0x80,0x00,0x00},{0x00,0x40,0x20,0x00},{0x80,0xa2,0xa2,0x88},{0x00,0x02,0xa0,0x00},{0x02,0x00,0x00,0x81},{0x88,0xa8,0xaa,0xa9},{0xa2,0xaa,0xaa,0xa9},{0xaa,0xaa,0x8a,0x81},{0x2a,0xaa,0x2a,0xa8},{0xaa,0xaa,0xaa,0xa8},{0x22,0x80,0x28,0x04}},{{0xaa,0xaa,0xa8,0xa4},{0x2a,0xaa,0xaa,0x02},{0x00,0x08,0x00,0x00},{0x28,0xa8,0x80,0x00},{0x00,0x20,0x00,0x00},{0x2a,0x84,0xa0,0x08},{0x2a,0x68,0x20,0x80},{0x80,0xa2,0xa2,0xa8},{0x80,0x02,0xa0,0x01},{0x02,0x80,0x00,0xa9},{0x9a,0xa8,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x89},{0x2a,0xaa,0xaa,0xa8},{0xaa,0xaa,0xaa,0xa8},{0x22,0x8a,0x28,0x04}},{{0xaa,0xaa,0xa8,0x64},{0x2a,0xaa,0xaa,0x01},{0x00,0x88,0x02,0x00},{0x29,0xa8,0x80,0x00},{0x00,0x28,0x08,0x02},{0x2a,0x88,0xa8,0x08},{0x2a,0xaa,0xa0,0xa0},{0xaa,0xa2,0xa2,0xa9},{0x80,0x02,0xa0,0x01},{0x02,0xa0,0x00,0xa9},{0x9a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0x2a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0x2a,0x8a,0xa8,0x84}},{{0xaa,0xaa,0xa8,0x54},{0x2a,0xaa,0xaa,0x01},{0x00,0x8a,0x02,0x08},{0x2a,0xa8,0x88,0x00},{0x00,0x28,0x8a,0x01},{0x2a,0x88,0xa8,0x08},{0x2a,0xaa,0xa0,0xa0},{0xaa,0xaa,0xaa,0xa9},{0x80,0x02,0xa0,0x01},{0x0a,0xaa,0x80,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x21},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0x6a,0x8a,0xaa,0x54}},{{0xaa,0xaa,0xa8,0x54},{0x2a,0xaa,0xaa,0x01},{0x20,0x8a,0x0a,0x08},{0x2a,0xa8,0xaa,0x00},{0x00,0x2a,0x8a,0x01},{0x2a,0xaa,0xa8,0x08},{0x2a,0xaa,0xa0,0xa1},{0xaa,0xaa,0xaa,0xa5},{0x80,0x02,0xa0,0x81},{0x2a,0xaa,0xa8,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x15},{0xaa,0xaa,0xaa,0x69},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x59},{0x69,0x8a,0xaa,0x54}},{{0xaa,0xaa,0xaa,0x54},{0x2a,0xaa,0xaa,0x01},{0xa0,0x8a,0x0a,0x0a},{0xaa,0xaa,0xaa,0x02},{0x08,0x2a,0x8a,0x01},{0x2a,0xaa,0xaa,0x09},{0x2a,0xaa,0xa0,0xa1},{0xaa,0xaa,0xaa,0xa5},{0x82,0x82,0xa0,0xa1},{0x2a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x69},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x55},{0x59,0x8a,0xaa,0x54}},{{0xaa,0xaa,0xaa,0x54},{0x2a,0xaa,0xaa,0x01},{0xa2,0x8a,0x2a,0x09},{0xaa,0xaa,0xaa,0x09},{0x28,0x2a,0x8a,0x01},{0x2a,0xaa,0xaa,0x89},{0x2a,0xaa,0xa8,0xa1},{0xaa,0xaa,0xaa,0x25},{0xaa,0xaa,0xa0,0xa9},{0x2a,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0x59,0xaa,0xaa,0x54}},{{0xaa,0xaa,0xaa,0x58},{0x2a,0xaa,0xa5,0x05},{0xaa,0x8a,0xaa,0x09},{0xaa,0xaa,0xaa,0x09},{0x2a,0xaa,0xaa,0x01},{0x2a,0xaa,0xaa,0x85},{0xaa,0xaa,0xa8,0x01},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa8,0xa9},{0xaa,0xaa,0xaa,0x01},{0xaa,0xaa,0xa6,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0x59,0xaa,0xaa,0x54}},{{0xaa,0xaa,0x96,0xa8},{0xaa,0xaa,0x55,0x09},{0xaa,0x8a,0xaa,0x09},{0xaa,0xaa,0xaa,0x09},{0x2a,0xaa,0xaa,0x21},{0xaa,0xaa,0xaa,0x85},{0xaa,0xaa,0xa8,0x51},{0xaa,0xaa,0xa9,0x55},{0xaa,0xaa,0x98,0xa9},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa4,0x55},{0xaa,0xa8,0x8a,0x55},{0xaa,0xaa,0xa5,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa5,0x55},{0x54,0xaa,0xaa,0x54}},{{0xaa,0xa5,0x96,0xa8},{0xaa,0xa5,0x55,0xa9},{0xaa,0xaa,0xaa,0x09},{0xaa,0xaa,0xaa,0x09},{0x2a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x85},{0xaa,0xaa,0xa8,0x51},{0xaa,0xa9,0x59,0x55},{0xaa,0xaa,0x9a,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0x95,0x55},{0xaa,0xa9,0x90,0x55},{0xaa,0xa9,0x65,0x55},{0xaa,0xaa,0xaa,0x55},{0xa6,0x99,0x55,0x55},{0x94,0xaa,0xa6,0x50}},{{0xaa,0xa5,0x56,0xa8},{0xaa,0x55,0x55,0xa9},{0xaa,0xaa,0xaa,0x05},{0xaa,0xaa,0xaa,0xa9},{0x2a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0x98,0x51},{0xaa,0xa9,0x59,0x55},{0xaa,0xaa,0x9a,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0x95,0x55},{0xaa,0xa9,0x15,0x55},{0x92,0x95,0x65,0x55},{0xaa,0xaa,0xa5,0x55},{0x95,0x95,0x55,0x55},{0x94,0xaa,0x96,0x00}},{{0xa9,0x55,0x56,0xa8},{0xa9,0x55,0x55,0xa9},{0xaa,0xaa,0xaa,0x05},{0xaa,0xaa,0xaa,0xa5},{0x2a,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0x98,0x51},{0xaa,0xa9,0x59,0x55},{0xaa,0xa9,0x5a,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0x55,0x55},{0x9a,0x85,0x55,0x55},{0x94,0x95,0x55,0x55},{0x99,0xa9,0x95,0x55},{0x95,0x55,0x55,0x55},{0x94,0xaa,0x96,0x00}},{{0x95,0x55,0x56,0xa8},{0xa5,0x55,0x5a,0xa5},{0xaa,0xa6,0xaa,0x05},{0xaa,0xaa,0x6a,0xa5},{0x2a,0xaa,0xaa,0x95},{0xaa,0xaa,0x96,0x65},{0xaa,0xaa,0x1a,0x59},{0xaa,0x59,0x51,0x55},{0xaa,0xa9,0x5a,0x55},{0xaa,0xaa,0xaa,0x55},{0xa8,0x55,0x55,0x55},{0x98,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x94,0x6a,0x96,0x00}},{{0x95,0x55,0x55,0x94},{0x95,0x55,0xaa,0x95},{0xaa,0xa6,0xaa,0x05},{0xaa,0xaa,0x6a,0x95},{0x2a,0xaa,0xa5,0x55},{0x9a,0x6a,0x55,0x55},{0xaa,0x85,0x5a,0x55},{0xaa,0x59,0x55,0x55},{0xaa,0xa9,0x5a,0x55},{0xa8,0xaa,0x00,0x55},{0xa8,0x55,0x55,0x55},{0x91,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x90,0x69,0x95,0x00}},{{0x55,0x55,0x55,0x54},{0x96,0x5a,0xaa,0x15},{0xaa,0xa6,0xa9,0x05},{0xaa,0x9a,0x65,0x55},{0x2a,0x96,0x65,0x55},{0x96,0x65,0x55,0x55},{0xa1,0x95,0x56,0x55},{0x28,0x55,0x55,0x55},{0xaa,0xa9,0x52,0x55},{0xa9,0x01,0x05,0x55},{0x25,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa0,0x65,0x55,0x00}},{{0x55,0x55,0x69,0x55},{0x9a,0xaa,0xaa,0x55},{0xaa,0xa6,0xa5,0x85},{0x9a,0x56,0x55,0x55},{0xaa,0x95,0x65,0x55},{0x95,0x55,0x55,0x55},{0x95,0x95,0x56,0x55},{0x15,0x55,0x55,0x55},{0xa8,0xa1,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x25,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa0,0x65,0x55,0x00}},{{0x55,0x5a,0xa9,0x55},{0x9a,0xaa,0xaa,0x55},{0xaa,0xa5,0xa5,0x85},{0x92,0x55,0x55,0x55},{0xaa,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x15,0x56,0x55},{0x15,0x55,0x55,0x55},{0xa8,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa0,0x65,0x55,0x00}},{{0x56,0xaa,0xa9,0x55},{0x99,0xaa,0xa1,0x55},{0xaa,0x65,0x95,0x45},{0x95,0x55,0x55,0x55},{0xa6,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x54,0x55},{0x55,0x55,0x55,0x55},{0x05,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0xa0,0x55,0x55,0x00}},{{0x6a,0xaa,0xaa,0x55},{0x95,0xaa,0x15,0x55},{0x9a,0x65,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0xa0,0x55,0x55,0x00}},{{0xaa,0xaa,0xaa,0x55},{0x95,0xa5,0x55,0x55},{0x99,0x65,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0xa8,0x55,0x55,0x00}},{{0xaa,0xaa,0xaa,0x55},{0x95,0x55,0x55,0x55},{0x15,0x65,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0x55,0x55,0x00}},{{0xaa,0xaa,0xaa,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0x55,0x41,0x00}},{{0xaa,0xaa,0x56,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x65,0x55,0x55,0x56},{0x55,0x55,0x55,0x55},{0x69,0x55,0x55,0x55},{0xaa,0x55,0x41,0x00}},{{0xa9,0x55,0x55,0x41},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x68,0x55,0x55,0x96},{0x65,0x55,0x55,0x56},{0x6a,0x65,0x55,0xa6},{0xaa,0x94,0x49,0x00}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x6a,0x2a,0x8a,0xaa},{0x6a,0x55,0x55,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x15,0x55,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x51,0x56},{0x65,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x65,0x54},{0x55,0x55,0x55,0x55},{0x55,0x55,0x40,0xaa},{0x55,0x54,0x45,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x56,0xa6,0x50},{0x55,0x56,0x95,0x56},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x55,0x95,0x55,0x55},{0x55,0x55,0x95,0x04},{0x45,0x05,0x55,0xaa},{0x55,0x55,0x55,0xaa},{0x55,0x55,0x55,0x56},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x45,0x48,0x58,0x50},{0x55,0x55,0x41,0x06},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x54,0x55,0x55,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x15},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x54},{0x41,0x04,0x44,0x12},{0x6a,0x2a,0x21,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x65,0x55,0x55,0x69},{0x55,0x55,0x55,0x54},{0x45,0x05,0x15,0x16},{0x41,0x41,0x15,0x02},{0x6a,0x00,0xa0,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x65,0x55,0x55,0x66},{0x55,0x59,0x59,0xa6},{0x60,0x00,0x00,0x0a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x95},{0x6a,0x59,0x51,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x50,0x55,0x55,0x52},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x6a,0x55,0x55,0x02},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xa5,0x96,0xa6,0x5a},{0x80,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x56},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_5_5 = { .phases = 46, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_5_5_data[0] };
+const uint8_t epd_wp_ed047tc2_5_6_data[43][16][4] = {{{0x02,0xaa,0x00,0x00},{0x20,0x22,0xa8,0x80},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x08},{0x00,0x80,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x20,0x00,0x22,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x20,0x22,0xa8,0x20},{0x00,0x00,0x00,0x00},{0x20,0x02,0x08,0x80},{0x00,0x80,0x00,0x00},{0x20,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x2a,0xaa,0x00,0x00},{0x20,0xaa,0xaa,0x80},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x28},{0x00,0x80,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x20,0x22,0xaa,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x22,0x2a,0xaa,0x20},{0x00,0x00,0x00,0x00},{0x22,0x02,0x08,0x80},{0x00,0xa0,0x20,0x2a},{0x28,0x22,0xa8,0xa8},{0x28,0x00,0x00,0x00}},{{0xaa,0xaa,0x20,0x00},{0x20,0xaa,0xaa,0x80},{0x00,0x00,0x00,0x02},{0x00,0x00,0x00,0x28},{0x20,0x80,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x22,0x2a,0xaa,0x00},{0x00,0x00,0x00,0x02},{0x00,0x00,0x00,0x00},{0x22,0x2a,0xaa,0xa0},{0x00,0x00,0x00,0x00},{0x22,0x02,0x08,0x80},{0x00,0xa8,0x22,0x2a},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x80}},{{0xaa,0xaa,0x20,0x00},{0x20,0xaa,0xaa,0x80},{0x00,0x00,0x00,0x02},{0x00,0x00,0x00,0x2a},{0x20,0x80,0x00,0x00},{0x00,0x00,0x00,0x20},{0x00,0x00,0x00,0x00},{0x2a,0x2a,0xaa,0x80},{0x00,0x00,0x00,0x02},{0x00,0x00,0x00,0x00},{0x22,0x2a,0xaa,0xa0},{0x00,0x00,0x00,0x00},{0xa2,0x82,0x08,0x80},{0x08,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x40}},{{0xaa,0xaa,0x20,0x00},{0x20,0xaa,0xaa,0x80},{0x80,0x00,0x00,0x02},{0x00,0x88,0x00,0x2a},{0x20,0x80,0x00,0x00},{0x00,0x00,0x00,0x20},{0x20,0x00,0x00,0x02},{0xaa,0x2a,0xaa,0x80},{0x80,0x00,0x00,0x02},{0x00,0x00,0x00,0x00},{0x2a,0x2a,0xaa,0xa8},{0x00,0x00,0x00,0x00},{0xaa,0x82,0x88,0xa0},{0x8a,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0x94},{0x24,0x00,0x28,0x40}},{{0xaa,0xaa,0x20,0x00},{0x20,0xaa,0xaa,0x80},{0x80,0x00,0x00,0x02},{0x20,0x88,0x00,0x2a},{0x20,0x80,0x00,0x00},{0x00,0x00,0x00,0x28},{0x20,0x80,0x00,0x02},{0xaa,0x2a,0xaa,0x80},{0x80,0x00,0x00,0x02},{0x00,0x00,0x00,0x00},{0xaa,0x2a,0xaa,0xa8},{0x08,0x00,0x00,0x00},{0xaa,0x8a,0x8a,0xa0},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0x24,0x00,0x28,0x40}},{{0xaa,0xaa,0xa0,0x00},{0x20,0xaa,0xaa,0x80},{0x80,0x00,0x00,0x22},{0x20,0x88,0x00,0x2a},{0x22,0x80,0x00,0x00},{0x00,0x00,0x00,0x28},{0xa0,0xa0,0xa8,0x02},{0xaa,0x2a,0xaa,0x82},{0x80,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0x2a,0xaa,0xa8},{0x08,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa5},{0xa6,0xaa,0xaa,0x95},{0x24,0x00,0x26,0x40}},{{0xaa,0xaa,0xa0,0x00},{0x20,0xaa,0xaa,0x42},{0x80,0x00,0x00,0x22},{0x20,0x88,0x00,0x2a},{0x2a,0x80,0x00,0x02},{0x20,0x80,0x20,0x28},{0xa2,0xa8,0xaa,0x02},{0xaa,0x2a,0xaa,0x82},{0x80,0x00,0x00,0x01},{0x20,0x00,0x00,0x20},{0xaa,0xaa,0xaa,0xa8},{0x08,0x00,0x00,0x20},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x95},{0xa6,0xaa,0xa6,0x55},{0x56,0x02,0x95,0x54}},{{0xaa,0xaa,0xa0,0x04},{0x20,0xaa,0xa5,0x4a},{0x80,0x00,0x00,0x29},{0xa0,0x88,0x00,0x26},{0x2a,0x80,0x00,0x02},{0x20,0x80,0x20,0x28},{0xaa,0xaa,0xaa,0x01},{0xaa,0x2a,0xaa,0x82},{0x80,0x00,0x00,0x01},{0x20,0x80,0x00,0xa2},{0xaa,0xaa,0xaa,0x98},{0x88,0x80,0x00,0xa2},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0xa5,0xa9,0x65,0x55},{0x56,0x0a,0x95,0x54}},{{0xaa,0xa9,0xa0,0x24},{0x20,0xa9,0x55,0x4a},{0x80,0x00,0x00,0x29},{0xa0,0x88,0x00,0x25},{0x2a,0x80,0x00,0x02},{0x20,0xa0,0x28,0x28},{0xaa,0xaa,0xaa,0x01},{0xaa,0x2a,0xaa,0x80},{0xa0,0x00,0x00,0x01},{0x20,0xa2,0xa8,0xa9},{0xaa,0xaa,0xaa,0x94},{0x88,0xa2,0xa8,0xaa},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x95},{0xa5,0x95,0x55,0x55},{0x56,0x0a,0x95,0x54}},{{0xaa,0x95,0xa8,0xa4},{0x20,0xa9,0x55,0x45},{0xa0,0x00,0x00,0x29},{0xa2,0x88,0x00,0x15},{0x2a,0x80,0x00,0x01},{0x20,0xa8,0x28,0x14},{0xaa,0xaa,0xaa,0x81},{0xaa,0xaa,0xaa,0x81},{0xa0,0x00,0x00,0x01},{0xa2,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x94},{0x88,0xaa,0xaa,0xa9},{0xaa,0xaa,0xa6,0x55},{0xaa,0xaa,0xaa,0x95},{0x95,0x55,0x55,0x55},{0x56,0x89,0x55,0x54}},{{0xaa,0x95,0x98,0x94},{0xa0,0xa9,0x55,0x45},{0xa0,0x00,0x00,0x25},{0xaa,0x88,0x00,0x15},{0xaa,0x80,0x00,0x21},{0x20,0xaa,0xa8,0x94},{0xaa,0xaa,0xaa,0x81},{0xaa,0xaa,0xaa,0xa1},{0xa0,0x22,0xa0,0x21},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x94},{0xa8,0xaa,0xaa,0xa9},{0xaa,0xa9,0xa6,0x55},{0xaa,0xaa,0xa9,0x55},{0x95,0x55,0x55,0x55},{0x55,0xa5,0x55,0x14}},{{0xa9,0x55,0x9a,0x98},{0xa8,0xa9,0x55,0x45},{0xa0,0x00,0x00,0x15},{0xaa,0x88,0x00,0x15},{0xaa,0x80,0x00,0x21},{0xa2,0xaa,0xaa,0x94},{0xaa,0xaa,0xaa,0x89},{0xaa,0xaa,0xa9,0xa1},{0xa2,0x2a,0xa0,0x21},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa5,0x56},{0xaa,0xaa,0xaa,0x95},{0xaa,0xa9,0xa6,0x55},{0xaa,0xaa,0x95,0x55},{0x95,0x55,0x55,0x55},{0x55,0xa5,0x55,0x14}},{{0xa5,0x55,0x5a,0xa8},{0xa8,0x95,0x55,0x45},{0xa0,0x82,0x20,0x15},{0xaa,0x88,0x00,0x15},{0xaa,0x80,0x20,0x21},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0x85,0x69},{0xaa,0x2a,0xa8,0x29},{0xaa,0xaa,0xaa,0x95},{0xaa,0xa9,0x55,0x55},{0xaa,0xaa,0xaa,0x95},{0xa9,0xa9,0xa5,0x55},{0xa6,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0xa5,0x41,0x14}},{{0x95,0x55,0x6a,0x68},{0xa8,0x55,0x55,0x85},{0xa8,0xaa,0xa0,0x15},{0xaa,0x88,0x00,0x15},{0xaa,0x80,0x20,0x21},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xa9,0x55,0x69},{0xaa,0x2a,0xaa,0x15},{0xaa,0xaa,0xaa,0x55},{0xaa,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x95},{0x99,0xa9,0x65,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x65,0x40,0x14}},{{0x95,0x55,0x66,0x58},{0xa8,0x55,0x5a,0x85},{0xa8,0xaa,0xa0,0x15},{0xaa,0xa8,0xa0,0x15},{0xaa,0x62,0xa8,0x19},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa5,0x95},{0xaa,0x95,0x55,0x55},{0xaa,0x2a,0xaa,0x95},{0xaa,0xaa,0xaa,0x55},{0xa9,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x55},{0x95,0x65,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x91,0x55,0x40,0x14}},{{0x95,0x56,0xa5,0x94},{0xa8,0x56,0xaa,0x85},{0xa8,0xaa,0xa0,0x95},{0xaa,0xa8,0xa0,0x15},{0xaa,0x6a,0xaa,0x15},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0x55,0x55},{0x89,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa5,0x55},{0x99,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x55},{0x95,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x50,0x00,0x14}},{{0x55,0x6a,0x89,0x94},{0x98,0x6a,0xaa,0x85},{0xaa,0xaa,0xa0,0x95},{0xaa,0xa6,0xa0,0x15},{0x8a,0x6a,0xaa,0x95},{0xaa,0xaa,0x96,0x55},{0xaa,0x55,0x55,0x55},{0x95,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xa9,0x55,0x55},{0x95,0x95,0x55,0x55},{0xa6,0xaa,0xa5,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x89,0x50,0x00,0x14}},{{0x56,0xaa,0x9a,0x14},{0x98,0xaa,0xaa,0x85},{0xaa,0xaa,0xaa,0x95},{0xaa,0x66,0xa2,0x15},{0x99,0x6a,0xaa,0x95},{0xaa,0x6a,0x95,0x55},{0x99,0x55,0x55,0x55},{0x95,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0x55,0x55,0x55},{0x95,0x95,0x55,0x55},{0xa6,0xa9,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0xa9,0x10,0x00,0x04}},{{0x5a,0xaa,0x12,0x54},{0xaa,0xaa,0xaa,0x81},{0xaa,0xaa,0xaa,0x95},{0xaa,0x66,0xaa,0x15},{0x95,0x6a,0xaa,0x95},{0xaa,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x95,0x55,0x55},{0xaa,0xa9,0x55,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa6,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x9a,0x55,0x55,0x55},{0xa9,0x10,0x00,0x04}},{{0x6a,0xaa,0x55,0x54},{0xaa,0xaa,0xaa,0x81},{0xaa,0xaa,0xaa,0x95},{0x9a,0x66,0xaa,0x15},{0x95,0x6a,0xaa,0x95},{0x9a,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x95,0x55,0x55},{0xaa,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa6,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x8a,0x55,0x55,0x55},{0xaa,0x00,0x00,0x00}},{{0x6a,0xaa,0x55,0x55},{0x9a,0x96,0xaa,0x41},{0x6a,0xaa,0xaa,0x55},{0x99,0x66,0xaa,0x95},{0x95,0x6a,0x95,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x59,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0x99,0x65},{0xaa,0x00,0x00,0x00}},{{0xaa,0xaa,0x55,0x55},{0x96,0x56,0xa5,0x51},{0x6a,0x69,0x8a,0x55},{0x95,0x66,0xaa,0x95},{0x95,0x69,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x00,0x00,0x00}},{{0xaa,0xa8,0x55,0x55},{0x96,0x55,0x55,0x55},{0x6a,0x65,0x58,0x55},{0x95,0x66,0x59,0x95},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x00,0x00,0x00}},{{0xa9,0x45,0x55,0x45},{0x96,0x55,0x55,0x55},{0x56,0x95,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x59,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x00,0x00,0x00}},{{0xa5,0x55,0x55,0x41},{0x96,0x55,0x55,0x55},{0x56,0x95,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x5a,0x55,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x95,0x55,0x55,0x41},{0x56,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x45,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0x56,0x59,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x00,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x00,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x51},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x2a},{0x55,0x55,0x55,0x61},{0x55,0x55,0x55,0x54},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x00,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x42},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x51},{0x59,0x55,0x55,0x2a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x00,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x51},{0x55,0x55,0x55,0x56},{0x55,0x15,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x55},{0x6a,0x6a,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0x6a,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x00,0x15},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x41},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0x6a,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x10,0x55},{0x55,0x55,0x55,0x5a},{0x55,0x55,0x55,0x40},{0x55,0x55,0x55,0x42},{0x6a,0x95,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x51,0x55,0x55,0x59},{0x15,0x55,0x55,0x82},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x51,0x55,0x55,0x55},{0x99,0x50,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0xaa},{0x40,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x51,0x55,0x55,0x54},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x51,0x55,0x55,0x6a},{0x00,0x00,0x00,0x00},{0xaa,0x99,0x55,0x6a},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_5_6 = { .phases = 43, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_5_6_data[0] };
+const uint8_t epd_wp_ed047tc2_5_7_data[40][16][4] = {{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x04,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x0a,0x08,0x80},{0x00,0x00,0x00,0x08},{0x00,0x80,0x00,0x20},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0xa0,0x80,0x00,0x00},{0x08,0x80,0x20,0x00},{0x00,0x12,0x22,0x00},{0x00,0x00,0x00,0x00},{0x1a,0x20,0x00,0x00},{0x01,0x80,0x00,0x00},{0x88,0x00,0x00,0x00},{0x00,0x10,0x80,0x00},{0x20,0x0a,0x88,0x82},{0x80,0x00,0x05,0x08},{0x0a,0xa0,0x00,0x20},{0x20,0x00,0x00,0x20},{0x00,0x80,0x00,0x08},{0x80,0x28,0x08,0x80},{0x2a,0x80,0xa0,0x28},{0x20,0x00,0x80,0x04}},{{0xa8,0xa0,0x00,0x00},{0x08,0x80,0x20,0x00},{0x11,0x22,0xa2,0x00},{0x04,0x04,0x00,0x00},{0x2a,0xa0,0x20,0x00},{0x22,0xa0,0x00,0x00},{0x98,0x12,0x00,0x0a},{0x18,0xa0,0x80,0x00},{0x28,0x0a,0x8a,0x82},{0x88,0x88,0x09,0x28},{0x0a,0xa2,0x20,0x20},{0x20,0x00,0x02,0xa0},{0x00,0xa4,0x00,0x08},{0xa8,0xa8,0xa8,0xa0},{0xaa,0xaa,0xaa,0xa8},{0x20,0x02,0x88,0x84}},{{0xa8,0xa0,0x00,0x00},{0x08,0x80,0x20,0x00},{0x22,0x22,0xa2,0x28},{0x04,0x08,0x00,0x00},{0x2a,0xa0,0x28,0x00},{0x2a,0xa0,0x20,0x0a},{0x98,0x56,0x02,0x8a},{0xa8,0xa4,0x80,0x00},{0x28,0x0a,0xaa,0x82},{0x88,0xaa,0x0a,0x28},{0x2a,0xaa,0xa8,0x22},{0x20,0x40,0xa2,0xa2},{0x12,0xa8,0xa0,0x28},{0xa8,0xaa,0xaa,0xa0},{0xaa,0xaa,0xaa,0xa8},{0x28,0x82,0xa8,0x84}},{{0xa8,0xa0,0x00,0x00},{0x08,0xa0,0x20,0x00},{0x26,0x22,0xa2,0x28},{0x05,0x08,0x00,0x00},{0x2a,0xa0,0x28,0x00},{0x2a,0xa0,0x28,0x0a},{0x99,0xaa,0x82,0x8a},{0xaa,0xa8,0xa2,0x00},{0x28,0x8a,0xaa,0x82},{0xaa,0xaa,0xaa,0x28},{0x2a,0xaa,0xa8,0xa2},{0x20,0xa6,0xa2,0xa2},{0x92,0xaa,0xa8,0x28},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x98},{0x58,0x8a,0xa8,0x94}},{{0xa8,0xa0,0x00,0x00},{0x0a,0xa0,0x20,0x00},{0x2a,0x66,0xa2,0x28},{0x09,0x0a,0x00,0x00},{0x2a,0xa2,0x28,0x00},{0x2a,0xa0,0xa8,0x0a},{0xa9,0xaa,0x82,0x8a},{0xaa,0xaa,0xaa,0x00},{0x28,0x8a,0xaa,0x82},{0xaa,0xaa,0xaa,0xa8},{0x2a,0xaa,0xaa,0xa2},{0x25,0xa6,0xaa,0xa2},{0xaa,0xaa,0xa8,0x2a},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0x58,0x8a,0xaa,0x94}},{{0xa8,0xa0,0x00,0x00},{0x0a,0xaa,0x20,0x80},{0x2a,0xa6,0xa2,0x28},{0x19,0x0a,0x00,0x00},{0x2a,0xa2,0xa8,0x00},{0x2a,0xaa,0xa8,0x89},{0xaa,0xaa,0x8a,0x89},{0xaa,0xaa,0xaa,0x02},{0x2a,0x8a,0xaa,0xa1},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0xaa,0x81},{0x2a,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0x58,0xaa,0xa9,0x94}},{{0xa8,0xa0,0x00,0x00},{0x0a,0xaa,0xa0,0x82},{0xaa,0xaa,0xa2,0x28},{0x9a,0x2a,0x00,0x00},{0x2a,0xaa,0xa8,0x04},{0x2a,0xaa,0xa8,0xa9},{0xaa,0xaa,0x8a,0x89},{0xaa,0xaa,0xaa,0x82},{0xaa,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0xa4},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0x58,0xaa,0xa9,0x94}},{{0xa8,0xa0,0x00,0x00},{0x0a,0xaa,0xa8,0x82},{0xaa,0xaa,0xa2,0x28},{0x9a,0x2a,0x00,0x00},{0xaa,0xaa,0xa8,0x88},{0x2a,0xaa,0xaa,0xa5},{0xaa,0xaa,0x8a,0x85},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0x96},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa9,0x95},{0x5a,0xaa,0xa9,0x54}},{{0xa8,0xa0,0x00,0x14},{0x0a,0xaa,0xa8,0x82},{0xaa,0xaa,0xaa,0x28},{0xaa,0x2a,0x00,0x00},{0xaa,0xaa,0xaa,0x99},{0x2a,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x85},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0x55,0x55},{0x5a,0xaa,0x69,0x54}},{{0xa8,0x50,0x00,0x14},{0x8a,0xaa,0x9a,0x81},{0xaa,0xaa,0xaa,0x16},{0xaa,0x2a,0x08,0x00},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x85},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa5,0x55},{0xa9,0xa5,0x55,0x55},{0x9a,0xaa,0x65,0x50}},{{0x98,0x50,0x00,0x14},{0x8a,0xaa,0x9a,0x81},{0xaa,0xaa,0xaa,0x15},{0xaa,0x2a,0x08,0x00},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x85},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x59},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xa9,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xa6,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0xa9,0x64,0x50}},{{0x98,0x50,0x00,0x28},{0x8a,0x6a,0x9a,0x41},{0xaa,0xaa,0xa9,0x15},{0xaa,0xaa,0x18,0x80},{0xaa,0xaa,0x96,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xa9,0x65},{0xaa,0xaa,0x69,0x95},{0xaa,0xaa,0xa5,0x59},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0x80,0x55},{0xaa,0xaa,0xa9,0x55},{0xaa,0xaa,0x55,0x55},{0xaa,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0xa9,0x54,0x50}},{{0x94,0x50,0x00,0x28},{0xa6,0x55,0x55,0x61},{0xaa,0xaa,0xa9,0x15},{0xaa,0xaa,0x28,0x80},{0xa9,0x9a,0x96,0x95},{0xaa,0xaa,0x96,0x55},{0xaa,0xa9,0x69,0x65},{0xaa,0xaa,0x69,0x95},{0xaa,0xa5,0x65,0x55},{0xaa,0xa6,0x25,0x55},{0xaa,0x01,0x55,0x55},{0xaa,0xaa,0x59,0x55},{0xaa,0x55,0x55,0x55},{0x9a,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa9,0xa5,0x54,0x40}},{{0x94,0xa0,0x00,0x28},{0xa5,0x55,0x55,0x51},{0xaa,0xa9,0x59,0x15},{0xaa,0xaa,0x68,0xa1},{0xa5,0x59,0x55,0x55},{0xaa,0x5a,0x55,0x55},{0xaa,0xa9,0x65,0x55},{0xaa,0xaa,0x55,0x55},{0xaa,0xa5,0x55,0x55},{0xaa,0xa5,0x15,0x55},{0xa9,0x55,0x55,0x55},{0xaa,0xa9,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa9,0x65,0x54,0x40}},{{0x64,0xa0,0x00,0x14},{0xa5,0x55,0x55,0x59},{0xaa,0xa9,0x59,0x15},{0xaa,0xaa,0x68,0x95},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0xaa,0xa5,0x65,0x55},{0xaa,0x55,0x55,0x55},{0xaa,0xa5,0x55,0x55},{0xaa,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x9a,0x99,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa8,0x65,0x54,0x40}},{{0x64,0xa0,0x00,0x14},{0xa5,0x55,0x65,0x55},{0x8a,0x99,0x59,0x15},{0xaa,0xa5,0xaa,0x95},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa6,0xa5,0x65,0x55},{0xa5,0x55,0x55,0x55},{0x92,0x25,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x9a,0x99,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa4,0x55,0x54,0x40}},{{0x64,0xa0,0x00,0x14},{0xa5,0x55,0x65,0x95},{0x89,0x99,0x55,0x15},{0xaa,0xa5,0xaa,0x95},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x26,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x96,0x25,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x9a,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa4,0x55,0x54,0x40}},{{0x64,0x50,0x80,0x15},{0xa5,0x95,0x65,0x95},{0x99,0x95,0x55,0x15},{0xaa,0x95,0xa6,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x26,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa4,0x55,0x14,0x00}},{{0x58,0x5a,0x80,0x15},{0xa9,0xaa,0xaa,0x95},{0x15,0x55,0x55,0x15},{0xaa,0x95,0xa6,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x25,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa4,0x55,0x14,0x00}},{{0x98,0x5a,0x80,0x15},{0xaa,0xaa,0xaa,0x95},{0x15,0x55,0x55,0x15},{0x2a,0x95,0xa5,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0xa6,0x54,0x14,0x00}},{{0x98,0x5a,0x48,0x95},{0xaa,0xaa,0xaa,0x95},{0x15,0x55,0x55,0x15},{0x25,0x95,0x95,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x2a,0x55,0x55,0x65},{0xa6,0x54,0x10,0x00}},{{0x9a,0x55,0x68,0x55},{0x6a,0xaa,0x9a,0x55},{0x15,0x55,0x55,0x15},{0x25,0x55,0x95,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x25,0x55,0x55,0x66},{0x2a,0xaa,0xaa,0x6a},{0xa6,0x10,0x00,0x00}},{{0x9a,0x55,0x64,0x41},{0x5a,0xaa,0x9a,0x55},{0x15,0x55,0x55,0x15},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0x6a,0xaa,0xaa},{0x2a,0xaa,0xaa,0xaa},{0xa6,0x10,0x08,0x00}},{{0x9a,0x55,0x94,0x81},{0x5a,0x6a,0x9a,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x46,0x0a,0x9a,0x81},{0xa6,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x45,0x0a,0xa9,0x41},{0xa5,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x15,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x44,0x85,0x56},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x45,0x0a,0x65,0x41},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0x55,0x55,0x69},{0x55,0x55,0x55,0x69},{0x55,0x56,0x11,0x59},{0x55,0x55,0x55,0x61},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x66},{0x65,0x44,0x42,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x46,0x05,0x55,0x41},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x51},{0x55,0xaa,0xaa,0x54},{0x45,0x55,0x55,0x56},{0x59,0x59,0x11,0x56},{0x55,0x55,0x14,0x52},{0x55,0x55,0x55,0x55},{0x55,0x51,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x46,0x05,0x55,0x41},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x61},{0x40,0x55,0x55,0x80},{0x6a,0xaa,0xaa,0xaa},{0x55,0x04,0x02,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x59,0x55,0x65,0x46},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x45,0x05,0x55,0x55},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x51},{0x40,0x00,0x00,0x42},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x64,0x0a,0x9a,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x45,0x05,0x55,0x55},{0x55,0x55,0x55,0x59},{0x65,0x55,0x55,0x55},{0x55,0x64,0x55,0x41},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x5a},{0x6a,0x2a,0x82,0x2a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x45},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x2a,0xaa,0xaa,0xaa},{0x40,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x44},{0x40,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x40,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x40},{0x55,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x42},{0x95,0x55,0x51,0x42},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x50,0x50,0x02},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_5_7 = { .phases = 40, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_5_7_data[0] };
+const uint8_t epd_wp_ed047tc2_5_8_data[38][16][4] = {{{0x00,0x00,0x00,0x00},{0x08,0x00,0x8a,0x02},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x80,0x08,0x82},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x02},{0x00,0x00,0x00,0x08},{0x00,0x00,0x00,0x00},{0x02,0x80,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0xa8,0x00,0x0a,0x00},{0x08,0x00,0x8a,0x02},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0xa0,0x08,0x81},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x82},{0x20,0x00,0x00,0x08},{0x20,0x00,0x00,0x00},{0x02,0x82,0x00,0x20},{0x80,0x00,0x00,0x00},{0xaa,0x08,0xaa,0x08},{0x00,0x00,0x08,0x00}},{{0xa8,0x00,0x0a,0x00},{0x08,0x20,0x8a,0x02},{0x00,0x20,0x00,0x20},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0xa0,0x08,0x81},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x82},{0xa0,0x00,0x00,0x0a},{0x20,0x00,0x00,0x00},{0x02,0x82,0x00,0x2a},{0x80,0x00,0x00,0x01},{0xaa,0xaa,0xaa,0xa8},{0x00,0x20,0x08,0x00}},{{0xa8,0x00,0x0a,0x00},{0x08,0xa0,0x8a,0x02},{0x00,0x20,0x00,0x20},{0x80,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0xa0,0x08,0x81},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x81},{0xa0,0x00,0x00,0x05},{0x20,0x00,0x00,0x01},{0x02,0x82,0x00,0xa9},{0x80,0x00,0x00,0x01},{0xaa,0xaa,0xaa,0xa4},{0x12,0x28,0xaa,0x00}},{{0xa8,0x00,0x0a,0x00},{0x88,0xa0,0x8a,0x02},{0x00,0x20,0x00,0x20},{0x80,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x82,0xa8,0x08,0x81},{0x08,0x00,0x02,0x00},{0x00,0x00,0x00,0x08},{0x00,0x02,0x0a,0x80},{0x88,0x00,0x02,0x81},{0xa0,0x00,0x00,0x25},{0x28,0x00,0x00,0x21},{0x22,0x82,0x00,0xa5},{0x80,0x00,0x00,0x21},{0xaa,0xaa,0xaa,0xa4},{0x19,0x2a,0xaa,0x80}},{{0xa8,0x00,0x0a,0x00},{0x8a,0xa8,0x8a,0x0a},{0x00,0x20,0x00,0x28},{0x80,0x00,0x00,0x00},{0x20,0x00,0x00,0x0a},{0x82,0xaa,0x08,0x81},{0x08,0x20,0x02,0x02},{0x08,0x00,0x00,0x08},{0x28,0x02,0x0a,0x80},{0x88,0x08,0x0a,0x81},{0xa0,0x00,0x08,0x25},{0x2a,0x00,0x0a,0x21},{0x22,0xa2,0x00,0x95},{0x80,0x02,0x00,0xa1},{0xaa,0xaa,0xaa,0xa5},{0x19,0xaa,0xaa,0x80}},{{0xa8,0x00,0x05,0x00},{0x8a,0xaa,0x8a,0x0a},{0x02,0x20,0x00,0x28},{0x88,0x00,0x00,0x02},{0x20,0x00,0x00,0x09},{0xa2,0xaa,0xa8,0x85},{0x8a,0x28,0x0a,0x09},{0x88,0x00,0x00,0x08},{0x28,0x02,0x8a,0x80},{0x88,0x0a,0x0a,0x81},{0xa8,0x02,0x08,0x25},{0xaa,0xaa,0x0a,0x21},{0x2a,0xaa,0x2a,0x95},{0xa0,0x02,0x82,0x81},{0xaa,0xaa,0xaa,0x95},{0x19,0xaa,0xaa,0x80}},{{0xa8,0x00,0x05,0x00},{0x8a,0xaa,0xaa,0x09},{0x02,0x20,0x08,0x04},{0x88,0x00,0x00,0x21},{0x28,0x00,0x00,0x09},{0xaa,0xaa,0xa8,0x85},{0x8a,0xaa,0x0a,0x09},{0x88,0x08,0x00,0x04},{0xaa,0x82,0x8a,0x82},{0xaa,0xaa,0xaa,0x81},{0xa8,0x22,0xa8,0x15},{0xaa,0xaa,0xaa,0x15},{0xaa,0xaa,0x2a,0x95},{0xa0,0x22,0x82,0x91},{0xaa,0xaa,0xaa,0x95},{0x15,0x6a,0xaa,0x84}},{{0xa8,0x00,0x05,0x10},{0x8a,0xaa,0xaa,0x09},{0x22,0x20,0x28,0x14},{0x88,0x00,0x00,0x25},{0x28,0x00,0x00,0x05},{0xaa,0xaa,0xa8,0x45},{0xaa,0xaa,0xaa,0x05},{0x88,0x0a,0x00,0x85},{0xaa,0xa2,0x8a,0xa9},{0xaa,0xaa,0xaa,0xa1},{0xaa,0x2a,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xa2,0x2a,0x8a,0x95},{0xaa,0xaa,0xaa,0x95},{0x15,0x6a,0xa6,0x84}},{{0xa8,0x00,0x05,0x90},{0x8a,0xaa,0x65,0x09},{0xaa,0x22,0xaa,0x15},{0x88,0x00,0x00,0x25},{0xa8,0x00,0x00,0x25},{0xaa,0xaa,0xa8,0x65},{0xaa,0xaa,0xaa,0x25},{0xa8,0x2a,0x80,0xa5},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x55},{0xa2,0xaa,0x8a,0x95},{0xa9,0xaa,0x66,0x55},{0x15,0x6a,0x56,0x44}},{{0x94,0x00,0x05,0x90},{0x8a,0xaa,0x65,0x29},{0xaa,0x22,0xaa,0x95},{0x88,0x00,0x00,0x25},{0xa8,0x08,0x00,0x25},{0xaa,0xaa,0xa6,0x65},{0xaa,0xaa,0xaa,0x25},{0xaa,0x2a,0x8a,0xa5},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x45},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0x29,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0xa9,0xa9,0x55,0x55},{0x25,0x6a,0x55,0x54}},{{0x94,0x00,0x0a,0x64},{0x8a,0xaa,0x65,0x19},{0xaa,0x22,0xaa,0x95},{0x88,0x00,0x00,0x25},{0xa8,0x0a,0x0a,0x15},{0xaa,0x6a,0xa6,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0x8a,0xa5},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xa9,0x69,0xaa,0x55},{0xaa,0xaa,0xaa,0x55},{0x99,0xa5,0x55,0x55},{0x21,0x15,0x55,0x54}},{{0x94,0x00,0x0a,0x64},{0xaa,0x9a,0x65,0x19},{0xaa,0x22,0xaa,0x95},{0x8a,0x00,0x00,0x15},{0xa8,0x2a,0x8a,0x15},{0xaa,0x5a,0xa6,0x55},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa8,0x55},{0x9a,0xaa,0xa6,0x55},{0x9a,0xaa,0xa5,0x55},{0xa9,0x69,0xaa,0x55},{0xaa,0xa9,0x6a,0x55},{0x95,0x55,0x55,0x55},{0x22,0x15,0x55,0x54}},{{0x94,0x00,0x0a,0xa5},{0xaa,0x5a,0x65,0x15},{0xaa,0x22,0xaa,0x95},{0xaa,0xa0,0x08,0x15},{0xa8,0x2a,0x8a,0x15},{0xaa,0x55,0x56,0x55},{0xaa,0xaa,0xa9,0x95},{0xaa,0xaa,0xaa,0x15},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa5,0x55},{0x9a,0xa9,0x56,0x55},{0x9a,0xa1,0x55,0x55},{0xa9,0x69,0x95,0x55},{0xaa,0xa9,0x69,0x55},{0x95,0x55,0x55,0x55},{0x22,0x15,0x55,0x54}},{{0x68,0x00,0x0a,0x95},{0xa6,0x55,0x55,0x15},{0xaa,0x12,0x8a,0x15},{0xaa,0xa0,0x28,0x15},{0xa8,0x2a,0x8a,0x15},{0xa9,0x55,0x56,0x55},{0xaa,0xaa,0xa5,0x95},{0xaa,0xaa,0xaa,0x55},{0xaa,0xa9,0xa5,0x55},{0xaa,0xa5,0x55,0x55},{0x9a,0xa9,0x55,0x55},{0x91,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x9a,0xa9,0x65,0x55},{0x95,0x55,0x55,0x55},{0xa2,0x15,0x55,0x54}},{{0x68,0x00,0x0a,0x55},{0xa6,0x55,0x9a,0x15},{0xaa,0x12,0x06,0x55},{0xaa,0xaa,0x28,0x15},{0xa8,0x2a,0xaa,0x15},{0xa9,0x55,0x56,0x55},{0xaa,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xa9,0x65,0x55},{0xaa,0xa5,0x55,0x55},{0x9a,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x99,0x95,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa2,0x15,0x55,0x54}},{{0x68,0x00,0x05,0x55},{0xa5,0x55,0x9a,0x25},{0xa9,0x91,0x55,0x55},{0xaa,0xaa,0x28,0x15},{0xa8,0x2a,0xaa,0x95},{0x59,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0xaa,0xa5,0x6a,0x55},{0xaa,0xa9,0x65,0x55},{0xa4,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0x15,0x55,0x54}},{{0x68,0x00,0x05,0x55},{0xa5,0x65,0x9a,0x25},{0x99,0x91,0x55,0x55},{0xaa,0xaa,0xa8,0x95},{0x9a,0x25,0x65,0x95},{0x51,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0xa6,0x85,0x65,0x55},{0x9a,0x29,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0x15,0x55,0x54}},{{0x54,0x00,0x05,0x55},{0xa9,0xa5,0x9a,0x25},{0x99,0x91,0x55,0x55},{0xa6,0xaa,0xaa,0x95},{0x96,0xa5,0x65,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa6,0x85,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x96,0x55,0x55,0x55},{0xaa,0x95,0x11,0x54}},{{0x94,0x00,0x05,0x55},{0x69,0xaa,0xaa,0x25},{0x95,0x99,0x55,0x55},{0xa6,0xaa,0x96,0x55},{0x96,0x95,0x55,0x55},{0x55,0x55,0x55,0x56},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x85,0x55,0x55,0x56},{0xa6,0x55,0x55,0x59},{0xaa,0x95,0x21,0x54}},{{0x94,0x00,0x85,0x51},{0x6a,0xaa,0xaa,0xa5},{0x95,0x99,0x55,0x55},{0x65,0x59,0x96,0x55},{0x96,0x95,0x55,0x55},{0x55,0x55,0x55,0x56},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x85,0x55,0x55,0x66},{0xaa,0x56,0x99,0x6a},{0xaa,0xaa,0xaa,0xa8}},{{0x94,0x22,0x85,0x51},{0x6a,0xaa,0x20,0x95},{0x55,0x59,0x55,0x55},{0x55,0x55,0x56,0x55},{0x96,0x95,0x55,0x55},{0x55,0x55,0x55,0x5a},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x66,0x56,0x95,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x96,0x2a,0x65,0x01},{0xa2,0x8a,0x65,0x95},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x96,0x95,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x15,0x55,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x96,0xa9,0x50,0x01},{0xa6,0x0a,0x65,0x95},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x45,0x55,0x55,0x4a},{0x55,0x55,0x55,0x55},{0x66,0x96,0x55,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x42,0x95,0x90,0x01},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x55,0x95,0x55,0x95},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x52},{0x65,0x54,0x01,0x2a},{0x65,0x55,0x55,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x41,0x56,0xa0,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x64},{0x66,0x6a,0xa9,0x50},{0x55,0x55,0x55,0x64},{0x55,0x55,0x55,0x5a},{0x55,0x55,0x55,0x55},{0x45,0x50,0x00,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x41,0x6a,0x60,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x56},{0x55,0x5a,0x95,0x5a},{0x55,0x15,0x55,0x20},{0x55,0x55,0x55,0x5a},{0x55,0x55,0x55,0x95},{0x55,0x55,0x55,0x56},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x42,0xa9,0x50,0x05},{0x55,0x55,0x55,0x55},{0x65,0x55,0x55,0x65},{0x55,0x55,0x55,0x55},{0x59,0x65,0x6a,0xa6},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x41,0x50,0x15,0x6a},{0x45,0x54,0x55,0x91},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x42,0x95,0x50,0x05},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x51},{0x65,0x55,0x55,0x54},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x45,0x54,0x10,0x6a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x41,0x55,0x50,0x15},{0x55,0x55,0x55,0x55},{0x6a,0xa2,0xaa,0xa2},{0x52,0xa6,0x65,0x92},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x41,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xa2},{0x6a,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x40,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x40,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x84,0x50,0x05,0x0a},{0x40,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x00,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x2a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0xa5,0x50,0x15,0x48},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x45},{0x00,0x00,0x00,0x00},{0x81,0x51,0x11,0x68},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x54},{0x45,0x55,0x55,0x44},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_5_8 = { .phases = 38, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_5_8_data[0] };
+const uint8_t epd_wp_ed047tc2_5_9_data[38][16][4] = {{{0x00,0x00,0x00,0x00},{0x0a,0x82,0x02,0x00},{0x40,0x00,0x00,0x00},{0x00,0x80,0x02,0x08},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x28,0x00,0x00,0x02},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x0a,0x8a,0x82,0x00},{0x40,0x08,0x00,0x40},{0x00,0x80,0x22,0x08},{0x00,0x08,0x08,0x08},{0x00,0x00,0x00,0x00},{0x00,0x00,0x02,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x10,0x04,0x00,0x00},{0x11,0x40,0x20,0x00},{0x81,0x00,0x00,0x20},{0x28,0x08,0x00,0x82},{0x00,0x20,0x80,0x80},{0x00,0x00,0x02,0x80}},{{0x80,0x00,0x00,0x00},{0x6a,0x8a,0x8a,0x00},{0x90,0x08,0x01,0x40},{0x00,0x80,0x22,0x08},{0x00,0x28,0x88,0x0a},{0x80,0x08,0x00,0x00},{0x00,0x08,0x02,0x00},{0x00,0x08,0x02,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x80,0x00},{0x14,0x14,0x00,0x00},{0x21,0x50,0x20,0x80},{0x81,0x18,0x00,0xa0},{0x29,0x0a,0x02,0x81},{0x2a,0xa2,0xaa,0xa0},{0x00,0x2a,0x02,0x40}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x00},{0xa0,0x08,0x02,0x80},{0x80,0x88,0x22,0x08},{0x20,0xa8,0x89,0x0a},{0x80,0xa8,0x00,0x02},{0xaa,0x8a,0x0a,0x08},{0x00,0x08,0x02,0x00},{0x00,0x00,0x00,0x02},{0x08,0x08,0x80,0x00},{0x24,0x54,0x22,0x80},{0x25,0x52,0x2a,0xa0},{0x86,0xa8,0x20,0xa8},{0xaa,0x2a,0x82,0x81},{0x2a,0xaa,0xaa,0xa0},{0x00,0xaa,0x22,0x40}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x00},{0xaa,0x8a,0x2a,0x80},{0x80,0x88,0x22,0x08},{0x22,0xaa,0x8a,0x0a},{0x82,0xa8,0x00,0x02},{0xaa,0xaa,0x0a,0x0a},{0x00,0x08,0x02,0x28},{0x00,0x00,0x00,0x02},{0x2a,0x8a,0x80,0x00},{0xa5,0xaa,0xa2,0xa0},{0x26,0x96,0xaa,0xa0},{0x8a,0xa8,0xa0,0xa8},{0xaa,0x2a,0x8a,0x81},{0x2a,0xaa,0xaa,0xa8},{0x00,0xaa,0x22,0x40}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x80},{0xaa,0x8a,0xaa,0x80},{0x80,0x88,0x22,0x24},{0xaa,0xaa,0x8a,0x0a},{0xa2,0xa8,0x02,0x02},{0xaa,0xaa,0x2a,0x0a},{0x00,0x08,0x02,0x2a},{0x00,0x00,0x00,0x02},{0x2a,0xaa,0x80,0x00},{0xa9,0xaa,0xa2,0xa0},{0x26,0xa6,0xaa,0xa0},{0x8a,0xaa,0xaa,0xaa},{0xaa,0x2a,0x8a,0x41},{0xaa,0xaa,0xaa,0xa8},{0x08,0xaa,0x12,0x40}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x80},{0xaa,0x8a,0xaa,0x80},{0x80,0x88,0x22,0x24},{0xaa,0xaa,0x8a,0x29},{0xa2,0xa8,0x02,0x02},{0xaa,0xaa,0xaa,0x0a},{0x00,0x08,0x02,0x2a},{0x00,0x00,0x08,0x80},{0x2a,0xaa,0x8a,0x22},{0xaa,0xaa,0xaa,0xa0},{0x2a,0xaa,0xaa,0xa0},{0x8a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x69},{0xaa,0xaa,0xaa,0xa8},{0x28,0xaa,0x12,0x40}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x80},{0xaa,0xaa,0xaa,0x80},{0x80,0x88,0x22,0x24},{0xaa,0xaa,0x8a,0x25},{0xaa,0xaa,0x0a,0x02},{0xaa,0xaa,0xaa,0x09},{0x20,0x08,0x02,0x28},{0x00,0x02,0x0a,0xa0},{0x2a,0xaa,0x8a,0x2a},{0xaa,0xaa,0xaa,0xa0},{0x2a,0xaa,0xaa,0xa8},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0xaa,0xa8},{0x28,0xaa,0x11,0x44}},{{0x80,0x00,0x00,0x00},{0xaa,0xaa,0x8a,0x80},{0xaa,0xaa,0xaa,0x80},{0x81,0x88,0xa2,0x24},{0xaa,0xaa,0x8a,0x25},{0xaa,0xaa,0x0a,0x21},{0xaa,0xaa,0xaa,0x05},{0x2a,0x8a,0x02,0x28},{0x00,0x82,0xaa,0xa1},{0x2a,0xaa,0xaa,0x2a},{0xaa,0xaa,0xaa,0xa8},{0x2a,0xaa,0xaa,0xa8},{0xaa,0xaa,0xaa,0x95},{0xa6,0xaa,0xa9,0x55},{0xaa,0xaa,0xaa,0xa8},{0x2a,0xaa,0x91,0x44}},{{0x80,0x00,0x00,0x20},{0xaa,0xaa,0x89,0x80},{0xaa,0xaa,0xaa,0x80},{0x82,0x88,0xaa,0x24},{0xaa,0xaa,0xaa,0x25},{0xaa,0xaa,0x0a,0x21},{0xaa,0xaa,0xaa,0x05},{0x2a,0xaa,0x82,0x04},{0x20,0xa2,0xaa,0xa1},{0x2a,0xaa,0xaa,0x29},{0xaa,0xaa,0xaa,0xa8},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x55},{0x96,0xa5,0x65,0x55},{0xaa,0xaa,0xaa,0x54},{0x2a,0xaa,0x91,0x44}},{{0x80,0x00,0x00,0x10},{0xaa,0xaa,0x89,0x80},{0xaa,0xaa,0xaa,0xa0},{0xa2,0xa8,0x9a,0x14},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0x8a,0x21},{0xaa,0xaa,0xaa,0x85},{0x2a,0xaa,0x8a,0x15},{0x20,0xaa,0xaa,0xa1},{0x2a,0xaa,0xaa,0x25},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x5a},{0xaa,0xaa,0xaa,0x55},{0x96,0x95,0x55,0x55},{0xaa,0xaa,0xaa,0x56},{0x2a,0x99,0x91,0x44}},{{0x80,0x00,0x00,0x94},{0xaa,0xa9,0x45,0x44},{0xaa,0xaa,0xaa,0xa0},{0xa2,0xa8,0x99,0x16},{0xaa,0xa6,0xa6,0x95},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xa9,0xa5},{0xaa,0xaa,0xa9,0x95},{0x2a,0xaa,0xaa,0x69},{0x2a,0xaa,0xaa,0x95},{0xaa,0xaa,0xaa,0x5a},{0xaa,0xaa,0x9a,0x55},{0xaa,0xaa,0x9a,0x55},{0x95,0x95,0x55,0x55},{0xaa,0xaa,0x55,0x56},{0x1a,0x95,0x99,0x04}},{{0x80,0x00,0x00,0x64},{0xa9,0x65,0x45,0x48},{0xaa,0xaa,0xa9,0xa2},{0xa2,0x6a,0x99,0x15},{0xaa,0xa5,0x65,0x95},{0xaa,0xaa,0xaa,0x99},{0xaa,0xaa,0xa5,0xa5},{0xaa,0xaa,0xa9,0x95},{0xaa,0xaa,0xaa,0x59},{0x2a,0xaa,0x6a,0x95},{0xaa,0xaa,0x99,0x55},{0xaa,0xaa,0x95,0x55},{0xaa,0xaa,0x9a,0x55},{0x95,0x95,0x55,0x55},{0xaa,0x99,0x55,0x55},{0x19,0x55,0x89,0x04}},{{0x40,0x00,0x00,0xa4},{0xa5,0x65,0x45,0x4a},{0xaa,0xaa,0xa9,0xa1},{0xa2,0x6a,0x99,0x15},{0xa9,0x95,0x65,0x95},{0xaa,0xaa,0xaa,0x95},{0xaa,0xa5,0x95,0xa5},{0xaa,0xa6,0xa9,0x95},{0xaa,0xaa,0xa6,0x55},{0x2a,0xaa,0x6a,0x95},{0xaa,0xaa,0x59,0x55},{0xaa,0xa9,0x55,0x55},{0xaa,0xa6,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa5,0x99,0x55,0x55},{0x15,0x55,0x49,0x14}},{{0x40,0x00,0x00,0x54},{0xa5,0x65,0x45,0x88},{0xaa,0xaa,0xa9,0xa1},{0xaa,0x66,0x11,0x15},{0xa9,0x55,0x65,0x55},{0xaa,0x96,0xa9,0x95},{0xa5,0x55,0x55,0x55},{0xaa,0xa6,0xa9,0x15},{0xaa,0xaa,0x95,0x55},{0x26,0xa5,0x65,0x95},{0xaa,0xa9,0x55,0x55},{0xaa,0xa9,0x55,0x55},{0xaa,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x15,0x55,0x45,0x14}},{{0x40,0x00,0x00,0x55},{0xa5,0x55,0x46,0x89},{0xaa,0xa6,0xa5,0x61},{0xaa,0x66,0x51,0x15},{0x95,0x55,0x55,0x55},{0x28,0x56,0xa5,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xa6,0xa9,0x55},{0xaa,0xa9,0x55,0x55},{0xa5,0x55,0x55,0x55},{0xaa,0xa9,0x55,0x55},{0x9a,0xa9,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x45,0x14}},{{0xa0,0x00,0x00,0x55},{0x95,0x56,0x8a,0x99},{0xaa,0xaa,0x9a,0x51},{0xaa,0x66,0x55,0x95},{0x95,0x55,0x55,0x55},{0x29,0x55,0xa5,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xa5,0x45,0x55},{0xaa,0xa9,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0x59,0x55,0x55},{0x9a,0xa9,0x55,0x55},{0xa5,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x45,0x14}},{{0xa0,0x00,0x00,0x55},{0x9a,0x9a,0x8a,0x65},{0xaa,0xa5,0x56,0x51},{0x6a,0x56,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x85,0x55,0x55,0x55},{0xaa,0x59,0x55,0x55},{0x95,0x55,0x55,0x55},{0x9a,0x55,0x55,0x55},{0x99,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa9,0x55,0x55,0x96},{0x95,0x55,0x55,0x55},{0x05,0x55,0x45,0x14}},{{0xa0,0x00,0x20,0x51},{0x5a,0xaa,0x8a,0x65},{0xa5,0x65,0x56,0x59},{0x69,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0x6a,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x85,0x55,0x45,0x10}},{{0x60,0x28,0xa0,0x51},{0x6a,0xaa,0x8a,0x65},{0x95,0x55,0x56,0x55},{0x59,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x84,0x55,0x44,0x10}},{{0x6a,0xaa,0xa8,0x11},{0x6a,0xaa,0x8a,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0xa6,0x45,0x44,0x10}},{{0x5a,0xaa,0x64,0x01},{0xa6,0x99,0x45,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0xa6,0x44,0x46,0x10}},{{0x5a,0x95,0x56,0x01},{0x95,0x55,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x99,0x01},{0x95,0x55,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x56,0x5a,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x95},{0x95,0x55,0x55,0x51},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x65,0x55},{0x6a,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xa8}},{{0x25,0x6a,0x99,0x01},{0x15,0x55,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x65,0x65},{0x56,0x5a,0x56,0x56},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x65},{0x95,0x55,0x41,0x56},{0x95,0x55,0x55,0x41},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x5a,0x66,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa8}},{{0x2a,0xaa,0x56,0x05},{0x55,0x55,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x95,0x95,0x61},{0x55,0x55,0x55,0x59},{0x55,0x55,0x55,0x45},{0x55,0x55,0x55,0x59},{0x55,0x55,0x54,0x55},{0x55,0x54,0x00,0x15},{0x91,0x55,0x15,0x42},{0x55,0x55,0x24,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x2a,0x95,0x56,0x05},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x65,0x49,0x91},{0x55,0x55,0x54,0x44},{0x55,0x55,0x55,0x49},{0x15,0x55,0x55,0x54},{0x55,0x51,0x54,0x0a},{0x55,0x04,0x00,0x2a},{0xaa,0xaa,0xaa,0xaa},{0x55,0x54,0x10,0x55},{0x65,0x56,0x9a,0x55},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x05},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0xa2,0x1a,0x06,0x50},{0x68,0xa0,0xa8,0xaa},{0x55,0x45,0x55,0x06},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x45,0x04,0x00,0xaa},{0x55,0x55,0x65,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x51,0x05,0x01,0x02},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x00,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x6a},{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x2a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x06},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x15,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x58},{0x55,0x55,0x55,0x00},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x58},{0x55,0x55,0x55,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x6a,0xaa,0xa9,0xa4},{0x55,0x55,0x55,0x00},{0x15,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x54},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_5_9 = { .phases = 38, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_5_9_data[0] };
+const uint8_t epd_wp_ed047tc2_5_10_data[44][16][4] = {{{0x00,0x00,0x00,0x00},{0x80,0x80,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x02,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x20,0x00},{0x00,0x00,0x00,0x00},{0x00,0x80,0x00,0x00},{0x80,0x00,0x08,0x02},{0x00,0x80,0x00,0x08},{0x10,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x02,0x00,0x00,0x00},{0xa2,0x88,0x20,0x05},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x02},{0x08,0x00,0x02,0x00},{0x00,0x00,0x00,0x00},{0x00,0x02,0x02,0x00},{0x00,0x00,0x00,0x02},{0x00,0x80,0x20,0x00},{0x00,0x80,0x00,0x00},{0x00,0x82,0x00,0x00},{0xa8,0x00,0x08,0x82},{0x00,0x80,0x20,0x0a},{0x92,0x00,0x00,0x8a},{0x2a,0x20,0xa2,0xa8},{0x00,0x00,0x00,0x08}},{{0x02,0x00,0x00,0x00},{0xa2,0x8a,0x20,0x05},{0x00,0x00,0x00,0x40},{0x00,0x00,0x00,0x02},{0x08,0x05,0x02,0x00},{0x00,0x00,0x00,0x02},{0x00,0x02,0x02,0x00},{0x00,0x00,0x00,0x0a},{0x00,0x80,0x20,0x00},{0x02,0xa0,0xa0,0x00},{0x00,0x82,0x00,0x02},{0xaa,0x20,0x08,0x82},{0x84,0x80,0xa0,0x0a},{0xa2,0x84,0x00,0x8a},{0x2a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x08}},{{0x82,0x00,0x00,0x00},{0xa2,0xaa,0xa0,0x05},{0x00,0x00,0x00,0x40},{0x00,0x00,0x00,0x02},{0x29,0x15,0x42,0x00},{0x00,0x00,0x00,0x02},{0x00,0x02,0x02,0x00},{0x00,0x00,0x00,0x0a},{0x02,0xa0,0x20,0x80},{0x02,0xaa,0xa8,0x00},{0x00,0x82,0x00,0x02},{0xaa,0xa8,0x2a,0x82},{0x9a,0x90,0xa8,0x0a},{0xa6,0xa8,0x00,0x8a},{0x2a,0xaa,0xaa,0xaa},{0x22,0x00,0x80,0x28}},{{0x82,0x00,0x00,0x00},{0xa2,0xaa,0xa8,0x09},{0x00,0x00,0x00,0x40},{0x00,0x00,0x00,0x02},{0x29,0x1a,0x46,0x00},{0x00,0x00,0x00,0x02},{0x00,0x02,0x02,0x00},{0x00,0x00,0x00,0x0a},{0x02,0xaa,0x28,0x80},{0x2a,0xaa,0xa8,0x00},{0x02,0x82,0x00,0x02},{0xaa,0xa8,0x2a,0x8a},{0xaa,0xa8,0xaa,0x0a},{0xaa,0xaa,0x08,0x8a},{0x2a,0xaa,0xaa,0xaa},{0x22,0x8a,0x88,0x24}},{{0x82,0x00,0x00,0x00},{0xaa,0xaa,0xa8,0x09},{0x00,0x00,0x00,0x90},{0x02,0xa0,0x08,0x02},{0x2a,0x2a,0x86,0x20},{0x08,0x00,0x00,0x02},{0x00,0x02,0x02,0x20},{0x00,0x00,0x00,0x0a},{0x2a,0xaa,0xa8,0x80},{0x2a,0xaa,0xa8,0x20},{0x02,0x82,0x00,0x02},{0xaa,0xaa,0xaa,0x8a},{0xaa,0xa8,0xaa,0x0a},{0xaa,0xaa,0xa8,0x8a},{0xaa,0xaa,0xaa,0xaa},{0x1a,0x8a,0x8a,0xa4}},{{0x82,0x00,0x00,0x00},{0xaa,0xaa,0xa8,0x0a},{0x80,0x00,0x00,0x90},{0x02,0xaa,0x2a,0x02},{0x2a,0xaa,0x8a,0x20},{0x08,0x00,0x00,0x02},{0x00,0x02,0x02,0x20},{0x00,0x00,0x00,0x0a},{0x2a,0xaa,0xa8,0x82},{0x2a,0xaa,0xaa,0x20},{0x2a,0xa2,0xa2,0x02},{0xaa,0xaa,0xaa,0x8a},{0xaa,0xaa,0xaa,0x2a},{0xaa,0xaa,0xa8,0x8a},{0xaa,0xaa,0xaa,0xaa},{0x1a,0xaa,0x4a,0x54}},{{0x82,0x00,0x00,0x08},{0xaa,0xaa,0xaa,0x0a},{0x80,0x02,0x00,0x90},{0x02,0xaa,0xaa,0x02},{0x2a,0xaa,0xaa,0xa0},{0x08,0x00,0x00,0x02},{0x00,0x02,0x02,0x20},{0x00,0x00,0x00,0x0a},{0x2a,0xaa,0xa8,0x82},{0x2a,0xaa,0xaa,0x20},{0x2a,0xaa,0xaa,0x02},{0xaa,0xaa,0xaa,0x8a},{0xaa,0xaa,0xaa,0x2a},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x16,0xaa,0x46,0x54}},{{0x82,0x00,0x00,0x08},{0xaa,0xaa,0xaa,0x0a},{0x80,0x02,0x00,0xaa},{0x02,0xaa,0xaa,0x02},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x02},{0x00,0x02,0x82,0x20},{0x00,0x00,0x00,0x0a},{0x2a,0xaa,0xaa,0x82},{0x2a,0xaa,0xaa,0x20},{0x2a,0xaa,0xaa,0x02},{0xaa,0xaa,0xaa,0x8a},{0xaa,0xaa,0xaa,0x2a},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa4},{0x15,0x9a,0x65,0x54}},{{0x82,0x00,0x00,0x28},{0xaa,0xaa,0xaa,0x0a},{0x80,0x22,0x00,0xaa},{0x02,0xaa,0xaa,0x02},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x02},{0x00,0x02,0x82,0x20},{0x00,0x00,0x00,0x0a},{0x2a,0xaa,0xaa,0x82},{0x2a,0xaa,0xaa,0x20},{0x2a,0xaa,0xaa,0x02},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa2},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0x55},{0x15,0x95,0x65,0x54}},{{0x81,0x00,0x00,0x28},{0xaa,0xaa,0xaa,0x0a},{0xa2,0x22,0x00,0xaa},{0x02,0xaa,0xaa,0x8a},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x02},{0x0a,0x02,0x82,0x20},{0x00,0x0a,0x00,0x09},{0x2a,0xaa,0xaa,0x82},{0x2a,0xaa,0xaa,0xa2},{0xaa,0xaa,0xaa,0x01},{0xaa,0xaa,0xa2,0xa9},{0xaa,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x55},{0x15,0x55,0x55,0x54}},{{0x81,0x00,0x80,0xa8},{0xaa,0xaa,0x9a,0x2a},{0xa2,0xa2,0x02,0xaa},{0x02,0xaa,0xaa,0xa9},{0x2a,0xaa,0xaa,0xa8},{0x28,0x00,0x00,0x02},{0x0a,0x82,0x82,0xa0},{0x00,0x8a,0x80,0x09},{0x2a,0xaa,0xaa,0x22},{0x2a,0xaa,0xaa,0xa2},{0xaa,0xaa,0xaa,0x01},{0xaa,0xaa,0xa2,0x21},{0xaa,0xaa,0xaa,0xa1},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0xa9,0x55},{0x15,0x55,0x55,0x54}},{{0x81,0x00,0x80,0xa8},{0xaa,0x66,0x9a,0x2a},{0xa2,0xa2,0x22,0xaa},{0x02,0xaa,0xaa,0xa9},{0x2a,0xaa,0xa9,0xaa},{0xa8,0x00,0x00,0x01},{0x2a,0xa2,0xa0,0x80},{0x02,0x8a,0x80,0x05},{0x2a,0xaa,0x8a,0x20},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa1},{0xaa,0xaa,0xa0,0x61},{0xaa,0xaa,0xaa,0xa5},{0xaa,0xaa,0xaa,0x65},{0xaa,0xaa,0x55,0x55},{0x15,0x55,0x55,0x54}},{{0x81,0x00,0x80,0x94},{0xaa,0x65,0x56,0x26},{0xa2,0xaa,0x22,0xaa},{0x82,0xaa,0xaa,0xa9},{0x2a,0xaa,0xa9,0xaa},{0xa8,0x00,0x00,0x01},{0xaa,0xaa,0xa8,0x82},{0x02,0x8a,0x82,0x05},{0x2a,0xaa,0x8a,0x21},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xa8,0xaa,0xa1},{0xaa,0xaa,0xa0,0x65},{0xaa,0xaa,0x20,0x85},{0xaa,0xaa,0xaa,0x65},{0xaa,0x95,0x55,0x55},{0x15,0x55,0x55,0x54}},{{0x41,0x00,0x40,0x94},{0x69,0x65,0x56,0x26},{0xa2,0xaa,0x22,0xaa},{0x82,0xaa,0xaa,0xa1},{0x2a,0xaa,0xaa,0xaa},{0xa8,0x00,0x00,0x01},{0xaa,0xaa,0xa8,0x8a},{0xaa,0xaa,0xa2,0x05},{0x2a,0xaa,0x8a,0x21},{0x2a,0xaa,0xaa,0x9a},{0xaa,0x28,0xaa,0xa9},{0xaa,0xaa,0x80,0x65},{0xaa,0x2a,0x00,0x85},{0xaa,0xaa,0xaa,0x65},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x54}},{{0x42,0x00,0x48,0xa4},{0x59,0x55,0x55,0xa9},{0xa6,0xaa,0x22,0x69},{0x82,0xaa,0xaa,0x25},{0x2a,0xaa,0xaa,0x9a},{0xa8,0x80,0x00,0x01},{0xaa,0xaa,0xa8,0x8a},{0xaa,0xaa,0xaa,0x05},{0x2a,0xaa,0x8a,0x29},{0x2a,0xaa,0x56,0x99},{0xaa,0x28,0xa8,0xa9},{0xaa,0x82,0x80,0x65},{0xaa,0x2a,0x00,0x85},{0xaa,0xaa,0xa6,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x54}},{{0x42,0x00,0x48,0x64},{0x59,0x59,0x65,0xa9},{0xa6,0xaa,0x22,0x69},{0x82,0xaa,0xa0,0x65},{0x2a,0xaa,0xa9,0x56},{0xaa,0x80,0x00,0x09},{0xaa,0xa9,0xa9,0x8a},{0xaa,0xaa,0xaa,0x05},{0xaa,0x2a,0x86,0x69},{0x2a,0x55,0x55,0x99},{0xaa,0x69,0x89,0xa9},{0x96,0x82,0x00,0x45},{0xaa,0x22,0x10,0x05},{0xa9,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x54}},{{0x62,0x00,0x4a,0x54},{0x59,0x9a,0xa9,0x95},{0xaa,0xaa,0x22,0x65},{0x82,0xaa,0xa5,0x45},{0x26,0xaa,0xa9,0x55},{0xaa,0x80,0x00,0x09},{0xaa,0xa9,0x29,0x89},{0xaa,0xaa,0xaa,0x85},{0xaa,0x55,0x54,0x69},{0x21,0x55,0x55,0x55},{0xaa,0x69,0x45,0xa9},{0x95,0x55,0x55,0x55},{0xaa,0x22,0x10,0x05},{0x89,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x54}},{{0xa2,0x00,0x8a,0x54},{0x66,0xaa,0xaa,0x95},{0xaa,0xaa,0x22,0x55},{0x82,0x95,0x55,0x55},{0x16,0xa5,0x55,0x55},{0xa2,0xa0,0x20,0x09},{0xaa,0xa9,0x29,0x09},{0xaa,0xaa,0xaa,0x85},{0xa9,0x55,0x55,0x59},{0x11,0x55,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xa1,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x25,0x55,0x55,0x54}},{{0xa2,0x00,0x86,0x54},{0xa6,0xaa,0xaa,0xa5},{0xaa,0xaa,0x22,0x55},{0xa9,0x55,0x55,0x55},{0x16,0x5a,0xa9,0x55},{0xa2,0xaa,0x28,0x01},{0xaa,0xa9,0x29,0x55},{0xaa,0xaa,0xaa,0x85},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x29,0x55,0x55,0x54}},{{0xa1,0x00,0x85,0x54},{0xaa,0xa2,0xaa,0x65},{0xaa,0xaa,0x21,0x55},{0xa9,0x55,0x55,0x55},{0x15,0xa5,0x55,0x55},{0xa2,0xaa,0xa8,0x01},{0xaa,0xa9,0x69,0x55},{0xaa,0xa5,0x69,0xa5},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x29,0x45,0x55,0x54}},{{0xa1,0x00,0x85,0x54},{0x9a,0x95,0x55,0x55},{0xaa,0x99,0x21,0x55},{0xa9,0x55,0x55,0x55},{0x16,0x55,0x55,0x55},{0x96,0xaa,0xaa,0x85},{0xa2,0xa9,0x55,0x55},{0xaa,0xa5,0x69,0x65},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x2a,0x65,0x85,0x54}},{{0x61,0x00,0x45,0x54},{0x95,0x55,0x55,0x55},{0xaa,0x99,0x61,0x55},{0xa9,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x96,0xaa,0xaa,0x85},{0xa5,0x55,0x55,0x55},{0xaa,0x65,0x55,0x65},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x2a,0x65,0x89,0x94}},{{0x61,0x00,0x45,0x50},{0x95,0x55,0x55,0x55},{0x9a,0x99,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x96,0xaa,0xaa,0x85},{0x95,0x55,0x55,0x55},{0xa9,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x2a,0xaa,0x8a,0xa8}},{{0x61,0x00,0x45,0x10},{0x15,0x55,0x55,0x55},{0x59,0x55,0x95,0x55},{0xa9,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x96,0xaa,0xaa,0x65},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x2a,0xaa,0xaa,0xa8}},{{0x51,0x20,0x41,0x00},{0x55,0x55,0x55,0x55},{0x59,0x55,0x99,0x55},{0xa9,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x16,0x6a,0x94,0x65},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xa8}},{{0x50,0x2a,0x40,0x00},{0x55,0x55,0x55,0x55},{0x59,0x55,0x99,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xa8}},{{0x18,0x2a,0x00,0x01},{0x55,0x55,0x55,0x55},{0x51,0x55,0x99,0x55},{0x55,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0xa9},{0xaa,0xaa,0xaa,0xa8}},{{0x28,0xa9,0x00,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x99,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x28,0x95,0x20,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x99,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x24,0x95,0x20,0x01},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x95},{0x55,0x55,0x55,0x99},{0x95,0x55,0x55,0x55},{0x15,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x99},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x9a},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x14,0x6a,0x20,0x01},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x95},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x56},{0x95,0x55,0x55,0x65},{0x55,0x14,0x54,0x56},{0x41,0x55,0x55,0x56},{0x55,0x55,0x55,0x5a},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x14,0x6a,0x10,0x01},{0x55,0x55,0x55,0x56},{0x55,0x55,0x55,0x95},{0x55,0x55,0x55,0x11},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x59,0x55,0x95,0x55},{0x55,0x55,0x55,0x54},{0x55,0x55,0x55,0x15},{0x6a,0xaa,0xaa,0x99},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x18,0x96,0x10,0x05},{0x55,0x55,0x55,0x19},{0x55,0x55,0x55,0x65},{0x55,0x55,0x55,0x21},{0xa9,0x55,0x56,0xa5},{0x55,0x55,0x55,0x55},{0x66,0xa9,0x69,0x54},{0x55,0x50,0x14,0x1a},{0x6a,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x46},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x18,0x95,0x10,0x45},{0x55,0x55,0x55,0x15},{0x55,0x55,0x55,0x65},{0x6a,0x6a,0x9a,0x11},{0x95,0x55,0x55,0x55},{0x69,0x55,0x55,0x59},{0x51,0x56,0x16,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x18,0x55,0x10,0x55},{0x00,0x00,0x00,0x00},{0x55,0x65,0x56,0x54},{0x55,0x15,0x45,0x02},{0x80,0x00,0x00,0x0a},{0x55,0x55,0x55,0x16},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x15,0x55,0x15,0x55},{0x00,0x00,0x00,0x00},{0x59,0x55,0x55,0x14},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x65,0x45,0x54,0x0a},{0x2a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x40,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x40,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0x15,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x80,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0x95,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x95,0x55,0x55,0x55},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x6a,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_5_10 = { .phases = 44, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_5_10_data[0] };
+const uint8_t epd_wp_ed047tc2_5_11_data[57][16][4] = {{{0x20,0x8a,0x80,0x00},{0x15,0x55,0x5a,0xa4},{0x44,0x10,0x0a,0x41},{0x40,0x00,0x09,0x54},{0x10,0x50,0x00,0x00},{0x00,0x00,0x04,0x28},{0x40,0x00,0x00,0x00},{0x00,0x00,0x20,0x00},{0x00,0x00,0x40,0x00},{0x00,0x00,0x00,0x00},{0x00,0x40,0x00,0x68},{0x00,0x00,0x40,0x00},{0x00,0x00,0x0a,0x54},{0x00,0x0a,0x80,0x00},{0x10,0x09,0x60,0x00},{0x00,0x00,0x00,0x50}},{{0xaa,0xaa,0x8a,0x00},{0x0a,0x60,0x0a,0xa8},{0x54,0x54,0x8a,0x41},{0x41,0x02,0x09,0x54},{0x15,0x50,0x06,0x24},{0x00,0x08,0xa4,0x28},{0x44,0x00,0x09,0xa8},{0x05,0x00,0x2a,0xa8},{0x01,0x10,0x46,0xa8},{0x04,0x00,0x00,0xa8},{0x00,0x40,0x00,0x54},{0x04,0x00,0x44,0xa8},{0x00,0x00,0x8a,0x54},{0x00,0x0a,0x8a,0x58},{0x50,0x19,0x65,0x54},{0x00,0x00,0x00,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x2a,0x6a,0xaa,0xa8},{0x55,0x94,0x89,0x55},{0x41,0x02,0x09,0x54},{0x15,0x50,0x66,0x24},{0x40,0x04,0xa4,0x68},{0x44,0x0a,0x09,0x54},{0x05,0x08,0x55,0x54},{0x11,0x14,0x56,0x54},{0x04,0x40,0x00,0x58},{0x01,0x40,0x0a,0x54},{0x04,0x0a,0x44,0xa8},{0x01,0x00,0x8a,0x54},{0x00,0x0a,0x6a,0x54},{0x50,0x19,0x65,0x54},{0x00,0x00,0x01,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x2a,0x2a,0xaa,0xa8},{0x96,0x95,0x55,0x55},{0x51,0x0a,0x05,0x54},{0x15,0x50,0x66,0xa4},{0x40,0x04,0x54,0x54},{0x44,0x05,0x09,0x54},{0x05,0x18,0x55,0x54},{0x51,0x14,0x56,0x54},{0x04,0x40,0x02,0x54},{0x01,0x40,0x8a,0x54},{0x04,0x05,0x44,0x58},{0x01,0x0a,0x85,0x54},{0x01,0x05,0x65,0x54},{0x54,0x15,0x55,0x54},{0x00,0x00,0x01,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x6a,0xaa,0xaa,0xa8},{0x96,0xa5,0x55,0x55},{0x51,0x09,0x05,0x55},{0x15,0x50,0x65,0x94},{0x44,0x14,0x54,0x54},{0x54,0x15,0x95,0x54},{0x05,0x56,0x55,0x54},{0x51,0x14,0x55,0x54},{0x14,0x40,0x82,0x54},{0x01,0x40,0x8a,0x54},{0x04,0x05,0x44,0x54},{0x01,0x0a,0x45,0x54},{0x01,0x05,0x55,0x54},{0x54,0x15,0x55,0x54},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x6a,0xaa,0xaa,0xa8},{0x9a,0xa6,0x55,0x55},{0x51,0x49,0x25,0x55},{0x15,0x50,0x55,0x54},{0x54,0x14,0x54,0x54},{0x54,0x15,0x95,0x55},{0x05,0x55,0x55,0x55},{0x55,0x14,0x55,0x55},{0x14,0x40,0x8a,0x54},{0x01,0x40,0x85,0x54},{0x04,0x15,0x44,0x54},{0x01,0x0a,0x65,0x54},{0x01,0x05,0x55,0x54},{0x54,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x6a,0xaa,0xaa,0xa8},{0x9a,0xa6,0x55,0x55},{0x51,0x55,0x25,0x55},{0x15,0x50,0x55,0x54},{0x54,0x14,0x54,0x54},{0x54,0x15,0x95,0x55},{0x05,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x14,0x40,0xa9,0x54},{0x01,0x40,0x45,0x55},{0x04,0x15,0x44,0x54},{0x01,0x05,0x65,0x54},{0x01,0x05,0x55,0x54},{0x54,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xa6,0x65,0x55},{0x51,0x55,0x15,0x55},{0x15,0x50,0x55,0x54},{0x54,0x14,0x54,0x54},{0x54,0x15,0x55,0x55},{0x05,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x14,0x40,0x69,0x55},{0x01,0x40,0x65,0x55},{0x04,0x15,0x44,0x54},{0x01,0x05,0x55,0x54},{0x01,0x05,0x55,0x55},{0x54,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xa6,0x65,0x55},{0x51,0x55,0x15,0x55},{0x15,0x52,0x55,0x54},{0x54,0x14,0x56,0x54},{0x54,0x15,0x55,0x55},{0x05,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x15,0x40,0x65,0x55},{0x01,0x50,0x65,0x55},{0x04,0x15,0x64,0x54},{0x01,0x05,0x55,0x55},{0x11,0x05,0x55,0x55},{0x54,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xa6,0x65,0x55},{0x51,0x55,0x15,0x55},{0x15,0x92,0x55,0x55},{0x55,0x14,0x56,0x54},{0x54,0x55,0x55,0x55},{0x45,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x15,0x40,0x55,0x55},{0x01,0x50,0x55,0x55},{0x05,0x15,0x64,0x54},{0x01,0x05,0x55,0x55},{0x11,0x05,0x55,0x55},{0x55,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xa6,0x65,0x55},{0x91,0x55,0x15,0x55},{0x16,0x92,0x55,0x55},{0x55,0x14,0x56,0x55},{0x54,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x15,0x48,0x55,0x55},{0x01,0x50,0x55,0x55},{0x05,0x15,0x64,0x54},{0x01,0x05,0x55,0x55},{0x11,0x05,0x55,0x55},{0x55,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0x65,0x55},{0x92,0x55,0x95,0x55},{0x6a,0x91,0x55,0x55},{0x55,0x54,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x15,0x55,0x55},{0x15,0x48,0x55,0x55},{0x01,0x5a,0x55,0x55},{0x05,0x15,0x54,0x55},{0x11,0x05,0x55,0x55},{0x55,0x05,0x55,0x55},{0xa5,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x8a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0x65,0x55},{0xa6,0x55,0x55,0x55},{0x6a,0x91,0x55,0x55},{0x95,0x54,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x4a,0x55,0x55},{0x01,0x5a,0x55,0x55},{0x15,0x55,0x54,0x55},{0x11,0x05,0x55,0x55},{0x55,0x05,0x55,0x55},{0xa5,0x15,0x55,0x55},{0x00,0x00,0x05,0x54}},{{0xaa,0xaa,0x4a,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0x65,0x55},{0xa6,0x55,0x55,0x55},{0x6a,0xa1,0x55,0x55},{0x95,0x54,0x55,0x55},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x15,0x46,0x55,0x55},{0x01,0x5a,0x55,0x55},{0x15,0x55,0x54,0x55},{0x11,0x05,0x55,0x55},{0x55,0x05,0x55,0x55},{0xa9,0x15,0x55,0x55},{0x00,0x10,0x45,0x54}},{{0xaa,0xa5,0x45,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0x65,0x55},{0xa6,0x95,0x56,0x55},{0x6a,0xa5,0x55,0x55},{0x99,0x54,0x55,0x55},{0x99,0x55,0x55,0x55},{0x5a,0x55,0x55,0x55},{0x56,0x55,0x55,0x55},{0x15,0x46,0x55,0x55},{0x01,0x55,0x55,0x55},{0x15,0x55,0x54,0x55},{0x56,0x15,0x55,0x55},{0x56,0x05,0x55,0x55},{0xa9,0x66,0x55,0x55},{0x00,0x10,0x45,0x54}},{{0xaa,0x95,0x45,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0xa6,0x55},{0xa6,0xa5,0x56,0x55},{0x6a,0xa5,0x55,0x55},{0xa9,0x54,0x55,0x55},{0x99,0x55,0x55,0x55},{0x5a,0x55,0x55,0x55},{0xa6,0x55,0x55,0x55},{0x15,0x45,0x55,0x55},{0x11,0x55,0x55,0x55},{0x19,0x55,0x54,0x55},{0x56,0x15,0x55,0x55},{0x56,0x15,0x55,0x55},{0xa9,0x66,0x95,0x55},{0x00,0x10,0x55,0x54}},{{0xaa,0x95,0x45,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0xa6,0x96},{0xa6,0xa5,0x56,0x55},{0x6a,0xa5,0x99,0x55},{0xaa,0x68,0x59,0x55},{0xa9,0x55,0x55,0x55},{0x5a,0x95,0x55,0x55},{0xa6,0x55,0x55,0x55},{0x19,0x45,0x55,0x55},{0x11,0x95,0x55,0x55},{0x19,0x55,0x54,0x55},{0x56,0x15,0x55,0x55},{0x66,0x15,0x55,0x55},{0xaa,0x66,0x9a,0x55},{0x00,0x14,0x55,0x54}},{{0x9a,0x55,0x45,0x00},{0xaa,0xaa,0xaa,0xa8},{0xaa,0xaa,0xaa,0x96},{0xaa,0xa6,0x56,0x55},{0xaa,0xa5,0x99,0x55},{0xaa,0x68,0x59,0x55},{0xa9,0x65,0x55,0x55},{0x5a,0xa5,0x55,0x55},{0xaa,0x65,0x55,0x55},{0x29,0x85,0x55,0x55},{0x12,0x95,0x55,0x55},{0x59,0x55,0x56,0x55},{0x56,0x15,0x55,0x55},{0xa6,0x15,0x55,0x55},{0xaa,0x6a,0x9a,0x55},{0x00,0x14,0x55,0x54}},{{0x95,0x55,0x45,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x56,0x55},{0xaa,0xa5,0x99,0x55},{0xaa,0xa8,0x59,0x55},{0xa9,0x65,0x55,0x55},{0x9a,0xa5,0x55,0x55},{0xaa,0x69,0x95,0x55},{0x2a,0x85,0x55,0x55},{0x52,0x95,0x55,0x55},{0x5a,0x55,0x95,0x55},{0x56,0x15,0x55,0x55},{0xaa,0x1a,0x95,0x55},{0xaa,0x6a,0xaa,0xa9},{0x00,0x15,0x55,0x54}},{{0x55,0x55,0x45,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x56,0xa9},{0xaa,0xa5,0x99,0x55},{0xaa,0xa8,0xa9,0x55},{0xa9,0xaa,0x56,0x55},{0xaa,0xa5,0x95,0x55},{0xaa,0x69,0xa9,0x55},{0x6a,0x95,0x55,0x55},{0x52,0x95,0x55,0x55},{0x5a,0x6a,0x99,0x55},{0x66,0x15,0x55,0x55},{0xaa,0x1a,0xaa,0xa5},{0xaa,0xaa,0xaa,0xa9},{0x20,0x95,0x55,0x54}},{{0x55,0x55,0x8a,0x00},{0xaa,0xaa,0xa5,0x5a},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x6a,0xa9},{0xaa,0xa5,0x99,0x59},{0xaa,0xa8,0xa9,0x55},{0xaa,0xaa,0x66,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0x6a,0xa9,0x55},{0x6a,0x95,0x55,0x55},{0x56,0x95,0x55,0x55},{0x5a,0x6a,0x99,0x55},{0xa6,0x15,0x55,0xa9},{0xaa,0x1a,0xaa,0xa9},{0xaa,0xaa,0xaa,0xaa},{0x26,0x95,0x55,0x54}},{{0x55,0x5a,0x8a,0x00},{0xaa,0xaa,0x55,0x56},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x6a,0xa9},{0xaa,0xa5,0xaa,0x59},{0xaa,0xa9,0xa9,0x95},{0xaa,0xaa,0x66,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa9,0x55},{0x6a,0x95,0x55,0x55},{0x56,0x95,0x55,0x55},{0x6a,0xaa,0x99,0x55},{0xaa,0x1a,0x9a,0xa9},{0xaa,0x1a,0xaa,0xa9},{0xaa,0xaa,0xaa,0xaa},{0x26,0x95,0x55,0x54}},{{0x55,0x6a,0x8a,0x00},{0xaa,0x55,0x5a,0x56},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x6a,0xaa},{0xaa,0xa9,0xaa,0x59},{0xaa,0xa9,0xa9,0x95},{0xaa,0xaa,0x66,0x55},{0xaa,0xaa,0xaa,0x55},{0xaa,0xaa,0xa9,0x55},{0x6a,0x95,0x55,0x55},{0x56,0xa5,0x55,0x95},{0x6a,0xaa,0x99,0x55},{0xaa,0x1a,0xaa,0xa9},{0xaa,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x26,0x95,0x55,0x54}},{{0x55,0xaa,0x8a,0x00},{0xa9,0x55,0x5a,0x56},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0x6a,0xaa},{0xaa,0xaa,0xaa,0x59},{0xaa,0xa9,0xa9,0x95},{0xaa,0xaa,0x6a,0xa9},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xaa,0xaa,0xa9},{0x6a,0x95,0x55,0x55},{0x66,0xa5,0x55,0xa9},{0xaa,0xaa,0x99,0x55},{0xaa,0x2a,0xaa,0xa9},{0xaa,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x12,0x45,0x55,0x54}},{{0x6a,0xaa,0x8a,0x00},{0xa5,0x55,0xa5,0x56},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0x59},{0xaa,0xa9,0xa9,0xa9},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x6a,0x95,0x55,0xa5},{0xa6,0xa5,0x9a,0xa9},{0xaa,0xaa,0x99,0xa5},{0xaa,0x2a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x11,0x41,0x55,0x54}},{{0xaa,0xaa,0x8a,0x00},{0x95,0x6a,0xa5,0x56},{0xaa,0x69,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa9},{0xaa,0xa9,0xa9,0xa9},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x95,0x96,0xa9},{0xa6,0xa5,0xaa,0xaa},{0xaa,0xaa,0x99,0xa9},{0xaa,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x11,0x40,0x00,0x54}},{{0xaa,0xaa,0x85,0x00},{0x55,0x6a,0xa5,0x56},{0xa9,0x59,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xa9,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x95,0xaa,0xaa},{0xaa,0xa5,0xaa,0xaa},{0xaa,0xaa,0xa9,0xa9},{0xaa,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x11,0x40,0x00,0x54}},{{0xaa,0xaa,0x45,0x00},{0x5a,0x6a,0x55,0x56},{0xa9,0x59,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x99,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xa9,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x01,0x40,0x02,0xa0}},{{0xaa,0xa5,0x45,0x00},{0x6a,0x55,0x55,0x56},{0x69,0x59,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xa9,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x40,0x02,0xa8}},{{0xaa,0x55,0x45,0x00},{0x6a,0x95,0x55,0x55},{0x65,0x55,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa8}},{{0xa5,0x55,0x45,0x00},{0x66,0x95,0x55,0x55},{0x65,0x55,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa8}},{{0x55,0x55,0x45,0x00},{0x55,0x95,0x55,0x55},{0x55,0x55,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa8}},{{0x55,0x55,0x45,0x00},{0x95,0x95,0x55,0x55},{0x55,0x59,0x5a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0x9a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa8}},{{0x55,0x55,0x45,0x00},{0x95,0x95,0x55,0x55},{0x55,0x59,0x99,0xaa},{0xa9,0xaa,0xaa,0xaa},{0xaa,0x9a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa8}},{{0x55,0x55,0x45,0x00},{0x95,0x95,0x55,0x55},{0x55,0x59,0x55,0x69},{0x69,0x6a,0xaa,0xaa},{0xaa,0x5a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x0a,0xa8}},{{0x55,0x55,0x45,0x00},{0x95,0x95,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0x6a,0xaa,0xaa},{0xa9,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x0a,0xa8}},{{0x55,0x55,0x45,0x00},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x6a,0x5a,0xa9,0xaa},{0xa5,0x6a,0xaa,0xaa},{0xaa,0x6a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x20,0x0a,0xa8}},{{0x55,0x55,0x40,0x00},{0x95,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x94,0x95,0xa9,0xaa},{0x95,0x6a,0x66,0xaa},{0xaa,0x6a,0xaa,0xaa},{0xaa,0x9a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x20,0x8a,0xa8}},{{0x55,0x50,0x00,0x80},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x94,0x95,0x99,0xaa},{0x55,0x46,0x66,0xaa},{0xa8,0x6a,0x9a,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x01,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x20,0x8a,0xa8}},{{0x50,0x00,0x00,0x80},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x94,0x95,0x95,0x56},{0x55,0x45,0x55,0xa6},{0x65,0x96,0x96,0xaa},{0x26,0x8a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xa9,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x02,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x08,0x28,0xaa,0xa8}},{{0x00,0x00,0x00,0x60},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x45,0x55,0xa6},{0x55,0x96,0x66,0xaa},{0x2a,0x4a,0xaa,0xaa},{0xaa,0x8a,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xa9,0xaa,0xaa,0xaa},{0xa8,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x88,0x2a,0xaa,0xa8}},{{0x00,0x00,0x20,0x50},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x95,0x66,0x6a},{0x12,0x86,0xaa,0xaa},{0x85,0x4a,0xaa,0xaa},{0xa8,0xaa,0xaa,0xaa},{0xa8,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xa9,0xaa,0xaa,0xaa},{0xa8,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0xa8,0xaa,0xaa,0xa8}},{{0x00,0x00,0x10,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x61,0x09,0x55,0x55},{0x45,0x55,0x55,0xaa},{0xa8,0xaa,0xaa,0xaa},{0x98,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x00,0x10,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x45,0x99,0xaa},{0x55,0x55,0x55,0x55},{0x55,0x55,0x56,0xaa},{0x94,0x6a,0xaa,0xaa},{0x56,0x65,0x55,0x55},{0xa6,0x55,0x66,0xaa},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x00,0x25,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x68,0x95,0x55,0x55},{0xa9,0x8a,0xaa,0xaa},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x00,0x05,0x65,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xa4,0x6a,0xaa,0xaa},{0x02,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xa8}},{{0x05,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x01,0x50,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xa8}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x55,0x55,0x55,0x55},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0xaa,0xaa,0xaa,0xaa},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}},{{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}}};
+const EpdWaveformPhases epd_wp_ed047tc2_5_11 = { .phases = 57, .phase_times = NULL, .luts = (const uint8_t*)&epd_wp_ed047tc2_5_11_data[0] };
+const EpdWaveformPhases* epd_wm_ed047tc2_5_ranges[7] = { &epd_wp_ed047tc2_5_5,&epd_wp_ed047tc2_5_6,&epd_wp_ed047tc2_5_7,&epd_wp_ed047tc2_5_8,&epd_wp_ed047tc2_5_9,&epd_wp_ed047tc2_5_10,&epd_wp_ed047tc2_5_11 };
+const EpdWaveformMode epd_wm_ed047tc2_5 = { .type = 5, .temp_ranges = 7, .range_data = &epd_wm_ed047tc2_5_ranges[0] };
+const EpdWaveformTempInterval ed047tc2_intervals[14] = { { .min = 0, .max = 3 },{ .min = 3, .max = 6 },{ .min = 6, .max = 9 },{ .min = 9, .max = 12 },{ .min = 12, .max = 15 },{ .min = 15, .max = 18 },{ .min = 18, .max = 21 },{ .min = 21, .max = 24 },{ .min = 24, .max = 27 },{ .min = 27, .max = 30 },{ .min = 30, .max = 33 },{ .min = 33, .max = 38 },{ .min = 38, .max = 43 },{ .min = 43, .max = 48 } };
+const EpdWaveformMode* ed047tc2_modes[3] = { &epd_wm_ed047tc2_1,&epd_wm_ed047tc2_2,&epd_wm_ed047tc2_5 };
+const EpdWaveform ed047tc2 = { .num_modes = 3, .num_temp_ranges = 7, .mode_data = &ed047tc2_modes[0], .temp_intervals = &ed047tc2_intervals[0] };
diff --git a/platformio_override_sample.ini b/platformio_override_sample.ini
index 06eae19c2..3ce7709fe 100644
--- a/platformio_override_sample.ini
+++ b/platformio_override_sample.ini
@@ -91,8 +91,9 @@ lib_extra_dirs = ${library.lib_extra_dirs}
[env:tasmota32_base]
; *** Uncomment next lines ";" to enable Beta Tasmota Arduino version ESP32 IDF4.4
;platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master
-;platform_packages = ${core32.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.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 = ${esp32_defaults.build_unflags}
build_flags = ${esp32_defaults.build_flags}
diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini
index 39329fdb5..64e78a073 100644
--- a/platformio_tasmota32.ini
+++ b/platformio_tasmota32.ini
@@ -28,7 +28,18 @@ build_flags = ${esp_defaults.build_flags}
[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/tool-esptoolpy @ ~1.30100
+ platformio/toolchain-xtensa32 @ ~2.50200.0
+ 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}
+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
+ 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}
build_flags = ${esp32_defaults.build_flags}
\ No newline at end of file
diff --git a/platformio_tasmota_cenv_sample.ini b/platformio_tasmota_cenv_sample.ini
index 9ec8bd6b1..b5854e80a 100644
--- a/platformio_tasmota_cenv_sample.ini
+++ b/platformio_tasmota_cenv_sample.ini
@@ -1,11 +1,26 @@
; *** Tasmota32 development core version ESP32 IDF4.4
[env:tasmota32-dev]
extends = env:tasmota32idf4
-platform_packages = ${core32.platform_packages}
- framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/511/framework-arduinoespressif32-release_v4.4-432c3c78c.tar.gz
+platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/516/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}
+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
+
[env:tasmota-rangeextender]
build_flags = ${env.build_flags}
-D FIRMWARE_RANGE_EXTENDER
@@ -13,24 +28,6 @@ build_flags = ${env.build_flags}
-D USE_WIFI_RANGE_EXTENDER
-D USE_WIFI_RANGE_EXTENDER_NAPT
-; *** Beta Tasmota version for ESP32 IDF4.4.
-[env:tasmota32idf4]
-extends = env:tasmota32_base
-platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master
-platform_packages = ${core32.platform_packages}
- framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1rc1/framework-arduinoespressif32-release_IDF4.4.tar.gz
-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
-; ***Uncomment next two lines to enable BLE
- ;-DUSE_BLE_ESP32
- ;-DUSE_MI_ESP32
- ;-DESP32_STAGE=true
-
[env:tasmota32-rangeextender]
extends = env:tasmota32idf4
build_flags = ${env:tasmota32idf4.build_flags}
@@ -38,32 +35,6 @@ build_flags = ${env:tasmota32idf4.build_flags}
-D USE_WIFI_RANGE_EXTENDER
-D USE_WIFI_RANGE_EXTENDER_NAPT
-;*** Beta Tasmota version for ESP32-S2
-[env:tasmota32s2]
-extends = env:tasmota32_base
-board = esp32s2
-platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master
-platform_packages = ${core32.platform_packages}
- framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1rc1/framework-arduinoespressif32-release_IDF4.4.tar.gz
-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
-lib_extra_dirs = lib/libesp32
- lib/libesp32_lvgl
- lib/lib_basic
- lib/lib_i2c
- lib/lib_ssl
- lib/lib_display
-lib_ignore =
- NimBLE-Arduino
- TTGO TWatch Library
- ESP32-HomeKit
- Micro-RTSP
-
; *** Debug version used for PlatformIO Home Project Inspection
[env:tasmota-debug]
build_type = debug
@@ -93,8 +64,7 @@ build_flags = ${env:tasmota32_base.build_flags}
[env:tasmota32solo1-ocd]
;build_type = debug
extends = env:tasmota32_base
-platform_packages = ${core32.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
+platform_packages = ${core32solo1.platform_packages}
board = esp32_solo1_4M
debug_tool = esp-prog
upload_protocol = esp-prog
diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini
index 015897d1e..415722e76 100644
--- a/platformio_tasmota_env32.ini
+++ b/platformio_tasmota_env32.ini
@@ -33,6 +33,20 @@ 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
+ -Wnonnull-compare
+build_flags = ${env:tasmota32_base.build_flags}
+ -Wno-switch-unreachable
+ -Wno-stringop-overflow
[env:tasmota32]
extends = env:tasmota32_base
@@ -50,8 +64,7 @@ build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
[env:tasmota32solo1]
extends = env:tasmota32_base
-platform_packages = ${core32.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
+platform_packages = ${core32solo1.platform_packages}
build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
[env:tasmota32-webcam]
@@ -94,35 +107,29 @@ build_flags = ${env:tasmota32_base.build_flags} -DUSE_IR_REMOTE_FULL
lib_extra_dirs = lib/libesp32, lib/lib_basic
[env:tasmota32c3]
-extends = env:tasmota32_base
-board = esp32c3
-platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master
-platform_packages = ${core32.platform_packages}
- framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1rc1/framework-arduinoespressif32-release_IDF4.4.tar.gz
-build_unflags = ${env:tasmota32_base.build_unflags}
- -Wswitch-unreachable
- -Wstringop-overflow
- -Wincompatible-pointer-types
- -mtarget-align
- -DNDEBUG
-build_flags = ${env:tasmota32_base.build_flags}
- -Wno-switch-unreachable
- -Wno-stringop-overflow
+extends = env:tasmota32idf4
+board = esp32c3
+platform = ${env:tasmota32idf4.platform}
+platform_packages = ${env:tasmota32idf4.platform_packages}
+build_unflags = ${env:tasmota32idf4.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
-lib_ignore =
- TTGO TWatch Library
- ESP32-HomeKit
- Micro-RTSP
+; -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
+lib_ignore =
+ TTGO TWatch Library
+ ESP32-HomeKit
+ Micro-RTSP
[env:tasmota32-AF]
extends = env:tasmota32_base
diff --git a/tasmota/berry/drivers/i2c_axp192_M5StackCore2.be b/tasmota/berry/drivers/i2c_axp192_M5StackCore2.be
index 057c3d4e1..79e6ee7f6 100644
--- a/tasmota/berry/drivers/i2c_axp192_M5StackCore2.be
+++ b/tasmota/berry/drivers/i2c_axp192_M5StackCore2.be
@@ -3,7 +3,7 @@
-------------------------------------------------------------#
class AXP192_M5Stack_Core2 : AXP192
def init()
- super(self, AXP192).init()
+ super(self).init()
if self.wire
# Disable vbus hold limit
@@ -116,6 +116,20 @@ class AXP192_M5Stack_Core2 : AXP192
self.write8(0x12, self.read8(0x12) | 0x40) # set EXTEN to enable 5v boost
end
end
+
+ # Dimmer in percentage
+ def set_displaydimmer(x)
+ var v = tasmota.scale_uint(x, 0, 100, 2500, 3300)
+ self.set_lcd_voltage(v)
+ end
+
+ # respond to display events
+ def display(cmd, idx, payload, raw)
+ if cmd == "dim" || cmd == "power"
+ self.set_displaydimmer(idx)
+ end
+ end
+
end
axp = AXP192_M5Stack_Core2()
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/language/af_AF.h b/tasmota/language/af_AF.h
index 5c1a80e48..62ffd8920 100644
--- a/tasmota/language/af_AF.h
+++ b/tasmota/language/af_AF.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h
index f74e03c24..4c8478ea0 100644
--- a/tasmota/language/bg_BG.h
+++ b/tasmota/language/bg_BG.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h
index 17d163560..08e72f1ea 100644
--- a/tasmota/language/cs_CZ.h
+++ b/tasmota/language/cs_CZ.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h
index 1e0f05225..cc8080529 100644
--- a/tasmota/language/de_DE.h
+++ b/tasmota/language/de_DE.h
@@ -28,7 +28,7 @@
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
* Use online command Prefix to translate cmnd, stat and tele.
*
- * Updated until v9.5.0.9
+ * Updated until v10.0.0.1
\*********************************************************************/
//#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Herzschlag"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h
index f40d5108c..df517a383 100644
--- a/tasmota/language/el_GR.h
+++ b/tasmota/language/el_GR.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h
index 26e0d57d6..79eb011f1 100644
--- a/tasmota/language/en_GB.h
+++ b/tasmota/language/en_GB.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h
index a12da16ec..6ef4fa653 100644
--- a/tasmota/language/es_ES.h
+++ b/tasmota/language/es_ES.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h
index 205c73c4b..5dad0c998 100644
--- a/tasmota/language/fr_FR.h
+++ b/tasmota/language/fr_FR.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h
index 77f0f7582..569a0a830 100644
--- a/tasmota/language/fy_NL.h
+++ b/tasmota/language/fy_NL.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h
index 43464a51c..b77b75a23 100644
--- a/tasmota/language/he_HE.h
+++ b/tasmota/language/he_HE.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h
index 04a22efa8..713979b48 100644
--- a/tasmota/language/hu_HU.h
+++ b/tasmota/language/hu_HU.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h
index 7759f4710..f706ee9ad 100644
--- a/tasmota/language/it_IT.h
+++ b/tasmota/language/it_IT.h
@@ -28,7 +28,7 @@
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
* Use online command Prefix to translate cmnd, stat and tele.
*
- * Updated until v9.5.0.9 - Last update 16.10.2021
+ * Updated until v9.5.0.9 - Last update 03.11.2021
\*********************************************************************/
#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 - RX"
#define D_SENSOR_HRG15_TX "HRG15 - TX"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Battito cardiaco"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h
index 444e36c34..a4ce5eae0 100644
--- a/tasmota/language/ko_KO.h
+++ b/tasmota/language/ko_KO.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h
index af90f2c06..7076b545f 100644
--- a/tasmota/language/nl_NL.h
+++ b/tasmota/language/nl_NL.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h
index 8b9f119c2..52802b75c 100644
--- a/tasmota/language/pl_PL.h
+++ b/tasmota/language/pl_PL.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h
index c1b937a4f..4b59fce59 100644
--- a/tasmota/language/pt_BR.h
+++ b/tasmota/language/pt_BR.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h
index 3bd0d530c..a5bdc4974 100644
--- a/tasmota/language/pt_PT.h
+++ b/tasmota/language/pt_PT.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h
index b6dd915e0..d4ca37c23 100644
--- a/tasmota/language/ro_RO.h
+++ b/tasmota/language/ro_RO.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h
index d90cacc8d..25942817c 100644
--- a/tasmota/language/ru_RU.h
+++ b/tasmota/language/ru_RU.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "А"
diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h
index c7d4fb659..aa77fbaef 100644
--- a/tasmota/language/sk_SK.h
+++ b/tasmota/language/sk_SK.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h
index 7109033d3..1ff6c8108 100644
--- a/tasmota/language/sv_SE.h
+++ b/tasmota/language/sv_SE.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h
index b2a8a0fb3..301feed7e 100644
--- a/tasmota/language/tr_TR.h
+++ b/tasmota/language/tr_TR.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h
index 1bc9908c1..044eaf47e 100644
--- a/tasmota/language/uk_UA.h
+++ b/tasmota/language/uk_UA.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "А"
diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h
index 160e6d236..f31be5015 100644
--- a/tasmota/language/vi_VN.h
+++ b/tasmota/language/vi_VN.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h
index 26cf0606f..3bfed5647 100644
--- a/tasmota/language/zh_CN.h
+++ b/tasmota/language/zh_CN.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"
diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h
index 1991ba908..a82028e71 100644
--- a/tasmota/language/zh_TW.h
+++ b/tasmota/language/zh_TW.h
@@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
+#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "安培"
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 77278a658..2640d3de5 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -348,7 +348,6 @@
#define ZIGBEE_DISTINCT_TOPICS false // [SetOption89] Enable unique device topic based on Zigbee device ShortAddr
#define ZIGBEE_RMV_ZBRECEIVED false // [SetOption100] Remove ZbReceived form JSON message
#define ZIGBEE_INDEX_EP false // [SetOption101] Add the source endpoint as suffix to attributes, ex `Power3` instead of `Power` if sent from endpoint 3
-#define WATCHDOG_TASK_SECONDS 10 // [ESP32 only] Task Watchdog Timer (TWDT) time in seconds - detecting Tasmota running for a prolonged period of time without yielding with `esp_task_wdt_reset()`
/*********************************************************************************************\
* END OF SECTION 1
@@ -854,8 +853,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
@@ -1053,6 +1052,15 @@
//#define DEBUG_TASMOTA_SENSOR // Enable sensor debug messages
//#define USE_DEBUG_DRIVER // Use xdrv_99_debug.ino providing commands CpuChk, CfgXor, CfgDump, CfgPeek and CfgPoke
+/*********************************************************************************************\
+ * Profiling features
+\*********************************************************************************************/
+
+//#define USE_PROFILING // Enable profiling
+//#define PROFILE_THRESHOLD 70 // Minimum duration in milliseconds to start logging
+//#define USE_PROFILE_DRIVER // Enable driver profiling
+//#define USE_PROFILE_FUNCTION // Enable driver function profiling
+
/*********************************************************************************************\
* Optional firmware configurations
* Select none or just one for optional features and sensors as configured in tasmota_configurations.h
diff --git a/tasmota/settings.h b/tasmota/settings.h
index 8c903d6a4..45e3671e4 100644
--- a/tasmota/settings.h
+++ b/tasmota/settings.h
@@ -733,9 +733,10 @@ typedef struct {
uint8_t shd_leading_edge; // F5B
uint16_t shd_warmup_brightness; // F5C
uint8_t shd_warmup_time; // F5E
- uint8_t light_step_pixels; // F5F
+ uint8_t tcp_config; // F5F
+ uint8_t light_step_pixels; // F60
- uint8_t free_f5f[60]; // F60 - Decrement if adding new Setting variables just above and below
+ uint8_t free_f60[5f]; // F61 - Decrement if adding new Setting variables just above and below
// Only 32 bit boundary variables below
diff --git a/tasmota/support.ino b/tasmota/support.ino
index 0840bf5cf..20274005c 100644
--- a/tasmota/support.ino
+++ b/tasmota/support.ino
@@ -66,35 +66,6 @@ void OsWatchTicker(void)
}
}
-#ifdef ESP32
-#include "esp_task_wdt.h"
-void TWDTInit(void) {
- // enable Task Watchdog Timer
- esp_task_wdt_init(WATCHDOG_TASK_SECONDS, true);
- // if (ret != ESP_OK) { AddLog(LOG_LEVEL_ERROR, "HDW: cannot init Task WDT %i", ret); }
- esp_task_wdt_add(nullptr);
- // if (ret != ESP_OK) { AddLog(LOG_LEVEL_ERROR, "HDW: cannot start Task WDT %i", ret); }
-}
-
-void TWDTRestore(void) {
- // restore default WDT values
- esp_task_wdt_init(WATCHDOG_TASK_SECONDS, false);
-}
-
-void TWDTLoop(void) {
- esp_task_wdt_reset();
-}
-
-// custom handler
-extern "C" {
- void __attribute__((weak)) esp_task_wdt_isr_user_handler(void)
- {
- Serial.printf(">>>>>----------\n");
- }
-
-}
-#endif
-
void OsWatchInit(void)
{
oswatch_blocked_loop = RtcSettings.oswatch_blocked_loop;
@@ -1818,7 +1789,7 @@ uint32_t JsonParsePath(JsonParserObject *jobj, const char *spath, char delim, fl
* Serial
\*********************************************************************************************/
-String GetSerialConfig(void) {
+String GetSerialConfig(uint8_t serial_config) {
// Settings->serial_config layout
// b000000xx - 5, 6, 7 or 8 data bits
// b00000x00 - 1 or 2 stop bits
@@ -1827,26 +1798,63 @@ String GetSerialConfig(void) {
const static char kParity[] PROGMEM = "NEOI";
char config[4];
- config[0] = '5' + (Settings->serial_config & 0x3);
- config[1] = pgm_read_byte(&kParity[(Settings->serial_config >> 3) & 0x3]);
- config[2] = '1' + ((Settings->serial_config >> 2) & 0x1);
+ config[0] = '5' + (serial_config & 0x3);
+ config[1] = pgm_read_byte(&kParity[(serial_config >> 3) & 0x3]);
+ config[2] = '1' + ((serial_config >> 2) & 0x1);
config[3] = '\0';
return String(config);
}
-#if defined(ESP32) && CONFIG_IDF_TARGET_ESP32C3
-// temporary workaround, see https://github.com/espressif/arduino-esp32/issues/5287
-#include
-uint32_t GetSerialBaudrate(void) {
- uint32_t br;
- uart_get_baudrate(0, &br);
- return (br / 300) * 300; // Fix ESP32 strange results like 115201
+String GetSerialConfig(void) {
+ return GetSerialConfig(Settings->serial_config);
}
-#else
+
+int8_t ParseSerialConfig(const char *pstr)
+{
+ if (strlen(pstr) < 3)
+ return -1;
+
+ int8_t serial_config = (uint8_t)atoi(pstr);
+ if (serial_config < 5 || serial_config > 8)
+ return -1;
+ serial_config -= 5;
+
+ char parity = (pstr[1] & 0xdf);
+ if ('E' == parity) {
+ serial_config += 0x08; // Even parity
+ }
+ else if ('O' == parity) {
+ serial_config += 0x10; // Odd parity
+ }
+ else if ('N' != parity) {
+ return -1;
+ }
+
+ if ('2' == pstr[2]) {
+ serial_config += 0x04; // Stop bits 2
+ }
+ else if ('1' != pstr[2]) {
+ return -1;
+ }
+
+ return serial_config;
+}
+
+
+// workaround disabled 05.11.2021 solved with https://github.com/espressif/arduino-esp32/pull/5549
+//#if defined(ESP32) && CONFIG_IDF_TARGET_ESP32C3
+// temporary workaround, see https://github.com/espressif/arduino-esp32/issues/5287
+//#include
+//uint32_t GetSerialBaudrate(void) {
+// uint32_t br;
+// uart_get_baudrate(0, &br);
+// return (br / 300) * 300; // Fix ESP32 strange results like 115201
+//}
+//#else
uint32_t GetSerialBaudrate(void) {
return (Serial.baudRate() / 300) * 300; // Fix ESP32 strange results like 115201
}
-#endif
+//#endif
#ifdef ESP8266
void SetSerialSwap(void) {
diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino
index ca9dbe02b..3daea88a7 100644
--- a/tasmota/support_command.ino
+++ b/tasmota/support_command.ino
@@ -93,6 +93,10 @@ void ResponseCmndFloat(float value, uint32_t decimals) {
Response_P(PSTR("{\"%s\":%*_f}"), XdrvMailbox.command, decimals, &value); // Return float value without quotes
}
+void ResponseCmndIdxFloat(float value, uint32_t decimals) {
+ Response_P(PSTR("{\"%s%d\":%*_f}"), XdrvMailbox.command, XdrvMailbox.index, decimals, &value); // Return float value without quotes
+}
+
void ResponseCmndIdxNumber(int value) {
Response_P(S_JSON_COMMAND_INDEX_NVALUE, XdrvMailbox.command, XdrvMailbox.index, value);
}
@@ -1521,28 +1525,8 @@ void CmndSerialConfig(void)
}
}
else if ((XdrvMailbox.payload >= 5) && (XdrvMailbox.payload <= 8)) {
- uint8_t serial_config = XdrvMailbox.payload -5; // Data bits 5, 6, 7 or 8, No parity and 1 stop bit
-
- bool valid = true;
- char parity = (XdrvMailbox.data[1] & 0xdf);
- if ('E' == parity) {
- serial_config += 0x08; // Even parity
- }
- else if ('O' == parity) {
- serial_config += 0x10; // Odd parity
- }
- else if ('N' != parity) {
- valid = false;
- }
-
- if ('2' == XdrvMailbox.data[2]) {
- serial_config += 0x04; // Stop bits 2
- }
- else if ('1' != XdrvMailbox.data[2]) {
- valid = false;
- }
-
- if (valid) {
+ int8_t serial_config = ParseSerialConfig(XdrvMailbox.data);
+ if (serial_config >= 0) {
SetSerialConfig(serial_config);
}
}
diff --git a/tasmota/support_profiling.ino b/tasmota/support_profiling.ino
index fa2e6f764..70bb0585e 100644
--- a/tasmota/support_profiling.ino
+++ b/tasmota/support_profiling.ino
@@ -17,16 +17,18 @@
along with this program. If not, see .
*/
-//#define USE_PROFILING
-
-#define PROFILE_THRESHOLD 70 // Minimum duration in milliseconds to start logging
-//#define USE_PROFILE_DRIVER
-#define USE_PROFILE_FUNCTION
-
/*********************************************************************************************\
* Profiling features
\*********************************************************************************************/
+// Moved to my_user_config.h (and user_config_override.h)
+//#define USE_PROFILING // Enable profiling
+//#define PROFILE_THRESHOLD 70 // Minimum duration in milliseconds to start logging
+//#define USE_PROFILE_DRIVER // Enable driver profiling
+//#define USE_PROFILE_FUNCTION // Enable driver function profiling
+
+/*
+// Moved to tasmota_globals.h fixing compile warnings
#ifndef USE_PROFILING
#undef USE_PROFILE_DRIVER
#undef USE_PROFILE_FUNCTION
@@ -43,13 +45,17 @@
#else
#define PROFILE_FUNCTION(DRIVER, INDEX, FUNCTION, START)
#endif // USE_PROFILE_DRIVER
-
+*/
/*********************************************************************************************\
* Profiling services
\*********************************************************************************************/
#ifdef USE_PROFILING
+#ifndef PROFILE_THRESHOLD
+#define PROFILE_THRESHOLD 70 // Minimum duration in milliseconds to start logging
+#endif
+
// Below needs to be inline with enum XsnsFunctions
const char kXSnsFunctions[] PROGMEM = "SETTINGS_OVERRIDE|PIN_STATE|MODULE_INIT|PRE_INIT|INIT|"
"LOOP|EVERY_50_MSECOND|EVERY_100_MSECOND|EVERY_200_MSECOND|EVERY_250_MSECOND|EVERY_SECOND|"
diff --git a/tasmota/support_rtc.ino b/tasmota/support_rtc.ino
index fe5fd10ec..03b7164fa 100644
--- a/tasmota/support_rtc.ino
+++ b/tasmota/support_rtc.ino
@@ -377,6 +377,12 @@ void RtcSecond(void)
static uint32_t last_sync = 0;
static bool mutex = false;
+ if ((TasmotaGlobal.init_state >= INIT_GPIOS) && PinUsed(GPIO_HEARTBEAT)) {
+ digitalWrite(Pin(GPIO_HEARTBEAT), ~TasmotaGlobal.heartbeat_inverted &1);
+ delayMicroseconds(50);
+ digitalWrite(Pin(GPIO_HEARTBEAT), TasmotaGlobal.heartbeat_inverted);
+ }
+
if (mutex) { return; }
if (Rtc.time_synced) {
diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino
index 4e30671d6..97fba4b6c 100644
--- a/tasmota/support_tasmota.ino
+++ b/tasmota/support_tasmota.ino
@@ -1766,6 +1766,10 @@ void GpioInit(void)
TasmotaGlobal.ledlnk_inverted = 1;
mpin -= (AGPIO(GPIO_LEDLNK_INV) - AGPIO(GPIO_LEDLNK));
}
+ else if (mpin == AGPIO(GPIO_HEARTBEAT_INV)) {
+ TasmotaGlobal.heartbeat_inverted = 1;
+ mpin -= (AGPIO(GPIO_HEARTBEAT_INV) - AGPIO(GPIO_HEARTBEAT));
+ }
else if ((mpin >= AGPIO(GPIO_PWM1_INV)) && (mpin < (AGPIO(GPIO_PWM1_INV) + MAX_PWMS))) {
bitSet(TasmotaGlobal.pwm_inverted, mpin - AGPIO(GPIO_PWM1_INV));
mpin -= (AGPIO(GPIO_PWM1_INV) - AGPIO(GPIO_PWM1));
@@ -1891,6 +1895,11 @@ void GpioInit(void)
#endif // ESP8266
}
+ if (PinUsed(GPIO_HEARTBEAT)) {
+ pinMode(Pin(GPIO_HEARTBEAT), OUTPUT);
+ digitalWrite(Pin(GPIO_HEARTBEAT), TasmotaGlobal.heartbeat_inverted);
+ }
+
// Digital input
for (uint32_t i = 0; i < MAX_SWITCHES; i++) {
if (PinUsed(GPIO_INPUT, i)) {
diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h
index ea858c21b..92803ca87 100644
--- a/tasmota/tasmota.h
+++ b/tasmota/tasmota.h
@@ -73,7 +73,6 @@ const uint8_t MAX_XDRV_DRIVERS = 96; // Max number of allowed driver driv
const uint8_t MAX_XSNS_DRIVERS = 128; // Max number of allowed sensor drivers
const uint8_t MAX_I2C_DRIVERS = 96; // Max number of allowed i2c drivers
const uint8_t MAX_SHUTTERS = 4; // Max number of shutters
-const uint8_t MAX_SHUTTER_RELAYS = 8; // Max number of shutter relays
const uint8_t MAX_SHUTTER_KEYS = 4; // Max number of shutter keys or buttons
const uint8_t MAX_PCF8574 = 4; // Max number of PCF8574 devices
const uint8_t MAX_RULE_SETS = 3; // Max number of rule sets of size 512 characters
@@ -278,6 +277,8 @@ enum GetDateAndTimeOptions { DT_LOCAL, DT_UTC, DT_LOCALNOTZ, DT_DST, DT_STD, DT_
enum LoggingLevels {LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE};
+enum InitStates {INIT_NONE, INIT_GPIOS, INIT_DONE};
+
enum WifiConfigOptions {WIFI_RESTART, EX_WIFI_SMARTCONFIG, WIFI_MANAGER, EX_WIFI_WPSCONFIG, WIFI_RETRY, WIFI_WAIT, WIFI_SERIAL, WIFI_MANAGER_RESET_ONLY, MAX_WIFI_OPTION};
enum SwitchModeOptions {TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE, TOGGLEMULTI,
diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino
index b4e13dc30..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
@@ -148,6 +149,8 @@ struct TasmotaGlobal_t {
bool enable_logging; // Enable logging
StateBitfield global_state; // Global states (currently Wifi and Mqtt) (8 bits)
+ uint8_t init_state; // Tasmota init state
+ uint8_t heartbeat_inverted; // Heartbeat pulse inverted flag
uint8_t spi_enabled; // SPI configured
uint8_t soft_spi_enabled; // Software SPI configured
uint8_t blinks; // Number of LED blinks
@@ -317,9 +320,6 @@ void setup(void) {
SettingsLoad();
SettingsDelta();
-#ifdef ESP32
-// TWDTInit(); // Start Task WDT for ESP32 - FreeRTOS only
-#endif
OsWatchInit();
TasmotaGlobal.seriallog_level = Settings->seriallog_level;
@@ -430,6 +430,8 @@ void setup(void) {
XdrvCall(FUNC_PRE_INIT);
XsnsCall(FUNC_PRE_INIT);
+ TasmotaGlobal.init_state = INIT_GPIOS;
+
SetPowerOnState();
WifiConnect();
@@ -512,9 +514,6 @@ void Scheduler(void) {
#endif // USE_DISCOVERY
#endif // ESP8266
-#ifdef ESP32
-// TWDTLoop();
-#endif
OsWatchLoop();
ButtonLoop();
SwitchLoop();
diff --git a/tasmota/tasmota_globals.h b/tasmota/tasmota_globals.h
index 44342081b..aa9f97063 100644
--- a/tasmota/tasmota_globals.h
+++ b/tasmota/tasmota_globals.h
@@ -495,6 +495,23 @@ bool first_device_group_is_local = true;
#define SHOW_FREE_MEM(WHERE)
#endif
+#ifndef USE_PROFILING
+#undef USE_PROFILE_DRIVER
+#undef USE_PROFILE_FUNCTION
+#endif
+
+#ifdef USE_PROFILE_DRIVER
+#define PROFILE_DRIVER(DRIVER, FUNCTION, START) AddLogDriver(DRIVER, FUNCTION, START)
+#else
+#define PROFILE_DRIVER(DRIVER, FUNCTION, START)
+#endif // USE_PROFILE_DRIVER
+
+#ifdef USE_PROFILE_FUNCTION
+#define PROFILE_FUNCTION(DRIVER, INDEX, FUNCTION, START) AddLogFunction(DRIVER, INDEX, FUNCTION, START)
+#else
+#define PROFILE_FUNCTION(DRIVER, INDEX, FUNCTION, START)
+#endif // USE_PROFILE_DRIVER
+
/*********************************************************************************************\
* Macro for SetOption synonyms
*
diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h
index 8b5ffae8a..0de887e9c 100644
--- a/tasmota/tasmota_template.h
+++ b/tasmota/tasmota_template.h
@@ -175,6 +175,7 @@ enum UserSelectablePins {
GPIO_BL0939_RX, // BL0939 Serial interface (Dual R3 v2)
GPIO_BL0942_RX, // BL0942 Serial interface
GPIO_HM330X_SET, // HM330X SET pin (sleep when low)
+ GPIO_HEARTBEAT, GPIO_HEARTBEAT_INV,
GPIO_SENSOR_END };
enum ProgramSelectablePins {
@@ -369,7 +370,8 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_VINDRIKTNING_RX "|"
D_SENSOR_BL0939_RX "|"
D_SENSOR_BL0942_RX "|"
- D_SENSOR_HM330X_SET
+ D_SENSOR_HM330X_SET "|"
+ D_SENSOR_HEARTBEAT "|" D_SENSOR_HEARTBEAT "_i|"
;
const char kSensorNamesFixed[] PROGMEM =
@@ -428,6 +430,8 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#endif
AGPIO(GPIO_OUTPUT_HI), // Fixed output high
AGPIO(GPIO_OUTPUT_LO), // Fixed output low
+ AGPIO(GPIO_HEARTBEAT), // Every second pulsed high
+ AGPIO(GPIO_HEARTBEAT_INV), // Every second pulsed low
#ifdef USE_FTC532
AGPIO(GPIO_FTC532), // FTC532 touch input
#endif
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index c64d5eb5d..cab94ba46 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -2794,9 +2794,6 @@ void HandleUploadLoop(void) {
Web.upload_error = 2; // Not enough space
return;
}
-#ifdef ESP32
-// TWDTLoop();
-#endif
if (upload.totalSize && !(upload.totalSize % 102400)) {
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_UPLOAD "Progress %d kB"), upload.totalSize / 1024);
}
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_discovery.ino b/tasmota/xdrv_12_discovery.ino
index 1f07488a8..3ade73dbb 100644
--- a/tasmota/xdrv_12_discovery.ino
+++ b/tasmota/xdrv_12_discovery.ino
@@ -106,12 +106,11 @@ void TasDiscoverMessage(void) {
#ifdef USE_SHUTTER
if (Settings->flag3.shutter_mode) {
for (uint32_t k = 0; k < MAX_SHUTTERS; k++) {
- if (0 == Settings->shutter_startrelay[k]) {
- break;
+ if (Settings->shutter_startrelay[k] > 0) {
+ Shutter[Settings->shutter_startrelay[k]-1] = Shutter[Settings->shutter_startrelay[k]] = 1;
} else {
- if (Settings->shutter_startrelay[k] > 0 && Settings->shutter_startrelay[k] <= MAX_SHUTTER_RELAYS) {
- Shutter[Settings->shutter_startrelay[k]-1] = Shutter[Settings->shutter_startrelay[k]] = 1;
- }
+ // terminate loop at first INVALID Settings->shutter_startrelay[i].
+ break;
}
}
}
@@ -300,4 +299,4 @@ bool Xdrv12(uint8_t function) {
return result;
}
-#endif // USE_TASMOTA_DISCOVERY
\ No newline at end of file
+#endif // USE_TASMOTA_DISCOVERY
diff --git a/tasmota/xdrv_12_home_assistant.ino b/tasmota/xdrv_12_home_assistant.ino
index ddfb29923..e57981677 100644
--- a/tasmota/xdrv_12_home_assistant.ino
+++ b/tasmota/xdrv_12_home_assistant.ino
@@ -1,18 +1,14 @@
/*
xdrv_12_home_assistant.ino - home assistant support for Tasmota
-
Copyright (C) 2021 Erik Montnemery, Federico Leoni and Theo Arends
-
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 .
*/
@@ -259,12 +255,11 @@ void HassDiscoverMessage(void) {
#ifdef USE_SHUTTER
if (Settings->flag3.shutter_mode) {
for (uint32_t k = 0; k < MAX_SHUTTERS; k++) {
- if (0 == Settings->shutter_startrelay[k]) {
- break;
+ if (Settings->shutter_startrelay[k] > 0) {
+ Shutter[Settings->shutter_startrelay[k]-1] = Shutter[Settings->shutter_startrelay[k]] = 1;
} else {
- if (Settings->shutter_startrelay[k] > 0 && Settings->shutter_startrelay[k] <= MAX_SHUTTER_RELAYS) {
- Shutter[Settings->shutter_startrelay[k]-1] = Shutter[Settings->shutter_startrelay[k]] = 1;
- }
+ // terminate loop at first INVALID Settings->shutter_startrelay[i].
+ break;
}
}
}
@@ -441,7 +436,7 @@ void HAssAnnounceRelayLight(void)
uint8_t TuyaRel = 0;
uint8_t TuyaRelInv = 0;
uint8_t TuyaDim = 0;
- uint8_t shutter_mask = 0;
+ power_t shutter_mask = 0;
#ifdef ESP8266
if (PWM_DIMMER == TasmotaGlobal.module_type ) { PwmMod = true; } //
@@ -463,9 +458,12 @@ void HAssAnnounceRelayLight(void)
#ifdef USE_SHUTTER
if (Settings->flag3.shutter_mode) {
for (uint32_t i = 0; i < MAX_SHUTTERS; i++) {
- if (Settings->shutter_startrelay[i] > 0 && Settings->shutter_startrelay[i] <= MAX_SHUTTER_RELAYS) {
+ if (Settings->shutter_startrelay[i] > 0 ) {
bitSet(shutter_mask, Settings->shutter_startrelay[i] -1);
bitSet(shutter_mask, Settings->shutter_startrelay[i]);
+ } else {
+ // terminate loop at first INVALID Settings->shutter_startrelay[i].
+ break;
}
}
}
@@ -503,7 +501,7 @@ void HAssAnnounceRelayLight(void)
if (bitRead(shutter_mask, i-1)) {
// suppress shutter relays
-#ifdef USE_LIGHT
+#ifdef USE_LIGHT
} else if ((i < Light.device) && !RelayX) {
err_flag = true;
AddLog(LOG_LEVEL_ERROR, PSTR("%s"), kHAssError2);
@@ -1003,7 +1001,7 @@ void HAssAnnounceShutters(void)
snprintf_P(unique_id, sizeof(unique_id), PSTR("%06X_SHT_%d"), ESP_getChipId(), i + 1);
snprintf_P(stopic, sizeof(stopic), PSTR(HOME_ASSISTANT_DISCOVERY_PREFIX "/cover/%s/config"), unique_id);
- if (Settings->flag.hass_discovery && Settings->flag3.shutter_mode && Settings->shutter_startrelay[i] > 0 && Settings->shutter_startrelay[i] <= MAX_SHUTTER_RELAYS) {
+ if (Settings->flag.hass_discovery && Settings->flag3.shutter_mode && Settings->shutter_startrelay[i] > 0) {
ShowTopic = 0; // Show the new generated topic
if (i > MAX_FRIENDLYNAMES) {
snprintf_P(stemp1, sizeof(stemp1), PSTR("%s Shutter %d"), SettingsText(SET_DEVICENAME), i + 1);
@@ -1025,6 +1023,9 @@ void HAssAnnounceShutters(void)
TryResponseAppend_P(HASS_DISCOVER_DEVICE_INFO_SHORT, unique_id, ESP_getChipId());
TryResponseAppend_P(PSTR("}"));
+ } else {
+ // terminate loop at first INVALID Settings->shutter_startrelay[i].
+ break;
}
TasmotaGlobal.masterlog_level = ShowTopic;
diff --git a/tasmota/xdrv_13_display.ino b/tasmota/xdrv_13_display.ino
index 123d40276..da4439f61 100755
--- a/tasmota/xdrv_13_display.ino
+++ b/tasmota/xdrv_13_display.ino
@@ -1861,6 +1861,10 @@ void DisplaySetPower(void)
XdspCall(FUNC_DISPLAY_POWER);
} else {
renderer->DisplayOnff(disp_power);
+#ifdef USE_BERRY
+ // still call Berry virtual display in case it is not managed entirely by renderer
+ Xdsp18(FUNC_DISPLAY_POWER);
+#endif // USE_BERRY
}
}
}
@@ -1961,6 +1965,10 @@ void ApplyDisplayDimmer(void) {
}
if (renderer) {
renderer->dim8(dimmer8, dimmer8_gamma); // provide 8 bits and gamma corrected dimmer in 8 bits
+#ifdef USE_BERRY
+ // still call Berry virtual display in case it is not managed entirely by renderer
+ Xdsp18(FUNC_DISPLAY_DIM);
+#endif // USE_BERRY
} else {
XdspCall(FUNC_DISPLAY_DIM);
}
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..6ba8535f7 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));
}
diff --git a/tasmota/xdrv_39_thermostat.ino b/tasmota/xdrv_39_thermostat.ino
index e45ef93f9..d016c3edc 100644
--- a/tasmota/xdrv_39_thermostat.ino
+++ b/tasmota/xdrv_39_thermostat.ino
@@ -1379,7 +1379,7 @@ void CmndThermostatModeSet(void)
Thermostat[ctr_output].timestamp_input_on = 0; // Reset last manual switch timer if command set externally
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].status.thermostat_mode);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].status.thermostat_mode);
}
}
@@ -1395,7 +1395,7 @@ void CmndClimateModeSet(void)
Thermostat[ctr_output].time_ctr_checkpoint = TasmotaGlobal.uptime;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].status.climate_mode);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].status.climate_mode);
}
}
@@ -1422,7 +1422,7 @@ void CmndTempFrostProtectSet(void)
else {
value = Thermostat[ctr_output].temp_frost_protect;
}
- ResponseCmndFloat((float)value / 10, 1);
+ ResponseCmndIdxFloat((float)value / 10, 1);
}
}
@@ -1444,7 +1444,7 @@ void CmndControllerModeSet(void)
Thermostat[ctr_output].time_ctr_checkpoint = 0;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].status.controller_mode);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].status.controller_mode);
}
}
@@ -1459,7 +1459,7 @@ void CmndInputSwitchSet(void)
Thermostat[ctr_output].timestamp_input_on = TasmotaGlobal.uptime;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].status.input_switch_number);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].status.input_switch_number);
}
}
@@ -1470,7 +1470,7 @@ void CmndInputSwitchUse(void)
if (XdrvMailbox.data_len > 0) {
Thermostat[ctr_output].status.use_input = (uint32_t)(XdrvMailbox.payload);
}
- ResponseCmndNumber((int)Thermostat[ctr_output].status.use_input);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].status.use_input);
}
}
@@ -1484,7 +1484,7 @@ void CmndSensorInputSet(void)
Thermostat[ctr_output].status.sensor_type = value;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].status.sensor_type);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].status.sensor_type);
}
}
@@ -1498,7 +1498,7 @@ void CmndOutputRelaySet(void)
Thermostat[ctr_output].status.output_relay_number = value;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].status.output_relay_number);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].status.output_relay_number);
}
}
@@ -1512,7 +1512,7 @@ void CmndTimeAllowRampupSet(void)
Thermostat[ctr_output].time_allow_rampup = (uint16_t)value;
}
}
- ResponseCmndNumber((int)((uint32_t)Thermostat[ctr_output].time_allow_rampup));
+ ResponseCmndIdxNumber((int)((uint32_t)Thermostat[ctr_output].time_allow_rampup));
}
}
@@ -1526,7 +1526,7 @@ void CmndTempFormatSet(void)
Thermostat[ctr_output].status.temp_format = value;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].status.temp_format);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].status.temp_format);
}
}
@@ -1564,7 +1564,7 @@ void CmndTempMeasuredSet(void)
else {
value = Thermostat[ctr_output].temp_measured;
}
- ResponseCmndFloat((float)value / 10, 1);
+ ResponseCmndIdxFloat((float)value / 10, 1);
}
}
@@ -1592,7 +1592,7 @@ void CmndTempTargetSet(void)
else {
value = Thermostat[ctr_output].temp_target_level;
}
- ResponseCmndFloat((float)value / 10, 1);
+ ResponseCmndIdxFloat((float)value / 10, 1);
}
}
@@ -1607,7 +1607,7 @@ void CmndTempMeasuredGrdRead(void)
else {
value = Thermostat[ctr_output].temp_measured_gradient;
}
- ResponseCmndFloat(((float)value) / 1000, 1);
+ ResponseCmndIdxFloat(((float)value) / 1000, 1);
}
}
@@ -1621,7 +1621,7 @@ void CmndStateEmergencySet(void)
Thermostat[ctr_output].diag.state_emergency = (uint16_t)value;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].diag.state_emergency);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].diag.state_emergency);
}
}
@@ -1635,7 +1635,7 @@ void CmndTimeManualToAutoSet(void)
Thermostat[ctr_output].time_manual_to_auto = (uint16_t)value;
}
}
- ResponseCmndNumber((int)((uint32_t)Thermostat[ctr_output].time_manual_to_auto));
+ ResponseCmndIdxNumber((int)((uint32_t)Thermostat[ctr_output].time_manual_to_auto));
}
}
@@ -1649,7 +1649,7 @@ void CmndPropBandSet(void)
Thermostat[ctr_output].val_prop_band = value;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].val_prop_band);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].val_prop_band);
}
}
@@ -1663,7 +1663,7 @@ void CmndTimeResetSet(void)
Thermostat[ctr_output].time_reset = value;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].time_reset);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].time_reset);
}
}
@@ -1671,7 +1671,7 @@ void CmndTimePiProportRead(void)
{
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= THERMOSTAT_CONTROLLER_OUTPUTS)) {
uint8_t ctr_output = XdrvMailbox.index - 1;
- ResponseCmndNumber((int)Thermostat[ctr_output].time_proportional_pi);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].time_proportional_pi);
}
}
@@ -1679,7 +1679,7 @@ void CmndTimePiIntegrRead(void)
{
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= THERMOSTAT_CONTROLLER_OUTPUTS)) {
uint8_t ctr_output = XdrvMailbox.index - 1;
- ResponseCmndNumber((int)Thermostat[ctr_output].time_integral_pi);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].time_integral_pi);
}
}
@@ -1693,7 +1693,7 @@ void CmndTimePiCycleSet(void)
Thermostat[ctr_output].time_pi_cycle = (uint16_t)value;
}
}
- ResponseCmndNumber((int)((uint32_t)Thermostat[ctr_output].time_pi_cycle));
+ ResponseCmndIdxNumber((int)((uint32_t)Thermostat[ctr_output].time_pi_cycle));
}
}
@@ -1720,7 +1720,7 @@ void CmndTempAntiWindupResetSet(void)
else {
value = Thermostat[ctr_output].temp_reset_anti_windup;
}
- ResponseCmndFloat((float)value / 10, 1);
+ ResponseCmndIdxFloat((float)value / 10, 1);
}
}
@@ -1747,7 +1747,7 @@ void CmndTempHystSet(void)
else {
value = Thermostat[ctr_output].temp_hysteresis;
}
- ResponseCmndFloat((float)value / 10, 1);
+ ResponseCmndIdxFloat((float)value / 10, 1);
}
}
@@ -1762,7 +1762,7 @@ void CmndPerfLevelAutotune(void)
Thermostat[ctr_output].status.autotune_perf_mode = value;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].status.autotune_perf_mode);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].status.autotune_perf_mode);
}
}
#endif // USE_PI_AUTOTUNING
@@ -1777,7 +1777,7 @@ void CmndTimeMaxActionSet(void)
Thermostat[ctr_output].time_max_action = (uint16_t)value;
}
}
- ResponseCmndNumber((int)((uint32_t)Thermostat[ctr_output].time_max_action));
+ ResponseCmndIdxNumber((int)((uint32_t)Thermostat[ctr_output].time_max_action));
}
}
@@ -1791,7 +1791,7 @@ void CmndTimeMinActionSet(void)
Thermostat[ctr_output].time_min_action = (uint16_t)value;
}
}
- ResponseCmndNumber((int)((uint32_t)Thermostat[ctr_output].time_min_action));
+ ResponseCmndIdxNumber((int)((uint32_t)Thermostat[ctr_output].time_min_action));
}
}
@@ -1805,7 +1805,7 @@ void CmndTimeSensLostSet(void)
Thermostat[ctr_output].time_sens_lost = (uint16_t)value;
}
}
- ResponseCmndNumber((int)((uint32_t)Thermostat[ctr_output].time_sens_lost));
+ ResponseCmndIdxNumber((int)((uint32_t)Thermostat[ctr_output].time_sens_lost));
}
}
@@ -1819,7 +1819,7 @@ void CmndTimeMinTurnoffActionSet(void)
Thermostat[ctr_output].time_min_turnoff_action = (uint16_t)value;
}
}
- ResponseCmndNumber((int)((uint32_t)Thermostat[ctr_output].time_min_turnoff_action));
+ ResponseCmndIdxNumber((int)((uint32_t)Thermostat[ctr_output].time_min_turnoff_action));
}
}
@@ -1846,7 +1846,7 @@ void CmndTempRupDeltInSet(void)
else {
value = Thermostat[ctr_output].temp_rampup_delta_in;
}
- ResponseCmndFloat((float)value / 10, 1);
+ ResponseCmndIdxFloat((float)value / 10, 1);
}
}
@@ -1873,7 +1873,7 @@ void CmndTempRupDeltOutSet(void)
else {
value = Thermostat[ctr_output].temp_rampup_delta_out;
}
- ResponseCmndFloat((float)value / 10, 1);
+ ResponseCmndIdxFloat((float)value / 10, 1);
}
}
@@ -1887,7 +1887,7 @@ void CmndTimeRampupMaxSet(void)
Thermostat[ctr_output].time_rampup_max = (uint16_t)value;
}
}
- ResponseCmndNumber((int)((uint32_t)Thermostat[ctr_output].time_rampup_max));
+ ResponseCmndIdxNumber((int)((uint32_t)Thermostat[ctr_output].time_rampup_max));
}
}
@@ -1901,7 +1901,7 @@ void CmndTimeRampupCycleSet(void)
Thermostat[ctr_output].time_rampup_cycle = (uint16_t)value;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].time_rampup_cycle);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].time_rampup_cycle);
}
}
@@ -1928,7 +1928,7 @@ void CmndTempRampupPiAccErrSet(void)
else {
value = Thermostat[ctr_output].temp_rampup_pi_acc_error;
}
- ResponseCmndFloat((float)value / 100, 1);
+ ResponseCmndIdxFloat((float)value / 100, 1);
}
}
@@ -1942,7 +1942,7 @@ void CmndDiagnosticModeSet(void)
Thermostat[ctr_output].diag.diagnostic_mode = value;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].diag.diagnostic_mode);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].diag.diagnostic_mode);
}
}
@@ -1966,7 +1966,7 @@ void CmndCtrDutyCycleRead(void)
value = 0;
}
}
- ResponseCmndNumber((int)value);
+ ResponseCmndIdxNumber((int)value);
}
}
@@ -1980,7 +1980,7 @@ void CmndEnableOutputSet(void)
Thermostat[ctr_output].status.enable_output = value;
}
}
- ResponseCmndNumber((int)Thermostat[ctr_output].status.enable_output);
+ ResponseCmndIdxNumber((int)Thermostat[ctr_output].status.enable_output);
}
}
diff --git a/tasmota/xdrv_41_tcp_bridge.ino b/tasmota/xdrv_41_tcp_bridge.ino
index 3d4d3bec5..d9b6f280d 100644
--- a/tasmota/xdrv_41_tcp_bridge.ino
+++ b/tasmota/xdrv_41_tcp_bridge.ino
@@ -41,11 +41,11 @@ IPAddress ip_filter;
TasmotaSerial *TCPSerial = nullptr;
const char kTCPCommands[] PROGMEM = "TCP" "|" // prefix
- "Start" "|" "Baudrate"
+ "Start" "|" "Baudrate" "|" "Config"
;
void (* const TCPCommand[])(void) PROGMEM = {
- &CmndTCPStart, &CmndTCPBaudrate
+ &CmndTCPStart, &CmndTCPBaudrate, &CmndTCPConfig
};
//
@@ -136,12 +136,14 @@ void TCPLoop(void)
/********************************************************************************************/
void TCPInit(void) {
if (PinUsed(GPIO_TCP_RX) && PinUsed(GPIO_TCP_TX)) {
+ if (0 == (0x80 & Settings->tcp_config)) // !0x80 means unitialized
+ Settings->tcp_config = 0x80 | ParseSerialConfig("8N1"); // default as 8N1 for backward compatibility
tcp_buf = (uint8_t*) malloc(TCP_BRIDGE_BUF_SIZE);
if (!tcp_buf) { AddLog(LOG_LEVEL_ERROR, PSTR(D_LOG_TCP "could not allocate buffer")); return; }
if (!Settings->tcp_baudrate) { Settings->tcp_baudrate = 115200 / 1200; }
TCPSerial = new TasmotaSerial(Pin(GPIO_TCP_RX), Pin(GPIO_TCP_TX), TasmotaGlobal.seriallog_level ? 1 : 2, 0, TCP_BRIDGE_BUF_SIZE); // set a receive buffer of 256 bytes
- TCPSerial->begin(Settings->tcp_baudrate * 1200);
+ TCPSerial->begin(Settings->tcp_baudrate * 1200, 0x7F & Settings->tcp_config);
if (TCPSerial->hardwareSerial()) {
ClaimSerial();
}
@@ -197,11 +199,22 @@ void CmndTCPBaudrate(void) {
if ((XdrvMailbox.payload >= 1200) && (XdrvMailbox.payload <= 115200)) {
XdrvMailbox.payload /= 1200; // Make it a valid baudrate
Settings->tcp_baudrate = XdrvMailbox.payload;
- TCPSerial->begin(Settings->tcp_baudrate * 1200); // Reinitialize serial port with new baud rate
+ TCPSerial->begin(Settings->tcp_baudrate * 1200, 0x7F & Settings->tcp_config); // Reinitialize serial port with new baud rate
}
ResponseCmndNumber(Settings->tcp_baudrate * 1200);
}
+void CmndTCPConfig(void) {
+ if (XdrvMailbox.data_len > 0) {
+ uint8_t serial_config = ParseSerialConfig(XdrvMailbox.data);
+ if (serial_config >= 0) {
+ Settings->tcp_config = 0x80 | serial_config; // default 0x00 should be 8N1
+ TCPSerial->begin(Settings->tcp_baudrate * 1200, 0x7F & Settings->tcp_config); // Reinitialize serial port with new config
+ }
+ }
+ ResponseCmndChar_P(GetSerialConfig(0x7F & Settings->tcp_config).c_str());
+}
+
/*********************************************************************************************\
* Interface
\*********************************************************************************************/
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..8d2119040 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
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 c03fa0f03..f98a5820a 100644
--- a/tasmota/xdrv_52_3_berry_tasmota.ino
+++ b/tasmota/xdrv_52_3_berry_tasmota.ino
@@ -308,7 +308,6 @@ extern "C" {
// ESP object
int32_t l_yield(bvm *vm);
int32_t l_yield(bvm *vm) {
-// TWDTLoop(); // reset watchdog
BrTimeoutYield(); // reset timeout
be_return_nil(vm);
}
@@ -546,8 +545,6 @@ void berry_log(const char * berry_buf) {
if (berry.log.log.length() >= BERRY_MAX_LOGS) {
berry.log.log.remove(berry.log.log.head());
}
- } else {
-// TWDTLoop(); // if REPL, printing resets the WDT
}
// AddLog(LOG_LEVEL_INFO, PSTR("[Add to log] %s"), berry_buf);
berry.log.addString(berry_buf, pre_delimiter, "\n");
diff --git a/tasmota/xdrv_52_3_berry_unishox.ino b/tasmota/xdrv_52_3_berry_unishox.ino
new file mode 100644
index 000000000..a7664a960
--- /dev/null
+++ b/tasmota/xdrv_52_3_berry_unishox.ino
@@ -0,0 +1,94 @@
+/*
+ xdrv_52_3_berry_unishox.ino - Berry scripting language, native fucnctions
+
+ Copyright (C) 2021 Stephan Hadinger, Berry language by Guan Wenliang https://github.com/Skiars/berry
+
+ 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_BERRY
+
+#include
+
+#ifdef USE_UNISHOX_COMPRESSION
+
+extern Unishox compressor;
+
+/*********************************************************************************************\
+ * Native functions mapped to Berry functions
+ *
+ * import unishox
+ *
+ *
+\*********************************************************************************************/
+extern "C" {
+
+ int be_unishox_compress(bvm *vm);
+ int be_unishox_compress(bvm *vm) {
+ int32_t argc = be_top(vm); // Get the number of arguments
+ if (argc == 1 && be_isstring(vm, 1)) {
+ const char * s = be_tostring(vm, 1);
+ // do a dry-run to know the compressed size
+ int32_t compressed_size = compressor.unishox_compress(s, strlen(s), (char*) nullptr, 0);
+ if (compressed_size < 0) {
+ be_raise(vm, "internal_error", nullptr);
+ }
+ void * buf = be_pushbytes(vm, NULL, compressed_size);
+ if (compressed_size > 0) {
+ int32_t ret = compressor.unishox_compress(s, strlen(s), (char*) buf, compressed_size+5); // We expand by 4 the buffer size to avoid an error, but we are sure it will not overflow (see unishox implementation)
+ if (ret < 0 || ret != compressed_size) {
+ be_raisef(vm, "internal_error", "unishox size=%i ret=%i", compressed_size, ret);
+ }
+ }
+ be_return(vm);
+ }
+ be_raise(vm, kTypeError, nullptr);
+ }
+
+ int be_unishox_decompress(bvm *vm);
+ int be_unishox_decompress(bvm *vm) {
+ int32_t argc = be_top(vm); // Get the number of arguments
+ if (argc == 1 && be_isbytes(vm, 1)) {
+ size_t len;
+ const void * buf = be_tobytes(vm, 1, &len);
+ if (len == 0) {
+ be_pushstring(vm, "");
+ } else {
+ int32_t decomp_size = compressor.unishox_decompress((const char*)buf, len, (char*) nullptr, 0);
+ if (decomp_size < 0) {
+ be_raise(vm, "internal_error", nullptr);
+ }
+ if (decomp_size == 0) {
+ be_pushstring(vm, "");
+ } else {
+ void * buf_out = be_pushbuffer(vm, decomp_size);
+ int32_t ret = compressor.unishox_decompress((const char*)buf, len, (char*) buf_out, decomp_size);
+ if (ret < 0 || ret != decomp_size) {
+ be_raisef(vm, "internal_error", "unishox size=%i ret=%i", decomp_size, ret);
+ }
+ be_pushnstring(vm, (const char*) buf_out, decomp_size);
+ }
+ }
+ be_return(vm);
+ }
+ be_raise(vm, kTypeError, nullptr);
+ }
+
+}
+
+
+#endif // USE_UNISHOX_COMPRESSION
+
+#endif // USE_BERRY
diff --git a/tasmota/xdrv_52_3_berry_wire.ino b/tasmota/xdrv_52_3_berry_wire.ino
index 4f25aa00b..d453455a7 100644
--- a/tasmota/xdrv_52_3_berry_wire.ino
+++ b/tasmota/xdrv_52_3_berry_wire.ino
@@ -26,18 +26,36 @@
#include
// read the `bus` attribute and return `Wire` or `Wire1`
+// Can return nullptr reference if the bus is not initialized
TwoWire & getWire(bvm *vm);
TwoWire & getWire(bvm *vm) {
be_getmember(vm, 1, "bus");
int32_t bus = be_toint(vm, -1); // bus is 1 or 2
be_pop(vm, 1);
- if (!TasmotaGlobal.i2c_enabled_2) { bus = 1; }
- if (2 != bus) {
+ if (1 == bus && TasmotaGlobal.i2c_enabled) {
return Wire;
- } else {
+ } else if (2 == bus && TasmotaGlobal.i2c_enabled_2) {
return Wire1;
+ } else {
+ be_raise(vm, "configuration_error", "I2C bus not initiliazedd");
+ return *(TwoWire*)nullptr;
}
}
+
+bool I2cEnabled(bvm *vm);
+bool I2cEnabled(bvm *vm) {
+ be_getmember(vm, 1, "bus");
+ int32_t bus = be_toint(vm, -1); // bus is 1 or 2
+ be_pop(vm, 1);
+ if (1 == bus && TasmotaGlobal.i2c_enabled) {
+ return true;
+ } else if (2 == bus && TasmotaGlobal.i2c_enabled_2) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
int32_t getBus(bvm *vm); // 1 or 2
int32_t getBus(bvm *vm) {
be_getmember(vm, 1, "bus");
@@ -243,6 +261,14 @@ extern "C" {
}
be_raise(vm, kTypeError, nullptr);
}
+
+ // Berry: `enabled() -> bool` true if I2C bus is enabled
+ int32_t b_wire_enabled(struct bvm *vm);
+ int32_t b_wire_enabled(struct bvm *vm) {
+ bool en = I2cEnabled(vm);
+ be_pushbool(vm, en);
+ be_return(vm);
+ }
}
#endif // USE_I2C
diff --git a/tasmota/xdrv_52_9_berry.ino b/tasmota/xdrv_52_9_berry.ino
index 113866c6f..e8577b7aa 100644
--- a/tasmota/xdrv_52_9_berry.ino
+++ b/tasmota/xdrv_52_9_berry.ino
@@ -305,16 +305,14 @@ void BerryInit(void) {
bool berry_init_ok = false;
do {
berry.vm = be_vm_new(); /* create a virtual machine instance */
- be_set_obs_hook(berry.vm, &BerryObservability);
+ be_set_obs_hook(berry.vm, &BerryObservability); /* attach observability hook */
comp_set_named_gbl(berry.vm); /* Enable named globals in Berry compiler */
- comp_set_strict(berry.vm); /* Enable strict mode in Berry compiler */
- be_load_custom_libs(berry.vm);
+ comp_set_strict(berry.vm); /* Enable strict mode in Berry compiler, equivalent of `import strict` */
- // Register functions
- // be_regfunc(berry.vm, PSTR("log"), l_logInfo);
- // be_regfunc(berry.vm, PSTR("save"), l_save);
+ be_load_custom_libs(berry.vm); // load classes and modules
- // AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_BERRY "Berry function registered, RAM used=%u"), be_gc_memcount(berry.vm));
+ // Set the GC threshold to 3584 bytes to avoid the first useless GC
+ berry.vm->gc.threshold = 3584;
ret_code1 = be_loadstring(berry.vm, berry_prog);
if (ret_code1 != 0) {
diff --git a/tasmota/xdrv_54_lvgl.ino b/tasmota/xdrv_54_lvgl.ino
index 666ba912f..9d5855099 100644
--- a/tasmota/xdrv_54_lvgl.ino
+++ b/tasmota/xdrv_54_lvgl.ino
@@ -401,6 +401,9 @@ void start_lvgl(const char * uconfig) {
// Set the default background color of the display
// This is normally overriden by an opaque screen on top
#ifdef USE_BERRY
+ // By default set the display color to black and opacity to 100%
+ lv_disp_set_bg_color(NULL, lv_color_from_uint32(USE_LVGL_BG_DEFAULT));
+ lv_disp_set_bg_opa(NULL, LV_OPA_COVER);
lv_obj_set_style_bg_color(lv_scr_act(), lv_color_from_uint32(USE_LVGL_BG_DEFAULT), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(lv_scr_act(), LV_OPA_COVER, LV_PART_MAIN | LV_STATE_DEFAULT);
diff --git a/tasmota/xdrv_56_BM8563_RTC.ino b/tasmota/xdrv_56_BM8563_RTC.ino
index 1473da83c..9f8fd589b 100644
--- a/tasmota/xdrv_56_BM8563_RTC.ino
+++ b/tasmota/xdrv_56_BM8563_RTC.ino
@@ -1,7 +1,7 @@
/*
- xdrv_52_9_berry.ino - Berry scripting language
+ xdrv_56_BM8563_RTC.ino - BM8563 RTC
- Copyright (C) 2021 Stephan Hadinger, Berry language by Guan Wenliang https://github.com/Skiars/berry
+ Copyright (C) 2021 Stephan Hadinger and Theo Arends
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
@@ -17,9 +17,13 @@
along with this program. If not, see .
*/
-
#ifdef USE_I2C
#ifdef USE_BM8563
+/*********************************************************************************************\
+ * BM8563 - Real Time Clock
+ *
+ * I2C Address: 0x51 (Fixed in library as BM8563_ADRESS)
+\*********************************************************************************************/
#define XDRV_56 56
#define XI2C_59 59 // See I2CDEVICES.md
@@ -32,31 +36,7 @@ struct {
bool ntp_time_ok = false;
} bm8563_driver;
-/*********************************************************************************************\
- *
- *
-\*********************************************************************************************/
-void BM8563Detect(void) {
-#ifdef ESP32
- if (!I2cSetDevice(BM8563_ADRESS, 0)) {
- if (!I2cSetDevice(BM8563_ADRESS, 1)) { return; } // check on bus 1
- bm8563_driver.Rtc.setBus(1); // switch to bus 1
- I2cSetActiveFound(BM8563_ADRESS, "BM8563", 1);
- } else {
- I2cSetActiveFound(BM8563_ADRESS, "BM8563", 0);
- }
-#else
- if (!I2cSetDevice(BM8563_ADRESS)) { return; }
- I2cSetActiveFound(BM8563_ADRESS, "BM8563");
-#endif
-
- bm8563_driver.Rtc.begin();
- bm8563_driver.rtc_ready = true;
-}
-
-
uint32_t BM8563GetUtc(void) {
- if (!bm8563_driver.rtc_ready) return 0;
RTC_TimeTypeDef RTCtime;
// 1. read has errors ???
bm8563_driver.Rtc.GetTime(&RTCtime);
@@ -75,7 +55,6 @@ uint32_t BM8563GetUtc(void) {
}
void BM8563SetUtc(uint32_t epoch_time) {
- if (!bm8563_driver.rtc_ready) return;
TIME_T tm;
BreakTime(epoch_time, tm);
RTC_TimeTypeDef RTCtime;
@@ -92,7 +71,7 @@ void BM8563SetUtc(uint32_t epoch_time) {
}
void InitTimeFromRTC(void) {
- if (bm8563_driver.rtc_ready && Rtc.utc_time < START_VALID_TIME) {
+ if (Rtc.utc_time < START_VALID_TIME) {
// set rtc from chip
Rtc.utc_time = BM8563GetUtc();
@@ -102,7 +81,7 @@ void InitTimeFromRTC(void) {
Rtc.daylight_saving_time = RuleToTime(Settings->tflag[1], RtcTime.year);
Rtc.standard_time = RuleToTime(Settings->tflag[0], RtcTime.year);
AddLog(LOG_LEVEL_INFO, PSTR("I2C: Set time from BM8563 to RTC (" 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());
+ GetDateAndTime(DT_UTC).c_str(), GetDateAndTime(DT_DST).c_str(), GetDateAndTime(DT_STD).c_str());
if (Rtc.local_time < START_VALID_TIME) { // 2016-01-01
TasmotaGlobal.rules_flag.time_init = 1;
} else {
@@ -111,39 +90,53 @@ void InitTimeFromRTC(void) {
}
}
+void BM8563Detect(void) {
+#ifdef ESP32
+ if (!I2cSetDevice(BM8563_ADRESS, 0)) {
+ if (!I2cSetDevice(BM8563_ADRESS, 1)) { return; } // check on bus 1
+ bm8563_driver.Rtc.setBus(1); // switch to bus 1
+ I2cSetActiveFound(BM8563_ADRESS, "BM8563", 1);
+ } else {
+ I2cSetActiveFound(BM8563_ADRESS, "BM8563", 0);
+ }
+#else
+ if (!I2cSetDevice(BM8563_ADRESS)) { return; }
+ I2cSetActiveFound(BM8563_ADRESS, "BM8563");
+#endif
+
+ bm8563_driver.Rtc.begin();
+ bm8563_driver.rtc_ready = true;
+
+ InitTimeFromRTC();
+}
void BM8563EverySecond(void) {
- if (bm8563_driver.rtc_ready) {
- if (!bm8563_driver.ntp_time_ok && Rtc.utc_time > START_VALID_TIME && abs((int32_t)Rtc.utc_time - (int32_t)BM8563GetUtc()) > 3) {
- BM8563SetUtc(Rtc.utc_time);
- AddLog(LOG_LEVEL_INFO, PSTR("I2C: 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());
- bm8563_driver.ntp_time_ok = true;
- }
+ if (!bm8563_driver.ntp_time_ok && (Rtc.utc_time > START_VALID_TIME) && abs((int32_t)Rtc.utc_time - (int32_t)BM8563GetUtc()) > 3) {
+ BM8563SetUtc(Rtc.utc_time);
+ AddLog(LOG_LEVEL_INFO, PSTR("I2C: 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());
+ bm8563_driver.ntp_time_ok = true;
}
}
/*********************************************************************************************\
* Interface
\*********************************************************************************************/
-bool Xdrv56(uint8_t function)
-{
- bool result = false;
+
+bool Xdrv56(uint8_t function) {
if (!I2cEnabled(XI2C_59)) { return false; }
- switch (function) {
- // case FUNC_PRE_INIT: // we start Berry in pre_init so that other modules can call Berry in their init methods
- case FUNC_INIT:
- BM8563Detect();
- InitTimeFromRTC();
- break;
+ bool result = false;
- case FUNC_EVERY_SECOND:
- BM8563EverySecond();
- break;
-
- case FUNC_SAVE_BEFORE_RESTART:
- break;
+ if (FUNC_INIT == function) {
+ BM8563Detect();
+ }
+ else if (bm8563_driver.rtc_ready) {
+ switch (function) {
+ case FUNC_EVERY_SECOND:
+ BM8563EverySecond();
+ break;
+ }
}
return result;
}
diff --git a/tasmota/xdrv_81_esp32_webcam.ino b/tasmota/xdrv_81_esp32_webcam.ino
index 617af46fb..dca8ec936 100644
--- a/tasmota/xdrv_81_esp32_webcam.ino
+++ b/tasmota/xdrv_81_esp32_webcam.ino
@@ -81,8 +81,17 @@
#include "esp_camera.h"
#include "sensor.h"
#include "fb_gfx.h"
-#include "fd_forward.h"
-#include "fr_forward.h"
+
+#ifdef USE_FACE_DETECT
+ #if ESP_IDF_VERSION <= ESP_IDF_VERSION_VAL(4, 0, 0)
+ #include "fd_forward.h"
+ #include "fr_forward.h"
+// #pragma message("Face detection enabled")
+ #else
+ #pragma message("Face detection not supported from Tasmota with Arduino Core 2.0.x. Disabling")
+ #undef USE_FACE_DETECT
+ #endif
+#endif
bool HttpCheckPriviledgedAccess(bool);
extern ESP8266WebServer *Webserver;
diff --git a/tasmota/xdsp_18_berry_display.ino b/tasmota/xdsp_18_berry_display.ino
index 463868312..11875692e 100644
--- a/tasmota/xdsp_18_berry_display.ino
+++ b/tasmota/xdsp_18_berry_display.ino
@@ -32,19 +32,19 @@ bool Xdsp18(uint8_t function) {
switch (function) {
case FUNC_DISPLAY_INIT_DRIVER:
- result = callBerryEventDispatcher(PSTR("display"), PSTR("init_driver"), function, XdrvMailbox.data);
+ result = callBerryEventDispatcher(PSTR("display"), PSTR("init_driver"), 0, nullptr);
break;
case FUNC_DISPLAY_INIT:
- result = callBerryEventDispatcher(PSTR("display"), PSTR("init_driver"), function, XdrvMailbox.data);
+ result = callBerryEventDispatcher(PSTR("display"), PSTR("init_driver"), 0, nullptr);
break;
case FUNC_DISPLAY_MODEL:
- result = callBerryEventDispatcher(PSTR("display"), PSTR("model"), function, XdrvMailbox.data);
+ result = callBerryEventDispatcher(PSTR("display"), PSTR("model"), 0, nullptr);
break;
case FUNC_DISPLAY_DIM:
- result = callBerryEventDispatcher(PSTR("display"), PSTR("dim"), function, XdrvMailbox.data);
+ result = callBerryEventDispatcher(PSTR("display"), PSTR("dim"), GetDisplayDimmer(), nullptr);
break;
case FUNC_DISPLAY_POWER:
- result = callBerryEventDispatcher(PSTR("display"), PSTR("power"), function, XdrvMailbox.data);
+ result = callBerryEventDispatcher(PSTR("display"), PSTR("power"), disp_power ? GetDisplayDimmer() : 0, nullptr);
break;
}
return result;
diff --git a/tasmota/xsns_29_mcp230xx.ino b/tasmota/xsns_29_mcp230xx.ino
index 34f11c27d..64d5b1700 100644
--- a/tasmota/xsns_29_mcp230xx.ino
+++ b/tasmota/xsns_29_mcp230xx.ino
@@ -239,7 +239,7 @@ void MCP230xx_ApplySettings(void)
if (mcp230xx_port ? mcp230xx_outpinmapping[idx] > 7 : mcp230xx_outpinmapping[idx] < 8) {
uint8_t relay_no = TasmotaGlobal.devices_present - mcp230xx_outpincount + idx + 1;
if (mcp230xx_keepout_no_toggle >0) mcp230xx_keepout_no_toggle--;
- ExecuteCommandPower(relay_no, (reg_portpins[mcp230xx_port] >> (mcp230xx_outpinmapping[idx] & 7)) & 1, SRC_IGNORE);
+ ExecuteCommandPower(relay_no, ((reg_portpins[mcp230xx_port] >> (mcp230xx_outpinmapping[idx] & 7)) & 1) + 8, SRC_IGNORE);
}
}
}
diff --git a/tasmota/xsns_62_esp32_mi_ble.ino b/tasmota/xsns_62_esp32_mi_ble.ino
index cb9548e6e..973c1e604 100644
--- a/tasmota/xsns_62_esp32_mi_ble.ino
+++ b/tasmota/xsns_62_esp32_mi_ble.ino
@@ -2741,7 +2741,7 @@ void MI32ShowOneMISensor(){
sprintf(SensorTopic, "tele/tasmota_ble/%s",
id);
- MqttPublish(SensorTopic);
+ MqttPublish(SensorTopic, Settings->flag.mqtt_sensor_retain);
//AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, ResponseData());
}
MI32.mqttCurrentSingleSlot++;
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/tools/lv_berry/lv_funcs.h b/tools/lv_berry/lv_funcs.h
index 6d8f83b00..31367d8bf 100644
--- a/tools/lv_berry/lv_funcs.h
+++ b/tools/lv_berry/lv_funcs.h
@@ -501,6 +501,9 @@ void lv_draw_polygon(const lv_point_t points[], uint16_t point_cnt, const lv_are
lv_theme_t * lv_theme_default_init(lv_disp_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font)
bool lv_theme_default_is_inited(void)
+// ../../lib/libesp32_lvgl/LVGL8/src/extra/themes/mono/lv_theme_mono.h
+lv_theme_t * lv_theme_mono_init(lv_disp_t * disp, bool dark_bg, const lv_font_t * font)
+
// ../../lib/libesp32_lvgl/LVGL8/src/extra/widgets/chart/lv_chart.h
lv_obj_t * lv_chart_create(lv_obj_t * parent)
void lv_chart_set_type(lv_obj_t * obj, lv_chart_type_t type)
diff --git a/tools/lv_berry/preprocessor.py b/tools/lv_berry/preprocessor.py
index 7ae92188b..216a726fb 100644
--- a/tools/lv_berry/preprocessor.py
+++ b/tools/lv_berry/preprocessor.py
@@ -61,6 +61,7 @@ lv_fun_globs = [
"extra/widgets/spinbox/*.h",
"extra/widgets/spinner/*.h",
"extra/themes/default/*.h",
+ "extra/themes/mono/*.h",
"core/*.h",
"draw/*.h",
"misc/lv_style_gen.h",
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