From a4cd168681b7058181ab36ba701b1d7ab3c9c404 Mon Sep 17 00:00:00 2001
From: Stephan Hadinger
Date: Mon, 27 Dec 2021 18:12:38 +0100
Subject: [PATCH] LVGL modularization
---
.../berry/default/be_lv_tasmota_lib.c | 116 +
lib/libesp32/berry/default/be_modtab.c | 2 +
.../berry/default/embedded/lv_tasmota.be | 36 +
lib/libesp32/berry/gen.sh | 2 +-
lib/libesp32/berry/generate/be_const_strtab.h | 21 +
.../berry/generate/be_const_strtab_def.h | 1887 +++++++++--------
.../berry/generate/be_fixed_lv_tasmota.h | 25 +
.../LVGL_assets/roboto/autoexec.be | 3 +
.../roboto/robotocondensed_latin1.be | 22 +
.../roboto/robotocondensed_latin1.tapp | Bin 0 -> 52892 bytes
.../roboto/robotocondensed_latin1_12.bin | Bin 0 -> 6372 bytes
.../roboto/robotocondensed_latin1_14.bin | Bin 0 -> 7840 bytes
.../roboto/robotocondensed_latin1_16.bin | Bin 0 -> 8972 bytes
.../roboto/robotocondensed_latin1_20.bin | Bin 0 -> 11912 bytes
.../roboto/robotocondensed_latin1_22.bin | Bin 0 -> 13540 bytes
.../roboto/robotocondensed_latin1_24.bin | Bin 0 -> 14012 bytes
.../roboto/robotocondensed_latin1_26.bin | Bin 0 -> 16664 bytes
.../roboto/robotocondensed_latin1_28.bin | Bin 0 -> 18500 bytes
.../roboto/robotocondensed_latin1_32.bin | Bin 0 -> 21768 bytes
.../roboto/robotocondensed_latin1_36.bin | Bin 0 -> 25792 bytes
.../roboto/robotocondensed_latin1_40.bin | Bin 0 -> 29488 bytes
.../roboto/robotocondensed_latin1_44.bin | Bin 0 -> 33148 bytes
.../roboto/robotocondensed_latin1_48.bin | Bin 0 -> 35324 bytes
.../roboto/robotocondensed_latin1_gen.sh | 4 +
.../LVGL_assets/roboto/{ => ttf}/LICENSE | 0
.../{ => ttf}/RobotoCondensed-Regular.ttf | Bin
.../lv_berry/generate/be_lvgl_module.c | 59 +-
.../lv_berry/generate/be_lvgl_widgets_lib.c | 4 +-
lib/libesp32_lvgl/lv_berry/mapping/lv_enum.h | 10 -
lib/libesp32_lvgl/lv_berry/src/embedded/lv.be | 20 +
lib/libesp32_lvgl/lv_berry/src/lv_berry.c | 13 +-
lib/libesp32_lvgl/lv_berry/tools/convert.py | 57 +-
.../lv_berry/tools/preprocessor.py | 10 -
tasmota/berry/lvgl_examples/lvgl_demo.be | 4 +-
.../lvgl_examples/robotocondensed_latin1.tapp | Bin 0 -> 52892 bytes
tasmota/lvgl_berry/tasmota_lv_conf.h | 10 +-
tasmota/xdrv_52_7_berry_embedded.ino | 1 +
37 files changed, 1308 insertions(+), 998 deletions(-)
create mode 100644 lib/libesp32/berry/default/be_lv_tasmota_lib.c
create mode 100644 lib/libesp32/berry/default/embedded/lv_tasmota.be
create mode 100644 lib/libesp32/berry/generate/be_fixed_lv_tasmota.h
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/autoexec.be
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1.be
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1.tapp
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_12.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_14.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_16.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_20.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_22.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_24.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_26.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_28.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_32.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_36.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_40.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_44.bin
create mode 100644 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_48.bin
create mode 100755 lib/libesp32_lvgl/LVGL_assets/roboto/robotocondensed_latin1_gen.sh
rename lib/libesp32_lvgl/LVGL_assets/roboto/{ => ttf}/LICENSE (100%)
rename lib/libesp32_lvgl/LVGL_assets/roboto/{ => ttf}/RobotoCondensed-Regular.ttf (100%)
create mode 100644 lib/libesp32_lvgl/lv_berry/src/embedded/lv.be
create mode 100644 tasmota/berry/lvgl_examples/robotocondensed_latin1.tapp
diff --git a/lib/libesp32/berry/default/be_lv_tasmota_lib.c b/lib/libesp32/berry/default/be_lv_tasmota_lib.c
new file mode 100644
index 000000000..d69affbd9
--- /dev/null
+++ b/lib/libesp32/berry/default/be_lv_tasmota_lib.c
@@ -0,0 +1,116 @@
+/********************************************************************
+ * Tasmota LVGL lv_signal_bars widget
+ *******************************************************************/
+#include "be_constobj.h"
+
+#ifdef USE_LVGL
+
+extern int lv0_start(bvm *vm);
+
+extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder logic
+
+extern int lv0_load_montserrat_font(bvm *vm);
+extern int lv0_load_seg7_font(bvm *vm);
+extern int lv0_load_robotocondensed_latin1_font(bvm *vm);
+
+extern int lv0_screenshot(bvm *vm);
+extern int lv0_load_freetype_font(bvm *vm);
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(lv_tasmota_init, /* 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[23]) { /* constants */
+ /* K0 */ be_nested_str(lv),
+ /* K1 */ be_nested_str(start),
+ /* K2 */ be_nested_str(font_montserrat),
+ /* K3 */ be_nested_str(montserrat_font),
+ /* K4 */ be_nested_str(font_seg7),
+ /* K5 */ be_nested_str(seg7_font),
+ /* K6 */ be_nested_str(load_freetype_font),
+ /* K7 */ be_nested_str(register_button_encoder),
+ /* K8 */ be_nested_str(screenshot),
+ /* K9 */ be_nested_str(clock_icon),
+ /* K10 */ be_nested_str(lv_clock_icon),
+ /* K11 */ be_nested_str(signal_arcs),
+ /* K12 */ be_nested_str(lv_signal_arcs),
+ /* K13 */ be_nested_str(signal_bars),
+ /* K14 */ be_nested_str(lv_signal_bars),
+ /* K15 */ be_nested_str(wifi_arcs_icon),
+ /* K16 */ be_nested_str(lv_wifi_arcs_icon),
+ /* K17 */ be_nested_str(wifi_arcs),
+ /* K18 */ be_nested_str(lv_wifi_arcs),
+ /* K19 */ be_nested_str(wifi_bars_icon),
+ /* K20 */ be_nested_str(lv_wifi_bars_icon),
+ /* K21 */ be_nested_str(wifi_bars),
+ /* K22 */ be_nested_str(lv_wifi_bars),
+ }),
+ &be_const_str_init,
+ &be_const_str_solidified,
+ ( &(const binstruction[33]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x90060202, // 0002 SETMBR R1 K1 R2
+ 0x88080102, // 0003 GETMBR R2 R0 K2
+ 0x90060402, // 0004 SETMBR R1 K2 R2
+ 0x88080102, // 0005 GETMBR R2 R0 K2
+ 0x90060602, // 0006 SETMBR R1 K3 R2
+ 0x88080104, // 0007 GETMBR R2 R0 K4
+ 0x90060802, // 0008 SETMBR R1 K4 R2
+ 0x88080104, // 0009 GETMBR R2 R0 K4
+ 0x90060A02, // 000A SETMBR R1 K5 R2
+ 0x88080106, // 000B GETMBR R2 R0 K6
+ 0x90060C02, // 000C SETMBR R1 K6 R2
+ 0x88080107, // 000D GETMBR R2 R0 K7
+ 0x90060E02, // 000E SETMBR R1 K7 R2
+ 0x88080108, // 000F GETMBR R2 R0 K8
+ 0x90061002, // 0010 SETMBR R1 K8 R2
+ 0xB80A1400, // 0011 GETNGBL R2 K10
+ 0x90061202, // 0012 SETMBR R1 K9 R2
+ 0xB80A1800, // 0013 GETNGBL R2 K12
+ 0x90061602, // 0014 SETMBR R1 K11 R2
+ 0xB80A1C00, // 0015 GETNGBL R2 K14
+ 0x90061A02, // 0016 SETMBR R1 K13 R2
+ 0xB80A2000, // 0017 GETNGBL R2 K16
+ 0x90061E02, // 0018 SETMBR R1 K15 R2
+ 0xB80A2400, // 0019 GETNGBL R2 K18
+ 0x90062202, // 001A SETMBR R1 K17 R2
+ 0xB80A2800, // 001B GETNGBL R2 K20
+ 0x90062602, // 001C SETMBR R1 K19 R2
+ 0xB80A2C00, // 001D GETNGBL R2 K22
+ 0x90062A02, // 001E SETMBR R1 K21 R2
+ 0x4C080000, // 001F LDNIL R2
+ 0x80040400, // 0020 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+/* @const_object_info_begin
+module lv_tasmota (scope: global) {
+ init, closure(lv_tasmota_init_closure)
+
+ start, func(lv0_start)
+
+ font_montserrat, func(lv0_load_montserrat_font)
+ montserrat_font, func(lv0_load_montserrat_font)
+ font_seg7, func(lv0_load_seg7_font)
+ seg7_font, func(lv0_load_seg7_font)
+ register_button_encoder, func(lv0_register_button_encoder)
+ screenshot, func(lv0_screenshot)
+
+ load_freetype_font, func(lv0_load_freetype_font)
+}
+@const_object_info_end */
+#include "../generate/be_fixed_lv_tasmota.h"
+
+#endif // USE_LVGL
\ No newline at end of file
diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c
index 86ce0244f..9a3aa2daf 100644
--- a/lib/libesp32/berry/default/be_modtab.c
+++ b/lib/libesp32/berry/default/be_modtab.c
@@ -44,6 +44,7 @@ be_extern_native_module(unishox);
be_extern_native_module(animate);
#ifdef USE_LVGL
be_extern_native_module(lv);
+be_extern_native_module(lv_tasmota);
#endif // USE_LVGL
/* user-defined modules declare start */
@@ -118,6 +119,7 @@ BERRY_LOCAL const bntvmodule* const be_module_table[] = {
#ifdef USE_LVGL
&be_native_module(lv),
+ &be_native_module(lv_tasmota),
#endif // USE_LVGL
#ifdef USE_ENERGY_SENSOR
&be_native_module(energy),
diff --git a/lib/libesp32/berry/default/embedded/lv_tasmota.be b/lib/libesp32/berry/default/embedded/lv_tasmota.be
new file mode 100644
index 000000000..5be5733d3
--- /dev/null
+++ b/lib/libesp32/berry/default/embedded/lv_tasmota.be
@@ -0,0 +1,36 @@
+#- ------------------------------------------------------------ -#
+# Module `lv_tasmota` - piggybacks on `lv` to extend it
+#- ------------------------------------------------------------ -#
+lv_tasmota = module("lv_tasmota")
+
+# rename `lv` to `lv_ntv` and replace `lv` with `lv_tasmota`
+def init(lv_tasmota)
+ import lv
+ lv.start = lv_tasmota.start
+
+ lv.font_montserrat = lv_tasmota.font_montserrat
+ lv.montserrat_font = lv_tasmota.font_montserrat
+
+ lv.font_seg7 = lv_tasmota.font_seg7
+ lv.seg7_font = lv_tasmota.font_seg7
+
+ lv.load_freetype_font = lv_tasmota.load_freetype_font
+
+ lv.register_button_encoder = lv_tasmota.register_button_encoder
+ lv.screenshot = lv_tasmota.screenshot
+
+ # add widgets
+ lv.clock_icon = lv_clock_icon
+ lv.signal_arcs = lv_signal_arcs
+ lv.signal_bars = lv_signal_bars
+ lv.wifi_arcs_icon = lv_wifi_arcs_icon
+ lv.wifi_arcs = lv_wifi_arcs
+ lv.wifi_bars_icon = lv_wifi_bars_icon
+ lv.wifi_bars = lv_wifi_bars
+
+ return nil
+end
+
+lv_tasmota.init = init
+
+return lv_tasmota
diff --git a/lib/libesp32/berry/gen.sh b/lib/libesp32/berry/gen.sh
index 0dc462474..e52d74a28 100755
--- a/lib/libesp32/berry/gen.sh
+++ b/lib/libesp32/berry/gen.sh
@@ -1,2 +1,2 @@
#!/bin/bash
-python3 tools/pycoc/main.py -o generate src default ../berry_mapping/src ../../libesp32_lvgl/lv_berry/src -c default/berry_conf.h
+python3 tools/pycoc/main.py -o generate src default ../berry_mapping/src ../../libesp32_lvgl/lv_berry/src ../../libesp32_lvgl/lv_berry/generate -c default/berry_conf.h
diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h
index 04e6b5e29..f7526ea2b 100644
--- a/lib/libesp32/berry/generate/be_const_strtab.h
+++ b/lib/libesp32/berry/generate/be_const_strtab.h
@@ -264,6 +264,7 @@ extern const bcstring be_const_str_classof;
extern const bcstring be_const_str_clear;
extern const bcstring be_const_str_clear_first_time;
extern const bcstring be_const_str_clear_to;
+extern const bcstring be_const_str_clock_icon;
extern const bcstring be_const_str_close;
extern const bcstring be_const_str_closure;
extern const bcstring be_const_str_cmd;
@@ -362,6 +363,8 @@ extern const bcstring be_const_str_find_op;
extern const bcstring be_const_str_finish;
extern const bcstring be_const_str_floor;
extern const bcstring be_const_str_flush;
+extern const bcstring be_const_str_font_montserrat;
+extern const bcstring be_const_str_font_seg7;
extern const bcstring be_const_str_for;
extern const bcstring be_const_str_format;
extern const bcstring be_const_str_from_to;
@@ -469,6 +472,7 @@ extern const bcstring be_const_str_list;
extern const bcstring be_const_str_list_handlers;
extern const bcstring be_const_str_listdir;
extern const bcstring be_const_str_load;
+extern const bcstring be_const_str_load_freetype_font;
extern const bcstring be_const_str_load_templates;
extern const bcstring be_const_str_local;
extern const bcstring be_const_str_log;
@@ -477,10 +481,18 @@ extern const bcstring be_const_str_loop;
extern const bcstring be_const_str_lower;
extern const bcstring be_const_str_lv;
extern const bcstring be_const_str_lv_;
+extern const bcstring be_const_str_lv_clock_icon;
extern const bcstring be_const_str_lv_event;
extern const bcstring be_const_str_lv_event_cb;
+extern const bcstring be_const_str_lv_module_init;
extern const bcstring be_const_str_lv_obj;
extern const bcstring be_const_str_lv_obj_class;
+extern const bcstring be_const_str_lv_signal_arcs;
+extern const bcstring be_const_str_lv_signal_bars;
+extern const bcstring be_const_str_lv_wifi_arcs;
+extern const bcstring be_const_str_lv_wifi_arcs_icon;
+extern const bcstring be_const_str_lv_wifi_bars;
+extern const bcstring be_const_str_lv_wifi_bars_icon;
extern const bcstring be_const_str_lvgl_event_dispatch;
extern const bcstring be_const_str_make_cb;
extern const bcstring be_const_str_map;
@@ -494,6 +506,7 @@ extern const bcstring be_const_str_min;
extern const bcstring be_const_str_minute;
extern const bcstring be_const_str_module;
extern const bcstring be_const_str_month;
+extern const bcstring be_const_str_montserrat_font;
extern const bcstring be_const_str_name;
extern const bcstring be_const_str_nan;
extern const bcstring be_const_str_nil;
@@ -559,6 +572,7 @@ extern const bcstring be_const_str_real;
extern const bcstring be_const_str_reapply;
extern const bcstring be_const_str_redirect;
extern const bcstring be_const_str_refr_size;
+extern const bcstring be_const_str_register_button_encoder;
extern const bcstring be_const_str_register_obj;
extern const bcstring be_const_str_remote_ip;
extern const bcstring be_const_str_remote_port;
@@ -594,6 +608,7 @@ extern const bcstring be_const_str_save;
extern const bcstring be_const_str_save_before_restart;
extern const bcstring be_const_str_scale_uint;
extern const bcstring be_const_str_scan;
+extern const bcstring be_const_str_screenshot;
extern const bcstring be_const_str_search;
extern const bcstring be_const_str_sec;
extern const bcstring be_const_str_seg7_font;
@@ -637,6 +652,8 @@ extern const bcstring be_const_str_setrange;
extern const bcstring be_const_str_settings;
extern const bcstring be_const_str_shared_key;
extern const bcstring be_const_str_show;
+extern const bcstring be_const_str_signal_arcs;
+extern const bcstring be_const_str_signal_bars;
extern const bcstring be_const_str_sin;
extern const bcstring be_const_str_sinh;
extern const bcstring be_const_str_size;
@@ -729,6 +746,10 @@ extern const bcstring be_const_str_widget_width_def;
extern const bcstring be_const_str_width;
extern const bcstring be_const_str_width_def;
extern const bcstring be_const_str_wifi;
+extern const bcstring be_const_str_wifi_arcs;
+extern const bcstring be_const_str_wifi_arcs_icon;
+extern const bcstring be_const_str_wifi_bars;
+extern const bcstring be_const_str_wifi_bars_icon;
extern const bcstring be_const_str_wire;
extern const bcstring be_const_str_wire1;
extern const bcstring be_const_str_wire2;
diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h
index 50a9e80fd..f94c50ff5 100644
--- a/lib/libesp32/berry/generate/be_const_strtab_def.h
+++ b/lib/libesp32/berry/generate/be_const_strtab_def.h
@@ -1,678 +1,695 @@
-be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_read8);
-be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29);
-be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_AudioFileSource);
+be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_assert);
+be_define_const_str(_X0A, "\n", 252472541u, 0, 1, NULL);
+be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_allocated);
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(_X23, "#", 638357778u, 0, 1, NULL);
-be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str__X23display_X2Eini);
-be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, NULL);
-be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, NULL);
-be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_get_option);
-be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str__write);
-be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E);
+be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_editable);
+be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_has_arg);
+be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str___lower__);
+be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_enabled);
+be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_AudioGeneratorMP3);
+be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_set_text);
+be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_group_def);
+be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_is_running);
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(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_number);
-be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_CFG_X3A_X20loading_X20_X27_X25s_X27);
-be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_couldn_X27t_X20not_X20initialize_X20noepixelbus);
-be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_AXP192);
-be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str__X2Ep2);
-be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_k);
-be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_i2c_enabled);
-be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_CFG_X3A_X20removing_X20first_X20time_X20marker);
-be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_arch);
-be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_no_X20GPIO_X20specified_X20for_X20neopixelbus);
-be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_draw_line);
-be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_set_power);
-be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_set);
-be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_cb_do_nothing);
+be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_strptime);
+be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, NULL);
+be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_Restart_X201);
+be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, NULL);
+be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_y1);
+be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_pc_abs);
+be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_toptr);
+be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_collect);
+be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_SERIAL_7O1);
+be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_get_alternate);
+be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_height_def);
+be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29);
+be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_digital_write);
+be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, NULL);
be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, NULL);
-be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_show);
-be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str__def);
-be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str_on);
-be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27);
-be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str_get_input_power_status);
-be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, NULL);
-be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_global);
-be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_a);
-be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_OneWire);
-be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_pow);
-be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "
", 3546571739u, 0, 11, &be_const_str_pixels_buffer);
-be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 1863865923u, 0, 16, &be_const_str_get_style_pad_right);
-be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_json);
-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__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20);
-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_add_rule);
-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_CFG_X3A_X20no_X20_X27_X2A_X2Eautoconf_X27_X20file_X20found);
-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_X3E_X26_X23129668_X3B_X20Auto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "", 452285201u, 0, 120, &be_const_str_AudioOutput);
-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_add_cmd);
+be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 1863865923u, 0, 16, &be_const_str_content_send);
+be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__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_compile);
+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_Timer);
+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_Unknown_X20command);
+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_X3E_X26_X23129668_X3B_X20Auto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "", 452285201u, 0, 120, &be_const_str__energy);
+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, "