Matter support for 'Generic Switch' based on Tasmota Buttons (#21731)

This commit is contained in:
s-hadinger 2024-07-04 20:47:32 +02:00 committed by GitHub
parent 152239c3ac
commit be40830bc0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 5962 additions and 5189 deletions

View File

@ -14,6 +14,7 @@ All notable changes to this project will be documented in this file.
- NeoPool data validation and communication statistics default enabled for ESP32 only (#21721) - NeoPool data validation and communication statistics default enabled for ESP32 only (#21721)
- `FUNC_BUTTON_PRESSED` now contains `press_counter` encoded in `XdrvMailbox.command_code` (#21724) - `FUNC_BUTTON_PRESSED` now contains `press_counter` encoded in `XdrvMailbox.command_code` (#21724)
- Berry `int64` added `low32()` and `high32()` methods, used in Matter - Berry `int64` added `low32()` and `high32()` methods, used in Matter
- Matter support for 'Generic Switch' based on Tasmota Buttons
### Breaking Changed ### Breaking Changed

View File

@ -272,7 +272,7 @@ extern const bclass be_class_Matter_TLV; // need to declare it upfront because
#include "solidify/solidified_Matter_Plugin_3_Sensor_Rain.h" #include "solidify/solidified_Matter_Plugin_3_Sensor_Rain.h"
#include "solidify/solidified_Matter_Plugin_3_Sensor_Waterleak.h" #include "solidify/solidified_Matter_Plugin_3_Sensor_Waterleak.h"
#include "solidify/solidified_Matter_Plugin_2_Fan.h" #include "solidify/solidified_Matter_Plugin_2_Fan.h"
#include "solidify/solidified_Matter_Plugin_2_Sensor_GenericSwitch.h" #include "solidify/solidified_Matter_Plugin_2_Sensor_GenericSwitch_Btn.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Fan.h" #include "solidify/solidified_Matter_Plugin_9_Virt_Fan.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Contact.h" #include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Contact.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Occupancy.h" #include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Occupancy.h"

View File

@ -72,28 +72,139 @@ class Matter_EventQueued
# free up some space # free up some space
def to_raw_bytes() def to_raw_bytes()
if (self.raw_tlv == nil) if (self.raw_tlv == nil)
var event_report = matter.EventReportIB() self.raw_tlv = bytes(64)
var event_ib = matter.EventDataIB() self.eventreport2raw(self.raw_tlv, self.endpoint, self.cluster, self.event_id, self.is_urgent, self.priority, self.event_no, self.epoch_timestamp, self.data0, self.data1, self.data2)
event_report.event_data = event_ib # var event_report = matter.EventReportIB()
var event_path = matter.EventPathIB() # var event_ib = matter.EventDataIB()
event_path.endpoint = self.endpoint # event_report.event_data = event_ib
event_path.cluster = self.cluster # var event_path = matter.EventPathIB()
event_path.event = self.event_id # event_path.endpoint = self.endpoint
event_path.is_urgent = self.is_urgent # event_path.cluster = self.cluster
event_ib.path = event_path # event_path.event = self.event_id
event_ib.priority = self.priority # event_path.is_urgent = self.is_urgent
event_ib.event_number = self.event_no # event_ib.path = event_path
event_ib.epoch_timestamp = self.epoch_timestamp # event_ib.priority = self.priority
event_ib.data = matter.TLV.Matter_TLV_struct() # event_ib.event_number = self.event_no
if (self.data0 != nil) event_ib.data.add_obj(0, self.data0) end # event_ib.epoch_timestamp = self.epoch_timestamp
if (self.data1 != nil) event_ib.data.add_obj(1, self.data1) end # event_ib.data = matter.TLV.Matter_TLV_struct()
if (self.data2 != nil) event_ib.data.add_obj(2, self.data2) end # if (self.data0 != nil) event_ib.data.add_obj(0, self.data0) end
# if (self.data1 != nil) event_ib.data.add_obj(1, self.data1) end
# if (self.data2 != nil) event_ib.data.add_obj(2, self.data2) end
self.raw_tlv = event_report.to_TLV().tlv2raw() # bytes() # self.raw_tlv = event_report.to_TLV().tlv2raw() # bytes()
end end
return self.raw_tlv return self.raw_tlv
end end
#############################################################
# eventreport2raw
#
# 15 = EventReportIB
# 3501 = EventDataIB
#
def eventreport2raw(raw, endpoint, cluster, event, is_urgent, priority, event_no, epoch_timestamp, data0, data1, data2)
# open struct EventReportIB
raw.add(0x15, 1) # add 15
# open sturct EventDataIB
raw.add(0x3501, -2) # add 3501
# add path
self.eventpath2raw(raw, endpoint, cluster, event, is_urgent)
# add EventNumber
raw.add(0x2701, -2) # 2701 FFFFFFFFFFFFFFFF
raw.add(event_no.low32(), 4) # int64 low part
raw.add(event_no.high32(), 4) # int64 high part
# priority
raw.add(0x2402, -2) # add 2402
raw.add(priority, 1) # add priority as one byte
# EpochTimestamp
raw.add(0x2603, -2) # add 2603
raw.add(epoch_timestamp, 4) # add epoch as 32 bits
# Data struct
raw.add(0x3507, -2) # add 3507
# data0
if (data0 != nil)
data0.tag_sub = 0
data0.tlv2raw(raw)
end
# data1
if (data1 != nil)
data1.tag_sub = 1
data1.tlv2raw(raw)
end
# data2
if (data2 != nil)
data2.tag_sub = 2
data2.tlv2raw(raw)
end
# close struct Data
raw.add(0x18, 1) # add 18
# close struct EventDataIB
raw.add(0x18, 1) # add 18
# close struct EventReportIB
raw.add(0x18, 1) # add 18
end
#############################################################
# eventpath2raw
#
# Encodes endpoint/cluster/attribute as `EventPathIB` elements
# Takes sub-tag
#
# 1 = EventPathIB
# 0 = Node
# 1 = Endpoint
# 2 = Cluster
# 3 = Event
# 4 = IsUrgent
#
# 3700 0 = LIST
# 2401 01 1 = 1U (U1)
# 2402 39 2 = 0x39U (U1)
# 2403 11 3 = 0x11U (U1)
# 2904 4 = true
# 18
def eventpath2raw(raw, endpoint, cluster, event, is_urgent)
# open struct
raw.add(0x3700, -2) # add 3700
# add endpoint
if endpoint <= 0xFF # endpoint is 16 bits max
raw.add(0x2401, -2) # add 2401
raw.add(endpoint, 1)
else
raw.add(0x2501, -2) # add 2501
raw.add(endpoint, 2)
end
# add cluster
if cluster <= 0xFF # cluster is 32 bits max
raw.add(0x2402, -2) # add 2402
raw.add(cluster, 1)
elif cluster <= 0xFFFF
raw.add(0x2502, -2) # add 2502
raw.add(cluster, 2)
else
raw.add(0x2602, -2) # add 2602
raw.add(cluster, 4)
end
# add event
if event <= 0xFF # cluster is 32 bits max
raw.add(0x2403, -2) # add 2403
raw.add(event, 1)
else
raw.add(0x2503, -2) # add 2503
raw.add(event, 2)
end
# IsUrgent
if is_urgent
raw.add(0x2904, -2) # add 2904
else
raw.add(0x2804, -2) # add 2804
end
# close
raw.add(0x18, 1) # add 18
end
################################################################################# #################################################################################
# compact # compact
# #
@ -372,7 +483,7 @@ class Matter_EventHandler
log(f"MTR: +Add_Event ({priority_str}{new_event.event_no:8s}) [{new_event.endpoint:02X}]{new_event.cluster:04X}/{new_event.event_id:02X} {event_name}- {data_str}", 2) log(f"MTR: +Add_Event ({priority_str}{new_event.event_no:8s}) [{new_event.endpoint:02X}]{new_event.cluster:04X}/{new_event.event_id:02X} {event_name}- {data_str}", 2)
end end
self.queue_event(new_event) self.queue_event(new_event)
# check if we have an subscription interested in this new event # check if we have a subscription interested in this new event
self.device.message_handler.im.subs_shop.event_published(new_event) self.device.message_handler.im.subs_shop.event_published(new_event)
end end

View File

@ -352,27 +352,73 @@ class Matter_IM_ReportData_Pull : Matter_IM_Message
########## Response ########## Response
# prepare the response # prepare the response
var ret = matter.ReportDataMessage() # Manually craft payload
ret.subscription_id = self.subscription_id var more_chunked_messages = (self.data != nil) || (self.data_ev != nil)
ret.suppress_response = self.suppress_response var raw = bytes(self.MAX_MESSAGE)
# ret.suppress_response = true
if (data != nil && size(data) > 0)
ret.attribute_reports = [data]
end
if (data_ev != nil && size(data_ev) > 0)
ret.event_reports = [data_ev]
end
ret.more_chunked_messages = (self.data != nil) || (self.data_ev != nil) # we got more data to send
# print(">>>>> send elements before encode") # open struct ReportDataMessage
var encoded_tlv = ret.to_TLV().tlv2raw(bytes(self.MAX_MESSAGE)) # takes time raw.add(0x15, 1) # add 15
resp.encode_frame(encoded_tlv) # payload in cleartext, pre-allocate max buffer # open sturct EventDataIB
if (self.subscription_id != nil)
raw.add(0x2500, -2) # add 2500
raw.add(self.subscription_id, 2) # add subscription_id as 16 bits
end
# do we have attributes?
if (data != nil && size(data) > 0)
raw.add(0x3601, -2) # add 3601
raw.append(data)
raw.add(0x18, 1) # add 18
end
# do we have events?
if (data_ev != nil && size(data_ev) > 0)
raw.add(0x3602, -2) # add 3601
raw.append(data_ev)
raw.add(0x18, 1) # add 18
end
# MoreChunkedMessages
if more_chunked_messages # we got more data to send
raw.add(0x2903, -2) # add 2903
else
raw.add(0x2803, -2) # add 2803
end
# SuppressResponse
if (self.suppress_response != nil)
if self.suppress_response
raw.add(0x2904, -2) # add 2904
else
raw.add(0x2804, -2) # add 2804
end
end
# InteractionModelRevision
raw.add(0x24FF, -2) # add 24FF
raw.add(0x01, 1) # add 01
# close struct ReportDataMessage
raw.add(0x18, 1) # add 18
# log(f">>>: {raw.tohex()}", 3)
# ##### Previous code
# var ret = matter.ReportDataMessage()
# ret.subscription_id = self.subscription_id
# ret.suppress_response = self.suppress_response
# if (data != nil && size(data) > 0)
# ret.attribute_reports = [data]
# end
# if (data_ev != nil && size(data_ev) > 0)
# ret.event_reports = [data_ev]
# end
# ret.more_chunked_messages = (self.data != nil) || (self.data_ev != nil) # we got more data to send
# var encoded_tlv = ret.to_TLV().tlv2raw(bytes(self.MAX_MESSAGE)) # takes time
# resp.encode_frame(encoded_tlv) # payload in cleartext, pre-allocate max buffer
# log(f">>>: {encoded_tlv.tohex()}", 3)
# ##### Previous code
resp.encode_frame(raw) # payload in cleartext, pre-allocate max buffer
resp.encrypt() resp.encrypt()
# log(format("MTR: <snd (%6i) id=%i exch=%i rack=%s", resp.session.local_session_id, resp.message_counter, resp.exchange_id, resp.ack_message_counter), 4) # log(format("MTR: <snd (%6i) id=%i exch=%i rack=%s", resp.session.local_session_id, resp.message_counter, resp.exchange_id, resp.ack_message_counter), 4)
responder.send_response_frame(resp) responder.send_response_frame(resp)
self.last_counter = resp.message_counter self.last_counter = resp.message_counter
if ret.more_chunked_messages # we have more to send if more_chunked_messages # we have more to send
self.ready = false # wait for Status Report before continuing sending self.ready = false # wait for Status Report before continuing sending
# keep alive # keep alive
else else

View File

@ -1,5 +1,5 @@
# #
# Matter_Plugin_Sensor_GenericSwitch.be - implements the behavior for a Generic Switch # Matter_Plugin_Sensor_GenericSwitch_Btn.be - implements the behavior for a Generic Switch mapped to a Tasmota Button
# #
# Copyright (C) 2023-2024 Stephan Hadinger & Theo Arends # Copyright (C) 2023-2024 Stephan Hadinger & Theo Arends
# #
@ -19,15 +19,15 @@
# Matter plug-in for core behavior # Matter plug-in for core behavior
#@ solidify:Matter_Plugin_Sensor_GenericSwitch,weak #@ solidify:Matter_Plugin_Sensor_GenericSwitch_Btn,weak
class Matter_Plugin_Sensor_GenericSwitch : Matter_Plugin_Device class Matter_Plugin_Sensor_GenericSwitch_Btn : Matter_Plugin_Device
static var TYPE = "gensw" # name of the plug-in in json static var TYPE = "gensw_btn" # name of the plug-in in json
static var DISPLAY_NAME = "Generic Switch" # display name of the plug-in static var DISPLAY_NAME = "Generic Switch/Button" # display name of the plug-in
static var ARG = "switch" # additional argument name (or empty if none) static var ARG = "button" # additional argument name (or empty if none)
static var ARG_HINT = "Switch<x> number" static var ARG_HINT = "Button<x> number"
static var ARG_TYPE = / x -> int(x) # function to convert argument to the right type static var ARG_TYPE = / x -> int(x) # function to convert argument to the right type
static var UPDATE_TIME = 750 # update every 750ms - TODO still necessary? # static var UPDATE_TIME = 750 # update every 750ms - TODO still necessary?
static var CLUSTERS = matter.consolidate_clusters(_class, { static var CLUSTERS = matter.consolidate_clusters(_class, {
# 0x001D: inherited # Descriptor Cluster 9.5 p.453 # 0x001D: inherited # Descriptor Cluster 9.5 p.453
# 0x0039: [3,5,0x0A,0x0F,0x11,0x12], # Bridged Device Basic Information 9.13 p.485 # 0x0039: [3,5,0x0A,0x0F,0x11,0x12], # Bridged Device Basic Information 9.13 p.485
@ -39,7 +39,7 @@ class Matter_Plugin_Sensor_GenericSwitch : Matter_Plugin_Device
static var TYPES = { 0x000F: 2 } # Generic Switch, rev 2 static var TYPES = { 0x000F: 2 } # Generic Switch, rev 2
var tasmota_switch_index # Switch number in Tasmota (one based) var tasmota_switch_index # Switch number in Tasmota (one based)
var shadow_value var shadow_position
############################################################# #############################################################
# parse_configuration # parse_configuration
@ -53,10 +53,20 @@ class Matter_Plugin_Sensor_GenericSwitch : Matter_Plugin_Device
############################################################# #############################################################
# Update shadow # Update shadow
# #
def update_shadow() # def update_shadow()
super(self).update_shadow() # super(self).update_shadow()
self.shadow_value = false # self.shadow_position = false
# TODO # # TODO
# end
#############################################################
# Model
#
def set_position(position)
if position != self.shadow_position
self.attribute_updated(0x003B, 0x0001)
self.shadow_position = position
end
end end
############################################################# #############################################################
@ -73,12 +83,12 @@ class Matter_Plugin_Sensor_GenericSwitch : Matter_Plugin_Device
if attribute == 0x0000 # ---------- NumberOfPositions / uint8 ---------- if attribute == 0x0000 # ---------- NumberOfPositions / uint8 ----------
return tlv_solo.set(TLV.U1, 2) # default to 2 positions return tlv_solo.set(TLV.U1, 2) # default to 2 positions
elif attribute == 0x0001 # ---------- CurrentPosition / uint8 ---------- elif attribute == 0x0001 # ---------- CurrentPosition / uint8 ----------
return tlv_solo.set(TLV.U1, 0) # TODO read value return tlv_solo.set_or_nil(TLV.U1, self.shadow_position)
elif attribute == 0x0002 # ---------- MultiPressMax / uint8 ---------- elif attribute == 0x0002 # ---------- MultiPressMax / uint8 ----------
return tlv_solo.set(TLV.U1, 2) # up to double press return tlv_solo.set(TLV.U1, 5) # up to penta press
elif attribute == 0xFFFC # ---------- FeatureMap / map32 ---------- elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
return tlv_solo.set(TLV.U4, 0x02 + 0x04 + 0x08) # MomentarySwitch + MomentarySwitchRelease + MomentarySwitchLongPress return tlv_solo.set(TLV.U4, 0x02 | 0x04 | 0x08 | 0x10) # MomentarySwitch + MomentarySwitchRelease + MomentarySwitchLongPress + MomentarySwitchMultiPress
end end
end end
@ -96,5 +106,39 @@ class Matter_Plugin_Sensor_GenericSwitch : Matter_Plugin_Device
return f',"Switch":{int(self.shadow_onoff)}' return f',"Switch":{int(self.shadow_onoff)}'
end end
#####################################################################
# button_handler - a button event happened
#
# Args:
# - button: (int) button number (base 1)
# - mode: (int) 0=static report every second, 1=button state changed (immediate), 2=multi-press status (delayed)
# - state: 1=button pressed, 0=button released, 2..5+=multi-press complete
def button_handler(button, mode, state, press_counter)
# if tasmota.loglevel(3) && (mode != 0) # only if actual action
# log(f"MTR: button_event {button}/{mode}:{state}", 3)
# end
# adjust value of position first, either regular secondly updates (mode==0) or change in state (mode==1)
if (mode == 0) || (mode == 1)
self.set_position(state)
end
# publish event for (mode==1), InitialPress and ShortRelease
if (mode == 1)
if state # InitialPress
self.publish_event(0x003B, 0x01, matter.EVENT_INFO, matter.TLV.Matter_TLV_item().set(matter.TLV.U1, 1)) # InitialPress, position hardcoded to 1
else
self.publish_event(0x003B, 0x03, matter.EVENT_INFO, matter.TLV.Matter_TLV_item().set(matter.TLV.U1, 1)) # ShortRelease, previous position hardcoded to 1
end
# check if there is an ungoing multi-press
if (state == 1) && (press_counter > 0)
# MultiPressOngoing
self.publish_event(0x003B, 0x05, matter.EVENT_INFO, matter.TLV.Matter_TLV_item().set(matter.TLV.U1, 1),
matter.TLV.Matter_TLV_item().set(matter.TLV.U1, press_counter + 1)) # MultiPressCom­ plete
end
elif (mode == 2) && (press_counter > 0) # Multipress
self.publish_event(0x003B, 0x06, matter.EVENT_INFO, matter.TLV.Matter_TLV_item().set(matter.TLV.U1, 1),
matter.TLV.Matter_TLV_item().set(matter.TLV.U1, press_counter)) # MultiPressCom­ plete
end
end
end end
matter.Plugin_Sensor_GenericSwitch = Matter_Plugin_Sensor_GenericSwitch matter.Plugin_Sensor_GenericSwitch_Btn = Matter_Plugin_Sensor_GenericSwitch_Btn

View File

@ -33,6 +33,7 @@ import matter
################################################################################# #################################################################################
class Matter_UI class Matter_UI
static var _CLASSES_TYPES = "|relay|light0|light1|light2|light3|shutter|shutter+tilt" static var _CLASSES_TYPES = "|relay|light0|light1|light2|light3|shutter|shutter+tilt"
"|gensw_btn"
"|temperature|pressure|illuminance|humidity|occupancy|onoff|contact|flow|rain|waterleak" "|temperature|pressure|illuminance|humidity|occupancy|onoff|contact|flow|rain|waterleak"
"|airquality" "|airquality"
"|-virtual|v_relay|v_light0|v_light1|v_light2|v_light3" "|-virtual|v_relay|v_light0|v_light1|v_light2|v_light3"

View File

@ -285,6 +285,44 @@ class Matter_Device
return ret return ret
end end
#####################################################################
# Driver handling of buttons
#####################################################################
# Attach driver `button_pressed`
def button_pressed(cmd, idx)
var state = (idx >> 16) & 0xFF
var last_state = (idx >> 8) & 0xFF
var index = (idx & 0xFF)
var press_counter = (idx >> 24) & 0xFF
self.button_handler(index + 1, (state != last_state) ? 1 : 0, state ? 0 : 1, press_counter) # invert state, originally '0' means press, turn it into '1'
end
# Attach driver `button_multi_pressed`
def button_multi_pressed(cmd, idx)
var press_counter = (idx >> 8) & 0xFF
var index = (idx & 0xFF)
self.button_handler(index + 1, 2, 0, press_counter)
end
#####################################################################
# Centralize to a single call
#
# Args:
# - button: (int) button number (base 1)
# - mode: (int) 0=static report every second, 1=button state changed (immediate), 2=multi-press status (delayed)
# - state: 1=button pressed, 0=button released, 2..5+=multi-press complete
def button_handler(button, mode, state, press_counter)
# log(f"MTR: button_handler({button=}, {mode=}, {state=})", 3)
# call all plugins, use a manual loop to avoid creating a new object
var idx = 0
import introspect
while idx < size(self.plugins)
var pi = self.plugins[idx]
if introspect.contains(pi, "button_handler")
self.plugins[idx].button_handler(button, mode, state, press_counter)
end
idx += 1
end
end
############################################################# #############################################################
# dispatch every second click to sub-objects that need it # dispatch every second click to sub-objects that need it
def every_second() def every_second()

View File

@ -791,42 +791,13 @@ be_local_class(Matter_EventHandler,
extern const bclass be_class_Matter_EventQueued; extern const bclass be_class_Matter_EventQueued;
/********************************************************************
** Solidified function: compact
********************************************************************/
extern const bclass be_class_Matter_EventQueued;
be_local_closure(class_Matter_EventQueued_compact, /* name */
be_nested_proto(
2, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_EventQueued,
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
/* K0 */ be_nested_str_weak(raw_tlv),
}),
be_str_weak(compact),
&be_const_str_solidified,
( &(const binstruction[ 3]) { /* code */
0x4C040000, // 0000 LDNIL R1
0x90020001, // 0001 SETMBR R0 K0 R1
0x80000000, // 0002 RET 0
})
)
);
/*******************************************************************/
/******************************************************************** /********************************************************************
** Solidified function: to_raw_bytes ** Solidified function: to_raw_bytes
********************************************************************/ ********************************************************************/
extern const bclass be_class_Matter_EventQueued; extern const bclass be_class_Matter_EventQueued;
be_local_closure(class_Matter_EventQueued_to_raw_bytes, /* name */ be_local_closure(class_Matter_EventQueued_to_raw_bytes, /* name */
be_nested_proto( be_nested_proto(
8, /* nstack */ 14, /* nstack */
1, /* argc */ 1, /* argc */
2, /* varg */ 2, /* varg */
0, /* has upvals */ 0, /* has upvals */
@ -834,107 +805,46 @@ be_local_closure(class_Matter_EventQueued_to_raw_bytes, /* name */
0, /* has sup protos */ 0, /* has sup protos */
&be_class_Matter_EventQueued, &be_class_Matter_EventQueued,
1, /* has constants */ 1, /* has constants */
( &(const bvalue[28]) { /* constants */ ( &(const bvalue[12]) { /* constants */
/* K0 */ be_nested_str_weak(raw_tlv), /* K0 */ be_nested_str_weak(raw_tlv),
/* K1 */ be_nested_str_weak(matter), /* K1 */ be_nested_str_weak(eventreport2raw),
/* K2 */ be_nested_str_weak(EventReportIB), /* K2 */ be_nested_str_weak(endpoint),
/* K3 */ be_nested_str_weak(EventDataIB), /* K3 */ be_nested_str_weak(cluster),
/* K4 */ be_nested_str_weak(event_data), /* K4 */ be_nested_str_weak(event_id),
/* K5 */ be_nested_str_weak(EventPathIB), /* K5 */ be_nested_str_weak(is_urgent),
/* K6 */ be_nested_str_weak(endpoint), /* K6 */ be_nested_str_weak(priority),
/* K7 */ be_nested_str_weak(cluster), /* K7 */ be_nested_str_weak(event_no),
/* K8 */ be_nested_str_weak(event), /* K8 */ be_nested_str_weak(epoch_timestamp),
/* K9 */ be_nested_str_weak(event_id), /* K9 */ be_nested_str_weak(data0),
/* K10 */ be_nested_str_weak(is_urgent), /* K10 */ be_nested_str_weak(data1),
/* K11 */ be_nested_str_weak(path), /* K11 */ be_nested_str_weak(data2),
/* K12 */ be_nested_str_weak(priority),
/* K13 */ be_nested_str_weak(event_number),
/* K14 */ be_nested_str_weak(event_no),
/* K15 */ be_nested_str_weak(epoch_timestamp),
/* K16 */ be_nested_str_weak(data),
/* K17 */ be_nested_str_weak(TLV),
/* K18 */ be_nested_str_weak(Matter_TLV_struct),
/* K19 */ be_nested_str_weak(data0),
/* K20 */ be_nested_str_weak(add_obj),
/* K21 */ be_const_int(0),
/* K22 */ be_nested_str_weak(data1),
/* K23 */ be_const_int(1),
/* K24 */ be_nested_str_weak(data2),
/* K25 */ be_const_int(2),
/* K26 */ be_nested_str_weak(to_TLV),
/* K27 */ be_nested_str_weak(tlv2raw),
}), }),
be_str_weak(to_raw_bytes), be_str_weak(to_raw_bytes),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[68]) { /* code */ ( &(const binstruction[23]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0 0x88040100, // 0000 GETMBR R1 R0 K0
0x4C080000, // 0001 LDNIL R2 0x4C080000, // 0001 LDNIL R2
0x1C040202, // 0002 EQ R1 R1 R2 0x1C040202, // 0002 EQ R1 R1 R2
0x7806003D, // 0003 JMPF R1 #0042 0x78060010, // 0003 JMPF R1 #0015
0xB8060200, // 0004 GETNGBL R1 K1 0x60040015, // 0004 GETGBL R1 G21
0x8C040302, // 0005 GETMET R1 R1 K2 0x540A003F, // 0005 LDINT R2 64
0x7C040200, // 0006 CALL R1 1 0x7C040200, // 0006 CALL R1 1
0xB80A0200, // 0007 GETNGBL R2 K1 0x90020001, // 0007 SETMBR R0 K0 R1
0x8C080503, // 0008 GETMET R2 R2 K3 0x8C040101, // 0008 GETMET R1 R0 K1
0x7C080200, // 0009 CALL R2 1 0x880C0100, // 0009 GETMBR R3 R0 K0
0x90060802, // 000A SETMBR R1 K4 R2 0x88100102, // 000A GETMBR R4 R0 K2
0xB80E0200, // 000B GETNGBL R3 K1 0x88140103, // 000B GETMBR R5 R0 K3
0x8C0C0705, // 000C GETMET R3 R3 K5 0x88180104, // 000C GETMBR R6 R0 K4
0x7C0C0200, // 000D CALL R3 1 0x881C0105, // 000D GETMBR R7 R0 K5
0x88100106, // 000E GETMBR R4 R0 K6 0x88200106, // 000E GETMBR R8 R0 K6
0x900E0C04, // 000F SETMBR R3 K6 R4 0x88240107, // 000F GETMBR R9 R0 K7
0x88100107, // 0010 GETMBR R4 R0 K7 0x88280108, // 0010 GETMBR R10 R0 K8
0x900E0E04, // 0011 SETMBR R3 K7 R4 0x882C0109, // 0011 GETMBR R11 R0 K9
0x88100109, // 0012 GETMBR R4 R0 K9 0x8830010A, // 0012 GETMBR R12 R0 K10
0x900E1004, // 0013 SETMBR R3 K8 R4 0x8834010B, // 0013 GETMBR R13 R0 K11
0x8810010A, // 0014 GETMBR R4 R0 K10 0x7C041800, // 0014 CALL R1 12
0x900E1404, // 0015 SETMBR R3 K10 R4 0x88040100, // 0015 GETMBR R1 R0 K0
0x900A1603, // 0016 SETMBR R2 K11 R3 0x80040200, // 0016 RET 1 R1
0x8810010C, // 0017 GETMBR R4 R0 K12
0x900A1804, // 0018 SETMBR R2 K12 R4
0x8810010E, // 0019 GETMBR R4 R0 K14
0x900A1A04, // 001A SETMBR R2 K13 R4
0x8810010F, // 001B GETMBR R4 R0 K15
0x900A1E04, // 001C SETMBR R2 K15 R4
0xB8120200, // 001D GETNGBL R4 K1
0x88100911, // 001E GETMBR R4 R4 K17
0x8C100912, // 001F GETMET R4 R4 K18
0x7C100200, // 0020 CALL R4 1
0x900A2004, // 0021 SETMBR R2 K16 R4
0x88100113, // 0022 GETMBR R4 R0 K19
0x4C140000, // 0023 LDNIL R5
0x20100805, // 0024 NE R4 R4 R5
0x78120004, // 0025 JMPF R4 #002B
0x88100510, // 0026 GETMBR R4 R2 K16
0x8C100914, // 0027 GETMET R4 R4 K20
0x58180015, // 0028 LDCONST R6 K21
0x881C0113, // 0029 GETMBR R7 R0 K19
0x7C100600, // 002A CALL R4 3
0x88100116, // 002B GETMBR R4 R0 K22
0x4C140000, // 002C LDNIL R5
0x20100805, // 002D NE R4 R4 R5
0x78120004, // 002E JMPF R4 #0034
0x88100510, // 002F GETMBR R4 R2 K16
0x8C100914, // 0030 GETMET R4 R4 K20
0x58180017, // 0031 LDCONST R6 K23
0x881C0116, // 0032 GETMBR R7 R0 K22
0x7C100600, // 0033 CALL R4 3
0x88100118, // 0034 GETMBR R4 R0 K24
0x4C140000, // 0035 LDNIL R5
0x20100805, // 0036 NE R4 R4 R5
0x78120004, // 0037 JMPF R4 #003D
0x88100510, // 0038 GETMBR R4 R2 K16
0x8C100914, // 0039 GETMET R4 R4 K20
0x58180019, // 003A LDCONST R6 K25
0x881C0118, // 003B GETMBR R7 R0 K24
0x7C100600, // 003C CALL R4 3
0x8C10031A, // 003D GETMET R4 R1 K26
0x7C100200, // 003E CALL R4 1
0x8C10091B, // 003F GETMET R4 R4 K27
0x7C100200, // 0040 CALL R4 1
0x90020004, // 0041 SETMBR R0 K0 R4
0x88040100, // 0042 GETMBR R1 R0 K0
0x80040200, // 0043 RET 1 R1
}) })
) )
); );
@ -1019,28 +929,295 @@ be_local_closure(class_Matter_EventQueued_init, /* name */
/*******************************************************************/ /*******************************************************************/
/********************************************************************
** Solidified function: compact
********************************************************************/
extern const bclass be_class_Matter_EventQueued;
be_local_closure(class_Matter_EventQueued_compact, /* name */
be_nested_proto(
2, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_EventQueued,
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
/* K0 */ be_nested_str_weak(raw_tlv),
}),
be_str_weak(compact),
&be_const_str_solidified,
( &(const binstruction[ 3]) { /* code */
0x4C040000, // 0000 LDNIL R1
0x90020001, // 0001 SETMBR R0 K0 R1
0x80000000, // 0002 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: eventpath2raw
********************************************************************/
extern const bclass be_class_Matter_EventQueued;
be_local_closure(class_Matter_EventQueued_eventpath2raw, /* name */
be_nested_proto(
10, /* nstack */
6, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_EventQueued,
1, /* has constants */
( &(const bvalue[ 3]) { /* constants */
/* K0 */ be_nested_str_weak(add),
/* K1 */ be_const_int(1),
/* K2 */ be_const_int(2),
}),
be_str_weak(eventpath2raw),
&be_const_str_solidified,
( &(const binstruction[91]) { /* code */
0x8C180300, // 0000 GETMET R6 R1 K0
0x542236FF, // 0001 LDINT R8 14080
0x5425FFFD, // 0002 LDINT R9 -2
0x7C180600, // 0003 CALL R6 3
0x541A00FE, // 0004 LDINT R6 255
0x18180406, // 0005 LE R6 R2 R6
0x781A0008, // 0006 JMPF R6 #0010
0x8C180300, // 0007 GETMET R6 R1 K0
0x54222400, // 0008 LDINT R8 9217
0x5425FFFD, // 0009 LDINT R9 -2
0x7C180600, // 000A CALL R6 3
0x8C180300, // 000B GETMET R6 R1 K0
0x5C200400, // 000C MOVE R8 R2
0x58240001, // 000D LDCONST R9 K1
0x7C180600, // 000E CALL R6 3
0x70020007, // 000F JMP #0018
0x8C180300, // 0010 GETMET R6 R1 K0
0x54222500, // 0011 LDINT R8 9473
0x5425FFFD, // 0012 LDINT R9 -2
0x7C180600, // 0013 CALL R6 3
0x8C180300, // 0014 GETMET R6 R1 K0
0x5C200400, // 0015 MOVE R8 R2
0x58240002, // 0016 LDCONST R9 K2
0x7C180600, // 0017 CALL R6 3
0x541A00FE, // 0018 LDINT R6 255
0x18180606, // 0019 LE R6 R3 R6
0x781A0008, // 001A JMPF R6 #0024
0x8C180300, // 001B GETMET R6 R1 K0
0x54222401, // 001C LDINT R8 9218
0x5425FFFD, // 001D LDINT R9 -2
0x7C180600, // 001E CALL R6 3
0x8C180300, // 001F GETMET R6 R1 K0
0x5C200600, // 0020 MOVE R8 R3
0x58240001, // 0021 LDCONST R9 K1
0x7C180600, // 0022 CALL R6 3
0x70020013, // 0023 JMP #0038
0x541AFFFE, // 0024 LDINT R6 65535
0x18180606, // 0025 LE R6 R3 R6
0x781A0008, // 0026 JMPF R6 #0030
0x8C180300, // 0027 GETMET R6 R1 K0
0x54222501, // 0028 LDINT R8 9474
0x5425FFFD, // 0029 LDINT R9 -2
0x7C180600, // 002A CALL R6 3
0x8C180300, // 002B GETMET R6 R1 K0
0x5C200600, // 002C MOVE R8 R3
0x58240002, // 002D LDCONST R9 K2
0x7C180600, // 002E CALL R6 3
0x70020007, // 002F JMP #0038
0x8C180300, // 0030 GETMET R6 R1 K0
0x54222601, // 0031 LDINT R8 9730
0x5425FFFD, // 0032 LDINT R9 -2
0x7C180600, // 0033 CALL R6 3
0x8C180300, // 0034 GETMET R6 R1 K0
0x5C200600, // 0035 MOVE R8 R3
0x54260003, // 0036 LDINT R9 4
0x7C180600, // 0037 CALL R6 3
0x541A00FE, // 0038 LDINT R6 255
0x18180806, // 0039 LE R6 R4 R6
0x781A0008, // 003A JMPF R6 #0044
0x8C180300, // 003B GETMET R6 R1 K0
0x54222402, // 003C LDINT R8 9219
0x5425FFFD, // 003D LDINT R9 -2
0x7C180600, // 003E CALL R6 3
0x8C180300, // 003F GETMET R6 R1 K0
0x5C200800, // 0040 MOVE R8 R4
0x58240001, // 0041 LDCONST R9 K1
0x7C180600, // 0042 CALL R6 3
0x70020007, // 0043 JMP #004C
0x8C180300, // 0044 GETMET R6 R1 K0
0x54222502, // 0045 LDINT R8 9475
0x5425FFFD, // 0046 LDINT R9 -2
0x7C180600, // 0047 CALL R6 3
0x8C180300, // 0048 GETMET R6 R1 K0
0x5C200800, // 0049 MOVE R8 R4
0x58240002, // 004A LDCONST R9 K2
0x7C180600, // 004B CALL R6 3
0x78160004, // 004C JMPF R5 #0052
0x8C180300, // 004D GETMET R6 R1 K0
0x54222903, // 004E LDINT R8 10500
0x5425FFFD, // 004F LDINT R9 -2
0x7C180600, // 0050 CALL R6 3
0x70020003, // 0051 JMP #0056
0x8C180300, // 0052 GETMET R6 R1 K0
0x54222803, // 0053 LDINT R8 10244
0x5425FFFD, // 0054 LDINT R9 -2
0x7C180600, // 0055 CALL R6 3
0x8C180300, // 0056 GETMET R6 R1 K0
0x54220017, // 0057 LDINT R8 24
0x58240001, // 0058 LDCONST R9 K1
0x7C180600, // 0059 CALL R6 3
0x80000000, // 005A RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: eventreport2raw
********************************************************************/
extern const bclass be_class_Matter_EventQueued;
be_local_closure(class_Matter_EventQueued_eventreport2raw, /* name */
be_nested_proto(
19, /* nstack */
12, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_EventQueued,
1, /* has constants */
( &(const bvalue[ 9]) { /* constants */
/* K0 */ be_nested_str_weak(add),
/* K1 */ be_const_int(1),
/* K2 */ be_nested_str_weak(eventpath2raw),
/* K3 */ be_nested_str_weak(low32),
/* K4 */ be_nested_str_weak(high32),
/* K5 */ be_nested_str_weak(tag_sub),
/* K6 */ be_const_int(0),
/* K7 */ be_nested_str_weak(tlv2raw),
/* K8 */ be_const_int(2),
}),
be_str_weak(eventreport2raw),
&be_const_str_solidified,
( &(const binstruction[83]) { /* code */
0x8C300300, // 0000 GETMET R12 R1 K0
0x543A0014, // 0001 LDINT R14 21
0x583C0001, // 0002 LDCONST R15 K1
0x7C300600, // 0003 CALL R12 3
0x8C300300, // 0004 GETMET R12 R1 K0
0x543A3500, // 0005 LDINT R14 13569
0x543DFFFD, // 0006 LDINT R15 -2
0x7C300600, // 0007 CALL R12 3
0x8C300102, // 0008 GETMET R12 R0 K2
0x5C380200, // 0009 MOVE R14 R1
0x5C3C0400, // 000A MOVE R15 R2
0x5C400600, // 000B MOVE R16 R3
0x5C440800, // 000C MOVE R17 R4
0x5C480A00, // 000D MOVE R18 R5
0x7C300C00, // 000E CALL R12 6
0x8C300300, // 000F GETMET R12 R1 K0
0x543A2700, // 0010 LDINT R14 9985
0x543DFFFD, // 0011 LDINT R15 -2
0x7C300600, // 0012 CALL R12 3
0x8C300300, // 0013 GETMET R12 R1 K0
0x8C380F03, // 0014 GETMET R14 R7 K3
0x7C380200, // 0015 CALL R14 1
0x543E0003, // 0016 LDINT R15 4
0x7C300600, // 0017 CALL R12 3
0x8C300300, // 0018 GETMET R12 R1 K0
0x8C380F04, // 0019 GETMET R14 R7 K4
0x7C380200, // 001A CALL R14 1
0x543E0003, // 001B LDINT R15 4
0x7C300600, // 001C CALL R12 3
0x8C300300, // 001D GETMET R12 R1 K0
0x543A2401, // 001E LDINT R14 9218
0x543DFFFD, // 001F LDINT R15 -2
0x7C300600, // 0020 CALL R12 3
0x8C300300, // 0021 GETMET R12 R1 K0
0x5C380C00, // 0022 MOVE R14 R6
0x583C0001, // 0023 LDCONST R15 K1
0x7C300600, // 0024 CALL R12 3
0x8C300300, // 0025 GETMET R12 R1 K0
0x543A2602, // 0026 LDINT R14 9731
0x543DFFFD, // 0027 LDINT R15 -2
0x7C300600, // 0028 CALL R12 3
0x8C300300, // 0029 GETMET R12 R1 K0
0x5C381000, // 002A MOVE R14 R8
0x543E0003, // 002B LDINT R15 4
0x7C300600, // 002C CALL R12 3
0x8C300300, // 002D GETMET R12 R1 K0
0x543A3506, // 002E LDINT R14 13575
0x543DFFFD, // 002F LDINT R15 -2
0x7C300600, // 0030 CALL R12 3
0x4C300000, // 0031 LDNIL R12
0x2030120C, // 0032 NE R12 R9 R12
0x78320003, // 0033 JMPF R12 #0038
0x90260B06, // 0034 SETMBR R9 K5 K6
0x8C301307, // 0035 GETMET R12 R9 K7
0x5C380200, // 0036 MOVE R14 R1
0x7C300400, // 0037 CALL R12 2
0x4C300000, // 0038 LDNIL R12
0x2030140C, // 0039 NE R12 R10 R12
0x78320003, // 003A JMPF R12 #003F
0x902A0B01, // 003B SETMBR R10 K5 K1
0x8C301507, // 003C GETMET R12 R10 K7
0x5C380200, // 003D MOVE R14 R1
0x7C300400, // 003E CALL R12 2
0x4C300000, // 003F LDNIL R12
0x2030160C, // 0040 NE R12 R11 R12
0x78320003, // 0041 JMPF R12 #0046
0x902E0B08, // 0042 SETMBR R11 K5 K8
0x8C301707, // 0043 GETMET R12 R11 K7
0x5C380200, // 0044 MOVE R14 R1
0x7C300400, // 0045 CALL R12 2
0x8C300300, // 0046 GETMET R12 R1 K0
0x543A0017, // 0047 LDINT R14 24
0x583C0001, // 0048 LDCONST R15 K1
0x7C300600, // 0049 CALL R12 3
0x8C300300, // 004A GETMET R12 R1 K0
0x543A0017, // 004B LDINT R14 24
0x583C0001, // 004C LDCONST R15 K1
0x7C300600, // 004D CALL R12 3
0x8C300300, // 004E GETMET R12 R1 K0
0x543A0017, // 004F LDINT R14 24
0x583C0001, // 0050 LDCONST R15 K1
0x7C300600, // 0051 CALL R12 3
0x80000000, // 0052 RET 0
})
)
);
/*******************************************************************/
/******************************************************************** /********************************************************************
** Solidified class: Matter_EventQueued ** Solidified class: Matter_EventQueued
********************************************************************/ ********************************************************************/
be_local_class(Matter_EventQueued, be_local_class(Matter_EventQueued,
11, 11,
NULL, NULL,
be_nested_map(14, be_nested_map(16,
( (struct bmapnode*) &(const bmapnode[]) { ( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(endpoint, -1), be_const_var(0) },
{ be_const_key_weak(epoch_timestamp, -1), be_const_var(9) },
{ be_const_key_weak(compact, -1), be_const_closure(class_Matter_EventQueued_compact_closure) },
{ be_const_key_weak(init, 10), be_const_closure(class_Matter_EventQueued_init_closure) },
{ be_const_key_weak(data2, 11), be_const_var(7) },
{ be_const_key_weak(event_no, 3), be_const_var(8) },
{ be_const_key_weak(raw_tlv, -1), be_const_var(10) },
{ be_const_key_weak(is_urgent, 12), be_const_var(3) },
{ be_const_key_weak(data1, -1), be_const_var(6) },
{ be_const_key_weak(priority, 4), be_const_var(4) },
{ be_const_key_weak(event_id, -1), be_const_var(2) },
{ be_const_key_weak(to_raw_bytes, 1), be_const_closure(class_Matter_EventQueued_to_raw_bytes_closure) },
{ be_const_key_weak(cluster, -1), be_const_var(1) },
{ be_const_key_weak(data0, -1), be_const_var(5) }, { be_const_key_weak(data0, -1), be_const_var(5) },
{ be_const_key_weak(eventreport2raw, -1), be_const_closure(class_Matter_EventQueued_eventreport2raw_closure) },
{ be_const_key_weak(event_id, 11), be_const_var(2) },
{ be_const_key_weak(init, -1), be_const_closure(class_Matter_EventQueued_init_closure) },
{ be_const_key_weak(data1, 14), be_const_var(6) },
{ be_const_key_weak(data2, 1), be_const_var(7) },
{ be_const_key_weak(compact, -1), be_const_closure(class_Matter_EventQueued_compact_closure) },
{ be_const_key_weak(is_urgent, -1), be_const_var(3) },
{ be_const_key_weak(eventpath2raw, -1), be_const_closure(class_Matter_EventQueued_eventpath2raw_closure) },
{ be_const_key_weak(epoch_timestamp, 10), be_const_var(9) },
{ be_const_key_weak(priority, -1), be_const_var(4) },
{ be_const_key_weak(cluster, -1), be_const_var(1) },
{ be_const_key_weak(raw_tlv, 4), be_const_var(10) },
{ be_const_key_weak(to_raw_bytes, 2), be_const_closure(class_Matter_EventQueued_to_raw_bytes_closure) },
{ be_const_key_weak(endpoint, -1), be_const_var(0) },
{ be_const_key_weak(event_no, 0), be_const_var(8) },
})), })),
be_str_weak(Matter_EventQueued) be_str_weak(Matter_EventQueued)
); );

View File

@ -567,7 +567,7 @@ be_local_closure(class_Matter_IM_ReportData_Pull_send_im, /* name */
0, /* has sup protos */ 0, /* has sup protos */
&be_class_Matter_IM_ReportData_Pull, &be_class_Matter_IM_ReportData_Pull,
1, /* has constants */ 1, /* has constants */
( &(const bvalue[51]) { /* constants */ ( &(const bvalue[47]) { /* constants */
/* K0 */ be_nested_str_weak(resp), /* K0 */ be_nested_str_weak(resp),
/* K1 */ be_nested_str_weak(data), /* K1 */ be_nested_str_weak(data),
/* K2 */ be_nested_str_weak(device), /* K2 */ be_nested_str_weak(device),
@ -603,26 +603,22 @@ be_local_closure(class_Matter_IM_ReportData_Pull_send_im, /* name */
/* K32 */ be_nested_str_weak(cluster), /* K32 */ be_nested_str_weak(cluster),
/* K33 */ be_nested_str_weak(event_id), /* K33 */ be_nested_str_weak(event_id),
/* K34 */ be_nested_str_weak(to_raw_bytes), /* K34 */ be_nested_str_weak(to_raw_bytes),
/* K35 */ be_nested_str_weak(matter), /* K35 */ be_nested_str_weak(add),
/* K36 */ be_nested_str_weak(ReportDataMessage), /* K36 */ be_const_int(1),
/* K37 */ be_nested_str_weak(subscription_id), /* K37 */ be_nested_str_weak(subscription_id),
/* K38 */ be_nested_str_weak(suppress_response), /* K38 */ be_const_int(2),
/* K39 */ be_nested_str_weak(attribute_reports), /* K39 */ be_nested_str_weak(suppress_response),
/* K40 */ be_nested_str_weak(event_reports), /* K40 */ be_nested_str_weak(encode_frame),
/* K41 */ be_nested_str_weak(more_chunked_messages), /* K41 */ be_nested_str_weak(encrypt),
/* K42 */ be_nested_str_weak(to_TLV), /* K42 */ be_nested_str_weak(send_response_frame),
/* K43 */ be_nested_str_weak(tlv2raw), /* K43 */ be_nested_str_weak(last_counter),
/* K44 */ be_nested_str_weak(encode_frame), /* K44 */ be_nested_str_weak(message_counter),
/* K45 */ be_nested_str_weak(encrypt), /* K45 */ be_nested_str_weak(ready),
/* K46 */ be_nested_str_weak(send_response_frame), /* K46 */ be_nested_str_weak(finishing),
/* K47 */ be_nested_str_weak(last_counter),
/* K48 */ be_nested_str_weak(message_counter),
/* K49 */ be_nested_str_weak(ready),
/* K50 */ be_nested_str_weak(finishing),
}), }),
be_str_weak(send_im), be_str_weak(send_im),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[307]) { /* code */ ( &(const binstruction[361]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0 0x88080100, // 0000 GETMBR R2 R0 K0
0x880C0101, // 0001 GETMBR R3 R0 K1 0x880C0101, // 0001 GETMBR R3 R0 K1
0x4C100000, // 0002 LDNIL R4 0x4C100000, // 0002 LDNIL R4
@ -863,73 +859,127 @@ be_local_closure(class_Matter_IM_ReportData_Pull_send_im, /* name */
0x4C240000, // 00ED LDNIL R9 0x4C240000, // 00ED LDNIL R9
0x90020A09, // 00EE SETMBR R0 K5 R9 0x90020A09, // 00EE SETMBR R0 K5 R9
0x7001FF90, // 00EF JMP #0081 0x7001FF90, // 00EF JMP #0081
0xB81E4600, // 00F0 GETNGBL R7 K35 0x881C0101, // 00F0 GETMBR R7 R0 K1
0x8C1C0F24, // 00F1 GETMET R7 R7 K36 0x4C200000, // 00F1 LDNIL R8
0x7C1C0200, // 00F2 CALL R7 1 0x201C0E08, // 00F2 NE R7 R7 R8
0x88200125, // 00F3 GETMBR R8 R0 K37 0x741E0004, // 00F3 JMPT R7 #00F9
0x901E4A08, // 00F4 SETMBR R7 K37 R8 0x881C0104, // 00F4 GETMBR R7 R0 K4
0x88200126, // 00F5 GETMBR R8 R0 K38 0x4C200000, // 00F5 LDNIL R8
0x901E4C08, // 00F6 SETMBR R7 K38 R8 0x201C0E08, // 00F6 NE R7 R7 R8
0x4C200000, // 00F7 LDNIL R8 0x741E0000, // 00F7 JMPT R7 #00F9
0x20200608, // 00F8 NE R8 R3 R8 0x501C0001, // 00F8 LDBOOL R7 0 1
0x78220008, // 00F9 JMPF R8 #0103 0x501C0200, // 00F9 LDBOOL R7 1 0
0x6020000C, // 00FA GETGBL R8 G12 0x60200015, // 00FA GETGBL R8 G21
0x5C240600, // 00FB MOVE R9 R3 0x8824010E, // 00FB GETMBR R9 R0 K14
0x7C200200, // 00FC CALL R8 1 0x7C200200, // 00FC CALL R8 1
0x24201107, // 00FD GT R8 R8 K7 0x8C241123, // 00FD GETMET R9 R8 K35
0x78220003, // 00FE JMPF R8 #0103 0x542E0014, // 00FE LDINT R11 21
0x60200012, // 00FF GETGBL R8 G18 0x58300024, // 00FF LDCONST R12 K36
0x7C200000, // 0100 CALL R8 0 0x7C240600, // 0100 CALL R9 3
0x40241003, // 0101 CONNECT R9 R8 R3 0x88240125, // 0101 GETMBR R9 R0 K37
0x901E4E08, // 0102 SETMBR R7 K39 R8 0x4C280000, // 0102 LDNIL R10
0x4C200000, // 0103 LDNIL R8 0x2024120A, // 0103 NE R9 R9 R10
0x20200C08, // 0104 NE R8 R6 R8 0x78260007, // 0104 JMPF R9 #010D
0x78220008, // 0105 JMPF R8 #010F 0x8C241123, // 0105 GETMET R9 R8 K35
0x6020000C, // 0106 GETGBL R8 G12 0x542E24FF, // 0106 LDINT R11 9472
0x5C240C00, // 0107 MOVE R9 R6 0x5431FFFD, // 0107 LDINT R12 -2
0x7C200200, // 0108 CALL R8 1 0x7C240600, // 0108 CALL R9 3
0x24201107, // 0109 GT R8 R8 K7 0x8C241123, // 0109 GETMET R9 R8 K35
0x78220003, // 010A JMPF R8 #010F 0x882C0125, // 010A GETMBR R11 R0 K37
0x60200012, // 010B GETGBL R8 G18 0x58300026, // 010B LDCONST R12 K38
0x7C200000, // 010C CALL R8 0 0x7C240600, // 010C CALL R9 3
0x40241006, // 010D CONNECT R9 R8 R6 0x4C240000, // 010D LDNIL R9
0x901E5008, // 010E SETMBR R7 K40 R8 0x20240609, // 010E NE R9 R3 R9
0x88200101, // 010F GETMBR R8 R0 K1 0x7826000F, // 010F JMPF R9 #0120
0x4C240000, // 0110 LDNIL R9 0x6024000C, // 0110 GETGBL R9 G12
0x20201009, // 0111 NE R8 R8 R9 0x5C280600, // 0111 MOVE R10 R3
0x74220004, // 0112 JMPT R8 #0118 0x7C240200, // 0112 CALL R9 1
0x88200104, // 0113 GETMBR R8 R0 K4 0x24241307, // 0113 GT R9 R9 K7
0x4C240000, // 0114 LDNIL R9 0x7826000A, // 0114 JMPF R9 #0120
0x20201009, // 0115 NE R8 R8 R9 0x8C241123, // 0115 GETMET R9 R8 K35
0x74220000, // 0116 JMPT R8 #0118 0x542E3600, // 0116 LDINT R11 13825
0x50200001, // 0117 LDBOOL R8 0 1 0x5431FFFD, // 0117 LDINT R12 -2
0x50200200, // 0118 LDBOOL R8 1 0 0x7C240600, // 0118 CALL R9 3
0x901E5208, // 0119 SETMBR R7 K41 R8 0x8C24110F, // 0119 GETMET R9 R8 K15
0x8C200F2A, // 011A GETMET R8 R7 K42 0x5C2C0600, // 011A MOVE R11 R3
0x7C200200, // 011B CALL R8 1 0x7C240400, // 011B CALL R9 2
0x8C20112B, // 011C GETMET R8 R8 K43 0x8C241123, // 011C GETMET R9 R8 K35
0x60280015, // 011D GETGBL R10 G21 0x542E0017, // 011D LDINT R11 24
0x882C010E, // 011E GETMBR R11 R0 K14 0x58300024, // 011E LDCONST R12 K36
0x7C280200, // 011F CALL R10 1 0x7C240600, // 011F CALL R9 3
0x7C200400, // 0120 CALL R8 2 0x4C240000, // 0120 LDNIL R9
0x8C24052C, // 0121 GETMET R9 R2 K44 0x20240C09, // 0121 NE R9 R6 R9
0x5C2C1000, // 0122 MOVE R11 R8 0x7826000F, // 0122 JMPF R9 #0133
0x7C240400, // 0123 CALL R9 2 0x6024000C, // 0123 GETGBL R9 G12
0x8C24052D, // 0124 GETMET R9 R2 K45 0x5C280C00, // 0124 MOVE R10 R6
0x7C240200, // 0125 CALL R9 1 0x7C240200, // 0125 CALL R9 1
0x8C24032E, // 0126 GETMET R9 R1 K46 0x24241307, // 0126 GT R9 R9 K7
0x5C2C0400, // 0127 MOVE R11 R2 0x7826000A, // 0127 JMPF R9 #0133
0x7C240400, // 0128 CALL R9 2 0x8C241123, // 0128 GETMET R9 R8 K35
0x88240530, // 0129 GETMBR R9 R2 K48 0x542E3601, // 0129 LDINT R11 13826
0x90025E09, // 012A SETMBR R0 K47 R9 0x5431FFFD, // 012A LDINT R12 -2
0x88240F29, // 012B GETMBR R9 R7 K41 0x7C240600, // 012B CALL R9 3
0x78260002, // 012C JMPF R9 #0130 0x8C24110F, // 012C GETMET R9 R8 K15
0x50240000, // 012D LDBOOL R9 0 0 0x5C2C0C00, // 012D MOVE R11 R6
0x90026209, // 012E SETMBR R0 K49 R9 0x7C240400, // 012E CALL R9 2
0x70020001, // 012F JMP #0132 0x8C241123, // 012F GETMET R9 R8 K35
0x50240200, // 0130 LDBOOL R9 1 0 0x542E0017, // 0130 LDINT R11 24
0x90026409, // 0131 SETMBR R0 K50 R9 0x58300024, // 0131 LDCONST R12 K36
0x80000000, // 0132 RET 0 0x7C240600, // 0132 CALL R9 3
0x781E0004, // 0133 JMPF R7 #0139
0x8C241123, // 0134 GETMET R9 R8 K35
0x542E2902, // 0135 LDINT R11 10499
0x5431FFFD, // 0136 LDINT R12 -2
0x7C240600, // 0137 CALL R9 3
0x70020003, // 0138 JMP #013D
0x8C241123, // 0139 GETMET R9 R8 K35
0x542E2802, // 013A LDINT R11 10243
0x5431FFFD, // 013B LDINT R12 -2
0x7C240600, // 013C CALL R9 3
0x88240127, // 013D GETMBR R9 R0 K39
0x4C280000, // 013E LDNIL R10
0x2024120A, // 013F NE R9 R9 R10
0x7826000A, // 0140 JMPF R9 #014C
0x88240127, // 0141 GETMBR R9 R0 K39
0x78260004, // 0142 JMPF R9 #0148
0x8C241123, // 0143 GETMET R9 R8 K35
0x542E2903, // 0144 LDINT R11 10500
0x5431FFFD, // 0145 LDINT R12 -2
0x7C240600, // 0146 CALL R9 3
0x70020003, // 0147 JMP #014C
0x8C241123, // 0148 GETMET R9 R8 K35
0x542E2803, // 0149 LDINT R11 10244
0x5431FFFD, // 014A LDINT R12 -2
0x7C240600, // 014B CALL R9 3
0x8C241123, // 014C GETMET R9 R8 K35
0x542E24FE, // 014D LDINT R11 9471
0x5431FFFD, // 014E LDINT R12 -2
0x7C240600, // 014F CALL R9 3
0x8C241123, // 0150 GETMET R9 R8 K35
0x582C0024, // 0151 LDCONST R11 K36
0x58300024, // 0152 LDCONST R12 K36
0x7C240600, // 0153 CALL R9 3
0x8C241123, // 0154 GETMET R9 R8 K35
0x542E0017, // 0155 LDINT R11 24
0x58300024, // 0156 LDCONST R12 K36
0x7C240600, // 0157 CALL R9 3
0x8C240528, // 0158 GETMET R9 R2 K40
0x5C2C1000, // 0159 MOVE R11 R8
0x7C240400, // 015A CALL R9 2
0x8C240529, // 015B GETMET R9 R2 K41
0x7C240200, // 015C CALL R9 1
0x8C24032A, // 015D GETMET R9 R1 K42
0x5C2C0400, // 015E MOVE R11 R2
0x7C240400, // 015F CALL R9 2
0x8824052C, // 0160 GETMBR R9 R2 K44
0x90025609, // 0161 SETMBR R0 K43 R9
0x781E0002, // 0162 JMPF R7 #0166
0x50240000, // 0163 LDBOOL R9 0 0
0x90025A09, // 0164 SETMBR R0 K45 R9
0x70020001, // 0165 JMP #0168
0x50240200, // 0166 LDBOOL R9 1 0
0x90025C09, // 0167 SETMBR R0 K46 R9
0x80000000, // 0168 RET 0
}) })
) )
); );

View File

@ -1,350 +0,0 @@
/* Solidification of Matter_Plugin_2_Sensor_GenericSwitch.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch;
/********************************************************************
** Solidified function: <lambda>
********************************************************************/
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch__X3Clambda_X3E, /* name */
be_nested_proto(
3, /* nstack */
1, /* argc */
0, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL,
0, /* has constants */
NULL, /* no const */
be_str_weak(_X3Clambda_X3E),
&be_const_str_solidified,
( &(const binstruction[ 4]) { /* code */
0x60040009, // 0000 GETGBL R1 G9
0x5C080000, // 0001 MOVE R2 R0
0x7C040200, // 0002 CALL R1 1
0x80040200, // 0003 RET 1 R1
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: parse_configuration
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch;
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch_parse_configuration, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_Plugin_Sensor_GenericSwitch,
1, /* has constants */
( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_str_weak(tasmota_switch_index),
/* K1 */ be_nested_str_weak(find),
/* K2 */ be_nested_str_weak(ARG),
/* K3 */ be_const_int(1),
/* K4 */ be_const_int(0),
}),
be_str_weak(parse_configuration),
&be_const_str_solidified,
( &(const binstruction[12]) { /* code */
0x60080009, // 0000 GETGBL R2 G9
0x8C0C0301, // 0001 GETMET R3 R1 K1
0x88140102, // 0002 GETMBR R5 R0 K2
0x58180003, // 0003 LDCONST R6 K3
0x7C0C0600, // 0004 CALL R3 3
0x7C080200, // 0005 CALL R2 1
0x90020002, // 0006 SETMBR R0 K0 R2
0x88080100, // 0007 GETMBR R2 R0 K0
0x18080504, // 0008 LE R2 R2 K4
0x780A0000, // 0009 JMPF R2 #000B
0x90020103, // 000A SETMBR R0 K0 K3
0x80000000, // 000B RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: update_shadow
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch;
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch_update_shadow, /* name */
be_nested_proto(
3, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_Plugin_Sensor_GenericSwitch,
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(update_shadow),
/* K1 */ be_nested_str_weak(shadow_value),
}),
be_str_weak(update_shadow),
&be_const_str_solidified,
( &(const binstruction[ 8]) { /* code */
0x60040003, // 0000 GETGBL R1 G3
0x5C080000, // 0001 MOVE R2 R0
0x7C040200, // 0002 CALL R1 1
0x8C040300, // 0003 GETMET R1 R1 K0
0x7C040200, // 0004 CALL R1 1
0x50040000, // 0005 LDBOOL R1 0 0
0x90020201, // 0006 SETMBR R0 K1 R1
0x80000000, // 0007 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: read_attribute
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch;
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch_read_attribute, /* name */
be_nested_proto(
12, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_Plugin_Sensor_GenericSwitch,
1, /* has constants */
( &(const bvalue[11]) { /* constants */
/* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(TLV),
/* K2 */ be_nested_str_weak(cluster),
/* K3 */ be_nested_str_weak(attribute),
/* K4 */ be_const_int(0),
/* K5 */ be_nested_str_weak(set),
/* K6 */ be_nested_str_weak(U1),
/* K7 */ be_const_int(2),
/* K8 */ be_const_int(1),
/* K9 */ be_nested_str_weak(U4),
/* K10 */ be_nested_str_weak(read_attribute),
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
( &(const binstruction[51]) { /* code */
0xB8120000, // 0000 GETNGBL R4 K0
0x88100901, // 0001 GETMBR R4 R4 K1
0x88140502, // 0002 GETMBR R5 R2 K2
0x88180503, // 0003 GETMBR R6 R2 K3
0x541E003A, // 0004 LDINT R7 59
0x1C1C0A07, // 0005 EQ R7 R5 R7
0x781E0022, // 0006 JMPF R7 #002A
0x1C1C0D04, // 0007 EQ R7 R6 K4
0x781E0005, // 0008 JMPF R7 #000F
0x8C1C0705, // 0009 GETMET R7 R3 K5
0x88240906, // 000A GETMBR R9 R4 K6
0x58280007, // 000B LDCONST R10 K7
0x7C1C0600, // 000C CALL R7 3
0x80040E00, // 000D RET 1 R7
0x7002001A, // 000E JMP #002A
0x1C1C0D08, // 000F EQ R7 R6 K8
0x781E0005, // 0010 JMPF R7 #0017
0x8C1C0705, // 0011 GETMET R7 R3 K5
0x88240906, // 0012 GETMBR R9 R4 K6
0x58280004, // 0013 LDCONST R10 K4
0x7C1C0600, // 0014 CALL R7 3
0x80040E00, // 0015 RET 1 R7
0x70020012, // 0016 JMP #002A
0x1C1C0D07, // 0017 EQ R7 R6 K7
0x781E0005, // 0018 JMPF R7 #001F
0x8C1C0705, // 0019 GETMET R7 R3 K5
0x88240906, // 001A GETMBR R9 R4 K6
0x58280007, // 001B LDCONST R10 K7
0x7C1C0600, // 001C CALL R7 3
0x80040E00, // 001D RET 1 R7
0x7002000A, // 001E JMP #002A
0x541EFFFB, // 001F LDINT R7 65532
0x1C1C0C07, // 0020 EQ R7 R6 R7
0x781E0007, // 0021 JMPF R7 #002A
0x8C1C0705, // 0022 GETMET R7 R3 K5
0x88240909, // 0023 GETMBR R9 R4 K9
0x542A0003, // 0024 LDINT R10 4
0x002A0E0A, // 0025 ADD R10 K7 R10
0x542E0007, // 0026 LDINT R11 8
0x0028140B, // 0027 ADD R10 R10 R11
0x7C1C0600, // 0028 CALL R7 3
0x80040E00, // 0029 RET 1 R7
0x601C0003, // 002A GETGBL R7 G3
0x5C200000, // 002B MOVE R8 R0
0x7C1C0200, // 002C CALL R7 1
0x8C1C0F0A, // 002D GETMET R7 R7 K10
0x5C240200, // 002E MOVE R9 R1
0x5C280400, // 002F MOVE R10 R2
0x5C2C0600, // 0030 MOVE R11 R3
0x7C1C0800, // 0031 CALL R7 4
0x80040E00, // 0032 RET 1 R7
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: append_state_json
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch;
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch_append_state_json, /* name */
be_nested_proto(
5, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_Plugin_Sensor_GenericSwitch,
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(_X2C_X22Switch_X22_X3A_X25s),
/* K1 */ be_nested_str_weak(shadow_onoff),
}),
be_str_weak(append_state_json),
&be_const_str_solidified,
( &(const binstruction[ 7]) { /* code */
0x60040018, // 0000 GETGBL R1 G24
0x58080000, // 0001 LDCONST R2 K0
0x600C0009, // 0002 GETGBL R3 G9
0x88100101, // 0003 GETMBR R4 R0 K1
0x7C0C0200, // 0004 CALL R3 1
0x7C040400, // 0005 CALL R1 2
0x80040200, // 0006 RET 1 R1
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified class: Matter_Plugin_Sensor_GenericSwitch
********************************************************************/
extern const bclass be_class_Matter_Plugin_Device;
be_local_class(Matter_Plugin_Sensor_GenericSwitch,
2,
&be_class_Matter_Plugin_Device,
be_nested_map(14,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(CLUSTERS, 6), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(6,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(5, 1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(12,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(4),
be_const_int(5),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(29, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(10,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(57, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(12,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(3),
be_const_int(5),
be_const_int(10),
be_const_int(15),
be_const_int(17),
be_const_int(18),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(3, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(8,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(7,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(59, 0), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(9,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
})) ) } )) },
{ be_const_key_weak(ARG, -1), be_nested_str_weak(switch) },
{ be_const_key_weak(UPDATE_TIME, 4), be_const_int(750) },
{ be_const_key_weak(TYPE, -1), be_nested_str_weak(gensw) },
{ be_const_key_weak(append_state_json, 9), be_const_closure(class_Matter_Plugin_Sensor_GenericSwitch_append_state_json_closure) },
{ be_const_key_weak(DISPLAY_NAME, -1), be_nested_str_weak(Generic_X20Switch) },
{ be_const_key_weak(read_attribute, -1), be_const_closure(class_Matter_Plugin_Sensor_GenericSwitch_read_attribute_closure) },
{ be_const_key_weak(update_shadow, -1), be_const_closure(class_Matter_Plugin_Sensor_GenericSwitch_update_shadow_closure) },
{ be_const_key_weak(ARG_HINT, 12), be_nested_str_weak(Switch_X3Cx_X3E_X20number) },
{ be_const_key_weak(tasmota_switch_index, 13), be_const_var(0) },
{ be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(1,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(15, -1), be_const_int(2) },
})) ) } )) },
{ be_const_key_weak(parse_configuration, 8), be_const_closure(class_Matter_Plugin_Sensor_GenericSwitch_parse_configuration_closure) },
{ be_const_key_weak(shadow_value, -1), be_const_var(1) },
{ be_const_key_weak(ARG_TYPE, -1), be_const_static_closure(class_Matter_Plugin_Sensor_GenericSwitch__X3Clambda_X3E_closure) },
})),
be_str_weak(Matter_Plugin_Sensor_GenericSwitch)
);
/********************************************************************/
/* End of solidification */

View File

@ -0,0 +1,498 @@
/* Solidification of Matter_Plugin_2_Sensor_GenericSwitch_Btn.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch_Btn;
/********************************************************************
** Solidified function: read_attribute
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch_Btn;
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn_read_attribute, /* name */
be_nested_proto(
12, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_Plugin_Sensor_GenericSwitch_Btn,
1, /* has constants */
( &(const bvalue[13]) { /* constants */
/* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(TLV),
/* K2 */ be_nested_str_weak(cluster),
/* K3 */ be_nested_str_weak(attribute),
/* K4 */ be_const_int(0),
/* K5 */ be_nested_str_weak(set),
/* K6 */ be_nested_str_weak(U1),
/* K7 */ be_const_int(2),
/* K8 */ be_const_int(1),
/* K9 */ be_nested_str_weak(set_or_nil),
/* K10 */ be_nested_str_weak(shadow_position),
/* K11 */ be_nested_str_weak(U4),
/* K12 */ be_nested_str_weak(read_attribute),
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
( &(const binstruction[53]) { /* code */
0xB8120000, // 0000 GETNGBL R4 K0
0x88100901, // 0001 GETMBR R4 R4 K1
0x88140502, // 0002 GETMBR R5 R2 K2
0x88180503, // 0003 GETMBR R6 R2 K3
0x541E003A, // 0004 LDINT R7 59
0x1C1C0A07, // 0005 EQ R7 R5 R7
0x781E0024, // 0006 JMPF R7 #002C
0x1C1C0D04, // 0007 EQ R7 R6 K4
0x781E0005, // 0008 JMPF R7 #000F
0x8C1C0705, // 0009 GETMET R7 R3 K5
0x88240906, // 000A GETMBR R9 R4 K6
0x58280007, // 000B LDCONST R10 K7
0x7C1C0600, // 000C CALL R7 3
0x80040E00, // 000D RET 1 R7
0x7002001C, // 000E JMP #002C
0x1C1C0D08, // 000F EQ R7 R6 K8
0x781E0005, // 0010 JMPF R7 #0017
0x8C1C0709, // 0011 GETMET R7 R3 K9
0x88240906, // 0012 GETMBR R9 R4 K6
0x8828010A, // 0013 GETMBR R10 R0 K10
0x7C1C0600, // 0014 CALL R7 3
0x80040E00, // 0015 RET 1 R7
0x70020014, // 0016 JMP #002C
0x1C1C0D07, // 0017 EQ R7 R6 K7
0x781E0005, // 0018 JMPF R7 #001F
0x8C1C0705, // 0019 GETMET R7 R3 K5
0x88240906, // 001A GETMBR R9 R4 K6
0x542A0004, // 001B LDINT R10 5
0x7C1C0600, // 001C CALL R7 3
0x80040E00, // 001D RET 1 R7
0x7002000C, // 001E JMP #002C
0x541EFFFB, // 001F LDINT R7 65532
0x1C1C0C07, // 0020 EQ R7 R6 R7
0x781E0009, // 0021 JMPF R7 #002C
0x8C1C0705, // 0022 GETMET R7 R3 K5
0x8824090B, // 0023 GETMBR R9 R4 K11
0x542A0003, // 0024 LDINT R10 4
0x302A0E0A, // 0025 OR R10 K7 R10
0x542E0007, // 0026 LDINT R11 8
0x3028140B, // 0027 OR R10 R10 R11
0x542E000F, // 0028 LDINT R11 16
0x3028140B, // 0029 OR R10 R10 R11
0x7C1C0600, // 002A CALL R7 3
0x80040E00, // 002B RET 1 R7
0x601C0003, // 002C GETGBL R7 G3
0x5C200000, // 002D MOVE R8 R0
0x7C1C0200, // 002E CALL R7 1
0x8C1C0F0C, // 002F GETMET R7 R7 K12
0x5C240200, // 0030 MOVE R9 R1
0x5C280400, // 0031 MOVE R10 R2
0x5C2C0600, // 0032 MOVE R11 R3
0x7C1C0800, // 0033 CALL R7 4
0x80040E00, // 0034 RET 1 R7
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: <lambda>
********************************************************************/
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn__X3Clambda_X3E, /* name */
be_nested_proto(
3, /* nstack */
1, /* argc */
0, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL,
0, /* has constants */
NULL, /* no const */
be_str_weak(_X3Clambda_X3E),
&be_const_str_solidified,
( &(const binstruction[ 4]) { /* code */
0x60040009, // 0000 GETGBL R1 G9
0x5C080000, // 0001 MOVE R2 R0
0x7C040200, // 0002 CALL R1 1
0x80040200, // 0003 RET 1 R1
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: set_position
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch_Btn;
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn_set_position, /* name */
be_nested_proto(
6, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_Plugin_Sensor_GenericSwitch_Btn,
1, /* has constants */
( &(const bvalue[ 3]) { /* constants */
/* K0 */ be_nested_str_weak(shadow_position),
/* K1 */ be_nested_str_weak(attribute_updated),
/* K2 */ be_const_int(1),
}),
be_str_weak(set_position),
&be_const_str_solidified,
( &(const binstruction[ 9]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
0x20080202, // 0001 NE R2 R1 R2
0x780A0004, // 0002 JMPF R2 #0008
0x8C080101, // 0003 GETMET R2 R0 K1
0x5412003A, // 0004 LDINT R4 59
0x58140002, // 0005 LDCONST R5 K2
0x7C080600, // 0006 CALL R2 3
0x90020001, // 0007 SETMBR R0 K0 R1
0x80000000, // 0008 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: parse_configuration
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch_Btn;
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn_parse_configuration, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_Plugin_Sensor_GenericSwitch_Btn,
1, /* has constants */
( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_str_weak(tasmota_switch_index),
/* K1 */ be_nested_str_weak(find),
/* K2 */ be_nested_str_weak(ARG),
/* K3 */ be_const_int(1),
/* K4 */ be_const_int(0),
}),
be_str_weak(parse_configuration),
&be_const_str_solidified,
( &(const binstruction[12]) { /* code */
0x60080009, // 0000 GETGBL R2 G9
0x8C0C0301, // 0001 GETMET R3 R1 K1
0x88140102, // 0002 GETMBR R5 R0 K2
0x58180003, // 0003 LDCONST R6 K3
0x7C0C0600, // 0004 CALL R3 3
0x7C080200, // 0005 CALL R2 1
0x90020002, // 0006 SETMBR R0 K0 R2
0x88080100, // 0007 GETMBR R2 R0 K0
0x18080504, // 0008 LE R2 R2 K4
0x780A0000, // 0009 JMPF R2 #000B
0x90020103, // 000A SETMBR R0 K0 K3
0x80000000, // 000B RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: append_state_json
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch_Btn;
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn_append_state_json, /* name */
be_nested_proto(
5, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_Plugin_Sensor_GenericSwitch_Btn,
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(_X2C_X22Switch_X22_X3A_X25s),
/* K1 */ be_nested_str_weak(shadow_onoff),
}),
be_str_weak(append_state_json),
&be_const_str_solidified,
( &(const binstruction[ 7]) { /* code */
0x60040018, // 0000 GETGBL R1 G24
0x58080000, // 0001 LDCONST R2 K0
0x600C0009, // 0002 GETGBL R3 G9
0x88100101, // 0003 GETMBR R4 R0 K1
0x7C0C0200, // 0004 CALL R3 1
0x7C040400, // 0005 CALL R1 2
0x80040200, // 0006 RET 1 R1
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: button_handler
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_GenericSwitch_Btn;
be_local_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn_button_handler, /* name */
be_nested_proto(
15, /* nstack */
5, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
&be_class_Matter_Plugin_Sensor_GenericSwitch_Btn,
1, /* has constants */
( &(const bvalue[12]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_const_int(1),
/* K2 */ be_nested_str_weak(set_position),
/* K3 */ be_nested_str_weak(publish_event),
/* K4 */ be_nested_str_weak(matter),
/* K5 */ be_nested_str_weak(EVENT_INFO),
/* K6 */ be_nested_str_weak(TLV),
/* K7 */ be_nested_str_weak(Matter_TLV_item),
/* K8 */ be_nested_str_weak(set),
/* K9 */ be_nested_str_weak(U1),
/* K10 */ be_const_int(3),
/* K11 */ be_const_int(2),
}),
be_str_weak(button_handler),
&be_const_str_solidified,
( &(const binstruction[105]) { /* code */
0x1C140500, // 0000 EQ R5 R2 K0
0x74160001, // 0001 JMPT R5 #0004
0x1C140501, // 0002 EQ R5 R2 K1
0x78160002, // 0003 JMPF R5 #0007
0x8C140102, // 0004 GETMET R5 R0 K2
0x5C1C0600, // 0005 MOVE R7 R3
0x7C140400, // 0006 CALL R5 2
0x1C140501, // 0007 EQ R5 R2 K1
0x78160040, // 0008 JMPF R5 #004A
0x780E0010, // 0009 JMPF R3 #001B
0x8C140103, // 000A GETMET R5 R0 K3
0x541E003A, // 000B LDINT R7 59
0x58200001, // 000C LDCONST R8 K1
0xB8260800, // 000D GETNGBL R9 K4
0x88241305, // 000E GETMBR R9 R9 K5
0xB82A0800, // 000F GETNGBL R10 K4
0x88281506, // 0010 GETMBR R10 R10 K6
0x8C281507, // 0011 GETMET R10 R10 K7
0x7C280200, // 0012 CALL R10 1
0x8C281508, // 0013 GETMET R10 R10 K8
0xB8320800, // 0014 GETNGBL R12 K4
0x88301906, // 0015 GETMBR R12 R12 K6
0x88301909, // 0016 GETMBR R12 R12 K9
0x58340001, // 0017 LDCONST R13 K1
0x7C280600, // 0018 CALL R10 3
0x7C140A00, // 0019 CALL R5 5
0x7002000F, // 001A JMP #002B
0x8C140103, // 001B GETMET R5 R0 K3
0x541E003A, // 001C LDINT R7 59
0x5820000A, // 001D LDCONST R8 K10
0xB8260800, // 001E GETNGBL R9 K4
0x88241305, // 001F GETMBR R9 R9 K5
0xB82A0800, // 0020 GETNGBL R10 K4
0x88281506, // 0021 GETMBR R10 R10 K6
0x8C281507, // 0022 GETMET R10 R10 K7
0x7C280200, // 0023 CALL R10 1
0x8C281508, // 0024 GETMET R10 R10 K8
0xB8320800, // 0025 GETNGBL R12 K4
0x88301906, // 0026 GETMBR R12 R12 K6
0x88301909, // 0027 GETMBR R12 R12 K9
0x58340001, // 0028 LDCONST R13 K1
0x7C280600, // 0029 CALL R10 3
0x7C140A00, // 002A CALL R5 5
0x1C140701, // 002B EQ R5 R3 K1
0x7816001B, // 002C JMPF R5 #0049
0x24140900, // 002D GT R5 R4 K0
0x78160019, // 002E JMPF R5 #0049
0x8C140103, // 002F GETMET R5 R0 K3
0x541E003A, // 0030 LDINT R7 59
0x54220004, // 0031 LDINT R8 5
0xB8260800, // 0032 GETNGBL R9 K4
0x88241305, // 0033 GETMBR R9 R9 K5
0xB82A0800, // 0034 GETNGBL R10 K4
0x88281506, // 0035 GETMBR R10 R10 K6
0x8C281507, // 0036 GETMET R10 R10 K7
0x7C280200, // 0037 CALL R10 1
0x8C281508, // 0038 GETMET R10 R10 K8
0xB8320800, // 0039 GETNGBL R12 K4
0x88301906, // 003A GETMBR R12 R12 K6
0x88301909, // 003B GETMBR R12 R12 K9
0x58340001, // 003C LDCONST R13 K1
0x7C280600, // 003D CALL R10 3
0xB82E0800, // 003E GETNGBL R11 K4
0x882C1706, // 003F GETMBR R11 R11 K6
0x8C2C1707, // 0040 GETMET R11 R11 K7
0x7C2C0200, // 0041 CALL R11 1
0x8C2C1708, // 0042 GETMET R11 R11 K8
0xB8360800, // 0043 GETNGBL R13 K4
0x88341B06, // 0044 GETMBR R13 R13 K6
0x88341B09, // 0045 GETMBR R13 R13 K9
0x00380901, // 0046 ADD R14 R4 K1
0x7C2C0600, // 0047 CALL R11 3
0x7C140C00, // 0048 CALL R5 6
0x7002001D, // 0049 JMP #0068
0x1C14050B, // 004A EQ R5 R2 K11
0x7816001B, // 004B JMPF R5 #0068
0x24140900, // 004C GT R5 R4 K0
0x78160019, // 004D JMPF R5 #0068
0x8C140103, // 004E GETMET R5 R0 K3
0x541E003A, // 004F LDINT R7 59
0x54220005, // 0050 LDINT R8 6
0xB8260800, // 0051 GETNGBL R9 K4
0x88241305, // 0052 GETMBR R9 R9 K5
0xB82A0800, // 0053 GETNGBL R10 K4
0x88281506, // 0054 GETMBR R10 R10 K6
0x8C281507, // 0055 GETMET R10 R10 K7
0x7C280200, // 0056 CALL R10 1
0x8C281508, // 0057 GETMET R10 R10 K8
0xB8320800, // 0058 GETNGBL R12 K4
0x88301906, // 0059 GETMBR R12 R12 K6
0x88301909, // 005A GETMBR R12 R12 K9
0x58340001, // 005B LDCONST R13 K1
0x7C280600, // 005C CALL R10 3
0xB82E0800, // 005D GETNGBL R11 K4
0x882C1706, // 005E GETMBR R11 R11 K6
0x8C2C1707, // 005F GETMET R11 R11 K7
0x7C2C0200, // 0060 CALL R11 1
0x8C2C1708, // 0061 GETMET R11 R11 K8
0xB8360800, // 0062 GETNGBL R13 K4
0x88341B06, // 0063 GETMBR R13 R13 K6
0x88341B09, // 0064 GETMBR R13 R13 K9
0x5C380800, // 0065 MOVE R14 R4
0x7C2C0600, // 0066 CALL R11 3
0x7C140C00, // 0067 CALL R5 6
0x80000000, // 0068 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified class: Matter_Plugin_Sensor_GenericSwitch_Btn
********************************************************************/
extern const bclass be_class_Matter_Plugin_Device;
be_local_class(Matter_Plugin_Sensor_GenericSwitch_Btn,
2,
&be_class_Matter_Plugin_Device,
be_nested_map(14,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(read_attribute, 4), be_const_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn_read_attribute_closure) },
{ be_const_key_weak(ARG, -1), be_nested_str_weak(button) },
{ be_const_key_weak(ARG_TYPE, 6), be_const_static_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn__X3Clambda_X3E_closure) },
{ be_const_key_weak(TYPE, 9), be_nested_str_weak(gensw_btn) },
{ be_const_key_weak(button_handler, 13), be_const_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn_button_handler_closure) },
{ be_const_key_weak(DISPLAY_NAME, -1), be_nested_str_weak(Generic_X20Switch_X2FButton) },
{ be_const_key_weak(append_state_json, 12), be_const_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn_append_state_json_closure) },
{ be_const_key_weak(set_position, -1), be_const_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn_set_position_closure) },
{ be_const_key_weak(parse_configuration, -1), be_const_closure(class_Matter_Plugin_Sensor_GenericSwitch_Btn_parse_configuration_closure) },
{ be_const_key_weak(shadow_position, -1), be_const_var(1) },
{ be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(1,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(15, -1), be_const_int(2) },
})) ) } )) },
{ be_const_key_weak(ARG_HINT, 8), be_nested_str_weak(Button_X3Cx_X3E_X20number) },
{ be_const_key_weak(tasmota_switch_index, -1), be_const_var(0) },
{ be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(6,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(5, 1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(12,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(4),
be_const_int(5),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(29, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(10,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(57, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(12,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(3),
be_const_int(5),
be_const_int(10),
be_const_int(15),
be_const_int(17),
be_const_int(18),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(3, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(8,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(7,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(59, 0), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(9,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(65528),
be_const_int(65529),
be_const_int(65530),
be_const_int(65531),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
})) ) } )) },
})),
be_str_weak(Matter_Plugin_Sensor_GenericSwitch_Btn)
);
/********************************************************************/
/* End of solidification */

View File

@ -3397,7 +3397,7 @@ be_local_class(Matter_UI,
{ be_const_key_weak(show_commissioning_info, -1), be_const_closure(class_Matter_UI_show_commissioning_info_closure) }, { be_const_key_weak(show_commissioning_info, -1), be_const_closure(class_Matter_UI_show_commissioning_info_closure) },
{ be_const_key_weak(page_part_ctl, 18), be_const_closure(class_Matter_UI_page_part_ctl_closure) }, { be_const_key_weak(page_part_ctl, 18), be_const_closure(class_Matter_UI_page_part_ctl_closure) },
{ be_const_key_weak(show_fabric_info, -1), be_const_closure(class_Matter_UI_show_fabric_info_closure) }, { be_const_key_weak(show_fabric_info, -1), be_const_closure(class_Matter_UI_show_fabric_info_closure) },
{ be_const_key_weak(_CLASSES_TYPES, 4), be_nested_str_long(_X7Crelay_X7Clight0_X7Clight1_X7Clight2_X7Clight3_X7Cshutter_X7Cshutter_X2Btilt_X7Ctemperature_X7Cpressure_X7Cilluminance_X7Chumidity_X7Coccupancy_X7Conoff_X7Ccontact_X7Cflow_X7Crain_X7Cwaterleak_X7Cairquality_X7C_X2Dvirtual_X7Cv_relay_X7Cv_light0_X7Cv_light1_X7Cv_light2_X7Cv_light3_X7Cv_fan_X7Cv_temp_X7Cv_pressure_X7Cv_illuminance_X7Cv_humidity_X7Cv_occupancy_X7Cv_contact_X7Cv_flow_X7Cv_rain_X7Cv_waterleak_X7Cv_airquality) }, { be_const_key_weak(_CLASSES_TYPES, 4), be_nested_str_long(_X7Crelay_X7Clight0_X7Clight1_X7Clight2_X7Clight3_X7Cshutter_X7Cshutter_X2Btilt_X7Cgensw_btn_X7Ctemperature_X7Cpressure_X7Cilluminance_X7Chumidity_X7Coccupancy_X7Conoff_X7Ccontact_X7Cflow_X7Crain_X7Cwaterleak_X7Cairquality_X7C_X2Dvirtual_X7Cv_relay_X7Cv_light0_X7Cv_light1_X7Cv_light2_X7Cv_light3_X7Cv_fan_X7Cv_temp_X7Cv_pressure_X7Cv_illuminance_X7Cv_humidity_X7Cv_occupancy_X7Cv_contact_X7Cv_flow_X7Cv_rain_X7Cv_waterleak_X7Cv_airquality) },
{ be_const_key_weak(web_get_arg, -1), be_const_closure(class_Matter_UI_web_get_arg_closure) }, { be_const_key_weak(web_get_arg, -1), be_const_closure(class_Matter_UI_web_get_arg_closure) },
{ be_const_key_weak(plugin_option, 5), be_const_closure(class_Matter_UI_plugin_option_closure) }, { be_const_key_weak(plugin_option, 5), be_const_closure(class_Matter_UI_plugin_option_closure) },
{ be_const_key_weak(web_add_config_button, -1), be_const_closure(class_Matter_UI_web_add_config_button_closure) }, { be_const_key_weak(web_add_config_button, -1), be_const_closure(class_Matter_UI_web_add_config_button_closure) },