From c95063a56b9a2235038717fabdfe1e1f1f74e964 Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Mon, 22 Sep 2025 22:32:03 +0200 Subject: [PATCH] Berry extension manager (#23940) --- lib/libesp32/berry/default/be_modtab.c | 4 + lib/libesp32/berry_tasmota/solidify_all.be | 2 +- .../berry_tasmota/src/be_extensions_lib.c | 7 + .../berry_tasmota/src/be_tasmota_lib.c | 4 + .../src/embedded/extension_manager.be | 644 +++ .../src/embedded/tasmota_class.be | 118 +- .../solidify/solidified_extension_manager.h | 1563 ++++++ .../src/solidify/solidified_tasmota_class.h | 4420 +++++++++-------- tasmota/berry/extensions/Leds_Panel.tapp | Bin 0 -> 36944 bytes .../berry/extensions/Leds_Panel/autoexec.be | 9 + .../berry/extensions/Leds_Panel/leds_panel.be | 1025 ++++ .../berry/extensions/Leds_Panel/manifest.json | 8 + .../berry/extensions/Partition_Wizard.tapp | Bin 0 -> 17906 bytes .../extensions/Partition_Wizard/autoexec.be | 9 + .../extensions/Partition_Wizard/manifest.json | 8 + .../Partition_Wizard/partition_wizard.be | 51 +- .../Partition_Wizard/partition_wizard.bec | Bin 0 -> 16704 bytes .../berry/extensions/Wifi_Memory_Sticker.tapp | Bin 0 -> 3129 bytes .../Wifi_Memory_Sticker/autoexec.be | 6 + .../Wifi_Memory_Sticker/manifest.json | 8 + .../wifi_memory_sticker.be | 50 + tasmota/berry/leds_panel/autoexec.be | 6 + tasmota/berry/leds_panel/leds_panel.be | 19 +- tasmota/berry/modules/Partition_Wizard.tapp | Bin 17155 -> 17195 bytes .../Partition_Wizard/partition_wizard.bec | Bin 16664 -> 16704 bytes tasmota/my_user_config.h | 3 +- .../xdrv_52_7_berry_embedded.ino | 4 + 27 files changed, 5866 insertions(+), 2102 deletions(-) create mode 100644 lib/libesp32/berry_tasmota/src/be_extensions_lib.c create mode 100644 lib/libesp32/berry_tasmota/src/embedded/extension_manager.be create mode 100644 lib/libesp32/berry_tasmota/src/solidify/solidified_extension_manager.h create mode 100644 tasmota/berry/extensions/Leds_Panel.tapp create mode 100644 tasmota/berry/extensions/Leds_Panel/autoexec.be create mode 100644 tasmota/berry/extensions/Leds_Panel/leds_panel.be create mode 100644 tasmota/berry/extensions/Leds_Panel/manifest.json create mode 100644 tasmota/berry/extensions/Partition_Wizard.tapp create mode 100644 tasmota/berry/extensions/Partition_Wizard/autoexec.be create mode 100644 tasmota/berry/extensions/Partition_Wizard/manifest.json rename tasmota/berry/{modules => extensions}/Partition_Wizard/partition_wizard.be (97%) create mode 100644 tasmota/berry/extensions/Partition_Wizard/partition_wizard.bec create mode 100644 tasmota/berry/extensions/Wifi_Memory_Sticker.tapp create mode 100644 tasmota/berry/extensions/Wifi_Memory_Sticker/autoexec.be create mode 100644 tasmota/berry/extensions/Wifi_Memory_Sticker/manifest.json create mode 100644 tasmota/berry/extensions/Wifi_Memory_Sticker/wifi_memory_sticker.be create mode 100644 tasmota/berry/leds_panel/autoexec.be diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c index 3844cbc08..636bc8a00 100644 --- a/lib/libesp32/berry/default/be_modtab.c +++ b/lib/libesp32/berry/default/be_modtab.c @@ -34,6 +34,7 @@ be_extern_native_module(re); be_extern_native_module(mqtt); be_extern_native_module(persist); be_extern_native_module(autoconf); +be_extern_native_module(extension_manager); be_extern_native_module(tapp); be_extern_native_module(light); be_extern_native_module(gpio); @@ -153,6 +154,9 @@ BERRY_LOCAL const bntvmodule_t* const be_module_table[] = { #ifdef USE_AUTOCONF &be_native_module(autoconf), #endif // USE_AUTOCONF +#ifdef USE_EXTENSION_MANAGER + &be_native_module(extension_manager), +#endif // USE_EXTENSION_MANAGER &be_native_module(tapp), &be_native_module(gpio), #ifdef USE_DISPLAY diff --git a/lib/libesp32/berry_tasmota/solidify_all.be b/lib/libesp32/berry_tasmota/solidify_all.be index 18c86be7e..c81a011f5 100755 --- a/lib/libesp32/berry_tasmota/solidify_all.be +++ b/lib/libesp32/berry_tasmota/solidify_all.be @@ -13,7 +13,7 @@ import sys sys.path().push('src/embedded') # allow to import from src/embedded # globals that need to exist to make compilation succeed -var globs = "path,ctypes_bytes_dyn,tasmota,ccronexpr,gpio,light,webclient,load,MD5,lv,light_state,udp,tcpserver,log," +var globs = "path,ctypes_bytes_dyn,tasmota,ccronexpr,gpio,light,webclient,load,MD5,lv,light_state,udp,tcpserver,log,sortedmap," "lv_clock,lv_clock_icon,lv_signal_arcs,lv_signal_bars,lv_wifi_arcs_icon,lv_wifi_arcs," "lv_wifi_bars_icon,lv_wifi_bars," "_lvgl," diff --git a/lib/libesp32/berry_tasmota/src/be_extensions_lib.c b/lib/libesp32/berry_tasmota/src/be_extensions_lib.c new file mode 100644 index 000000000..54453fb65 --- /dev/null +++ b/lib/libesp32/berry_tasmota/src/be_extensions_lib.c @@ -0,0 +1,7 @@ +/******************************************************************** + * Tasmota lib + * + * To use: `import autoconf` + * + *******************************************************************/ +#include "solidify/solidified_extension_manager.h" diff --git a/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c b/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c index fb1841a15..207ce91d4 100644 --- a/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c +++ b/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c @@ -90,6 +90,7 @@ class be_class_tasmota (scope: global, name: Tasmota) { _crons, var // list of active crons _ccmd, var // list of active Tasmota commands implemented in Berry _drivers, var // list of active drivers + _ext, var // list of active extensions _wnu, var // list of closures to call when network is connected wire1, var // Tasmota I2C Wire1 wire2, var // Tasmota I2C Wire2 @@ -189,6 +190,9 @@ class be_class_tasmota (scope: global, name: Tasmota) { run_network_up, closure(class_Tasmota_run_network_up_closure) add_driver, closure(class_Tasmota_add_driver_closure) remove_driver, closure(class_Tasmota_remove_driver_closure) + add_extension, closure(class_Tasmota_add_extension_closure) + read_extension_manifest, closure(class_Tasmota_read_extension_manifest_closure) + unload_extension, closure(class_Tasmota_unload_extension_closure) load, closure(class_Tasmota_load_closure) compile, closure(class_Tasmota_compile_closure) wire_scan, closure(class_Tasmota_wire_scan_closure) diff --git a/lib/libesp32/berry_tasmota/src/embedded/extension_manager.be b/lib/libesp32/berry_tasmota/src/embedded/extension_manager.be new file mode 100644 index 000000000..f24e8c14b --- /dev/null +++ b/lib/libesp32/berry_tasmota/src/embedded/extension_manager.be @@ -0,0 +1,644 @@ +# extensions manager module for Berry +# +# + + +var extension_manager = module("extension_manager") + +#@ solidify:extension_manager +class Extension_manager + static var EXT_FOLDER = "/.extensions/" + static var EXT_REPO = "https://ota.tasmota.com/extensions/" + static var EXT_REPO_MANIFEST = "extensions.jsonl" + static var EXT_REPO_FOLDER = "tapp/" + + ##################################################################################################### + # init - constructor + # + # Register as driver + # + def init() + tasmota.add_driver(self) + end + + ##################################################################################################### + # General static helper functions + ##################################################################################################### + ##################################################################################################### + # version_string(v) + # + # Convert 32 bits version to "a.b.c.d" where version is 0xAABBCCDD + # + # @param v: int - version in format 0xAABBCCDD + # @return string - string in format "a.b.c.d" + ##################################################################################################### + static def version_string(v) + return f"v{(v >> 24) & 0xFF}.{(v >> 16) & 0xFF}.{(v >> 8) & 0xFF}.{v & 0xFF}" + end + + ##################################################################################################### + # tapp_name(wd) + # + # Takes a working directory 'wd' and extract the name of the tapp file. + # Ex: '/.extensions/Leds_Panel.tapp#' becomes 'Leds_Panel.tapp' + # + # @param wv: string - the Working Dir of the tapp file like '/.extensions/Leds_Panel.tapp#' + # @return string - the raw name of the tapp file, like 'Leds_Panel.tapp' + ##################################################################################################### + static def tapp_name(wd) + import string + + var from = 0 + var to = size(wd) - 1 + # if ends with '#' or '_' remove last char + if (wd[to] == "#") || (wd[to] == "_") + to -= 1 + end + # remove suffix .tapp + if string.find(wd, ".tapp", to + 1 - size(".tapp")) >= 0 + to -= size(".tapp") + end + # remove anything before the last '/' + var idx + while (idx := string.find(wd, '/', from)) >= 0 + from = idx + 1 + end + # final result + return wd[from .. to] + end + + ##################################################################################################### + # General functions to get information about tapp files (installed or from store) + ##################################################################################################### + ##################################################################################################### + # manifest_decode() + # + # Decode the manifest entry from JSONL (single line) into a validated format + # or return 'nil' if something major went wrong (and logged) + # + # @param json_line: string - single JSONL entry, like '{"name":"Leds Panel","file":"Leds_Panel.tapp","version":"0x19090100","description":"[...]","author":"[...]"} + # @return map or nil: normalized map or 'nil' if something went wrong + # guaranteed fileds: 'name', 'description', 'file', 'version', 'author' + static def manifest_decode(json_line) + import json + + # try to parse json + var entry = json.load(json_line) + if (entry == nil) + log(f"EXT: unable to parse manifest line '{json_line}'", 3) + return nil + end + + # check for mandatory fields + if !entry.contains('name') || !entry.contains('file') || !entry.contains('version') + log(f"EXT: manifest is missing 'name/file/version' in map '{entry}'") + return nil + end + + # build result with mandatory fields + var result = { + 'name': entry['name'], + 'file': entry['file'], + 'version': int(entry['version']) + } + # add non-critical fields + result['description'] = entry.find('description', "[no description]") + result['author'] = entry.find('author', "") + return result + end + + ##################################################################################################### + # list_installed_ext() + # + # Return a map of installed tap files, by tapp file name + # tapp_name -> path {'Leds_Panel.tapp': '/.extensions/Leds_Panel.tapp'} + # + # @return map: tapp_namt -> full path (or wd) + static def list_installed_ext() + # Read extensions in file system + var installed_ext = {} + + for ext_path: _class.list_extensions() + installed_ext[_class.tapp_name(ext_path)] = ext_path + end + # log(f"EXT: list_installed_ext={installed_ext}") + return installed_ext + end + + ##################################################################################################### + # list_extensions_in_fs() + # + # List all extensions in file-system, whether they are running or not + # + # @return sortedmap: with Name of App as key, and following map: + # name, description, version (int), autorun (bool) + static def list_extensions_in_fs() + import string + var sm = sortedmap() + for ext: _class.list_extensions() + var details = tasmota.read_extension_manifest(ext) + if (details != nil) + var name = details.find("name") + if (name) + sm[name] = ext + end + else + log(f"EXT: unable to read details from '{ext}'", 3) + end + end + return sm + end + + ##################################################################################################### + # list_extensions() + + # Returns the list of enabled and disabled extensions + # i.e. scan files in ".extensions" folder and keep files ending with ".tapp" and ".tapp_" + # + # @return list: list of extensions by path or by instance + static def list_extensions() + import path + import string + var l = [] + # read from fs + for d: path.listdir(_class.EXT_FOLDER) + if string.endswith(d, ".tapp") || string.endswith(d, ".tapp_") + l.push(_class.EXT_FOLDER + d) + end + end + # finish + return l + end + + ##################################################################################################### + # Methods to install / upgrade / delete extensions from the store + ##################################################################################################### + ##################################################################################################### + # install_from_store(tapp_fname) + # + # @param tapp_fname : string - name of tapp file to install from repository + def install_from_store(tapp_fname) + import string + # sanitize + tapp_fname = self.tapp_name(tapp_fname) + # add '.tapp' extension if it is not present + if !string.endswith(tapp_fname, ".tapp") + tapp_fname += '.tapp' + end + # full url + var ext_url = f"{self.EXT_REPO}{self.EXT_REPO_FOLDER}{tapp_fname}" + log(f"EXT: installing from '{ext_url}'", 3) + # load from web + try + var local_file = f"{self.EXT_FOLDER}{tapp_fname}" + var cl = webclient() + cl.begin(ext_url) + var r = cl.GET() + if r != 200 + log(f"EXT: return_code={r}", 2) + return + end + cl.write_file(local_file) + cl.close() + except .. as e, m + tasmota.log(format("CFG: exception '%s' - '%s'", e, m), 2) + return nil + end + end + + ##################################################################################################### + # Init web handlers + ##################################################################################################### + # Displays a "Autoconf" button on the configuration page + def web_add_button() + import webserver + webserver.content_send( + "

") + end + + ##################################################################################################### + # This HTTP GET manager controls which web controls are displayed + ##################################################################################################### + def page_extensions_mgr_dispatcher() + import webserver + if !webserver.check_privileged_access() return nil end + + if (webserver.has_arg("store")) + return self.page_extensions_store() + else + return self.page_extensions_mgr() + end + end + + ##################################################################################################### + # This HTTP GET manager controls which web controls are displayed + ##################################################################################################### + def page_extensions_mgr() + import webserver + import string + + webserver.content_start('Extensions Manager') + webserver.content_send_style() + # webserver.content_send("

 (This feature requires an internet connection)

") + + webserver.content_send("


Extension Manager

") + + webserver.content_send("" + ) + + webserver.content_send("
" + "" + " Installed extensions") + var installed_ext = self.list_extensions_in_fs(true) + if size(installed_ext) > 0 + var ext_nb = 0 + while ext_nb < size(installed_ext) + if (ext_nb > 0) webserver.content_send("
") end + var ext_path = installed_ext.get_by_index(ext_nb) # ex: '/.extensions/Partition_Wizard.tapp' + var ext_path_html = webserver.html_escape(ext_path) + var details = tasmota.read_extension_manifest(ext_path) + # log(f"EXT: {details=}") + var running = tasmota._ext ? tasmota._ext.contains(ext_path) : false + var running_indicator = running ? " " : "" + var autorun = details.find("autorun", false) + var back_green = "style='background:var(--c_btnsvhvr);'" + var dark_blue = "style='background:var(--c_btnoff);'" + webserver.content_send("
") + webserver.content_send(f"{webserver.html_escape(details['name'])}{running_indicator}
") + webserver.content_send(f"{webserver.html_escape(details['description'])}") + + webserver.content_send("
") + webserver.content_send("
") + webserver.content_send(f"") + webserver.content_send(f"") + webserver.content_send(f"") + # webserver.content_send(f"") + webserver.content_send("
") + + ext_nb += 1 + end + else + # no installed extensions + webserver.content_send("
No installed extension.

") + end + + webserver.content_send("

") + + webserver.content_send("


Online Store" + "
" + " (This feature requires an internet connection)" + "

") + # "

 (This feature requires an internet connection)

") + + webserver.content_send("[ Loading from Store... ]") + + webserver.content_button(webserver.BUTTON_MANAGEMENT) #- button back to management page -# + webserver.content_stop() + end + + ##################################################################################################### + # Extension Store + ##################################################################################################### + def page_extensions_store() + import webserver + import string + import json + + webserver.content_open(200, "text/html") + # read manifest from ota.tasmota.com + var item_jsonl + try + item_jsonl = self.load_manifest() + except .. as e, m + webserver.content_send("[ Error loading manifest. ]") + webserver.content_send(f"

{webserver.html_escape(m)}

") + webserver.content_close() + return + end + var item_json_count = string.count(item_jsonl, '"name":') + + webserver.content_send("
") + + webserver.content_send(f"
" + "Browse Extensions" + "{item_json_count} available" + "
") + + webserver.content_send("" + "

") + + # Read extensions in file system + # as a map tapp_name -> wd_path, ex {'Leds_Panel.tapp': '/.extensions/Leds_Panel.tapp'} + var installed_ext = self.list_installed_ext() + + # Now parse application manifests + var item_idx = 1 + var json_pos = 0 # starting char to parse JSONL + while (json_pos < size(item_jsonl)) # item_idx negative means that we have nothing more to display + var lf_pos = string.find(item_jsonl, "\n", json_pos) + if (lf_pos < 0) lf_pos = size(item_jsonl) end # go to end of string + # extract the json from the line + var json_line = item_jsonl[json_pos .. lf_pos] + + # ex: {"name":"Leds Panel","file":"Leds_Panel.tapp","version":"0x19090100","description":"Real-time display of WS2812 LEDs in browser with smooth animations and pattern editor.","author":"Stephan Hadinger"} + var entry = self.manifest_decode(json_line) + + if (entry != nil) + # entry is guaranteed to have the following fields: 'name', 'description', 'file', 'version', 'author' + var app_version = entry['version'] + var app_version_web = self.version_string(app_version) + var app_name_web = webserver.html_escape(entry['name']) + var app_file = entry['file'] + var app_description_web = string.replace(webserver.html_escape(entry['description']), '\\n', '
') + var app_author = entry['author'] + + # now compute the status + var installed = false + var installed_version + var installed_tapp_name + installed_tapp_name = self.tapp_name(entry['file']) + var installed_tapp_name_web = webserver.html_escape(installed_tapp_name) + installed = installed_ext.contains(installed_tapp_name) + var installed_path_web + if installed + var installed_path = installed_ext[installed_tapp_name] + installed_path_web = webserver.html_escape(installed_path) + var details = tasmota.read_extension_manifest(installed_path) + installed_version = int(details.find('version', 0)) + end + # We have 3 options: + # - 'installed == false', only button "Install" + # - 'installed' and 'installed_version < app_version', buttons "Upgrade" and "Delete" + # - else 'installed' and version more recent, 1 button "Delete" + var upgrade = installed && (installed_version < app_version) + + webserver.content_send(f"
" + "
" + "
" + "{app_name_web}" + "{self.version_string(app_version)}" + "
") + if upgrade + webserver.content_send( "
" + "Upgrade" + "
") + elif installed + webserver.content_send( "
" + "Installed" + "
") + end + webserver.content_send( f"" + "
" + "
" + "
" + "{app_description_web}") + if upgrade + webserver.content_send( f"
{self.version_string(installed_version)} → {app_version_web}") + end + webserver.content_send( "
" + "
" + "
") + if installed + if upgrade + webserver.content_send( f"") + else + webserver.content_send( "") + end + webserver.content_send( f"") + else + webserver.content_send( f"" + "") + end + webserver.content_send( "
" + "
" + "
") + + item_idx += 1 + end + + json_pos = lf_pos + 1 + end + + webserver.content_send("

") + webserver.content_close() + end + + ##################################################################################################### + # Load manifest from ota.tasmota.com + ##################################################################################################### + def load_manifest() + try + var arch = tasmota.arch() # architecture, ex: "esp32" - not used currently but might be useful + var version = f"0x{tasmota.version():08X}" + + var url = f"{self.EXT_REPO}{self.EXT_REPO_MANIFEST}?a={arch}&v={version}" + log(f"EXT: fetching extensions manifest '{url}'", 3) + # Add architeture and version information + # They are not used for now but may be interesting in the future to serve + # different content based on architecture (Ex: ESP32) and version (ex: 0x0E060001 for 14.6.0.1) + # load the template + var cl = webclient() + cl.begin(url) + var r = cl.GET() + if r != 200 + tasmota.log(f"EXT: error fetching manifest {r}", 2) + raise "webclient_error", f"Error fetching manifest code={r}" + end + var s = cl.get_string() + cl.close() + return s + except .. as e, m + tasmota.log(format("EXT: exception '%s' - '%s'", e, m), 2) + raise e, m + end + end + + ##################################################################################################### + # Web controller + # + # Applies the changes and restart + ##################################################################################################### + # This HTTP POST manager handles the submitted web form data + def page_extensions_ctl() + import webserver + import path + import string + if !webserver.check_privileged_access() return nil end + + try + # log(f">>> {webserver.arg_name(0)=} {webserver.arg(0)=} {webserver.arg_size()=}") + # var redirect_to_store = false # add suffix to redirect to store + + var btn_name = webserver.arg_name(0) + var action = btn_name[0] # first character + var action_path = btn_name[1..] # remove first character + + if (action == "r") # button "Run" + if (action_path != "") + # log(f"EXT: run '{action_path}'") + tasmota.load(action_path) + end + elif (action == "s") # button "Stop" + # log(f"EXT: stop '{action_path}'") + tasmota.unload_extension(action_path) + elif (action == "a") || (action == "A") # button "Autorun", "A" enable, "a" disable + var new_name + if (action == "a") && string.endswith(action_path, ".tapp") # Autorun is enabled, disable it + new_name = action_path[0..-5] + "tapp_" + elif (action == "A") && string.endswith(action_path, ".tapp_") + new_name = action_path[0..-6] + "tapp" + end + if new_name + var success = path.rename(action_path, new_name) + # log(f"EXT: rename '{action_path}' to '{new_name} {success=}", 3) + if (success) # update any running extension with its new name + if tasmota._ext.contains(action_path) + tasmota._ext[new_name] = tasmota._ext[action_path] + tasmota._ext.remove(action_path) + end + end + else + log(f"EXT: wrong action '{btn_name}'", 3) + end + elif (action == 'd') # button "Delete" + if (action_path != "") + # first stop if it was running + tasmota.unload_extension(action_path) + # then delete file + var success = path.remove(action_path) + # log(f"EXT: delete '{action_path}' {success=}", 3) + end + + # Now try the store commands + elif (action == 'u') # Upgrade ext + # log(f"EXT: upgrade '{action_path}'", 3) + # first stop the app if it's running + tasmota.unload_extension(action_path) + self.install_from_store(self.tapp_name(action_path)) + # redirect_to_store = true + elif (action == 'i') # Install ext + # log(f"EXT: install '{action_path}'", 3) + self.install_from_store(self.tapp_name(action_path)) + # redirect_to_store = true + end + + # var redirect_suffix = redirect_to_store ? "store=" : "" + # webserver.redirect(f"/ext?{redirect_suffix}") + webserver.redirect(f"/ext") + except .. as e, m + log(f"CFG: Exception> '{e}' - {m}", 2) + #- display error page -# + webserver.content_start("Parameter error") #- title of the web page -# + webserver.content_send_style() #- send standard Tasmota styles -# + + webserver.content_send(f"

Exception:
'{webserver.html_escape(e)}'
{webserver.html_escape(m)}

") + + webserver.content_button(webserver.BUTTON_CONFIGURATION) #- button back to management page -# + webserver.content_stop() #- end of web page -# + end + end + + # Add HTTP POST and GET handlers + def web_add_handler() + import webserver + webserver.on('/ext', / -> self.page_extensions_mgr_dispatcher(), webserver.HTTP_GET) + webserver.on('/ext', / -> self.page_extensions_ctl(), webserver.HTTP_POST) + end +end + +extension_manager.Extension_manager = Extension_manager +extension_manager.init = def (m) + return m.Extension_manager() # return an instance of this class +end diff --git a/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be b/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be index 7c9ad8f7a..25bff1e81 100644 --- a/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be +++ b/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be @@ -599,8 +599,8 @@ class Tasmota # Ex: f_name = '/app.zip#autoexec' # if ends with ".tapp", add "#autoexec" - # there's a trick here, since actual prefix may be ".tapp" or "._tapp" (the later for no-autp-run) - if string.endswith(f_name, 'tapp') + # prefix may be ".tapp" or ".tapp_" + if string.endswith(f_name, '.tapp') || string.endswith(f_name, '.tapp_') f_name += "#autoexec" end @@ -845,6 +845,95 @@ class Tasmota end end + ###################################################################### + # add_extension + # + # Add an instance to the dispatchin of Berry events + # + # Args: + # - `d`: instance (or driver) + # The events will be dispatched to this instance whenever + # it has a method with the same name of the instance + # - `ext_path`: the path of the extension, usually a '.tapp' file + ###################################################################### + def add_extension(d, ext_path) # add ext + if (ext_path == nil) + ext_path = tasmota.wd + end + + if (type(d) != 'instance') || (type(ext_path) != 'string') + raise "value_error", "instance and name required" + end + if (ext_path != nil) + import string + # initialize self._ext if it does not exist + if self._ext == nil + self._ext = sortedmap() + end + if string.endswith(ext_path, '#') + ext_path = ext_path[0..-2] # remove trailing '#'' + end + if self._ext.contains(ext_path) + log(f"BRY: Extension '{ext_path}' already registered", 3) + else + self._ext[ext_path] = d + end + end + end + + ###################################################################### + # read_extension_manifest + # + # Read and parse the 'manifest.json' file in the 'wd' (working dir) + # + # Args: + # - `wd`: (string) working dir indicating which .tapp file to read + # ex: 'Partition_Wizard.tapp#' + # Returns: map of values from JSON, or `nil` if an error occured + # + # Returned map is eitner `nil` if failed or a map with guaranteed content: + # - name (string) + # - description (string), default "" + # - version (int), default 0 + # - min_tasmota(int), default 0 + # + ###################################################################### + def read_extension_manifest(wd_or_instance) + var f + var wd = wd_or_instance + try + import json + import string + + if (wd == nil) wd = tasmota.wd end # if 'wd' is nil, use the current `tasmota.wd` + + var delimiter = ((size(wd) > 0) && (wd[-1] != '/') && (wd[-1] != '#')) ? '#' : '' # add '#' delimiter if filename + f = open(wd + delimiter + 'manifest.json') + var s = f.read() + f.close() + var j = json.load(s) + # check if valid, 'name' is mandatory + var name = j.find('name') + if name + # convert version numbers if present + j['name'] = str(j['name']) + j['description'] = str(j.find('description', '')) + j['version'] = int(j.find('version', 0)) + j['min_tasmota'] = int(j.find('min_tasmota', 0)) + j['autorun'] = string.endswith(wd, ".tapp") + return j + else + return nil + end + except .. as e, m + log(f"BRY: error {e} {m} when reading 'manifest.json' in '{wd}'") + if (f != nil) + f.close() + end + return nil + end + end + def remove_driver(d) if self._drivers var idx = self._drivers.find(d) @@ -852,6 +941,31 @@ class Tasmota self._drivers.pop(idx) end end + # remove ext + if self._ext + self._ext.remove_by_value(d) + end + end + + def unload_extension(name_or_instance) + if (self._ext == nil) return end + var d = name_or_instance # d = driver + + if type(name_or_instance) == 'string' + d = self._ext.find(name_or_instance) + end + if type(d) == 'instance' + import introspect + + if introspect.contains(d, "unload") + d.unload() + end + self.remove_driver(d) + end + # force gc of instance + name_or_instance = nil + d = nil + tasmota.gc() end # cmd high-level function diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_extension_manager.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_extension_manager.h new file mode 100644 index 000000000..73b862b96 --- /dev/null +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_extension_manager.h @@ -0,0 +1,1563 @@ +/* Solidification of extension_manager.h */ +/********************************************************************\ +* Generated code, don't edit * +\********************************************************************/ +#include "be_constobj.h" +extern const bclass be_class_Extension_manager; +// compact class 'Extension_manager' ktab size: 157, total: 254 (saved 776 bytes) +static const bvalue be_ktab_class_Extension_manager[157] = { + /* K0 */ be_nested_str(tasmota), + /* K1 */ be_nested_str(arch), + /* K2 */ be_nested_str(0x_X2508X), + /* K3 */ be_nested_str(version), + /* K4 */ be_nested_str(_X25s_X25s_X3Fa_X3D_X25s_X26v_X3D_X25s), + /* K5 */ be_nested_str(EXT_REPO), + /* K6 */ be_nested_str(EXT_REPO_MANIFEST), + /* K7 */ be_nested_str(log), + /* K8 */ be_nested_str(EXT_X3A_X20fetching_X20extensions_X20manifest_X20_X27_X25s_X27), + /* K9 */ be_const_int(3), + /* K10 */ be_nested_str(webclient), + /* K11 */ be_nested_str(begin), + /* K12 */ be_nested_str(GET), + /* K13 */ be_nested_str(EXT_X3A_X20error_X20fetching_X20manifest_X20_X25s), + /* K14 */ be_const_int(2), + /* K15 */ be_nested_str(Error_X20fetching_X20manifest_X20code_X3D_X25s), + /* K16 */ be_nested_str(webclient_error), + /* K17 */ be_nested_str(get_string), + /* K18 */ be_nested_str(close), + /* K19 */ be_nested_str(EXT_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27), + /* K20 */ be_const_class(be_class_Extension_manager), + /* K21 */ be_nested_str(string), + /* K22 */ be_const_int(0), + /* K23 */ be_const_int(1), + /* K24 */ be_nested_str(_X23), + /* K25 */ be_nested_str(_), + /* K26 */ be_nested_str(find), + /* K27 */ be_nested_str(_X2Etapp), + /* K28 */ be_nested_str(_X2F), + /* K29 */ be_nested_str(webserver), + /* K30 */ be_nested_str(content_start), + /* K31 */ be_nested_str(Extensions_X20Manager), + /* K32 */ be_nested_str(content_send_style), + /* K33 */ be_nested_str(content_send), + /* K34 */ be_nested_str(_X3Cdiv_X20style_X3D_X27padding_X3A0px_X205px_X3Btext_X2Dalign_X3Acenter_X3B_X27_X3E_X3Ch3_X3E_X3Chr_X3EExtension_X20Manager_X3Chr_X3E_X3C_X2Fh3_X3E_X3C_X2Fdiv_X3E), + /* K35 */ be_nested_str_long(_X3Cscript_X3Efunction_X20loadext_X28_X29_X20_X7Beb_X28_X27store_X27_X29_X2Edisabled_X3Dtrue_X3Bx_X3Dnew_X20XMLHttpRequest_X28_X29_X3Bx_X2Etimeout_X3D4000_X3Bx_X2Eonreadystatechange_X20_X3D_X20_X28_X29_X20_X3D_X3E_X20_X7Bif_X28x_X2EreadyState_X3D_X3D4_X29_X7Bif_X28x_X2Estatus_X3D_X3D200_X29_X7Beb_X28_X27inet_X27_X29_X2Estyle_X2Edisplay_X3D_X27none_X27_X3Beb_X28_X27store_X27_X29_X2EouterHTML_X3Dx_X2EresponseText_X3B_X7D_X7D_X7D_X3Bx_X2Eopen_X28_X27GET_X27_X2C_X27_X3Fstore_X3D_X27_X29_X3Bx_X2Esend_X28_X29_X3B_X7Dwindow_X2Eonload_X3Dfunction_X28_X29_X7Bloadext_X28_X29_X3B_X7D_X3Bfunction_X20toggleDesc_X28id_X29_X20_X7Bvar_X20desc_X20_X3D_X20document_X2EgetElementById_X28_X27desc_X2D_X27_X20_X2B_X20id_X29_X3Bvar_X20arrow_X20_X3D_X20document_X2EgetElementById_X28_X27arrow_X2D_X27_X20_X2B_X20id_X29_X3Bif_X20_X28desc_X2Estyle_X2Edisplay_X20_X3D_X3D_X3D_X20_X27none_X27_X20_X7C_X7C_X20desc_X2Estyle_X2Edisplay_X20_X3D_X3D_X3D_X20_X27_X27_X29_X20_X7Bdesc_X2Estyle_X2Edisplay_X20_X3D_X20_X27block_X27_X3Barrow_X2EinnerHTML_X20_X3D_X20_X27_XE2_X96_XBC_X27_X3B_X7D_X20else_X20_X7Bdesc_X2Estyle_X2Edisplay_X20_X3D_X20_X27none_X27_X3Barrow_X2EinnerHTML_X20_X3D_X20_X27_XE2_X96_XB6_X27_X3B_X7D_X7Dfunction_X20filterExtensions_X28query_X29_X20_X7Bvar_X20items_X20_X3D_X20document_X2EgetElementsByClassName_X28_X27ext_X2Dstore_X2Ditem_X27_X29_X3Bquery_X20_X3D_X20query_X2EtoLowerCase_X28_X29_X3Bfor_X20_X28var_X20i_X20_X3D_X200_X3B_X20i_X20_X3C_X20items_X2Elength_X3B_X20i_X2B_X2B_X29_X20_X7Bvar_X20name_X20_X3D_X20items_X5Bi_X5D_X2EgetElementsByClassName_X28_X27ext_X2Dname_X27_X29_X5B0_X5D_X2EtextContent_X2EtoLowerCase_X28_X29_X3Bvar_X20desc_X20_X3D_X20items_X5Bi_X5D_X2EgetElementsByClassName_X28_X27ext_X2Ddesc_X27_X29_X5B0_X5D_X2EtextContent_X2EtoLowerCase_X28_X29_X3Bif_X20_X28name_X2Eincludes_X28query_X29_X20_X7C_X7C_X20desc_X2Eincludes_X28query_X29_X29_X20_X7Bitems_X5Bi_X5D_X2Estyle_X2Edisplay_X20_X3D_X20_X27block_X27_X3B_X7D_X20else_X20_X7Bitems_X5Bi_X5D_X2Estyle_X2Edisplay_X20_X3D_X20_X27none_X27_X3B_X7D_X7D_X7D_X3C_X2Fscript_X3E), + /* K36 */ be_nested_str_long(_X3Cfieldset_X20style_X3D_X27padding_X3A0_X205px_X3B_X27_X3E_X3Cstyle_X3E_X2Eext_X2Ditem_X7Bwidth_X3Amin_X2Dcontent_X3Bmin_X2Dwidth_X3A100_X25_X3B_X7D_X2Eext_X2Ditem_X20small_X7Bdisplay_X3Ablock_X3Bword_X2Dwrap_X3Abreak_X2Dword_X3Boverflow_X2Dwrap_X3Abreak_X2Dword_X3Bwhite_X2Dspace_X3Anormal_X3Bpadding_X2Dright_X3A5px_X3Bpadding_X2Dtop_X3A2px_X3B_X7D_X2Eext_X2Dcontrols_X7Bdisplay_X3Aflex_X3Bgap_X3A8px_X3Balign_X2Ditems_X3Acenter_X3Bmargin_X2Dtop_X3A4px_X3Bpadding_X3A0px_X7D_X2Ebtn_X2Dsmall_X7Bpadding_X3A0_X206px_X3Bline_X2Dheight_X3A1_X2E8rem_X3Bfont_X2Dsize_X3A0_X2E9rem_X3Bmin_X2Dwidth_X3Aauto_X3Bwidth_X3Aauto_X3Bflex_X2Dshrink_X3A0_X3B_X7Dform_X7Bpadding_X2Dtop_X3A0px_X3Bpadding_X2Dbottom_X3A0px_X3B_X7D_X2Erunning_X2Dindicator_X7Bdisplay_X3Ainline_X2Dblock_X3Bwidth_X3A8px_X3Bheight_X3A8px_X3Bborder_X2Dradius_X3A50_X25_X3Bmargin_X2Dright_X3A8px_X3Bbackground_X3Avar_X28_X2D_X2Dc_btnsvhvr_X29_X3Banimation_X3Apulse_X201_X2E5s_X20infinite_X3B_X7D_X40keyframes_X20pulse_X7B0_X25_X7Bopacity_X3A1_X3B_X7D50_X25_X7Bopacity_X3A0_X2E5_X3B_X7D100_X25_X7Bopacity_X3A1_X3B_X7D_X7D_X2Estore_X2Dheader_X7Bdisplay_X3Aflex_X3Bjustify_X2Dcontent_X3Aspace_X2Dbetween_X3Balign_X2Ditems_X3Acenter_X3Bmargin_X2Dbottom_X3A10px_X3B_X7D_X2Estore_X2Dstats_X7Bfont_X2Dsize_X3A0_X2E9em_X3Bcolor_X3Avar_X28_X2D_X2Dc_in_X29_X3B_X7D_X2Eext_X2Dstore_X2Ditem_X7Bbackground_X3Avar_X28_X2D_X2Dc_bg_X29_X3Bborder_X2Dradius_X3A0_X2E3em_X3Bmargin_X2Dbottom_X3A5px_X3Bpadding_X3A4px_X3B_X7D_X2Eext_X2Dheader_X7Bdisplay_X3Aflex_X3Bjustify_X2Dcontent_X3Aspace_X2Dbetween_X3Balign_X2Ditems_X3Acenter_X3Bcursor_X3Apointer_X3Buser_X2Dselect_X3Anone_X3Bpadding_X3A5px_X3B_X7D_X2Eext_X2Dtitle_X7Bdisplay_X3Aflex_X3Balign_X2Ditems_X3Acenter_X3Bgap_X3A6px_X3Bflex_X3A1_X3Bpadding_X3A0_X3B_X7D_X2Eext_X2Dname_X7Bfont_X2Dweight_X3Abold_X3B_X7D_X2Eext_X2Dversion_X7Bfont_X2Dsize_X3A0_X2E8em_X3B_X7D_X2Eext_X2Darrow_X7Bcolor_X3Avar_X28_X2D_X2Dc_in_X29_X3Bfont_X2Dsize_X3A0_X2E8em_X3B_X7D_X2Eext_X2Dbadges_X7Bpadding_X3A0_X3B_X7D_X2Eext_X2Ddetails_X7Bwidth_X3Amin_X2Dcontent_X3Bmin_X2Dwidth_X3A100_X25_X3Bpadding_X3A0_X3Bdisplay_X3Anone_X3B_X7D_X2Eext_X2Ddesc_X7Bcolor_X3Avar_X28_X2D_X2Dc_in_X29_X3Bfont_X2Dsize_X3A0_X2E8em_X3Bline_X2Dheight_X3A1_X2E4_X3Bdisplay_X3Ablock_X3Bword_X2Dwrap_X3Abreak_X2Dword_X3Boverflow_X2Dwrap_X3Abreak_X2Dword_X3Bwhite_X2Dspace_X3Anormal_X3Bpadding_X3A0_X205px_X3B_X7D_X2Eext_X2Dactions_X7Bdisplay_X3Aflex_X3Bgap_X3A8px_X3Bpadding_X3A5px_X3B_X7D_X2Ebtn_X2Daction_X7Bpadding_X3A0_X2012px_X3Bline_X2Dheight_X3A1_X2E8em_X3Bfont_X2Dsize_X3A0_X2E9em_X3Bflex_X3A1_X3B_X7D_X2Einstalled_X2Dbadge_X7Bborder_X2Dcolor_X3Avar_X28_X2D_X2Dc_btnhvr_X29_X3Bpadding_X3A0px_X204px_X3Bborder_X2Dradius_X3A4px_X3Bfont_X2Dsize_X3A0_X2E7em_X3Bborder_X2Dwidth_X3A2px_X3Bborder_X2Dstyle_X3Asolid_X3Bmargin_X2Dright_X3A3px_X3B_X7D_X2Eupdate_X2Dbadge_X7Bbackground_X3Avar_X28_X2D_X2Dc_btnhvr_X29_X3Bpadding_X3A2px_X206px_X3Bborder_X2Dradius_X3A4px_X3Bfont_X2Dsize_X3A0_X2E7em_X3Bmargin_X2Dright_X3A3px_X3Banimation_X3Apulse_X202s_X20infinite_X3B_X7D_X40keyframes_X20pulse_X7B0_X25_X7Bopacity_X3A1_X3B_X7D50_X25_X7Bopacity_X3A0_X2E7_X3B_X7D100_X25_X7Bopacity_X3A1_X3B_X7D_X7D_X3C_X2Fstyle_X3E_X3Clegend_X3E_X3Cb_X20title_X3D_X27Running_X20extensions_X27_X3E_X26nbsp_X3BInstalled_X20extensions_X3C_X2Fb_X3E_X3C_X2Flegend_X3E), + /* K37 */ be_nested_str(list_extensions_in_fs), + /* K38 */ be_nested_str(_X3Chr_X20style_X3D_X27margin_X3A2px_X200_X200_X200_X3B_X27_X3E), + /* K39 */ be_nested_str(get_by_index), + /* K40 */ be_nested_str(html_escape), + /* K41 */ be_nested_str(read_extension_manifest), + /* K42 */ be_nested_str(_ext), + /* K43 */ be_nested_str(contains), + /* K44 */ be_nested_str(_X20_X3Cspan_X20class_X3D_X27running_X2Dindicator_X27_X20title_X3D_X27Running_X27_X3E_X3C_X2Fspan_X3E), + /* K45 */ be_nested_str(), + /* K46 */ be_nested_str(autorun), + /* K47 */ be_nested_str(style_X3D_X27background_X3Avar_X28_X2D_X2Dc_btnsvhvr_X29_X3B_X27), + /* K48 */ be_nested_str(style_X3D_X27background_X3Avar_X28_X2D_X2Dc_btnoff_X29_X3B_X27), + /* K49 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Ditem_X27_X3E), + /* K50 */ be_nested_str(_X3Cspan_X20title_X3D_X27path_X3A_X20_X25s_X27_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X25s_X3C_X2Fspan_X3E_X3Cbr_X3E), + /* K51 */ be_nested_str(name), + /* K52 */ be_nested_str(_X3Csmall_X3E_X25s_X3C_X2Fsmall_X3E), + /* K53 */ be_nested_str(description), + /* K54 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dcontrols_X27_X20style_X3D_X27padding_X2Dtop_X3A0px_X3Bpadding_X2Dbottom_X3A0px_X3B_X27_X3E), + /* K55 */ be_nested_str(_X3Cform_X20action_X3D_X27_X2Fext_X27_X20method_X3D_X27post_X27_X20class_X3D_X27ext_X2Dcontrols_X27_X3E), + /* K56 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Dsmall_X27_X20_X25s_X20name_X3D_X27_X25s_X25s_X27_X3E_X25s_X3C_X2Fbutton_X3E), + /* K57 */ be_nested_str(s), + /* K58 */ be_nested_str(r), + /* K59 */ be_nested_str(Running), + /* K60 */ be_nested_str(Stopped), + /* K61 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Dsmall_X27_X20_X25s_X20name_X3D_X27_X25s_X25s_X27_X3EAuto_X2Drun_X3A_X20_X25s_X3C_X2Fbutton_X3E), + /* K62 */ be_nested_str(a), + /* K63 */ be_nested_str(A), + /* K64 */ be_nested_str(ON), + /* K65 */ be_nested_str(OFF), + /* K66 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Dsmall_X20bred_X27_X20name_X3D_X27d_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20deletion_X20of_X20_X25s_X22_X29_X27_X3EUninstall_X3C_X2Fbutton_X3E), + /* K67 */ be_nested_str(_X3C_X2Fform_X3E_X3C_X2Fdiv_X3E_X3C_X2Fdiv_X3E), + /* K68 */ be_nested_str(_X3Cdiv_X3E_X3Csmall_X3E_X3Ci_X3ENo_X20installed_X20extension_X2E_X3C_X2Fi_X3E_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E), + /* K69 */ be_nested_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E), + /* K70 */ be_nested_str(_X3Cdiv_X20style_X3D_X27padding_X3A0px_X205px_X3Btext_X2Dalign_X3Acenter_X3B_X27_X3E_X3Ch3_X3E_X3Chr_X3EOnline_X20Store_X3Chr_X20style_X3D_X27margin_X2Dbottom_X3A0_X3B_X27_X3E_X3Cspan_X20id_X3D_X27inet_X27_X20style_X3D_X27font_X2Dsize_X3Asmall_X3Bfont_X2Dweight_X3Anormal_X3B_X27_X27_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fspan_X3E_X3C_X2Fh3_X3E_X3C_X2Fdiv_X3E), + /* K71 */ be_nested_str(_X3Cb_X20id_X3D_X27store_X27_X3E_X5B_X20_X3Cspan_X20style_X3D_X27color_X3Avar_X28_X2D_X2Dc_btnsv_X29_X3B_X27_X3ELoading_X20from_X20Store_X2E_X2E_X2E_X3C_X2Fspan_X3E_X20_X5D_X3C_X2Fb_X3E), + /* K72 */ be_nested_str(content_button), + /* K73 */ be_nested_str(BUTTON_MANAGEMENT), + /* K74 */ be_nested_str(content_stop), + /* K75 */ be_nested_str(tapp_name), + /* K76 */ be_nested_str(endswith), + /* K77 */ be_nested_str(_X25s_X25s_X25s), + /* K78 */ be_nested_str(EXT_REPO_FOLDER), + /* K79 */ be_nested_str(EXT_X3A_X20installing_X20from_X20_X27_X25s_X27), + /* K80 */ be_nested_str(_X25s_X25s), + /* K81 */ be_nested_str(EXT_FOLDER), + /* K82 */ be_nested_str(EXT_X3A_X20return_code_X3D_X25s), + /* K83 */ be_nested_str(write_file), + /* K84 */ be_nested_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27), + /* K85 */ be_nested_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3Cform_X20id_X3Dbut_part_mgr_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27ext_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EExtension_X20Manager_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3Cp_X3E_X3C_X2Fp_X3E), + /* K86 */ be_nested_str(list_extensions), + /* K87 */ be_nested_str(stop_iteration), + /* K88 */ be_nested_str(path), + /* K89 */ be_nested_str(listdir), + /* K90 */ be_nested_str(_X2Etapp_), + /* K91 */ be_nested_str(push), + /* K92 */ be_nested_str(check_privileged_access), + /* K93 */ be_nested_str(arg_name), + /* K94 */ be_const_int(2147483647), + /* K95 */ be_nested_str(load), + /* K96 */ be_nested_str(unload_extension), + /* K97 */ be_nested_str(tapp_), + /* K98 */ be_nested_str(tapp), + /* K99 */ be_nested_str(rename), + /* K100 */ be_nested_str(remove), + /* K101 */ be_nested_str(EXT_X3A_X20wrong_X20action_X20_X27_X25s_X27), + /* K102 */ be_nested_str(d), + /* K103 */ be_nested_str(u), + /* K104 */ be_nested_str(install_from_store), + /* K105 */ be_nested_str(i), + /* K106 */ be_nested_str(redirect), + /* K107 */ be_nested_str(_X2Fext), + /* K108 */ be_nested_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s), + /* K109 */ be_nested_str(Parameter_X20error), + /* K110 */ be_nested_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), + /* K111 */ be_nested_str(BUTTON_CONFIGURATION), + /* K112 */ be_nested_str(on), + /* K113 */ be_nested_str(HTTP_GET), + /* K114 */ be_nested_str(HTTP_POST), + /* K115 */ be_nested_str(sortedmap), + /* K116 */ be_nested_str(EXT_X3A_X20unable_X20to_X20read_X20details_X20from_X20_X27_X25s_X27), + /* K117 */ be_nested_str(add_driver), + /* K118 */ be_nested_str(json), + /* K119 */ be_nested_str(content_open), + /* K120 */ be_nested_str(text_X2Fhtml), + /* K121 */ be_nested_str(load_manifest), + /* K122 */ be_nested_str(_X3Cb_X20id_X3D_X27store_X27_X3E_X5B_X20_X3Cspan_X20style_X3D_X27color_X3Avar_X28_X2D_X2Dc_btnrst_X29_X3B_X27_X3EError_X20loading_X20manifest_X2E_X3C_X2Fspan_X3E_X20_X5D_X3C_X2Fb_X3E), + /* K123 */ be_nested_str(_X3Cp_X3E_X3Csmall_X3E_X25s_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E), + /* K124 */ be_nested_str(content_close), + /* K125 */ be_nested_str(count), + /* K126 */ be_nested_str(_X22name_X22_X3A), + /* K127 */ be_nested_str(_X3Cfieldset_X20id_X3D_X27store_X27_X3E), + /* K128 */ be_nested_str(_X3Cdiv_X20class_X3D_X27store_X2Dheader_X27_X3E_X3Cspan_X3EBrowse_X20Extensions_X3C_X2Fspan_X3E_X3Cspan_X20class_X3D_X27store_X2Dstats_X27_X3E_X25s_X20available_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E), + /* K129 */ be_nested_str(_X3Cinput_X20type_X3D_X27text_X27_X20placeholder_X3D_X27Search_X20extensions_X2E_X2E_X2E_X27_X20onkeyup_X3D_X27filterExtensions_X28this_X2Evalue_X29_X27_X3E_X3Cp_X3E_X3C_X2Fp_X3E), + /* K130 */ be_nested_str(list_installed_ext), + /* K131 */ be_nested_str(_X0A), + /* K132 */ be_nested_str(manifest_decode), + /* K133 */ be_nested_str(version_string), + /* K134 */ be_nested_str(file), + /* K135 */ be_nested_str(replace), + /* K136 */ be_nested_str(_X5Cn), + /* K137 */ be_nested_str(_X3Cbr_X3E), + /* K138 */ be_nested_str(author), + /* K139 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dstore_X2Ditem_X27_X3E_X3Cdiv_X20class_X3D_X27ext_X2Dheader_X27_X20onclick_X3D_X27toggleDesc_X28_X22_X25s_X22_X29_X27_X3E_X3Cdiv_X20class_X3D_X27ext_X2Dtitle_X27_X3E_X3Cspan_X20class_X3D_X27ext_X2Dname_X27_X3E_X25s_X3C_X2Fspan_X3E_X3Cspan_X20class_X3D_X27ext_X2Dversion_X27_X3E_X3Csmall_X3E_X25s_X3C_X2Fsmall_X3E_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E), + /* K140 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dbadges_X27_X3E_X3Cspan_X20class_X3D_X27update_X2Dbadge_X27_X3EUpgrade_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E), + /* K141 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dbadges_X27_X3E_X3Cspan_X20class_X3D_X27installed_X2Dbadge_X27_X3EInstalled_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E), + /* K142 */ be_nested_str(_X3Cspan_X20id_X3D_X27arrow_X2D_X25s_X27_X20class_X3D_X27ext_X2Darrow_X27_X3E_XE2_X96_XB6_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E_X3Cdiv_X20id_X3D_X27desc_X2D_X25s_X27_X20class_X3D_X27ext_X2Ddetails_X27_X3E_X3Cdiv_X20class_X3D_X27ext_X2Ddesc_X27_X3E_X25s), + /* K143 */ be_nested_str(_X3Cbr_X3E_X25s_X20_XE2_X86_X92_X20_X25s), + /* K144 */ be_nested_str(_X3C_X2Fdiv_X3E_X3Cform_X20action_X3D_X27_X2Fext_X27_X20method_X3D_X27post_X27_X20class_X3D_X27ext_X2Dactions_X27_X3E_X3Cdiv_X20style_X3D_X27width_X3A30_X25_X27_X3E_X3C_X2Fdiv_X3E), + /* K145 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X27_X20name_X3D_X27u_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20upgrade_X20of_X20_X25s_X22_X29_X27_X3EUpgrade_X3C_X2Fbutton_X3E), + /* K146 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X27_X20style_X3D_X27visibility_X3Ahidden_X3B_X27_X3E_X3C_X2Fbutton_X3E), + /* K147 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X20bred_X27_X20name_X3D_X27d_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20deletion_X20of_X20_X25s_X22_X29_X27_X3EUninstall_X3C_X2Fbutton_X3E), + /* K148 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X27_X20style_X3D_X27visibility_X3Ahidden_X3B_X27_X3E_X3C_X2Fbutton_X3E_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X20bgrn_X27_X20name_X3D_X27i_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20installation_X20of_X20_X25s_X22_X29_X27_X3EInstall_X3C_X2Fbutton_X3E), + /* K149 */ be_nested_str(v_X25s_X2E_X25s_X2E_X25s_X2E_X25s), + /* K150 */ be_nested_str(has_arg), + /* K151 */ be_nested_str(store), + /* K152 */ be_nested_str(page_extensions_store), + /* K153 */ be_nested_str(page_extensions_mgr), + /* K154 */ be_nested_str(EXT_X3A_X20unable_X20to_X20parse_X20manifest_X20line_X20_X27_X25s_X27), + /* K155 */ be_nested_str(EXT_X3A_X20manifest_X20is_X20missing_X20_X27name_X2Ffile_X2Fversion_X27_X20in_X20map_X20_X27_X25s_X27), + /* K156 */ be_nested_str(_X5Bno_X20description_X5D), +}; + + +extern const bclass be_class_Extension_manager; + +/******************************************************************** +** Solidified function: load_manifest +********************************************************************/ +be_local_closure(class_Extension_manager_load_manifest, /* name */ + be_nested_proto( + 11, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_load_manifest, + &be_const_str_solidified, + ( &(const binstruction[70]) { /* code */ + 0xA8020035, // 0000 EXBLK 0 #0037 + 0xB8060000, // 0001 GETNGBL R1 K0 + 0x8C040301, // 0002 GETMET R1 R1 K1 + 0x7C040200, // 0003 CALL R1 1 + 0x60080018, // 0004 GETGBL R2 G24 + 0x580C0002, // 0005 LDCONST R3 K2 + 0xB8120000, // 0006 GETNGBL R4 K0 + 0x8C100903, // 0007 GETMET R4 R4 K3 + 0x7C100200, // 0008 CALL R4 1 + 0x7C080400, // 0009 CALL R2 2 + 0x600C0018, // 000A GETGBL R3 G24 + 0x58100004, // 000B LDCONST R4 K4 + 0x88140105, // 000C GETMBR R5 R0 K5 + 0x88180106, // 000D GETMBR R6 R0 K6 + 0x5C1C0200, // 000E MOVE R7 R1 + 0x5C200400, // 000F MOVE R8 R2 + 0x7C0C0A00, // 0010 CALL R3 5 + 0xB8120E00, // 0011 GETNGBL R4 K7 + 0x60140018, // 0012 GETGBL R5 G24 + 0x58180008, // 0013 LDCONST R6 K8 + 0x5C1C0600, // 0014 MOVE R7 R3 + 0x7C140400, // 0015 CALL R5 2 + 0x58180009, // 0016 LDCONST R6 K9 + 0x7C100400, // 0017 CALL R4 2 + 0xB8121400, // 0018 GETNGBL R4 K10 + 0x7C100000, // 0019 CALL R4 0 + 0x8C14090B, // 001A GETMET R5 R4 K11 + 0x5C1C0600, // 001B MOVE R7 R3 + 0x7C140400, // 001C CALL R5 2 + 0x8C14090C, // 001D GETMET R5 R4 K12 + 0x7C140200, // 001E CALL R5 1 + 0x541A00C7, // 001F LDINT R6 200 + 0x20180A06, // 0020 NE R6 R5 R6 + 0x781A000C, // 0021 JMPF R6 #002F + 0xB81A0000, // 0022 GETNGBL R6 K0 + 0x8C180D07, // 0023 GETMET R6 R6 K7 + 0x60200018, // 0024 GETGBL R8 G24 + 0x5824000D, // 0025 LDCONST R9 K13 + 0x5C280A00, // 0026 MOVE R10 R5 + 0x7C200400, // 0027 CALL R8 2 + 0x5824000E, // 0028 LDCONST R9 K14 + 0x7C180600, // 0029 CALL R6 3 + 0x60180018, // 002A GETGBL R6 G24 + 0x581C000F, // 002B LDCONST R7 K15 + 0x5C200A00, // 002C MOVE R8 R5 + 0x7C180400, // 002D CALL R6 2 + 0xB0062006, // 002E RAISE 1 K16 R6 + 0x8C180911, // 002F GETMET R6 R4 K17 + 0x7C180200, // 0030 CALL R6 1 + 0x8C1C0912, // 0031 GETMET R7 R4 K18 + 0x7C1C0200, // 0032 CALL R7 1 + 0xA8040001, // 0033 EXBLK 1 1 + 0x80040C00, // 0034 RET 1 R6 + 0xA8040001, // 0035 EXBLK 1 1 + 0x7002000D, // 0036 JMP #0045 + 0xAC040002, // 0037 CATCH R1 0 2 + 0x7002000A, // 0038 JMP #0044 + 0xB80E0000, // 0039 GETNGBL R3 K0 + 0x8C0C0707, // 003A GETMET R3 R3 K7 + 0x60140018, // 003B GETGBL R5 G24 + 0x58180013, // 003C LDCONST R6 K19 + 0x5C1C0200, // 003D MOVE R7 R1 + 0x5C200400, // 003E MOVE R8 R2 + 0x7C140600, // 003F CALL R5 3 + 0x5818000E, // 0040 LDCONST R6 K14 + 0x7C0C0600, // 0041 CALL R3 3 + 0xB0040202, // 0042 RAISE 1 R1 R2 + 0x70020000, // 0043 JMP #0045 + 0xB0080000, // 0044 RAISE 2 R0 R0 + 0x80000000, // 0045 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: tapp_name +********************************************************************/ +be_local_closure(class_Extension_manager_tapp_name, /* name */ + be_nested_proto( + 12, /* nstack */ + 1, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_tapp_name, + &be_const_str_solidified, + ( &(const binstruction[44]) { /* code */ + 0x58040014, // 0000 LDCONST R1 K20 + 0xA40A2A00, // 0001 IMPORT R2 K21 + 0x580C0016, // 0002 LDCONST R3 K22 + 0x6010000C, // 0003 GETGBL R4 G12 + 0x5C140000, // 0004 MOVE R5 R0 + 0x7C100200, // 0005 CALL R4 1 + 0x04100917, // 0006 SUB R4 R4 K23 + 0x94140004, // 0007 GETIDX R5 R0 R4 + 0x1C140B18, // 0008 EQ R5 R5 K24 + 0x74160002, // 0009 JMPT R5 #000D + 0x94140004, // 000A GETIDX R5 R0 R4 + 0x1C140B19, // 000B EQ R5 R5 K25 + 0x78160000, // 000C JMPF R5 #000E + 0x04100917, // 000D SUB R4 R4 K23 + 0x8C14051A, // 000E GETMET R5 R2 K26 + 0x5C1C0000, // 000F MOVE R7 R0 + 0x5820001B, // 0010 LDCONST R8 K27 + 0x00240917, // 0011 ADD R9 R4 K23 + 0x6028000C, // 0012 GETGBL R10 G12 + 0x582C001B, // 0013 LDCONST R11 K27 + 0x7C280200, // 0014 CALL R10 1 + 0x0424120A, // 0015 SUB R9 R9 R10 + 0x7C140800, // 0016 CALL R5 4 + 0x28140B16, // 0017 GE R5 R5 K22 + 0x78160003, // 0018 JMPF R5 #001D + 0x6014000C, // 0019 GETGBL R5 G12 + 0x5818001B, // 001A LDCONST R6 K27 + 0x7C140200, // 001B CALL R5 1 + 0x04100805, // 001C SUB R4 R4 R5 + 0x4C140000, // 001D LDNIL R5 + 0x8C18051A, // 001E GETMET R6 R2 K26 + 0x5C200000, // 001F MOVE R8 R0 + 0x5824001C, // 0020 LDCONST R9 K28 + 0x5C280600, // 0021 MOVE R10 R3 + 0x7C180800, // 0022 CALL R6 4 + 0x5C140C00, // 0023 MOVE R5 R6 + 0x28180D16, // 0024 GE R6 R6 K22 + 0x781A0002, // 0025 JMPF R6 #0029 + 0x00180B17, // 0026 ADD R6 R5 K23 + 0x5C0C0C00, // 0027 MOVE R3 R6 + 0x7001FFF4, // 0028 JMP #001E + 0x40180604, // 0029 CONNECT R6 R3 R4 + 0x94180006, // 002A GETIDX R6 R0 R6 + 0x80040C00, // 002B RET 1 R6 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: page_extensions_mgr +********************************************************************/ +be_local_closure(class_Extension_manager_page_extensions_mgr, /* name */ + be_nested_proto( + 21, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_page_extensions_mgr, + &be_const_str_solidified, + ( &(const binstruction[161]) { /* code */ + 0xA4063A00, // 0000 IMPORT R1 K29 + 0xA40A2A00, // 0001 IMPORT R2 K21 + 0x8C0C031E, // 0002 GETMET R3 R1 K30 + 0x5814001F, // 0003 LDCONST R5 K31 + 0x7C0C0400, // 0004 CALL R3 2 + 0x8C0C0320, // 0005 GETMET R3 R1 K32 + 0x7C0C0200, // 0006 CALL R3 1 + 0x8C0C0321, // 0007 GETMET R3 R1 K33 + 0x58140022, // 0008 LDCONST R5 K34 + 0x7C0C0400, // 0009 CALL R3 2 + 0x8C0C0321, // 000A GETMET R3 R1 K33 + 0x58140023, // 000B LDCONST R5 K35 + 0x7C0C0400, // 000C CALL R3 2 + 0x8C0C0321, // 000D GETMET R3 R1 K33 + 0x58140024, // 000E LDCONST R5 K36 + 0x7C0C0400, // 000F CALL R3 2 + 0x8C0C0125, // 0010 GETMET R3 R0 K37 + 0x50140200, // 0011 LDBOOL R5 1 0 + 0x7C0C0400, // 0012 CALL R3 2 + 0x6010000C, // 0013 GETGBL R4 G12 + 0x5C140600, // 0014 MOVE R5 R3 + 0x7C100200, // 0015 CALL R4 1 + 0x24100916, // 0016 GT R4 R4 K22 + 0x78120076, // 0017 JMPF R4 #008F + 0x58100016, // 0018 LDCONST R4 K22 + 0x6014000C, // 0019 GETGBL R5 G12 + 0x5C180600, // 001A MOVE R6 R3 + 0x7C140200, // 001B CALL R5 1 + 0x14140805, // 001C LT R5 R4 R5 + 0x7816006F, // 001D JMPF R5 #008E + 0x24140916, // 001E GT R5 R4 K22 + 0x78160002, // 001F JMPF R5 #0023 + 0x8C140321, // 0020 GETMET R5 R1 K33 + 0x581C0026, // 0021 LDCONST R7 K38 + 0x7C140400, // 0022 CALL R5 2 + 0x8C140727, // 0023 GETMET R5 R3 K39 + 0x5C1C0800, // 0024 MOVE R7 R4 + 0x7C140400, // 0025 CALL R5 2 + 0x8C180328, // 0026 GETMET R6 R1 K40 + 0x5C200A00, // 0027 MOVE R8 R5 + 0x7C180400, // 0028 CALL R6 2 + 0xB81E0000, // 0029 GETNGBL R7 K0 + 0x8C1C0F29, // 002A GETMET R7 R7 K41 + 0x5C240A00, // 002B MOVE R9 R5 + 0x7C1C0400, // 002C CALL R7 2 + 0xB8220000, // 002D GETNGBL R8 K0 + 0x8820112A, // 002E GETMBR R8 R8 K42 + 0x78220005, // 002F JMPF R8 #0036 + 0xB8220000, // 0030 GETNGBL R8 K0 + 0x8820112A, // 0031 GETMBR R8 R8 K42 + 0x8C20112B, // 0032 GETMET R8 R8 K43 + 0x5C280A00, // 0033 MOVE R10 R5 + 0x7C200400, // 0034 CALL R8 2 + 0x70020000, // 0035 JMP #0037 + 0x50200000, // 0036 LDBOOL R8 0 0 + 0x78220001, // 0037 JMPF R8 #003A + 0x5824002C, // 0038 LDCONST R9 K44 + 0x70020000, // 0039 JMP #003B + 0x5824002D, // 003A LDCONST R9 K45 + 0x8C280F1A, // 003B GETMET R10 R7 K26 + 0x5830002E, // 003C LDCONST R12 K46 + 0x50340000, // 003D LDBOOL R13 0 0 + 0x7C280600, // 003E CALL R10 3 + 0x582C002F, // 003F LDCONST R11 K47 + 0x58300030, // 0040 LDCONST R12 K48 + 0x8C340321, // 0041 GETMET R13 R1 K33 + 0x583C0031, // 0042 LDCONST R15 K49 + 0x7C340400, // 0043 CALL R13 2 + 0x8C340321, // 0044 GETMET R13 R1 K33 + 0x603C0018, // 0045 GETGBL R15 G24 + 0x58400032, // 0046 LDCONST R16 K50 + 0x5C440C00, // 0047 MOVE R17 R6 + 0x8C480328, // 0048 GETMET R18 R1 K40 + 0x94500F33, // 0049 GETIDX R20 R7 K51 + 0x7C480400, // 004A CALL R18 2 + 0x5C4C1200, // 004B MOVE R19 R9 + 0x7C3C0800, // 004C CALL R15 4 + 0x7C340400, // 004D CALL R13 2 + 0x8C340321, // 004E GETMET R13 R1 K33 + 0x603C0018, // 004F GETGBL R15 G24 + 0x58400034, // 0050 LDCONST R16 K52 + 0x8C440328, // 0051 GETMET R17 R1 K40 + 0x944C0F35, // 0052 GETIDX R19 R7 K53 + 0x7C440400, // 0053 CALL R17 2 + 0x7C3C0400, // 0054 CALL R15 2 + 0x7C340400, // 0055 CALL R13 2 + 0x8C340321, // 0056 GETMET R13 R1 K33 + 0x583C0036, // 0057 LDCONST R15 K54 + 0x7C340400, // 0058 CALL R13 2 + 0x8C340321, // 0059 GETMET R13 R1 K33 + 0x583C0037, // 005A LDCONST R15 K55 + 0x7C340400, // 005B CALL R13 2 + 0x8C340321, // 005C GETMET R13 R1 K33 + 0x603C0018, // 005D GETGBL R15 G24 + 0x58400038, // 005E LDCONST R16 K56 + 0x78220001, // 005F JMPF R8 #0062 + 0x5C441600, // 0060 MOVE R17 R11 + 0x70020000, // 0061 JMP #0063 + 0x5C441800, // 0062 MOVE R17 R12 + 0x78220001, // 0063 JMPF R8 #0066 + 0x58480039, // 0064 LDCONST R18 K57 + 0x70020000, // 0065 JMP #0067 + 0x5848003A, // 0066 LDCONST R18 K58 + 0x5C4C0C00, // 0067 MOVE R19 R6 + 0x78220001, // 0068 JMPF R8 #006B + 0x5850003B, // 0069 LDCONST R20 K59 + 0x70020000, // 006A JMP #006C + 0x5850003C, // 006B LDCONST R20 K60 + 0x7C3C0A00, // 006C CALL R15 5 + 0x7C340400, // 006D CALL R13 2 + 0x8C340321, // 006E GETMET R13 R1 K33 + 0x603C0018, // 006F GETGBL R15 G24 + 0x5840003D, // 0070 LDCONST R16 K61 + 0x782A0001, // 0071 JMPF R10 #0074 + 0x5844002D, // 0072 LDCONST R17 K45 + 0x70020000, // 0073 JMP #0075 + 0x5C441800, // 0074 MOVE R17 R12 + 0x782A0001, // 0075 JMPF R10 #0078 + 0x5848003E, // 0076 LDCONST R18 K62 + 0x70020000, // 0077 JMP #0079 + 0x5848003F, // 0078 LDCONST R18 K63 + 0x5C4C0C00, // 0079 MOVE R19 R6 + 0x782A0001, // 007A JMPF R10 #007D + 0x58500040, // 007B LDCONST R20 K64 + 0x70020000, // 007C JMP #007E + 0x58500041, // 007D LDCONST R20 K65 + 0x7C3C0A00, // 007E CALL R15 5 + 0x7C340400, // 007F CALL R13 2 + 0x8C340321, // 0080 GETMET R13 R1 K33 + 0x603C0018, // 0081 GETGBL R15 G24 + 0x58400042, // 0082 LDCONST R16 K66 + 0x5C440C00, // 0083 MOVE R17 R6 + 0x8C480328, // 0084 GETMET R18 R1 K40 + 0x5C500A00, // 0085 MOVE R20 R5 + 0x7C480400, // 0086 CALL R18 2 + 0x7C3C0600, // 0087 CALL R15 3 + 0x7C340400, // 0088 CALL R13 2 + 0x8C340321, // 0089 GETMET R13 R1 K33 + 0x583C0043, // 008A LDCONST R15 K67 + 0x7C340400, // 008B CALL R13 2 + 0x00100917, // 008C ADD R4 R4 K23 + 0x7001FF8A, // 008D JMP #0019 + 0x70020002, // 008E JMP #0092 + 0x8C100321, // 008F GETMET R4 R1 K33 + 0x58180044, // 0090 LDCONST R6 K68 + 0x7C100400, // 0091 CALL R4 2 + 0x8C100321, // 0092 GETMET R4 R1 K33 + 0x58180045, // 0093 LDCONST R6 K69 + 0x7C100400, // 0094 CALL R4 2 + 0x8C100321, // 0095 GETMET R4 R1 K33 + 0x58180046, // 0096 LDCONST R6 K70 + 0x7C100400, // 0097 CALL R4 2 + 0x8C100321, // 0098 GETMET R4 R1 K33 + 0x58180047, // 0099 LDCONST R6 K71 + 0x7C100400, // 009A CALL R4 2 + 0x8C100348, // 009B GETMET R4 R1 K72 + 0x88180349, // 009C GETMBR R6 R1 K73 + 0x7C100400, // 009D CALL R4 2 + 0x8C10034A, // 009E GETMET R4 R1 K74 + 0x7C100200, // 009F CALL R4 1 + 0x80000000, // 00A0 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: install_from_store +********************************************************************/ +be_local_closure(class_Extension_manager_install_from_store, /* name */ + be_nested_proto( + 12, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_install_from_store, + &be_const_str_solidified, + ( &(const binstruction[72]) { /* code */ + 0xA40A2A00, // 0000 IMPORT R2 K21 + 0x8C0C014B, // 0001 GETMET R3 R0 K75 + 0x5C140200, // 0002 MOVE R5 R1 + 0x7C0C0400, // 0003 CALL R3 2 + 0x5C040600, // 0004 MOVE R1 R3 + 0x8C0C054C, // 0005 GETMET R3 R2 K76 + 0x5C140200, // 0006 MOVE R5 R1 + 0x5818001B, // 0007 LDCONST R6 K27 + 0x7C0C0600, // 0008 CALL R3 3 + 0x740E0000, // 0009 JMPT R3 #000B + 0x0004031B, // 000A ADD R1 R1 K27 + 0x600C0018, // 000B GETGBL R3 G24 + 0x5810004D, // 000C LDCONST R4 K77 + 0x88140105, // 000D GETMBR R5 R0 K5 + 0x8818014E, // 000E GETMBR R6 R0 K78 + 0x5C1C0200, // 000F MOVE R7 R1 + 0x7C0C0800, // 0010 CALL R3 4 + 0xB8120E00, // 0011 GETNGBL R4 K7 + 0x60140018, // 0012 GETGBL R5 G24 + 0x5818004F, // 0013 LDCONST R6 K79 + 0x5C1C0600, // 0014 MOVE R7 R3 + 0x7C140400, // 0015 CALL R5 2 + 0x58180009, // 0016 LDCONST R6 K9 + 0x7C100400, // 0017 CALL R4 2 + 0xA802001E, // 0018 EXBLK 0 #0038 + 0x60100018, // 0019 GETGBL R4 G24 + 0x58140050, // 001A LDCONST R5 K80 + 0x88180151, // 001B GETMBR R6 R0 K81 + 0x5C1C0200, // 001C MOVE R7 R1 + 0x7C100600, // 001D CALL R4 3 + 0xB8161400, // 001E GETNGBL R5 K10 + 0x7C140000, // 001F CALL R5 0 + 0x8C180B0B, // 0020 GETMET R6 R5 K11 + 0x5C200600, // 0021 MOVE R8 R3 + 0x7C180400, // 0022 CALL R6 2 + 0x8C180B0C, // 0023 GETMET R6 R5 K12 + 0x7C180200, // 0024 CALL R6 1 + 0x541E00C7, // 0025 LDINT R7 200 + 0x201C0C07, // 0026 NE R7 R6 R7 + 0x781E0008, // 0027 JMPF R7 #0031 + 0xB81E0E00, // 0028 GETNGBL R7 K7 + 0x60200018, // 0029 GETGBL R8 G24 + 0x58240052, // 002A LDCONST R9 K82 + 0x5C280C00, // 002B MOVE R10 R6 + 0x7C200400, // 002C CALL R8 2 + 0x5824000E, // 002D LDCONST R9 K14 + 0x7C1C0400, // 002E CALL R7 2 + 0xA8040001, // 002F EXBLK 1 1 + 0x80000E00, // 0030 RET 0 + 0x8C1C0B53, // 0031 GETMET R7 R5 K83 + 0x5C240800, // 0032 MOVE R9 R4 + 0x7C1C0400, // 0033 CALL R7 2 + 0x8C1C0B12, // 0034 GETMET R7 R5 K18 + 0x7C1C0200, // 0035 CALL R7 1 + 0xA8040001, // 0036 EXBLK 1 1 + 0x7002000E, // 0037 JMP #0047 + 0xAC100002, // 0038 CATCH R4 0 2 + 0x7002000B, // 0039 JMP #0046 + 0xB81A0000, // 003A GETNGBL R6 K0 + 0x8C180D07, // 003B GETMET R6 R6 K7 + 0x60200018, // 003C GETGBL R8 G24 + 0x58240054, // 003D LDCONST R9 K84 + 0x5C280800, // 003E MOVE R10 R4 + 0x5C2C0A00, // 003F MOVE R11 R5 + 0x7C200600, // 0040 CALL R8 3 + 0x5824000E, // 0041 LDCONST R9 K14 + 0x7C180600, // 0042 CALL R6 3 + 0x4C180000, // 0043 LDNIL R6 + 0x80040C00, // 0044 RET 1 R6 + 0x70020000, // 0045 JMP #0047 + 0xB0080000, // 0046 RAISE 2 R0 R0 + 0x80000000, // 0047 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: web_add_button +********************************************************************/ +be_local_closure(class_Extension_manager_web_add_button, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_web_add_button, + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0xA4063A00, // 0000 IMPORT R1 K29 + 0x8C080321, // 0001 GETMET R2 R1 K33 + 0x58100055, // 0002 LDCONST R4 K85 + 0x7C080400, // 0003 CALL R2 2 + 0x80000000, // 0004 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: list_installed_ext +********************************************************************/ +be_local_closure(class_Extension_manager_list_installed_ext, /* name */ + be_nested_proto( + 7, /* nstack */ + 0, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_list_installed_ext, + &be_const_str_solidified, + ( &(const binstruction[19]) { /* code */ + 0x58000014, // 0000 LDCONST R0 K20 + 0x60040013, // 0001 GETGBL R1 G19 + 0x7C040000, // 0002 CALL R1 0 + 0x60080010, // 0003 GETGBL R2 G16 + 0x8C0C0156, // 0004 GETMET R3 R0 K86 + 0x7C0C0200, // 0005 CALL R3 1 + 0x7C080200, // 0006 CALL R2 1 + 0xA8020006, // 0007 EXBLK 0 #000F + 0x5C0C0400, // 0008 MOVE R3 R2 + 0x7C0C0000, // 0009 CALL R3 0 + 0x8C10014B, // 000A GETMET R4 R0 K75 + 0x5C180600, // 000B MOVE R6 R3 + 0x7C100400, // 000C CALL R4 2 + 0x98040803, // 000D SETIDX R1 R4 R3 + 0x7001FFF8, // 000E JMP #0008 + 0x58080057, // 000F LDCONST R2 K87 + 0xAC080200, // 0010 CATCH R2 1 0 + 0xB0080000, // 0011 RAISE 2 R0 R0 + 0x80040200, // 0012 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: list_extensions +********************************************************************/ +be_local_closure(class_Extension_manager_list_extensions, /* name */ + be_nested_proto( + 10, /* nstack */ + 0, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_list_extensions, + &be_const_str_solidified, + ( &(const binstruction[32]) { /* code */ + 0x58000014, // 0000 LDCONST R0 K20 + 0xA406B000, // 0001 IMPORT R1 K88 + 0xA40A2A00, // 0002 IMPORT R2 K21 + 0x600C0012, // 0003 GETGBL R3 G18 + 0x7C0C0000, // 0004 CALL R3 0 + 0x60100010, // 0005 GETGBL R4 G16 + 0x8C140359, // 0006 GETMET R5 R1 K89 + 0x881C0151, // 0007 GETMBR R7 R0 K81 + 0x7C140400, // 0008 CALL R5 2 + 0x7C100200, // 0009 CALL R4 1 + 0xA8020010, // 000A EXBLK 0 #001C + 0x5C140800, // 000B MOVE R5 R4 + 0x7C140000, // 000C CALL R5 0 + 0x8C18054C, // 000D GETMET R6 R2 K76 + 0x5C200A00, // 000E MOVE R8 R5 + 0x5824001B, // 000F LDCONST R9 K27 + 0x7C180600, // 0010 CALL R6 3 + 0x741A0004, // 0011 JMPT R6 #0017 + 0x8C18054C, // 0012 GETMET R6 R2 K76 + 0x5C200A00, // 0013 MOVE R8 R5 + 0x5824005A, // 0014 LDCONST R9 K90 + 0x7C180600, // 0015 CALL R6 3 + 0x781A0003, // 0016 JMPF R6 #001B + 0x8C18075B, // 0017 GETMET R6 R3 K91 + 0x88200151, // 0018 GETMBR R8 R0 K81 + 0x00201005, // 0019 ADD R8 R8 R5 + 0x7C180400, // 001A CALL R6 2 + 0x7001FFEE, // 001B JMP #000B + 0x58100057, // 001C LDCONST R4 K87 + 0xAC100200, // 001D CATCH R4 1 0 + 0xB0080000, // 001E RAISE 2 R0 R0 + 0x80040600, // 001F RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: page_extensions_ctl +********************************************************************/ +be_local_closure(class_Extension_manager_page_extensions_ctl, /* name */ + be_nested_proto( + 14, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_page_extensions_ctl, + &be_const_str_solidified, + ( &(const binstruction[165]) { /* code */ + 0xA4063A00, // 0000 IMPORT R1 K29 + 0xA40AB000, // 0001 IMPORT R2 K88 + 0xA40E2A00, // 0002 IMPORT R3 K21 + 0x8C10035C, // 0003 GETMET R4 R1 K92 + 0x7C100200, // 0004 CALL R4 1 + 0x74120001, // 0005 JMPT R4 #0008 + 0x4C100000, // 0006 LDNIL R4 + 0x80040800, // 0007 RET 1 R4 + 0xA8020079, // 0008 EXBLK 0 #0083 + 0x8C10035D, // 0009 GETMET R4 R1 K93 + 0x58180016, // 000A LDCONST R6 K22 + 0x7C100400, // 000B CALL R4 2 + 0x94140916, // 000C GETIDX R5 R4 K22 + 0x401A2F5E, // 000D CONNECT R6 K23 K94 + 0x94180806, // 000E GETIDX R6 R4 R6 + 0x1C1C0B3A, // 000F EQ R7 R5 K58 + 0x781E0006, // 0010 JMPF R7 #0018 + 0x201C0D2D, // 0011 NE R7 R6 K45 + 0x781E0003, // 0012 JMPF R7 #0017 + 0xB81E0000, // 0013 GETNGBL R7 K0 + 0x8C1C0F5F, // 0014 GETMET R7 R7 K95 + 0x5C240C00, // 0015 MOVE R9 R6 + 0x7C1C0400, // 0016 CALL R7 2 + 0x70020063, // 0017 JMP #007C + 0x1C1C0B39, // 0018 EQ R7 R5 K57 + 0x781E0004, // 0019 JMPF R7 #001F + 0xB81E0000, // 001A GETNGBL R7 K0 + 0x8C1C0F60, // 001B GETMET R7 R7 K96 + 0x5C240C00, // 001C MOVE R9 R6 + 0x7C1C0400, // 001D CALL R7 2 + 0x7002005C, // 001E JMP #007C + 0x1C1C0B3E, // 001F EQ R7 R5 K62 + 0x741E0001, // 0020 JMPT R7 #0023 + 0x1C1C0B3F, // 0021 EQ R7 R5 K63 + 0x781E0039, // 0022 JMPF R7 #005D + 0x4C1C0000, // 0023 LDNIL R7 + 0x1C200B3E, // 0024 EQ R8 R5 K62 + 0x7822000A, // 0025 JMPF R8 #0031 + 0x8C20074C, // 0026 GETMET R8 R3 K76 + 0x5C280C00, // 0027 MOVE R10 R6 + 0x582C001B, // 0028 LDCONST R11 K27 + 0x7C200600, // 0029 CALL R8 3 + 0x78220005, // 002A JMPF R8 #0031 + 0x5421FFFA, // 002B LDINT R8 -5 + 0x40222C08, // 002C CONNECT R8 K22 R8 + 0x94200C08, // 002D GETIDX R8 R6 R8 + 0x00201161, // 002E ADD R8 R8 K97 + 0x5C1C1000, // 002F MOVE R7 R8 + 0x7002000B, // 0030 JMP #003D + 0x1C200B3F, // 0031 EQ R8 R5 K63 + 0x78220009, // 0032 JMPF R8 #003D + 0x8C20074C, // 0033 GETMET R8 R3 K76 + 0x5C280C00, // 0034 MOVE R10 R6 + 0x582C005A, // 0035 LDCONST R11 K90 + 0x7C200600, // 0036 CALL R8 3 + 0x78220004, // 0037 JMPF R8 #003D + 0x5421FFF9, // 0038 LDINT R8 -6 + 0x40222C08, // 0039 CONNECT R8 K22 R8 + 0x94200C08, // 003A GETIDX R8 R6 R8 + 0x00201162, // 003B ADD R8 R8 K98 + 0x5C1C1000, // 003C MOVE R7 R8 + 0x781E0016, // 003D JMPF R7 #0055 + 0x8C200563, // 003E GETMET R8 R2 K99 + 0x5C280C00, // 003F MOVE R10 R6 + 0x5C2C0E00, // 0040 MOVE R11 R7 + 0x7C200600, // 0041 CALL R8 3 + 0x78220010, // 0042 JMPF R8 #0054 + 0xB8260000, // 0043 GETNGBL R9 K0 + 0x8824132A, // 0044 GETMBR R9 R9 K42 + 0x8C24132B, // 0045 GETMET R9 R9 K43 + 0x5C2C0C00, // 0046 MOVE R11 R6 + 0x7C240400, // 0047 CALL R9 2 + 0x7826000A, // 0048 JMPF R9 #0054 + 0xB8260000, // 0049 GETNGBL R9 K0 + 0x8824132A, // 004A GETMBR R9 R9 K42 + 0xB82A0000, // 004B GETNGBL R10 K0 + 0x8828152A, // 004C GETMBR R10 R10 K42 + 0x94281406, // 004D GETIDX R10 R10 R6 + 0x98240E0A, // 004E SETIDX R9 R7 R10 + 0xB8260000, // 004F GETNGBL R9 K0 + 0x8824132A, // 0050 GETMBR R9 R9 K42 + 0x8C241364, // 0051 GETMET R9 R9 K100 + 0x5C2C0C00, // 0052 MOVE R11 R6 + 0x7C240400, // 0053 CALL R9 2 + 0x70020006, // 0054 JMP #005C + 0xB8220E00, // 0055 GETNGBL R8 K7 + 0x60240018, // 0056 GETGBL R9 G24 + 0x58280065, // 0057 LDCONST R10 K101 + 0x5C2C0800, // 0058 MOVE R11 R4 + 0x7C240400, // 0059 CALL R9 2 + 0x58280009, // 005A LDCONST R10 K9 + 0x7C200400, // 005B CALL R8 2 + 0x7002001E, // 005C JMP #007C + 0x1C1C0B66, // 005D EQ R7 R5 K102 + 0x781E0009, // 005E JMPF R7 #0069 + 0x201C0D2D, // 005F NE R7 R6 K45 + 0x781E0006, // 0060 JMPF R7 #0068 + 0xB81E0000, // 0061 GETNGBL R7 K0 + 0x8C1C0F60, // 0062 GETMET R7 R7 K96 + 0x5C240C00, // 0063 MOVE R9 R6 + 0x7C1C0400, // 0064 CALL R7 2 + 0x8C1C0564, // 0065 GETMET R7 R2 K100 + 0x5C240C00, // 0066 MOVE R9 R6 + 0x7C1C0400, // 0067 CALL R7 2 + 0x70020012, // 0068 JMP #007C + 0x1C1C0B67, // 0069 EQ R7 R5 K103 + 0x781E0009, // 006A JMPF R7 #0075 + 0xB81E0000, // 006B GETNGBL R7 K0 + 0x8C1C0F60, // 006C GETMET R7 R7 K96 + 0x5C240C00, // 006D MOVE R9 R6 + 0x7C1C0400, // 006E CALL R7 2 + 0x8C1C0168, // 006F GETMET R7 R0 K104 + 0x8C24014B, // 0070 GETMET R9 R0 K75 + 0x5C2C0C00, // 0071 MOVE R11 R6 + 0x7C240400, // 0072 CALL R9 2 + 0x7C1C0400, // 0073 CALL R7 2 + 0x70020006, // 0074 JMP #007C + 0x1C1C0B69, // 0075 EQ R7 R5 K105 + 0x781E0004, // 0076 JMPF R7 #007C + 0x8C1C0168, // 0077 GETMET R7 R0 K104 + 0x8C24014B, // 0078 GETMET R9 R0 K75 + 0x5C2C0C00, // 0079 MOVE R11 R6 + 0x7C240400, // 007A CALL R9 2 + 0x7C1C0400, // 007B CALL R7 2 + 0x8C1C036A, // 007C GETMET R7 R1 K106 + 0x60240018, // 007D GETGBL R9 G24 + 0x5828006B, // 007E LDCONST R10 K107 + 0x7C240200, // 007F CALL R9 1 + 0x7C1C0400, // 0080 CALL R7 2 + 0xA8040001, // 0081 EXBLK 1 1 + 0x70020020, // 0082 JMP #00A4 + 0xAC100002, // 0083 CATCH R4 0 2 + 0x7002001D, // 0084 JMP #00A3 + 0xB81A0E00, // 0085 GETNGBL R6 K7 + 0x601C0018, // 0086 GETGBL R7 G24 + 0x5820006C, // 0087 LDCONST R8 K108 + 0x5C240800, // 0088 MOVE R9 R4 + 0x5C280A00, // 0089 MOVE R10 R5 + 0x7C1C0600, // 008A CALL R7 3 + 0x5820000E, // 008B LDCONST R8 K14 + 0x7C180400, // 008C CALL R6 2 + 0x8C18031E, // 008D GETMET R6 R1 K30 + 0x5820006D, // 008E LDCONST R8 K109 + 0x7C180400, // 008F CALL R6 2 + 0x8C180320, // 0090 GETMET R6 R1 K32 + 0x7C180200, // 0091 CALL R6 1 + 0x8C180321, // 0092 GETMET R6 R1 K33 + 0x60200018, // 0093 GETGBL R8 G24 + 0x5824006E, // 0094 LDCONST R9 K110 + 0x8C280328, // 0095 GETMET R10 R1 K40 + 0x5C300800, // 0096 MOVE R12 R4 + 0x7C280400, // 0097 CALL R10 2 + 0x8C2C0328, // 0098 GETMET R11 R1 K40 + 0x5C340A00, // 0099 MOVE R13 R5 + 0x7C2C0400, // 009A CALL R11 2 + 0x7C200600, // 009B CALL R8 3 + 0x7C180400, // 009C CALL R6 2 + 0x8C180348, // 009D GETMET R6 R1 K72 + 0x8820036F, // 009E GETMBR R8 R1 K111 + 0x7C180400, // 009F CALL R6 2 + 0x8C18034A, // 00A0 GETMET R6 R1 K74 + 0x7C180200, // 00A1 CALL R6 1 + 0x70020000, // 00A2 JMP #00A4 + 0xB0080000, // 00A3 RAISE 2 R0 R0 + 0x80000000, // 00A4 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: web_add_handler +********************************************************************/ +be_local_closure(class_Extension_manager_web_add_handler, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 2]) { + be_nested_proto( + 2, /* nstack */ + 0, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(page_extensions_mgr_dispatcher), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x68000000, // 0000 GETUPV R0 U0 + 0x8C000100, // 0001 GETMET R0 R0 K0 + 0x7C000200, // 0002 CALL R0 1 + 0x80040000, // 0003 RET 1 R0 + }) + ), + be_nested_proto( + 2, /* nstack */ + 0, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str(page_extensions_ctl), + }), + &be_const_str__X3Clambda_X3E, + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x68000000, // 0000 GETUPV R0 U0 + 0x8C000100, // 0001 GETMET R0 R0 K0 + 0x7C000200, // 0002 CALL R0 1 + 0x80040000, // 0003 RET 1 R0 + }) + ), + }), + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_web_add_handler, + &be_const_str_solidified, + ( &(const binstruction[13]) { /* code */ + 0xA4063A00, // 0000 IMPORT R1 K29 + 0x8C080370, // 0001 GETMET R2 R1 K112 + 0x5810006B, // 0002 LDCONST R4 K107 + 0x84140000, // 0003 CLOSURE R5 P0 + 0x88180371, // 0004 GETMBR R6 R1 K113 + 0x7C080800, // 0005 CALL R2 4 + 0x8C080370, // 0006 GETMET R2 R1 K112 + 0x5810006B, // 0007 LDCONST R4 K107 + 0x84140001, // 0008 CLOSURE R5 P1 + 0x88180372, // 0009 GETMBR R6 R1 K114 + 0x7C080800, // 000A CALL R2 4 + 0xA0000000, // 000B CLOSE R0 + 0x80000000, // 000C RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: list_extensions_in_fs +********************************************************************/ +be_local_closure(class_Extension_manager_list_extensions_in_fs, /* name */ + be_nested_proto( + 10, /* nstack */ + 0, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_list_extensions_in_fs, + &be_const_str_solidified, + ( &(const binstruction[36]) { /* code */ + 0x58000014, // 0000 LDCONST R0 K20 + 0xA4062A00, // 0001 IMPORT R1 K21 + 0xB80AE600, // 0002 GETNGBL R2 K115 + 0x7C080000, // 0003 CALL R2 0 + 0x600C0010, // 0004 GETGBL R3 G16 + 0x8C100156, // 0005 GETMET R4 R0 K86 + 0x7C100200, // 0006 CALL R4 1 + 0x7C0C0200, // 0007 CALL R3 1 + 0xA8020016, // 0008 EXBLK 0 #0020 + 0x5C100600, // 0009 MOVE R4 R3 + 0x7C100000, // 000A CALL R4 0 + 0xB8160000, // 000B GETNGBL R5 K0 + 0x8C140B29, // 000C GETMET R5 R5 K41 + 0x5C1C0800, // 000D MOVE R7 R4 + 0x7C140400, // 000E CALL R5 2 + 0x4C180000, // 000F LDNIL R6 + 0x20180A06, // 0010 NE R6 R5 R6 + 0x781A0005, // 0011 JMPF R6 #0018 + 0x8C180B1A, // 0012 GETMET R6 R5 K26 + 0x58200033, // 0013 LDCONST R8 K51 + 0x7C180400, // 0014 CALL R6 2 + 0x781A0000, // 0015 JMPF R6 #0017 + 0x98080C04, // 0016 SETIDX R2 R6 R4 + 0x70020006, // 0017 JMP #001F + 0xB81A0E00, // 0018 GETNGBL R6 K7 + 0x601C0018, // 0019 GETGBL R7 G24 + 0x58200074, // 001A LDCONST R8 K116 + 0x5C240800, // 001B MOVE R9 R4 + 0x7C1C0400, // 001C CALL R7 2 + 0x58200009, // 001D LDCONST R8 K9 + 0x7C180400, // 001E CALL R6 2 + 0x7001FFE8, // 001F JMP #0009 + 0x580C0057, // 0020 LDCONST R3 K87 + 0xAC0C0200, // 0021 CATCH R3 1 0 + 0xB0080000, // 0022 RAISE 2 R0 R0 + 0x80040400, // 0023 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(class_Extension_manager_init, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_init, + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040375, // 0001 GETMET R1 R1 K117 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x80000000, // 0004 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: page_extensions_store +********************************************************************/ +be_local_closure(class_Extension_manager_page_extensions_store, /* name */ + be_nested_proto( + 33, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_page_extensions_store, + &be_const_str_solidified, + ( &(const binstruction[210]) { /* code */ + 0xA4063A00, // 0000 IMPORT R1 K29 + 0xA40A2A00, // 0001 IMPORT R2 K21 + 0xA40EEC00, // 0002 IMPORT R3 K118 + 0x8C100377, // 0003 GETMET R4 R1 K119 + 0x541A00C7, // 0004 LDINT R6 200 + 0x581C0078, // 0005 LDCONST R7 K120 + 0x7C100600, // 0006 CALL R4 3 + 0x4C100000, // 0007 LDNIL R4 + 0xA8020004, // 0008 EXBLK 0 #000E + 0x8C140179, // 0009 GETMET R5 R0 K121 + 0x7C140200, // 000A CALL R5 1 + 0x5C100A00, // 000B MOVE R4 R5 + 0xA8040001, // 000C EXBLK 1 1 + 0x70020011, // 000D JMP #0020 + 0xAC140002, // 000E CATCH R5 0 2 + 0x7002000E, // 000F JMP #001F + 0x8C1C0321, // 0010 GETMET R7 R1 K33 + 0x5824007A, // 0011 LDCONST R9 K122 + 0x7C1C0400, // 0012 CALL R7 2 + 0x8C1C0321, // 0013 GETMET R7 R1 K33 + 0x60240018, // 0014 GETGBL R9 G24 + 0x5828007B, // 0015 LDCONST R10 K123 + 0x8C2C0328, // 0016 GETMET R11 R1 K40 + 0x5C340C00, // 0017 MOVE R13 R6 + 0x7C2C0400, // 0018 CALL R11 2 + 0x7C240400, // 0019 CALL R9 2 + 0x7C1C0400, // 001A CALL R7 2 + 0x8C1C037C, // 001B GETMET R7 R1 K124 + 0x7C1C0200, // 001C CALL R7 1 + 0x80000E00, // 001D RET 0 + 0x70020000, // 001E JMP #0020 + 0xB0080000, // 001F RAISE 2 R0 R0 + 0x8C14057D, // 0020 GETMET R5 R2 K125 + 0x5C1C0800, // 0021 MOVE R7 R4 + 0x5820007E, // 0022 LDCONST R8 K126 + 0x7C140600, // 0023 CALL R5 3 + 0x8C180321, // 0024 GETMET R6 R1 K33 + 0x5820007F, // 0025 LDCONST R8 K127 + 0x7C180400, // 0026 CALL R6 2 + 0x8C180321, // 0027 GETMET R6 R1 K33 + 0x60200018, // 0028 GETGBL R8 G24 + 0x58240080, // 0029 LDCONST R9 K128 + 0x5C280A00, // 002A MOVE R10 R5 + 0x7C200400, // 002B CALL R8 2 + 0x7C180400, // 002C CALL R6 2 + 0x8C180321, // 002D GETMET R6 R1 K33 + 0x58200081, // 002E LDCONST R8 K129 + 0x7C180400, // 002F CALL R6 2 + 0x8C180182, // 0030 GETMET R6 R0 K130 + 0x7C180200, // 0031 CALL R6 1 + 0x581C0017, // 0032 LDCONST R7 K23 + 0x58200016, // 0033 LDCONST R8 K22 + 0x6024000C, // 0034 GETGBL R9 G12 + 0x5C280800, // 0035 MOVE R10 R4 + 0x7C240200, // 0036 CALL R9 1 + 0x14241009, // 0037 LT R9 R8 R9 + 0x78260092, // 0038 JMPF R9 #00CC + 0x8C24051A, // 0039 GETMET R9 R2 K26 + 0x5C2C0800, // 003A MOVE R11 R4 + 0x58300083, // 003B LDCONST R12 K131 + 0x5C341000, // 003C MOVE R13 R8 + 0x7C240800, // 003D CALL R9 4 + 0x14281316, // 003E LT R10 R9 K22 + 0x782A0003, // 003F JMPF R10 #0044 + 0x6028000C, // 0040 GETGBL R10 G12 + 0x5C2C0800, // 0041 MOVE R11 R4 + 0x7C280200, // 0042 CALL R10 1 + 0x5C241400, // 0043 MOVE R9 R10 + 0x40281009, // 0044 CONNECT R10 R8 R9 + 0x9428080A, // 0045 GETIDX R10 R4 R10 + 0x8C2C0184, // 0046 GETMET R11 R0 K132 + 0x5C341400, // 0047 MOVE R13 R10 + 0x7C2C0400, // 0048 CALL R11 2 + 0x4C300000, // 0049 LDNIL R12 + 0x2030160C, // 004A NE R12 R11 R12 + 0x7832007C, // 004B JMPF R12 #00C9 + 0x94301703, // 004C GETIDX R12 R11 K3 + 0x8C340185, // 004D GETMET R13 R0 K133 + 0x5C3C1800, // 004E MOVE R15 R12 + 0x7C340400, // 004F CALL R13 2 + 0x8C380328, // 0050 GETMET R14 R1 K40 + 0x94401733, // 0051 GETIDX R16 R11 K51 + 0x7C380400, // 0052 CALL R14 2 + 0x943C1786, // 0053 GETIDX R15 R11 K134 + 0x8C400587, // 0054 GETMET R16 R2 K135 + 0x8C480328, // 0055 GETMET R18 R1 K40 + 0x94501735, // 0056 GETIDX R20 R11 K53 + 0x7C480400, // 0057 CALL R18 2 + 0x584C0088, // 0058 LDCONST R19 K136 + 0x58500089, // 0059 LDCONST R20 K137 + 0x7C400800, // 005A CALL R16 4 + 0x9444178A, // 005B GETIDX R17 R11 K138 + 0x50480000, // 005C LDBOOL R18 0 0 + 0x4C4C0000, // 005D LDNIL R19 + 0x4C500000, // 005E LDNIL R20 + 0x8C54014B, // 005F GETMET R21 R0 K75 + 0x945C1786, // 0060 GETIDX R23 R11 K134 + 0x7C540400, // 0061 CALL R21 2 + 0x5C502A00, // 0062 MOVE R20 R21 + 0x8C540328, // 0063 GETMET R21 R1 K40 + 0x5C5C2800, // 0064 MOVE R23 R20 + 0x7C540400, // 0065 CALL R21 2 + 0x8C580D2B, // 0066 GETMET R22 R6 K43 + 0x5C602800, // 0067 MOVE R24 R20 + 0x7C580400, // 0068 CALL R22 2 + 0x5C482C00, // 0069 MOVE R18 R22 + 0x4C580000, // 006A LDNIL R22 + 0x784A000F, // 006B JMPF R18 #007C + 0x945C0C14, // 006C GETIDX R23 R6 R20 + 0x8C600328, // 006D GETMET R24 R1 K40 + 0x5C682E00, // 006E MOVE R26 R23 + 0x7C600400, // 006F CALL R24 2 + 0x5C583000, // 0070 MOVE R22 R24 + 0xB8620000, // 0071 GETNGBL R24 K0 + 0x8C603129, // 0072 GETMET R24 R24 K41 + 0x5C682E00, // 0073 MOVE R26 R23 + 0x7C600400, // 0074 CALL R24 2 + 0x60640009, // 0075 GETGBL R25 G9 + 0x8C68311A, // 0076 GETMET R26 R24 K26 + 0x58700003, // 0077 LDCONST R28 K3 + 0x58740016, // 0078 LDCONST R29 K22 + 0x7C680600, // 0079 CALL R26 3 + 0x7C640200, // 007A CALL R25 1 + 0x5C4C3200, // 007B MOVE R19 R25 + 0x784A0001, // 007C JMPF R18 #007F + 0x145C260C, // 007D LT R23 R19 R12 + 0x745E0000, // 007E JMPT R23 #0080 + 0x505C0001, // 007F LDBOOL R23 0 1 + 0x505C0200, // 0080 LDBOOL R23 1 0 + 0x8C600321, // 0081 GETMET R24 R1 K33 + 0x60680018, // 0082 GETGBL R26 G24 + 0x586C008B, // 0083 LDCONST R27 K139 + 0x5C700E00, // 0084 MOVE R28 R7 + 0x5C741C00, // 0085 MOVE R29 R14 + 0x8C780185, // 0086 GETMET R30 R0 K133 + 0x5C801800, // 0087 MOVE R32 R12 + 0x7C780400, // 0088 CALL R30 2 + 0x7C680800, // 0089 CALL R26 4 + 0x7C600400, // 008A CALL R24 2 + 0x785E0003, // 008B JMPF R23 #0090 + 0x8C600321, // 008C GETMET R24 R1 K33 + 0x5868008C, // 008D LDCONST R26 K140 + 0x7C600400, // 008E CALL R24 2 + 0x70020003, // 008F JMP #0094 + 0x784A0002, // 0090 JMPF R18 #0094 + 0x8C600321, // 0091 GETMET R24 R1 K33 + 0x5868008D, // 0092 LDCONST R26 K141 + 0x7C600400, // 0093 CALL R24 2 + 0x8C600321, // 0094 GETMET R24 R1 K33 + 0x60680018, // 0095 GETGBL R26 G24 + 0x586C008E, // 0096 LDCONST R27 K142 + 0x5C700E00, // 0097 MOVE R28 R7 + 0x5C740E00, // 0098 MOVE R29 R7 + 0x5C782000, // 0099 MOVE R30 R16 + 0x7C680800, // 009A CALL R26 4 + 0x7C600400, // 009B CALL R24 2 + 0x785E0008, // 009C JMPF R23 #00A6 + 0x8C600321, // 009D GETMET R24 R1 K33 + 0x60680018, // 009E GETGBL R26 G24 + 0x586C008F, // 009F LDCONST R27 K143 + 0x8C700185, // 00A0 GETMET R28 R0 K133 + 0x5C782600, // 00A1 MOVE R30 R19 + 0x7C700400, // 00A2 CALL R28 2 + 0x5C741A00, // 00A3 MOVE R29 R13 + 0x7C680600, // 00A4 CALL R26 3 + 0x7C600400, // 00A5 CALL R24 2 + 0x8C600321, // 00A6 GETMET R24 R1 K33 + 0x58680090, // 00A7 LDCONST R26 K144 + 0x7C600400, // 00A8 CALL R24 2 + 0x784A0013, // 00A9 JMPF R18 #00BE + 0x785E0007, // 00AA JMPF R23 #00B3 + 0x8C600321, // 00AB GETMET R24 R1 K33 + 0x60680018, // 00AC GETGBL R26 G24 + 0x586C0091, // 00AD LDCONST R27 K145 + 0x5C702C00, // 00AE MOVE R28 R22 + 0x5C742C00, // 00AF MOVE R29 R22 + 0x7C680600, // 00B0 CALL R26 3 + 0x7C600400, // 00B1 CALL R24 2 + 0x70020002, // 00B2 JMP #00B6 + 0x8C600321, // 00B3 GETMET R24 R1 K33 + 0x58680092, // 00B4 LDCONST R26 K146 + 0x7C600400, // 00B5 CALL R24 2 + 0x8C600321, // 00B6 GETMET R24 R1 K33 + 0x60680018, // 00B7 GETGBL R26 G24 + 0x586C0093, // 00B8 LDCONST R27 K147 + 0x5C702C00, // 00B9 MOVE R28 R22 + 0x5C742C00, // 00BA MOVE R29 R22 + 0x7C680600, // 00BB CALL R26 3 + 0x7C600400, // 00BC CALL R24 2 + 0x70020006, // 00BD JMP #00C5 + 0x8C600321, // 00BE GETMET R24 R1 K33 + 0x60680018, // 00BF GETGBL R26 G24 + 0x586C0094, // 00C0 LDCONST R27 K148 + 0x5C702A00, // 00C1 MOVE R28 R21 + 0x5C741C00, // 00C2 MOVE R29 R14 + 0x7C680600, // 00C3 CALL R26 3 + 0x7C600400, // 00C4 CALL R24 2 + 0x8C600321, // 00C5 GETMET R24 R1 K33 + 0x58680043, // 00C6 LDCONST R26 K67 + 0x7C600400, // 00C7 CALL R24 2 + 0x001C0F17, // 00C8 ADD R7 R7 K23 + 0x00301317, // 00C9 ADD R12 R9 K23 + 0x5C201800, // 00CA MOVE R8 R12 + 0x7001FF67, // 00CB JMP #0034 + 0x8C240321, // 00CC GETMET R9 R1 K33 + 0x582C0045, // 00CD LDCONST R11 K69 + 0x7C240400, // 00CE CALL R9 2 + 0x8C24037C, // 00CF GETMET R9 R1 K124 + 0x7C240200, // 00D0 CALL R9 1 + 0x80000000, // 00D1 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: version_string +********************************************************************/ +be_local_closure(class_Extension_manager_version_string, /* name */ + be_nested_proto( + 8, /* nstack */ + 1, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_version_string, + &be_const_str_solidified, + ( &(const binstruction[19]) { /* code */ + 0x58040014, // 0000 LDCONST R1 K20 + 0x60080018, // 0001 GETGBL R2 G24 + 0x580C0095, // 0002 LDCONST R3 K149 + 0x54120017, // 0003 LDINT R4 24 + 0x3C100004, // 0004 SHR R4 R0 R4 + 0x541600FE, // 0005 LDINT R5 255 + 0x2C100805, // 0006 AND R4 R4 R5 + 0x5416000F, // 0007 LDINT R5 16 + 0x3C140005, // 0008 SHR R5 R0 R5 + 0x541A00FE, // 0009 LDINT R6 255 + 0x2C140A06, // 000A AND R5 R5 R6 + 0x541A0007, // 000B LDINT R6 8 + 0x3C180006, // 000C SHR R6 R0 R6 + 0x541E00FE, // 000D LDINT R7 255 + 0x2C180C07, // 000E AND R6 R6 R7 + 0x541E00FE, // 000F LDINT R7 255 + 0x2C1C0007, // 0010 AND R7 R0 R7 + 0x7C080A00, // 0011 CALL R2 5 + 0x80040400, // 0012 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: page_extensions_mgr_dispatcher +********************************************************************/ +be_local_closure(class_Extension_manager_page_extensions_mgr_dispatcher, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_page_extensions_mgr_dispatcher, + &be_const_str_solidified, + ( &(const binstruction[18]) { /* code */ + 0xA4063A00, // 0000 IMPORT R1 K29 + 0x8C08035C, // 0001 GETMET R2 R1 K92 + 0x7C080200, // 0002 CALL R2 1 + 0x740A0001, // 0003 JMPT R2 #0006 + 0x4C080000, // 0004 LDNIL R2 + 0x80040400, // 0005 RET 1 R2 + 0x8C080396, // 0006 GETMET R2 R1 K150 + 0x58100097, // 0007 LDCONST R4 K151 + 0x7C080400, // 0008 CALL R2 2 + 0x780A0003, // 0009 JMPF R2 #000E + 0x8C080198, // 000A GETMET R2 R0 K152 + 0x7C080200, // 000B CALL R2 1 + 0x80040400, // 000C RET 1 R2 + 0x70020002, // 000D JMP #0011 + 0x8C080199, // 000E GETMET R2 R0 K153 + 0x7C080200, // 000F CALL R2 1 + 0x80040400, // 0010 RET 1 R2 + 0x80000000, // 0011 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: manifest_decode +********************************************************************/ +be_local_closure(class_Extension_manager_manifest_decode, /* name */ + be_nested_proto( + 9, /* nstack */ + 1, /* argc */ + 12, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Extension_manager, /* shared constants */ + &be_const_str_manifest_decode, + &be_const_str_solidified, + ( &(const binstruction[58]) { /* code */ + 0x58040014, // 0000 LDCONST R1 K20 + 0xA40AEC00, // 0001 IMPORT R2 K118 + 0x8C0C055F, // 0002 GETMET R3 R2 K95 + 0x5C140000, // 0003 MOVE R5 R0 + 0x7C0C0400, // 0004 CALL R3 2 + 0x4C100000, // 0005 LDNIL R4 + 0x1C100604, // 0006 EQ R4 R3 R4 + 0x78120008, // 0007 JMPF R4 #0011 + 0xB8120E00, // 0008 GETNGBL R4 K7 + 0x60140018, // 0009 GETGBL R5 G24 + 0x5818009A, // 000A LDCONST R6 K154 + 0x5C1C0000, // 000B MOVE R7 R0 + 0x7C140400, // 000C CALL R5 2 + 0x58180009, // 000D LDCONST R6 K9 + 0x7C100400, // 000E CALL R4 2 + 0x4C100000, // 000F LDNIL R4 + 0x80040800, // 0010 RET 1 R4 + 0x8C10072B, // 0011 GETMET R4 R3 K43 + 0x58180033, // 0012 LDCONST R6 K51 + 0x7C100400, // 0013 CALL R4 2 + 0x78120007, // 0014 JMPF R4 #001D + 0x8C10072B, // 0015 GETMET R4 R3 K43 + 0x58180086, // 0016 LDCONST R6 K134 + 0x7C100400, // 0017 CALL R4 2 + 0x78120003, // 0018 JMPF R4 #001D + 0x8C10072B, // 0019 GETMET R4 R3 K43 + 0x58180003, // 001A LDCONST R6 K3 + 0x7C100400, // 001B CALL R4 2 + 0x74120007, // 001C JMPT R4 #0025 + 0xB8120E00, // 001D GETNGBL R4 K7 + 0x60140018, // 001E GETGBL R5 G24 + 0x5818009B, // 001F LDCONST R6 K155 + 0x5C1C0600, // 0020 MOVE R7 R3 + 0x7C140400, // 0021 CALL R5 2 + 0x7C100200, // 0022 CALL R4 1 + 0x4C100000, // 0023 LDNIL R4 + 0x80040800, // 0024 RET 1 R4 + 0x60100013, // 0025 GETGBL R4 G19 + 0x7C100000, // 0026 CALL R4 0 + 0x94140733, // 0027 GETIDX R5 R3 K51 + 0x98126605, // 0028 SETIDX R4 K51 R5 + 0x94140786, // 0029 GETIDX R5 R3 K134 + 0x98130C05, // 002A SETIDX R4 K134 R5 + 0x60140009, // 002B GETGBL R5 G9 + 0x94180703, // 002C GETIDX R6 R3 K3 + 0x7C140200, // 002D CALL R5 1 + 0x98120605, // 002E SETIDX R4 K3 R5 + 0x8C14071A, // 002F GETMET R5 R3 K26 + 0x581C0035, // 0030 LDCONST R7 K53 + 0x5820009C, // 0031 LDCONST R8 K156 + 0x7C140600, // 0032 CALL R5 3 + 0x98126A05, // 0033 SETIDX R4 K53 R5 + 0x8C14071A, // 0034 GETMET R5 R3 K26 + 0x581C008A, // 0035 LDCONST R7 K138 + 0x5820002D, // 0036 LDCONST R8 K45 + 0x7C140600, // 0037 CALL R5 3 + 0x98131405, // 0038 SETIDX R4 K138 R5 + 0x80040800, // 0039 RET 1 R4 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: Extension_manager +********************************************************************/ +be_local_class(Extension_manager, + 0, + NULL, + be_nested_map(19, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key(EXT_FOLDER, -1), be_nested_str(_X2F_X2Eextensions_X2F) }, + { be_const_key(EXT_REPO_FOLDER, -1), be_nested_str(tapp_X2F) }, + { be_const_key(tapp_name, 6), be_const_static_closure(class_Extension_manager_tapp_name_closure) }, + { be_const_key(page_extensions_mgr, -1), be_const_closure(class_Extension_manager_page_extensions_mgr_closure) }, + { be_const_key(install_from_store, -1), be_const_closure(class_Extension_manager_install_from_store_closure) }, + { be_const_key(list_extensions, -1), be_const_static_closure(class_Extension_manager_list_extensions_closure) }, + { be_const_key(version_string, -1), be_const_static_closure(class_Extension_manager_version_string_closure) }, + { be_const_key(load_manifest, 1), be_const_closure(class_Extension_manager_load_manifest_closure) }, + { be_const_key(web_add_button, 5), be_const_closure(class_Extension_manager_web_add_button_closure) }, + { be_const_key(page_extensions_store, 16), be_const_closure(class_Extension_manager_page_extensions_store_closure) }, + { be_const_key(web_add_handler, -1), be_const_closure(class_Extension_manager_web_add_handler_closure) }, + { be_const_key(EXT_REPO, -1), be_nested_str(https_X3A_X2F_X2Fota_X2Etasmota_X2Ecom_X2Fextensions_X2F) }, + { be_const_key(page_extensions_ctl, 11), be_const_closure(class_Extension_manager_page_extensions_ctl_closure) }, + { be_const_key(init, -1), be_const_closure(class_Extension_manager_init_closure) }, + { be_const_key(EXT_REPO_MANIFEST, -1), be_nested_str(extensions_X2Ejsonl) }, + { be_const_key(list_installed_ext, 9), be_const_static_closure(class_Extension_manager_list_installed_ext_closure) }, + { be_const_key(list_extensions_in_fs, -1), be_const_static_closure(class_Extension_manager_list_extensions_in_fs_closure) }, + { be_const_key(page_extensions_mgr_dispatcher, -1), be_const_closure(class_Extension_manager_page_extensions_mgr_dispatcher_closure) }, + { be_const_key(manifest_decode, -1), be_const_static_closure(class_Extension_manager_manifest_decode_closure) }, + })), + (bstring*) &be_const_str_Extension_manager +); + +/******************************************************************** +** Solidified function: _anonymous_ +********************************************************************/ +be_local_closure(_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(Extension_manager), + }), + &be_const_str__anonymous_, + &be_const_str_solidified, + ( &(const binstruction[ 3]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x7C040200, // 0001 CALL R1 1 + 0x80040200, // 0002 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified module: extension_manager +********************************************************************/ +be_local_module(extension_manager, + "extension_manager", + be_nested_map(2, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_const_key(Extension_manager, -1), be_const_class(be_class_Extension_manager) }, + { be_const_key(init, -1), be_const_closure(_anonymous__closure) }, + })) +); +BE_EXPORT_VARIABLE be_define_const_native_module(extension_manager); +/********************************************************************/ +/********************************************************************/ +/* End of solidification */ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h index 52abc7b0e..31ce38310 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h @@ -4,186 +4,202 @@ \********************************************************************/ #include "be_constobj.h" extern const bclass be_class_Tasmota; -// compact class 'Tasmota' ktab size: 167, total: 321 (saved 1232 bytes) -static const bvalue be_ktab_class_Tasmota[167] = { - /* K0 */ be_nested_str(_crons), - /* K1 */ be_const_int(0), - /* K2 */ be_nested_str(size), - /* K3 */ be_nested_str(id), - /* K4 */ be_nested_str(trig), - /* K5 */ be_const_int(1), - /* K6 */ be_const_class(be_class_Tasmota), - /* K7 */ be_nested_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29), - /* K8 */ be_nested_str(light), - /* K9 */ be_nested_str(get), - /* K10 */ be_nested_str(tasmota), - /* K11 */ be_nested_str(wifi), - /* K12 */ be_nested_str(up), - /* K13 */ be_nested_str(eth), - /* K14 */ be_nested_str(match), - /* K15 */ be_nested_str(trigger), - /* K16 */ be_nested_str(_defer), - /* K17 */ be_nested_str(push), - /* K18 */ be_nested_str(global), - /* K19 */ be_nested_str(deferred_ready), - /* K20 */ be_nested_str(_rules), - /* K21 */ be_nested_str(rule), - /* K22 */ be_nested_str(remove), - /* K23 */ be_nested_str(scale_uint), - /* K24 */ be_const_int(2), - /* K25 */ be_const_int(3), - /* K26 */ be_nested_str(instance), - /* K27 */ be_nested_str(value_error), - /* K28 */ be_nested_str(instance_X20required), - /* K29 */ be_nested_str(_drivers), - /* K30 */ be_nested_str(find), - /* K31 */ be_nested_str(cmd_res), - /* K32 */ be_nested_str(json), - /* K33 */ be_nested_str(load), - /* K34 */ be_nested_str(log), - /* K35 */ be_nested_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20), - /* K36 */ be_nested_str(try_rule), - /* K37 */ be_nested_str(f), - /* K38 */ be_nested_str(o), - /* K39 */ be_nested_str(check_not_method), - /* K40 */ be_nested_str(_timers), - /* K41 */ be_nested_str(Trigger), - /* K42 */ be_nested_str(millis), - /* K43 */ be_nested_str(ctypes_bytes_dyn), - /* K44 */ be_nested_str(_global_addr), - /* K45 */ be_nested_str(_global_def), - /* K46 */ be_nested_str(introspect), - /* K47 */ be_nested_str(_settings_ptr), - /* K48 */ be_nested_str(settings), - /* K49 */ be_nested_str(toptr), - /* K50 */ be_nested_str(_settings_def), - /* K51 */ be_nested_str(wd), - /* K52 */ be_nested_str(), - /* K53 */ be_nested_str(_debug_present), - /* K54 */ be_nested_str(contains), - /* K55 */ be_nested_str(debug), - /* K56 */ be_nested_str(add_cmd), - /* K57 */ be_nested_str(UrlFetch), - /* K58 */ be_nested_str(pop), - /* K59 */ be_nested_str(string), - /* K60 */ be_nested_str(endswith), - /* K61 */ be_nested_str(_X2Ebe), - /* K62 */ be_nested_str(BRY_X3A_X20file_X20_X27_X25s_X27_X20does_X20not_X20have_X20_X27_X2Ebe_X27_X20extension), - /* K63 */ be_nested_str(_X23), - /* K64 */ be_nested_str(BRY_X3A_X20cannot_X20compile_X20file_X20in_X20read_X2Donly_X20archive), - /* K65 */ be_nested_str(file), - /* K66 */ be_nested_str(BRY_X3A_X20empty_X20compiled_X20file), - /* K67 */ be_nested_str(BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X20_X2D_X20_X25s_X29), - /* K68 */ be_nested_str(c), - /* K69 */ be_nested_str(save), - /* K70 */ be_nested_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29), - /* K71 */ be_nested_str(_ccmd), - /* K72 */ be_nested_str(function), - /* K73 */ be_nested_str(the_X20second_X20argument_X20is_X20not_X20a_X20function), - /* K74 */ be_nested_str(run_deferred), - /* K75 */ be_nested_str(time_reached), - /* K76 */ be_nested_str(_fl), - /* K77 */ be_nested_str(toupper), - /* K78 */ be_nested_str(keys), - /* K79 */ be_nested_str(_X3F), - /* K80 */ be_nested_str(stop_iteration), - /* K81 */ be_nested_str(type_error), - /* K82 */ be_nested_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function), - /* K83 */ be_nested_str(ismethod), - /* K84 */ be_nested_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27), - /* K85 */ be_nested_str(is_network_up), - /* K86 */ be_nested_str(_wnu), - /* K87 */ be_nested_str(add_rule), - /* K88 */ be_nested_str(find_key_i), - /* K89 */ be_nested_str(resolvecmnd), - /* K90 */ be_nested_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29), - /* K91 */ be_nested_str(set), - /* K92 */ be_nested_str(ccronexpr), - /* K93 */ be_nested_str(now), - /* K94 */ be_nested_str(next), - /* K95 */ be_nested_str(maxlog_level), - /* K96 */ be_nested_str(_cmd), - /* K97 */ be_nested_str(time_dump), - /* K98 */ be_nested_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d), - /* K99 */ be_nested_str(year), - /* K100 */ be_nested_str(month), - /* K101 */ be_nested_str(day), - /* K102 */ be_nested_str(hour), - /* K103 */ be_nested_str(min), - /* K104 */ be_nested_str(sec), - /* K105 */ be_nested_str(every_50ms), - /* K106 */ be_nested_str(run_network_up), - /* K107 */ be_nested_str(run_timers), - /* K108 */ be_nested_str(every_250ms), - /* K109 */ be_nested_str(run_cron), - /* K110 */ be_nested_str(mqtt_data), - /* K111 */ be_nested_str(cmd), - /* K112 */ be_nested_str(exec_cmd), - /* K113 */ be_nested_str(tele), - /* K114 */ be_nested_str(exec_tele), - /* K115 */ be_nested_str(exec_rules), - /* K116 */ be_nested_str(gc), - /* K117 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s), - /* K118 */ be_nested_str(traceback), - /* K119 */ be_nested_str(save_before_restart), - /* K120 */ be_nested_str(persist), - /* K121 */ be_nested_str(i2c_enabled), - /* K122 */ be_nested_str(wire1), - /* K123 */ be_nested_str(enabled), - /* K124 */ be_nested_str(detect), - /* K125 */ be_nested_str(wire2), - /* K126 */ be_nested_str(Tele), - /* K127 */ be_nested_str(remove_rule), - /* K128 */ be_nested_str(Rule_Matcher), - /* K129 */ be_nested_str(parse), - /* K130 */ be_nested_str(argument_X20must_X20be_X20a_X20function), - /* K131 */ be_nested_str(fast_loop_enabled), - /* K132 */ be_nested_str(collect), - /* K133 */ be_nested_str(allocated), - /* K134 */ be_nested_str(_find_op), - /* K135 */ be_const_int(2147483647), - /* K136 */ be_nested_str(path), - /* K137 */ be_nested_str(startswith), - /* K138 */ be_nested_str(_X2F), - /* K139 */ be_nested_str(tapp), - /* K140 */ be_nested_str(_X23autoexec), - /* K141 */ be_nested_str(_X2E), - /* K142 */ be_nested_str(_X2Ebec), - /* K143 */ be_nested_str(BRY_X3A_X20file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20nor_X20_X27_X2Ebec_X27), - /* K144 */ be_nested_str(exists), - /* K145 */ be_nested_str(BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27), - /* K146 */ be_nested_str(BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25s_X29), - /* K147 */ be_nested_str(split), - /* K148 */ be_nested_str(index_X2Ehtml), - /* K149 */ be_nested_str(webclient), - /* K150 */ be_nested_str(set_follow_redirects), - /* K151 */ be_nested_str(begin), - /* K152 */ be_nested_str(GET), - /* K153 */ be_nested_str(status_X3A_X20), - /* K154 */ be_nested_str(connection_error), - /* K155 */ be_nested_str(write_file), - /* K156 */ be_nested_str(close), - /* K157 */ be_nested_str(BRY_X3A_X20Fetched_X20), - /* K158 */ be_nested_str(cb), - /* K159 */ be_nested_str(gen_cb), - /* K160 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20run_network_up_X20_X27_X25s_X27_X20_X2D_X20_X25s), - /* K161 */ be_nested_str(http), - /* K162 */ be_nested_str(resp_cmnd_str), - /* K163 */ be_nested_str(URL_X20must_X20start_X20with_X20_X27http_X28s_X29_X27), - /* K164 */ be_nested_str(urlfetch), - /* K165 */ be_nested_str(resp_cmnd_failed), - /* K166 */ be_nested_str(resp_cmnd_done), +// compact class 'Tasmota' ktab size: 183, total: 371 (saved 1504 bytes) +static const bvalue be_ktab_class_Tasmota[183] = { + /* K0 */ be_nested_str(json), + /* K1 */ be_nested_str(string), + /* K2 */ be_nested_str(tasmota), + /* K3 */ be_nested_str(wd), + /* K4 */ be_const_int(0), + /* K5 */ be_nested_str(_X2F), + /* K6 */ be_nested_str(_X23), + /* K7 */ be_nested_str(), + /* K8 */ be_nested_str(manifest_X2Ejson), + /* K9 */ be_nested_str(read), + /* K10 */ be_nested_str(close), + /* K11 */ be_nested_str(load), + /* K12 */ be_nested_str(find), + /* K13 */ be_nested_str(name), + /* K14 */ be_nested_str(description), + /* K15 */ be_nested_str(version), + /* K16 */ be_nested_str(min_tasmota), + /* K17 */ be_nested_str(autorun), + /* K18 */ be_nested_str(endswith), + /* K19 */ be_nested_str(_X2Etapp), + /* K20 */ be_nested_str(log), + /* K21 */ be_nested_str(BRY_X3A_X20error_X20_X25s_X20_X25s_X20when_X20reading_X20_X27manifest_X2Ejson_X27_X20in_X20_X27_X25s_X27), + /* K22 */ be_nested_str(_ccmd), + /* K23 */ be_nested_str(find_key_i), + /* K24 */ be_nested_str(resolvecmnd), + /* K25 */ be_const_class(be_class_Tasmota), + /* K26 */ be_nested_str(check_not_method), + /* K27 */ be_nested_str(is_network_up), + /* K28 */ be_nested_str(_wnu), + /* K29 */ be_nested_str(push), + /* K30 */ be_nested_str(_X2Ebe), + /* K31 */ be_nested_str(BRY_X3A_X20file_X20_X27_X25s_X27_X20does_X20not_X20have_X20_X27_X2Ebe_X27_X20extension), + /* K32 */ be_nested_str(BRY_X3A_X20cannot_X20compile_X20file_X20in_X20read_X2Donly_X20archive), + /* K33 */ be_nested_str(file), + /* K34 */ be_nested_str(BRY_X3A_X20empty_X20compiled_X20file), + /* K35 */ be_nested_str(BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X20_X2D_X20_X25s_X29), + /* K36 */ be_nested_str(c), + /* K37 */ be_nested_str(save), + /* K38 */ be_nested_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29), + /* K39 */ be_nested_str(_fl), + /* K40 */ be_nested_str(function), + /* K41 */ be_nested_str(value_error), + /* K42 */ be_nested_str(argument_X20must_X20be_X20a_X20function), + /* K43 */ be_nested_str(global), + /* K44 */ be_nested_str(fast_loop_enabled), + /* K45 */ be_const_int(1), + /* K46 */ be_nested_str(_timers), + /* K47 */ be_nested_str(size), + /* K48 */ be_nested_str(id), + /* K49 */ be_nested_str(remove), + /* K50 */ be_nested_str(wifi), + /* K51 */ be_nested_str(up), + /* K52 */ be_nested_str(eth), + /* K53 */ be_nested_str(toupper), + /* K54 */ be_nested_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29), + /* K55 */ be_nested_str(light), + /* K56 */ be_nested_str(set), + /* K57 */ be_nested_str(_crons), + /* K58 */ be_nested_str(ccronexpr), + /* K59 */ be_nested_str(now), + /* K60 */ be_nested_str(trig), + /* K61 */ be_nested_str(next), + /* K62 */ be_nested_str(time_reached), + /* K63 */ be_nested_str(f), + /* K64 */ be_nested_str(cmd_res), + /* K65 */ be_nested_str(maxlog_level), + /* K66 */ be_const_int(2), + /* K67 */ be_nested_str(_cmd), + /* K68 */ be_nested_str(keys), + /* K69 */ be_nested_str(_X3F), + /* K70 */ be_nested_str(stop_iteration), + /* K71 */ be_nested_str(_rules), + /* K72 */ be_nested_str(rule), + /* K73 */ be_nested_str(_drivers), + /* K74 */ be_nested_str(pop), + /* K75 */ be_nested_str(_ext), + /* K76 */ be_nested_str(remove_by_value), + /* K77 */ be_nested_str(the_X20second_X20argument_X20is_X20not_X20a_X20function), + /* K78 */ be_nested_str(Trigger), + /* K79 */ be_nested_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20), + /* K80 */ be_const_int(3), + /* K81 */ be_nested_str(Tele), + /* K82 */ be_nested_str(try_rule), + /* K83 */ be_nested_str(cb), + /* K84 */ be_nested_str(gen_cb), + /* K85 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20run_network_up_X20_X27_X25s_X27_X20_X2D_X20_X25s), + /* K86 */ be_nested_str(run_deferred), + /* K87 */ be_nested_str(instance), + /* K88 */ be_nested_str(instance_X20and_X20name_X20required), + /* K89 */ be_nested_str(sortedmap), + /* K90 */ be_nested_str(contains), + /* K91 */ be_nested_str(BRY_X3A_X20Extension_X20_X27_X25s_X27_X20already_X20registered), + /* K92 */ be_nested_str(i2c_enabled), + /* K93 */ be_nested_str(wire1), + /* K94 */ be_nested_str(enabled), + /* K95 */ be_nested_str(detect), + /* K96 */ be_nested_str(wire2), + /* K97 */ be_nested_str(split), + /* K98 */ be_nested_str(index_X2Ehtml), + /* K99 */ be_nested_str(webclient), + /* K100 */ be_nested_str(set_follow_redirects), + /* K101 */ be_nested_str(begin), + /* K102 */ be_nested_str(GET), + /* K103 */ be_nested_str(status_X3A_X20), + /* K104 */ be_nested_str(connection_error), + /* K105 */ be_nested_str(write_file), + /* K106 */ be_nested_str(BRY_X3A_X20Fetched_X20), + /* K107 */ be_nested_str(_defer), + /* K108 */ be_nested_str(deferred_ready), + /* K109 */ be_nested_str(ctypes_bytes_dyn), + /* K110 */ be_nested_str(_global_addr), + /* K111 */ be_nested_str(_global_def), + /* K112 */ be_nested_str(introspect), + /* K113 */ be_nested_str(_settings_ptr), + /* K114 */ be_nested_str(get), + /* K115 */ be_nested_str(settings), + /* K116 */ be_nested_str(toptr), + /* K117 */ be_nested_str(_settings_def), + /* K118 */ be_nested_str(_debug_present), + /* K119 */ be_nested_str(debug), + /* K120 */ be_nested_str(add_cmd), + /* K121 */ be_nested_str(UrlFetch), + /* K122 */ be_nested_str(unload), + /* K123 */ be_nested_str(remove_driver), + /* K124 */ be_nested_str(gc), + /* K125 */ be_nested_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29), + /* K126 */ be_nested_str(path), + /* K127 */ be_nested_str(startswith), + /* K128 */ be_nested_str(_X2Etapp_), + /* K129 */ be_nested_str(_X23autoexec), + /* K130 */ be_const_int(2147483647), + /* K131 */ be_nested_str(_X2E), + /* K132 */ be_nested_str(_X2Ebec), + /* K133 */ be_nested_str(BRY_X3A_X20file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20nor_X20_X27_X2Ebec_X27), + /* K134 */ be_nested_str(exists), + /* K135 */ be_nested_str(BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27), + /* K136 */ be_nested_str(BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25s_X29), + /* K137 */ be_nested_str(remove_rule), + /* K138 */ be_nested_str(Rule_Matcher), + /* K139 */ be_nested_str(parse), + /* K140 */ be_nested_str(type_error), + /* K141 */ be_nested_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function), + /* K142 */ be_nested_str(ismethod), + /* K143 */ be_nested_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27), + /* K144 */ be_nested_str(add_rule), + /* K145 */ be_nested_str(o), + /* K146 */ be_nested_str(millis), + /* K147 */ be_nested_str(collect), + /* K148 */ be_nested_str(allocated), + /* K149 */ be_nested_str(_find_op), + /* K150 */ be_nested_str(http), + /* K151 */ be_nested_str(resp_cmnd_str), + /* K152 */ be_nested_str(URL_X20must_X20start_X20with_X20_X27http_X28s_X29_X27), + /* K153 */ be_nested_str(urlfetch), + /* K154 */ be_nested_str(resp_cmnd_failed), + /* K155 */ be_nested_str(resp_cmnd_done), + /* K156 */ be_nested_str(scale_uint), + /* K157 */ be_nested_str(time_dump), + /* K158 */ be_nested_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d), + /* K159 */ be_nested_str(year), + /* K160 */ be_nested_str(month), + /* K161 */ be_nested_str(day), + /* K162 */ be_nested_str(hour), + /* K163 */ be_nested_str(min), + /* K164 */ be_nested_str(sec), + /* K165 */ be_nested_str(match), + /* K166 */ be_nested_str(trigger), + /* K167 */ be_nested_str(every_50ms), + /* K168 */ be_nested_str(run_network_up), + /* K169 */ be_nested_str(run_timers), + /* K170 */ be_nested_str(every_250ms), + /* K171 */ be_nested_str(run_cron), + /* K172 */ be_nested_str(mqtt_data), + /* K173 */ be_nested_str(cmd), + /* K174 */ be_nested_str(exec_cmd), + /* K175 */ be_nested_str(tele), + /* K176 */ be_nested_str(exec_tele), + /* K177 */ be_nested_str(exec_rules), + /* K178 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s), + /* K179 */ be_nested_str(traceback), + /* K180 */ be_nested_str(save_before_restart), + /* K181 */ be_nested_str(persist), + /* K182 */ be_nested_str(instance_X20required), }; extern const bclass be_class_Tasmota; /******************************************************************** -** Solidified function: next_cron +** Solidified function: read_extension_manifest ********************************************************************/ -be_local_closure(class_Tasmota_next_cron, /* name */ +be_local_closure(class_Tasmota_read_extension_manifest, /* name */ be_nested_proto( - 6, /* nstack */ + 15, /* nstack */ 2, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -192,26 +208,159 @@ be_local_closure(class_Tasmota_next_cron, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_next_cron, + &be_const_str_read_extension_manifest, &be_const_str_solidified, - ( &(const binstruction[17]) { /* code */ - 0x88080100, // 0000 GETMBR R2 R0 K0 - 0x780A000D, // 0001 JMPF R2 #0010 - 0x580C0001, // 0002 LDCONST R3 K1 - 0x8C100502, // 0003 GETMET R4 R2 K2 - 0x7C100200, // 0004 CALL R4 1 - 0x14100604, // 0005 LT R4 R3 R4 - 0x78120008, // 0006 JMPF R4 #0010 - 0x94100403, // 0007 GETIDX R4 R2 R3 - 0x88100903, // 0008 GETMBR R4 R4 K3 - 0x1C100801, // 0009 EQ R4 R4 R1 - 0x78120002, // 000A JMPF R4 #000E - 0x94100403, // 000B GETIDX R4 R2 R3 - 0x88100904, // 000C GETMBR R4 R4 K4 - 0x80040800, // 000D RET 1 R4 - 0x000C0705, // 000E ADD R3 R3 K5 - 0x7001FFF2, // 000F JMP #0003 - 0x80000000, // 0010 RET 0 + ( &(const binstruction[100]) { /* code */ + 0x4C080000, // 0000 LDNIL R2 + 0x5C0C0200, // 0001 MOVE R3 R1 + 0xA802004C, // 0002 EXBLK 0 #0050 + 0xA4120000, // 0003 IMPORT R4 K0 + 0xA4160200, // 0004 IMPORT R5 K1 + 0x4C180000, // 0005 LDNIL R6 + 0x1C180606, // 0006 EQ R6 R3 R6 + 0x781A0001, // 0007 JMPF R6 #000A + 0xB81A0400, // 0008 GETNGBL R6 K2 + 0x880C0D03, // 0009 GETMBR R3 R6 K3 + 0x6018000C, // 000A GETGBL R6 G12 + 0x5C1C0600, // 000B MOVE R7 R3 + 0x7C180200, // 000C CALL R6 1 + 0x24180D04, // 000D GT R6 R6 K4 + 0x781A0009, // 000E JMPF R6 #0019 + 0x5419FFFE, // 000F LDINT R6 -1 + 0x94180606, // 0010 GETIDX R6 R3 R6 + 0x20180D05, // 0011 NE R6 R6 K5 + 0x781A0005, // 0012 JMPF R6 #0019 + 0x5419FFFE, // 0013 LDINT R6 -1 + 0x94180606, // 0014 GETIDX R6 R3 R6 + 0x20180D06, // 0015 NE R6 R6 K6 + 0x781A0001, // 0016 JMPF R6 #0019 + 0x58180006, // 0017 LDCONST R6 K6 + 0x70020000, // 0018 JMP #001A + 0x58180007, // 0019 LDCONST R6 K7 + 0x601C0011, // 001A GETGBL R7 G17 + 0x00200606, // 001B ADD R8 R3 R6 + 0x00201108, // 001C ADD R8 R8 K8 + 0x7C1C0200, // 001D CALL R7 1 + 0x5C080E00, // 001E MOVE R2 R7 + 0x8C1C0509, // 001F GETMET R7 R2 K9 + 0x7C1C0200, // 0020 CALL R7 1 + 0x8C20050A, // 0021 GETMET R8 R2 K10 + 0x7C200200, // 0022 CALL R8 1 + 0x8C20090B, // 0023 GETMET R8 R4 K11 + 0x5C280E00, // 0024 MOVE R10 R7 + 0x7C200400, // 0025 CALL R8 2 + 0x8C24110C, // 0026 GETMET R9 R8 K12 + 0x582C000D, // 0027 LDCONST R11 K13 + 0x7C240400, // 0028 CALL R9 2 + 0x78260020, // 0029 JMPF R9 #004B + 0x60280008, // 002A GETGBL R10 G8 + 0x942C110D, // 002B GETIDX R11 R8 K13 + 0x7C280200, // 002C CALL R10 1 + 0x98221A0A, // 002D SETIDX R8 K13 R10 + 0x60280008, // 002E GETGBL R10 G8 + 0x8C2C110C, // 002F GETMET R11 R8 K12 + 0x5834000E, // 0030 LDCONST R13 K14 + 0x58380007, // 0031 LDCONST R14 K7 + 0x7C2C0600, // 0032 CALL R11 3 + 0x7C280200, // 0033 CALL R10 1 + 0x98221C0A, // 0034 SETIDX R8 K14 R10 + 0x60280009, // 0035 GETGBL R10 G9 + 0x8C2C110C, // 0036 GETMET R11 R8 K12 + 0x5834000F, // 0037 LDCONST R13 K15 + 0x58380004, // 0038 LDCONST R14 K4 + 0x7C2C0600, // 0039 CALL R11 3 + 0x7C280200, // 003A CALL R10 1 + 0x98221E0A, // 003B SETIDX R8 K15 R10 + 0x60280009, // 003C GETGBL R10 G9 + 0x8C2C110C, // 003D GETMET R11 R8 K12 + 0x58340010, // 003E LDCONST R13 K16 + 0x58380004, // 003F LDCONST R14 K4 + 0x7C2C0600, // 0040 CALL R11 3 + 0x7C280200, // 0041 CALL R10 1 + 0x9822200A, // 0042 SETIDX R8 K16 R10 + 0x8C280B12, // 0043 GETMET R10 R5 K18 + 0x5C300600, // 0044 MOVE R12 R3 + 0x58340013, // 0045 LDCONST R13 K19 + 0x7C280600, // 0046 CALL R10 3 + 0x9822220A, // 0047 SETIDX R8 K17 R10 + 0xA8040001, // 0048 EXBLK 1 1 + 0x80041000, // 0049 RET 1 R8 + 0x70020002, // 004A JMP #004E + 0x4C280000, // 004B LDNIL R10 + 0xA8040001, // 004C EXBLK 1 1 + 0x80041400, // 004D RET 1 R10 + 0xA8040001, // 004E EXBLK 1 1 + 0x70020012, // 004F JMP #0063 + 0xAC100002, // 0050 CATCH R4 0 2 + 0x7002000F, // 0051 JMP #0062 + 0xB81A2800, // 0052 GETNGBL R6 K20 + 0x601C0018, // 0053 GETGBL R7 G24 + 0x58200015, // 0054 LDCONST R8 K21 + 0x5C240800, // 0055 MOVE R9 R4 + 0x5C280A00, // 0056 MOVE R10 R5 + 0x5C2C0600, // 0057 MOVE R11 R3 + 0x7C1C0800, // 0058 CALL R7 4 + 0x7C180200, // 0059 CALL R6 1 + 0x4C180000, // 005A LDNIL R6 + 0x20180406, // 005B NE R6 R2 R6 + 0x781A0001, // 005C JMPF R6 #005F + 0x8C18050A, // 005D GETMET R6 R2 K10 + 0x7C180200, // 005E CALL R6 1 + 0x4C180000, // 005F LDNIL R6 + 0x80040C00, // 0060 RET 1 R6 + 0x70020000, // 0061 JMP #0063 + 0xB0080000, // 0062 RAISE 2 R0 R0 + 0x80000000, // 0063 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: exec_cmd +********************************************************************/ +be_local_closure(class_Tasmota_exec_cmd, /* name */ + be_nested_proto( + 12, /* nstack */ + 4, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_exec_cmd, + &be_const_str_solidified, + ( &(const binstruction[27]) { /* code */ + 0x88100116, // 0000 GETMBR R4 R0 K22 + 0x78120016, // 0001 JMPF R4 #0019 + 0x8C100117, // 0002 GETMET R4 R0 K23 + 0x88180116, // 0003 GETMBR R6 R0 K22 + 0x5C1C0200, // 0004 MOVE R7 R1 + 0x7C100600, // 0005 CALL R4 3 + 0x4C140000, // 0006 LDNIL R5 + 0x20140805, // 0007 NE R5 R4 R5 + 0x7816000F, // 0008 JMPF R5 #0019 + 0xA4160000, // 0009 IMPORT R5 K0 + 0x8C180B0B, // 000A GETMET R6 R5 K11 + 0x5C200600, // 000B MOVE R8 R3 + 0x7C180400, // 000C CALL R6 2 + 0x8C1C0118, // 000D GETMET R7 R0 K24 + 0x5C240800, // 000E MOVE R9 R4 + 0x7C1C0400, // 000F CALL R7 2 + 0x881C0116, // 0010 GETMBR R7 R0 K22 + 0x941C0E04, // 0011 GETIDX R7 R7 R4 + 0x5C200800, // 0012 MOVE R8 R4 + 0x5C240400, // 0013 MOVE R9 R2 + 0x5C280600, // 0014 MOVE R10 R3 + 0x5C2C0C00, // 0015 MOVE R11 R6 + 0x7C1C0800, // 0016 CALL R7 4 + 0x501C0200, // 0017 LDBOOL R7 1 0 + 0x80040E00, // 0018 RET 1 R7 + 0x50100000, // 0019 LDBOOL R4 0 0 + 0x80040800, // 001A RET 1 R4 }) ) ); @@ -235,7 +384,7 @@ be_local_closure(class_Tasmota_int, /* name */ &be_const_str_int, &be_const_str_solidified, ( &(const binstruction[46]) { /* code */ - 0x580C0006, // 0000 LDCONST R3 K6 + 0x580C0019, // 0000 LDCONST R3 K25 0x60100009, // 0001 GETGBL R4 G9 0x5C140000, // 0002 MOVE R5 R0 0x7C100200, // 0003 CALL R4 1 @@ -288,11 +437,11 @@ be_local_closure(class_Tasmota_int, /* name */ /******************************************************************** -** Solidified function: get_light +** Solidified function: when_network_up ********************************************************************/ -be_local_closure(class_Tasmota_get_light, /* name */ +be_local_closure(class_Tasmota_when_network_up, /* name */ be_nested_proto( - 6, /* nstack */ + 5, /* nstack */ 2, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -301,25 +450,227 @@ be_local_closure(class_Tasmota_get_light, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_get_light, + &be_const_str_when_network_up, &be_const_str_solidified, - ( &(const binstruction[16]) { /* code */ - 0x60080001, // 0000 GETGBL R2 G1 - 0x580C0007, // 0001 LDCONST R3 K7 - 0x7C080200, // 0002 CALL R2 1 - 0xA40A1000, // 0003 IMPORT R2 K8 + ( &(const binstruction[23]) { /* code */ + 0x8C08011A, // 0000 GETMET R2 R0 K26 + 0x5C100200, // 0001 MOVE R4 R1 + 0x7C080400, // 0002 CALL R2 2 + 0x8C08011B, // 0003 GETMET R2 R0 K27 + 0x7C080200, // 0004 CALL R2 1 + 0x780A0002, // 0005 JMPF R2 #0009 + 0x5C080200, // 0006 MOVE R2 R1 + 0x7C080000, // 0007 CALL R2 0 + 0x7002000C, // 0008 JMP #0016 + 0x8808011C, // 0009 GETMBR R2 R0 K28 + 0x4C0C0000, // 000A LDNIL R3 + 0x1C080403, // 000B EQ R2 R2 R3 + 0x780A0004, // 000C JMPF R2 #0012 + 0x60080012, // 000D GETGBL R2 G18 + 0x7C080000, // 000E CALL R2 0 + 0x400C0401, // 000F CONNECT R3 R2 R1 + 0x90023802, // 0010 SETMBR R0 K28 R2 + 0x70020003, // 0011 JMP #0016 + 0x8808011C, // 0012 GETMBR R2 R0 K28 + 0x8C08051D, // 0013 GETMET R2 R2 K29 + 0x5C100200, // 0014 MOVE R4 R1 + 0x7C080400, // 0015 CALL R2 2 + 0x80000000, // 0016 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: compile +********************************************************************/ +be_local_closure(class_Tasmota_compile, /* name */ + be_nested_proto( + 12, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_compile, + &be_const_str_solidified, + ( &(const binstruction[85]) { /* code */ + 0xA40A0200, // 0000 IMPORT R2 K1 + 0x8C0C0512, // 0001 GETMET R3 R2 K18 + 0x5C140200, // 0002 MOVE R5 R1 + 0x5818001E, // 0003 LDCONST R6 K30 + 0x7C0C0600, // 0004 CALL R3 3 + 0x740E0007, // 0005 JMPT R3 #000E + 0x600C0001, // 0006 GETGBL R3 G1 + 0x60100018, // 0007 GETGBL R4 G24 + 0x5814001F, // 0008 LDCONST R5 K31 + 0x5C180200, // 0009 MOVE R6 R1 + 0x7C100400, // 000A CALL R4 2 + 0x7C0C0200, // 000B CALL R3 1 + 0x500C0000, // 000C LDBOOL R3 0 0 + 0x80040600, // 000D RET 1 R3 + 0x8C0C050C, // 000E GETMET R3 R2 K12 + 0x5C140200, // 000F MOVE R5 R1 + 0x58180006, // 0010 LDCONST R6 K6 + 0x7C0C0600, // 0011 CALL R3 3 + 0x240C0704, // 0012 GT R3 R3 K4 + 0x780E0006, // 0013 JMPF R3 #001B + 0x600C0001, // 0014 GETGBL R3 G1 + 0x60100018, // 0015 GETGBL R4 G24 + 0x58140020, // 0016 LDCONST R5 K32 + 0x7C100200, // 0017 CALL R4 1 + 0x7C0C0200, // 0018 CALL R3 1 + 0x500C0000, // 0019 LDBOOL R3 0 0 + 0x80040600, // 001A RET 1 R3 + 0x4C0C0000, // 001B LDNIL R3 + 0xA8020012, // 001C EXBLK 0 #0030 + 0x6010000D, // 001D GETGBL R4 G13 + 0x5C140200, // 001E MOVE R5 R1 + 0x58180021, // 001F LDCONST R6 K33 + 0x501C0200, // 0020 LDBOOL R7 1 0 + 0x7C100600, // 0021 CALL R4 3 + 0x5C0C0800, // 0022 MOVE R3 R4 + 0x4C100000, // 0023 LDNIL R4 + 0x1C100604, // 0024 EQ R4 R3 R4 + 0x78120007, // 0025 JMPF R4 #002E + 0x60100001, // 0026 GETGBL R4 G1 + 0x60140018, // 0027 GETGBL R5 G24 + 0x58180022, // 0028 LDCONST R6 K34 + 0x7C140200, // 0029 CALL R5 1 + 0x7C100200, // 002A CALL R4 1 + 0x50100000, // 002B LDBOOL R4 0 0 + 0xA8040001, // 002C EXBLK 1 1 + 0x80040800, // 002D RET 1 R4 + 0xA8040001, // 002E EXBLK 1 1 + 0x7002000D, // 002F JMP #003E + 0xAC100002, // 0030 CATCH R4 0 2 + 0x7002000A, // 0031 JMP #003D + 0x60180001, // 0032 GETGBL R6 G1 + 0x601C0018, // 0033 GETGBL R7 G24 + 0x58200023, // 0034 LDCONST R8 K35 + 0x5C240200, // 0035 MOVE R9 R1 + 0x5C280800, // 0036 MOVE R10 R4 + 0x5C2C0A00, // 0037 MOVE R11 R5 + 0x7C1C0800, // 0038 CALL R7 4 + 0x7C180200, // 0039 CALL R6 1 + 0x50180000, // 003A LDBOOL R6 0 0 + 0x80040C00, // 003B RET 1 R6 + 0x70020000, // 003C JMP #003E + 0xB0080000, // 003D RAISE 2 R0 R0 + 0x00100324, // 003E ADD R4 R1 K36 + 0xA8020005, // 003F EXBLK 0 #0046 + 0x8C140125, // 0040 GETMET R5 R0 K37 + 0x5C1C0800, // 0041 MOVE R7 R4 + 0x5C200600, // 0042 MOVE R8 R3 + 0x7C140600, // 0043 CALL R5 3 + 0xA8040001, // 0044 EXBLK 1 1 + 0x7002000C, // 0045 JMP #0053 + 0xAC140001, // 0046 CATCH R5 0 1 + 0x70020009, // 0047 JMP #0052 + 0x60180001, // 0048 GETGBL R6 G1 + 0x601C0018, // 0049 GETGBL R7 G24 + 0x58200026, // 004A LDCONST R8 K38 + 0x5C240800, // 004B MOVE R9 R4 + 0x5C280A00, // 004C MOVE R10 R5 + 0x7C1C0600, // 004D CALL R7 3 + 0x7C180200, // 004E CALL R6 1 + 0x50180000, // 004F LDBOOL R6 0 0 + 0x80040C00, // 0050 RET 1 R6 + 0x70020000, // 0051 JMP #0053 + 0xB0080000, // 0052 RAISE 2 R0 R0 + 0x50140200, // 0053 LDBOOL R5 1 0 + 0x80040A00, // 0054 RET 1 R5 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: add_fast_loop +********************************************************************/ +be_local_closure(class_Tasmota_add_fast_loop, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_add_fast_loop, + &be_const_str_solidified, + ( &(const binstruction[23]) { /* code */ + 0x8C08011A, // 0000 GETMET R2 R0 K26 + 0x5C100200, // 0001 MOVE R4 R1 + 0x7C080400, // 0002 CALL R2 2 + 0x88080127, // 0003 GETMBR R2 R0 K39 0x4C0C0000, // 0004 LDNIL R3 - 0x200C0203, // 0005 NE R3 R1 R3 - 0x780E0004, // 0006 JMPF R3 #000C - 0x8C0C0509, // 0007 GETMET R3 R2 K9 - 0x5C140200, // 0008 MOVE R5 R1 - 0x7C0C0400, // 0009 CALL R3 2 - 0x80040600, // 000A RET 1 R3 - 0x70020002, // 000B JMP #000F - 0x8C0C0509, // 000C GETMET R3 R2 K9 - 0x7C0C0200, // 000D CALL R3 1 - 0x80040600, // 000E RET 1 R3 - 0x80000000, // 000F RET 0 + 0x1C080403, // 0005 EQ R2 R2 R3 + 0x780A0002, // 0006 JMPF R2 #000A + 0x60080012, // 0007 GETGBL R2 G18 + 0x7C080000, // 0008 CALL R2 0 + 0x90024E02, // 0009 SETMBR R0 K39 R2 + 0x60080004, // 000A GETGBL R2 G4 + 0x5C0C0200, // 000B MOVE R3 R1 + 0x7C080200, // 000C CALL R2 1 + 0x20080528, // 000D NE R2 R2 K40 + 0x780A0000, // 000E JMPF R2 #0010 + 0xB006532A, // 000F RAISE 1 K41 K42 + 0x8808012B, // 0010 GETMBR R2 R0 K43 + 0x900A592D, // 0011 SETMBR R2 K44 K45 + 0x88080127, // 0012 GETMBR R2 R0 K39 + 0x8C08051D, // 0013 GETMET R2 R2 K29 + 0x5C100200, // 0014 MOVE R4 R1 + 0x7C080400, // 0015 CALL R2 2 + 0x80000000, // 0016 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: remove_timer +********************************************************************/ +be_local_closure(class_Tasmota_remove_timer, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_remove_timer, + &be_const_str_solidified, + ( &(const binstruction[18]) { /* code */ + 0x8808012E, // 0000 GETMBR R2 R0 K46 + 0x780A000E, // 0001 JMPF R2 #0011 + 0x580C0004, // 0002 LDCONST R3 K4 + 0x8C10052F, // 0003 GETMET R4 R2 K47 + 0x7C100200, // 0004 CALL R4 1 + 0x14100604, // 0005 LT R4 R3 R4 + 0x78120009, // 0006 JMPF R4 #0011 + 0x94100403, // 0007 GETIDX R4 R2 R3 + 0x88100930, // 0008 GETMBR R4 R4 K48 + 0x1C100801, // 0009 EQ R4 R4 R1 + 0x78120003, // 000A JMPF R4 #000F + 0x8C100531, // 000B GETMET R4 R2 K49 + 0x5C180600, // 000C MOVE R6 R3 + 0x7C100400, // 000D CALL R4 2 + 0x70020000, // 000E JMP #0010 + 0x000C072D, // 000F ADD R3 R3 K45 + 0x7001FFF1, // 0010 JMP #0003 + 0x80000000, // 0011 RET 0 }) ) ); @@ -343,15 +694,15 @@ be_local_closure(class_Tasmota_is_network_up, /* name */ &be_const_str_is_network_up, &be_const_str_solidified, ( &(const binstruction[13]) { /* code */ - 0xB8061400, // 0000 GETNGBL R1 K10 - 0x8C04030B, // 0001 GETMET R1 R1 K11 + 0xB8060400, // 0000 GETNGBL R1 K2 + 0x8C040332, // 0001 GETMET R1 R1 K50 0x7C040200, // 0002 CALL R1 1 - 0x9404030C, // 0003 GETIDX R1 R1 K12 + 0x94040333, // 0003 GETIDX R1 R1 K51 0x74060005, // 0004 JMPT R1 #000B - 0xB8061400, // 0005 GETNGBL R1 K10 - 0x8C04030D, // 0006 GETMET R1 R1 K13 + 0xB8060400, // 0005 GETNGBL R1 K2 + 0x8C040334, // 0006 GETMET R1 R1 K52 0x7C040200, // 0007 CALL R1 1 - 0x9404030C, // 0008 GETIDX R1 R1 K12 + 0x94040333, // 0008 GETIDX R1 R1 K51 0x74060000, // 0009 JMPT R1 #000B 0x50040001, // 000A LDBOOL R1 0 1 0x50040200, // 000B LDBOOL R1 1 0 @@ -363,12 +714,12 @@ be_local_closure(class_Tasmota_is_network_up, /* name */ /******************************************************************** -** Solidified function: try_rule +** Solidified function: find_list_i ********************************************************************/ -be_local_closure(class_Tasmota_try_rule, /* name */ +be_local_closure(class_Tasmota_find_list_i, /* name */ be_nested_proto( 9, /* nstack */ - 4, /* argc */ + 3, /* argc */ 10, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ @@ -376,27 +727,29 @@ be_local_closure(class_Tasmota_try_rule, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_try_rule, + &be_const_str_find_list_i, &be_const_str_solidified, - ( &(const binstruction[18]) { /* code */ - 0x8C10050E, // 0000 GETMET R4 R2 K14 - 0x5C180200, // 0001 MOVE R6 R1 - 0x7C100400, // 0002 CALL R4 2 - 0x4C140000, // 0003 LDNIL R5 - 0x20140805, // 0004 NE R5 R4 R5 - 0x78160009, // 0005 JMPF R5 #0010 - 0x4C140000, // 0006 LDNIL R5 - 0x20140605, // 0007 NE R5 R3 R5 - 0x78160004, // 0008 JMPF R5 #000E - 0x5C140600, // 0009 MOVE R5 R3 - 0x5C180800, // 000A MOVE R6 R4 - 0x881C050F, // 000B GETMBR R7 R2 K15 - 0x5C200200, // 000C MOVE R8 R1 - 0x7C140600, // 000D CALL R5 3 - 0x50140200, // 000E LDBOOL R5 1 0 - 0x80040A00, // 000F RET 1 R5 - 0x50140000, // 0010 LDBOOL R5 0 0 - 0x80040A00, // 0011 RET 1 R5 + ( &(const binstruction[20]) { /* code */ + 0xA40E0200, // 0000 IMPORT R3 K1 + 0x58100004, // 0001 LDCONST R4 K4 + 0x8C140735, // 0002 GETMET R5 R3 K53 + 0x5C1C0400, // 0003 MOVE R7 R2 + 0x7C140400, // 0004 CALL R5 2 + 0x6018000C, // 0005 GETGBL R6 G12 + 0x5C1C0200, // 0006 MOVE R7 R1 + 0x7C180200, // 0007 CALL R6 1 + 0x14180806, // 0008 LT R6 R4 R6 + 0x781A0007, // 0009 JMPF R6 #0012 + 0x8C180735, // 000A GETMET R6 R3 K53 + 0x94200204, // 000B GETIDX R8 R1 R4 + 0x7C180400, // 000C CALL R6 2 + 0x1C180C05, // 000D EQ R6 R6 R5 + 0x781A0000, // 000E JMPF R6 #0010 + 0x80040800, // 000F RET 1 R4 + 0x0010092D, // 0010 ADD R4 R4 K45 + 0x7001FFF2, // 0011 JMP #0005 + 0x4C180000, // 0012 LDNIL R6 + 0x80040C00, // 0013 RET 1 R6 }) ) ); @@ -404,11 +757,109 @@ be_local_closure(class_Tasmota_try_rule, /* name */ /******************************************************************** -** Solidified function: defer +** Solidified function: set_light ********************************************************************/ -be_local_closure(class_Tasmota_defer, /* name */ +be_local_closure(class_Tasmota_set_light, /* name */ be_nested_proto( - 5, /* nstack */ + 8, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_set_light, + &be_const_str_solidified, + ( &(const binstruction[18]) { /* code */ + 0x600C0001, // 0000 GETGBL R3 G1 + 0x58100036, // 0001 LDCONST R4 K54 + 0x7C0C0200, // 0002 CALL R3 1 + 0xA40E6E00, // 0003 IMPORT R3 K55 + 0x4C100000, // 0004 LDNIL R4 + 0x20100404, // 0005 NE R4 R2 R4 + 0x78120005, // 0006 JMPF R4 #000D + 0x8C100738, // 0007 GETMET R4 R3 K56 + 0x5C180200, // 0008 MOVE R6 R1 + 0x5C1C0400, // 0009 MOVE R7 R2 + 0x7C100600, // 000A CALL R4 3 + 0x80040800, // 000B RET 1 R4 + 0x70020003, // 000C JMP #0011 + 0x8C100738, // 000D GETMET R4 R3 K56 + 0x5C180200, // 000E MOVE R6 R1 + 0x7C100400, // 000F CALL R4 2 + 0x80040800, // 0010 RET 1 R4 + 0x80000000, // 0011 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: run_cron +********************************************************************/ +be_local_closure(class_Tasmota_run_cron, /* name */ + be_nested_proto( + 9, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_run_cron, + &be_const_str_solidified, + ( &(const binstruction[34]) { /* code */ + 0x88040139, // 0000 GETMBR R1 R0 K57 + 0x7806001E, // 0001 JMPF R1 #0021 + 0x58040004, // 0002 LDCONST R1 K4 + 0xB80A7400, // 0003 GETNGBL R2 K58 + 0x8C08053B, // 0004 GETMET R2 R2 K59 + 0x7C080200, // 0005 CALL R2 1 + 0x880C0139, // 0006 GETMBR R3 R0 K57 + 0x8C0C072F, // 0007 GETMET R3 R3 K47 + 0x7C0C0200, // 0008 CALL R3 1 + 0x140C0203, // 0009 LT R3 R1 R3 + 0x780E0015, // 000A JMPF R3 #0021 + 0x880C0139, // 000B GETMBR R3 R0 K57 + 0x940C0601, // 000C GETIDX R3 R3 R1 + 0x8810073C, // 000D GETMBR R4 R3 K60 + 0x1C100904, // 000E EQ R4 R4 K4 + 0x78120003, // 000F JMPF R4 #0014 + 0x8C10073D, // 0010 GETMET R4 R3 K61 + 0x7C100200, // 0011 CALL R4 1 + 0x900E7804, // 0012 SETMBR R3 K60 R4 + 0x7002000A, // 0013 JMP #001F + 0x8C10073E, // 0014 GETMET R4 R3 K62 + 0x7C100200, // 0015 CALL R4 1 + 0x78120007, // 0016 JMPF R4 #001F + 0x8810073F, // 0017 GETMBR R4 R3 K63 + 0x8C14073D, // 0018 GETMET R5 R3 K61 + 0x7C140200, // 0019 CALL R5 1 + 0x900E7805, // 001A SETMBR R3 K60 R5 + 0x5C180800, // 001B MOVE R6 R4 + 0x5C1C0400, // 001C MOVE R7 R2 + 0x5C200A00, // 001D MOVE R8 R5 + 0x7C180400, // 001E CALL R6 2 + 0x0004032D, // 001F ADD R1 R1 K45 + 0x7001FFE4, // 0020 JMP #0006 + 0x80000000, // 0021 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: remove_cron +********************************************************************/ +be_local_closure(class_Tasmota_remove_cron, /* name */ + be_nested_proto( + 7, /* nstack */ 2, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -417,24 +868,130 @@ be_local_closure(class_Tasmota_defer, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_defer, + &be_const_str_remove_cron, &be_const_str_solidified, - ( &(const binstruction[15]) { /* code */ - 0x88080110, // 0000 GETMBR R2 R0 K16 - 0x4C0C0000, // 0001 LDNIL R3 - 0x1C080403, // 0002 EQ R2 R2 R3 - 0x780A0002, // 0003 JMPF R2 #0007 - 0x60080012, // 0004 GETGBL R2 G18 - 0x7C080000, // 0005 CALL R2 0 - 0x90022002, // 0006 SETMBR R0 K16 R2 - 0x88080110, // 0007 GETMBR R2 R0 K16 - 0x8C080511, // 0008 GETMET R2 R2 K17 - 0x5C100200, // 0009 MOVE R4 R1 - 0x7C080400, // 000A CALL R2 2 - 0xB80A1400, // 000B GETNGBL R2 K10 - 0x88080512, // 000C GETMBR R2 R2 K18 - 0x900A2705, // 000D SETMBR R2 K19 K5 - 0x80000000, // 000E RET 0 + ( &(const binstruction[18]) { /* code */ + 0x88080139, // 0000 GETMBR R2 R0 K57 + 0x780A000E, // 0001 JMPF R2 #0011 + 0x580C0004, // 0002 LDCONST R3 K4 + 0x8C10052F, // 0003 GETMET R4 R2 K47 + 0x7C100200, // 0004 CALL R4 1 + 0x14100604, // 0005 LT R4 R3 R4 + 0x78120009, // 0006 JMPF R4 #0011 + 0x94100403, // 0007 GETIDX R4 R2 R3 + 0x88100930, // 0008 GETMBR R4 R4 K48 + 0x1C100801, // 0009 EQ R4 R4 R1 + 0x78120003, // 000A JMPF R4 #000F + 0x8C100531, // 000B GETMET R4 R2 K49 + 0x5C180600, // 000C MOVE R6 R3 + 0x7C100400, // 000D CALL R4 2 + 0x70020000, // 000E JMP #0010 + 0x000C072D, // 000F ADD R3 R3 K45 + 0x7001FFF1, // 0010 JMP #0003 + 0x80000000, // 0011 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: cmd +********************************************************************/ +be_local_closure(class_Tasmota_cmd, /* name */ + be_nested_proto( + 8, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_cmd, + &be_const_str_solidified, + ( &(const binstruction[27]) { /* code */ + 0x880C0140, // 0000 GETMBR R3 R0 K64 + 0x50100200, // 0001 LDBOOL R4 1 0 + 0x90028004, // 0002 SETMBR R0 K64 R4 + 0xB8120400, // 0003 GETNGBL R4 K2 + 0x8810092B, // 0004 GETMBR R4 R4 K43 + 0x88100941, // 0005 GETMBR R4 R4 K65 + 0x780A0004, // 0006 JMPF R2 #000C + 0x28140942, // 0007 GE R5 R4 K66 + 0x78160002, // 0008 JMPF R5 #000C + 0xB8160400, // 0009 GETNGBL R5 K2 + 0x88140B2B, // 000A GETMBR R5 R5 K43 + 0x9016832D, // 000B SETMBR R5 K65 K45 + 0x8C140143, // 000C GETMET R5 R0 K67 + 0x5C1C0200, // 000D MOVE R7 R1 + 0x7C140400, // 000E CALL R5 2 + 0x4C140000, // 000F LDNIL R5 + 0x88180140, // 0010 GETMBR R6 R0 K64 + 0x501C0200, // 0011 LDBOOL R7 1 0 + 0x20180C07, // 0012 NE R6 R6 R7 + 0x781A0000, // 0013 JMPF R6 #0015 + 0x88140140, // 0014 GETMBR R5 R0 K64 + 0x90028003, // 0015 SETMBR R0 K64 R3 + 0x780A0002, // 0016 JMPF R2 #001A + 0xB81A0400, // 0017 GETNGBL R6 K2 + 0x88180D2B, // 0018 GETMBR R6 R6 K43 + 0x901A8204, // 0019 SETMBR R6 K65 R4 + 0x80040A00, // 001A RET 1 R5 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: find_key_i +********************************************************************/ +be_local_closure(class_Tasmota_find_key_i, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_find_key_i, + &be_const_str_solidified, + ( &(const binstruction[30]) { /* code */ + 0xA40E0200, // 0000 IMPORT R3 K1 + 0x8C100735, // 0001 GETMET R4 R3 K53 + 0x5C180400, // 0002 MOVE R6 R2 + 0x7C100400, // 0003 CALL R4 2 + 0x6014000F, // 0004 GETGBL R5 G15 + 0x5C180200, // 0005 MOVE R6 R1 + 0x601C0013, // 0006 GETGBL R7 G19 + 0x7C140400, // 0007 CALL R5 2 + 0x78160013, // 0008 JMPF R5 #001D + 0x60140010, // 0009 GETGBL R5 G16 + 0x8C180344, // 000A GETMET R6 R1 K68 + 0x7C180200, // 000B CALL R6 1 + 0x7C140200, // 000C CALL R5 1 + 0xA802000B, // 000D EXBLK 0 #001A + 0x5C180A00, // 000E MOVE R6 R5 + 0x7C180000, // 000F CALL R6 0 + 0x8C1C0735, // 0010 GETMET R7 R3 K53 + 0x5C240C00, // 0011 MOVE R9 R6 + 0x7C1C0400, // 0012 CALL R7 2 + 0x1C1C0E04, // 0013 EQ R7 R7 R4 + 0x741E0001, // 0014 JMPT R7 #0017 + 0x1C1C0545, // 0015 EQ R7 R2 K69 + 0x781E0001, // 0016 JMPF R7 #0019 + 0xA8040001, // 0017 EXBLK 1 1 + 0x80040C00, // 0018 RET 1 R6 + 0x7001FFF3, // 0019 JMP #000E + 0x58140046, // 001A LDCONST R5 K70 + 0xAC140200, // 001B CATCH R5 1 0 + 0xB0080000, // 001C RAISE 2 R0 R0 + 0x80000000, // 001D RET 0 }) ) ); @@ -458,31 +1015,31 @@ be_local_closure(class_Tasmota_remove_rule, /* name */ &be_const_str_remove_rule, &be_const_str_solidified, ( &(const binstruction[27]) { /* code */ - 0x880C0114, // 0000 GETMBR R3 R0 K20 + 0x880C0147, // 0000 GETMBR R3 R0 K71 0x780E0017, // 0001 JMPF R3 #001A - 0x580C0001, // 0002 LDCONST R3 K1 + 0x580C0004, // 0002 LDCONST R3 K4 0x6010000C, // 0003 GETGBL R4 G12 - 0x88140114, // 0004 GETMBR R5 R0 K20 + 0x88140147, // 0004 GETMBR R5 R0 K71 0x7C100200, // 0005 CALL R4 1 0x14100604, // 0006 LT R4 R3 R4 0x78120011, // 0007 JMPF R4 #001A - 0x88100114, // 0008 GETMBR R4 R0 K20 + 0x88100147, // 0008 GETMBR R4 R0 K71 0x94100803, // 0009 GETIDX R4 R4 R3 - 0x88100904, // 000A GETMBR R4 R4 K4 - 0x88100915, // 000B GETMBR R4 R4 K21 + 0x8810093C, // 000A GETMBR R4 R4 K60 + 0x88100948, // 000B GETMBR R4 R4 K72 0x1C100801, // 000C EQ R4 R4 R1 0x78120009, // 000D JMPF R4 #0018 - 0x88100114, // 000E GETMBR R4 R0 K20 + 0x88100147, // 000E GETMBR R4 R0 K71 0x94100803, // 000F GETIDX R4 R4 R3 - 0x88100903, // 0010 GETMBR R4 R4 K3 + 0x88100930, // 0010 GETMBR R4 R4 K48 0x1C100802, // 0011 EQ R4 R4 R2 0x78120004, // 0012 JMPF R4 #0018 - 0x88100114, // 0013 GETMBR R4 R0 K20 - 0x8C100916, // 0014 GETMET R4 R4 K22 + 0x88100147, // 0013 GETMBR R4 R0 K71 + 0x8C100931, // 0014 GETMET R4 R4 K49 0x5C180600, // 0015 MOVE R6 R3 0x7C100400, // 0016 CALL R4 2 0x70020000, // 0017 JMP #0019 - 0x000C0705, // 0018 ADD R3 R3 K5 + 0x000C072D, // 0018 ADD R3 R3 K45 0x7001FFE8, // 0019 JMP #0003 0x80000000, // 001A RET 0 }) @@ -492,102 +1049,11 @@ be_local_closure(class_Tasmota_remove_rule, /* name */ /******************************************************************** -** Solidified function: hs2rgb +** Solidified function: remove_driver ********************************************************************/ -be_local_closure(class_Tasmota_hs2rgb, /* name */ +be_local_closure(class_Tasmota_remove_driver, /* name */ be_nested_proto( - 17, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_hs2rgb, - &be_const_str_solidified, - ( &(const binstruction[68]) { /* code */ - 0x4C0C0000, // 0000 LDNIL R3 - 0x1C0C0403, // 0001 EQ R3 R2 R3 - 0x780E0000, // 0002 JMPF R3 #0004 - 0x540A00FE, // 0003 LDINT R2 255 - 0x540E00FE, // 0004 LDINT R3 255 - 0x541200FE, // 0005 LDINT R4 255 - 0x541600FE, // 0006 LDINT R5 255 - 0x541A0167, // 0007 LDINT R6 360 - 0x10040206, // 0008 MOD R1 R1 R6 - 0x24180501, // 0009 GT R6 R2 K1 - 0x781A0031, // 000A JMPF R6 #003D - 0x541A003B, // 000B LDINT R6 60 - 0x0C180206, // 000C DIV R6 R1 R6 - 0x541E003B, // 000D LDINT R7 60 - 0x101C0207, // 000E MOD R7 R1 R7 - 0x542200FE, // 000F LDINT R8 255 - 0x04201002, // 0010 SUB R8 R8 R2 - 0xB8261400, // 0011 GETNGBL R9 K10 - 0x8C241317, // 0012 GETMET R9 R9 K23 - 0x5C2C0E00, // 0013 MOVE R11 R7 - 0x58300001, // 0014 LDCONST R12 K1 - 0x5436003B, // 0015 LDINT R13 60 - 0x543A00FE, // 0016 LDINT R14 255 - 0x5C3C1000, // 0017 MOVE R15 R8 - 0x7C240C00, // 0018 CALL R9 6 - 0xB82A1400, // 0019 GETNGBL R10 K10 - 0x8C281517, // 001A GETMET R10 R10 K23 - 0x5C300E00, // 001B MOVE R12 R7 - 0x58340001, // 001C LDCONST R13 K1 - 0x543A003B, // 001D LDINT R14 60 - 0x5C3C1000, // 001E MOVE R15 R8 - 0x544200FE, // 001F LDINT R16 255 - 0x7C280C00, // 0020 CALL R10 6 - 0x1C2C0D01, // 0021 EQ R11 R6 K1 - 0x782E0002, // 0022 JMPF R11 #0026 - 0x5C141400, // 0023 MOVE R5 R10 - 0x5C101000, // 0024 MOVE R4 R8 - 0x70020016, // 0025 JMP #003D - 0x1C2C0D05, // 0026 EQ R11 R6 K5 - 0x782E0002, // 0027 JMPF R11 #002B - 0x5C0C1200, // 0028 MOVE R3 R9 - 0x5C101000, // 0029 MOVE R4 R8 - 0x70020011, // 002A JMP #003D - 0x1C2C0D18, // 002B EQ R11 R6 K24 - 0x782E0002, // 002C JMPF R11 #0030 - 0x5C0C1000, // 002D MOVE R3 R8 - 0x5C101400, // 002E MOVE R4 R10 - 0x7002000C, // 002F JMP #003D - 0x1C2C0D19, // 0030 EQ R11 R6 K25 - 0x782E0002, // 0031 JMPF R11 #0035 - 0x5C0C1000, // 0032 MOVE R3 R8 - 0x5C141200, // 0033 MOVE R5 R9 - 0x70020007, // 0034 JMP #003D - 0x542E0003, // 0035 LDINT R11 4 - 0x1C2C0C0B, // 0036 EQ R11 R6 R11 - 0x782E0002, // 0037 JMPF R11 #003B - 0x5C0C1400, // 0038 MOVE R3 R10 - 0x5C141000, // 0039 MOVE R5 R8 - 0x70020001, // 003A JMP #003D - 0x5C141000, // 003B MOVE R5 R8 - 0x5C101200, // 003C MOVE R4 R9 - 0x541A000F, // 003D LDINT R6 16 - 0x38180606, // 003E SHL R6 R3 R6 - 0x541E0007, // 003F LDINT R7 8 - 0x381C0A07, // 0040 SHL R7 R5 R7 - 0x30180C07, // 0041 OR R6 R6 R7 - 0x30180C04, // 0042 OR R6 R6 R4 - 0x80040C00, // 0043 RET 1 R6 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: add_driver -********************************************************************/ -be_local_closure(class_Tasmota_add_driver, /* name */ - be_nested_proto( - 5, /* nstack */ + 6, /* nstack */ 2, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -596,34 +1062,29 @@ be_local_closure(class_Tasmota_add_driver, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_add_driver, + &be_const_str_remove_driver, &be_const_str_solidified, - ( &(const binstruction[25]) { /* code */ - 0x60080004, // 0000 GETGBL R2 G4 - 0x5C0C0200, // 0001 MOVE R3 R1 - 0x7C080200, // 0002 CALL R2 1 - 0x2008051A, // 0003 NE R2 R2 K26 - 0x780A0000, // 0004 JMPF R2 #0006 - 0xB006371C, // 0005 RAISE 1 K27 K28 - 0x8808011D, // 0006 GETMBR R2 R0 K29 - 0x780A000B, // 0007 JMPF R2 #0014 - 0x8808011D, // 0008 GETMBR R2 R0 K29 - 0x8C08051E, // 0009 GETMET R2 R2 K30 - 0x5C100200, // 000A MOVE R4 R1 - 0x7C080400, // 000B CALL R2 2 - 0x4C0C0000, // 000C LDNIL R3 - 0x1C080403, // 000D EQ R2 R2 R3 + ( &(const binstruction[20]) { /* code */ + 0x88080149, // 0000 GETMBR R2 R0 K73 + 0x780A000A, // 0001 JMPF R2 #000D + 0x88080149, // 0002 GETMBR R2 R0 K73 + 0x8C08050C, // 0003 GETMET R2 R2 K12 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0x4C0C0000, // 0006 LDNIL R3 + 0x200C0403, // 0007 NE R3 R2 R3 + 0x780E0003, // 0008 JMPF R3 #000D + 0x880C0149, // 0009 GETMBR R3 R0 K73 + 0x8C0C074A, // 000A GETMET R3 R3 K74 + 0x5C140400, // 000B MOVE R5 R2 + 0x7C0C0400, // 000C CALL R3 2 + 0x8808014B, // 000D GETMBR R2 R0 K75 0x780A0003, // 000E JMPF R2 #0013 - 0x8808011D, // 000F GETMBR R2 R0 K29 - 0x8C080511, // 0010 GETMET R2 R2 K17 + 0x8808014B, // 000F GETMBR R2 R0 K75 + 0x8C08054C, // 0010 GETMET R2 R2 K76 0x5C100200, // 0011 MOVE R4 R1 0x7C080400, // 0012 CALL R2 2 - 0x70020003, // 0013 JMP #0018 - 0x60080012, // 0014 GETGBL R2 G18 - 0x7C080000, // 0015 CALL R2 0 - 0x400C0401, // 0016 CONNECT R3 R2 R1 - 0x90023A02, // 0017 SETMBR R0 K29 R2 - 0x80000000, // 0018 RET 0 + 0x80000000, // 0013 RET 0 }) ) ); @@ -631,11 +1092,11 @@ be_local_closure(class_Tasmota_add_driver, /* name */ /******************************************************************** -** Solidified function: exec_rules +** Solidified function: add_cmd ********************************************************************/ -be_local_closure(class_Tasmota_exec_rules, /* name */ +be_local_closure(class_Tasmota_add_cmd, /* name */ be_nested_proto( - 14, /* nstack */ + 6, /* nstack */ 3, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -644,69 +1105,29 @@ be_local_closure(class_Tasmota_exec_rules, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_exec_rules, + &be_const_str_add_cmd, &be_const_str_solidified, - ( &(const binstruction[60]) { /* code */ - 0x880C011F, // 0000 GETMBR R3 R0 K31 - 0x88100114, // 0001 GETMBR R4 R0 K20 - 0x74120002, // 0002 JMPT R4 #0006 - 0x4C100000, // 0003 LDNIL R4 - 0x20100604, // 0004 NE R4 R3 R4 - 0x78120033, // 0005 JMPF R4 #003A - 0xA4124000, // 0006 IMPORT R4 K32 - 0x4C140000, // 0007 LDNIL R5 - 0x90023E05, // 0008 SETMBR R0 K31 R5 - 0x50140000, // 0009 LDBOOL R5 0 0 - 0x8C180921, // 000A GETMET R6 R4 K33 - 0x5C200200, // 000B MOVE R8 R1 - 0x7C180400, // 000C CALL R6 2 - 0x4C1C0000, // 000D LDNIL R7 - 0x1C1C0C07, // 000E EQ R7 R6 R7 - 0x781E0004, // 000F JMPF R7 #0015 - 0x8C1C0122, // 0010 GETMET R7 R0 K34 - 0x00264601, // 0011 ADD R9 K35 R1 - 0x58280019, // 0012 LDCONST R10 K25 - 0x7C1C0600, // 0013 CALL R7 3 - 0x5C180200, // 0014 MOVE R6 R1 - 0x780A001E, // 0015 JMPF R2 #0035 - 0x881C0114, // 0016 GETMBR R7 R0 K20 - 0x781E001C, // 0017 JMPF R7 #0035 - 0x581C0001, // 0018 LDCONST R7 K1 - 0x6020000C, // 0019 GETGBL R8 G12 - 0x88240114, // 001A GETMBR R9 R0 K20 - 0x7C200200, // 001B CALL R8 1 - 0x14200E08, // 001C LT R8 R7 R8 - 0x78220016, // 001D JMPF R8 #0035 - 0x88200114, // 001E GETMBR R8 R0 K20 - 0x94201007, // 001F GETIDX R8 R8 R7 - 0x8C240124, // 0020 GETMET R9 R0 K36 - 0x5C2C0C00, // 0021 MOVE R11 R6 - 0x88301104, // 0022 GETMBR R12 R8 K4 - 0x88341125, // 0023 GETMBR R13 R8 K37 - 0x7C240800, // 0024 CALL R9 4 - 0x74160001, // 0025 JMPT R5 #0028 - 0x74260000, // 0026 JMPT R9 #0028 - 0x50140001, // 0027 LDBOOL R5 0 1 - 0x50140200, // 0028 LDBOOL R5 1 0 - 0x78260008, // 0029 JMPF R9 #0033 - 0x88281126, // 002A GETMBR R10 R8 K38 - 0x502C0200, // 002B LDBOOL R11 1 0 - 0x1C28140B, // 002C EQ R10 R10 R11 - 0x782A0004, // 002D JMPF R10 #0033 - 0x88280114, // 002E GETMBR R10 R0 K20 - 0x8C281516, // 002F GETMET R10 R10 K22 - 0x5C300E00, // 0030 MOVE R12 R7 - 0x7C280400, // 0031 CALL R10 2 - 0x70020000, // 0032 JMP #0034 - 0x001C0F05, // 0033 ADD R7 R7 K5 - 0x7001FFE3, // 0034 JMP #0019 - 0x4C1C0000, // 0035 LDNIL R7 - 0x201C0607, // 0036 NE R7 R3 R7 - 0x781E0000, // 0037 JMPF R7 #0039 - 0x90023E06, // 0038 SETMBR R0 K31 R6 - 0x80040A00, // 0039 RET 1 R5 - 0x50100000, // 003A LDBOOL R4 0 0 - 0x80040800, // 003B RET 1 R4 + ( &(const binstruction[20]) { /* code */ + 0x8C0C011A, // 0000 GETMET R3 R0 K26 + 0x5C140400, // 0001 MOVE R5 R2 + 0x7C0C0400, // 0002 CALL R3 2 + 0x880C0116, // 0003 GETMBR R3 R0 K22 + 0x4C100000, // 0004 LDNIL R4 + 0x1C0C0604, // 0005 EQ R3 R3 R4 + 0x780E0002, // 0006 JMPF R3 #000A + 0x600C0013, // 0007 GETGBL R3 G19 + 0x7C0C0000, // 0008 CALL R3 0 + 0x90022C03, // 0009 SETMBR R0 K22 R3 + 0x600C0004, // 000A GETGBL R3 G4 + 0x5C100400, // 000B MOVE R4 R2 + 0x7C0C0200, // 000C CALL R3 1 + 0x1C0C0728, // 000D EQ R3 R3 K40 + 0x780E0002, // 000E JMPF R3 #0012 + 0x880C0116, // 000F GETMBR R3 R0 K22 + 0x980C0202, // 0010 SETIDX R3 R1 R2 + 0x70020000, // 0011 JMP #0013 + 0xB006534D, // 0012 RAISE 1 K41 K77 + 0x80000000, // 0013 RET 0 }) ) ); @@ -714,11 +1135,49 @@ be_local_closure(class_Tasmota_exec_rules, /* name */ /******************************************************************** -** Solidified function: set_timer +** Solidified function: remove_fast_loop ********************************************************************/ -be_local_closure(class_Tasmota_set_timer, /* name */ +be_local_closure(class_Tasmota_remove_fast_loop, /* name */ be_nested_proto( - 10, /* nstack */ + 6, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_remove_fast_loop, + &be_const_str_solidified, + ( &(const binstruction[15]) { /* code */ + 0x88080127, // 0000 GETMBR R2 R0 K39 + 0x740A0000, // 0001 JMPT R2 #0003 + 0x80000400, // 0002 RET 0 + 0x88080127, // 0003 GETMBR R2 R0 K39 + 0x8C08050C, // 0004 GETMET R2 R2 K12 + 0x5C100200, // 0005 MOVE R4 R1 + 0x7C080400, // 0006 CALL R2 2 + 0x4C0C0000, // 0007 LDNIL R3 + 0x200C0403, // 0008 NE R3 R2 R3 + 0x780E0003, // 0009 JMPF R3 #000E + 0x880C0127, // 000A GETMBR R3 R0 K39 + 0x8C0C0731, // 000B GETMET R3 R3 K49 + 0x5C140400, // 000C MOVE R5 R2 + 0x7C0C0400, // 000D CALL R3 2 + 0x80000000, // 000E RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: add_cron +********************************************************************/ +be_local_closure(class_Tasmota_add_cron, /* name */ + be_nested_proto( + 13, /* nstack */ 4, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -727,30 +1186,490 @@ be_local_closure(class_Tasmota_set_timer, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_set_timer, + &be_const_str_add_cron, &be_const_str_solidified, - ( &(const binstruction[21]) { /* code */ - 0x8C100127, // 0000 GETMET R4 R0 K39 + ( &(const binstruction[27]) { /* code */ + 0x8C10011A, // 0000 GETMET R4 R0 K26 0x5C180400, // 0001 MOVE R6 R2 0x7C100400, // 0002 CALL R4 2 - 0x88100128, // 0003 GETMBR R4 R0 K40 + 0x88100139, // 0003 GETMBR R4 R0 K57 0x4C140000, // 0004 LDNIL R5 0x1C100805, // 0005 EQ R4 R4 R5 0x78120002, // 0006 JMPF R4 #000A 0x60100012, // 0007 GETGBL R4 G18 0x7C100000, // 0008 CALL R4 0 - 0x90025004, // 0009 SETMBR R0 K40 R4 - 0x88100128, // 000A GETMBR R4 R0 K40 - 0x8C100911, // 000B GETMET R4 R4 K17 - 0xB81A5200, // 000C GETNGBL R6 K41 - 0x8C1C012A, // 000D GETMET R7 R0 K42 - 0x5C240200, // 000E MOVE R9 R1 - 0x7C1C0400, // 000F CALL R7 2 - 0x5C200400, // 0010 MOVE R8 R2 - 0x5C240600, // 0011 MOVE R9 R3 - 0x7C180600, // 0012 CALL R6 3 - 0x7C100400, // 0013 CALL R4 2 - 0x80000000, // 0014 RET 0 + 0x90027204, // 0009 SETMBR R0 K57 R4 + 0xB8127400, // 000A GETNGBL R4 K58 + 0x60140008, // 000B GETGBL R5 G8 + 0x5C180200, // 000C MOVE R6 R1 + 0x7C140200, // 000D CALL R5 1 + 0x7C100200, // 000E CALL R4 1 + 0x8C14093D, // 000F GETMET R5 R4 K61 + 0x7C140200, // 0010 CALL R5 1 + 0x88180139, // 0011 GETMBR R6 R0 K57 + 0x8C180D1D, // 0012 GETMET R6 R6 K29 + 0xB8229C00, // 0013 GETNGBL R8 K78 + 0x5C240A00, // 0014 MOVE R9 R5 + 0x5C280400, // 0015 MOVE R10 R2 + 0x5C2C0600, // 0016 MOVE R11 R3 + 0x5C300800, // 0017 MOVE R12 R4 + 0x7C200800, // 0018 CALL R8 4 + 0x7C180400, // 0019 CALL R6 2 + 0x80000000, // 001A RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: exec_tele +********************************************************************/ +be_local_closure(class_Tasmota_exec_tele, /* name */ + be_nested_proto( + 12, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_exec_tele, + &be_const_str_solidified, + ( &(const binstruction[41]) { /* code */ + 0x88080147, // 0000 GETMBR R2 R0 K71 + 0x780A0024, // 0001 JMPF R2 #0027 + 0xA40A0000, // 0002 IMPORT R2 K0 + 0x8C0C050B, // 0003 GETMET R3 R2 K11 + 0x5C140200, // 0004 MOVE R5 R1 + 0x7C0C0400, // 0005 CALL R3 2 + 0x50100000, // 0006 LDBOOL R4 0 0 + 0x4C140000, // 0007 LDNIL R5 + 0x1C140605, // 0008 EQ R5 R3 R5 + 0x78160004, // 0009 JMPF R5 #000F + 0x8C140114, // 000A GETMET R5 R0 K20 + 0x001E9E01, // 000B ADD R7 K79 R1 + 0x58200050, // 000C LDCONST R8 K80 + 0x7C140600, // 000D CALL R5 3 + 0x5C0C0200, // 000E MOVE R3 R1 + 0x60140013, // 000F GETGBL R5 G19 + 0x7C140000, // 0010 CALL R5 0 + 0x9816A203, // 0011 SETIDX R5 K81 R3 + 0x5C0C0A00, // 0012 MOVE R3 R5 + 0x58140004, // 0013 LDCONST R5 K4 + 0x6018000C, // 0014 GETGBL R6 G12 + 0x881C0147, // 0015 GETMBR R7 R0 K71 + 0x7C180200, // 0016 CALL R6 1 + 0x14180A06, // 0017 LT R6 R5 R6 + 0x781A000C, // 0018 JMPF R6 #0026 + 0x88180147, // 0019 GETMBR R6 R0 K71 + 0x94180C05, // 001A GETIDX R6 R6 R5 + 0x8C1C0152, // 001B GETMET R7 R0 K82 + 0x5C240600, // 001C MOVE R9 R3 + 0x88280D3C, // 001D GETMBR R10 R6 K60 + 0x882C0D3F, // 001E GETMBR R11 R6 K63 + 0x7C1C0800, // 001F CALL R7 4 + 0x741E0001, // 0020 JMPT R7 #0023 + 0x74120000, // 0021 JMPT R4 #0023 + 0x50100001, // 0022 LDBOOL R4 0 1 + 0x50100200, // 0023 LDBOOL R4 1 0 + 0x00140B2D, // 0024 ADD R5 R5 K45 + 0x7001FFED, // 0025 JMP #0014 + 0x80040800, // 0026 RET 1 R4 + 0x50080000, // 0027 LDBOOL R2 0 0 + 0x80040400, // 0028 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: gen_cb +********************************************************************/ +be_local_closure(class_Tasmota_gen_cb, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_gen_cb, + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0xA40AA600, // 0000 IMPORT R2 K83 + 0x8C0C0554, // 0001 GETMET R3 R2 K84 + 0x5C140200, // 0002 MOVE R5 R1 + 0x7C0C0400, // 0003 CALL R3 2 + 0x80040600, // 0004 RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: run_network_up +********************************************************************/ +be_local_closure(class_Tasmota_run_network_up, /* name */ + be_nested_proto( + 9, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_run_network_up, + &be_const_str_solidified, + ( &(const binstruction[39]) { /* code */ + 0x8804011C, // 0000 GETMBR R1 R0 K28 + 0x4C080000, // 0001 LDNIL R2 + 0x1C040202, // 0002 EQ R1 R1 R2 + 0x78060000, // 0003 JMPF R1 #0005 + 0x80000200, // 0004 RET 0 + 0x8C04011B, // 0005 GETMET R1 R0 K27 + 0x7C040200, // 0006 CALL R1 1 + 0x7806001D, // 0007 JMPF R1 #0026 + 0x6004000C, // 0008 GETGBL R1 G12 + 0x8808011C, // 0009 GETMBR R2 R0 K28 + 0x7C040200, // 000A CALL R1 1 + 0x24040304, // 000B GT R1 R1 K4 + 0x78060016, // 000C JMPF R1 #0024 + 0x8804011C, // 000D GETMBR R1 R0 K28 + 0x94040304, // 000E GETIDX R1 R1 K4 + 0x8808011C, // 000F GETMBR R2 R0 K28 + 0x8C080531, // 0010 GETMET R2 R2 K49 + 0x58100004, // 0011 LDCONST R4 K4 + 0x7C080400, // 0012 CALL R2 2 + 0xA8020003, // 0013 EXBLK 0 #0018 + 0x5C080200, // 0014 MOVE R2 R1 + 0x7C080000, // 0015 CALL R2 0 + 0xA8040001, // 0016 EXBLK 1 1 + 0x7002000A, // 0017 JMP #0023 + 0xAC080002, // 0018 CATCH R2 0 2 + 0x70020007, // 0019 JMP #0022 + 0x60100001, // 001A GETGBL R4 G1 + 0x60140018, // 001B GETGBL R5 G24 + 0x58180055, // 001C LDCONST R6 K85 + 0x5C1C0400, // 001D MOVE R7 R2 + 0x5C200600, // 001E MOVE R8 R3 + 0x7C140600, // 001F CALL R5 3 + 0x7C100200, // 0020 CALL R4 1 + 0x70020000, // 0021 JMP #0023 + 0xB0080000, // 0022 RAISE 2 R0 R0 + 0x7001FFE3, // 0023 JMP #0008 + 0x4C040000, // 0024 LDNIL R1 + 0x90023801, // 0025 SETMBR R0 K28 R1 + 0x80000000, // 0026 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: run_timers +********************************************************************/ +be_local_closure(class_Tasmota_run_timers, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_run_timers, + &be_const_str_solidified, + ( &(const binstruction[27]) { /* code */ + 0x8C040156, // 0000 GETMET R1 R0 K86 + 0x7C040200, // 0001 CALL R1 1 + 0x8804012E, // 0002 GETMBR R1 R0 K46 + 0x78060015, // 0003 JMPF R1 #001A + 0x58040004, // 0004 LDCONST R1 K4 + 0x8808012E, // 0005 GETMBR R2 R0 K46 + 0x8C08052F, // 0006 GETMET R2 R2 K47 + 0x7C080200, // 0007 CALL R2 1 + 0x14080202, // 0008 LT R2 R1 R2 + 0x780A000F, // 0009 JMPF R2 #001A + 0x8808012E, // 000A GETMBR R2 R0 K46 + 0x94080401, // 000B GETIDX R2 R2 R1 + 0x8C0C013E, // 000C GETMET R3 R0 K62 + 0x8814053C, // 000D GETMBR R5 R2 K60 + 0x7C0C0400, // 000E CALL R3 2 + 0x780E0007, // 000F JMPF R3 #0018 + 0x880C053F, // 0010 GETMBR R3 R2 K63 + 0x8810012E, // 0011 GETMBR R4 R0 K46 + 0x8C100931, // 0012 GETMET R4 R4 K49 + 0x5C180200, // 0013 MOVE R6 R1 + 0x7C100400, // 0014 CALL R4 2 + 0x5C100600, // 0015 MOVE R4 R3 + 0x7C100000, // 0016 CALL R4 0 + 0x70020000, // 0017 JMP #0019 + 0x0004032D, // 0018 ADD R1 R1 K45 + 0x7001FFEA, // 0019 JMP #0005 + 0x80000000, // 001A RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: add_extension +********************************************************************/ +be_local_closure(class_Tasmota_add_extension, /* name */ + be_nested_proto( + 8, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_add_extension, + &be_const_str_solidified, + ( &(const binstruction[51]) { /* code */ + 0x4C0C0000, // 0000 LDNIL R3 + 0x1C0C0403, // 0001 EQ R3 R2 R3 + 0x780E0001, // 0002 JMPF R3 #0005 + 0xB80E0400, // 0003 GETNGBL R3 K2 + 0x88080703, // 0004 GETMBR R2 R3 K3 + 0x600C0004, // 0005 GETGBL R3 G4 + 0x5C100200, // 0006 MOVE R4 R1 + 0x7C0C0200, // 0007 CALL R3 1 + 0x200C0757, // 0008 NE R3 R3 K87 + 0x740E0004, // 0009 JMPT R3 #000F + 0x600C0004, // 000A GETGBL R3 G4 + 0x5C100400, // 000B MOVE R4 R2 + 0x7C0C0200, // 000C CALL R3 1 + 0x200C0701, // 000D NE R3 R3 K1 + 0x780E0000, // 000E JMPF R3 #0010 + 0xB0065358, // 000F RAISE 1 K41 K88 + 0x4C0C0000, // 0010 LDNIL R3 + 0x200C0403, // 0011 NE R3 R2 R3 + 0x780E001E, // 0012 JMPF R3 #0032 + 0xA40E0200, // 0013 IMPORT R3 K1 + 0x8810014B, // 0014 GETMBR R4 R0 K75 + 0x4C140000, // 0015 LDNIL R5 + 0x1C100805, // 0016 EQ R4 R4 R5 + 0x78120002, // 0017 JMPF R4 #001B + 0xB812B200, // 0018 GETNGBL R4 K89 + 0x7C100000, // 0019 CALL R4 0 + 0x90029604, // 001A SETMBR R0 K75 R4 + 0x8C100712, // 001B GETMET R4 R3 K18 + 0x5C180400, // 001C MOVE R6 R2 + 0x581C0006, // 001D LDCONST R7 K6 + 0x7C100600, // 001E CALL R4 3 + 0x78120002, // 001F JMPF R4 #0023 + 0x5411FFFD, // 0020 LDINT R4 -2 + 0x40120804, // 0021 CONNECT R4 K4 R4 + 0x94080404, // 0022 GETIDX R2 R2 R4 + 0x8810014B, // 0023 GETMBR R4 R0 K75 + 0x8C10095A, // 0024 GETMET R4 R4 K90 + 0x5C180400, // 0025 MOVE R6 R2 + 0x7C100400, // 0026 CALL R4 2 + 0x78120007, // 0027 JMPF R4 #0030 + 0xB8122800, // 0028 GETNGBL R4 K20 + 0x60140018, // 0029 GETGBL R5 G24 + 0x5818005B, // 002A LDCONST R6 K91 + 0x5C1C0400, // 002B MOVE R7 R2 + 0x7C140400, // 002C CALL R5 2 + 0x58180050, // 002D LDCONST R6 K80 + 0x7C100400, // 002E CALL R4 2 + 0x70020001, // 002F JMP #0032 + 0x8810014B, // 0030 GETMBR R4 R0 K75 + 0x98100401, // 0031 SETIDX R4 R2 R1 + 0x80000000, // 0032 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: wire_scan +********************************************************************/ +be_local_closure(class_Tasmota_wire_scan, /* name */ + be_nested_proto( + 6, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_wire_scan, + &be_const_str_solidified, + ( &(const binstruction[33]) { /* code */ + 0x4C0C0000, // 0000 LDNIL R3 + 0x200C0403, // 0001 NE R3 R2 R3 + 0x780E0005, // 0002 JMPF R3 #0009 + 0x8C0C015C, // 0003 GETMET R3 R0 K92 + 0x5C140400, // 0004 MOVE R5 R2 + 0x7C0C0400, // 0005 CALL R3 2 + 0x740E0001, // 0006 JMPT R3 #0009 + 0x4C0C0000, // 0007 LDNIL R3 + 0x80040600, // 0008 RET 1 R3 + 0x880C015D, // 0009 GETMBR R3 R0 K93 + 0x8C0C075E, // 000A GETMET R3 R3 K94 + 0x7C0C0200, // 000B CALL R3 1 + 0x780E0006, // 000C JMPF R3 #0014 + 0x880C015D, // 000D GETMBR R3 R0 K93 + 0x8C0C075F, // 000E GETMET R3 R3 K95 + 0x5C140200, // 000F MOVE R5 R1 + 0x7C0C0400, // 0010 CALL R3 2 + 0x780E0001, // 0011 JMPF R3 #0014 + 0x880C015D, // 0012 GETMBR R3 R0 K93 + 0x80040600, // 0013 RET 1 R3 + 0x880C0160, // 0014 GETMBR R3 R0 K96 + 0x8C0C075E, // 0015 GETMET R3 R3 K94 + 0x7C0C0200, // 0016 CALL R3 1 + 0x780E0006, // 0017 JMPF R3 #001F + 0x880C0160, // 0018 GETMBR R3 R0 K96 + 0x8C0C075F, // 0019 GETMET R3 R3 K95 + 0x5C140200, // 001A MOVE R5 R1 + 0x7C0C0400, // 001B CALL R3 2 + 0x780E0001, // 001C JMPF R3 #001F + 0x880C0160, // 001D GETMBR R3 R0 K96 + 0x80040600, // 001E RET 1 R3 + 0x4C0C0000, // 001F LDNIL R3 + 0x80040600, // 0020 RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: urlfetch +********************************************************************/ +be_local_closure(class_Tasmota_urlfetch, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_urlfetch, + &be_const_str_solidified, + ( &(const binstruction[48]) { /* code */ + 0x4C0C0000, // 0000 LDNIL R3 + 0x1C0C0403, // 0001 EQ R3 R2 R3 + 0x780E000D, // 0002 JMPF R3 #0011 + 0xA40E0200, // 0003 IMPORT R3 K1 + 0x8C100761, // 0004 GETMET R4 R3 K97 + 0x5C180200, // 0005 MOVE R6 R1 + 0x581C0005, // 0006 LDCONST R7 K5 + 0x7C100600, // 0007 CALL R4 3 + 0x8C10094A, // 0008 GETMET R4 R4 K74 + 0x7C100200, // 0009 CALL R4 1 + 0x5C080800, // 000A MOVE R2 R4 + 0x6010000C, // 000B GETGBL R4 G12 + 0x5C140400, // 000C MOVE R5 R2 + 0x7C100200, // 000D CALL R4 1 + 0x1C100904, // 000E EQ R4 R4 K4 + 0x78120000, // 000F JMPF R4 #0011 + 0x58080062, // 0010 LDCONST R2 K98 + 0xB80EC600, // 0011 GETNGBL R3 K99 + 0x7C0C0000, // 0012 CALL R3 0 + 0x8C100764, // 0013 GETMET R4 R3 K100 + 0x50180200, // 0014 LDBOOL R6 1 0 + 0x7C100400, // 0015 CALL R4 2 + 0x8C100765, // 0016 GETMET R4 R3 K101 + 0x5C180200, // 0017 MOVE R6 R1 + 0x7C100400, // 0018 CALL R4 2 + 0x8C100766, // 0019 GETMET R4 R3 K102 + 0x7C100200, // 001A CALL R4 1 + 0x541600C7, // 001B LDINT R5 200 + 0x20140805, // 001C NE R5 R4 R5 + 0x78160004, // 001D JMPF R5 #0023 + 0x60140008, // 001E GETGBL R5 G8 + 0x5C180800, // 001F MOVE R6 R4 + 0x7C140200, // 0020 CALL R5 1 + 0x0016CE05, // 0021 ADD R5 K103 R5 + 0xB006D005, // 0022 RAISE 1 K104 R5 + 0x8C140769, // 0023 GETMET R5 R3 K105 + 0x5C1C0400, // 0024 MOVE R7 R2 + 0x7C140400, // 0025 CALL R5 2 + 0x8C18070A, // 0026 GETMET R6 R3 K10 + 0x7C180200, // 0027 CALL R6 1 + 0x8C180114, // 0028 GETMET R6 R0 K20 + 0x60200008, // 0029 GETGBL R8 G8 + 0x5C240A00, // 002A MOVE R9 R5 + 0x7C200200, // 002B CALL R8 1 + 0x0022D408, // 002C ADD R8 K106 R8 + 0x58240050, // 002D LDCONST R9 K80 + 0x7C180600, // 002E CALL R6 3 + 0x80040800, // 002F RET 1 R4 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: run_deferred +********************************************************************/ +be_local_closure(class_Tasmota_run_deferred, /* name */ + be_nested_proto( + 6, /* nstack */ + 1, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_run_deferred, + &be_const_str_solidified, + ( &(const binstruction[26]) { /* code */ + 0x8804016B, // 0000 GETMBR R1 R0 K107 + 0x78060016, // 0001 JMPF R1 #0019 + 0x6004000C, // 0002 GETGBL R1 G12 + 0x8808016B, // 0003 GETMBR R2 R0 K107 + 0x7C040200, // 0004 CALL R1 1 + 0x24080304, // 0005 GT R2 R1 K4 + 0x780A0009, // 0006 JMPF R2 #0011 + 0x8808016B, // 0007 GETMBR R2 R0 K107 + 0x94080504, // 0008 GETIDX R2 R2 K4 + 0x880C016B, // 0009 GETMBR R3 R0 K107 + 0x8C0C0731, // 000A GETMET R3 R3 K49 + 0x58140004, // 000B LDCONST R5 K4 + 0x7C0C0400, // 000C CALL R3 2 + 0x0404032D, // 000D SUB R1 R1 K45 + 0x5C0C0400, // 000E MOVE R3 R2 + 0x7C0C0000, // 000F CALL R3 0 + 0x7001FFF3, // 0010 JMP #0005 + 0x6008000C, // 0011 GETGBL R2 G12 + 0x880C016B, // 0012 GETMBR R3 R0 K107 + 0x7C080200, // 0013 CALL R2 1 + 0x1C080504, // 0014 EQ R2 R2 K4 + 0x780A0002, // 0015 JMPF R2 #0019 + 0xB80A0400, // 0016 GETNGBL R2 K2 + 0x8808052B, // 0017 GETMBR R2 R2 K43 + 0x900AD904, // 0018 SETMBR R2 K108 K4 + 0x80000000, // 0019 RET 0 }) ) ); @@ -802,36 +1721,36 @@ be_local_closure(class_Tasmota_init, /* name */ &be_const_str_init, &be_const_str_solidified, ( &(const binstruction[34]) { /* code */ - 0xB8065600, // 0000 GETNGBL R1 K43 - 0x8808012C, // 0001 GETMBR R2 R0 K44 - 0x880C012D, // 0002 GETMBR R3 R0 K45 + 0xB806DA00, // 0000 GETNGBL R1 K109 + 0x8808016E, // 0001 GETMBR R2 R0 K110 + 0x880C016F, // 0002 GETMBR R3 R0 K111 0x7C040400, // 0003 CALL R1 2 - 0x90022401, // 0004 SETMBR R0 K18 R1 - 0xA4065C00, // 0005 IMPORT R1 K46 + 0x90025601, // 0004 SETMBR R0 K43 R1 + 0xA406E000, // 0005 IMPORT R1 K112 0x60080015, // 0006 GETGBL R2 G21 - 0x880C012F, // 0007 GETMBR R3 R0 K47 + 0x880C0171, // 0007 GETMBR R3 R0 K113 0x54120003, // 0008 LDINT R4 4 0x7C080400, // 0009 CALL R2 2 - 0x8C080509, // 000A GETMET R2 R2 K9 - 0x58100001, // 000B LDCONST R4 K1 + 0x8C080572, // 000A GETMET R2 R2 K114 + 0x58100004, // 000B LDCONST R4 K4 0x54160003, // 000C LDINT R5 4 0x7C080600, // 000D CALL R2 3 0x780A0006, // 000E JMPF R2 #0016 - 0xB80E5600, // 000F GETNGBL R3 K43 - 0x8C100331, // 0010 GETMET R4 R1 K49 + 0xB80EDA00, // 000F GETNGBL R3 K109 + 0x8C100374, // 0010 GETMET R4 R1 K116 0x5C180400, // 0011 MOVE R6 R2 0x7C100400, // 0012 CALL R4 2 - 0x88140132, // 0013 GETMBR R5 R0 K50 + 0x88140175, // 0013 GETMBR R5 R0 K117 0x7C0C0400, // 0014 CALL R3 2 - 0x90026003, // 0015 SETMBR R0 K48 R3 - 0x90026734, // 0016 SETMBR R0 K51 K52 - 0xB80E2400, // 0017 GETNGBL R3 K18 - 0x8C0C0736, // 0018 GETMET R3 R3 K54 - 0x58140037, // 0019 LDCONST R5 K55 + 0x9002E603, // 0015 SETMBR R0 K115 R3 + 0x90020707, // 0016 SETMBR R0 K3 K7 + 0xB80E5600, // 0017 GETNGBL R3 K43 + 0x8C0C075A, // 0018 GETMET R3 R3 K90 + 0x58140077, // 0019 LDCONST R5 K119 0x7C0C0400, // 001A CALL R3 2 - 0x90026A03, // 001B SETMBR R0 K53 R3 - 0x8C0C0138, // 001C GETMET R3 R0 K56 - 0x58140039, // 001D LDCONST R5 K57 + 0x9002EC03, // 001B SETMBR R0 K118 R3 + 0x8C0C0178, // 001C GETMET R3 R0 K120 + 0x58140079, // 001D LDCONST R5 K121 0x84180000, // 001E CLOSURE R6 P0 0x7C0C0600, // 001F CALL R3 3 0xA0000000, // 0020 CLOSE R0 @@ -843,247 +1762,9 @@ be_local_closure(class_Tasmota_init, /* name */ /******************************************************************** -** Solidified function: remove_driver +** Solidified function: defer ********************************************************************/ -be_local_closure(class_Tasmota_remove_driver, /* name */ - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_remove_driver, - &be_const_str_solidified, - ( &(const binstruction[14]) { /* code */ - 0x8808011D, // 0000 GETMBR R2 R0 K29 - 0x780A000A, // 0001 JMPF R2 #000D - 0x8808011D, // 0002 GETMBR R2 R0 K29 - 0x8C08051E, // 0003 GETMET R2 R2 K30 - 0x5C100200, // 0004 MOVE R4 R1 - 0x7C080400, // 0005 CALL R2 2 - 0x4C0C0000, // 0006 LDNIL R3 - 0x200C0403, // 0007 NE R3 R2 R3 - 0x780E0003, // 0008 JMPF R3 #000D - 0x880C011D, // 0009 GETMBR R3 R0 K29 - 0x8C0C073A, // 000A GETMET R3 R3 K58 - 0x5C140400, // 000B MOVE R5 R2 - 0x7C0C0400, // 000C CALL R3 2 - 0x80000000, // 000D RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: compile -********************************************************************/ -be_local_closure(class_Tasmota_compile, /* name */ - be_nested_proto( - 12, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_compile, - &be_const_str_solidified, - ( &(const binstruction[85]) { /* code */ - 0xA40A7600, // 0000 IMPORT R2 K59 - 0x8C0C053C, // 0001 GETMET R3 R2 K60 - 0x5C140200, // 0002 MOVE R5 R1 - 0x5818003D, // 0003 LDCONST R6 K61 - 0x7C0C0600, // 0004 CALL R3 3 - 0x740E0007, // 0005 JMPT R3 #000E - 0x600C0001, // 0006 GETGBL R3 G1 - 0x60100018, // 0007 GETGBL R4 G24 - 0x5814003E, // 0008 LDCONST R5 K62 - 0x5C180200, // 0009 MOVE R6 R1 - 0x7C100400, // 000A CALL R4 2 - 0x7C0C0200, // 000B CALL R3 1 - 0x500C0000, // 000C LDBOOL R3 0 0 - 0x80040600, // 000D RET 1 R3 - 0x8C0C051E, // 000E GETMET R3 R2 K30 - 0x5C140200, // 000F MOVE R5 R1 - 0x5818003F, // 0010 LDCONST R6 K63 - 0x7C0C0600, // 0011 CALL R3 3 - 0x240C0701, // 0012 GT R3 R3 K1 - 0x780E0006, // 0013 JMPF R3 #001B - 0x600C0001, // 0014 GETGBL R3 G1 - 0x60100018, // 0015 GETGBL R4 G24 - 0x58140040, // 0016 LDCONST R5 K64 - 0x7C100200, // 0017 CALL R4 1 - 0x7C0C0200, // 0018 CALL R3 1 - 0x500C0000, // 0019 LDBOOL R3 0 0 - 0x80040600, // 001A RET 1 R3 - 0x4C0C0000, // 001B LDNIL R3 - 0xA8020012, // 001C EXBLK 0 #0030 - 0x6010000D, // 001D GETGBL R4 G13 - 0x5C140200, // 001E MOVE R5 R1 - 0x58180041, // 001F LDCONST R6 K65 - 0x501C0200, // 0020 LDBOOL R7 1 0 - 0x7C100600, // 0021 CALL R4 3 - 0x5C0C0800, // 0022 MOVE R3 R4 - 0x4C100000, // 0023 LDNIL R4 - 0x1C100604, // 0024 EQ R4 R3 R4 - 0x78120007, // 0025 JMPF R4 #002E - 0x60100001, // 0026 GETGBL R4 G1 - 0x60140018, // 0027 GETGBL R5 G24 - 0x58180042, // 0028 LDCONST R6 K66 - 0x7C140200, // 0029 CALL R5 1 - 0x7C100200, // 002A CALL R4 1 - 0x50100000, // 002B LDBOOL R4 0 0 - 0xA8040001, // 002C EXBLK 1 1 - 0x80040800, // 002D RET 1 R4 - 0xA8040001, // 002E EXBLK 1 1 - 0x7002000D, // 002F JMP #003E - 0xAC100002, // 0030 CATCH R4 0 2 - 0x7002000A, // 0031 JMP #003D - 0x60180001, // 0032 GETGBL R6 G1 - 0x601C0018, // 0033 GETGBL R7 G24 - 0x58200043, // 0034 LDCONST R8 K67 - 0x5C240200, // 0035 MOVE R9 R1 - 0x5C280800, // 0036 MOVE R10 R4 - 0x5C2C0A00, // 0037 MOVE R11 R5 - 0x7C1C0800, // 0038 CALL R7 4 - 0x7C180200, // 0039 CALL R6 1 - 0x50180000, // 003A LDBOOL R6 0 0 - 0x80040C00, // 003B RET 1 R6 - 0x70020000, // 003C JMP #003E - 0xB0080000, // 003D RAISE 2 R0 R0 - 0x00100344, // 003E ADD R4 R1 K68 - 0xA8020005, // 003F EXBLK 0 #0046 - 0x8C140145, // 0040 GETMET R5 R0 K69 - 0x5C1C0800, // 0041 MOVE R7 R4 - 0x5C200600, // 0042 MOVE R8 R3 - 0x7C140600, // 0043 CALL R5 3 - 0xA8040001, // 0044 EXBLK 1 1 - 0x7002000C, // 0045 JMP #0053 - 0xAC140001, // 0046 CATCH R5 0 1 - 0x70020009, // 0047 JMP #0052 - 0x60180001, // 0048 GETGBL R6 G1 - 0x601C0018, // 0049 GETGBL R7 G24 - 0x58200046, // 004A LDCONST R8 K70 - 0x5C240800, // 004B MOVE R9 R4 - 0x5C280A00, // 004C MOVE R10 R5 - 0x7C1C0600, // 004D CALL R7 3 - 0x7C180200, // 004E CALL R6 1 - 0x50180000, // 004F LDBOOL R6 0 0 - 0x80040C00, // 0050 RET 1 R6 - 0x70020000, // 0051 JMP #0053 - 0xB0080000, // 0052 RAISE 2 R0 R0 - 0x50140200, // 0053 LDBOOL R5 1 0 - 0x80040A00, // 0054 RET 1 R5 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: add_cmd -********************************************************************/ -be_local_closure(class_Tasmota_add_cmd, /* name */ - be_nested_proto( - 6, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_add_cmd, - &be_const_str_solidified, - ( &(const binstruction[20]) { /* code */ - 0x8C0C0127, // 0000 GETMET R3 R0 K39 - 0x5C140400, // 0001 MOVE R5 R2 - 0x7C0C0400, // 0002 CALL R3 2 - 0x880C0147, // 0003 GETMBR R3 R0 K71 - 0x4C100000, // 0004 LDNIL R4 - 0x1C0C0604, // 0005 EQ R3 R3 R4 - 0x780E0002, // 0006 JMPF R3 #000A - 0x600C0013, // 0007 GETGBL R3 G19 - 0x7C0C0000, // 0008 CALL R3 0 - 0x90028E03, // 0009 SETMBR R0 K71 R3 - 0x600C0004, // 000A GETGBL R3 G4 - 0x5C100400, // 000B MOVE R4 R2 - 0x7C0C0200, // 000C CALL R3 1 - 0x1C0C0748, // 000D EQ R3 R3 K72 - 0x780E0002, // 000E JMPF R3 #0012 - 0x880C0147, // 000F GETMBR R3 R0 K71 - 0x980C0202, // 0010 SETIDX R3 R1 R2 - 0x70020000, // 0011 JMP #0013 - 0xB0063749, // 0012 RAISE 1 K27 K73 - 0x80000000, // 0013 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: run_timers -********************************************************************/ -be_local_closure(class_Tasmota_run_timers, /* name */ - be_nested_proto( - 7, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_run_timers, - &be_const_str_solidified, - ( &(const binstruction[27]) { /* code */ - 0x8C04014A, // 0000 GETMET R1 R0 K74 - 0x7C040200, // 0001 CALL R1 1 - 0x88040128, // 0002 GETMBR R1 R0 K40 - 0x78060015, // 0003 JMPF R1 #001A - 0x58040001, // 0004 LDCONST R1 K1 - 0x88080128, // 0005 GETMBR R2 R0 K40 - 0x8C080502, // 0006 GETMET R2 R2 K2 - 0x7C080200, // 0007 CALL R2 1 - 0x14080202, // 0008 LT R2 R1 R2 - 0x780A000F, // 0009 JMPF R2 #001A - 0x88080128, // 000A GETMBR R2 R0 K40 - 0x94080401, // 000B GETIDX R2 R2 R1 - 0x8C0C014B, // 000C GETMET R3 R0 K75 - 0x88140504, // 000D GETMBR R5 R2 K4 - 0x7C0C0400, // 000E CALL R3 2 - 0x780E0007, // 000F JMPF R3 #0018 - 0x880C0525, // 0010 GETMBR R3 R2 K37 - 0x88100128, // 0011 GETMBR R4 R0 K40 - 0x8C100916, // 0012 GETMET R4 R4 K22 - 0x5C180200, // 0013 MOVE R6 R1 - 0x7C100400, // 0014 CALL R4 2 - 0x5C100600, // 0015 MOVE R4 R3 - 0x7C100000, // 0016 CALL R4 0 - 0x70020000, // 0017 JMP #0019 - 0x00040305, // 0018 ADD R1 R1 K5 - 0x7001FFEA, // 0019 JMP #0005 - 0x80000000, // 001A RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: remove_cmd -********************************************************************/ -be_local_closure(class_Tasmota_remove_cmd, /* name */ +be_local_closure(class_Tasmota_defer, /* name */ be_nested_proto( 5, /* nstack */ 2, /* argc */ @@ -1094,16 +1775,24 @@ be_local_closure(class_Tasmota_remove_cmd, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_remove_cmd, + &be_const_str_defer, &be_const_str_solidified, - ( &(const binstruction[ 7]) { /* code */ - 0x88080147, // 0000 GETMBR R2 R0 K71 - 0x780A0003, // 0001 JMPF R2 #0006 - 0x88080147, // 0002 GETMBR R2 R0 K71 - 0x8C080516, // 0003 GETMET R2 R2 K22 - 0x5C100200, // 0004 MOVE R4 R1 - 0x7C080400, // 0005 CALL R2 2 - 0x80000000, // 0006 RET 0 + ( &(const binstruction[15]) { /* code */ + 0x8808016B, // 0000 GETMBR R2 R0 K107 + 0x4C0C0000, // 0001 LDNIL R3 + 0x1C080403, // 0002 EQ R2 R2 R3 + 0x780A0002, // 0003 JMPF R2 #0007 + 0x60080012, // 0004 GETGBL R2 G18 + 0x7C080000, // 0005 CALL R2 0 + 0x9002D602, // 0006 SETMBR R0 K107 R2 + 0x8808016B, // 0007 GETMBR R2 R0 K107 + 0x8C08051D, // 0008 GETMET R2 R2 K29 + 0x5C100200, // 0009 MOVE R4 R1 + 0x7C080400, // 000A CALL R2 2 + 0xB80A0400, // 000B GETNGBL R2 K2 + 0x8808052B, // 000C GETMBR R2 R2 K43 + 0x900AD92D, // 000D SETMBR R2 K108 K45 + 0x80000000, // 000E RET 0 }) ) ); @@ -1111,11 +1800,11 @@ be_local_closure(class_Tasmota_remove_cmd, /* name */ /******************************************************************** -** Solidified function: remove_cron +** Solidified function: next_cron ********************************************************************/ -be_local_closure(class_Tasmota_remove_cron, /* name */ +be_local_closure(class_Tasmota_next_cron, /* name */ be_nested_proto( - 7, /* nstack */ + 6, /* nstack */ 2, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -1124,323 +1813,26 @@ be_local_closure(class_Tasmota_remove_cron, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_remove_cron, + &be_const_str_next_cron, &be_const_str_solidified, - ( &(const binstruction[18]) { /* code */ - 0x88080100, // 0000 GETMBR R2 R0 K0 - 0x780A000E, // 0001 JMPF R2 #0011 - 0x580C0001, // 0002 LDCONST R3 K1 - 0x8C100502, // 0003 GETMET R4 R2 K2 + ( &(const binstruction[17]) { /* code */ + 0x88080139, // 0000 GETMBR R2 R0 K57 + 0x780A000D, // 0001 JMPF R2 #0010 + 0x580C0004, // 0002 LDCONST R3 K4 + 0x8C10052F, // 0003 GETMET R4 R2 K47 0x7C100200, // 0004 CALL R4 1 0x14100604, // 0005 LT R4 R3 R4 - 0x78120009, // 0006 JMPF R4 #0011 + 0x78120008, // 0006 JMPF R4 #0010 0x94100403, // 0007 GETIDX R4 R2 R3 - 0x88100903, // 0008 GETMBR R4 R4 K3 + 0x88100930, // 0008 GETMBR R4 R4 K48 0x1C100801, // 0009 EQ R4 R4 R1 - 0x78120003, // 000A JMPF R4 #000F - 0x8C100516, // 000B GETMET R4 R2 K22 - 0x5C180600, // 000C MOVE R6 R3 - 0x7C100400, // 000D CALL R4 2 - 0x70020000, // 000E JMP #0010 - 0x000C0705, // 000F ADD R3 R3 K5 - 0x7001FFF1, // 0010 JMP #0003 - 0x80000000, // 0011 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: remove_fast_loop -********************************************************************/ -be_local_closure(class_Tasmota_remove_fast_loop, /* name */ - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_remove_fast_loop, - &be_const_str_solidified, - ( &(const binstruction[15]) { /* code */ - 0x8808014C, // 0000 GETMBR R2 R0 K76 - 0x740A0000, // 0001 JMPT R2 #0003 - 0x80000400, // 0002 RET 0 - 0x8808014C, // 0003 GETMBR R2 R0 K76 - 0x8C08051E, // 0004 GETMET R2 R2 K30 - 0x5C100200, // 0005 MOVE R4 R1 - 0x7C080400, // 0006 CALL R2 2 - 0x4C0C0000, // 0007 LDNIL R3 - 0x200C0403, // 0008 NE R3 R2 R3 - 0x780E0003, // 0009 JMPF R3 #000E - 0x880C014C, // 000A GETMBR R3 R0 K76 - 0x8C0C0716, // 000B GETMET R3 R3 K22 - 0x5C140400, // 000C MOVE R5 R2 - 0x7C0C0400, // 000D CALL R3 2 - 0x80000000, // 000E RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: find_key_i -********************************************************************/ -be_local_closure(class_Tasmota_find_key_i, /* name */ - be_nested_proto( - 10, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_find_key_i, - &be_const_str_solidified, - ( &(const binstruction[30]) { /* code */ - 0xA40E7600, // 0000 IMPORT R3 K59 - 0x8C10074D, // 0001 GETMET R4 R3 K77 - 0x5C180400, // 0002 MOVE R6 R2 - 0x7C100400, // 0003 CALL R4 2 - 0x6014000F, // 0004 GETGBL R5 G15 - 0x5C180200, // 0005 MOVE R6 R1 - 0x601C0013, // 0006 GETGBL R7 G19 - 0x7C140400, // 0007 CALL R5 2 - 0x78160013, // 0008 JMPF R5 #001D - 0x60140010, // 0009 GETGBL R5 G16 - 0x8C18034E, // 000A GETMET R6 R1 K78 - 0x7C180200, // 000B CALL R6 1 - 0x7C140200, // 000C CALL R5 1 - 0xA802000B, // 000D EXBLK 0 #001A - 0x5C180A00, // 000E MOVE R6 R5 - 0x7C180000, // 000F CALL R6 0 - 0x8C1C074D, // 0010 GETMET R7 R3 K77 - 0x5C240C00, // 0011 MOVE R9 R6 - 0x7C1C0400, // 0012 CALL R7 2 - 0x1C1C0E04, // 0013 EQ R7 R7 R4 - 0x741E0001, // 0014 JMPT R7 #0017 - 0x1C1C054F, // 0015 EQ R7 R2 K79 - 0x781E0001, // 0016 JMPF R7 #0019 - 0xA8040001, // 0017 EXBLK 1 1 - 0x80040C00, // 0018 RET 1 R6 - 0x7001FFF3, // 0019 JMP #000E - 0x58140050, // 001A LDCONST R5 K80 - 0xAC140200, // 001B CATCH R5 1 0 - 0xB0080000, // 001C RAISE 2 R0 R0 - 0x80000000, // 001D RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: check_not_method -********************************************************************/ -be_local_closure(class_Tasmota_check_not_method, /* name */ - be_nested_proto( - 6, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_check_not_method, - &be_const_str_solidified, - ( &(const binstruction[15]) { /* code */ - 0xA40A5C00, // 0000 IMPORT R2 K46 - 0x600C0004, // 0001 GETGBL R3 G4 - 0x5C100200, // 0002 MOVE R4 R1 - 0x7C0C0200, // 0003 CALL R3 1 - 0x200C0748, // 0004 NE R3 R3 K72 - 0x780E0000, // 0005 JMPF R3 #0007 - 0xB006A352, // 0006 RAISE 1 K81 K82 - 0x8C0C0553, // 0007 GETMET R3 R2 K83 - 0x5C140200, // 0008 MOVE R5 R1 - 0x7C0C0400, // 0009 CALL R3 2 - 0x50100200, // 000A LDBOOL R4 1 0 - 0x1C0C0604, // 000B EQ R3 R3 R4 - 0x780E0000, // 000C JMPF R3 #000E - 0xB006A354, // 000D RAISE 1 K81 K84 - 0x80000000, // 000E RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: when_network_up -********************************************************************/ -be_local_closure(class_Tasmota_when_network_up, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_when_network_up, - &be_const_str_solidified, - ( &(const binstruction[23]) { /* code */ - 0x8C080127, // 0000 GETMET R2 R0 K39 - 0x5C100200, // 0001 MOVE R4 R1 - 0x7C080400, // 0002 CALL R2 2 - 0x8C080155, // 0003 GETMET R2 R0 K85 - 0x7C080200, // 0004 CALL R2 1 - 0x780A0002, // 0005 JMPF R2 #0009 - 0x5C080200, // 0006 MOVE R2 R1 - 0x7C080000, // 0007 CALL R2 0 - 0x7002000C, // 0008 JMP #0016 - 0x88080156, // 0009 GETMBR R2 R0 K86 - 0x4C0C0000, // 000A LDNIL R3 - 0x1C080403, // 000B EQ R2 R2 R3 - 0x780A0004, // 000C JMPF R2 #0012 - 0x60080012, // 000D GETGBL R2 G18 - 0x7C080000, // 000E CALL R2 0 - 0x400C0401, // 000F CONNECT R3 R2 R1 - 0x9002AC02, // 0010 SETMBR R0 K86 R2 - 0x70020003, // 0011 JMP #0016 - 0x88080156, // 0012 GETMBR R2 R0 K86 - 0x8C080511, // 0013 GETMET R2 R2 K17 - 0x5C100200, // 0014 MOVE R4 R1 - 0x7C080400, // 0015 CALL R2 2 - 0x80000000, // 0016 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: add_rule_once -********************************************************************/ -be_local_closure(class_Tasmota_add_rule_once, /* name */ - be_nested_proto( - 10, /* nstack */ - 4, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_add_rule_once, - &be_const_str_solidified, - ( &(const binstruction[ 7]) { /* code */ - 0x8C100157, // 0000 GETMET R4 R0 K87 - 0x5C180200, // 0001 MOVE R6 R1 - 0x5C1C0400, // 0002 MOVE R7 R2 - 0x5C200600, // 0003 MOVE R8 R3 - 0x50240200, // 0004 LDBOOL R9 1 0 - 0x7C100A00, // 0005 CALL R4 5 - 0x80000000, // 0006 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: exec_cmd -********************************************************************/ -be_local_closure(class_Tasmota_exec_cmd, /* name */ - be_nested_proto( - 12, /* nstack */ - 4, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_exec_cmd, - &be_const_str_solidified, - ( &(const binstruction[27]) { /* code */ - 0x88100147, // 0000 GETMBR R4 R0 K71 - 0x78120016, // 0001 JMPF R4 #0019 - 0x8C100158, // 0002 GETMET R4 R0 K88 - 0x88180147, // 0003 GETMBR R6 R0 K71 - 0x5C1C0200, // 0004 MOVE R7 R1 - 0x7C100600, // 0005 CALL R4 3 - 0x4C140000, // 0006 LDNIL R5 - 0x20140805, // 0007 NE R5 R4 R5 - 0x7816000F, // 0008 JMPF R5 #0019 - 0xA4164000, // 0009 IMPORT R5 K32 - 0x8C180B21, // 000A GETMET R6 R5 K33 - 0x5C200600, // 000B MOVE R8 R3 - 0x7C180400, // 000C CALL R6 2 - 0x8C1C0159, // 000D GETMET R7 R0 K89 - 0x5C240800, // 000E MOVE R9 R4 - 0x7C1C0400, // 000F CALL R7 2 - 0x881C0147, // 0010 GETMBR R7 R0 K71 - 0x941C0E04, // 0011 GETIDX R7 R7 R4 - 0x5C200800, // 0012 MOVE R8 R4 - 0x5C240400, // 0013 MOVE R9 R2 - 0x5C280600, // 0014 MOVE R10 R3 - 0x5C2C0C00, // 0015 MOVE R11 R6 - 0x7C1C0800, // 0016 CALL R7 4 - 0x501C0200, // 0017 LDBOOL R7 1 0 - 0x80040E00, // 0018 RET 1 R7 - 0x50100000, // 0019 LDBOOL R4 0 0 - 0x80040800, // 001A RET 1 R4 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: set_light -********************************************************************/ -be_local_closure(class_Tasmota_set_light, /* name */ - be_nested_proto( - 8, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_set_light, - &be_const_str_solidified, - ( &(const binstruction[18]) { /* code */ - 0x600C0001, // 0000 GETGBL R3 G1 - 0x5810005A, // 0001 LDCONST R4 K90 - 0x7C0C0200, // 0002 CALL R3 1 - 0xA40E1000, // 0003 IMPORT R3 K8 - 0x4C100000, // 0004 LDNIL R4 - 0x20100404, // 0005 NE R4 R2 R4 - 0x78120005, // 0006 JMPF R4 #000D - 0x8C10075B, // 0007 GETMET R4 R3 K91 - 0x5C180200, // 0008 MOVE R6 R1 - 0x5C1C0400, // 0009 MOVE R7 R2 - 0x7C100600, // 000A CALL R4 3 - 0x80040800, // 000B RET 1 R4 - 0x70020003, // 000C JMP #0011 - 0x8C10075B, // 000D GETMET R4 R3 K91 - 0x5C180200, // 000E MOVE R6 R1 - 0x7C100400, // 000F CALL R4 2 - 0x80040800, // 0010 RET 1 R4 - 0x80000000, // 0011 RET 0 + 0x78120002, // 000A JMPF R4 #000E + 0x94100403, // 000B GETIDX R4 R2 R3 + 0x8810093C, // 000C GETMBR R4 R4 K60 + 0x80040800, // 000D RET 1 R4 + 0x000C072D, // 000E ADD R3 R3 K45 + 0x7001FFF2, // 000F JMP #0003 + 0x80000000, // 0010 RET 0 }) ) ); @@ -1464,11 +1856,11 @@ be_local_closure(class_Tasmota_fast_loop, /* name */ &be_const_str_fast_loop, &be_const_str_solidified, ( &(const binstruction[15]) { /* code */ - 0x8804014C, // 0000 GETMBR R1 R0 K76 + 0x88040127, // 0000 GETMBR R1 R0 K39 0x5C080200, // 0001 MOVE R2 R1 0x740A0000, // 0002 JMPT R2 #0004 0x80000400, // 0003 RET 0 - 0x58080001, // 0004 LDCONST R2 K1 + 0x58080004, // 0004 LDCONST R2 K4 0x600C000C, // 0005 GETGBL R3 G12 0x5C100200, // 0006 MOVE R4 R1 0x7C0C0200, // 0007 CALL R3 1 @@ -1476,7 +1868,7 @@ be_local_closure(class_Tasmota_fast_loop, /* name */ 0x780E0003, // 0009 JMPF R3 #000E 0x940C0202, // 000A GETIDX R3 R1 R2 0x7C0C0000, // 000B CALL R3 0 - 0x00080505, // 000C ADD R2 R2 K5 + 0x0008052D, // 000C ADD R2 R2 K45 0x7001FFF6, // 000D JMP #0005 0x80000000, // 000E RET 0 }) @@ -1486,118 +1878,11 @@ be_local_closure(class_Tasmota_fast_loop, /* name */ /******************************************************************** -** Solidified function: run_cron +** Solidified function: unload_extension ********************************************************************/ -be_local_closure(class_Tasmota_run_cron, /* name */ - be_nested_proto( - 9, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_run_cron, - &be_const_str_solidified, - ( &(const binstruction[34]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x7806001E, // 0001 JMPF R1 #0021 - 0x58040001, // 0002 LDCONST R1 K1 - 0xB80AB800, // 0003 GETNGBL R2 K92 - 0x8C08055D, // 0004 GETMET R2 R2 K93 - 0x7C080200, // 0005 CALL R2 1 - 0x880C0100, // 0006 GETMBR R3 R0 K0 - 0x8C0C0702, // 0007 GETMET R3 R3 K2 - 0x7C0C0200, // 0008 CALL R3 1 - 0x140C0203, // 0009 LT R3 R1 R3 - 0x780E0015, // 000A JMPF R3 #0021 - 0x880C0100, // 000B GETMBR R3 R0 K0 - 0x940C0601, // 000C GETIDX R3 R3 R1 - 0x88100704, // 000D GETMBR R4 R3 K4 - 0x1C100901, // 000E EQ R4 R4 K1 - 0x78120003, // 000F JMPF R4 #0014 - 0x8C10075E, // 0010 GETMET R4 R3 K94 - 0x7C100200, // 0011 CALL R4 1 - 0x900E0804, // 0012 SETMBR R3 K4 R4 - 0x7002000A, // 0013 JMP #001F - 0x8C10074B, // 0014 GETMET R4 R3 K75 - 0x7C100200, // 0015 CALL R4 1 - 0x78120007, // 0016 JMPF R4 #001F - 0x88100725, // 0017 GETMBR R4 R3 K37 - 0x8C14075E, // 0018 GETMET R5 R3 K94 - 0x7C140200, // 0019 CALL R5 1 - 0x900E0805, // 001A SETMBR R3 K4 R5 - 0x5C180800, // 001B MOVE R6 R4 - 0x5C1C0400, // 001C MOVE R7 R2 - 0x5C200A00, // 001D MOVE R8 R5 - 0x7C180400, // 001E CALL R6 2 - 0x00040305, // 001F ADD R1 R1 K5 - 0x7001FFE4, // 0020 JMP #0006 - 0x80000000, // 0021 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: cmd -********************************************************************/ -be_local_closure(class_Tasmota_cmd, /* name */ +be_local_closure(class_Tasmota_unload_extension, /* name */ be_nested_proto( 8, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_cmd, - &be_const_str_solidified, - ( &(const binstruction[27]) { /* code */ - 0x880C011F, // 0000 GETMBR R3 R0 K31 - 0x50100200, // 0001 LDBOOL R4 1 0 - 0x90023E04, // 0002 SETMBR R0 K31 R4 - 0xB8121400, // 0003 GETNGBL R4 K10 - 0x88100912, // 0004 GETMBR R4 R4 K18 - 0x8810095F, // 0005 GETMBR R4 R4 K95 - 0x780A0004, // 0006 JMPF R2 #000C - 0x28140918, // 0007 GE R5 R4 K24 - 0x78160002, // 0008 JMPF R5 #000C - 0xB8161400, // 0009 GETNGBL R5 K10 - 0x88140B12, // 000A GETMBR R5 R5 K18 - 0x9016BF05, // 000B SETMBR R5 K95 K5 - 0x8C140160, // 000C GETMET R5 R0 K96 - 0x5C1C0200, // 000D MOVE R7 R1 - 0x7C140400, // 000E CALL R5 2 - 0x4C140000, // 000F LDNIL R5 - 0x8818011F, // 0010 GETMBR R6 R0 K31 - 0x501C0200, // 0011 LDBOOL R7 1 0 - 0x20180C07, // 0012 NE R6 R6 R7 - 0x781A0000, // 0013 JMPF R6 #0015 - 0x8814011F, // 0014 GETMBR R5 R0 K31 - 0x90023E03, // 0015 SETMBR R0 K31 R3 - 0x780A0002, // 0016 JMPF R2 #001A - 0xB81A1400, // 0017 GETNGBL R6 K10 - 0x88180D12, // 0018 GETMBR R6 R6 K18 - 0x901ABE04, // 0019 SETMBR R6 K95 R4 - 0x80040A00, // 001A RET 1 R5 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: time_str -********************************************************************/ -be_local_closure(class_Tasmota_time_str, /* name */ - be_nested_proto( - 11, /* nstack */ 2, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -1606,22 +1891,47 @@ be_local_closure(class_Tasmota_time_str, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_time_str, + &be_const_str_unload_extension, &be_const_str_solidified, - ( &(const binstruction[13]) { /* code */ - 0x8C080161, // 0000 GETMET R2 R0 K97 - 0x5C100200, // 0001 MOVE R4 R1 - 0x7C080400, // 0002 CALL R2 2 - 0x600C0018, // 0003 GETGBL R3 G24 - 0x58100062, // 0004 LDCONST R4 K98 - 0x94140563, // 0005 GETIDX R5 R2 K99 - 0x94180564, // 0006 GETIDX R6 R2 K100 - 0x941C0565, // 0007 GETIDX R7 R2 K101 - 0x94200566, // 0008 GETIDX R8 R2 K102 - 0x94240567, // 0009 GETIDX R9 R2 K103 - 0x94280568, // 000A GETIDX R10 R2 K104 - 0x7C0C0E00, // 000B CALL R3 7 - 0x80040600, // 000C RET 1 R3 + ( &(const binstruction[38]) { /* code */ + 0x8808014B, // 0000 GETMBR R2 R0 K75 + 0x4C0C0000, // 0001 LDNIL R3 + 0x1C080403, // 0002 EQ R2 R2 R3 + 0x780A0000, // 0003 JMPF R2 #0005 + 0x80000400, // 0004 RET 0 + 0x5C080200, // 0005 MOVE R2 R1 + 0x600C0004, // 0006 GETGBL R3 G4 + 0x5C100200, // 0007 MOVE R4 R1 + 0x7C0C0200, // 0008 CALL R3 1 + 0x1C0C0701, // 0009 EQ R3 R3 K1 + 0x780E0004, // 000A JMPF R3 #0010 + 0x880C014B, // 000B GETMBR R3 R0 K75 + 0x8C0C070C, // 000C GETMET R3 R3 K12 + 0x5C140200, // 000D MOVE R5 R1 + 0x7C0C0400, // 000E CALL R3 2 + 0x5C080600, // 000F MOVE R2 R3 + 0x600C0004, // 0010 GETGBL R3 G4 + 0x5C100400, // 0011 MOVE R4 R2 + 0x7C0C0200, // 0012 CALL R3 1 + 0x1C0C0757, // 0013 EQ R3 R3 K87 + 0x780E000A, // 0014 JMPF R3 #0020 + 0xA40EE000, // 0015 IMPORT R3 K112 + 0x8C10075A, // 0016 GETMET R4 R3 K90 + 0x5C180400, // 0017 MOVE R6 R2 + 0x581C007A, // 0018 LDCONST R7 K122 + 0x7C100600, // 0019 CALL R4 3 + 0x78120001, // 001A JMPF R4 #001D + 0x8C10057A, // 001B GETMET R4 R2 K122 + 0x7C100200, // 001C CALL R4 1 + 0x8C10017B, // 001D GETMET R4 R0 K123 + 0x5C180400, // 001E MOVE R6 R2 + 0x7C100400, // 001F CALL R4 2 + 0x4C040000, // 0020 LDNIL R1 + 0x4C080000, // 0021 LDNIL R2 + 0xB80E0400, // 0022 GETNGBL R3 K2 + 0x8C0C077C, // 0023 GETMET R3 R3 K124 + 0x7C0C0200, // 0024 CALL R3 1 + 0x80000000, // 0025 RET 0 }) ) ); @@ -1629,202 +1939,11 @@ be_local_closure(class_Tasmota_time_str, /* name */ /******************************************************************** -** Solidified function: event +** Solidified function: get_light ********************************************************************/ -be_local_closure(class_Tasmota_event, /* name */ - be_nested_proto( - 19, /* nstack */ - 6, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_event, - &be_const_str_solidified, - ( &(const binstruction[112]) { /* code */ - 0x1C180369, // 0000 EQ R6 R1 K105 - 0x781A0005, // 0001 JMPF R6 #0008 - 0x88180156, // 0002 GETMBR R6 R0 K86 - 0x781A0001, // 0003 JMPF R6 #0006 - 0x8C18016A, // 0004 GETMET R6 R0 K106 - 0x7C180200, // 0005 CALL R6 1 - 0x8C18016B, // 0006 GETMET R6 R0 K107 - 0x7C180200, // 0007 CALL R6 1 - 0x1C18036C, // 0008 EQ R6 R1 K108 - 0x781A0001, // 0009 JMPF R6 #000C - 0x8C18016D, // 000A GETMET R6 R0 K109 - 0x7C180200, // 000B CALL R6 1 - 0x50180000, // 000C LDBOOL R6 0 0 - 0x501C0000, // 000D LDBOOL R7 0 0 - 0x1C20036E, // 000E EQ R8 R1 K110 - 0x78220000, // 000F JMPF R8 #0011 - 0x501C0200, // 0010 LDBOOL R7 1 0 - 0x1C20036F, // 0011 EQ R8 R1 K111 - 0x78220006, // 0012 JMPF R8 #001A - 0x8C200170, // 0013 GETMET R8 R0 K112 - 0x5C280400, // 0014 MOVE R10 R2 - 0x5C2C0600, // 0015 MOVE R11 R3 - 0x5C300800, // 0016 MOVE R12 R4 - 0x7C200800, // 0017 CALL R8 4 - 0x80041000, // 0018 RET 1 R8 - 0x7002004F, // 0019 JMP #006A - 0x1C200371, // 001A EQ R8 R1 K113 - 0x78220004, // 001B JMPF R8 #0021 - 0x8C200172, // 001C GETMET R8 R0 K114 - 0x5C280800, // 001D MOVE R10 R4 - 0x7C200400, // 001E CALL R8 2 - 0x80041000, // 001F RET 1 R8 - 0x70020048, // 0020 JMP #006A - 0x1C200315, // 0021 EQ R8 R1 K21 - 0x78220007, // 0022 JMPF R8 #002B - 0x8C200173, // 0023 GETMET R8 R0 K115 - 0x5C280800, // 0024 MOVE R10 R4 - 0x602C0017, // 0025 GETGBL R11 G23 - 0x5C300600, // 0026 MOVE R12 R3 - 0x7C2C0200, // 0027 CALL R11 1 - 0x7C200600, // 0028 CALL R8 3 - 0x80041000, // 0029 RET 1 R8 - 0x7002003E, // 002A JMP #006A - 0x1C200374, // 002B EQ R8 R1 K116 - 0x78220003, // 002C JMPF R8 #0031 - 0x8C200174, // 002D GETMET R8 R0 K116 - 0x7C200200, // 002E CALL R8 1 - 0x80041000, // 002F RET 1 R8 - 0x70020038, // 0030 JMP #006A - 0x8820011D, // 0031 GETMBR R8 R0 K29 - 0x78220036, // 0032 JMPF R8 #006A - 0xA4225C00, // 0033 IMPORT R8 K46 - 0x58240001, // 0034 LDCONST R9 K1 - 0x6028000C, // 0035 GETGBL R10 G12 - 0x882C011D, // 0036 GETMBR R11 R0 K29 - 0x7C280200, // 0037 CALL R10 1 - 0x1428120A, // 0038 LT R10 R9 R10 - 0x782A002F, // 0039 JMPF R10 #006A - 0x8828011D, // 003A GETMBR R10 R0 K29 - 0x94281409, // 003B GETIDX R10 R10 R9 - 0x8C2C1109, // 003C GETMET R11 R8 K9 - 0x5C341400, // 003D MOVE R13 R10 - 0x5C380200, // 003E MOVE R14 R1 - 0x7C2C0600, // 003F CALL R11 3 - 0x60300004, // 0040 GETGBL R12 G4 - 0x5C341600, // 0041 MOVE R13 R11 - 0x7C300200, // 0042 CALL R12 1 - 0x1C301948, // 0043 EQ R12 R12 K72 - 0x78320022, // 0044 JMPF R12 #0068 - 0xA8020011, // 0045 EXBLK 0 #0058 - 0x5C301600, // 0046 MOVE R12 R11 - 0x5C341400, // 0047 MOVE R13 R10 - 0x5C380400, // 0048 MOVE R14 R2 - 0x5C3C0600, // 0049 MOVE R15 R3 - 0x5C400800, // 004A MOVE R16 R4 - 0x5C440A00, // 004B MOVE R17 R5 - 0x7C300A00, // 004C CALL R12 5 - 0x74320001, // 004D JMPT R12 #0050 - 0x741A0000, // 004E JMPT R6 #0050 - 0x50180001, // 004F LDBOOL R6 0 1 - 0x50180200, // 0050 LDBOOL R6 1 0 - 0x781A0003, // 0051 JMPF R6 #0056 - 0x5C300E00, // 0052 MOVE R12 R7 - 0x74320001, // 0053 JMPT R12 #0056 - 0xA8040001, // 0054 EXBLK 1 1 - 0x70020013, // 0055 JMP #006A - 0xA8040001, // 0056 EXBLK 1 1 - 0x7002000F, // 0057 JMP #0068 - 0xAC300002, // 0058 CATCH R12 0 2 - 0x7002000C, // 0059 JMP #0067 - 0x60380001, // 005A GETGBL R14 G1 - 0x603C0018, // 005B GETGBL R15 G24 - 0x58400075, // 005C LDCONST R16 K117 - 0x5C441800, // 005D MOVE R17 R12 - 0x5C481A00, // 005E MOVE R18 R13 - 0x7C3C0600, // 005F CALL R15 3 - 0x7C380200, // 0060 CALL R14 1 - 0x88380135, // 0061 GETMBR R14 R0 K53 - 0x783A0002, // 0062 JMPF R14 #0066 - 0xA43A6E00, // 0063 IMPORT R14 K55 - 0x8C3C1D76, // 0064 GETMET R15 R14 K118 - 0x7C3C0200, // 0065 CALL R15 1 - 0x70020000, // 0066 JMP #0068 - 0xB0080000, // 0067 RAISE 2 R0 R0 - 0x00241305, // 0068 ADD R9 R9 K5 - 0x7001FFCA, // 0069 JMP #0035 - 0x1C200377, // 006A EQ R8 R1 K119 - 0x78220002, // 006B JMPF R8 #006F - 0xA422F000, // 006C IMPORT R8 K120 - 0x8C241145, // 006D GETMET R9 R8 K69 - 0x7C240200, // 006E CALL R9 1 - 0x80040C00, // 006F RET 1 R6 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: wire_scan -********************************************************************/ -be_local_closure(class_Tasmota_wire_scan, /* name */ +be_local_closure(class_Tasmota_get_light, /* name */ be_nested_proto( 6, /* nstack */ - 3, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_wire_scan, - &be_const_str_solidified, - ( &(const binstruction[33]) { /* code */ - 0x4C0C0000, // 0000 LDNIL R3 - 0x200C0403, // 0001 NE R3 R2 R3 - 0x780E0005, // 0002 JMPF R3 #0009 - 0x8C0C0179, // 0003 GETMET R3 R0 K121 - 0x5C140400, // 0004 MOVE R5 R2 - 0x7C0C0400, // 0005 CALL R3 2 - 0x740E0001, // 0006 JMPT R3 #0009 - 0x4C0C0000, // 0007 LDNIL R3 - 0x80040600, // 0008 RET 1 R3 - 0x880C017A, // 0009 GETMBR R3 R0 K122 - 0x8C0C077B, // 000A GETMET R3 R3 K123 - 0x7C0C0200, // 000B CALL R3 1 - 0x780E0006, // 000C JMPF R3 #0014 - 0x880C017A, // 000D GETMBR R3 R0 K122 - 0x8C0C077C, // 000E GETMET R3 R3 K124 - 0x5C140200, // 000F MOVE R5 R1 - 0x7C0C0400, // 0010 CALL R3 2 - 0x780E0001, // 0011 JMPF R3 #0014 - 0x880C017A, // 0012 GETMBR R3 R0 K122 - 0x80040600, // 0013 RET 1 R3 - 0x880C017D, // 0014 GETMBR R3 R0 K125 - 0x8C0C077B, // 0015 GETMET R3 R3 K123 - 0x7C0C0200, // 0016 CALL R3 1 - 0x780E0006, // 0017 JMPF R3 #001F - 0x880C017D, // 0018 GETMBR R3 R0 K125 - 0x8C0C077C, // 0019 GETMET R3 R3 K124 - 0x5C140200, // 001A MOVE R5 R1 - 0x7C0C0400, // 001B CALL R3 2 - 0x780E0001, // 001C JMPF R3 #001F - 0x880C017D, // 001D GETMBR R3 R0 K125 - 0x80040600, // 001E RET 1 R3 - 0x4C0C0000, // 001F LDNIL R3 - 0x80040600, // 0020 RET 1 R3 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: exec_tele -********************************************************************/ -be_local_closure(class_Tasmota_exec_tele, /* name */ - be_nested_proto( - 12, /* nstack */ 2, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -1833,239 +1952,25 @@ be_local_closure(class_Tasmota_exec_tele, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_exec_tele, + &be_const_str_get_light, &be_const_str_solidified, - ( &(const binstruction[41]) { /* code */ - 0x88080114, // 0000 GETMBR R2 R0 K20 - 0x780A0024, // 0001 JMPF R2 #0027 - 0xA40A4000, // 0002 IMPORT R2 K32 - 0x8C0C0521, // 0003 GETMET R3 R2 K33 - 0x5C140200, // 0004 MOVE R5 R1 - 0x7C0C0400, // 0005 CALL R3 2 - 0x50100000, // 0006 LDBOOL R4 0 0 - 0x4C140000, // 0007 LDNIL R5 - 0x1C140605, // 0008 EQ R5 R3 R5 - 0x78160004, // 0009 JMPF R5 #000F - 0x8C140122, // 000A GETMET R5 R0 K34 - 0x001E4601, // 000B ADD R7 K35 R1 - 0x58200019, // 000C LDCONST R8 K25 - 0x7C140600, // 000D CALL R5 3 - 0x5C0C0200, // 000E MOVE R3 R1 - 0x60140013, // 000F GETGBL R5 G19 - 0x7C140000, // 0010 CALL R5 0 - 0x9816FC03, // 0011 SETIDX R5 K126 R3 - 0x5C0C0A00, // 0012 MOVE R3 R5 - 0x58140001, // 0013 LDCONST R5 K1 - 0x6018000C, // 0014 GETGBL R6 G12 - 0x881C0114, // 0015 GETMBR R7 R0 K20 - 0x7C180200, // 0016 CALL R6 1 - 0x14180A06, // 0017 LT R6 R5 R6 - 0x781A000C, // 0018 JMPF R6 #0026 - 0x88180114, // 0019 GETMBR R6 R0 K20 - 0x94180C05, // 001A GETIDX R6 R6 R5 - 0x8C1C0124, // 001B GETMET R7 R0 K36 - 0x5C240600, // 001C MOVE R9 R3 - 0x88280D04, // 001D GETMBR R10 R6 K4 - 0x882C0D25, // 001E GETMBR R11 R6 K37 - 0x7C1C0800, // 001F CALL R7 4 - 0x741E0001, // 0020 JMPT R7 #0023 - 0x74120000, // 0021 JMPT R4 #0023 - 0x50100001, // 0022 LDBOOL R4 0 1 - 0x50100200, // 0023 LDBOOL R4 1 0 - 0x00140B05, // 0024 ADD R5 R5 K5 - 0x7001FFED, // 0025 JMP #0014 - 0x80040800, // 0026 RET 1 R4 - 0x50080000, // 0027 LDBOOL R2 0 0 - 0x80040400, // 0028 RET 1 R2 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: add_rule -********************************************************************/ -be_local_closure(class_Tasmota_add_rule, /* name */ - be_nested_proto( - 12, /* nstack */ - 5, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_add_rule, - &be_const_str_solidified, - ( &(const binstruction[37]) { /* code */ - 0x8C140127, // 0000 GETMET R5 R0 K39 - 0x5C1C0400, // 0001 MOVE R7 R2 - 0x7C140400, // 0002 CALL R5 2 - 0x88140114, // 0003 GETMBR R5 R0 K20 - 0x4C180000, // 0004 LDNIL R6 - 0x1C140A06, // 0005 EQ R5 R5 R6 - 0x78160002, // 0006 JMPF R5 #000A - 0x60140012, // 0007 GETGBL R5 G18 - 0x7C140000, // 0008 CALL R5 0 - 0x90022805, // 0009 SETMBR R0 K20 R5 - 0x60140004, // 000A GETGBL R5 G4 - 0x5C180400, // 000B MOVE R6 R2 - 0x7C140200, // 000C CALL R5 1 - 0x1C140B48, // 000D EQ R5 R5 K72 - 0x78160013, // 000E JMPF R5 #0023 - 0x4C140000, // 000F LDNIL R5 - 0x20140605, // 0010 NE R5 R3 R5 - 0x78160003, // 0011 JMPF R5 #0016 - 0x8C14017F, // 0012 GETMET R5 R0 K127 - 0x5C1C0200, // 0013 MOVE R7 R1 - 0x5C200600, // 0014 MOVE R8 R3 - 0x7C140600, // 0015 CALL R5 3 - 0x88140114, // 0016 GETMBR R5 R0 K20 - 0x8C140B11, // 0017 GETMET R5 R5 K17 - 0xB81E5200, // 0018 GETNGBL R7 K41 - 0x88200180, // 0019 GETMBR R8 R0 K128 - 0x8C201181, // 001A GETMET R8 R8 K129 - 0x5C280200, // 001B MOVE R10 R1 - 0x7C200400, // 001C CALL R8 2 - 0x5C240400, // 001D MOVE R9 R2 - 0x5C280600, // 001E MOVE R10 R3 - 0x5C2C0800, // 001F MOVE R11 R4 - 0x7C1C0800, // 0020 CALL R7 4 - 0x7C140400, // 0021 CALL R5 2 - 0x70020000, // 0022 JMP #0024 - 0xB0063749, // 0023 RAISE 1 K27 K73 - 0x80000000, // 0024 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: add_fast_loop -********************************************************************/ -be_local_closure(class_Tasmota_add_fast_loop, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_add_fast_loop, - &be_const_str_solidified, - ( &(const binstruction[23]) { /* code */ - 0x8C080127, // 0000 GETMET R2 R0 K39 - 0x5C100200, // 0001 MOVE R4 R1 - 0x7C080400, // 0002 CALL R2 2 - 0x8808014C, // 0003 GETMBR R2 R0 K76 - 0x4C0C0000, // 0004 LDNIL R3 - 0x1C080403, // 0005 EQ R2 R2 R3 - 0x780A0002, // 0006 JMPF R2 #000A - 0x60080012, // 0007 GETGBL R2 G18 - 0x7C080000, // 0008 CALL R2 0 - 0x90029802, // 0009 SETMBR R0 K76 R2 - 0x60080004, // 000A GETGBL R2 G4 - 0x5C0C0200, // 000B MOVE R3 R1 - 0x7C080200, // 000C CALL R2 1 - 0x20080548, // 000D NE R2 R2 K72 - 0x780A0000, // 000E JMPF R2 #0010 - 0xB0063782, // 000F RAISE 1 K27 K130 - 0x88080112, // 0010 GETMBR R2 R0 K18 - 0x900B0705, // 0011 SETMBR R2 K131 K5 - 0x8808014C, // 0012 GETMBR R2 R0 K76 - 0x8C080511, // 0013 GETMET R2 R2 K17 - 0x5C100200, // 0014 MOVE R4 R1 - 0x7C080400, // 0015 CALL R2 2 - 0x80000000, // 0016 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: gc -********************************************************************/ -be_local_closure(class_Tasmota_gc, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_gc, - &be_const_str_solidified, - ( &(const binstruction[ 6]) { /* code */ - 0xA406E800, // 0000 IMPORT R1 K116 - 0x8C080384, // 0001 GETMET R2 R1 K132 + ( &(const binstruction[16]) { /* code */ + 0x60080001, // 0000 GETGBL R2 G1 + 0x580C007D, // 0001 LDCONST R3 K125 0x7C080200, // 0002 CALL R2 1 - 0x8C080385, // 0003 GETMET R2 R1 K133 - 0x7C080200, // 0004 CALL R2 1 - 0x80040400, // 0005 RET 1 R2 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: find_op -********************************************************************/ -be_local_closure(class_Tasmota_find_op, /* name */ - be_nested_proto( - 7, /* nstack */ - 2, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_find_op, - &be_const_str_solidified, - ( &(const binstruction[31]) { /* code */ - 0x8C080186, // 0000 GETMET R2 R0 K134 - 0x5C100200, // 0001 MOVE R4 R1 - 0x7C080400, // 0002 CALL R2 2 - 0x280C0501, // 0003 GE R3 R2 K1 - 0x780E0011, // 0004 JMPF R3 #0017 - 0x540E7FFE, // 0005 LDINT R3 32767 - 0x2C0C0403, // 0006 AND R3 R2 R3 - 0x5412000F, // 0007 LDINT R4 16 - 0x3C100404, // 0008 SHR R4 R2 R4 - 0x60140012, // 0009 GETGBL R5 G18 - 0x7C140000, // 000A CALL R5 0 - 0x04180705, // 000B SUB R6 R3 K5 - 0x401A0206, // 000C CONNECT R6 K1 R6 - 0x94180206, // 000D GETIDX R6 R1 R6 - 0x40180A06, // 000E CONNECT R6 R5 R6 - 0x04180905, // 000F SUB R6 R4 K5 - 0x40180606, // 0010 CONNECT R6 R3 R6 - 0x94180206, // 0011 GETIDX R6 R1 R6 - 0x40180A06, // 0012 CONNECT R6 R5 R6 - 0x40180987, // 0013 CONNECT R6 R4 K135 - 0x94180206, // 0014 GETIDX R6 R1 R6 - 0x40180A06, // 0015 CONNECT R6 R5 R6 - 0x80040A00, // 0016 RET 1 R5 - 0x600C0012, // 0017 GETGBL R3 G18 - 0x7C0C0000, // 0018 CALL R3 0 - 0x40100601, // 0019 CONNECT R4 R3 R1 - 0x4C100000, // 001A LDNIL R4 - 0x40100604, // 001B CONNECT R4 R3 R4 - 0x4C100000, // 001C LDNIL R4 - 0x40100604, // 001D CONNECT R4 R3 R4 - 0x80040600, // 001E RET 1 R3 + 0xA40A6E00, // 0003 IMPORT R2 K55 + 0x4C0C0000, // 0004 LDNIL R3 + 0x200C0203, // 0005 NE R3 R1 R3 + 0x780E0004, // 0006 JMPF R3 #000C + 0x8C0C0572, // 0007 GETMET R3 R2 K114 + 0x5C140200, // 0008 MOVE R5 R1 + 0x7C0C0400, // 0009 CALL R3 2 + 0x80040600, // 000A RET 1 R3 + 0x70020002, // 000B JMP #000F + 0x8C0C0572, // 000C GETMET R3 R2 K114 + 0x7C0C0200, // 000D CALL R3 1 + 0x80040600, // 000E RET 1 R3 + 0x80000000, // 000F RET 0 }) ) ); @@ -2348,178 +2253,183 @@ be_local_closure(class_Tasmota_load, /* name */ &be_ktab_class_Tasmota, /* shared constants */ &be_const_str_load, &be_const_str_solidified, - ( &(const binstruction[171]) { /* code */ + ( &(const binstruction[176]) { /* code */ 0x84080000, // 0000 CLOSURE R2 P0 0x840C0001, // 0001 CLOSURE R3 P1 0x84100002, // 0002 CLOSURE R4 P2 0x84140003, // 0003 CLOSURE R5 P3 0x84180004, // 0004 CLOSURE R6 P4 0x841C0005, // 0005 CLOSURE R7 P5 - 0xA4227600, // 0006 IMPORT R8 K59 - 0xA4271000, // 0007 IMPORT R9 K136 + 0xA4220200, // 0006 IMPORT R8 K1 + 0xA426FC00, // 0007 IMPORT R9 K126 0x6028000C, // 0008 GETGBL R10 G12 0x5C2C0200, // 0009 MOVE R11 R1 0x7C280200, // 000A CALL R10 1 - 0x1C281501, // 000B EQ R10 R10 K1 + 0x1C281504, // 000B EQ R10 R10 K4 0x782A0002, // 000C JMPF R10 #0010 0x50280000, // 000D LDBOOL R10 0 0 0xA0000000, // 000E CLOSE R0 0x80041400, // 000F RET 1 R10 - 0x8C281189, // 0010 GETMET R10 R8 K137 + 0x8C28117F, // 0010 GETMET R10 R8 K127 0x5C300200, // 0011 MOVE R12 R1 - 0x5834008A, // 0012 LDCONST R13 K138 + 0x58340005, // 0012 LDCONST R13 K5 0x7C280600, // 0013 CALL R10 3 0x742A0000, // 0014 JMPT R10 #0016 - 0x00071401, // 0015 ADD R1 K138 R1 - 0x8C28113C, // 0016 GETMET R10 R8 K60 + 0x00060A01, // 0015 ADD R1 K5 R1 + 0x8C281112, // 0016 GETMET R10 R8 K18 0x5C300200, // 0017 MOVE R12 R1 - 0x5834008B, // 0018 LDCONST R13 K139 + 0x58340013, // 0018 LDCONST R13 K19 0x7C280600, // 0019 CALL R10 3 - 0x782A0000, // 001A JMPF R10 #001C - 0x0004038C, // 001B ADD R1 R1 K140 - 0x8C28111E, // 001C GETMET R10 R8 K30 - 0x5C300200, // 001D MOVE R12 R1 - 0x5834003F, // 001E LDCONST R13 K63 - 0x7C280600, // 001F CALL R10 3 - 0x242C1501, // 0020 GT R11 R10 K1 - 0x782E0003, // 0021 JMPF R11 #0026 - 0x04301505, // 0022 SUB R12 R10 K5 - 0x4032020C, // 0023 CONNECT R12 K1 R12 - 0x9430020C, // 0024 GETIDX R12 R1 R12 - 0x70020000, // 0025 JMP #0027 - 0x5C300200, // 0026 MOVE R12 R1 - 0x782E0003, // 0027 JMPF R11 #002C - 0x00341505, // 0028 ADD R13 R10 K5 - 0x40341B87, // 0029 CONNECT R13 R13 K135 - 0x9434020D, // 002A GETIDX R13 R1 R13 - 0x70020000, // 002B JMP #002D - 0x5C340200, // 002C MOVE R13 R1 - 0x8C38111E, // 002D GETMET R14 R8 K30 - 0x5C401A00, // 002E MOVE R16 R13 - 0x5844008D, // 002F LDCONST R17 K141 - 0x7C380600, // 0030 CALL R14 3 - 0x14381D01, // 0031 LT R14 R14 K1 - 0x783A0001, // 0032 JMPF R14 #0035 - 0x0004033D, // 0033 ADD R1 R1 K61 - 0x00341B3D, // 0034 ADD R13 R13 K61 - 0x8C38113C, // 0035 GETMET R14 R8 K60 - 0x5C401A00, // 0036 MOVE R16 R13 - 0x5844003D, // 0037 LDCONST R17 K61 - 0x7C380600, // 0038 CALL R14 3 - 0x8C3C113C, // 0039 GETMET R15 R8 K60 - 0x5C441A00, // 003A MOVE R17 R13 - 0x5848008E, // 003B LDCONST R18 K142 - 0x7C3C0600, // 003C CALL R15 3 - 0x783E0001, // 003D JMPF R15 #0040 - 0x5C400200, // 003E MOVE R16 R1 - 0x70020000, // 003F JMP #0041 - 0x00400344, // 0040 ADD R16 R1 K68 - 0x5C441C00, // 0041 MOVE R17 R14 - 0x74460007, // 0042 JMPT R17 #004B - 0x5C441E00, // 0043 MOVE R17 R15 - 0x74460005, // 0044 JMPT R17 #004B - 0x60440001, // 0045 GETGBL R17 G1 - 0x5848008F, // 0046 LDCONST R18 K143 - 0x7C440200, // 0047 CALL R17 1 - 0x50440000, // 0048 LDBOOL R17 0 0 - 0xA0000000, // 0049 CLOSE R0 - 0x80042200, // 004A RET 1 R17 - 0x50440000, // 004B LDBOOL R17 0 0 - 0x783E0008, // 004C JMPF R15 #0056 - 0x8C481390, // 004D GETMET R18 R9 K144 - 0x5C502000, // 004E MOVE R20 R16 - 0x7C480400, // 004F CALL R18 2 - 0x744A0002, // 0050 JMPT R18 #0054 - 0x50480000, // 0051 LDBOOL R18 0 0 - 0xA0000000, // 0052 CLOSE R0 - 0x80042400, // 0053 RET 1 R18 - 0x50440200, // 0054 LDBOOL R17 1 0 - 0x70020014, // 0055 JMP #006B - 0x8C481390, // 0056 GETMET R18 R9 K144 - 0x5C500200, // 0057 MOVE R20 R1 - 0x7C480400, // 0058 CALL R18 2 - 0x784A0007, // 0059 JMPF R18 #0062 - 0x8C481390, // 005A GETMET R18 R9 K144 - 0x5C502000, // 005B MOVE R20 R16 - 0x7C480400, // 005C CALL R18 2 - 0x784A0002, // 005D JMPF R18 #0061 - 0x5C480A00, // 005E MOVE R18 R5 - 0x5C4C2000, // 005F MOVE R19 R16 - 0x7C480200, // 0060 CALL R18 1 - 0x70020008, // 0061 JMP #006B - 0x8C481390, // 0062 GETMET R18 R9 K144 - 0x5C502000, // 0063 MOVE R20 R16 - 0x7C480400, // 0064 CALL R18 2 - 0x784A0001, // 0065 JMPF R18 #0068 - 0x50440200, // 0066 LDBOOL R17 1 0 - 0x70020002, // 0067 JMP #006B - 0x50480000, // 0068 LDBOOL R18 0 0 - 0xA0000000, // 0069 CLOSE R0 - 0x80042400, // 006A RET 1 R18 - 0x782E0005, // 006B JMPF R11 #0072 - 0x0048193F, // 006C ADD R18 R12 K63 - 0x90026612, // 006D SETMBR R0 K51 R18 - 0x5C480400, // 006E MOVE R18 R2 - 0x884C0133, // 006F GETMBR R19 R0 K51 - 0x7C480200, // 0070 CALL R18 1 - 0x70020000, // 0071 JMP #0073 - 0x90026734, // 0072 SETMBR R0 K51 K52 - 0x4C480000, // 0073 LDNIL R18 - 0x78460025, // 0074 JMPF R17 #009B - 0x5C4C0800, // 0075 MOVE R19 R4 - 0x5C502000, // 0076 MOVE R20 R16 - 0x7C4C0200, // 0077 CALL R19 1 - 0x50500200, // 0078 LDBOOL R20 1 0 - 0x4C540000, // 0079 LDNIL R21 - 0x1C542615, // 007A EQ R21 R19 R21 - 0x78560007, // 007B JMPF R21 #0084 - 0x60540001, // 007C GETGBL R21 G1 - 0x60580018, // 007D GETGBL R22 G24 - 0x585C0091, // 007E LDCONST R23 K145 - 0x5C602000, // 007F MOVE R24 R16 - 0x7C580400, // 0080 CALL R22 2 - 0x7C540200, // 0081 CALL R21 1 - 0x50500000, // 0082 LDBOOL R20 0 0 - 0x7002000A, // 0083 JMP #008F - 0x54560003, // 0084 LDINT R21 4 - 0x20542615, // 0085 NE R21 R19 R21 - 0x78560007, // 0086 JMPF R21 #008F - 0x60540001, // 0087 GETGBL R21 G1 - 0x60580018, // 0088 GETGBL R22 G24 - 0x585C0092, // 0089 LDCONST R23 K146 - 0x5C602000, // 008A MOVE R24 R16 - 0x5C642600, // 008B MOVE R25 R19 - 0x7C580600, // 008C CALL R22 3 - 0x7C540200, // 008D CALL R21 1 - 0x50500000, // 008E LDBOOL R20 0 0 - 0x78520003, // 008F JMPF R20 #0094 - 0x5C540C00, // 0090 MOVE R21 R6 - 0x5C582000, // 0091 MOVE R22 R16 + 0x742A0004, // 001A JMPT R10 #0020 + 0x8C281112, // 001B GETMET R10 R8 K18 + 0x5C300200, // 001C MOVE R12 R1 + 0x58340080, // 001D LDCONST R13 K128 + 0x7C280600, // 001E CALL R10 3 + 0x782A0000, // 001F JMPF R10 #0021 + 0x00040381, // 0020 ADD R1 R1 K129 + 0x8C28110C, // 0021 GETMET R10 R8 K12 + 0x5C300200, // 0022 MOVE R12 R1 + 0x58340006, // 0023 LDCONST R13 K6 + 0x7C280600, // 0024 CALL R10 3 + 0x242C1504, // 0025 GT R11 R10 K4 + 0x782E0003, // 0026 JMPF R11 #002B + 0x0430152D, // 0027 SUB R12 R10 K45 + 0x4032080C, // 0028 CONNECT R12 K4 R12 + 0x9430020C, // 0029 GETIDX R12 R1 R12 + 0x70020000, // 002A JMP #002C + 0x5C300200, // 002B MOVE R12 R1 + 0x782E0003, // 002C JMPF R11 #0031 + 0x0034152D, // 002D ADD R13 R10 K45 + 0x40341B82, // 002E CONNECT R13 R13 K130 + 0x9434020D, // 002F GETIDX R13 R1 R13 + 0x70020000, // 0030 JMP #0032 + 0x5C340200, // 0031 MOVE R13 R1 + 0x8C38110C, // 0032 GETMET R14 R8 K12 + 0x5C401A00, // 0033 MOVE R16 R13 + 0x58440083, // 0034 LDCONST R17 K131 + 0x7C380600, // 0035 CALL R14 3 + 0x14381D04, // 0036 LT R14 R14 K4 + 0x783A0001, // 0037 JMPF R14 #003A + 0x0004031E, // 0038 ADD R1 R1 K30 + 0x00341B1E, // 0039 ADD R13 R13 K30 + 0x8C381112, // 003A GETMET R14 R8 K18 + 0x5C401A00, // 003B MOVE R16 R13 + 0x5844001E, // 003C LDCONST R17 K30 + 0x7C380600, // 003D CALL R14 3 + 0x8C3C1112, // 003E GETMET R15 R8 K18 + 0x5C441A00, // 003F MOVE R17 R13 + 0x58480084, // 0040 LDCONST R18 K132 + 0x7C3C0600, // 0041 CALL R15 3 + 0x783E0001, // 0042 JMPF R15 #0045 + 0x5C400200, // 0043 MOVE R16 R1 + 0x70020000, // 0044 JMP #0046 + 0x00400324, // 0045 ADD R16 R1 K36 + 0x5C441C00, // 0046 MOVE R17 R14 + 0x74460007, // 0047 JMPT R17 #0050 + 0x5C441E00, // 0048 MOVE R17 R15 + 0x74460005, // 0049 JMPT R17 #0050 + 0x60440001, // 004A GETGBL R17 G1 + 0x58480085, // 004B LDCONST R18 K133 + 0x7C440200, // 004C CALL R17 1 + 0x50440000, // 004D LDBOOL R17 0 0 + 0xA0000000, // 004E CLOSE R0 + 0x80042200, // 004F RET 1 R17 + 0x50440000, // 0050 LDBOOL R17 0 0 + 0x783E0008, // 0051 JMPF R15 #005B + 0x8C481386, // 0052 GETMET R18 R9 K134 + 0x5C502000, // 0053 MOVE R20 R16 + 0x7C480400, // 0054 CALL R18 2 + 0x744A0002, // 0055 JMPT R18 #0059 + 0x50480000, // 0056 LDBOOL R18 0 0 + 0xA0000000, // 0057 CLOSE R0 + 0x80042400, // 0058 RET 1 R18 + 0x50440200, // 0059 LDBOOL R17 1 0 + 0x70020014, // 005A JMP #0070 + 0x8C481386, // 005B GETMET R18 R9 K134 + 0x5C500200, // 005C MOVE R20 R1 + 0x7C480400, // 005D CALL R18 2 + 0x784A0007, // 005E JMPF R18 #0067 + 0x8C481386, // 005F GETMET R18 R9 K134 + 0x5C502000, // 0060 MOVE R20 R16 + 0x7C480400, // 0061 CALL R18 2 + 0x784A0002, // 0062 JMPF R18 #0066 + 0x5C480A00, // 0063 MOVE R18 R5 + 0x5C4C2000, // 0064 MOVE R19 R16 + 0x7C480200, // 0065 CALL R18 1 + 0x70020008, // 0066 JMP #0070 + 0x8C481386, // 0067 GETMET R18 R9 K134 + 0x5C502000, // 0068 MOVE R20 R16 + 0x7C480400, // 0069 CALL R18 2 + 0x784A0001, // 006A JMPF R18 #006D + 0x50440200, // 006B LDBOOL R17 1 0 + 0x70020002, // 006C JMP #0070 + 0x50480000, // 006D LDBOOL R18 0 0 + 0xA0000000, // 006E CLOSE R0 + 0x80042400, // 006F RET 1 R18 + 0x782E0005, // 0070 JMPF R11 #0077 + 0x00481906, // 0071 ADD R18 R12 K6 + 0x90020612, // 0072 SETMBR R0 K3 R18 + 0x5C480400, // 0073 MOVE R18 R2 + 0x884C0103, // 0074 GETMBR R19 R0 K3 + 0x7C480200, // 0075 CALL R18 1 + 0x70020000, // 0076 JMP #0078 + 0x90020707, // 0077 SETMBR R0 K3 K7 + 0x4C480000, // 0078 LDNIL R18 + 0x78460025, // 0079 JMPF R17 #00A0 + 0x5C4C0800, // 007A MOVE R19 R4 + 0x5C502000, // 007B MOVE R20 R16 + 0x7C4C0200, // 007C CALL R19 1 + 0x50500200, // 007D LDBOOL R20 1 0 + 0x4C540000, // 007E LDNIL R21 + 0x1C542615, // 007F EQ R21 R19 R21 + 0x78560007, // 0080 JMPF R21 #0089 + 0x60540001, // 0081 GETGBL R21 G1 + 0x60580018, // 0082 GETGBL R22 G24 + 0x585C0087, // 0083 LDCONST R23 K135 + 0x5C602000, // 0084 MOVE R24 R16 + 0x7C580400, // 0085 CALL R22 2 + 0x7C540200, // 0086 CALL R21 1 + 0x50500000, // 0087 LDBOOL R20 0 0 + 0x7002000A, // 0088 JMP #0094 + 0x54560003, // 0089 LDINT R21 4 + 0x20542615, // 008A NE R21 R19 R21 + 0x78560007, // 008B JMPF R21 #0094 + 0x60540001, // 008C GETGBL R21 G1 + 0x60580018, // 008D GETGBL R22 G24 + 0x585C0088, // 008E LDCONST R23 K136 + 0x5C602000, // 008F MOVE R24 R16 + 0x5C642600, // 0090 MOVE R25 R19 + 0x7C580600, // 0091 CALL R22 3 0x7C540200, // 0092 CALL R21 1 - 0x5C482A00, // 0093 MOVE R18 R21 - 0x4C540000, // 0094 LDNIL R21 - 0x1C542415, // 0095 EQ R21 R18 R21 - 0x78560003, // 0096 JMPF R21 #009B - 0x5C540A00, // 0097 MOVE R21 R5 - 0x5C582000, // 0098 MOVE R22 R16 - 0x7C540200, // 0099 CALL R21 1 - 0x50440000, // 009A LDBOOL R17 0 0 - 0x5C4C2200, // 009B MOVE R19 R17 - 0x744E0003, // 009C JMPT R19 #00A1 - 0x5C4C0C00, // 009D MOVE R19 R6 - 0x5C500200, // 009E MOVE R20 R1 - 0x7C4C0200, // 009F CALL R19 1 - 0x5C482600, // 00A0 MOVE R18 R19 - 0x5C4C0E00, // 00A1 MOVE R19 R7 - 0x5C502400, // 00A2 MOVE R20 R18 - 0x7C4C0200, // 00A3 CALL R19 1 - 0x782E0003, // 00A4 JMPF R11 #00A9 - 0x5C500600, // 00A5 MOVE R20 R3 - 0x0054193F, // 00A6 ADD R21 R12 K63 - 0x7C500200, // 00A7 CALL R20 1 - 0x90026734, // 00A8 SETMBR R0 K51 K52 - 0xA0000000, // 00A9 CLOSE R0 - 0x80042600, // 00AA RET 1 R19 + 0x50500000, // 0093 LDBOOL R20 0 0 + 0x78520003, // 0094 JMPF R20 #0099 + 0x5C540C00, // 0095 MOVE R21 R6 + 0x5C582000, // 0096 MOVE R22 R16 + 0x7C540200, // 0097 CALL R21 1 + 0x5C482A00, // 0098 MOVE R18 R21 + 0x4C540000, // 0099 LDNIL R21 + 0x1C542415, // 009A EQ R21 R18 R21 + 0x78560003, // 009B JMPF R21 #00A0 + 0x5C540A00, // 009C MOVE R21 R5 + 0x5C582000, // 009D MOVE R22 R16 + 0x7C540200, // 009E CALL R21 1 + 0x50440000, // 009F LDBOOL R17 0 0 + 0x5C4C2200, // 00A0 MOVE R19 R17 + 0x744E0003, // 00A1 JMPT R19 #00A6 + 0x5C4C0C00, // 00A2 MOVE R19 R6 + 0x5C500200, // 00A3 MOVE R20 R1 + 0x7C4C0200, // 00A4 CALL R19 1 + 0x5C482600, // 00A5 MOVE R18 R19 + 0x5C4C0E00, // 00A6 MOVE R19 R7 + 0x5C502400, // 00A7 MOVE R20 R18 + 0x7C4C0200, // 00A8 CALL R19 1 + 0x782E0003, // 00A9 JMPF R11 #00AE + 0x5C500600, // 00AA MOVE R20 R3 + 0x00541906, // 00AB ADD R21 R12 K6 + 0x7C500200, // 00AC CALL R20 1 + 0x90020707, // 00AD SETMBR R0 K3 K7 + 0xA0000000, // 00AE CLOSE R0 + 0x80042600, // 00AF RET 1 R19 }) ) ); @@ -2527,12 +2437,12 @@ be_local_closure(class_Tasmota_load, /* name */ /******************************************************************** -** Solidified function: urlfetch +** Solidified function: add_rule ********************************************************************/ -be_local_closure(class_Tasmota_urlfetch, /* name */ +be_local_closure(class_Tasmota_add_rule, /* name */ be_nested_proto( - 10, /* nstack */ - 3, /* argc */ + 12, /* nstack */ + 5, /* argc */ 10, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ @@ -2540,57 +2450,46 @@ be_local_closure(class_Tasmota_urlfetch, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_urlfetch, + &be_const_str_add_rule, &be_const_str_solidified, - ( &(const binstruction[48]) { /* code */ - 0x4C0C0000, // 0000 LDNIL R3 - 0x1C0C0403, // 0001 EQ R3 R2 R3 - 0x780E000D, // 0002 JMPF R3 #0011 - 0xA40E7600, // 0003 IMPORT R3 K59 - 0x8C100793, // 0004 GETMET R4 R3 K147 - 0x5C180200, // 0005 MOVE R6 R1 - 0x581C008A, // 0006 LDCONST R7 K138 - 0x7C100600, // 0007 CALL R4 3 - 0x8C10093A, // 0008 GETMET R4 R4 K58 - 0x7C100200, // 0009 CALL R4 1 - 0x5C080800, // 000A MOVE R2 R4 - 0x6010000C, // 000B GETGBL R4 G12 - 0x5C140400, // 000C MOVE R5 R2 - 0x7C100200, // 000D CALL R4 1 - 0x1C100901, // 000E EQ R4 R4 K1 - 0x78120000, // 000F JMPF R4 #0011 - 0x58080094, // 0010 LDCONST R2 K148 - 0xB80F2A00, // 0011 GETNGBL R3 K149 - 0x7C0C0000, // 0012 CALL R3 0 - 0x8C100796, // 0013 GETMET R4 R3 K150 - 0x50180200, // 0014 LDBOOL R6 1 0 - 0x7C100400, // 0015 CALL R4 2 - 0x8C100797, // 0016 GETMET R4 R3 K151 - 0x5C180200, // 0017 MOVE R6 R1 - 0x7C100400, // 0018 CALL R4 2 - 0x8C100798, // 0019 GETMET R4 R3 K152 - 0x7C100200, // 001A CALL R4 1 - 0x541600C7, // 001B LDINT R5 200 - 0x20140805, // 001C NE R5 R4 R5 - 0x78160004, // 001D JMPF R5 #0023 - 0x60140008, // 001E GETGBL R5 G8 - 0x5C180800, // 001F MOVE R6 R4 - 0x7C140200, // 0020 CALL R5 1 - 0x00173205, // 0021 ADD R5 K153 R5 - 0xB0073405, // 0022 RAISE 1 K154 R5 - 0x8C14079B, // 0023 GETMET R5 R3 K155 - 0x5C1C0400, // 0024 MOVE R7 R2 - 0x7C140400, // 0025 CALL R5 2 - 0x8C18079C, // 0026 GETMET R6 R3 K156 - 0x7C180200, // 0027 CALL R6 1 - 0x8C180122, // 0028 GETMET R6 R0 K34 - 0x60200008, // 0029 GETGBL R8 G8 - 0x5C240A00, // 002A MOVE R9 R5 - 0x7C200200, // 002B CALL R8 1 - 0x00233A08, // 002C ADD R8 K157 R8 - 0x58240019, // 002D LDCONST R9 K25 - 0x7C180600, // 002E CALL R6 3 - 0x80040800, // 002F RET 1 R4 + ( &(const binstruction[37]) { /* code */ + 0x8C14011A, // 0000 GETMET R5 R0 K26 + 0x5C1C0400, // 0001 MOVE R7 R2 + 0x7C140400, // 0002 CALL R5 2 + 0x88140147, // 0003 GETMBR R5 R0 K71 + 0x4C180000, // 0004 LDNIL R6 + 0x1C140A06, // 0005 EQ R5 R5 R6 + 0x78160002, // 0006 JMPF R5 #000A + 0x60140012, // 0007 GETGBL R5 G18 + 0x7C140000, // 0008 CALL R5 0 + 0x90028E05, // 0009 SETMBR R0 K71 R5 + 0x60140004, // 000A GETGBL R5 G4 + 0x5C180400, // 000B MOVE R6 R2 + 0x7C140200, // 000C CALL R5 1 + 0x1C140B28, // 000D EQ R5 R5 K40 + 0x78160013, // 000E JMPF R5 #0023 + 0x4C140000, // 000F LDNIL R5 + 0x20140605, // 0010 NE R5 R3 R5 + 0x78160003, // 0011 JMPF R5 #0016 + 0x8C140189, // 0012 GETMET R5 R0 K137 + 0x5C1C0200, // 0013 MOVE R7 R1 + 0x5C200600, // 0014 MOVE R8 R3 + 0x7C140600, // 0015 CALL R5 3 + 0x88140147, // 0016 GETMBR R5 R0 K71 + 0x8C140B1D, // 0017 GETMET R5 R5 K29 + 0xB81E9C00, // 0018 GETNGBL R7 K78 + 0x8820018A, // 0019 GETMBR R8 R0 K138 + 0x8C20118B, // 001A GETMET R8 R8 K139 + 0x5C280200, // 001B MOVE R10 R1 + 0x7C200400, // 001C CALL R8 2 + 0x5C240400, // 001D MOVE R9 R2 + 0x5C280600, // 001E MOVE R10 R3 + 0x5C2C0800, // 001F MOVE R11 R4 + 0x7C1C0800, // 0020 CALL R7 4 + 0x7C140400, // 0021 CALL R5 2 + 0x70020000, // 0022 JMP #0024 + 0xB006534D, // 0023 RAISE 1 K41 K77 + 0x80000000, // 0024 RET 0 }) ) ); @@ -2598,9 +2497,9 @@ be_local_closure(class_Tasmota_urlfetch, /* name */ /******************************************************************** -** Solidified function: gen_cb +** Solidified function: check_not_method ********************************************************************/ -be_local_closure(class_Tasmota_gen_cb, /* name */ +be_local_closure(class_Tasmota_check_not_method, /* name */ be_nested_proto( 6, /* nstack */ 2, /* argc */ @@ -2611,14 +2510,24 @@ be_local_closure(class_Tasmota_gen_cb, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_gen_cb, + &be_const_str_check_not_method, &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0xA40B3C00, // 0000 IMPORT R2 K158 - 0x8C0C059F, // 0001 GETMET R3 R2 K159 - 0x5C140200, // 0002 MOVE R5 R1 - 0x7C0C0400, // 0003 CALL R3 2 - 0x80040600, // 0004 RET 1 R3 + ( &(const binstruction[15]) { /* code */ + 0xA40AE000, // 0000 IMPORT R2 K112 + 0x600C0004, // 0001 GETGBL R3 G4 + 0x5C100200, // 0002 MOVE R4 R1 + 0x7C0C0200, // 0003 CALL R3 1 + 0x200C0728, // 0004 NE R3 R3 K40 + 0x780E0000, // 0005 JMPF R3 #0007 + 0xB007198D, // 0006 RAISE 1 K140 K141 + 0x8C0C058E, // 0007 GETMET R3 R2 K142 + 0x5C140200, // 0008 MOVE R5 R1 + 0x7C0C0400, // 0009 CALL R3 2 + 0x50100200, // 000A LDBOOL R4 1 0 + 0x1C0C0604, // 000B EQ R3 R3 R4 + 0x780E0000, // 000C JMPF R3 #000E + 0xB007198F, // 000D RAISE 1 K140 K143 + 0x80000000, // 000E RET 0 }) ) ); @@ -2626,11 +2535,168 @@ be_local_closure(class_Tasmota_gen_cb, /* name */ /******************************************************************** -** Solidified function: run_network_up +** Solidified function: add_rule_once ********************************************************************/ -be_local_closure(class_Tasmota_run_network_up, /* name */ +be_local_closure(class_Tasmota_add_rule_once, /* name */ be_nested_proto( - 9, /* nstack */ + 10, /* nstack */ + 4, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_add_rule_once, + &be_const_str_solidified, + ( &(const binstruction[ 7]) { /* code */ + 0x8C100190, // 0000 GETMET R4 R0 K144 + 0x5C180200, // 0001 MOVE R6 R1 + 0x5C1C0400, // 0002 MOVE R7 R2 + 0x5C200600, // 0003 MOVE R8 R3 + 0x50240200, // 0004 LDBOOL R9 1 0 + 0x7C100A00, // 0005 CALL R4 5 + 0x80000000, // 0006 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: exec_rules +********************************************************************/ +be_local_closure(class_Tasmota_exec_rules, /* name */ + be_nested_proto( + 14, /* nstack */ + 3, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_exec_rules, + &be_const_str_solidified, + ( &(const binstruction[60]) { /* code */ + 0x880C0140, // 0000 GETMBR R3 R0 K64 + 0x88100147, // 0001 GETMBR R4 R0 K71 + 0x74120002, // 0002 JMPT R4 #0006 + 0x4C100000, // 0003 LDNIL R4 + 0x20100604, // 0004 NE R4 R3 R4 + 0x78120033, // 0005 JMPF R4 #003A + 0xA4120000, // 0006 IMPORT R4 K0 + 0x4C140000, // 0007 LDNIL R5 + 0x90028005, // 0008 SETMBR R0 K64 R5 + 0x50140000, // 0009 LDBOOL R5 0 0 + 0x8C18090B, // 000A GETMET R6 R4 K11 + 0x5C200200, // 000B MOVE R8 R1 + 0x7C180400, // 000C CALL R6 2 + 0x4C1C0000, // 000D LDNIL R7 + 0x1C1C0C07, // 000E EQ R7 R6 R7 + 0x781E0004, // 000F JMPF R7 #0015 + 0x8C1C0114, // 0010 GETMET R7 R0 K20 + 0x00269E01, // 0011 ADD R9 K79 R1 + 0x58280050, // 0012 LDCONST R10 K80 + 0x7C1C0600, // 0013 CALL R7 3 + 0x5C180200, // 0014 MOVE R6 R1 + 0x780A001E, // 0015 JMPF R2 #0035 + 0x881C0147, // 0016 GETMBR R7 R0 K71 + 0x781E001C, // 0017 JMPF R7 #0035 + 0x581C0004, // 0018 LDCONST R7 K4 + 0x6020000C, // 0019 GETGBL R8 G12 + 0x88240147, // 001A GETMBR R9 R0 K71 + 0x7C200200, // 001B CALL R8 1 + 0x14200E08, // 001C LT R8 R7 R8 + 0x78220016, // 001D JMPF R8 #0035 + 0x88200147, // 001E GETMBR R8 R0 K71 + 0x94201007, // 001F GETIDX R8 R8 R7 + 0x8C240152, // 0020 GETMET R9 R0 K82 + 0x5C2C0C00, // 0021 MOVE R11 R6 + 0x8830113C, // 0022 GETMBR R12 R8 K60 + 0x8834113F, // 0023 GETMBR R13 R8 K63 + 0x7C240800, // 0024 CALL R9 4 + 0x74160001, // 0025 JMPT R5 #0028 + 0x74260000, // 0026 JMPT R9 #0028 + 0x50140001, // 0027 LDBOOL R5 0 1 + 0x50140200, // 0028 LDBOOL R5 1 0 + 0x78260008, // 0029 JMPF R9 #0033 + 0x88281191, // 002A GETMBR R10 R8 K145 + 0x502C0200, // 002B LDBOOL R11 1 0 + 0x1C28140B, // 002C EQ R10 R10 R11 + 0x782A0004, // 002D JMPF R10 #0033 + 0x88280147, // 002E GETMBR R10 R0 K71 + 0x8C281531, // 002F GETMET R10 R10 K49 + 0x5C300E00, // 0030 MOVE R12 R7 + 0x7C280400, // 0031 CALL R10 2 + 0x70020000, // 0032 JMP #0034 + 0x001C0F2D, // 0033 ADD R7 R7 K45 + 0x7001FFE3, // 0034 JMP #0019 + 0x4C1C0000, // 0035 LDNIL R7 + 0x201C0607, // 0036 NE R7 R3 R7 + 0x781E0000, // 0037 JMPF R7 #0039 + 0x90028006, // 0038 SETMBR R0 K64 R6 + 0x80040A00, // 0039 RET 1 R5 + 0x50100000, // 003A LDBOOL R4 0 0 + 0x80040800, // 003B RET 1 R4 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_timer +********************************************************************/ +be_local_closure(class_Tasmota_set_timer, /* name */ + be_nested_proto( + 10, /* nstack */ + 4, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_set_timer, + &be_const_str_solidified, + ( &(const binstruction[21]) { /* code */ + 0x8C10011A, // 0000 GETMET R4 R0 K26 + 0x5C180400, // 0001 MOVE R6 R2 + 0x7C100400, // 0002 CALL R4 2 + 0x8810012E, // 0003 GETMBR R4 R0 K46 + 0x4C140000, // 0004 LDNIL R5 + 0x1C100805, // 0005 EQ R4 R4 R5 + 0x78120002, // 0006 JMPF R4 #000A + 0x60100012, // 0007 GETGBL R4 G18 + 0x7C100000, // 0008 CALL R4 0 + 0x90025C04, // 0009 SETMBR R0 K46 R4 + 0x8810012E, // 000A GETMBR R4 R0 K46 + 0x8C10091D, // 000B GETMET R4 R4 K29 + 0xB81A9C00, // 000C GETNGBL R6 K78 + 0x8C1C0192, // 000D GETMET R7 R0 K146 + 0x5C240200, // 000E MOVE R9 R1 + 0x7C1C0400, // 000F CALL R7 2 + 0x5C200400, // 0010 MOVE R8 R2 + 0x5C240600, // 0011 MOVE R9 R3 + 0x7C180600, // 0012 CALL R6 3 + 0x7C100400, // 0013 CALL R4 2 + 0x80000000, // 0014 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: gc +********************************************************************/ +be_local_closure(class_Tasmota_gc, /* name */ + be_nested_proto( + 4, /* nstack */ 1, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -2639,48 +2705,69 @@ be_local_closure(class_Tasmota_run_network_up, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_run_network_up, + &be_const_str_gc, &be_const_str_solidified, - ( &(const binstruction[39]) { /* code */ - 0x88040156, // 0000 GETMBR R1 R0 K86 - 0x4C080000, // 0001 LDNIL R2 - 0x1C040202, // 0002 EQ R1 R1 R2 - 0x78060000, // 0003 JMPF R1 #0005 - 0x80000200, // 0004 RET 0 - 0x8C040155, // 0005 GETMET R1 R0 K85 - 0x7C040200, // 0006 CALL R1 1 - 0x7806001D, // 0007 JMPF R1 #0026 - 0x6004000C, // 0008 GETGBL R1 G12 - 0x88080156, // 0009 GETMBR R2 R0 K86 - 0x7C040200, // 000A CALL R1 1 - 0x24040301, // 000B GT R1 R1 K1 - 0x78060016, // 000C JMPF R1 #0024 - 0x88040156, // 000D GETMBR R1 R0 K86 - 0x94040301, // 000E GETIDX R1 R1 K1 - 0x88080156, // 000F GETMBR R2 R0 K86 - 0x8C080516, // 0010 GETMET R2 R2 K22 - 0x58100001, // 0011 LDCONST R4 K1 - 0x7C080400, // 0012 CALL R2 2 - 0xA8020003, // 0013 EXBLK 0 #0018 - 0x5C080200, // 0014 MOVE R2 R1 - 0x7C080000, // 0015 CALL R2 0 - 0xA8040001, // 0016 EXBLK 1 1 - 0x7002000A, // 0017 JMP #0023 - 0xAC080002, // 0018 CATCH R2 0 2 - 0x70020007, // 0019 JMP #0022 - 0x60100001, // 001A GETGBL R4 G1 - 0x60140018, // 001B GETGBL R5 G24 - 0x581800A0, // 001C LDCONST R6 K160 - 0x5C1C0400, // 001D MOVE R7 R2 - 0x5C200600, // 001E MOVE R8 R3 - 0x7C140600, // 001F CALL R5 3 - 0x7C100200, // 0020 CALL R4 1 - 0x70020000, // 0021 JMP #0023 - 0xB0080000, // 0022 RAISE 2 R0 R0 - 0x7001FFE3, // 0023 JMP #0008 - 0x4C040000, // 0024 LDNIL R1 - 0x9002AC01, // 0025 SETMBR R0 K86 R1 - 0x80000000, // 0026 RET 0 + ( &(const binstruction[ 6]) { /* code */ + 0xA406F800, // 0000 IMPORT R1 K124 + 0x8C080393, // 0001 GETMET R2 R1 K147 + 0x7C080200, // 0002 CALL R2 1 + 0x8C080394, // 0003 GETMET R2 R1 K148 + 0x7C080200, // 0004 CALL R2 1 + 0x80040400, // 0005 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: find_op +********************************************************************/ +be_local_closure(class_Tasmota_find_op, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_find_op, + &be_const_str_solidified, + ( &(const binstruction[31]) { /* code */ + 0x8C080195, // 0000 GETMET R2 R0 K149 + 0x5C100200, // 0001 MOVE R4 R1 + 0x7C080400, // 0002 CALL R2 2 + 0x280C0504, // 0003 GE R3 R2 K4 + 0x780E0011, // 0004 JMPF R3 #0017 + 0x540E7FFE, // 0005 LDINT R3 32767 + 0x2C0C0403, // 0006 AND R3 R2 R3 + 0x5412000F, // 0007 LDINT R4 16 + 0x3C100404, // 0008 SHR R4 R2 R4 + 0x60140012, // 0009 GETGBL R5 G18 + 0x7C140000, // 000A CALL R5 0 + 0x0418072D, // 000B SUB R6 R3 K45 + 0x401A0806, // 000C CONNECT R6 K4 R6 + 0x94180206, // 000D GETIDX R6 R1 R6 + 0x40180A06, // 000E CONNECT R6 R5 R6 + 0x0418092D, // 000F SUB R6 R4 K45 + 0x40180606, // 0010 CONNECT R6 R3 R6 + 0x94180206, // 0011 GETIDX R6 R1 R6 + 0x40180A06, // 0012 CONNECT R6 R5 R6 + 0x40180982, // 0013 CONNECT R6 R4 K130 + 0x94180206, // 0014 GETIDX R6 R1 R6 + 0x40180A06, // 0015 CONNECT R6 R5 R6 + 0x80040A00, // 0016 RET 1 R5 + 0x600C0012, // 0017 GETGBL R3 G18 + 0x7C0C0000, // 0018 CALL R3 0 + 0x40100601, // 0019 CONNECT R4 R3 R1 + 0x4C100000, // 001A LDNIL R4 + 0x40100604, // 001B CONNECT R4 R3 R4 + 0x4C100000, // 001C LDNIL R4 + 0x40100604, // 001D CONNECT R4 R3 R4 + 0x80040600, // 001E RET 1 R3 }) ) ); @@ -2704,24 +2791,24 @@ be_local_closure(class_Tasmota_urlfetch_cmd, /* name */ &be_const_str_urlfetch_cmd, &be_const_str_solidified, ( &(const binstruction[34]) { /* code */ - 0xA4167600, // 0000 IMPORT R5 K59 - 0x8C180B1E, // 0001 GETMET R6 R5 K30 + 0xA4160200, // 0000 IMPORT R5 K1 + 0x8C180B0C, // 0001 GETMET R6 R5 K12 0x5C200600, // 0002 MOVE R8 R3 - 0x582400A1, // 0003 LDCONST R9 K161 + 0x58240096, // 0003 LDCONST R9 K150 0x7C180600, // 0004 CALL R6 3 - 0x20180D01, // 0005 NE R6 R6 K1 + 0x20180D04, // 0005 NE R6 R6 K4 0x781A0003, // 0006 JMPF R6 #000B - 0x8C1801A2, // 0007 GETMET R6 R0 K162 - 0x582000A3, // 0008 LDCONST R8 K163 + 0x8C180197, // 0007 GETMET R6 R0 K151 + 0x58200098, // 0008 LDCONST R8 K152 0x7C180400, // 0009 CALL R6 2 0x80000C00, // 000A RET 0 0xA802000A, // 000B EXBLK 0 #0017 - 0x8C1801A4, // 000C GETMET R6 R0 K164 + 0x8C180199, // 000C GETMET R6 R0 K153 0x5C200600, // 000D MOVE R8 R3 0x7C180400, // 000E CALL R6 2 - 0x141C0D01, // 000F LT R7 R6 K1 + 0x141C0D04, // 000F LT R7 R6 K4 0x781E0003, // 0010 JMPF R7 #0015 - 0x8C1C01A5, // 0011 GETMET R7 R0 K165 + 0x8C1C019A, // 0011 GETMET R7 R0 K154 0x7C1C0200, // 0012 CALL R7 1 0xA8040001, // 0013 EXBLK 1 1 0x80000E00, // 0014 RET 0 @@ -2729,13 +2816,13 @@ be_local_closure(class_Tasmota_urlfetch_cmd, /* name */ 0x70020006, // 0016 JMP #001E 0xAC180002, // 0017 CATCH R6 0 2 0x70020003, // 0018 JMP #001D - 0x8C2001A5, // 0019 GETMET R8 R0 K165 + 0x8C20019A, // 0019 GETMET R8 R0 K154 0x7C200200, // 001A CALL R8 1 0x80001000, // 001B RET 0 0x70020000, // 001C JMP #001E 0xB0080000, // 001D RAISE 2 R0 R0 - 0xB81A1400, // 001E GETNGBL R6 K10 - 0x8C180DA6, // 001F GETMET R6 R6 K166 + 0xB81A0400, // 001E GETNGBL R6 K2 + 0x8C180D9B, // 001F GETMET R6 R6 K155 0x7C180200, // 0020 CALL R6 1 0x80000000, // 0021 RET 0 }) @@ -2745,11 +2832,11 @@ be_local_closure(class_Tasmota_urlfetch_cmd, /* name */ /******************************************************************** -** Solidified function: find_list_i +** Solidified function: hs2rgb ********************************************************************/ -be_local_closure(class_Tasmota_find_list_i, /* name */ +be_local_closure(class_Tasmota_hs2rgb, /* name */ be_nested_proto( - 9, /* nstack */ + 17, /* nstack */ 3, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -2758,29 +2845,77 @@ be_local_closure(class_Tasmota_find_list_i, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_find_list_i, + &be_const_str_hs2rgb, &be_const_str_solidified, - ( &(const binstruction[20]) { /* code */ - 0xA40E7600, // 0000 IMPORT R3 K59 - 0x58100001, // 0001 LDCONST R4 K1 - 0x8C14074D, // 0002 GETMET R5 R3 K77 - 0x5C1C0400, // 0003 MOVE R7 R2 - 0x7C140400, // 0004 CALL R5 2 - 0x6018000C, // 0005 GETGBL R6 G12 - 0x5C1C0200, // 0006 MOVE R7 R1 - 0x7C180200, // 0007 CALL R6 1 - 0x14180806, // 0008 LT R6 R4 R6 - 0x781A0007, // 0009 JMPF R6 #0012 - 0x8C18074D, // 000A GETMET R6 R3 K77 - 0x94200204, // 000B GETIDX R8 R1 R4 - 0x7C180400, // 000C CALL R6 2 - 0x1C180C05, // 000D EQ R6 R6 R5 - 0x781A0000, // 000E JMPF R6 #0010 - 0x80040800, // 000F RET 1 R4 - 0x00100905, // 0010 ADD R4 R4 K5 - 0x7001FFF2, // 0011 JMP #0005 - 0x4C180000, // 0012 LDNIL R6 - 0x80040C00, // 0013 RET 1 R6 + ( &(const binstruction[68]) { /* code */ + 0x4C0C0000, // 0000 LDNIL R3 + 0x1C0C0403, // 0001 EQ R3 R2 R3 + 0x780E0000, // 0002 JMPF R3 #0004 + 0x540A00FE, // 0003 LDINT R2 255 + 0x540E00FE, // 0004 LDINT R3 255 + 0x541200FE, // 0005 LDINT R4 255 + 0x541600FE, // 0006 LDINT R5 255 + 0x541A0167, // 0007 LDINT R6 360 + 0x10040206, // 0008 MOD R1 R1 R6 + 0x24180504, // 0009 GT R6 R2 K4 + 0x781A0031, // 000A JMPF R6 #003D + 0x541A003B, // 000B LDINT R6 60 + 0x0C180206, // 000C DIV R6 R1 R6 + 0x541E003B, // 000D LDINT R7 60 + 0x101C0207, // 000E MOD R7 R1 R7 + 0x542200FE, // 000F LDINT R8 255 + 0x04201002, // 0010 SUB R8 R8 R2 + 0xB8260400, // 0011 GETNGBL R9 K2 + 0x8C24139C, // 0012 GETMET R9 R9 K156 + 0x5C2C0E00, // 0013 MOVE R11 R7 + 0x58300004, // 0014 LDCONST R12 K4 + 0x5436003B, // 0015 LDINT R13 60 + 0x543A00FE, // 0016 LDINT R14 255 + 0x5C3C1000, // 0017 MOVE R15 R8 + 0x7C240C00, // 0018 CALL R9 6 + 0xB82A0400, // 0019 GETNGBL R10 K2 + 0x8C28159C, // 001A GETMET R10 R10 K156 + 0x5C300E00, // 001B MOVE R12 R7 + 0x58340004, // 001C LDCONST R13 K4 + 0x543A003B, // 001D LDINT R14 60 + 0x5C3C1000, // 001E MOVE R15 R8 + 0x544200FE, // 001F LDINT R16 255 + 0x7C280C00, // 0020 CALL R10 6 + 0x1C2C0D04, // 0021 EQ R11 R6 K4 + 0x782E0002, // 0022 JMPF R11 #0026 + 0x5C141400, // 0023 MOVE R5 R10 + 0x5C101000, // 0024 MOVE R4 R8 + 0x70020016, // 0025 JMP #003D + 0x1C2C0D2D, // 0026 EQ R11 R6 K45 + 0x782E0002, // 0027 JMPF R11 #002B + 0x5C0C1200, // 0028 MOVE R3 R9 + 0x5C101000, // 0029 MOVE R4 R8 + 0x70020011, // 002A JMP #003D + 0x1C2C0D42, // 002B EQ R11 R6 K66 + 0x782E0002, // 002C JMPF R11 #0030 + 0x5C0C1000, // 002D MOVE R3 R8 + 0x5C101400, // 002E MOVE R4 R10 + 0x7002000C, // 002F JMP #003D + 0x1C2C0D50, // 0030 EQ R11 R6 K80 + 0x782E0002, // 0031 JMPF R11 #0035 + 0x5C0C1000, // 0032 MOVE R3 R8 + 0x5C141200, // 0033 MOVE R5 R9 + 0x70020007, // 0034 JMP #003D + 0x542E0003, // 0035 LDINT R11 4 + 0x1C2C0C0B, // 0036 EQ R11 R6 R11 + 0x782E0002, // 0037 JMPF R11 #003B + 0x5C0C1400, // 0038 MOVE R3 R10 + 0x5C141000, // 0039 MOVE R5 R8 + 0x70020001, // 003A JMP #003D + 0x5C141000, // 003B MOVE R5 R8 + 0x5C101200, // 003C MOVE R4 R9 + 0x541A000F, // 003D LDINT R6 16 + 0x38180606, // 003E SHL R6 R3 R6 + 0x541E0007, // 003F LDINT R7 8 + 0x381C0A07, // 0040 SHL R7 R5 R7 + 0x30180C07, // 0041 OR R6 R6 R7 + 0x30180C04, // 0042 OR R6 R6 R4 + 0x80040C00, // 0043 RET 1 R6 }) ) ); @@ -2788,11 +2923,11 @@ be_local_closure(class_Tasmota_find_list_i, /* name */ /******************************************************************** -** Solidified function: remove_timer +** Solidified function: time_str ********************************************************************/ -be_local_closure(class_Tasmota_remove_timer, /* name */ +be_local_closure(class_Tasmota_time_str, /* name */ be_nested_proto( - 7, /* nstack */ + 11, /* nstack */ 2, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -2801,27 +2936,22 @@ be_local_closure(class_Tasmota_remove_timer, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_remove_timer, + &be_const_str_time_str, &be_const_str_solidified, - ( &(const binstruction[18]) { /* code */ - 0x88080128, // 0000 GETMBR R2 R0 K40 - 0x780A000E, // 0001 JMPF R2 #0011 - 0x580C0001, // 0002 LDCONST R3 K1 - 0x8C100502, // 0003 GETMET R4 R2 K2 - 0x7C100200, // 0004 CALL R4 1 - 0x14100604, // 0005 LT R4 R3 R4 - 0x78120009, // 0006 JMPF R4 #0011 - 0x94100403, // 0007 GETIDX R4 R2 R3 - 0x88100903, // 0008 GETMBR R4 R4 K3 - 0x1C100801, // 0009 EQ R4 R4 R1 - 0x78120003, // 000A JMPF R4 #000F - 0x8C100516, // 000B GETMET R4 R2 K22 - 0x5C180600, // 000C MOVE R6 R3 - 0x7C100400, // 000D CALL R4 2 - 0x70020000, // 000E JMP #0010 - 0x000C0705, // 000F ADD R3 R3 K5 - 0x7001FFF1, // 0010 JMP #0003 - 0x80000000, // 0011 RET 0 + ( &(const binstruction[13]) { /* code */ + 0x8C08019D, // 0000 GETMET R2 R0 K157 + 0x5C100200, // 0001 MOVE R4 R1 + 0x7C080400, // 0002 CALL R2 2 + 0x600C0018, // 0003 GETGBL R3 G24 + 0x5810009E, // 0004 LDCONST R4 K158 + 0x9414059F, // 0005 GETIDX R5 R2 K159 + 0x941805A0, // 0006 GETIDX R6 R2 K160 + 0x941C05A1, // 0007 GETIDX R7 R2 K161 + 0x942005A2, // 0008 GETIDX R8 R2 K162 + 0x942405A3, // 0009 GETIDX R9 R2 K163 + 0x942805A4, // 000A GETIDX R10 R2 K164 + 0x7C0C0E00, // 000B CALL R3 7 + 0x80040600, // 000C RET 1 R3 }) ) ); @@ -2829,60 +2959,11 @@ be_local_closure(class_Tasmota_remove_timer, /* name */ /******************************************************************** -** Solidified function: run_deferred +** Solidified function: try_rule ********************************************************************/ -be_local_closure(class_Tasmota_run_deferred, /* name */ +be_local_closure(class_Tasmota_try_rule, /* name */ be_nested_proto( - 6, /* nstack */ - 1, /* argc */ - 10, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_run_deferred, - &be_const_str_solidified, - ( &(const binstruction[26]) { /* code */ - 0x88040110, // 0000 GETMBR R1 R0 K16 - 0x78060016, // 0001 JMPF R1 #0019 - 0x6004000C, // 0002 GETGBL R1 G12 - 0x88080110, // 0003 GETMBR R2 R0 K16 - 0x7C040200, // 0004 CALL R1 1 - 0x24080301, // 0005 GT R2 R1 K1 - 0x780A0009, // 0006 JMPF R2 #0011 - 0x88080110, // 0007 GETMBR R2 R0 K16 - 0x94080501, // 0008 GETIDX R2 R2 K1 - 0x880C0110, // 0009 GETMBR R3 R0 K16 - 0x8C0C0716, // 000A GETMET R3 R3 K22 - 0x58140001, // 000B LDCONST R5 K1 - 0x7C0C0400, // 000C CALL R3 2 - 0x04040305, // 000D SUB R1 R1 K5 - 0x5C0C0400, // 000E MOVE R3 R2 - 0x7C0C0000, // 000F CALL R3 0 - 0x7001FFF3, // 0010 JMP #0005 - 0x6008000C, // 0011 GETGBL R2 G12 - 0x880C0110, // 0012 GETMBR R3 R0 K16 - 0x7C080200, // 0013 CALL R2 1 - 0x1C080501, // 0014 EQ R2 R2 K1 - 0x780A0002, // 0015 JMPF R2 #0019 - 0xB80A1400, // 0016 GETNGBL R2 K10 - 0x88080512, // 0017 GETMBR R2 R2 K18 - 0x900A2701, // 0018 SETMBR R2 K19 K1 - 0x80000000, // 0019 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: add_cron -********************************************************************/ -be_local_closure(class_Tasmota_add_cron, /* name */ - be_nested_proto( - 13, /* nstack */ + 9, /* nstack */ 4, /* argc */ 10, /* varg */ 0, /* has upvals */ @@ -2891,36 +2972,240 @@ be_local_closure(class_Tasmota_add_cron, /* name */ NULL, /* no sub protos */ 1, /* has constants */ &be_ktab_class_Tasmota, /* shared constants */ - &be_const_str_add_cron, + &be_const_str_try_rule, &be_const_str_solidified, - ( &(const binstruction[27]) { /* code */ - 0x8C100127, // 0000 GETMET R4 R0 K39 - 0x5C180400, // 0001 MOVE R6 R2 + ( &(const binstruction[18]) { /* code */ + 0x8C1005A5, // 0000 GETMET R4 R2 K165 + 0x5C180200, // 0001 MOVE R6 R1 0x7C100400, // 0002 CALL R4 2 - 0x88100100, // 0003 GETMBR R4 R0 K0 - 0x4C140000, // 0004 LDNIL R5 - 0x1C100805, // 0005 EQ R4 R4 R5 - 0x78120002, // 0006 JMPF R4 #000A - 0x60100012, // 0007 GETGBL R4 G18 - 0x7C100000, // 0008 CALL R4 0 - 0x90020004, // 0009 SETMBR R0 K0 R4 - 0xB812B800, // 000A GETNGBL R4 K92 - 0x60140008, // 000B GETGBL R5 G8 - 0x5C180200, // 000C MOVE R6 R1 - 0x7C140200, // 000D CALL R5 1 - 0x7C100200, // 000E CALL R4 1 - 0x8C14095E, // 000F GETMET R5 R4 K94 - 0x7C140200, // 0010 CALL R5 1 - 0x88180100, // 0011 GETMBR R6 R0 K0 - 0x8C180D11, // 0012 GETMET R6 R6 K17 - 0xB8225200, // 0013 GETNGBL R8 K41 - 0x5C240A00, // 0014 MOVE R9 R5 - 0x5C280400, // 0015 MOVE R10 R2 - 0x5C2C0600, // 0016 MOVE R11 R3 - 0x5C300800, // 0017 MOVE R12 R4 - 0x7C200800, // 0018 CALL R8 4 - 0x7C180400, // 0019 CALL R6 2 - 0x80000000, // 001A RET 0 + 0x4C140000, // 0003 LDNIL R5 + 0x20140805, // 0004 NE R5 R4 R5 + 0x78160009, // 0005 JMPF R5 #0010 + 0x4C140000, // 0006 LDNIL R5 + 0x20140605, // 0007 NE R5 R3 R5 + 0x78160004, // 0008 JMPF R5 #000E + 0x5C140600, // 0009 MOVE R5 R3 + 0x5C180800, // 000A MOVE R6 R4 + 0x881C05A6, // 000B GETMBR R7 R2 K166 + 0x5C200200, // 000C MOVE R8 R1 + 0x7C140600, // 000D CALL R5 3 + 0x50140200, // 000E LDBOOL R5 1 0 + 0x80040A00, // 000F RET 1 R5 + 0x50140000, // 0010 LDBOOL R5 0 0 + 0x80040A00, // 0011 RET 1 R5 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: event +********************************************************************/ +be_local_closure(class_Tasmota_event, /* name */ + be_nested_proto( + 19, /* nstack */ + 6, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_event, + &be_const_str_solidified, + ( &(const binstruction[112]) { /* code */ + 0x1C1803A7, // 0000 EQ R6 R1 K167 + 0x781A0005, // 0001 JMPF R6 #0008 + 0x8818011C, // 0002 GETMBR R6 R0 K28 + 0x781A0001, // 0003 JMPF R6 #0006 + 0x8C1801A8, // 0004 GETMET R6 R0 K168 + 0x7C180200, // 0005 CALL R6 1 + 0x8C1801A9, // 0006 GETMET R6 R0 K169 + 0x7C180200, // 0007 CALL R6 1 + 0x1C1803AA, // 0008 EQ R6 R1 K170 + 0x781A0001, // 0009 JMPF R6 #000C + 0x8C1801AB, // 000A GETMET R6 R0 K171 + 0x7C180200, // 000B CALL R6 1 + 0x50180000, // 000C LDBOOL R6 0 0 + 0x501C0000, // 000D LDBOOL R7 0 0 + 0x1C2003AC, // 000E EQ R8 R1 K172 + 0x78220000, // 000F JMPF R8 #0011 + 0x501C0200, // 0010 LDBOOL R7 1 0 + 0x1C2003AD, // 0011 EQ R8 R1 K173 + 0x78220006, // 0012 JMPF R8 #001A + 0x8C2001AE, // 0013 GETMET R8 R0 K174 + 0x5C280400, // 0014 MOVE R10 R2 + 0x5C2C0600, // 0015 MOVE R11 R3 + 0x5C300800, // 0016 MOVE R12 R4 + 0x7C200800, // 0017 CALL R8 4 + 0x80041000, // 0018 RET 1 R8 + 0x7002004F, // 0019 JMP #006A + 0x1C2003AF, // 001A EQ R8 R1 K175 + 0x78220004, // 001B JMPF R8 #0021 + 0x8C2001B0, // 001C GETMET R8 R0 K176 + 0x5C280800, // 001D MOVE R10 R4 + 0x7C200400, // 001E CALL R8 2 + 0x80041000, // 001F RET 1 R8 + 0x70020048, // 0020 JMP #006A + 0x1C200348, // 0021 EQ R8 R1 K72 + 0x78220007, // 0022 JMPF R8 #002B + 0x8C2001B1, // 0023 GETMET R8 R0 K177 + 0x5C280800, // 0024 MOVE R10 R4 + 0x602C0017, // 0025 GETGBL R11 G23 + 0x5C300600, // 0026 MOVE R12 R3 + 0x7C2C0200, // 0027 CALL R11 1 + 0x7C200600, // 0028 CALL R8 3 + 0x80041000, // 0029 RET 1 R8 + 0x7002003E, // 002A JMP #006A + 0x1C20037C, // 002B EQ R8 R1 K124 + 0x78220003, // 002C JMPF R8 #0031 + 0x8C20017C, // 002D GETMET R8 R0 K124 + 0x7C200200, // 002E CALL R8 1 + 0x80041000, // 002F RET 1 R8 + 0x70020038, // 0030 JMP #006A + 0x88200149, // 0031 GETMBR R8 R0 K73 + 0x78220036, // 0032 JMPF R8 #006A + 0xA422E000, // 0033 IMPORT R8 K112 + 0x58240004, // 0034 LDCONST R9 K4 + 0x6028000C, // 0035 GETGBL R10 G12 + 0x882C0149, // 0036 GETMBR R11 R0 K73 + 0x7C280200, // 0037 CALL R10 1 + 0x1428120A, // 0038 LT R10 R9 R10 + 0x782A002F, // 0039 JMPF R10 #006A + 0x88280149, // 003A GETMBR R10 R0 K73 + 0x94281409, // 003B GETIDX R10 R10 R9 + 0x8C2C1172, // 003C GETMET R11 R8 K114 + 0x5C341400, // 003D MOVE R13 R10 + 0x5C380200, // 003E MOVE R14 R1 + 0x7C2C0600, // 003F CALL R11 3 + 0x60300004, // 0040 GETGBL R12 G4 + 0x5C341600, // 0041 MOVE R13 R11 + 0x7C300200, // 0042 CALL R12 1 + 0x1C301928, // 0043 EQ R12 R12 K40 + 0x78320022, // 0044 JMPF R12 #0068 + 0xA8020011, // 0045 EXBLK 0 #0058 + 0x5C301600, // 0046 MOVE R12 R11 + 0x5C341400, // 0047 MOVE R13 R10 + 0x5C380400, // 0048 MOVE R14 R2 + 0x5C3C0600, // 0049 MOVE R15 R3 + 0x5C400800, // 004A MOVE R16 R4 + 0x5C440A00, // 004B MOVE R17 R5 + 0x7C300A00, // 004C CALL R12 5 + 0x74320001, // 004D JMPT R12 #0050 + 0x741A0000, // 004E JMPT R6 #0050 + 0x50180001, // 004F LDBOOL R6 0 1 + 0x50180200, // 0050 LDBOOL R6 1 0 + 0x781A0003, // 0051 JMPF R6 #0056 + 0x5C300E00, // 0052 MOVE R12 R7 + 0x74320001, // 0053 JMPT R12 #0056 + 0xA8040001, // 0054 EXBLK 1 1 + 0x70020013, // 0055 JMP #006A + 0xA8040001, // 0056 EXBLK 1 1 + 0x7002000F, // 0057 JMP #0068 + 0xAC300002, // 0058 CATCH R12 0 2 + 0x7002000C, // 0059 JMP #0067 + 0x60380001, // 005A GETGBL R14 G1 + 0x603C0018, // 005B GETGBL R15 G24 + 0x584000B2, // 005C LDCONST R16 K178 + 0x5C441800, // 005D MOVE R17 R12 + 0x5C481A00, // 005E MOVE R18 R13 + 0x7C3C0600, // 005F CALL R15 3 + 0x7C380200, // 0060 CALL R14 1 + 0x88380176, // 0061 GETMBR R14 R0 K118 + 0x783A0002, // 0062 JMPF R14 #0066 + 0xA43AEE00, // 0063 IMPORT R14 K119 + 0x8C3C1DB3, // 0064 GETMET R15 R14 K179 + 0x7C3C0200, // 0065 CALL R15 1 + 0x70020000, // 0066 JMP #0068 + 0xB0080000, // 0067 RAISE 2 R0 R0 + 0x0024132D, // 0068 ADD R9 R9 K45 + 0x7001FFCA, // 0069 JMP #0035 + 0x1C2003B4, // 006A EQ R8 R1 K180 + 0x78220002, // 006B JMPF R8 #006F + 0xA4236A00, // 006C IMPORT R8 K181 + 0x8C241125, // 006D GETMET R9 R8 K37 + 0x7C240200, // 006E CALL R9 1 + 0x80040C00, // 006F RET 1 R6 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: remove_cmd +********************************************************************/ +be_local_closure(class_Tasmota_remove_cmd, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_remove_cmd, + &be_const_str_solidified, + ( &(const binstruction[ 7]) { /* code */ + 0x88080116, // 0000 GETMBR R2 R0 K22 + 0x780A0003, // 0001 JMPF R2 #0006 + 0x88080116, // 0002 GETMBR R2 R0 K22 + 0x8C080531, // 0003 GETMET R2 R2 K49 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0x80000000, // 0006 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: add_driver +********************************************************************/ +be_local_closure(class_Tasmota_add_driver, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 10, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + &be_ktab_class_Tasmota, /* shared constants */ + &be_const_str_add_driver, + &be_const_str_solidified, + ( &(const binstruction[25]) { /* code */ + 0x60080004, // 0000 GETGBL R2 G4 + 0x5C0C0200, // 0001 MOVE R3 R1 + 0x7C080200, // 0002 CALL R2 1 + 0x20080557, // 0003 NE R2 R2 K87 + 0x780A0000, // 0004 JMPF R2 #0006 + 0xB00653B6, // 0005 RAISE 1 K41 K182 + 0x88080149, // 0006 GETMBR R2 R0 K73 + 0x780A000B, // 0007 JMPF R2 #0014 + 0x88080149, // 0008 GETMBR R2 R0 K73 + 0x8C08050C, // 0009 GETMET R2 R2 K12 + 0x5C100200, // 000A MOVE R4 R1 + 0x7C080400, // 000B CALL R2 2 + 0x4C0C0000, // 000C LDNIL R3 + 0x1C080403, // 000D EQ R2 R2 R3 + 0x780A0003, // 000E JMPF R2 #0013 + 0x88080149, // 000F GETMBR R2 R0 K73 + 0x8C08051D, // 0010 GETMET R2 R2 K29 + 0x5C100200, // 0011 MOVE R4 R1 + 0x7C080400, // 0012 CALL R2 2 + 0x70020003, // 0013 JMP #0018 + 0x60080012, // 0014 GETGBL R2 G18 + 0x7C080000, // 0015 CALL R2 0 + 0x400C0401, // 0016 CONNECT R3 R2 R1 + 0x90029202, // 0017 SETMBR R0 K73 R2 + 0x80000000, // 0018 RET 0 }) ) ); @@ -2933,68 +3218,71 @@ be_local_closure(class_Tasmota_add_cron, /* name */ be_local_class(Tasmota, 15, NULL, - be_nested_map(60, + be_nested_map(63, ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key(wire1, -1), be_const_var(8) }, - { be_const_key(wd, 42), be_const_var(13) }, - { be_const_key(int, 48), be_const_static_closure(class_Tasmota_int_closure) }, - { be_const_key(add_cron, -1), be_const_closure(class_Tasmota_add_cron_closure) }, - { be_const_key(run_deferred, -1), be_const_closure(class_Tasmota_run_deferred_closure) }, - { be_const_key(try_rule, -1), be_const_closure(class_Tasmota_try_rule_closure) }, - { be_const_key(run_timers, -1), be_const_closure(class_Tasmota_run_timers_closure) }, - { be_const_key(defer, -1), be_const_closure(class_Tasmota_defer_closure) }, - { be_const_key(is_network_up, 31), be_const_closure(class_Tasmota_is_network_up_closure) }, - { be_const_key(hs2rgb, -1), be_const_closure(class_Tasmota_hs2rgb_closure) }, - { be_const_key(_defer, -1), be_const_var(3) }, - { be_const_key(add_driver, 36), be_const_closure(class_Tasmota_add_driver_closure) }, - { be_const_key(exec_rules, -1), be_const_closure(class_Tasmota_exec_rules_closure) }, - { be_const_key(set_timer, 6), be_const_closure(class_Tasmota_set_timer_closure) }, - { be_const_key(global, -1), be_const_var(11) }, - { be_const_key(init, -1), be_const_closure(class_Tasmota_init_closure) }, - { be_const_key(settings, 34), be_const_var(12) }, + { be_const_key(read_extension_manifest, -1), be_const_closure(class_Tasmota_read_extension_manifest_closure) }, + { be_const_key(add_driver, 58), be_const_closure(class_Tasmota_add_driver_closure) }, + { be_const_key(int, -1), be_const_static_closure(class_Tasmota_int_closure) }, { be_const_key(find_list_i, -1), be_const_closure(class_Tasmota_find_list_i_closure) }, - { be_const_key(compile, -1), be_const_closure(class_Tasmota_compile_closure) }, - { be_const_key(add_cmd, 30), be_const_closure(class_Tasmota_add_cmd_closure) }, - { be_const_key(_timers, -1), be_const_var(2) }, - { be_const_key(run_network_up, 52), be_const_closure(class_Tasmota_run_network_up_closure) }, - { be_const_key(remove_cmd, 47), be_const_closure(class_Tasmota_remove_cmd_closure) }, - { be_const_key(remove_fast_loop, -1), be_const_closure(class_Tasmota_remove_fast_loop_closure) }, { be_const_key(when_network_up, -1), be_const_closure(class_Tasmota_when_network_up_closure) }, - { be_const_key(_drivers, 21), be_const_var(6) }, - { be_const_key(find_key_i, -1), be_const_closure(class_Tasmota_find_key_i_closure) }, - { be_const_key(check_not_method, -1), be_const_closure(class_Tasmota_check_not_method_closure) }, - { be_const_key(remove_driver, 24), be_const_closure(class_Tasmota_remove_driver_closure) }, - { be_const_key(add_rule_once, -1), be_const_closure(class_Tasmota_add_rule_once_closure) }, - { be_const_key(exec_cmd, -1), be_const_closure(class_Tasmota_exec_cmd_closure) }, - { be_const_key(remove_rule, -1), be_const_closure(class_Tasmota_remove_rule_closure) }, - { be_const_key(set_light, 44), be_const_closure(class_Tasmota_set_light_closure) }, - { be_const_key(_ccmd, -1), be_const_var(5) }, - { be_const_key(find_op, 20), be_const_closure(class_Tasmota_find_op_closure) }, - { be_const_key(run_cron, -1), be_const_closure(class_Tasmota_run_cron_closure) }, - { be_const_key(gc, -1), be_const_closure(class_Tasmota_gc_closure) }, - { be_const_key(time_str, -1), be_const_closure(class_Tasmota_time_str_closure) }, - { be_const_key(event, -1), be_const_closure(class_Tasmota_event_closure) }, - { be_const_key(cmd, 38), be_const_closure(class_Tasmota_cmd_closure) }, - { be_const_key(wire_scan, -1), be_const_closure(class_Tasmota_wire_scan_closure) }, - { be_const_key(exec_tele, -1), be_const_closure(class_Tasmota_exec_tele_closure) }, - { be_const_key(wire2, -1), be_const_var(9) }, - { be_const_key(add_rule, 17), be_const_closure(class_Tasmota_add_rule_closure) }, - { be_const_key(_fl, 37), be_const_var(0) }, - { be_const_key(_debug_present, -1), be_const_var(14) }, - { be_const_key(add_fast_loop, -1), be_const_closure(class_Tasmota_add_fast_loop_closure) }, - { be_const_key(cmd_res, 54), be_const_var(10) }, - { be_const_key(fast_loop, -1), be_const_closure(class_Tasmota_fast_loop_closure) }, - { be_const_key(load, -1), be_const_closure(class_Tasmota_load_closure) }, - { be_const_key(urlfetch, -1), be_const_closure(class_Tasmota_urlfetch_closure) }, - { be_const_key(gen_cb, -1), be_const_closure(class_Tasmota_gen_cb_closure) }, - { be_const_key(_rules, -1), be_const_var(1) }, - { be_const_key(urlfetch_cmd, -1), be_const_closure(class_Tasmota_urlfetch_cmd_closure) }, + { be_const_key(wire1, 8), be_const_var(8) }, + { be_const_key(compile, -1), be_const_closure(class_Tasmota_compile_closure) }, + { be_const_key(add_fast_loop, 24), be_const_closure(class_Tasmota_add_fast_loop_closure) }, + { be_const_key(is_network_up, -1), be_const_closure(class_Tasmota_is_network_up_closure) }, { be_const_key(remove_cron, -1), be_const_closure(class_Tasmota_remove_cron_closure) }, - { be_const_key(remove_timer, -1), be_const_closure(class_Tasmota_remove_timer_closure) }, - { be_const_key(get_light, 4), be_const_closure(class_Tasmota_get_light_closure) }, - { be_const_key(next_cron, 3), be_const_closure(class_Tasmota_next_cron_closure) }, - { be_const_key(_wnu, 1), be_const_var(7) }, - { be_const_key(_crons, 0), be_const_var(4) }, + { be_const_key(exec_cmd, 3), be_const_closure(class_Tasmota_exec_cmd_closure) }, + { be_const_key(set_light, 12), be_const_closure(class_Tasmota_set_light_closure) }, + { be_const_key(time_str, 57), be_const_closure(class_Tasmota_time_str_closure) }, + { be_const_key(remove_timer, 20), be_const_closure(class_Tasmota_remove_timer_closure) }, + { be_const_key(hs2rgb, 41), be_const_closure(class_Tasmota_hs2rgb_closure) }, + { be_const_key(cmd, -1), be_const_closure(class_Tasmota_cmd_closure) }, + { be_const_key(exec_tele, -1), be_const_closure(class_Tasmota_exec_tele_closure) }, + { be_const_key(remove_rule, 30), be_const_closure(class_Tasmota_remove_rule_closure) }, + { be_const_key(wd, -1), be_const_var(13) }, + { be_const_key(add_cmd, -1), be_const_closure(class_Tasmota_add_cmd_closure) }, + { be_const_key(find_op, 9), be_const_closure(class_Tasmota_find_op_closure) }, + { be_const_key(add_cron, 37), be_const_closure(class_Tasmota_add_cron_closure) }, + { be_const_key(_defer, -1), be_const_var(3) }, + { be_const_key(global, 16), be_const_var(11) }, + { be_const_key(settings, 54), be_const_var(12) }, + { be_const_key(run_network_up, -1), be_const_closure(class_Tasmota_run_network_up_closure) }, + { be_const_key(_rules, -1), be_const_var(1) }, + { be_const_key(gen_cb, 14), be_const_closure(class_Tasmota_gen_cb_closure) }, + { be_const_key(wire_scan, -1), be_const_closure(class_Tasmota_wire_scan_closure) }, + { be_const_key(add_extension, -1), be_const_closure(class_Tasmota_add_extension_closure) }, + { be_const_key(gc, -1), be_const_closure(class_Tasmota_gc_closure) }, + { be_const_key(wire2, -1), be_const_var(9) }, + { be_const_key(run_deferred, 48), be_const_closure(class_Tasmota_run_deferred_closure) }, + { be_const_key(init, -1), be_const_closure(class_Tasmota_init_closure) }, + { be_const_key(defer, -1), be_const_closure(class_Tasmota_defer_closure) }, + { be_const_key(set_timer, -1), be_const_closure(class_Tasmota_set_timer_closure) }, + { be_const_key(next_cron, -1), be_const_closure(class_Tasmota_next_cron_closure) }, + { be_const_key(exec_rules, -1), be_const_closure(class_Tasmota_exec_rules_closure) }, + { be_const_key(unload_extension, -1), be_const_closure(class_Tasmota_unload_extension_closure) }, + { be_const_key(add_rule_once, 50), be_const_closure(class_Tasmota_add_rule_once_closure) }, + { be_const_key(cmd_res, -1), be_const_var(10) }, + { be_const_key(_ccmd, 29), be_const_var(5) }, + { be_const_key(add_rule, -1), be_const_closure(class_Tasmota_add_rule_closure) }, + { be_const_key(remove_driver, 42), be_const_closure(class_Tasmota_remove_driver_closure) }, + { be_const_key(_fl, -1), be_const_var(0) }, + { be_const_key(check_not_method, -1), be_const_closure(class_Tasmota_check_not_method_closure) }, + { be_const_key(_drivers, -1), be_const_var(6) }, + { be_const_key(find_key_i, 39), be_const_closure(class_Tasmota_find_key_i_closure) }, + { be_const_key(get_light, -1), be_const_closure(class_Tasmota_get_light_closure) }, + { be_const_key(load, 35), be_const_closure(class_Tasmota_load_closure) }, + { be_const_key(fast_loop, 53), be_const_closure(class_Tasmota_fast_loop_closure) }, + { be_const_key(_debug_present, -1), be_const_var(14) }, + { be_const_key(run_timers, 26), be_const_closure(class_Tasmota_run_timers_closure) }, + { be_const_key(urlfetch, -1), be_const_closure(class_Tasmota_urlfetch_closure) }, + { be_const_key(_timers, -1), be_const_var(2) }, + { be_const_key(_wnu, 18), be_const_var(7) }, + { be_const_key(urlfetch_cmd, -1), be_const_closure(class_Tasmota_urlfetch_cmd_closure) }, + { be_const_key(remove_fast_loop, -1), be_const_closure(class_Tasmota_remove_fast_loop_closure) }, + { be_const_key(_crons, -1), be_const_var(4) }, + { be_const_key(try_rule, -1), be_const_closure(class_Tasmota_try_rule_closure) }, + { be_const_key(event, -1), be_const_closure(class_Tasmota_event_closure) }, + { be_const_key(remove_cmd, -1), be_const_closure(class_Tasmota_remove_cmd_closure) }, + { be_const_key(run_cron, 1), be_const_closure(class_Tasmota_run_cron_closure) }, })), (bstring*) &be_const_str_Tasmota ); diff --git a/tasmota/berry/extensions/Leds_Panel.tapp b/tasmota/berry/extensions/Leds_Panel.tapp new file mode 100644 index 0000000000000000000000000000000000000000..cba48be17818fbddbeb9a644c8819f00ad46798e GIT binary patch literal 36944 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. +# + +# make sure we use `webserver_async` if it's already solidified +if !global.contains("webserver_async") || type(global.webserver_async) != 'class' + class webserver_async + ############################################################# + # class webserver_async_cnx + # + # This instance represents an active connection between + # the server and a client (TCP connection) + ############################################################# + static class webserver_async_cnx + var server # link to server object + var cnx # holds the tcpclientasync instance + var close_after_send # if true, close after we finished sending the out_buffer + var fastloop_cb # cb for fastloop + var buf_in # incoming buffer + var buf_in_offset + var buf_out + var phase # parsing phase: 0/ status line, 1/ headers, 2/ payload + # request + var req_verb # verb for request (we support only GET) + var req_uri # URI for request + var req_version # HTTP version for request + var header_host # 'Host' header - useful for redirections + # response + var resp_headers # (string) aggregate headers + var chunked # if true enable chunked encoding (default true) + # conversion + static var CODE_TO_STRING = { + # 100: "Continue", + 200: "OK", + # 204: "No Content", + 301: "Moved Permanently", + # 400: "Bad Request", + # 401: "Unauthorized", + # 403: "Payment Required", # not sure it's useful in Tasmota context + 404: "Not Found", + 500: "Internal Server Error", + # 501: "Not Implemented" + } + + ############################################################# + # init + # + # Called when a new connection is received from a client + # Arg: + # - server : main instance of `webserver_async` server + # - cnx : instance of `tcpclientasync` + # + # By default: + # version is HTTP/1.1 + # response is chunked-encoded + def init(server, cnx) + self.server = server + self.cnx = cnx + self.buf_in = '' + self.buf_in_offset = 0 + self.buf_out = bytes() + self.phase = 0 # 0 = status line + # util + self.close_after_send = false + # response + self.resp_headers = '' + self.chunked = true + # register cb + self.fastloop_cb = def () self.loop() end # the closure needs to be kept, to allow removal of fast_loop later + tasmota.add_fast_loop(self.fastloop_cb) + end + + ############################################################# + # set_chunked: sets whether the response is chunked encoded + # true by default + # + def set_chunked(chunked) + self.chunked = bool(chunked) + end + + ############################################################# + # connected: returns `true` if the connection is still open + # + def connected() + return self.cnx ? self.cnx.connected() : false + end + + ############################################################# + # buf_out_empty: returns `true` if out buffer is empty, + # i.e. all content was sent to client + # + def buf_out_empty() + return size(self.buf_out) == 0 + end + + ############################################################# + # _write: (internal method) write bytes + # + # Arg: + # v must be bytes() + # + def _write(v) + var sz_v = size(v) + if (sz_v == 0) return end # do nothing if empty content + + var buf_out = self.buf_out # keep a copy of reference in local variable (avoids multiple dereferencing) + var buf_out_sz = size(buf_out) + buf_out.resize(buf_out_sz + sz_v) + buf_out.setbytes(buf_out_sz, v) + + self._send() # try sending `self.buf_out` now + end + + ############################################################# + # close: close the connection to client + # + # Can be called multiple times + # Does nothing if connection is already closed + # + def close() + # log(f"WEB: closing cnx", 3) + if (self.cnx != nil) self.cnx.close() end + self.cnx = nil + end + + ############################################################# + # loop: called by fastloop every 5 ms + # + def loop() + if self.cnx == nil # if connection is closed, this instance is marked for deletion + tasmota.remove_fast_loop(self.fastloop_cb) # remove from fast_loop + self.fastloop_cb = nil # fastloop_cb can be garbage collected + return + end + + self._send() # try sending any pending output data + + var cnx = self.cnx # keep copy + if (cnx == nil) return end # it's possible that it was closed after _send() + + # any new incoming data received? + if cnx.available() > 0 + var buf_in_new = cnx.read() # read bytes() object + if (!self.buf_in) # use the same instance if none present + self.buf_in = buf_in_new + else # or append to current incoming buffer + self.buf_in += buf_in_new + end + end + + # parse incoming data if any + if (self.buf_in) + self.parse() + end + end + + ############################################################# + # _send: (internal method) try sending pendin data out + # + # the content is in `self.buf_out` + # + def _send() + # any data waiting to go out? + var cnx = self.cnx + if (cnx == nil) return end # abort if connection is closed + + var buf_out = self.buf_out # keep reference in local variable + if size(buf_out) > 0 + if cnx.listening() # is the client ready to receive? + var sent = cnx.write(buf_out) # send the buffer, `sent` contains the number of bytes actually sent + if sent > 0 # did we succeed in sending anything? + # we did sent something + if sent >= size(buf_out) # the entire buffer was sent, clear it + # all sent + self.buf_out.clear() + else # buffer was sent partially, remove what was sent from `out_buf` + # remove the first bytes already sent + self.buf_out.setbytes(0, buf_out, sent) # copy to index 0 (start of buffer), content from the same buffer starting at offset 'sent' + self.buf_out.resize(size(buf_out) - sent) # shrink buffer + end + end + end + else + # empty buffer, do the cleaning + # self.buf_out.clear() # TODO not needed? + # self.buf_in_offset = 0 # TODO really useful? + + if self.close_after_send # close connection if we have sent everything + self.close() + end + end + end + + ############################################################# + # parse incoming + # + # pre: self.buf_in is not empty + # post: self.buf_in has made progress (smaller or '') + def parse() + # log(f"WEB: incoming {bytes().fromstring(self.buf_in).tohex()}", 3) + if self.phase == 0 + self.parse_http_req_line() + elif self.phase == 1 + self.parse_http_headers() + elif self.phase == 2 + self.parse_http_payload() + end + end + + ############################################################# + # parse incoming request + # + # pre: self.buf_in is not empty + # post: self.buf_in has made progress (smaller or '') + def parse_http_req_line() + var m = global._re_http_srv.match2(self.buf_in, self.buf_in_offset) + # Ex: "GET / HTTP/1.1\r\n" + if m + var offset = m[0] + self.req_verb = m[1] # GET/POST... + self.req_uri = m[2] # / + self.req_version = m[3] # "1.0" or "1.1" + self.phase = 1 # proceed to parsing headers + self.buf_in = self.buf_in[offset .. ] # remove what we parsed + if tasmota.loglevel(4) + log(f"WEB: HTTP verb: {self.req_verb} URI: '{self.req_uri}' Version:{self.req_version}", 4) + end + self.parse_http_headers() + elif size(self.buf_in) > 100 # if no match and we still have 100 bytes, then it fails + log("WEB: error invalid request", 4) + self.close() + self.buf_in = '' + end + end + + ############################################################# + # parse incoming headers + def parse_http_headers() + while true + # print("parse_http_headers", "self.buf_in_offset=", self.buf_in_offset) + var m = global._re_http_srv_header.match2(self.buf_in, self.buf_in_offset) + # print("m=", m) + # Ex: [32, 'Content-Type', 'application/json'] + if m + self.event_http_header(m[1], m[2]) + self.buf_in_offset += m[0] + else # no more headers + var m2 = global._re_http_srv_body.match2(self.buf_in, self.buf_in_offset) + if m2 + # end of headers + # we keep \r\n which is used by pattern + self.buf_in = self.buf_in[self.buf_in_offset + m2[0] .. ] # truncate + self.buf_in_offset = 0 + + # self.event_http_headers_end() # no more headers + self.phase = 2 + self.parse_http_payload() # continue to parsing payload + end + if size(self.buf_in) > 1024 # we don't accept a single header larger than 1KB + log("WEB: error header is bigger than 1KB", 4) + self.close() + self.buf_in = '' + end + return + end + end + + end + + ############################################################# + # event_http_header: method called for each header received + # + # Default implementation only stores "Host" header + # and ignores all other headers + # + # Args: + # header_key: string + # header_value: string + # + def event_http_header(header_key, header_value) + # log(f"WEB: header key '{header_key}' = '{header_value}'") + + if (header_key == "Host") + self.header_host = header_value + end + end + + ############################################################# + # event_http_headers_end: called afte all headers are received + # + # By default does nothing + # + # def event_http_headers_end() + # end + + ############################################################# + # parse incoming payload (if any) + # + # Calls the server's dispatcher with 'verb' and 'uri' + # + # Payload is in `self.buf_in` + # + def parse_http_payload() + # log(f"WEB: parsing payload '{bytes().fromstring(self.buf_in).tohex()}'") + # dispatch request before parsing payload + self.server.dispatch(self, self.req_uri, self.req_verb) + end + + + ############################################################# + # Responses + ############################################################# + # send_header: add header to the response + # + # Args: + # name: key of header + # value: value of header + # first: if 'true' prepend, or append if 'false' + def send_header(name, value, first) + if first + self.resp_headers = f"{name}: {value}\r\n{self.resp_headers}" + else + self.resp_headers = f"{self.resp_headers}{name}: {value}\r\n" + end + end + + ############################################################# + # send: send response to client + # + # Args + # code: (int) http code (ex: 200) + # content_type: (string, opt) MIME type, "text/html" if not specified + # content: (bytes or string, opt) first content to send to client (you can send more later) + # + def send(code, content_type, content) + var response = f"HTTP/1.1 {code} {self.CODE_TO_STRING.find(code, 'UNKNOWN')}\r\n" + self.send_header("Content-Type", content_type ? content_type : "text/html", true) + + self.send_header("Accept-Ranges", "none") + # chunked encoding? + if self.chunked + self.send_header("Transfer-Encoding", "chunked") + end + # cors? + if self.server.cors + self.send_header("Access-Control-Allow-Origin", "*") + self.send_header("Access-Control-Allow-Methods", "*") + self.send_header("Access-Control-Allow-Headers", "*") + end + # others + self.send_header("Connection", "close") + + response += self.resp_headers + response += "\r\n" + self.resp_headers = nil + + # send status-line and headers + self.write_raw(response) + + # send first part of content + if (content) self.write(content) end + end + + ############################################################# + # write: writes a bytes or string piece of content + # + # If chunked encoding is enabled, it is sent as a separate chunk + # + # If content is empty, it can be sent as an empty chunk + # which is an indicator of end-of-content + # + def write(v) + if type(v) == 'string' # if string, convert to bytes + v = bytes().fromstring(v) + end + + # use chunk encoding + if self.chunked + var p1 = self.server.p1 + p1.clear() + p1.append(f"{size(v):X}\r\n") + p1.append(v) + p1.append("\r\n") + + # log(f"WEB: sending chunk '{p1.tohex()}'") + self._write(p1) + else + self._write(v) + end + end + + ############################################################# + # write_raw: low-level write of string or bytes (without chunk encoding) + # + # If content is empty, nothing is sent + # + def write_raw(v) + if (size(v) == 0) return end + + if type(v) == 'string' # if string, convert to bytes + v = bytes().fromstring(v) + end + + self._write(v) + end + + ############################################################# + # content_stop: signal that the response is finished + # + def content_stop() + self.write('') # send 'end-of-content' for chunked encoding + self.close_after_send = true # close connection when everything was sent to client + end + end + + ####################################################################### + # class webserver_async_dispatcher + # + # Pre-register callbacks triggered when a certain URL is accessed + # + # You can register either a pure function or a method and an instance + # + # Pure function: + # webserver_async_dispatcher(uri_prefix, nil, func, verb) + # will call: + # func(cnx, uri, verb) + # + # Instance and method: + # webserver_async_dispatcher(uri_prefix, instance, method, verb) + # will call: + # insatnce.method(cnx, uri, verb) + # + # Args in: + # uri_prefix: prefix string for matchin URI, must start with '/' + # cb_obj: 'nil' for pure function or instance from which we call a method + # cb_mth: pure function or method to call + # verb: verb to match, only supported: 'GET' or 'nil' for any + # + # Args of callback: + # cnx: instance of 'webserver_async_cnx' for the current connection + # uri: full uri of request + # verb: verb received (currently only GET is supported) + ####################################################################### + static class webserver_async_dispatcher + var uri_prefix # prefix string, must start with '/' + var verb # verb to match, or nil for ANY + var cb_obj # callback object (sent as first argument if not 'nil') + var cb_mth # callback function + + def init(uri_prefix, cb_obj, cb_mth, verb) + self.uri_prefix = uri_prefix + self.cb_obj = cb_obj + self.cb_mth = cb_mth + self.verb = verb + end + + # return true if matched + def dispatch(cnx, uri, verb) + import string + if string.find(uri, self.uri_prefix) == 0 + var match = false + if (self.verb == nil) || (self.verb == verb) + # method is valid + var cb_obj = self.cb_obj + if (cb_obj != nil) + self.cb_mth(self.cb_obj, cnx, uri, verb) + else + self.cb_mth(cnx, uri, verb) + end + return true + end + end + return false + end + end + + ############################################################# + # class webserver_async + # + # This is the main class to call + ############################################################# + var local_port # listening port, 80 is already used by Tasmota + var server # instance of `tcpserver` + var fastloop_cb # closure used by fastloop + # var timeout # default timeout for tcp connection + var connections # list of active connections + # var auth # web authentication string (Basic Auth) or `nil`, in format `user:password` as bade64 + # var cmd # GET url command + var dispatchers + # copied in each connection + var chunked # if true enable chunked encoding (default true) + var cors # if true send CORS headers (default false) + # + var p1 # temporary object bytes() to avoid reallocation + + # static var TIMEOUT = 1000 # default timeout: 1000ms + # static var HTTP_REQ = "^(\\w+) (\\S+) HTTP\\/(\\d\\.\\d)\r\n" + # static var HTTP_HEADER_REGEX = "([A-Za-z0-9-]+): (.*?)\r\n" # extract a header with its 2 parts + # static var HTTP_BODY_REGEX = "\r\n" # end of headers + + ############################################################# + # init + def init(port, timeout) + # if (timeout == nil) timeout = self.TIMEOUT end + # if (timeout == nil) timeout = 1000 end + self.connections = [] + self.dispatchers = [] + self.server = tcpserver(port) # throws an exception if port is not available + self.chunked = true + self.cors = false + self.p1 = bytes(100) # reserve 100 bytes by default + # TODO what about max_clients ? + self.compile_re() + # register cb + tasmota.add_driver(self) + self.fastloop_cb = def () self.loop() end + tasmota.add_fast_loop(self.fastloop_cb) + end + + ############################################################# + # compile once for all the regex + def compile_re() + import re + if !global.contains("_re_http_srv") + # global._re_http_srv = re.compile(self.HTTP_REQ) + # global._re_http_srv_header = re.compile(self.HTTP_HEADER_REGEX) + # global._re_http_srv_body = re.compile(self.HTTP_BODY_REGEX) + global._re_http_srv = re.compile("^(\\w+) (\\S+) HTTP\\/(\\d\\.\\d)\r\n") + global._re_http_srv_header = re.compile("([A-Za-z0-9-]+): (.*?)\r\n") + global._re_http_srv_body = re.compile("\r\n") + end + end + + ############################################################# + # enable or disable chunked mode (enabled by default) + def set_chunked(chunked) + self.chunked = bool(chunked) + end + + ############################################################# + # enable or disable CORS mode (enabled by default) + def set_cors(cors) + self.cors = bool(cors) + end + + ############################################################# + # Helper function to encode integer as hex (uppercase) + static def bytes_format_hex(b, i, default) + b.clear() + if (i == nil) b .. default return end + # sanity check + if (i < 0) i = -i end + if (i < 0) return end # special case for MININT + if (i == 0) b.resize(1) b[0] = 0x30 return end # return bytes("30") + + b.resize(8) + var len = 0 + while i > 0 + var digit = i & 0x0F + if (digit < 10) + b[len] = 0x30 + digit + else + b[len] = 0x37 + digit # 0x37 = 0x41 ('A') - 10 + end + len += 1 + i = (i >> 4) + end + # reverse order + b.resize(len) + b.reverse() + end + + ############################################################# + # Helper function to encode integer as int + static def bytes_append_int(b, i, default) + var sz = size(b) + if (i == 0) # just append '0' + b.resize(sz + 1) + b[sz] = 0x30 + elif (i != nil) # we have a non-zero value + var negative = false + # sanity check + if (i < 0) i = -i negative = true end + if (i < 0) return b end # special case for MININT + + if negative + b.resize(sz + 1) + b[sz] = 0x2D + sz += 1 + end + + var start = sz + while i > 0 + var digit = i % 10 + b.resize(sz + 1) + b[sz] = 0x30 + digit + sz += 1 + i = (i / 10) + end + # reverse order starting where the integer is + b.reverse(start) + + else # i is `nil`, append default + b.append(default) + end + return b + end + + ############################################################# + # closing web server + def close() + tasmota.remove_driver(self) + tasmota.remove_fast_loop(self.fastloop_cb) + self.fastloop_cb = nil + self.server.close() + + # close all active connections + for cnx: self.connections + cnx.close() + end + self.connections = nil # and free memory + end + + ############################################################# + # clean connections + # + # Remove any connections that is closed or in error + def clean_connections() + var idx = 0 + while idx < size(self.connections) + var cnx = self.connections[idx] + # remove if not connected + if !cnx.connected() + # log("WEB: does not appear to be connected") + cnx.close() + self.connections.remove(idx) + else + idx += 1 + end + end + end + + ############################################################# + # called by fastloop + def loop() + self.clean_connections() + # check if any incoming connection + while self.server.hasclient() + # retrieve new client + var cnx = self.webserver_async_cnx(self, self.server.acceptasync()) + cnx.set_chunked(self.chunked) + self.connections.push(cnx) + end + end + + ############################################################# + # add to dispatcher + def on(prefix, obj, mth, verb) + var dispatcher = self.webserver_async_dispatcher(prefix, obj, mth, verb) + self.dispatchers.push(dispatcher) + end + + ############################################################# + # add to dispatcher + def dispatch(cnx, uri, verb) + var idx = 0 + while idx < size(self.dispatchers) + if (self.dispatchers[idx].dispatch(cnx, uri, verb)) + return + end + idx += 1 + end + # fallback unsupported request + cnx.send(500, "text/plain") + cnx.write("Unsupported") + cnx.content_stop() + end + + end + + # assign the class to a global + global.webserver_async = webserver_async +end + +class leds_panel + var port + var web + var sampling_interval + var p1, p_leds + var strip # strip object + var h, w, cell_size, cell_space + + static var EXT_NAME = "leds_panel" + static var SAMPLING = 100 + static var PORT = 8886 # default port 8886 + static var HTML_WIDTH = 290 + static var HTML_HEAD1 = + "" + static var HTML_URL_F = + "" + static var HTML_HEAD2 = + '' + '' + '' + '' + static var HTML_CONTENT = + '' + '' + '' + '' + '
' + '' + '
' + static var HTML_END = + '' + '' + + def init(port) + import gpio + if !gpio.pin_used(gpio.WS2812, 0) + log("LED: no leds configured, can't start leds_panel", 3) + return + end + if (port == nil) port = self.PORT end + self.port = port + + # start network part + if tasmota.is_network_up() + self.init_network() + else + tasmota.when_network_up(/ -> self.init_network()) + end + end + + def init_network() + self.web = global.webserver_async(self.port) + self.sampling_interval = self.SAMPLING + + self.strip = Leds() + self.p1 = bytes(100) + self.p_leds = self.strip.pixels_buffer() + + self.web.set_chunked(true) + self.web.set_cors(true) + self.web.on("/leds_feed", self, self.send_info_feed) # feed with leds values + self.web.on("/leds", self, self.send_info_page) # display leds page + + tasmota.add_driver(self, self.EXT_NAME) # also register as `leds_panel` extension + end + + ################################################################################# + # unload + # + # Uninstall the extension and deallocate all resources + ################################################################################# + def unload() + self.close() # stop server + tasmota.remove_driver(self) # remove driver, normally already done by tasmota.unload_ext + global.undef("webserver_async") # free `webserver_async` if it was loaded as part of this file + end + + ################################################################################# + # stop + # + # Stop server + ################################################################################# + def close() + tasmota.remove_driver(self) + if self.web + self.web.close() + end + end + + def update() + self.p_leds = self.strip.pixels_buffer(self.p_leds) # update buffer + self.h = tasmota.settings.light_pixels_height_1 + 1 + self.w = self.strip.pixel_count() / (tasmota.settings.light_pixels_height_1 + 1) + self.cell_size = tasmota.int(self.HTML_WIDTH / self.w, 4, 25) + self.cell_space = (self.cell_size <= 6) ? 1 : 2 + end + + def send_info_page(cnx, uri, verb) + import string + + self.update() + var host = cnx.header_host + var host_split = string.split(host, ':') # need to make it stronger + var ip = host_split[0] + var port = 80 + if size(host_split) > 1 + port = int(host_split[1]) + end + + cnx.send(200, "text/html") + cnx.write(self.HTML_HEAD1) + cnx.write(format(self.HTML_URL_F, ip, port)) + cnx.write(self.HTML_HEAD2) + cnx.write(self.HTML_CONTENT) + cnx.write(self.HTML_END) + + cnx.content_stop() + end + + static class feeder + var app # overarching app (debug_panel) + var cnx # connection object + + def init(app, cnx) + self.app = app + self.cnx = cnx + tasmota.add_driver(self) + end + + def close() + tasmota.remove_driver(self) + end + + def every_100ms() + self.send_feed() + end + + def send_feed() + var cnx = self.cnx + if !cnx.connected() + self.close() + return + end + + var server = self.cnx.server + if cnx.buf_out_empty() + # if out buffer is not empty, do not send any new information + var app = self.app + app.update() + var payload1 = app.p1 + var p_leds = app.p_leds + + payload1.clear() + payload1 .. "id:" + server.bytes_append_int(payload1, tasmota.millis()) + payload1 .. "\r\nevent:leds\r\ndata:" + + payload1 .. '{"w":' + server.bytes_append_int(payload1, app.w) + payload1 .. ',"h":' + server.bytes_append_int(payload1, app.h) + payload1 .. ',"clsz":' + server.bytes_append_int(payload1, app.cell_size) + payload1 .. ',"clsp":' + server.bytes_append_int(payload1, app.cell_space) + payload1 .. ',"rev":' + server.bytes_append_int(payload1, tasmota.settings.light_pixels_reverse) + payload1 .. ',"alt":' + server.bytes_append_int(payload1, tasmota.settings.light_pixels_alternate) + payload1 .. ',"hex":"' + payload1.appendhex(p_leds) + payload1 .. '"}\r\n\r\n' + cnx.write(payload1) + end + end + + end + + def send_info_feed(cnx, uri, verb) + cnx.set_chunked(false) # no chunking since we use EventSource + cnx.send(200, "text/event-stream") + # + var feed = feeder(self, cnx) + feed.send_feed() # send first values immediately + end + + def web_add_main_button() + self.send_iframe_code() + end + + def send_iframe_code() + import webserver + self.update() + var ip = tasmota.wifi().find('ip') + if (ip == nil) + ip = tasmota.eth().find('ip') + end + if (ip != nil) + var height = self.h * self.cell_size + 10 + webserver.content_send( + f'' + '' + '' + '' + '' + '' + '
' + '
' + '' + '' + '' + '' + '
' + '
' + '' + ) + webserver.content_send( + '' + ) + end + end + +end + +return leds_panel() diff --git a/tasmota/berry/extensions/Leds_Panel/manifest.json b/tasmota/berry/extensions/Leds_Panel/manifest.json new file mode 100644 index 000000000..492701cd3 --- /dev/null +++ b/tasmota/berry/extensions/Leds_Panel/manifest.json @@ -0,0 +1,8 @@ +{ + "name": "Leds Panel", + "version": "0x19090100", + "description": "Realtime display of the WS2812 leds in browser", + "author": "Stephan Hadinger", + "min_tasmota": "0x0F000100", + "features": "" +} \ No newline at end of file diff --git a/tasmota/berry/extensions/Partition_Wizard.tapp b/tasmota/berry/extensions/Partition_Wizard.tapp new file mode 100644 index 0000000000000000000000000000000000000000..8c5e88d4b62f681bfb9149c380c5055a42839960 GIT binary patch literal 17906 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 self.do_safeboot_partitioning()) # delay by 5 s + tasmota.set_timer(5000, /-> self.do_safeboot_partitioning(), "partition_wizard_timer") # delay by 5 s end - tasmota.add_rule("Wifi#Connected=1", continue_after_5s, "parwiz_5s1") - tasmota.add_rule("Wifi#Connected==1", continue_after_5s, "parwiz_5s2") - + tasmota.when_network_up(continue_after_5s) end end + #- ---------------------------------------------------------------------- -# + # unload + #- ---------------------------------------------------------------------- -# + def unload() + import webserver + webserver.remove_route("/part_wiz", webserver.HTTP_GET) + webserver.remove_route("/part_wiz", webserver.HTTP_POST) + tasmota.remove_driver(self) + tasmota.remove_timer("partition_wizard_timer") + end + # ---------------------------------------------------------------------- - # Patch partition core since we can't chang the solidified code + # Patch partition core since we can't change the solidified code # ---------------------------------------------------------------------- def patch_partition_core(p) var otadata = p.otadata @@ -881,26 +891,5 @@ class Partition_wizard_UI webserver.on("/part_wiz", / -> self.page_part_ctl(), webserver.HTTP_POST) end end -partition_wizard.Partition_wizard_UI = Partition_wizard_UI - -#- create and register driver in Tasmota -# -if tasmota - import partition_core - var partition_wizard_ui = partition_wizard.Partition_wizard_UI() - tasmota.add_driver(partition_wizard_ui) - ## can be removed if put in 'autoexec.bat' - partition_wizard_ui.web_add_handler() -end - -return partition_wizard - -#- Example - -import partition - -# read -p = partition.Partition() -print(p) - --# +return Partition_wizard_UI() diff --git a/tasmota/berry/extensions/Partition_Wizard/partition_wizard.bec b/tasmota/berry/extensions/Partition_Wizard/partition_wizard.bec new file mode 100644 index 0000000000000000000000000000000000000000..7aba7c7801a9374f1eccd085a1130808345fa217 GIT binary patch literal 16704 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 K#D9{&*#80&<{3=@ literal 0 HcmV?d00001 diff --git a/tasmota/berry/extensions/Wifi_Memory_Sticker.tapp b/tasmota/berry/extensions/Wifi_Memory_Sticker.tapp new file mode 100644 index 0000000000000000000000000000000000000000..aaa5ba624fce56af2602832b620683dd95d1716f GIT binary patch literal 3129 zcmcImUuz>(6i;ne*%aSI1Vs)BaS~|Kq_w+i(o_^HEvry%mt~j2?9I%X%~|3H(KkJJ{v@+$S{JMnCb_xi{LVS|{JZDi{_;w>WS;2T zXOG|f?d#glOQn)|S4(e|*hmYUpwk-QgQMG}< zd))pMLm|)XL(QG1C|jDvaSy)aF*Hx0*}jrz5n;Wcd?9^o6o#onl_?zHLe`K)+(V^X zCrU(RSHP7|6)+s23p|1+u6P1Uz!-CDqCt$~&!Y$P^UArQ=klpO{mo!RCv$2SIO zrb3}vi)^)VqA^ljMD+zy8)b~#^1(Fx`nzY3k58%x-@j5SnfG-H{{mQ^2|unM`#;e; zp9$3)dCJu!jF6@iWa(6{(tfr!{#U*jgG3f+9%ABRP+DR%^eIf_qa-z;u0;$1dK!cW zA)~;?Y>16=`9>@)3dyXVD}w()j}tJZ7A1O_GC*lY#gJs(-qF#4y|??pNA}^-qfd72 zhx;GzL!Wp6D%(n*1-Mg5|Ful0&&S-=ez$Wkp7ea=Ltm%sSSYS3jk*#8l6{I7If_Z= zJf>8mg6Ot;Q$99OA{c4x4TN-2b~oY)6;i-mN@NyMtx%A3Mr=yv@{#IpwQKnf1+3|a zK*%nYPQBT5Y)^)bnbLMtMa@Nz z8VJ{QN@Ww#V&%J%WXih2z-tiERC zBXGHj19p~lRUgw@HCa4T5b(%!HFMT64(xQ-HoLZoa(0fa>k@}TNe533SIy-nogvxc z-qcGb-|N;Wwo*@k5ubuvj))lrT!-CZihsh#H$NM)PNf0OPB88Th3 zY`gpvlB(_}H-H72>j3-K=ZA;;P;+awHTnkk!_cDorn>E0)3O6oU2XH-vv!Jts5pUb zLQT>3Iw`nJ+_;X|xsKR|G;gP(69tvE#LXtPu6v&M(-$KaaD8Sq))GIyn25yVJAG(w zZNd9cNsXyM7b-7k!&JcC_J0&`?~(BZb)*Q2F=bdPv z;@)}gtn@akTLw=35YcK}Jf((USSv=MQI{0DL_LzxqU(XmWp?44dGC+UcE0(Y1~~J+ zN*DffbJBF;GgIH(J%3ILD`xPikjo!ZEzMokNfatnie~&UJnc!l(@vh0?#WUn" + ".wifi{width:18px;height:18px;position:relative}" + ".arc{padding:0;position:absolute;border:2px solid transparent;border-radius:50%;border-top-color:var(--c_frm)}" + ".a0{width:2px;height:3px;top:10px;left:11px}" + ".a1{width:6px;height:6px;top:7px;left:9px}" + ".a2{width:12px;height:12px;top:4px;left:6px}" + ".a3{width:18px;height:18px;top:1px;left:3px}" + ".arc.active{border-top-color:var(--c_ttl)}" + "" + + def init() + + tasmota.add_driver(self) + end + + def unload() + tasmota.remove_driver(self) + end + + ################################################################################# + # called when displaying the left status line + def web_status_line_left() + import webserver + # display wifi + if tasmota.wifi('up') + webserver.content_send(self.HTTP_HEAD_STYLE_WIFI) + var rssi = tasmota.wifi('rssi') + webserver.content_send(format("
", + tasmota.wifi('quality'), rssi, + rssi >= -55 ? "active" : "", + rssi >= -70 ? "active" : "", + rssi >= -85 ? "active" : "")) + end + # display free heap + webserver.content_send(f" {tasmota.memory('heap_free')}k") + end +end + +return Wifi_Memory_Sticker() diff --git a/tasmota/berry/leds_panel/autoexec.be b/tasmota/berry/leds_panel/autoexec.be new file mode 100644 index 000000000..94821fe81 --- /dev/null +++ b/tasmota/berry/leds_panel/autoexec.be @@ -0,0 +1,6 @@ +# Led panel web app +do # embed in `do` so we don't add anything to global namespace + import introspect + var leds_panel = introspect.module('leds_panel', true) # load module but don't cache + tasmota.add_driver(leds_panel, "leds_panel") +end diff --git a/tasmota/berry/leds_panel/leds_panel.be b/tasmota/berry/leds_panel/leds_panel.be index 45e4f29c3..d7fb031c1 100644 --- a/tasmota/berry/leds_panel/leds_panel.be +++ b/tasmota/berry/leds_panel/leds_panel.be @@ -705,6 +705,7 @@ class leds_panel var strip # strip object var h, w, cell_size, cell_space + static var EXT_NAME = "leds_panel" static var SAMPLING = 100 static var PORT = 8886 # default port 8886 static var HTML_WIDTH = 290 @@ -826,9 +827,25 @@ class leds_panel self.web.on("/leds_feed", self, self.send_info_feed) # feed with leds values self.web.on("/leds", self, self.send_info_page) # display leds page - tasmota.add_driver(self) + tasmota.add_driver(self, self.EXT_NAME) # also register as `leds_panel` extension end + ################################################################################# + # unload + # + # Uninstall the extension and deallocate all resources + ################################################################################# + def unload() + self.close() # stop server + tasmota.remove_driver(self) # remove driver, normally already done by tasmota.unload_ext + global.undef("webserver_async") # free `webserver_async` if it was loaded as part of this file + end + + ################################################################################# + # stop + # + # Stop server + ################################################################################# def close() tasmota.remove_driver(self) self.web.close() diff --git a/tasmota/berry/modules/Partition_Wizard.tapp b/tasmota/berry/modules/Partition_Wizard.tapp index 0628cb2c1f7ca39d29f454ca4a4e309d6180e804..43bfb817b2c425d606e6b28c0b88cdade5cb2d4f 100644 GIT binary patch delta 1037 zcmaJ=T}TvB6h8OP?Ck99&bsDkFU}D<0U%E)XvEl8Qp&!N@?af$rC_q+ zCgX_6XQk6-#u>NGVaEkv-wcE4t*iV>tckGA*40TF9M|#pcD!4mP>UG=lx3jW8V#s9 z%zhnYbwc=(@TodMKpT_Eo*j_XoC2|)JxrualGVy6#sxlzcokzIFnT~yC$s`=7;Wgs zWB}?6(CAtu7|DTb;AIg!gZn5`I&QHbq-`(bWPG%ID>Iz(t(XQ@GHE6~XT?B48Y_|Z5EJHE$rCi@}v$kpV`?hB` zXYe!t5JV-YCIoVKO0;eybcTvjRY5&WNw^ifDFhkYH+^RqpHv2E%kv%INx9~zGj4fF z5n#WIy4m8n4Yt!_u*K@n(ZU8^P%`t!e5rXQ6?40xo?tQpo;{ozu}v?PrM}HpmAXVh zh5A8wpZG)g|BALfKG;@6_+9#)va7*n&cn|MYYQCXqo?Z?ey^cgW((me_M&Qw6*cYf zT(Co8@0uq0O!374U#kBRVDUPQ_nrSm_-xH<$`%4EJYHu@EU#CQAbY4cgbe(a2KJ%)&}PTNK;)nJ bEo1>Kg#9ze>_OtBygRyY6E(_ULL~hQKr9Rx delta 978 zcmZWoO-vI(6n-c{eHfE=Zn?Gsiuv@Ho-evKV6`N0NgA) z9s`r?)o`+wmK=&(n(6{mABvCY+XVNp$x`Z7CnR+%Vi`kJH?cJT3}Zov{e&JTc5T&Z zhn-e7BuqDy;pfVA?8y0TCj%cTer@_<|7g?&d;G{RhyA#`T(sAly9qA)y=<-G%Haw7 zlCMR=d(xVnI3`eRmsR_dyh<=tQH?^stB!(k5+#-DFL&Z7qvi zN}&pS*fJhGTIkJ#lu_JDK?P5qdKbYW{SUl~zPMdk4-U+{_vU?h@6Gq+`3Cv0LF)N2 z3Sa;L0Vn{_1GKNvHYOxCLu6Y2)q$4Lx}wo~a*xmofV|Go*?u)7_oL;HC(m{zW$aSP zio7+~DtbO%m%6k3`}m%?)Hy=283=gSaz*2C{tu*OX;6#dsw=aKH>W>{C{t4k{~80E)X$C zeo%guT^CRFPefcBnP8%LxmV`Zo^Skk=uphEI}(30Tow1sy9%!l z^P=2)K>33FQgrpXQf~(=AjeB~6kGGrKLHAr;+w`5EsMWs7WK*Ted7inzIeoU26JL( e@HP=$$~nS6c6RgJ_&$HH<#2!I*5n#$jq5jaC+Fb+ delta 835 zcmZ8f%S%*I82`?>=RRi~ua%BXla|thm_<&B)Mz6VM%lu}fU^*8H|IzfoJV(VDl*`M z$c>AUvx!y(u7Z#_Ep8!HP>cS6R&DfeDB4AR*GG(P&i91h<9r`i$+K0`Jh`L-^Z-B% z;64B=0)++u-KGGT@5Q$m!@Qyuh(?=#Vi*nD)MB)Wdm&IQBoy-m4Nag6VAD+i>?v#= zC~H8%3Qg6(+@1nvG%O{`jR+$|yyYYUgKb02^#d>PsugG6TXg->M&UB;193@Tm1D<# z(nK8GTFt3@i`*%D6_Fl#Eq{!hBI0`Ipd9VLt%%+Hj;wZmCSqqaDKfcUVu*XWjM%t!~S)ta9{5+y(hc-zMUbo)Q=H?>63i5pG*j xe4x)|rXxkfr_sfHi-bhW0Zvzaj-E!2mwa!I`*u6b^9N4Uc<5G2v)qrYgTHJA(HZ~% diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index f5ab109b2..87cbf296b 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -1220,7 +1220,8 @@ //#define USE_IBEACON_ESP32 // Add support for Bluetooth LE passive scan of iBeacon devices using the internal ESP32 Bluetooth module //#define USE_WEBCAM // Add support for webcam -#define USE_AUTOCONF // Enable Esp32 autoconf feature, requires USE_BERRY and USE_WEBCLIENT_HTTPS (12KB Flash) +#define USE_AUTOCONF // Enable Esp32(x) autoconf feature, requires USE_BERRY and USE_WEBCLIENT_HTTPS (12KB Flash) +// #define USE_EXTENSION_MANAGER // Enable Esp32(x) extensions manager, requires USE_BERRY and USE_WEBCLIENT_HTTPS (9KB Flash) #define USE_BERRY // Enable Berry scripting language #define USE_BERRY_PYTHON_COMPAT // Enable by default `import python_compat` #define USE_BERRY_TIMEOUT 4000 // Timeout in ms, will raise an exception if running time exceeds this timeout diff --git a/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino b/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino index ef5c8cc97..c7f9c38ed 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino @@ -58,6 +58,10 @@ const char be_berry_init_code[] = "do import autoconf end " #endif // USE_AUTOCONF +#ifdef USE_EXTENSION_MANAGER + "do import extension_manager end " +#endif + #ifdef USE_LVGL "import lv " "import lv_tasmota "