From 4e60bd746542458478c47bedb7f12f34a004de95 Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Sat, 14 Jan 2023 11:38:51 +0100 Subject: [PATCH] Berry add `static class` to declare inner classes (#17699) --- CHANGELOG.md | 1 + lib/libesp32/berry/src/be_parser.c | 36 ++- lib/libesp32/berry/src/be_solidifylib.c | 3 + lib/libesp32/berry_tasmota/solidify_all.be | 4 +- .../src/solidify/solidified_animate_module.h | 12 + .../src/solidify/solidified_autoconf_module.h | 2 + .../solidified_crypto_spake2p_matter.h | 4 + .../src/solidify/solidified_driver_class.h | 2 + .../src/solidify/solidified_dyn.h | 2 + .../src/solidify/solidified_hue_bridge.h | 2 + .../src/solidify/solidified_i2c_axp192.h | 2 + .../src/solidify/solidified_i2c_axp202.h | 2 + .../src/solidify/solidified_i2c_driver.h | 2 + .../src/solidify/solidified_i2c_ft3663.h | 2 + .../src/solidify/solidified_leds.h | 228 +++++++++--------- .../src/solidify/solidified_leds_animator.h | 2 + .../src/solidify/solidified_lv_tasmota.h | 2 + .../solidify/solidified_lv_tasmota_widgets.h | 16 ++ .../src/solidify/solidified_mqtt.h | 4 + .../src/solidify/solidified_partition_core.h | 178 +++++++------- .../src/solidify/solidified_persist.h | 2 + .../src/solidify/solidified_tapp.h | 2 + .../src/solidify/solidified_tasmota_class.h | 2 + .../src/solidify/solidified_trigger_class.h | 2 + .../src/solidify/solidified_zigbee_zb_coord.h | 2 + .../solidified_zigbee_zcl_attribute.h | 6 + .../solidify/solidified_zigbee_zcl_frame.h | 2 + 27 files changed, 329 insertions(+), 195 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a663d6195..b4f8c20e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. - Berry ``crypto.AES_CCM`` (required by Matter protocol) - ESP32 support for BMPxxx sensors on two I2C busses (#17643) - Berry add implicit ``_class`` parameter to static methods +- Berry add ``static class`` to declare inner classes ### Breaking Changed diff --git a/lib/libesp32/berry/src/be_parser.c b/lib/libesp32/berry/src/be_parser.c index b3988fa60..5e58df6cc 100644 --- a/lib/libesp32/berry/src/be_parser.c +++ b/lib/libesp32/berry/src/be_parser.c @@ -407,7 +407,7 @@ static int new_localvar(bparser *parser, bstring *name) if (reg == -1) { bvalue *var; if (comp_is_strict(parser->vm)) { - if (find_localvar(finfo, name, 0) >= 0 && str(name)[0] != '.') { /* we do accept nested redifinition of internal variables starting with ':' */ + if (find_localvar(finfo, name, 0) >= 0 && str(name)[0] != '.') { /* we do accept nested redifinition of internal variables starting with '.' */ push_error(parser, "strict: redefinition of '%s' from outer scope", str(name)); } } @@ -1457,6 +1457,8 @@ static void classdef_stmt(bparser *parser, bclass *c, bbool is_static) be_stackpop(parser->vm, 1); } +static void classstaticclass_stmt(bparser *parser, bclass *c_out, bexpdesc *e_out); + static void classstatic_stmt(bparser *parser, bclass *c, bexpdesc *e) { bstring *name; @@ -1465,6 +1467,8 @@ static void classstatic_stmt(bparser *parser, bclass *c, bexpdesc *e) scan_next_token(parser); /* skip 'static' */ if (next_type(parser) == KeyDef) { /* 'static' 'def' ... */ classdef_stmt(parser, c, btrue); + } else if (next_type(parser) == KeyClass) { /* 'static' 'class' ... */ + classstaticclass_stmt(parser, c, e); } else { if (next_type(parser) == KeyVar) { scan_next_token(parser); /* skip 'var' if any */ @@ -1535,6 +1539,36 @@ static void class_stmt(bparser *parser) } } +static void classstaticclass_stmt(bparser *parser, bclass *c_out, bexpdesc *e_out) +{ + bstring *name; + /* [preceding 'static'] 'class' ID [':' ID] class_block 'end' */ + scan_next_token(parser); /* skip 'class' */ + if (match_id(parser, name) != NULL) { + bexpdesc e_class; /* new class object */ + check_class_attr(parser, c_out, name); /* check that the class names does not collide with another member */ + be_class_member_bind(parser->vm, c_out, name, bfalse); /* add the member slot as static */ + /* create the class object */ + bclass *c = be_newclass(parser->vm, name, NULL); + new_var(parser, name, &e_class); /* add a local var to the static initialization code for static members */ + be_code_class(parser->finfo, &e_class, c); + class_inherit(parser, &e_class); + class_block(parser, c, &e_class); + be_class_compress(parser->vm, c); /* compress class size */ + match_token(parser, KeyEnd); /* skip 'end' */ + /* add the code to copy the class object to the static member */ + bexpdesc e1 = *e_out; /* copy the class description */ + bexpdesc key; /* build the member key */ + init_exp(&key, ETSTRING, 0); + key.v.s = name; + /* assign the class to the static member */ + be_code_member(parser->finfo, &e1, &key); /* compute member accessor */ + be_code_setvar(parser->finfo, &e1, &e_class); /* set member */ + } else { + parser_error(parser, "class name error"); + } +} + static void import_stmt(bparser *parser) { bstring *name; /* variable name */ diff --git a/lib/libesp32/berry/src/be_solidifylib.c b/lib/libesp32/berry/src/be_solidifylib.c index 9a9f45fe3..58501e059 100644 --- a/lib/libesp32/berry/src/be_solidifylib.c +++ b/lib/libesp32/berry/src/be_solidifylib.c @@ -420,6 +420,9 @@ static void m_solidify_subclass(bvm *vm, bbool str_literal, bclass *cl, void* fo { const char * class_name = str(cl->name); + /* pre-declare class to support '_class' implicit variable */ + logfmt("\nextern const bclass be_class_%s;\n", class_name); + /* iterate on members to dump closures */ if (cl->members) { bmapnode *node; diff --git a/lib/libesp32/berry_tasmota/solidify_all.be b/lib/libesp32/berry_tasmota/solidify_all.be index 256632e75..7bfeae9dd 100755 --- a/lib/libesp32/berry_tasmota/solidify_all.be +++ b/lib/libesp32/berry_tasmota/solidify_all.be @@ -10,8 +10,8 @@ import solidify import string import re -# import sys -# sys.path().push('src/embedded') # allow to import from src/embedded +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," diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_animate_module.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_animate_module.h index 30f7a47a0..4eea694a5 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_animate_module.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_animate_module.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_Animate_rotate; + /******************************************************************** ** Solidified function: init ********************************************************************/ @@ -75,6 +77,8 @@ be_local_class(Animate_rotate, (bstring*) &be_const_str_Animate_rotate ); +extern const bclass be_class_Animate_from_to; + /******************************************************************** ** Solidified function: init ********************************************************************/ @@ -135,6 +139,8 @@ be_local_class(Animate_from_to, (bstring*) &be_const_str_Animate_from_to ); +extern const bclass be_class_Animate_back_forth; + /******************************************************************** ** Solidified function: init ********************************************************************/ @@ -216,6 +222,8 @@ be_local_class(Animate_back_forth, (bstring*) &be_const_str_Animate_back_forth ); +extern const bclass be_class_Animate_ins_goto; + /******************************************************************** ** Solidified function: init ********************************************************************/ @@ -263,6 +271,8 @@ be_local_class(Animate_ins_goto, (bstring*) &be_const_str_Animate_ins_goto ); +extern const bclass be_class_Animate_ins_ramp; + /******************************************************************** ** Solidified function: init ********************************************************************/ @@ -310,6 +320,8 @@ be_local_class(Animate_ins_ramp, (bstring*) &be_const_str_Animate_ins_ramp ); +extern const bclass be_class_Animate_engine; + /******************************************************************** ** Solidified function: run ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_autoconf_module.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_autoconf_module.h index 16d3089dd..7e11b1145 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_autoconf_module.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_autoconf_module.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_Autoconf; + /******************************************************************** ** Solidified function: page_autoconf_ctl ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_crypto_spake2p_matter.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_crypto_spake2p_matter.h index 993c99b8c..5d430efaa 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_crypto_spake2p_matter.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_crypto_spake2p_matter.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_SPAKE2P_Matter; + /******************************************************************** ** Solidified function: compute_pB ********************************************************************/ @@ -61,6 +63,8 @@ be_local_closure(SPAKE2P_Matter_compute_pB, /* name */ /*******************************************************************/ +extern const bclass be_class_SPAKE_Hasher; + /******************************************************************** ** Solidified function: init ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_driver_class.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_driver_class.h index f36429f81..75351ee0c 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_driver_class.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_driver_class.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_Driver; + /******************************************************************** ** Solidified function: add_cmd ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_dyn.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_dyn.h index ccb1c98e5..ee7c762ca 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_dyn.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_dyn.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_dyn; + /******************************************************************** ** Solidified function: tostring ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_hue_bridge.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_hue_bridge.h index 8a7c11685..14f64cfa5 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_hue_bridge.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_hue_bridge.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_hue_bridge_monad; + /******************************************************************** ** Solidified function: full_status ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_axp192.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_axp192.h index 095930baf..2ef43a553 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_axp192.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_axp192.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_AXP192; + /******************************************************************** ** Solidified function: set_dcdc_enable ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_axp202.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_axp202.h index 1ec7a268b..a912b0660 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_axp202.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_axp202.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_AXP202; + /******************************************************************** ** Solidified function: set_shutdown_time ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_driver.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_driver.h index d63588613..e4ff81021 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_driver.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_driver.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_I2C_Driver; + /******************************************************************** ** Solidified function: read32 ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_ft3663.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_ft3663.h index 676e5299a..abfc6a453 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_ft3663.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_i2c_ft3663.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_FT3663; + /******************************************************************** ** Solidified function: every_100ms ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_leds.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_leds.h index d7ca9b0bd..13b452935 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_leds.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_leds.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_Leds; + /******************************************************************** ** Solidified function: pixel_count ********************************************************************/ @@ -170,39 +172,43 @@ be_local_closure(Leds_clear, /* name */ ********************************************************************/ be_local_closure(Leds_matrix, /* name */ be_nested_proto( - 10, /* nstack */ + 11, /* nstack */ 4, /* argc */ - 0, /* varg */ + 4, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(Leds), - /* K1 */ be_nested_str(create_matrix), - /* K2 */ be_const_int(0), + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_const_class(be_class_Leds), + /* K1 */ be_nested_str(Leds), + /* K2 */ be_nested_str(create_matrix), + /* K3 */ be_const_int(0), }), &be_const_str_matrix, &be_const_str_solidified, - ( &(const binstruction[11]) { /* code */ - 0xB8120000, // 0000 GETNGBL R4 K0 - 0x08140001, // 0001 MUL R5 R0 R1 - 0x5C180400, // 0002 MOVE R6 R2 - 0x5C1C0600, // 0003 MOVE R7 R3 - 0x7C100600, // 0004 CALL R4 3 - 0x8C140901, // 0005 GETMET R5 R4 K1 - 0x5C1C0000, // 0006 MOVE R7 R0 - 0x5C200200, // 0007 MOVE R8 R1 - 0x58240002, // 0008 LDCONST R9 K2 - 0x7C140800, // 0009 CALL R5 4 - 0x80040A00, // 000A RET 1 R5 + ( &(const binstruction[12]) { /* code */ + 0x58100000, // 0000 LDCONST R4 K0 + 0xB8160200, // 0001 GETNGBL R5 K1 + 0x08180001, // 0002 MUL R6 R0 R1 + 0x5C1C0400, // 0003 MOVE R7 R2 + 0x5C200600, // 0004 MOVE R8 R3 + 0x7C140600, // 0005 CALL R5 3 + 0x8C180B02, // 0006 GETMET R6 R5 K2 + 0x5C200000, // 0007 MOVE R8 R0 + 0x5C240200, // 0008 MOVE R9 R1 + 0x58280003, // 0009 LDCONST R10 K3 + 0x7C180800, // 000A CALL R6 4 + 0x80040C00, // 000B RET 1 R6 }) ) ); /*******************************************************************/ +extern const bclass be_class_Leds_segment; + /******************************************************************** ** Solidified function: get_pixel_color ********************************************************************/ @@ -735,6 +741,8 @@ be_local_closure(Leds_is_dirty, /* name */ /*******************************************************************/ +extern const bclass be_class_Leds_matrix; + /******************************************************************** ** Solidified function: pixels_buffer ********************************************************************/ @@ -1621,106 +1629,108 @@ be_local_closure(Leds_get_pixel_color, /* name */ ********************************************************************/ be_local_closure(Leds_assign_rmt, /* name */ be_nested_proto( - 8, /* nstack */ + 9, /* nstack */ 1, /* argc */ - 0, /* varg */ + 4, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[16]) { /* constants */ - /* K0 */ be_const_int(0), - /* K1 */ be_nested_str(value_error), - /* K2 */ be_nested_str(invalid_X20GPIO_X20number), - /* K3 */ be_nested_str(global), - /* K4 */ be_nested_str(contains), - /* K5 */ be_nested_str(_rmt), - /* K6 */ be_nested_str(gpio), - /* K7 */ be_nested_str(MAX_RMT), - /* K8 */ be_const_int(1), - /* K9 */ be_nested_str(push), - /* K10 */ be_nested_str(stop_iteration), - /* K11 */ be_nested_str(pin_used), - /* K12 */ be_nested_str(WS2812), - /* K13 */ be_nested_str(pin), - /* K14 */ be_nested_str(internal_error), - /* K15 */ be_nested_str(no_X20more_X20RMT_X20channel_X20available), + ( &(const bvalue[17]) { /* constants */ + /* K0 */ be_const_class(be_class_Leds), + /* K1 */ be_const_int(0), + /* K2 */ be_nested_str(value_error), + /* K3 */ be_nested_str(invalid_X20GPIO_X20number), + /* K4 */ be_nested_str(global), + /* K5 */ be_nested_str(contains), + /* K6 */ be_nested_str(_rmt), + /* K7 */ be_nested_str(gpio), + /* K8 */ be_nested_str(MAX_RMT), + /* K9 */ be_const_int(1), + /* K10 */ be_nested_str(push), + /* K11 */ be_nested_str(stop_iteration), + /* K12 */ be_nested_str(pin_used), + /* K13 */ be_nested_str(WS2812), + /* K14 */ be_nested_str(pin), + /* K15 */ be_nested_str(internal_error), + /* K16 */ be_nested_str(no_X20more_X20RMT_X20channel_X20available), }), &be_const_str_assign_rmt, &be_const_str_solidified, - ( &(const binstruction[71]) { /* code */ - 0x60040009, // 0000 GETGBL R1 G9 - 0x5C080000, // 0001 MOVE R2 R0 - 0x7C040200, // 0002 CALL R1 1 - 0x5C000200, // 0003 MOVE R0 R1 - 0x14040100, // 0004 LT R1 R0 K0 - 0x78060000, // 0005 JMPF R1 #0007 - 0xB0060302, // 0006 RAISE 1 K1 K2 - 0xA4060600, // 0007 IMPORT R1 K3 - 0x4C080000, // 0008 LDNIL R2 - 0x8C0C0304, // 0009 GETMET R3 R1 K4 - 0x58140005, // 000A LDCONST R5 K5 - 0x7C0C0400, // 000B CALL R3 2 - 0x740E0021, // 000C JMPT R3 #002F - 0x600C0012, // 000D GETGBL R3 G18 - 0x7C0C0000, // 000E CALL R3 0 - 0x5C080600, // 000F MOVE R2 R3 - 0x90060A02, // 0010 SETMBR R1 K5 R2 - 0x600C0010, // 0011 GETGBL R3 G16 - 0xB8120C00, // 0012 GETNGBL R4 K6 - 0x88100907, // 0013 GETMBR R4 R4 K7 - 0x04100908, // 0014 SUB R4 R4 K8 - 0x40120004, // 0015 CONNECT R4 K0 R4 - 0x7C0C0200, // 0016 CALL R3 1 - 0xA8020005, // 0017 EXBLK 0 #001E - 0x5C100600, // 0018 MOVE R4 R3 - 0x7C100000, // 0019 CALL R4 0 - 0x8C140509, // 001A GETMET R5 R2 K9 - 0x541DFFFE, // 001B LDINT R7 -1 - 0x7C140400, // 001C CALL R5 2 - 0x7001FFF9, // 001D JMP #0018 - 0x580C000A, // 001E LDCONST R3 K10 - 0xAC0C0200, // 001F CATCH R3 1 0 - 0xB0080000, // 0020 RAISE 2 R0 R0 - 0xB80E0C00, // 0021 GETNGBL R3 K6 - 0x8C0C070B, // 0022 GETMET R3 R3 K11 - 0xB8160C00, // 0023 GETNGBL R5 K6 - 0x88140B0C, // 0024 GETMBR R5 R5 K12 - 0x58180000, // 0025 LDCONST R6 K0 - 0x7C0C0600, // 0026 CALL R3 3 - 0x780E0006, // 0027 JMPF R3 #002F - 0xB80E0C00, // 0028 GETNGBL R3 K6 - 0x8C0C070D, // 0029 GETMET R3 R3 K13 - 0xB8160C00, // 002A GETNGBL R5 K6 - 0x88140B0C, // 002B GETMBR R5 R5 K12 - 0x58180000, // 002C LDCONST R6 K0 - 0x7C0C0600, // 002D CALL R3 3 - 0x980A0003, // 002E SETIDX R2 K0 R3 - 0x88080305, // 002F GETMBR R2 R1 K5 - 0x580C0000, // 0030 LDCONST R3 K0 - 0x5411FFFE, // 0031 LDINT R4 -1 - 0xB8160C00, // 0032 GETNGBL R5 K6 - 0x88140B07, // 0033 GETMBR R5 R5 K7 - 0x14140605, // 0034 LT R5 R3 R5 - 0x7816000A, // 0035 JMPF R5 #0041 - 0x94140403, // 0036 GETIDX R5 R2 R3 - 0x1C180A00, // 0037 EQ R6 R5 R0 - 0x781A0000, // 0038 JMPF R6 #003A - 0x80040600, // 0039 RET 1 R3 - 0x14180B00, // 003A LT R6 R5 K0 - 0x781A0002, // 003B JMPF R6 #003F - 0x14180900, // 003C LT R6 R4 K0 - 0x781A0000, // 003D JMPF R6 #003F - 0x5C100600, // 003E MOVE R4 R3 - 0x000C0708, // 003F ADD R3 R3 K8 - 0x7001FFF0, // 0040 JMP #0032 - 0x28140900, // 0041 GE R5 R4 K0 - 0x78160001, // 0042 JMPF R5 #0045 - 0x98080800, // 0043 SETIDX R2 R4 R0 - 0x80040800, // 0044 RET 1 R4 - 0xB0061D0F, // 0045 RAISE 1 K14 K15 - 0x80000000, // 0046 RET 0 + ( &(const binstruction[72]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0x60080009, // 0001 GETGBL R2 G9 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C080200, // 0003 CALL R2 1 + 0x5C000400, // 0004 MOVE R0 R2 + 0x14080101, // 0005 LT R2 R0 K1 + 0x780A0000, // 0006 JMPF R2 #0008 + 0xB0060503, // 0007 RAISE 1 K2 K3 + 0xA40A0800, // 0008 IMPORT R2 K4 + 0x4C0C0000, // 0009 LDNIL R3 + 0x8C100505, // 000A GETMET R4 R2 K5 + 0x58180006, // 000B LDCONST R6 K6 + 0x7C100400, // 000C CALL R4 2 + 0x74120021, // 000D JMPT R4 #0030 + 0x60100012, // 000E GETGBL R4 G18 + 0x7C100000, // 000F CALL R4 0 + 0x5C0C0800, // 0010 MOVE R3 R4 + 0x900A0C03, // 0011 SETMBR R2 K6 R3 + 0x60100010, // 0012 GETGBL R4 G16 + 0xB8160E00, // 0013 GETNGBL R5 K7 + 0x88140B08, // 0014 GETMBR R5 R5 K8 + 0x04140B09, // 0015 SUB R5 R5 K9 + 0x40160205, // 0016 CONNECT R5 K1 R5 + 0x7C100200, // 0017 CALL R4 1 + 0xA8020005, // 0018 EXBLK 0 #001F + 0x5C140800, // 0019 MOVE R5 R4 + 0x7C140000, // 001A CALL R5 0 + 0x8C18070A, // 001B GETMET R6 R3 K10 + 0x5421FFFE, // 001C LDINT R8 -1 + 0x7C180400, // 001D CALL R6 2 + 0x7001FFF9, // 001E JMP #0019 + 0x5810000B, // 001F LDCONST R4 K11 + 0xAC100200, // 0020 CATCH R4 1 0 + 0xB0080000, // 0021 RAISE 2 R0 R0 + 0xB8120E00, // 0022 GETNGBL R4 K7 + 0x8C10090C, // 0023 GETMET R4 R4 K12 + 0xB81A0E00, // 0024 GETNGBL R6 K7 + 0x88180D0D, // 0025 GETMBR R6 R6 K13 + 0x581C0001, // 0026 LDCONST R7 K1 + 0x7C100600, // 0027 CALL R4 3 + 0x78120006, // 0028 JMPF R4 #0030 + 0xB8120E00, // 0029 GETNGBL R4 K7 + 0x8C10090E, // 002A GETMET R4 R4 K14 + 0xB81A0E00, // 002B GETNGBL R6 K7 + 0x88180D0D, // 002C GETMBR R6 R6 K13 + 0x581C0001, // 002D LDCONST R7 K1 + 0x7C100600, // 002E CALL R4 3 + 0x980E0204, // 002F SETIDX R3 K1 R4 + 0x880C0506, // 0030 GETMBR R3 R2 K6 + 0x58100001, // 0031 LDCONST R4 K1 + 0x5415FFFE, // 0032 LDINT R5 -1 + 0xB81A0E00, // 0033 GETNGBL R6 K7 + 0x88180D08, // 0034 GETMBR R6 R6 K8 + 0x14180806, // 0035 LT R6 R4 R6 + 0x781A000A, // 0036 JMPF R6 #0042 + 0x94180604, // 0037 GETIDX R6 R3 R4 + 0x1C1C0C00, // 0038 EQ R7 R6 R0 + 0x781E0000, // 0039 JMPF R7 #003B + 0x80040800, // 003A RET 1 R4 + 0x141C0D01, // 003B LT R7 R6 K1 + 0x781E0002, // 003C JMPF R7 #0040 + 0x141C0B01, // 003D LT R7 R5 K1 + 0x781E0000, // 003E JMPF R7 #0040 + 0x5C140800, // 003F MOVE R5 R4 + 0x00100909, // 0040 ADD R4 R4 K9 + 0x7001FFF0, // 0041 JMP #0033 + 0x28180B01, // 0042 GE R6 R5 K1 + 0x781A0001, // 0043 JMPF R6 #0046 + 0x980C0A00, // 0044 SETIDX R3 R5 R0 + 0x80040A00, // 0045 RET 1 R5 + 0xB0061F10, // 0046 RAISE 1 K15 K16 + 0x80000000, // 0047 RET 0 }) ) ); diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_leds_animator.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_leds_animator.h index 4d6d70726..992fae52b 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_leds_animator.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_leds_animator.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_Leds_animator; + /******************************************************************** ** Solidified function: init ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_lv_tasmota.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_lv_tasmota.h index 37b7046f2..31a6267d5 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_lv_tasmota.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_lv_tasmota.h @@ -114,6 +114,8 @@ be_local_closure(lv_tasmota_init, /* name */ /*******************************************************************/ +extern const bclass be_class_splash_runner; + /******************************************************************** ** Solidified function: init ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_lv_tasmota_widgets.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_lv_tasmota_widgets.h index 5c2787cc0..bd85dbbb2 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_lv_tasmota_widgets.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_lv_tasmota_widgets.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_lv_clock; + /******************************************************************** ** Solidified function: set_time ********************************************************************/ @@ -270,6 +272,8 @@ void be_load_lv_clock_class(bvm *vm) { be_pop(vm, 1); } +extern const bclass be_class_lv_clock_icon; + /******************************************************************** ** Solidified function: init ********************************************************************/ @@ -391,6 +395,8 @@ void be_load_lv_clock_icon_class(bvm *vm) { be_pop(vm, 1); } +extern const bclass be_class_lv_signal_arcs; + /******************************************************************** ** Solidified function: set_percentage ********************************************************************/ @@ -804,6 +810,8 @@ void be_load_lv_signal_arcs_class(bvm *vm) { be_pop(vm, 1); } +extern const bclass be_class_lv_wifi_arcs; + /******************************************************************** ** Solidified function: before_del ********************************************************************/ @@ -955,6 +963,8 @@ void be_load_lv_wifi_arcs_class(bvm *vm) { be_pop(vm, 1); } +extern const bclass be_class_lv_wifi_arcs_icon; + /******************************************************************** ** Solidified function: init ********************************************************************/ @@ -1085,6 +1095,8 @@ void be_load_lv_wifi_arcs_icon_class(bvm *vm) { be_pop(vm, 1); } +extern const bclass be_class_lv_signal_bars; + /******************************************************************** ** Solidified function: set_percentage ********************************************************************/ @@ -1468,6 +1480,8 @@ void be_load_lv_signal_bars_class(bvm *vm) { be_pop(vm, 1); } +extern const bclass be_class_lv_wifi_bars; + /******************************************************************** ** Solidified function: before_del ********************************************************************/ @@ -1619,6 +1633,8 @@ void be_load_lv_wifi_bars_class(bvm *vm) { be_pop(vm, 1); } +extern const bclass be_class_lv_wifi_bars_icon; + /******************************************************************** ** Solidified function: init ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_mqtt.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_mqtt.h index e1ec4506a..48d49ae2e 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_mqtt.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_mqtt.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_MQTT; + /******************************************************************** ** Solidified function: mqtt_data ********************************************************************/ @@ -259,6 +261,8 @@ be_local_closure(MQTT_mqtt_connect, /* name */ /*******************************************************************/ +extern const bclass be_class_mqtt_listener; + /******************************************************************** ** Solidified function: tostring ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_partition_core.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_partition_core.h index c298260ac..2f0cb689d 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_partition_core.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_partition_core.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_Partition_otadata; + /******************************************************************** ** Solidified function: save ********************************************************************/ @@ -319,33 +321,35 @@ be_local_closure(Partition_otadata_load, /* name */ ********************************************************************/ be_local_closure(Partition_otadata_crc32_ota_seq, /* name */ be_nested_proto( - 9, /* nstack */ + 10, /* nstack */ 1, /* argc */ - 0, /* varg */ + 4, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str(crc), - /* K1 */ be_nested_str(crc32), - /* K2 */ be_nested_str(add), + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_const_class(be_class_Partition_otadata), + /* K1 */ be_nested_str(crc), + /* K2 */ be_nested_str(crc32), + /* K3 */ be_nested_str(add), }), &be_const_str_crc32_ota_seq, &be_const_str_solidified, - ( &(const binstruction[11]) { /* code */ - 0xA4060000, // 0000 IMPORT R1 K0 - 0x8C080301, // 0001 GETMET R2 R1 K1 - 0x5411FFFE, // 0002 LDINT R4 -1 - 0x60140015, // 0003 GETGBL R5 G21 - 0x7C140000, // 0004 CALL R5 0 - 0x8C140B02, // 0005 GETMET R5 R5 K2 - 0x5C1C0000, // 0006 MOVE R7 R0 - 0x54220003, // 0007 LDINT R8 4 - 0x7C140600, // 0008 CALL R5 3 - 0x7C080600, // 0009 CALL R2 3 - 0x80040400, // 000A RET 1 R2 + ( &(const binstruction[12]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0xA40A0200, // 0001 IMPORT R2 K1 + 0x8C0C0502, // 0002 GETMET R3 R2 K2 + 0x5415FFFE, // 0003 LDINT R5 -1 + 0x60180015, // 0004 GETGBL R6 G21 + 0x7C180000, // 0005 CALL R6 0 + 0x8C180D03, // 0006 GETMET R6 R6 K3 + 0x5C200000, // 0007 MOVE R8 R0 + 0x54260003, // 0008 LDINT R9 4 + 0x7C180600, // 0009 CALL R6 3 + 0x7C0C0600, // 000A CALL R3 3 + 0x80040600, // 000B RET 1 R3 }) ) ); @@ -498,6 +502,8 @@ be_local_class(Partition_otadata, (bstring*) &be_const_str_Partition_otadata ); +extern const bclass be_class_Partition; + /******************************************************************** ** Solidified function: save ********************************************************************/ @@ -928,50 +934,52 @@ be_local_closure(Partition_resize_max_flash_size_k, /* name */ ********************************************************************/ be_local_closure(Partition_get_flash_definition_sector, /* name */ be_nested_proto( - 8, /* nstack */ + 9, /* nstack */ 0, /* argc */ - 0, /* varg */ + 4, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 6]) { /* constants */ - /* K0 */ be_nested_str(flash), - /* K1 */ be_const_int(0), - /* K2 */ be_const_int(1), - /* K3 */ be_nested_str(read), - /* K4 */ be_nested_str(E9), - /* K5 */ be_nested_str(stop_iteration), + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_const_class(be_class_Partition), + /* K1 */ be_nested_str(flash), + /* K2 */ be_const_int(0), + /* K3 */ be_const_int(1), + /* K4 */ be_nested_str(read), + /* K5 */ be_nested_str(E9), + /* K6 */ be_nested_str(stop_iteration), }), &be_const_str_get_flash_definition_sector, &be_const_str_solidified, - ( &(const binstruction[25]) { /* code */ - 0xA4020000, // 0000 IMPORT R0 K0 - 0x60040010, // 0001 GETGBL R1 G16 - 0x400A0302, // 0002 CONNECT R2 K1 K2 - 0x7C040200, // 0003 CALL R1 1 - 0xA802000F, // 0004 EXBLK 0 #0015 - 0x5C080200, // 0005 MOVE R2 R1 - 0x7C080000, // 0006 CALL R2 0 - 0x540E0FFF, // 0007 LDINT R3 4096 - 0x080C0403, // 0008 MUL R3 R2 R3 - 0x8C100103, // 0009 GETMET R4 R0 K3 - 0x5C180600, // 000A MOVE R6 R3 - 0x581C0002, // 000B LDCONST R7 K2 - 0x7C100600, // 000C CALL R4 3 - 0x60140015, // 000D GETGBL R5 G21 - 0x58180004, // 000E LDCONST R6 K4 - 0x7C140200, // 000F CALL R5 1 - 0x1C100805, // 0010 EQ R4 R4 R5 - 0x78120001, // 0011 JMPF R4 #0014 - 0xA8040001, // 0012 EXBLK 1 1 - 0x80040600, // 0013 RET 1 R3 - 0x7001FFEF, // 0014 JMP #0005 - 0x58040005, // 0015 LDCONST R1 K5 - 0xAC040200, // 0016 CATCH R1 1 0 - 0xB0080000, // 0017 RAISE 2 R0 R0 - 0x80000000, // 0018 RET 0 + ( &(const binstruction[26]) { /* code */ + 0x58000000, // 0000 LDCONST R0 K0 + 0xA4060200, // 0001 IMPORT R1 K1 + 0x60080010, // 0002 GETGBL R2 G16 + 0x400E0503, // 0003 CONNECT R3 K2 K3 + 0x7C080200, // 0004 CALL R2 1 + 0xA802000F, // 0005 EXBLK 0 #0016 + 0x5C0C0400, // 0006 MOVE R3 R2 + 0x7C0C0000, // 0007 CALL R3 0 + 0x54120FFF, // 0008 LDINT R4 4096 + 0x08100604, // 0009 MUL R4 R3 R4 + 0x8C140304, // 000A GETMET R5 R1 K4 + 0x5C1C0800, // 000B MOVE R7 R4 + 0x58200003, // 000C LDCONST R8 K3 + 0x7C140600, // 000D CALL R5 3 + 0x60180015, // 000E GETGBL R6 G21 + 0x581C0005, // 000F LDCONST R7 K5 + 0x7C180200, // 0010 CALL R6 1 + 0x1C140A06, // 0011 EQ R5 R5 R6 + 0x78160001, // 0012 JMPF R5 #0015 + 0xA8040001, // 0013 EXBLK 1 1 + 0x80040800, // 0014 RET 1 R4 + 0x7001FFEF, // 0015 JMP #0006 + 0x58080006, // 0016 LDCONST R2 K6 + 0xAC080200, // 0017 CATCH R2 1 0 + 0xB0080000, // 0018 RAISE 2 R0 R0 + 0x80000000, // 0019 RET 0 }) ) ); @@ -1660,6 +1668,8 @@ be_local_class(Partition, (bstring*) &be_const_str_Partition ); +extern const bclass be_class_Partition_info; + /******************************************************************** ** Solidified function: is_factory ********************************************************************/ @@ -2165,45 +2175,47 @@ be_local_closure(Partition_info_tobytes, /* name */ ********************************************************************/ be_local_closure(Partition_info_remove_trailing_zeroes, /* name */ be_nested_proto( - 7, /* nstack */ + 8, /* nstack */ 1, /* argc */ - 0, /* varg */ + 4, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_const_int(0), - /* K1 */ be_const_int(1), - /* K2 */ be_nested_str(resize), + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_const_class(be_class_Partition_info), + /* K1 */ be_const_int(0), + /* K2 */ be_const_int(1), + /* K3 */ be_nested_str(resize), }), &be_const_str_remove_trailing_zeroes, &be_const_str_solidified, - ( &(const binstruction[23]) { /* code */ - 0x6004000C, // 0000 GETGBL R1 G12 - 0x5C080000, // 0001 MOVE R2 R0 - 0x7C040200, // 0002 CALL R1 1 - 0x58080000, // 0003 LDCONST R2 K0 - 0x140C0401, // 0004 LT R3 R2 R1 - 0x780E0007, // 0005 JMPF R3 #000E - 0x540DFFFE, // 0006 LDINT R3 -1 - 0x040C0602, // 0007 SUB R3 R3 R2 - 0x940C0003, // 0008 GETIDX R3 R0 R3 - 0x200C0700, // 0009 NE R3 R3 K0 - 0x780E0000, // 000A JMPF R3 #000C - 0x70020001, // 000B JMP #000E - 0x00080501, // 000C ADD R2 R2 K1 - 0x7001FFF5, // 000D JMP #0004 - 0x240C0500, // 000E GT R3 R2 K0 - 0x780E0005, // 000F JMPF R3 #0016 - 0x8C0C0102, // 0010 GETMET R3 R0 K2 - 0x6014000C, // 0011 GETGBL R5 G12 - 0x5C180000, // 0012 MOVE R6 R0 - 0x7C140200, // 0013 CALL R5 1 - 0x04140A02, // 0014 SUB R5 R5 R2 - 0x7C0C0400, // 0015 CALL R3 2 - 0x80040000, // 0016 RET 1 R0 + ( &(const binstruction[24]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0x6008000C, // 0001 GETGBL R2 G12 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C080200, // 0003 CALL R2 1 + 0x580C0001, // 0004 LDCONST R3 K1 + 0x14100602, // 0005 LT R4 R3 R2 + 0x78120007, // 0006 JMPF R4 #000F + 0x5411FFFE, // 0007 LDINT R4 -1 + 0x04100803, // 0008 SUB R4 R4 R3 + 0x94100004, // 0009 GETIDX R4 R0 R4 + 0x20100901, // 000A NE R4 R4 K1 + 0x78120000, // 000B JMPF R4 #000D + 0x70020001, // 000C JMP #000F + 0x000C0702, // 000D ADD R3 R3 K2 + 0x7001FFF5, // 000E JMP #0005 + 0x24100701, // 000F GT R4 R3 K1 + 0x78120005, // 0010 JMPF R4 #0017 + 0x8C100103, // 0011 GETMET R4 R0 K3 + 0x6018000C, // 0012 GETGBL R6 G12 + 0x5C1C0000, // 0013 MOVE R7 R0 + 0x7C180200, // 0014 CALL R6 1 + 0x04180C03, // 0015 SUB R6 R6 R3 + 0x7C100400, // 0016 CALL R4 2 + 0x80040000, // 0017 RET 1 R0 }) ) ); diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_persist.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_persist.h index 6427e760c..aed177dfa 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_persist.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_persist.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_Persist; + /******************************************************************** ** Solidified function: json_fdump_map ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_tapp.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_tapp.h index 573d08b6d..67cacbde3 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_tapp.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_tapp.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_Tapp; + /******************************************************************** ** Solidified function: init ********************************************************************/ 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 04f04a82c..af2a338d1 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_Tasmota; + /******************************************************************** ** Solidified function: exec_rules ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_trigger_class.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_trigger_class.h index f86aaa349..5a42d66bf 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_trigger_class.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_trigger_class.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_Trigger; + /******************************************************************** ** Solidified function: init ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zb_coord.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zb_coord.h index fb16c25e2..10dc93c33 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zb_coord.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zb_coord.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_zb_coord; + /******************************************************************** ** Solidified function: init ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zcl_attribute.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zcl_attribute.h index ebb0e438d..d2e4cc847 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zcl_attribute.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zcl_attribute.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_zcl_attribute; + /******************************************************************** ** Solidified function: tomap ********************************************************************/ @@ -571,6 +573,8 @@ void be_load_zcl_attribute_class(bvm *vm) { be_pop(vm, 1); } +extern const bclass be_class_zcl_attribute_list; + /******************************************************************** ** Solidified function: member ********************************************************************/ @@ -914,6 +918,8 @@ void be_load_zcl_attribute_list_class(bvm *vm) { be_pop(vm, 1); } +extern const bclass be_class_zcl_attributes; + /******************************************************************** ** Solidified function: init ********************************************************************/ diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zcl_frame.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zcl_frame.h index 1e10ccc93..f979a3066 100644 --- a/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zcl_frame.h +++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_zigbee_zcl_frame.h @@ -4,6 +4,8 @@ \********************************************************************/ #include "be_constobj.h" +extern const bclass be_class_zcl_frame; + /******************************************************************** ** Solidified function: member ********************************************************************/