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