Matter refactoring of UDP sending (#18398)

This commit is contained in:
s-hadinger 2023-04-12 22:01:23 +02:00 committed by GitHub
parent 6d9beb5d79
commit b8483dfb6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 1148 additions and 1204 deletions

View File

@ -120,7 +120,7 @@ class Matter_Commisioning_Context
var raw = resp.encode_frame(status_raw)
self.responder.send_response(raw, msg.remote_ip, msg.remote_port, reliable ? resp.message_counter : nil, msg.session.local_session_id)
self.responder.send_response_frame(resp)
end
def parse_PBKDFParamRequest(msg)
@ -169,7 +169,7 @@ class Matter_Commisioning_Context
var resp = msg.build_response(0x21 #-PBKDR Response-#, true)
var raw = resp.encode_frame(pbkdfparamresp_raw)
self.responder.send_response(raw, msg.remote_ip, msg.remote_port, resp.message_counter, msg.session.local_session_id)
self.responder.send_response_frame(resp)
return true
end
@ -250,7 +250,7 @@ class Matter_Commisioning_Context
var resp = msg.build_response(0x23 #-pake-2-#, true) # no reliable flag
var raw = resp.encode_frame(pake2_raw)
self.responder.send_response(raw, msg.remote_ip, msg.remote_port, resp.message_counter, msg.session.local_session_id)
self.responder.send_response_frame(resp)
return true
end
@ -432,7 +432,7 @@ class Matter_Commisioning_Context
var resp = msg.build_response(0x33 #-sigma-2-resume-#, true)
var raw = resp.encode_frame(sigma2resume_raw)
self.responder.send_response(raw, msg.remote_ip, msg.remote_port, resp.message_counter, msg.session.local_session_id)
self.responder.send_response_frame(resp)
session.close()
session.set_keys(i2r, r2i, ac, created)
@ -542,7 +542,7 @@ class Matter_Commisioning_Context
var resp = msg.build_response(0x31 #-sigma-2-#, true) # no reliable flag
var raw = resp.encode_frame(sigma2_raw)
self.responder.send_response(raw, msg.remote_ip, msg.remote_port, resp.message_counter, msg.session.local_session_id)
self.responder.send_response_frame(resp)
return true
end

View File

@ -336,15 +336,15 @@ class Matter_Device
#############################################################
# Global entry point for sending a message.
# Delegates to `udp_server`
def msg_send(raw, addr, port, id, session_id)
return self.udp_server.send_response(raw, addr, port, id, session_id)
def msg_send(msg)
return self.udp_server.send_UDP(msg)
end
#############################################################
# Signals that a ack was received.
# Delegates to `udp_server` to remove from resending list.
def received_ack(id)
return self.udp_server.received_ack(id)
def received_ack(msg)
return self.udp_server.received_ack(msg)
end
#############################################################

View File

@ -123,7 +123,7 @@ class Matter_IM_Message
resp.encode_frame(self.data.to_TLV().tlv2raw()) # payload in cleartext
resp.encrypt()
tasmota.log(string.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),3)
responder.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter, resp.session.local_session_id)
responder.send_response_frame(resp)
self.last_counter = resp.message_counter
return true
end
@ -244,7 +244,7 @@ class Matter_IM_ReportData : Matter_IM_Message
resp.encrypt()
# print(">>>>> send elements after encrypt")
tasmota.log(string.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),3)
responder.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter, resp.session.local_session_id)
responder.send_response_frame(resp)
self.last_counter = resp.message_counter
if size(next_elemnts) > 0
@ -340,7 +340,7 @@ class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
resp.encode_frame()
resp.encrypt()
tasmota.log(string.format("MTR: <Ack (%6i) ack=%i id=%i", resp.session.local_session_id, resp.ack_message_counter, resp.message_counter), 3)
responder.send_response(resp.raw, resp.remote_ip, resp.remote_port, nil #-not reliable-#, resp.session.local_session_id)
responder.send_response_frame(resp)
self.last_counter = resp.message_counter
return true # we received a ack(), just finish
end
@ -399,7 +399,7 @@ class Matter_IM_SubscribeResponse : Matter_IM_ReportData
self.resp.opcode = 0x04 #- Subscribe Response -#
resp.encode_frame(sr.to_TLV().tlv2raw()) # payload in cleartext
resp.encrypt()
responder.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter, resp.session.local_session_id)
responder.send_response_frame(resp)
self.last_counter = resp.message_counter
tasmota.log(string.format("MTR: Send SubscribeResponseMessage sub=%i id=%i", self.sub.subscription_id, resp.message_counter), 3)
self.sub.re_arm()

View File

@ -49,7 +49,7 @@ class Matter_MessageHandler
var resp = frame.build_standalone_ack(reliable)
resp.encode_frame()
tasmota.log(string.format("MTR: <Ack (%6i) ack=%i id=%i %s", resp.session.local_session_id, resp.ack_message_counter, resp.message_counter, reliable ? '{reliable}' : ''), 3)
self.send_response(resp.raw, resp.remote_ip, resp.remote_port, reliable ? resp.message_counter : nil, resp.session.local_session_id)
self.send_response_frame(resp)
end
end
@ -65,7 +65,7 @@ class Matter_MessageHandler
resp.encode_frame()
resp.encrypt()
tasmota.log(string.format("MTR: <Ack* (%6i) ack=%i id=%i %s", resp.session.local_session_id, resp.ack_message_counter, resp.message_counter, reliable ? '{reliable}' : ''), 3)
self.send_response(resp.raw, resp.remote_ip, resp.remote_port, reliable ? resp.message_counter : nil, resp.session.local_session_id)
self.send_response_frame(resp)
end
end
@ -111,7 +111,7 @@ class Matter_MessageHandler
end
if !frame.decode_payload() return false end
self.device.received_ack(frame.ack_message_counter) # remove acknowledge packet from sending list
self.device.received_ack(frame) # remove acknowledge packet from sending list
if frame.opcode != 0x10 # don't show `MRP_Standalone_Acknowledgement`
var op_name = matter.get_opcode_name(frame.opcode)
if !op_name op_name = string.format("0x%02X", frame.opcode) end
@ -160,7 +160,7 @@ class Matter_MessageHandler
tasmota.log(string.format("MTR: >rcv (%6i) [%02X/%02X] rid=%i exch=%i ack=%s %sfrom [%s]:%i", session.local_session_id, frame.protocol_id, frame.opcode, frame.message_counter, frame.exchange_id, str(frame.ack_message_counter), frame.x_flag_r ? "{reliable} " : "", addr, port), 3)
self.device.received_ack(frame.ack_message_counter) # remove acknowledge packet from sending list
self.device.received_ack(frame) # remove acknowledge packet from sending list
# dispatch according to protocol_id
var protocol_id = frame.protocol_id
@ -210,8 +210,18 @@ class Matter_MessageHandler
end
#############################################################
def send_response(raw, addr, port, id, session_id)
self.device.msg_send(raw, addr, port, id, session_id)
# send a frame to target, usually a response
#
# We need the following:
# msg.raw: raw bytes to send (bytes)
# msg.remote_ip: ip address of target (string)
# msg.remote_port: port of target (int)
# msg.x_flag_r: is the frame expecting a Ack back (int)
# msg.message_counter: counter for this message (int)
# msg.exchange_id: exchange id (int)
# msg.local_session_id: local session (for logging)
def send_response_frame(msg)
self.device.msg_send(msg)
end
#############################################################

View File

@ -37,35 +37,24 @@ class Matter_UDPPacket_sent
var addr # ip_address (string)
var port # port (int)
var msg_id # (int) message identifier that needs to be acknowledged, or `nil` if no ack needed
var session_id # (int) exchange id, for logging only
var exchange_id # (int) exchange id, to match ack
var session_id # (int) session id, for logging only
var retries # 0 in first attempts, goes up to RETRIES
var next_try # timestamp (millis) when to try again
def init(raw, addr, port, id, session_id)
self.raw = raw
self.addr = addr
self.port = port
self.msg_id = id
def init(msg)
# extract information from msg
self.raw = msg.raw
self.addr = msg.remote_ip
self.port = msg.remote_port
self.msg_id = msg.x_flag_r ? msg.message_counter : nil
self.exchange_id = (msg.exchange_id != nil) ? msg.exchange_id : 0
self.session_id = (msg.local_session_id != nil) ? msg.local_session_id : 0
# other information
self.retries = 0
self.session_id = (session_id != nil) ? session_id : 0
self.next_try = tasmota.millis() + matter.UDPServer._backoff_time(self.retries)
end
#############################################################
# Send packet now.
#
# Returns `true` if packet was successfully sent.
def send(udp_socket)
import string
var ok = udp_socket.send(self.addr ? self.addr : udp_socket.remote_ip, self.port ? self.port : udp_socket.remote_port, self.raw)
if ok
tasmota.log(string.format("MTR: sending packet to '[%s]:%i'", self.addr, self.port), 4)
else
tasmota.log(string.format("MTR: error sending packet to '[%s]:%i'", self.addr, self.port), 3)
end
return ok
end
end
matter.UDPPacket_sent = Matter_UDPPacket_sent
@ -74,7 +63,7 @@ matter.UDPPacket_sent = Matter_UDPPacket_sent
#
#################################################################################
class Matter_UDPServer
static var RETRIES = 6 # 7 transmissions max (6 retries) - 2 more than spec `MRP_MAX_TRANSMISSIONS` 4.11.8 p.146
static var RETRIES = 5 # 6 transmissions max (5 retries) - 1 more than spec `MRP_MAX_TRANSMISSIONS` 4.11.8 p.146
static var MAX_PACKETS_READ = 4 # read at most 4 packets per tick
var addr, port # local addr and port
var listening # true if active
@ -150,6 +139,21 @@ class Matter_UDPServer
self._resend_packets() # resend any packet
end
#############################################################
# Send packet now.
#
# Returns `true` if packet was successfully sent.
def send(packet)
import string
var ok = self.udp_socket.send(packet.addr ? packet.addr : self.udp_socket.remote_ip, packet.port ? packet.port : self.udp_socket.remote_port, packet.raw)
if ok
tasmota.log(string.format("MTR: sending packet to '[%s]:%i'", packet.addr, packet.port), 4)
else
tasmota.log(string.format("MTR: error sending packet to '[%s]:%i'", packet.addr, packet.port), 2)
end
return ok
end
#############################################################
# Resend packets if they have not been acknowledged by receiver
# either with direct Ack packet or ack embedded in another packet.
@ -166,7 +170,7 @@ class Matter_UDPServer
if tasmota.time_reached(packet.next_try)
if packet.retries <= self.RETRIES
tasmota.log("MTR: . Resending packet id=" + str(packet.msg_id), 3)
packet.send(self.udp_socket) # resend
self.send(packet)
packet.next_try = tasmota.millis() + self._backoff_time(packet.retries)
packet.retries += 1
idx += 1
@ -183,12 +187,15 @@ class Matter_UDPServer
#############################################################
# Just received acknowledgment, remove packet from sender
def received_ack(id)
def received_ack(msg)
var id = msg.ack_message_counter
var exch = msg.exchange_id
if id == nil return end
tasmota.log("MTR: receveived ACK id="+str(id), 3)
var idx = 0
while idx < size(self.packets_sent)
if self.packets_sent[idx].msg_id == id
var packet = self.packets_sent[idx]
if packet.msg_id == id && packet.exchange_id == exch
self.packets_sent.remove(idx)
tasmota.log("MTR: . Removed packet from sending list id=" + str(id), 3)
else
@ -199,11 +206,10 @@ class Matter_UDPServer
#############################################################
# Send a packet, enqueue it if `id` is not `nil`
def send_response(raw, addr, port, id, session_id)
var packet = matter.UDPPacket_sent(raw, addr, port, id, session_id)
packet.send(self.udp_socket) # send
if id
# tasmota.log("MTR: <<< enqueue id="+str(id))
def send_UDP(msg)
var packet = matter.UDPPacket_sent(msg)
self.send(packet)
if packet.msg_id
self.packets_sent.push(packet)
end
end

View File

@ -3456,8 +3456,8 @@ be_local_closure(Matter_Device_autoconf_device, /* name */
********************************************************************/
be_local_closure(Matter_Device_msg_send, /* name */
be_nested_proto(
13, /* nstack */
6, /* argc */
5, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@ -3466,20 +3466,16 @@ be_local_closure(Matter_Device_msg_send, /* name */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(udp_server),
/* K1 */ be_nested_str_weak(send_response),
/* K1 */ be_nested_str_weak(send_UDP),
}),
be_str_weak(msg_send),
&be_const_str_solidified,
( &(const binstruction[ 9]) { /* code */
0x88180100, // 0000 GETMBR R6 R0 K0
0x8C180D01, // 0001 GETMET R6 R6 K1
0x5C200200, // 0002 MOVE R8 R1
0x5C240400, // 0003 MOVE R9 R2
0x5C280600, // 0004 MOVE R10 R3
0x5C2C0800, // 0005 MOVE R11 R4
0x5C300A00, // 0006 MOVE R12 R5
0x7C180C00, // 0007 CALL R6 6
0x80040C00, // 0008 RET 1 R6
( &(const binstruction[ 5]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
0x8C080501, // 0001 GETMET R2 R2 K1
0x5C100200, // 0002 MOVE R4 R1
0x7C080400, // 0003 CALL R2 2
0x80040400, // 0004 RET 1 R2
})
)
);

View File

@ -274,7 +274,7 @@ be_local_closure(Matter_IM_Message_send_im, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[26]) { /* constants */
( &(const bvalue[23]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(log),
@ -296,15 +296,12 @@ be_local_closure(Matter_IM_Message_send_im, /* name */
/* K18 */ be_nested_str_weak(local_session_id),
/* K19 */ be_nested_str_weak(message_counter),
/* K20 */ be_nested_str_weak(ack_message_counter),
/* K21 */ be_nested_str_weak(send_response),
/* K22 */ be_nested_str_weak(raw),
/* K23 */ be_nested_str_weak(remote_ip),
/* K24 */ be_nested_str_weak(remote_port),
/* K25 */ be_nested_str_weak(last_counter),
/* K21 */ be_nested_str_weak(send_response_frame),
/* K22 */ be_nested_str_weak(last_counter),
}),
be_str_weak(send_im),
&be_const_str_solidified,
( &(const binstruction[53]) { /* code */
( &(const binstruction[48]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0xB80E0200, // 0001 GETNGBL R3 K1
0x8C0C0702, // 0002 GETMET R3 R3 K2
@ -347,17 +344,12 @@ be_local_closure(Matter_IM_Message_send_im, /* name */
0x581C000A, // 0027 LDCONST R7 K10
0x7C100600, // 0028 CALL R4 3
0x8C100315, // 0029 GETMET R4 R1 K21
0x88180716, // 002A GETMBR R6 R3 K22
0x881C0717, // 002B GETMBR R7 R3 K23
0x88200718, // 002C GETMBR R8 R3 K24
0x88240713, // 002D GETMBR R9 R3 K19
0x88280711, // 002E GETMBR R10 R3 K17
0x88281512, // 002F GETMBR R10 R10 K18
0x7C100C00, // 0030 CALL R4 6
0x88100713, // 0031 GETMBR R4 R3 K19
0x90023204, // 0032 SETMBR R0 K25 R4
0x50100200, // 0033 LDBOOL R4 1 0
0x80040800, // 0034 RET 1 R4
0x5C180600, // 002A MOVE R6 R3
0x7C100400, // 002B CALL R4 2
0x88100713, // 002C GETMBR R4 R3 K19
0x90022C04, // 002D SETMBR R0 K22 R4
0x50100200, // 002E LDBOOL R4 1 0
0x80040800, // 002F RET 1 R4
})
)
);
@ -712,7 +704,7 @@ be_local_closure(Matter_IM_ReportData_send_im, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[36]) { /* constants */
( &(const bvalue[33]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(log),
@ -743,16 +735,13 @@ be_local_closure(Matter_IM_ReportData_send_im, /* name */
/* K27 */ be_nested_str_weak(local_session_id),
/* K28 */ be_nested_str_weak(message_counter),
/* K29 */ be_nested_str_weak(ack_message_counter),
/* K30 */ be_nested_str_weak(send_response),
/* K31 */ be_nested_str_weak(raw),
/* K32 */ be_nested_str_weak(remote_ip),
/* K33 */ be_nested_str_weak(remote_port),
/* K34 */ be_nested_str_weak(last_counter),
/* K35 */ be_nested_str_weak(MTR_X3A_X20to_be_sent_later_X20size_X3D_X25i_X20exch_X3D_X25i),
/* K30 */ be_nested_str_weak(send_response_frame),
/* K31 */ be_nested_str_weak(last_counter),
/* K32 */ be_nested_str_weak(MTR_X3A_X20to_be_sent_later_X20size_X3D_X25i_X20exch_X3D_X25i),
}),
be_str_weak(send_im),
&be_const_str_solidified,
( &(const binstruction[170]) { /* code */
( &(const binstruction[165]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0xB80E0200, // 0001 GETNGBL R3 K1
0x8C0C0702, // 0002 GETMET R3 R3 K2
@ -889,40 +878,35 @@ be_local_closure(Matter_IM_ReportData_send_im, /* name */
0x5838000A, // 0085 LDCONST R14 K10
0x7C2C0600, // 0086 CALL R11 3
0x8C2C031E, // 0087 GETMET R11 R1 K30
0x8834071F, // 0088 GETMBR R13 R3 K31
0x88380720, // 0089 GETMBR R14 R3 K32
0x883C0721, // 008A GETMBR R15 R3 K33
0x8840071C, // 008B GETMBR R16 R3 K28
0x8844071A, // 008C GETMBR R17 R3 K26
0x8844231B, // 008D GETMBR R17 R17 K27
0x7C2C0C00, // 008E CALL R11 6
0x882C071C, // 008F GETMBR R11 R3 K28
0x9002440B, // 0090 SETMBR R0 K34 R11
0x602C000C, // 0091 GETGBL R11 G12
0x5C301000, // 0092 MOVE R12 R8
0x7C2C0200, // 0093 CALL R11 1
0x242C1709, // 0094 GT R11 R11 K9
0x782E0010, // 0095 JMPF R11 #00A7
0x90121A08, // 0096 SETMBR R4 K13 R8
0xB82E0200, // 0097 GETNGBL R11 K1
0x8C2C1702, // 0098 GETMET R11 R11 K2
0x8C340503, // 0099 GETMET R13 R2 K3
0x583C0023, // 009A LDCONST R15 K35
0x6040000C, // 009B GETGBL R16 G12
0x8844090D, // 009C GETMBR R17 R4 K13
0x7C400200, // 009D CALL R16 1
0x88440706, // 009E GETMBR R17 R3 K6
0x7C340800, // 009F CALL R13 4
0x5838000A, // 00A0 LDCONST R14 K10
0x7C2C0600, // 00A1 CALL R11 3
0x502C0000, // 00A2 LDBOOL R11 0 0
0x90020E0B, // 00A3 SETMBR R0 K7 R11
0x502C0000, // 00A4 LDBOOL R11 0 0
0x80041600, // 00A5 RET 1 R11
0x70020001, // 00A6 JMP #00A9
0x502C0200, // 00A7 LDBOOL R11 1 0
0x80041600, // 00A8 RET 1 R11
0x80000000, // 00A9 RET 0
0x5C340600, // 0088 MOVE R13 R3
0x7C2C0400, // 0089 CALL R11 2
0x882C071C, // 008A GETMBR R11 R3 K28
0x90023E0B, // 008B SETMBR R0 K31 R11
0x602C000C, // 008C GETGBL R11 G12
0x5C301000, // 008D MOVE R12 R8
0x7C2C0200, // 008E CALL R11 1
0x242C1709, // 008F GT R11 R11 K9
0x782E0010, // 0090 JMPF R11 #00A2
0x90121A08, // 0091 SETMBR R4 K13 R8
0xB82E0200, // 0092 GETNGBL R11 K1
0x8C2C1702, // 0093 GETMET R11 R11 K2
0x8C340503, // 0094 GETMET R13 R2 K3
0x583C0020, // 0095 LDCONST R15 K32
0x6040000C, // 0096 GETGBL R16 G12
0x8844090D, // 0097 GETMBR R17 R4 K13
0x7C400200, // 0098 CALL R16 1
0x88440706, // 0099 GETMBR R17 R3 K6
0x7C340800, // 009A CALL R13 4
0x5838000A, // 009B LDCONST R14 K10
0x7C2C0600, // 009C CALL R11 3
0x502C0000, // 009D LDBOOL R11 0 0
0x90020E0B, // 009E SETMBR R0 K7 R11
0x502C0000, // 009F LDBOOL R11 0 0
0x80041600, // 00A0 RET 1 R11
0x70020001, // 00A1 JMP #00A4
0x502C0200, // 00A2 LDBOOL R11 1 0
0x80041600, // 00A3 RET 1 R11
0x80000000, // 00A4 RET 0
})
)
);
@ -1069,7 +1053,7 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send_im, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[30]) { /* constants */
( &(const bvalue[27]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(log),
@ -1095,15 +1079,12 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send_im, /* name */
/* K22 */ be_nested_str_weak(local_session_id),
/* K23 */ be_nested_str_weak(ack_message_counter),
/* K24 */ be_nested_str_weak(message_counter),
/* K25 */ be_nested_str_weak(send_response),
/* K26 */ be_nested_str_weak(raw),
/* K27 */ be_nested_str_weak(remote_ip),
/* K28 */ be_nested_str_weak(remote_port),
/* K29 */ be_nested_str_weak(last_counter),
/* K25 */ be_nested_str_weak(send_response_frame),
/* K26 */ be_nested_str_weak(last_counter),
}),
be_str_weak(send_im),
&be_const_str_solidified,
( &(const binstruction[92]) { /* code */
( &(const binstruction[87]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0xB80E0200, // 0001 GETNGBL R3 K1
0x8C0C0702, // 0002 GETMET R3 R3 K2
@ -1130,7 +1111,7 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send_im, /* name */
0x8810090E, // 0017 GETMBR R4 R4 K14
0x7C0C0200, // 0018 CALL R3 1
0x240C070B, // 0019 GT R3 R3 K11
0x780E0030, // 001A JMPF R3 #004C
0x780E002B, // 001A JMPF R3 #0047
0x880C010F, // 001B GETMBR R3 R0 K15
0x780E000E, // 001C JMPF R3 #002C
0x600C0003, // 001D GETGBL R3 G3
@ -1147,7 +1128,7 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send_im, /* name */
0x90021E04, // 0028 SETMBR R0 K15 R4
0x50100000, // 0029 LDBOOL R4 0 0
0x80040800, // 002A RET 1 R4
0x7002001E, // 002B JMP #004B
0x70020019, // 002B JMP #0046
0x880C0107, // 002C GETMBR R3 R0 K7
0x8C0C0711, // 002D GETMET R3 R3 K17
0x50140000, // 002E LDBOOL R5 0 0
@ -1168,34 +1149,29 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send_im, /* name */
0x581C000C, // 003D LDCONST R7 K12
0x7C100600, // 003E CALL R4 3
0x8C100319, // 003F GETMET R4 R1 K25
0x8818071A, // 0040 GETMBR R6 R3 K26
0x881C071B, // 0041 GETMBR R7 R3 K27
0x8820071C, // 0042 GETMBR R8 R3 K28
0x4C240000, // 0043 LDNIL R9
0x88280715, // 0044 GETMBR R10 R3 K21
0x88281516, // 0045 GETMBR R10 R10 K22
0x7C100C00, // 0046 CALL R4 6
0x88100718, // 0047 GETMBR R4 R3 K24
0x90023A04, // 0048 SETMBR R0 K29 R4
0x50100200, // 0049 LDBOOL R4 1 0
0x80040800, // 004A RET 1 R4
0x7002000E, // 004B JMP #005B
0x880C010F, // 004C GETMBR R3 R0 K15
0x780E000A, // 004D JMPF R3 #0059
0x600C0003, // 004E GETGBL R3 G3
0x5C100000, // 004F MOVE R4 R0
0x7C0C0200, // 0050 CALL R3 1
0x8C0C0710, // 0051 GETMET R3 R3 K16
0x5C140200, // 0052 MOVE R5 R1
0x7C0C0400, // 0053 CALL R3 2
0x500C0000, // 0054 LDBOOL R3 0 0
0x90021E03, // 0055 SETMBR R0 K15 R3
0x500C0000, // 0056 LDBOOL R3 0 0
0x80040600, // 0057 RET 1 R3
0x70020001, // 0058 JMP #005B
0x500C0200, // 0059 LDBOOL R3 1 0
0x80040600, // 005A RET 1 R3
0x80000000, // 005B RET 0
0x5C180600, // 0040 MOVE R6 R3
0x7C100400, // 0041 CALL R4 2
0x88100718, // 0042 GETMBR R4 R3 K24
0x90023404, // 0043 SETMBR R0 K26 R4
0x50100200, // 0044 LDBOOL R4 1 0
0x80040800, // 0045 RET 1 R4
0x7002000E, // 0046 JMP #0056
0x880C010F, // 0047 GETMBR R3 R0 K15
0x780E000A, // 0048 JMPF R3 #0054
0x600C0003, // 0049 GETGBL R3 G3
0x5C100000, // 004A MOVE R4 R0
0x7C0C0200, // 004B CALL R3 1
0x8C0C0710, // 004C GETMET R3 R3 K16
0x5C140200, // 004D MOVE R5 R1
0x7C0C0400, // 004E CALL R3 2
0x500C0000, // 004F LDBOOL R3 0 0
0x90021E03, // 0050 SETMBR R0 K15 R3
0x500C0000, // 0051 LDBOOL R3 0 0
0x80040600, // 0052 RET 1 R3
0x70020001, // 0053 JMP #0056
0x500C0200, // 0054 LDBOOL R3 1 0
0x80040600, // 0055 RET 1 R3
0x80000000, // 0056 RET 0
})
)
);
@ -1571,7 +1547,7 @@ be_local_closure(Matter_IM_SubscribeResponse_send_im, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[32]) { /* constants */
( &(const bvalue[27]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(log),
@ -1594,20 +1570,15 @@ be_local_closure(Matter_IM_SubscribeResponse_send_im, /* name */
/* K19 */ be_nested_str_weak(to_TLV),
/* K20 */ be_nested_str_weak(tlv2raw),
/* K21 */ be_nested_str_weak(encrypt),
/* K22 */ be_nested_str_weak(send_response),
/* K23 */ be_nested_str_weak(raw),
/* K24 */ be_nested_str_weak(remote_ip),
/* K25 */ be_nested_str_weak(remote_port),
/* K26 */ be_nested_str_weak(message_counter),
/* K27 */ be_nested_str_weak(session),
/* K28 */ be_nested_str_weak(local_session_id),
/* K29 */ be_nested_str_weak(last_counter),
/* K30 */ be_nested_str_weak(MTR_X3A_X20Send_X20SubscribeResponseMessage_X20sub_X3D_X25i_X20id_X3D_X25i),
/* K31 */ be_nested_str_weak(re_arm),
/* K22 */ be_nested_str_weak(send_response_frame),
/* K23 */ be_nested_str_weak(last_counter),
/* K24 */ be_nested_str_weak(message_counter),
/* K25 */ be_nested_str_weak(MTR_X3A_X20Send_X20SubscribeResponseMessage_X20sub_X3D_X25i_X20id_X3D_X25i),
/* K26 */ be_nested_str_weak(re_arm),
}),
be_str_weak(send_im),
&be_const_str_solidified,
( &(const binstruction[82]) { /* code */
( &(const binstruction[77]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0xB80E0200, // 0001 GETNGBL R3 K1
0x8C0C0702, // 0002 GETMET R3 R3 K2
@ -1642,7 +1613,7 @@ be_local_closure(Matter_IM_SubscribeResponse_send_im, /* name */
0x90020E04, // 001F SETMBR R0 K7 R4
0x50100000, // 0020 LDBOOL R4 0 0
0x80040800, // 0021 RET 1 R4
0x7002002D, // 0022 JMP #0051
0x70020028, // 0022 JMP #004C
0x880C010D, // 0023 GETMBR R3 R0 K13
0xB8121C00, // 0024 GETNGBL R4 K14
0x8C10090F, // 0025 GETMET R4 R4 K15
@ -1665,31 +1636,26 @@ be_local_closure(Matter_IM_SubscribeResponse_send_im, /* name */
0x8C140715, // 0036 GETMET R5 R3 K21
0x7C140200, // 0037 CALL R5 1
0x8C140316, // 0038 GETMET R5 R1 K22
0x881C0717, // 0039 GETMBR R7 R3 K23
0x88200718, // 003A GETMBR R8 R3 K24
0x88240719, // 003B GETMBR R9 R3 K25
0x8828071A, // 003C GETMBR R10 R3 K26
0x882C071B, // 003D GETMBR R11 R3 K27
0x882C171C, // 003E GETMBR R11 R11 K28
0x7C140C00, // 003F CALL R5 6
0x8814071A, // 0040 GETMBR R5 R3 K26
0x90023A05, // 0041 SETMBR R0 K29 R5
0xB8160200, // 0042 GETNGBL R5 K1
0x8C140B02, // 0043 GETMET R5 R5 K2
0x8C1C0503, // 0044 GETMET R7 R2 K3
0x5824001E, // 0045 LDCONST R9 K30
0x88280105, // 0046 GETMBR R10 R0 K5
0x88281506, // 0047 GETMBR R10 R10 K6
0x882C071A, // 0048 GETMBR R11 R3 K26
0x7C1C0800, // 0049 CALL R7 4
0x5820000A, // 004A LDCONST R8 K10
0x7C140600, // 004B CALL R5 3
0x88140105, // 004C GETMBR R5 R0 K5
0x8C140B1F, // 004D GETMET R5 R5 K31
0x7C140200, // 004E CALL R5 1
0x50140200, // 004F LDBOOL R5 1 0
0x80040A00, // 0050 RET 1 R5
0x80000000, // 0051 RET 0
0x5C1C0600, // 0039 MOVE R7 R3
0x7C140400, // 003A CALL R5 2
0x88140718, // 003B GETMBR R5 R3 K24
0x90022E05, // 003C SETMBR R0 K23 R5
0xB8160200, // 003D GETNGBL R5 K1
0x8C140B02, // 003E GETMET R5 R5 K2
0x8C1C0503, // 003F GETMET R7 R2 K3
0x58240019, // 0040 LDCONST R9 K25
0x88280105, // 0041 GETMBR R10 R0 K5
0x88281506, // 0042 GETMBR R10 R10 K6
0x882C0718, // 0043 GETMBR R11 R3 K24
0x7C1C0800, // 0044 CALL R7 4
0x5820000A, // 0045 LDCONST R8 K10
0x7C140600, // 0046 CALL R5 3
0x88140105, // 0047 GETMBR R5 R0 K5
0x8C140B1A, // 0048 GETMET R5 R5 K26
0x7C140200, // 0049 CALL R5 1
0x50140200, // 004A LDBOOL R5 1 0
0x80040A00, // 004B RET 1 R5
0x80000000, // 004C RET 0
})
)
);

View File

@ -7,12 +7,12 @@
extern const bclass be_class_Matter_MessageHandler;
/********************************************************************
** Solidified function: send_response
** Solidified function: send_response_frame
********************************************************************/
be_local_closure(Matter_MessageHandler_send_response, /* name */
be_local_closure(Matter_MessageHandler_send_response_frame, /* name */
be_nested_proto(
13, /* nstack */
6, /* argc */
5, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@ -23,18 +23,14 @@ be_local_closure(Matter_MessageHandler_send_response, /* name */
/* K0 */ be_nested_str_weak(device),
/* K1 */ be_nested_str_weak(msg_send),
}),
be_str_weak(send_response),
be_str_weak(send_response_frame),
&be_const_str_solidified,
( &(const binstruction[ 9]) { /* code */
0x88180100, // 0000 GETMBR R6 R0 K0
0x8C180D01, // 0001 GETMET R6 R6 K1
0x5C200200, // 0002 MOVE R8 R1
0x5C240400, // 0003 MOVE R9 R2
0x5C280600, // 0004 MOVE R10 R3
0x5C2C0800, // 0005 MOVE R11 R4
0x5C300A00, // 0006 MOVE R12 R5
0x7C180C00, // 0007 CALL R6 6
0x80000000, // 0008 RET 0
( &(const binstruction[ 5]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
0x8C080501, // 0001 GETMET R2 R2 K1
0x5C100200, // 0002 MOVE R4 R1
0x7C080400, // 0003 CALL R2 2
0x80000000, // 0004 RET 0
})
)
);
@ -54,7 +50,7 @@ be_local_closure(Matter_MessageHandler_send_encrypted_ack, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[20]) { /* constants */
( &(const bvalue[17]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(x_flag_r),
/* K2 */ be_nested_str_weak(build_standalone_ack),
@ -71,17 +67,14 @@ be_local_closure(Matter_MessageHandler_send_encrypted_ack, /* name */
/* K13 */ be_nested_str_weak(_X7Breliable_X7D),
/* K14 */ be_nested_str_weak(),
/* K15 */ be_const_int(3),
/* K16 */ be_nested_str_weak(send_response),
/* K17 */ be_nested_str_weak(raw),
/* K18 */ be_nested_str_weak(remote_ip),
/* K19 */ be_nested_str_weak(remote_port),
/* K16 */ be_nested_str_weak(send_response_frame),
}),
be_str_weak(send_encrypted_ack),
&be_const_str_solidified,
( &(const binstruction[37]) { /* code */
( &(const binstruction[29]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0x88100301, // 0001 GETMBR R4 R1 K1
0x78120020, // 0002 JMPF R4 #0024
0x78120018, // 0002 JMPF R4 #001C
0x8C100302, // 0003 GETMET R4 R1 K2
0x5C180400, // 0004 MOVE R6 R2
0x7C100400, // 0005 CALL R4 2
@ -105,17 +98,9 @@ be_local_closure(Matter_MessageHandler_send_encrypted_ack, /* name */
0x5820000F, // 0017 LDCONST R8 K15
0x7C140600, // 0018 CALL R5 3
0x8C140110, // 0019 GETMET R5 R0 K16
0x881C0911, // 001A GETMBR R7 R4 K17
0x88200912, // 001B GETMBR R8 R4 K18
0x88240913, // 001C GETMBR R9 R4 K19
0x780A0001, // 001D JMPF R2 #0020
0x8828090C, // 001E GETMBR R10 R4 K12
0x70020000, // 001F JMP #0021
0x4C280000, // 0020 LDNIL R10
0x882C0909, // 0021 GETMBR R11 R4 K9
0x882C170A, // 0022 GETMBR R11 R11 K10
0x7C140C00, // 0023 CALL R5 6
0x80000000, // 0024 RET 0
0x5C1C0800, // 001A MOVE R7 R4
0x7C140400, // 001B CALL R5 2
0x80000000, // 001C RET 0
})
)
);
@ -169,7 +154,7 @@ be_local_closure(Matter_MessageHandler_send_simple_ack, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[19]) { /* constants */
( &(const bvalue[16]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(x_flag_r),
/* K2 */ be_nested_str_weak(build_standalone_ack),
@ -185,17 +170,14 @@ be_local_closure(Matter_MessageHandler_send_simple_ack, /* name */
/* K12 */ be_nested_str_weak(_X7Breliable_X7D),
/* K13 */ be_nested_str_weak(),
/* K14 */ be_const_int(3),
/* K15 */ be_nested_str_weak(send_response),
/* K16 */ be_nested_str_weak(raw),
/* K17 */ be_nested_str_weak(remote_ip),
/* K18 */ be_nested_str_weak(remote_port),
/* K15 */ be_nested_str_weak(send_response_frame),
}),
be_str_weak(send_simple_ack),
&be_const_str_solidified,
( &(const binstruction[35]) { /* code */
( &(const binstruction[27]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0x88100301, // 0001 GETMBR R4 R1 K1
0x7812001E, // 0002 JMPF R4 #0022
0x78120016, // 0002 JMPF R4 #001A
0x8C100302, // 0003 GETMET R4 R1 K2
0x5C180400, // 0004 MOVE R6 R2
0x7C100400, // 0005 CALL R4 2
@ -217,17 +199,9 @@ be_local_closure(Matter_MessageHandler_send_simple_ack, /* name */
0x5820000E, // 0015 LDCONST R8 K14
0x7C140600, // 0016 CALL R5 3
0x8C14010F, // 0017 GETMET R5 R0 K15
0x881C0910, // 0018 GETMBR R7 R4 K16
0x88200911, // 0019 GETMBR R8 R4 K17
0x88240912, // 001A GETMBR R9 R4 K18
0x780A0001, // 001B JMPF R2 #001E
0x8828090B, // 001C GETMBR R10 R4 K11
0x70020000, // 001D JMP #001F
0x4C280000, // 001E LDNIL R10
0x882C0908, // 001F GETMBR R11 R4 K8
0x882C1709, // 0020 GETMBR R11 R11 K9
0x7C140C00, // 0021 CALL R5 6
0x80000000, // 0022 RET 0
0x5C1C0800, // 0018 MOVE R7 R4
0x7C140400, // 0019 CALL R5 2
0x80000000, // 001A RET 0
})
)
);
@ -285,16 +259,16 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
/* K34 */ be_nested_str_weak(send_simple_ack),
/* K35 */ be_nested_str_weak(decode_payload),
/* K36 */ be_nested_str_weak(received_ack),
/* K37 */ be_nested_str_weak(ack_message_counter),
/* K38 */ be_nested_str_weak(opcode),
/* K39 */ be_nested_str_weak(get_opcode_name),
/* K40 */ be_nested_str_weak(0x_X2502X),
/* K41 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X28_X256i_X29_X20_X25s_X20rid_X3D_X25i_X20exch_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
/* K42 */ be_nested_str_weak(exchange_id),
/* K43 */ be_nested_str_weak(MTR_X3A_X20_X3Ercv_X20Ack_X20_X20_X20_X28_X256i_X29_X20rid_X3D_X25i_X20exch_X3D_X25i_X20ack_X3D_X25s_X20_X25sfrom_X20_X5B_X25s_X5D_X3A_X25i),
/* K44 */ be_nested_str_weak(x_flag_r),
/* K45 */ be_nested_str_weak(_X7Breliable_X7D_X20),
/* K46 */ be_nested_str_weak(),
/* K37 */ be_nested_str_weak(opcode),
/* K38 */ be_nested_str_weak(get_opcode_name),
/* K39 */ be_nested_str_weak(0x_X2502X),
/* K40 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X28_X256i_X29_X20_X25s_X20rid_X3D_X25i_X20exch_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
/* K41 */ be_nested_str_weak(exchange_id),
/* K42 */ be_nested_str_weak(MTR_X3A_X20_X3Ercv_X20Ack_X20_X20_X20_X28_X256i_X29_X20rid_X3D_X25i_X20exch_X3D_X25i_X20ack_X3D_X25s_X20_X25sfrom_X20_X5B_X25s_X5D_X3A_X25i),
/* K43 */ be_nested_str_weak(x_flag_r),
/* K44 */ be_nested_str_weak(_X7Breliable_X7D_X20),
/* K45 */ be_nested_str_weak(),
/* K46 */ be_nested_str_weak(ack_message_counter),
/* K47 */ be_nested_str_weak(commissioning),
/* K48 */ be_nested_str_weak(process_incoming),
/* K49 */ be_nested_str_weak(MTR_X3A_X20decode_X20header_X3A_X20local_session_id_X3D_X25i_X20message_counter_X3D_X25i),
@ -451,31 +425,31 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x80041200, // 0078 RET 1 R9
0x8824010B, // 0079 GETMBR R9 R0 K11
0x8C241324, // 007A GETMET R9 R9 K36
0x882C0D25, // 007B GETMBR R11 R6 K37
0x5C2C0C00, // 007B MOVE R11 R6
0x7C240400, // 007C CALL R9 2
0x88240D26, // 007D GETMBR R9 R6 K38
0x88240D25, // 007D GETMBR R9 R6 K37
0x542A000F, // 007E LDINT R10 16
0x2024120A, // 007F NE R9 R9 R10
0x78260018, // 0080 JMPF R9 #009A
0xB8260A00, // 0081 GETNGBL R9 K5
0x8C241327, // 0082 GETMET R9 R9 K39
0x882C0D26, // 0083 GETMBR R11 R6 K38
0x8C241326, // 0082 GETMET R9 R9 K38
0x882C0D25, // 0083 GETMBR R11 R6 K37
0x7C240400, // 0084 CALL R9 2
0x5C281200, // 0085 MOVE R10 R9
0x742A0004, // 0086 JMPT R10 #008C
0x8C28091F, // 0087 GETMET R10 R4 K31
0x58300028, // 0088 LDCONST R12 K40
0x88340D26, // 0089 GETMBR R13 R6 K38
0x58300027, // 0088 LDCONST R12 K39
0x88340D25, // 0089 GETMBR R13 R6 K37
0x7C280600, // 008A CALL R10 3
0x5C241400, // 008B MOVE R9 R10
0xB82A0200, // 008C GETNGBL R10 K1
0x8C281502, // 008D GETMET R10 R10 K2
0x8C30091F, // 008E GETMET R12 R4 K31
0x58380029, // 008F LDCONST R14 K41
0x58380028, // 008F LDCONST R14 K40
0x883C1111, // 0090 GETMBR R15 R8 K17
0x5C401200, // 0091 MOVE R16 R9
0x88440D1E, // 0092 GETMBR R17 R6 K30
0x88480D2A, // 0093 GETMBR R18 R6 K42
0x88480D29, // 0093 GETMBR R18 R6 K41
0x5C4C0400, // 0094 MOVE R19 R2
0x5C500600, // 0095 MOVE R20 R3
0x7C301000, // 0096 CALL R12 8
@ -485,17 +459,17 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0xB8260200, // 009A GETNGBL R9 K1
0x8C241302, // 009B GETMET R9 R9 K2
0x8C2C091F, // 009C GETMET R11 R4 K31
0x5834002B, // 009D LDCONST R13 K43
0x5834002A, // 009D LDCONST R13 K42
0x88381111, // 009E GETMBR R14 R8 K17
0x883C0D1E, // 009F GETMBR R15 R6 K30
0x88400D2C, // 00A0 GETMBR R16 R6 K44
0x88400D2B, // 00A0 GETMBR R16 R6 K43
0x78420001, // 00A1 JMPF R16 #00A4
0x5840002D, // 00A2 LDCONST R16 K45
0x5840002C, // 00A2 LDCONST R16 K44
0x70020000, // 00A3 JMP #00A5
0x5840002E, // 00A4 LDCONST R16 K46
0x88440D2A, // 00A5 GETMBR R17 R6 K42
0x5840002D, // 00A4 LDCONST R16 K45
0x88440D29, // 00A5 GETMBR R17 R6 K41
0x60480008, // 00A6 GETGBL R18 G8
0x884C0D25, // 00A7 GETMBR R19 R6 K37
0x884C0D2E, // 00A7 GETMBR R19 R6 K46
0x7C480200, // 00A8 CALL R18 1
0x5C4C0400, // 00A9 MOVE R19 R2
0x5C500600, // 00AA MOVE R20 R3
@ -612,12 +586,12 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x00327C0C, // 0119 ADD R12 K62 R12
0x00301940, // 011A ADD R12 R12 K64
0x60340008, // 011B GETGBL R13 G8
0x88380D26, // 011C GETMBR R14 R6 K38
0x88380D25, // 011C GETMBR R14 R6 K37
0x7C340200, // 011D CALL R13 1
0x0030180D, // 011E ADD R12 R12 R13
0x00301941, // 011F ADD R12 R12 K65
0x60340008, // 0120 GETGBL R13 G8
0x88380D2A, // 0121 GETMBR R14 R6 K42
0x88380D29, // 0121 GETMBR R14 R6 K41
0x543EFFFE, // 0122 LDINT R15 65535
0x2C381C0F, // 0123 AND R14 R14 R15
0x7C340200, // 0124 CALL R13 1
@ -630,17 +604,17 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x58380042, // 012B LDCONST R14 K66
0x883C1111, // 012C GETMBR R15 R8 K17
0x88400D3F, // 012D GETMBR R16 R6 K63
0x88440D26, // 012E GETMBR R17 R6 K38
0x88440D25, // 012E GETMBR R17 R6 K37
0x88480D1E, // 012F GETMBR R18 R6 K30
0x884C0D2A, // 0130 GETMBR R19 R6 K42
0x884C0D29, // 0130 GETMBR R19 R6 K41
0x60500008, // 0131 GETGBL R20 G8
0x88540D25, // 0132 GETMBR R21 R6 K37
0x88540D2E, // 0132 GETMBR R21 R6 K46
0x7C500200, // 0133 CALL R20 1
0x88540D2C, // 0134 GETMBR R21 R6 K44
0x88540D2B, // 0134 GETMBR R21 R6 K43
0x78560001, // 0135 JMPF R21 #0138
0x5854002D, // 0136 LDCONST R21 K45
0x5854002C, // 0136 LDCONST R21 K44
0x70020000, // 0137 JMP #0139
0x5854002E, // 0138 LDCONST R21 K46
0x5854002D, // 0138 LDCONST R21 K45
0x5C580400, // 0139 MOVE R22 R2
0x5C5C0600, // 013A MOVE R23 R3
0x7C301600, // 013B CALL R12 11
@ -648,7 +622,7 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x7C280600, // 013D CALL R10 3
0x8828010B, // 013E GETMBR R10 R0 K11
0x8C281524, // 013F GETMET R10 R10 K36
0x88300D25, // 0140 GETMBR R12 R6 K37
0x5C300C00, // 0140 MOVE R12 R6
0x7C280400, // 0141 CALL R10 2
0x88280D3F, // 0142 GETMBR R10 R6 K63
0x1C2C1515, // 0143 EQ R11 R10 K21
@ -662,7 +636,7 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x0036860D, // 014B ADD R13 K67 R13
0x58380017, // 014C LDCONST R14 K23
0x7C2C0600, // 014D CALL R11 3
0x882C0D26, // 014E GETMBR R11 R6 K38
0x882C0D25, // 014E GETMBR R11 R6 K37
0x5432000F, // 014F LDINT R12 16
0x1C2C160C, // 0150 EQ R11 R11 R12
0x782E0009, // 0151 JMPF R11 #015C
@ -824,17 +798,17 @@ be_local_class(Matter_MessageHandler,
NULL,
be_nested_map(11,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(im, -1), be_const_var(2) },
{ be_const_key_weak(im, 3), be_const_var(2) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_MessageHandler_init_closure) },
{ be_const_key_weak(send_encrypted_ack, -1), be_const_closure(Matter_MessageHandler_send_encrypted_ack_closure) },
{ be_const_key_weak(control_message, -1), be_const_var(3) },
{ be_const_key_weak(every_250ms, 3), be_const_closure(Matter_MessageHandler_every_250ms_closure) },
{ be_const_key_weak(every_second, -1), be_const_closure(Matter_MessageHandler_every_second_closure) },
{ be_const_key_weak(every_250ms, -1), be_const_closure(Matter_MessageHandler_every_250ms_closure) },
{ be_const_key_weak(device, -1), be_const_var(0) },
{ be_const_key_weak(msg_received, -1), be_const_closure(Matter_MessageHandler_msg_received_closure) },
{ be_const_key_weak(send_response, 4), be_const_closure(Matter_MessageHandler_send_response_closure) },
{ be_const_key_weak(control_message, 4), be_const_var(3) },
{ be_const_key_weak(commissioning, -1), be_const_var(1) },
{ be_const_key_weak(send_simple_ack, 1), be_const_closure(Matter_MessageHandler_send_simple_ack_closure) },
{ be_const_key_weak(every_second, 0), be_const_closure(Matter_MessageHandler_every_second_closure) },
{ be_const_key_weak(send_response_frame, 0), be_const_closure(Matter_MessageHandler_send_response_frame_closure) },
})),
be_str_weak(Matter_MessageHandler)
);

View File

@ -11,67 +11,7 @@ extern const bclass be_class_Matter_UDPPacket_sent;
********************************************************************/
be_local_closure(Matter_UDPPacket_sent_init, /* name */
be_nested_proto(
10, /* nstack */
6, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[13]) { /* constants */
/* K0 */ be_nested_str_weak(raw),
/* K1 */ be_nested_str_weak(addr),
/* K2 */ be_nested_str_weak(port),
/* K3 */ be_nested_str_weak(msg_id),
/* K4 */ be_nested_str_weak(retries),
/* K5 */ be_const_int(0),
/* K6 */ be_nested_str_weak(session_id),
/* K7 */ be_nested_str_weak(next_try),
/* K8 */ be_nested_str_weak(tasmota),
/* K9 */ be_nested_str_weak(millis),
/* K10 */ be_nested_str_weak(matter),
/* K11 */ be_nested_str_weak(UDPServer),
/* K12 */ be_nested_str_weak(_backoff_time),
}),
be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[23]) { /* code */
0x90020001, // 0000 SETMBR R0 K0 R1
0x90020202, // 0001 SETMBR R0 K1 R2
0x90020403, // 0002 SETMBR R0 K2 R3
0x90020604, // 0003 SETMBR R0 K3 R4
0x90020905, // 0004 SETMBR R0 K4 K5
0x4C180000, // 0005 LDNIL R6
0x20180A06, // 0006 NE R6 R5 R6
0x781A0001, // 0007 JMPF R6 #000A
0x5C180A00, // 0008 MOVE R6 R5
0x70020000, // 0009 JMP #000B
0x58180005, // 000A LDCONST R6 K5
0x90020C06, // 000B SETMBR R0 K6 R6
0xB81A1000, // 000C GETNGBL R6 K8
0x8C180D09, // 000D GETMET R6 R6 K9
0x7C180200, // 000E CALL R6 1
0xB81E1400, // 000F GETNGBL R7 K10
0x881C0F0B, // 0010 GETMBR R7 R7 K11
0x8C1C0F0C, // 0011 GETMET R7 R7 K12
0x88240104, // 0012 GETMBR R9 R0 K4
0x7C1C0400, // 0013 CALL R7 2
0x00180C07, // 0014 ADD R6 R6 R7
0x90020E06, // 0015 SETMBR R0 K7 R6
0x80000000, // 0016 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: send
********************************************************************/
be_local_closure(Matter_UDPPacket_sent_send, /* name */
be_nested_proto(
11, /* nstack */
6, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@ -79,59 +19,70 @@ be_local_closure(Matter_UDPPacket_sent_send, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[13]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(send),
/* K2 */ be_nested_str_weak(addr),
/* K3 */ be_nested_str_weak(remote_ip),
/* K4 */ be_nested_str_weak(port),
/* K5 */ be_nested_str_weak(remote_port),
/* K6 */ be_nested_str_weak(raw),
/* K7 */ be_nested_str_weak(tasmota),
/* K8 */ be_nested_str_weak(log),
/* K9 */ be_nested_str_weak(format),
/* K10 */ be_nested_str_weak(MTR_X3A_X20sending_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
/* K11 */ be_nested_str_weak(MTR_X3A_X20error_X20sending_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
/* K12 */ be_const_int(3),
( &(const bvalue[19]) { /* constants */
/* K0 */ be_nested_str_weak(raw),
/* K1 */ be_nested_str_weak(addr),
/* K2 */ be_nested_str_weak(remote_ip),
/* K3 */ be_nested_str_weak(port),
/* K4 */ be_nested_str_weak(remote_port),
/* K5 */ be_nested_str_weak(msg_id),
/* K6 */ be_nested_str_weak(x_flag_r),
/* K7 */ be_nested_str_weak(message_counter),
/* K8 */ be_nested_str_weak(exchange_id),
/* K9 */ be_const_int(0),
/* K10 */ be_nested_str_weak(session_id),
/* K11 */ be_nested_str_weak(local_session_id),
/* K12 */ be_nested_str_weak(retries),
/* K13 */ be_nested_str_weak(next_try),
/* K14 */ be_nested_str_weak(tasmota),
/* K15 */ be_nested_str_weak(millis),
/* K16 */ be_nested_str_weak(matter),
/* K17 */ be_nested_str_weak(UDPServer),
/* K18 */ be_nested_str_weak(_backoff_time),
}),
be_str_weak(send),
be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[35]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x8C0C0301, // 0001 GETMET R3 R1 K1
0x88140102, // 0002 GETMBR R5 R0 K2
0x78160001, // 0003 JMPF R5 #0006
0x88140102, // 0004 GETMBR R5 R0 K2
0x70020000, // 0005 JMP #0007
0x88140303, // 0006 GETMBR R5 R1 K3
0x88180104, // 0007 GETMBR R6 R0 K4
0x781A0001, // 0008 JMPF R6 #000B
0x88180104, // 0009 GETMBR R6 R0 K4
0x70020000, // 000A JMP #000C
0x88180305, // 000B GETMBR R6 R1 K5
0x881C0106, // 000C GETMBR R7 R0 K6
0x7C0C0800, // 000D CALL R3 4
0x780E0009, // 000E JMPF R3 #0019
0xB8120E00, // 000F GETNGBL R4 K7
0x8C100908, // 0010 GETMET R4 R4 K8
0x8C180509, // 0011 GETMET R6 R2 K9
0x5820000A, // 0012 LDCONST R8 K10
0x88240102, // 0013 GETMBR R9 R0 K2
0x88280104, // 0014 GETMBR R10 R0 K4
0x7C180800, // 0015 CALL R6 4
0x541E0003, // 0016 LDINT R7 4
0x7C100600, // 0017 CALL R4 3
0x70020008, // 0018 JMP #0022
0xB8120E00, // 0019 GETNGBL R4 K7
0x8C100908, // 001A GETMET R4 R4 K8
0x8C180509, // 001B GETMET R6 R2 K9
0x5820000B, // 001C LDCONST R8 K11
0x88240102, // 001D GETMBR R9 R0 K2
0x88280104, // 001E GETMBR R10 R0 K4
0x7C180800, // 001F CALL R6 4
0x581C000C, // 0020 LDCONST R7 K12
0x7C100600, // 0021 CALL R4 3
0x80040600, // 0022 RET 1 R3
( &(const binstruction[40]) { /* code */
0x88080300, // 0000 GETMBR R2 R1 K0
0x90020002, // 0001 SETMBR R0 K0 R2
0x88080302, // 0002 GETMBR R2 R1 K2
0x90020202, // 0003 SETMBR R0 K1 R2
0x88080304, // 0004 GETMBR R2 R1 K4
0x90020602, // 0005 SETMBR R0 K3 R2
0x88080306, // 0006 GETMBR R2 R1 K6
0x780A0001, // 0007 JMPF R2 #000A
0x88080307, // 0008 GETMBR R2 R1 K7
0x70020000, // 0009 JMP #000B
0x4C080000, // 000A LDNIL R2
0x90020A02, // 000B SETMBR R0 K5 R2
0x88080308, // 000C GETMBR R2 R1 K8
0x4C0C0000, // 000D LDNIL R3
0x20080403, // 000E NE R2 R2 R3
0x780A0001, // 000F JMPF R2 #0012
0x88080308, // 0010 GETMBR R2 R1 K8
0x70020000, // 0011 JMP #0013
0x58080009, // 0012 LDCONST R2 K9
0x90021002, // 0013 SETMBR R0 K8 R2
0x8808030B, // 0014 GETMBR R2 R1 K11
0x4C0C0000, // 0015 LDNIL R3
0x20080403, // 0016 NE R2 R2 R3
0x780A0001, // 0017 JMPF R2 #001A
0x8808030B, // 0018 GETMBR R2 R1 K11
0x70020000, // 0019 JMP #001B
0x58080009, // 001A LDCONST R2 K9
0x90021402, // 001B SETMBR R0 K10 R2
0x90021909, // 001C SETMBR R0 K12 K9
0xB80A1C00, // 001D GETNGBL R2 K14
0x8C08050F, // 001E GETMET R2 R2 K15
0x7C080200, // 001F CALL R2 1
0xB80E2000, // 0020 GETNGBL R3 K16
0x880C0711, // 0021 GETMBR R3 R3 K17
0x8C0C0712, // 0022 GETMET R3 R3 K18
0x8814010C, // 0023 GETMBR R5 R0 K12
0x7C0C0400, // 0024 CALL R3 2
0x00080403, // 0025 ADD R2 R2 R3
0x90021A02, // 0026 SETMBR R0 K13 R2
0x80000000, // 0027 RET 0
})
)
);
@ -142,19 +93,19 @@ be_local_closure(Matter_UDPPacket_sent_send, /* name */
** Solidified class: Matter_UDPPacket_sent
********************************************************************/
be_local_class(Matter_UDPPacket_sent,
7,
8,
NULL,
be_nested_map(9,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(next_try, 3), be_const_var(6) },
{ be_const_key_weak(msg_id, 8), be_const_var(3) },
{ be_const_key_weak(retries, 7), be_const_var(5) },
{ be_const_key_weak(send, -1), be_const_closure(Matter_UDPPacket_sent_send_closure) },
{ be_const_key_weak(next_try, -1), be_const_var(7) },
{ be_const_key_weak(session_id, 8), be_const_var(5) },
{ be_const_key_weak(retries, 3), be_const_var(6) },
{ be_const_key_weak(addr, -1), be_const_var(1) },
{ be_const_key_weak(port, 0), be_const_var(2) },
{ be_const_key_weak(raw, -1), be_const_var(0) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_UDPPacket_sent_init_closure) },
{ be_const_key_weak(addr, -1), be_const_var(1) },
{ be_const_key_weak(session_id, -1), be_const_var(4) },
{ be_const_key_weak(exchange_id, -1), be_const_var(4) },
{ be_const_key_weak(msg_id, -1), be_const_var(3) },
})),
be_str_weak(Matter_UDPPacket_sent)
);
@ -256,12 +207,144 @@ be_local_closure(Matter_UDPServer__backoff_time, /* name */
/********************************************************************
** Solidified function: send_response
** Solidified function: _resend_packets
********************************************************************/
be_local_closure(Matter_UDPServer_send_response, /* name */
be_local_closure(Matter_UDPServer__resend_packets, /* name */
be_nested_proto(
13, /* nstack */
6, /* argc */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[23]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(packets_sent),
/* K2 */ be_nested_str_weak(tasmota),
/* K3 */ be_nested_str_weak(time_reached),
/* K4 */ be_nested_str_weak(next_try),
/* K5 */ be_nested_str_weak(retries),
/* K6 */ be_nested_str_weak(RETRIES),
/* K7 */ be_nested_str_weak(log),
/* K8 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Resending_X20packet_X20id_X3D),
/* K9 */ be_nested_str_weak(msg_id),
/* K10 */ be_const_int(3),
/* K11 */ be_nested_str_weak(send),
/* K12 */ be_nested_str_weak(millis),
/* K13 */ be_nested_str_weak(_backoff_time),
/* K14 */ be_const_int(1),
/* K15 */ be_nested_str_weak(string),
/* K16 */ be_nested_str_weak(remove),
/* K17 */ be_nested_str_weak(format),
/* K18 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20Unacked_X20packet_X20_X27_X5B_X25s_X5D_X3A_X25i_X27_X20msg_id_X3D_X25i),
/* K19 */ be_nested_str_weak(session_id),
/* K20 */ be_nested_str_weak(addr),
/* K21 */ be_nested_str_weak(port),
/* K22 */ be_const_int(2),
}),
be_str_weak(_resend_packets),
&be_const_str_solidified,
( &(const binstruction[61]) { /* code */
0x58040000, // 0000 LDCONST R1 K0
0x6008000C, // 0001 GETGBL R2 G12
0x880C0101, // 0002 GETMBR R3 R0 K1
0x7C080200, // 0003 CALL R2 1
0x14080202, // 0004 LT R2 R1 R2
0x780A0035, // 0005 JMPF R2 #003C
0x88080101, // 0006 GETMBR R2 R0 K1
0x94080401, // 0007 GETIDX R2 R2 R1
0xB80E0400, // 0008 GETNGBL R3 K2
0x8C0C0703, // 0009 GETMET R3 R3 K3
0x88140504, // 000A GETMBR R5 R2 K4
0x7C0C0400, // 000B CALL R3 2
0x780E002C, // 000C JMPF R3 #003A
0x880C0505, // 000D GETMBR R3 R2 K5
0x88100106, // 000E GETMBR R4 R0 K6
0x180C0604, // 000F LE R3 R3 R4
0x780E0017, // 0010 JMPF R3 #0029
0xB80E0400, // 0011 GETNGBL R3 K2
0x8C0C0707, // 0012 GETMET R3 R3 K7
0x60140008, // 0013 GETGBL R5 G8
0x88180509, // 0014 GETMBR R6 R2 K9
0x7C140200, // 0015 CALL R5 1
0x00161005, // 0016 ADD R5 K8 R5
0x5818000A, // 0017 LDCONST R6 K10
0x7C0C0600, // 0018 CALL R3 3
0x8C0C010B, // 0019 GETMET R3 R0 K11
0x5C140400, // 001A MOVE R5 R2
0x7C0C0400, // 001B CALL R3 2
0xB80E0400, // 001C GETNGBL R3 K2
0x8C0C070C, // 001D GETMET R3 R3 K12
0x7C0C0200, // 001E CALL R3 1
0x8C10010D, // 001F GETMET R4 R0 K13
0x88180505, // 0020 GETMBR R6 R2 K5
0x7C100400, // 0021 CALL R4 2
0x000C0604, // 0022 ADD R3 R3 R4
0x900A0803, // 0023 SETMBR R2 K4 R3
0x880C0505, // 0024 GETMBR R3 R2 K5
0x000C070E, // 0025 ADD R3 R3 K14
0x900A0A03, // 0026 SETMBR R2 K5 R3
0x0004030E, // 0027 ADD R1 R1 K14
0x7002000F, // 0028 JMP #0039
0xA40E1E00, // 0029 IMPORT R3 K15
0x88100101, // 002A GETMBR R4 R0 K1
0x8C100910, // 002B GETMET R4 R4 K16
0x5C180200, // 002C MOVE R6 R1
0x7C100400, // 002D CALL R4 2
0xB8120400, // 002E GETNGBL R4 K2
0x8C100907, // 002F GETMET R4 R4 K7
0x8C180711, // 0030 GETMET R6 R3 K17
0x58200012, // 0031 LDCONST R8 K18
0x88240513, // 0032 GETMBR R9 R2 K19
0x88280514, // 0033 GETMBR R10 R2 K20
0x882C0515, // 0034 GETMBR R11 R2 K21
0x88300509, // 0035 GETMBR R12 R2 K9
0x7C180C00, // 0036 CALL R6 6
0x581C0016, // 0037 LDCONST R7 K22
0x7C100600, // 0038 CALL R4 3
0x70020000, // 0039 JMP #003B
0x0004030E, // 003A ADD R1 R1 K14
0x7001FFC4, // 003B JMP #0001
0x80000000, // 003C RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: every_second
********************************************************************/
be_local_closure(Matter_UDPServer_every_second, /* name */
be_nested_proto(
1, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
0, /* has constants */
NULL, /* no const */
be_str_weak(every_second),
&be_const_str_solidified,
( &(const binstruction[ 1]) { /* code */
0x80000000, // 0000 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: send_UDP
********************************************************************/
be_local_closure(Matter_UDPServer_send_UDP, /* name */
be_nested_proto(
6, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@ -272,30 +355,27 @@ be_local_closure(Matter_UDPServer_send_response, /* name */
/* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(UDPPacket_sent),
/* K2 */ be_nested_str_weak(send),
/* K3 */ be_nested_str_weak(udp_socket),
/* K3 */ be_nested_str_weak(msg_id),
/* K4 */ be_nested_str_weak(packets_sent),
/* K5 */ be_nested_str_weak(push),
}),
be_str_weak(send_response),
be_str_weak(send_UDP),
&be_const_str_solidified,
( &(const binstruction[17]) { /* code */
0xB81A0000, // 0000 GETNGBL R6 K0
0x8C180D01, // 0001 GETMET R6 R6 K1
0x5C200200, // 0002 MOVE R8 R1
0x5C240400, // 0003 MOVE R9 R2
0x5C280600, // 0004 MOVE R10 R3
0x5C2C0800, // 0005 MOVE R11 R4
0x5C300A00, // 0006 MOVE R12 R5
0x7C180C00, // 0007 CALL R6 6
0x8C1C0D02, // 0008 GETMET R7 R6 K2
0x88240103, // 0009 GETMBR R9 R0 K3
0x7C1C0400, // 000A CALL R7 2
0x78120003, // 000B JMPF R4 #0010
0x881C0104, // 000C GETMBR R7 R0 K4
0x8C1C0F05, // 000D GETMET R7 R7 K5
0x5C240C00, // 000E MOVE R9 R6
0x7C1C0400, // 000F CALL R7 2
0x80000000, // 0010 RET 0
( &(const binstruction[14]) { /* code */
0xB80A0000, // 0000 GETNGBL R2 K0
0x8C080501, // 0001 GETMET R2 R2 K1
0x5C100200, // 0002 MOVE R4 R1
0x7C080400, // 0003 CALL R2 2
0x8C0C0102, // 0004 GETMET R3 R0 K2
0x5C140400, // 0005 MOVE R5 R2
0x7C0C0400, // 0006 CALL R3 2
0x880C0503, // 0007 GETMBR R3 R2 K3
0x780E0003, // 0008 JMPF R3 #000D
0x880C0104, // 0009 GETMBR R3 R0 K4
0x8C0C0705, // 000A GETMET R3 R3 K5
0x5C140400, // 000B MOVE R5 R2
0x7C0C0400, // 000C CALL R3 2
0x80000000, // 000D RET 0
})
)
);
@ -388,30 +468,6 @@ be_local_closure(Matter_UDPServer_every_50ms, /* name */
/*******************************************************************/
/********************************************************************
** Solidified function: every_second
********************************************************************/
be_local_closure(Matter_UDPServer_every_second, /* name */
be_nested_proto(
1, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
0, /* has constants */
NULL, /* no const */
be_str_weak(every_second),
&be_const_str_solidified,
( &(const binstruction[ 1]) { /* code */
0x80000000, // 0000 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: stop
********************************************************************/
@ -453,160 +509,6 @@ be_local_closure(Matter_UDPServer_stop, /* name */
/*******************************************************************/
/********************************************************************
** Solidified function: init
********************************************************************/
be_local_closure(Matter_UDPServer_init, /* name */
be_nested_proto(
4, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_str_weak(addr),
/* K1 */ be_nested_str_weak(),
/* K2 */ be_nested_str_weak(port),
/* K3 */ be_nested_str_weak(listening),
/* K4 */ be_nested_str_weak(packets_sent),
}),
be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[16]) { /* code */
0x78060001, // 0000 JMPF R1 #0003
0x5C0C0200, // 0001 MOVE R3 R1
0x70020000, // 0002 JMP #0004
0x580C0001, // 0003 LDCONST R3 K1
0x90020003, // 0004 SETMBR R0 K0 R3
0x780A0001, // 0005 JMPF R2 #0008
0x5C0C0400, // 0006 MOVE R3 R2
0x70020000, // 0007 JMP #0009
0x540E15A3, // 0008 LDINT R3 5540
0x90020403, // 0009 SETMBR R0 K2 R3
0x500C0000, // 000A LDBOOL R3 0 0
0x90020603, // 000B SETMBR R0 K3 R3
0x600C0012, // 000C GETGBL R3 G18
0x7C0C0000, // 000D CALL R3 0
0x90020803, // 000E SETMBR R0 K4 R3
0x80000000, // 000F RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: _resend_packets
********************************************************************/
be_local_closure(Matter_UDPServer__resend_packets, /* name */
be_nested_proto(
13, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[24]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(packets_sent),
/* K2 */ be_nested_str_weak(tasmota),
/* K3 */ be_nested_str_weak(time_reached),
/* K4 */ be_nested_str_weak(next_try),
/* K5 */ be_nested_str_weak(retries),
/* K6 */ be_nested_str_weak(RETRIES),
/* K7 */ be_nested_str_weak(log),
/* K8 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Resending_X20packet_X20id_X3D),
/* K9 */ be_nested_str_weak(msg_id),
/* K10 */ be_const_int(3),
/* K11 */ be_nested_str_weak(send),
/* K12 */ be_nested_str_weak(udp_socket),
/* K13 */ be_nested_str_weak(millis),
/* K14 */ be_nested_str_weak(_backoff_time),
/* K15 */ be_const_int(1),
/* K16 */ be_nested_str_weak(string),
/* K17 */ be_nested_str_weak(remove),
/* K18 */ be_nested_str_weak(format),
/* K19 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20Unacked_X20packet_X20_X27_X5B_X25s_X5D_X3A_X25i_X27_X20msg_id_X3D_X25i),
/* K20 */ be_nested_str_weak(session_id),
/* K21 */ be_nested_str_weak(addr),
/* K22 */ be_nested_str_weak(port),
/* K23 */ be_const_int(2),
}),
be_str_weak(_resend_packets),
&be_const_str_solidified,
( &(const binstruction[61]) { /* code */
0x58040000, // 0000 LDCONST R1 K0
0x6008000C, // 0001 GETGBL R2 G12
0x880C0101, // 0002 GETMBR R3 R0 K1
0x7C080200, // 0003 CALL R2 1
0x14080202, // 0004 LT R2 R1 R2
0x780A0035, // 0005 JMPF R2 #003C
0x88080101, // 0006 GETMBR R2 R0 K1
0x94080401, // 0007 GETIDX R2 R2 R1
0xB80E0400, // 0008 GETNGBL R3 K2
0x8C0C0703, // 0009 GETMET R3 R3 K3
0x88140504, // 000A GETMBR R5 R2 K4
0x7C0C0400, // 000B CALL R3 2
0x780E002C, // 000C JMPF R3 #003A
0x880C0505, // 000D GETMBR R3 R2 K5
0x88100106, // 000E GETMBR R4 R0 K6
0x180C0604, // 000F LE R3 R3 R4
0x780E0017, // 0010 JMPF R3 #0029
0xB80E0400, // 0011 GETNGBL R3 K2
0x8C0C0707, // 0012 GETMET R3 R3 K7
0x60140008, // 0013 GETGBL R5 G8
0x88180509, // 0014 GETMBR R6 R2 K9
0x7C140200, // 0015 CALL R5 1
0x00161005, // 0016 ADD R5 K8 R5
0x5818000A, // 0017 LDCONST R6 K10
0x7C0C0600, // 0018 CALL R3 3
0x8C0C050B, // 0019 GETMET R3 R2 K11
0x8814010C, // 001A GETMBR R5 R0 K12
0x7C0C0400, // 001B CALL R3 2
0xB80E0400, // 001C GETNGBL R3 K2
0x8C0C070D, // 001D GETMET R3 R3 K13
0x7C0C0200, // 001E CALL R3 1
0x8C10010E, // 001F GETMET R4 R0 K14
0x88180505, // 0020 GETMBR R6 R2 K5
0x7C100400, // 0021 CALL R4 2
0x000C0604, // 0022 ADD R3 R3 R4
0x900A0803, // 0023 SETMBR R2 K4 R3
0x880C0505, // 0024 GETMBR R3 R2 K5
0x000C070F, // 0025 ADD R3 R3 K15
0x900A0A03, // 0026 SETMBR R2 K5 R3
0x0004030F, // 0027 ADD R1 R1 K15
0x7002000F, // 0028 JMP #0039
0xA40E2000, // 0029 IMPORT R3 K16
0x88100101, // 002A GETMBR R4 R0 K1
0x8C100911, // 002B GETMET R4 R4 K17
0x5C180200, // 002C MOVE R6 R1
0x7C100400, // 002D CALL R4 2
0xB8120400, // 002E GETNGBL R4 K2
0x8C100907, // 002F GETMET R4 R4 K7
0x8C180712, // 0030 GETMET R6 R3 K18
0x58200013, // 0031 LDCONST R8 K19
0x88240514, // 0032 GETMBR R9 R2 K20
0x88280515, // 0033 GETMBR R10 R2 K21
0x882C0516, // 0034 GETMBR R11 R2 K22
0x88300509, // 0035 GETMBR R12 R2 K9
0x7C180C00, // 0036 CALL R6 6
0x581C0017, // 0037 LDCONST R7 K23
0x7C100600, // 0038 CALL R4 3
0x70020000, // 0039 JMP #003B
0x0004030F, // 003A ADD R1 R1 K15
0x7001FFC4, // 003B JMP #0001
0x80000000, // 003C RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: start
********************************************************************/
@ -668,7 +570,7 @@ be_local_closure(Matter_UDPServer_start, /* name */
********************************************************************/
be_local_closure(Matter_UDPServer_received_ack, /* name */
be_nested_proto(
7, /* nstack */
10, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@ -676,60 +578,188 @@ be_local_closure(Matter_UDPServer_received_ack, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[10]) { /* constants */
/* K0 */ be_nested_str_weak(tasmota),
/* K1 */ be_nested_str_weak(log),
/* K2 */ be_nested_str_weak(MTR_X3A_X20receveived_X20ACK_X20id_X3D),
/* K3 */ be_const_int(3),
/* K4 */ be_const_int(0),
/* K5 */ be_nested_str_weak(packets_sent),
/* K6 */ be_nested_str_weak(msg_id),
/* K7 */ be_nested_str_weak(remove),
/* K8 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Removed_X20packet_X20from_X20sending_X20list_X20id_X3D),
/* K9 */ be_const_int(1),
( &(const bvalue[12]) { /* constants */
/* K0 */ be_nested_str_weak(ack_message_counter),
/* K1 */ be_nested_str_weak(exchange_id),
/* K2 */ be_nested_str_weak(tasmota),
/* K3 */ be_nested_str_weak(log),
/* K4 */ be_nested_str_weak(MTR_X3A_X20receveived_X20ACK_X20id_X3D),
/* K5 */ be_const_int(3),
/* K6 */ be_const_int(0),
/* K7 */ be_nested_str_weak(packets_sent),
/* K8 */ be_nested_str_weak(msg_id),
/* K9 */ be_nested_str_weak(remove),
/* K10 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Removed_X20packet_X20from_X20sending_X20list_X20id_X3D),
/* K11 */ be_const_int(1),
}),
be_str_weak(received_ack),
&be_const_str_solidified,
( &(const binstruction[39]) { /* code */
0x4C080000, // 0000 LDNIL R2
0x1C080202, // 0001 EQ R2 R1 R2
0x780A0000, // 0002 JMPF R2 #0004
0x80000400, // 0003 RET 0
0xB80A0000, // 0004 GETNGBL R2 K0
0x8C080501, // 0005 GETMET R2 R2 K1
0x60100008, // 0006 GETGBL R4 G8
0x5C140200, // 0007 MOVE R5 R1
0x7C100200, // 0008 CALL R4 1
0x00120404, // 0009 ADD R4 K2 R4
0x58140003, // 000A LDCONST R5 K3
0x7C080600, // 000B CALL R2 3
0x58080004, // 000C LDCONST R2 K4
0x600C000C, // 000D GETGBL R3 G12
0x88100105, // 000E GETMBR R4 R0 K5
0x7C0C0200, // 000F CALL R3 1
0x140C0403, // 0010 LT R3 R2 R3
0x780E0013, // 0011 JMPF R3 #0026
0x880C0105, // 0012 GETMBR R3 R0 K5
0x940C0602, // 0013 GETIDX R3 R3 R2
0x880C0706, // 0014 GETMBR R3 R3 K6
0x1C0C0601, // 0015 EQ R3 R3 R1
0x780E000C, // 0016 JMPF R3 #0024
0x880C0105, // 0017 GETMBR R3 R0 K5
0x8C0C0707, // 0018 GETMET R3 R3 K7
0x5C140400, // 0019 MOVE R5 R2
0x7C0C0400, // 001A CALL R3 2
0xB80E0000, // 001B GETNGBL R3 K0
0x8C0C0701, // 001C GETMET R3 R3 K1
0x60140008, // 001D GETGBL R5 G8
0x5C180200, // 001E MOVE R6 R1
0x7C140200, // 001F CALL R5 1
0x00161005, // 0020 ADD R5 K8 R5
0x58180003, // 0021 LDCONST R6 K3
0x7C0C0600, // 0022 CALL R3 3
0x70020000, // 0023 JMP #0025
0x00080509, // 0024 ADD R2 R2 K9
0x7001FFE6, // 0025 JMP #000D
0x80000000, // 0026 RET 0
( &(const binstruction[44]) { /* code */
0x88080300, // 0000 GETMBR R2 R1 K0
0x880C0301, // 0001 GETMBR R3 R1 K1
0x4C100000, // 0002 LDNIL R4
0x1C100404, // 0003 EQ R4 R2 R4
0x78120000, // 0004 JMPF R4 #0006
0x80000800, // 0005 RET 0
0xB8120400, // 0006 GETNGBL R4 K2
0x8C100903, // 0007 GETMET R4 R4 K3
0x60180008, // 0008 GETGBL R6 G8
0x5C1C0400, // 0009 MOVE R7 R2
0x7C180200, // 000A CALL R6 1
0x001A0806, // 000B ADD R6 K4 R6
0x581C0005, // 000C LDCONST R7 K5
0x7C100600, // 000D CALL R4 3
0x58100006, // 000E LDCONST R4 K6
0x6014000C, // 000F GETGBL R5 G12
0x88180107, // 0010 GETMBR R6 R0 K7
0x7C140200, // 0011 CALL R5 1
0x14140805, // 0012 LT R5 R4 R5
0x78160016, // 0013 JMPF R5 #002B
0x88140107, // 0014 GETMBR R5 R0 K7
0x94140A04, // 0015 GETIDX R5 R5 R4
0x88180B08, // 0016 GETMBR R6 R5 K8
0x1C180C02, // 0017 EQ R6 R6 R2
0x781A000F, // 0018 JMPF R6 #0029
0x88180B01, // 0019 GETMBR R6 R5 K1
0x1C180C03, // 001A EQ R6 R6 R3
0x781A000C, // 001B JMPF R6 #0029
0x88180107, // 001C GETMBR R6 R0 K7
0x8C180D09, // 001D GETMET R6 R6 K9
0x5C200800, // 001E MOVE R8 R4
0x7C180400, // 001F CALL R6 2
0xB81A0400, // 0020 GETNGBL R6 K2
0x8C180D03, // 0021 GETMET R6 R6 K3
0x60200008, // 0022 GETGBL R8 G8
0x5C240400, // 0023 MOVE R9 R2
0x7C200200, // 0024 CALL R8 1
0x00221408, // 0025 ADD R8 K10 R8
0x58240005, // 0026 LDCONST R9 K5
0x7C180600, // 0027 CALL R6 3
0x70020000, // 0028 JMP #002A
0x0010090B, // 0029 ADD R4 R4 K11
0x7001FFE3, // 002A JMP #000F
0x80000000, // 002B RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: init
********************************************************************/
be_local_closure(Matter_UDPServer_init, /* name */
be_nested_proto(
4, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_str_weak(addr),
/* K1 */ be_nested_str_weak(),
/* K2 */ be_nested_str_weak(port),
/* K3 */ be_nested_str_weak(listening),
/* K4 */ be_nested_str_weak(packets_sent),
}),
be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[16]) { /* code */
0x78060001, // 0000 JMPF R1 #0003
0x5C0C0200, // 0001 MOVE R3 R1
0x70020000, // 0002 JMP #0004
0x580C0001, // 0003 LDCONST R3 K1
0x90020003, // 0004 SETMBR R0 K0 R3
0x780A0001, // 0005 JMPF R2 #0008
0x5C0C0400, // 0006 MOVE R3 R2
0x70020000, // 0007 JMP #0009
0x540E15A3, // 0008 LDINT R3 5540
0x90020403, // 0009 SETMBR R0 K2 R3
0x500C0000, // 000A LDBOOL R3 0 0
0x90020603, // 000B SETMBR R0 K3 R3
0x600C0012, // 000C GETGBL R3 G18
0x7C0C0000, // 000D CALL R3 0
0x90020803, // 000E SETMBR R0 K4 R3
0x80000000, // 000F RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: send
********************************************************************/
be_local_closure(Matter_UDPServer_send, /* name */
be_nested_proto(
11, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[14]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(udp_socket),
/* K2 */ be_nested_str_weak(send),
/* K3 */ be_nested_str_weak(addr),
/* K4 */ be_nested_str_weak(remote_ip),
/* K5 */ be_nested_str_weak(port),
/* K6 */ be_nested_str_weak(remote_port),
/* K7 */ be_nested_str_weak(raw),
/* K8 */ be_nested_str_weak(tasmota),
/* K9 */ be_nested_str_weak(log),
/* K10 */ be_nested_str_weak(format),
/* K11 */ be_nested_str_weak(MTR_X3A_X20sending_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
/* K12 */ be_nested_str_weak(MTR_X3A_X20error_X20sending_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
/* K13 */ be_const_int(2),
}),
be_str_weak(send),
&be_const_str_solidified,
( &(const binstruction[38]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x880C0101, // 0001 GETMBR R3 R0 K1
0x8C0C0702, // 0002 GETMET R3 R3 K2
0x88140303, // 0003 GETMBR R5 R1 K3
0x78160001, // 0004 JMPF R5 #0007
0x88140303, // 0005 GETMBR R5 R1 K3
0x70020001, // 0006 JMP #0009
0x88140101, // 0007 GETMBR R5 R0 K1
0x88140B04, // 0008 GETMBR R5 R5 K4
0x88180305, // 0009 GETMBR R6 R1 K5
0x781A0001, // 000A JMPF R6 #000D
0x88180305, // 000B GETMBR R6 R1 K5
0x70020001, // 000C JMP #000F
0x88180101, // 000D GETMBR R6 R0 K1
0x88180D06, // 000E GETMBR R6 R6 K6
0x881C0307, // 000F GETMBR R7 R1 K7
0x7C0C0800, // 0010 CALL R3 4
0x780E0009, // 0011 JMPF R3 #001C
0xB8121000, // 0012 GETNGBL R4 K8
0x8C100909, // 0013 GETMET R4 R4 K9
0x8C18050A, // 0014 GETMET R6 R2 K10
0x5820000B, // 0015 LDCONST R8 K11
0x88240303, // 0016 GETMBR R9 R1 K3
0x88280305, // 0017 GETMBR R10 R1 K5
0x7C180800, // 0018 CALL R6 4
0x541E0003, // 0019 LDINT R7 4
0x7C100600, // 001A CALL R4 3
0x70020008, // 001B JMP #0025
0xB8121000, // 001C GETNGBL R4 K8
0x8C100909, // 001D GETMET R4 R4 K9
0x8C18050A, // 001E GETMET R6 R2 K10
0x5820000C, // 001F LDCONST R8 K12
0x88240303, // 0020 GETMBR R9 R1 K3
0x88280305, // 0021 GETMBR R10 R1 K5
0x7C180800, // 0022 CALL R6 4
0x581C000D, // 0023 LDCONST R7 K13
0x7C100600, // 0024 CALL R4 3
0x80040600, // 0025 RET 1 R3
})
)
);
@ -742,25 +772,26 @@ be_local_closure(Matter_UDPServer_received_ack, /* name */
be_local_class(Matter_UDPServer,
6,
NULL,
be_nested_map(17,
be_nested_map(18,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(RETRIES, -1), be_const_int(6) },
{ be_const_key_weak(_backoff_time, 6), be_const_static_closure(Matter_UDPServer__backoff_time_closure) },
{ be_const_key_weak(listening, -1), be_const_var(2) },
{ be_const_key_weak(send_response, -1), be_const_closure(Matter_UDPServer_send_response_closure) },
{ be_const_key_weak(received_ack, -1), be_const_closure(Matter_UDPServer_received_ack_closure) },
{ be_const_key_weak(every_second, -1), be_const_closure(Matter_UDPServer_every_second_closure) },
{ be_const_key_weak(every_50ms, -1), be_const_closure(Matter_UDPServer_every_50ms_closure) },
{ be_const_key_weak(_backoff_time, 17), be_const_static_closure(Matter_UDPServer__backoff_time_closure) },
{ be_const_key_weak(packets_sent, -1), be_const_var(5) },
{ be_const_key_weak(port, -1), be_const_var(1) },
{ be_const_key_weak(udp_socket, -1), be_const_var(3) },
{ be_const_key_weak(_resend_packets, 11), be_const_closure(Matter_UDPServer__resend_packets_closure) },
{ be_const_key_weak(stop, -1), be_const_closure(Matter_UDPServer_stop_closure) },
{ be_const_key_weak(addr, -1), be_const_var(0) },
{ be_const_key_weak(MAX_PACKETS_READ, 10), be_const_int(4) },
{ be_const_key_weak(every_second, -1), be_const_closure(Matter_UDPServer_every_second_closure) },
{ be_const_key_weak(port, -1), be_const_var(1) },
{ be_const_key_weak(dispatch_cb, 1), be_const_var(4) },
{ be_const_key_weak(udp_socket, -1), be_const_var(3) },
{ be_const_key_weak(send_UDP, -1), be_const_closure(Matter_UDPServer_send_UDP_closure) },
{ be_const_key_weak(every_50ms, -1), be_const_closure(Matter_UDPServer_every_50ms_closure) },
{ be_const_key_weak(send, 10), be_const_closure(Matter_UDPServer_send_closure) },
{ be_const_key_weak(RETRIES, -1), be_const_int(5) },
{ be_const_key_weak(stop, 16), be_const_closure(Matter_UDPServer_stop_closure) },
{ be_const_key_weak(received_ack, -1), be_const_closure(Matter_UDPServer_received_ack_closure) },
{ be_const_key_weak(_resend_packets, 9), be_const_closure(Matter_UDPServer__resend_packets_closure) },
{ be_const_key_weak(MAX_PACKETS_READ, -1), be_const_int(4) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_UDPServer_init_closure) },
{ be_const_key_weak(start, -1), be_const_closure(Matter_UDPServer_start_closure) },
{ be_const_key_weak(init, 4), be_const_closure(Matter_UDPServer_init_closure) },
{ be_const_key_weak(dispatch_cb, 0), be_const_var(4) },
{ be_const_key_weak(listening, -1), be_const_var(2) },
})),
be_str_weak(Matter_UDPServer)
);