From 76df8580a1db4b9634f0030ed59c037f297ec9fc Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 20 May 2022 17:00:56 +0200
Subject: [PATCH 01/17] Fix safeboot compilation on windows
---
pio-tools/post_esp32.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/pio-tools/post_esp32.py b/pio-tools/post_esp32.py
index 2e919391b..3678cbf85 100644
--- a/pio-tools/post_esp32.py
+++ b/pio-tools/post_esp32.py
@@ -39,7 +39,7 @@ FRAMEWORK_DIR = platform.get_package_dir("framework-arduinoespressif32")
variants_dir = join(FRAMEWORK_DIR, "variants", "tasmota")
def esp32_create_chip_string(chip):
- tasmota_platform = env.subst("$BUILD_DIR").split('/')[-1]
+ tasmota_platform = env.subst("$BUILD_DIR").split(os.path.sep)[-1]
tasmota_platform = tasmota_platform.split('-')[0]
if 'tasmota' and chip[3:] not in tasmota_platform: # quick check for a valid name like 'tasmota' + '32c3'
print('Unexpected naming conventions in this build environment -> Undefined behavior for further build process!!')
@@ -106,7 +106,7 @@ def esp32_create_combined_bin(source, target, env):
app_offset = int(row[3],base=16)
# elif(row[0] == 'factory'):
# factory_offset = int(row[3],base=16)
- elif(row[0] == 'spiffs'):
+ elif(row[0] == 'spiffs'):
if esp32_build_filesystem(row[4]):
fs_offset = int(row[3],base=16)
@@ -152,7 +152,7 @@ def esp32_create_combined_bin(source, target, env):
if exists(fs_bin):
print(f" - {hex(fs_offset)}| {fs_bin}")
cmd += [hex(fs_offset), fs_bin]
- env.Replace(
+ env.Replace(
UPLOADERFLAGS=[
"--chip", chip,
"--port", '"$UPLOAD_PORT"',
From 35860b6f9e92918df14b9e2799aaebff09e76db2 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 20 May 2022 17:51:14 +0200
Subject: [PATCH 02/17] Remove empty used from GUI
---
tasmota/xdrv_01_webserver.ino | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index 55e98e862..2fdcfa4a0 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -2514,8 +2514,11 @@ void HandleInformation(void)
}
char running[2] = { 0 };
if (part->subtype == cur_part) { running[0] = '*'; }
- uint32_t part_used = ((prog_size / 1024) * 100) / part_size;
- WSContentSend_PD(PSTR("}1" D_PARTITION " %s%s}2%d KB (" D_USED " %d%%)"), part->label, running, part_size, part_used);
+ WSContentSend_PD(PSTR("}1" D_PARTITION " %s%s}2%d KB"), part->label, running, part_size);
+ if (prog_size) {
+ uint32_t part_used = ((prog_size / 1024) * 100) / part_size;
+ WSContentSend_PD(PSTR(" (" D_USED " %d%%)"), part_used);
+ }
}
if ((ESP_PARTITION_TYPE_DATA == part->type) && (ESP_PARTITION_SUBTYPE_DATA_SPIFFS == part->subtype)) {
WSContentSend_PD(PSTR("}1" D_PARTITION " fs}2%d KB"), part_size);
From 086c4d6371b43485eb2a69c0cbb94d912fd02cc6 Mon Sep 17 00:00:00 2001
From: Stephan Hadinger
Date: Fri, 20 May 2022 21:29:39 +0200
Subject: [PATCH 03/17] Rename OpenHASP to HASPmota
---
lib/libesp32/berry/default/be_modtab.c | 12 +-
.../{be_lv_openhasp.c => be_lv_haspmota.c} | 140 +++++++++---------
...v_theme_openhasp.c => lv_theme_haspmota.c} | 6 +-
...v_theme_openhasp.h => lv_theme_haspmota.h} | 6 +-
.../generate/be_lvgl_module.c | 6 +-
.../lv_binding_berry/mapping/lv_funcs.h | 6 +-
.../lv_binding_berry/tools/convert.py | 2 +-
.../lv_binding_berry/tools/preprocessor.py | 2 +-
.../openhasp.tapp => haspmota/haspmota.tapp} | Bin 60662 -> 60673 bytes
.../haspmota_demo.tapp} | Bin 191468 -> 191479 bytes
.../haspmota_widgets.tapp} | Bin
.../berry/{openhasp => haspmota}/pages.jsonl | 0
.../robotocondensed_latin1.tapp | Bin
tasmota/berry/haspmota_src/gen_haspmota.sh | 5 +
.../haspmota.tapp} | Bin 60662 -> 60673 bytes
.../haspmota_src/haspmota_core/autoexec.be | 7 +
.../haspmota_core/haspmota.be} | 72 ++++-----
.../haspmota_demo.tapp} | Bin 191468 -> 191479 bytes
.../haspmota_demo}/autoexec.be | 6 +-
.../haspmota_demo}/lv_tasmota_info.be | 0
.../haspmota_demo}/lv_tasmota_log.be | 0
.../haspmota_demo}/lv_wifi_graph.be | 0
.../haspmota_demo}/noun_Fan_35097_140.png | Bin
.../haspmota_demo}/pages.jsonl | 10 +-
.../haspmota_demo}/watch_ren_back_240.png | Bin
.../haspmota_demo}/watch_ren_hour_240.png | Bin
.../haspmota_demo}/watch_ren_min_240.png | Bin
.../haspmota_demo}/watch_ren_sec_240.png | Bin
.../haspmota_examples}/demo-all.jsonl | 0
.../haspmota_examples}/demo1.jsonl | 0
.../haspmota_examples}/demo2.jsonl | 0
.../haspmota_examples}/demo3.jsonl | 0
.../haspmota_examples}/lv.jsonl | 0
.../haspmota_widgets.tapp} | Bin
.../haspmota_widgets}/autoexec.be | 2 +-
.../haspmota_widgets}/lv_tasmota_info.be | 0
.../haspmota_widgets}/lv_tasmota_log.be | 0
.../haspmota_widgets}/lv_wifi_graph.be | 0
tasmota/berry/openhasp_src/gen_openhasp.sh | 5 -
.../openhasp_src/openhasp_core/autoexec.be | 7 -
tasmota/my_user_config.h | 2 +-
tasmota/tasmota_configurations_ESP32.h | 4 +-
tasmota/xdrv_52_3_berry_lvgl.ino | 6 +-
43 files changed, 153 insertions(+), 153 deletions(-)
rename lib/libesp32/berry_tasmota/src/{be_lv_openhasp.c => be_lv_haspmota.c} (99%)
rename lib/libesp32_lvgl/LVGL_assets/src/{lv_theme_openhasp.c => lv_theme_haspmota.c} (99%)
rename lib/libesp32_lvgl/LVGL_assets/src/{lv_theme_openhasp.h => lv_theme_haspmota.h} (89%)
rename tasmota/berry/{openhasp_src/openhasp.tapp => haspmota/haspmota.tapp} (96%)
rename tasmota/berry/{openhasp/openhasp_demo.tapp => haspmota/haspmota_demo.tapp} (97%)
rename tasmota/berry/{openhasp/openhasp_widgets.tapp => haspmota/haspmota_widgets.tapp} (100%)
rename tasmota/berry/{openhasp => haspmota}/pages.jsonl (100%)
rename tasmota/berry/{openhasp => haspmota}/robotocondensed_latin1.tapp (100%)
create mode 100755 tasmota/berry/haspmota_src/gen_haspmota.sh
rename tasmota/berry/{openhasp/openhasp.tapp => haspmota_src/haspmota.tapp} (96%)
create mode 100644 tasmota/berry/haspmota_src/haspmota_core/autoexec.be
rename tasmota/berry/{openhasp_src/openhasp_core/openhasp.be => haspmota_src/haspmota_core/haspmota.be} (97%)
rename tasmota/berry/{openhasp_src/openhasp_demo.tapp => haspmota_src/haspmota_demo.tapp} (97%)
rename tasmota/berry/{openhasp_src/openhasp_demo => haspmota_src/haspmota_demo}/autoexec.be (87%)
rename tasmota/berry/{openhasp_src/openhasp_demo => haspmota_src/haspmota_demo}/lv_tasmota_info.be (100%)
rename tasmota/berry/{openhasp_src/openhasp_demo => haspmota_src/haspmota_demo}/lv_tasmota_log.be (100%)
rename tasmota/berry/{openhasp_src/openhasp_demo => haspmota_src/haspmota_demo}/lv_wifi_graph.be (100%)
rename tasmota/berry/{openhasp_src/openhasp_demo => haspmota_src/haspmota_demo}/noun_Fan_35097_140.png (100%)
rename tasmota/berry/{openhasp_src/openhasp_demo => haspmota_src/haspmota_demo}/pages.jsonl (92%)
rename tasmota/berry/{openhasp_src/openhasp_demo => haspmota_src/haspmota_demo}/watch_ren_back_240.png (100%)
rename tasmota/berry/{openhasp_src/openhasp_demo => haspmota_src/haspmota_demo}/watch_ren_hour_240.png (100%)
rename tasmota/berry/{openhasp_src/openhasp_demo => haspmota_src/haspmota_demo}/watch_ren_min_240.png (100%)
rename tasmota/berry/{openhasp_src/openhasp_demo => haspmota_src/haspmota_demo}/watch_ren_sec_240.png (100%)
rename tasmota/berry/{openhasp_src/openhasp_examples => haspmota_src/haspmota_examples}/demo-all.jsonl (100%)
rename tasmota/berry/{openhasp_src/openhasp_examples => haspmota_src/haspmota_examples}/demo1.jsonl (100%)
rename tasmota/berry/{openhasp_src/openhasp_examples => haspmota_src/haspmota_examples}/demo2.jsonl (100%)
rename tasmota/berry/{openhasp_src/openhasp_examples => haspmota_src/haspmota_examples}/demo3.jsonl (100%)
rename tasmota/berry/{openhasp_src/openhasp_examples => haspmota_src/haspmota_examples}/lv.jsonl (100%)
rename tasmota/berry/{openhasp_src/openhasp_widgets.tapp => haspmota_src/haspmota_widgets.tapp} (100%)
rename tasmota/berry/{openhasp_src/openhasp_widgets => haspmota_src/haspmota_widgets}/autoexec.be (64%)
rename tasmota/berry/{openhasp_src/openhasp_widgets => haspmota_src/haspmota_widgets}/lv_tasmota_info.be (100%)
rename tasmota/berry/{openhasp_src/openhasp_widgets => haspmota_src/haspmota_widgets}/lv_tasmota_log.be (100%)
rename tasmota/berry/{openhasp_src/openhasp_widgets => haspmota_src/haspmota_widgets}/lv_wifi_graph.be (100%)
delete mode 100755 tasmota/berry/openhasp_src/gen_openhasp.sh
delete mode 100644 tasmota/berry/openhasp_src/openhasp_core/autoexec.be
diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c
index 5ed4a99e6..d0b71fc4b 100644
--- a/lib/libesp32/berry/default/be_modtab.c
+++ b/lib/libesp32/berry/default/be_modtab.c
@@ -52,9 +52,9 @@ be_extern_native_module(crc);
be_extern_native_module(lv);
be_extern_native_module(lv_extra);
be_extern_native_module(lv_tasmota);
-#ifdef USE_LVGL_OPENHASP
-be_extern_native_module(openhasp);
-#endif // USE_LVGL_OPENHASP
+#ifdef USE_LVGL_HASPMOTA
+be_extern_native_module(haspmota);
+#endif // USE_LVGL_HASPMOTA
#endif // USE_LVGL
/* user-defined modules declare start */
@@ -137,9 +137,9 @@ BERRY_LOCAL const bntvmodule* const be_module_table[] = {
&be_native_module(lv),
&be_native_module(lv_extra),
&be_native_module(lv_tasmota),
-#ifdef USE_LVGL_OPENHASP
- &be_native_module(openhasp),
-#endif // USE_LVGL_OPENHASP
+#ifdef USE_LVGL_HASPMOTA
+ &be_native_module(haspmota),
+#endif // USE_LVGL_HASPMOTA
#endif // USE_LVGL
#ifdef USE_ENERGY_SENSOR
&be_native_module(energy),
diff --git a/lib/libesp32/berry_tasmota/src/be_lv_openhasp.c b/lib/libesp32/berry_tasmota/src/be_lv_haspmota.c
similarity index 99%
rename from lib/libesp32/berry_tasmota/src/be_lv_openhasp.c
rename to lib/libesp32/berry_tasmota/src/be_lv_haspmota.c
index 1f82d2643..2bb290dca 100644
--- a/lib/libesp32/berry_tasmota/src/be_lv_openhasp.c
+++ b/lib/libesp32/berry_tasmota/src/be_lv_haspmota.c
@@ -1,10 +1,10 @@
/********************************************************************
- * Tasmota OpenHASP solidified
+ * Tasmota HASPmota solidified
*******************************************************************/
#include "be_constobj.h"
#ifdef USE_LVGL
-#ifdef USE_LVGL_OPENHASP
+#ifdef USE_LVGL_HASPMOTA
extern const bclass be_class_lv_anim;
extern const bclass be_class_lv_arc;
@@ -5847,39 +5847,10 @@ void be_load_lvh_qrcode_class(bvm *vm) {
be_pop(vm, 1);
}
-/********************************************************************
-** Solidified function: _anonymous_
-********************************************************************/
-be_local_closure(openhasp__anonymous_, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 0, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_literal("OpenHASP"),
- }),
- be_str_literal("_anonymous_"),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x5C080200, // 0001 MOVE R2 R1
- 0x7C080000, // 0002 CALL R2 0
- 0x80040400, // 0003 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: do_action
********************************************************************/
-be_local_closure(OpenHASP_do_action, /* name */
+be_local_closure(HASPmota_do_action, /* name */
be_nested_proto(
10, /* nstack */
3, /* argc */
@@ -5991,7 +5962,7 @@ be_local_closure(OpenHASP_do_action, /* name */
/********************************************************************
** Solidified function: pages_list_sorted
********************************************************************/
-be_local_closure(OpenHASP_pages_list_sorted, /* name */
+be_local_closure(HASPmota_pages_list_sorted, /* name */
be_nested_proto(
8, /* nstack */
2, /* argc */
@@ -6071,7 +6042,7 @@ be_local_closure(OpenHASP_pages_list_sorted, /* name */
/********************************************************************
** Solidified function: get_page_cur
********************************************************************/
-be_local_closure(OpenHASP_get_page_cur, /* name */
+be_local_closure(HASPmota_get_page_cur, /* name */
be_nested_proto(
3, /* nstack */
1, /* argc */
@@ -6101,7 +6072,7 @@ be_local_closure(OpenHASP_get_page_cur, /* name */
/********************************************************************
** Solidified function: start
********************************************************************/
-be_local_closure(OpenHASP_start, /* name */
+be_local_closure(HASPmota_start, /* name */
be_nested_proto(
11, /* nstack */
3, /* argc */
@@ -6131,7 +6102,7 @@ be_local_closure(OpenHASP_start, /* name */
/* K16 */ be_nested_str_literal("font_embedded"),
/* K17 */ be_nested_str_literal("robotocondensed"),
/* K18 */ be_nested_str_literal("montserrat"),
- /* K19 */ be_nested_str_literal("theme_openhasp_init"),
+ /* K19 */ be_nested_str_literal("theme_haspmota_init"),
/* K20 */ be_const_int(0),
/* K21 */ be_nested_str_literal("color"),
/* K22 */ be_const_int(16711935),
@@ -6263,7 +6234,7 @@ be_local_closure(OpenHASP_start, /* name */
/********************************************************************
** Solidified function: init
********************************************************************/
-be_local_closure(OpenHASP_init, /* name */
+be_local_closure(HASPmota_init, /* name */
be_nested_proto(
5, /* nstack */
1, /* argc */
@@ -6297,7 +6268,7 @@ be_local_closure(OpenHASP_init, /* name */
/********************************************************************
** Solidified function: register_event
********************************************************************/
-be_local_closure(OpenHASP_register_event, /* name */
+be_local_closure(HASPmota_register_event, /* name */
be_nested_proto(
13, /* nstack */
3, /* argc */
@@ -6373,7 +6344,7 @@ be_local_closure(OpenHASP_register_event, /* name */
/********************************************************************
** Solidified function: parse_page
********************************************************************/
-be_local_closure(OpenHASP_parse_page, /* name */
+be_local_closure(HASPmota_parse_page, /* name */
be_nested_proto(
9, /* nstack */
2, /* argc */
@@ -6465,7 +6436,7 @@ be_local_closure(OpenHASP_parse_page, /* name */
/********************************************************************
** Solidified function: deinit
********************************************************************/
-be_local_closure(OpenHASP_deinit, /* name */
+be_local_closure(HASPmota_deinit, /* name */
be_nested_proto(
5, /* nstack */
1, /* argc */
@@ -6512,7 +6483,7 @@ be_local_closure(OpenHASP_deinit, /* name */
/********************************************************************
** Solidified function: page_dir_to
********************************************************************/
-be_local_closure(OpenHASP_page_dir_to, /* name */
+be_local_closure(HASPmota_page_dir_to, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
@@ -6573,7 +6544,7 @@ be_local_closure(OpenHASP_page_dir_to, /* name */
/********************************************************************
** Solidified function: _load
********************************************************************/
-be_local_closure(OpenHASP__load, /* name */
+be_local_closure(HASPmota__load, /* name */
be_nested_proto(
14, /* nstack */
2, /* argc */
@@ -6668,7 +6639,7 @@ be_local_closure(OpenHASP__load, /* name */
/********************************************************************
** Solidified function: parse
********************************************************************/
-be_local_closure(OpenHASP_parse, /* name */
+be_local_closure(HASPmota_parse, /* name */
be_nested_proto(
9, /* nstack */
2, /* argc */
@@ -6722,7 +6693,7 @@ be_local_closure(OpenHASP_parse, /* name */
/********************************************************************
** Solidified function: sort
********************************************************************/
-be_local_closure(OpenHASP_sort, /* name */
+be_local_closure(HASPmota_sort, /* name */
be_nested_proto(
6, /* nstack */
1, /* argc */
@@ -6778,7 +6749,7 @@ be_local_closure(OpenHASP_sort, /* name */
/********************************************************************
** Solidified function: parse_obj
********************************************************************/
-be_local_closure(OpenHASP_parse_obj, /* name */
+be_local_closure(HASPmota_parse_obj, /* name */
be_nested_proto(
20, /* nstack */
3, /* argc */
@@ -7022,7 +6993,7 @@ be_local_closure(OpenHASP_parse_obj, /* name */
/********************************************************************
** Solidified function: event_dispatch
********************************************************************/
-be_local_closure(OpenHASP_event_dispatch, /* name */
+be_local_closure(HASPmota_event_dispatch, /* name */
be_nested_proto(
9, /* nstack */
2, /* argc */
@@ -7090,27 +7061,27 @@ be_local_closure(OpenHASP_event_dispatch, /* name */
/********************************************************************
-** Solidified class: OpenHASP
+** Solidified class: HASPmota
********************************************************************/
-be_local_class(OpenHASP,
+be_local_class(HASPmota,
10,
NULL,
be_nested_map(43,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_literal("lvh_textarea", 41), be_const_class(be_class_lvh_textarea) },
{ be_const_key_literal("scr", -1), be_const_var(3) },
- { be_const_key_literal("event_dispatch", 16), be_const_closure(OpenHASP_event_dispatch_closure) },
+ { be_const_key_literal("event_dispatch", 16), be_const_closure(HASPmota_event_dispatch_closure) },
{ be_const_key_literal("lvh_bar", -1), be_const_class(be_class_lvh_bar) },
{ be_const_key_literal("lvh_img", -1), be_const_class(be_class_lvh_img) },
{ be_const_key_literal("event", -1), be_const_var(8) },
- { be_const_key_literal("do_action", 33), be_const_closure(OpenHASP_do_action_closure) },
- { be_const_key_literal("pages_list_sorted", -1), be_const_closure(OpenHASP_pages_list_sorted_closure) },
+ { be_const_key_literal("do_action", 33), be_const_closure(HASPmota_do_action_closure) },
+ { be_const_key_literal("pages_list_sorted", -1), be_const_closure(HASPmota_pages_list_sorted_closure) },
{ be_const_key_literal("lvh_btnmatrix", 42), be_const_class(be_class_lvh_btnmatrix) },
- { be_const_key_literal("start", -1), be_const_closure(OpenHASP_start_closure) },
- { be_const_key_literal("init", 5), be_const_closure(OpenHASP_init_closure) },
+ { be_const_key_literal("start", -1), be_const_closure(HASPmota_start_closure) },
+ { be_const_key_literal("init", 5), be_const_closure(HASPmota_init_closure) },
{ be_const_key_literal("lvh_scr", -1), be_const_class(be_class_lvh_scr) },
- { be_const_key_literal("parse_page", -1), be_const_closure(OpenHASP_parse_page_closure) },
- { be_const_key_literal("register_event", 24), be_const_closure(OpenHASP_register_event_closure) },
+ { be_const_key_literal("parse_page", -1), be_const_closure(HASPmota_parse_page_closure) },
+ { be_const_key_literal("register_event", 24), be_const_closure(HASPmota_register_event_closure) },
{ be_const_key_literal("lvh_roller", 34), be_const_class(be_class_lvh_roller) },
{ be_const_key_literal("lvh_page", 11), be_const_class(be_class_lvh_page) },
{ be_const_key_literal("lvh_page_cur_idx", -1), be_const_var(6) },
@@ -7118,13 +7089,13 @@ be_local_class(OpenHASP,
{ be_const_key_literal("hres", 38), be_const_var(1) },
{ be_const_key_literal("dark", -1), be_const_var(0) },
{ be_const_key_literal("lvh_label", 37), be_const_class(be_class_lvh_label) },
- { be_const_key_literal("deinit", 14), be_const_closure(OpenHASP_deinit_closure) },
- { be_const_key_literal("page_dir_to", -1), be_const_closure(OpenHASP_page_dir_to_closure) },
- { be_const_key_literal("parse_obj", -1), be_const_closure(OpenHASP_parse_obj_closure) },
+ { be_const_key_literal("deinit", 14), be_const_closure(HASPmota_deinit_closure) },
+ { be_const_key_literal("page_dir_to", -1), be_const_closure(HASPmota_page_dir_to_closure) },
+ { be_const_key_literal("parse_obj", -1), be_const_closure(HASPmota_parse_obj_closure) },
{ be_const_key_literal("lvh_spinner", -1), be_const_class(be_class_lvh_spinner) },
- { be_const_key_literal("_load", -1), be_const_closure(OpenHASP__load_closure) },
+ { be_const_key_literal("_load", -1), be_const_closure(HASPmota__load_closure) },
{ be_const_key_literal("lvh_qrcode", -1), be_const_class(be_class_lvh_qrcode) },
- { be_const_key_literal("parse", -1), be_const_closure(OpenHASP_parse_closure) },
+ { be_const_key_literal("parse", -1), be_const_closure(HASPmota_parse_closure) },
{ be_const_key_literal("lvh_pages", 2), be_const_var(5) },
{ be_const_key_literal("lvh_line", -1), be_const_class(be_class_lvh_line) },
{ be_const_key_literal("lvh_switch", -1), be_const_class(be_class_lvh_switch) },
@@ -7132,32 +7103,61 @@ be_local_class(OpenHASP,
{ be_const_key_literal("r16", -1), be_const_var(4) },
{ be_const_key_literal("def_templ_name", -1), be_nested_str_literal("pages.jsonl") },
{ be_const_key_literal("lvh_obj", 19), be_const_class(be_class_lvh_obj) },
- { be_const_key_literal("sort", 23), be_const_static_closure(OpenHASP_sort_closure) },
+ { be_const_key_literal("sort", 23), be_const_static_closure(HASPmota_sort_closure) },
{ be_const_key_literal("lvh_dropdown", -1), be_const_class(be_class_lvh_dropdown) },
{ be_const_key_literal("lvh_checkbox", -1), be_const_class(be_class_lvh_checkbox) },
{ be_const_key_literal("lvh_slider", -1), be_const_class(be_class_lvh_slider) },
{ be_const_key_literal("vres", -1), be_const_var(2) },
{ be_const_key_literal("lvh_btn", -1), be_const_class(be_class_lvh_btn) },
{ be_const_key_literal("event_cb", -1), be_const_var(9) },
- { be_const_key_literal("get_page_cur", -1), be_const_closure(OpenHASP_get_page_cur_closure) },
+ { be_const_key_literal("get_page_cur", -1), be_const_closure(HASPmota_get_page_cur_closure) },
})),
- be_str_literal("OpenHASP")
+ be_str_literal("HASPmota")
);
/********************************************************************
-** Solidified module: openhasp
+** Solidified function: _anonymous_
********************************************************************/
-be_local_module(openhasp,
- "openhasp",
+be_local_closure(haspmota__anonymous_, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_literal("HASPmota"),
+ }),
+ be_str_literal("_anonymous_"),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x5C080200, // 0001 MOVE R2 R1
+ 0x7C080000, // 0002 CALL R2 0
+ 0x80040400, // 0003 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified module: haspmota
+********************************************************************/
+be_local_module(haspmota,
+ "haspmota",
be_nested_map(2,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_literal("OpenHASP", -1), be_const_class(be_class_OpenHASP) },
- { be_const_key_literal("init", 0), be_const_closure(openhasp__anonymous__closure) },
+ { be_const_key_literal("HASPmota", -1), be_const_class(be_class_HASPmota) },
+ { be_const_key_literal("init", -1), be_const_closure(haspmota__anonymous__closure) },
}))
);
-BE_EXPORT_VARIABLE be_define_const_native_module(openhasp);
+BE_EXPORT_VARIABLE be_define_const_native_module(haspmota);
/********************************************************************/
-#endif // USE_LVGL_OPENHASP
+#endif // USE_LVGL_HASPMOTA
#endif // USE_LVGL
\ No newline at end of file
diff --git a/lib/libesp32_lvgl/LVGL_assets/src/lv_theme_openhasp.c b/lib/libesp32_lvgl/LVGL_assets/src/lv_theme_haspmota.c
similarity index 99%
rename from lib/libesp32_lvgl/LVGL_assets/src/lv_theme_openhasp.c
rename to lib/libesp32_lvgl/LVGL_assets/src/lv_theme_haspmota.c
index d0f78a955..96f4c4c5e 100644
--- a/lib/libesp32_lvgl/LVGL_assets/src/lv_theme_openhasp.c
+++ b/lib/libesp32_lvgl/LVGL_assets/src/lv_theme_haspmota.c
@@ -8,7 +8,7 @@
*********************/
#include "../lvgl.h" /*To see all the widgets*/
-#include "lv_theme_openhasp.h"
+#include "lv_theme_haspmota.h"
#include "misc/lv_gc.h"
/*********************
@@ -625,7 +625,7 @@ static void style_init(void)
* GLOBAL FUNCTIONS
**********************/
-lv_theme_t * lv_theme_openhasp_init(lv_disp_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font)
+lv_theme_t * lv_theme_haspmota_init(lv_disp_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font)
{
/*This trick is required only to avoid the garbage collection of
@@ -658,7 +658,7 @@ lv_theme_t * lv_theme_openhasp_init(lv_disp_t * disp, lv_color_t color_primary,
return (lv_theme_t *)&theme;
}
-bool lv_theme_openhasp_is_inited(void)
+bool lv_theme_haspmota_is_inited(void)
{
return inited;
}
diff --git a/lib/libesp32_lvgl/LVGL_assets/src/lv_theme_openhasp.h b/lib/libesp32_lvgl/LVGL_assets/src/lv_theme_haspmota.h
similarity index 89%
rename from lib/libesp32_lvgl/LVGL_assets/src/lv_theme_openhasp.h
rename to lib/libesp32_lvgl/LVGL_assets/src/lv_theme_haspmota.h
index f1aacfe04..7276f485d 100644
--- a/lib/libesp32_lvgl/LVGL_assets/src/lv_theme_openhasp.h
+++ b/lib/libesp32_lvgl/LVGL_assets/src/lv_theme_haspmota.h
@@ -1,5 +1,5 @@
/**
- * @file lv_theme_openhasp.h
+ * @file lv_theme_haspmota.h
*
*/
@@ -40,9 +40,9 @@ typedef enum {
* @param font pointer to a font to use.
* @return a pointer to reference this theme later
*/
-lv_theme_t * lv_theme_openhasp_init(lv_disp_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font);
+lv_theme_t * lv_theme_haspmota_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_openhasp_is_inited(void);
+bool lv_theme_haspmota_is_inited(void);
/**********************
* MACROS
diff --git a/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_module.c b/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_module.c
index aec4cbf45..9f333f36b 100644
--- a/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_module.c
+++ b/lib/libesp32_lvgl/lv_binding_berry/generate/be_lvgl_module.c
@@ -9,7 +9,7 @@
#include "lvgl.h"
#include "be_mapping.h"
#include "lv_berry.h"
-#include "lv_theme_openhasp.h"
+#include "lv_theme_haspmota.h"
extern int lv0_member(bvm *vm); // resolve virtual members
extern int lv0_load_font(bvm *vm);
@@ -163,9 +163,9 @@ const be_ntv_func_def_t lv_func[] = {
{ "theme_get_font_normal", { (const void*) &lv_theme_get_font_normal, "lv.lv_font", "(lv.lv_obj)" } },
{ "theme_get_font_small", { (const void*) &lv_theme_get_font_small, "lv.lv_font", "(lv.lv_obj)" } },
{ "theme_get_from_obj", { (const void*) &lv_theme_get_from_obj, "lv.lv_theme", "(lv.lv_obj)" } },
+ { "theme_haspmota_init", { (const void*) &lv_theme_haspmota_init, "lv.lv_theme", "(lv.lv_disp)(lv.lv_color)(lv.lv_color)b(lv.lv_font)" } },
+ { "theme_haspmota_is_inited", { (const void*) &lv_theme_haspmota_is_inited, "b", "" } },
{ "theme_mono_init", { (const void*) &lv_theme_mono_init, "lv.lv_theme", "(lv.lv_disp)b(lv.lv_font)" } },
- { "theme_openhasp_init", { (const 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", { (const void*) &lv_theme_openhasp_is_inited, "b", "" } },
{ "theme_set_apply_cb", { (const void*) &lv_theme_set_apply_cb, "", "(lv.lv_theme)^lv_theme_apply_cb^" } },
{ "theme_set_parent", { (const void*) &lv_theme_set_parent, "", "(lv.lv_theme)(lv.lv_theme)" } },
{ "timer_create", { (const void*) &lv_timer_create, "lv.lv_timer", "^lv_timer_cb^i." } },
diff --git a/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_funcs.h b/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_funcs.h
index 9827808e3..46c91aa8f 100644
--- a/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_funcs.h
+++ b/lib/libesp32_lvgl/lv_binding_berry/mapping/lv_funcs.h
@@ -1151,7 +1151,7 @@ void lv_textarea_cursor_left(lv_obj_t * obj)
void lv_textarea_cursor_down(lv_obj_t * obj)
void lv_textarea_cursor_up(lv_obj_t * obj)
-// ../../LVGL_assets/src/lv_theme_openhasp.h
-lv_theme_t * lv_theme_openhasp_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_openhasp_is_inited(void)
+// ../../LVGL_assets/src/lv_theme_haspmota.h
+lv_theme_t * lv_theme_haspmota_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_haspmota_is_inited(void)
diff --git a/lib/libesp32_lvgl/lv_binding_berry/tools/convert.py b/lib/libesp32_lvgl/lv_binding_berry/tools/convert.py
index c305bdc34..11f3a001c 100644
--- a/lib/libesp32_lvgl/lv_binding_berry/tools/convert.py
+++ b/lib/libesp32_lvgl/lv_binding_berry/tools/convert.py
@@ -741,7 +741,7 @@ print("""/********************************************************************
#include "lvgl.h"
#include "be_mapping.h"
#include "lv_berry.h"
-#include "lv_theme_openhasp.h"
+#include "lv_theme_haspmota.h"
extern int lv0_member(bvm *vm); // resolve virtual members
extern int lv0_load_font(bvm *vm);
diff --git a/lib/libesp32_lvgl/lv_binding_berry/tools/preprocessor.py b/lib/libesp32_lvgl/lv_binding_berry/tools/preprocessor.py
index 892a9cc32..d9b56084c 100644
--- a/lib/libesp32_lvgl/lv_binding_berry/tools/preprocessor.py
+++ b/lib/libesp32_lvgl/lv_binding_berry/tools/preprocessor.py
@@ -78,7 +78,7 @@ lv_fun_globs = [
#"**/*.h",
]
headers_names = list_files(lv_src_prefix, lv_fun_globs)
-headers_names += list_files("../../LVGL_assets/src/", ["lv_theme_openhasp.h"])
+headers_names += list_files("../../LVGL_assets/src/", ["lv_theme_haspmota.h"])
# headers_names += ["lv_pre_style.h"] # for LVGL v7, add pre-generated style functions from C preprocessor
# unit test
diff --git a/tasmota/berry/openhasp_src/openhasp.tapp b/tasmota/berry/haspmota/haspmota.tapp
similarity index 96%
rename from tasmota/berry/openhasp_src/openhasp.tapp
rename to tasmota/berry/haspmota/haspmota.tapp
index f14e884386fa460d2319108f8e0d3608ff76d483..4ea6c2bdfff20f3b04f542e345543be615da4efd 100644
GIT binary patch
delta 1058
zcmaJ=%WD%s9Nz72LpwpR(9+sg{gG9g)Mn!Y1rZM#EYVO%O>%B`)1}#Vw;Pg48>&$1
zrQ!>9Y!y6OA3^ls=FmT(M?o)o@g!msMG!lP=XV=d$b72L1MKQ0Nu3GIorLkyCXen`srK9~T$&pY)b1K|z$iih>}w(@+IU
zSSw=4Yo&tiU=1ly&~lU7xB)XJ&Ql0bw7FZwTA^?ZX3YW|icUau|5gu2BRQvN#QKqG
z7o1J(H=fx!R!Q9`9F9bgKM3Gjrt5q5$%{2X@UAxqkN-2s`AZA>^5uUFk~oo04bc%G
zN@m1Z3(F%<#cMGJHue9%_Q_<^1D{}r)YHibkmYD&;XVdQQhL|Mfa-PNEs@0Ky+@dJ
z0C2HvL=cK9Xj&`s6~S?^ow2fIghMPe6hY*ZoFR$8Fo`!;TR0yzx`{wV;ud$cbv5Xt
zJ00n59FfnV+Z?zzm1K~Q;=Wb;I(=XJ;I~sg>bPQvKDu!AaX?`Wz_{h;ngxzNVdO9Z
zQ1}=mb?YO~B7=)}eeiw}cxBSI^pbnr4@*b4?_uPlfE_TWOl)eFIcosU8^CIiovJ9S(+BAnggjTQANZq?@&-RZ3$UBW$(q{o2qzo_lZo4cf_E{Ml$8r=#zX
zCDz(?UYy8vo#&IO`bi(G)Z@Du*(hzqYs1NV@5`x4ccX_Fq(8jav`gBmU2?Y3?}?Pm
lHF^*Kt%EMA)!%1%{s0v(tG6NVWs6tcT`KQ_Jf@z2tfAlPCT!u6|#Jb!vhEm8Tq5OPNB
zXkg0ZiFkfJ1M`ypkDSRPGe%z4g*S0?6~%o4R!SD@T0%QM3{EH}FBj-oN%-5C1vw~v
zT*N@=0B!A_ZQT*F-?g%n-L8g~nL_~pf^v-~xCN$hBBvw2kE!|sM7-QXW?erTxGOuy
zSyz<2xBvij?&mqx4
z`TRY%%o2e~9jl5Cu{wa_7JyLZJt2KpK5;7&9lPd$FJq8LCf@PaoGHwVZ(JB;&ikQ-
zp_b7sP0_Ux1g#W;jH7?4nbk5$KqBrKnY`V%m@za7do&5f93)C}E9tuPnFlLuxEpo4
zLoOCu9O_|l-zttK>fZw|uI>b%ARP{iLRL(D;AxWuWtE$f;qrC|JS*?$Wq$grso|78
zW$u;Un#jtT8HiK<06>`p0PKQoWh5-twMwZVe_n&iXbS+(X
Wmc`tIP%lVykI1_Uba&Y=hVUC)V1W_<
diff --git a/tasmota/berry/openhasp/openhasp_demo.tapp b/tasmota/berry/haspmota/haspmota_demo.tapp
similarity index 97%
rename from tasmota/berry/openhasp/openhasp_demo.tapp
rename to tasmota/berry/haspmota/haspmota_demo.tapp
index aac2e596797e591c167663d041dd031899eec205..313b3158e03523b531a1223420d5f4f3b82a19a9 100644
GIT binary patch
delta 1577
zcmZuxS!fec6rFd|*g7##QE^FZpGMnsOWi8e4eNs1Hnh?d^~ZM7jwUtj#AYIG6~qN%
zD`;cT_aXS>_95aDWkkh(2%^Og!KJ7mewj2a>W>@J>dfeS)-Rcx0$vJejA<+vvp#$|1|Yytj{+XR&t8zC)Hr&vzC@#}Zp^qZ$2
zo`@`T%I+OPC?b~PxfD*GLeDK0Rehqv>dyYHFmca5J9*psG+TG{+Y6~9dCwlU>)=91
z0Ry)?dUJFz<0_>f**}O}$<^~lXO?KKDcX%vS8_Q{TUu+v!cH;bX^Ti5A=Vl-d2-9D
zPqrMU%~x#!W+kq9rzPatZ6<(R%D|+==UT4`O*DHqF(7%(D#9N7^%7-I(F3BRe+4Lmqi93!1}xw3&G_DU
z`DupZw563zE29&!uP^35cQodYcG)L(vTzF$uL%mlW4O~XNW2l@JLk^Fj
zW9*>ynfc$y{2C^jjZ}@J3kJo9apagzeSAm~THS@zBy)bC)MRRTG#T22o}3Bu7gMwp
z%biiNi08{({2rl`4Iy5M+ojfMNOZI5y15%Rqa4aY`uo7AnF%XU1%GO@EG{Hrs;GH4KFNCnu#6!&^l>4thX1B7
z$ovtgCp`EM@+Je7j7*QI9QgyO`1cae(4Twl@7#gxF=W2dR?ebcY4TtM@Pzy{s6jsg
D|0+?|
delta 1572
zcmZuxTWAzl7@qS_)}%8oL`?CLs0TNi&23{^BiL3^t45P78*#m~NX=|AYc@_Y%kHcs
zdGLaw_@K?Y=pp!MZ3#s*Zec`9&=(0oM5!9YzG||YAf;fvw6Q%idd@i2g|p26{r~y?
z`*|@gPmjwDt<7SABv`+TZG+)0@Qmw&D8Js4@fTj(9F1Jx9L3KqVBS~5Kyqjd`LgTErx#RH^0541>+hF~1;IL2RpQD%H5uqi>OGoW
z70WR_*XnwKcjg;u#S~B%Zv@fts4g;qx7VDWdRkuM1oLILg&awcF&+Xo&ouO2A$^J
zwFl*6bMkhAmpmFIf9`g&PZXC!o4Dg%pnhq
z%8uAK2ex~;NbWBN!X-1g1e%@kFmF{s#XLv*d_BC{AeWsWIwZ|v0-dg-01v_7F#+gpng)_*#(jGyiD^2cA
L0iIPd3DoF6tt~gR
diff --git a/tasmota/berry/openhasp/openhasp_widgets.tapp b/tasmota/berry/haspmota/haspmota_widgets.tapp
similarity index 100%
rename from tasmota/berry/openhasp/openhasp_widgets.tapp
rename to tasmota/berry/haspmota/haspmota_widgets.tapp
diff --git a/tasmota/berry/openhasp/pages.jsonl b/tasmota/berry/haspmota/pages.jsonl
similarity index 100%
rename from tasmota/berry/openhasp/pages.jsonl
rename to tasmota/berry/haspmota/pages.jsonl
diff --git a/tasmota/berry/openhasp/robotocondensed_latin1.tapp b/tasmota/berry/haspmota/robotocondensed_latin1.tapp
similarity index 100%
rename from tasmota/berry/openhasp/robotocondensed_latin1.tapp
rename to tasmota/berry/haspmota/robotocondensed_latin1.tapp
diff --git a/tasmota/berry/haspmota_src/gen_haspmota.sh b/tasmota/berry/haspmota_src/gen_haspmota.sh
new file mode 100755
index 000000000..c81c0fdac
--- /dev/null
+++ b/tasmota/berry/haspmota_src/gen_haspmota.sh
@@ -0,0 +1,5 @@
+# generate all haspmota tapp files
+rm haspmota.tapp; zip -j -0 haspmota.tapp haspmota_core/*
+rm haspmota_demo.tapp ; zip -j -0 haspmota_demo.tapp haspmota_demo/* haspmota_core/haspmota.be
+cp haspmota.tapp ../haspmota
+cp haspmota_demo.tapp ../haspmota
diff --git a/tasmota/berry/openhasp/openhasp.tapp b/tasmota/berry/haspmota_src/haspmota.tapp
similarity index 96%
rename from tasmota/berry/openhasp/openhasp.tapp
rename to tasmota/berry/haspmota_src/haspmota.tapp
index f14e884386fa460d2319108f8e0d3608ff76d483..4ea6c2bdfff20f3b04f542e345543be615da4efd 100644
GIT binary patch
delta 1058
zcmaJ=%WD%s9Nz72LpwpR(9+sg{gG9g)Mn!Y1rZM#EYVO%O>%B`)1}#Vw;Pg48>&$1
zrQ!>9Y!y6OA3^ls=FmT(M?o)o@g!msMG!lP=XV=d$b72L1MKQ0Nu3GIorLkyCXen`srK9~T$&pY)b1K|z$iih>}w(@+IU
zSSw=4Yo&tiU=1ly&~lU7xB)XJ&Ql0bw7FZwTA^?ZX3YW|icUau|5gu2BRQvN#QKqG
z7o1J(H=fx!R!Q9`9F9bgKM3Gjrt5q5$%{2X@UAxqkN-2s`AZA>^5uUFk~oo04bc%G
zN@m1Z3(F%<#cMGJHue9%_Q_<^1D{}r)YHibkmYD&;XVdQQhL|Mfa-PNEs@0Ky+@dJ
z0C2HvL=cK9Xj&`s6~S?^ow2fIghMPe6hY*ZoFR$8Fo`!;TR0yzx`{wV;ud$cbv5Xt
zJ00n59FfnV+Z?zzm1K~Q;=Wb;I(=XJ;I~sg>bPQvKDu!AaX?`Wz_{h;ngxzNVdO9Z
zQ1}=mb?YO~B7=)}eeiw}cxBSI^pbnr4@*b4?_uPlfE_TWOl)eFIcosU8^CIiovJ9S(+BAnggjTQANZq?@&-RZ3$UBW$(q{o2qzo_lZo4cf_E{Ml$8r=#zX
zCDz(?UYy8vo#&IO`bi(G)Z@Du*(hzqYs1NV@5`x4ccX_Fq(8jav`gBmU2?Y3?}?Pm
lHF^*Kt%EMA)!%1%{s0v(tG6NVWs6tcT`KQ_Jf@z2tfAlPCT!u6|#Jb!vhEm8Tq5OPNB
zXkg0ZiFkfJ1M`ypkDSRPGe%z4g*S0?6~%o4R!SD@T0%QM3{EH}FBj-oN%-5C1vw~v
zT*N@=0B!A_ZQT*F-?g%n-L8g~nL_~pf^v-~xCN$hBBvw2kE!|sM7-QXW?erTxGOuy
zSyz<2xBvij?&mqx4
z`TRY%%o2e~9jl5Cu{wa_7JyLZJt2KpK5;7&9lPd$FJq8LCf@PaoGHwVZ(JB;&ikQ-
zp_b7sP0_Ux1g#W;jH7?4nbk5$KqBrKnY`V%m@za7do&5f93)C}E9tuPnFlLuxEpo4
zLoOCu9O_|l-zttK>fZw|uI>b%ARP{iLRL(D;AxWuWtE$f;qrC|JS*?$Wq$grso|78
zW$u;Un#jtT8HiK<06>`p0PKQoWh5-twMwZVe_n&iXbS+(X
Wmc`tIP%lVykI1_Uba&Y=hVUC)V1W_<
diff --git a/tasmota/berry/haspmota_src/haspmota_core/autoexec.be b/tasmota/berry/haspmota_src/haspmota_core/autoexec.be
new file mode 100644
index 000000000..138301eab
--- /dev/null
+++ b/tasmota/berry/haspmota_src/haspmota_core/autoexec.be
@@ -0,0 +1,7 @@
+# start haspmota
+# package with
+# rm haspmota.tapp; zip -j -0 haspmota.tapp haspmota_core/*
+import haspmota
+
+# defer start to make sure all modules and tapp applications were loaded first
+tasmota.set_timer(1000, /-> haspmota.start())
diff --git a/tasmota/berry/openhasp_src/openhasp_core/openhasp.be b/tasmota/berry/haspmota_src/haspmota_core/haspmota.be
similarity index 97%
rename from tasmota/berry/openhasp_src/openhasp_core/openhasp.be
rename to tasmota/berry/haspmota_src/haspmota_core/haspmota.be
index d4de2b209..2e101cef3 100644
--- a/tasmota/berry/openhasp_src/openhasp_core/openhasp.be
+++ b/tasmota/berry/haspmota_src/haspmota_core/haspmota.be
@@ -1,19 +1,19 @@
-# OpenHASP compatibility module
+# HASPMota - OpenHASP compatibility module
#
-# use `import openhasp` and set the JSONL definitions in `pages.jsonl`
+# use `import haspmota` and set the JSONL definitions in `pages.jsonl`
#
# As an optimization `0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#` is replaced with `0`
#
-# rm openhasp.tapp; zip -j -0 openhasp.tapp openhasp_core/*
+# rm haspmota.tapp; zip -j -0 haspmota.tapp haspmota_core/*
#################################################################################
# How to solidify (needs an ESP32 with PSRAM)
#-
import path
-path.remove("openhasp.bec")
+path.remove("haspmota.bec")
import solidify
-var openhasp
-load('openhasp.be')
+var haspmota
+load('haspmota.be')
var classes = [
"page", "obj", "scr",
@@ -23,12 +23,12 @@ var classes = [
"qrcode"
]
for c:classes
- solidify.dump(openhasp.OpenHASP.("lvh_"+c), true)
+ solidify.dump(haspmota.HASPmota.("lvh_"+c), true)
end
-solidify.dump(openhasp, true)
+solidify.dump(haspmota, true)
-#
-var openhasp = module("openhasp")
+var haspmota = module("haspmota")
#################################################################################
#################################################################################
@@ -37,7 +37,7 @@ var openhasp = module("openhasp")
# Provide a mapping for virtual members
# Stores the associated page and object id
#
-# Adds specific virtual members used by OpenHASP
+# Adds specific virtual members used by HASPmota
#################################################################################
#################################################################################
class lvh_obj
@@ -62,7 +62,7 @@ class lvh_obj
# and the Berry or LVGL attribute to set
#
# We try to map directly an attribute to the LVGL
- # Ex: OpenHASP attribute `w` is mapped to LVGL `width`
+ # Ex: HASPmota attribute `w` is mapped to LVGL `width`
#
# If mapping is null, we use set_X and get_X from our own class
static _attr_map = {
@@ -150,7 +150,7 @@ class lvh_obj
var _lv_obj # native lvgl object
var _lv_label # sub-label if exists
var _page # parent page object
- var _action # value of the OpenHASP `action` attribute, shouldn't be called `self.action` since we want to trigger the set/member functions
+ var _action # value of the HASPmota `action` attribute, shouldn't be called `self.action` since we want to trigger the set/member functions
#====================================================================
# Rule engine to map value and text to rules
@@ -242,10 +242,10 @@ class lvh_obj
end
#====================================================================
- # init OpenHASP object from its jsonl definition
+ # init HASPmota object from its jsonl definition
#
# arg1: LVGL parent object (used to create a sub-object)
- # arg2: `jline` JSONL definition of the object from OpenHASP template (used in sub-classes)
+ # arg2: `jline` JSONL definition of the object from HASPmota template (used in sub-classes)
# arg3: (opt) LVGL object if it already exists and was created prior to init()
#====================================================================
def init(parent, page, jline, obj)
@@ -323,7 +323,7 @@ class lvh_obj
# the callback avoids doing anything sophisticated in the cb
# defer the actual action to the Tasmota event loop
# print("-> CB fired","self",self,"obj",obj,"event",event.tomap(),"code",event.code)
- var oh = self._page._oh # openhasp global object
+ var oh = self._page._oh # haspmota global object
var code = event.code # materialize to a local variable, otherwise the value can change (and don't capture event object)
if self.action != "" && code == lv.EVENT_CLICKED
# if clicked and action is declared, do the page change event
@@ -507,7 +507,7 @@ class lvh_obj
#====================================================================
# `text_font`
#
- # For OpenHASP compatiblity, default to "robotocondensed-latin1"
+ # For HASPmota compatiblity, default to "robotocondensed-latin1"
# However we propose an extension to allow for other font names
#
# Arg1: (int) font size for `robotocondensed-latin1`
@@ -1104,7 +1104,7 @@ class lvh_dropdown : lvh_obj
end
end
- # direction needs a conversion from OpenHASP numbers and LVGL's
+ # direction needs a conversion from HASPmota numbers and LVGL's
def set_direction(t)
# 0 = down, 1 = up, 2 = left, 3 = right
self._lv_obj.set_dir(self._dir[int(t)])
@@ -1119,7 +1119,7 @@ class lvh_dropdown : lvh_obj
return -1
end
- # show_selected (bool) is a OpenHASP addition
+ # show_selected (bool) is a HASPmota addition
# only meaningful if set to `true`, setting to false requires a call to `set_text`
def set_show_selected(t)
if t
@@ -1159,22 +1159,22 @@ class lvh_page
var _obj_id # (map) of `lvh_obj` objects by id numbers
var _page_id # (int) id number of this page
var _lv_scr # (lv_obj) lvgl screen object
- var _oh # OpenHASP global object
- # openhasp attributes for page are on item `#0`
+ var _oh # HASPmota global object
+ # haspmota attributes for page are on item `#0`
var prev, next, back # (int) id values for `prev`, `next`, `back` buttons
#====================================================================
# `init`
#
- # arg1: `page_number` (int) OpenHASP page id
+ # arg1: `page_number` (int) HASPmota page id
# defaults to `1` if not specified
# page 0 is special, visible on all pages. Internally uses `layer_top`
- # arg2: `oh` global OpenHASP monad object
- # page_number: openhasp page number, defaults to `1` if not specified
+ # arg2: `oh` global HASPmota monad object
+ # page_number: haspmota page number, defaults to `1` if not specified
#====================================================================
def init(page_number, oh)
import global
- self._oh = oh # memorize OpenHASP parent object
+ self._oh = oh # memorize HASPmota parent object
# if no parameter, default to page #1
page_number = int(page_number)
@@ -1283,17 +1283,17 @@ end
#################################################################################
#
-# class `OpenHASP` to initialize the OpenHASP parsing
+# class `HASPmota` to initialize the HASPmota parsing
#
#################################################################################
# main class controller, meant to be a singleton and the only externally used class
-class OpenHASP
+class HASPmota
var dark # (bool) use dark theme?
var hres, vres # (int) resolution
var scr # (lv_obj) default LVGL screen
var r16 # (lv_font) robotocondensed fonts size 16
- # openhasp objects
+ # haspmota objects
var lvh_pages # (list of lvg_page) list of pages
var lvh_page_cur_idx # (int) current page index number
# regex patterns
@@ -1376,8 +1376,8 @@ class OpenHASP
self.r16 = lv.font_embedded("montserrat", 14) # TODO what if does not exist
end
- # set the theme for OpenHASP
- var th2 = lv.theme_openhasp_init(0, lv.color(0xFF00FF), lv.color(0x303030), self.dark, self.r16)
+ # set the theme for HASPmota
+ var th2 = lv.theme_haspmota_init(0, lv.color(0xFF00FF), lv.color(0x303030), self.dark, self.r16)
self.scr.get_disp().set_theme(th2)
self.scr.set_style_bg_color(self.dark ? lv.color(0x000000) : lv.color(0xFFFFFF),0) # set background to white
# apply theme to layer_top, but keep it transparent
@@ -1675,7 +1675,7 @@ class OpenHASP
return
end
- # extract openhasp class, prefix with `lvh_`. Ex: `btn` becomes `lvh_btn`
+ # extract haspmota class, prefix with `lvh_`. Ex: `btn` becomes `lvh_btn`
# extract parent
var parent_lvgl
var parent_id = int(jline.find("parentid"))
@@ -1746,20 +1746,20 @@ class OpenHASP
end
end
end
-openhasp.OpenHASP = OpenHASP
+haspmota.HASPmota = HASPmota
#################################################################################
# General module initilization
#################################################################################
-# automatically instanciate the OpenHASP() monad
+# automatically instanciate the HASPmota() monad
# note: value is cached in the module cache
-# and is returned whenever you call `import openhasp` again
+# and is returned whenever you call `import haspmota` again
# This means that the object is never garbage collected
#
-openhasp.init = def (m) # `init(m)` is called during first `import openhasp`
- var oh = m.OpenHASP
+haspmota.init = def (m) # `init(m)` is called during first `import haspmota`
+ var oh = m.HASPmota
return oh()
end
-return openhasp
+return haspmota
diff --git a/tasmota/berry/openhasp_src/openhasp_demo.tapp b/tasmota/berry/haspmota_src/haspmota_demo.tapp
similarity index 97%
rename from tasmota/berry/openhasp_src/openhasp_demo.tapp
rename to tasmota/berry/haspmota_src/haspmota_demo.tapp
index aac2e596797e591c167663d041dd031899eec205..313b3158e03523b531a1223420d5f4f3b82a19a9 100644
GIT binary patch
delta 1577
zcmZuxS!fec6rFd|*g7##QE^FZpGMnsOWi8e4eNs1Hnh?d^~ZM7jwUtj#AYIG6~qN%
zD`;cT_aXS>_95aDWkkh(2%^Og!KJ7mewj2a>W>@J>dfeS)-Rcx0$vJejA<+vvp#$|1|Yytj{+XR&t8zC)Hr&vzC@#}Zp^qZ$2
zo`@`T%I+OPC?b~PxfD*GLeDK0Rehqv>dyYHFmca5J9*psG+TG{+Y6~9dCwlU>)=91
z0Ry)?dUJFz<0_>f**}O}$<^~lXO?KKDcX%vS8_Q{TUu+v!cH;bX^Ti5A=Vl-d2-9D
zPqrMU%~x#!W+kq9rzPatZ6<(R%D|+==UT4`O*DHqF(7%(D#9N7^%7-I(F3BRe+4Lmqi93!1}xw3&G_DU
z`DupZw563zE29&!uP^35cQodYcG)L(vTzF$uL%mlW4O~XNW2l@JLk^Fj
zW9*>ynfc$y{2C^jjZ}@J3kJo9apagzeSAm~THS@zBy)bC)MRRTG#T22o}3Bu7gMwp
z%biiNi08{({2rl`4Iy5M+ojfMNOZI5y15%Rqa4aY`uo7AnF%XU1%GO@EG{Hrs;GH4KFNCnu#6!&^l>4thX1B7
z$ovtgCp`EM@+Je7j7*QI9QgyO`1cae(4Twl@7#gxF=W2dR?ebcY4TtM@Pzy{s6jsg
D|0+?|
delta 1572
zcmZuxTWAzl7@qS_)}%8oL`?CLs0TNi&23{^BiL3^t45P78*#m~NX=|AYc@_Y%kHcs
zdGLaw_@K?Y=pp!MZ3#s*Zec`9&=(0oM5!9YzG||YAf;fvw6Q%idd@i2g|p26{r~y?
z`*|@gPmjwDt<7SABv`+TZG+)0@Qmw&D8Js4@fTj(9F1Jx9L3KqVBS~5Kyqjd`LgTErx#RH^0541>+hF~1;IL2RpQD%H5uqi>OGoW
z70WR_*XnwKcjg;u#S~B%Zv@fts4g;qx7VDWdRkuM1oLILg&awcF&+Xo&ouO2A$^J
zwFl*6bMkhAmpmFIf9`g&PZXC!o4Dg%pnhq
z%8uAK2ex~;NbWBN!X-1g1e%@kFmF{s#XLv*d_BC{AeWsWIwZ|v0-dg-01v_7F#+gpng)_*#(jGyiD^2cA
L0iIPd3DoF6tt~gR
diff --git a/tasmota/berry/openhasp_src/openhasp_demo/autoexec.be b/tasmota/berry/haspmota_src/haspmota_demo/autoexec.be
similarity index 87%
rename from tasmota/berry/openhasp_src/openhasp_demo/autoexec.be
rename to tasmota/berry/haspmota_src/haspmota_demo/autoexec.be
index 0d3a90376..0bc19a917 100644
--- a/tasmota/berry/openhasp_src/openhasp_demo/autoexec.be
+++ b/tasmota/berry/haspmota_src/haspmota_demo/autoexec.be
@@ -1,5 +1,5 @@
# OpenHASP demo
-# rm openhasp_demo.tapp ; zip -j -0 openhasp_demo.tapp openhasp_demo/* openhasp_core/openhasp.be
+# rm haspmota_demo.tapp ; zip -j -0 haspmota_demo.tapp haspmota_demo/* haspmota_core/haspmota.be
if !tasmota.memory().contains("psram")
print("HSP: Error: OpenHASP demo requires PSRAM")
@@ -10,8 +10,8 @@ import lv_tasmota_log
import lv_tasmota_info
import lv_wifi_graph
-import openhasp
-openhasp.start(false, "openhasp_demo.tapp#pages.jsonl")
+import haspmota
+haspmota.start(false, "haspmota_demo.tapp#pages.jsonl")
var prev_day = -1
def set_watch()
diff --git a/tasmota/berry/openhasp_src/openhasp_demo/lv_tasmota_info.be b/tasmota/berry/haspmota_src/haspmota_demo/lv_tasmota_info.be
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_demo/lv_tasmota_info.be
rename to tasmota/berry/haspmota_src/haspmota_demo/lv_tasmota_info.be
diff --git a/tasmota/berry/openhasp_src/openhasp_demo/lv_tasmota_log.be b/tasmota/berry/haspmota_src/haspmota_demo/lv_tasmota_log.be
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_demo/lv_tasmota_log.be
rename to tasmota/berry/haspmota_src/haspmota_demo/lv_tasmota_log.be
diff --git a/tasmota/berry/openhasp_src/openhasp_demo/lv_wifi_graph.be b/tasmota/berry/haspmota_src/haspmota_demo/lv_wifi_graph.be
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_demo/lv_wifi_graph.be
rename to tasmota/berry/haspmota_src/haspmota_demo/lv_wifi_graph.be
diff --git a/tasmota/berry/openhasp_src/openhasp_demo/noun_Fan_35097_140.png b/tasmota/berry/haspmota_src/haspmota_demo/noun_Fan_35097_140.png
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_demo/noun_Fan_35097_140.png
rename to tasmota/berry/haspmota_src/haspmota_demo/noun_Fan_35097_140.png
diff --git a/tasmota/berry/openhasp_src/openhasp_demo/pages.jsonl b/tasmota/berry/haspmota_src/haspmota_demo/pages.jsonl
similarity index 92%
rename from tasmota/berry/openhasp_src/openhasp_demo/pages.jsonl
rename to tasmota/berry/haspmota_src/haspmota_demo/pages.jsonl
index 12cd03736..701cc32c9 100644
--- a/tasmota/berry/openhasp_src/openhasp_demo/pages.jsonl
+++ b/tasmota/berry/haspmota_src/haspmota_demo/pages.jsonl
@@ -36,16 +36,16 @@
{"page":4,"comment":"---------- Page 4 - fan animation ----------"}
{"id":0,"bg_color":"#0000A0","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#FFFFFF"}
-{"id":11,"obj":"img","src":"A:/openhasp_demo.tapp#noun_Fan_35097_140.png","auto_size":1,"w":140,"h":140,"x":50,"y":50,"image_recolor":"#0080FF","image_recolor_opa":150}
+{"id":11,"obj":"img","src":"A:/haspmota_demo.tapp#noun_Fan_35097_140.png","auto_size":1,"w":140,"h":140,"x":50,"y":50,"image_recolor":"#0080FF","image_recolor_opa":150}
{"id":12,"obj":"spinner","parentid":11,"x":7,"y":6,"w":126,"h":126,"bg_opa":0,"border_width":0,"line_width":7,"line_width1":7,"type":2,"angle":120,"speed":1000,"value_str":3,"value_font":24}
{"page":5,"comment":"---------- Page 5 - fancy watch ----------"}
{"id":0,"bg_color":"#000000","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#000000"}
-{"id":10,"obj":"img","src":"A:/openhasp_demo.tapp#watch_ren_back_240.png","x":40,"y":0,"w":240,"h":240}
-{"id":11,"obj":"img","parentid":10,"src":"A:/openhasp_demo.tapp#watch_ren_hour_240.png","auto_size":1,"x":110,"y":45}
-{"id":12,"obj":"img","parentid":10,"src":"A:/openhasp_demo.tapp#watch_ren_min_240.png","auto_size":1}
-{"id":13,"obj":"img","parentid":10,"src":"A:/openhasp_demo.tapp#watch_ren_sec_240.png","auto_size":1,"x":110,"y":10}
+{"id":10,"obj":"img","src":"A:/haspmota_demo.tapp#watch_ren_back_240.png","x":40,"y":0,"w":240,"h":240}
+{"id":11,"obj":"img","parentid":10,"src":"A:/haspmota_demo.tapp#watch_ren_hour_240.png","auto_size":1,"x":110,"y":45}
+{"id":12,"obj":"img","parentid":10,"src":"A:/haspmota_demo.tapp#watch_ren_min_240.png","auto_size":1}
+{"id":13,"obj":"img","parentid":10,"src":"A:/haspmota_demo.tapp#watch_ren_sec_240.png","auto_size":1,"x":110,"y":10}
{"id":15,"obj":"label","parentid":10,"x":184,"y":112,"w":18,"h":16,"text":"","align":1,"text_font":"montserrat-14"}
diff --git a/tasmota/berry/openhasp_src/openhasp_demo/watch_ren_back_240.png b/tasmota/berry/haspmota_src/haspmota_demo/watch_ren_back_240.png
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_demo/watch_ren_back_240.png
rename to tasmota/berry/haspmota_src/haspmota_demo/watch_ren_back_240.png
diff --git a/tasmota/berry/openhasp_src/openhasp_demo/watch_ren_hour_240.png b/tasmota/berry/haspmota_src/haspmota_demo/watch_ren_hour_240.png
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_demo/watch_ren_hour_240.png
rename to tasmota/berry/haspmota_src/haspmota_demo/watch_ren_hour_240.png
diff --git a/tasmota/berry/openhasp_src/openhasp_demo/watch_ren_min_240.png b/tasmota/berry/haspmota_src/haspmota_demo/watch_ren_min_240.png
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_demo/watch_ren_min_240.png
rename to tasmota/berry/haspmota_src/haspmota_demo/watch_ren_min_240.png
diff --git a/tasmota/berry/openhasp_src/openhasp_demo/watch_ren_sec_240.png b/tasmota/berry/haspmota_src/haspmota_demo/watch_ren_sec_240.png
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_demo/watch_ren_sec_240.png
rename to tasmota/berry/haspmota_src/haspmota_demo/watch_ren_sec_240.png
diff --git a/tasmota/berry/openhasp_src/openhasp_examples/demo-all.jsonl b/tasmota/berry/haspmota_src/haspmota_examples/demo-all.jsonl
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_examples/demo-all.jsonl
rename to tasmota/berry/haspmota_src/haspmota_examples/demo-all.jsonl
diff --git a/tasmota/berry/openhasp_src/openhasp_examples/demo1.jsonl b/tasmota/berry/haspmota_src/haspmota_examples/demo1.jsonl
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_examples/demo1.jsonl
rename to tasmota/berry/haspmota_src/haspmota_examples/demo1.jsonl
diff --git a/tasmota/berry/openhasp_src/openhasp_examples/demo2.jsonl b/tasmota/berry/haspmota_src/haspmota_examples/demo2.jsonl
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_examples/demo2.jsonl
rename to tasmota/berry/haspmota_src/haspmota_examples/demo2.jsonl
diff --git a/tasmota/berry/openhasp_src/openhasp_examples/demo3.jsonl b/tasmota/berry/haspmota_src/haspmota_examples/demo3.jsonl
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_examples/demo3.jsonl
rename to tasmota/berry/haspmota_src/haspmota_examples/demo3.jsonl
diff --git a/tasmota/berry/openhasp_src/openhasp_examples/lv.jsonl b/tasmota/berry/haspmota_src/haspmota_examples/lv.jsonl
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_examples/lv.jsonl
rename to tasmota/berry/haspmota_src/haspmota_examples/lv.jsonl
diff --git a/tasmota/berry/openhasp_src/openhasp_widgets.tapp b/tasmota/berry/haspmota_src/haspmota_widgets.tapp
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_widgets.tapp
rename to tasmota/berry/haspmota_src/haspmota_widgets.tapp
diff --git a/tasmota/berry/openhasp_src/openhasp_widgets/autoexec.be b/tasmota/berry/haspmota_src/haspmota_widgets/autoexec.be
similarity index 64%
rename from tasmota/berry/openhasp_src/openhasp_widgets/autoexec.be
rename to tasmota/berry/haspmota_src/haspmota_widgets/autoexec.be
index edada704e..e174a8098 100644
--- a/tasmota/berry/openhasp_src/openhasp_widgets/autoexec.be
+++ b/tasmota/berry/haspmota_src/haspmota_widgets/autoexec.be
@@ -1,6 +1,6 @@
# pre-load widgets so future `import` will be already in memory
# create tapp file with:
-# rm rm openhasp_widgets.tapp; zip -j -0 openhasp_widgets.tapp openhasp_widgets/*
+# rm rm haspmota_widgets.tapp; zip -j -0 haspmota_widgets.tapp haspmota_widgets/*
import lv_tasmota_log
import lv_tasmota_info
import lv_wifi_graph
diff --git a/tasmota/berry/openhasp_src/openhasp_widgets/lv_tasmota_info.be b/tasmota/berry/haspmota_src/haspmota_widgets/lv_tasmota_info.be
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_widgets/lv_tasmota_info.be
rename to tasmota/berry/haspmota_src/haspmota_widgets/lv_tasmota_info.be
diff --git a/tasmota/berry/openhasp_src/openhasp_widgets/lv_tasmota_log.be b/tasmota/berry/haspmota_src/haspmota_widgets/lv_tasmota_log.be
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_widgets/lv_tasmota_log.be
rename to tasmota/berry/haspmota_src/haspmota_widgets/lv_tasmota_log.be
diff --git a/tasmota/berry/openhasp_src/openhasp_widgets/lv_wifi_graph.be b/tasmota/berry/haspmota_src/haspmota_widgets/lv_wifi_graph.be
similarity index 100%
rename from tasmota/berry/openhasp_src/openhasp_widgets/lv_wifi_graph.be
rename to tasmota/berry/haspmota_src/haspmota_widgets/lv_wifi_graph.be
diff --git a/tasmota/berry/openhasp_src/gen_openhasp.sh b/tasmota/berry/openhasp_src/gen_openhasp.sh
deleted file mode 100755
index 711398637..000000000
--- a/tasmota/berry/openhasp_src/gen_openhasp.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-# generate all openhasp tapp files
-rm openhasp.tapp; zip -j -0 openhasp.tapp openhasp_core/*
-rm openhasp_demo.tapp ; zip -j -0 openhasp_demo.tapp openhasp_demo/* openhasp_core/openhasp.be
-cp openhasp.tapp ../openhasp
-cp openhasp_demo.tapp ../openhasp
diff --git a/tasmota/berry/openhasp_src/openhasp_core/autoexec.be b/tasmota/berry/openhasp_src/openhasp_core/autoexec.be
deleted file mode 100644
index 7a74f523d..000000000
--- a/tasmota/berry/openhasp_src/openhasp_core/autoexec.be
+++ /dev/null
@@ -1,7 +0,0 @@
-# start openhasp
-# package with
-# rm openhasp.tapp; zip -j -0 openhasp.tapp openhasp_core/*
-import openhasp
-
-# defer start to make sure all modules and tapp applications were loaded first
-tasmota.set_timer(1000, /-> openhasp.start())
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index b28dc2184..c34edb489 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -1048,7 +1048,7 @@
// -- LVGL Graphics Library ---------------------------------
//#define USE_LVGL // LVGL Engine, requires Berry (+382KB)
#define USE_LVGL_PSRAM // Allocate LVGL memory in PSRAM if PSRAM is connected - this might be slightly slower but leaves main memory intact
- // #define USE_LVGL_OPENHASP // Enable OpenHASP compatiblity and Robotocondensed fonts (+90KB flash)
+ // #define USE_LVGL_HASPMOTA // Enable OpenHASP compatiblity and Robotocondensed fonts (+90KB flash)
#define USE_LVGL_MAX_SLEEP 10 // max sleep in ms when LVGL is enabled, more than 10ms will make display less responsive
#define USE_LVGL_PNG_DECODER // include a PNG image decoder from file system (+16KB)
//#define USE_LVGL_TOUCHSCREEN // Use virtual touch screen with Berry driver
diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h
index eb96edc9f..e99cc9fee 100644
--- a/tasmota/tasmota_configurations_ESP32.h
+++ b/tasmota/tasmota_configurations_ESP32.h
@@ -260,7 +260,7 @@
#ifdef FIRMWARE_LVGL
#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "lvgl-openhasp"
+#define CODE_IMAGE_STR "lvgl-haspmota"
#undef MODULE
#define MODULE WEMOS // [Module] Select default module from tasmota_template.h
@@ -276,7 +276,7 @@
#define USE_I2S
#define USE_SPI
#define USE_LVGL
-#define USE_LVGL_OPENHASP
+#define USE_LVGL_HASPMOTA
#define USE_LVGL_FREETYPE
#undef SET_ESP32_STACK_SIZE
#define SET_ESP32_STACK_SIZE (24 * 1024)
diff --git a/tasmota/xdrv_52_3_berry_lvgl.ino b/tasmota/xdrv_52_3_berry_lvgl.ino
index fcd270179..56aa6e833 100644
--- a/tasmota/xdrv_52_3_berry_lvgl.ino
+++ b/tasmota/xdrv_52_3_berry_lvgl.ino
@@ -306,7 +306,7 @@ extern "C" {
{ "montserrat", lv_montserrat_fonts },
{ "seg7", lv_seg7_fonts },
{ "unscii", lv_unscii_fonts},
-#ifdef USE_LVGL_OPENHASP
+#ifdef USE_LVGL_HASPMOTA
{ "robotocondensed", lv_robotocondensed_fonts },
#endif
{ nullptr, nullptr}
@@ -355,9 +355,9 @@ extern "C" {
}
int lv0_load_robotocondensed_latin1_font(bvm *vm) {
-#ifdef USE_LVGL_OPENHASP
+#ifdef USE_LVGL_HASPMOTA
return lv_load_embedded_font(vm, "robotocondensed", 0);
-#endif // USE_LVGL_OPENHASP
+#endif // USE_LVGL_HASPMOTA
be_raise(vm, kTypeError, nullptr);
}
From eb798df249da9e229017da54c0034c3ac0de59a4 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 May 2022 12:15:06 +0200
Subject: [PATCH 04/17] Add more logging to Shelly 3EM
Add more logging to Shelly 3EM (#13515)
---
tasmota/xnrg_23_ade7880.ino | 1 +
1 file changed, 1 insertion(+)
diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino
index 2bdf9f486..a05baa88a 100644
--- a/tasmota/xnrg_23_ade7880.ino
+++ b/tasmota/xnrg_23_ade7880.ino
@@ -477,6 +477,7 @@ void Ade7880Cycle(void) {
uint32_t status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0xE502 - 0x000FEFE0
if (!bitRead(status0, 5)) { // LENERGY
+ AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Unexpected ISR0 0x%08X"), status0);
return;
} else {
Ade7880WriteVerify(ADE7880_STATUS0, 0x00000020); // 0xE502 - Acknowledge LENERGY - Reset IRQ0 line
From a0f59ef2ecddb6bfac5ad737ca26e880b4dc28bf Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 May 2022 12:28:21 +0200
Subject: [PATCH 05/17] Add more logging to Shelly 3EM
Add more logging to Shelly 3EM (#13515)
---
tasmota/xnrg_23_ade7880.ino | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino
index a05baa88a..7adacaa97 100644
--- a/tasmota/xnrg_23_ade7880.ino
+++ b/tasmota/xnrg_23_ade7880.ino
@@ -476,6 +476,7 @@ void Ade7880Cycle(void) {
#endif // ADE7880_PROFILING
uint32_t status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0xE502 - 0x000FEFE0
+/*
if (!bitRead(status0, 5)) { // LENERGY
AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Unexpected ISR0 0x%08X"), status0);
return;
@@ -483,6 +484,13 @@ void Ade7880Cycle(void) {
Ade7880WriteVerify(ADE7880_STATUS0, 0x00000020); // 0xE502 - Acknowledge LENERGY - Reset IRQ0 line
status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0xE502 - 0x000FEFC0
}
+*/
+ if (!bitRead(status0, 5)) { // LENERGY
+ AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Unexpected ISR0 0x%08X"), status0);
+ }
+ Ade7880WriteVerify(ADE7880_STATUS0, 0x00000020); // 0xE502 - Acknowledge LENERGY - Reset IRQ0 line
+ status0 = Ade7880ReadVerify(ADE7880_STATUS0); // 0xE502 - 0x000FEFC0
+
if (Ade7880.cycle_count) { // Allow calibration stabilization
Ade7880.cycle_count--;
return; // Skip first cycles
From 71ca63e49d729a5866e7fd9c95b7bae7fc145b6b Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 May 2022 14:01:30 +0200
Subject: [PATCH 06/17] Add platformio S3 and S3usb envs
- Add platformio S3 and S3usb envs
- Reorganize env32 to compile safeboot before production
---
platformio_tasmota_cenv_sample.ini | 2 +-
platformio_tasmota_env32.ini | 138 +++++++++++++++--------------
2 files changed, 74 insertions(+), 66 deletions(-)
diff --git a/platformio_tasmota_cenv_sample.ini b/platformio_tasmota_cenv_sample.ini
index d2ac59086..90d13b59c 100644
--- a/platformio_tasmota_cenv_sample.ini
+++ b/platformio_tasmota_cenv_sample.ini
@@ -12,7 +12,7 @@ build_flags = ${env:tasmota32_base.build_flags}
-D USE_WIFI_RANGE_EXTENDER
-D USE_WIFI_RANGE_EXTENDER_NAPT
-[env:tasmota32s3]
+[env:tasmota32s3-file]
extends = env:tasmota32_base
board = esp32s3
build_flags = ${env:tasmota32_base.build_flags} -D FIRMWARE_TASMOTA32
diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini
index ee7be6bd1..177e9dc72 100644
--- a/platformio_tasmota_env32.ini
+++ b/platformio_tasmota_env32.ini
@@ -40,6 +40,16 @@ lib_ignore =
; tasmota/berry/modules/Partition_Manager.tapp
custom_files_upload = no_files
+[env:tasmota32-safeboot]
+extends = env:tasmota32_base
+build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_SAFEBOOT
+lib_extra_dirs = lib/lib_ssl, lib/libesp32
+lib_ignore =
+ TTGO TWatch Library
+ NimBLE-Arduino
+ Micro-RTSP
+ epdiy
+
[env:tasmota32]
extends = env:tasmota32_base
build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
@@ -54,13 +64,6 @@ extends = env:tasmota32_base
board = esp32_16M
build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
-[env:tasmota32solo1]
-extends = env:tasmota32_base
-board = esp32_solo1_4M
-platform = ${core32solo1.platform}
-platform_packages = ${core32solo1.platform_packages}
-build_flags = ${core32solo1.build_flags} -DFIRMWARE_TASMOTA32
-
[env:tasmota32-webcam]
extends = env:tasmota32_base
board = esp32-cam
@@ -98,42 +101,6 @@ extends = env:tasmota32_base
build_flags = ${env:tasmota32_base.build_flags} -DUSE_IR_REMOTE_FULL -DFIRMWARE_IR
lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_ssl
-[env:tasmota32c3]
-extends = env:tasmota32_base
-board = esp32c3
-build_unflags = ${env:tasmota32_base.build_unflags}
- -flto
- -mtarget-align
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
- -fno-lto
-lib_ignore =
- TTGO TWatch Library
- Micro-RTSP
- epdiy
-[env:tasmota32c3usb]
-extends = env:tasmota32c3
-board = esp32c3usb
-
-[env:tasmota32s2]
-extends = env:tasmota32_base
-board = esp32s2
-build_flags = ${env:tasmota32_base.build_flags} -D FIRMWARE_TASMOTA32
-lib_ignore =
- TTGO TWatch Library
- NimBLE-Arduino
- Micro-RTSP
- epdiy
-
-[env:tasmota32-safeboot]
-extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_SAFEBOOT
-lib_extra_dirs = lib/lib_ssl, lib/libesp32
-lib_ignore =
- TTGO TWatch Library
- NimBLE-Arduino
- Micro-RTSP
- epdiy
-
[env:tasmota32solo1-safeboot]
extends = env:tasmota32_base
board = esp32_solo1_4M
@@ -147,6 +114,49 @@ lib_ignore =
Micro-RTSP
epdiy
+[env:tasmota32solo1]
+extends = env:tasmota32_base
+board = esp32_solo1_4M
+platform = ${core32solo1.platform}
+platform_packages = ${core32solo1.platform_packages}
+build_flags = ${core32solo1.build_flags} -DFIRMWARE_TASMOTA32
+
+[env:tasmota32c3-safeboot]
+extends = env:tasmota32_base
+board = esp32c3
+build_unflags = ${env:tasmota32_base.build_unflags}
+ -flto
+ -mtarget-align
+build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_SAFEBOOT
+ -fno-lto
+lib_extra_dirs = lib/lib_ssl, lib/libesp32
+lib_ignore =
+ TTGO TWatch Library
+ NimBLE-Arduino
+ Micro-RTSP
+ epdiy
+
+[env:tasmota32c3]
+extends = env:tasmota32_base
+board = esp32c3
+build_unflags = ${env:tasmota32_base.build_unflags}
+ -flto
+ -mtarget-align
+build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
+ -fno-lto
+lib_ignore =
+ TTGO TWatch Library
+ Micro-RTSP
+ epdiy
+
+[env:tasmota32c3usb-safeboot]
+extends = env:tasmota32c3-safeboot
+board = esp32c3usb
+
+[env:tasmota32c3usb]
+extends = env:tasmota32c3
+board = esp32c3usb
+
[env:tasmota32s2-safeboot]
extends = env:tasmota32_base
board = esp32s2
@@ -158,6 +168,16 @@ lib_ignore =
Micro-RTSP
epdiy
+[env:tasmota32s2]
+extends = env:tasmota32_base
+board = esp32s2
+build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
+lib_ignore =
+ TTGO TWatch Library
+ NimBLE-Arduino
+ Micro-RTSP
+ epdiy
+
[env:tasmota32s3-safeboot]
extends = env:tasmota32_base
board = esp32s3
@@ -169,35 +189,23 @@ lib_ignore =
Micro-RTSP
epdiy
-[env:tasmota32c3-safeboot]
+[env:tasmota32s3]
extends = env:tasmota32_base
-board = esp32c3
-build_unflags = ${env:tasmota32_base.build_unflags}
- -flto
- -mtarget-align
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_SAFEBOOT
- -fno-lto
-lib_extra_dirs = lib/lib_ssl, lib/libesp32
+board = esp32s3
+build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
lib_ignore =
TTGO TWatch Library
NimBLE-Arduino
Micro-RTSP
epdiy
-[env:tasmota32c3usb-safeboot]
-extends = env:tasmota32_base
-board = esp32c3usb
-build_unflags = ${env:tasmota32_base.build_unflags}
- -flto
- -mtarget-align
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_SAFEBOOT
- -fno-lto
-lib_extra_dirs = lib/lib_ssl, lib/libesp32
-lib_ignore =
- TTGO TWatch Library
- NimBLE-Arduino
- Micro-RTSP
- epdiy
+[env:tasmota32s3usb-safeboot]
+extends = env:tasmota32s3-safeboot
+board = esp32s3usb
+
+[env:tasmota32s3usb]
+extends = env:tasmota32s3
+board = esp32s3usb
[env:tasmota32-AF]
extends = env:tasmota32_base
From 82e2eaf889772d69847584897ea10a63e1a4182b Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 May 2022 14:10:25 +0200
Subject: [PATCH 07/17] Add S3usb to workflows
---
.github/workflows/Tasmota_build_devel.yml | 2 ++
.github/workflows/Tasmota_build_master.yml | 4 +++-
.github/workflows/build_all_the_things.yml | 1 +
3 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/Tasmota_build_devel.yml b/.github/workflows/Tasmota_build_devel.yml
index 3f9fe9e06..b9bc1feae 100644
--- a/.github/workflows/Tasmota_build_devel.yml
+++ b/.github/workflows/Tasmota_build_devel.yml
@@ -46,6 +46,7 @@ jobs:
- tasmota32c3usb-safeboot
- tasmota32s2-safeboot
- tasmota32s3-safeboot
+ - tasmota32s3usb-safeboot
steps:
- uses: actions/checkout@v3
with:
@@ -124,6 +125,7 @@ jobs:
[ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32c3*.* ] || mv ./mv_firmware/firmware/tasmota32c3*.* ./firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32s3*.* ] || mv ./mv_firmware/firmware/tasmota32s3*.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-safeboot* ] || mv ./mv_firmware/firmware/tasmota32-safeboot* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-* ] || mv ./mv_firmware/firmware/tasmota32-* ./firmware/tasmota32/languages/
[ ! -f ./mv_firmware/firmware/tasmota32* ] || mv ./mv_firmware/firmware/tasmota32* ./firmware/tasmota32/
diff --git a/.github/workflows/Tasmota_build_master.yml b/.github/workflows/Tasmota_build_master.yml
index d39246639..6b075dcd5 100644
--- a/.github/workflows/Tasmota_build_master.yml
+++ b/.github/workflows/Tasmota_build_master.yml
@@ -42,9 +42,10 @@ jobs:
- tasmota32solo1-safeboot
- tasmota32-safeboot
- tasmota32c3-safeboot
+ - tasmota32c3usb-safeboot
- tasmota32s2-safeboot
- tasmota32s3-safeboot
- - tasmota32c3usb-safeboot
+ - tasmota32s3usb-safeboot
steps:
- uses: actions/checkout@v3
with:
@@ -132,6 +133,7 @@ jobs:
[ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32c3*.* ] || mv ./mv_firmware/firmware/tasmota32c3*.* ./release-firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32s3*.* ] || mv ./mv_firmware/firmware/tasmota32s3*.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-safeboot* ] || mv ./mv_firmware/firmware/tasmota32-safeboot* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-* ] || mv ./mv_firmware/firmware/tasmota32-* ./release-firmware/tasmota32/languages/
[ ! -f ./mv_firmware/firmware/tasmota32* ] || mv ./mv_firmware/firmware/tasmota32* ./release-firmware/tasmota32/languages/
diff --git a/.github/workflows/build_all_the_things.yml b/.github/workflows/build_all_the_things.yml
index 3303759f4..a8cabfc8b 100644
--- a/.github/workflows/build_all_the_things.yml
+++ b/.github/workflows/build_all_the_things.yml
@@ -50,6 +50,7 @@ jobs:
- tasmota32c3usb-safeboot
- tasmota32s2-safeboot
- tasmota32s3-safeboot
+ - tasmota32s3usb-safeboot
steps:
- uses: actions/checkout@v2
- name: Set up Python
From 8aa3f4cb7a81c339321384131ebee13fd9e20d51 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 21 May 2022 15:14:17 +0200
Subject: [PATCH 08/17] Add S2 and S3 to workflows
---
.github/workflows/Tasmota_build_devel.yml | 4 ++++
.github/workflows/Tasmota_build_master.yml | 4 ++++
.github/workflows/build_all_the_things.yml | 4 +++-
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/Tasmota_build_devel.yml b/.github/workflows/Tasmota_build_devel.yml
index b9bc1feae..c81bc4b65 100644
--- a/.github/workflows/Tasmota_build_devel.yml
+++ b/.github/workflows/Tasmota_build_devel.yml
@@ -39,6 +39,9 @@ jobs:
- tasmota32-lvgl
- tasmota32c3
- tasmota32c3usb
+ - tasmota32s2
+ - tasmota32s3
+ - tasmota32s3usb
- tasmota32solo1
- tasmota32solo1-safeboot
- tasmota32-safeboot
@@ -125,6 +128,7 @@ jobs:
[ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32c3*.* ] || mv ./mv_firmware/firmware/tasmota32c3*.* ./firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32s2*.* ] || mv ./mv_firmware/firmware/tasmota32s2*.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32s3*.* ] || mv ./mv_firmware/firmware/tasmota32s3*.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-safeboot* ] || mv ./mv_firmware/firmware/tasmota32-safeboot* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-* ] || mv ./mv_firmware/firmware/tasmota32-* ./firmware/tasmota32/languages/
diff --git a/.github/workflows/Tasmota_build_master.yml b/.github/workflows/Tasmota_build_master.yml
index 6b075dcd5..ab158fc49 100644
--- a/.github/workflows/Tasmota_build_master.yml
+++ b/.github/workflows/Tasmota_build_master.yml
@@ -38,6 +38,9 @@ jobs:
- tasmota32-lvgl
- tasmota32c3
- tasmota32c3usb
+ - tasmota32s2
+ - tasmota32s3
+ - tasmota32s3usb
- tasmota32solo1
- tasmota32solo1-safeboot
- tasmota32-safeboot
@@ -133,6 +136,7 @@ jobs:
[ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32c3*.* ] || mv ./mv_firmware/firmware/tasmota32c3*.* ./release-firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32s2*.* ] || mv ./mv_firmware/firmware/tasmota32s2*.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32s3*.* ] || mv ./mv_firmware/firmware/tasmota32s3*.* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-safeboot* ] || mv ./mv_firmware/firmware/tasmota32-safeboot* ./release-firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-* ] || mv ./mv_firmware/firmware/tasmota32-* ./release-firmware/tasmota32/languages/
diff --git a/.github/workflows/build_all_the_things.yml b/.github/workflows/build_all_the_things.yml
index a8cabfc8b..f82d04b51 100644
--- a/.github/workflows/build_all_the_things.yml
+++ b/.github/workflows/build_all_the_things.yml
@@ -40,9 +40,11 @@ jobs:
- tasmota32-display
- tasmota32-ir
- tasmota32-lvgl
- - tasmota32s2
- tasmota32c3
- tasmota32c3usb
+ - tasmota32s2
+ - tasmota32s3
+ - tasmota32s3usb
- tasmota32solo1
- tasmota32solo1-safeboot
- tasmota32-safeboot
From dd1855005cd726c61db6cd4f9cacee6018820ed5 Mon Sep 17 00:00:00 2001
From: Stephan Hadinger
Date: Sat, 21 May 2022 18:05:40 +0200
Subject: [PATCH 09/17] Zigbee fix regression
---
tasmota/xdrv_23_zigbee_5_converters.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/xdrv_23_zigbee_5_converters.ino b/tasmota/xdrv_23_zigbee_5_converters.ino
index 5c45df943..d80097056 100644
--- a/tasmota/xdrv_23_zigbee_5_converters.ino
+++ b/tasmota/xdrv_23_zigbee_5_converters.ino
@@ -849,7 +849,7 @@ public:
uint8_t transactseq = 0; // transaction sequence number
uint8_t cmd = 0;
SBuffer payload;
- uint16_t cluster = 0;
+ uint16_t cluster = 0xFFFF; // invalid cluster by default
uint16_t groupaddr = 0;
// information from decoded ZCL frame
uint16_t shortaddr = BAD_SHORTADDR; // BAD_SHORTADDR is broadcast, so considered invalid
From 18dee9ff3b6797c1276bea2a742cdecbcdbfb901 Mon Sep 17 00:00:00 2001
From: Stephan Hadinger
Date: Sat, 21 May 2022 19:02:58 +0200
Subject: [PATCH 10/17] Partition_core suppport unknown types
---
lib/libesp32/berry/generate/be_const_strtab.h | 1 +
.../berry/generate/be_const_strtab_def.h | 5 +--
.../src/be_partition_core_module.c | 32 ++++++++++++++-----
.../src/embedded/partition_core.be | 4 +++
4 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h
index d9cdc2394..ea4270620 100644
--- a/lib/libesp32/berry/generate/be_const_strtab.h
+++ b/lib/libesp32/berry/generate/be_const_strtab.h
@@ -1,5 +1,6 @@
extern const bcstring be_const_str_;
extern const bcstring be_const_str_00;
+extern const bcstring be_const_str_0x_X2502X;
extern const bcstring be_const_str_AA50;
extern const bcstring be_const_str_AES_GCM;
extern const bcstring be_const_str_ALIGN_BOTTOM_MID;
diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h
index a2d290c79..b87fdfee6 100644
--- a/lib/libesp32/berry/generate/be_const_strtab_def.h
+++ b/lib/libesp32/berry/generate/be_const_strtab_def.h
@@ -50,6 +50,7 @@ be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_pow);
be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_AudioGeneratorMP3);
be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_keys);
be_define_const_str(00, "00", 569209421u, 0, 2, &be_const_str_find_op);
+be_define_const_str(0x_X2502X, "0x%02X", 2626549866u, 0, 6, &be_const_str_settings);
be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_compile);
be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_instance_X20required);
be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "
", 3546571739u, 0, 11, NULL);
@@ -1459,7 +1460,7 @@ static const bstring* const m_string_table[] = {
(const bstring *)&be_const_str_TASMOTA,
(const bstring *)&be_const_str__X2F,
(const bstring *)&be_const_str_lower,
- (const bstring *)&be_const_str_settings,
+ (const bstring *)&be_const_str_0x_X2502X,
NULL,
(const bstring *)&be_const_str__X2E,
(const bstring *)&be_const_str_SERIAL_6N2,
@@ -1542,6 +1543,6 @@ static const bstring* const m_string_table[] = {
static const struct bconststrtab m_const_string_table = {
.size = 505,
- .count = 1033,
+ .count = 1034,
.table = m_string_table
};
diff --git a/lib/libesp32/berry_tasmota/src/be_partition_core_module.c b/lib/libesp32/berry_tasmota/src/be_partition_core_module.c
index 68de711f5..840c6df92 100644
--- a/lib/libesp32/berry_tasmota/src/be_partition_core_module.c
+++ b/lib/libesp32/berry_tasmota/src/be_partition_core_module.c
@@ -1311,7 +1311,7 @@ be_local_closure(Partition_info_is_factory, /* name */
********************************************************************/
be_local_closure(Partition_info_type_to_string, /* name */
be_nested_proto(
- 2, /* nstack */
+ 6, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1319,16 +1319,19 @@ be_local_closure(Partition_info_type_to_string, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
+ ( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str(type),
/* K1 */ be_const_int(0),
/* K2 */ be_nested_str(app),
/* K3 */ be_const_int(1),
/* K4 */ be_nested_str(data),
+ /* K5 */ be_nested_str(string),
+ /* K6 */ be_nested_str(format),
+ /* K7 */ be_nested_str(0x_X2502X),
}),
&be_const_str_type_to_string,
&be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
+ ( &(const binstruction[15]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
0x1C040301, // 0001 EQ R1 R1 K1
0x78060001, // 0002 JMPF R1 #0005
@@ -1338,7 +1341,12 @@ be_local_closure(Partition_info_type_to_string, /* name */
0x1C040303, // 0006 EQ R1 R1 K3
0x78060000, // 0007 JMPF R1 #0009
0x80060800, // 0008 RET 1 K4
- 0x80000000, // 0009 RET 0
+ 0xA4060A00, // 0009 IMPORT R1 K5
+ 0x8C080306, // 000A GETMET R2 R1 K6
+ 0x58100007, // 000B LDCONST R4 K7
+ 0x88140100, // 000C GETMBR R5 R0 K0
+ 0x7C080600, // 000D CALL R2 3
+ 0x80040400, // 000E RET 1 R2
})
)
);
@@ -1453,7 +1461,7 @@ be_local_closure(Partition_info_init, /* name */
********************************************************************/
be_local_closure(Partition_info_subtype_to_string, /* name */
be_nested_proto(
- 4, /* nstack */
+ 6, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1461,7 +1469,7 @@ be_local_closure(Partition_info_subtype_to_string, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[18]) { /* constants */
+ ( &(const bvalue[21]) { /* constants */
/* K0 */ be_nested_str(type),
/* K1 */ be_const_int(0),
/* K2 */ be_nested_str(subtype),
@@ -1480,10 +1488,13 @@ be_local_closure(Partition_info_subtype_to_string, /* name */
/* K15 */ be_nested_str(esphttpd),
/* K16 */ be_nested_str(fat),
/* K17 */ be_nested_str(spiffs),
+ /* K18 */ be_nested_str(string),
+ /* K19 */ be_nested_str(format),
+ /* K20 */ be_nested_str(0x_X2502X),
}),
&be_const_str_subtype_to_string,
&be_const_str_solidified,
- ( &(const binstruction[83]) { /* code */
+ ( &(const binstruction[88]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
0x1C040301, // 0001 EQ R1 R1 K1
0x7806001A, // 0002 JMPF R1 #001E
@@ -1566,7 +1577,12 @@ be_local_closure(Partition_info_subtype_to_string, /* name */
0x1C040202, // 004F EQ R1 R1 R2
0x78060000, // 0050 JMPF R1 #0052
0x80062200, // 0051 RET 1 K17
- 0x80000000, // 0052 RET 0
+ 0xA4062400, // 0052 IMPORT R1 K18
+ 0x8C080313, // 0053 GETMET R2 R1 K19
+ 0x58100014, // 0054 LDCONST R4 K20
+ 0x88140102, // 0055 GETMBR R5 R0 K2
+ 0x7C080600, // 0056 CALL R2 3
+ 0x80040400, // 0057 RET 1 R2
})
)
);
diff --git a/lib/libesp32/berry_tasmota/src/embedded/partition_core.be b/lib/libesp32/berry_tasmota/src/embedded/partition_core.be
index f72ace0ad..3c48bb7c2 100644
--- a/lib/libesp32/berry_tasmota/src/embedded/partition_core.be
+++ b/lib/libesp32/berry_tasmota/src/embedded/partition_core.be
@@ -146,6 +146,8 @@ class Partition_info
if self.type == 0 return "app"
elif self.type == 1 return "data"
end
+ import string
+ return string.format("0x%02X", self.type)
end
def subtype_to_string()
@@ -166,6 +168,8 @@ class Partition_info
elif self.subtype == 0x82 return "spiffs"
end
end
+ import string
+ return string.format("0x%02X", self.subtype)
end
# Human readable version of Partition information
From fc3907677bbb8edb794ced247c3f9e94066f61a8 Mon Sep 17 00:00:00 2001
From: Stephan Hadinger
Date: Mon, 23 May 2022 21:06:36 +0200
Subject: [PATCH 11/17] Berry improve precompiled gen.sh
---
lib/libesp32/berry/gen.sh | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/lib/libesp32/berry/gen.sh b/lib/libesp32/berry/gen.sh
index 7156e8719..ee97feeef 100755
--- a/lib/libesp32/berry/gen.sh
+++ b/lib/libesp32/berry/gen.sh
@@ -1,2 +1,8 @@
#!/bin/bash
+#
+# generate all precompiled Berry structures from multiple modules
+#
+# Should be eventually included in the build process
+#
+rm generate/be_*.h
python3 tools/pycoc/main.py -o generate src default ../berry_tasmota/src ../berry_mapping/src ../berry_int64/src ../../libesp32_lvgl/lv_binding_berry/src ../../libesp32_lvgl/lv_binding_berry/generate -c default/berry_conf.h
From 999b477419844c15d2b50583dab26c817edbbc22 Mon Sep 17 00:00:00 2001
From: Stephan Hadinger
Date: Mon, 23 May 2022 21:12:47 +0200
Subject: [PATCH 12/17] Simplified SBuffer
---
lib/default/Ext-printf/src/SBuffer.hpp | 23 +++++++----------------
tasmota/xdrv_23_zigbee_9_serial.ino | 5 +----
2 files changed, 8 insertions(+), 20 deletions(-)
diff --git a/lib/default/Ext-printf/src/SBuffer.hpp b/lib/default/Ext-printf/src/SBuffer.hpp
index 67bbbcd48..9c545add0 100644
--- a/lib/default/Ext-printf/src/SBuffer.hpp
+++ b/lib/default/Ext-printf/src/SBuffer.hpp
@@ -48,7 +48,7 @@ public:
inline uint8_t *buf(size_t i = 0) const { return &_buf->buf[i]; }
inline char *charptr(size_t i = 0) const { return (char*) &_buf->buf[i]; }
- virtual ~SBuffer(void) {
+ ~SBuffer(void) {
delete[] _buf;
}
@@ -258,6 +258,12 @@ public:
return buf2;
}
+ static SBuffer SBufferFromBytes(const uint8_t *bytes, size_t len2) {
+ SBuffer buf2(len2);
+ buf2.addBuffer(bytes, len2);
+ return buf2;
+ }
+
// nullptr accepted
static bool equalsSBuffer(const class SBuffer * buf1, const class SBuffer * buf2) {
if (buf1 == buf2) { return true; }
@@ -290,18 +296,3 @@ protected:
SBuffer_impl * _buf;
} SBuffer;
-
-typedef class PreAllocatedSBuffer : public SBuffer {
-
-public:
- PreAllocatedSBuffer(const size_t size, void * buffer) {
- _buf = (SBuffer_impl*) buffer;
- _buf->size = size - 4;
- _buf->len = 0;
- }
-
- ~PreAllocatedSBuffer(void) {
- // don't deallocate
- _buf = nullptr;
- }
-} PreAllocatedSBuffer;
diff --git a/tasmota/xdrv_23_zigbee_9_serial.ino b/tasmota/xdrv_23_zigbee_9_serial.ino
index ef3ef350b..7badbcf77 100644
--- a/tasmota/xdrv_23_zigbee_9_serial.ino
+++ b/tasmota/xdrv_23_zigbee_9_serial.ino
@@ -300,11 +300,8 @@ void ZigbeeInitSerial(void)
ZigbeeSerial->begin(115200);
if (ZigbeeSerial->hardwareSerial()) {
ClaimSerial();
- 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 {
- zigbee_buffer = new SBuffer(ZIGBEE_BUFFER_SIZE);
}
+ zigbee_buffer = new SBuffer(ZIGBEE_BUFFER_SIZE);
zigbee.active = true;
zigbee.init_phase = true; // start the state machine
From 73fc1733b4c5bdb27876b7b6fd9d91ac23608c98 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Tue, 24 May 2022 14:08:46 +0200
Subject: [PATCH 13/17] Enable NimBLE library for S3
---
platformio_tasmota_env32.ini | 1 -
1 file changed, 1 deletion(-)
diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini
index 177e9dc72..dfb40107c 100644
--- a/platformio_tasmota_env32.ini
+++ b/platformio_tasmota_env32.ini
@@ -195,7 +195,6 @@ board = esp32s3
build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
lib_ignore =
TTGO TWatch Library
- NimBLE-Arduino
Micro-RTSP
epdiy
From b1223ad933ff1fe8003b3a8a74c9df66715c5622 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Tue, 24 May 2022 16:50:39 +0200
Subject: [PATCH 14/17] fix VSC intelisense warning
---
.../berry/tools/plugins/vscode/skiars.berry-0.1.0/package.json | 1 -
1 file changed, 1 deletion(-)
diff --git a/lib/libesp32/berry/tools/plugins/vscode/skiars.berry-0.1.0/package.json b/lib/libesp32/berry/tools/plugins/vscode/skiars.berry-0.1.0/package.json
index 8faf7e245..1f206315b 100755
--- a/lib/libesp32/berry/tools/plugins/vscode/skiars.berry-0.1.0/package.json
+++ b/lib/libesp32/berry/tools/plugins/vscode/skiars.berry-0.1.0/package.json
@@ -3,7 +3,6 @@
"displayName": "Berry Script Language",
"description": "A small embedded script language.",
"version": "0.1.0",
- "icon": "berry-icon.png",
"publisher": "skiars",
"engines": {
"vscode": "^1.15.1"
From 208077c808e4f22a4563aabbd8b5c645ffbaa490 Mon Sep 17 00:00:00 2001
From: Stephan Hadinger
Date: Tue, 24 May 2022 21:52:37 +0200
Subject: [PATCH 15/17] Berry add bytes().fromhex()
---
lib/libesp32/berry/generate/be_const_strtab.h | 1 +
.../berry/generate/be_const_strtab_def.h | 2558 +++++++++--------
.../berry/generate/be_fixed_be_class_bytes.h | 61 +-
lib/libesp32/berry/src/be_byteslib.c | 40 +
4 files changed, 1352 insertions(+), 1308 deletions(-)
diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h
index ea4270620..32f145077 100644
--- a/lib/libesp32/berry/generate/be_const_strtab.h
+++ b/lib/libesp32/berry/generate/be_const_strtab.h
@@ -487,6 +487,7 @@ extern const bcstring be_const_str_format;
extern const bcstring be_const_str_from_to;
extern const bcstring be_const_str_fromb64;
extern const bcstring be_const_str_frombytes;
+extern const bcstring be_const_str_fromhex;
extern const bcstring be_const_str_fromptr;
extern const bcstring be_const_str_fromstring;
extern const bcstring be_const_str_full_state;
diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h
index b87fdfee6..6258f104b 100644
--- a/lib/libesp32/berry/generate/be_const_strtab_def.h
+++ b/lib/libesp32/berry/generate/be_const_strtab_def.h
@@ -1,839 +1,840 @@
-be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E);
-be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dzip_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20);
-be_define_const_str(_X0A_X29_X3E, "\n)>", 804061574u, 0, 3, &be_const_str_CFG_X3A_X20running_X20);
-be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_Auto_X2Dconfiguration);
-be_define_const_str(_X20_X20, " ", 2982523533u, 0, 2, NULL);
-be_define_const_str(_X20_X28, " (", 2848302581u, 0, 2, &be_const_str_show);
-be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, NULL);
-be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, NULL);
-be_define_const_str(_X22, "\"", 655135397u, 0, 1, NULL);
-be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_gamma8);
-be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_finish);
-be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_set_alternate);
-be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_pc);
-be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, NULL);
-be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, NULL);
-be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_clock_icon);
-be_define_const_str(_X25, "%", 537692064u, 0, 1, NULL);
-be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_get_free_heap);
-be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_before_del);
-be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_BLE);
-be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_EVENT_DRAW_PART_BEGIN);
-be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_exec_cmd);
-be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str__X3F);
-be_define_const_str(_X27_X20_X2D_X20, "' - ", 3420378487u, 0, 4, &be_const_str_set_light);
-be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str__X2Elen);
-be_define_const_str(_X29, ")", 739023492u, 0, 1, NULL);
-be_define_const_str(_X2A, "*", 789356349u, 0, 1, &be_const_str_widget_event_cb);
-be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_add);
-be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_CFG_X3A_X20removing_X20autoconf_X20files);
-be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, NULL);
-be_define_const_str(_X2D, "-", 671913016u, 0, 1, NULL);
-be_define_const_str(_X2D_X2A, "-*", 499980374u, 0, 2, &be_const_str_MI32);
-be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_get_coords);
-be_define_const_str(_X2E, ".", 722245873u, 0, 1, NULL);
+be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str__X2F_X3Frst_X3D);
+be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_response_append);
+be_define_const_str(_X0A_X29_X3E, "\n)>", 804061574u, 0, 3, NULL);
+be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_add_cmd);
+be_define_const_str(_X20_X20, " ", 2982523533u, 0, 2, &be_const_str__X3C);
+be_define_const_str(_X20_X28, " (", 2848302581u, 0, 2, &be_const_str__X2E_X2E);
+be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E);
+be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str__X3D);
+be_define_const_str(_X22, "\"", 655135397u, 0, 1, &be_const_str_conn_cb);
+be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, &be_const_str_seq1);
+be_define_const_str(_X23, "#", 638357778u, 0, 1, NULL);
+be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str__X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B);
+be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E);
+be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_imin);
+be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_draw_line_dsc);
+be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, NULL);
+be_define_const_str(_X25, "%", 537692064u, 0, 1, &be_const_str_cb_do_nothing);
+be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_crc);
+be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, NULL);
+be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, NULL);
+be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_set_huesat);
+be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_set_chr);
+be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_EVENT_DRAW_PART_BEGIN);
+be_define_const_str(_X27_X20_X2D_X20, "' - ", 3420378487u, 0, 4, &be_const_str_valuer_error);
+be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_color);
+be_define_const_str(_X29, ")", 739023492u, 0, 1, &be_const_str_delay);
+be_define_const_str(_X2A, "*", 789356349u, 0, 1, NULL);
+be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_decrypt);
+be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_begin_multicast);
+be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_coredump);
+be_define_const_str(_X2D, "-", 671913016u, 0, 1, &be_const_str_CFG_X3A_X20running_X20);
+be_define_const_str(_X2D_X2A, "-*", 499980374u, 0, 2, &be_const_str_classname);
+be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str__available);
+be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_load);
be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, NULL);
-be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_check_privileged_access);
-be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_addr);
-be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, NULL);
-be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, NULL);
-be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, NULL);
-be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_CT);
-be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_setfloat);
-be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_set_huesat);
-be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str__X2Ew);
-be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str__X3C_X2Fform_X3E_X3C_X2Fp_X3E);
-be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_get_string);
-be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_add_anim);
-be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_AudioOpusDecoder);
-be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_pow);
-be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_AudioGeneratorMP3);
-be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_keys);
-be_define_const_str(00, "00", 569209421u, 0, 2, &be_const_str_find_op);
-be_define_const_str(0x_X2502X, "0x%02X", 2626549866u, 0, 6, &be_const_str_settings);
-be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_compile);
-be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_instance_X20required);
-be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "", 3546571739u, 0, 11, NULL);
-be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 1863865923u, 0, 16, &be_const_str_get_bat_power);
-be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E);
-be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_draw_line_dsc_init);
-be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_tag);
-be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "", 2052843416u, 0, 25, &be_const_str__t);
+be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "", 2058443583u, 0, 110, NULL);
+be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "", 3546571739u, 0, 11, &be_const_str_SERIAL_5E1);
-be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 1863865923u, 0, 16, &be_const_str_read24);
-be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_switch_factory);
-be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_adv_watch);
-be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_hue);
-be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "", 842307168u, 0, 77, &be_const_str_cmd_res);
-be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "", 2342198361u, 0, 61, NULL);
-be_define_const_str(_X3Cinstance_X3A_X20Partition_otadata_X28ota_active_X3A_X25s_X2C_X20ota_seq_X3D_X5B_X25d_X2C_X25d_X5D_X2C_X20ota_max_X3D_X25d_X29_X3E, "", 179503047u, 0, 73, NULL);
-be_define_const_str(_X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, "
", 1336654704u, 0, 49, &be_const_str_BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27);
-be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, NULL);
-be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, "", 4212500780u, 0, 82, &be_const_str_efuse_em);
-be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, "", 1926223891u, 0, 80, &be_const_str_check_not_method);
-be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_INTERNAL_PDM);
-be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, NULL);
-be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "Exception:
'%s'
%s
", 4252565082u, 0, 59, &be_const_str_SERIAL_8O1);
-be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 2052843416u, 0, 25, &be_const_str__t);
+be_define_const_str(_X25, "%", 537692064u, 0, 1, &be_const_str_rule);
+be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str__timers);
+be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_count);
+be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_WS2812_GRB);
+be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_delay);
+be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_get_image_size);
+be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_data);
+be_define_const_str(_X27_X20_X2D_X20, "' - ", 3420378487u, 0, 4, &be_const_str_set_rgb);
+be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, NULL);
+be_define_const_str(_X29, ")", 739023492u, 0, 1, &be_const_str_AudioOutputI2S);
+be_define_const_str(_X2A, "*", 789356349u, 0, 1, &be_const_str_lv_wifi_arcs_icon);
+be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_BRY_X3A_X20failed_X20to_X20run_X20compiled_X20code_X20_X27_X25s_X27_X20_X2D_X20_X25s);
+be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_AudioGeneratorMP3);
+be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_init);
+be_define_const_str(_X2D, "-", 671913016u, 0, 1, &be_const_str_nvs);
+be_define_const_str(_X2D_X2A, "-*", 499980374u, 0, 2, &be_const_str_coord_arr);
+be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_DIMMER);
+be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_draw_line_dsc_init);
+be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_log10);
+be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_COLOR_BLACK);
+be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_set_style_text_color);
+be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_allocated);
+be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, NULL);
+be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_get_vbus_current);
+be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_return_X20code_X3D_X25i);
+be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_collect);
+be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_line_dsc);
+be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str_WS2812);
+be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_can_show);
+be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str__anonymous_);
+be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_obj);
+be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E);
+be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str__global_def);
+be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_time_dump);
+be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str__persist_X2Ejson);
+be_define_const_str(00, "00", 569209421u, 0, 2, &be_const_str_addr);
+be_define_const_str(0x_X2502X, "0x%02X", 2626549866u, 0, 6, &be_const_str_draw_ctx);
+be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E);
+be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_set_channels);
+be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "", 3546571739u, 0, 11, NULL);
+be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 1863865923u, 0, 16, &be_const_str_lv_extra);
+be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_AudioGenerator);
+be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_lv_);
+be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, NULL);
+be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "", 842307168u, 0, 77, &be_const_str_publish_result);
+be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "", 2342198361u, 0, 61, &be_const_str_super);
+be_define_const_str(_X3Cinstance_X3A_X20Partition_otadata_X28ota_active_X3A_X25s_X2C_X20ota_seq_X3D_X5B_X25d_X2C_X25d_X5D_X2C_X20ota_max_X3D_X25d_X29_X3E, "", 179503047u, 0, 73, &be_const_str_get_string);
+be_define_const_str(_X3Clabel_X3EChoose_X20a_X20device_X20configuration_X3A_X3C_X2Flabel_X3E_X3Cbr_X3E, "
", 1336654704u, 0, 49, &be_const_str_invalidate_spiffs);
+be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_compile);
+be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, "", 4212500780u, 0, 82, &be_const_str_instance);
+be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, "", 1926223891u, 0, 80, &be_const_str_Auto_X2Dconfiguration);
+be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, NULL);
+be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_Partition_otadata);
+be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "Exception:
'%s'
%s
", 4252565082u, 0, 59, &be_const_str__crons);
+be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 2052843416u, 0, 25, &be_const_str_rtc);
be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "", 2058443583u, 0, 110, NULL);
-be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "