From 208c70adf2e05477e3ef729eb4dd5843adcac983 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Thu, 16 Feb 2023 14:19:31 +0100
Subject: [PATCH 001/227] Bump version v12.4.0.1
---
CHANGELOG.md | 22 +++++++++++----
RELEASENOTES.md | 47 ++-----------------------------
tasmota/include/tasmota_version.h | 2 +-
3 files changed, 21 insertions(+), 50 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa16ffcaa..3309e54c0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,23 @@ All notable changes to this project will be documented in this file.
## [Unreleased] - Development
-## [12.3.1.6]
+## [12.4.0.1]
+### Added
+
+### Breaking Changed
+
+### Changed
+
+### Fixed
+
+### Removed
+
+## [Released]
+
+## [12.4.0] 20230216
+- Release Peter
+
+## [12.3.1.6] 20230216
### Added
- ESP32 preliminary support for Matter protocol, milestone 1 (commissioning) by Stephan Hadinger
- Basic support for Shelly Pro 4PM
@@ -22,8 +38,6 @@ All notable changes to this project will be documented in this file.
- ESP8266 Fix TLS SNI which would prevent AWS IoT connection (#17936)
- TuyaMcu exception 3 regression from v12.3.1.4
-### Removed
-
## [12.3.1.5] 20230208
### Added
- ESP32 support for eigth energy phases/channels
@@ -106,8 +120,6 @@ All notable changes to this project will be documented in this file.
### Changed
- ESP32 Framework (Core) from v2.0.5.3 to v2.0.5.4 (IPv6 support)
-## [Released]
-
## [12.3.1] 20221216
- Release Percy
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 0fc24f971..efcd2c990 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -75,7 +75,7 @@ Latest released binaries can be downloaded from
- http://ota.tasmota.com/tasmota/release
Historical binaries can be downloaded from
-- http://ota.tasmota.com/tasmota/release-12.3.1
+- http://ota.tasmota.com/tasmota/release-12.4.0
The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz``
@@ -100,7 +100,7 @@ Latest released binaries can be downloaded from
- https://ota.tasmota.com/tasmota32/release
Historical binaries can be downloaded from
-- https://ota.tasmota.com/tasmota32/release-12.3.1
+- https://ota.tasmota.com/tasmota32/release-12.4.0
The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasmota.com/tasmota32/release/tasmota32.bin``
@@ -110,52 +110,11 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
[Complete list](BUILDS.md) of available feature and sensors.
-## Changelog v12.3.1.6
+## Changelog v12.4.0.1
### Added
-- Command ``DhtDelay ,`` to allow user control over high and low delay in microseconds [#17944](https://github.com/arendst/Tasmota/issues/17944)
-- Support for up to 3 (ESP8266) or 8 (ESP32) phase modbus energy monitoring device using generic Energy Modbus driver
-- Support for RGB displays [#17414](https://github.com/arendst/Tasmota/issues/17414)
-- Support for IPv6 DNS records (AAAA) and IPv6 ``Ping`` for ESP32 and ESP8266 [#17417](https://github.com/arendst/Tasmota/issues/17417)
-- Support for IPv6 only networks on Ethernet (not yet Wifi)
-- Support for TM1650 display as used in some clocks by Stefan Oskamp [#17594](https://github.com/arendst/Tasmota/issues/17594)
-- Support for PCA9632 4-channel 8-bit PWM driver as light driver by Pascal Heinrich [#17557](https://github.com/arendst/Tasmota/issues/17557)
-- support for SEN5X gas and air quality sensor by Tyeth Gundry [#17736](https://github.com/arendst/Tasmota/issues/17736)
-- Basic support for Shelly Pro 4PM
-- Berry support for ``crypto.SHA256`` [#17430](https://github.com/arendst/Tasmota/issues/17430)
-- Berry crypto add ``EC_P256`` and ``PBKDF2_HMAC_SHA256`` algorithms required by Matter protocol [#17473](https://github.com/arendst/Tasmota/issues/17473)
-- Berry crypto add ``random`` to generate series of random bytes
-- Berry crypto add ``HKDF_HMAC_SHA256``
-- Berry crypto add ``SPAKE2P_Matter`` for Matter support
-- Berry add ``mdns`` advanced features and query
-- Berry `int64.fromstring()` to convert a string to an int64 [#17953](https://github.com/arendst/Tasmota/issues/17953)
-- ESP32 command ``EnergyCols 1..8`` to change number of GUI columns
-- ESP32 command ``EnergyDisplay 1..3`` to change GUI column presentation
-- ESP32 support for eigth energy phases/channels
-- ESP32 support for BMPxxx sensors on two I2C busses [#17643](https://github.com/arendst/Tasmota/issues/17643)
-- ESP32 support for Biomine BioPDU 625x12 [#17857](https://github.com/arendst/Tasmota/issues/17857)
-- ESP32 preliminary support for Matter protocol, milestone 1 (commissioning) by Stephan Hadinger
### Breaking Changed
-- TM1638 button and led support are handled as virtual switches and relays [#11031](https://github.com/arendst/Tasmota/issues/11031)
### Changed
-- Dht driver from v6 to v7
-- ESP32 Framework (Core) from v2.0.5.3 to v2.0.6 (IPv6 support)
-- Energy totals max supported value from +/-21474.83647 to +/-2147483.647 kWh
-- Removed delays in TasmotaSerial and TasmotaModbus Tx enable switching
-- Keep webserver enabled on command ``upload``
-- Better support for virtual buttons and switches up to a total of 28
-- TuyaMcu support of virtual switches
-- Increase rule event buffer from 100 to 256 characters [#16943](https://github.com/arendst/Tasmota/issues/16943)
-- Tasmota OTA scripts now support both unzipped and gzipped file uploads [#17378](https://github.com/arendst/Tasmota/issues/17378)
-- LVGL allow access to `lv.LAYOUT_GRID` and `lv.LAYOUT_FLEX` [#17948](https://github.com/arendst/Tasmota/issues/17948)
### Fixed
-- Modbus transmit enable GPIO enabled once during write buffer
-- Energy dummy switched voltage and power regression from v12.2.0.2
-- Shutter default motorstop set to 0 [#17403](https://github.com/arendst/Tasmota/issues/17403)
-- Shutter default tilt configuration [#17484](https://github.com/arendst/Tasmota/issues/17484)
-- Orno WE517 modbus serial config 8E1 setting [#17545](https://github.com/arendst/Tasmota/issues/17545)
-- Rename ``tasmota4M.bin`` to ``tasmota-4M.bin`` to solve use of ``tasmota-minimal.bin`` [#17674](https://github.com/arendst/Tasmota/issues/17674)
-- ESP8266 set GPIO's to input on power on fixing relay spikes [#17531](https://github.com/arendst/Tasmota/issues/17531)
-- ESP8266 TLS SNI which would prevent AWS IoT connection [#17936](https://github.com/arendst/Tasmota/issues/17936)
\ No newline at end of file
diff --git a/tasmota/include/tasmota_version.h b/tasmota/include/tasmota_version.h
index 1ed1622ac..33b7659ec 100644
--- a/tasmota/include/tasmota_version.h
+++ b/tasmota/include/tasmota_version.h
@@ -20,6 +20,6 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x0C030106; // 12.3.1.6
+const uint32_t VERSION = 0x0C040001; // 12.4.0.1
#endif // _TASMOTA_VERSION_H_
From 774fbfef922889feea89251882cc42692e394cc7 Mon Sep 17 00:00:00 2001
From: Tyeth Gundry
Date: Fri, 17 Feb 2023 07:37:06 +0000
Subject: [PATCH 002/227] fix floats, resolutions, and utilise common units
(#17961)
---
.../tasmota_xsns_sensor/xsns_103_sen5x.ino | 74 +++++++++----------
1 file changed, 35 insertions(+), 39 deletions(-)
diff --git a/tasmota/tasmota_xsns_sensor/xsns_103_sen5x.ino b/tasmota/tasmota_xsns_sensor/xsns_103_sen5x.ino
index 720550137..1f4aa2659 100644
--- a/tasmota/tasmota_xsns_sensor/xsns_103_sen5x.ino
+++ b/tasmota/tasmota_xsns_sensor/xsns_103_sen5x.ino
@@ -20,12 +20,12 @@
#ifdef USE_I2C
#ifdef USE_SEN5X
/*********************************************************************************************\
- * SEN5X - Gas (VOC - Volatile Organic Compounds / NOx - Nitrous Oxides) and Particulates (PPM)
+ * SEN5X - Gas (VOC - Volatile Organic Compounds / NOx - Nitrous Oxides) and Particulates (PM)
*
* Source: Sensirion SEN5X Driver + Example, and Tasmota Driver 98 by Jean-Pierre Deschamps
* Adaption for TASMOTA: Tyeth Gundry
*
- * I2C Address: 0x59
+ * I2C Address: 0x69
\*********************************************************************************************/
#define XSNS_103 103
@@ -39,7 +39,6 @@ SensirionI2CSen5x *sen5x = nullptr;
struct SEN5XDATA_s {
bool sen5x_ready;
- float abshum;
float massConcentrationPm1p0;
float massConcentrationPm2p5;
float massConcentrationPm4p0;
@@ -165,17 +164,17 @@ void SEN5XUpdate(void) // Perform every second to ensure proper operation of the
{
#ifdef DEBUG_TASMOTA_SENSOR
DEBUG_SENSOR_LOG(PSTR("SEN5x readings:-"));
- DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm1p0: %f\n"), SEN5XDATA->massConcentrationPm1p0);
- DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm2p5: %f\n"), SEN5XDATA->massConcentrationPm2p5);
- DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm4p0: %f\n"), SEN5XDATA->massConcentrationPm4p0);
- DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm10p0: %f\n"), SEN5XDATA->massConcentrationPm10p0);
+ DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm1p0: %1_f\n"), &SEN5XDATA->massConcentrationPm1p0);
+ DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm2p5: %1_f\n"), &SEN5XDATA->massConcentrationPm2p5);
+ DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm4p0: %1_f\n"), &SEN5XDATA->massConcentrationPm4p0);
+ DEBUG_SENSOR_LOG(PSTR("MassConcentrationPm10p0: %1_f\n"), &SEN5XDATA->massConcentrationPm10p0);
if (isnan(SEN5XDATA->ambientHumidity))
{
DEBUG_SENSOR_LOG(PSTR("AmbientHumidity: n/a\n"));
}
else
{
- DEBUG_SENSOR_LOG(PSTR("AmbientHumidity: %f\n"), SEN5XDATA->ambientHumidity);
+ DEBUG_SENSOR_LOG(PSTR("AmbientHumidity: %*_f\n"), 2, &SEN5XDATA->ambientHumidity);
}
if (isnan(SEN5XDATA->ambientTemperature))
@@ -184,7 +183,7 @@ void SEN5XUpdate(void) // Perform every second to ensure proper operation of the
}
else
{
- DEBUG_SENSOR_LOG(PSTR("AmbientTemperature: %f\n"), SEN5XDATA->ambientTemperature);
+ DEBUG_SENSOR_LOG(PSTR("AmbientTemperature: %*_f\n"), 2, &SEN5XDATA->ambientTemperature);
}
if (isnan(SEN5XDATA->vocIndex))
@@ -193,7 +192,7 @@ void SEN5XUpdate(void) // Perform every second to ensure proper operation of the
}
else
{
- DEBUG_SENSOR_LOG(PSTR("VocIndex: %f\n"), SEN5XDATA->vocIndex);
+ DEBUG_SENSOR_LOG(PSTR("VocIndex: %*_f\n"), 0, &SEN5XDATA->vocIndex);
}
if (isnan(SEN5XDATA->noxIndex))
@@ -202,19 +201,15 @@ void SEN5XUpdate(void) // Perform every second to ensure proper operation of the
}
else
{
- DEBUG_SENSOR_LOG(PSTR("NoxIndex: %f\n"), SEN5XDATA->noxIndex);
+ DEBUG_SENSOR_LOG(PSTR("NoxIndex: %*_f\n"), 0, &SEN5XDATA->noxIndex);
}
#endif
}
- if (!isnan(SEN5XDATA->ambientTemperature) && SEN5XDATA->ambientHumidity > 0) {
- SEN5XDATA->abshum = sen5x_AbsoluteHumidity(SEN5XDATA->ambientTemperature, SEN5XDATA->ambientHumidity);
- DEBUG_SENSOR_LOG(PSTR("AbsoluteHumidity: %f\n"), SEN5XDATA->abshum);
- }
}
#ifdef USE_WEBSERVER
-const char HTTP_SNS_SEN5X_UNITS[] PROGMEM = "{s}SEN5X %s{m}%.*f %s{e}";
-const char HTTP_SNS_SEN5X_UNITLESS[] PROGMEM = "{s}SEN5X %s{m}%.*f{e}";
+const char HTTP_SNS_SEN5X_UNITS[] PROGMEM = "{s}SEN5X %s{m}%*_f %s{e}";
+const char HTTP_SNS_SEN5X_UNITLESS[] PROGMEM = "{s}SEN5X %s{m}%*_f{e}";
// {s} = , {m} = , {e} =
const char HTTP_SNS_AHUMSEN5X[] PROGMEM = "{s}SEN5X Abs Humidity{m}%s g/m³{e}";
#endif
@@ -223,48 +218,49 @@ const char HTTP_SNS_AHUMSEN5X[] PROGMEM = "{s}SEN5X Abs Humidity{m}%s g/m³{e}";
void SEN5XShow(bool json)
{
+ float convertedTemp = 0;
+ float convertedHum = 0;
if (SEN5XDATA->sen5x_ready)
{
- char sen5x_abs_hum[33];
- bool ahum_available = !isnan(SEN5XDATA->ambientTemperature) && (SEN5XDATA->ambientHumidity > 0);
+ char sen5x_abs_hum[13];
+ bool ahum_available = !isnan(SEN5XDATA->ambientTemperature) &&
+ !isnan(SEN5XDATA->ambientHumidity) &&
+ SEN5XDATA->ambientHumidity > 0;
if (ahum_available)
{
- // has humidity + temperature
- dtostrfd(SEN5XDATA->abshum, 4, sen5x_abs_hum);
+ convertedTemp = ConvertTempToFahrenheit(SEN5XDATA->ambientTemperature);
+ convertedHum = ConvertHumidity(SEN5XDATA->ambientHumidity);
+ dtostrfd(sen5x_AbsoluteHumidity(convertedTemp,convertedHum), 4, sen5x_abs_hum);
}
if (json)
{
ResponseAppend_P(PSTR(",\"SEN5X\":{"));
- ResponseAppend_P(PSTR("\"PM1\":%.1f,"), SEN5XDATA->massConcentrationPm1p0);
- ResponseAppend_P(PSTR("\"PM2.5\":%.1f,"), SEN5XDATA->massConcentrationPm2p5);
- ResponseAppend_P(PSTR("\"PM4\":%.1f,"), SEN5XDATA->massConcentrationPm4p0);
- ResponseAppend_P(PSTR("\"PM10\":%.1f,"), SEN5XDATA->massConcentrationPm10p0);
+ ResponseAppend_P(PSTR("\"" D_ENVIRONMENTAL_CONCENTRATION "1\":%1_f,"), &SEN5XDATA->massConcentrationPm1p0);
+ ResponseAppend_P(PSTR("\"" D_ENVIRONMENTAL_CONCENTRATION "2.5\":%1_f,"), &SEN5XDATA->massConcentrationPm2p5);
+ ResponseAppend_P(PSTR("\"" D_ENVIRONMENTAL_CONCENTRATION "4\":%1_f,"), &SEN5XDATA->massConcentrationPm4p0);
+ ResponseAppend_P(PSTR("\"" D_ENVIRONMENTAL_CONCENTRATION "10\":%1_f,"), &SEN5XDATA->massConcentrationPm10p0);
if (!isnan(SEN5XDATA->noxIndex))
- ResponseAppend_P(PSTR("\"NOx\":%.0f,"), SEN5XDATA->noxIndex);
+ ResponseAppend_P(PSTR("\"NOx\":%0_f,"), &SEN5XDATA->noxIndex);
if (!isnan(SEN5XDATA->vocIndex))
- ResponseAppend_P(PSTR("\"VOC\":%.0f,"), SEN5XDATA->vocIndex);
- if (!isnan(SEN5XDATA->ambientTemperature))
- ResponseAppendTHD(SEN5XDATA->ambientTemperature, SEN5XDATA->ambientHumidity);
+ ResponseAppend_P(PSTR("\"VOC\":%0_f,"), &SEN5XDATA->vocIndex);
if (ahum_available)
+ ResponseAppendTHD(convertedTemp, convertedHum);
ResponseAppend_P(PSTR(",\"" D_JSON_AHUM "\":%s"), sen5x_abs_hum);
ResponseJsonEnd();
}
#ifdef USE_WEBSERVER
- WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "PM1", 1, SEN5XDATA->massConcentrationPm1p0, "μg/m³");
- WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "PM2.5", 1, SEN5XDATA->massConcentrationPm2p5, "μg/m³");
- WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "PM4", 1, SEN5XDATA->massConcentrationPm4p0, "μg/m³");
- WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "PM10", 1, SEN5XDATA->massConcentrationPm10p0, "μg/m³");
+ WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, PSTR(D_ENVIRONMENTAL_CONCENTRATION "1"), 1, &SEN5XDATA->massConcentrationPm1p0, D_UNIT_MICROGRAM_PER_CUBIC_METER);
+ WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, PSTR(D_ENVIRONMENTAL_CONCENTRATION "2.5"), 1, &SEN5XDATA->massConcentrationPm2p5, D_UNIT_MICROGRAM_PER_CUBIC_METER);
+ WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, PSTR(D_ENVIRONMENTAL_CONCENTRATION "4"), 1, &SEN5XDATA->massConcentrationPm4p0, D_UNIT_MICROGRAM_PER_CUBIC_METER);
+ WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, PSTR(D_ENVIRONMENTAL_CONCENTRATION "10"), 1, &SEN5XDATA->massConcentrationPm10p0, D_UNIT_MICROGRAM_PER_CUBIC_METER);
if (!isnan(SEN5XDATA->noxIndex))
- WSContentSend_PD(HTTP_SNS_SEN5X_UNITLESS, "NOx", 0, SEN5XDATA->noxIndex);
+ WSContentSend_PD(HTTP_SNS_SEN5X_UNITLESS, "NOx", 0, &SEN5XDATA->noxIndex);
if (!isnan(SEN5XDATA->vocIndex))
- WSContentSend_PD(HTTP_SNS_SEN5X_UNITLESS, "VOC", 0, SEN5XDATA->vocIndex);
- if (!isnan(SEN5XDATA->ambientTemperature))
- WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "Temperature", 2, SEN5XDATA->ambientTemperature, "°C");
- if (!isnan(SEN5XDATA->ambientHumidity))
- WSContentSend_PD(HTTP_SNS_SEN5X_UNITS, "Humidity", 2, SEN5XDATA->ambientHumidity, "%RH");
+ WSContentSend_PD(HTTP_SNS_SEN5X_UNITLESS, "VOC", 0, &SEN5XDATA->vocIndex);
if (ahum_available)
+ WSContentSend_THD(PSTR("SEN5X"), convertedTemp, convertedHum);
WSContentSend_PD(HTTP_SNS_AHUMSEN5X, sen5x_abs_hum);
#endif
From 19b183cbee75e64ec1314ce031bb75561a6a0f5e Mon Sep 17 00:00:00 2001
From: gemu
Date: Fri, 17 Feb 2023 08:38:02 +0100
Subject: [PATCH 003/227] add gcm frame variant (#17964)
---
lib/lib_div/ams/GcmParser.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/lib/lib_div/ams/GcmParser.cpp b/lib/lib_div/ams/GcmParser.cpp
index cbdf130fe..12ac94a2b 100644
--- a/lib/lib_div/ams/GcmParser.cpp
+++ b/lib/lib_div/ams/GcmParser.cpp
@@ -51,6 +51,10 @@ int8_t GCMParser::parse(uint8_t *d, DataParserContext &ctx) {
ptr += 3;
headersize += 3;
} else if(((*ptr) & 0xFF) == 0x4f) {
+ // ???????? single frame did only decode with this compare
+ ptr++;
+ headersize++;
+ } else if(((*ptr) & 0xFF) == 0x5e) {
// ???????? single frame did only decode with this compare
ptr++;
headersize++;
From 4c59b5b8d13e4843afdb590c6c02d6f11759e5b2 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 17 Feb 2023 10:53:07 +0100
Subject: [PATCH 004/227] Fix Energytotals cannot be set to negative values
Fix Energytotals cannot be set to negative values (#17965)
---
CHANGELOG.md | 2 ++
RELEASENOTES.md | 2 ++
tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino | 16 ++++++++--------
.../tasmota_xdrv_driver/xdrv_03_esp32_energy.ino | 16 ++++++++--------
4 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3309e54c0..324fd1e18 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,8 @@ All notable changes to this project will be documented in this file.
### Changed
### Fixed
+- SEN5X floats and units (#17961)
+- Energytotals cannot be set to negative values (#17965)
### Removed
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index efcd2c990..afff8a0bb 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -118,3 +118,5 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
### Changed
### Fixed
+- SEN5X floats and units [#17961](https://github.com/arendst/Tasmota/issues/17961)
+- Energytotals cannot be set to negative values [#17965](https://github.com/arendst/Tasmota/issues/17965)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino b/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino
index 45613230e..408451297 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino
@@ -697,7 +697,7 @@ void CmndEnergyTotal(void) {
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) {
uint32_t phase = XdrvMailbox.index -1;
// Reset Energy Total
- RtcSettings.energy_kWhtotal_ph[phase] = values[0];
+ RtcSettings.energy_kWhtotal_ph[phase] = (int32_t)values[0];
Settings->energy_kWhtotal_ph[phase] = RtcSettings.energy_kWhtotal_ph[phase];
if (params > 1) {
Settings->energy_kWhtotal_time = values[1];
@@ -716,7 +716,7 @@ void CmndEnergyYesterday(void) {
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) {
uint32_t phase = XdrvMailbox.index -1;
// Reset Energy Yesterday
- Settings->energy_kWhyesterday_ph[phase] = values[0] * 100;
+ Settings->energy_kWhyesterday_ph[phase] = (int32_t)values[0] * 100;
if (params > 1) {
Settings->energy_kWhtotal_time = values[1];
}
@@ -732,7 +732,7 @@ void CmndEnergyToday(void) {
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) {
uint32_t phase = XdrvMailbox.index -1;
// Reset Energy Today
- Energy->kWhtoday_offset[phase] = values[0] * 100;
+ Energy->kWhtoday_offset[phase] = (int32_t)values[0] * 100;
Energy->kWhtoday[phase] = 0;
Energy->kWhtoday_delta[phase] = 0;
Energy->start_energy[phase] = 0;
@@ -760,7 +760,7 @@ void CmndEnergyExportActive(void) {
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) {
uint32_t phase = XdrvMailbox.index -1;
// Reset Energy Export Active
- RtcSettings.energy_kWhexport_ph[phase] = values[0];
+ RtcSettings.energy_kWhexport_ph[phase] = (int32_t)values[0];
Settings->energy_kWhexport_ph[phase] = RtcSettings.energy_kWhexport_ph[phase];
if (params > 1) {
Settings->energy_kWhtotal_time = values[1];
@@ -789,9 +789,9 @@ void CmndEnergyUsage(void) {
uint32_t params = ParseParameters(2, values);
if (params > 0) {
// Reset energy_usage.usage totals
- RtcSettings.energy_usage.usage1_kWhtotal = values[0];
+ RtcSettings.energy_usage.usage1_kWhtotal = (int32_t)values[0];
if (params > 1) {
- RtcSettings.energy_usage.usage2_kWhtotal = values[1];
+ RtcSettings.energy_usage.usage2_kWhtotal = (int32_t)values[1];
}
Settings->energy_usage.usage1_kWhtotal = RtcSettings.energy_usage.usage1_kWhtotal;
Settings->energy_usage.usage2_kWhtotal = RtcSettings.energy_usage.usage2_kWhtotal;
@@ -804,9 +804,9 @@ void CmndEnergyExport(void) {
uint32_t params = ParseParameters(2, values);
if (params > 0) {
// Reset energy_usage.return totals
- RtcSettings.energy_usage.return1_kWhtotal = values[0] * 100;
+ RtcSettings.energy_usage.return1_kWhtotal = (int32_t)values[0] * 100;
if (params > 1) {
- RtcSettings.energy_usage.return2_kWhtotal = values[1] * 100;
+ RtcSettings.energy_usage.return2_kWhtotal = (int32_t)values[1] * 100;
}
Settings->energy_usage.return1_kWhtotal = RtcSettings.energy_usage.return1_kWhtotal;
Settings->energy_usage.return2_kWhtotal = RtcSettings.energy_usage.return2_kWhtotal;
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino b/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino
index 603a6fa2e..ddc7bb3ec 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino
@@ -930,7 +930,7 @@ void CmndEnergyTotal(void) {
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) {
uint32_t phase = XdrvMailbox.index -1;
// Reset Energy Total
- RtcEnergySettings.energy_total_kWh[phase] = (float)values[0] / 1000;
+ RtcEnergySettings.energy_total_kWh[phase] = (float)(int32_t)values[0] / 1000;
Energy->Settings.energy_total_kWh[phase] = RtcEnergySettings.energy_total_kWh[phase];
if (params > 1) {
Energy->Settings.energy_kWhtotal_time = values[1];
@@ -949,7 +949,7 @@ void CmndEnergyYesterday(void) {
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) {
uint32_t phase = XdrvMailbox.index -1;
// Reset Energy Yesterday
- Energy->Settings.energy_yesterday_kWh[phase] = (float)values[0] / 1000;
+ Energy->Settings.energy_yesterday_kWh[phase] = (float)(int32_t)values[0] / 1000;
if (params > 1) {
Energy->Settings.energy_kWhtotal_time = values[1];
}
@@ -965,7 +965,7 @@ void CmndEnergyToday(void) {
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) {
uint32_t phase = XdrvMailbox.index -1;
// Reset Energy Today
- Energy->energy_today_offset_kWh[phase] = (float)values[0] / 1000;
+ Energy->energy_today_offset_kWh[phase] = (float)(int32_t)values[0] / 1000;
Energy->kWhtoday[phase] = 0;
Energy->kWhtoday_delta[phase] = 0;
Energy->start_energy[phase] = 0;
@@ -993,7 +993,7 @@ void CmndEnergyExportActive(void) {
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) {
uint32_t phase = XdrvMailbox.index -1;
// Reset Energy Export Active
- RtcEnergySettings.energy_export_kWh[phase] = (float)values[0] / 1000;
+ RtcEnergySettings.energy_export_kWh[phase] = (float)(int32_t)values[0] / 1000;
Energy->Settings.energy_export_kWh[phase] = RtcEnergySettings.energy_export_kWh[phase];
if (params > 1) {
Energy->Settings.energy_kWhtotal_time = values[1];
@@ -1017,9 +1017,9 @@ void CmndEnergyUsage(void) {
uint32_t params = ParseParameters(2, values);
if (params > 0) {
// Reset energy_usage.usage totals
- RtcEnergySettings.energy_usage.usage_total_kWh[0] = (float)values[0] / 1000;
+ RtcEnergySettings.energy_usage.usage_total_kWh[0] = (float)(int32_t)values[0] / 1000;
if (params > 1) {
- RtcEnergySettings.energy_usage.usage_total_kWh[1] = (float)values[1] / 1000;
+ RtcEnergySettings.energy_usage.usage_total_kWh[1] = (float)(int32_t)values[1] / 1000;
}
Energy->Settings.energy_usage.usage_total_kWh[0] = RtcEnergySettings.energy_usage.usage_total_kWh[0];
Energy->Settings.energy_usage.usage_total_kWh[1] = RtcEnergySettings.energy_usage.usage_total_kWh[1];
@@ -1032,9 +1032,9 @@ void CmndEnergyExport(void) {
uint32_t params = ParseParameters(2, values);
if (params > 0) {
// Reset energy_usage.return totals
- RtcEnergySettings.energy_usage.return_total_kWh[0] = (float)values[0] / 1000;
+ RtcEnergySettings.energy_usage.return_total_kWh[0] = (float)(int32_t)values[0] / 1000;
if (params > 1) {
- RtcEnergySettings.energy_usage.return_total_kWh[1] = (float)values[1] / 1000;
+ RtcEnergySettings.energy_usage.return_total_kWh[1] = (float)(int32_t)values[1] / 1000;
}
Energy->Settings.energy_usage.return_total_kWh[0] = RtcEnergySettings.energy_usage.return_total_kWh[0];
Energy->Settings.energy_usage.return_total_kWh[1] = RtcEnergySettings.energy_usage.return_total_kWh[1];
From d8d9c549ab62803b251e5a09aaf43848c1f7c97b Mon Sep 17 00:00:00 2001
From: Philipp
Date: Fri, 17 Feb 2023 19:42:14 +0100
Subject: [PATCH 005/227] fix display colors; remove unnecessary lines (#17973)
---
tasmota/displaydesc/ST7735S_Pro4PM_display.ini | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/tasmota/displaydesc/ST7735S_Pro4PM_display.ini b/tasmota/displaydesc/ST7735S_Pro4PM_display.ini
index 09579367c..3d15543b5 100644
--- a/tasmota/displaydesc/ST7735S_Pro4PM_display.ini
+++ b/tasmota/displaydesc/ST7735S_Pro4PM_display.ini
@@ -26,10 +26,7 @@ E1,10,03,1D,07,06,2E,2C,29,2D,2E,2E,37,3F,00,00,02,10
:O,29
:A,2A,2B,2C,16
:R,36
-:0,68,00,00,00
-:1,CC,1A,01,01
-:2,A8,01,1A,02
-:3,08,1A,01,03
+:0,60,00,00,00
:i,20,21
:B,60,1
#
From 119aeca4d9f1af8b364bfc5f8dc4c209b0cce2dd Mon Sep 17 00:00:00 2001
From: Barbudor
Date: Fri, 17 Feb 2023 22:33:06 +0100
Subject: [PATCH 006/227] oversample ADC_RANGE by 32 like ADC_INPUT (#17975)
---
tasmota/tasmota_xsns_sensor/xsns_02_analog.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino b/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino
index 5abb6b56a..afccacbc8 100644
--- a/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino
+++ b/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino
@@ -452,7 +452,7 @@ float AdcGetRange(uint32_t idx) {
// formula for calibration: value, fromLow, fromHigh, toLow, toHigh
// Example: 514, 632, 236, 0, 100
// int( (( - ) / ( - ) ) * ( - ) ) + )
- int adc = AdcRead(Adc[idx].pin, 2);
+ int adc = AdcRead(Adc[idx].pin, 5);
double adcrange = ( ((double)Adc[idx].param2 - (double)adc) / ( ((double)Adc[idx].param2 - (double)Adc[idx].param1)) * ((double)Adc[idx].param3 - (double)Adc[idx].param4) + (double)Adc[idx].param4 );
return (float)adcrange;
}
From 3be29dfecdb077a01c5df3cc7f6c0047c1efdd54 Mon Sep 17 00:00:00 2001
From: drid
Date: Fri, 17 Feb 2023 23:34:40 +0200
Subject: [PATCH 007/227] Fix 1-pin ultrasonic sensor detection (#17966)
* Fix 1-pin ultrasonic sensor detection
Signed-off-by: Ilias Daradimos
* Fix typo
---------
Signed-off-by: Ilias Daradimos
---
tasmota/tasmota_xsns_sensor/xsns_22_sr04.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/tasmota_xsns_sensor/xsns_22_sr04.ino b/tasmota/tasmota_xsns_sensor/xsns_22_sr04.ino
index 01f5a22a9..4a4e28e17 100644
--- a/tasmota/tasmota_xsns_sensor/xsns_22_sr04.ino
+++ b/tasmota/tasmota_xsns_sensor/xsns_22_sr04.ino
@@ -124,7 +124,7 @@ void Sr04TModeDetect(void) {
if (PinUsed(GPIO_SR04_TRIG)) {
SR04.type = (Sr04TMiddleValue(Sr04TMode3Distance(), Sr04TMode3Distance(), Sr04TMode3Distance()) != 0) ? SR04_MODE_SER_TRANSCEIVER : SR04_MODE_TRIGGER_ECHO;
} else {
- SR04.type = SR04_MODE_SER_RECEIVER;
+ SR04.type = (Sr04TMiddleValue(Sr04TMode2Distance(), Sr04TMode2Distance(), Sr04TMode2Distance()) != 0) ? SR04_MODE_SER_RECEIVER : SR04_MODE_TRIGGER_ECHO;
}
} else {
SR04.type = SR04_MODE_TRIGGER_ECHO;
From 89ccfe910ef70d70215b72ec3ca7606f8da89604 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 18 Feb 2023 14:30:40 +0100
Subject: [PATCH 008/227] Fix undocumented support
Fix undocumented support for non-sequential buttons and switches (#17967)
---
CHANGELOG.md | 3 +++
RELEASENOTES.md | 2 ++
tasmota/tasmota_support/support_button_v4.ino | 7 ++-----
tasmota/tasmota_support/support_switch_v4.ino | 7 ++-----
4 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 324fd1e18..42a743a91 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,10 +9,13 @@ All notable changes to this project will be documented in this file.
### Breaking Changed
### Changed
+- ADC Range oversample from 2 to 32 (#17975)
### Fixed
- SEN5X floats and units (#17961)
- Energytotals cannot be set to negative values (#17965)
+- Undocumented support for non-sequential buttons and switches (#17967)
+- SR04 driver single pin ultrasonic sensor detection (#17966)
### Removed
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index afff8a0bb..b33447bb1 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -116,7 +116,9 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
### Breaking Changed
### Changed
+- ADC Range oversample from 2 to 32 [#17975](https://github.com/arendst/Tasmota/issues/17975)
### Fixed
- SEN5X floats and units [#17961](https://github.com/arendst/Tasmota/issues/17961)
- Energytotals cannot be set to negative values [#17965](https://github.com/arendst/Tasmota/issues/17965)
+- SR04 driver single pin ultrasonic sensor detection [#17966](https://github.com/arendst/Tasmota/issues/17966)
diff --git a/tasmota/tasmota_support/support_button_v4.ino b/tasmota/tasmota_support/support_button_v4.ino
index cf85b6dd5..a92963270 100644
--- a/tasmota/tasmota_support/support_button_v4.ino
+++ b/tasmota/tasmota_support/support_button_v4.ino
@@ -134,10 +134,7 @@ void ButtonProbe(void) {
uint32_t not_activated;
for (uint32_t i = 0; i < MAX_KEYS_SET; i++) {
- if (!bitRead(Button.used, i)) {
- Button.probe_mutex = false;
- return;
- }
+ if (!bitRead(Button.used, i)) { continue; }
if (PinUsed(GPIO_KEY1, i)) {
#if defined(SOC_TOUCH_VERSION_1) || defined(SOC_TOUCH_VERSION_2)
@@ -334,7 +331,7 @@ void ButtonHandler(void) {
char scmnd[20];
for (uint32_t button_index = 0; button_index < MAX_KEYS_SET; button_index++) {
- if (!bitRead(Button.used, button_index)) { return; }
+ if (!bitRead(Button.used, button_index)) { continue; }
uint8_t button = Button.debounced_state[button_index];
diff --git a/tasmota/tasmota_support/support_switch_v4.ino b/tasmota/tasmota_support/support_switch_v4.ino
index fdde1bb25..40501a899 100644
--- a/tasmota/tasmota_support/support_switch_v4.ino
+++ b/tasmota/tasmota_support/support_switch_v4.ino
@@ -142,10 +142,7 @@ void SwitchProbe(void) {
uint32_t not_activated;
for (uint32_t i = 0; i < MAX_SWITCHES_SET; i++) {
- if (!bitRead(Switch.used, i)) {
- Switch.probe_mutex = false;
- return;
- }
+ if (!bitRead(Switch.used, i)) { continue; }
if (PinUsed(GPIO_SWT1, i)) {
not_activated = digitalRead(Pin(GPIO_SWT1, i));
@@ -288,7 +285,7 @@ void SwitchHandler(void) {
uint32_t loops_per_second = 1000 / Settings->switch_debounce;
for (uint32_t i = 0; i < MAX_SWITCHES_SET; i++) {
- if (!bitRead(Switch.used, i)) { return; }
+ if (!bitRead(Switch.used, i)) { continue; }
uint32_t button = Switch.debounced_state[i];
uint32_t switchflag = POWER_TOGGLE +1;
From dfe434bb923ffbb0d0069f3803e2c1da8d36c0ef Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 18 Feb 2023 16:05:56 +0100
Subject: [PATCH 009/227] Prep MCP23xxx interrupt support
---
tasmota/include/tasmota_template.h | 7 +++++++
tasmota/language/af_AF.h | 1 +
tasmota/language/bg_BG.h | 1 +
tasmota/language/ca_AD.h | 1 +
tasmota/language/cs_CZ.h | 1 +
tasmota/language/de_DE.h | 1 +
tasmota/language/el_GR.h | 1 +
tasmota/language/en_GB.h | 1 +
tasmota/language/es_ES.h | 1 +
tasmota/language/fr_FR.h | 1 +
tasmota/language/fy_NL.h | 1 +
tasmota/language/he_HE.h | 1 +
tasmota/language/hu_HU.h | 1 +
tasmota/language/it_IT.h | 1 +
tasmota/language/ko_KO.h | 1 +
tasmota/language/nl_NL.h | 1 +
tasmota/language/pl_PL.h | 1 +
tasmota/language/pt_BR.h | 1 +
tasmota/language/pt_PT.h | 1 +
tasmota/language/ro_RO.h | 1 +
tasmota/language/ru_RU.h | 1 +
tasmota/language/sk_SK.h | 1 +
tasmota/language/sv_SE.h | 1 +
tasmota/language/tr_TR.h | 1 +
tasmota/language/uk_UA.h | 1 +
tasmota/language/vi_VN.h | 1 +
tasmota/language/zh_CN.h | 1 +
tasmota/language/zh_TW.h | 1 +
28 files changed, 34 insertions(+)
diff --git a/tasmota/include/tasmota_template.h b/tasmota/include/tasmota_template.h
index 5dc854d01..aa1f982bf 100644
--- a/tasmota/include/tasmota_template.h
+++ b/tasmota/include/tasmota_template.h
@@ -206,6 +206,7 @@ enum UserSelectablePins {
GPIO_ME007_TRIG, GPIO_ME007_RX, // ME007 Serial/Trigger interface
GPIO_TUYAMCUBR_TX, GPIO_TUYAMCUBR_RX, // TuyaMCU Bridge
GPIO_BIOPDU_PZEM0XX_TX, GPIO_BIOPDU_PZEM016_RX, GPIO_BIOPDU_BIT, // Biomine BioPDU 625x12
+ GPIO_MCP23XXX_INT, // MCP23xxx INT
GPIO_SENSOR_END };
// Error as warning to rethink GPIO usage with max 2045
@@ -459,6 +460,7 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_ME007_TRIG "|" D_SENSOR_ME007_RX "|"
D_SENSOR_TUYAMCUBR_TX "|" D_SENSOR_TUYAMCUBR_RX "|"
D_SENSOR_BIOPDU_PZEM0XX_TX "|" D_SENSOR_BIOPDU_PZEM016_RX "|" D_SENSOR_BIOPDU_BIT "|"
+ D_SENSOR_MCP23XXX_INT "|"
;
const char kSensorNamesFixed[] PROGMEM =
@@ -466,6 +468,7 @@ const char kSensorNamesFixed[] PROGMEM =
// Max number of GPIOs
#define MAX_MAX31865S 6
+#define MAX_MCP23XXX 4
#define MAX_FLOWRATEMETER 2
#define MAX_A4988_MSS 3
#define MAX_WEBCAM_DATA 8
@@ -676,6 +679,10 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_SSPI_MAX31865_CS1) + MAX_MAX31865S,
#endif
+#ifdef USE_MCP23XXX_DRV
+ AGPIO(GPIO_MCP23XXX_INT) + MAX_MCP23XXX,
+#endif
+
AGPIO(GPIO_TXD), // Serial interface
AGPIO(GPIO_RXD), // Serial interface
diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h
index 91898f7a7..775225aa9 100644
--- a/tasmota/language/af_AF.h
+++ b/tasmota/language/af_AF.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h
index db2b69eac..0773fdca8 100644
--- a/tasmota/language/bg_BG.h
+++ b/tasmota/language/bg_BG.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h
index 754f4dee3..9c4059527 100644
--- a/tasmota/language/ca_AD.h
+++ b/tasmota/language/ca_AD.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h
index 8fe0507c7..2fbd249e7 100644
--- a/tasmota/language/cs_CZ.h
+++ b/tasmota/language/cs_CZ.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h
index 83b685742..c8e12703c 100644
--- a/tasmota/language/de_DE.h
+++ b/tasmota/language/de_DE.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Puls"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h
index 3c5ed60c6..20f08390f 100644
--- a/tasmota/language/el_GR.h
+++ b/tasmota/language/el_GR.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h
index 8071fe613..21ec9c0b0 100644
--- a/tasmota/language/en_GB.h
+++ b/tasmota/language/en_GB.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h
index 9f6f5b351..d584a7d54 100644
--- a/tasmota/language/es_ES.h
+++ b/tasmota/language/es_ES.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "Cruce por cero"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h
index 1657e5fdb..5e52bdc6b 100644
--- a/tasmota/language/fr_FR.h
+++ b/tasmota/language/fr_FR.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h
index a3d15372c..9166433c5 100644
--- a/tasmota/language/fy_NL.h
+++ b/tasmota/language/fy_NL.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h
index 670c7d0df..5d03130d0 100644
--- a/tasmota/language/he_HE.h
+++ b/tasmota/language/he_HE.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h
index f2c6d03fe..dd3568f2f 100644
--- a/tasmota/language/hu_HU.h
+++ b/tasmota/language/hu_HU.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h
index cd084b993..c714877c6 100644
--- a/tasmota/language/it_IT.h
+++ b/tasmota/language/it_IT.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "Impulsi ZC"
#define D_SENSOR_HALLEFFECT "Effetto hall"
#define D_SENSOR_EPD_DATA "EPD - Dati"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX - INT"
#define D_SENSOR_MCP2515_CS "MCP2515 - CS"
#define D_SENSOR_HRG15_RX "HRG15 - RX"
#define D_SENSOR_HRG15_TX "HRG15 - TX"
diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h
index 9047b95c5..3ba816172 100644
--- a/tasmota/language/ko_KO.h
+++ b/tasmota/language/ko_KO.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h
index 69bead33e..4f98daabd 100644
--- a/tasmota/language/nl_NL.h
+++ b/tasmota/language/nl_NL.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h
index c8f2cd71c..1870701c3 100644
--- a/tasmota/language/pl_PL.h
+++ b/tasmota/language/pl_PL.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "Efekt Halla"
#define D_SENSOR_EPD_DATA "EPD Dane"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h
index 7152da31d..893bd6d81 100644
--- a/tasmota/language/pt_BR.h
+++ b/tasmota/language/pt_BR.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "Efeito Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h
index df69b7c1c..987d4c7ac 100644
--- a/tasmota/language/pt_PT.h
+++ b/tasmota/language/pt_PT.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "Efeito Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h
index b7427a821..d2f3424a6 100644
--- a/tasmota/language/ro_RO.h
+++ b/tasmota/language/ro_RO.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h
index 02e0851dc..2213c198f 100644
--- a/tasmota/language/ru_RU.h
+++ b/tasmota/language/ru_RU.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h
index 79212a44a..544a735ce 100644
--- a/tasmota/language/sk_SK.h
+++ b/tasmota/language/sk_SK.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h
index 2bc09f434..cbf988d31 100644
--- a/tasmota/language/sv_SE.h
+++ b/tasmota/language/sv_SE.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h
index 2b4b962f5..456ae8497 100644
--- a/tasmota/language/tr_TR.h
+++ b/tasmota/language/tr_TR.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h
index a45664b64..8cbbeedff 100644
--- a/tasmota/language/uk_UA.h
+++ b/tasmota/language/uk_UA.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h
index 2c85c22e1..5061c63b4 100644
--- a/tasmota/language/vi_VN.h
+++ b/tasmota/language/vi_VN.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h
index 7baa2711d..dbc694d6c 100644
--- a/tasmota/language/zh_CN.h
+++ b/tasmota/language/zh_CN.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h
index 77de2a6f0..76ec48fa6 100644
--- a/tasmota/language/zh_TW.h
+++ b/tasmota/language/zh_TW.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
From 5eecd7f7b412d97ea0443f7439a321d7734c6df8 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 18 Feb 2023 22:56:53 +0100
Subject: [PATCH 010/227] Update text
---
tasmota/language/af_AF.h | 2 +-
tasmota/language/bg_BG.h | 2 +-
tasmota/language/ca_AD.h | 2 +-
tasmota/language/cs_CZ.h | 2 +-
tasmota/language/de_DE.h | 2 +-
tasmota/language/el_GR.h | 2 +-
tasmota/language/en_GB.h | 2 +-
tasmota/language/es_ES.h | 2 +-
tasmota/language/fr_FR.h | 2 +-
tasmota/language/fy_NL.h | 2 +-
tasmota/language/he_HE.h | 2 +-
tasmota/language/hu_HU.h | 2 +-
tasmota/language/it_IT.h | 2 +-
tasmota/language/ko_KO.h | 2 +-
tasmota/language/nl_NL.h | 2 +-
tasmota/language/pl_PL.h | 2 +-
tasmota/language/pt_BR.h | 2 +-
tasmota/language/pt_PT.h | 2 +-
tasmota/language/ro_RO.h | 2 +-
tasmota/language/ru_RU.h | 2 +-
tasmota/language/sk_SK.h | 2 +-
tasmota/language/sv_SE.h | 2 +-
tasmota/language/tr_TR.h | 2 +-
tasmota/language/uk_UA.h | 2 +-
tasmota/language/vi_VN.h | 2 +-
tasmota/language/zh_CN.h | 2 +-
tasmota/language/zh_TW.h | 2 +-
27 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h
index 775225aa9..771d82841 100644
--- a/tasmota/language/af_AF.h
+++ b/tasmota/language/af_AF.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h
index 0773fdca8..742aa1f7b 100644
--- a/tasmota/language/bg_BG.h
+++ b/tasmota/language/bg_BG.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h
index 9c4059527..5321a8133 100644
--- a/tasmota/language/ca_AD.h
+++ b/tasmota/language/ca_AD.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h
index 2fbd249e7..844d213c5 100644
--- a/tasmota/language/cs_CZ.h
+++ b/tasmota/language/cs_CZ.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h
index c8e12703c..ece2fcdc1 100644
--- a/tasmota/language/de_DE.h
+++ b/tasmota/language/de_DE.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Puls"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h
index 20f08390f..bd2449aaf 100644
--- a/tasmota/language/el_GR.h
+++ b/tasmota/language/el_GR.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h
index 21ec9c0b0..12af992c7 100644
--- a/tasmota/language/en_GB.h
+++ b/tasmota/language/en_GB.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h
index d584a7d54..313a21120 100644
--- a/tasmota/language/es_ES.h
+++ b/tasmota/language/es_ES.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "Cruce por cero"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h
index 5e52bdc6b..28b32668e 100644
--- a/tasmota/language/fr_FR.h
+++ b/tasmota/language/fr_FR.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h
index 9166433c5..52afc029d 100644
--- a/tasmota/language/fy_NL.h
+++ b/tasmota/language/fy_NL.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h
index 5d03130d0..e1ee3fc63 100644
--- a/tasmota/language/he_HE.h
+++ b/tasmota/language/he_HE.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h
index dd3568f2f..702bed300 100644
--- a/tasmota/language/hu_HU.h
+++ b/tasmota/language/hu_HU.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h
index c714877c6..f6d511e63 100644
--- a/tasmota/language/it_IT.h
+++ b/tasmota/language/it_IT.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "Impulsi ZC"
#define D_SENSOR_HALLEFFECT "Effetto hall"
#define D_SENSOR_EPD_DATA "EPD - Dati"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX - INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx - Int"
#define D_SENSOR_MCP2515_CS "MCP2515 - CS"
#define D_SENSOR_HRG15_RX "HRG15 - RX"
#define D_SENSOR_HRG15_TX "HRG15 - TX"
diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h
index 3ba816172..4774242e7 100644
--- a/tasmota/language/ko_KO.h
+++ b/tasmota/language/ko_KO.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h
index 4f98daabd..161d5ee14 100644
--- a/tasmota/language/nl_NL.h
+++ b/tasmota/language/nl_NL.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h
index 1870701c3..37ced0ef5 100644
--- a/tasmota/language/pl_PL.h
+++ b/tasmota/language/pl_PL.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "Efekt Halla"
#define D_SENSOR_EPD_DATA "EPD Dane"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h
index 893bd6d81..13520019a 100644
--- a/tasmota/language/pt_BR.h
+++ b/tasmota/language/pt_BR.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "Efeito Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h
index 987d4c7ac..a7b967fcf 100644
--- a/tasmota/language/pt_PT.h
+++ b/tasmota/language/pt_PT.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "Efeito Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h
index d2f3424a6..5b73135e6 100644
--- a/tasmota/language/ro_RO.h
+++ b/tasmota/language/ro_RO.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h
index 2213c198f..e4a3b62bb 100644
--- a/tasmota/language/ru_RU.h
+++ b/tasmota/language/ru_RU.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h
index 544a735ce..b825a793b 100644
--- a/tasmota/language/sk_SK.h
+++ b/tasmota/language/sk_SK.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h
index cbf988d31..61adf33c3 100644
--- a/tasmota/language/sv_SE.h
+++ b/tasmota/language/sv_SE.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h
index 456ae8497..924b1dc27 100644
--- a/tasmota/language/tr_TR.h
+++ b/tasmota/language/tr_TR.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h
index 8cbbeedff..6ff362dc2 100644
--- a/tasmota/language/uk_UA.h
+++ b/tasmota/language/uk_UA.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h
index 5061c63b4..57b6738d8 100644
--- a/tasmota/language/vi_VN.h
+++ b/tasmota/language/vi_VN.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h
index dbc694d6c..8c6f60420 100644
--- a/tasmota/language/zh_CN.h
+++ b/tasmota/language/zh_CN.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h
index 76ec48fa6..cf2ac7d68 100644
--- a/tasmota/language/zh_TW.h
+++ b/tasmota/language/zh_TW.h
@@ -895,7 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
-#define D_SENSOR_MCP23XXX_INT "MCP23XXX INT"
+#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
From 90dc644412d40b61a2172fa224b7a8f54f75f4c4 Mon Sep 17 00:00:00 2001
From: gemu
Date: Sun, 19 Feb 2023 11:30:54 +0100
Subject: [PATCH 011/227] make v1 configurable (#17987)
---
lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp b/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp
index 9f6fe4f74..94dfb9ae7 100644
--- a/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp
+++ b/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp
@@ -26,9 +26,12 @@
#include
#include "epd2in9.h"
+#include "tasmota_options.h"
-
+#ifndef EPD_29_V1
#define EPD_29_V2
+#endif
+
//#define BUSY_PIN 16
From f0eef7771feb5d4fffd867045369ef433864aa2e Mon Sep 17 00:00:00 2001
From: Flobul
Date: Sun, 19 Feb 2023 14:09:12 +0100
Subject: [PATCH 012/227] add BLE Qingping CGDK2 (#17981)
* add CGDK2
* Update xsns_62_esp32_mi_ble.ino
* Update xsns_62_esp32_mi_ble.ino
---
.../xsns_62_esp32_mi_ble.ino | 71 +++++++++++++++++--
1 file changed, 65 insertions(+), 6 deletions(-)
diff --git a/tasmota/tasmota_xsns_sensor/xsns_62_esp32_mi_ble.ino b/tasmota/tasmota_xsns_sensor/xsns_62_esp32_mi_ble.ino
index d1a0ebcb6..6f5a9d124 100644
--- a/tasmota/tasmota_xsns_sensor/xsns_62_esp32_mi_ble.ino
+++ b/tasmota/tasmota_xsns_sensor/xsns_62_esp32_mi_ble.ino
@@ -304,6 +304,19 @@ struct PVVXPacket_t {
uint8_t flags;
};
+struct CGDK2Packet_t {
+ //uint8_t size; // = 17
+ uint16_t framedata;
+ uint8_t MAC[6]; // [0] - lo, .. [6] - hi digits
+ uint16_t devicetype;
+ int16_t temperature; // x 0.1 degree
+ uint16_t humidity; // x 0.01 %
+ uint16_t battery_mv; // mV
+ uint8_t battery_level; // 0..100 %
+ uint8_t counter; // measurement count
+ uint8_t flags;
+};
+
struct MiScaleV1Packet_t {
//uint8_t size; // = 14
//uint8_t uid; // = 0x16, 16-bit UUID
@@ -469,8 +482,9 @@ void (*const MI32_Commands[])(void) PROGMEM = {
#define MI_DOOR 14
#define MI_SCALE_V1 15
#define MI_SCALE_V2 16
+#define MI_CGDK2 17
-#define MI_MI32_TYPES 16 //count this manually
+#define MI_MI32_TYPES 17 //count this manually
const uint16_t kMI32DeviceID[MI_MI32_TYPES]={
0x0000, // Unkown
@@ -488,7 +502,8 @@ const uint16_t kMI32DeviceID[MI_MI32_TYPES]={
0x0a1c, // ATC -> this is a fake ID
0x098b, // door/window sensor
0x181d, // Mi Scale V1
- 0x181b // Mi Scale V2
+ 0x181b, // Mi Scale V2
+ 0x066f, // CGDK2
};
const char kMI32DeviceType0[] PROGMEM = "Unknown";
@@ -507,7 +522,8 @@ const char kMI32DeviceType12[] PROGMEM ="ATC";
const char kMI32DeviceType13[] PROGMEM ="DOOR";
const char kMI32DeviceType14[] PROGMEM ="MISCALEV1";
const char kMI32DeviceType15[] PROGMEM ="MISCALEV2";
-const char * kMI32DeviceType[] PROGMEM = {kMI32DeviceType0,kMI32DeviceType1,kMI32DeviceType2,kMI32DeviceType3,kMI32DeviceType4,kMI32DeviceType5,kMI32DeviceType6,kMI32DeviceType7,kMI32DeviceType8,kMI32DeviceType9,kMI32DeviceType10,kMI32DeviceType11,kMI32DeviceType12,kMI32DeviceType13,kMI32DeviceType14,kMI32DeviceType15};
+const char kMI32DeviceType16[] PROGMEM ="CGDK2";
+const char * kMI32DeviceType[] PROGMEM = {kMI32DeviceType0,kMI32DeviceType1,kMI32DeviceType2,kMI32DeviceType3,kMI32DeviceType4,kMI32DeviceType5,kMI32DeviceType6,kMI32DeviceType7,kMI32DeviceType8,kMI32DeviceType9,kMI32DeviceType10,kMI32DeviceType11,kMI32DeviceType12,kMI32DeviceType13,kMI32DeviceType14,kMI32DeviceType15,kMI32DeviceType16};
typedef int BATREAD_FUNCTION(int slot);
typedef int UNITWRITE_FUNCTION(int slot, int unit);
@@ -1073,9 +1089,16 @@ int MI32advertismentCallback(BLE_ESP32::ble_advertisment_t *pStruct)
TasAutoMutex localmutex(&slotmutex, "Mi32AdCB2");
switch(UUID){
case 0xfe95: // std MI?
- case 0xfdcd: // CGD1?
{
- MI32ParseResponse(ServiceData, ServiceDataLength, addr, RSSI);
+ MI32ParseResponse(ServiceData, ServiceDataLength, addr, RSSI);
+ } break;
+ case 0xfdcd: // CGD1 & CGDK2
+ {
+ if (ServiceDataLength == 17){ // CGDK2
+ MI32ParseCGDK2Packet(ServiceData, ServiceDataLength, addr, RSSI);
+ } else {
+ MI32ParseResponse(ServiceData, ServiceDataLength, addr, RSSI);
+ }
} break;
case 0x181a: { //ATC
MI32ParseATCPacket(ServiceData, ServiceDataLength, addr, RSSI);
@@ -1758,6 +1781,42 @@ void MI32ParseATCPacket(const uint8_t * _buf, uint32_t length, const uint8_t *ad
}
}
+void MI32ParseCGDK2Packet(const uint8_t * _buf, uint32_t length, const uint8_t *addr, int RSSI){
+ CGDK2Packet_t *cgdk_packet = (CGDK2Packet_t*)_buf;
+
+ if (length == 17){ //
+ uint8_t addrrev[6];
+ memcpy(addrrev, addr, 6);
+ MI32_ReverseMAC(addrrev);
+
+ if (!memcmp(addrrev, cgdk_packet->MAC, 6)){
+ uint32_t _slot = MIBLEgetSensorSlot(addr, 0x066f, cgdk_packet->counter); // This must be a hard-coded fake ID
+ if(_slot==0xff) return;
+
+ if ((_slot >= 0) && (_slot < MIBLEsensors.size())){
+ if (BLE_ESP32::BLEDebugMode > 0) AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s:pvvx at slot %u"), kMI32DeviceType[MIBLEsensors[_slot].type-1],_slot);
+ MIBLEsensors[_slot].RSSI=RSSI;
+ MIBLEsensors[_slot].needkey=KEY_NOT_REQUIRED;
+ MIBLEsensors[_slot].temp = (float)(cgdk_packet->temperature)/10.0f;
+ MIBLEsensors[_slot].hum = (float)(cgdk_packet->humidity)/10.0f;
+ MIBLEsensors[_slot].eventType.tempHum = 1;
+ MIBLEsensors[_slot].bat = cgdk_packet->battery_level;
+ MIBLEsensors[_slot].eventType.bat = 1;
+
+ if(MI32.option.directBridgeMode) {
+ MIBLEsensors[_slot].shallSendMQTT = 1;
+ MI32.mode.shallTriggerTele = 1;
+ }
+ }
+ return;
+ } else {
+ AddLog(LOG_LEVEL_ERROR, PSTR("M32: CGDK2 packet mac mismatch - ignored?"));
+ return;
+ }
+ }
+
+}
+
void MI32ParseMiScalePacket(const uint8_t * _buf, uint32_t length, const uint8_t *addr, int RSSI, int UUID) {
MiScaleV1Packet_t *_packetV1 = (MiScaleV1Packet_t*)_buf;
MiScaleV2Packet_t *_packetV2 = (MiScaleV2Packet_t*)_buf;
@@ -3569,4 +3628,4 @@ bool Xsns62(uint32_t function)
#endif // CONFIG_IDF_TARGET_ESP32 or CONFIG_IDF_TARGET_ESP32C3
#endif // ESP32
-#endif
\ No newline at end of file
+#endif
From a994c71de41fba43d5a9d9139fb8169165e6f5ac Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sun, 19 Feb 2023 15:28:20 +0100
Subject: [PATCH 013/227] Refactor device_present calculation
---
tasmota/tasmota_support/support_button_v4.ino | 44 ++++++++++++++++---
tasmota/tasmota_support/support_tasmota.ino | 32 +++++++-------
.../tasmota_xdrv_driver/xdrv_66_tm1638.ino | 16 +------
3 files changed, 55 insertions(+), 37 deletions(-)
diff --git a/tasmota/tasmota_support/support_button_v4.ino b/tasmota/tasmota_support/support_button_v4.ino
index a92963270..86967e84a 100644
--- a/tasmota/tasmota_support/support_button_v4.ino
+++ b/tasmota/tasmota_support/support_button_v4.ino
@@ -233,6 +233,9 @@ void ButtonProbe(void) {
void ButtonInit(void) {
bool ac_detect = (Settings->button_debounce % 10 == 9);
Button.used = 0;
+/*
+ uint32_t last_used = 0;
+*/
for (uint32_t i = 0; i < MAX_KEYS_SET; i++) {
Button.last_state[i] = NOT_PRESSED;
#ifdef ESP8266
@@ -261,14 +264,13 @@ void ButtonInit(void) {
}
#endif // USE_ADC
else {
+ // Insert, Skip and Append virtual buttons
XdrvMailbox.index = i;
if (XdrvCall(FUNC_ADD_BUTTON)) {
- /*
- At entry:
- XdrvMailbox.index = button index
- At exit:
- XdrvMailbox.index bit 0 = current state
- */
+ // At entry:
+ // XdrvMailbox.index = button index
+ // At exit:
+ // XdrvMailbox.index bit 0 = current state
bitSet(Button.used, i); // This pin is used
bool state = (XdrvMailbox.index &1);
ButtonSetVirtualPinState(i, state); // Virtual hardware pin state
@@ -280,8 +282,38 @@ void ButtonInit(void) {
}
}
Button.debounced_state[i] = Button.last_state[i];
+/*
+ if (bitRead(Button.used, i)) {
+ last_used = i +1;
+ }
+*/
}
+/*
+ // Append virtual buttons
+ for (uint32_t i = last_used; i < MAX_KEYS_SET; i++) {
+ Button.last_state[i] = NOT_PRESSED;
+
+ XdrvMailbox.index = i;
+ if (XdrvCall(FUNC_ADD_BUTTON)) {
+ // At entry:
+ // XdrvMailbox.index = button index
+ // At exit:
+ // XdrvMailbox.index bit 0 = current state
+ bitSet(Button.used, i); // This pin is used
+ bool state = (XdrvMailbox.index &1);
+ ButtonSetVirtualPinState(i, state); // Virtual hardware pin state
+ if (!state) { ButtonInvertFlag(i); } // Set inverted flag
+ // last_state[i] must be 1 to indicate no button pressed
+ Button.last_state[i] = (bitRead(Button.virtual_pin, i) != bitRead(Button.inverted_mask, i));
+
+ AddLog(LOG_LEVEL_DEBUG, PSTR("BTN: Add vButton%d, State %d"), i +1, Button.last_state[i]);
+ }
+
+ Button.debounced_state[i] = Button.last_state[i];
+ }
+*/
+
// AddLog(LOG_LEVEL_DEBUG, PSTR("BTN: vPinUsed %08X, State %08X, Invert %08X"), Button.used, Button.virtual_pin, Button.inverted_mask);
if (Button.used) { // Any bit set
diff --git a/tasmota/tasmota_support/support_tasmota.ino b/tasmota/tasmota_support/support_tasmota.ino
index 416ee8c0e..21da21b1f 100644
--- a/tasmota/tasmota_support/support_tasmota.ino
+++ b/tasmota/tasmota_support/support_tasmota.ino
@@ -2196,6 +2196,22 @@ void GpioInit(void)
XdrvCall(FUNC_I2C_INIT); // Init RTC
TasmotaGlobal.devices_present = 0;
+ uint32_t bi_device = 0;
+ for (uint32_t i = 0; i < MAX_RELAYS; i++) {
+ if (PinUsed(GPIO_REL1, i)) {
+ TasmotaGlobal.devices_present++;
+#ifdef ESP8266
+ if (EXS_RELAY == TasmotaGlobal.module_type) {
+ if (i &1) { TasmotaGlobal.devices_present--; }
+ }
+#endif // ESP8266
+ if (bitRead(TasmotaGlobal.rel_bistable, i)) {
+ if (bi_device &1) { TasmotaGlobal.devices_present--; }
+ bi_device++;
+ }
+ }
+ }
+
TasmotaGlobal.light_type = LT_BASIC; // Use basic PWM control if SetOption15 = 0
XsnsCall(FUNC_MODULE_INIT);
@@ -2225,22 +2241,6 @@ void GpioInit(void)
GpioInitPwm();
- uint32_t bi_device = 0;
- for (uint32_t i = 0; i < MAX_RELAYS; i++) {
- if (PinUsed(GPIO_REL1, i)) {
- TasmotaGlobal.devices_present++;
-#ifdef ESP8266
- if (EXS_RELAY == TasmotaGlobal.module_type) {
- if (i &1) { TasmotaGlobal.devices_present--; }
- }
-#endif // ESP8266
- if (bitRead(TasmotaGlobal.rel_bistable, i)) {
- if (bi_device &1) { TasmotaGlobal.devices_present--; }
- bi_device++;
- }
- }
- }
-
for (uint32_t i = 0; i < MAX_LEDS; i++) {
if (PinUsed(GPIO_LED1, i)) {
#ifdef USE_ARILUX_RF
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_66_tm1638.ino b/tasmota/tasmota_xdrv_driver/xdrv_66_tm1638.ino
index 41dc91d10..f693de10e 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_66_tm1638.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_66_tm1638.ino
@@ -163,21 +163,7 @@ void TmInit(void) {
}
digitalWrite(Tm1638.strobe_pin, HIGH);
- // Dirty hack to offset TM1638 leds from GPIO relays
- // At this time in code sequence the number of GPIO relays has not been established
- uint32_t bi_device = 0;
- uint32_t devices_present = 0;
- for (uint32_t i = 0; i < MAX_RELAYS; i++) {
- if (PinUsed(GPIO_REL1, i)) {
- devices_present++;
- if (bitRead(TasmotaGlobal.rel_bistable, i)) {
- if (bi_device &1) { devices_present--; }
- bi_device++;
- }
- }
- }
-
- Tm1638.led_offset = devices_present;
+ Tm1638.led_offset = TasmotaGlobal.devices_present;
TasmotaGlobal.devices_present += TM1638_MAX_LEDS;
Tm1638.key_offset = -1;
Tm1638.detected = true;
From a26458a1363a26fa27029c820aec52d148e78c2e Mon Sep 17 00:00:00 2001
From: s-hadinger <49731213+s-hadinger@users.noreply.github.com>
Date: Sun, 19 Feb 2023 21:37:33 +0100
Subject: [PATCH 014/227] Matter read/write and commands (#18000)
---
.../generate/Matter_generate_c.be | 7 +-
.../generate/be_matter_clusters.h | 1604 ++++-----
.../berry_matter/src/be_matter_module.c | 53 +-
.../src/embedded/Matter_Commissioning.be | 166 +-
.../src/embedded/Matter_Commissioning_Data.be | 8 +-
.../src/embedded/Matter_Device.be | 204 +-
.../berry_matter/src/embedded/Matter_IM.be | 463 ++-
.../src/embedded/Matter_IM_Data.be | 14 +-
.../src/embedded/Matter_IM_Message.be | 281 ++
.../src/embedded/Matter_IM_Subscription.be | 180 +
.../src/embedded/Matter_Message.be | 97 +-
.../src/embedded/Matter_MessageHandler.be | 31 +-
.../src/embedded/Matter_Plugin.be | 2 +-
.../src/embedded/Matter_Plugin_OnOff.be | 156 +
.../src/embedded/Matter_Plugin_Relay.be | 93 -
...r_Plugin_core.be => Matter_Plugin_Root.be} | 152 +-
.../src/embedded/Matter_Session.be | 10 +-
.../berry_matter/src/embedded/Matter_TLV.be | 266 +-
.../src/embedded/Matter_UDPServer.be | 8 +-
.../solidified_Matter_Commissioning.h | 1784 +++++-----
.../solidified_Matter_Commissioning_Data.h | 91 +-
.../src/solidify/solidified_Matter_Device.h | 3108 +++++++++--------
.../src/solidify/solidified_Matter_IM.h | 2476 +++++++------
.../src/solidify/solidified_Matter_IM_Data.h | 112 +-
.../solidify/solidified_Matter_IM_Message.h | 1024 ++++++
.../solidified_Matter_IM_Subscription.h | 585 ++++
.../src/solidify/solidified_Matter_Message.h | 1459 ++++----
.../solidified_Matter_MessageHandler.h | 721 ++--
.../src/solidify/solidified_Matter_Plugin.h | 8 +-
.../solidify/solidified_Matter_Plugin_OnOff.h | 389 +++
.../solidify/solidified_Matter_Plugin_Relay.h | 246 --
...core.h => solidified_Matter_Plugin_Root.h} | 2137 +++++++-----
.../src/solidify/solidified_Matter_Session.h | 1848 +++++-----
.../src/solidify/solidified_Matter_TLV.h | 2104 ++++++-----
.../solidify/solidified_Matter_UDPServer.h | 85 +-
35 files changed, 13060 insertions(+), 8912 deletions(-)
create mode 100644 lib/libesp32/berry_matter/src/embedded/Matter_IM_Message.be
create mode 100644 lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be
create mode 100644 lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
delete mode 100644 lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Relay.be
rename lib/libesp32/berry_matter/src/embedded/{Matter_Plugin_core.be => Matter_Plugin_Root.be} (78%)
create mode 100644 lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
create mode 100644 lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
create mode 100644 lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
delete mode 100644 lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Relay.h
rename lib/libesp32/berry_matter/src/solidify/{solidified_Matter_Plugin_core.h => solidified_Matter_Plugin_Root.h} (76%)
diff --git a/lib/libesp32/berry_matter/generate/Matter_generate_c.be b/lib/libesp32/berry_matter/generate/Matter_generate_c.be
index 6c9c13170..86155ec1c 100644
--- a/lib/libesp32/berry_matter/generate/Matter_generate_c.be
+++ b/lib/libesp32/berry_matter/generate/Matter_generate_c.be
@@ -59,6 +59,8 @@ fprint("* Compact form for attributes and clusters")
fprint("*")
fprint("* Generated content, do not edit")
fprint("\\*********************************************************************************/")
+fprint("#include ")
+fprint("#include ")
fprint()
fprint("typedef struct {")
fprint(" uint16_t id;")
@@ -89,7 +91,10 @@ for cl:cl_ids
var attr_ids_local = k2l(attr_id_name)
for attr_id:attr_ids_local
- fprint(string.format(' { 0x%04X, %i, 0x%02X, "%s" },', attr_id, 0, 0, attributes[attr_id]['attributeName']))
+ var reportable = attributes[attr_id].find('reportable', false)
+ var writable = attributes[attr_id].find('writable', false)
+ var flags = (writable ? 0x01 : 0x00) | (reportable ? 0x02 : 0x00)
+ fprint(string.format(' { 0x%04X, %i, 0x%02X, "%s" },', attr_id, 0, flags, attributes[attr_id]['attributeName']))
end
fprint(' { 0xFFFF, 0, 0x00, NULL },')
fprint("};")
diff --git a/lib/libesp32/berry_matter/generate/be_matter_clusters.h b/lib/libesp32/berry_matter/generate/be_matter_clusters.h
index fc9171ce6..e25982844 100644
--- a/lib/libesp32/berry_matter/generate/be_matter_clusters.h
+++ b/lib/libesp32/berry_matter/generate/be_matter_clusters.h
@@ -26,13 +26,13 @@ typedef struct {
} matter_cluster_t;
const matter_attribute_t matter_Attributes_0003[] = {
- { 0x0000, 0, 0x00, "IdentifyTime" },
- { 0x0001, 0, 0x00, "IdentifyType" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "IdentifyTime" },
+ { 0x0001, 0, 0x02, "IdentifyType" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -43,12 +43,12 @@ const matter_command_t matter_Commands_0003[] = {
};
const matter_attribute_t matter_Attributes_0004[] = {
- { 0x0000, 0, 0x00, "NameSupport" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "NameSupport" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -63,16 +63,16 @@ const matter_command_t matter_Commands_0004[] = {
};
const matter_attribute_t matter_Attributes_0005[] = {
- { 0x0000, 0, 0x00, "SceneCount" },
- { 0x0001, 0, 0x00, "CurrentScene" },
- { 0x0002, 0, 0x00, "CurrentGroup" },
- { 0x0003, 0, 0x00, "SceneValid" },
- { 0x0004, 0, 0x00, "NameSupport" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "SceneCount" },
+ { 0x0001, 0, 0x02, "CurrentScene" },
+ { 0x0002, 0, 0x02, "CurrentGroup" },
+ { 0x0003, 0, 0x02, "SceneValid" },
+ { 0x0004, 0, 0x02, "NameSupport" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -88,16 +88,16 @@ const matter_command_t matter_Commands_0005[] = {
};
const matter_attribute_t matter_Attributes_0006[] = {
- { 0x0000, 0, 0x00, "OnOff" },
- { 0x4000, 0, 0x00, "GlobalSceneControl" },
- { 0x4001, 0, 0x00, "OnTime" },
- { 0x4002, 0, 0x00, "OffWaitTime" },
- { 0x4003, 0, 0x00, "StartUpOnOff" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "OnOff" },
+ { 0x4000, 0, 0x02, "GlobalSceneControl" },
+ { 0x4001, 0, 0x03, "OnTime" },
+ { 0x4002, 0, 0x03, "OffWaitTime" },
+ { 0x4003, 0, 0x03, "StartUpOnOff" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -112,13 +112,13 @@ const matter_command_t matter_Commands_0006[] = {
};
const matter_attribute_t matter_Attributes_0007[] = {
- { 0x0000, 0, 0x00, "SwitchType" },
- { 0x0010, 0, 0x00, "SwitchActions" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "SwitchType" },
+ { 0x0010, 0, 0x03, "SwitchActions" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -127,25 +127,25 @@ const matter_command_t matter_Commands_0007[] = {
};
const matter_attribute_t matter_Attributes_0008[] = {
- { 0x0000, 0, 0x00, "CurrentLevel" },
- { 0x0001, 0, 0x00, "RemainingTime" },
- { 0x0002, 0, 0x00, "MinLevel" },
- { 0x0003, 0, 0x00, "MaxLevel" },
- { 0x0004, 0, 0x00, "CurrentFrequency" },
- { 0x0005, 0, 0x00, "MinFrequency" },
- { 0x0006, 0, 0x00, "MaxFrequency" },
- { 0x000F, 0, 0x00, "Options" },
- { 0x0010, 0, 0x00, "OnOffTransitionTime" },
- { 0x0011, 0, 0x00, "OnLevel" },
- { 0x0012, 0, 0x00, "OnTransitionTime" },
- { 0x0013, 0, 0x00, "OffTransitionTime" },
- { 0x0014, 0, 0x00, "DefaultMoveRate" },
- { 0x4000, 0, 0x00, "StartUpCurrentLevel" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "CurrentLevel" },
+ { 0x0001, 0, 0x02, "RemainingTime" },
+ { 0x0002, 0, 0x02, "MinLevel" },
+ { 0x0003, 0, 0x02, "MaxLevel" },
+ { 0x0004, 0, 0x02, "CurrentFrequency" },
+ { 0x0005, 0, 0x02, "MinFrequency" },
+ { 0x0006, 0, 0x02, "MaxFrequency" },
+ { 0x000F, 0, 0x03, "Options" },
+ { 0x0010, 0, 0x03, "OnOffTransitionTime" },
+ { 0x0011, 0, 0x03, "OnLevel" },
+ { 0x0012, 0, 0x03, "OnTransitionTime" },
+ { 0x0013, 0, 0x03, "OffTransitionTime" },
+ { 0x0014, 0, 0x03, "DefaultMoveRate" },
+ { 0x4000, 0, 0x03, "StartUpCurrentLevel" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -162,14 +162,14 @@ const matter_command_t matter_Commands_0008[] = {
};
const matter_attribute_t matter_Attributes_000F[] = {
- { 0x0051, 0, 0x00, "OutOfService" },
- { 0x0055, 0, 0x00, "PresentValue" },
- { 0x006F, 0, 0x00, "StatusFlags" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0051, 0, 0x03, "OutOfService" },
+ { 0x0055, 0, 0x03, "PresentValue" },
+ { 0x006F, 0, 0x02, "StatusFlags" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -178,15 +178,15 @@ const matter_command_t matter_Commands_000F[] = {
};
const matter_attribute_t matter_Attributes_001D[] = {
- { 0x0000, 0, 0x00, "DeviceTypeList" },
- { 0x0001, 0, 0x00, "ServerList" },
- { 0x0002, 0, 0x00, "ClientList" },
- { 0x0003, 0, 0x00, "PartsList" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "DeviceTypeList" },
+ { 0x0001, 0, 0x02, "ServerList" },
+ { 0x0002, 0, 0x02, "ClientList" },
+ { 0x0003, 0, 0x02, "PartsList" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -195,12 +195,12 @@ const matter_command_t matter_Commands_001D[] = {
};
const matter_attribute_t matter_Attributes_001E[] = {
- { 0x0000, 0, 0x00, "Binding" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "Binding" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -209,16 +209,16 @@ const matter_command_t matter_Commands_001E[] = {
};
const matter_attribute_t matter_Attributes_001F[] = {
- { 0x0000, 0, 0x00, "Acl" },
- { 0x0001, 0, 0x00, "Extension" },
- { 0x0002, 0, 0x00, "SubjectsPerAccessControlEntry" },
- { 0x0003, 0, 0x00, "TargetsPerAccessControlEntry" },
- { 0x0004, 0, 0x00, "AccessControlEntriesPerFabric" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "Acl" },
+ { 0x0001, 0, 0x03, "Extension" },
+ { 0x0002, 0, 0x02, "SubjectsPerAccessControlEntry" },
+ { 0x0003, 0, 0x02, "TargetsPerAccessControlEntry" },
+ { 0x0004, 0, 0x02, "AccessControlEntriesPerFabric" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -227,14 +227,14 @@ const matter_command_t matter_Commands_001F[] = {
};
const matter_attribute_t matter_Attributes_0025[] = {
- { 0x0000, 0, 0x00, "ActionList" },
- { 0x0001, 0, 0x00, "EndpointLists" },
- { 0x0002, 0, 0x00, "SetupURL" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "ActionList" },
+ { 0x0001, 0, 0x02, "EndpointLists" },
+ { 0x0002, 0, 0x02, "SetupURL" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -255,31 +255,31 @@ const matter_command_t matter_Commands_0025[] = {
};
const matter_attribute_t matter_Attributes_0028[] = {
- { 0x0000, 0, 0x00, "DataModelRevision" },
- { 0x0001, 0, 0x00, "VendorName" },
- { 0x0002, 0, 0x00, "VendorID" },
- { 0x0003, 0, 0x00, "ProductName" },
- { 0x0004, 0, 0x00, "ProductID" },
- { 0x0005, 0, 0x00, "NodeLabel" },
- { 0x0006, 0, 0x00, "Location" },
- { 0x0007, 0, 0x00, "HardwareVersion" },
- { 0x0008, 0, 0x00, "HardwareVersionString" },
- { 0x0009, 0, 0x00, "SoftwareVersion" },
- { 0x000A, 0, 0x00, "SoftwareVersionString" },
- { 0x000B, 0, 0x00, "ManufacturingDate" },
- { 0x000C, 0, 0x00, "PartNumber" },
- { 0x000D, 0, 0x00, "ProductURL" },
- { 0x000E, 0, 0x00, "ProductLabel" },
- { 0x000F, 0, 0x00, "SerialNumber" },
- { 0x0010, 0, 0x00, "LocalConfigDisabled" },
- { 0x0011, 0, 0x00, "Reachable" },
- { 0x0012, 0, 0x00, "UniqueID" },
- { 0x0013, 0, 0x00, "CapabilityMinima" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "DataModelRevision" },
+ { 0x0001, 0, 0x02, "VendorName" },
+ { 0x0002, 0, 0x02, "VendorID" },
+ { 0x0003, 0, 0x02, "ProductName" },
+ { 0x0004, 0, 0x02, "ProductID" },
+ { 0x0005, 0, 0x03, "NodeLabel" },
+ { 0x0006, 0, 0x03, "Location" },
+ { 0x0007, 0, 0x02, "HardwareVersion" },
+ { 0x0008, 0, 0x02, "HardwareVersionString" },
+ { 0x0009, 0, 0x02, "SoftwareVersion" },
+ { 0x000A, 0, 0x02, "SoftwareVersionString" },
+ { 0x000B, 0, 0x02, "ManufacturingDate" },
+ { 0x000C, 0, 0x02, "PartNumber" },
+ { 0x000D, 0, 0x02, "ProductURL" },
+ { 0x000E, 0, 0x02, "ProductLabel" },
+ { 0x000F, 0, 0x02, "SerialNumber" },
+ { 0x0010, 0, 0x03, "LocalConfigDisabled" },
+ { 0x0011, 0, 0x02, "Reachable" },
+ { 0x0012, 0, 0x02, "UniqueID" },
+ { 0x0013, 0, 0x02, "CapabilityMinima" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -288,9 +288,9 @@ const matter_command_t matter_Commands_0028[] = {
};
const matter_attribute_t matter_Attributes_0029[] = {
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -302,13 +302,13 @@ const matter_command_t matter_Commands_0029[] = {
};
const matter_attribute_t matter_Attributes_002A[] = {
- { 0x0000, 0, 0x00, "DefaultOtaProviders" },
- { 0x0001, 0, 0x00, "UpdatePossible" },
- { 0x0002, 0, 0x00, "UpdateState" },
- { 0x0003, 0, 0x00, "UpdateStateProgress" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "DefaultOtaProviders" },
+ { 0x0001, 0, 0x02, "UpdatePossible" },
+ { 0x0002, 0, 0x02, "UpdateState" },
+ { 0x0003, 0, 0x02, "UpdateStateProgress" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -318,12 +318,12 @@ const matter_command_t matter_Commands_002A[] = {
};
const matter_attribute_t matter_Attributes_002B[] = {
- { 0x0000, 0, 0x00, "ActiveLocale" },
- { 0x0001, 0, 0x00, "SupportedLocales" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "ActiveLocale" },
+ { 0x0001, 0, 0x02, "SupportedLocales" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -332,13 +332,13 @@ const matter_command_t matter_Commands_002B[] = {
};
const matter_attribute_t matter_Attributes_002C[] = {
- { 0x0000, 0, 0x00, "HourFormat" },
- { 0x0001, 0, 0x00, "ActiveCalendarType" },
- { 0x0002, 0, 0x00, "SupportedCalendarTypes" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "HourFormat" },
+ { 0x0001, 0, 0x03, "ActiveCalendarType" },
+ { 0x0002, 0, 0x02, "SupportedCalendarTypes" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -347,10 +347,10 @@ const matter_command_t matter_Commands_002C[] = {
};
const matter_attribute_t matter_Attributes_002D[] = {
- { 0x0000, 0, 0x00, "TemperatureUnit" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "TemperatureUnit" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -359,12 +359,12 @@ const matter_command_t matter_Commands_002D[] = {
};
const matter_attribute_t matter_Attributes_002E[] = {
- { 0x0000, 0, 0x00, "Sources" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Sources" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -373,42 +373,42 @@ const matter_command_t matter_Commands_002E[] = {
};
const matter_attribute_t matter_Attributes_002F[] = {
- { 0x0000, 0, 0x00, "Status" },
- { 0x0001, 0, 0x00, "Order" },
- { 0x0002, 0, 0x00, "Description" },
- { 0x0003, 0, 0x00, "WiredAssessedInputVoltage" },
- { 0x0004, 0, 0x00, "WiredAssessedInputFrequency" },
- { 0x0005, 0, 0x00, "WiredCurrentType" },
- { 0x0006, 0, 0x00, "WiredAssessedCurrent" },
- { 0x0007, 0, 0x00, "WiredNominalVoltage" },
- { 0x0008, 0, 0x00, "WiredMaximumCurrent" },
- { 0x0009, 0, 0x00, "WiredPresent" },
- { 0x000A, 0, 0x00, "ActiveWiredFaults" },
- { 0x000B, 0, 0x00, "BatVoltage" },
- { 0x000C, 0, 0x00, "BatPercentRemaining" },
- { 0x000D, 0, 0x00, "BatTimeRemaining" },
- { 0x000E, 0, 0x00, "BatChargeLevel" },
- { 0x000F, 0, 0x00, "BatReplacementNeeded" },
- { 0x0010, 0, 0x00, "BatReplaceability" },
- { 0x0011, 0, 0x00, "BatPresent" },
- { 0x0012, 0, 0x00, "ActiveBatFaults" },
- { 0x0013, 0, 0x00, "BatReplacementDescription" },
- { 0x0014, 0, 0x00, "BatCommonDesignation" },
- { 0x0015, 0, 0x00, "BatANSIDesignation" },
- { 0x0016, 0, 0x00, "BatIECDesignation" },
- { 0x0017, 0, 0x00, "BatApprovedChemistry" },
- { 0x0018, 0, 0x00, "BatCapacity" },
- { 0x0019, 0, 0x00, "BatQuantity" },
- { 0x001A, 0, 0x00, "BatChargeState" },
- { 0x001B, 0, 0x00, "BatTimeToFullCharge" },
- { 0x001C, 0, 0x00, "BatFunctionalWhileCharging" },
- { 0x001D, 0, 0x00, "BatChargingCurrent" },
- { 0x001E, 0, 0x00, "ActiveBatChargeFaults" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Status" },
+ { 0x0001, 0, 0x02, "Order" },
+ { 0x0002, 0, 0x02, "Description" },
+ { 0x0003, 0, 0x02, "WiredAssessedInputVoltage" },
+ { 0x0004, 0, 0x02, "WiredAssessedInputFrequency" },
+ { 0x0005, 0, 0x02, "WiredCurrentType" },
+ { 0x0006, 0, 0x02, "WiredAssessedCurrent" },
+ { 0x0007, 0, 0x02, "WiredNominalVoltage" },
+ { 0x0008, 0, 0x02, "WiredMaximumCurrent" },
+ { 0x0009, 0, 0x02, "WiredPresent" },
+ { 0x000A, 0, 0x02, "ActiveWiredFaults" },
+ { 0x000B, 0, 0x02, "BatVoltage" },
+ { 0x000C, 0, 0x02, "BatPercentRemaining" },
+ { 0x000D, 0, 0x02, "BatTimeRemaining" },
+ { 0x000E, 0, 0x02, "BatChargeLevel" },
+ { 0x000F, 0, 0x02, "BatReplacementNeeded" },
+ { 0x0010, 0, 0x02, "BatReplaceability" },
+ { 0x0011, 0, 0x02, "BatPresent" },
+ { 0x0012, 0, 0x02, "ActiveBatFaults" },
+ { 0x0013, 0, 0x02, "BatReplacementDescription" },
+ { 0x0014, 0, 0x02, "BatCommonDesignation" },
+ { 0x0015, 0, 0x02, "BatANSIDesignation" },
+ { 0x0016, 0, 0x02, "BatIECDesignation" },
+ { 0x0017, 0, 0x02, "BatApprovedChemistry" },
+ { 0x0018, 0, 0x02, "BatCapacity" },
+ { 0x0019, 0, 0x02, "BatQuantity" },
+ { 0x001A, 0, 0x02, "BatChargeState" },
+ { 0x001B, 0, 0x02, "BatTimeToFullCharge" },
+ { 0x001C, 0, 0x02, "BatFunctionalWhileCharging" },
+ { 0x001D, 0, 0x02, "BatChargingCurrent" },
+ { 0x001E, 0, 0x02, "ActiveBatChargeFaults" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -417,16 +417,16 @@ const matter_command_t matter_Commands_002F[] = {
};
const matter_attribute_t matter_Attributes_0030[] = {
- { 0x0000, 0, 0x00, "Breadcrumb" },
- { 0x0001, 0, 0x00, "BasicCommissioningInfo" },
- { 0x0002, 0, 0x00, "RegulatoryConfig" },
- { 0x0003, 0, 0x00, "LocationCapability" },
- { 0x0004, 0, 0x00, "SupportsConcurrentConnection" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "Breadcrumb" },
+ { 0x0001, 0, 0x02, "BasicCommissioningInfo" },
+ { 0x0002, 0, 0x02, "RegulatoryConfig" },
+ { 0x0003, 0, 0x02, "LocationCapability" },
+ { 0x0004, 0, 0x02, "SupportsConcurrentConnection" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -441,18 +441,18 @@ const matter_command_t matter_Commands_0030[] = {
};
const matter_attribute_t matter_Attributes_0031[] = {
- { 0x0000, 0, 0x00, "MaxNetworks" },
- { 0x0001, 0, 0x00, "Networks" },
- { 0x0002, 0, 0x00, "ScanMaxTimeSeconds" },
- { 0x0003, 0, 0x00, "ConnectMaxTimeSeconds" },
- { 0x0004, 0, 0x00, "InterfaceEnabled" },
- { 0x0005, 0, 0x00, "LastNetworkingStatus" },
- { 0x0006, 0, 0x00, "LastNetworkID" },
- { 0x0007, 0, 0x00, "LastConnectErrorValue" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MaxNetworks" },
+ { 0x0001, 0, 0x02, "Networks" },
+ { 0x0002, 0, 0x02, "ScanMaxTimeSeconds" },
+ { 0x0003, 0, 0x02, "ConnectMaxTimeSeconds" },
+ { 0x0004, 0, 0x03, "InterfaceEnabled" },
+ { 0x0005, 0, 0x02, "LastNetworkingStatus" },
+ { 0x0006, 0, 0x02, "LastNetworkID" },
+ { 0x0007, 0, 0x02, "LastConnectErrorValue" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -467,11 +467,11 @@ const matter_command_t matter_Commands_0031[] = {
};
const matter_attribute_t matter_Attributes_0032[] = {
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -481,20 +481,20 @@ const matter_command_t matter_Commands_0032[] = {
};
const matter_attribute_t matter_Attributes_0033[] = {
- { 0x0000, 0, 0x00, "NetworkInterfaces" },
- { 0x0001, 0, 0x00, "RebootCount" },
- { 0x0002, 0, 0x00, "UpTime" },
- { 0x0003, 0, 0x00, "TotalOperationalHours" },
- { 0x0004, 0, 0x00, "BootReasons" },
- { 0x0005, 0, 0x00, "ActiveHardwareFaults" },
- { 0x0006, 0, 0x00, "ActiveRadioFaults" },
- { 0x0007, 0, 0x00, "ActiveNetworkFaults" },
- { 0x0008, 0, 0x00, "TestEventTriggersEnabled" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "NetworkInterfaces" },
+ { 0x0001, 0, 0x02, "RebootCount" },
+ { 0x0002, 0, 0x02, "UpTime" },
+ { 0x0003, 0, 0x02, "TotalOperationalHours" },
+ { 0x0004, 0, 0x02, "BootReasons" },
+ { 0x0005, 0, 0x02, "ActiveHardwareFaults" },
+ { 0x0006, 0, 0x02, "ActiveRadioFaults" },
+ { 0x0007, 0, 0x02, "ActiveNetworkFaults" },
+ { 0x0008, 0, 0x02, "TestEventTriggersEnabled" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -504,15 +504,15 @@ const matter_command_t matter_Commands_0033[] = {
};
const matter_attribute_t matter_Attributes_0034[] = {
- { 0x0000, 0, 0x00, "ThreadMetrics" },
- { 0x0001, 0, 0x00, "CurrentHeapFree" },
- { 0x0002, 0, 0x00, "CurrentHeapUsed" },
- { 0x0003, 0, 0x00, "CurrentHeapHighWatermark" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "ThreadMetrics" },
+ { 0x0001, 0, 0x02, "CurrentHeapFree" },
+ { 0x0002, 0, 0x02, "CurrentHeapUsed" },
+ { 0x0003, 0, 0x02, "CurrentHeapHighWatermark" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -522,74 +522,74 @@ const matter_command_t matter_Commands_0034[] = {
};
const matter_attribute_t matter_Attributes_0035[] = {
- { 0x0000, 0, 0x00, "Channel" },
- { 0x0001, 0, 0x00, "RoutingRole" },
- { 0x0002, 0, 0x00, "NetworkName" },
- { 0x0003, 0, 0x00, "PanId" },
- { 0x0004, 0, 0x00, "ExtendedPanId" },
- { 0x0005, 0, 0x00, "MeshLocalPrefix" },
- { 0x0006, 0, 0x00, "OverrunCount" },
- { 0x0007, 0, 0x00, "NeighborTableList" },
- { 0x0008, 0, 0x00, "RouteTableList" },
- { 0x0009, 0, 0x00, "PartitionId" },
- { 0x000A, 0, 0x00, "Weighting" },
- { 0x000B, 0, 0x00, "DataVersion" },
- { 0x000C, 0, 0x00, "StableDataVersion" },
- { 0x000D, 0, 0x00, "LeaderRouterId" },
- { 0x000E, 0, 0x00, "DetachedRoleCount" },
- { 0x000F, 0, 0x00, "ChildRoleCount" },
- { 0x0010, 0, 0x00, "RouterRoleCount" },
- { 0x0011, 0, 0x00, "LeaderRoleCount" },
- { 0x0012, 0, 0x00, "AttachAttemptCount" },
- { 0x0013, 0, 0x00, "PartitionIdChangeCount" },
- { 0x0014, 0, 0x00, "BetterPartitionAttachAttemptCount" },
- { 0x0015, 0, 0x00, "ParentChangeCount" },
- { 0x0016, 0, 0x00, "TxTotalCount" },
- { 0x0017, 0, 0x00, "TxUnicastCount" },
- { 0x0018, 0, 0x00, "TxBroadcastCount" },
- { 0x0019, 0, 0x00, "TxAckRequestedCount" },
- { 0x001A, 0, 0x00, "TxAckedCount" },
- { 0x001B, 0, 0x00, "TxNoAckRequestedCount" },
- { 0x001C, 0, 0x00, "TxDataCount" },
- { 0x001D, 0, 0x00, "TxDataPollCount" },
- { 0x001E, 0, 0x00, "TxBeaconCount" },
- { 0x001F, 0, 0x00, "TxBeaconRequestCount" },
- { 0x0020, 0, 0x00, "TxOtherCount" },
- { 0x0021, 0, 0x00, "TxRetryCount" },
- { 0x0022, 0, 0x00, "TxDirectMaxRetryExpiryCount" },
- { 0x0023, 0, 0x00, "TxIndirectMaxRetryExpiryCount" },
- { 0x0024, 0, 0x00, "TxErrCcaCount" },
- { 0x0025, 0, 0x00, "TxErrAbortCount" },
- { 0x0026, 0, 0x00, "TxErrBusyChannelCount" },
- { 0x0027, 0, 0x00, "RxTotalCount" },
- { 0x0028, 0, 0x00, "RxUnicastCount" },
- { 0x0029, 0, 0x00, "RxBroadcastCount" },
- { 0x002A, 0, 0x00, "RxDataCount" },
- { 0x002B, 0, 0x00, "RxDataPollCount" },
- { 0x002C, 0, 0x00, "RxBeaconCount" },
- { 0x002D, 0, 0x00, "RxBeaconRequestCount" },
- { 0x002E, 0, 0x00, "RxOtherCount" },
- { 0x002F, 0, 0x00, "RxAddressFilteredCount" },
- { 0x0030, 0, 0x00, "RxDestAddrFilteredCount" },
- { 0x0031, 0, 0x00, "RxDuplicatedCount" },
- { 0x0032, 0, 0x00, "RxErrNoFrameCount" },
- { 0x0033, 0, 0x00, "RxErrUnknownNeighborCount" },
- { 0x0034, 0, 0x00, "RxErrInvalidSrcAddrCount" },
- { 0x0035, 0, 0x00, "RxErrSecCount" },
- { 0x0036, 0, 0x00, "RxErrFcsCount" },
- { 0x0037, 0, 0x00, "RxErrOtherCount" },
- { 0x0038, 0, 0x00, "ActiveTimestamp" },
- { 0x0039, 0, 0x00, "PendingTimestamp" },
- { 0x003A, 0, 0x00, "Delay" },
- { 0x003B, 0, 0x00, "SecurityPolicy" },
- { 0x003C, 0, 0x00, "ChannelPage0Mask" },
- { 0x003D, 0, 0x00, "OperationalDatasetComponents" },
- { 0x003E, 0, 0x00, "ActiveNetworkFaultsList" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Channel" },
+ { 0x0001, 0, 0x02, "RoutingRole" },
+ { 0x0002, 0, 0x02, "NetworkName" },
+ { 0x0003, 0, 0x02, "PanId" },
+ { 0x0004, 0, 0x02, "ExtendedPanId" },
+ { 0x0005, 0, 0x02, "MeshLocalPrefix" },
+ { 0x0006, 0, 0x02, "OverrunCount" },
+ { 0x0007, 0, 0x02, "NeighborTableList" },
+ { 0x0008, 0, 0x02, "RouteTableList" },
+ { 0x0009, 0, 0x02, "PartitionId" },
+ { 0x000A, 0, 0x02, "Weighting" },
+ { 0x000B, 0, 0x02, "DataVersion" },
+ { 0x000C, 0, 0x02, "StableDataVersion" },
+ { 0x000D, 0, 0x02, "LeaderRouterId" },
+ { 0x000E, 0, 0x02, "DetachedRoleCount" },
+ { 0x000F, 0, 0x02, "ChildRoleCount" },
+ { 0x0010, 0, 0x02, "RouterRoleCount" },
+ { 0x0011, 0, 0x02, "LeaderRoleCount" },
+ { 0x0012, 0, 0x02, "AttachAttemptCount" },
+ { 0x0013, 0, 0x02, "PartitionIdChangeCount" },
+ { 0x0014, 0, 0x02, "BetterPartitionAttachAttemptCount" },
+ { 0x0015, 0, 0x02, "ParentChangeCount" },
+ { 0x0016, 0, 0x02, "TxTotalCount" },
+ { 0x0017, 0, 0x02, "TxUnicastCount" },
+ { 0x0018, 0, 0x02, "TxBroadcastCount" },
+ { 0x0019, 0, 0x02, "TxAckRequestedCount" },
+ { 0x001A, 0, 0x02, "TxAckedCount" },
+ { 0x001B, 0, 0x02, "TxNoAckRequestedCount" },
+ { 0x001C, 0, 0x02, "TxDataCount" },
+ { 0x001D, 0, 0x02, "TxDataPollCount" },
+ { 0x001E, 0, 0x02, "TxBeaconCount" },
+ { 0x001F, 0, 0x02, "TxBeaconRequestCount" },
+ { 0x0020, 0, 0x02, "TxOtherCount" },
+ { 0x0021, 0, 0x02, "TxRetryCount" },
+ { 0x0022, 0, 0x02, "TxDirectMaxRetryExpiryCount" },
+ { 0x0023, 0, 0x02, "TxIndirectMaxRetryExpiryCount" },
+ { 0x0024, 0, 0x02, "TxErrCcaCount" },
+ { 0x0025, 0, 0x02, "TxErrAbortCount" },
+ { 0x0026, 0, 0x02, "TxErrBusyChannelCount" },
+ { 0x0027, 0, 0x02, "RxTotalCount" },
+ { 0x0028, 0, 0x02, "RxUnicastCount" },
+ { 0x0029, 0, 0x02, "RxBroadcastCount" },
+ { 0x002A, 0, 0x02, "RxDataCount" },
+ { 0x002B, 0, 0x02, "RxDataPollCount" },
+ { 0x002C, 0, 0x02, "RxBeaconCount" },
+ { 0x002D, 0, 0x02, "RxBeaconRequestCount" },
+ { 0x002E, 0, 0x02, "RxOtherCount" },
+ { 0x002F, 0, 0x02, "RxAddressFilteredCount" },
+ { 0x0030, 0, 0x02, "RxDestAddrFilteredCount" },
+ { 0x0031, 0, 0x02, "RxDuplicatedCount" },
+ { 0x0032, 0, 0x02, "RxErrNoFrameCount" },
+ { 0x0033, 0, 0x02, "RxErrUnknownNeighborCount" },
+ { 0x0034, 0, 0x02, "RxErrInvalidSrcAddrCount" },
+ { 0x0035, 0, 0x02, "RxErrSecCount" },
+ { 0x0036, 0, 0x02, "RxErrFcsCount" },
+ { 0x0037, 0, 0x02, "RxErrOtherCount" },
+ { 0x0038, 0, 0x02, "ActiveTimestamp" },
+ { 0x0039, 0, 0x02, "PendingTimestamp" },
+ { 0x003A, 0, 0x02, "Delay" },
+ { 0x003B, 0, 0x02, "SecurityPolicy" },
+ { 0x003C, 0, 0x02, "ChannelPage0Mask" },
+ { 0x003D, 0, 0x02, "OperationalDatasetComponents" },
+ { 0x003E, 0, 0x02, "ActiveNetworkFaultsList" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -599,24 +599,24 @@ const matter_command_t matter_Commands_0035[] = {
};
const matter_attribute_t matter_Attributes_0036[] = {
- { 0x0000, 0, 0x00, "Bssid" },
- { 0x0001, 0, 0x00, "SecurityType" },
- { 0x0002, 0, 0x00, "WiFiVersion" },
- { 0x0003, 0, 0x00, "ChannelNumber" },
- { 0x0004, 0, 0x00, "Rssi" },
- { 0x0005, 0, 0x00, "BeaconLostCount" },
- { 0x0006, 0, 0x00, "BeaconRxCount" },
- { 0x0007, 0, 0x00, "PacketMulticastRxCount" },
- { 0x0008, 0, 0x00, "PacketMulticastTxCount" },
- { 0x0009, 0, 0x00, "PacketUnicastRxCount" },
- { 0x000A, 0, 0x00, "PacketUnicastTxCount" },
- { 0x000B, 0, 0x00, "CurrentMaxRate" },
- { 0x000C, 0, 0x00, "OverrunCount" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Bssid" },
+ { 0x0001, 0, 0x02, "SecurityType" },
+ { 0x0002, 0, 0x02, "WiFiVersion" },
+ { 0x0003, 0, 0x02, "ChannelNumber" },
+ { 0x0004, 0, 0x02, "Rssi" },
+ { 0x0005, 0, 0x02, "BeaconLostCount" },
+ { 0x0006, 0, 0x02, "BeaconRxCount" },
+ { 0x0007, 0, 0x02, "PacketMulticastRxCount" },
+ { 0x0008, 0, 0x02, "PacketMulticastTxCount" },
+ { 0x0009, 0, 0x02, "PacketUnicastRxCount" },
+ { 0x000A, 0, 0x02, "PacketUnicastTxCount" },
+ { 0x000B, 0, 0x02, "CurrentMaxRate" },
+ { 0x000C, 0, 0x02, "OverrunCount" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -626,20 +626,20 @@ const matter_command_t matter_Commands_0036[] = {
};
const matter_attribute_t matter_Attributes_0037[] = {
- { 0x0000, 0, 0x00, "PHYRate" },
- { 0x0001, 0, 0x00, "FullDuplex" },
- { 0x0002, 0, 0x00, "PacketRxCount" },
- { 0x0003, 0, 0x00, "PacketTxCount" },
- { 0x0004, 0, 0x00, "TxErrCount" },
- { 0x0005, 0, 0x00, "CollisionCount" },
- { 0x0006, 0, 0x00, "OverrunCount" },
- { 0x0007, 0, 0x00, "CarrierDetect" },
- { 0x0008, 0, 0x00, "TimeSinceReset" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "PHYRate" },
+ { 0x0001, 0, 0x02, "FullDuplex" },
+ { 0x0002, 0, 0x02, "PacketRxCount" },
+ { 0x0003, 0, 0x02, "PacketTxCount" },
+ { 0x0004, 0, 0x02, "TxErrCount" },
+ { 0x0005, 0, 0x02, "CollisionCount" },
+ { 0x0006, 0, 0x02, "OverrunCount" },
+ { 0x0007, 0, 0x02, "CarrierDetect" },
+ { 0x0008, 0, 0x02, "TimeSinceReset" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -649,26 +649,26 @@ const matter_command_t matter_Commands_0037[] = {
};
const matter_attribute_t matter_Attributes_0039[] = {
- { 0x0001, 0, 0x00, "VendorName" },
- { 0x0002, 0, 0x00, "VendorID" },
- { 0x0003, 0, 0x00, "ProductName" },
- { 0x0005, 0, 0x00, "NodeLabel" },
- { 0x0007, 0, 0x00, "HardwareVersion" },
- { 0x0008, 0, 0x00, "HardwareVersionString" },
- { 0x0009, 0, 0x00, "SoftwareVersion" },
- { 0x000A, 0, 0x00, "SoftwareVersionString" },
- { 0x000B, 0, 0x00, "ManufacturingDate" },
- { 0x000C, 0, 0x00, "PartNumber" },
- { 0x000D, 0, 0x00, "ProductURL" },
- { 0x000E, 0, 0x00, "ProductLabel" },
- { 0x000F, 0, 0x00, "SerialNumber" },
- { 0x0011, 0, 0x00, "Reachable" },
- { 0x0012, 0, 0x00, "UniqueID" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0001, 0, 0x02, "VendorName" },
+ { 0x0002, 0, 0x02, "VendorID" },
+ { 0x0003, 0, 0x02, "ProductName" },
+ { 0x0005, 0, 0x03, "NodeLabel" },
+ { 0x0007, 0, 0x02, "HardwareVersion" },
+ { 0x0008, 0, 0x02, "HardwareVersionString" },
+ { 0x0009, 0, 0x02, "SoftwareVersion" },
+ { 0x000A, 0, 0x02, "SoftwareVersionString" },
+ { 0x000B, 0, 0x02, "ManufacturingDate" },
+ { 0x000C, 0, 0x02, "PartNumber" },
+ { 0x000D, 0, 0x02, "ProductURL" },
+ { 0x000E, 0, 0x02, "ProductLabel" },
+ { 0x000F, 0, 0x02, "SerialNumber" },
+ { 0x0011, 0, 0x02, "Reachable" },
+ { 0x0012, 0, 0x02, "UniqueID" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -677,14 +677,14 @@ const matter_command_t matter_Commands_0039[] = {
};
const matter_attribute_t matter_Attributes_003B[] = {
- { 0x0000, 0, 0x00, "NumberOfPositions" },
- { 0x0001, 0, 0x00, "CurrentPosition" },
- { 0x0002, 0, 0x00, "MultiPressMax" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "NumberOfPositions" },
+ { 0x0001, 0, 0x02, "CurrentPosition" },
+ { 0x0002, 0, 0x02, "MultiPressMax" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -693,14 +693,14 @@ const matter_command_t matter_Commands_003B[] = {
};
const matter_attribute_t matter_Attributes_003C[] = {
- { 0x0000, 0, 0x00, "WindowStatus" },
- { 0x0001, 0, 0x00, "AdminFabricIndex" },
- { 0x0002, 0, 0x00, "AdminVendorId" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "WindowStatus" },
+ { 0x0001, 0, 0x02, "AdminFabricIndex" },
+ { 0x0002, 0, 0x02, "AdminVendorId" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -712,17 +712,17 @@ const matter_command_t matter_Commands_003C[] = {
};
const matter_attribute_t matter_Attributes_003E[] = {
- { 0x0000, 0, 0x00, "NOCs" },
- { 0x0001, 0, 0x00, "Fabrics" },
- { 0x0002, 0, 0x00, "SupportedFabrics" },
- { 0x0003, 0, 0x00, "CommissionedFabrics" },
- { 0x0004, 0, 0x00, "TrustedRootCertificates" },
- { 0x0005, 0, 0x00, "CurrentFabricIndex" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "NOCs" },
+ { 0x0001, 0, 0x02, "Fabrics" },
+ { 0x0002, 0, 0x02, "SupportedFabrics" },
+ { 0x0003, 0, 0x02, "CommissionedFabrics" },
+ { 0x0004, 0, 0x02, "TrustedRootCertificates" },
+ { 0x0005, 0, 0x02, "CurrentFabricIndex" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -743,15 +743,15 @@ const matter_command_t matter_Commands_003E[] = {
};
const matter_attribute_t matter_Attributes_003F[] = {
- { 0x0000, 0, 0x00, "GroupKeyMap" },
- { 0x0001, 0, 0x00, "GroupTable" },
- { 0x0002, 0, 0x00, "MaxGroupsPerFabric" },
- { 0x0003, 0, 0x00, "MaxGroupKeysPerFabric" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "GroupKeyMap" },
+ { 0x0001, 0, 0x02, "GroupTable" },
+ { 0x0002, 0, 0x02, "MaxGroupsPerFabric" },
+ { 0x0003, 0, 0x02, "MaxGroupKeysPerFabric" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -764,12 +764,12 @@ const matter_command_t matter_Commands_003F[] = {
};
const matter_attribute_t matter_Attributes_0040[] = {
- { 0x0000, 0, 0x00, "LabelList" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "LabelList" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -778,11 +778,11 @@ const matter_command_t matter_Commands_0040[] = {
};
const matter_attribute_t matter_Attributes_0041[] = {
- { 0x0000, 0, 0x00, "LabelList" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "LabelList" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -791,12 +791,12 @@ const matter_command_t matter_Commands_0041[] = {
};
const matter_attribute_t matter_Attributes_0045[] = {
- { 0x0000, 0, 0x00, "StateValue" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "StateValue" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -805,17 +805,17 @@ const matter_command_t matter_Commands_0045[] = {
};
const matter_attribute_t matter_Attributes_0050[] = {
- { 0x0000, 0, 0x00, "Description" },
- { 0x0001, 0, 0x00, "StandardNamespace" },
- { 0x0002, 0, 0x00, "SupportedModes" },
- { 0x0003, 0, 0x00, "CurrentMode" },
- { 0x0004, 0, 0x00, "StartUpMode" },
- { 0x0005, 0, 0x00, "OnMode" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Description" },
+ { 0x0001, 0, 0x02, "StandardNamespace" },
+ { 0x0002, 0, 0x02, "SupportedModes" },
+ { 0x0003, 0, 0x02, "CurrentMode" },
+ { 0x0004, 0, 0x03, "StartUpMode" },
+ { 0x0005, 0, 0x03, "OnMode" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -825,36 +825,36 @@ const matter_command_t matter_Commands_0050[] = {
};
const matter_attribute_t matter_Attributes_0101[] = {
- { 0x0000, 0, 0x00, "LockState" },
- { 0x0001, 0, 0x00, "LockType" },
- { 0x0002, 0, 0x00, "ActuatorEnabled" },
- { 0x0003, 0, 0x00, "DoorState" },
- { 0x0011, 0, 0x00, "NumberOfTotalUsersSupported" },
- { 0x0012, 0, 0x00, "NumberOfPINUsersSupported" },
- { 0x0013, 0, 0x00, "NumberOfRFIDUsersSupported" },
- { 0x0014, 0, 0x00, "NumberOfWeekDaySchedulesSupportedPerUser" },
- { 0x0015, 0, 0x00, "NumberOfYearDaySchedulesSupportedPerUser" },
- { 0x0016, 0, 0x00, "NumberOfHolidaySchedulesSupported" },
- { 0x0017, 0, 0x00, "MaxPINCodeLength" },
- { 0x0018, 0, 0x00, "MinPINCodeLength" },
- { 0x0019, 0, 0x00, "MaxRFIDCodeLength" },
- { 0x001A, 0, 0x00, "MinRFIDCodeLength" },
- { 0x001C, 0, 0x00, "NumberOfCredentialsSupportedPerUser" },
- { 0x0021, 0, 0x00, "Language" },
- { 0x0023, 0, 0x00, "AutoRelockTime" },
- { 0x0024, 0, 0x00, "SoundVolume" },
- { 0x0025, 0, 0x00, "OperatingMode" },
- { 0x0026, 0, 0x00, "SupportedOperatingModes" },
- { 0x0029, 0, 0x00, "EnableOneTouchLocking" },
- { 0x002B, 0, 0x00, "EnablePrivacyModeButton" },
- { 0x0030, 0, 0x00, "WrongCodeEntryLimit" },
- { 0x0031, 0, 0x00, "UserCodeTemporaryDisableTime" },
- { 0x0033, 0, 0x00, "RequirePINforRemoteOperation" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "LockState" },
+ { 0x0001, 0, 0x02, "LockType" },
+ { 0x0002, 0, 0x02, "ActuatorEnabled" },
+ { 0x0003, 0, 0x02, "DoorState" },
+ { 0x0011, 0, 0x02, "NumberOfTotalUsersSupported" },
+ { 0x0012, 0, 0x02, "NumberOfPINUsersSupported" },
+ { 0x0013, 0, 0x02, "NumberOfRFIDUsersSupported" },
+ { 0x0014, 0, 0x02, "NumberOfWeekDaySchedulesSupportedPerUser" },
+ { 0x0015, 0, 0x02, "NumberOfYearDaySchedulesSupportedPerUser" },
+ { 0x0016, 0, 0x02, "NumberOfHolidaySchedulesSupported" },
+ { 0x0017, 0, 0x02, "MaxPINCodeLength" },
+ { 0x0018, 0, 0x02, "MinPINCodeLength" },
+ { 0x0019, 0, 0x02, "MaxRFIDCodeLength" },
+ { 0x001A, 0, 0x02, "MinRFIDCodeLength" },
+ { 0x001C, 0, 0x02, "NumberOfCredentialsSupportedPerUser" },
+ { 0x0021, 0, 0x03, "Language" },
+ { 0x0023, 0, 0x03, "AutoRelockTime" },
+ { 0x0024, 0, 0x03, "SoundVolume" },
+ { 0x0025, 0, 0x03, "OperatingMode" },
+ { 0x0026, 0, 0x02, "SupportedOperatingModes" },
+ { 0x0029, 0, 0x03, "EnableOneTouchLocking" },
+ { 0x002B, 0, 0x03, "EnablePrivacyModeButton" },
+ { 0x0030, 0, 0x03, "WrongCodeEntryLimit" },
+ { 0x0031, 0, 0x03, "UserCodeTemporaryDisableTime" },
+ { 0x0033, 0, 0x01, "RequirePINforRemoteOperation" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -881,33 +881,33 @@ const matter_command_t matter_Commands_0101[] = {
};
const matter_attribute_t matter_Attributes_0102[] = {
- { 0x0000, 0, 0x00, "Type" },
- { 0x0001, 0, 0x00, "PhysicalClosedLimitLift" },
- { 0x0002, 0, 0x00, "PhysicalClosedLimitTilt" },
- { 0x0003, 0, 0x00, "CurrentPositionLift" },
- { 0x0004, 0, 0x00, "CurrentPositionTilt" },
- { 0x0005, 0, 0x00, "NumberOfActuationsLift" },
- { 0x0006, 0, 0x00, "NumberOfActuationsTilt" },
- { 0x0007, 0, 0x00, "ConfigStatus" },
- { 0x0008, 0, 0x00, "CurrentPositionLiftPercentage" },
- { 0x0009, 0, 0x00, "CurrentPositionTiltPercentage" },
- { 0x000A, 0, 0x00, "OperationalStatus" },
- { 0x000B, 0, 0x00, "TargetPositionLiftPercent100ths" },
- { 0x000C, 0, 0x00, "TargetPositionTiltPercent100ths" },
- { 0x000D, 0, 0x00, "EndProductType" },
- { 0x000E, 0, 0x00, "CurrentPositionLiftPercent100ths" },
- { 0x000F, 0, 0x00, "CurrentPositionTiltPercent100ths" },
- { 0x0010, 0, 0x00, "InstalledOpenLimitLift" },
- { 0x0011, 0, 0x00, "InstalledClosedLimitLift" },
- { 0x0012, 0, 0x00, "InstalledOpenLimitTilt" },
- { 0x0013, 0, 0x00, "InstalledClosedLimitTilt" },
- { 0x0017, 0, 0x00, "Mode" },
- { 0x001A, 0, 0x00, "SafetyStatus" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Type" },
+ { 0x0001, 0, 0x02, "PhysicalClosedLimitLift" },
+ { 0x0002, 0, 0x02, "PhysicalClosedLimitTilt" },
+ { 0x0003, 0, 0x02, "CurrentPositionLift" },
+ { 0x0004, 0, 0x02, "CurrentPositionTilt" },
+ { 0x0005, 0, 0x02, "NumberOfActuationsLift" },
+ { 0x0006, 0, 0x02, "NumberOfActuationsTilt" },
+ { 0x0007, 0, 0x02, "ConfigStatus" },
+ { 0x0008, 0, 0x02, "CurrentPositionLiftPercentage" },
+ { 0x0009, 0, 0x02, "CurrentPositionTiltPercentage" },
+ { 0x000A, 0, 0x02, "OperationalStatus" },
+ { 0x000B, 0, 0x02, "TargetPositionLiftPercent100ths" },
+ { 0x000C, 0, 0x02, "TargetPositionTiltPercent100ths" },
+ { 0x000D, 0, 0x02, "EndProductType" },
+ { 0x000E, 0, 0x02, "CurrentPositionLiftPercent100ths" },
+ { 0x000F, 0, 0x02, "CurrentPositionTiltPercent100ths" },
+ { 0x0010, 0, 0x02, "InstalledOpenLimitLift" },
+ { 0x0011, 0, 0x02, "InstalledClosedLimitLift" },
+ { 0x0012, 0, 0x02, "InstalledOpenLimitTilt" },
+ { 0x0013, 0, 0x02, "InstalledClosedLimitTilt" },
+ { 0x0017, 0, 0x03, "Mode" },
+ { 0x001A, 0, 0x02, "SafetyStatus" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -923,15 +923,15 @@ const matter_command_t matter_Commands_0102[] = {
};
const matter_attribute_t matter_Attributes_0103[] = {
- { 0x0001, 0, 0x00, "BarrierMovingState" },
- { 0x0002, 0, 0x00, "BarrierSafetyStatus" },
- { 0x0003, 0, 0x00, "BarrierCapabilities" },
- { 0x000A, 0, 0x00, "BarrierPosition" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0001, 0, 0x02, "BarrierMovingState" },
+ { 0x0002, 0, 0x02, "BarrierSafetyStatus" },
+ { 0x0003, 0, 0x02, "BarrierCapabilities" },
+ { 0x000A, 0, 0x02, "BarrierPosition" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -942,34 +942,34 @@ const matter_command_t matter_Commands_0103[] = {
};
const matter_attribute_t matter_Attributes_0200[] = {
- { 0x0000, 0, 0x00, "MaxPressure" },
- { 0x0001, 0, 0x00, "MaxSpeed" },
- { 0x0002, 0, 0x00, "MaxFlow" },
- { 0x0003, 0, 0x00, "MinConstPressure" },
- { 0x0004, 0, 0x00, "MaxConstPressure" },
- { 0x0005, 0, 0x00, "MinCompPressure" },
- { 0x0006, 0, 0x00, "MaxCompPressure" },
- { 0x0007, 0, 0x00, "MinConstSpeed" },
- { 0x0008, 0, 0x00, "MaxConstSpeed" },
- { 0x0009, 0, 0x00, "MinConstFlow" },
- { 0x000A, 0, 0x00, "MaxConstFlow" },
- { 0x000B, 0, 0x00, "MinConstTemp" },
- { 0x000C, 0, 0x00, "MaxConstTemp" },
- { 0x0010, 0, 0x00, "PumpStatus" },
- { 0x0011, 0, 0x00, "EffectiveOperationMode" },
- { 0x0012, 0, 0x00, "EffectiveControlMode" },
- { 0x0013, 0, 0x00, "Capacity" },
- { 0x0014, 0, 0x00, "Speed" },
- { 0x0015, 0, 0x00, "LifetimeRunningHours" },
- { 0x0016, 0, 0x00, "Power" },
- { 0x0017, 0, 0x00, "LifetimeEnergyConsumed" },
- { 0x0020, 0, 0x00, "OperationMode" },
- { 0x0021, 0, 0x00, "ControlMode" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MaxPressure" },
+ { 0x0001, 0, 0x02, "MaxSpeed" },
+ { 0x0002, 0, 0x02, "MaxFlow" },
+ { 0x0003, 0, 0x02, "MinConstPressure" },
+ { 0x0004, 0, 0x02, "MaxConstPressure" },
+ { 0x0005, 0, 0x02, "MinCompPressure" },
+ { 0x0006, 0, 0x02, "MaxCompPressure" },
+ { 0x0007, 0, 0x02, "MinConstSpeed" },
+ { 0x0008, 0, 0x02, "MaxConstSpeed" },
+ { 0x0009, 0, 0x02, "MinConstFlow" },
+ { 0x000A, 0, 0x02, "MaxConstFlow" },
+ { 0x000B, 0, 0x02, "MinConstTemp" },
+ { 0x000C, 0, 0x02, "MaxConstTemp" },
+ { 0x0010, 0, 0x02, "PumpStatus" },
+ { 0x0011, 0, 0x02, "EffectiveOperationMode" },
+ { 0x0012, 0, 0x02, "EffectiveControlMode" },
+ { 0x0013, 0, 0x02, "Capacity" },
+ { 0x0014, 0, 0x02, "Speed" },
+ { 0x0015, 0, 0x03, "LifetimeRunningHours" },
+ { 0x0016, 0, 0x02, "Power" },
+ { 0x0017, 0, 0x03, "LifetimeEnergyConsumed" },
+ { 0x0020, 0, 0x03, "OperationMode" },
+ { 0x0021, 0, 0x03, "ControlMode" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -978,26 +978,26 @@ const matter_command_t matter_Commands_0200[] = {
};
const matter_attribute_t matter_Attributes_0201[] = {
- { 0x0000, 0, 0x00, "LocalTemperature" },
- { 0x0003, 0, 0x00, "AbsMinHeatSetpointLimit" },
- { 0x0004, 0, 0x00, "AbsMaxHeatSetpointLimit" },
- { 0x0005, 0, 0x00, "AbsMinCoolSetpointLimit" },
- { 0x0006, 0, 0x00, "AbsMaxCoolSetpointLimit" },
- { 0x0011, 0, 0x00, "OccupiedCoolingSetpoint" },
- { 0x0012, 0, 0x00, "OccupiedHeatingSetpoint" },
- { 0x0015, 0, 0x00, "MinHeatSetpointLimit" },
- { 0x0016, 0, 0x00, "MaxHeatSetpointLimit" },
- { 0x0017, 0, 0x00, "MinCoolSetpointLimit" },
- { 0x0018, 0, 0x00, "MaxCoolSetpointLimit" },
- { 0x0019, 0, 0x00, "MinSetpointDeadBand" },
- { 0x001B, 0, 0x00, "ControlSequenceOfOperation" },
- { 0x001C, 0, 0x00, "SystemMode" },
- { 0x0020, 0, 0x00, "StartOfWeek" },
- { 0x0021, 0, 0x00, "NumberOfWeeklyTransitions" },
- { 0x0022, 0, 0x00, "NumberOfDailyTransitions" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "LocalTemperature" },
+ { 0x0003, 0, 0x02, "AbsMinHeatSetpointLimit" },
+ { 0x0004, 0, 0x02, "AbsMaxHeatSetpointLimit" },
+ { 0x0005, 0, 0x02, "AbsMinCoolSetpointLimit" },
+ { 0x0006, 0, 0x02, "AbsMaxCoolSetpointLimit" },
+ { 0x0011, 0, 0x03, "OccupiedCoolingSetpoint" },
+ { 0x0012, 0, 0x03, "OccupiedHeatingSetpoint" },
+ { 0x0015, 0, 0x03, "MinHeatSetpointLimit" },
+ { 0x0016, 0, 0x03, "MaxHeatSetpointLimit" },
+ { 0x0017, 0, 0x03, "MinCoolSetpointLimit" },
+ { 0x0018, 0, 0x03, "MaxCoolSetpointLimit" },
+ { 0x0019, 0, 0x03, "MinSetpointDeadBand" },
+ { 0x001B, 0, 0x03, "ControlSequenceOfOperation" },
+ { 0x001C, 0, 0x03, "SystemMode" },
+ { 0x0020, 0, 0x02, "StartOfWeek" },
+ { 0x0021, 0, 0x02, "NumberOfWeeklyTransitions" },
+ { 0x0022, 0, 0x02, "NumberOfDailyTransitions" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1010,22 +1010,22 @@ const matter_command_t matter_Commands_0201[] = {
};
const matter_attribute_t matter_Attributes_0202[] = {
- { 0x0000, 0, 0x00, "FanMode" },
- { 0x0001, 0, 0x00, "FanModeSequence" },
- { 0x0002, 0, 0x00, "PercentSetting" },
- { 0x0003, 0, 0x00, "PercentCurrent" },
- { 0x0004, 0, 0x00, "SpeedMax" },
- { 0x0005, 0, 0x00, "SpeedSetting" },
- { 0x0006, 0, 0x00, "SpeedCurrent" },
- { 0x0007, 0, 0x00, "RockSupport" },
- { 0x0008, 0, 0x00, "RockSetting" },
- { 0x0009, 0, 0x00, "WindSupport" },
- { 0x000A, 0, 0x00, "WindSetting" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "FanMode" },
+ { 0x0001, 0, 0x03, "FanModeSequence" },
+ { 0x0002, 0, 0x03, "PercentSetting" },
+ { 0x0003, 0, 0x02, "PercentCurrent" },
+ { 0x0004, 0, 0x02, "SpeedMax" },
+ { 0x0005, 0, 0x03, "SpeedSetting" },
+ { 0x0006, 0, 0x02, "SpeedCurrent" },
+ { 0x0007, 0, 0x02, "RockSupport" },
+ { 0x0008, 0, 0x03, "RockSetting" },
+ { 0x0009, 0, 0x02, "WindSupport" },
+ { 0x000A, 0, 0x03, "WindSetting" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1034,14 +1034,14 @@ const matter_command_t matter_Commands_0202[] = {
};
const matter_attribute_t matter_Attributes_0204[] = {
- { 0x0000, 0, 0x00, "TemperatureDisplayMode" },
- { 0x0001, 0, 0x00, "KeypadLockout" },
- { 0x0002, 0, 0x00, "ScheduleProgrammingVisibility" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "TemperatureDisplayMode" },
+ { 0x0001, 0, 0x03, "KeypadLockout" },
+ { 0x0002, 0, 0x03, "ScheduleProgrammingVisibility" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1050,63 +1050,63 @@ const matter_command_t matter_Commands_0204[] = {
};
const matter_attribute_t matter_Attributes_0300[] = {
- { 0x0000, 0, 0x00, "CurrentHue" },
- { 0x0001, 0, 0x00, "CurrentSaturation" },
- { 0x0002, 0, 0x00, "RemainingTime" },
- { 0x0003, 0, 0x00, "CurrentX" },
- { 0x0004, 0, 0x00, "CurrentY" },
- { 0x0005, 0, 0x00, "DriftCompensation" },
- { 0x0006, 0, 0x00, "CompensationText" },
- { 0x0007, 0, 0x00, "ColorTemperatureMireds" },
- { 0x0008, 0, 0x00, "ColorMode" },
- { 0x000F, 0, 0x00, "Options" },
- { 0x0010, 0, 0x00, "NumberOfPrimaries" },
- { 0x0011, 0, 0x00, "Primary1X" },
- { 0x0012, 0, 0x00, "Primary1Y" },
- { 0x0013, 0, 0x00, "Primary1Intensity" },
- { 0x0015, 0, 0x00, "Primary2X" },
- { 0x0016, 0, 0x00, "Primary2Y" },
- { 0x0017, 0, 0x00, "Primary2Intensity" },
- { 0x0019, 0, 0x00, "Primary3X" },
- { 0x001A, 0, 0x00, "Primary3Y" },
- { 0x001B, 0, 0x00, "Primary3Intensity" },
- { 0x0020, 0, 0x00, "Primary4X" },
- { 0x0021, 0, 0x00, "Primary4Y" },
- { 0x0022, 0, 0x00, "Primary4Intensity" },
- { 0x0024, 0, 0x00, "Primary5X" },
- { 0x0025, 0, 0x00, "Primary5Y" },
- { 0x0026, 0, 0x00, "Primary5Intensity" },
- { 0x0028, 0, 0x00, "Primary6X" },
- { 0x0029, 0, 0x00, "Primary6Y" },
- { 0x002A, 0, 0x00, "Primary6Intensity" },
- { 0x0030, 0, 0x00, "WhitePointX" },
- { 0x0031, 0, 0x00, "WhitePointY" },
- { 0x0032, 0, 0x00, "ColorPointRX" },
- { 0x0033, 0, 0x00, "ColorPointRY" },
- { 0x0034, 0, 0x00, "ColorPointRIntensity" },
- { 0x0036, 0, 0x00, "ColorPointGX" },
- { 0x0037, 0, 0x00, "ColorPointGY" },
- { 0x0038, 0, 0x00, "ColorPointGIntensity" },
- { 0x003A, 0, 0x00, "ColorPointBX" },
- { 0x003B, 0, 0x00, "ColorPointBY" },
- { 0x003C, 0, 0x00, "ColorPointBIntensity" },
- { 0x4000, 0, 0x00, "EnhancedCurrentHue" },
- { 0x4001, 0, 0x00, "EnhancedColorMode" },
- { 0x4002, 0, 0x00, "ColorLoopActive" },
- { 0x4003, 0, 0x00, "ColorLoopDirection" },
- { 0x4004, 0, 0x00, "ColorLoopTime" },
- { 0x4005, 0, 0x00, "ColorLoopStartEnhancedHue" },
- { 0x4006, 0, 0x00, "ColorLoopStoredEnhancedHue" },
- { 0x400A, 0, 0x00, "ColorCapabilities" },
- { 0x400B, 0, 0x00, "ColorTempPhysicalMinMireds" },
- { 0x400C, 0, 0x00, "ColorTempPhysicalMaxMireds" },
- { 0x400D, 0, 0x00, "CoupleColorTempToLevelMinMireds" },
- { 0x4010, 0, 0x00, "StartUpColorTemperatureMireds" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "CurrentHue" },
+ { 0x0001, 0, 0x02, "CurrentSaturation" },
+ { 0x0002, 0, 0x02, "RemainingTime" },
+ { 0x0003, 0, 0x02, "CurrentX" },
+ { 0x0004, 0, 0x02, "CurrentY" },
+ { 0x0005, 0, 0x02, "DriftCompensation" },
+ { 0x0006, 0, 0x02, "CompensationText" },
+ { 0x0007, 0, 0x02, "ColorTemperatureMireds" },
+ { 0x0008, 0, 0x02, "ColorMode" },
+ { 0x000F, 0, 0x03, "Options" },
+ { 0x0010, 0, 0x02, "NumberOfPrimaries" },
+ { 0x0011, 0, 0x02, "Primary1X" },
+ { 0x0012, 0, 0x02, "Primary1Y" },
+ { 0x0013, 0, 0x02, "Primary1Intensity" },
+ { 0x0015, 0, 0x02, "Primary2X" },
+ { 0x0016, 0, 0x02, "Primary2Y" },
+ { 0x0017, 0, 0x02, "Primary2Intensity" },
+ { 0x0019, 0, 0x02, "Primary3X" },
+ { 0x001A, 0, 0x02, "Primary3Y" },
+ { 0x001B, 0, 0x02, "Primary3Intensity" },
+ { 0x0020, 0, 0x02, "Primary4X" },
+ { 0x0021, 0, 0x02, "Primary4Y" },
+ { 0x0022, 0, 0x02, "Primary4Intensity" },
+ { 0x0024, 0, 0x02, "Primary5X" },
+ { 0x0025, 0, 0x02, "Primary5Y" },
+ { 0x0026, 0, 0x02, "Primary5Intensity" },
+ { 0x0028, 0, 0x02, "Primary6X" },
+ { 0x0029, 0, 0x02, "Primary6Y" },
+ { 0x002A, 0, 0x02, "Primary6Intensity" },
+ { 0x0030, 0, 0x03, "WhitePointX" },
+ { 0x0031, 0, 0x03, "WhitePointY" },
+ { 0x0032, 0, 0x03, "ColorPointRX" },
+ { 0x0033, 0, 0x03, "ColorPointRY" },
+ { 0x0034, 0, 0x03, "ColorPointRIntensity" },
+ { 0x0036, 0, 0x03, "ColorPointGX" },
+ { 0x0037, 0, 0x03, "ColorPointGY" },
+ { 0x0038, 0, 0x03, "ColorPointGIntensity" },
+ { 0x003A, 0, 0x03, "ColorPointBX" },
+ { 0x003B, 0, 0x03, "ColorPointBY" },
+ { 0x003C, 0, 0x03, "ColorPointBIntensity" },
+ { 0x4000, 0, 0x02, "EnhancedCurrentHue" },
+ { 0x4001, 0, 0x02, "EnhancedColorMode" },
+ { 0x4002, 0, 0x02, "ColorLoopActive" },
+ { 0x4003, 0, 0x02, "ColorLoopDirection" },
+ { 0x4004, 0, 0x02, "ColorLoopTime" },
+ { 0x4005, 0, 0x02, "ColorLoopStartEnhancedHue" },
+ { 0x4006, 0, 0x02, "ColorLoopStoredEnhancedHue" },
+ { 0x400A, 0, 0x02, "ColorCapabilities" },
+ { 0x400B, 0, 0x02, "ColorTempPhysicalMinMireds" },
+ { 0x400C, 0, 0x02, "ColorTempPhysicalMaxMireds" },
+ { 0x400D, 0, 0x02, "CoupleColorTempToLevelMinMireds" },
+ { 0x4010, 0, 0x03, "StartUpColorTemperatureMireds" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1134,25 +1134,25 @@ const matter_command_t matter_Commands_0300[] = {
};
const matter_attribute_t matter_Attributes_0301[] = {
- { 0x0000, 0, 0x00, "PhysicalMinLevel" },
- { 0x0001, 0, 0x00, "PhysicalMaxLevel" },
- { 0x0002, 0, 0x00, "BallastStatus" },
- { 0x0010, 0, 0x00, "MinLevel" },
- { 0x0011, 0, 0x00, "MaxLevel" },
- { 0x0014, 0, 0x00, "IntrinsicBalanceFactor" },
- { 0x0015, 0, 0x00, "BallastFactorAdjustment" },
- { 0x0020, 0, 0x00, "LampQuantity" },
- { 0x0030, 0, 0x00, "LampType" },
- { 0x0031, 0, 0x00, "LampManufacturer" },
- { 0x0032, 0, 0x00, "LampRatedHours" },
- { 0x0033, 0, 0x00, "LampBurnHours" },
- { 0x0034, 0, 0x00, "LampAlarmMode" },
- { 0x0035, 0, 0x00, "LampBurnHoursTripPoint" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "PhysicalMinLevel" },
+ { 0x0001, 0, 0x02, "PhysicalMaxLevel" },
+ { 0x0002, 0, 0x02, "BallastStatus" },
+ { 0x0010, 0, 0x03, "MinLevel" },
+ { 0x0011, 0, 0x03, "MaxLevel" },
+ { 0x0014, 0, 0x03, "IntrinsicBalanceFactor" },
+ { 0x0015, 0, 0x03, "BallastFactorAdjustment" },
+ { 0x0020, 0, 0x02, "LampQuantity" },
+ { 0x0030, 0, 0x03, "LampType" },
+ { 0x0031, 0, 0x03, "LampManufacturer" },
+ { 0x0032, 0, 0x03, "LampRatedHours" },
+ { 0x0033, 0, 0x03, "LampBurnHours" },
+ { 0x0034, 0, 0x03, "LampAlarmMode" },
+ { 0x0035, 0, 0x03, "LampBurnHoursTripPoint" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1161,16 +1161,16 @@ const matter_command_t matter_Commands_0301[] = {
};
const matter_attribute_t matter_Attributes_0400[] = {
- { 0x0000, 0, 0x00, "MeasuredValue" },
- { 0x0001, 0, 0x00, "MinMeasuredValue" },
- { 0x0002, 0, 0x00, "MaxMeasuredValue" },
- { 0x0003, 0, 0x00, "Tolerance" },
- { 0x0004, 0, 0x00, "LightSensorType" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasuredValue" },
+ { 0x0001, 0, 0x02, "MinMeasuredValue" },
+ { 0x0002, 0, 0x02, "MaxMeasuredValue" },
+ { 0x0003, 0, 0x02, "Tolerance" },
+ { 0x0004, 0, 0x02, "LightSensorType" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1179,13 +1179,13 @@ const matter_command_t matter_Commands_0400[] = {
};
const matter_attribute_t matter_Attributes_0402[] = {
- { 0x0000, 0, 0x00, "MeasuredValue" },
- { 0x0001, 0, 0x00, "MinMeasuredValue" },
- { 0x0002, 0, 0x00, "MaxMeasuredValue" },
- { 0x0003, 0, 0x00, "Tolerance" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasuredValue" },
+ { 0x0001, 0, 0x02, "MinMeasuredValue" },
+ { 0x0002, 0, 0x02, "MaxMeasuredValue" },
+ { 0x0003, 0, 0x02, "Tolerance" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1194,18 +1194,18 @@ const matter_command_t matter_Commands_0402[] = {
};
const matter_attribute_t matter_Attributes_0403[] = {
- { 0x0000, 0, 0x00, "MeasuredValue" },
- { 0x0001, 0, 0x00, "MinMeasuredValue" },
- { 0x0002, 0, 0x00, "MaxMeasuredValue" },
- { 0x0003, 0, 0x00, "Tolerance" },
- { 0x0010, 0, 0x00, "ScaledValue" },
- { 0x0011, 0, 0x00, "MinScaledValue" },
- { 0x0012, 0, 0x00, "MaxScaledValue" },
- { 0x0013, 0, 0x00, "ScaledTolerance" },
- { 0x0014, 0, 0x00, "Scale" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasuredValue" },
+ { 0x0001, 0, 0x02, "MinMeasuredValue" },
+ { 0x0002, 0, 0x02, "MaxMeasuredValue" },
+ { 0x0003, 0, 0x02, "Tolerance" },
+ { 0x0010, 0, 0x02, "ScaledValue" },
+ { 0x0011, 0, 0x02, "MinScaledValue" },
+ { 0x0012, 0, 0x02, "MaxScaledValue" },
+ { 0x0013, 0, 0x02, "ScaledTolerance" },
+ { 0x0014, 0, 0x02, "Scale" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1214,15 +1214,15 @@ const matter_command_t matter_Commands_0403[] = {
};
const matter_attribute_t matter_Attributes_0404[] = {
- { 0x0000, 0, 0x00, "MeasuredValue" },
- { 0x0001, 0, 0x00, "MinMeasuredValue" },
- { 0x0002, 0, 0x00, "MaxMeasuredValue" },
- { 0x0003, 0, 0x00, "Tolerance" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasuredValue" },
+ { 0x0001, 0, 0x02, "MinMeasuredValue" },
+ { 0x0002, 0, 0x02, "MaxMeasuredValue" },
+ { 0x0003, 0, 0x02, "Tolerance" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1231,15 +1231,15 @@ const matter_command_t matter_Commands_0404[] = {
};
const matter_attribute_t matter_Attributes_0405[] = {
- { 0x0000, 0, 0x00, "MeasuredValue" },
- { 0x0001, 0, 0x00, "MinMeasuredValue" },
- { 0x0002, 0, 0x00, "MaxMeasuredValue" },
- { 0x0003, 0, 0x00, "Tolerance" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasuredValue" },
+ { 0x0001, 0, 0x02, "MinMeasuredValue" },
+ { 0x0002, 0, 0x02, "MaxMeasuredValue" },
+ { 0x0003, 0, 0x02, "Tolerance" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1248,14 +1248,14 @@ const matter_command_t matter_Commands_0405[] = {
};
const matter_attribute_t matter_Attributes_0406[] = {
- { 0x0000, 0, 0x00, "Occupancy" },
- { 0x0001, 0, 0x00, "OccupancySensorType" },
- { 0x0002, 0, 0x00, "OccupancySensorTypeBitmap" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Occupancy" },
+ { 0x0001, 0, 0x02, "OccupancySensorType" },
+ { 0x0002, 0, 0x02, "OccupancySensorTypeBitmap" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1264,12 +1264,12 @@ const matter_command_t matter_Commands_0406[] = {
};
const matter_attribute_t matter_Attributes_0503[] = {
- { 0x0000, 0, 0x00, "MACAddress" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MACAddress" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1278,14 +1278,14 @@ const matter_command_t matter_Commands_0503[] = {
};
const matter_attribute_t matter_Attributes_0504[] = {
- { 0x0000, 0, 0x00, "ChannelList" },
- { 0x0001, 0, 0x00, "Lineup" },
- { 0x0002, 0, 0x00, "CurrentChannel" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "ChannelList" },
+ { 0x0001, 0, 0x02, "Lineup" },
+ { 0x0002, 0, 0x02, "CurrentChannel" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1297,13 +1297,13 @@ const matter_command_t matter_Commands_0504[] = {
};
const matter_attribute_t matter_Attributes_0505[] = {
- { 0x0000, 0, 0x00, "TargetList" },
- { 0x0001, 0, 0x00, "CurrentTarget" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "TargetList" },
+ { 0x0001, 0, 0x02, "CurrentTarget" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1313,18 +1313,18 @@ const matter_command_t matter_Commands_0505[] = {
};
const matter_attribute_t matter_Attributes_0506[] = {
- { 0x0000, 0, 0x00, "CurrentState" },
- { 0x0001, 0, 0x00, "StartTime" },
- { 0x0002, 0, 0x00, "Duration" },
- { 0x0003, 0, 0x00, "SampledPosition" },
- { 0x0004, 0, 0x00, "PlaybackSpeed" },
- { 0x0005, 0, 0x00, "SeekRangeEnd" },
- { 0x0006, 0, 0x00, "SeekRangeStart" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "CurrentState" },
+ { 0x0001, 0, 0x02, "StartTime" },
+ { 0x0002, 0, 0x02, "Duration" },
+ { 0x0003, 0, 0x02, "SampledPosition" },
+ { 0x0004, 0, 0x02, "PlaybackSpeed" },
+ { 0x0005, 0, 0x02, "SeekRangeEnd" },
+ { 0x0006, 0, 0x02, "SeekRangeStart" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1344,13 +1344,13 @@ const matter_command_t matter_Commands_0506[] = {
};
const matter_attribute_t matter_Attributes_0507[] = {
- { 0x0000, 0, 0x00, "InputList" },
- { 0x0001, 0, 0x00, "CurrentInput" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "InputList" },
+ { 0x0001, 0, 0x02, "CurrentInput" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1363,11 +1363,11 @@ const matter_command_t matter_Commands_0507[] = {
};
const matter_attribute_t matter_Attributes_0508[] = {
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1377,11 +1377,11 @@ const matter_command_t matter_Commands_0508[] = {
};
const matter_attribute_t matter_Attributes_0509[] = {
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1391,13 +1391,13 @@ const matter_command_t matter_Commands_0509[] = {
};
const matter_attribute_t matter_Attributes_050A[] = {
- { 0x0000, 0, 0x00, "AcceptHeader" },
- { 0x0001, 0, 0x00, "SupportedStreamingProtocols" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "AcceptHeader" },
+ { 0x0001, 0, 0x03, "SupportedStreamingProtocols" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1408,13 +1408,13 @@ const matter_command_t matter_Commands_050A[] = {
};
const matter_attribute_t matter_Attributes_050B[] = {
- { 0x0000, 0, 0x00, "OutputList" },
- { 0x0001, 0, 0x00, "CurrentOutput" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "OutputList" },
+ { 0x0001, 0, 0x02, "CurrentOutput" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1425,13 +1425,13 @@ const matter_command_t matter_Commands_050B[] = {
};
const matter_attribute_t matter_Attributes_050C[] = {
- { 0x0000, 0, 0x00, "CatalogList" },
- { 0x0001, 0, 0x00, "CurrentApp" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "CatalogList" },
+ { 0x0001, 0, 0x03, "CurrentApp" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1443,19 +1443,19 @@ const matter_command_t matter_Commands_050C[] = {
};
const matter_attribute_t matter_Attributes_050D[] = {
- { 0x0000, 0, 0x00, "VendorName" },
- { 0x0001, 0, 0x00, "VendorID" },
- { 0x0002, 0, 0x00, "ApplicationName" },
- { 0x0003, 0, 0x00, "ProductID" },
- { 0x0004, 0, 0x00, "Application" },
- { 0x0005, 0, 0x00, "Status" },
- { 0x0006, 0, 0x00, "ApplicationVersion" },
- { 0x0007, 0, 0x00, "AllowedVendorList" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "VendorName" },
+ { 0x0001, 0, 0x02, "VendorID" },
+ { 0x0002, 0, 0x02, "ApplicationName" },
+ { 0x0003, 0, 0x02, "ProductID" },
+ { 0x0004, 0, 0x02, "Application" },
+ { 0x0005, 0, 0x02, "Status" },
+ { 0x0006, 0, 0x02, "ApplicationVersion" },
+ { 0x0007, 0, 0x02, "AllowedVendorList" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1464,11 +1464,11 @@ const matter_command_t matter_Commands_050D[] = {
};
const matter_attribute_t matter_Attributes_050E[] = {
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1480,22 +1480,22 @@ const matter_command_t matter_Commands_050E[] = {
};
const matter_attribute_t matter_Attributes_0B04[] = {
- { 0x0000, 0, 0x00, "MeasurementType" },
- { 0x0304, 0, 0x00, "TotalActivePower" },
- { 0x0505, 0, 0x00, "RmsVoltage" },
- { 0x0506, 0, 0x00, "RmsVoltageMin" },
- { 0x0507, 0, 0x00, "RmsVoltageMax" },
- { 0x0508, 0, 0x00, "RmsCurrent" },
- { 0x0509, 0, 0x00, "RmsCurrentMin" },
- { 0x050A, 0, 0x00, "RmsCurrentMax" },
- { 0x050B, 0, 0x00, "ActivePower" },
- { 0x050C, 0, 0x00, "ActivePowerMin" },
- { 0x050D, 0, 0x00, "ActivePowerMax" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasurementType" },
+ { 0x0304, 0, 0x02, "TotalActivePower" },
+ { 0x0505, 0, 0x02, "RmsVoltage" },
+ { 0x0506, 0, 0x02, "RmsVoltageMin" },
+ { 0x0507, 0, 0x02, "RmsVoltageMax" },
+ { 0x0508, 0, 0x02, "RmsCurrent" },
+ { 0x0509, 0, 0x02, "RmsCurrentMin" },
+ { 0x050A, 0, 0x02, "RmsCurrentMax" },
+ { 0x050B, 0, 0x02, "ActivePower" },
+ { 0x050C, 0, 0x02, "ActivePowerMin" },
+ { 0x050D, 0, 0x02, "ActivePowerMax" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
diff --git a/lib/libesp32/berry_matter/src/be_matter_module.c b/lib/libesp32/berry_matter/src/be_matter_module.c
index dce07d4f7..3c65d9f84 100644
--- a/lib/libesp32/berry_matter/src/be_matter_module.c
+++ b/lib/libesp32/berry_matter/src/be_matter_module.c
@@ -80,6 +80,34 @@ const char* matter_get_attribute_name(uint16_t cluster, uint16_t attribute) {
}
BE_FUNC_CTYPE_DECLARE(matter_get_attribute_name, "s", "ii")
+bbool matter_is_attribute_writable(uint16_t cluster, uint16_t attribute) {
+ for (const matter_cluster_t * cl = matterAllClusters; cl->id != 0xFFFF; cl++) {
+ if (cl->id == cluster) {
+ for (const matter_attribute_t * at = cl->attributes; at->id != 0xFFFF; at++) {
+ if (at->id == attribute) {
+ return (at->flags & 0x01) ? btrue : bfalse;
+ }
+ }
+ }
+ }
+ return bfalse;
+}
+BE_FUNC_CTYPE_DECLARE(matter_is_attribute_writable, "b", "ii")
+
+bbool matter_is_attribute_reportable(uint16_t cluster, uint16_t attribute) {
+ for (const matter_cluster_t * cl = matterAllClusters; cl->id != 0xFFFF; cl++) {
+ if (cl->id == cluster) {
+ for (const matter_attribute_t * at = cl->attributes; at->id != 0xFFFF; at++) {
+ if (at->id == attribute) {
+ return (at->flags & 0x02) ? btrue : bfalse;
+ }
+ }
+ }
+ }
+ return bfalse;
+}
+BE_FUNC_CTYPE_DECLARE(matter_is_attribute_reportable, "b", "ii")
+
const char* matter_get_command_name(uint16_t cluster, uint16_t command) {
for (const matter_cluster_t * cl = matterAllClusters; cl->id != 0xFFFF; cl++) {
if (cl->id == cluster) {
@@ -110,6 +138,8 @@ extern const bclass be_class_Matter_TLV; // need to declare it upfront because
#include "solidify/solidified_Matter_Commissioning.h"
#include "solidify/solidified_Matter_Message.h"
#include "solidify/solidified_Matter_MessageHandler.h"
+#include "solidify/solidified_Matter_IM_Message.h"
+#include "solidify/solidified_Matter_IM_Subscription.h"
#include "solidify/solidified_Matter_IM.h"
#include "solidify/solidified_Matter_Plugin.h"
#include "solidify/solidified_Matter_Base38.h"
@@ -118,8 +148,8 @@ extern const bclass be_class_Matter_TLV; // need to declare it upfront because
#include "../generate/be_matter_certs.h"
-#include "solidify/solidified_Matter_Plugin_core.h"
-#include "solidify/solidified_Matter_Plugin_Relay.h"
+#include "solidify/solidified_Matter_Plugin_Root.h"
+#include "solidify/solidified_Matter_Plugin_OnOff.h"
/*********************************************************************************************\
* Get a bytes() object of the certificate DAC/PAI_Cert
@@ -158,6 +188,8 @@ module matter (scope: global) {
get_cluster_name, ctype_func(matter_get_cluster_name)
get_attribute_name, ctype_func(matter_get_attribute_name)
+ is_attribute_writable, ctype_func(matter_is_attribute_writable)
+ is_attribute_reportable, ctype_func(matter_is_attribute_reportable)
get_command_name, ctype_func(matter_get_command_name)
get_opcode_name, ctype_func(matter_get_opcode_name)
TLV, class(be_class_Matter_TLV)
@@ -247,9 +279,16 @@ module matter (scope: global) {
MessageHandler, class(be_class_Matter_MessageHandler)
// Interation Model
- Response_container, class(be_class_Matter_Response_container)
+ Path, class(be_class_Matter_Path)
+ IM_Status, class(be_class_Matter_IM_Status)
+ IM_InvokeResponse, class(be_class_Matter_IM_InvokeResponse)
+ IM_WriteResponse, class(be_class_Matter_IM_WriteResponse)
+ IM_ReportData, class(be_class_Matter_IM_ReportData)
+ IM_ReportDataSubscribed, class(be_class_Matter_IM_ReportDataSubscribed)
+ IM_SubscribeResponse, class(be_class_Matter_IM_SubscribeResponse)
+ IM_Subscription, class(be_class_Matter_IM_Subscription)
+ IM_Subscription_Shop, class(be_class_Matter_IM_Subscription_Shop)
IM, class(be_class_Matter_IM)
- Plugin_core, class(be_class_Matter_Plugin_core)
UI, class(be_class_Matter_UI)
// Base38 for QR Code
@@ -265,11 +304,11 @@ module matter (scope: global) {
DAC_Cert_FFF1_8000, func(matter_DAC_Cert_FFF1_8000)
DAC_Pub_FFF1_8000, func(matter_DAC_Pub_FFF1_8000)
DAC_Priv_FFF1_8000, func(matter_DAC_Priv_FFF1_8000)
- CD_FFF1_8000, func(matter_CD_FFF1_8000) // Certification Declaration
+ CD_FFF1_8000, func(matter_CD_FFF1_8000) // Certification Declaration
// Plugins
- Plugin_core, class(be_class_Matter_Plugin_core) // Generic behavior common to all devices
- Plugin_Relay, class(be_class_Matter_Plugin_Relay) // Relay behavior (OnOff)
+ Plugin_Root, class(be_class_Matter_Plugin_Root) // Generic behavior common to all devices
+ Plugin_OnOff, class(be_class_Matter_Plugin_OnOff) // Relay/Light behavior (OnOff)
}
@const_object_info_end */
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be b/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be
index d2a5a0fa9..4dfddced7 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be
@@ -113,9 +113,9 @@ class Matter_Commisioning_Context
pbkdfparamresp.responderSessionId = self.future_local_session_id
pbkdfparamresp.pbkdf_parameters_salt = self.device.salt
pbkdfparamresp.pbkdf_parameters_iterations = self.device.iterations
- tasmota.log("MTR: pbkdfparamresp: " + str(matter.inspect(pbkdfparamresp)), 3)
+ tasmota.log("MTR: pbkdfparamresp: " + str(matter.inspect(pbkdfparamresp)), 4)
var pbkdfparamresp_raw = pbkdfparamresp.encode()
- tasmota.log("MTR: pbkdfparamresp_raw: " + pbkdfparamresp_raw.tohex(), 3)
+ tasmota.log("MTR: pbkdfparamresp_raw: " + pbkdfparamresp_raw.tohex(), 4)
self.PBKDFParamResponse = pbkdfparamresp_raw
@@ -134,22 +134,22 @@ class Matter_Commisioning_Context
var pake1 = matter.Pake1().parse(msg.raw, msg.app_payload_idx)
self.pA = pake1.pA
- tasmota.log("MTR: received pA=" + self.pA.tohex(), 3)
+ tasmota.log("MTR: received pA=" + self.pA.tohex(), 4)
- tasmota.log("MTR: spake: " + matter.inspect(self.spake), 3)
+ tasmota.log("MTR: spake: " + matter.inspect(self.spake), 4)
# instanciate SPAKE
self.spake = crypto.SPAKE2P_Matter(self.device.w0, self.device.w1, self.device.L)
# compute pB
self.spake.compute_pB(self.y)
self.pB = self.spake.pB
- tasmota.log("MTR: y=" + self.y.tohex(), 3)
- tasmota.log("MTR: pb=" + self.pB.tohex(), 3)
+ tasmota.log("MTR: y=" + self.y.tohex(), 4)
+ tasmota.log("MTR: pb=" + self.pB.tohex(), 4)
# compute ZV
self.spake.compute_ZV_verifier(self.pA)
- tasmota.log("MTR: Z=" + self.spake.Z.tohex(), 3)
- tasmota.log("MTR: V=" + self.spake.V.tohex(), 3)
+ tasmota.log("MTR: Z=" + self.spake.Z.tohex(), 4)
+ tasmota.log("MTR: V=" + self.spake.V.tohex(), 4)
var context = crypto.SHA256()
context.update(bytes().fromstring(self.Matter_Context_Prefix))
@@ -157,7 +157,7 @@ class Matter_Commisioning_Context
context.update(self.PBKDFParamResponse)
var context_hash = context.out()
- tasmota.log("MTR: Context=" + context_hash.tohex(), 3)
+ tasmota.log("MTR: Context=" + context_hash.tohex(), 4)
# add pA
self.spake.pA = self.pA
@@ -165,35 +165,33 @@ class Matter_Commisioning_Context
self.spake.set_context(context_hash)
self.spake.compute_TT_hash(true) # `true` to indicate it's Matter variant to SPAKE2+
- tasmota.log("MTR: ------------------------------", 3)
- tasmota.log("MTR: Context = " + self.spake.Context.tohex(), 3)
- tasmota.log("MTR: A = " + self.spake.A.tohex(), 3)
- tasmota.log("MTR: B = " + self.spake.B.tohex(), 3)
- tasmota.log("MTR: M = " + self.spake.M.tohex(), 3)
- tasmota.log("MTR: N = " + self.spake.N.tohex(), 3)
- tasmota.log("MTR: pA = " + self.spake.pA.tohex(), 3)
- tasmota.log("MTR: pB = " + self.spake.pB.tohex(), 3)
- tasmota.log("MTR: Z = " + self.spake.Z.tohex(), 3)
- tasmota.log("MTR: V = " + self.spake.V.tohex(), 3)
- tasmota.log("MTR: w0 = " + self.spake.w0.tohex(), 3)
- tasmota.log("MTR: ------------------------------", 3)
+ tasmota.log("MTR: ------------------------------", 4)
+ tasmota.log("MTR: Context = " + self.spake.Context.tohex(), 4)
+ tasmota.log("MTR: M = " + self.spake.M.tohex(), 4)
+ tasmota.log("MTR: N = " + self.spake.N.tohex(), 4)
+ tasmota.log("MTR: pA = " + self.spake.pA.tohex(), 4)
+ tasmota.log("MTR: pB = " + self.spake.pB.tohex(), 4)
+ tasmota.log("MTR: Z = " + self.spake.Z.tohex(), 4)
+ tasmota.log("MTR: V = " + self.spake.V.tohex(), 4)
+ tasmota.log("MTR: w0 = " + self.spake.w0.tohex(), 4)
+ tasmota.log("MTR: ------------------------------", 4)
- tasmota.log("MTR: Kmain =" + self.spake.Kmain.tohex(), 3)
+ tasmota.log("MTR: Kmain =" + self.spake.Kmain.tohex(), 4)
- tasmota.log("MTR: KcA =" + self.spake.KcA.tohex(), 3)
- tasmota.log("MTR: KcB =" + self.spake.KcB.tohex(), 3)
- tasmota.log("MTR: K_shared=" + self.spake.K_shared.tohex(), 3)
- tasmota.log("MTR: Ke =" + self.spake.Ke.tohex(), 3)
+ tasmota.log("MTR: KcA =" + self.spake.KcA.tohex(), 4)
+ tasmota.log("MTR: KcB =" + self.spake.KcB.tohex(), 4)
+ tasmota.log("MTR: K_shared=" + self.spake.K_shared.tohex(), 4)
+ tasmota.log("MTR: Ke =" + self.spake.Ke.tohex(), 4)
self.cB = self.spake.cB
self.Ke = self.spake.Ke
- tasmota.log("MTR: cB=" + self.cB.tohex(), 3)
+ tasmota.log("MTR: cB=" + self.cB.tohex(), 4)
var pake2 = matter.Pake2()
pake2.pB = self.pB
pake2.cB = self.cB
- tasmota.log("MTR: pake2: " + matter.inspect(pake2), 3)
+ tasmota.log("MTR: pake2: " + matter.inspect(pake2), 4)
var pake2_raw = pake2.encode()
- tasmota.log("MTR: pake2_raw: " + pake2_raw.tohex(), 3)
+ tasmota.log("MTR: pake2_raw: " + pake2_raw.tohex(), 4)
# now package the response message
@@ -212,7 +210,7 @@ class Matter_Commisioning_Context
var pake3 = matter.Pake3().parse(msg.raw, msg.app_payload_idx)
self.cA = pake3.cA
- tasmota.log("MTR: received cA=" + self.cA.tohex(), 3)
+ tasmota.log("MTR: received cA=" + self.cA.tohex(), 4)
# check the value against computed
if self.cA != self.spake.cA raise "protocol_error", "invalid cA received" end
@@ -224,12 +222,12 @@ class Matter_Commisioning_Context
self.R2IKey = session_keys[16..31]
self.AttestationChallenge = session_keys[32..47]
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: session_keys=" + session_keys.tohex(), 3)
- tasmota.log("MTR: I2RKey =" + self.I2RKey.tohex(), 3)
- tasmota.log("MTR: R2IKey =" + self.R2IKey.tohex(), 3)
- tasmota.log("MTR: AC =" + self.AttestationChallenge.tohex(), 3)
- tasmota.log("MTR: ******************************", 3)
+ tasmota.log("MTR: ******************************", 4)
+ tasmota.log("MTR: session_keys=" + session_keys.tohex(), 4)
+ tasmota.log("MTR: I2RKey =" + self.I2RKey.tohex(), 4)
+ tasmota.log("MTR: R2IKey =" + self.R2IKey.tohex(), 4)
+ tasmota.log("MTR: AC =" + self.AttestationChallenge.tohex(), 4)
+ tasmota.log("MTR: ******************************", 4)
# now package the response message
var resp = msg.build_response(0x40 #-StatusReport-#, false) # no reliable flag
@@ -256,7 +254,7 @@ class Matter_Commisioning_Context
var destinationMessage = initiatorRandom + session.get_ca_pub() + session.get_fabric() + session.get_deviceid()
var key = session.get_ipk_group_key()
tasmota.log("MTR: SIGMA1: destinationMessage=" + destinationMessage.tohex(), 3)
- tasmota.log("MTR: SIGMA1: key_ipk=" + key.tohex(), 3)
+ tasmota.log("MTR: SIGMA1: key_ipk=" + key.tohex(), 4)
var h = crypto.HMAC_SHA256(key)
h.update(destinationMessage)
var candidateDestinationId = h.out()
@@ -315,12 +313,12 @@ class Matter_Commisioning_Context
var Resume1MICPayload = ec.decrypt(encrypted)
var decrypted_tag = ec.tag()
- tasmota.log("****************************************", 3)
- tasmota.log("MTR: * s1rk = " + s1rk.tohex(), 3)
- tasmota.log("MTR: * tag = " + tag.tohex(), 3)
- tasmota.log("MTR: * Resume1MICPayload = " + Resume1MICPayload.tohex(), 3)
- tasmota.log("MTR: * decrypted_tag = " + decrypted_tag.tohex(), 3)
- tasmota.log("****************************************", 3)
+ tasmota.log("****************************************", 4)
+ tasmota.log("MTR: * s1rk = " + s1rk.tohex(), 4)
+ tasmota.log("MTR: * tag = " + tag.tohex(), 4)
+ tasmota.log("MTR: * Resume1MICPayload = " + Resume1MICPayload.tohex(), 4)
+ tasmota.log("MTR: * decrypted_tag = " + decrypted_tag.tohex(), 4)
+ tasmota.log("****************************************", 4)
if tag == decrypted_tag
# Generate and Send Sigma2_Resume
session.resumption_id = crypto.random(16) # generate a new resumption id
@@ -349,15 +347,15 @@ class Matter_Commisioning_Context
var ac = session_keys[32..47]
var session_timestamp = tasmota.rtc()['utc']
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: I2RKey =" + i2r.tohex(), 3)
- tasmota.log("MTR: R2IKey =" + r2i.tohex(), 3)
- tasmota.log("MTR: AC =" + ac.tohex(), 3)
- tasmota.log("MTR: ******************************", 3)
+ tasmota.log("MTR: ******************************", 4)
+ tasmota.log("MTR: I2RKey =" + i2r.tohex(), 4)
+ tasmota.log("MTR: R2IKey =" + r2i.tohex(), 4)
+ tasmota.log("MTR: AC =" + ac.tohex(), 4)
+ tasmota.log("MTR: ******************************", 4)
var sigma2resume_raw = sigma2resume.encode()
session._Msg1 = nil
- tasmota.log("MTR: sigma2resume_raw: " + sigma2resume_raw.tohex(), 3)
+ tasmota.log("MTR: sigma2resume_raw: " + sigma2resume_raw.tohex(), 4)
# now package the response message
var resp = msg.build_response(0x33 #-sigma-2-resume-#, true)
@@ -365,7 +363,7 @@ class Matter_Commisioning_Context
self.responder.send_response(raw, msg.remote_ip, msg.remote_port, resp.message_counter)
- session.close()
+ # session.close()
session.set_keys(i2r, r2i, ac, session_timestamp)
session.set_persist(true) # keep session on flash
session.set_no_expiration() # never expire
@@ -402,9 +400,9 @@ class Matter_Commisioning_Context
sigma2_tbedata.add_TLV(4, matter.TLV.B2, session.resumption_id)
# compute TranscriptHash = Crypto_Hash(message = Msg1)
- tasmota.log("****************************************", 3)
+ tasmota.log("****************************************", 4)
session._Msg1 = sigma1.Msg1
- tasmota.log("MTR: * MSG1 = " + session._Msg1.tohex(), 3)
+ tasmota.log("MTR: * MSG1 = " + session._Msg1.tohex(), 4)
var TranscriptHash = crypto.SHA256().update(session._Msg1).out()
# Compute S2K, p.175
@@ -412,27 +410,27 @@ class Matter_Commisioning_Context
var s2k_salt = session.get_ipk_group_key() + responderRandom + self.ResponderEph_pub + TranscriptHash
var s2k = crypto.HKDF_SHA256().derive(session.shared_secret, s2k_salt, s2k_info, 16)
- tasmota.log("MTR: * SharedSecret = " + session.shared_secret.tohex(), 3)
- tasmota.log("MTR: * s2k_salt = " + s2k_salt.tohex(), 3)
- tasmota.log("MTR: * s2k = " + s2k.tohex(), 3)
+ tasmota.log("MTR: * SharedSecret = " + session.shared_secret.tohex(), 4)
+ tasmota.log("MTR: * s2k_salt = " + s2k_salt.tohex(), 4)
+ tasmota.log("MTR: * s2k = " + s2k.tohex(), 4)
var sigma2_tbedata_raw = sigma2_tbedata.encode()
# // `AES_CCM.init(secret_key:bytes(16 or 32), iv:bytes(7..13), aad:bytes(), data_len:int, tag_len:int) -> instance`
var aes = crypto.AES_CCM(s2k, bytes().fromstring(self.TBEData2_Nonce), bytes(), size(sigma2_tbedata_raw), 16)
var TBEData2Encrypted = aes.encrypt(sigma2_tbedata_raw) + aes.tag()
- tasmota.log("MTR: * TBEData2Enc = " + TBEData2Encrypted.tohex(), 3)
- tasmota.log("****************************************", 3)
+ tasmota.log("MTR: * TBEData2Enc = " + TBEData2Encrypted.tohex(), 4)
+ tasmota.log("****************************************", 4)
var sigma2 = matter.Sigma2()
sigma2.responderRandom = responderRandom
sigma2.responderSessionId = self.future_local_session_id
sigma2.responderEphPubKey = self.ResponderEph_pub
sigma2.encrypted2 = TBEData2Encrypted
- tasmota.log("MTR: sigma2: " + matter.inspect(sigma2), 3)
+ tasmota.log("MTR: sigma2: " + matter.inspect(sigma2), 4)
var sigma2_raw = sigma2.encode()
session._Msg2 = sigma2_raw
- tasmota.log("MTR: sigma2_raw: " + sigma2_raw.tohex(), 3)
+ tasmota.log("MTR: sigma2_raw: " + sigma2_raw.tohex(), 4)
# now package the response message
var resp = msg.build_response(0x31 #-sigma-2-#, true) # no reliable flag
@@ -454,23 +452,23 @@ class Matter_Commisioning_Context
var session = msg.session
var sigma3 = matter.Sigma3().parse(msg.raw, msg.app_payload_idx)
- tasmota.log("****************************************", 3)
+ tasmota.log("****************************************", 4)
# compute TranscriptHash = Crypto_Hash(message = Msg1 || Msg2)
var TranscriptHash = crypto.SHA256().update(session._Msg1).update(session._Msg2).out()
- tasmota.log("MTR: * session = " + str(session), 3)
- tasmota.log("MTR: session.ipk_epoch_key " + str(session.ipk_epoch_key), 3)
- tasmota.log("MTR: session.fabric_compressed " + str(session.fabric_compressed), 3)
- tasmota.log("MTR: * ipk_group_key = " + session.get_ipk_group_key().tohex(), 3)
- tasmota.log("MTR: * TranscriptHash= " + TranscriptHash.tohex(), 3)
+ tasmota.log("MTR: * session = " + str(session), 4)
+ tasmota.log("MTR: session.ipk_epoch_key " + str(session.ipk_epoch_key), 4)
+ tasmota.log("MTR: session.fabric_compressed " + str(session.fabric_compressed), 4)
+ tasmota.log("MTR: * ipk_group_key = " + session.get_ipk_group_key().tohex(), 4)
+ tasmota.log("MTR: * TranscriptHash= " + TranscriptHash.tohex(), 4)
var s3k_info = bytes().fromstring(self.S3K_Info)
var s3k = crypto.HKDF_SHA256().derive(session.shared_secret, session.get_ipk_group_key() + TranscriptHash, s3k_info, 16)
- tasmota.log("****************************************", 3)
+ tasmota.log("****************************************", 4)
# self.ipk_epoch_key == nil || self.fabric_compressed")
- tasmota.log("MTR: * s3k_salt = " + (session.get_ipk_group_key() + TranscriptHash).tohex(), 3)
- tasmota.log("MTR: * s3k = " + s3k.tohex(), 3)
- tasmota.log("****************************************", 3)
+ tasmota.log("MTR: * s3k_salt = " + (session.get_ipk_group_key() + TranscriptHash).tohex(), 4)
+ tasmota.log("MTR: * s3k = " + s3k.tohex(), 4)
+ tasmota.log("****************************************", 4)
# decrypt
var encrypted = sigma3.TBEData3Encrypted[0..-17]
@@ -478,10 +476,10 @@ class Matter_Commisioning_Context
var ec = crypto.AES_CCM(s3k, bytes().fromstring(self.TBEData3_Nonce), bytes(), size(encrypted), 16)
var TBEData3 = ec.decrypt(encrypted)
var TBETag3 = ec.tag()
- tasmota.log("MTR: * TBEData3 = " + TBEData3.tohex(), 3)
- tasmota.log("MTR: * TBETag3 = " + TBETag3.tohex(), 3)
- tasmota.log("MTR: * tag_sent = " + tag.tohex(), 3)
- tasmota.log("****************************************", 3)
+ tasmota.log("MTR: * TBEData3 = " + TBEData3.tohex(), 4)
+ tasmota.log("MTR: * TBETag3 = " + TBETag3.tohex(), 4)
+ tasmota.log("MTR: * tag_sent = " + tag.tohex(), 4)
+ tasmota.log("****************************************", 4)
if TBETag3 != tag raise "value_error", "tag do not match" end
@@ -507,9 +505,9 @@ class Matter_Commisioning_Context
sigma3_tbs.add_TLV(4, matter.TLV.B1, self.ResponderEph_pub)
var sigma3_tbs_raw = sigma3_tbs.encode()
- tasmota.log("MTR: * initiatorNOCPubKey = " + initiatorNOCPubKey.tohex(), 3)
- tasmota.log("MTR: * ec_signature = " + ec_signature.tohex(), 3)
- tasmota.log("****************************************", 3)
+ tasmota.log("MTR: * initiatorNOCPubKey = " + initiatorNOCPubKey.tohex(), 4)
+ tasmota.log("MTR: * ec_signature = " + ec_signature.tohex(), 4)
+ tasmota.log("****************************************", 4)
# `crypto.EC_P256().ecdsa_verify_sha256(public_key:bytes(65), message:bytes(), hash:bytes()) -> bool`
var sigma3_tbs_valid = crypto.EC_P256().ecdsa_verify_sha256(initiatorNOCPubKey, sigma3_tbs_raw, ec_signature)
@@ -524,9 +522,9 @@ class Matter_Commisioning_Context
session._Msg1 = nil
session._Msg2 = nil
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: shared_secret =" + session.shared_secret.tohex(), 3)
- tasmota.log("MTR: ipk + hash =" + (session.get_ipk_group_key() + TranscriptHash).tohex(), 3)
+ tasmota.log("MTR: ******************************", 4)
+ tasmota.log("MTR: shared_secret =" + session.shared_secret.tohex(), 4)
+ tasmota.log("MTR: ipk + hash =" + (session.get_ipk_group_key() + TranscriptHash).tohex(), 4)
# compute session key
var session_keys = crypto.HKDF_SHA256().derive(session.shared_secret #- input key -#,
session.get_ipk_group_key() + TranscriptHash #- salt -#,
@@ -537,11 +535,11 @@ class Matter_Commisioning_Context
var ac = session_keys[32..47]
var session_timestamp = tasmota.rtc()['utc']
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: I2RKey =" + i2r.tohex(), 3)
- tasmota.log("MTR: R2IKey =" + r2i.tohex(), 3)
- tasmota.log("MTR: AC =" + ac.tohex(), 3)
- tasmota.log("MTR: ******************************", 3)
+ tasmota.log("MTR: ******************************", 4)
+ tasmota.log("MTR: I2RKey =" + i2r.tohex(), 4)
+ tasmota.log("MTR: R2IKey =" + r2i.tohex(), 4)
+ tasmota.log("MTR: AC =" + ac.tohex(), 4)
+ tasmota.log("MTR: ******************************", 4)
# Send success status report
var resp = msg.build_response(0x40 #-StatusReport-#, true) # reliable flag
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning_Data.be b/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning_Data.be
index 9aca4927c..f4ce7616d 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning_Data.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning_Data.be
@@ -98,7 +98,7 @@ class Matter_Pake1
def parse(b, idx)
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
- tasmota.log("MTR: parsed TLV: " + str(val), 3)
+ tasmota.log("MTR: parsed TLV: " + str(val), 4)
self.pA = val.getsubval(1)
return self
@@ -130,7 +130,7 @@ class Matter_Pake3
def parse(b, idx)
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
- tasmota.log("MTR: parsed TLV: " + str(val), 3)
+ tasmota.log("MTR: parsed TLV: " + str(val), 4)
self.cA = val.getsubval(1)
return self
@@ -157,7 +157,7 @@ class Matter_Sigma1
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
self.Msg1 = b[idx..]
- tasmota.log("MTR: Sigma1 TLV=" + str(val), 3)
+ tasmota.log("MTR: Sigma1 TLV=" + str(val), 4)
self.initiatorRandom = val.getsubval(1)
self.initiator_session_id = val.getsubval(2)
@@ -240,7 +240,7 @@ class Matter_Sigma3
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
self.Msg3 = b[idx..]
- tasmota.log("MTR: Sigma3 TLV=" + str(val), 3)
+ tasmota.log("MTR: Sigma3 TLV=" + str(val), 4)
self.TBEData3Encrypted = val.getsubval(1)
return self
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Device.be b/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
index 7765c16b8..3477d09fa 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
@@ -28,7 +28,7 @@ class Matter_Device
static var FILENAME = "_matter_device.json"
var plugins # list of plugins
var udp_server # `matter.UDPServer()` object
- var msg_handler # `matter.MessageHandler()` object
+ var message_handler # `matter.MessageHandler()` object
var sessions # `matter.Session_Store()` objet
var ui
# information about the device
@@ -65,12 +65,12 @@ class Matter_Device
self.sessions = matter.Session_Store()
self.sessions.load()
- self.msg_handler = matter.MessageHandler(self)
+ self.message_handler = matter.MessageHandler(self)
self.ui = matter.UI(self)
# add the default plugin
- self.plugins.push(matter.Plugin_core(self))
- self.plugins.push(matter.Plugin_Relay(self))
+ self.plugins.push(matter.Plugin_Root(self))
+ self.plugins.push(matter.Plugin_OnOff(self))
self.start_mdns_announce_hostnames()
@@ -167,7 +167,7 @@ class Matter_Device
# dispatch every second click to sub-objects that need it
def every_second()
self.sessions.every_second()
- self.msg_handler.every_second()
+ self.message_handler.every_second()
end
#############################################################
@@ -178,7 +178,7 @@ class Matter_Device
#############################################################
# callback when message is received
def msg_received(raw, addr, port)
- return self.msg_handler.msg_received(raw, addr, port)
+ return self.message_handler.msg_received(raw, addr, port)
end
def msg_send(raw, addr, port, id)
@@ -214,27 +214,6 @@ class Matter_Device
tasmota.set_timer(0, /-> self.start_commissioning_complete(session))
end
- #############################################################
- # Start UDP mDNS announcements for commissioning
- #
- # eth is `true` if ethernet turned up, `false` is wifi turned up
- # def mdns_announce_commissioning()
- # var services = {
- # "VP":str(self.vendorid) + "+" + str(self.productid),
- # "D": self.discriminator,
- # "CM":1, # requires passcode
- # "T":0, # no support for TCP
- # "SII":5000, "SAI":300
- # }
-
- # if self.self.hostname_eth
- # mdns.add_service("_matterc","_udp", 5540, services, self.commissioning_instance_eth, self.hostname_eth)
- # end
- # if self.self.hostname_wifi
- # mdns.add_service("_matter","_tcp", 5540, services, self.commissioning_instance_wifi, self.hostname_wifi)
- # end
- # end
-
#############################################################
# Start Operational Discovery
def start_operational_dicovery(session)
@@ -265,28 +244,36 @@ class Matter_Device
tasmota.log("MTR: *** Commissioning complete ***", 2)
end
- #############################################################
- # read an attribute
- #
- # def read_attribute(msg, ctx)
- # # dispatch only to plugins that support this endpoint and cluster
- # var endpoint = ctx.endpoint
- # var cluster = ctx.cluster
- # var idx = 0
- # while idx < size(self.plugins)
- # var plugin = self.plugins[idx]
-
- # if plugin.has(cluster, endpoint)
- # var ret = plugin.read_attribute(msg, ctx)
- # if ret != nil
- # return ret
- # end
- # end
-
- # idx += 1
- # end
- # end
+ #################################################################################
+ # Simple insertion sort - sorts the list in place, and returns the list
+ # remove duplicates
+ #################################################################################
+ static def sort_distinct(l)
+ # insertion sort
+ for i:1..size(l)-1
+ var k = l[i]
+ var j = i
+ while (j > 0) && (l[j-1] > k)
+ l[j] = l[j-1]
+ j -= 1
+ end
+ l[j] = k
+ end
+ # remove duplicate now that it's sorted
+ var i = 1
+ if size(l) <= 1 return l end # no duplicate if empty or 1 element
+ var prev = l[0]
+ while i < size(l)
+ if l[i] == prev
+ l.remove(i)
+ else
+ prev = l[i]
+ i += 1
+ end
+ end
+ return l
+ end
#############################################################
# expand attribute list based
@@ -294,69 +281,94 @@ class Matter_Device
# called only when expansion is needed,
# so we don't need to report any error since they are ignored
def process_attribute_expansion(ctx, cb)
+ #################################################################################
+ # Returns the keys of a map as a sorted list
+ #################################################################################
+ def keys_sorted(m)
+ var l = []
+ for k: m.keys()
+ l.push(k)
+ end
+ # insertion sort
+ for i:1..size(l)-1
+ var k = l[i]
+ var j = i
+ while (j > 0) && (l[j-1] > k)
+ l[j] = l[j-1]
+ j -= 1
+ end
+ l[j] = k
+ end
+ return l
+ end
+
import string
var endpoint = ctx.endpoint
- var endpoint_mono = [ endpoint ]
+ # var endpoint_mono = [ endpoint ]
var endpoint_found = false # did any endpoint match
var cluster = ctx.cluster
- var cluster_mono = [ cluster ]
+ # var cluster_mono = [ cluster ]
var cluster_found = false
var attribute = ctx.attribute
- var attribute_mono = [ attribute ]
+ # var attribute_mono = [ attribute ]
var attribute_found = false
var direct = (ctx.endpoint != nil) && (ctx.cluster != nil) && (ctx.attribute != nil) # true if the target is a precise attribute, false if it results from an expansion and error are ignored
- tasmota.log(string.format("MTR: process_attribute_expansion %s", str(ctx)), 3)
+ tasmota.log(string.format("MTR: process_attribute_expansion %s", str(ctx)), 4)
+
+ # build the list of candidates
+
+ # list of all endpoints
+ var all = {} # map of {endpoint: {cluster: {attributes:[pi]}}
+ tasmota.log(string.format("MTR: endpoint=%s cluster=%s attribute=%s", endpoint, cluster, attribute), 4)
for pi: self.plugins
var ep_list = pi.get_endpoints() # get supported endpoints for this plugin
- tasmota.log(string.format("MTR: ep_list %s %s", str(pi), str(ep_list)), 3)
- if endpoint != nil
- # we have a specific endpoint, make sure it's in the list
- if ep_list.find(endpoint) != nil
- ep_list = endpoint_mono
- endpoint_found = true
- else
- continue
- end
- end
- # ep_list is the actual list of candidate endpoints for this plugin
- # iterate on endpoints
+ tasmota.log(string.format("MTR: pi=%s ep_list=%s", str(pi), str(ep_list)), 4)
for ep: ep_list
- # now filter on clusters
- var cluster_list = pi.get_cluster_list(ep)
- tasmota.log(string.format("MTR: cluster_list %s %s", str(ep), str(cluster_list)), 3)
- if cluster != nil
- # we have a specific cluster, make sure it's in the list
- if cluster_list.find(cluster) != nil
- cluster_list = cluster_mono
- cluster_found = true
- else
- continue
+ if endpoint != nil && ep != endpoint continue end # skip if specific endpoint and no match
+ # from now on, 'ep' is a good candidate
+ if !all.contains(ep) all[ep] = {} end # create empty structure if not already in the list
+ endpoint_found = true
+
+ # now explore the cluster list for 'ep'
+ var cluster_list = pi.get_cluster_list(ep) # cluster_list is the actual list of candidate cluster for this pluging and endpoint
+ tasmota.log(string.format("MTR: pi=%s ep=%s cl_list=%s", str(pi), str(ep), str(cluster_list)), 4)
+ for cl: cluster_list
+ if cluster != nil && cl != cluster continue end # skip if specific cluster and no match
+ # from now on, 'cl' is a good candidate
+ if !all[ep].contains(cl) all[ep][cl] = {} end
+ cluster_found = true
+
+ # now filter on attributes
+ var attr_list = pi.get_attribute_list(ep, cl)
+ tasmota.log(string.format("MTR: pi=%s ep=%s cl=%s at_list=%s", str(pi), str(ep), str(cl), str(attr_list)), 4)
+ for at: attr_list
+ if attribute != nil && at != attribute continue end # skip if specific attribiute and no match
+ # from now on, 'at' is a good candidate
+ if !all[ep][cl].contains(at) all[ep][cl][at] = [] end
+ attribute_found = true
+
+ all[ep][cl][at].push(pi) # add plugin to the list
end
end
- # cluster_list is the actual list of candidate cluster for this pluging and endpoint
- for cl: cluster_list
- # now filter on attribute
- var attr_list = pi.get_attribute_list(ep, cluster)
- tasmota.log(string.format("MTR: attr_list %s %s", str(cl), str(attr_list)), 3)
- if attribute != nil
- # we have a specific attribute, make sure it's in the list
- if attr_list.find(attribute) != nil
- attr_list = attribute_mono
- attribute_found = true
- else
- continue
- end
- for at: attr_list
- # we now have the complete candidate: ep/cl/at
- tasmota.log(string.format("MTR: expansion [%02X]%04X/%04X", ep, cl, at), 3)
- ctx.endpoint = ep
- ctx.cluster = cl
- ctx.attribute = at
- var finished = cb(pi, ctx, direct) # call the callback with the plugin and the context
- if finished return end
- end
+ end
+ end
+
+ # import json
+ # tasmota.log("MTR: all = " + json.dump(all), 2)
+
+ # iterate on candidates
+ for ep: keys_sorted(all)
+ for cl: keys_sorted(all[ep])
+ for at: keys_sorted(all[ep][cl])
+ for pi: all[ep][cl][at]
+ tasmota.log(string.format("MTR: expansion [%02X]%04X/%04X", ep, cl, at), 3)
+ ctx.endpoint = ep
+ ctx.cluster = cl
+ ctx.attribute = at
+ var finished = cb(pi, ctx, direct) # call the callback with the plugin and the context
+ if direct && finished return end
end
end
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
index e03f17aeb..1aedb3b55 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
@@ -19,50 +19,21 @@
import matter
-#@ solidify:Matter_Response_container,weak
#@ solidify:Matter_IM,weak
-#################################################################################
-# Matter_Response_container
-#
-# Used to store all the elements of the reponse to an attribute or command
-#################################################################################
-class Matter_Response_container
- var endpoint
- var cluster
- var attribute
- var command
- var status
-
- def tostring()
- try
- import string
- var s = ""
- s += (self.endpoint != nil ? string.format("[%02X]", self.endpoint) : "[**]")
- s += (self.cluster != nil ? string.format("%04X/", self.cluster) : "****/")
- s += (self.attribute != nil ? string.format("%04X", self.attribute) : "")
- s += (self.command != nil ? string.format("%04X", self.attribute) : "")
- return s
- except .. as e, m
- return "Exception> " + str(e) + ", " + str(m)
- end
- end
-
-end
-matter.Response_container = Matter_Response_container
-
#################################################################################
# Matter_IM class
#################################################################################
class Matter_IM
- static var MAX_MESSAGE = 1200
- static var MSG_TIMEOUT = 10000 # 10s
- var responder
var device
+ var subs # subscriptions shop
- def init(responder, device)
- self.responder = responder
+ var send_queue # list of IM_Message queued for sending as part of exchange-id
+
+ def init(device)
self.device = device
+ self.send_queue = []
+ self.subs = matter.IM_Subscription_Shop(self)
end
def process_incoming(msg)
@@ -74,7 +45,7 @@ class Matter_IM
tasmota.log("MTR: IM TLV: " + str(val), 3)
var InteractionModelRevision = val.findsubval(0xFF)
- tasmota.log("MTR: InteractionModelRevision=" + (InteractionModelRevision != nil ? str(InteractionModelRevision) : "nil"), 3)
+ tasmota.log("MTR: InteractionModelRevision=" + (InteractionModelRevision != nil ? str(InteractionModelRevision) : "nil"), 4)
var opcode = msg.opcode
if opcode == 0x01 # Status Response
@@ -102,26 +73,71 @@ class Matter_IM
return false
end
+ #############################################################
+ # send enqueued responses
+ #
+ def send_enqueued(responder)
+ var idx = 0
+ while idx < size(self.send_queue)
+ var message = self.send_queue[idx]
+
+ if message.ready
+ var finish = message.send(responder) # send message
+ if finish
+ self.send_queue.remove(idx)
+ idx -= 1
+ else
+ message.ready = false # needs more to proceed
+ end
+ end
+
+ idx += 1
+ end
+ end
+
+ #############################################################
+ # find in send_queue by exchangeid
+ #
+ def find_sendqueue_by_exchangeid(exchangeid)
+ if exchangeid == nil return nil end
+ var idx = 0
+ while idx < size(self.send_queue)
+ var message = self.send_queue[idx]
+ if message.get_exchangeid() == exchangeid
+ return message
+ end
+ idx += 1
+ end
+ return nil
+ end
+
+
#############################################################
# process IM 0x01 Status Response
#
# val is the TLV structure
- # returns `true` if processed, `false` if silently ignored,
# or raises an exception
def process_status_response(msg, val)
import string
var status = val.findsubval(0, 0xFF)
- tasmota.log(string.format("MTR: Status Response = 0x%02X", status), 3)
- return true
+ if status == matter.SUCCESS
+ tasmota.log("MTR: >Status", 2) # don't show 'SUCCESS' to not overflow logs with non-information
+ var message = self.find_sendqueue_by_exchangeid(msg.exchange_id)
+ if message
+ message.ack_received(msg) # re-arm the sending of next packets for the same exchange
+ return true
+ end
+ else
+ tasmota.log(string.format("MTR: >Status ERROR = 0x%02X", status), 2)
+ end
+ return false
end
#############################################################
- # process IM 0x02 Read Request
+ # Inner code shared between read_attributes and subscribe_request
#
- # val is the TLV structure
- # returns `true` if processed, `false` if silently ignored,
- # or raises an exception
- def process_read_request(msg, val)
+ # query: `ReadRequestMessage` or `SubscribeRequestMessage`
+ def _inner_process_read_request(msg, query)
var endpoints = self.device.get_active_endpoints()
### Inner function to be iterated upon
@@ -150,7 +166,7 @@ class Matter_IM
a1.attribute_data.data = res
ret.attribute_reports.push(a1)
- tasmota.log(string.format("MTR: Read_Attr %s%s - %s", str(ctx), attr_name, str(res)), 2)
+ tasmota.log(string.format("MTR: Read_Attr %s%s - %s", str(ctx), attr_name, str(res)), 2)
return true # stop expansion since we have a value
elif ctx.status != nil
if direct
@@ -164,105 +180,89 @@ class Matter_IM
a1.attribute_status.status.status = ctx.status
ret.attribute_reports.push(a1)
- tasmota.log(string.format("MTR: Read_Attr %s%s - STATUS: 0x%02X %s", str(ctx), attr_name, ctx.status, ctx.status == matter.UNSUPPORTED_ATTRIBUTE ? "UNSUPPORTED_ATTRIBUTE" : ""), 2)
+ tasmota.log(string.format("MTR: Read_Attr %s%s - STATUS: 0x%02X %s", str(ctx), attr_name, ctx.status, ctx.status == matter.UNSUPPORTED_ATTRIBUTE ? "UNSUPPORTED_ATTRIBUTE" : ""), 2)
return true
end
else
- tasmota.log(string.format("MTR: Read_Attr %s%s - IGNORED", str(ctx), attr_name), 2)
+ tasmota.log(string.format("MTR: Read_Attr %s%s - IGNORED", str(ctx), attr_name), 2)
# ignore if content is nil and status is undefined
+ return false
end
end
# structure is `ReadRequestMessage` 10.6.2 p.558
- tasmota.log("MTR: IM:read_request processing start", 3)
- var ctx = matter.Response_container()
+ var ctx = matter.Path()
- var query = matter.ReadRequestMessage().from_TLV(val)
- if query.attributes_requests != nil
- # prepare the response
- var ret = matter.ReportDataMessage()
- # ret.suppress_response = true
- ret.attribute_reports = []
+ # prepare the response
+ var ret = matter.ReportDataMessage()
+ # ret.suppress_response = true
+ ret.attribute_reports = []
- for q:query.attributes_requests
- # need to do expansion here
- ctx.endpoint = q.endpoint
- ctx.cluster = q.cluster
- ctx.attribute = q.attribute
- ctx.status = matter.UNSUPPORTED_ATTRIBUTE #default error if returned `nil`
-
- # expand endpoint
- if ctx.endpoint == nil || ctx.cluster == nil || ctx.attribute == nil
- # we need expansion, log first
- if ctx.cluster != nil && ctx.attribute != nil
- var attr_name = matter.get_attribute_name(ctx.cluster, ctx.attribute)
- tasmota.log("MTR: Read_Attr " + str(ctx) + (attr_name ? " (" + attr_name + ")" : ""), 2)
- else
- tasmota.log("MTR: Read_Attr " + str(ctx), 2)
- end
-
+ for q:query.attributes_requests
+ # need to do expansion here
+ ctx.endpoint = q.endpoint
+ ctx.cluster = q.cluster
+ ctx.attribute = q.attribute
+ ctx.status = matter.UNSUPPORTED_ATTRIBUTE #default error if returned `nil`
+
+ # expand endpoint
+ if ctx.endpoint == nil || ctx.cluster == nil || ctx.attribute == nil
+ # we need expansion, log first
+ if ctx.cluster != nil && ctx.attribute != nil
+ var attr_name = matter.get_attribute_name(ctx.cluster, ctx.attribute)
+ tasmota.log("MTR: Read_Attr " + str(ctx) + (attr_name ? " (" + attr_name + ")" : ""), 2)
+ else
+ tasmota.log("MTR: Read_Attr " + str(ctx), 2)
end
-
- # implement concrete expansion
- self.device.process_attribute_expansion(ctx,
- / pi, ctx, direct -> read_single_attribute(ret, pi, ctx, direct)
- )
+
end
- tasmota.log("MTR: ReportDataMessage=" + str(ret), 3)
- tasmota.log("MTR: ReportDataMessageTLV=" + str(ret.to_TLV()), 3)
+ # implement concrete expansion
+ self.device.process_attribute_expansion(ctx,
+ / pi, ctx, direct -> read_single_attribute(ret, pi, ctx, direct)
+ )
+ end
- # send the reponse that may need to be chunked if too large to fit in a single UDP message
- self.send_attr_report(msg, ret)
+ tasmota.log("MTR: ReportDataMessage=" + str(ret), 4)
+ tasmota.log("MTR: ReportDataMessageTLV=" + str(ret.to_TLV()), 3)
+
+ return ret
+ end
+
+ #############################################################
+ # process IM 0x02 Read Request
+ #
+ # val is the TLV structure
+ # returns `true` if processed, `false` if silently ignored,
+ # or raises an exception
+ def process_read_request(msg, val)
+ var query = matter.ReadRequestMessage().from_TLV(val)
+ if query.attributes_requests != nil
+ var ret = self._inner_process_read_request(msg, query)
+ self.send_report_data(msg, ret)
end
return true
end
- def send_attr_report(msg, ret)
- # class to keep the current chunked reponse
- class Matter_Attr_Report
- var ret # return structure as ReportDataMessage TLV structure
- var resp # response Frame (to keep all fields like session or remote_ip/port)
- var expiration
- end
-
- # compute the acceptable size
-
- var msg_sz = 0
- var elements = 0
- if size(ret.attribute_reports) > 0
- msg_sz = size(ret.attribute_reports[0].to_TLV().encode())
- elements = 1
- end
- while msg_sz < self.MAX_MESSAGE && elements < size(ret.attribute_reports)
- var next_sz = size(ret.attribute_reports[elements].to_TLV().encode())
- if msg_sz + next_sz < self.MAX_MESSAGE
- msg_sz += next_sz
- elements += 1
- end
- end
-
- var next_elemnts = ret.attribute_reports[elements .. ]
- ret.attribute_reports = ret.attribute_reports[0 .. elements - 1]
-
- if size(next_elemnts) > 0
- ret.more_chunked_messages = true
- end
-
- var resp = msg.build_response(0x05 #-Report Data-#, true)
- resp.encode(ret.to_TLV().encode()) # payload in cleartext
- resp.encrypt()
- self.responder.send_response(resp.raw, msg.remote_ip, msg.remote_port, resp.message_counter)
-
- if size(next_elemnts) > 0
- ret.attribute_reports = next_elemnts
- var chunked_next = Matter_Attr_Report()
- chunked_next.ret = ret
- chunked_next.resp = resp
- chunked_next.expiration = tasmota.millis() + self.MSG_TIMEOUT
+ #############################################################
+ # process IM 0x03 Subscribe Request
+ #
+ def subscribe_request(msg, val)
+ import string
+ var query = matter.SubscribeRequestMessage().from_TLV(val)
+
+ if !query.keep_subscriptions
+ self.subs.remove_by_session(msg.session) # if `keep_subscriptions`, kill all subscriptions from current session
end
+ tasmota.log("MTR: received SubscribeRequestMessage=" + str(query), 3)
+ var sub = self.subs.new_subscription(msg.session, query)
+ var ret = self._inner_process_read_request(msg, query)
+ # ret is of type `Matter_ReportDataMessage`
+ ret.subscription_id = sub.subscription_id # enrich with subscription id TODO
+ self.send_subscribe_response(msg, ret, sub)
+ return true
end
#############################################################
@@ -274,8 +274,8 @@ class Matter_IM
def process_invoke_request(msg, val)
import string
# structure is `ReadRequestMessage` 10.6.2 p.558
- tasmota.log("MTR: IM:invoke_request processing start", 3)
- var ctx = matter.Response_container()
+ tasmota.log("MTR: IM:invoke_request processing start", 4)
+ var ctx = matter.Path()
var query = matter.InvokeRequestMessage().from_TLV(val)
if query.invoke_requests != nil
@@ -291,11 +291,19 @@ class Matter_IM
ctx.status = matter.UNSUPPORTED_COMMAND #default error if returned `nil`
var cmd_name = matter.get_command_name(ctx.cluster, ctx.command)
- if cmd_name == nil cmd_name = string.format("0x%04X/0x02X", ctx.cluster, ctx.command) end
- tasmota.log(string.format("MTR: >Received_cmd %s from [%s]:%i", cmd_name, msg.remote_ip, msg.remote_port), 2)
- var res = self.responder.device.invoke_request(msg, q.command_fields, ctx)
+ tasmota.log(string.format("MTR: >Received %s %s from [%s]:%i", str(ctx), cmd_name ? cmd_name : "", msg.remote_ip, msg.remote_port), 2)
+ var res = self.device.invoke_request(msg, q.command_fields, ctx)
var a1 = matter.InvokeResponseIB()
- if res != nil
+ if res == true # special case, just respond ok
+ a1.status = matter.CommandStatusIB()
+ a1.status.command_path = matter.CommandPathIB()
+ a1.status.command_path.endpoint = ctx.endpoint
+ a1.status.command_path.cluster = ctx.cluster
+ a1.status.command_path.command = ctx.command
+ a1.status.status = matter.StatusIB()
+ a1.status.status.status = matter.SUCCESS
+ ret.invoke_responses.push(a1)
+ elif res != nil
a1.command = matter.CommandDataIB()
a1.command.command_path = matter.CommandPathIB()
a1.command.command_path.endpoint = ctx.endpoint
@@ -305,8 +313,7 @@ class Matter_IM
ret.invoke_responses.push(a1)
cmd_name = matter.get_command_name(ctx.cluster, ctx.command)
- if cmd_name == nil cmd_name = string.format("0x%04X/0x%02X", ctx.cluster, ctx.command) end
- tasmota.log(string.format("MTR: write_single_attribute(ret, pi, ctx, write_data, direct)
+ )
+ end
+
+ tasmota.log("MTR: ReportWriteMessage=" + str(ret), 4)
+ tasmota.log("MTR: ReportWriteMessageTLV=" + str(ret.to_TLV()), 3)
+
+ # send the reponse that may need to be chunked if too large to fit in a single UDP message
+ if !suppress_response
+ self.send_write_response(msg, ret)
+ end
+ end
+ return true
end
#############################################################
@@ -387,7 +470,7 @@ class Matter_IM
def process_write_response(msg, val)
import string
var query = matter.WriteResponseMessage().from_TLV(val)
- tasmota.log("MTR: received WriteResponseMessage=" + str(query), 3)
+ tasmota.log("MTR: received WriteResponseMessage=" + str(query), 2)
return false
end
@@ -397,7 +480,7 @@ class Matter_IM
def process_invoke_response(msg, val)
import string
var query = matter.InvokeResponseMessage().from_TLV(val)
- tasmota.log("MTR: received InvokeResponseMessage=" + str(query), 3)
+ tasmota.log("MTR: received InvokeResponseMessage=" + str(query), 2)
return false
end
@@ -409,22 +492,70 @@ class Matter_IM
var query = matter.TimedRequestMessage().from_TLV(val)
tasmota.log("MTR: received TimedRequestMessage=" + str(query), 3)
- tasmota.log(string.format("MTR: >Received_IM TimedRequest=%i from [%s]:%i", query.timeout, msg.remote_ip, msg.remote_port), 2)
+ tasmota.log(string.format("MTR: >Received TimedRequest=%i from [%s]:%i", query.timeout, msg.remote_ip, msg.remote_port), 2)
# Send success status report
- var sr = matter.StatusResponseMessage()
- sr.status = matter.SUCCESS
- var resp = msg.build_response(0x01 #-Status Response-#, true #-reliable-#)
- resp.encode(sr.to_TLV().encode()) # payload in cleartext
- resp.encrypt()
- self.responder.send_response(resp.raw, msg.remote_ip, msg.remote_port, resp.message_counter)
+ self.send_status(msg, matter.SUCCESS)
return true
end
+ #############################################################
+ # send regular update for data subscribed
+ #
+ def send_subscribe_update(sub)
+ import string
+ var session = sub.session
+
+ var ret = matter.ReportDataMessage()
+ ret.subscription_id = sub.subscription_id
+ ret.attribute_reports = []
+ ret.suppress_response = true # true for empy report, as per 8.6.2 p.425
+
+ self.send_queue.push(matter.IM_ReportDataSubscribed(self.device.message_handler, session, ret))
+
+ self.send_enqueued(self.device.message_handler)
+ end
+
+ #############################################################
+ # send_status
+ #
+ def send_status(msg, status)
+ self.send_queue.push(matter.IM_Status(msg, status))
+ end
+
+ #############################################################
+ # send_invoke_response
+ #
+ def send_invoke_response(msg, data)
+ self.send_queue.push(matter.IM_InvokeResponse(msg, data))
+ end
+
+ #############################################################
+ # send_invoke_response
+ #
+ def send_write_response(msg, data)
+ self.send_queue.push(matter.IM_WriteResponse(msg, data))
+ end
+
+ #############################################################
+ # send_report_data
+ #
+ def send_report_data(msg, data)
+ self.send_queue.push(matter.IM_ReportData(msg, data))
+ end
+
+ #############################################################
+ # send_report_data
+ #
+ def send_subscribe_response(msg, data, sub)
+ self.send_queue.push(matter.IM_SubscribeResponse(msg, data, sub))
+ end
+
#############################################################
# placeholder, nothing to run for now
def every_second()
+ self.subs.every_second()
end
end
matter.IM = Matter_IM
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM_Data.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM_Data.be
index f1159ff36..6a566ab7a 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_IM_Data.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM_Data.be
@@ -670,7 +670,7 @@ class Matter_SubscribeRequestMessage : Matter_IM_Message_base
var keep_subscriptions # bool
var min_interval_floor # u16
var max_interval_ceiling # u16
- var attribute_requests # array of AttributePathIB
+ var attributes_requests # array of AttributePathIB
var event_requests # array of EventPathIB
var event_filters # array of EventFilterIB
var fabric_filtered # bool
@@ -679,13 +679,13 @@ class Matter_SubscribeRequestMessage : Matter_IM_Message_base
# decode from TLV
def from_TLV(val)
if val == nil return nil end
- self.keep_subscriptions = val.findsubval(0)
- self.min_interval_floor = val.findsubval(1)
- self.max_interval_ceiling = val.findsubval(2)
- self.attribute_requests = self.from_TLV_array(val.findsubval(3), matter.AttributePathIB)
+ self.keep_subscriptions = val.findsubval(0, false)
+ self.min_interval_floor = val.findsubval(1, 0)
+ self.max_interval_ceiling = val.findsubval(2, 60)
+ self.attributes_requests = self.from_TLV_array(val.findsubval(3), matter.AttributePathIB)
self.event_requests = self.from_TLV_array(val.findsubval(4), matter.EventPathIB)
self.event_filters = self.from_TLV_array(val.findsubval(5), matter.EventFilterIB)
- self.fabric_filtered = val.findsubval(7)
+ self.fabric_filtered = val.findsubval(7, false)
self.data_version_filters = self.from_TLV_array(val.findsubval(8), matter.DataVersionFilterIB)
return self
end
@@ -696,7 +696,7 @@ class Matter_SubscribeRequestMessage : Matter_IM_Message_base
s.add_TLV(0, TLV.BOOL, self.keep_subscriptions)
s.add_TLV(1, TLV.U2, self.min_interval_floor)
s.add_TLV(2, TLV.U2, self.max_interval_ceiling)
- self.to_TLV_array(s, 3, self.attribute_requests)
+ self.to_TLV_array(s, 3, self.attributes_requests)
self.to_TLV_array(s, 4, self.event_requests)
self.to_TLV_array(s, 5, self.event_filters)
s.add_TLV(7, TLV.BOOL, self.fabric_filtered)
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM_Message.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM_Message.be
new file mode 100644
index 000000000..72954d3fb
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM_Message.be
@@ -0,0 +1,281 @@
+#
+# Matter_IM_Message.be - suppport for Matter Interaction Model messages responses
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+import matter
+
+#@ solidify:Matter_Path,weak
+#@ solidify:Matter_IM_Message,weak
+#@ solidify:Matter_IM_Status,weak
+#@ solidify:Matter_IM_InvokeResponse,weak
+#@ solidify:Matter_IM_WriteResponse,weak
+#@ solidify:Matter_IM_ReportData,weak
+#@ solidify:Matter_IM_ReportDataSubscribed,weak
+#@ solidify:Matter_IM_SubscribeResponse,weak
+
+#################################################################################
+# Matter_Path
+#
+# Used to store all the elements of the reponse to an attribute or command
+#################################################################################
+class Matter_Path
+ var endpoint # endpoint or `nil` if expansion
+ var cluster # cluster or `nil` if expansion
+ var attribute # attribute or `nil` if expansion
+ var command # command
+ var status # status to be returned (matter.SUCCESS or matter.)
+
+ def tostring()
+ try
+ import string
+ var s = ""
+ s += (self.endpoint != nil ? string.format("[%02X]", self.endpoint) : "[**]")
+ s += (self.cluster != nil ? string.format("%04X/", self.cluster) : "****/")
+ s += (self.attribute != nil ? string.format("%04X", self.attribute) : "")
+ s += (self.command != nil ? string.format("%04X", self.command) : "")
+ if self.attribute == nil && self.command == nil s += "****" end
+ return s
+ except .. as e, m
+ return "Exception> " + str(e) + ", " + str(m)
+ end
+ end
+
+end
+matter.Path = Matter_Path
+
+#################################################################################
+# Matter_IM_Message
+#
+# Superclass for all IM responses
+#################################################################################
+class Matter_IM_Message
+ var resp # response Frame object
+ var ready # bool: ready to send (true) or wait (false)
+ var data # TLV data of the response (if any)
+
+ # build a response message stub
+ def init(msg, opcode, reliable)
+ self.resp = msg.build_response(opcode, reliable)
+ self.ready = true
+ end
+
+ # ack received for previous message, proceed to next (if any)
+ def ack_received(msg)
+ self.resp = msg.build_response(self.resp.opcode, self.resp.x_flag_r, self.resp) # update packet
+ self.ready = true
+ end
+
+ # get the exchange-id for this message
+ def get_exchangeid()
+ return self.resp.exchange_id
+ end
+
+ # return true if transaction is complete (remove object from queue)
+ # default responder for data
+ def send(responder)
+ var resp = self.resp
+ resp.encode(self.data.to_TLV().encode()) # payload in cleartext
+ resp.encrypt()
+ responder.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter)
+ return true
+ end
+
+end
+matter.IM_Message = Matter_IM_Message
+
+#################################################################################
+# Matter_IM_Status
+#
+# Send a simple Status Message
+#################################################################################
+class Matter_IM_Status : Matter_IM_Message
+
+ def init(msg, status)
+ super(self).init(msg, 0x01 #-Status Response-#, true #-reliable-#)
+ var sr = matter.StatusResponseMessage()
+ sr.status = status
+ self.data = sr
+ self.ready = true # send immediately
+ end
+end
+matter.IM_Status = Matter_IM_Status
+
+#################################################################################
+# Matter_IM_InvokeResponse
+#
+# Send a simple Status Message
+#################################################################################
+class Matter_IM_InvokeResponse : Matter_IM_Message
+
+ def init(msg, data)
+ super(self).init(msg, 0x09 #-Invoke Response-#, true)
+ self.data = data
+ self.ready = true # send immediately
+ end
+end
+matter.IM_InvokeResponse = Matter_IM_InvokeResponse
+
+#################################################################################
+# Matter_IM_WriteResponse
+#
+# Send a simple Status Message
+#################################################################################
+class Matter_IM_WriteResponse : Matter_IM_Message
+
+ def init(msg, data)
+ super(self).init(msg, 0x07 #-Write Response-#, true)
+ self.data = data
+ self.ready = true # send immediately
+ end
+
+end
+matter.IM_WriteResponse = Matter_IM_WriteResponse
+
+#################################################################################
+# Matter_IM_ReportData
+#
+# Report Data for a Read Request
+#################################################################################
+class Matter_IM_ReportData : Matter_IM_Message
+ static var MAX_MESSAGE = 1200 # max bytes size for a single TLV worklaod
+ static var MSG_TIMEOUT = 10000 # 10s
+ var expiration # expiration time for the reporting
+
+ def init(msg, data)
+ super(self).init(msg, 0x05 #-Report Data-#, true)
+ self.data = data
+ self.ready = true # send immediately
+ self.expiration = tasmota.millis() + self.MSG_TIMEOUT
+ end
+
+ # return true if transaction is complete (remove object from queue)
+ # default responder for data
+ def send(responder)
+ import string
+ var resp = self.resp
+ var ret = self.data
+ var was_chunked = ret.more_chunked_messages # is this following a chunked packet?
+
+ # compute the acceptable size
+ var msg_sz = 0
+ var elements = 0
+ if size(ret.attribute_reports) > 0
+ msg_sz = ret.attribute_reports[0].to_TLV().encode_len()
+ elements = 1
+ end
+ while msg_sz < self.MAX_MESSAGE && elements < size(ret.attribute_reports)
+ var next_sz = ret.attribute_reports[elements].to_TLV().encode_len()
+ if msg_sz + next_sz < self.MAX_MESSAGE
+ msg_sz += next_sz
+ elements += 1
+ else
+ break
+ end
+ end
+
+ tasmota.log(string.format("MTR: elements=%i msg_sz=%i total=%i", elements, msg_sz, size(ret.attribute_reports)), 3)
+ var next_elemnts = ret.attribute_reports[elements .. ]
+ ret.attribute_reports = ret.attribute_reports[0 .. elements - 1]
+ ret.more_chunked_messages = (size(next_elemnts) > 0)
+
+ if was_chunked
+ tasmota.log(string.format("MTR: Read_Attr next_chunk exch=%i", self.get_exchangeid()), 3)
+ end
+ if ret.more_chunked_messages
+ if !was_chunked
+ tasmota.log(string.format("MTR: Read_Attr first_chunk exch=%i", self.get_exchangeid()), 3)
+ end
+ tasmota.log("MTR: sending TLV" + str(ret), 3)
+ end
+
+ resp.encode(self.data.to_TLV().encode()) # payload in cleartext
+ resp.encrypt()
+ responder.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter)
+
+ if size(next_elemnts) > 0
+ ret.attribute_reports = next_elemnts
+ tasmota.log("MTR: to_be_sent_later TLV" + str(ret), 3)
+ self.expiration = tasmota.millis() + self.MSG_TIMEOUT # give more time
+ return false # keep alive
+ else
+ return true # finished, remove
+ end
+ end
+
+end
+matter.IM_ReportData = Matter_IM_ReportData
+
+
+#################################################################################
+# Matter_IM_ReportDataSubscribed
+#
+# Main difference is that we are the spontaneous inititor
+#################################################################################
+class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
+
+ def init(message_handler, session, data)
+ self.resp = matter.Frame.initiate_response(message_handler, session, 0x05 #-Report Data-#, true)
+ self.data = data
+ self.ready = true # send immediately
+ self.expiration = tasmota.millis() + self.MSG_TIMEOUT
+ end
+end
+matter.IM_ReportDataSubscribed = Matter_IM_ReportDataSubscribed
+
+#################################################################################
+# Matter_IM_SubscribeResponse
+#
+# Report Data for a Read Request
+#################################################################################
+class Matter_IM_SubscribeResponse : Matter_IM_ReportData
+ var sub # subscription object
+ var report_data_phase # true during reportdata
+
+ def init(msg, data, sub)
+ super(self).init(msg, data)
+ self.sub = sub
+ self.report_data_phase = true
+ end
+
+ # return true if transaction is complete (remove object from queue)
+ # default responder for data
+ def send(responder)
+ if self.report_data_phase
+ var ret = super(self).send(responder)
+ if !ret return false end # ReportData needs to continue
+ # ReportData is finished
+ self.report_data_phase = false
+ return false
+
+ else
+ # send the final SubscribeReponse
+ var resp = self.resp
+ var sr = matter.SubscribeResponseMessage()
+ sr.subscription_id = self.sub.subscription_id
+ sr.max_interval = self.sub.max_interval
+
+ self.resp.opcode = 0x04 #- Subscribe Response -#
+ resp.encode(sr.to_TLV().encode()) # payload in cleartext
+ resp.encrypt()
+ responder.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter)
+ return true
+ end
+ end
+
+end
+matter.IM_SubscribeResponse = Matter_IM_SubscribeResponse
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be
new file mode 100644
index 000000000..f8ca285d6
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be
@@ -0,0 +1,180 @@
+#
+# Matter_IM_Subscription.be - suppport for Matter Interaction Model subscriptions
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+import matter
+
+#@ solidify:Matter_IM_Subscription,weak
+#@ solidify:Matter_IM_Subscription_Shop,weak
+
+#################################################################################
+# Matter_IM_Subscription
+#
+# Individual subscription instance
+#################################################################################
+class Matter_IM_Subscription
+ static var MAX_INTERVAL_MARGIN = 10 # we always keep 10s margin
+ # parameters of the subscription
+ var subscription_id # id of the subcription as known by requester
+ var session # the session it belongs to
+ var path_list # list of path subscibed to
+ var min_interval # never send data more often than every `min_interval` seconds
+ var max_interval # always send data before `max_interal` seconds or the subscription is lost
+ var fabric_filtered
+ # manage time
+ var expiration # expiration epoch, we need to respond before
+ # updates
+ var updates
+
+ # req: SubscribeRequestMessage
+ def init(id, session, req)
+ self.subscription_id = id
+ self.session = session
+ # check values for min_interval
+ var min_interval = req.min_interval_floor
+ if min_interval < 0 min_interval = 0 end
+ if min_interval > 60 min_interval = 60 end
+ self.min_interval = min_interval
+ # check values for max_interval
+ var max_interval = req.max_interval_ceiling
+ if max_interval < 60 max_interval = 60 end
+ if max_interval > 3600 max_interval = 3600 end
+ self.max_interval = max_interval
+
+ self.fabric_filtered = req.fabric_filtered
+
+ # get list of path from
+ self.path_list = []
+
+ for q: req.attributes_requests
+ var ctx = matter.Path()
+ ctx.endpoint = q.endpoint
+ ctx.cluster = q.cluster
+ ctx.attribute = q.attribute
+ self.path_list.push(ctx)
+ end
+
+ # update next time interval
+ self.updates = []
+ self.clear_and_arm()
+
+ tasmota.log("MTR: new subsctiption " + matter.inspect(self), 2)
+ end
+
+ # clear log after it was sent, and re-arm next expiration
+ def clear_and_arm()
+ self.updates.clear()
+ self.expiration = tasmota.millis() + (self.max_interval - self.MAX_INTERVAL_MARGIN) * 1000
+ end
+
+ # signal that an attribute was updated, to add to the list of reportable
+ def attribute_updated(ctx, fabric_specific)
+ var idx = 0
+ while idx < size(self.path_list)
+ var filter = self.path_list[idx]
+ if (filter.endpoint == nil || filter.endpoint == ctx.endpoint) &&
+ (filter.cluster == nil || filter.cluster == ctx.cluster) &&
+ (filter.attribute == nil || filter.attribute == ctx.attribute)
+
+ self.updates.push(ctx)
+ end
+ idx += 1
+ end
+ end
+
+end
+matter.IM_Subscription = Matter_IM_Subscription
+
+#################################################################################
+# Matter_IM_Subscription_Shop (monad)
+#
+# Handles all subscriptions
+#################################################################################
+class Matter_IM_Subscription_Shop
+ var subs # list of subscriptions
+ var im # pointer to parent `im` object
+
+ def init(im)
+ self.im = im
+ self.subs = []
+ end
+
+ #############################################################
+ # create a new subscription
+ #
+ # session object
+ # SubscribeRequestMessage request
+ # returns: new subscription
+ def new_subscription(session, req)
+ import crypto
+ var id = crypto.random(2).get(0,2)
+ while self.get_by_id(id)
+ id = crypto.random(2).get(0,2)
+ end
+
+ var sub = matter.IM_Subscription(id, session, req)
+ self.subs.push(sub)
+
+ return sub
+ end
+
+ def get_by_id(id)
+ var idx = 0
+ while idx < size(self.subs)
+ if self.subs[idx].subscription_id == id
+ return self.subs[idx]
+ end
+ idx += 1
+ end
+ end
+
+ def remove_by_session(session)
+ var idx = 0
+ while idx < size(self.subs)
+ if self.subs[idx].session == session
+ self.subs.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ end
+
+ def every_second()
+ var idx = 0
+ while idx < size(self.subs)
+ var sub = self.subs[idx]
+ if tasmota.time_reached(sub.expiration)
+ self.im.send_subscribe_update(sub)
+ sub.clear_and_arm()
+ end
+ idx += 1
+ end
+ end
+
+ # signal that an attribute was updated, to add to the list of reportable
+ def attribute_updated(ctx, fabric_specific)
+ # signal any relevant subscription
+ var idx = 0
+ while idx < size(self.subs)
+ self.subs[idx].attribute_updated(ctx, fabric_specific)
+ idx += 1
+ end
+ end
+
+end
+matter.IM_Subscription_Shop = Matter_IM_Subscription_Shop
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Message.be b/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
index 8ca41200b..8f9e14fad 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
@@ -232,6 +232,9 @@ class Matter_Frame
# send back response
var resp = classof(self)(self.message_handler)
+ resp.remote_ip = self.remote_ip
+ resp.remote_port = self.remote_port
+
if self.flag_s
resp.flag_dsiz = 0x01
resp.dest_node_id_8 = self.source_node_id
@@ -249,19 +252,23 @@ class Matter_Frame
resp.protocol_id = 0 # PROTOCOL_ID_SECURE_CHANNEL
resp.x_flag_a = 1 # ACK of previous message
resp.ack_message_counter = self.message_counter
- resp.x_flag_r = 0
+ resp.x_flag_r = 1
- tasmota.log(string.format("MTR: Received %s from [%s]:%i", op_name, addr, port), 2)
+ tasmota.log(string.format("MTR: >Received %s from [%s]:%i", op_name, addr, port), 2)
end
self.commissioning.process_incoming(frame, addr, port)
return true
@@ -88,6 +92,8 @@ class Matter_MessageHandler
tasmota.log("MTR: frame="+matter.inspect(frame), 3)
return false
end
+ if addr session.__ip = addr end
+ if port session.__port = port end
frame.session = session # keep a pointer of the session in the message
# check if it's a duplicate
@@ -106,7 +112,7 @@ class Matter_MessageHandler
# continue decoding
tasmota.log(string.format("MTR: idx=%i clear=%s", frame.payload_idx, frame.raw.tohex()), 3)
frame.decode_payload()
- tasmota.log("MTR: decrypted message: protocol_id:"+str(frame.protocol_id)+" opcode="+str(frame.opcode)+" exchange_id"+str(frame.exchange_id), 3)
+ tasmota.log("MTR: decrypted message: protocol_id:"+str(frame.protocol_id)+" opcode="+str(frame.opcode)+" exchange_id="+str(frame.exchange_id), 3)
self.device.packet_ack(frame.ack_message_counter) # acknowledge packet
@@ -117,10 +123,22 @@ class Matter_MessageHandler
tasmota.log("MTR: PROTOCOL_ID_SECURE_CHANNEL " + matter.inspect(frame), 3)
# if frame.opcode == 0x10
# end
- return true
+ ret = true
elif protocol_id == 0x0001 # PROTOCOL_ID_INTERACTION_MODEL
# dispatch to IM Protocol Messages
- return self.im.process_incoming(frame, addr, port)
+ ret = self.im.process_incoming(frame, addr, port)
+ # if `ret` is true, we have something to send
+ if ret
+ self.im.send_enqueued(self)
+
+ elif frame.x_flag_r # nothing to respond, check if we need a standalone ack
+ var resp = frame.build_standalone_ack()
+ resp.encode()
+ resp.encrypt()
+ # no ecnryption required for ACK
+ self.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter)
+ # send simple ack
+ end
# -- PROTOCOL_ID_BDX is used for file transfer between devices, not used in Tasmota
# elif protocol_id == 0x0002 # PROTOCOL_ID_BDX -- BDX not handled at all in Tasmota
@@ -132,12 +150,11 @@ class Matter_MessageHandler
# return false # ignore for now TODO
else
tasmota.log("MTR: ignoring unhandled protocol_id:"+str(protocol_id), 3)
- return false
end
end
- return true
+ return ret
except .. as e, m
tasmota.log("MTR: MessageHandler::msg_received exception: "+str(e)+";"+str(m))
import debug
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be
index d66ecbe92..4e16d9464 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be
@@ -91,7 +91,7 @@ class Matter_Plugin
#############################################################
# write attribute
- def write_attribute(msg, endpoint, cluster, attribute)
+ def write_attribute(msg, ctx, write_data)
return nil
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
new file mode 100644
index 000000000..e7827c5bf
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
@@ -0,0 +1,156 @@
+#
+# Matter_Plugin_OnOff.be - implements the behavior for a Relay (OnOff)
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+# Matter plug-in for core behavior
+
+# dummy declaration for solidification
+class Matter_Plugin end
+
+#@ solidify:Matter_Plugin_OnOff,weak
+
+class Matter_Plugin_OnOff : Matter_Plugin
+ static var ENDPOINTS = [ 1 ]
+ static var CLUSTERS = {
+ 0x001D: [0,1,2,3], # Descriptor Cluster 9.5 p.453
+ 0x0003: [0,1], # Identify 1.2 p.16
+ 0x0004: [0], # Groups 1.3 p.21
+ 0x0005: [0,1,2,3,4,5], # Scenes 1.4 p.30 - no writable
+ 0x0006: [0,0xFFFC] # On/Off 1.5 p.48
+ }
+ static var TYPES = [ 0x0100 ] # On/Off Light
+
+ var onoff # fake status for now # TODO
+
+ #############################################################
+ # Constructor
+ def init(device)
+ super(self).init(device)
+ self.endpoints = self.ENDPOINTS
+ self.clusters = self.CLUSTERS
+ self.onoff = false # fake status for now # TODO
+ end
+
+ #############################################################
+ # read an attribute
+ #
+ def read_attribute(msg, ctx)
+ import string
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ if cluster == 0x001D # ========== Descriptor Cluster 9.5 p.453 ==========
+
+ if attribute == 0x0000 # ---------- DeviceTypeList / list[DeviceTypeStruct] ----------
+ var dtl = TLV.Matter_TLV_array()
+ for dt: self.TYPES
+ var d1 = dtl.add_struct()
+ d1.add_TLV(0, TLV.U2, dt) # DeviceType
+ d1.add_TLV(1, TLV.U2, 1) # Revision
+ end
+ return dtl
+ elif attribute == 0x0001 # ---------- ServerList / list[cluster-id] ----------
+ var sl = TLV.Matter_TLV_array()
+ for cl: self.get_cluster_list()
+ sl.add_TLV(nil, TLV.U4, cl)
+ end
+ return sl
+ elif attribute == 0x0002 # ---------- ClientList / list[cluster-id] ----------
+ var cl = TLV.Matter_TLV_array()
+ cl.add_TLV(nil, TLV.U2, 0x0006)
+ return cl
+ elif attribute == 0x0003 # ---------- PartsList / list[endpoint-no]----------
+ var pl = TLV.Matter_TLV_array()
+ return pl
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0003 # ========== Identify 1.2 p.16 ==========
+ if attribute == 0x0000 # ---------- IdentifyTime / u2 ----------
+ return TLV.create_TLV(TLV.U2, 0) # no identification in progress
+ elif attribute == 0x0001 # ---------- IdentifyType / enum8 ----------
+ return TLV.create_TLV(TLV.U1, 0) # IdentifyType = 0x00 None
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
+ if attribute == 0x0000 # ---------- OnOff / bool ----------
+ return TLV.create_TLV(TLV.BOOL, self.onoff)
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ end
+
+ end
+ # no match found, return that the attribute is unsupported end
+ end
+
+ #############################################################
+ # Invoke a command
+ #
+ # returns a TLV object if successful, contains the response
+ # or an `int` to indicate a status
+ def invoke_request(msg, val, ctx)
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var command = ctx.command
+ var session = msg.session
+
+ # ====================================================================================================
+ if cluster == 0x0003 # ========== Identify 1.2 p.16 ==========
+
+ if command == 0x0000 # ---------- Identify ----------
+ # ignore
+ return true
+ elif command == 0x0001 # ---------- IdentifyQuery ----------
+ # create IdentifyQueryResponse
+ # ID=1
+ # 0=Certificate (octstr)
+ var iqr = TLV.Matter_TLV_struct()
+ iqr.add_TLV(0, TLV.U2, 0) # Timeout
+ ctx.command = 0x00 # IdentifyQueryResponse
+ return iqr
+ elif command == 0x0040 # ---------- TriggerEffect ----------
+ # ignore
+ return true
+ end
+ # ====================================================================================================
+ elif cluster == 0x0004 # ========== Groups 1.3 p.21 ==========
+ # TODO
+ return true
+ # ====================================================================================================
+ elif cluster == 0x0005 # ========== Scenes 1.4 p.30 ==========
+ # TODO
+ return true
+ # ====================================================================================================
+ elif cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
+ if command == 0x0000 # ---------- Off ----------
+ self.onoff = false
+ return true
+ elif command == 0x0001 # ---------- On ----------
+ self.onoff = true
+ return true
+ elif command == 0x0002 # ---------- Toggle ----------
+ self.onoff = !self.onoff
+ return true
+ end
+ end
+ end
+end
+matter.Plugin_OnOff = Matter_Plugin_OnOff
+
\ No newline at end of file
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Relay.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Relay.be
deleted file mode 100644
index 8721cca93..000000000
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Relay.be
+++ /dev/null
@@ -1,93 +0,0 @@
-#
-# Matter_Plugin_Relay.be - implements the behavior for a Relay (OnOff)
-#
-# Copyright (C) 2023 Stephan Hadinger & Theo Arends
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-#
-
-# Matter plug-in for core behavior
-
-# dummy declaration for solidification
-class Matter_Plugin end
-
-#@ solidify:Matter_Plugin_Relay,weak
-
-class Matter_Plugin_Relay : Matter_Plugin
- static var ENDPOINTS = [ 1 ]
- static var CLUSTERS = {
- 0x001D: [0,1,2,3],
- 0x0003: [],
- 0x0004: [],
- 0x0005: [],
- 0x0006: [0],
- 0x0008: [],
-# 0x0406: []
- }
- static var TYPES = [ 0x0100 ] # On/Off Light
-
- #############################################################
- # Constructor
- def init(device)
- super(self).init(device)
- self.endpoints = self.ENDPOINTS
- self.clusters = self.CLUSTERS
- end
-
- #############################################################
- # read an attribute
- #
- def read_attribute(msg, ctx)
- import string
- var TLV = matter.TLV
- var cluster = ctx.cluster
- var attribute = ctx.attribute
-
- if cluster == 0x001D # ========== Descriptor Cluster 9.5 p.453 ==========
-
- if attribute == 0x0000 # ---------- DeviceTypeList / list[DeviceTypeStruct] ----------
- var dtl = TLV.Matter_TLV_array()
- var d1 = dtl.add_struct()
- d1.add_TLV(0, TLV.U2, self.TYPES[0]) # DeviceType
- d1.add_TLV(1, TLV.U2, 1) # Revision
- return dtl
- elif attribute == 0x0001 # ---------- ServerList / list[cluster-id] ----------
- var sl = TLV.Matter_TLV_array()
- for cl: self.get_cluster_list()
- sl.add_TLV(nil, TLV.U4, cl)
- end
- return sl
- elif attribute == 0x0002 # ---------- ClientList / list[cluster-id] ----------
- var cl = TLV.Matter_TLV_array()
- cl.add_TLV(nil, TLV.U2, 0x0006)
- return cl
- elif attribute == 0x0003 # ---------- PartsList / list[endpoint-no]----------
- var pl = TLV.Matter_TLV_array()
- return pl
- end
- end
- # no match found, return that the attribute is unsupported end
- end
-
- #############################################################
- # Invoke a command
- #
- # returns a TLV object if successful, contains the response
- # or an `int` to indicate a status
- def invoke_request(msg, val, ctx)
- # no match found, return that the command is unsupported
- end
-end
-matter.Plugin_core = Matter_Plugin_core
-
\ No newline at end of file
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_core.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
similarity index 78%
rename from lib/libesp32/berry_matter/src/embedded/Matter_Plugin_core.be
rename to lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
index 4c8929cff..88ccfbb05 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_core.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
@@ -1,5 +1,5 @@
#
-# Matter_Plugin_core.be - implements the core features that a Matter device must implemment
+# Matter_Plugin_Root.be - implements the core features that a Matter device must implemment
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
@@ -17,30 +17,33 @@
# along with this program. If not, see .
#
-# Matter plug-in for core behavior
+# Matter plug-in for root behavior
# dummy declaration for solidification
class Matter_Plugin end
-#@ solidify:Matter_Plugin_core,weak
+#@ solidify:Matter_Plugin_Root,weak
-class Matter_Plugin_core : Matter_Plugin
+class Matter_Plugin_Root : Matter_Plugin
static var ENDPOINTS = [ 0 ]
static var CLUSTERS = {
- 0x001D: [0,1,2,3],
- 0x0028: [0,1,2,3,4,5,6,7,8,9],
- 0x002B: [0,1],
- 0x002C: [0,1,2],
- 0x0030: [0,1,2,3,4],
- 0x0031: [3,0xFFFC],
- 0x0032: [],
- 0x0033: [0,1,2,8],
- 0x0034: [],
- 0x0038: [0,1,7],
- 0x003E: [0,1,2,3,4,5],
- 0x003C: [],
- 0x003F: []
+ 0x001D: [0,1,2,3], # Descriptor Cluster 9.5 p.453
+ 0x001F: [0,2,3,4], # Access Control Cluster, p.461
+ 0x0028: [0,1,2,3,4,5,6,7,8,9,0x12],# Basic Information Cluster cluster 11.1 p.565
+ 0x002A: [0,1,2,3], # OTA Software Update Requestor Cluster Definition 11.19.7 p.762
+ 0x002B: [0,1], # Localization Configuration Cluster 11.3 p.580
+ 0x002C: [0,1,2], # Time Format Localization Cluster 11.4 p.581
+ 0x0030: [0,1,2,3,4], # GeneralCommissioning cluster 11.9 p.627
+ 0x0031: [3,4,0xFFFC], # Network Commissioning Cluster cluster 11.8 p.606
+ 0x0032: [], # Diagnostic Logs Cluster 11.10 p.637
+ 0x0033: [0,1,2,8], # General Diagnostics Cluster 11.11 p.642
+ 0x0034: [], # Software Diagnostics Cluster 11.12 p.654
+ 0x0038: [0,1,7], # Time Synchronization 11.16 p.689
+ 0x003C: [], # Administrator Commissioning Cluster 11.18 p.725
+ 0x003E: [0,1,2,3,4,5], # Node Operational Credentials Cluster 11.17 p.704
+ 0x003F: [] # Group Key Management Cluster 11.2 p.572
}
+ static var TYPES = [ 0x0016 ] # On/Off Light
#############################################################
# Constructor
@@ -62,7 +65,7 @@ class Matter_Plugin_core : Matter_Plugin
if cluster == 0x0030 # ========== GeneralCommissioning cluster 11.9 p.627 ==========
if attribute == 0x0000 # ---------- Breadcrumb ----------
- return TLV.create_TLV(TLV.U8, msg.session.breadcrumb)
+ return TLV.create_TLV(TLV.U8, msg.session.__breadcrumb)
elif attribute == 0x0001 # ---------- BasicCommissioningInfo / BasicCommissioningInfo----------
var bci = TLV.Matter_TLV_struct()
bci.add_TLV(0, TLV.U2, 60) # FailSafeExpiryLengthSeconds
@@ -211,19 +214,34 @@ class Matter_Plugin_core : Matter_Plugin
return TLV.create_TLV(TLV.U2, 0)
elif attribute == 0x000A # ---------- SoftwareVersionString / string ----------
return TLV.create_TLV(TLV.UTF1, tasmota.cmd("Status 2")['StatusFWR']['Version'])
+ elif attribute == 0x0012 # ---------- UniqueID / string 32 max ----------
+ return TLV.create_TLV(TLV.UTF1, tasmota.wifi().find("mac", ""))
end
# ====================================================================================================
elif cluster == 0x003F # ========== Group Key Management Cluster 11.2 p.572 ==========
# TODO
+ # ====================================================================================================
+ elif cluster == 0x002A # ========== OTA Software Update Requestor Cluster Definition 11.19.7 p.762 ==========
+
+ if attribute == 0x0000 # ---------- DefaultOTAProviders / list[ProviderLocationStruct] ----------
+ return TLV.Matter_TLV_array() # empty list for now TODO
+ elif attribute == 0x0001 # ---------- UpdatePossible / bool ----------
+ return TLV.create_TLV(TLV.BOOL, 0) # we claim that update is not possible, would require to go to Tasmota UI
+ elif attribute == 0x0002 # ---------- UpdateState / UpdateStateEnum ----------
+ return TLV.create_TLV(TLV.U1, 1) # Idle
+ elif attribute == 0x0003 # ---------- UpdateStateProgress / uint8 ----------
+ return TLV.create_TLV(TLV.NULL, nil) # null, nothing in process
+ end
+
# ====================================================================================================
elif cluster == 0x002B # ========== Localization Configuration Cluster 11.3 p.580 ==========
if attribute == 0x0000 # ---------- ActiveLocale / string ----------
return TLV.create_TLV(TLV.UTF1, tasmota.locale())
elif attribute == 0x0001 # ---------- SupportedLocales / list[string] ----------
- var locl = TLV.Matter_TLV_list()
+ var locl = TLV.Matter_TLV_array()
locl.add_TLV(nil, TLV.UTF1, tasmota.locale())
return locl
end
@@ -236,7 +254,7 @@ class Matter_Plugin_core : Matter_Plugin
elif attribute == 0x0001 # ---------- ActiveCalendarType / CalendarType ----------
return TLV.create_TLV(TLV.U1, 4) # 4 = Gregorian
elif attribute == 0x0002 # ---------- SupportedCalendarTypes / list[CalendarType] ----------
- var callist = TLV.Matter_TLV_list()
+ var callist = TLV.Matter_TLV_array()
callist.add_TLV(nil, TLV.create_TLV(TLV.U1, 4))
return callist
end
@@ -252,6 +270,13 @@ class Matter_Plugin_core : Matter_Plugin
# ====================================================================================================
elif cluster == 0x001D # ========== Descriptor Cluster 9.5 p.453 ==========
if attribute == 0x0000 # ---------- DeviceTypeList / list[DeviceTypeStruct] ----------
+ var dtl = TLV.Matter_TLV_array()
+ for dt: self.TYPES
+ var d1 = dtl.add_struct()
+ d1.add_TLV(0, TLV.U2, dt) # DeviceType
+ d1.add_TLV(1, TLV.U2, 1) # Revision
+ end
+ return dtl
elif attribute == 0x0001 # ---------- ServerList / list[cluster-id] ----------
var sl = TLV.Matter_TLV_array()
for cl: self.get_cluster_list()
@@ -297,7 +322,7 @@ class Matter_Plugin_core : Matter_Plugin
# 1=DebugText
var ExpiryLengthSeconds = val.findsubval(0, 900)
var Breadcrumb = val.findsubval(1, 0)
- session.breadcrumb = Breadcrumb
+ session.__breadcrumb = Breadcrumb
var afsr = TLV.Matter_TLV_struct()
afsr.add_TLV(0, TLV.U1, 0) # ErrorCode = OK
@@ -309,7 +334,7 @@ class Matter_Plugin_core : Matter_Plugin
var NewRegulatoryConfig = val.findsubval(0) # RegulatoryLocationType Enum
var CountryCode = val.findsubval(1, "XX")
var Breadcrumb = val.findsubval(2, 0)
- session.breadcrumb = Breadcrumb
+ session.__breadcrumb = Breadcrumb
# create SetRegulatoryConfigResponse
# ID=1
# 0=ErrorCode (OK=0)
@@ -322,7 +347,7 @@ class Matter_Plugin_core : Matter_Plugin
elif command == 0x0004 # ---------- CommissioningComplete p.636 ----------
# no data
- session.breadcrumb = 0 # clear breadcrumb
+ session.__breadcrumb = 0 # clear breadcrumb
session.set_no_expiration()
# create CommissioningCompleteResponse
@@ -487,6 +512,85 @@ class Matter_Plugin_core : Matter_Plugin
end
end
+
+ #############################################################
+ # write an attribute
+ #
+ def write_attribute(msg, ctx, write_data)
+ import string
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ # 0x001D no writable attributes
+ # 0x0032 no attributes
+ # 0x0033 no writable attributes
+ # 0x0034 no writable attributes
+ # 0x0038 no mandatory writable attributes
+ # 0x003C no writable attributes
+ # 0x003E no writable attributes
+
+ if cluster == 0x0030 # ========== GeneralCommissioning cluster 11.9 p.627 ==========
+
+ if attribute == 0x0000 # ---------- Breadcrumb ----------
+ if type(write_data) == 'int' || isinstance(write_data, int64)
+ msg.session.__breadcrumb = write_data
+ return true
+ else
+ ctx.status = matter.CONSTRAINT_ERROR
+ return false
+ end
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x001F # ========== Access Control Cluster 9.10 p.461 ==========
+ if attribute == 0x0000 # ACL - list[AccessControlEntryStruct]
+ return true
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0028 # ========== Basic Information Cluster cluster 11.1 p.565 ==========
+
+ if attribute == 0x0005 # ---------- NodeLabel / string ----------
+ # TODO
+ return true
+ elif attribute == 0x0006 # ---------- Location / string ----------
+ # TODO
+ return true
+ end
+ # ====================================================================================================
+ elif cluster == 0x002A # ========== OTA Software Update Requestor Cluster Definition 11.19.7 p.762 ==========
+
+ if attribute == 0x0000 # ---------- DefaultOTAProviders / list[ProviderLocationStruct] ----------
+ return true # silently ignore
+ end
+ # ====================================================================================================
+ elif cluster == 0x002B # ========== Localization Configuration Cluster 11.3 p.580 ==========
+
+ if attribute == 0x0000 # ---------- ActiveLocale / string ----------
+ ctx.status = matter.CONSTRAINT_ERROR # changing locale is not possible
+ return false
+ end
+ # ====================================================================================================
+ elif cluster == 0x002C # ========== Time Format Localization Cluster 11.4 p.581 ==========
+
+ if attribute == 0x0000 # ---------- HourFormat / HourFormat ----------
+ # TODO
+ return true
+ elif attribute == 0x0001 # ---------- ActiveCalendarType / CalendarType ----------
+ # TODO
+ return true
+ end
+ # ====================================================================================================
+ elif cluster == 0x0031 # ========== Network Commissioning Cluster cluster 11.8 p.606 ==========
+ if attribute == 0x0004 # ---------- InterfaceEnabled / bool ----------
+ ctx.status = matter.INVALID_ACTION
+ return false
+ end
+
+
+ end
+ end
end
-matter.Plugin_core = Matter_Plugin_core
+matter.Plugin_Root = Matter_Plugin_Root
\ No newline at end of file
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Session.be b/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
index 1f46e0f32..9d57e24ee 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
@@ -47,6 +47,10 @@ class Matter_Session
# counters
var counter_rcv # counter for incoming messages
var counter_snd # counter for outgoing messages
+ var __exchange_id # exchange id for locally initiated transaction, non-persistent
+ # keep track of last known IP/Port of the fabric
+ var __ip
+ var __port
# non-session counters
var _counter_insecure_rcv # counter for incoming messages
var _counter_insecure_snd # counter for outgoing messages
@@ -57,7 +61,7 @@ class Matter_Session
var attestation_challenge # Attestation challenge
var peer_node_id
# breadcrumb
- var breadcrumb # breadcrumb attribute for this session
+ var __breadcrumb # breadcrumb attribute for this session, prefix `__` so that it is not persisted and untouched
# our own private key
var no_private_key # private key of the device certificate (generated at commissioning)
# NOC information
@@ -90,6 +94,7 @@ class Matter_Session
#############################################################
def init(store, local_session_id, initiator_session_id)
+ import crypto
self.__store = store
self.mode = 0
self.local_session_id = local_session_id
@@ -98,7 +103,8 @@ class Matter_Session
self.counter_snd = matter.Counter()
self._counter_insecure_rcv = matter.Counter()
self._counter_insecure_snd = matter.Counter()
- self.breadcrumb = int64()
+ self.__breadcrumb = 0
+ self.__exchange_id = crypto.random(2).get(0,2) # generate a random 16 bits number, then increment with rollover
end
#############################################################
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_TLV.be b/lib/libesp32/berry_matter/src/embedded/Matter_TLV.be
index 8e927da7c..4296e83e0 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_TLV.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_TLV.be
@@ -297,6 +297,83 @@ class Matter_TLV
return b
end
+ #############################################################
+ # compute the length in bytes of encoded TLV without actually
+ # allocating buffers (faster and no memory fragmentation)
+ #
+ # returns a number of bytes
+ def encode_len()
+ var TLV = self.TLV
+ var len = 0
+
+ # special case for bool
+ # we need to change the type according to the value
+ if self.typ == TLV.BFALSE || self.typ == TLV.BTRUE
+ self.typ = bool(self.val) ? TLV.BTRUE : TLV.BFALSE
+ # try to compress ints
+ elif self.typ >= TLV.I2 && self.typ <= TLV.I4
+ var i = int(self.val)
+ if i <= 127 && i >= -128 self.typ = TLV.I1
+ elif i <= 32767 && i >= -32768 self.typ = TLV.I2
+ end
+ elif self.typ >= TLV.U2 && self.typ <= TLV.U4
+ var i = int(self.val)
+ if i <= 255 && i >= 0 self.typ = TLV.U1
+ elif i <= 65535 && i >= 0 self.typ = TLV.U2
+ end
+ elif self.typ >= TLV.B1 && self.typ <= TLV.B8 # encode length as minimum possible
+ if size(self.val) <= 255
+ self.typ = TLV.B1
+ elif size(self.val) <= 65535
+ self.typ = TLV.B2
+ else
+ self.typ = TLV.B4 # B4 is unlikely, B8 is impossible
+ end
+ elif self.typ >= TLV.UTF1 && self.typ <= TLV.UTF8
+ if size(self.val) <= 255
+ self.typ = TLV.UTF1
+ elif size(self.val) <= 65535
+ self.typ = TLV.UTF2
+ else
+ self.typ = TLV.UTF4 # UTF4 is unlikely, UTF8 is impossible
+ end
+ end
+
+ # encode tag and type
+ len += self._encode_tag_len()
+ # encode value
+
+ if self.typ == TLV.I1 || self.typ == TLV.U1
+ len += 1
+ elif self.typ == TLV.I2 || self.typ == TLV.U2
+ len += 2
+ elif self.typ == TLV.I4 || self.typ == TLV.U4
+ len += 4
+ elif self.typ == TLV.I8 || self.typ == TLV.U8
+ len += 8
+ elif self.typ == TLV.BFALSE || self.typ == TLV.BTRUE
+ # push nothing
+ elif self.typ == TLV.FLOAT
+ len += 4
+ elif self.typ == TLV.DOUBLE
+ raise "value_error", "Unsupported type TLV.DOUBLE"
+ elif self.typ == TLV.UTF1
+ len += 1 + size(self.val)
+ elif self.typ == TLV.UTF2
+ len += 2 + size(self.val)
+ elif self.typ == TLV.B1
+ len += 1 + size(self.val)
+ elif self.typ == TLV.B2
+ len += 2 + size(self.val)
+ elif self.typ == TLV.NULL
+ # push nothing
+ else
+ raise "value_error", "unsupported type " + str(self.typ)
+ end
+
+ return len
+ end
+
#############################################################
# internal_function
# encode Tag+Type as the first bytes
@@ -341,6 +418,39 @@ class Matter_TLV
end
end
+ #############################################################
+ # internal_function
+ # compute len of Tag+Type as the first bytes
+ def _encode_tag_len()
+ var tag_number = self.tag_number != nil ? self.tag_number : 0
+ var tag_huge = (tag_number >= 65536) || (tag_number < 0)
+ var tag_control = 0x00
+ if self.tag_vendor != nil
+ # full encoding
+ if tag_huge
+ return 9
+ else
+ return 7
+ end
+ elif self.tag_profile == -1 # Matter Common profile
+ if tag_huge
+ return 5
+ else
+ return 3
+ end
+ elif self.tag_profile != nil
+ if tag_huge
+ return 5
+ else
+ return 3
+ end
+ elif self.tag_sub != nil
+ return 2
+ else # anonymous tag
+ return 1
+ end
+ end
+
#############################################################
# Compare the value index with an element
# returns:
@@ -494,16 +604,14 @@ class Matter_TLV
end
#############################################################
- # encode TLV
- #
- # appends to the bytes() object
- def _encode_inner(b, is_struct)
+ # encode to bytes
+ def encode(b)
if b == nil b = bytes() end
# encode tag and type
self._encode_tag(b)
# sort values
var val_list = self.val.copy()
- if is_struct
+ if self.is_struct
self.sort(val_list)
end
@@ -519,9 +627,22 @@ class Matter_TLV
end
#############################################################
- # encode to bytes
- def encode(b)
- return self._encode_inner(b, self.is_struct)
+ # compute the length in bytes of encoded TLV without actually
+ # allocating buffers (faster and no memory fragmentation)
+ #
+ # returns a number of bytes
+ def encode_len()
+ # tag and type
+ var len = self._encode_tag_len()
+ # output each one after the other, order doesn't infulence size
+ var idx = 0
+ while idx < size(self.val)
+ len += self.val[idx].encode_len()
+ idx += 1
+ end
+ # add 'end of container'
+ len += 1
+ return len
end
#############################################################
@@ -760,117 +881,52 @@ matter.TLV = Matter_TLV
# Test
import matter
-#load("Matter_TLV.be")
+def test_TLV(b, s)
+ var m = matter.TLV.parse(b)
+ assert(m.tostring() == s)
+ assert(m.encode() == b)
+ assert(m.encode_len() == size(b))
+end
-var m
-m = matter.TLV.parse(bytes("2502054C"))
-assert(m.tostring() == "2 = 19461U")
-assert(m.encode() == bytes("2502054C"))
+test_TLV(bytes("2502054C"), "2 = 19461U")
+test_TLV(bytes("0001"), "1")
+test_TLV(bytes("08"), "false")
+test_TLV(bytes("09"), "true")
-m = matter.TLV.parse(bytes("0001"))
-assert(m.tostring() == "1")
-assert(m.encode() == bytes("0001"))
+test_TLV(bytes("00FF"), "-1")
+test_TLV(bytes("05FFFF"), "65535U")
-m = matter.TLV.parse(bytes("08"))
-assert(m.tostring() == "false")
-assert(m.encode() == bytes("08"))
-m = matter.TLV.parse(bytes("09"))
-assert(m.tostring() == "true")
-assert(m.encode() == bytes("09"))
-
-m = matter.TLV.parse(bytes("01FFFF"))
-assert(m.tostring() == "-1")
-assert(m.encode() == bytes("00FF"))
-m = matter.TLV.parse(bytes("05FFFF"))
-assert(m.tostring() == "65535U")
-assert(m.encode() == bytes("05FFFF"))
-
-m = matter.TLV.parse(bytes("0A0000C03F"))
-assert(m.tostring() == "1.5")
-assert(m.encode() == bytes("0A0000C03F"))
-
-m = matter.TLV.parse(bytes("0C06466f6f626172"))
-assert(m.tostring() == '"Foobar"')
-assert(m.encode() == bytes("0C06466f6f626172"))
-
-m = matter.TLV.parse(bytes("1006466f6f626172"))
-assert(m.tostring() == "466F6F626172")
-assert(m.encode() == bytes("1006466f6f626172"))
-
-m = matter.TLV.parse(bytes("e4f1ffeddeedfe55aa2a"))
-assert(m.tostring() == "0xFFF1::0xDEED:0xAA55FEED = 42U")
-assert(m.encode() == bytes("e4f1ffeddeedfe55aa2a"))
-
-
-m = matter.TLV.parse(bytes("300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66"))
-assert(m.tostring() == "1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66")
-assert(m.encode() == bytes("300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66"))
+test_TLV(bytes("0A0000C03F"), "1.5")
+test_TLV(bytes("0C06466f6f626172"), '"Foobar"')
+test_TLV(bytes("1006466f6f626172"), "466F6F626172")
+test_TLV(bytes("e4f1ffeddeedfe55aa2a"), "0xFFF1::0xDEED:0xAA55FEED = 42U")
+test_TLV(bytes("300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66"), "1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66")
# context specific
-m = matter.TLV.parse(bytes("24012a"))
-assert(m.tostring() == "1 = 42U")
-assert(m.encode() == bytes("24012a"))
-
-m = matter.TLV.parse(bytes("4401002a"))
-assert(m.tostring() == "Matter::0x00000001 = 42U")
-assert(m.encode() == bytes("4401002a"))
+test_TLV(bytes("24012a"), "1 = 42U")
+test_TLV(bytes("4401002a"), "Matter::0x00000001 = 42U")
# int64
-m = matter.TLV.parse(bytes("030102000000000000"))
-assert(m.tostring() == "513")
-assert(m.encode() == bytes("030102000000000000"))
-
-m = matter.TLV.parse(bytes("070102000000000000"))
-assert(m.tostring() == "513U")
-assert(m.encode() == bytes("070102000000000000"))
-
-m = matter.TLV.parse(bytes("03FFFFFFFFFFFFFFFF"))
-assert(m.tostring() == "-1")
-assert(m.encode() == bytes("03FFFFFFFFFFFFFFFF"))
-
-m = matter.TLV.parse(bytes("07FFFFFFFFFFFFFF7F"))
-assert(m.tostring() == "9223372036854775807U")
-assert(m.encode() == bytes("07FFFFFFFFFFFFFF7F"))
+test_TLV(bytes("030102000000000000"), "513")
+test_TLV(bytes("070102000000000000"), "513U")
+test_TLV(bytes("03FFFFFFFFFFFFFFFF"), "-1")
+test_TLV(bytes("07FFFFFFFFFFFFFF7F"), "9223372036854775807U")
# structure
-m = matter.TLV.parse(bytes("1518"))
-assert(m.tostring() == "{}")
-assert(m.encode() == bytes("1518"))
-
-m = matter.TLV.parse(bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280418"))
-assert(m.tostring() == "{1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66, 2 = 19461U, 3 = 0U, 4 = false}")
-assert(m.encode() == bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280418"))
-
-m = matter.TLV.parse(bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280435052501881325022C011818"))
-assert(m.tostring() == "{1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66, 2 = 19461U, 3 = 0U, 4 = false, 5 = {1 = 5000U, 2 = 300U}}")
-assert(m.encode() == bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280435052501881325022C011818"))
+test_TLV(bytes("1518"), "{}")
+test_TLV(bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280418"), "{1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66, 2 = 19461U, 3 = 0U, 4 = false}")
+test_TLV(bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280435052501881325022C011818"), "{1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66, 2 = 19461U, 3 = 0U, 4 = false, 5 = {1 = 5000U, 2 = 300U}}")
# list
-m = matter.TLV.parse(bytes("1718"))
-assert(m.tostring() == "[[]]")
-assert(m.encode() == bytes("1718"))
-
-m = matter.TLV.parse(bytes("17000120002a000200032000ef18"))
-assert(m.tostring() == "[[1, 0 = 42, 2, 3, 0 = -17]]")
-assert(m.encode() == bytes("17000120002a000200032000ef18"))
-
+test_TLV(bytes("1718"), "[[]]")
+test_TLV(bytes("17000120002a000200032000ef18"), "[[1, 0 = 42, 2, 3, 0 = -17]]")
# array
-m = matter.TLV.parse(bytes("1618"))
-assert(m.tostring() == "[]")
-assert(m.encode() == bytes("1618"))
-
-m = matter.TLV.parse(bytes("160000000100020003000418"))
-assert(m.tostring() == "[0, 1, 2, 3, 4]")
-assert(m.encode() == bytes("160000000100020003000418"))
+test_TLV(bytes("1618"), "[]")
+test_TLV(bytes("160000000100020003000418"), "[0, 1, 2, 3, 4]")
# mix
-m = matter.TLV.parse(bytes("16002a02f067fdff15180a33338f410c0648656c6c6f2118"))
-assert(m.tostring() == '[42, -170000, {}, 17.9, "Hello!"]')
-assert(m.encode() == bytes("16002a02f067fdff15180a33338f410c0648656c6c6f2118"))
-
-m = matter.TLV.parse(bytes("153600172403312504FCFF18172402002403302404001817240200240330240401181724020024033024040218172402002403302404031817240200240328240402181724020024032824040418172403312404031818280324FF0118"))
-assert(m.tostring() == '{0 = [[[3 = 49U, 4 = 65532U]], [[2 = 0U, 3 = 48U, 4 = 0U]], [[2 = 0U, 3 = 48U, 4 = 1U]], [[2 = 0U, 3 = 48U, 4 = 2U]], [[2 = 0U, 3 = 48U, 4 = 3U]], [[2 = 0U, 3 = 40U, 4 = 2U]], [[2 = 0U, 3 = 40U, 4 = 4U]], [[3 = 49U, 4 = 3U]]], 3 = false, 255 = 1U}')
-assert(m.encode() == bytes("153600172403312504FCFF18172402002403302404001817240200240330240401181724020024033024040218172402002403302404031817240200240328240402181724020024032824040418172403312404031818280324FF0118"))
+test_TLV(bytes("16002a02f067fdff15180a33338f410c0648656c6c6f2118"), '[42, -170000, {}, 17.9, "Hello!"]')
+test_TLV(bytes("153600172403312504FCFF18172402002403302404001817240200240330240401181724020024033024040218172402002403302404031817240200240328240402181724020024032824040418172403312404031818280324FF0118"), '{0 = [[[3 = 49U, 4 = 65532U]], [[2 = 0U, 3 = 48U, 4 = 0U]], [[2 = 0U, 3 = 48U, 4 = 1U]], [[2 = 0U, 3 = 48U, 4 = 2U]], [[2 = 0U, 3 = 48U, 4 = 3U]], [[2 = 0U, 3 = 40U, 4 = 2U]], [[2 = 0U, 3 = 40U, 4 = 4U]], [[3 = 49U, 4 = 3U]]], 3 = false, 255 = 1U}')
-#
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be b/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
index 75df885c3..3bd7d16a5 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
@@ -55,9 +55,9 @@ class Matter_UDPPacket_sent
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), 3)
+ tasmota.log(string.format("MTR: sending packet to '[%s]:%i'", self.addr, self.port), 4)
else
- tasmota.log(string.format("MTR: failed to send packet to '[%s]:%i'", self.addr, self.port), 2)
+ tasmota.log(string.format("MTR: error sending packet to '[%s]:%i'", self.addr, self.port), 3)
end
end
end
@@ -144,7 +144,9 @@ class Matter_UDPServer
packet.send(self.udp_socket) # resend
packet.retries -= 1
if packet.retries <= 0
+ import string
self.packets_sent.remove(packet.msg_id)
+ tasmota.log(string.format("MTR: non-acked packet to '[%s]:%i'", packet.addr, packet.port), 3)
else
packet.next_try = tasmota.millis() + packet.RETRY_MS
end
@@ -158,7 +160,7 @@ class Matter_UDPServer
if id == nil return end
if self.packets_sent.contains(id)
self.packets_sent.remove(id)
- tasmota.log("MTR: removed packet from sending list id=" + str(id), 3)
+ tasmota.log("MTR: removed packet from sending list id=" + str(id), 4)
end
end
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h
index 8888f26c3..17d55b2a0 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h
@@ -19,7 +19,7 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[48]) { /* constants */
+ ( &(const bvalue[47]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(opcode),
/* K2 */ be_nested_str_weak(local_session_id),
@@ -58,16 +58,15 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
/* K35 */ be_nested_str_weak(log),
/* K36 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_X3A_X20),
/* K37 */ be_nested_str_weak(inspect),
- /* K38 */ be_const_int(3),
- /* K39 */ be_nested_str_weak(encode),
- /* K40 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_raw_X3A_X20),
- /* K41 */ be_nested_str_weak(tohex),
- /* K42 */ be_nested_str_weak(build_response),
- /* K43 */ be_nested_str_weak(responder),
- /* K44 */ be_nested_str_weak(send_response),
- /* K45 */ be_nested_str_weak(remote_ip),
- /* K46 */ be_nested_str_weak(remote_port),
- /* K47 */ be_nested_str_weak(message_counter),
+ /* K38 */ be_nested_str_weak(encode),
+ /* K39 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_raw_X3A_X20),
+ /* K40 */ be_nested_str_weak(tohex),
+ /* K41 */ be_nested_str_weak(build_response),
+ /* K42 */ be_nested_str_weak(responder),
+ /* K43 */ be_nested_str_weak(send_response),
+ /* K44 */ be_nested_str_weak(remote_ip),
+ /* K45 */ be_nested_str_weak(remote_port),
+ /* K46 */ be_nested_str_weak(message_counter),
}),
be_str_weak(parse_PBKDFParamRequest),
&be_const_str_solidified,
@@ -139,31 +138,31 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
0x7C200400, // 0040 CALL R8 2
0x7C1C0200, // 0041 CALL R7 1
0x001E4807, // 0042 ADD R7 K36 R7
- 0x58200026, // 0043 LDCONST R8 K38
+ 0x54220003, // 0043 LDINT R8 4
0x7C140600, // 0044 CALL R5 3
- 0x8C140927, // 0045 GETMET R5 R4 K39
+ 0x8C140926, // 0045 GETMET R5 R4 K38
0x7C140200, // 0046 CALL R5 1
0xB81A4400, // 0047 GETNGBL R6 K34
0x8C180D23, // 0048 GETMET R6 R6 K35
- 0x8C200B29, // 0049 GETMET R8 R5 K41
+ 0x8C200B28, // 0049 GETMET R8 R5 K40
0x7C200200, // 004A CALL R8 1
- 0x00225008, // 004B ADD R8 K40 R8
- 0x58240026, // 004C LDCONST R9 K38
+ 0x00224E08, // 004B ADD R8 K39 R8
+ 0x54260003, // 004C LDINT R9 4
0x7C180600, // 004D CALL R6 3
0x90023205, // 004E SETMBR R0 K25 R5
- 0x8C18032A, // 004F GETMET R6 R1 K42
+ 0x8C180329, // 004F GETMET R6 R1 K41
0x54220020, // 0050 LDINT R8 33
0x50240200, // 0051 LDBOOL R9 1 0
0x7C180600, // 0052 CALL R6 3
- 0x8C1C0D27, // 0053 GETMET R7 R6 K39
+ 0x8C1C0D26, // 0053 GETMET R7 R6 K38
0x5C240A00, // 0054 MOVE R9 R5
0x7C1C0400, // 0055 CALL R7 2
- 0x8820012B, // 0056 GETMBR R8 R0 K43
- 0x8C20112C, // 0057 GETMET R8 R8 K44
+ 0x8820012A, // 0056 GETMBR R8 R0 K42
+ 0x8C20112B, // 0057 GETMET R8 R8 K43
0x5C280E00, // 0058 MOVE R10 R7
- 0x882C032D, // 0059 GETMBR R11 R1 K45
- 0x8830032E, // 005A GETMBR R12 R1 K46
- 0x88340D2F, // 005B GETMBR R13 R6 K47
+ 0x882C032C, // 0059 GETMBR R11 R1 K44
+ 0x8830032D, // 005A GETMBR R12 R1 K45
+ 0x88340D2E, // 005B GETMBR R13 R6 K46
0x7C200A00, // 005C CALL R8 5
0x80000000, // 005D RET 0
})
@@ -226,7 +225,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake1, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[84]) { /* constants */
+ ( &(const bvalue[79]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(opcode),
/* K2 */ be_nested_str_weak(local_session_id),
@@ -244,77 +243,72 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake1, /* name */
/* K14 */ be_nested_str_weak(log),
/* K15 */ be_nested_str_weak(MTR_X3A_X20received_X20pA_X3D),
/* K16 */ be_nested_str_weak(tohex),
- /* K17 */ be_const_int(3),
- /* K18 */ be_nested_str_weak(MTR_X3A_X20spake_X3A_X20),
- /* K19 */ be_nested_str_weak(inspect),
- /* K20 */ be_nested_str_weak(spake),
- /* K21 */ be_nested_str_weak(SPAKE2P_Matter),
- /* K22 */ be_nested_str_weak(device),
- /* K23 */ be_nested_str_weak(w0),
- /* K24 */ be_nested_str_weak(w1),
- /* K25 */ be_nested_str_weak(L),
- /* K26 */ be_nested_str_weak(compute_pB),
- /* K27 */ be_nested_str_weak(y),
- /* K28 */ be_nested_str_weak(pB),
- /* K29 */ be_nested_str_weak(MTR_X3A_X20y_X3D),
- /* K30 */ be_nested_str_weak(MTR_X3A_X20pb_X3D),
- /* K31 */ be_nested_str_weak(compute_ZV_verifier),
- /* K32 */ be_nested_str_weak(MTR_X3A_X20Z_X3D),
- /* K33 */ be_nested_str_weak(Z),
- /* K34 */ be_nested_str_weak(MTR_X3A_X20V_X3D),
- /* K35 */ be_nested_str_weak(V),
- /* K36 */ be_nested_str_weak(SHA256),
- /* K37 */ be_nested_str_weak(update),
- /* K38 */ be_nested_str_weak(fromstring),
- /* K39 */ be_nested_str_weak(Matter_Context_Prefix),
- /* K40 */ be_nested_str_weak(PBKDFParamRequest),
- /* K41 */ be_nested_str_weak(PBKDFParamResponse),
- /* K42 */ be_nested_str_weak(out),
- /* K43 */ be_nested_str_weak(MTR_X3A_X20Context_X3D),
- /* K44 */ be_nested_str_weak(set_context),
- /* K45 */ be_nested_str_weak(compute_TT_hash),
- /* K46 */ be_nested_str_weak(MTR_X3A_X20_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D),
- /* K47 */ be_nested_str_weak(MTR_X3A_X20Context_X20_X3D_X20),
- /* K48 */ be_nested_str_weak(Context),
- /* K49 */ be_nested_str_weak(MTR_X3A_X20A_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K50 */ be_nested_str_weak(A),
- /* K51 */ be_nested_str_weak(MTR_X3A_X20B_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K52 */ be_nested_str_weak(B),
- /* K53 */ be_nested_str_weak(MTR_X3A_X20M_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K54 */ be_nested_str_weak(M),
- /* K55 */ be_nested_str_weak(MTR_X3A_X20N_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K56 */ be_nested_str_weak(N),
- /* K57 */ be_nested_str_weak(MTR_X3A_X20pA_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K58 */ be_nested_str_weak(MTR_X3A_X20pB_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K59 */ be_nested_str_weak(MTR_X3A_X20Z_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K60 */ be_nested_str_weak(MTR_X3A_X20V_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K61 */ be_nested_str_weak(MTR_X3A_X20w0_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K62 */ be_nested_str_weak(MTR_X3A_X20Kmain_X20_X20_X20_X3D),
- /* K63 */ be_nested_str_weak(Kmain),
- /* K64 */ be_nested_str_weak(MTR_X3A_X20KcA_X20_X20_X20_X20_X20_X3D),
- /* K65 */ be_nested_str_weak(KcA),
- /* K66 */ be_nested_str_weak(MTR_X3A_X20KcB_X20_X20_X20_X20_X20_X3D),
- /* K67 */ be_nested_str_weak(KcB),
- /* K68 */ be_nested_str_weak(MTR_X3A_X20K_shared_X3D),
- /* K69 */ be_nested_str_weak(K_shared),
- /* K70 */ be_nested_str_weak(MTR_X3A_X20Ke_X20_X20_X20_X20_X20_X20_X3D),
- /* K71 */ be_nested_str_weak(Ke),
- /* K72 */ be_nested_str_weak(cB),
- /* K73 */ be_nested_str_weak(MTR_X3A_X20cB_X3D),
- /* K74 */ be_nested_str_weak(Pake2),
- /* K75 */ be_nested_str_weak(MTR_X3A_X20pake2_X3A_X20),
- /* K76 */ be_nested_str_weak(encode),
- /* K77 */ be_nested_str_weak(MTR_X3A_X20pake2_raw_X3A_X20),
- /* K78 */ be_nested_str_weak(build_response),
- /* K79 */ be_nested_str_weak(responder),
- /* K80 */ be_nested_str_weak(send_response),
- /* K81 */ be_nested_str_weak(remote_ip),
- /* K82 */ be_nested_str_weak(remote_port),
- /* K83 */ be_nested_str_weak(message_counter),
+ /* K17 */ be_nested_str_weak(MTR_X3A_X20spake_X3A_X20),
+ /* K18 */ be_nested_str_weak(inspect),
+ /* K19 */ be_nested_str_weak(spake),
+ /* K20 */ be_nested_str_weak(SPAKE2P_Matter),
+ /* K21 */ be_nested_str_weak(device),
+ /* K22 */ be_nested_str_weak(w0),
+ /* K23 */ be_nested_str_weak(w1),
+ /* K24 */ be_nested_str_weak(L),
+ /* K25 */ be_nested_str_weak(compute_pB),
+ /* K26 */ be_nested_str_weak(y),
+ /* K27 */ be_nested_str_weak(pB),
+ /* K28 */ be_nested_str_weak(MTR_X3A_X20y_X3D),
+ /* K29 */ be_nested_str_weak(MTR_X3A_X20pb_X3D),
+ /* K30 */ be_nested_str_weak(compute_ZV_verifier),
+ /* K31 */ be_nested_str_weak(MTR_X3A_X20Z_X3D),
+ /* K32 */ be_nested_str_weak(Z),
+ /* K33 */ be_nested_str_weak(MTR_X3A_X20V_X3D),
+ /* K34 */ be_nested_str_weak(V),
+ /* K35 */ be_nested_str_weak(SHA256),
+ /* K36 */ be_nested_str_weak(update),
+ /* K37 */ be_nested_str_weak(fromstring),
+ /* K38 */ be_nested_str_weak(Matter_Context_Prefix),
+ /* K39 */ be_nested_str_weak(PBKDFParamRequest),
+ /* K40 */ be_nested_str_weak(PBKDFParamResponse),
+ /* K41 */ be_nested_str_weak(out),
+ /* K42 */ be_nested_str_weak(MTR_X3A_X20Context_X3D),
+ /* K43 */ be_nested_str_weak(set_context),
+ /* K44 */ be_nested_str_weak(compute_TT_hash),
+ /* K45 */ be_nested_str_weak(MTR_X3A_X20_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D),
+ /* K46 */ be_nested_str_weak(MTR_X3A_X20Context_X20_X3D_X20),
+ /* K47 */ be_nested_str_weak(Context),
+ /* K48 */ be_nested_str_weak(MTR_X3A_X20M_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K49 */ be_nested_str_weak(M),
+ /* K50 */ be_nested_str_weak(MTR_X3A_X20N_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K51 */ be_nested_str_weak(N),
+ /* K52 */ be_nested_str_weak(MTR_X3A_X20pA_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K53 */ be_nested_str_weak(MTR_X3A_X20pB_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K54 */ be_nested_str_weak(MTR_X3A_X20Z_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K55 */ be_nested_str_weak(MTR_X3A_X20V_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K56 */ be_nested_str_weak(MTR_X3A_X20w0_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K57 */ be_nested_str_weak(MTR_X3A_X20Kmain_X20_X20_X20_X3D),
+ /* K58 */ be_nested_str_weak(Kmain),
+ /* K59 */ be_nested_str_weak(MTR_X3A_X20KcA_X20_X20_X20_X20_X20_X3D),
+ /* K60 */ be_nested_str_weak(KcA),
+ /* K61 */ be_nested_str_weak(MTR_X3A_X20KcB_X20_X20_X20_X20_X20_X3D),
+ /* K62 */ be_nested_str_weak(KcB),
+ /* K63 */ be_nested_str_weak(MTR_X3A_X20K_shared_X3D),
+ /* K64 */ be_nested_str_weak(K_shared),
+ /* K65 */ be_nested_str_weak(MTR_X3A_X20Ke_X20_X20_X20_X20_X20_X20_X3D),
+ /* K66 */ be_nested_str_weak(Ke),
+ /* K67 */ be_nested_str_weak(cB),
+ /* K68 */ be_nested_str_weak(MTR_X3A_X20cB_X3D),
+ /* K69 */ be_nested_str_weak(Pake2),
+ /* K70 */ be_nested_str_weak(MTR_X3A_X20pake2_X3A_X20),
+ /* K71 */ be_nested_str_weak(encode),
+ /* K72 */ be_nested_str_weak(MTR_X3A_X20pake2_raw_X3A_X20),
+ /* K73 */ be_nested_str_weak(build_response),
+ /* K74 */ be_nested_str_weak(responder),
+ /* K75 */ be_nested_str_weak(send_response),
+ /* K76 */ be_nested_str_weak(remote_ip),
+ /* K77 */ be_nested_str_weak(remote_port),
+ /* K78 */ be_nested_str_weak(message_counter),
}),
be_str_weak(parse_Pake1),
&be_const_str_solidified,
- ( &(const binstruction[326]) { /* code */
+ ( &(const binstruction[308]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x880C0301, // 0001 GETMBR R3 R1 K1
0x54120021, // 0002 LDINT R4 34
@@ -342,305 +336,287 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake1, /* name */
0x8C180D10, // 0018 GETMET R6 R6 K16
0x7C180200, // 0019 CALL R6 1
0x001A1E06, // 001A ADD R6 K15 R6
- 0x581C0011, // 001B LDCONST R7 K17
+ 0x541E0003, // 001B LDINT R7 4
0x7C100600, // 001C CALL R4 3
0xB8121A00, // 001D GETNGBL R4 K13
0x8C10090E, // 001E GETMET R4 R4 K14
0xB81A0E00, // 001F GETNGBL R6 K7
- 0x8C180D13, // 0020 GETMET R6 R6 K19
- 0x88200114, // 0021 GETMBR R8 R0 K20
+ 0x8C180D12, // 0020 GETMET R6 R6 K18
+ 0x88200113, // 0021 GETMBR R8 R0 K19
0x7C180400, // 0022 CALL R6 2
- 0x001A2406, // 0023 ADD R6 K18 R6
- 0x581C0011, // 0024 LDCONST R7 K17
+ 0x001A2206, // 0023 ADD R6 K17 R6
+ 0x541E0003, // 0024 LDINT R7 4
0x7C100600, // 0025 CALL R4 3
- 0x8C100515, // 0026 GETMET R4 R2 K21
- 0x88180116, // 0027 GETMBR R6 R0 K22
- 0x88180D17, // 0028 GETMBR R6 R6 K23
- 0x881C0116, // 0029 GETMBR R7 R0 K22
- 0x881C0F18, // 002A GETMBR R7 R7 K24
- 0x88200116, // 002B GETMBR R8 R0 K22
- 0x88201119, // 002C GETMBR R8 R8 K25
+ 0x8C100514, // 0026 GETMET R4 R2 K20
+ 0x88180115, // 0027 GETMBR R6 R0 K21
+ 0x88180D16, // 0028 GETMBR R6 R6 K22
+ 0x881C0115, // 0029 GETMBR R7 R0 K21
+ 0x881C0F17, // 002A GETMBR R7 R7 K23
+ 0x88200115, // 002B GETMBR R8 R0 K21
+ 0x88201118, // 002C GETMBR R8 R8 K24
0x7C100800, // 002D CALL R4 4
- 0x90022804, // 002E SETMBR R0 K20 R4
- 0x88100114, // 002F GETMBR R4 R0 K20
- 0x8C10091A, // 0030 GETMET R4 R4 K26
- 0x8818011B, // 0031 GETMBR R6 R0 K27
+ 0x90022604, // 002E SETMBR R0 K19 R4
+ 0x88100113, // 002F GETMBR R4 R0 K19
+ 0x8C100919, // 0030 GETMET R4 R4 K25
+ 0x8818011A, // 0031 GETMBR R6 R0 K26
0x7C100400, // 0032 CALL R4 2
- 0x88100114, // 0033 GETMBR R4 R0 K20
- 0x8810091C, // 0034 GETMBR R4 R4 K28
- 0x90023804, // 0035 SETMBR R0 K28 R4
+ 0x88100113, // 0033 GETMBR R4 R0 K19
+ 0x8810091B, // 0034 GETMBR R4 R4 K27
+ 0x90023604, // 0035 SETMBR R0 K27 R4
0xB8121A00, // 0036 GETNGBL R4 K13
0x8C10090E, // 0037 GETMET R4 R4 K14
- 0x8818011B, // 0038 GETMBR R6 R0 K27
+ 0x8818011A, // 0038 GETMBR R6 R0 K26
0x8C180D10, // 0039 GETMET R6 R6 K16
0x7C180200, // 003A CALL R6 1
- 0x001A3A06, // 003B ADD R6 K29 R6
- 0x581C0011, // 003C LDCONST R7 K17
+ 0x001A3806, // 003B ADD R6 K28 R6
+ 0x541E0003, // 003C LDINT R7 4
0x7C100600, // 003D CALL R4 3
0xB8121A00, // 003E GETNGBL R4 K13
0x8C10090E, // 003F GETMET R4 R4 K14
- 0x8818011C, // 0040 GETMBR R6 R0 K28
+ 0x8818011B, // 0040 GETMBR R6 R0 K27
0x8C180D10, // 0041 GETMET R6 R6 K16
0x7C180200, // 0042 CALL R6 1
- 0x001A3C06, // 0043 ADD R6 K30 R6
- 0x581C0011, // 0044 LDCONST R7 K17
+ 0x001A3A06, // 0043 ADD R6 K29 R6
+ 0x541E0003, // 0044 LDINT R7 4
0x7C100600, // 0045 CALL R4 3
- 0x88100114, // 0046 GETMBR R4 R0 K20
- 0x8C10091F, // 0047 GETMET R4 R4 K31
+ 0x88100113, // 0046 GETMBR R4 R0 K19
+ 0x8C10091E, // 0047 GETMET R4 R4 K30
0x8818010C, // 0048 GETMBR R6 R0 K12
0x7C100400, // 0049 CALL R4 2
0xB8121A00, // 004A GETNGBL R4 K13
0x8C10090E, // 004B GETMET R4 R4 K14
- 0x88180114, // 004C GETMBR R6 R0 K20
- 0x88180D21, // 004D GETMBR R6 R6 K33
+ 0x88180113, // 004C GETMBR R6 R0 K19
+ 0x88180D20, // 004D GETMBR R6 R6 K32
0x8C180D10, // 004E GETMET R6 R6 K16
0x7C180200, // 004F CALL R6 1
- 0x001A4006, // 0050 ADD R6 K32 R6
- 0x581C0011, // 0051 LDCONST R7 K17
+ 0x001A3E06, // 0050 ADD R6 K31 R6
+ 0x541E0003, // 0051 LDINT R7 4
0x7C100600, // 0052 CALL R4 3
0xB8121A00, // 0053 GETNGBL R4 K13
0x8C10090E, // 0054 GETMET R4 R4 K14
- 0x88180114, // 0055 GETMBR R6 R0 K20
- 0x88180D23, // 0056 GETMBR R6 R6 K35
+ 0x88180113, // 0055 GETMBR R6 R0 K19
+ 0x88180D22, // 0056 GETMBR R6 R6 K34
0x8C180D10, // 0057 GETMET R6 R6 K16
0x7C180200, // 0058 CALL R6 1
- 0x001A4406, // 0059 ADD R6 K34 R6
- 0x581C0011, // 005A LDCONST R7 K17
+ 0x001A4206, // 0059 ADD R6 K33 R6
+ 0x541E0003, // 005A LDINT R7 4
0x7C100600, // 005B CALL R4 3
- 0x8C100524, // 005C GETMET R4 R2 K36
+ 0x8C100523, // 005C GETMET R4 R2 K35
0x7C100200, // 005D CALL R4 1
- 0x8C140925, // 005E GETMET R5 R4 K37
+ 0x8C140924, // 005E GETMET R5 R4 K36
0x601C0015, // 005F GETGBL R7 G21
0x7C1C0000, // 0060 CALL R7 0
- 0x8C1C0F26, // 0061 GETMET R7 R7 K38
- 0x88240127, // 0062 GETMBR R9 R0 K39
+ 0x8C1C0F25, // 0061 GETMET R7 R7 K37
+ 0x88240126, // 0062 GETMBR R9 R0 K38
0x7C1C0400, // 0063 CALL R7 2
0x7C140400, // 0064 CALL R5 2
- 0x8C140925, // 0065 GETMET R5 R4 K37
- 0x881C0128, // 0066 GETMBR R7 R0 K40
+ 0x8C140924, // 0065 GETMET R5 R4 K36
+ 0x881C0127, // 0066 GETMBR R7 R0 K39
0x7C140400, // 0067 CALL R5 2
- 0x8C140925, // 0068 GETMET R5 R4 K37
- 0x881C0129, // 0069 GETMBR R7 R0 K41
+ 0x8C140924, // 0068 GETMET R5 R4 K36
+ 0x881C0128, // 0069 GETMBR R7 R0 K40
0x7C140400, // 006A CALL R5 2
- 0x8C14092A, // 006B GETMET R5 R4 K42
+ 0x8C140929, // 006B GETMET R5 R4 K41
0x7C140200, // 006C CALL R5 1
0xB81A1A00, // 006D GETNGBL R6 K13
0x8C180D0E, // 006E GETMET R6 R6 K14
0x8C200B10, // 006F GETMET R8 R5 K16
0x7C200200, // 0070 CALL R8 1
- 0x00225608, // 0071 ADD R8 K43 R8
- 0x58240011, // 0072 LDCONST R9 K17
+ 0x00225408, // 0071 ADD R8 K42 R8
+ 0x54260003, // 0072 LDINT R9 4
0x7C180600, // 0073 CALL R6 3
- 0x88180114, // 0074 GETMBR R6 R0 K20
+ 0x88180113, // 0074 GETMBR R6 R0 K19
0x881C010C, // 0075 GETMBR R7 R0 K12
0x901A1807, // 0076 SETMBR R6 K12 R7
- 0x88180114, // 0077 GETMBR R6 R0 K20
- 0x8C180D2C, // 0078 GETMET R6 R6 K44
+ 0x88180113, // 0077 GETMBR R6 R0 K19
+ 0x8C180D2B, // 0078 GETMET R6 R6 K43
0x5C200A00, // 0079 MOVE R8 R5
0x7C180400, // 007A CALL R6 2
- 0x88180114, // 007B GETMBR R6 R0 K20
- 0x8C180D2D, // 007C GETMET R6 R6 K45
+ 0x88180113, // 007B GETMBR R6 R0 K19
+ 0x8C180D2C, // 007C GETMET R6 R6 K44
0x50200200, // 007D LDBOOL R8 1 0
0x7C180400, // 007E CALL R6 2
0xB81A1A00, // 007F GETNGBL R6 K13
0x8C180D0E, // 0080 GETMET R6 R6 K14
- 0x5820002E, // 0081 LDCONST R8 K46
- 0x58240011, // 0082 LDCONST R9 K17
+ 0x5820002D, // 0081 LDCONST R8 K45
+ 0x54260003, // 0082 LDINT R9 4
0x7C180600, // 0083 CALL R6 3
0xB81A1A00, // 0084 GETNGBL R6 K13
0x8C180D0E, // 0085 GETMET R6 R6 K14
- 0x88200114, // 0086 GETMBR R8 R0 K20
- 0x88201130, // 0087 GETMBR R8 R8 K48
+ 0x88200113, // 0086 GETMBR R8 R0 K19
+ 0x8820112F, // 0087 GETMBR R8 R8 K47
0x8C201110, // 0088 GETMET R8 R8 K16
0x7C200200, // 0089 CALL R8 1
- 0x00225E08, // 008A ADD R8 K47 R8
- 0x58240011, // 008B LDCONST R9 K17
+ 0x00225C08, // 008A ADD R8 K46 R8
+ 0x54260003, // 008B LDINT R9 4
0x7C180600, // 008C CALL R6 3
0xB81A1A00, // 008D GETNGBL R6 K13
0x8C180D0E, // 008E GETMET R6 R6 K14
- 0x88200114, // 008F GETMBR R8 R0 K20
- 0x88201132, // 0090 GETMBR R8 R8 K50
+ 0x88200113, // 008F GETMBR R8 R0 K19
+ 0x88201131, // 0090 GETMBR R8 R8 K49
0x8C201110, // 0091 GETMET R8 R8 K16
0x7C200200, // 0092 CALL R8 1
- 0x00226208, // 0093 ADD R8 K49 R8
- 0x58240011, // 0094 LDCONST R9 K17
+ 0x00226008, // 0093 ADD R8 K48 R8
+ 0x54260003, // 0094 LDINT R9 4
0x7C180600, // 0095 CALL R6 3
0xB81A1A00, // 0096 GETNGBL R6 K13
0x8C180D0E, // 0097 GETMET R6 R6 K14
- 0x88200114, // 0098 GETMBR R8 R0 K20
- 0x88201134, // 0099 GETMBR R8 R8 K52
+ 0x88200113, // 0098 GETMBR R8 R0 K19
+ 0x88201133, // 0099 GETMBR R8 R8 K51
0x8C201110, // 009A GETMET R8 R8 K16
0x7C200200, // 009B CALL R8 1
- 0x00226608, // 009C ADD R8 K51 R8
- 0x58240011, // 009D LDCONST R9 K17
+ 0x00226408, // 009C ADD R8 K50 R8
+ 0x54260003, // 009D LDINT R9 4
0x7C180600, // 009E CALL R6 3
0xB81A1A00, // 009F GETNGBL R6 K13
0x8C180D0E, // 00A0 GETMET R6 R6 K14
- 0x88200114, // 00A1 GETMBR R8 R0 K20
- 0x88201136, // 00A2 GETMBR R8 R8 K54
+ 0x88200113, // 00A1 GETMBR R8 R0 K19
+ 0x8820110C, // 00A2 GETMBR R8 R8 K12
0x8C201110, // 00A3 GETMET R8 R8 K16
0x7C200200, // 00A4 CALL R8 1
- 0x00226A08, // 00A5 ADD R8 K53 R8
- 0x58240011, // 00A6 LDCONST R9 K17
+ 0x00226808, // 00A5 ADD R8 K52 R8
+ 0x54260003, // 00A6 LDINT R9 4
0x7C180600, // 00A7 CALL R6 3
0xB81A1A00, // 00A8 GETNGBL R6 K13
0x8C180D0E, // 00A9 GETMET R6 R6 K14
- 0x88200114, // 00AA GETMBR R8 R0 K20
- 0x88201138, // 00AB GETMBR R8 R8 K56
+ 0x88200113, // 00AA GETMBR R8 R0 K19
+ 0x8820111B, // 00AB GETMBR R8 R8 K27
0x8C201110, // 00AC GETMET R8 R8 K16
0x7C200200, // 00AD CALL R8 1
- 0x00226E08, // 00AE ADD R8 K55 R8
- 0x58240011, // 00AF LDCONST R9 K17
+ 0x00226A08, // 00AE ADD R8 K53 R8
+ 0x54260003, // 00AF LDINT R9 4
0x7C180600, // 00B0 CALL R6 3
0xB81A1A00, // 00B1 GETNGBL R6 K13
0x8C180D0E, // 00B2 GETMET R6 R6 K14
- 0x88200114, // 00B3 GETMBR R8 R0 K20
- 0x8820110C, // 00B4 GETMBR R8 R8 K12
+ 0x88200113, // 00B3 GETMBR R8 R0 K19
+ 0x88201120, // 00B4 GETMBR R8 R8 K32
0x8C201110, // 00B5 GETMET R8 R8 K16
0x7C200200, // 00B6 CALL R8 1
- 0x00227208, // 00B7 ADD R8 K57 R8
- 0x58240011, // 00B8 LDCONST R9 K17
+ 0x00226C08, // 00B7 ADD R8 K54 R8
+ 0x54260003, // 00B8 LDINT R9 4
0x7C180600, // 00B9 CALL R6 3
0xB81A1A00, // 00BA GETNGBL R6 K13
0x8C180D0E, // 00BB GETMET R6 R6 K14
- 0x88200114, // 00BC GETMBR R8 R0 K20
- 0x8820111C, // 00BD GETMBR R8 R8 K28
+ 0x88200113, // 00BC GETMBR R8 R0 K19
+ 0x88201122, // 00BD GETMBR R8 R8 K34
0x8C201110, // 00BE GETMET R8 R8 K16
0x7C200200, // 00BF CALL R8 1
- 0x00227408, // 00C0 ADD R8 K58 R8
- 0x58240011, // 00C1 LDCONST R9 K17
+ 0x00226E08, // 00C0 ADD R8 K55 R8
+ 0x54260003, // 00C1 LDINT R9 4
0x7C180600, // 00C2 CALL R6 3
0xB81A1A00, // 00C3 GETNGBL R6 K13
0x8C180D0E, // 00C4 GETMET R6 R6 K14
- 0x88200114, // 00C5 GETMBR R8 R0 K20
- 0x88201121, // 00C6 GETMBR R8 R8 K33
+ 0x88200113, // 00C5 GETMBR R8 R0 K19
+ 0x88201116, // 00C6 GETMBR R8 R8 K22
0x8C201110, // 00C7 GETMET R8 R8 K16
0x7C200200, // 00C8 CALL R8 1
- 0x00227608, // 00C9 ADD R8 K59 R8
- 0x58240011, // 00CA LDCONST R9 K17
+ 0x00227008, // 00C9 ADD R8 K56 R8
+ 0x54260003, // 00CA LDINT R9 4
0x7C180600, // 00CB CALL R6 3
0xB81A1A00, // 00CC GETNGBL R6 K13
0x8C180D0E, // 00CD GETMET R6 R6 K14
- 0x88200114, // 00CE GETMBR R8 R0 K20
- 0x88201123, // 00CF GETMBR R8 R8 K35
- 0x8C201110, // 00D0 GETMET R8 R8 K16
- 0x7C200200, // 00D1 CALL R8 1
- 0x00227808, // 00D2 ADD R8 K60 R8
- 0x58240011, // 00D3 LDCONST R9 K17
- 0x7C180600, // 00D4 CALL R6 3
- 0xB81A1A00, // 00D5 GETNGBL R6 K13
- 0x8C180D0E, // 00D6 GETMET R6 R6 K14
- 0x88200114, // 00D7 GETMBR R8 R0 K20
- 0x88201117, // 00D8 GETMBR R8 R8 K23
- 0x8C201110, // 00D9 GETMET R8 R8 K16
- 0x7C200200, // 00DA CALL R8 1
- 0x00227A08, // 00DB ADD R8 K61 R8
- 0x58240011, // 00DC LDCONST R9 K17
- 0x7C180600, // 00DD CALL R6 3
- 0xB81A1A00, // 00DE GETNGBL R6 K13
- 0x8C180D0E, // 00DF GETMET R6 R6 K14
- 0x5820002E, // 00E0 LDCONST R8 K46
- 0x58240011, // 00E1 LDCONST R9 K17
+ 0x5820002D, // 00CE LDCONST R8 K45
+ 0x54260003, // 00CF LDINT R9 4
+ 0x7C180600, // 00D0 CALL R6 3
+ 0xB81A1A00, // 00D1 GETNGBL R6 K13
+ 0x8C180D0E, // 00D2 GETMET R6 R6 K14
+ 0x88200113, // 00D3 GETMBR R8 R0 K19
+ 0x8820113A, // 00D4 GETMBR R8 R8 K58
+ 0x8C201110, // 00D5 GETMET R8 R8 K16
+ 0x7C200200, // 00D6 CALL R8 1
+ 0x00227208, // 00D7 ADD R8 K57 R8
+ 0x54260003, // 00D8 LDINT R9 4
+ 0x7C180600, // 00D9 CALL R6 3
+ 0xB81A1A00, // 00DA GETNGBL R6 K13
+ 0x8C180D0E, // 00DB GETMET R6 R6 K14
+ 0x88200113, // 00DC GETMBR R8 R0 K19
+ 0x8820113C, // 00DD GETMBR R8 R8 K60
+ 0x8C201110, // 00DE GETMET R8 R8 K16
+ 0x7C200200, // 00DF CALL R8 1
+ 0x00227608, // 00E0 ADD R8 K59 R8
+ 0x54260003, // 00E1 LDINT R9 4
0x7C180600, // 00E2 CALL R6 3
0xB81A1A00, // 00E3 GETNGBL R6 K13
0x8C180D0E, // 00E4 GETMET R6 R6 K14
- 0x88200114, // 00E5 GETMBR R8 R0 K20
- 0x8820113F, // 00E6 GETMBR R8 R8 K63
+ 0x88200113, // 00E5 GETMBR R8 R0 K19
+ 0x8820113E, // 00E6 GETMBR R8 R8 K62
0x8C201110, // 00E7 GETMET R8 R8 K16
0x7C200200, // 00E8 CALL R8 1
- 0x00227C08, // 00E9 ADD R8 K62 R8
- 0x58240011, // 00EA LDCONST R9 K17
+ 0x00227A08, // 00E9 ADD R8 K61 R8
+ 0x54260003, // 00EA LDINT R9 4
0x7C180600, // 00EB CALL R6 3
0xB81A1A00, // 00EC GETNGBL R6 K13
0x8C180D0E, // 00ED GETMET R6 R6 K14
- 0x88200114, // 00EE GETMBR R8 R0 K20
- 0x88201141, // 00EF GETMBR R8 R8 K65
+ 0x88200113, // 00EE GETMBR R8 R0 K19
+ 0x88201140, // 00EF GETMBR R8 R8 K64
0x8C201110, // 00F0 GETMET R8 R8 K16
0x7C200200, // 00F1 CALL R8 1
- 0x00228008, // 00F2 ADD R8 K64 R8
- 0x58240011, // 00F3 LDCONST R9 K17
+ 0x00227E08, // 00F2 ADD R8 K63 R8
+ 0x54260003, // 00F3 LDINT R9 4
0x7C180600, // 00F4 CALL R6 3
0xB81A1A00, // 00F5 GETNGBL R6 K13
0x8C180D0E, // 00F6 GETMET R6 R6 K14
- 0x88200114, // 00F7 GETMBR R8 R0 K20
- 0x88201143, // 00F8 GETMBR R8 R8 K67
+ 0x88200113, // 00F7 GETMBR R8 R0 K19
+ 0x88201142, // 00F8 GETMBR R8 R8 K66
0x8C201110, // 00F9 GETMET R8 R8 K16
0x7C200200, // 00FA CALL R8 1
- 0x00228408, // 00FB ADD R8 K66 R8
- 0x58240011, // 00FC LDCONST R9 K17
+ 0x00228208, // 00FB ADD R8 K65 R8
+ 0x54260003, // 00FC LDINT R9 4
0x7C180600, // 00FD CALL R6 3
- 0xB81A1A00, // 00FE GETNGBL R6 K13
- 0x8C180D0E, // 00FF GETMET R6 R6 K14
- 0x88200114, // 0100 GETMBR R8 R0 K20
- 0x88201145, // 0101 GETMBR R8 R8 K69
- 0x8C201110, // 0102 GETMET R8 R8 K16
- 0x7C200200, // 0103 CALL R8 1
- 0x00228808, // 0104 ADD R8 K68 R8
- 0x58240011, // 0105 LDCONST R9 K17
- 0x7C180600, // 0106 CALL R6 3
- 0xB81A1A00, // 0107 GETNGBL R6 K13
- 0x8C180D0E, // 0108 GETMET R6 R6 K14
- 0x88200114, // 0109 GETMBR R8 R0 K20
- 0x88201147, // 010A GETMBR R8 R8 K71
- 0x8C201110, // 010B GETMET R8 R8 K16
- 0x7C200200, // 010C CALL R8 1
- 0x00228C08, // 010D ADD R8 K70 R8
- 0x58240011, // 010E LDCONST R9 K17
- 0x7C180600, // 010F CALL R6 3
- 0x88180114, // 0110 GETMBR R6 R0 K20
- 0x88180D48, // 0111 GETMBR R6 R6 K72
- 0x90029006, // 0112 SETMBR R0 K72 R6
- 0x88180114, // 0113 GETMBR R6 R0 K20
- 0x88180D47, // 0114 GETMBR R6 R6 K71
- 0x90028E06, // 0115 SETMBR R0 K71 R6
- 0xB81A1A00, // 0116 GETNGBL R6 K13
- 0x8C180D0E, // 0117 GETMET R6 R6 K14
- 0x88200148, // 0118 GETMBR R8 R0 K72
- 0x8C201110, // 0119 GETMET R8 R8 K16
- 0x7C200200, // 011A CALL R8 1
- 0x00229208, // 011B ADD R8 K73 R8
- 0x58240011, // 011C LDCONST R9 K17
- 0x7C180600, // 011D CALL R6 3
- 0xB81A0E00, // 011E GETNGBL R6 K7
- 0x8C180D4A, // 011F GETMET R6 R6 K74
- 0x7C180200, // 0120 CALL R6 1
- 0x881C011C, // 0121 GETMBR R7 R0 K28
- 0x901A3807, // 0122 SETMBR R6 K28 R7
- 0x881C0148, // 0123 GETMBR R7 R0 K72
- 0x901A9007, // 0124 SETMBR R6 K72 R7
- 0xB81E1A00, // 0125 GETNGBL R7 K13
- 0x8C1C0F0E, // 0126 GETMET R7 R7 K14
- 0xB8260E00, // 0127 GETNGBL R9 K7
- 0x8C241313, // 0128 GETMET R9 R9 K19
- 0x5C2C0C00, // 0129 MOVE R11 R6
- 0x7C240400, // 012A CALL R9 2
- 0x00269609, // 012B ADD R9 K75 R9
- 0x58280011, // 012C LDCONST R10 K17
- 0x7C1C0600, // 012D CALL R7 3
- 0x8C1C0D4C, // 012E GETMET R7 R6 K76
- 0x7C1C0200, // 012F CALL R7 1
- 0xB8221A00, // 0130 GETNGBL R8 K13
- 0x8C20110E, // 0131 GETMET R8 R8 K14
- 0x8C280F10, // 0132 GETMET R10 R7 K16
- 0x7C280200, // 0133 CALL R10 1
- 0x002A9A0A, // 0134 ADD R10 K77 R10
- 0x582C0011, // 0135 LDCONST R11 K17
- 0x7C200600, // 0136 CALL R8 3
- 0x8C20034E, // 0137 GETMET R8 R1 K78
- 0x542A0022, // 0138 LDINT R10 35
- 0x502C0200, // 0139 LDBOOL R11 1 0
- 0x7C200600, // 013A CALL R8 3
- 0x8C24114C, // 013B GETMET R9 R8 K76
- 0x5C2C0E00, // 013C MOVE R11 R7
- 0x7C240400, // 013D CALL R9 2
- 0x8828014F, // 013E GETMBR R10 R0 K79
- 0x8C281550, // 013F GETMET R10 R10 K80
- 0x5C301200, // 0140 MOVE R12 R9
- 0x88340351, // 0141 GETMBR R13 R1 K81
- 0x88380352, // 0142 GETMBR R14 R1 K82
- 0x883C1153, // 0143 GETMBR R15 R8 K83
- 0x7C280A00, // 0144 CALL R10 5
- 0x80000000, // 0145 RET 0
+ 0x88180113, // 00FE GETMBR R6 R0 K19
+ 0x88180D43, // 00FF GETMBR R6 R6 K67
+ 0x90028606, // 0100 SETMBR R0 K67 R6
+ 0x88180113, // 0101 GETMBR R6 R0 K19
+ 0x88180D42, // 0102 GETMBR R6 R6 K66
+ 0x90028406, // 0103 SETMBR R0 K66 R6
+ 0xB81A1A00, // 0104 GETNGBL R6 K13
+ 0x8C180D0E, // 0105 GETMET R6 R6 K14
+ 0x88200143, // 0106 GETMBR R8 R0 K67
+ 0x8C201110, // 0107 GETMET R8 R8 K16
+ 0x7C200200, // 0108 CALL R8 1
+ 0x00228808, // 0109 ADD R8 K68 R8
+ 0x54260003, // 010A LDINT R9 4
+ 0x7C180600, // 010B CALL R6 3
+ 0xB81A0E00, // 010C GETNGBL R6 K7
+ 0x8C180D45, // 010D GETMET R6 R6 K69
+ 0x7C180200, // 010E CALL R6 1
+ 0x881C011B, // 010F GETMBR R7 R0 K27
+ 0x901A3607, // 0110 SETMBR R6 K27 R7
+ 0x881C0143, // 0111 GETMBR R7 R0 K67
+ 0x901A8607, // 0112 SETMBR R6 K67 R7
+ 0xB81E1A00, // 0113 GETNGBL R7 K13
+ 0x8C1C0F0E, // 0114 GETMET R7 R7 K14
+ 0xB8260E00, // 0115 GETNGBL R9 K7
+ 0x8C241312, // 0116 GETMET R9 R9 K18
+ 0x5C2C0C00, // 0117 MOVE R11 R6
+ 0x7C240400, // 0118 CALL R9 2
+ 0x00268C09, // 0119 ADD R9 K70 R9
+ 0x542A0003, // 011A LDINT R10 4
+ 0x7C1C0600, // 011B CALL R7 3
+ 0x8C1C0D47, // 011C GETMET R7 R6 K71
+ 0x7C1C0200, // 011D CALL R7 1
+ 0xB8221A00, // 011E GETNGBL R8 K13
+ 0x8C20110E, // 011F GETMET R8 R8 K14
+ 0x8C280F10, // 0120 GETMET R10 R7 K16
+ 0x7C280200, // 0121 CALL R10 1
+ 0x002A900A, // 0122 ADD R10 K72 R10
+ 0x542E0003, // 0123 LDINT R11 4
+ 0x7C200600, // 0124 CALL R8 3
+ 0x8C200349, // 0125 GETMET R8 R1 K73
+ 0x542A0022, // 0126 LDINT R10 35
+ 0x502C0200, // 0127 LDBOOL R11 1 0
+ 0x7C200600, // 0128 CALL R8 3
+ 0x8C241147, // 0129 GETMET R9 R8 K71
+ 0x5C2C0E00, // 012A MOVE R11 R7
+ 0x7C240400, // 012B CALL R9 2
+ 0x8828014A, // 012C GETMBR R10 R0 K74
+ 0x8C28154B, // 012D GETMET R10 R10 K75
+ 0x5C301200, // 012E MOVE R12 R9
+ 0x8834034C, // 012F GETMBR R13 R1 K76
+ 0x8838034D, // 0130 GETMBR R14 R1 K77
+ 0x883C114E, // 0131 GETMBR R15 R8 K78
+ 0x7C280A00, // 0132 CALL R10 5
+ 0x80000000, // 0133 RET 0
})
)
);
@@ -739,7 +715,7 @@ be_local_closure(Matter_Commisioning_Context_find_session_by_destination_id, /
0x8C280F04, // 0031 GETMET R10 R7 K4
0x7C280200, // 0032 CALL R10 1
0x002A200A, // 0033 ADD R10 K16 R10
- 0x582C0005, // 0034 LDCONST R11 K5
+ 0x542E0003, // 0034 LDINT R11 4
0x7C200600, // 0035 CALL R8 3
0x8C200711, // 0036 GETMET R8 R3 K17
0x5C280E00, // 0037 MOVE R10 R7
@@ -826,43 +802,43 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
/* K13 */ be_nested_str_weak(tasmota),
/* K14 */ be_nested_str_weak(log),
/* K15 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K16 */ be_const_int(3),
- /* K17 */ be_nested_str_weak(SHA256),
- /* K18 */ be_nested_str_weak(update),
- /* K19 */ be_nested_str_weak(_Msg1),
- /* K20 */ be_nested_str_weak(_Msg2),
- /* K21 */ be_nested_str_weak(out),
- /* K22 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20session_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20session_X2Eipk_epoch_key_X20),
- /* K24 */ be_nested_str_weak(ipk_epoch_key),
- /* K25 */ be_nested_str_weak(MTR_X3A_X20session_X2Efabric_compressed_X20),
- /* K26 */ be_nested_str_weak(fabric_compressed),
- /* K27 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20ipk_group_key_X20_X3D_X20),
- /* K28 */ be_nested_str_weak(get_ipk_group_key),
- /* K29 */ be_nested_str_weak(tohex),
- /* K30 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TranscriptHash_X3D_X20),
- /* K31 */ be_nested_str_weak(fromstring),
- /* K32 */ be_nested_str_weak(S3K_Info),
- /* K33 */ be_nested_str_weak(HKDF_SHA256),
- /* K34 */ be_nested_str_weak(derive),
- /* K35 */ be_nested_str_weak(shared_secret),
- /* K36 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s3k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K37 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s3k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K38 */ be_nested_str_weak(TBEData3Encrypted),
- /* K39 */ be_const_int(2147483647),
- /* K40 */ be_nested_str_weak(AES_CCM),
- /* K41 */ be_nested_str_weak(TBEData3_Nonce),
- /* K42 */ be_nested_str_weak(decrypt),
- /* K43 */ be_nested_str_weak(tag),
- /* K44 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData3_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K45 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBETag3_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K46 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20tag_sent_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K47 */ be_nested_str_weak(value_error),
- /* K48 */ be_nested_str_weak(tag_X20do_X20not_X20match),
- /* K49 */ be_nested_str_weak(TLV),
- /* K50 */ be_nested_str_weak(findsubval),
- /* K51 */ be_const_int(1),
- /* K52 */ be_const_int(2),
+ /* K16 */ be_nested_str_weak(SHA256),
+ /* K17 */ be_nested_str_weak(update),
+ /* K18 */ be_nested_str_weak(_Msg1),
+ /* K19 */ be_nested_str_weak(_Msg2),
+ /* K20 */ be_nested_str_weak(out),
+ /* K21 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20session_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K22 */ be_nested_str_weak(MTR_X3A_X20session_X2Eipk_epoch_key_X20),
+ /* K23 */ be_nested_str_weak(ipk_epoch_key),
+ /* K24 */ be_nested_str_weak(MTR_X3A_X20session_X2Efabric_compressed_X20),
+ /* K25 */ be_nested_str_weak(fabric_compressed),
+ /* K26 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20ipk_group_key_X20_X3D_X20),
+ /* K27 */ be_nested_str_weak(get_ipk_group_key),
+ /* K28 */ be_nested_str_weak(tohex),
+ /* K29 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TranscriptHash_X3D_X20),
+ /* K30 */ be_nested_str_weak(fromstring),
+ /* K31 */ be_nested_str_weak(S3K_Info),
+ /* K32 */ be_nested_str_weak(HKDF_SHA256),
+ /* K33 */ be_nested_str_weak(derive),
+ /* K34 */ be_nested_str_weak(shared_secret),
+ /* K35 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s3k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K36 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s3k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K37 */ be_nested_str_weak(TBEData3Encrypted),
+ /* K38 */ be_const_int(2147483647),
+ /* K39 */ be_nested_str_weak(AES_CCM),
+ /* K40 */ be_nested_str_weak(TBEData3_Nonce),
+ /* K41 */ be_nested_str_weak(decrypt),
+ /* K42 */ be_nested_str_weak(tag),
+ /* K43 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData3_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K44 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBETag3_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K45 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20tag_sent_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K46 */ be_nested_str_weak(value_error),
+ /* K47 */ be_nested_str_weak(tag_X20do_X20not_X20match),
+ /* K48 */ be_nested_str_weak(TLV),
+ /* K49 */ be_nested_str_weak(findsubval),
+ /* K50 */ be_const_int(1),
+ /* K51 */ be_const_int(2),
+ /* K52 */ be_const_int(3),
/* K53 */ be_nested_str_weak(MTR_X3A_X20initiatorNOCTLV_X20_X3D_X20),
/* K54 */ be_nested_str_weak(findsub),
/* K55 */ be_nested_str_weak(int),
@@ -931,68 +907,68 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0xB8161A00, // 0014 GETNGBL R5 K13
0x8C140B0E, // 0015 GETMET R5 R5 K14
0x581C000F, // 0016 LDCONST R7 K15
- 0x58200010, // 0017 LDCONST R8 K16
+ 0x54220003, // 0017 LDINT R8 4
0x7C140600, // 0018 CALL R5 3
- 0x8C140511, // 0019 GETMET R5 R2 K17
+ 0x8C140510, // 0019 GETMET R5 R2 K16
0x7C140200, // 001A CALL R5 1
- 0x8C140B12, // 001B GETMET R5 R5 K18
- 0x881C0713, // 001C GETMBR R7 R3 K19
+ 0x8C140B11, // 001B GETMET R5 R5 K17
+ 0x881C0712, // 001C GETMBR R7 R3 K18
0x7C140400, // 001D CALL R5 2
- 0x8C140B12, // 001E GETMET R5 R5 K18
- 0x881C0714, // 001F GETMBR R7 R3 K20
+ 0x8C140B11, // 001E GETMET R5 R5 K17
+ 0x881C0713, // 001F GETMBR R7 R3 K19
0x7C140400, // 0020 CALL R5 2
- 0x8C140B15, // 0021 GETMET R5 R5 K21
+ 0x8C140B14, // 0021 GETMET R5 R5 K20
0x7C140200, // 0022 CALL R5 1
0xB81A1A00, // 0023 GETNGBL R6 K13
0x8C180D0E, // 0024 GETMET R6 R6 K14
0x60200008, // 0025 GETGBL R8 G8
0x5C240600, // 0026 MOVE R9 R3
0x7C200200, // 0027 CALL R8 1
- 0x00222C08, // 0028 ADD R8 K22 R8
- 0x58240010, // 0029 LDCONST R9 K16
+ 0x00222A08, // 0028 ADD R8 K21 R8
+ 0x54260003, // 0029 LDINT R9 4
0x7C180600, // 002A CALL R6 3
0xB81A1A00, // 002B GETNGBL R6 K13
0x8C180D0E, // 002C GETMET R6 R6 K14
0x60200008, // 002D GETGBL R8 G8
- 0x88240718, // 002E GETMBR R9 R3 K24
+ 0x88240717, // 002E GETMBR R9 R3 K23
0x7C200200, // 002F CALL R8 1
- 0x00222E08, // 0030 ADD R8 K23 R8
- 0x58240010, // 0031 LDCONST R9 K16
+ 0x00222C08, // 0030 ADD R8 K22 R8
+ 0x54260003, // 0031 LDINT R9 4
0x7C180600, // 0032 CALL R6 3
0xB81A1A00, // 0033 GETNGBL R6 K13
0x8C180D0E, // 0034 GETMET R6 R6 K14
0x60200008, // 0035 GETGBL R8 G8
- 0x8824071A, // 0036 GETMBR R9 R3 K26
+ 0x88240719, // 0036 GETMBR R9 R3 K25
0x7C200200, // 0037 CALL R8 1
- 0x00223208, // 0038 ADD R8 K25 R8
- 0x58240010, // 0039 LDCONST R9 K16
+ 0x00223008, // 0038 ADD R8 K24 R8
+ 0x54260003, // 0039 LDINT R9 4
0x7C180600, // 003A CALL R6 3
0xB81A1A00, // 003B GETNGBL R6 K13
0x8C180D0E, // 003C GETMET R6 R6 K14
- 0x8C20071C, // 003D GETMET R8 R3 K28
+ 0x8C20071B, // 003D GETMET R8 R3 K27
0x7C200200, // 003E CALL R8 1
- 0x8C20111D, // 003F GETMET R8 R8 K29
+ 0x8C20111C, // 003F GETMET R8 R8 K28
0x7C200200, // 0040 CALL R8 1
- 0x00223608, // 0041 ADD R8 K27 R8
- 0x58240010, // 0042 LDCONST R9 K16
+ 0x00223408, // 0041 ADD R8 K26 R8
+ 0x54260003, // 0042 LDINT R9 4
0x7C180600, // 0043 CALL R6 3
0xB81A1A00, // 0044 GETNGBL R6 K13
0x8C180D0E, // 0045 GETMET R6 R6 K14
- 0x8C200B1D, // 0046 GETMET R8 R5 K29
+ 0x8C200B1C, // 0046 GETMET R8 R5 K28
0x7C200200, // 0047 CALL R8 1
- 0x00223C08, // 0048 ADD R8 K30 R8
- 0x58240010, // 0049 LDCONST R9 K16
+ 0x00223A08, // 0048 ADD R8 K29 R8
+ 0x54260003, // 0049 LDINT R9 4
0x7C180600, // 004A CALL R6 3
0x60180015, // 004B GETGBL R6 G21
0x7C180000, // 004C CALL R6 0
- 0x8C180D1F, // 004D GETMET R6 R6 K31
- 0x88200120, // 004E GETMBR R8 R0 K32
+ 0x8C180D1E, // 004D GETMET R6 R6 K30
+ 0x8820011F, // 004E GETMBR R8 R0 K31
0x7C180400, // 004F CALL R6 2
- 0x8C1C0521, // 0050 GETMET R7 R2 K33
+ 0x8C1C0520, // 0050 GETMET R7 R2 K32
0x7C1C0200, // 0051 CALL R7 1
- 0x8C1C0F22, // 0052 GETMET R7 R7 K34
- 0x88240723, // 0053 GETMBR R9 R3 K35
- 0x8C28071C, // 0054 GETMET R10 R3 K28
+ 0x8C1C0F21, // 0052 GETMET R7 R7 K33
+ 0x88240722, // 0053 GETMBR R9 R3 K34
+ 0x8C28071B, // 0054 GETMET R10 R3 K27
0x7C280200, // 0055 CALL R10 1
0x00281405, // 0056 ADD R10 R10 R5
0x5C2C0C00, // 0057 MOVE R11 R6
@@ -1001,44 +977,44 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0xB8221A00, // 005A GETNGBL R8 K13
0x8C20110E, // 005B GETMET R8 R8 K14
0x5828000F, // 005C LDCONST R10 K15
- 0x582C0010, // 005D LDCONST R11 K16
+ 0x542E0003, // 005D LDINT R11 4
0x7C200600, // 005E CALL R8 3
0xB8221A00, // 005F GETNGBL R8 K13
0x8C20110E, // 0060 GETMET R8 R8 K14
- 0x8C28071C, // 0061 GETMET R10 R3 K28
+ 0x8C28071B, // 0061 GETMET R10 R3 K27
0x7C280200, // 0062 CALL R10 1
0x00281405, // 0063 ADD R10 R10 R5
- 0x8C28151D, // 0064 GETMET R10 R10 K29
+ 0x8C28151C, // 0064 GETMET R10 R10 K28
0x7C280200, // 0065 CALL R10 1
- 0x002A480A, // 0066 ADD R10 K36 R10
- 0x582C0010, // 0067 LDCONST R11 K16
+ 0x002A460A, // 0066 ADD R10 K35 R10
+ 0x542E0003, // 0067 LDINT R11 4
0x7C200600, // 0068 CALL R8 3
0xB8221A00, // 0069 GETNGBL R8 K13
0x8C20110E, // 006A GETMET R8 R8 K14
- 0x8C280F1D, // 006B GETMET R10 R7 K29
+ 0x8C280F1C, // 006B GETMET R10 R7 K28
0x7C280200, // 006C CALL R10 1
- 0x002A4A0A, // 006D ADD R10 K37 R10
- 0x582C0010, // 006E LDCONST R11 K16
+ 0x002A480A, // 006D ADD R10 K36 R10
+ 0x542E0003, // 006E LDINT R11 4
0x7C200600, // 006F CALL R8 3
0xB8221A00, // 0070 GETNGBL R8 K13
0x8C20110E, // 0071 GETMET R8 R8 K14
0x5828000F, // 0072 LDCONST R10 K15
- 0x582C0010, // 0073 LDCONST R11 K16
+ 0x542E0003, // 0073 LDINT R11 4
0x7C200600, // 0074 CALL R8 3
0x5421FFEE, // 0075 LDINT R8 -17
0x40220608, // 0076 CONNECT R8 K3 R8
- 0x88240926, // 0077 GETMBR R9 R4 K38
+ 0x88240925, // 0077 GETMBR R9 R4 K37
0x94201208, // 0078 GETIDX R8 R9 R8
0x5429FFEF, // 0079 LDINT R10 -16
- 0x40281527, // 007A CONNECT R10 R10 K39
- 0x882C0926, // 007B GETMBR R11 R4 K38
+ 0x40281526, // 007A CONNECT R10 R10 K38
+ 0x882C0925, // 007B GETMBR R11 R4 K37
0x9424160A, // 007C GETIDX R9 R11 R10
- 0x8C300528, // 007D GETMET R12 R2 K40
+ 0x8C300527, // 007D GETMET R12 R2 K39
0x5C380E00, // 007E MOVE R14 R7
0x603C0015, // 007F GETGBL R15 G21
0x7C3C0000, // 0080 CALL R15 0
- 0x8C3C1F1F, // 0081 GETMET R15 R15 K31
- 0x88440129, // 0082 GETMBR R17 R0 K41
+ 0x8C3C1F1E, // 0081 GETMET R15 R15 K30
+ 0x88440128, // 0082 GETMBR R17 R0 K40
0x7C3C0400, // 0083 CALL R15 2
0x60400015, // 0084 GETGBL R16 G21
0x7C400000, // 0085 CALL R16 0
@@ -1048,57 +1024,57 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0x544A000F, // 0089 LDINT R18 16
0x7C300C00, // 008A CALL R12 6
0x5C281800, // 008B MOVE R10 R12
- 0x8C30152A, // 008C GETMET R12 R10 K42
+ 0x8C301529, // 008C GETMET R12 R10 K41
0x5C381000, // 008D MOVE R14 R8
0x7C300400, // 008E CALL R12 2
0x5C2C1800, // 008F MOVE R11 R12
- 0x8C30152B, // 0090 GETMET R12 R10 K43
+ 0x8C30152A, // 0090 GETMET R12 R10 K42
0x7C300200, // 0091 CALL R12 1
0xB8361A00, // 0092 GETNGBL R13 K13
0x8C341B0E, // 0093 GETMET R13 R13 K14
- 0x8C3C171D, // 0094 GETMET R15 R11 K29
+ 0x8C3C171C, // 0094 GETMET R15 R11 K28
0x7C3C0200, // 0095 CALL R15 1
- 0x003E580F, // 0096 ADD R15 K44 R15
- 0x58400010, // 0097 LDCONST R16 K16
+ 0x003E560F, // 0096 ADD R15 K43 R15
+ 0x54420003, // 0097 LDINT R16 4
0x7C340600, // 0098 CALL R13 3
0xB8361A00, // 0099 GETNGBL R13 K13
0x8C341B0E, // 009A GETMET R13 R13 K14
- 0x8C3C191D, // 009B GETMET R15 R12 K29
+ 0x8C3C191C, // 009B GETMET R15 R12 K28
0x7C3C0200, // 009C CALL R15 1
- 0x003E5A0F, // 009D ADD R15 K45 R15
- 0x58400010, // 009E LDCONST R16 K16
+ 0x003E580F, // 009D ADD R15 K44 R15
+ 0x54420003, // 009E LDINT R16 4
0x7C340600, // 009F CALL R13 3
0xB8361A00, // 00A0 GETNGBL R13 K13
0x8C341B0E, // 00A1 GETMET R13 R13 K14
- 0x8C3C131D, // 00A2 GETMET R15 R9 K29
+ 0x8C3C131C, // 00A2 GETMET R15 R9 K28
0x7C3C0200, // 00A3 CALL R15 1
- 0x003E5C0F, // 00A4 ADD R15 K46 R15
- 0x58400010, // 00A5 LDCONST R16 K16
+ 0x003E5A0F, // 00A4 ADD R15 K45 R15
+ 0x54420003, // 00A5 LDINT R16 4
0x7C340600, // 00A6 CALL R13 3
0xB8361A00, // 00A7 GETNGBL R13 K13
0x8C341B0E, // 00A8 GETMET R13 R13 K14
0x583C000F, // 00A9 LDCONST R15 K15
- 0x58400010, // 00AA LDCONST R16 K16
+ 0x54420003, // 00AA LDINT R16 4
0x7C340600, // 00AB CALL R13 3
0x20341809, // 00AC NE R13 R12 R9
0x78360000, // 00AD JMPF R13 #00AF
- 0xB0065F30, // 00AE RAISE 1 K47 K48
+ 0xB0065D2F, // 00AE RAISE 1 K46 K47
0xB8361000, // 00AF GETNGBL R13 K8
- 0x88341B31, // 00B0 GETMBR R13 R13 K49
+ 0x88341B30, // 00B0 GETMBR R13 R13 K48
0x8C341B0A, // 00B1 GETMET R13 R13 K10
0x5C3C1600, // 00B2 MOVE R15 R11
0x7C340400, // 00B3 CALL R13 2
- 0x8C381B32, // 00B4 GETMET R14 R13 K50
- 0x58400033, // 00B5 LDCONST R16 K51
+ 0x8C381B31, // 00B4 GETMET R14 R13 K49
+ 0x58400032, // 00B5 LDCONST R16 K50
0x7C380400, // 00B6 CALL R14 2
- 0x8C3C1B32, // 00B7 GETMET R15 R13 K50
- 0x58440034, // 00B8 LDCONST R17 K52
+ 0x8C3C1B31, // 00B7 GETMET R15 R13 K49
+ 0x58440033, // 00B8 LDCONST R17 K51
0x7C3C0400, // 00B9 CALL R15 2
- 0x8C401B32, // 00BA GETMET R16 R13 K50
- 0x58480010, // 00BB LDCONST R18 K16
+ 0x8C401B31, // 00BA GETMET R16 R13 K49
+ 0x58480034, // 00BB LDCONST R18 K52
0x7C400400, // 00BC CALL R16 2
0xB8461000, // 00BD GETNGBL R17 K8
- 0x88442331, // 00BE GETMBR R17 R17 K49
+ 0x88442330, // 00BE GETMBR R17 R17 K48
0x8C44230A, // 00BF GETMET R17 R17 K10
0x5C4C1C00, // 00C0 MOVE R19 R14
0x7C440400, // 00C1 CALL R17 2
@@ -1108,15 +1084,15 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0x5C542200, // 00C5 MOVE R21 R17
0x7C500200, // 00C6 CALL R20 1
0x00526A14, // 00C7 ADD R20 K53 R20
- 0x58540010, // 00C8 LDCONST R21 K16
+ 0x58540034, // 00C8 LDCONST R21 K52
0x7C480600, // 00C9 CALL R18 3
- 0x8C482332, // 00CA GETMET R18 R17 K50
+ 0x8C482331, // 00CA GETMET R18 R17 K49
0x54520008, // 00CB LDINT R20 9
0x7C480400, // 00CC CALL R18 2
0x8C4C2336, // 00CD GETMET R19 R17 K54
0x54560005, // 00CE LDINT R21 6
0x7C4C0400, // 00CF CALL R19 2
- 0x8C502732, // 00D0 GETMET R20 R19 K50
+ 0x8C502731, // 00D0 GETMET R20 R19 K49
0x545A0010, // 00D1 LDINT R22 17
0x7C500400, // 00D2 CALL R20 2
0x60540004, // 00D3 GETGBL R21 G4
@@ -1137,37 +1113,37 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0x88600739, // 00E2 GETMBR R24 R3 K57
0x7C5C0200, // 00E3 CALL R23 1
0x005E7617, // 00E4 ADD R23 K59 R23
- 0x58600010, // 00E5 LDCONST R24 K16
+ 0x58600034, // 00E5 LDCONST R24 K52
0x7C540600, // 00E6 CALL R21 3
0xB8561000, // 00E7 GETNGBL R21 K8
- 0x88542B31, // 00E8 GETMBR R21 R21 K49
+ 0x88542B30, // 00E8 GETMBR R21 R21 K48
0x8C542B3C, // 00E9 GETMET R21 R21 K60
0x7C540200, // 00EA CALL R21 1
0x8C582B3D, // 00EB GETMET R22 R21 K61
- 0x58600033, // 00EC LDCONST R24 K51
+ 0x58600032, // 00EC LDCONST R24 K50
0xB8661000, // 00ED GETNGBL R25 K8
- 0x88643331, // 00EE GETMBR R25 R25 K49
+ 0x88643330, // 00EE GETMBR R25 R25 K48
0x8864333E, // 00EF GETMBR R25 R25 K62
0x5C681C00, // 00F0 MOVE R26 R14
0x7C580800, // 00F1 CALL R22 4
0x8C582B3D, // 00F2 GETMET R22 R21 K61
- 0x58600034, // 00F3 LDCONST R24 K52
+ 0x58600033, // 00F3 LDCONST R24 K51
0xB8661000, // 00F4 GETNGBL R25 K8
- 0x88643331, // 00F5 GETMBR R25 R25 K49
+ 0x88643330, // 00F5 GETMBR R25 R25 K48
0x8864333E, // 00F6 GETMBR R25 R25 K62
0x5C681E00, // 00F7 MOVE R26 R15
0x7C580800, // 00F8 CALL R22 4
0x8C582B3D, // 00F9 GETMET R22 R21 K61
- 0x58600010, // 00FA LDCONST R24 K16
+ 0x58600034, // 00FA LDCONST R24 K52
0xB8661000, // 00FB GETNGBL R25 K8
- 0x88643331, // 00FC GETMBR R25 R25 K49
+ 0x88643330, // 00FC GETMBR R25 R25 K48
0x8864333E, // 00FD GETMBR R25 R25 K62
0x8868013F, // 00FE GETMBR R26 R0 K63
0x7C580800, // 00FF CALL R22 4
0x8C582B3D, // 0100 GETMET R22 R21 K61
0x54620003, // 0101 LDINT R24 4
0xB8661000, // 0102 GETNGBL R25 K8
- 0x88643331, // 0103 GETMBR R25 R25 K49
+ 0x88643330, // 0103 GETMBR R25 R25 K48
0x8864333E, // 0104 GETMBR R25 R25 K62
0x88680140, // 0105 GETMBR R26 R0 K64
0x7C580800, // 0106 CALL R22 4
@@ -1175,22 +1151,22 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0x7C580200, // 0108 CALL R22 1
0xB85E1A00, // 0109 GETNGBL R23 K13
0x8C5C2F0E, // 010A GETMET R23 R23 K14
- 0x8C64251D, // 010B GETMET R25 R18 K29
+ 0x8C64251C, // 010B GETMET R25 R18 K28
0x7C640200, // 010C CALL R25 1
0x00668419, // 010D ADD R25 K66 R25
- 0x58680010, // 010E LDCONST R26 K16
+ 0x546A0003, // 010E LDINT R26 4
0x7C5C0600, // 010F CALL R23 3
0xB85E1A00, // 0110 GETNGBL R23 K13
0x8C5C2F0E, // 0111 GETMET R23 R23 K14
- 0x8C64211D, // 0112 GETMET R25 R16 K29
+ 0x8C64211C, // 0112 GETMET R25 R16 K28
0x7C640200, // 0113 CALL R25 1
0x00668619, // 0114 ADD R25 K67 R25
- 0x58680010, // 0115 LDCONST R26 K16
+ 0x546A0003, // 0115 LDINT R26 4
0x7C5C0600, // 0116 CALL R23 3
0xB85E1A00, // 0117 GETNGBL R23 K13
0x8C5C2F0E, // 0118 GETMET R23 R23 K14
0x5864000F, // 0119 LDCONST R25 K15
- 0x58680010, // 011A LDCONST R26 K16
+ 0x546A0003, // 011A LDINT R26 4
0x7C5C0600, // 011B CALL R23 3
0x8C5C0544, // 011C GETMET R23 R2 K68
0x7C5C0200, // 011D CALL R23 1
@@ -1201,63 +1177,63 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0x7C5C0800, // 0122 CALL R23 4
0x5C602E00, // 0123 MOVE R24 R23
0x74620000, // 0124 JMPT R24 #0126
- 0xB0065F46, // 0125 RAISE 1 K47 K70
+ 0xB0065D46, // 0125 RAISE 1 K46 K70
0xB8621A00, // 0126 GETNGBL R24 K13
0x8C60310E, // 0127 GETMET R24 R24 K14
0x58680047, // 0128 LDCONST R26 K71
- 0x586C0010, // 0129 LDCONST R27 K16
+ 0x586C0034, // 0129 LDCONST R27 K52
0x7C600600, // 012A CALL R24 3
- 0x8C600511, // 012B GETMET R24 R2 K17
+ 0x8C600510, // 012B GETMET R24 R2 K16
0x7C600200, // 012C CALL R24 1
- 0x8C603112, // 012D GETMET R24 R24 K18
- 0x88680713, // 012E GETMBR R26 R3 K19
+ 0x8C603111, // 012D GETMET R24 R24 K17
+ 0x88680712, // 012E GETMBR R26 R3 K18
0x7C600400, // 012F CALL R24 2
- 0x8C603112, // 0130 GETMET R24 R24 K18
- 0x88680714, // 0131 GETMBR R26 R3 K20
+ 0x8C603111, // 0130 GETMET R24 R24 K17
+ 0x88680713, // 0131 GETMBR R26 R3 K19
0x7C600400, // 0132 CALL R24 2
- 0x8C603112, // 0133 GETMET R24 R24 K18
+ 0x8C603111, // 0133 GETMET R24 R24 K17
0x88680948, // 0134 GETMBR R26 R4 K72
0x7C600400, // 0135 CALL R24 2
- 0x8C603115, // 0136 GETMET R24 R24 K21
+ 0x8C603114, // 0136 GETMET R24 R24 K20
0x7C600200, // 0137 CALL R24 1
0x5C143000, // 0138 MOVE R5 R24
0x4C600000, // 0139 LDNIL R24
- 0x900E2618, // 013A SETMBR R3 K19 R24
+ 0x900E2418, // 013A SETMBR R3 K18 R24
0x4C600000, // 013B LDNIL R24
- 0x900E2818, // 013C SETMBR R3 K20 R24
+ 0x900E2618, // 013C SETMBR R3 K19 R24
0xB8621A00, // 013D GETNGBL R24 K13
0x8C60310E, // 013E GETMET R24 R24 K14
0x58680049, // 013F LDCONST R26 K73
- 0x586C0010, // 0140 LDCONST R27 K16
+ 0x546E0003, // 0140 LDINT R27 4
0x7C600600, // 0141 CALL R24 3
0xB8621A00, // 0142 GETNGBL R24 K13
0x8C60310E, // 0143 GETMET R24 R24 K14
- 0x88680723, // 0144 GETMBR R26 R3 K35
- 0x8C68351D, // 0145 GETMET R26 R26 K29
+ 0x88680722, // 0144 GETMBR R26 R3 K34
+ 0x8C68351C, // 0145 GETMET R26 R26 K28
0x7C680200, // 0146 CALL R26 1
0x006A941A, // 0147 ADD R26 K74 R26
- 0x586C0010, // 0148 LDCONST R27 K16
+ 0x546E0003, // 0148 LDINT R27 4
0x7C600600, // 0149 CALL R24 3
0xB8621A00, // 014A GETNGBL R24 K13
0x8C60310E, // 014B GETMET R24 R24 K14
- 0x8C68071C, // 014C GETMET R26 R3 K28
+ 0x8C68071B, // 014C GETMET R26 R3 K27
0x7C680200, // 014D CALL R26 1
0x00683405, // 014E ADD R26 R26 R5
- 0x8C68351D, // 014F GETMET R26 R26 K29
+ 0x8C68351C, // 014F GETMET R26 R26 K28
0x7C680200, // 0150 CALL R26 1
0x006A961A, // 0151 ADD R26 K75 R26
- 0x586C0010, // 0152 LDCONST R27 K16
+ 0x546E0003, // 0152 LDINT R27 4
0x7C600600, // 0153 CALL R24 3
- 0x8C600521, // 0154 GETMET R24 R2 K33
+ 0x8C600520, // 0154 GETMET R24 R2 K32
0x7C600200, // 0155 CALL R24 1
- 0x8C603122, // 0156 GETMET R24 R24 K34
- 0x88680723, // 0157 GETMBR R26 R3 K35
- 0x8C6C071C, // 0158 GETMET R27 R3 K28
+ 0x8C603121, // 0156 GETMET R24 R24 K33
+ 0x88680722, // 0157 GETMBR R26 R3 K34
+ 0x8C6C071B, // 0158 GETMET R27 R3 K27
0x7C6C0200, // 0159 CALL R27 1
0x006C3605, // 015A ADD R27 R27 R5
0x60700015, // 015B GETGBL R28 G21
0x7C700000, // 015C CALL R28 0
- 0x8C70391F, // 015D GETMET R28 R28 K31
+ 0x8C70391E, // 015D GETMET R28 R28 K30
0x8878014C, // 015E GETMBR R30 R0 K76
0x7C700400, // 015F CALL R28 2
0x5476002F, // 0160 LDINT R29 48
@@ -1280,33 +1256,33 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0xB8761A00, // 0171 GETNGBL R29 K13
0x8C743B0E, // 0172 GETMET R29 R29 K14
0x587C0049, // 0173 LDCONST R31 K73
- 0x58800010, // 0174 LDCONST R32 K16
+ 0x54820003, // 0174 LDINT R32 4
0x7C740600, // 0175 CALL R29 3
0xB8761A00, // 0176 GETNGBL R29 K13
0x8C743B0E, // 0177 GETMET R29 R29 K14
- 0x8C7C331D, // 0178 GETMET R31 R25 K29
+ 0x8C7C331C, // 0178 GETMET R31 R25 K28
0x7C7C0200, // 0179 CALL R31 1
0x007E9E1F, // 017A ADD R31 K79 R31
- 0x58800010, // 017B LDCONST R32 K16
+ 0x54820003, // 017B LDINT R32 4
0x7C740600, // 017C CALL R29 3
0xB8761A00, // 017D GETNGBL R29 K13
0x8C743B0E, // 017E GETMET R29 R29 K14
- 0x8C7C351D, // 017F GETMET R31 R26 K29
+ 0x8C7C351C, // 017F GETMET R31 R26 K28
0x7C7C0200, // 0180 CALL R31 1
0x007EA01F, // 0181 ADD R31 K80 R31
- 0x58800010, // 0182 LDCONST R32 K16
+ 0x54820003, // 0182 LDINT R32 4
0x7C740600, // 0183 CALL R29 3
0xB8761A00, // 0184 GETNGBL R29 K13
0x8C743B0E, // 0185 GETMET R29 R29 K14
- 0x8C7C371D, // 0186 GETMET R31 R27 K29
+ 0x8C7C371C, // 0186 GETMET R31 R27 K28
0x7C7C0200, // 0187 CALL R31 1
0x007EA21F, // 0188 ADD R31 K81 R31
- 0x58800010, // 0189 LDCONST R32 K16
+ 0x54820003, // 0189 LDINT R32 4
0x7C740600, // 018A CALL R29 3
0xB8761A00, // 018B GETNGBL R29 K13
0x8C743B0E, // 018C GETMET R29 R29 K14
0x587C0049, // 018D LDCONST R31 K73
- 0x58800010, // 018E LDCONST R32 K16
+ 0x54820003, // 018E LDINT R32 4
0x7C740600, // 018F CALL R29 3
0x8C740352, // 0190 GETMET R29 R1 K82
0x547E003F, // 0191 LDINT R31 64
@@ -1316,7 +1292,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
0x7C780000, // 0195 CALL R30 0
0x8C7C3D53, // 0196 GETMET R31 R30 K83
0x58840003, // 0197 LDCONST R33 K3
- 0x58880034, // 0198 LDCONST R34 K52
+ 0x58880033, // 0198 LDCONST R34 K51
0x7C7C0600, // 0199 CALL R31 3
0x8C7C3D53, // 019A GETMET R31 R30 K83
0x58840003, // 019B LDCONST R33 K3
@@ -1372,7 +1348,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[119]) { /* constants */
+ ( &(const bvalue[118]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(opcode),
/* K2 */ be_nested_str_weak(local_session_id),
@@ -1421,81 +1397,80 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
/* K45 */ be_nested_str_weak(tasmota),
/* K46 */ be_nested_str_weak(log),
/* K47 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K48 */ be_const_int(3),
- /* K49 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s1rk_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K50 */ be_nested_str_weak(tohex),
- /* K51 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K52 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20Resume1MICPayload_X20_X3D_X20),
- /* K53 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20decrypted_tag_X20_X20_X20_X20_X20_X3D_X20),
- /* K54 */ be_nested_str_weak(resumption_id),
- /* K55 */ be_nested_str_weak(random),
- /* K56 */ be_nested_str_weak(Sigma2_Resume),
- /* K57 */ be_nested_str_weak(NCASE_SigmaR2),
- /* K58 */ be_nested_str_weak(Sigma2Resume),
- /* K59 */ be_nested_str_weak(responderSessionID),
- /* K60 */ be_nested_str_weak(sigma2ResumeMIC),
- /* K61 */ be_nested_str_weak(SessionResumptionKeys),
- /* K62 */ be_nested_str_weak(rtc),
- /* K63 */ be_nested_str_weak(utc),
- /* K64 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K65 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K66 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K67 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K68 */ be_nested_str_weak(encode),
- /* K69 */ be_nested_str_weak(_Msg1),
- /* K70 */ be_nested_str_weak(MTR_X3A_X20sigma2resume_raw_X3A_X20),
- /* K71 */ be_nested_str_weak(build_response),
- /* K72 */ be_nested_str_weak(responder),
- /* K73 */ be_nested_str_weak(send_response),
- /* K74 */ be_nested_str_weak(remote_ip),
- /* K75 */ be_nested_str_weak(remote_port),
- /* K76 */ be_nested_str_weak(message_counter),
- /* K77 */ be_nested_str_weak(close),
- /* K78 */ be_nested_str_weak(set_keys),
- /* K79 */ be_nested_str_weak(set_persist),
- /* K80 */ be_nested_str_weak(set_no_expiration),
- /* K81 */ be_nested_str_weak(save),
- /* K82 */ be_nested_str_weak(ResponderEph_priv),
- /* K83 */ be_nested_str_weak(ResponderEph_pub),
- /* K84 */ be_nested_str_weak(EC_P256),
- /* K85 */ be_nested_str_weak(public_key),
- /* K86 */ be_nested_str_weak(shared_key),
- /* K87 */ be_nested_str_weak(TLV),
- /* K88 */ be_nested_str_weak(Matter_TLV_struct),
- /* K89 */ be_nested_str_weak(add_TLV),
- /* K90 */ be_const_int(1),
- /* K91 */ be_nested_str_weak(B2),
- /* K92 */ be_nested_str_weak(get_noc),
- /* K93 */ be_const_int(2),
- /* K94 */ be_nested_str_weak(get_icac),
- /* K95 */ be_nested_str_weak(ecdsa_sign_sha256),
- /* K96 */ be_nested_str_weak(get_pk),
- /* K97 */ be_nested_str_weak(Msg1),
- /* K98 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20MSG1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K99 */ be_nested_str_weak(SHA256),
- /* K100 */ be_nested_str_weak(update),
- /* K101 */ be_nested_str_weak(out),
- /* K102 */ be_nested_str_weak(S2K_Info),
- /* K103 */ be_nested_str_weak(get_ipk_group_key),
- /* K104 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20SharedSecret_X20_X20_X3D_X20),
- /* K105 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K106 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K107 */ be_nested_str_weak(TBEData2_Nonce),
- /* K108 */ be_nested_str_weak(encrypt),
- /* K109 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Enc_X20_X20_X20_X3D_X20),
- /* K110 */ be_nested_str_weak(Sigma2),
- /* K111 */ be_nested_str_weak(responderRandom),
- /* K112 */ be_nested_str_weak(responderSessionId),
- /* K113 */ be_nested_str_weak(responderEphPubKey),
- /* K114 */ be_nested_str_weak(encrypted2),
- /* K115 */ be_nested_str_weak(MTR_X3A_X20sigma2_X3A_X20),
- /* K116 */ be_nested_str_weak(inspect),
- /* K117 */ be_nested_str_weak(_Msg2),
- /* K118 */ be_nested_str_weak(MTR_X3A_X20sigma2_raw_X3A_X20),
+ /* K48 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s1rk_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K49 */ be_nested_str_weak(tohex),
+ /* K50 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K51 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20Resume1MICPayload_X20_X3D_X20),
+ /* K52 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20decrypted_tag_X20_X20_X20_X20_X20_X3D_X20),
+ /* K53 */ be_nested_str_weak(resumption_id),
+ /* K54 */ be_nested_str_weak(random),
+ /* K55 */ be_nested_str_weak(Sigma2_Resume),
+ /* K56 */ be_nested_str_weak(NCASE_SigmaR2),
+ /* K57 */ be_nested_str_weak(Sigma2Resume),
+ /* K58 */ be_nested_str_weak(responderSessionID),
+ /* K59 */ be_nested_str_weak(sigma2ResumeMIC),
+ /* K60 */ be_nested_str_weak(SessionResumptionKeys),
+ /* K61 */ be_nested_str_weak(rtc),
+ /* K62 */ be_nested_str_weak(utc),
+ /* K63 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K64 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
+ /* K65 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
+ /* K66 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K67 */ be_nested_str_weak(encode),
+ /* K68 */ be_nested_str_weak(_Msg1),
+ /* K69 */ be_nested_str_weak(MTR_X3A_X20sigma2resume_raw_X3A_X20),
+ /* K70 */ be_nested_str_weak(build_response),
+ /* K71 */ be_nested_str_weak(responder),
+ /* K72 */ be_nested_str_weak(send_response),
+ /* K73 */ be_nested_str_weak(remote_ip),
+ /* K74 */ be_nested_str_weak(remote_port),
+ /* K75 */ be_nested_str_weak(message_counter),
+ /* K76 */ be_nested_str_weak(set_keys),
+ /* K77 */ be_nested_str_weak(set_persist),
+ /* K78 */ be_nested_str_weak(set_no_expiration),
+ /* K79 */ be_nested_str_weak(save),
+ /* K80 */ be_nested_str_weak(ResponderEph_priv),
+ /* K81 */ be_nested_str_weak(ResponderEph_pub),
+ /* K82 */ be_nested_str_weak(EC_P256),
+ /* K83 */ be_nested_str_weak(public_key),
+ /* K84 */ be_nested_str_weak(shared_key),
+ /* K85 */ be_nested_str_weak(TLV),
+ /* K86 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K87 */ be_nested_str_weak(add_TLV),
+ /* K88 */ be_const_int(1),
+ /* K89 */ be_nested_str_weak(B2),
+ /* K90 */ be_nested_str_weak(get_noc),
+ /* K91 */ be_const_int(2),
+ /* K92 */ be_nested_str_weak(get_icac),
+ /* K93 */ be_const_int(3),
+ /* K94 */ be_nested_str_weak(ecdsa_sign_sha256),
+ /* K95 */ be_nested_str_weak(get_pk),
+ /* K96 */ be_nested_str_weak(Msg1),
+ /* K97 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20MSG1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K98 */ be_nested_str_weak(SHA256),
+ /* K99 */ be_nested_str_weak(update),
+ /* K100 */ be_nested_str_weak(out),
+ /* K101 */ be_nested_str_weak(S2K_Info),
+ /* K102 */ be_nested_str_weak(get_ipk_group_key),
+ /* K103 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20SharedSecret_X20_X20_X3D_X20),
+ /* K104 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K105 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K106 */ be_nested_str_weak(TBEData2_Nonce),
+ /* K107 */ be_nested_str_weak(encrypt),
+ /* K108 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Enc_X20_X20_X20_X3D_X20),
+ /* K109 */ be_nested_str_weak(Sigma2),
+ /* K110 */ be_nested_str_weak(responderRandom),
+ /* K111 */ be_nested_str_weak(responderSessionId),
+ /* K112 */ be_nested_str_weak(responderEphPubKey),
+ /* K113 */ be_nested_str_weak(encrypted2),
+ /* K114 */ be_nested_str_weak(MTR_X3A_X20sigma2_X3A_X20),
+ /* K115 */ be_nested_str_weak(inspect),
+ /* K116 */ be_nested_str_weak(_Msg2),
+ /* K117 */ be_nested_str_weak(MTR_X3A_X20sigma2_raw_X3A_X20),
}),
be_str_weak(parse_Sigma1),
&be_const_str_solidified,
- ( &(const binstruction[564]) { /* code */
+ ( &(const binstruction[562]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x880C0301, // 0001 GETMBR R3 R1 K1
0x5412002F, // 0002 LDINT R4 48
@@ -1569,11 +1544,11 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0x90164006, // 0046 SETMBR R5 K32 R6
0x88180B20, // 0047 GETMBR R6 R5 K32
0x90024406, // 0048 SETMBR R0 K34 R6
- 0x781200EE, // 0049 JMPF R4 #0139
+ 0x781200EC, // 0049 JMPF R4 #0137
0x88180B23, // 004A GETMBR R6 R5 K35
0x4C1C0000, // 004B LDNIL R7
0x20180C07, // 004C NE R6 R6 R7
- 0x781A00EA, // 004D JMPF R6 #0139
+ 0x781A00E8, // 004D JMPF R6 #0137
0x88180715, // 004E GETMBR R6 R3 K21
0x881C070E, // 004F GETMBR R7 R3 K14
0x00180C07, // 0050 ADD R6 R6 R7
@@ -1623,53 +1598,53 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0xB83E5A00, // 007C GETNGBL R15 K45
0x8C3C1F2E, // 007D GETMET R15 R15 K46
0x5844002F, // 007E LDCONST R17 K47
- 0x58480030, // 007F LDCONST R18 K48
+ 0x544A0003, // 007F LDINT R18 4
0x7C3C0600, // 0080 CALL R15 3
0xB83E5A00, // 0081 GETNGBL R15 K45
0x8C3C1F2E, // 0082 GETMET R15 R15 K46
- 0x8C441132, // 0083 GETMET R17 R8 K50
+ 0x8C441131, // 0083 GETMET R17 R8 K49
0x7C440200, // 0084 CALL R17 1
- 0x00466211, // 0085 ADD R17 K49 R17
- 0x58480030, // 0086 LDCONST R18 K48
+ 0x00466011, // 0085 ADD R17 K48 R17
+ 0x544A0003, // 0086 LDINT R18 4
0x7C3C0600, // 0087 CALL R15 3
0xB83E5A00, // 0088 GETNGBL R15 K45
0x8C3C1F2E, // 0089 GETMET R15 R15 K46
- 0x8C441732, // 008A GETMET R17 R11 K50
+ 0x8C441731, // 008A GETMET R17 R11 K49
0x7C440200, // 008B CALL R17 1
- 0x00466611, // 008C ADD R17 K51 R17
- 0x58480030, // 008D LDCONST R18 K48
+ 0x00466411, // 008C ADD R17 K50 R17
+ 0x544A0003, // 008D LDINT R18 4
0x7C3C0600, // 008E CALL R15 3
0xB83E5A00, // 008F GETNGBL R15 K45
0x8C3C1F2E, // 0090 GETMET R15 R15 K46
- 0x8C441B32, // 0091 GETMET R17 R13 K50
+ 0x8C441B31, // 0091 GETMET R17 R13 K49
0x7C440200, // 0092 CALL R17 1
- 0x00466811, // 0093 ADD R17 K52 R17
- 0x58480030, // 0094 LDCONST R18 K48
+ 0x00466611, // 0093 ADD R17 K51 R17
+ 0x544A0003, // 0094 LDINT R18 4
0x7C3C0600, // 0095 CALL R15 3
0xB83E5A00, // 0096 GETNGBL R15 K45
0x8C3C1F2E, // 0097 GETMET R15 R15 K46
- 0x8C441D32, // 0098 GETMET R17 R14 K50
+ 0x8C441D31, // 0098 GETMET R17 R14 K49
0x7C440200, // 0099 CALL R17 1
- 0x00466A11, // 009A ADD R17 K53 R17
- 0x58480030, // 009B LDCONST R18 K48
+ 0x00466811, // 009A ADD R17 K52 R17
+ 0x544A0003, // 009B LDINT R18 4
0x7C3C0600, // 009C CALL R15 3
0xB83E5A00, // 009D GETNGBL R15 K45
0x8C3C1F2E, // 009E GETMET R15 R15 K46
0x5844002F, // 009F LDCONST R17 K47
- 0x58480030, // 00A0 LDCONST R18 K48
+ 0x544A0003, // 00A0 LDINT R18 4
0x7C3C0600, // 00A1 CALL R15 3
0x1C3C160E, // 00A2 EQ R15 R11 R14
- 0x783E0092, // 00A3 JMPF R15 #0137
- 0x8C3C0537, // 00A4 GETMET R15 R2 K55
+ 0x783E0090, // 00A3 JMPF R15 #0135
+ 0x8C3C0536, // 00A4 GETMET R15 R2 K54
0x5446000F, // 00A5 LDINT R17 16
0x7C3C0400, // 00A6 CALL R15 2
- 0x90166C0F, // 00A7 SETMBR R5 K54 R15
+ 0x90166A0F, // 00A7 SETMBR R5 K53 R15
0x603C0015, // 00A8 GETGBL R15 G21
0x7C3C0000, // 00A9 CALL R15 0
0x8C3C1F24, // 00AA GETMET R15 R15 K36
- 0x58440038, // 00AB LDCONST R17 K56
+ 0x58440037, // 00AB LDCONST R17 K55
0x7C3C0400, // 00AC CALL R15 2
- 0x88400B36, // 00AD GETMBR R16 R5 K54
+ 0x88400B35, // 00AD GETMBR R16 R5 K53
0x003C1E10, // 00AE ADD R15 R15 R16
0x88400715, // 00AF GETMBR R16 R3 K21
0x8844070E, // 00B0 GETMBR R17 R3 K14
@@ -1687,7 +1662,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0x60540015, // 00BC GETGBL R21 G21
0x7C540000, // 00BD CALL R21 0
0x8C542B24, // 00BE GETMET R21 R21 K36
- 0x585C0039, // 00BF LDCONST R23 K57
+ 0x585C0038, // 00BF LDCONST R23 K56
0x7C540400, // 00C0 CALL R21 2
0x60580015, // 00C1 GETGBL R22 G21
0x7C580000, // 00C2 CALL R22 0
@@ -1697,13 +1672,13 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0x8C4C252C, // 00C6 GETMET R19 R18 K44
0x7C4C0200, // 00C7 CALL R19 1
0xB8520E00, // 00C8 GETNGBL R20 K7
- 0x8C50293A, // 00C9 GETMET R20 R20 K58
+ 0x8C502939, // 00C9 GETMET R20 R20 K57
0x7C500200, // 00CA CALL R20 1
- 0x88540B36, // 00CB GETMBR R21 R5 K54
+ 0x88540B35, // 00CB GETMBR R21 R5 K53
0x90521C15, // 00CC SETMBR R20 K14 R21
0x88540B20, // 00CD GETMBR R21 R5 K32
- 0x90527615, // 00CE SETMBR R20 K59 R21
- 0x90527813, // 00CF SETMBR R20 K60 R19
+ 0x90527415, // 00CE SETMBR R20 K58 R21
+ 0x90527613, // 00CF SETMBR R20 K59 R19
0x8C540526, // 00D0 GETMET R21 R2 K38
0x7C540200, // 00D1 CALL R21 1
0x8C542B27, // 00D2 GETMET R21 R21 K39
@@ -1714,7 +1689,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0x60640015, // 00D7 GETGBL R25 G21
0x7C640000, // 00D8 CALL R25 0
0x8C643324, // 00D9 GETMET R25 R25 K36
- 0x586C003D, // 00DA LDCONST R27 K61
+ 0x586C003C, // 00DA LDCONST R27 K60
0x7C640400, // 00DB CALL R25 2
0x546A002F, // 00DC LDINT R26 48
0x7C540A00, // 00DD CALL R21 5
@@ -1730,336 +1705,334 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0x40603019, // 00E7 CONNECT R24 R24 R25
0x94602A18, // 00E8 GETIDX R24 R21 R24
0xB8665A00, // 00E9 GETNGBL R25 K45
- 0x8C64333E, // 00EA GETMET R25 R25 K62
+ 0x8C64333D, // 00EA GETMET R25 R25 K61
0x7C640200, // 00EB CALL R25 1
- 0x9464333F, // 00EC GETIDX R25 R25 K63
+ 0x9464333E, // 00EC GETIDX R25 R25 K62
0xB86A5A00, // 00ED GETNGBL R26 K45
0x8C68352E, // 00EE GETMET R26 R26 K46
- 0x58700040, // 00EF LDCONST R28 K64
- 0x58740030, // 00F0 LDCONST R29 K48
+ 0x5870003F, // 00EF LDCONST R28 K63
+ 0x54760003, // 00F0 LDINT R29 4
0x7C680600, // 00F1 CALL R26 3
0xB86A5A00, // 00F2 GETNGBL R26 K45
0x8C68352E, // 00F3 GETMET R26 R26 K46
- 0x8C702D32, // 00F4 GETMET R28 R22 K50
+ 0x8C702D31, // 00F4 GETMET R28 R22 K49
0x7C700200, // 00F5 CALL R28 1
- 0x0072821C, // 00F6 ADD R28 K65 R28
- 0x58740030, // 00F7 LDCONST R29 K48
+ 0x0072801C, // 00F6 ADD R28 K64 R28
+ 0x54760003, // 00F7 LDINT R29 4
0x7C680600, // 00F8 CALL R26 3
0xB86A5A00, // 00F9 GETNGBL R26 K45
0x8C68352E, // 00FA GETMET R26 R26 K46
- 0x8C702F32, // 00FB GETMET R28 R23 K50
+ 0x8C702F31, // 00FB GETMET R28 R23 K49
0x7C700200, // 00FC CALL R28 1
- 0x0072841C, // 00FD ADD R28 K66 R28
- 0x58740030, // 00FE LDCONST R29 K48
+ 0x0072821C, // 00FD ADD R28 K65 R28
+ 0x54760003, // 00FE LDINT R29 4
0x7C680600, // 00FF CALL R26 3
0xB86A5A00, // 0100 GETNGBL R26 K45
0x8C68352E, // 0101 GETMET R26 R26 K46
- 0x8C703132, // 0102 GETMET R28 R24 K50
+ 0x8C703131, // 0102 GETMET R28 R24 K49
0x7C700200, // 0103 CALL R28 1
- 0x0072861C, // 0104 ADD R28 K67 R28
- 0x58740030, // 0105 LDCONST R29 K48
+ 0x0072841C, // 0104 ADD R28 K66 R28
+ 0x54760003, // 0105 LDINT R29 4
0x7C680600, // 0106 CALL R26 3
0xB86A5A00, // 0107 GETNGBL R26 K45
0x8C68352E, // 0108 GETMET R26 R26 K46
- 0x58700040, // 0109 LDCONST R28 K64
- 0x58740030, // 010A LDCONST R29 K48
+ 0x5870003F, // 0109 LDCONST R28 K63
+ 0x54760003, // 010A LDINT R29 4
0x7C680600, // 010B CALL R26 3
- 0x8C682944, // 010C GETMET R26 R20 K68
+ 0x8C682943, // 010C GETMET R26 R20 K67
0x7C680200, // 010D CALL R26 1
0x4C6C0000, // 010E LDNIL R27
- 0x90168A1B, // 010F SETMBR R5 K69 R27
+ 0x9016881B, // 010F SETMBR R5 K68 R27
0xB86E5A00, // 0110 GETNGBL R27 K45
0x8C6C372E, // 0111 GETMET R27 R27 K46
- 0x8C743532, // 0112 GETMET R29 R26 K50
+ 0x8C743531, // 0112 GETMET R29 R26 K49
0x7C740200, // 0113 CALL R29 1
- 0x00768C1D, // 0114 ADD R29 K70 R29
- 0x58780030, // 0115 LDCONST R30 K48
+ 0x00768A1D, // 0114 ADD R29 K69 R29
+ 0x547A0003, // 0115 LDINT R30 4
0x7C6C0600, // 0116 CALL R27 3
- 0x8C6C0347, // 0117 GETMET R27 R1 K71
+ 0x8C6C0346, // 0117 GETMET R27 R1 K70
0x54760032, // 0118 LDINT R29 51
0x50780200, // 0119 LDBOOL R30 1 0
0x7C6C0600, // 011A CALL R27 3
- 0x8C703744, // 011B GETMET R28 R27 K68
+ 0x8C703743, // 011B GETMET R28 R27 K67
0x5C783400, // 011C MOVE R30 R26
0x7C700400, // 011D CALL R28 2
- 0x88740148, // 011E GETMBR R29 R0 K72
- 0x8C743B49, // 011F GETMET R29 R29 K73
+ 0x88740147, // 011E GETMBR R29 R0 K71
+ 0x8C743B48, // 011F GETMET R29 R29 K72
0x5C7C3800, // 0120 MOVE R31 R28
- 0x8880034A, // 0121 GETMBR R32 R1 K74
- 0x8884034B, // 0122 GETMBR R33 R1 K75
- 0x8888374C, // 0123 GETMBR R34 R27 K76
+ 0x88800349, // 0121 GETMBR R32 R1 K73
+ 0x8884034A, // 0122 GETMBR R33 R1 K74
+ 0x8888374B, // 0123 GETMBR R34 R27 K75
0x7C740A00, // 0124 CALL R29 5
- 0x8C740B4D, // 0125 GETMET R29 R5 K77
- 0x7C740200, // 0126 CALL R29 1
- 0x8C740B4E, // 0127 GETMET R29 R5 K78
- 0x5C7C2C00, // 0128 MOVE R31 R22
- 0x5C802E00, // 0129 MOVE R32 R23
- 0x5C843000, // 012A MOVE R33 R24
- 0x5C883200, // 012B MOVE R34 R25
- 0x7C740A00, // 012C CALL R29 5
- 0x8C740B4F, // 012D GETMET R29 R5 K79
- 0x507C0200, // 012E LDBOOL R31 1 0
- 0x7C740400, // 012F CALL R29 2
- 0x8C740B50, // 0130 GETMET R29 R5 K80
+ 0x8C740B4C, // 0125 GETMET R29 R5 K76
+ 0x5C7C2C00, // 0126 MOVE R31 R22
+ 0x5C802E00, // 0127 MOVE R32 R23
+ 0x5C843000, // 0128 MOVE R33 R24
+ 0x5C883200, // 0129 MOVE R34 R25
+ 0x7C740A00, // 012A CALL R29 5
+ 0x8C740B4D, // 012B GETMET R29 R5 K77
+ 0x507C0200, // 012C LDBOOL R31 1 0
+ 0x7C740400, // 012D CALL R29 2
+ 0x8C740B4E, // 012E GETMET R29 R5 K78
+ 0x7C740200, // 012F CALL R29 1
+ 0x8C740B4F, // 0130 GETMET R29 R5 K79
0x7C740200, // 0131 CALL R29 1
- 0x8C740B51, // 0132 GETMET R29 R5 K81
- 0x7C740200, // 0133 CALL R29 1
- 0x50740200, // 0134 LDBOOL R29 1 0
- 0x80043A00, // 0135 RET 1 R29
- 0x70020001, // 0136 JMP #0139
- 0x4C3C0000, // 0137 LDNIL R15
- 0x900E1C0F, // 0138 SETMBR R3 K14 R15
- 0x8818070E, // 0139 GETMBR R6 R3 K14
- 0x4C1C0000, // 013A LDNIL R7
- 0x1C180C07, // 013B EQ R6 R6 R7
- 0x741A0003, // 013C JMPT R6 #0141
- 0x8818070F, // 013D GETMBR R6 R3 K15
- 0x4C1C0000, // 013E LDNIL R7
- 0x1C180C07, // 013F EQ R6 R6 R7
- 0x781A00F0, // 0140 JMPF R6 #0232
- 0x8C180537, // 0141 GETMET R6 R2 K55
- 0x5422000F, // 0142 LDINT R8 16
- 0x7C180400, // 0143 CALL R6 2
- 0x90166C06, // 0144 SETMBR R5 K54 R6
- 0x8C180537, // 0145 GETMET R6 R2 K55
- 0x5422001F, // 0146 LDINT R8 32
- 0x7C180400, // 0147 CALL R6 2
- 0x9002A406, // 0148 SETMBR R0 K82 R6
- 0x8C180554, // 0149 GETMET R6 R2 K84
- 0x7C180200, // 014A CALL R6 1
- 0x8C180D55, // 014B GETMET R6 R6 K85
- 0x88200152, // 014C GETMBR R8 R0 K82
- 0x7C180400, // 014D CALL R6 2
- 0x9002A606, // 014E SETMBR R0 K83 R6
- 0x8C180537, // 014F GETMET R6 R2 K55
- 0x5422001F, // 0150 LDINT R8 32
- 0x7C180400, // 0151 CALL R6 2
- 0x8C1C0554, // 0152 GETMET R7 R2 K84
- 0x7C1C0200, // 0153 CALL R7 1
- 0x8C1C0F56, // 0154 GETMET R7 R7 K86
- 0x88240152, // 0155 GETMBR R9 R0 K82
- 0x8828070D, // 0156 GETMBR R10 R3 K13
- 0x7C1C0600, // 0157 CALL R7 3
- 0x90164607, // 0158 SETMBR R5 K35 R7
- 0xB81E0E00, // 0159 GETNGBL R7 K7
- 0x881C0F57, // 015A GETMBR R7 R7 K87
- 0x8C1C0F58, // 015B GETMET R7 R7 K88
- 0x7C1C0200, // 015C CALL R7 1
- 0x8C200F59, // 015D GETMET R8 R7 K89
- 0x5828005A, // 015E LDCONST R10 K90
- 0xB82E0E00, // 015F GETNGBL R11 K7
- 0x882C1757, // 0160 GETMBR R11 R11 K87
- 0x882C175B, // 0161 GETMBR R11 R11 K91
- 0x8C300B5C, // 0162 GETMET R12 R5 K92
- 0x7C300200, // 0163 CALL R12 1
- 0x7C200800, // 0164 CALL R8 4
- 0x8C200F59, // 0165 GETMET R8 R7 K89
- 0x5828005D, // 0166 LDCONST R10 K93
- 0xB82E0E00, // 0167 GETNGBL R11 K7
- 0x882C1757, // 0168 GETMBR R11 R11 K87
- 0x882C175B, // 0169 GETMBR R11 R11 K91
- 0x8C300B5E, // 016A GETMET R12 R5 K94
- 0x7C300200, // 016B CALL R12 1
- 0x7C200800, // 016C CALL R8 4
- 0x8C200F59, // 016D GETMET R8 R7 K89
- 0x58280030, // 016E LDCONST R10 K48
- 0xB82E0E00, // 016F GETNGBL R11 K7
- 0x882C1757, // 0170 GETMBR R11 R11 K87
- 0x882C175B, // 0171 GETMBR R11 R11 K91
- 0x88300153, // 0172 GETMBR R12 R0 K83
- 0x7C200800, // 0173 CALL R8 4
- 0x8C200F59, // 0174 GETMET R8 R7 K89
- 0x542A0003, // 0175 LDINT R10 4
- 0xB82E0E00, // 0176 GETNGBL R11 K7
- 0x882C1757, // 0177 GETMBR R11 R11 K87
- 0x882C175B, // 0178 GETMBR R11 R11 K91
- 0x8830070D, // 0179 GETMBR R12 R3 K13
- 0x7C200800, // 017A CALL R8 4
- 0x8C200554, // 017B GETMET R8 R2 K84
- 0x7C200200, // 017C CALL R8 1
- 0x8C20115F, // 017D GETMET R8 R8 K95
- 0x8C280B60, // 017E GETMET R10 R5 K96
- 0x7C280200, // 017F CALL R10 1
- 0x8C2C0F44, // 0180 GETMET R11 R7 K68
- 0x7C2C0200, // 0181 CALL R11 1
- 0x7C200600, // 0182 CALL R8 3
- 0xB8260E00, // 0183 GETNGBL R9 K7
- 0x88241357, // 0184 GETMBR R9 R9 K87
- 0x8C241358, // 0185 GETMET R9 R9 K88
- 0x7C240200, // 0186 CALL R9 1
- 0x8C281359, // 0187 GETMET R10 R9 K89
- 0x5830005A, // 0188 LDCONST R12 K90
- 0xB8360E00, // 0189 GETNGBL R13 K7
- 0x88341B57, // 018A GETMBR R13 R13 K87
- 0x88341B5B, // 018B GETMBR R13 R13 K91
- 0x8C380B5C, // 018C GETMET R14 R5 K92
- 0x7C380200, // 018D CALL R14 1
- 0x7C280800, // 018E CALL R10 4
- 0x8C281359, // 018F GETMET R10 R9 K89
- 0x5830005D, // 0190 LDCONST R12 K93
- 0xB8360E00, // 0191 GETNGBL R13 K7
- 0x88341B57, // 0192 GETMBR R13 R13 K87
- 0x88341B5B, // 0193 GETMBR R13 R13 K91
- 0x8C380B5E, // 0194 GETMET R14 R5 K94
- 0x7C380200, // 0195 CALL R14 1
- 0x7C280800, // 0196 CALL R10 4
- 0x8C281359, // 0197 GETMET R10 R9 K89
- 0x58300030, // 0198 LDCONST R12 K48
- 0xB8360E00, // 0199 GETNGBL R13 K7
- 0x88341B57, // 019A GETMBR R13 R13 K87
- 0x88341B5B, // 019B GETMBR R13 R13 K91
- 0x5C381000, // 019C MOVE R14 R8
- 0x7C280800, // 019D CALL R10 4
- 0x8C281359, // 019E GETMET R10 R9 K89
- 0x54320003, // 019F LDINT R12 4
- 0xB8360E00, // 01A0 GETNGBL R13 K7
- 0x88341B57, // 01A1 GETMBR R13 R13 K87
- 0x88341B5B, // 01A2 GETMBR R13 R13 K91
- 0x88380B36, // 01A3 GETMBR R14 R5 K54
- 0x7C280800, // 01A4 CALL R10 4
- 0xB82A5A00, // 01A5 GETNGBL R10 K45
- 0x8C28152E, // 01A6 GETMET R10 R10 K46
- 0x5830002F, // 01A7 LDCONST R12 K47
- 0x58340030, // 01A8 LDCONST R13 K48
- 0x7C280600, // 01A9 CALL R10 3
- 0x88280761, // 01AA GETMBR R10 R3 K97
- 0x90168A0A, // 01AB SETMBR R5 K69 R10
- 0xB82A5A00, // 01AC GETNGBL R10 K45
- 0x8C28152E, // 01AD GETMET R10 R10 K46
- 0x88300B45, // 01AE GETMBR R12 R5 K69
- 0x8C301932, // 01AF GETMET R12 R12 K50
- 0x7C300200, // 01B0 CALL R12 1
- 0x0032C40C, // 01B1 ADD R12 K98 R12
- 0x58340030, // 01B2 LDCONST R13 K48
- 0x7C280600, // 01B3 CALL R10 3
- 0x8C280563, // 01B4 GETMET R10 R2 K99
- 0x7C280200, // 01B5 CALL R10 1
- 0x8C281564, // 01B6 GETMET R10 R10 K100
- 0x88300B45, // 01B7 GETMBR R12 R5 K69
- 0x7C280400, // 01B8 CALL R10 2
- 0x8C281565, // 01B9 GETMET R10 R10 K101
- 0x7C280200, // 01BA CALL R10 1
- 0x602C0015, // 01BB GETGBL R11 G21
- 0x7C2C0000, // 01BC CALL R11 0
- 0x8C2C1724, // 01BD GETMET R11 R11 K36
- 0x88340166, // 01BE GETMBR R13 R0 K102
- 0x7C2C0400, // 01BF CALL R11 2
- 0x8C300B67, // 01C0 GETMET R12 R5 K103
- 0x7C300200, // 01C1 CALL R12 1
- 0x00301806, // 01C2 ADD R12 R12 R6
- 0x88340153, // 01C3 GETMBR R13 R0 K83
- 0x0030180D, // 01C4 ADD R12 R12 R13
- 0x0030180A, // 01C5 ADD R12 R12 R10
- 0x8C340526, // 01C6 GETMET R13 R2 K38
- 0x7C340200, // 01C7 CALL R13 1
- 0x8C341B27, // 01C8 GETMET R13 R13 K39
- 0x883C0B23, // 01C9 GETMBR R15 R5 K35
- 0x5C401800, // 01CA MOVE R16 R12
- 0x5C441600, // 01CB MOVE R17 R11
- 0x544A000F, // 01CC LDINT R18 16
- 0x7C340A00, // 01CD CALL R13 5
- 0xB83A5A00, // 01CE GETNGBL R14 K45
- 0x8C381D2E, // 01CF GETMET R14 R14 K46
- 0x88400B23, // 01D0 GETMBR R16 R5 K35
- 0x8C402132, // 01D1 GETMET R16 R16 K50
- 0x7C400200, // 01D2 CALL R16 1
- 0x0042D010, // 01D3 ADD R16 K104 R16
- 0x58440030, // 01D4 LDCONST R17 K48
- 0x7C380600, // 01D5 CALL R14 3
- 0xB83A5A00, // 01D6 GETNGBL R14 K45
- 0x8C381D2E, // 01D7 GETMET R14 R14 K46
- 0x8C401932, // 01D8 GETMET R16 R12 K50
- 0x7C400200, // 01D9 CALL R16 1
- 0x0042D210, // 01DA ADD R16 K105 R16
- 0x58440030, // 01DB LDCONST R17 K48
- 0x7C380600, // 01DC CALL R14 3
- 0xB83A5A00, // 01DD GETNGBL R14 K45
- 0x8C381D2E, // 01DE GETMET R14 R14 K46
- 0x8C401B32, // 01DF GETMET R16 R13 K50
- 0x7C400200, // 01E0 CALL R16 1
- 0x0042D410, // 01E1 ADD R16 K106 R16
- 0x58440030, // 01E2 LDCONST R17 K48
- 0x7C380600, // 01E3 CALL R14 3
- 0x8C381344, // 01E4 GETMET R14 R9 K68
- 0x7C380200, // 01E5 CALL R14 1
- 0x8C3C052A, // 01E6 GETMET R15 R2 K42
- 0x5C441A00, // 01E7 MOVE R17 R13
- 0x60480015, // 01E8 GETGBL R18 G21
- 0x7C480000, // 01E9 CALL R18 0
- 0x8C482524, // 01EA GETMET R18 R18 K36
- 0x8850016B, // 01EB GETMBR R20 R0 K107
- 0x7C480400, // 01EC CALL R18 2
- 0x604C0015, // 01ED GETGBL R19 G21
- 0x7C4C0000, // 01EE CALL R19 0
- 0x6050000C, // 01EF GETGBL R20 G12
- 0x5C541C00, // 01F0 MOVE R21 R14
- 0x7C500200, // 01F1 CALL R20 1
- 0x5456000F, // 01F2 LDINT R21 16
- 0x7C3C0C00, // 01F3 CALL R15 6
- 0x8C401F6C, // 01F4 GETMET R16 R15 K108
- 0x5C481C00, // 01F5 MOVE R18 R14
- 0x7C400400, // 01F6 CALL R16 2
- 0x8C441F2C, // 01F7 GETMET R17 R15 K44
- 0x7C440200, // 01F8 CALL R17 1
- 0x00402011, // 01F9 ADD R16 R16 R17
- 0xB8465A00, // 01FA GETNGBL R17 K45
- 0x8C44232E, // 01FB GETMET R17 R17 K46
- 0x8C4C2132, // 01FC GETMET R19 R16 K50
- 0x7C4C0200, // 01FD CALL R19 1
- 0x004EDA13, // 01FE ADD R19 K109 R19
- 0x58500030, // 01FF LDCONST R20 K48
- 0x7C440600, // 0200 CALL R17 3
- 0xB8465A00, // 0201 GETNGBL R17 K45
- 0x8C44232E, // 0202 GETMET R17 R17 K46
- 0x584C002F, // 0203 LDCONST R19 K47
- 0x58500030, // 0204 LDCONST R20 K48
- 0x7C440600, // 0205 CALL R17 3
- 0xB8460E00, // 0206 GETNGBL R17 K7
- 0x8C44236E, // 0207 GETMET R17 R17 K110
- 0x7C440200, // 0208 CALL R17 1
- 0x9046DE06, // 0209 SETMBR R17 K111 R6
- 0x88480122, // 020A GETMBR R18 R0 K34
+ 0x50740200, // 0132 LDBOOL R29 1 0
+ 0x80043A00, // 0133 RET 1 R29
+ 0x70020001, // 0134 JMP #0137
+ 0x4C3C0000, // 0135 LDNIL R15
+ 0x900E1C0F, // 0136 SETMBR R3 K14 R15
+ 0x8818070E, // 0137 GETMBR R6 R3 K14
+ 0x4C1C0000, // 0138 LDNIL R7
+ 0x1C180C07, // 0139 EQ R6 R6 R7
+ 0x741A0003, // 013A JMPT R6 #013F
+ 0x8818070F, // 013B GETMBR R6 R3 K15
+ 0x4C1C0000, // 013C LDNIL R7
+ 0x1C180C07, // 013D EQ R6 R6 R7
+ 0x781A00F0, // 013E JMPF R6 #0230
+ 0x8C180536, // 013F GETMET R6 R2 K54
+ 0x5422000F, // 0140 LDINT R8 16
+ 0x7C180400, // 0141 CALL R6 2
+ 0x90166A06, // 0142 SETMBR R5 K53 R6
+ 0x8C180536, // 0143 GETMET R6 R2 K54
+ 0x5422001F, // 0144 LDINT R8 32
+ 0x7C180400, // 0145 CALL R6 2
+ 0x9002A006, // 0146 SETMBR R0 K80 R6
+ 0x8C180552, // 0147 GETMET R6 R2 K82
+ 0x7C180200, // 0148 CALL R6 1
+ 0x8C180D53, // 0149 GETMET R6 R6 K83
+ 0x88200150, // 014A GETMBR R8 R0 K80
+ 0x7C180400, // 014B CALL R6 2
+ 0x9002A206, // 014C SETMBR R0 K81 R6
+ 0x8C180536, // 014D GETMET R6 R2 K54
+ 0x5422001F, // 014E LDINT R8 32
+ 0x7C180400, // 014F CALL R6 2
+ 0x8C1C0552, // 0150 GETMET R7 R2 K82
+ 0x7C1C0200, // 0151 CALL R7 1
+ 0x8C1C0F54, // 0152 GETMET R7 R7 K84
+ 0x88240150, // 0153 GETMBR R9 R0 K80
+ 0x8828070D, // 0154 GETMBR R10 R3 K13
+ 0x7C1C0600, // 0155 CALL R7 3
+ 0x90164607, // 0156 SETMBR R5 K35 R7
+ 0xB81E0E00, // 0157 GETNGBL R7 K7
+ 0x881C0F55, // 0158 GETMBR R7 R7 K85
+ 0x8C1C0F56, // 0159 GETMET R7 R7 K86
+ 0x7C1C0200, // 015A CALL R7 1
+ 0x8C200F57, // 015B GETMET R8 R7 K87
+ 0x58280058, // 015C LDCONST R10 K88
+ 0xB82E0E00, // 015D GETNGBL R11 K7
+ 0x882C1755, // 015E GETMBR R11 R11 K85
+ 0x882C1759, // 015F GETMBR R11 R11 K89
+ 0x8C300B5A, // 0160 GETMET R12 R5 K90
+ 0x7C300200, // 0161 CALL R12 1
+ 0x7C200800, // 0162 CALL R8 4
+ 0x8C200F57, // 0163 GETMET R8 R7 K87
+ 0x5828005B, // 0164 LDCONST R10 K91
+ 0xB82E0E00, // 0165 GETNGBL R11 K7
+ 0x882C1755, // 0166 GETMBR R11 R11 K85
+ 0x882C1759, // 0167 GETMBR R11 R11 K89
+ 0x8C300B5C, // 0168 GETMET R12 R5 K92
+ 0x7C300200, // 0169 CALL R12 1
+ 0x7C200800, // 016A CALL R8 4
+ 0x8C200F57, // 016B GETMET R8 R7 K87
+ 0x5828005D, // 016C LDCONST R10 K93
+ 0xB82E0E00, // 016D GETNGBL R11 K7
+ 0x882C1755, // 016E GETMBR R11 R11 K85
+ 0x882C1759, // 016F GETMBR R11 R11 K89
+ 0x88300151, // 0170 GETMBR R12 R0 K81
+ 0x7C200800, // 0171 CALL R8 4
+ 0x8C200F57, // 0172 GETMET R8 R7 K87
+ 0x542A0003, // 0173 LDINT R10 4
+ 0xB82E0E00, // 0174 GETNGBL R11 K7
+ 0x882C1755, // 0175 GETMBR R11 R11 K85
+ 0x882C1759, // 0176 GETMBR R11 R11 K89
+ 0x8830070D, // 0177 GETMBR R12 R3 K13
+ 0x7C200800, // 0178 CALL R8 4
+ 0x8C200552, // 0179 GETMET R8 R2 K82
+ 0x7C200200, // 017A CALL R8 1
+ 0x8C20115E, // 017B GETMET R8 R8 K94
+ 0x8C280B5F, // 017C GETMET R10 R5 K95
+ 0x7C280200, // 017D CALL R10 1
+ 0x8C2C0F43, // 017E GETMET R11 R7 K67
+ 0x7C2C0200, // 017F CALL R11 1
+ 0x7C200600, // 0180 CALL R8 3
+ 0xB8260E00, // 0181 GETNGBL R9 K7
+ 0x88241355, // 0182 GETMBR R9 R9 K85
+ 0x8C241356, // 0183 GETMET R9 R9 K86
+ 0x7C240200, // 0184 CALL R9 1
+ 0x8C281357, // 0185 GETMET R10 R9 K87
+ 0x58300058, // 0186 LDCONST R12 K88
+ 0xB8360E00, // 0187 GETNGBL R13 K7
+ 0x88341B55, // 0188 GETMBR R13 R13 K85
+ 0x88341B59, // 0189 GETMBR R13 R13 K89
+ 0x8C380B5A, // 018A GETMET R14 R5 K90
+ 0x7C380200, // 018B CALL R14 1
+ 0x7C280800, // 018C CALL R10 4
+ 0x8C281357, // 018D GETMET R10 R9 K87
+ 0x5830005B, // 018E LDCONST R12 K91
+ 0xB8360E00, // 018F GETNGBL R13 K7
+ 0x88341B55, // 0190 GETMBR R13 R13 K85
+ 0x88341B59, // 0191 GETMBR R13 R13 K89
+ 0x8C380B5C, // 0192 GETMET R14 R5 K92
+ 0x7C380200, // 0193 CALL R14 1
+ 0x7C280800, // 0194 CALL R10 4
+ 0x8C281357, // 0195 GETMET R10 R9 K87
+ 0x5830005D, // 0196 LDCONST R12 K93
+ 0xB8360E00, // 0197 GETNGBL R13 K7
+ 0x88341B55, // 0198 GETMBR R13 R13 K85
+ 0x88341B59, // 0199 GETMBR R13 R13 K89
+ 0x5C381000, // 019A MOVE R14 R8
+ 0x7C280800, // 019B CALL R10 4
+ 0x8C281357, // 019C GETMET R10 R9 K87
+ 0x54320003, // 019D LDINT R12 4
+ 0xB8360E00, // 019E GETNGBL R13 K7
+ 0x88341B55, // 019F GETMBR R13 R13 K85
+ 0x88341B59, // 01A0 GETMBR R13 R13 K89
+ 0x88380B35, // 01A1 GETMBR R14 R5 K53
+ 0x7C280800, // 01A2 CALL R10 4
+ 0xB82A5A00, // 01A3 GETNGBL R10 K45
+ 0x8C28152E, // 01A4 GETMET R10 R10 K46
+ 0x5830002F, // 01A5 LDCONST R12 K47
+ 0x54360003, // 01A6 LDINT R13 4
+ 0x7C280600, // 01A7 CALL R10 3
+ 0x88280760, // 01A8 GETMBR R10 R3 K96
+ 0x9016880A, // 01A9 SETMBR R5 K68 R10
+ 0xB82A5A00, // 01AA GETNGBL R10 K45
+ 0x8C28152E, // 01AB GETMET R10 R10 K46
+ 0x88300B44, // 01AC GETMBR R12 R5 K68
+ 0x8C301931, // 01AD GETMET R12 R12 K49
+ 0x7C300200, // 01AE CALL R12 1
+ 0x0032C20C, // 01AF ADD R12 K97 R12
+ 0x54360003, // 01B0 LDINT R13 4
+ 0x7C280600, // 01B1 CALL R10 3
+ 0x8C280562, // 01B2 GETMET R10 R2 K98
+ 0x7C280200, // 01B3 CALL R10 1
+ 0x8C281563, // 01B4 GETMET R10 R10 K99
+ 0x88300B44, // 01B5 GETMBR R12 R5 K68
+ 0x7C280400, // 01B6 CALL R10 2
+ 0x8C281564, // 01B7 GETMET R10 R10 K100
+ 0x7C280200, // 01B8 CALL R10 1
+ 0x602C0015, // 01B9 GETGBL R11 G21
+ 0x7C2C0000, // 01BA CALL R11 0
+ 0x8C2C1724, // 01BB GETMET R11 R11 K36
+ 0x88340165, // 01BC GETMBR R13 R0 K101
+ 0x7C2C0400, // 01BD CALL R11 2
+ 0x8C300B66, // 01BE GETMET R12 R5 K102
+ 0x7C300200, // 01BF CALL R12 1
+ 0x00301806, // 01C0 ADD R12 R12 R6
+ 0x88340151, // 01C1 GETMBR R13 R0 K81
+ 0x0030180D, // 01C2 ADD R12 R12 R13
+ 0x0030180A, // 01C3 ADD R12 R12 R10
+ 0x8C340526, // 01C4 GETMET R13 R2 K38
+ 0x7C340200, // 01C5 CALL R13 1
+ 0x8C341B27, // 01C6 GETMET R13 R13 K39
+ 0x883C0B23, // 01C7 GETMBR R15 R5 K35
+ 0x5C401800, // 01C8 MOVE R16 R12
+ 0x5C441600, // 01C9 MOVE R17 R11
+ 0x544A000F, // 01CA LDINT R18 16
+ 0x7C340A00, // 01CB CALL R13 5
+ 0xB83A5A00, // 01CC GETNGBL R14 K45
+ 0x8C381D2E, // 01CD GETMET R14 R14 K46
+ 0x88400B23, // 01CE GETMBR R16 R5 K35
+ 0x8C402131, // 01CF GETMET R16 R16 K49
+ 0x7C400200, // 01D0 CALL R16 1
+ 0x0042CE10, // 01D1 ADD R16 K103 R16
+ 0x54460003, // 01D2 LDINT R17 4
+ 0x7C380600, // 01D3 CALL R14 3
+ 0xB83A5A00, // 01D4 GETNGBL R14 K45
+ 0x8C381D2E, // 01D5 GETMET R14 R14 K46
+ 0x8C401931, // 01D6 GETMET R16 R12 K49
+ 0x7C400200, // 01D7 CALL R16 1
+ 0x0042D010, // 01D8 ADD R16 K104 R16
+ 0x54460003, // 01D9 LDINT R17 4
+ 0x7C380600, // 01DA CALL R14 3
+ 0xB83A5A00, // 01DB GETNGBL R14 K45
+ 0x8C381D2E, // 01DC GETMET R14 R14 K46
+ 0x8C401B31, // 01DD GETMET R16 R13 K49
+ 0x7C400200, // 01DE CALL R16 1
+ 0x0042D210, // 01DF ADD R16 K105 R16
+ 0x54460003, // 01E0 LDINT R17 4
+ 0x7C380600, // 01E1 CALL R14 3
+ 0x8C381343, // 01E2 GETMET R14 R9 K67
+ 0x7C380200, // 01E3 CALL R14 1
+ 0x8C3C052A, // 01E4 GETMET R15 R2 K42
+ 0x5C441A00, // 01E5 MOVE R17 R13
+ 0x60480015, // 01E6 GETGBL R18 G21
+ 0x7C480000, // 01E7 CALL R18 0
+ 0x8C482524, // 01E8 GETMET R18 R18 K36
+ 0x8850016A, // 01E9 GETMBR R20 R0 K106
+ 0x7C480400, // 01EA CALL R18 2
+ 0x604C0015, // 01EB GETGBL R19 G21
+ 0x7C4C0000, // 01EC CALL R19 0
+ 0x6050000C, // 01ED GETGBL R20 G12
+ 0x5C541C00, // 01EE MOVE R21 R14
+ 0x7C500200, // 01EF CALL R20 1
+ 0x5456000F, // 01F0 LDINT R21 16
+ 0x7C3C0C00, // 01F1 CALL R15 6
+ 0x8C401F6B, // 01F2 GETMET R16 R15 K107
+ 0x5C481C00, // 01F3 MOVE R18 R14
+ 0x7C400400, // 01F4 CALL R16 2
+ 0x8C441F2C, // 01F5 GETMET R17 R15 K44
+ 0x7C440200, // 01F6 CALL R17 1
+ 0x00402011, // 01F7 ADD R16 R16 R17
+ 0xB8465A00, // 01F8 GETNGBL R17 K45
+ 0x8C44232E, // 01F9 GETMET R17 R17 K46
+ 0x8C4C2131, // 01FA GETMET R19 R16 K49
+ 0x7C4C0200, // 01FB CALL R19 1
+ 0x004ED813, // 01FC ADD R19 K108 R19
+ 0x54520003, // 01FD LDINT R20 4
+ 0x7C440600, // 01FE CALL R17 3
+ 0xB8465A00, // 01FF GETNGBL R17 K45
+ 0x8C44232E, // 0200 GETMET R17 R17 K46
+ 0x584C002F, // 0201 LDCONST R19 K47
+ 0x54520003, // 0202 LDINT R20 4
+ 0x7C440600, // 0203 CALL R17 3
+ 0xB8460E00, // 0204 GETNGBL R17 K7
+ 0x8C44236D, // 0205 GETMET R17 R17 K109
+ 0x7C440200, // 0206 CALL R17 1
+ 0x9046DC06, // 0207 SETMBR R17 K110 R6
+ 0x88480122, // 0208 GETMBR R18 R0 K34
+ 0x9046DE12, // 0209 SETMBR R17 K111 R18
+ 0x88480151, // 020A GETMBR R18 R0 K81
0x9046E012, // 020B SETMBR R17 K112 R18
- 0x88480153, // 020C GETMBR R18 R0 K83
- 0x9046E212, // 020D SETMBR R17 K113 R18
- 0x9046E410, // 020E SETMBR R17 K114 R16
- 0xB84A5A00, // 020F GETNGBL R18 K45
- 0x8C48252E, // 0210 GETMET R18 R18 K46
- 0xB8520E00, // 0211 GETNGBL R20 K7
- 0x8C502974, // 0212 GETMET R20 R20 K116
- 0x5C582200, // 0213 MOVE R22 R17
- 0x7C500400, // 0214 CALL R20 2
- 0x0052E614, // 0215 ADD R20 K115 R20
- 0x58540030, // 0216 LDCONST R21 K48
- 0x7C480600, // 0217 CALL R18 3
- 0x8C482344, // 0218 GETMET R18 R17 K68
- 0x7C480200, // 0219 CALL R18 1
- 0x9016EA12, // 021A SETMBR R5 K117 R18
- 0xB84E5A00, // 021B GETNGBL R19 K45
- 0x8C4C272E, // 021C GETMET R19 R19 K46
- 0x8C542532, // 021D GETMET R21 R18 K50
- 0x7C540200, // 021E CALL R21 1
- 0x0056EC15, // 021F ADD R21 K118 R21
- 0x58580030, // 0220 LDCONST R22 K48
- 0x7C4C0600, // 0221 CALL R19 3
- 0x8C4C0347, // 0222 GETMET R19 R1 K71
- 0x54560030, // 0223 LDINT R21 49
- 0x50580200, // 0224 LDBOOL R22 1 0
- 0x7C4C0600, // 0225 CALL R19 3
- 0x8C502744, // 0226 GETMET R20 R19 K68
- 0x5C582400, // 0227 MOVE R22 R18
- 0x7C500400, // 0228 CALL R20 2
- 0x88540148, // 0229 GETMBR R21 R0 K72
- 0x8C542B49, // 022A GETMET R21 R21 K73
- 0x5C5C2800, // 022B MOVE R23 R20
- 0x8860034A, // 022C GETMBR R24 R1 K74
- 0x8864034B, // 022D GETMBR R25 R1 K75
- 0x8868274C, // 022E GETMBR R26 R19 K76
- 0x7C540A00, // 022F CALL R21 5
- 0x50540200, // 0230 LDBOOL R21 1 0
- 0x80042A00, // 0231 RET 1 R21
- 0x50180200, // 0232 LDBOOL R6 1 0
- 0x80040C00, // 0233 RET 1 R6
+ 0x9046E210, // 020C SETMBR R17 K113 R16
+ 0xB84A5A00, // 020D GETNGBL R18 K45
+ 0x8C48252E, // 020E GETMET R18 R18 K46
+ 0xB8520E00, // 020F GETNGBL R20 K7
+ 0x8C502973, // 0210 GETMET R20 R20 K115
+ 0x5C582200, // 0211 MOVE R22 R17
+ 0x7C500400, // 0212 CALL R20 2
+ 0x0052E414, // 0213 ADD R20 K114 R20
+ 0x54560003, // 0214 LDINT R21 4
+ 0x7C480600, // 0215 CALL R18 3
+ 0x8C482343, // 0216 GETMET R18 R17 K67
+ 0x7C480200, // 0217 CALL R18 1
+ 0x9016E812, // 0218 SETMBR R5 K116 R18
+ 0xB84E5A00, // 0219 GETNGBL R19 K45
+ 0x8C4C272E, // 021A GETMET R19 R19 K46
+ 0x8C542531, // 021B GETMET R21 R18 K49
+ 0x7C540200, // 021C CALL R21 1
+ 0x0056EA15, // 021D ADD R21 K117 R21
+ 0x545A0003, // 021E LDINT R22 4
+ 0x7C4C0600, // 021F CALL R19 3
+ 0x8C4C0346, // 0220 GETMET R19 R1 K70
+ 0x54560030, // 0221 LDINT R21 49
+ 0x50580200, // 0222 LDBOOL R22 1 0
+ 0x7C4C0600, // 0223 CALL R19 3
+ 0x8C502743, // 0224 GETMET R20 R19 K67
+ 0x5C582400, // 0225 MOVE R22 R18
+ 0x7C500400, // 0226 CALL R20 2
+ 0x88540147, // 0227 GETMBR R21 R0 K71
+ 0x8C542B48, // 0228 GETMET R21 R21 K72
+ 0x5C5C2800, // 0229 MOVE R23 R20
+ 0x88600349, // 022A GETMBR R24 R1 K73
+ 0x8864034A, // 022B GETMBR R25 R1 K74
+ 0x8868274B, // 022C GETMBR R26 R19 K75
+ 0x7C540A00, // 022D CALL R21 5
+ 0x50540200, // 022E LDBOOL R21 1 0
+ 0x80042A00, // 022F RET 1 R21
+ 0x50180200, // 0230 LDBOOL R6 1 0
+ 0x80040C00, // 0231 RET 1 R6
})
)
);
@@ -2079,7 +2052,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[47]) { /* constants */
+ ( &(const bvalue[46]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(opcode),
/* K2 */ be_nested_str_weak(local_session_id),
@@ -2097,36 +2070,35 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
/* K14 */ be_nested_str_weak(log),
/* K15 */ be_nested_str_weak(MTR_X3A_X20received_X20cA_X3D),
/* K16 */ be_nested_str_weak(tohex),
- /* K17 */ be_const_int(3),
- /* K18 */ be_nested_str_weak(spake),
- /* K19 */ be_nested_str_weak(invalid_X20cA_X20received),
- /* K20 */ be_nested_str_weak(session_timestamp),
- /* K21 */ be_nested_str_weak(rtc),
- /* K22 */ be_nested_str_weak(utc),
- /* K23 */ be_nested_str_weak(HKDF_SHA256),
- /* K24 */ be_nested_str_weak(derive),
- /* K25 */ be_nested_str_weak(Ke),
- /* K26 */ be_nested_str_weak(fromstring),
- /* K27 */ be_nested_str_weak(SEKeys_Info),
- /* K28 */ be_nested_str_weak(I2RKey),
- /* K29 */ be_nested_str_weak(R2IKey),
- /* K30 */ be_nested_str_weak(AttestationChallenge),
- /* K31 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K32 */ be_nested_str_weak(MTR_X3A_X20session_keys_X3D),
- /* K33 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K34 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K36 */ be_nested_str_weak(build_response),
- /* K37 */ be_nested_str_weak(add),
- /* K38 */ be_const_int(2),
- /* K39 */ be_nested_str_weak(encode),
- /* K40 */ be_nested_str_weak(responder),
- /* K41 */ be_nested_str_weak(send_response),
- /* K42 */ be_nested_str_weak(remote_ip),
- /* K43 */ be_nested_str_weak(remote_port),
- /* K44 */ be_nested_str_weak(add_session),
- /* K45 */ be_nested_str_weak(future_local_session_id),
- /* K46 */ be_nested_str_weak(future_initiator_session_id),
+ /* K17 */ be_nested_str_weak(spake),
+ /* K18 */ be_nested_str_weak(invalid_X20cA_X20received),
+ /* K19 */ be_nested_str_weak(session_timestamp),
+ /* K20 */ be_nested_str_weak(rtc),
+ /* K21 */ be_nested_str_weak(utc),
+ /* K22 */ be_nested_str_weak(HKDF_SHA256),
+ /* K23 */ be_nested_str_weak(derive),
+ /* K24 */ be_nested_str_weak(Ke),
+ /* K25 */ be_nested_str_weak(fromstring),
+ /* K26 */ be_nested_str_weak(SEKeys_Info),
+ /* K27 */ be_nested_str_weak(I2RKey),
+ /* K28 */ be_nested_str_weak(R2IKey),
+ /* K29 */ be_nested_str_weak(AttestationChallenge),
+ /* K30 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K31 */ be_nested_str_weak(MTR_X3A_X20session_keys_X3D),
+ /* K32 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
+ /* K33 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
+ /* K34 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K35 */ be_nested_str_weak(build_response),
+ /* K36 */ be_nested_str_weak(add),
+ /* K37 */ be_const_int(2),
+ /* K38 */ be_nested_str_weak(encode),
+ /* K39 */ be_nested_str_weak(responder),
+ /* K40 */ be_nested_str_weak(send_response),
+ /* K41 */ be_nested_str_weak(remote_ip),
+ /* K42 */ be_nested_str_weak(remote_port),
+ /* K43 */ be_nested_str_weak(add_session),
+ /* K44 */ be_nested_str_weak(future_local_session_id),
+ /* K45 */ be_nested_str_weak(future_initiator_session_id),
}),
be_str_weak(parse_Pake3),
&be_const_str_solidified,
@@ -2158,123 +2130,123 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
0x8C180D10, // 0018 GETMET R6 R6 K16
0x7C180200, // 0019 CALL R6 1
0x001A1E06, // 001A ADD R6 K15 R6
- 0x581C0011, // 001B LDCONST R7 K17
+ 0x541E0003, // 001B LDINT R7 4
0x7C100600, // 001C CALL R4 3
0x8810010C, // 001D GETMBR R4 R0 K12
- 0x88140112, // 001E GETMBR R5 R0 K18
+ 0x88140111, // 001E GETMBR R5 R0 K17
0x88140B0C, // 001F GETMBR R5 R5 K12
0x20100805, // 0020 NE R4 R4 R5
0x78120000, // 0021 JMPF R4 #0023
- 0xB0060B13, // 0022 RAISE 1 K5 K19
+ 0xB0060B12, // 0022 RAISE 1 K5 K18
0xB8121A00, // 0023 GETNGBL R4 K13
- 0x8C100915, // 0024 GETMET R4 R4 K21
+ 0x8C100914, // 0024 GETMET R4 R4 K20
0x7C100200, // 0025 CALL R4 1
- 0x94100916, // 0026 GETIDX R4 R4 K22
- 0x90022804, // 0027 SETMBR R0 K20 R4
- 0x8C100517, // 0028 GETMET R4 R2 K23
+ 0x94100915, // 0026 GETIDX R4 R4 K21
+ 0x90022604, // 0027 SETMBR R0 K19 R4
+ 0x8C100516, // 0028 GETMET R4 R2 K22
0x7C100200, // 0029 CALL R4 1
- 0x8C100918, // 002A GETMET R4 R4 K24
- 0x88180119, // 002B GETMBR R6 R0 K25
+ 0x8C100917, // 002A GETMET R4 R4 K23
+ 0x88180118, // 002B GETMBR R6 R0 K24
0x601C0015, // 002C GETGBL R7 G21
0x7C1C0000, // 002D CALL R7 0
0x60200015, // 002E GETGBL R8 G21
0x7C200000, // 002F CALL R8 0
- 0x8C20111A, // 0030 GETMET R8 R8 K26
- 0x8828011B, // 0031 GETMBR R10 R0 K27
+ 0x8C201119, // 0030 GETMET R8 R8 K25
+ 0x8828011A, // 0031 GETMBR R10 R0 K26
0x7C200400, // 0032 CALL R8 2
0x5426002F, // 0033 LDINT R9 48
0x7C100A00, // 0034 CALL R4 5
0x5416000E, // 0035 LDINT R5 15
0x40160605, // 0036 CONNECT R5 K3 R5
0x94140805, // 0037 GETIDX R5 R4 R5
- 0x90023805, // 0038 SETMBR R0 K28 R5
+ 0x90023605, // 0038 SETMBR R0 K27 R5
0x5416000F, // 0039 LDINT R5 16
0x541A001E, // 003A LDINT R6 31
0x40140A06, // 003B CONNECT R5 R5 R6
0x94140805, // 003C GETIDX R5 R4 R5
- 0x90023A05, // 003D SETMBR R0 K29 R5
+ 0x90023805, // 003D SETMBR R0 K28 R5
0x5416001F, // 003E LDINT R5 32
0x541A002E, // 003F LDINT R6 47
0x40140A06, // 0040 CONNECT R5 R5 R6
0x94140805, // 0041 GETIDX R5 R4 R5
- 0x90023C05, // 0042 SETMBR R0 K30 R5
+ 0x90023A05, // 0042 SETMBR R0 K29 R5
0xB8161A00, // 0043 GETNGBL R5 K13
0x8C140B0E, // 0044 GETMET R5 R5 K14
- 0x581C001F, // 0045 LDCONST R7 K31
- 0x58200011, // 0046 LDCONST R8 K17
+ 0x581C001E, // 0045 LDCONST R7 K30
+ 0x54220003, // 0046 LDINT R8 4
0x7C140600, // 0047 CALL R5 3
0xB8161A00, // 0048 GETNGBL R5 K13
0x8C140B0E, // 0049 GETMET R5 R5 K14
0x8C1C0910, // 004A GETMET R7 R4 K16
0x7C1C0200, // 004B CALL R7 1
- 0x001E4007, // 004C ADD R7 K32 R7
- 0x58200011, // 004D LDCONST R8 K17
+ 0x001E3E07, // 004C ADD R7 K31 R7
+ 0x54220003, // 004D LDINT R8 4
0x7C140600, // 004E CALL R5 3
0xB8161A00, // 004F GETNGBL R5 K13
0x8C140B0E, // 0050 GETMET R5 R5 K14
- 0x881C011C, // 0051 GETMBR R7 R0 K28
+ 0x881C011B, // 0051 GETMBR R7 R0 K27
0x8C1C0F10, // 0052 GETMET R7 R7 K16
0x7C1C0200, // 0053 CALL R7 1
- 0x001E4207, // 0054 ADD R7 K33 R7
- 0x58200011, // 0055 LDCONST R8 K17
+ 0x001E4007, // 0054 ADD R7 K32 R7
+ 0x54220003, // 0055 LDINT R8 4
0x7C140600, // 0056 CALL R5 3
0xB8161A00, // 0057 GETNGBL R5 K13
0x8C140B0E, // 0058 GETMET R5 R5 K14
- 0x881C011D, // 0059 GETMBR R7 R0 K29
+ 0x881C011C, // 0059 GETMBR R7 R0 K28
0x8C1C0F10, // 005A GETMET R7 R7 K16
0x7C1C0200, // 005B CALL R7 1
- 0x001E4407, // 005C ADD R7 K34 R7
- 0x58200011, // 005D LDCONST R8 K17
+ 0x001E4207, // 005C ADD R7 K33 R7
+ 0x54220003, // 005D LDINT R8 4
0x7C140600, // 005E CALL R5 3
0xB8161A00, // 005F GETNGBL R5 K13
0x8C140B0E, // 0060 GETMET R5 R5 K14
- 0x881C011E, // 0061 GETMBR R7 R0 K30
+ 0x881C011D, // 0061 GETMBR R7 R0 K29
0x8C1C0F10, // 0062 GETMET R7 R7 K16
0x7C1C0200, // 0063 CALL R7 1
- 0x001E4607, // 0064 ADD R7 K35 R7
- 0x58200011, // 0065 LDCONST R8 K17
+ 0x001E4407, // 0064 ADD R7 K34 R7
+ 0x54220003, // 0065 LDINT R8 4
0x7C140600, // 0066 CALL R5 3
0xB8161A00, // 0067 GETNGBL R5 K13
0x8C140B0E, // 0068 GETMET R5 R5 K14
- 0x581C001F, // 0069 LDCONST R7 K31
- 0x58200011, // 006A LDCONST R8 K17
+ 0x581C001E, // 0069 LDCONST R7 K30
+ 0x54220003, // 006A LDINT R8 4
0x7C140600, // 006B CALL R5 3
- 0x8C140324, // 006C GETMET R5 R1 K36
+ 0x8C140323, // 006C GETMET R5 R1 K35
0x541E003F, // 006D LDINT R7 64
0x50200000, // 006E LDBOOL R8 0 0
0x7C140600, // 006F CALL R5 3
0x60180015, // 0070 GETGBL R6 G21
0x7C180000, // 0071 CALL R6 0
- 0x8C1C0D25, // 0072 GETMET R7 R6 K37
+ 0x8C1C0D24, // 0072 GETMET R7 R6 K36
0x58240003, // 0073 LDCONST R9 K3
- 0x58280026, // 0074 LDCONST R10 K38
+ 0x58280025, // 0074 LDCONST R10 K37
0x7C1C0600, // 0075 CALL R7 3
- 0x8C1C0D25, // 0076 GETMET R7 R6 K37
+ 0x8C1C0D24, // 0076 GETMET R7 R6 K36
0x58240003, // 0077 LDCONST R9 K3
0x542A0003, // 0078 LDINT R10 4
0x7C1C0600, // 0079 CALL R7 3
- 0x8C1C0D25, // 007A GETMET R7 R6 K37
+ 0x8C1C0D24, // 007A GETMET R7 R6 K36
0x58240003, // 007B LDCONST R9 K3
0x542A0003, // 007C LDINT R10 4
0x7C1C0600, // 007D CALL R7 3
- 0x8C1C0B27, // 007E GETMET R7 R5 K39
+ 0x8C1C0B26, // 007E GETMET R7 R5 K38
0x5C240C00, // 007F MOVE R9 R6
0x7C1C0400, // 0080 CALL R7 2
- 0x88200128, // 0081 GETMBR R8 R0 K40
- 0x8C201129, // 0082 GETMET R8 R8 K41
+ 0x88200127, // 0081 GETMBR R8 R0 K39
+ 0x8C201128, // 0082 GETMET R8 R8 K40
0x5C280E00, // 0083 MOVE R10 R7
- 0x882C032A, // 0084 GETMBR R11 R1 K42
- 0x8830032B, // 0085 GETMBR R12 R1 K43
+ 0x882C0329, // 0084 GETMBR R11 R1 K41
+ 0x8830032A, // 0085 GETMBR R12 R1 K42
0x4C340000, // 0086 LDNIL R13
0x7C200A00, // 0087 CALL R8 5
- 0x88200128, // 0088 GETMBR R8 R0 K40
- 0x8C20112C, // 0089 GETMET R8 R8 K44
- 0x8828012D, // 008A GETMBR R10 R0 K45
- 0x882C012E, // 008B GETMBR R11 R0 K46
- 0x8830011C, // 008C GETMBR R12 R0 K28
- 0x8834011D, // 008D GETMBR R13 R0 K29
- 0x8838011E, // 008E GETMBR R14 R0 K30
- 0x883C0114, // 008F GETMBR R15 R0 K20
+ 0x88200127, // 0088 GETMBR R8 R0 K39
+ 0x8C20112B, // 0089 GETMET R8 R8 K43
+ 0x8828012C, // 008A GETMBR R10 R0 K44
+ 0x882C012D, // 008B GETMBR R11 R0 K45
+ 0x8830011B, // 008C GETMBR R12 R0 K27
+ 0x8834011C, // 008D GETMBR R13 R0 K28
+ 0x8838011D, // 008E GETMBR R14 R0 K29
+ 0x883C0113, // 008F GETMBR R15 R0 K19
0x7C200E00, // 0090 CALL R8 7
0x80000000, // 0091 RET 0
})
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning_Data.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning_Data.h
index 2c2bb647a..e86db07ca 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning_Data.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning_Data.h
@@ -270,7 +270,7 @@ be_local_closure(Matter_Pake1_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[11]) { /* constants */
+ ( &(const bvalue[10]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -278,10 +278,9 @@ be_local_closure(Matter_Pake1_parse, /* name */
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
/* K6 */ be_nested_str_weak(MTR_X3A_X20parsed_X20TLV_X3A_X20),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(pA),
- /* K9 */ be_nested_str_weak(getsubval),
- /* K10 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(pA),
+ /* K8 */ be_nested_str_weak(getsubval),
+ /* K9 */ be_const_int(1),
}),
be_str_weak(parse),
&be_const_str_solidified,
@@ -302,12 +301,12 @@ be_local_closure(Matter_Pake1_parse, /* name */
0x5C1C0600, // 000D MOVE R7 R3
0x7C180200, // 000E CALL R6 1
0x001A0C06, // 000F ADD R6 K6 R6
- 0x581C0007, // 0010 LDCONST R7 K7
+ 0x541E0003, // 0010 LDINT R7 4
0x7C100600, // 0011 CALL R4 3
- 0x8C100709, // 0012 GETMET R4 R3 K9
- 0x5818000A, // 0013 LDCONST R6 K10
+ 0x8C100708, // 0012 GETMET R4 R3 K8
+ 0x58180009, // 0013 LDCONST R6 K9
0x7C100400, // 0014 CALL R4 2
- 0x90021004, // 0015 SETMBR R0 K8 R4
+ 0x90020E04, // 0015 SETMBR R0 K7 R4
0x80040000, // 0016 RET 1 R0
})
)
@@ -430,7 +429,7 @@ be_local_closure(Matter_Pake3_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[11]) { /* constants */
+ ( &(const bvalue[10]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -438,10 +437,9 @@ be_local_closure(Matter_Pake3_parse, /* name */
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
/* K6 */ be_nested_str_weak(MTR_X3A_X20parsed_X20TLV_X3A_X20),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(cA),
- /* K9 */ be_nested_str_weak(getsubval),
- /* K10 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(cA),
+ /* K8 */ be_nested_str_weak(getsubval),
+ /* K9 */ be_const_int(1),
}),
be_str_weak(parse),
&be_const_str_solidified,
@@ -462,12 +460,12 @@ be_local_closure(Matter_Pake3_parse, /* name */
0x5C1C0600, // 000D MOVE R7 R3
0x7C180200, // 000E CALL R6 1
0x001A0C06, // 000F ADD R6 K6 R6
- 0x581C0007, // 0010 LDCONST R7 K7
+ 0x541E0003, // 0010 LDINT R7 4
0x7C100600, // 0011 CALL R4 3
- 0x8C100709, // 0012 GETMET R4 R3 K9
- 0x5818000A, // 0013 LDCONST R6 K10
+ 0x8C100708, // 0012 GETMET R4 R3 K8
+ 0x58180009, // 0013 LDCONST R6 K9
0x7C100400, // 0014 CALL R4 2
- 0x90021004, // 0015 SETMBR R0 K8 R4
+ 0x90020E04, // 0015 SETMBR R0 K7 R4
0x80040000, // 0016 RET 1 R0
})
)
@@ -521,13 +519,13 @@ be_local_closure(Matter_Sigma1_parse, /* name */
/* K6 */ be_nested_str_weak(tasmota),
/* K7 */ be_nested_str_weak(log),
/* K8 */ be_nested_str_weak(MTR_X3A_X20Sigma1_X20TLV_X3D),
- /* K9 */ be_const_int(3),
- /* K10 */ be_nested_str_weak(initiatorRandom),
- /* K11 */ be_nested_str_weak(getsubval),
- /* K12 */ be_const_int(1),
- /* K13 */ be_nested_str_weak(initiator_session_id),
- /* K14 */ be_const_int(2),
- /* K15 */ be_nested_str_weak(destinationId),
+ /* K9 */ be_nested_str_weak(initiatorRandom),
+ /* K10 */ be_nested_str_weak(getsubval),
+ /* K11 */ be_const_int(1),
+ /* K12 */ be_nested_str_weak(initiator_session_id),
+ /* K13 */ be_const_int(2),
+ /* K14 */ be_nested_str_weak(destinationId),
+ /* K15 */ be_const_int(3),
/* K16 */ be_nested_str_weak(initiatorEphPubKey),
/* K17 */ be_nested_str_weak(findsub),
/* K18 */ be_nested_str_weak(SLEEPY_IDLE_INTERVAL),
@@ -556,21 +554,21 @@ be_local_closure(Matter_Sigma1_parse, /* name */
0x5C1C0600, // 0010 MOVE R7 R3
0x7C180200, // 0011 CALL R6 1
0x001A1006, // 0012 ADD R6 K8 R6
- 0x581C0009, // 0013 LDCONST R7 K9
+ 0x541E0003, // 0013 LDINT R7 4
0x7C100600, // 0014 CALL R4 3
- 0x8C10070B, // 0015 GETMET R4 R3 K11
- 0x5818000C, // 0016 LDCONST R6 K12
+ 0x8C10070A, // 0015 GETMET R4 R3 K10
+ 0x5818000B, // 0016 LDCONST R6 K11
0x7C100400, // 0017 CALL R4 2
- 0x90021404, // 0018 SETMBR R0 K10 R4
- 0x8C10070B, // 0019 GETMET R4 R3 K11
- 0x5818000E, // 001A LDCONST R6 K14
+ 0x90021204, // 0018 SETMBR R0 K9 R4
+ 0x8C10070A, // 0019 GETMET R4 R3 K10
+ 0x5818000D, // 001A LDCONST R6 K13
0x7C100400, // 001B CALL R4 2
- 0x90021A04, // 001C SETMBR R0 K13 R4
- 0x8C10070B, // 001D GETMET R4 R3 K11
- 0x58180009, // 001E LDCONST R6 K9
+ 0x90021804, // 001C SETMBR R0 K12 R4
+ 0x8C10070A, // 001D GETMET R4 R3 K10
+ 0x5818000F, // 001E LDCONST R6 K15
0x7C100400, // 001F CALL R4 2
- 0x90021E04, // 0020 SETMBR R0 K15 R4
- 0x8C10070B, // 0021 GETMET R4 R3 K11
+ 0x90021C04, // 0020 SETMBR R0 K14 R4
+ 0x8C10070A, // 0021 GETMET R4 R3 K10
0x541A0003, // 0022 LDINT R6 4
0x7C100400, // 0023 CALL R4 2
0x90022004, // 0024 SETMBR R0 K16 R4
@@ -581,11 +579,11 @@ be_local_closure(Matter_Sigma1_parse, /* name */
0x20140805, // 0029 NE R5 R4 R5
0x78160007, // 002A JMPF R5 #0033
0x8C140913, // 002B GETMET R5 R4 K19
- 0x581C000C, // 002C LDCONST R7 K12
+ 0x581C000B, // 002C LDCONST R7 K11
0x7C140400, // 002D CALL R5 2
0x90022405, // 002E SETMBR R0 K18 R5
0x8C140913, // 002F GETMET R5 R4 K19
- 0x581C000E, // 0030 LDCONST R7 K14
+ 0x581C000D, // 0030 LDCONST R7 K13
0x7C140400, // 0031 CALL R5 2
0x90022805, // 0032 SETMBR R0 K20 R5
0x8C140711, // 0033 GETMET R5 R3 K17
@@ -895,7 +893,7 @@ be_local_closure(Matter_Sigma3_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[13]) { /* constants */
+ ( &(const bvalue[12]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -905,10 +903,9 @@ be_local_closure(Matter_Sigma3_parse, /* name */
/* K6 */ be_nested_str_weak(tasmota),
/* K7 */ be_nested_str_weak(log),
/* K8 */ be_nested_str_weak(MTR_X3A_X20Sigma3_X20TLV_X3D),
- /* K9 */ be_const_int(3),
- /* K10 */ be_nested_str_weak(TBEData3Encrypted),
- /* K11 */ be_nested_str_weak(getsubval),
- /* K12 */ be_const_int(1),
+ /* K9 */ be_nested_str_weak(TBEData3Encrypted),
+ /* K10 */ be_nested_str_weak(getsubval),
+ /* K11 */ be_const_int(1),
}),
be_str_weak(parse),
&be_const_str_solidified,
@@ -932,12 +929,12 @@ be_local_closure(Matter_Sigma3_parse, /* name */
0x5C1C0600, // 0010 MOVE R7 R3
0x7C180200, // 0011 CALL R6 1
0x001A1006, // 0012 ADD R6 K8 R6
- 0x581C0009, // 0013 LDCONST R7 K9
+ 0x541E0003, // 0013 LDINT R7 4
0x7C100600, // 0014 CALL R4 3
- 0x8C10070B, // 0015 GETMET R4 R3 K11
- 0x5818000C, // 0016 LDCONST R6 K12
+ 0x8C10070A, // 0015 GETMET R4 R3 K10
+ 0x5818000B, // 0016 LDCONST R6 K11
0x7C100400, // 0017 CALL R4 2
- 0x90021404, // 0018 SETMBR R0 K10 R4
+ 0x90021204, // 0018 SETMBR R0 K9 R4
0x80040000, // 0019 RET 1 R0
})
)
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
index b52678302..7bdc6998d 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
@@ -6,898 +6,6 @@
extern const bclass be_class_Matter_Device;
-/********************************************************************
-** Solidified function: compute_manual_pairing_code
-********************************************************************/
-be_local_closure(Matter_Device_compute_manual_pairing_code, /* name */
- be_nested_proto(
- 11, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(discriminator),
- /* K2 */ be_nested_str_weak(passcode),
- /* K3 */ be_nested_str_weak(format),
- /* K4 */ be_nested_str_weak(_X251i_X2505i_X2504i),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(Verhoeff),
- /* K7 */ be_nested_str_weak(checksum),
- }),
- be_str_weak(compute_manual_pairing_code),
- &be_const_str_solidified,
- ( &(const binstruction[31]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x88080101, // 0001 GETMBR R2 R0 K1
- 0x540E0FFE, // 0002 LDINT R3 4095
- 0x2C080403, // 0003 AND R2 R2 R3
- 0x540E0009, // 0004 LDINT R3 10
- 0x3C080403, // 0005 SHR R2 R2 R3
- 0x880C0101, // 0006 GETMBR R3 R0 K1
- 0x541202FF, // 0007 LDINT R4 768
- 0x2C0C0604, // 0008 AND R3 R3 R4
- 0x54120005, // 0009 LDINT R4 6
- 0x380C0604, // 000A SHL R3 R3 R4
- 0x88100102, // 000B GETMBR R4 R0 K2
- 0x54163FFE, // 000C LDINT R5 16383
- 0x2C100805, // 000D AND R4 R4 R5
- 0x300C0604, // 000E OR R3 R3 R4
- 0x88100102, // 000F GETMBR R4 R0 K2
- 0x5416000D, // 0010 LDINT R5 14
- 0x3C100805, // 0011 SHR R4 R4 R5
- 0x8C140303, // 0012 GETMET R5 R1 K3
- 0x581C0004, // 0013 LDCONST R7 K4
- 0x5C200400, // 0014 MOVE R8 R2
- 0x5C240600, // 0015 MOVE R9 R3
- 0x5C280800, // 0016 MOVE R10 R4
- 0x7C140A00, // 0017 CALL R5 5
- 0xB81A0A00, // 0018 GETNGBL R6 K5
- 0x88180D06, // 0019 GETMBR R6 R6 K6
- 0x8C180D07, // 001A GETMET R6 R6 K7
- 0x5C200A00, // 001B MOVE R8 R5
- 0x7C180400, // 001C CALL R6 2
- 0x00140A06, // 001D ADD R5 R5 R6
- 0x80040A00, // 001E RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_attribute_expansion
-********************************************************************/
-be_local_closure(Matter_Device_process_attribute_expansion, /* name */
- be_nested_proto(
- 33, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[25]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(endpoint),
- /* K2 */ be_nested_str_weak(cluster),
- /* K3 */ be_nested_str_weak(attribute),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(format),
- /* K7 */ be_nested_str_weak(MTR_X3A_X20process_attribute_expansion_X20_X25s),
- /* K8 */ be_const_int(3),
- /* K9 */ be_nested_str_weak(plugins),
- /* K10 */ be_nested_str_weak(get_endpoints),
- /* K11 */ be_nested_str_weak(MTR_X3A_X20ep_list_X20_X25s_X20_X25s),
- /* K12 */ be_nested_str_weak(find),
- /* K13 */ be_nested_str_weak(get_cluster_list),
- /* K14 */ be_nested_str_weak(MTR_X3A_X20cluster_list_X20_X25s_X20_X25s),
- /* K15 */ be_nested_str_weak(get_attribute_list),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20attr_list_X20_X25s_X20_X25s),
- /* K17 */ be_nested_str_weak(MTR_X3A_X20expansion_X20_X5B_X2502X_X5D_X2504X_X2F_X2504X),
- /* K18 */ be_nested_str_weak(stop_iteration),
- /* K19 */ be_nested_str_weak(status),
- /* K20 */ be_nested_str_weak(matter),
- /* K21 */ be_nested_str_weak(UNSUPPORTED_ENDPOINT),
- /* K22 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
- /* K23 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
- /* K24 */ be_nested_str_weak(UNREPORTABLE_ATTRIBUTE),
- }),
- be_str_weak(process_attribute_expansion),
- &be_const_str_solidified,
- ( &(const binstruction[216]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0x88100301, // 0001 GETMBR R4 R1 K1
- 0x60140012, // 0002 GETGBL R5 G18
- 0x7C140000, // 0003 CALL R5 0
- 0x40180A04, // 0004 CONNECT R6 R5 R4
- 0x50180000, // 0005 LDBOOL R6 0 0
- 0x881C0302, // 0006 GETMBR R7 R1 K2
- 0x60200012, // 0007 GETGBL R8 G18
- 0x7C200000, // 0008 CALL R8 0
- 0x40241007, // 0009 CONNECT R9 R8 R7
- 0x50240000, // 000A LDBOOL R9 0 0
- 0x88280303, // 000B GETMBR R10 R1 K3
- 0x602C0012, // 000C GETGBL R11 G18
- 0x7C2C0000, // 000D CALL R11 0
- 0x4030160A, // 000E CONNECT R12 R11 R10
- 0x50300000, // 000F LDBOOL R12 0 0
- 0x88340301, // 0010 GETMBR R13 R1 K1
- 0x4C380000, // 0011 LDNIL R14
- 0x20341A0E, // 0012 NE R13 R13 R14
- 0x78360007, // 0013 JMPF R13 #001C
- 0x88340302, // 0014 GETMBR R13 R1 K2
- 0x4C380000, // 0015 LDNIL R14
- 0x20341A0E, // 0016 NE R13 R13 R14
- 0x78360003, // 0017 JMPF R13 #001C
- 0x88340303, // 0018 GETMBR R13 R1 K3
- 0x4C380000, // 0019 LDNIL R14
- 0x20341A0E, // 001A NE R13 R13 R14
- 0x74360000, // 001B JMPT R13 #001D
- 0x50340001, // 001C LDBOOL R13 0 1
- 0x50340200, // 001D LDBOOL R13 1 0
- 0xB83A0800, // 001E GETNGBL R14 K4
- 0x8C381D05, // 001F GETMET R14 R14 K5
- 0x8C400706, // 0020 GETMET R16 R3 K6
- 0x58480007, // 0021 LDCONST R18 K7
- 0x604C0008, // 0022 GETGBL R19 G8
- 0x5C500200, // 0023 MOVE R20 R1
- 0x7C4C0200, // 0024 CALL R19 1
- 0x7C400600, // 0025 CALL R16 3
- 0x58440008, // 0026 LDCONST R17 K8
- 0x7C380600, // 0027 CALL R14 3
- 0x60380010, // 0028 GETGBL R14 G16
- 0x883C0109, // 0029 GETMBR R15 R0 K9
- 0x7C380200, // 002A CALL R14 1
- 0xA802008C, // 002B EXBLK 0 #00B9
- 0x5C3C1C00, // 002C MOVE R15 R14
- 0x7C3C0000, // 002D CALL R15 0
- 0x8C401F0A, // 002E GETMET R16 R15 K10
- 0x7C400200, // 002F CALL R16 1
- 0xB8460800, // 0030 GETNGBL R17 K4
- 0x8C442305, // 0031 GETMET R17 R17 K5
- 0x8C4C0706, // 0032 GETMET R19 R3 K6
- 0x5854000B, // 0033 LDCONST R21 K11
- 0x60580008, // 0034 GETGBL R22 G8
- 0x5C5C1E00, // 0035 MOVE R23 R15
- 0x7C580200, // 0036 CALL R22 1
- 0x605C0008, // 0037 GETGBL R23 G8
- 0x5C602000, // 0038 MOVE R24 R16
- 0x7C5C0200, // 0039 CALL R23 1
- 0x7C4C0800, // 003A CALL R19 4
- 0x58500008, // 003B LDCONST R20 K8
- 0x7C440600, // 003C CALL R17 3
- 0x4C440000, // 003D LDNIL R17
- 0x20440811, // 003E NE R17 R4 R17
- 0x78460009, // 003F JMPF R17 #004A
- 0x8C44210C, // 0040 GETMET R17 R16 K12
- 0x5C4C0800, // 0041 MOVE R19 R4
- 0x7C440400, // 0042 CALL R17 2
- 0x4C480000, // 0043 LDNIL R18
- 0x20442212, // 0044 NE R17 R17 R18
- 0x78460002, // 0045 JMPF R17 #0049
- 0x5C400A00, // 0046 MOVE R16 R5
- 0x50180200, // 0047 LDBOOL R6 1 0
- 0x70020000, // 0048 JMP #004A
- 0x7001FFE1, // 0049 JMP #002C
- 0x60440010, // 004A GETGBL R17 G16
- 0x5C482000, // 004B MOVE R18 R16
- 0x7C440200, // 004C CALL R17 1
- 0xA8020066, // 004D EXBLK 0 #00B5
- 0x5C482200, // 004E MOVE R18 R17
- 0x7C480000, // 004F CALL R18 0
- 0x8C4C1F0D, // 0050 GETMET R19 R15 K13
- 0x5C542400, // 0051 MOVE R21 R18
- 0x7C4C0400, // 0052 CALL R19 2
- 0xB8520800, // 0053 GETNGBL R20 K4
- 0x8C502905, // 0054 GETMET R20 R20 K5
- 0x8C580706, // 0055 GETMET R22 R3 K6
- 0x5860000E, // 0056 LDCONST R24 K14
- 0x60640008, // 0057 GETGBL R25 G8
- 0x5C682400, // 0058 MOVE R26 R18
- 0x7C640200, // 0059 CALL R25 1
- 0x60680008, // 005A GETGBL R26 G8
- 0x5C6C2600, // 005B MOVE R27 R19
- 0x7C680200, // 005C CALL R26 1
- 0x7C580800, // 005D CALL R22 4
- 0x585C0008, // 005E LDCONST R23 K8
- 0x7C500600, // 005F CALL R20 3
- 0x4C500000, // 0060 LDNIL R20
- 0x20500E14, // 0061 NE R20 R7 R20
- 0x78520009, // 0062 JMPF R20 #006D
- 0x8C50270C, // 0063 GETMET R20 R19 K12
- 0x5C580E00, // 0064 MOVE R22 R7
- 0x7C500400, // 0065 CALL R20 2
- 0x4C540000, // 0066 LDNIL R21
- 0x20502815, // 0067 NE R20 R20 R21
- 0x78520002, // 0068 JMPF R20 #006C
- 0x5C4C1000, // 0069 MOVE R19 R8
- 0x50240200, // 006A LDBOOL R9 1 0
- 0x70020000, // 006B JMP #006D
- 0x7001FFE0, // 006C JMP #004E
- 0x60500010, // 006D GETGBL R20 G16
- 0x5C542600, // 006E MOVE R21 R19
- 0x7C500200, // 006F CALL R20 1
- 0xA802003F, // 0070 EXBLK 0 #00B1
- 0x5C542800, // 0071 MOVE R21 R20
- 0x7C540000, // 0072 CALL R21 0
- 0x8C581F0F, // 0073 GETMET R22 R15 K15
- 0x5C602400, // 0074 MOVE R24 R18
- 0x5C640E00, // 0075 MOVE R25 R7
- 0x7C580600, // 0076 CALL R22 3
- 0xB85E0800, // 0077 GETNGBL R23 K4
- 0x8C5C2F05, // 0078 GETMET R23 R23 K5
- 0x8C640706, // 0079 GETMET R25 R3 K6
- 0x586C0010, // 007A LDCONST R27 K16
- 0x60700008, // 007B GETGBL R28 G8
- 0x5C742A00, // 007C MOVE R29 R21
- 0x7C700200, // 007D CALL R28 1
- 0x60740008, // 007E GETGBL R29 G8
- 0x5C782C00, // 007F MOVE R30 R22
- 0x7C740200, // 0080 CALL R29 1
- 0x7C640800, // 0081 CALL R25 4
- 0x58680008, // 0082 LDCONST R26 K8
- 0x7C5C0600, // 0083 CALL R23 3
- 0x4C5C0000, // 0084 LDNIL R23
- 0x205C1417, // 0085 NE R23 R10 R23
- 0x785E0028, // 0086 JMPF R23 #00B0
- 0x8C5C2D0C, // 0087 GETMET R23 R22 K12
- 0x5C641400, // 0088 MOVE R25 R10
- 0x7C5C0400, // 0089 CALL R23 2
- 0x4C600000, // 008A LDNIL R24
- 0x205C2E18, // 008B NE R23 R23 R24
- 0x785E0002, // 008C JMPF R23 #0090
- 0x5C581600, // 008D MOVE R22 R11
- 0x50300200, // 008E LDBOOL R12 1 0
- 0x70020000, // 008F JMP #0091
- 0x7001FFDF, // 0090 JMP #0071
- 0x605C0010, // 0091 GETGBL R23 G16
- 0x5C602C00, // 0092 MOVE R24 R22
- 0x7C5C0200, // 0093 CALL R23 1
- 0xA8020017, // 0094 EXBLK 0 #00AD
- 0x5C602E00, // 0095 MOVE R24 R23
- 0x7C600000, // 0096 CALL R24 0
- 0xB8660800, // 0097 GETNGBL R25 K4
- 0x8C643305, // 0098 GETMET R25 R25 K5
- 0x8C6C0706, // 0099 GETMET R27 R3 K6
- 0x58740011, // 009A LDCONST R29 K17
- 0x5C782400, // 009B MOVE R30 R18
- 0x5C7C2A00, // 009C MOVE R31 R21
- 0x5C803000, // 009D MOVE R32 R24
- 0x7C6C0A00, // 009E CALL R27 5
- 0x58700008, // 009F LDCONST R28 K8
- 0x7C640600, // 00A0 CALL R25 3
- 0x90060212, // 00A1 SETMBR R1 K1 R18
- 0x90060415, // 00A2 SETMBR R1 K2 R21
- 0x90060618, // 00A3 SETMBR R1 K3 R24
- 0x5C640400, // 00A4 MOVE R25 R2
- 0x5C681E00, // 00A5 MOVE R26 R15
- 0x5C6C0200, // 00A6 MOVE R27 R1
- 0x5C701A00, // 00A7 MOVE R28 R13
- 0x7C640600, // 00A8 CALL R25 3
- 0x78660001, // 00A9 JMPF R25 #00AC
- 0xA8040004, // 00AA EXBLK 1 4
- 0x80003400, // 00AB RET 0
- 0x7001FFE7, // 00AC JMP #0095
- 0x585C0012, // 00AD LDCONST R23 K18
- 0xAC5C0200, // 00AE CATCH R23 1 0
- 0xB0080000, // 00AF RAISE 2 R0 R0
- 0x7001FFBF, // 00B0 JMP #0071
- 0x58500012, // 00B1 LDCONST R20 K18
- 0xAC500200, // 00B2 CATCH R20 1 0
- 0xB0080000, // 00B3 RAISE 2 R0 R0
- 0x7001FF98, // 00B4 JMP #004E
- 0x58440012, // 00B5 LDCONST R17 K18
- 0xAC440200, // 00B6 CATCH R17 1 0
- 0xB0080000, // 00B7 RAISE 2 R0 R0
- 0x7001FF72, // 00B8 JMP #002C
- 0x58380012, // 00B9 LDCONST R14 K18
- 0xAC380200, // 00BA CATCH R14 1 0
- 0xB0080000, // 00BB RAISE 2 R0 R0
- 0x78360019, // 00BC JMPF R13 #00D7
- 0x5C380C00, // 00BD MOVE R14 R6
- 0x743A0003, // 00BE JMPT R14 #00C3
- 0xB83A2800, // 00BF GETNGBL R14 K20
- 0x88381D15, // 00C0 GETMBR R14 R14 K21
- 0x9006260E, // 00C1 SETMBR R1 K19 R14
- 0x7002000E, // 00C2 JMP #00D2
- 0x5C381200, // 00C3 MOVE R14 R9
- 0x743A0003, // 00C4 JMPT R14 #00C9
- 0xB83A2800, // 00C5 GETNGBL R14 K20
- 0x88381D16, // 00C6 GETMBR R14 R14 K22
- 0x9006260E, // 00C7 SETMBR R1 K19 R14
- 0x70020008, // 00C8 JMP #00D2
- 0x5C381800, // 00C9 MOVE R14 R12
- 0x743A0003, // 00CA JMPT R14 #00CF
- 0xB83A2800, // 00CB GETNGBL R14 K20
- 0x88381D17, // 00CC GETMBR R14 R14 K23
- 0x9006260E, // 00CD SETMBR R1 K19 R14
- 0x70020002, // 00CE JMP #00D2
- 0xB83A2800, // 00CF GETNGBL R14 K20
- 0x88381D18, // 00D0 GETMBR R14 R14 K24
- 0x9006260E, // 00D1 SETMBR R1 K19 R14
- 0x5C380400, // 00D2 MOVE R14 R2
- 0x4C3C0000, // 00D3 LDNIL R15
- 0x5C400200, // 00D4 MOVE R16 R1
- 0x50440200, // 00D5 LDBOOL R17 1 0
- 0x7C380600, // 00D6 CALL R14 3
- 0x80000000, // 00D7 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: save_param
-********************************************************************/
-be_local_closure(Matter_Device_save_param, /* name */
- be_nested_proto(
- 10, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[15]) { /* constants */
- /* K0 */ be_nested_str_weak(json),
- /* K1 */ be_nested_str_weak(dump),
- /* K2 */ be_nested_str_weak(distinguish),
- /* K3 */ be_nested_str_weak(discriminator),
- /* K4 */ be_nested_str_weak(passcode),
- /* K5 */ be_nested_str_weak(string),
- /* K6 */ be_nested_str_weak(FILENAME),
- /* K7 */ be_nested_str_weak(w),
- /* K8 */ be_nested_str_weak(write),
- /* K9 */ be_nested_str_weak(close),
- /* K10 */ be_nested_str_weak(tasmota),
- /* K11 */ be_nested_str_weak(log),
- /* K12 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Asave_X20Exception_X3A),
- /* K13 */ be_nested_str_weak(_X7C),
- /* K14 */ be_const_int(2),
- }),
- be_str_weak(save_param),
- &be_const_str_solidified,
- ( &(const binstruction[43]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x8C080301, // 0001 GETMET R2 R1 K1
- 0x60100013, // 0002 GETGBL R4 G19
- 0x7C100000, // 0003 CALL R4 0
- 0x88140103, // 0004 GETMBR R5 R0 K3
- 0x98120405, // 0005 SETIDX R4 K2 R5
- 0x88140104, // 0006 GETMBR R5 R0 K4
- 0x98120805, // 0007 SETIDX R4 K4 R5
- 0x7C080400, // 0008 CALL R2 2
- 0xA802000D, // 0009 EXBLK 0 #0018
- 0xA40E0A00, // 000A IMPORT R3 K5
- 0x60100011, // 000B GETGBL R4 G17
- 0x88140106, // 000C GETMBR R5 R0 K6
- 0x58180007, // 000D LDCONST R6 K7
- 0x7C100400, // 000E CALL R4 2
- 0x8C140908, // 000F GETMET R5 R4 K8
- 0x5C1C0400, // 0010 MOVE R7 R2
- 0x7C140400, // 0011 CALL R5 2
- 0x8C140909, // 0012 GETMET R5 R4 K9
- 0x7C140200, // 0013 CALL R5 1
- 0xA8040001, // 0014 EXBLK 1 1
- 0x80040400, // 0015 RET 1 R2
- 0xA8040001, // 0016 EXBLK 1 1
- 0x70020011, // 0017 JMP #002A
- 0xAC0C0002, // 0018 CATCH R3 0 2
- 0x7002000E, // 0019 JMP #0029
- 0xB8161400, // 001A GETNGBL R5 K10
- 0x8C140B0B, // 001B GETMET R5 R5 K11
- 0x601C0008, // 001C GETGBL R7 G8
- 0x5C200600, // 001D MOVE R8 R3
- 0x7C1C0200, // 001E CALL R7 1
- 0x001E1807, // 001F ADD R7 K12 R7
- 0x001C0F0D, // 0020 ADD R7 R7 K13
- 0x60200008, // 0021 GETGBL R8 G8
- 0x5C240800, // 0022 MOVE R9 R4
- 0x7C200200, // 0023 CALL R8 1
- 0x001C0E08, // 0024 ADD R7 R7 R8
- 0x5820000E, // 0025 LDCONST R8 K14
- 0x7C140600, // 0026 CALL R5 3
- 0x80040400, // 0027 RET 1 R2
- 0x70020000, // 0028 JMP #002A
- 0xB0080000, // 0029 RAISE 2 R0 R0
- 0x80000000, // 002A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_udp
-********************************************************************/
-be_local_closure(Matter_Device_start_udp, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 1]) {
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(msg_received),
- }),
- be_str_weak(_X3Clambda_X3E),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x680C0000, // 0000 GETUPV R3 U0
- 0x8C0C0700, // 0001 GETMET R3 R3 K0
- 0x5C140000, // 0002 MOVE R5 R0
- 0x5C180200, // 0003 MOVE R6 R1
- 0x5C1C0400, // 0004 MOVE R7 R2
- 0x7C0C0800, // 0005 CALL R3 4
- 0x80040600, // 0006 RET 1 R3
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
- /* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(MTR_X3A_X20starting_X20UDP_X20server_X20on_X20port_X3A_X20),
- /* K4 */ be_const_int(2),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(UDPServer),
- /* K7 */ be_nested_str_weak(),
- /* K8 */ be_nested_str_weak(start),
- }),
- be_str_weak(start_udp),
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x780A0000, // 0001 JMPF R2 #0003
- 0x80000400, // 0002 RET 0
- 0x4C080000, // 0003 LDNIL R2
- 0x1C080202, // 0004 EQ R2 R1 R2
- 0x780A0000, // 0005 JMPF R2 #0007
- 0x540615A3, // 0006 LDINT R1 5540
- 0xB80A0200, // 0007 GETNGBL R2 K1
- 0x8C080502, // 0008 GETMET R2 R2 K2
- 0x60100008, // 0009 GETGBL R4 G8
- 0x5C140200, // 000A MOVE R5 R1
- 0x7C100200, // 000B CALL R4 1
- 0x00120604, // 000C ADD R4 K3 R4
- 0x58140004, // 000D LDCONST R5 K4
- 0x7C080600, // 000E CALL R2 3
- 0xB80A0A00, // 000F GETNGBL R2 K5
- 0x8C080506, // 0010 GETMET R2 R2 K6
- 0x58100007, // 0011 LDCONST R4 K7
- 0x5C140200, // 0012 MOVE R5 R1
- 0x7C080600, // 0013 CALL R2 3
- 0x90020002, // 0014 SETMBR R0 K0 R2
- 0x88080100, // 0015 GETMBR R2 R0 K0
- 0x8C080508, // 0016 GETMET R2 R2 K8
- 0x84100000, // 0017 CLOSURE R4 P0
- 0x7C080400, // 0018 CALL R2 2
- 0xA0000000, // 0019 CLOSE R0
- 0x80000000, // 001A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: load_param
-********************************************************************/
-be_local_closure(Matter_Device_load_param, /* name */
- be_nested_proto(
- 10, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[22]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(crypto),
- /* K2 */ be_nested_str_weak(FILENAME),
- /* K3 */ be_nested_str_weak(read),
- /* K4 */ be_nested_str_weak(close),
- /* K5 */ be_nested_str_weak(json),
- /* K6 */ be_nested_str_weak(load),
- /* K7 */ be_nested_str_weak(discriminator),
- /* K8 */ be_nested_str_weak(find),
- /* K9 */ be_nested_str_weak(distinguish),
- /* K10 */ be_nested_str_weak(passcode),
- /* K11 */ be_nested_str_weak(io_error),
- /* K12 */ be_nested_str_weak(tasmota),
- /* K13 */ be_nested_str_weak(log),
- /* K14 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Aload_X20Exception_X3A),
- /* K15 */ be_nested_str_weak(_X7C),
- /* K16 */ be_const_int(2),
- /* K17 */ be_nested_str_weak(random),
- /* K18 */ be_nested_str_weak(get),
- /* K19 */ be_const_int(0),
- /* K20 */ be_nested_str_weak(PASSCODE_DEFAULT),
- /* K21 */ be_nested_str_weak(save_param),
- }),
- be_str_weak(load_param),
- &be_const_str_solidified,
- ( &(const binstruction[70]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0xA8020014, // 0002 EXBLK 0 #0018
- 0x600C0011, // 0003 GETGBL R3 G17
- 0x88100102, // 0004 GETMBR R4 R0 K2
- 0x7C0C0200, // 0005 CALL R3 1
- 0x8C100703, // 0006 GETMET R4 R3 K3
- 0x7C100200, // 0007 CALL R4 1
- 0x8C140704, // 0008 GETMET R5 R3 K4
- 0x7C140200, // 0009 CALL R5 1
- 0xA4160A00, // 000A IMPORT R5 K5
- 0x8C180B06, // 000B GETMET R6 R5 K6
- 0x5C200800, // 000C MOVE R8 R4
- 0x7C180400, // 000D CALL R6 2
- 0x8C1C0D08, // 000E GETMET R7 R6 K8
- 0x58240009, // 000F LDCONST R9 K9
- 0x7C1C0400, // 0010 CALL R7 2
- 0x90020E07, // 0011 SETMBR R0 K7 R7
- 0x8C1C0D08, // 0012 GETMET R7 R6 K8
- 0x5824000A, // 0013 LDCONST R9 K10
- 0x7C1C0400, // 0014 CALL R7 2
- 0x90021407, // 0015 SETMBR R0 K10 R7
- 0xA8040001, // 0016 EXBLK 1 1
- 0x70020012, // 0017 JMP #002B
- 0xAC0C0002, // 0018 CATCH R3 0 2
- 0x7002000F, // 0019 JMP #002A
- 0x2014070B, // 001A NE R5 R3 K11
- 0x7816000C, // 001B JMPF R5 #0029
- 0xB8161800, // 001C GETNGBL R5 K12
- 0x8C140B0D, // 001D GETMET R5 R5 K13
- 0x601C0008, // 001E GETGBL R7 G8
- 0x5C200600, // 001F MOVE R8 R3
- 0x7C1C0200, // 0020 CALL R7 1
- 0x001E1C07, // 0021 ADD R7 K14 R7
- 0x001C0F0F, // 0022 ADD R7 R7 K15
- 0x60200008, // 0023 GETGBL R8 G8
- 0x5C240800, // 0024 MOVE R9 R4
- 0x7C200200, // 0025 CALL R8 1
- 0x001C0E08, // 0026 ADD R7 R7 R8
- 0x58200010, // 0027 LDCONST R8 K16
- 0x7C140600, // 0028 CALL R5 3
- 0x70020000, // 0029 JMP #002B
- 0xB0080000, // 002A RAISE 2 R0 R0
- 0x500C0000, // 002B LDBOOL R3 0 0
- 0x88100107, // 002C GETMBR R4 R0 K7
- 0x4C140000, // 002D LDNIL R5
- 0x1C100805, // 002E EQ R4 R4 R5
- 0x7812000A, // 002F JMPF R4 #003B
- 0x8C100511, // 0030 GETMET R4 R2 K17
- 0x58180010, // 0031 LDCONST R6 K16
- 0x7C100400, // 0032 CALL R4 2
- 0x8C100912, // 0033 GETMET R4 R4 K18
- 0x58180013, // 0034 LDCONST R6 K19
- 0x581C0010, // 0035 LDCONST R7 K16
- 0x7C100600, // 0036 CALL R4 3
- 0x54160FFE, // 0037 LDINT R5 4095
- 0x2C100805, // 0038 AND R4 R4 R5
- 0x90020E04, // 0039 SETMBR R0 K7 R4
- 0x500C0200, // 003A LDBOOL R3 1 0
- 0x8810010A, // 003B GETMBR R4 R0 K10
- 0x4C140000, // 003C LDNIL R5
- 0x1C100805, // 003D EQ R4 R4 R5
- 0x78120002, // 003E JMPF R4 #0042
- 0x88100114, // 003F GETMBR R4 R0 K20
- 0x90021404, // 0040 SETMBR R0 K10 R4
- 0x500C0200, // 0041 LDBOOL R3 1 0
- 0x780E0001, // 0042 JMPF R3 #0045
- 0x8C100115, // 0043 GETMET R4 R0 K21
- 0x7C100200, // 0044 CALL R4 1
- 0x80000000, // 0045 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_operational_dicovery_deferred
-********************************************************************/
-be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 1]) {
- be_nested_proto(
- 3, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 2]) { /* upvals */
- be_local_const_upval(1, 0),
- be_local_const_upval(1, 1),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(start_operational_dicovery),
- }),
- be_str_weak(_X3Clambda_X3E),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x68080001, // 0002 GETUPV R2 U1
- 0x7C000400, // 0003 CALL R0 2
- 0x80040000, // 0004 RET 1 R0
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(set_timer),
- /* K2 */ be_const_int(0),
- }),
- be_str_weak(start_operational_dicovery_deferred),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x58100002, // 0002 LDCONST R4 K2
- 0x84140000, // 0003 CLOSURE R5 P0
- 0x7C080600, // 0004 CALL R2 3
- 0xA0000000, // 0005 CLOSE R0
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: stop
-********************************************************************/
-be_local_closure(Matter_Device_stop, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(stop),
- }),
- be_str_weak(stop),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x78060002, // 0001 JMPF R1 #0005
- 0x88040100, // 0002 GETMBR R1 R0 K0
- 0x8C040301, // 0003 GETMET R1 R1 K1
- 0x7C040200, // 0004 CALL R1 1
- 0x80000000, // 0005 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: invoke_request
-********************************************************************/
-be_local_closure(Matter_Device_invoke_request, /* name */
- be_nested_proto(
- 11, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(plugins),
- /* K2 */ be_nested_str_weak(invoke_request),
- /* K3 */ be_nested_str_weak(status),
- /* K4 */ be_nested_str_weak(matter),
- /* K5 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
- /* K6 */ be_const_int(1),
- }),
- be_str_weak(invoke_request),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x58100000, // 0000 LDCONST R4 K0
- 0x6014000C, // 0001 GETGBL R5 G12
- 0x88180101, // 0002 GETMBR R6 R0 K1
- 0x7C140200, // 0003 CALL R5 1
- 0x14140805, // 0004 LT R5 R4 R5
- 0x78160011, // 0005 JMPF R5 #0018
- 0x88140101, // 0006 GETMBR R5 R0 K1
- 0x94140A04, // 0007 GETIDX R5 R5 R4
- 0x8C180B02, // 0008 GETMET R6 R5 K2
- 0x5C200200, // 0009 MOVE R8 R1
- 0x5C240400, // 000A MOVE R9 R2
- 0x5C280600, // 000B MOVE R10 R3
- 0x7C180800, // 000C CALL R6 4
- 0x4C1C0000, // 000D LDNIL R7
- 0x201C0C07, // 000E NE R7 R6 R7
- 0x741E0004, // 000F JMPT R7 #0015
- 0x881C0703, // 0010 GETMBR R7 R3 K3
- 0xB8220800, // 0011 GETNGBL R8 K4
- 0x88201105, // 0012 GETMBR R8 R8 K5
- 0x201C0E08, // 0013 NE R7 R7 R8
- 0x781E0000, // 0014 JMPF R7 #0016
- 0x80040C00, // 0015 RET 1 R6
- 0x00100906, // 0016 ADD R4 R4 K6
- 0x7001FFE8, // 0017 JMP #0001
- 0x80000000, // 0018 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_mdns_announce_hostnames
-********************************************************************/
-be_local_closure(Matter_Device_start_mdns_announce_hostnames, /* name */
- be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 2]) {
- be_nested_proto(
- 4, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(_start_mdns_announce),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(remove_rule),
- /* K3 */ be_nested_str_weak(Wifi_X23Connected),
- /* K4 */ be_nested_str_weak(matter_device_mdns),
- }),
- be_str_weak(_anonymous_),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x50080000, // 0002 LDBOOL R2 0 0
- 0x7C000400, // 0003 CALL R0 2
- 0xB8020200, // 0004 GETNGBL R0 K1
- 0x8C000102, // 0005 GETMET R0 R0 K2
- 0x58080003, // 0006 LDCONST R2 K3
- 0x580C0004, // 0007 LDCONST R3 K4
- 0x7C000600, // 0008 CALL R0 3
- 0x80000000, // 0009 RET 0
- })
- ),
- be_nested_proto(
- 4, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(_start_mdns_announce),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(remove_rule),
- /* K3 */ be_nested_str_weak(Eth_X23Connected),
- /* K4 */ be_nested_str_weak(matter_device_mdns),
- }),
- be_str_weak(_anonymous_),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x50080200, // 0002 LDBOOL R2 1 0
- 0x7C000400, // 0003 CALL R0 2
- 0xB8020200, // 0004 GETNGBL R0 K1
- 0x8C000102, // 0005 GETMET R0 R0 K2
- 0x58080003, // 0006 LDCONST R2 K3
- 0x580C0004, // 0007 LDCONST R3 K4
- 0x7C000600, // 0008 CALL R0 3
- 0x80000000, // 0009 RET 0
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(wifi),
- /* K2 */ be_nested_str_weak(up),
- /* K3 */ be_nested_str_weak(_start_mdns_announce),
- /* K4 */ be_nested_str_weak(add_rule),
- /* K5 */ be_nested_str_weak(Wifi_X23Connected),
- /* K6 */ be_nested_str_weak(eth),
- /* K7 */ be_nested_str_weak(Eth_X23Connected),
- }),
- be_str_weak(start_mdns_announce_hostnames),
- &be_const_str_solidified,
- ( &(const binstruction[32]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x94040302, // 0003 GETIDX R1 R1 K2
- 0x78060003, // 0004 JMPF R1 #0009
- 0x8C040103, // 0005 GETMET R1 R0 K3
- 0x500C0000, // 0006 LDBOOL R3 0 0
- 0x7C040400, // 0007 CALL R1 2
- 0x70020005, // 0008 JMP #000F
- 0xB8060000, // 0009 GETNGBL R1 K0
- 0x8C040304, // 000A GETMET R1 R1 K4
- 0x580C0005, // 000B LDCONST R3 K5
- 0x84100000, // 000C CLOSURE R4 P0
- 0x5C140000, // 000D MOVE R5 R0
- 0x7C040800, // 000E CALL R1 4
- 0xB8060000, // 000F GETNGBL R1 K0
- 0x8C040306, // 0010 GETMET R1 R1 K6
- 0x7C040200, // 0011 CALL R1 1
- 0x94040302, // 0012 GETIDX R1 R1 K2
- 0x78060003, // 0013 JMPF R1 #0018
- 0x8C040103, // 0014 GETMET R1 R0 K3
- 0x500C0200, // 0015 LDBOOL R3 1 0
- 0x7C040400, // 0016 CALL R1 2
- 0x70020005, // 0017 JMP #001E
- 0xB8060000, // 0018 GETNGBL R1 K0
- 0x8C040304, // 0019 GETMET R1 R1 K4
- 0x580C0007, // 001A LDCONST R3 K7
- 0x84100001, // 001B CLOSURE R4 P1
- 0x5C140000, // 001C MOVE R5 R0
- 0x7C040800, // 001D CALL R1 4
- 0xA0000000, // 001E CLOSE R0
- 0x80000000, // 001F RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: mdns_announce_op_discovery_all_sessions
********************************************************************/
@@ -949,33 +57,61 @@ be_local_closure(Matter_Device_mdns_announce_op_discovery_all_sessions, /* nam
/********************************************************************
-** Solidified function: every_second
+** Solidified function: start_operational_dicovery
********************************************************************/
-be_local_closure(Matter_Device_every_second, /* name */
+be_local_closure(Matter_Device_start_operational_dicovery, /* name */
be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
+ 8, /* nstack */
+ 2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(sessions),
- /* K1 */ be_nested_str_weak(every_second),
- /* K2 */ be_nested_str_weak(msg_handler),
+ ( &(const bvalue[13]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(mdns),
+ /* K2 */ be_nested_str_weak(string),
+ /* K3 */ be_nested_str_weak(salt),
+ /* K4 */ be_nested_str_weak(w0),
+ /* K5 */ be_nested_str_weak(w1),
+ /* K6 */ be_nested_str_weak(L),
+ /* K7 */ be_nested_str_weak(set_no_expiration),
+ /* K8 */ be_nested_str_weak(set_persist),
+ /* K9 */ be_nested_str_weak(close),
+ /* K10 */ be_nested_str_weak(sessions),
+ /* K11 */ be_nested_str_weak(save),
+ /* K12 */ be_nested_str_weak(mdns_announce_op_discovery),
}),
- be_str_weak(every_second),
+ be_str_weak(start_operational_dicovery),
&be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x88040102, // 0003 GETMBR R1 R0 K2
- 0x8C040301, // 0004 GETMET R1 R1 K1
- 0x7C040200, // 0005 CALL R1 1
- 0x80000000, // 0006 RET 0
+ ( &(const binstruction[25]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0xA4120400, // 0002 IMPORT R4 K2
+ 0x4C140000, // 0003 LDNIL R5
+ 0x90020605, // 0004 SETMBR R0 K3 R5
+ 0x4C140000, // 0005 LDNIL R5
+ 0x90020805, // 0006 SETMBR R0 K4 R5
+ 0x4C140000, // 0007 LDNIL R5
+ 0x90020A05, // 0008 SETMBR R0 K5 R5
+ 0x4C140000, // 0009 LDNIL R5
+ 0x90020C05, // 000A SETMBR R0 K6 R5
+ 0x8C140307, // 000B GETMET R5 R1 K7
+ 0x7C140200, // 000C CALL R5 1
+ 0x8C140308, // 000D GETMET R5 R1 K8
+ 0x501C0200, // 000E LDBOOL R7 1 0
+ 0x7C140400, // 000F CALL R5 2
+ 0x8C140309, // 0010 GETMET R5 R1 K9
+ 0x7C140200, // 0011 CALL R5 1
+ 0x8814010A, // 0012 GETMBR R5 R0 K10
+ 0x8C140B0B, // 0013 GETMET R5 R5 K11
+ 0x7C140200, // 0014 CALL R5 1
+ 0x8C14010C, // 0015 GETMET R5 R0 K12
+ 0x5C1C0200, // 0016 MOVE R7 R1
+ 0x7C140400, // 0017 CALL R5 2
+ 0x80000000, // 0018 RET 0
})
)
);
@@ -1089,12 +225,12 @@ be_local_closure(Matter_Device_init, /* name */
/* K19 */ be_nested_str_weak(sessions),
/* K20 */ be_nested_str_weak(Session_Store),
/* K21 */ be_nested_str_weak(load),
- /* K22 */ be_nested_str_weak(msg_handler),
+ /* K22 */ be_nested_str_weak(message_handler),
/* K23 */ be_nested_str_weak(MessageHandler),
/* K24 */ be_nested_str_weak(ui),
/* K25 */ be_nested_str_weak(push),
- /* K26 */ be_nested_str_weak(Plugin_core),
- /* K27 */ be_nested_str_weak(Plugin_Relay),
+ /* K26 */ be_nested_str_weak(Plugin_Root),
+ /* K27 */ be_nested_str_weak(Plugin_OnOff),
/* K28 */ be_nested_str_weak(start_mdns_announce_hostnames),
/* K29 */ be_nested_str_weak(wifi),
/* K30 */ be_nested_str_weak(up),
@@ -1223,467 +359,6 @@ be_local_closure(Matter_Device_init, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: start_basic_commissioning
-********************************************************************/
-be_local_closure(Matter_Device_start_basic_commissioning, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(compute_pbkdf),
- /* K1 */ be_nested_str_weak(passcode),
- }),
- be_str_weak(start_basic_commissioning),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x8C040100, // 0000 GETMET R1 R0 K0
- 0x880C0101, // 0001 GETMBR R3 R0 K1
- 0x7C040400, // 0002 CALL R1 2
- 0x80000000, // 0003 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_operational_dicovery
-********************************************************************/
-be_local_closure(Matter_Device_start_operational_dicovery, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* 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(crypto),
- /* K1 */ be_nested_str_weak(mdns),
- /* K2 */ be_nested_str_weak(string),
- /* K3 */ be_nested_str_weak(salt),
- /* K4 */ be_nested_str_weak(w0),
- /* K5 */ be_nested_str_weak(w1),
- /* K6 */ be_nested_str_weak(L),
- /* K7 */ be_nested_str_weak(set_no_expiration),
- /* K8 */ be_nested_str_weak(set_persist),
- /* K9 */ be_nested_str_weak(close),
- /* K10 */ be_nested_str_weak(sessions),
- /* K11 */ be_nested_str_weak(save),
- /* K12 */ be_nested_str_weak(mdns_announce_op_discovery),
- }),
- be_str_weak(start_operational_dicovery),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0xA40E0200, // 0001 IMPORT R3 K1
- 0xA4120400, // 0002 IMPORT R4 K2
- 0x4C140000, // 0003 LDNIL R5
- 0x90020605, // 0004 SETMBR R0 K3 R5
- 0x4C140000, // 0005 LDNIL R5
- 0x90020805, // 0006 SETMBR R0 K4 R5
- 0x4C140000, // 0007 LDNIL R5
- 0x90020A05, // 0008 SETMBR R0 K5 R5
- 0x4C140000, // 0009 LDNIL R5
- 0x90020C05, // 000A SETMBR R0 K6 R5
- 0x8C140307, // 000B GETMET R5 R1 K7
- 0x7C140200, // 000C CALL R5 1
- 0x8C140308, // 000D GETMET R5 R1 K8
- 0x501C0200, // 000E LDBOOL R7 1 0
- 0x7C140400, // 000F CALL R5 2
- 0x8C140309, // 0010 GETMET R5 R1 K9
- 0x7C140200, // 0011 CALL R5 1
- 0x8814010A, // 0012 GETMBR R5 R0 K10
- 0x8C140B0B, // 0013 GETMET R5 R5 K11
- 0x7C140200, // 0014 CALL R5 1
- 0x8C14010C, // 0015 GETMET R5 R0 K12
- 0x5C1C0200, // 0016 MOVE R7 R1
- 0x7C140400, // 0017 CALL R5 2
- 0x80000000, // 0018 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_commissioning_complete
-********************************************************************/
-be_local_closure(Matter_Device_start_commissioning_complete, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(log),
- /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X20Commissioning_X20complete_X20_X2A_X2A_X2A),
- /* K3 */ be_const_int(2),
- }),
- be_str_weak(start_commissioning_complete),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x58100002, // 0002 LDCONST R4 K2
- 0x58140003, // 0003 LDCONST R5 K3
- 0x7C080600, // 0004 CALL R2 3
- 0x80000000, // 0005 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: compute_qrcode_content
-********************************************************************/
-be_local_closure(Matter_Device_compute_qrcode_content, /* name */
- be_nested_proto(
- 8, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[12]) { /* constants */
- /* K0 */ be_nested_str_weak(resize),
- /* K1 */ be_nested_str_weak(setbits),
- /* K2 */ be_const_int(3),
- /* K3 */ be_nested_str_weak(vendorid),
- /* K4 */ be_nested_str_weak(productid),
- /* K5 */ be_nested_str_weak(discriminator),
- /* K6 */ be_nested_str_weak(passcode),
- /* K7 */ be_const_int(134217727),
- /* K8 */ be_nested_str_weak(MT_X3A),
- /* K9 */ be_nested_str_weak(matter),
- /* K10 */ be_nested_str_weak(Base38),
- /* K11 */ be_nested_str_weak(encode),
- }),
- be_str_weak(compute_qrcode_content),
- &be_const_str_solidified,
- ( &(const binstruction[40]) { /* code */
- 0x60040015, // 0000 GETGBL R1 G21
- 0x7C040000, // 0001 CALL R1 0
- 0x8C040300, // 0002 GETMET R1 R1 K0
- 0x540E000A, // 0003 LDINT R3 11
- 0x7C040400, // 0004 CALL R1 2
- 0x8C080301, // 0005 GETMET R2 R1 K1
- 0x58100002, // 0006 LDCONST R4 K2
- 0x5416000F, // 0007 LDINT R5 16
- 0x88180103, // 0008 GETMBR R6 R0 K3
- 0x7C080800, // 0009 CALL R2 4
- 0x8C080301, // 000A GETMET R2 R1 K1
- 0x54120012, // 000B LDINT R4 19
- 0x5416000F, // 000C LDINT R5 16
- 0x88180104, // 000D GETMBR R6 R0 K4
- 0x7C080800, // 000E CALL R2 4
- 0x8C080301, // 000F GETMET R2 R1 K1
- 0x54120024, // 0010 LDINT R4 37
- 0x54160007, // 0011 LDINT R5 8
- 0x541A0003, // 0012 LDINT R6 4
- 0x7C080800, // 0013 CALL R2 4
- 0x8C080301, // 0014 GETMET R2 R1 K1
- 0x5412002C, // 0015 LDINT R4 45
- 0x5416000B, // 0016 LDINT R5 12
- 0x88180105, // 0017 GETMBR R6 R0 K5
- 0x541E0FFE, // 0018 LDINT R7 4095
- 0x2C180C07, // 0019 AND R6 R6 R7
- 0x7C080800, // 001A CALL R2 4
- 0x8C080301, // 001B GETMET R2 R1 K1
- 0x54120038, // 001C LDINT R4 57
- 0x5416001A, // 001D LDINT R5 27
- 0x88180106, // 001E GETMBR R6 R0 K6
- 0x2C180D07, // 001F AND R6 R6 K7
- 0x7C080800, // 0020 CALL R2 4
- 0xB80A1200, // 0021 GETNGBL R2 K9
- 0x8808050A, // 0022 GETMBR R2 R2 K10
- 0x8C08050B, // 0023 GETMET R2 R2 K11
- 0x5C100200, // 0024 MOVE R4 R1
- 0x7C080400, // 0025 CALL R2 2
- 0x000A1002, // 0026 ADD R2 K8 R2
- 0x80040400, // 0027 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: finish_commissioning
-********************************************************************/
-be_local_closure(Matter_Device_finish_commissioning, /* 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(finish_commissioning),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: mdns_announce_op_discovery
-********************************************************************/
-be_local_closure(Matter_Device_mdns_announce_op_discovery, /* name */
- be_nested_proto(
- 15, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[29]) { /* constants */
- /* K0 */ be_nested_str_weak(mdns),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(get_deviceid),
- /* K3 */ be_nested_str_weak(copy),
- /* K4 */ be_nested_str_weak(reverse),
- /* K5 */ be_nested_str_weak(get_fabric_compressed),
- /* K6 */ be_nested_str_weak(tohex),
- /* K7 */ be_nested_str_weak(_X2D),
- /* K8 */ be_nested_str_weak(tasmota),
- /* K9 */ be_nested_str_weak(log),
- /* K10 */ be_nested_str_weak(MTR_X3A_X20Operational_X20Discovery_X20node_X20_X3D_X20),
- /* K11 */ be_const_int(2),
- /* K12 */ be_nested_str_weak(eth),
- /* K13 */ be_nested_str_weak(find),
- /* K14 */ be_nested_str_weak(up),
- /* K15 */ be_nested_str_weak(format),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20adding_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27_X20ptr_X20to_X20_X60_X25s_X2Elocal_X60),
- /* K17 */ be_nested_str_weak(hostname_eth),
- /* K18 */ be_const_int(3),
- /* K19 */ be_nested_str_weak(add_service),
- /* K20 */ be_nested_str_weak(_matter),
- /* K21 */ be_nested_str_weak(_tcp),
- /* K22 */ be_nested_str_weak(_I),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20adding_X20subtype_X3A_X20),
- /* K24 */ be_nested_str_weak(add_subtype),
- /* K25 */ be_nested_str_weak(wifi),
- /* K26 */ be_nested_str_weak(hostname_wifi),
- /* K27 */ be_nested_str_weak(MTR_X3A_X20Exception),
- /* K28 */ be_nested_str_weak(_X7C),
- }),
- be_str_weak(mdns_announce_op_discovery),
- &be_const_str_solidified,
- ( &(const binstruction[122]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0xA40E0200, // 0001 IMPORT R3 K1
- 0xA8020064, // 0002 EXBLK 0 #0068
- 0x8C100302, // 0003 GETMET R4 R1 K2
- 0x7C100200, // 0004 CALL R4 1
- 0x8C100903, // 0005 GETMET R4 R4 K3
- 0x7C100200, // 0006 CALL R4 1
- 0x8C100904, // 0007 GETMET R4 R4 K4
- 0x7C100200, // 0008 CALL R4 1
- 0x8C140305, // 0009 GETMET R5 R1 K5
- 0x7C140200, // 000A CALL R5 1
- 0x8C180B06, // 000B GETMET R6 R5 K6
- 0x7C180200, // 000C CALL R6 1
- 0x00180D07, // 000D ADD R6 R6 K7
- 0x8C1C0906, // 000E GETMET R7 R4 K6
- 0x7C1C0200, // 000F CALL R7 1
- 0x00180C07, // 0010 ADD R6 R6 R7
- 0xB81E1000, // 0011 GETNGBL R7 K8
- 0x8C1C0F09, // 0012 GETMET R7 R7 K9
- 0x00261406, // 0013 ADD R9 K10 R6
- 0x5828000B, // 0014 LDCONST R10 K11
- 0x7C1C0600, // 0015 CALL R7 3
- 0xB81E1000, // 0016 GETNGBL R7 K8
- 0x8C1C0F0C, // 0017 GETMET R7 R7 K12
- 0x7C1C0200, // 0018 CALL R7 1
- 0x8C1C0F0D, // 0019 GETMET R7 R7 K13
- 0x5824000E, // 001A LDCONST R9 K14
- 0x7C1C0400, // 001B CALL R7 2
- 0x781E0020, // 001C JMPF R7 #003E
- 0xB81E1000, // 001D GETNGBL R7 K8
- 0x8C1C0F09, // 001E GETMET R7 R7 K9
- 0x8C24070F, // 001F GETMET R9 R3 K15
- 0x582C0010, // 0020 LDCONST R11 K16
- 0x5830000C, // 0021 LDCONST R12 K12
- 0x5C340C00, // 0022 MOVE R13 R6
- 0x88380111, // 0023 GETMBR R14 R0 K17
- 0x7C240A00, // 0024 CALL R9 5
- 0x58280012, // 0025 LDCONST R10 K18
- 0x7C1C0600, // 0026 CALL R7 3
- 0x8C1C0513, // 0027 GETMET R7 R2 K19
- 0x58240014, // 0028 LDCONST R9 K20
- 0x58280015, // 0029 LDCONST R10 K21
- 0x542E15A3, // 002A LDINT R11 5540
- 0x4C300000, // 002B LDNIL R12
- 0x5C340C00, // 002C MOVE R13 R6
- 0x88380111, // 002D GETMBR R14 R0 K17
- 0x7C1C0E00, // 002E CALL R7 7
- 0x8C1C0B06, // 002F GETMET R7 R5 K6
- 0x7C1C0200, // 0030 CALL R7 1
- 0x001E2C07, // 0031 ADD R7 K22 R7
- 0xB8221000, // 0032 GETNGBL R8 K8
- 0x8C201109, // 0033 GETMET R8 R8 K9
- 0x002A2E07, // 0034 ADD R10 K23 R7
- 0x582C0012, // 0035 LDCONST R11 K18
- 0x7C200600, // 0036 CALL R8 3
- 0x8C200518, // 0037 GETMET R8 R2 K24
- 0x58280014, // 0038 LDCONST R10 K20
- 0x582C0015, // 0039 LDCONST R11 K21
- 0x5C300C00, // 003A MOVE R12 R6
- 0x88340111, // 003B GETMBR R13 R0 K17
- 0x5C380E00, // 003C MOVE R14 R7
- 0x7C200C00, // 003D CALL R8 6
- 0xB81E1000, // 003E GETNGBL R7 K8
- 0x8C1C0F19, // 003F GETMET R7 R7 K25
- 0x7C1C0200, // 0040 CALL R7 1
- 0x8C1C0F0D, // 0041 GETMET R7 R7 K13
- 0x5824000E, // 0042 LDCONST R9 K14
- 0x7C1C0400, // 0043 CALL R7 2
- 0x781E0020, // 0044 JMPF R7 #0066
- 0xB81E1000, // 0045 GETNGBL R7 K8
- 0x8C1C0F09, // 0046 GETMET R7 R7 K9
- 0x8C24070F, // 0047 GETMET R9 R3 K15
- 0x582C0010, // 0048 LDCONST R11 K16
- 0x58300019, // 0049 LDCONST R12 K25
- 0x5C340C00, // 004A MOVE R13 R6
- 0x8838011A, // 004B GETMBR R14 R0 K26
- 0x7C240A00, // 004C CALL R9 5
- 0x58280012, // 004D LDCONST R10 K18
- 0x7C1C0600, // 004E CALL R7 3
- 0x8C1C0513, // 004F GETMET R7 R2 K19
- 0x58240014, // 0050 LDCONST R9 K20
- 0x58280015, // 0051 LDCONST R10 K21
- 0x542E15A3, // 0052 LDINT R11 5540
- 0x4C300000, // 0053 LDNIL R12
- 0x5C340C00, // 0054 MOVE R13 R6
- 0x8838011A, // 0055 GETMBR R14 R0 K26
- 0x7C1C0E00, // 0056 CALL R7 7
- 0x8C1C0B06, // 0057 GETMET R7 R5 K6
- 0x7C1C0200, // 0058 CALL R7 1
- 0x001E2C07, // 0059 ADD R7 K22 R7
- 0xB8221000, // 005A GETNGBL R8 K8
- 0x8C201109, // 005B GETMET R8 R8 K9
- 0x002A2E07, // 005C ADD R10 K23 R7
- 0x582C0012, // 005D LDCONST R11 K18
- 0x7C200600, // 005E CALL R8 3
- 0x8C200518, // 005F GETMET R8 R2 K24
- 0x58280014, // 0060 LDCONST R10 K20
- 0x582C0015, // 0061 LDCONST R11 K21
- 0x5C300C00, // 0062 MOVE R12 R6
- 0x8834011A, // 0063 GETMBR R13 R0 K26
- 0x5C380E00, // 0064 MOVE R14 R7
- 0x7C200C00, // 0065 CALL R8 6
- 0xA8040001, // 0066 EXBLK 1 1
- 0x70020010, // 0067 JMP #0079
- 0xAC100002, // 0068 CATCH R4 0 2
- 0x7002000D, // 0069 JMP #0078
- 0xB81A1000, // 006A GETNGBL R6 K8
- 0x8C180D09, // 006B GETMET R6 R6 K9
- 0x60200008, // 006C GETGBL R8 G8
- 0x5C240800, // 006D MOVE R9 R4
- 0x7C200200, // 006E CALL R8 1
- 0x00223608, // 006F ADD R8 K27 R8
- 0x0020111C, // 0070 ADD R8 R8 K28
- 0x60240008, // 0071 GETGBL R9 G8
- 0x5C280A00, // 0072 MOVE R10 R5
- 0x7C240200, // 0073 CALL R9 1
- 0x00201009, // 0074 ADD R8 R8 R9
- 0x5824000B, // 0075 LDCONST R9 K11
- 0x7C180600, // 0076 CALL R6 3
- 0x70020000, // 0077 JMP #0079
- 0xB0080000, // 0078 RAISE 2 R0 R0
- 0x80000000, // 0079 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_commissioning_complete_deferred
-********************************************************************/
-be_local_closure(Matter_Device_start_commissioning_complete_deferred, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 1]) {
- be_nested_proto(
- 3, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 2]) { /* upvals */
- be_local_const_upval(1, 0),
- be_local_const_upval(1, 1),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(start_commissioning_complete),
- }),
- be_str_weak(_X3Clambda_X3E),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x68080001, // 0002 GETUPV R2 U1
- 0x7C000400, // 0003 CALL R0 2
- 0x80040000, // 0004 RET 1 R0
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(set_timer),
- /* K2 */ be_const_int(0),
- }),
- be_str_weak(start_commissioning_complete_deferred),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x58100002, // 0002 LDCONST R4 K2
- 0x84140000, // 0003 CLOSURE R5 P0
- 0x7C080600, // 0004 CALL R2 3
- 0xA0000000, // 0005 CLOSE R0
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: compute_pbkdf
********************************************************************/
@@ -1826,6 +501,148 @@ be_local_closure(Matter_Device_compute_pbkdf, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: save_param
+********************************************************************/
+be_local_closure(Matter_Device_save_param, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(json),
+ /* K1 */ be_nested_str_weak(dump),
+ /* K2 */ be_nested_str_weak(distinguish),
+ /* K3 */ be_nested_str_weak(discriminator),
+ /* K4 */ be_nested_str_weak(passcode),
+ /* K5 */ be_nested_str_weak(string),
+ /* K6 */ be_nested_str_weak(FILENAME),
+ /* K7 */ be_nested_str_weak(w),
+ /* K8 */ be_nested_str_weak(write),
+ /* K9 */ be_nested_str_weak(close),
+ /* K10 */ be_nested_str_weak(tasmota),
+ /* K11 */ be_nested_str_weak(log),
+ /* K12 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Asave_X20Exception_X3A),
+ /* K13 */ be_nested_str_weak(_X7C),
+ /* K14 */ be_const_int(2),
+ }),
+ be_str_weak(save_param),
+ &be_const_str_solidified,
+ ( &(const binstruction[43]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x8C080301, // 0001 GETMET R2 R1 K1
+ 0x60100013, // 0002 GETGBL R4 G19
+ 0x7C100000, // 0003 CALL R4 0
+ 0x88140103, // 0004 GETMBR R5 R0 K3
+ 0x98120405, // 0005 SETIDX R4 K2 R5
+ 0x88140104, // 0006 GETMBR R5 R0 K4
+ 0x98120805, // 0007 SETIDX R4 K4 R5
+ 0x7C080400, // 0008 CALL R2 2
+ 0xA802000D, // 0009 EXBLK 0 #0018
+ 0xA40E0A00, // 000A IMPORT R3 K5
+ 0x60100011, // 000B GETGBL R4 G17
+ 0x88140106, // 000C GETMBR R5 R0 K6
+ 0x58180007, // 000D LDCONST R6 K7
+ 0x7C100400, // 000E CALL R4 2
+ 0x8C140908, // 000F GETMET R5 R4 K8
+ 0x5C1C0400, // 0010 MOVE R7 R2
+ 0x7C140400, // 0011 CALL R5 2
+ 0x8C140909, // 0012 GETMET R5 R4 K9
+ 0x7C140200, // 0013 CALL R5 1
+ 0xA8040001, // 0014 EXBLK 1 1
+ 0x80040400, // 0015 RET 1 R2
+ 0xA8040001, // 0016 EXBLK 1 1
+ 0x70020011, // 0017 JMP #002A
+ 0xAC0C0002, // 0018 CATCH R3 0 2
+ 0x7002000E, // 0019 JMP #0029
+ 0xB8161400, // 001A GETNGBL R5 K10
+ 0x8C140B0B, // 001B GETMET R5 R5 K11
+ 0x601C0008, // 001C GETGBL R7 G8
+ 0x5C200600, // 001D MOVE R8 R3
+ 0x7C1C0200, // 001E CALL R7 1
+ 0x001E1807, // 001F ADD R7 K12 R7
+ 0x001C0F0D, // 0020 ADD R7 R7 K13
+ 0x60200008, // 0021 GETGBL R8 G8
+ 0x5C240800, // 0022 MOVE R9 R4
+ 0x7C200200, // 0023 CALL R8 1
+ 0x001C0E08, // 0024 ADD R7 R7 R8
+ 0x5820000E, // 0025 LDCONST R8 K14
+ 0x7C140600, // 0026 CALL R5 3
+ 0x80040400, // 0027 RET 1 R2
+ 0x70020000, // 0028 JMP #002A
+ 0xB0080000, // 0029 RAISE 2 R0 R0
+ 0x80000000, // 002A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_operational_dicovery_deferred
+********************************************************************/
+be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 3, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 2]) { /* upvals */
+ be_local_const_upval(1, 0),
+ be_local_const_upval(1, 1),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(start_operational_dicovery),
+ }),
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x68080001, // 0002 GETUPV R2 U1
+ 0x7C000400, // 0003 CALL R0 2
+ 0x80040000, // 0004 RET 1 R0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(set_timer),
+ /* K2 */ be_const_int(0),
+ }),
+ be_str_weak(start_operational_dicovery_deferred),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x84140000, // 0003 CLOSURE R5 P0
+ 0x7C080600, // 0004 CALL R2 3
+ 0xA0000000, // 0005 CLOSE R0
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: get_active_endpoints
********************************************************************/
@@ -1894,6 +711,1190 @@ be_local_closure(Matter_Device_get_active_endpoints, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: msg_send
+********************************************************************/
+be_local_closure(Matter_Device_msg_send, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(udp_server),
+ /* K1 */ be_nested_str_weak(send_response),
+ }),
+ be_str_weak(msg_send),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x88140100, // 0000 GETMBR R5 R0 K0
+ 0x8C140B01, // 0001 GETMET R5 R5 K1
+ 0x5C1C0200, // 0002 MOVE R7 R1
+ 0x5C200400, // 0003 MOVE R8 R2
+ 0x5C240600, // 0004 MOVE R9 R3
+ 0x5C280800, // 0005 MOVE R10 R4
+ 0x7C140A00, // 0006 CALL R5 5
+ 0x80040A00, // 0007 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: finish_commissioning
+********************************************************************/
+be_local_closure(Matter_Device_finish_commissioning, /* 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(finish_commissioning),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_Device_every_second, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_nested_str_weak(every_second),
+ /* K2 */ be_nested_str_weak(message_handler),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x88040102, // 0003 GETMBR R1 R0 K2
+ 0x8C040301, // 0004 GETMET R1 R1 K1
+ 0x7C040200, // 0005 CALL R1 1
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: stop
+********************************************************************/
+be_local_closure(Matter_Device_stop, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(udp_server),
+ /* K1 */ be_nested_str_weak(stop),
+ }),
+ be_str_weak(stop),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x78060002, // 0001 JMPF R1 #0005
+ 0x88040100, // 0002 GETMBR R1 R0 K0
+ 0x8C040301, // 0003 GETMET R1 R1 K1
+ 0x7C040200, // 0004 CALL R1 1
+ 0x80000000, // 0005 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_basic_commissioning
+********************************************************************/
+be_local_closure(Matter_Device_start_basic_commissioning, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(compute_pbkdf),
+ /* K1 */ be_nested_str_weak(passcode),
+ }),
+ be_str_weak(start_basic_commissioning),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x880C0101, // 0001 GETMBR R3 R0 K1
+ 0x7C040400, // 0002 CALL R1 2
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: load_param
+********************************************************************/
+be_local_closure(Matter_Device_load_param, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[22]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(crypto),
+ /* K2 */ be_nested_str_weak(FILENAME),
+ /* K3 */ be_nested_str_weak(read),
+ /* K4 */ be_nested_str_weak(close),
+ /* K5 */ be_nested_str_weak(json),
+ /* K6 */ be_nested_str_weak(load),
+ /* K7 */ be_nested_str_weak(discriminator),
+ /* K8 */ be_nested_str_weak(find),
+ /* K9 */ be_nested_str_weak(distinguish),
+ /* K10 */ be_nested_str_weak(passcode),
+ /* K11 */ be_nested_str_weak(io_error),
+ /* K12 */ be_nested_str_weak(tasmota),
+ /* K13 */ be_nested_str_weak(log),
+ /* K14 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Aload_X20Exception_X3A),
+ /* K15 */ be_nested_str_weak(_X7C),
+ /* K16 */ be_const_int(2),
+ /* K17 */ be_nested_str_weak(random),
+ /* K18 */ be_nested_str_weak(get),
+ /* K19 */ be_const_int(0),
+ /* K20 */ be_nested_str_weak(PASSCODE_DEFAULT),
+ /* K21 */ be_nested_str_weak(save_param),
+ }),
+ be_str_weak(load_param),
+ &be_const_str_solidified,
+ ( &(const binstruction[70]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0xA8020014, // 0002 EXBLK 0 #0018
+ 0x600C0011, // 0003 GETGBL R3 G17
+ 0x88100102, // 0004 GETMBR R4 R0 K2
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x8C100703, // 0006 GETMET R4 R3 K3
+ 0x7C100200, // 0007 CALL R4 1
+ 0x8C140704, // 0008 GETMET R5 R3 K4
+ 0x7C140200, // 0009 CALL R5 1
+ 0xA4160A00, // 000A IMPORT R5 K5
+ 0x8C180B06, // 000B GETMET R6 R5 K6
+ 0x5C200800, // 000C MOVE R8 R4
+ 0x7C180400, // 000D CALL R6 2
+ 0x8C1C0D08, // 000E GETMET R7 R6 K8
+ 0x58240009, // 000F LDCONST R9 K9
+ 0x7C1C0400, // 0010 CALL R7 2
+ 0x90020E07, // 0011 SETMBR R0 K7 R7
+ 0x8C1C0D08, // 0012 GETMET R7 R6 K8
+ 0x5824000A, // 0013 LDCONST R9 K10
+ 0x7C1C0400, // 0014 CALL R7 2
+ 0x90021407, // 0015 SETMBR R0 K10 R7
+ 0xA8040001, // 0016 EXBLK 1 1
+ 0x70020012, // 0017 JMP #002B
+ 0xAC0C0002, // 0018 CATCH R3 0 2
+ 0x7002000F, // 0019 JMP #002A
+ 0x2014070B, // 001A NE R5 R3 K11
+ 0x7816000C, // 001B JMPF R5 #0029
+ 0xB8161800, // 001C GETNGBL R5 K12
+ 0x8C140B0D, // 001D GETMET R5 R5 K13
+ 0x601C0008, // 001E GETGBL R7 G8
+ 0x5C200600, // 001F MOVE R8 R3
+ 0x7C1C0200, // 0020 CALL R7 1
+ 0x001E1C07, // 0021 ADD R7 K14 R7
+ 0x001C0F0F, // 0022 ADD R7 R7 K15
+ 0x60200008, // 0023 GETGBL R8 G8
+ 0x5C240800, // 0024 MOVE R9 R4
+ 0x7C200200, // 0025 CALL R8 1
+ 0x001C0E08, // 0026 ADD R7 R7 R8
+ 0x58200010, // 0027 LDCONST R8 K16
+ 0x7C140600, // 0028 CALL R5 3
+ 0x70020000, // 0029 JMP #002B
+ 0xB0080000, // 002A RAISE 2 R0 R0
+ 0x500C0000, // 002B LDBOOL R3 0 0
+ 0x88100107, // 002C GETMBR R4 R0 K7
+ 0x4C140000, // 002D LDNIL R5
+ 0x1C100805, // 002E EQ R4 R4 R5
+ 0x7812000A, // 002F JMPF R4 #003B
+ 0x8C100511, // 0030 GETMET R4 R2 K17
+ 0x58180010, // 0031 LDCONST R6 K16
+ 0x7C100400, // 0032 CALL R4 2
+ 0x8C100912, // 0033 GETMET R4 R4 K18
+ 0x58180013, // 0034 LDCONST R6 K19
+ 0x581C0010, // 0035 LDCONST R7 K16
+ 0x7C100600, // 0036 CALL R4 3
+ 0x54160FFE, // 0037 LDINT R5 4095
+ 0x2C100805, // 0038 AND R4 R4 R5
+ 0x90020E04, // 0039 SETMBR R0 K7 R4
+ 0x500C0200, // 003A LDBOOL R3 1 0
+ 0x8810010A, // 003B GETMBR R4 R0 K10
+ 0x4C140000, // 003C LDNIL R5
+ 0x1C100805, // 003D EQ R4 R4 R5
+ 0x78120002, // 003E JMPF R4 #0042
+ 0x88100114, // 003F GETMBR R4 R0 K20
+ 0x90021404, // 0040 SETMBR R0 K10 R4
+ 0x500C0200, // 0041 LDBOOL R3 1 0
+ 0x780E0001, // 0042 JMPF R3 #0045
+ 0x8C100115, // 0043 GETMET R4 R0 K21
+ 0x7C100200, // 0044 CALL R4 1
+ 0x80000000, // 0045 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_attribute_expansion
+********************************************************************/
+be_local_closure(Matter_Device_process_attribute_expansion, /* name */
+ be_nested_proto(
+ 32, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 0, /* 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(keys),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(stop_iteration),
+ /* K3 */ be_const_int(1),
+ /* K4 */ be_const_int(0),
+ }),
+ be_str_weak(keys_sorted),
+ &be_const_str_solidified,
+ ( &(const binstruction[45]) { /* code */
+ 0x60040012, // 0000 GETGBL R1 G18
+ 0x7C040000, // 0001 CALL R1 0
+ 0x60080010, // 0002 GETGBL R2 G16
+ 0x8C0C0100, // 0003 GETMET R3 R0 K0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x7C080200, // 0005 CALL R2 1
+ 0xA8020005, // 0006 EXBLK 0 #000D
+ 0x5C0C0400, // 0007 MOVE R3 R2
+ 0x7C0C0000, // 0008 CALL R3 0
+ 0x8C100301, // 0009 GETMET R4 R1 K1
+ 0x5C180600, // 000A MOVE R6 R3
+ 0x7C100400, // 000B CALL R4 2
+ 0x7001FFF9, // 000C JMP #0007
+ 0x58080002, // 000D LDCONST R2 K2
+ 0xAC080200, // 000E CATCH R2 1 0
+ 0xB0080000, // 000F RAISE 2 R0 R0
+ 0x60080010, // 0010 GETGBL R2 G16
+ 0x600C000C, // 0011 GETGBL R3 G12
+ 0x5C100200, // 0012 MOVE R4 R1
+ 0x7C0C0200, // 0013 CALL R3 1
+ 0x040C0703, // 0014 SUB R3 R3 K3
+ 0x400E0603, // 0015 CONNECT R3 K3 R3
+ 0x7C080200, // 0016 CALL R2 1
+ 0xA8020010, // 0017 EXBLK 0 #0029
+ 0x5C0C0400, // 0018 MOVE R3 R2
+ 0x7C0C0000, // 0019 CALL R3 0
+ 0x94100203, // 001A GETIDX R4 R1 R3
+ 0x5C140600, // 001B MOVE R5 R3
+ 0x24180B04, // 001C GT R6 R5 K4
+ 0x781A0008, // 001D JMPF R6 #0027
+ 0x04180B03, // 001E SUB R6 R5 K3
+ 0x94180206, // 001F GETIDX R6 R1 R6
+ 0x24180C04, // 0020 GT R6 R6 R4
+ 0x781A0004, // 0021 JMPF R6 #0027
+ 0x04180B03, // 0022 SUB R6 R5 K3
+ 0x94180206, // 0023 GETIDX R6 R1 R6
+ 0x98040A06, // 0024 SETIDX R1 R5 R6
+ 0x04140B03, // 0025 SUB R5 R5 K3
+ 0x7001FFF4, // 0026 JMP #001C
+ 0x98040A04, // 0027 SETIDX R1 R5 R4
+ 0x7001FFEE, // 0028 JMP #0018
+ 0x58080002, // 0029 LDCONST R2 K2
+ 0xAC080200, // 002A CATCH R2 1 0
+ 0xB0080000, // 002B RAISE 2 R0 R0
+ 0x80040200, // 002C RET 1 R1
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[27]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(endpoint),
+ /* K2 */ be_nested_str_weak(cluster),
+ /* K3 */ be_nested_str_weak(attribute),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(format),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20process_attribute_expansion_X20_X25s),
+ /* K8 */ be_nested_str_weak(MTR_X3A_X20endpoint_X3D_X25s_X20cluster_X3D_X25s_X20attribute_X3D_X25s),
+ /* K9 */ be_nested_str_weak(plugins),
+ /* K10 */ be_nested_str_weak(get_endpoints),
+ /* K11 */ be_nested_str_weak(MTR_X3A_X20pi_X3D_X25s_X20ep_list_X3D_X25s),
+ /* K12 */ be_nested_str_weak(contains),
+ /* K13 */ be_nested_str_weak(get_cluster_list),
+ /* K14 */ be_nested_str_weak(MTR_X3A_X20pi_X3D_X25s_X20ep_X3D_X25s_X20cl_list_X3D_X25s),
+ /* K15 */ be_nested_str_weak(get_attribute_list),
+ /* K16 */ be_nested_str_weak(MTR_X3A_X20pi_X3D_X25s_X20ep_X3D_X25s_X20cl_X3D_X25s_X20at_list_X3D_X25s),
+ /* K17 */ be_nested_str_weak(push),
+ /* K18 */ be_nested_str_weak(stop_iteration),
+ /* K19 */ be_nested_str_weak(MTR_X3A_X20expansion_X20_X5B_X2502X_X5D_X2504X_X2F_X2504X),
+ /* K20 */ be_const_int(3),
+ /* K21 */ be_nested_str_weak(status),
+ /* K22 */ be_nested_str_weak(matter),
+ /* K23 */ be_nested_str_weak(UNSUPPORTED_ENDPOINT),
+ /* K24 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
+ /* K25 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
+ /* K26 */ be_nested_str_weak(UNREPORTABLE_ATTRIBUTE),
+ }),
+ be_str_weak(process_attribute_expansion),
+ &be_const_str_solidified,
+ ( &(const binstruction[294]) { /* code */
+ 0x840C0000, // 0000 CLOSURE R3 P0
+ 0xA4120000, // 0001 IMPORT R4 K0
+ 0x88140301, // 0002 GETMBR R5 R1 K1
+ 0x50180000, // 0003 LDBOOL R6 0 0
+ 0x881C0302, // 0004 GETMBR R7 R1 K2
+ 0x50200000, // 0005 LDBOOL R8 0 0
+ 0x88240303, // 0006 GETMBR R9 R1 K3
+ 0x50280000, // 0007 LDBOOL R10 0 0
+ 0x882C0301, // 0008 GETMBR R11 R1 K1
+ 0x4C300000, // 0009 LDNIL R12
+ 0x202C160C, // 000A NE R11 R11 R12
+ 0x782E0007, // 000B JMPF R11 #0014
+ 0x882C0302, // 000C GETMBR R11 R1 K2
+ 0x4C300000, // 000D LDNIL R12
+ 0x202C160C, // 000E NE R11 R11 R12
+ 0x782E0003, // 000F JMPF R11 #0014
+ 0x882C0303, // 0010 GETMBR R11 R1 K3
+ 0x4C300000, // 0011 LDNIL R12
+ 0x202C160C, // 0012 NE R11 R11 R12
+ 0x742E0000, // 0013 JMPT R11 #0015
+ 0x502C0001, // 0014 LDBOOL R11 0 1
+ 0x502C0200, // 0015 LDBOOL R11 1 0
+ 0xB8320800, // 0016 GETNGBL R12 K4
+ 0x8C301905, // 0017 GETMET R12 R12 K5
+ 0x8C380906, // 0018 GETMET R14 R4 K6
+ 0x58400007, // 0019 LDCONST R16 K7
+ 0x60440008, // 001A GETGBL R17 G8
+ 0x5C480200, // 001B MOVE R18 R1
+ 0x7C440200, // 001C CALL R17 1
+ 0x7C380600, // 001D CALL R14 3
+ 0x543E0003, // 001E LDINT R15 4
+ 0x7C300600, // 001F CALL R12 3
+ 0x60300013, // 0020 GETGBL R12 G19
+ 0x7C300000, // 0021 CALL R12 0
+ 0xB8360800, // 0022 GETNGBL R13 K4
+ 0x8C341B05, // 0023 GETMET R13 R13 K5
+ 0x8C3C0906, // 0024 GETMET R15 R4 K6
+ 0x58440008, // 0025 LDCONST R17 K8
+ 0x5C480A00, // 0026 MOVE R18 R5
+ 0x5C4C0E00, // 0027 MOVE R19 R7
+ 0x5C501200, // 0028 MOVE R20 R9
+ 0x7C3C0A00, // 0029 CALL R15 5
+ 0x54420003, // 002A LDINT R16 4
+ 0x7C340600, // 002B CALL R13 3
+ 0x60340010, // 002C GETGBL R13 G16
+ 0x88380109, // 002D GETMBR R14 R0 K9
+ 0x7C340200, // 002E CALL R13 1
+ 0xA802008F, // 002F EXBLK 0 #00C0
+ 0x5C381A00, // 0030 MOVE R14 R13
+ 0x7C380000, // 0031 CALL R14 0
+ 0x8C3C1D0A, // 0032 GETMET R15 R14 K10
+ 0x7C3C0200, // 0033 CALL R15 1
+ 0xB8420800, // 0034 GETNGBL R16 K4
+ 0x8C402105, // 0035 GETMET R16 R16 K5
+ 0x8C480906, // 0036 GETMET R18 R4 K6
+ 0x5850000B, // 0037 LDCONST R20 K11
+ 0x60540008, // 0038 GETGBL R21 G8
+ 0x5C581C00, // 0039 MOVE R22 R14
+ 0x7C540200, // 003A CALL R21 1
+ 0x60580008, // 003B GETGBL R22 G8
+ 0x5C5C1E00, // 003C MOVE R23 R15
+ 0x7C580200, // 003D CALL R22 1
+ 0x7C480800, // 003E CALL R18 4
+ 0x544E0003, // 003F LDINT R19 4
+ 0x7C400600, // 0040 CALL R16 3
+ 0x60400010, // 0041 GETGBL R16 G16
+ 0x5C441E00, // 0042 MOVE R17 R15
+ 0x7C400200, // 0043 CALL R16 1
+ 0xA8020076, // 0044 EXBLK 0 #00BC
+ 0x5C442000, // 0045 MOVE R17 R16
+ 0x7C440000, // 0046 CALL R17 0
+ 0x4C480000, // 0047 LDNIL R18
+ 0x20480A12, // 0048 NE R18 R5 R18
+ 0x784A0002, // 0049 JMPF R18 #004D
+ 0x20482205, // 004A NE R18 R17 R5
+ 0x784A0000, // 004B JMPF R18 #004D
+ 0x7001FFF7, // 004C JMP #0045
+ 0x8C48190C, // 004D GETMET R18 R12 K12
+ 0x5C502200, // 004E MOVE R20 R17
+ 0x7C480400, // 004F CALL R18 2
+ 0x744A0002, // 0050 JMPT R18 #0054
+ 0x60480013, // 0051 GETGBL R18 G19
+ 0x7C480000, // 0052 CALL R18 0
+ 0x98302212, // 0053 SETIDX R12 R17 R18
+ 0x50180200, // 0054 LDBOOL R6 1 0
+ 0x8C481D0D, // 0055 GETMET R18 R14 K13
+ 0x5C502200, // 0056 MOVE R20 R17
+ 0x7C480400, // 0057 CALL R18 2
+ 0xB84E0800, // 0058 GETNGBL R19 K4
+ 0x8C4C2705, // 0059 GETMET R19 R19 K5
+ 0x8C540906, // 005A GETMET R21 R4 K6
+ 0x585C000E, // 005B LDCONST R23 K14
+ 0x60600008, // 005C GETGBL R24 G8
+ 0x5C641C00, // 005D MOVE R25 R14
+ 0x7C600200, // 005E CALL R24 1
+ 0x60640008, // 005F GETGBL R25 G8
+ 0x5C682200, // 0060 MOVE R26 R17
+ 0x7C640200, // 0061 CALL R25 1
+ 0x60680008, // 0062 GETGBL R26 G8
+ 0x5C6C2400, // 0063 MOVE R27 R18
+ 0x7C680200, // 0064 CALL R26 1
+ 0x7C540A00, // 0065 CALL R21 5
+ 0x545A0003, // 0066 LDINT R22 4
+ 0x7C4C0600, // 0067 CALL R19 3
+ 0x604C0010, // 0068 GETGBL R19 G16
+ 0x5C502400, // 0069 MOVE R20 R18
+ 0x7C4C0200, // 006A CALL R19 1
+ 0xA802004B, // 006B EXBLK 0 #00B8
+ 0x5C502600, // 006C MOVE R20 R19
+ 0x7C500000, // 006D CALL R20 0
+ 0x4C540000, // 006E LDNIL R21
+ 0x20540E15, // 006F NE R21 R7 R21
+ 0x78560002, // 0070 JMPF R21 #0074
+ 0x20542807, // 0071 NE R21 R20 R7
+ 0x78560000, // 0072 JMPF R21 #0074
+ 0x7001FFF7, // 0073 JMP #006C
+ 0x94541811, // 0074 GETIDX R21 R12 R17
+ 0x8C542B0C, // 0075 GETMET R21 R21 K12
+ 0x5C5C2800, // 0076 MOVE R23 R20
+ 0x7C540400, // 0077 CALL R21 2
+ 0x74560003, // 0078 JMPT R21 #007D
+ 0x94541811, // 0079 GETIDX R21 R12 R17
+ 0x60580013, // 007A GETGBL R22 G19
+ 0x7C580000, // 007B CALL R22 0
+ 0x98542816, // 007C SETIDX R21 R20 R22
+ 0x50200200, // 007D LDBOOL R8 1 0
+ 0x8C541D0F, // 007E GETMET R21 R14 K15
+ 0x5C5C2200, // 007F MOVE R23 R17
+ 0x5C602800, // 0080 MOVE R24 R20
+ 0x7C540600, // 0081 CALL R21 3
+ 0xB85A0800, // 0082 GETNGBL R22 K4
+ 0x8C582D05, // 0083 GETMET R22 R22 K5
+ 0x8C600906, // 0084 GETMET R24 R4 K6
+ 0x58680010, // 0085 LDCONST R26 K16
+ 0x606C0008, // 0086 GETGBL R27 G8
+ 0x5C701C00, // 0087 MOVE R28 R14
+ 0x7C6C0200, // 0088 CALL R27 1
+ 0x60700008, // 0089 GETGBL R28 G8
+ 0x5C742200, // 008A MOVE R29 R17
+ 0x7C700200, // 008B CALL R28 1
+ 0x60740008, // 008C GETGBL R29 G8
+ 0x5C782800, // 008D MOVE R30 R20
+ 0x7C740200, // 008E CALL R29 1
+ 0x60780008, // 008F GETGBL R30 G8
+ 0x5C7C2A00, // 0090 MOVE R31 R21
+ 0x7C780200, // 0091 CALL R30 1
+ 0x7C600C00, // 0092 CALL R24 6
+ 0x54660003, // 0093 LDINT R25 4
+ 0x7C580600, // 0094 CALL R22 3
+ 0x60580010, // 0095 GETGBL R22 G16
+ 0x5C5C2A00, // 0096 MOVE R23 R21
+ 0x7C580200, // 0097 CALL R22 1
+ 0xA802001A, // 0098 EXBLK 0 #00B4
+ 0x5C5C2C00, // 0099 MOVE R23 R22
+ 0x7C5C0000, // 009A CALL R23 0
+ 0x4C600000, // 009B LDNIL R24
+ 0x20601218, // 009C NE R24 R9 R24
+ 0x78620002, // 009D JMPF R24 #00A1
+ 0x20602E09, // 009E NE R24 R23 R9
+ 0x78620000, // 009F JMPF R24 #00A1
+ 0x7001FFF7, // 00A0 JMP #0099
+ 0x94601811, // 00A1 GETIDX R24 R12 R17
+ 0x94603014, // 00A2 GETIDX R24 R24 R20
+ 0x8C60310C, // 00A3 GETMET R24 R24 K12
+ 0x5C682E00, // 00A4 MOVE R26 R23
+ 0x7C600400, // 00A5 CALL R24 2
+ 0x74620004, // 00A6 JMPT R24 #00AC
+ 0x94601811, // 00A7 GETIDX R24 R12 R17
+ 0x94603014, // 00A8 GETIDX R24 R24 R20
+ 0x60640012, // 00A9 GETGBL R25 G18
+ 0x7C640000, // 00AA CALL R25 0
+ 0x98602E19, // 00AB SETIDX R24 R23 R25
+ 0x50280200, // 00AC LDBOOL R10 1 0
+ 0x94601811, // 00AD GETIDX R24 R12 R17
+ 0x94603014, // 00AE GETIDX R24 R24 R20
+ 0x94603017, // 00AF GETIDX R24 R24 R23
+ 0x8C603111, // 00B0 GETMET R24 R24 K17
+ 0x5C681C00, // 00B1 MOVE R26 R14
+ 0x7C600400, // 00B2 CALL R24 2
+ 0x7001FFE4, // 00B3 JMP #0099
+ 0x58580012, // 00B4 LDCONST R22 K18
+ 0xAC580200, // 00B5 CATCH R22 1 0
+ 0xB0080000, // 00B6 RAISE 2 R0 R0
+ 0x7001FFB3, // 00B7 JMP #006C
+ 0x584C0012, // 00B8 LDCONST R19 K18
+ 0xAC4C0200, // 00B9 CATCH R19 1 0
+ 0xB0080000, // 00BA RAISE 2 R0 R0
+ 0x7001FF88, // 00BB JMP #0045
+ 0x58400012, // 00BC LDCONST R16 K18
+ 0xAC400200, // 00BD CATCH R16 1 0
+ 0xB0080000, // 00BE RAISE 2 R0 R0
+ 0x7001FF6F, // 00BF JMP #0030
+ 0x58340012, // 00C0 LDCONST R13 K18
+ 0xAC340200, // 00C1 CATCH R13 1 0
+ 0xB0080000, // 00C2 RAISE 2 R0 R0
+ 0x60340010, // 00C3 GETGBL R13 G16
+ 0x5C380600, // 00C4 MOVE R14 R3
+ 0x5C3C1800, // 00C5 MOVE R15 R12
+ 0x7C380200, // 00C6 CALL R14 1
+ 0x7C340200, // 00C7 CALL R13 1
+ 0xA802003D, // 00C8 EXBLK 0 #0107
+ 0x5C381A00, // 00C9 MOVE R14 R13
+ 0x7C380000, // 00CA CALL R14 0
+ 0x603C0010, // 00CB GETGBL R15 G16
+ 0x5C400600, // 00CC MOVE R16 R3
+ 0x9444180E, // 00CD GETIDX R17 R12 R14
+ 0x7C400200, // 00CE CALL R16 1
+ 0x7C3C0200, // 00CF CALL R15 1
+ 0xA8020031, // 00D0 EXBLK 0 #0103
+ 0x5C401E00, // 00D1 MOVE R16 R15
+ 0x7C400000, // 00D2 CALL R16 0
+ 0x60440010, // 00D3 GETGBL R17 G16
+ 0x5C480600, // 00D4 MOVE R18 R3
+ 0x944C180E, // 00D5 GETIDX R19 R12 R14
+ 0x944C2610, // 00D6 GETIDX R19 R19 R16
+ 0x7C480200, // 00D7 CALL R18 1
+ 0x7C440200, // 00D8 CALL R17 1
+ 0xA8020024, // 00D9 EXBLK 0 #00FF
+ 0x5C482200, // 00DA MOVE R18 R17
+ 0x7C480000, // 00DB CALL R18 0
+ 0x604C0010, // 00DC GETGBL R19 G16
+ 0x9450180E, // 00DD GETIDX R20 R12 R14
+ 0x94502810, // 00DE GETIDX R20 R20 R16
+ 0x94502812, // 00DF GETIDX R20 R20 R18
+ 0x7C4C0200, // 00E0 CALL R19 1
+ 0xA8020018, // 00E1 EXBLK 0 #00FB
+ 0x5C502600, // 00E2 MOVE R20 R19
+ 0x7C500000, // 00E3 CALL R20 0
+ 0xB8560800, // 00E4 GETNGBL R21 K4
+ 0x8C542B05, // 00E5 GETMET R21 R21 K5
+ 0x8C5C0906, // 00E6 GETMET R23 R4 K6
+ 0x58640013, // 00E7 LDCONST R25 K19
+ 0x5C681C00, // 00E8 MOVE R26 R14
+ 0x5C6C2000, // 00E9 MOVE R27 R16
+ 0x5C702400, // 00EA MOVE R28 R18
+ 0x7C5C0A00, // 00EB CALL R23 5
+ 0x58600014, // 00EC LDCONST R24 K20
+ 0x7C540600, // 00ED CALL R21 3
+ 0x9006020E, // 00EE SETMBR R1 K1 R14
+ 0x90060410, // 00EF SETMBR R1 K2 R16
+ 0x90060612, // 00F0 SETMBR R1 K3 R18
+ 0x5C540400, // 00F1 MOVE R21 R2
+ 0x5C582800, // 00F2 MOVE R22 R20
+ 0x5C5C0200, // 00F3 MOVE R23 R1
+ 0x5C601600, // 00F4 MOVE R24 R11
+ 0x7C540600, // 00F5 CALL R21 3
+ 0x782E0002, // 00F6 JMPF R11 #00FA
+ 0x78560001, // 00F7 JMPF R21 #00FA
+ 0xA8040004, // 00F8 EXBLK 1 4
+ 0x80002C00, // 00F9 RET 0
+ 0x7001FFE6, // 00FA JMP #00E2
+ 0x584C0012, // 00FB LDCONST R19 K18
+ 0xAC4C0200, // 00FC CATCH R19 1 0
+ 0xB0080000, // 00FD RAISE 2 R0 R0
+ 0x7001FFDA, // 00FE JMP #00DA
+ 0x58440012, // 00FF LDCONST R17 K18
+ 0xAC440200, // 0100 CATCH R17 1 0
+ 0xB0080000, // 0101 RAISE 2 R0 R0
+ 0x7001FFCD, // 0102 JMP #00D1
+ 0x583C0012, // 0103 LDCONST R15 K18
+ 0xAC3C0200, // 0104 CATCH R15 1 0
+ 0xB0080000, // 0105 RAISE 2 R0 R0
+ 0x7001FFC1, // 0106 JMP #00C9
+ 0x58340012, // 0107 LDCONST R13 K18
+ 0xAC340200, // 0108 CATCH R13 1 0
+ 0xB0080000, // 0109 RAISE 2 R0 R0
+ 0x782E0019, // 010A JMPF R11 #0125
+ 0x5C340C00, // 010B MOVE R13 R6
+ 0x74360003, // 010C JMPT R13 #0111
+ 0xB8362C00, // 010D GETNGBL R13 K22
+ 0x88341B17, // 010E GETMBR R13 R13 K23
+ 0x90062A0D, // 010F SETMBR R1 K21 R13
+ 0x7002000E, // 0110 JMP #0120
+ 0x5C341000, // 0111 MOVE R13 R8
+ 0x74360003, // 0112 JMPT R13 #0117
+ 0xB8362C00, // 0113 GETNGBL R13 K22
+ 0x88341B18, // 0114 GETMBR R13 R13 K24
+ 0x90062A0D, // 0115 SETMBR R1 K21 R13
+ 0x70020008, // 0116 JMP #0120
+ 0x5C341400, // 0117 MOVE R13 R10
+ 0x74360003, // 0118 JMPT R13 #011D
+ 0xB8362C00, // 0119 GETNGBL R13 K22
+ 0x88341B19, // 011A GETMBR R13 R13 K25
+ 0x90062A0D, // 011B SETMBR R1 K21 R13
+ 0x70020002, // 011C JMP #0120
+ 0xB8362C00, // 011D GETNGBL R13 K22
+ 0x88341B1A, // 011E GETMBR R13 R13 K26
+ 0x90062A0D, // 011F SETMBR R1 K21 R13
+ 0x5C340400, // 0120 MOVE R13 R2
+ 0x4C380000, // 0121 LDNIL R14
+ 0x5C3C0200, // 0122 MOVE R15 R1
+ 0x50400200, // 0123 LDBOOL R16 1 0
+ 0x7C340600, // 0124 CALL R13 3
+ 0x80000000, // 0125 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: sort_distinct
+********************************************************************/
+be_local_closure(Matter_Device_sort_distinct, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_Device),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(stop_iteration),
+ /* K4 */ be_nested_str_weak(remove),
+ }),
+ be_str_weak(sort_distinct),
+ &be_const_str_solidified,
+ ( &(const binstruction[53]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x60080010, // 0001 GETGBL R2 G16
+ 0x600C000C, // 0002 GETGBL R3 G12
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x040C0701, // 0005 SUB R3 R3 K1
+ 0x400E0203, // 0006 CONNECT R3 K1 R3
+ 0x7C080200, // 0007 CALL R2 1
+ 0xA8020010, // 0008 EXBLK 0 #001A
+ 0x5C0C0400, // 0009 MOVE R3 R2
+ 0x7C0C0000, // 000A CALL R3 0
+ 0x94100003, // 000B GETIDX R4 R0 R3
+ 0x5C140600, // 000C MOVE R5 R3
+ 0x24180B02, // 000D GT R6 R5 K2
+ 0x781A0008, // 000E JMPF R6 #0018
+ 0x04180B01, // 000F SUB R6 R5 K1
+ 0x94180006, // 0010 GETIDX R6 R0 R6
+ 0x24180C04, // 0011 GT R6 R6 R4
+ 0x781A0004, // 0012 JMPF R6 #0018
+ 0x04180B01, // 0013 SUB R6 R5 K1
+ 0x94180006, // 0014 GETIDX R6 R0 R6
+ 0x98000A06, // 0015 SETIDX R0 R5 R6
+ 0x04140B01, // 0016 SUB R5 R5 K1
+ 0x7001FFF4, // 0017 JMP #000D
+ 0x98000A04, // 0018 SETIDX R0 R5 R4
+ 0x7001FFEE, // 0019 JMP #0009
+ 0x58080003, // 001A LDCONST R2 K3
+ 0xAC080200, // 001B CATCH R2 1 0
+ 0xB0080000, // 001C RAISE 2 R0 R0
+ 0x58080001, // 001D LDCONST R2 K1
+ 0x600C000C, // 001E GETGBL R3 G12
+ 0x5C100000, // 001F MOVE R4 R0
+ 0x7C0C0200, // 0020 CALL R3 1
+ 0x180C0701, // 0021 LE R3 R3 K1
+ 0x780E0000, // 0022 JMPF R3 #0024
+ 0x80040000, // 0023 RET 1 R0
+ 0x940C0102, // 0024 GETIDX R3 R0 K2
+ 0x6010000C, // 0025 GETGBL R4 G12
+ 0x5C140000, // 0026 MOVE R5 R0
+ 0x7C100200, // 0027 CALL R4 1
+ 0x14100404, // 0028 LT R4 R2 R4
+ 0x78120009, // 0029 JMPF R4 #0034
+ 0x94100002, // 002A GETIDX R4 R0 R2
+ 0x1C100803, // 002B EQ R4 R4 R3
+ 0x78120003, // 002C JMPF R4 #0031
+ 0x8C100104, // 002D GETMET R4 R0 K4
+ 0x5C180400, // 002E MOVE R6 R2
+ 0x7C100400, // 002F CALL R4 2
+ 0x70020001, // 0030 JMP #0033
+ 0x940C0002, // 0031 GETIDX R3 R0 R2
+ 0x00080501, // 0032 ADD R2 R2 K1
+ 0x7001FFF0, // 0033 JMP #0025
+ 0x80040000, // 0034 RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: compute_qrcode_content
+********************************************************************/
+be_local_closure(Matter_Device_compute_qrcode_content, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[12]) { /* constants */
+ /* K0 */ be_nested_str_weak(resize),
+ /* K1 */ be_nested_str_weak(setbits),
+ /* K2 */ be_const_int(3),
+ /* K3 */ be_nested_str_weak(vendorid),
+ /* K4 */ be_nested_str_weak(productid),
+ /* K5 */ be_nested_str_weak(discriminator),
+ /* K6 */ be_nested_str_weak(passcode),
+ /* K7 */ be_const_int(134217727),
+ /* K8 */ be_nested_str_weak(MT_X3A),
+ /* K9 */ be_nested_str_weak(matter),
+ /* K10 */ be_nested_str_weak(Base38),
+ /* K11 */ be_nested_str_weak(encode),
+ }),
+ be_str_weak(compute_qrcode_content),
+ &be_const_str_solidified,
+ ( &(const binstruction[40]) { /* code */
+ 0x60040015, // 0000 GETGBL R1 G21
+ 0x7C040000, // 0001 CALL R1 0
+ 0x8C040300, // 0002 GETMET R1 R1 K0
+ 0x540E000A, // 0003 LDINT R3 11
+ 0x7C040400, // 0004 CALL R1 2
+ 0x8C080301, // 0005 GETMET R2 R1 K1
+ 0x58100002, // 0006 LDCONST R4 K2
+ 0x5416000F, // 0007 LDINT R5 16
+ 0x88180103, // 0008 GETMBR R6 R0 K3
+ 0x7C080800, // 0009 CALL R2 4
+ 0x8C080301, // 000A GETMET R2 R1 K1
+ 0x54120012, // 000B LDINT R4 19
+ 0x5416000F, // 000C LDINT R5 16
+ 0x88180104, // 000D GETMBR R6 R0 K4
+ 0x7C080800, // 000E CALL R2 4
+ 0x8C080301, // 000F GETMET R2 R1 K1
+ 0x54120024, // 0010 LDINT R4 37
+ 0x54160007, // 0011 LDINT R5 8
+ 0x541A0003, // 0012 LDINT R6 4
+ 0x7C080800, // 0013 CALL R2 4
+ 0x8C080301, // 0014 GETMET R2 R1 K1
+ 0x5412002C, // 0015 LDINT R4 45
+ 0x5416000B, // 0016 LDINT R5 12
+ 0x88180105, // 0017 GETMBR R6 R0 K5
+ 0x541E0FFE, // 0018 LDINT R7 4095
+ 0x2C180C07, // 0019 AND R6 R6 R7
+ 0x7C080800, // 001A CALL R2 4
+ 0x8C080301, // 001B GETMET R2 R1 K1
+ 0x54120038, // 001C LDINT R4 57
+ 0x5416001A, // 001D LDINT R5 27
+ 0x88180106, // 001E GETMBR R6 R0 K6
+ 0x2C180D07, // 001F AND R6 R6 K7
+ 0x7C080800, // 0020 CALL R2 4
+ 0xB80A1200, // 0021 GETNGBL R2 K9
+ 0x8808050A, // 0022 GETMBR R2 R2 K10
+ 0x8C08050B, // 0023 GETMET R2 R2 K11
+ 0x5C100200, // 0024 MOVE R4 R1
+ 0x7C080400, // 0025 CALL R2 2
+ 0x000A1002, // 0026 ADD R2 K8 R2
+ 0x80040400, // 0027 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_mdns_announce_hostnames
+********************************************************************/
+be_local_closure(Matter_Device_start_mdns_announce_hostnames, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 4, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_start_mdns_announce),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(remove_rule),
+ /* K3 */ be_nested_str_weak(Wifi_X23Connected),
+ /* K4 */ be_nested_str_weak(matter_device_mdns),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x50080000, // 0002 LDBOOL R2 0 0
+ 0x7C000400, // 0003 CALL R0 2
+ 0xB8020200, // 0004 GETNGBL R0 K1
+ 0x8C000102, // 0005 GETMET R0 R0 K2
+ 0x58080003, // 0006 LDCONST R2 K3
+ 0x580C0004, // 0007 LDCONST R3 K4
+ 0x7C000600, // 0008 CALL R0 3
+ 0x80000000, // 0009 RET 0
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_start_mdns_announce),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(remove_rule),
+ /* K3 */ be_nested_str_weak(Eth_X23Connected),
+ /* K4 */ be_nested_str_weak(matter_device_mdns),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x50080200, // 0002 LDBOOL R2 1 0
+ 0x7C000400, // 0003 CALL R0 2
+ 0xB8020200, // 0004 GETNGBL R0 K1
+ 0x8C000102, // 0005 GETMET R0 R0 K2
+ 0x58080003, // 0006 LDCONST R2 K3
+ 0x580C0004, // 0007 LDCONST R3 K4
+ 0x7C000600, // 0008 CALL R0 3
+ 0x80000000, // 0009 RET 0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(wifi),
+ /* K2 */ be_nested_str_weak(up),
+ /* K3 */ be_nested_str_weak(_start_mdns_announce),
+ /* K4 */ be_nested_str_weak(add_rule),
+ /* K5 */ be_nested_str_weak(Wifi_X23Connected),
+ /* K6 */ be_nested_str_weak(eth),
+ /* K7 */ be_nested_str_weak(Eth_X23Connected),
+ }),
+ be_str_weak(start_mdns_announce_hostnames),
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x94040302, // 0003 GETIDX R1 R1 K2
+ 0x78060003, // 0004 JMPF R1 #0009
+ 0x8C040103, // 0005 GETMET R1 R0 K3
+ 0x500C0000, // 0006 LDBOOL R3 0 0
+ 0x7C040400, // 0007 CALL R1 2
+ 0x70020005, // 0008 JMP #000F
+ 0xB8060000, // 0009 GETNGBL R1 K0
+ 0x8C040304, // 000A GETMET R1 R1 K4
+ 0x580C0005, // 000B LDCONST R3 K5
+ 0x84100000, // 000C CLOSURE R4 P0
+ 0x5C140000, // 000D MOVE R5 R0
+ 0x7C040800, // 000E CALL R1 4
+ 0xB8060000, // 000F GETNGBL R1 K0
+ 0x8C040306, // 0010 GETMET R1 R1 K6
+ 0x7C040200, // 0011 CALL R1 1
+ 0x94040302, // 0012 GETIDX R1 R1 K2
+ 0x78060003, // 0013 JMPF R1 #0018
+ 0x8C040103, // 0014 GETMET R1 R0 K3
+ 0x500C0200, // 0015 LDBOOL R3 1 0
+ 0x7C040400, // 0016 CALL R1 2
+ 0x70020005, // 0017 JMP #001E
+ 0xB8060000, // 0018 GETNGBL R1 K0
+ 0x8C040304, // 0019 GETMET R1 R1 K4
+ 0x580C0007, // 001A LDCONST R3 K7
+ 0x84100001, // 001B CLOSURE R4 P1
+ 0x5C140000, // 001C MOVE R5 R0
+ 0x7C040800, // 001D CALL R1 4
+ 0xA0000000, // 001E CLOSE R0
+ 0x80000000, // 001F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: compute_manual_pairing_code
+********************************************************************/
+be_local_closure(Matter_Device_compute_manual_pairing_code, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(discriminator),
+ /* K2 */ be_nested_str_weak(passcode),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(_X251i_X2505i_X2504i),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(Verhoeff),
+ /* K7 */ be_nested_str_weak(checksum),
+ }),
+ be_str_weak(compute_manual_pairing_code),
+ &be_const_str_solidified,
+ ( &(const binstruction[31]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x540E0FFE, // 0002 LDINT R3 4095
+ 0x2C080403, // 0003 AND R2 R2 R3
+ 0x540E0009, // 0004 LDINT R3 10
+ 0x3C080403, // 0005 SHR R2 R2 R3
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x541202FF, // 0007 LDINT R4 768
+ 0x2C0C0604, // 0008 AND R3 R3 R4
+ 0x54120005, // 0009 LDINT R4 6
+ 0x380C0604, // 000A SHL R3 R3 R4
+ 0x88100102, // 000B GETMBR R4 R0 K2
+ 0x54163FFE, // 000C LDINT R5 16383
+ 0x2C100805, // 000D AND R4 R4 R5
+ 0x300C0604, // 000E OR R3 R3 R4
+ 0x88100102, // 000F GETMBR R4 R0 K2
+ 0x5416000D, // 0010 LDINT R5 14
+ 0x3C100805, // 0011 SHR R4 R4 R5
+ 0x8C140303, // 0012 GETMET R5 R1 K3
+ 0x581C0004, // 0013 LDCONST R7 K4
+ 0x5C200400, // 0014 MOVE R8 R2
+ 0x5C240600, // 0015 MOVE R9 R3
+ 0x5C280800, // 0016 MOVE R10 R4
+ 0x7C140A00, // 0017 CALL R5 5
+ 0xB81A0A00, // 0018 GETNGBL R6 K5
+ 0x88180D06, // 0019 GETMBR R6 R6 K6
+ 0x8C180D07, // 001A GETMET R6 R6 K7
+ 0x5C200A00, // 001B MOVE R8 R5
+ 0x7C180400, // 001C CALL R6 2
+ 0x00140A06, // 001D ADD R5 R5 R6
+ 0x80040A00, // 001E RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_commissioning_complete
+********************************************************************/
+be_local_closure(Matter_Device_start_commissioning_complete, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(log),
+ /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X20Commissioning_X20complete_X20_X2A_X2A_X2A),
+ /* K3 */ be_const_int(2),
+ }),
+ be_str_weak(start_commissioning_complete),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x58140003, // 0003 LDCONST R5 K3
+ 0x7C080600, // 0004 CALL R2 3
+ 0x80000000, // 0005 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_commissioning_complete_deferred
+********************************************************************/
+be_local_closure(Matter_Device_start_commissioning_complete_deferred, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 3, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 2]) { /* upvals */
+ be_local_const_upval(1, 0),
+ be_local_const_upval(1, 1),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(start_commissioning_complete),
+ }),
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x68080001, // 0002 GETUPV R2 U1
+ 0x7C000400, // 0003 CALL R0 2
+ 0x80040000, // 0004 RET 1 R0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(set_timer),
+ /* K2 */ be_const_int(0),
+ }),
+ be_str_weak(start_commissioning_complete_deferred),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x84140000, // 0003 CLOSURE R5 P0
+ 0x7C080600, // 0004 CALL R2 3
+ 0xA0000000, // 0005 CLOSE R0
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Device_invoke_request, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(plugins),
+ /* K2 */ be_nested_str_weak(invoke_request),
+ /* K3 */ be_nested_str_weak(status),
+ /* K4 */ be_nested_str_weak(matter),
+ /* K5 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
+ /* K6 */ be_const_int(1),
+ }),
+ be_str_weak(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x58100000, // 0000 LDCONST R4 K0
+ 0x6014000C, // 0001 GETGBL R5 G12
+ 0x88180101, // 0002 GETMBR R6 R0 K1
+ 0x7C140200, // 0003 CALL R5 1
+ 0x14140805, // 0004 LT R5 R4 R5
+ 0x78160011, // 0005 JMPF R5 #0018
+ 0x88140101, // 0006 GETMBR R5 R0 K1
+ 0x94140A04, // 0007 GETIDX R5 R5 R4
+ 0x8C180B02, // 0008 GETMET R6 R5 K2
+ 0x5C200200, // 0009 MOVE R8 R1
+ 0x5C240400, // 000A MOVE R9 R2
+ 0x5C280600, // 000B MOVE R10 R3
+ 0x7C180800, // 000C CALL R6 4
+ 0x4C1C0000, // 000D LDNIL R7
+ 0x201C0C07, // 000E NE R7 R6 R7
+ 0x741E0004, // 000F JMPT R7 #0015
+ 0x881C0703, // 0010 GETMBR R7 R3 K3
+ 0xB8220800, // 0011 GETNGBL R8 K4
+ 0x88201105, // 0012 GETMBR R8 R8 K5
+ 0x201C0E08, // 0013 NE R7 R7 R8
+ 0x781E0000, // 0014 JMPF R7 #0016
+ 0x80040C00, // 0015 RET 1 R6
+ 0x00100906, // 0016 ADD R4 R4 K6
+ 0x7001FFE8, // 0017 JMP #0001
+ 0x80000000, // 0018 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: msg_received
********************************************************************/
@@ -1908,7 +1909,7 @@ be_local_closure(Matter_Device_msg_received, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(msg_handler),
+ /* K0 */ be_nested_str_weak(message_handler),
/* K1 */ be_nested_str_weak(msg_received),
}),
be_str_weak(msg_received),
@@ -2323,33 +2324,261 @@ be_local_closure(Matter_Device_packet_ack, /* name */
/********************************************************************
-** Solidified function: msg_send
+** Solidified function: mdns_announce_op_discovery
********************************************************************/
-be_local_closure(Matter_Device_msg_send, /* name */
+be_local_closure(Matter_Device_mdns_announce_op_discovery, /* name */
be_nested_proto(
- 11, /* nstack */
- 5, /* argc */
+ 15, /* nstack */
+ 2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(send_response),
+ ( &(const bvalue[29]) { /* constants */
+ /* K0 */ be_nested_str_weak(mdns),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(get_deviceid),
+ /* K3 */ be_nested_str_weak(copy),
+ /* K4 */ be_nested_str_weak(reverse),
+ /* K5 */ be_nested_str_weak(get_fabric_compressed),
+ /* K6 */ be_nested_str_weak(tohex),
+ /* K7 */ be_nested_str_weak(_X2D),
+ /* K8 */ be_nested_str_weak(tasmota),
+ /* K9 */ be_nested_str_weak(log),
+ /* K10 */ be_nested_str_weak(MTR_X3A_X20Operational_X20Discovery_X20node_X20_X3D_X20),
+ /* K11 */ be_const_int(2),
+ /* K12 */ be_nested_str_weak(eth),
+ /* K13 */ be_nested_str_weak(find),
+ /* K14 */ be_nested_str_weak(up),
+ /* K15 */ be_nested_str_weak(format),
+ /* K16 */ be_nested_str_weak(MTR_X3A_X20adding_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27_X20ptr_X20to_X20_X60_X25s_X2Elocal_X60),
+ /* K17 */ be_nested_str_weak(hostname_eth),
+ /* K18 */ be_const_int(3),
+ /* K19 */ be_nested_str_weak(add_service),
+ /* K20 */ be_nested_str_weak(_matter),
+ /* K21 */ be_nested_str_weak(_tcp),
+ /* K22 */ be_nested_str_weak(_I),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20adding_X20subtype_X3A_X20),
+ /* K24 */ be_nested_str_weak(add_subtype),
+ /* K25 */ be_nested_str_weak(wifi),
+ /* K26 */ be_nested_str_weak(hostname_wifi),
+ /* K27 */ be_nested_str_weak(MTR_X3A_X20Exception),
+ /* K28 */ be_nested_str_weak(_X7C),
}),
- be_str_weak(msg_send),
+ be_str_weak(mdns_announce_op_discovery),
&be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x88140100, // 0000 GETMBR R5 R0 K0
- 0x8C140B01, // 0001 GETMET R5 R5 K1
- 0x5C1C0200, // 0002 MOVE R7 R1
- 0x5C200400, // 0003 MOVE R8 R2
- 0x5C240600, // 0004 MOVE R9 R3
- 0x5C280800, // 0005 MOVE R10 R4
- 0x7C140A00, // 0006 CALL R5 5
- 0x80040A00, // 0007 RET 1 R5
+ ( &(const binstruction[122]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0xA8020064, // 0002 EXBLK 0 #0068
+ 0x8C100302, // 0003 GETMET R4 R1 K2
+ 0x7C100200, // 0004 CALL R4 1
+ 0x8C100903, // 0005 GETMET R4 R4 K3
+ 0x7C100200, // 0006 CALL R4 1
+ 0x8C100904, // 0007 GETMET R4 R4 K4
+ 0x7C100200, // 0008 CALL R4 1
+ 0x8C140305, // 0009 GETMET R5 R1 K5
+ 0x7C140200, // 000A CALL R5 1
+ 0x8C180B06, // 000B GETMET R6 R5 K6
+ 0x7C180200, // 000C CALL R6 1
+ 0x00180D07, // 000D ADD R6 R6 K7
+ 0x8C1C0906, // 000E GETMET R7 R4 K6
+ 0x7C1C0200, // 000F CALL R7 1
+ 0x00180C07, // 0010 ADD R6 R6 R7
+ 0xB81E1000, // 0011 GETNGBL R7 K8
+ 0x8C1C0F09, // 0012 GETMET R7 R7 K9
+ 0x00261406, // 0013 ADD R9 K10 R6
+ 0x5828000B, // 0014 LDCONST R10 K11
+ 0x7C1C0600, // 0015 CALL R7 3
+ 0xB81E1000, // 0016 GETNGBL R7 K8
+ 0x8C1C0F0C, // 0017 GETMET R7 R7 K12
+ 0x7C1C0200, // 0018 CALL R7 1
+ 0x8C1C0F0D, // 0019 GETMET R7 R7 K13
+ 0x5824000E, // 001A LDCONST R9 K14
+ 0x7C1C0400, // 001B CALL R7 2
+ 0x781E0020, // 001C JMPF R7 #003E
+ 0xB81E1000, // 001D GETNGBL R7 K8
+ 0x8C1C0F09, // 001E GETMET R7 R7 K9
+ 0x8C24070F, // 001F GETMET R9 R3 K15
+ 0x582C0010, // 0020 LDCONST R11 K16
+ 0x5830000C, // 0021 LDCONST R12 K12
+ 0x5C340C00, // 0022 MOVE R13 R6
+ 0x88380111, // 0023 GETMBR R14 R0 K17
+ 0x7C240A00, // 0024 CALL R9 5
+ 0x58280012, // 0025 LDCONST R10 K18
+ 0x7C1C0600, // 0026 CALL R7 3
+ 0x8C1C0513, // 0027 GETMET R7 R2 K19
+ 0x58240014, // 0028 LDCONST R9 K20
+ 0x58280015, // 0029 LDCONST R10 K21
+ 0x542E15A3, // 002A LDINT R11 5540
+ 0x4C300000, // 002B LDNIL R12
+ 0x5C340C00, // 002C MOVE R13 R6
+ 0x88380111, // 002D GETMBR R14 R0 K17
+ 0x7C1C0E00, // 002E CALL R7 7
+ 0x8C1C0B06, // 002F GETMET R7 R5 K6
+ 0x7C1C0200, // 0030 CALL R7 1
+ 0x001E2C07, // 0031 ADD R7 K22 R7
+ 0xB8221000, // 0032 GETNGBL R8 K8
+ 0x8C201109, // 0033 GETMET R8 R8 K9
+ 0x002A2E07, // 0034 ADD R10 K23 R7
+ 0x582C0012, // 0035 LDCONST R11 K18
+ 0x7C200600, // 0036 CALL R8 3
+ 0x8C200518, // 0037 GETMET R8 R2 K24
+ 0x58280014, // 0038 LDCONST R10 K20
+ 0x582C0015, // 0039 LDCONST R11 K21
+ 0x5C300C00, // 003A MOVE R12 R6
+ 0x88340111, // 003B GETMBR R13 R0 K17
+ 0x5C380E00, // 003C MOVE R14 R7
+ 0x7C200C00, // 003D CALL R8 6
+ 0xB81E1000, // 003E GETNGBL R7 K8
+ 0x8C1C0F19, // 003F GETMET R7 R7 K25
+ 0x7C1C0200, // 0040 CALL R7 1
+ 0x8C1C0F0D, // 0041 GETMET R7 R7 K13
+ 0x5824000E, // 0042 LDCONST R9 K14
+ 0x7C1C0400, // 0043 CALL R7 2
+ 0x781E0020, // 0044 JMPF R7 #0066
+ 0xB81E1000, // 0045 GETNGBL R7 K8
+ 0x8C1C0F09, // 0046 GETMET R7 R7 K9
+ 0x8C24070F, // 0047 GETMET R9 R3 K15
+ 0x582C0010, // 0048 LDCONST R11 K16
+ 0x58300019, // 0049 LDCONST R12 K25
+ 0x5C340C00, // 004A MOVE R13 R6
+ 0x8838011A, // 004B GETMBR R14 R0 K26
+ 0x7C240A00, // 004C CALL R9 5
+ 0x58280012, // 004D LDCONST R10 K18
+ 0x7C1C0600, // 004E CALL R7 3
+ 0x8C1C0513, // 004F GETMET R7 R2 K19
+ 0x58240014, // 0050 LDCONST R9 K20
+ 0x58280015, // 0051 LDCONST R10 K21
+ 0x542E15A3, // 0052 LDINT R11 5540
+ 0x4C300000, // 0053 LDNIL R12
+ 0x5C340C00, // 0054 MOVE R13 R6
+ 0x8838011A, // 0055 GETMBR R14 R0 K26
+ 0x7C1C0E00, // 0056 CALL R7 7
+ 0x8C1C0B06, // 0057 GETMET R7 R5 K6
+ 0x7C1C0200, // 0058 CALL R7 1
+ 0x001E2C07, // 0059 ADD R7 K22 R7
+ 0xB8221000, // 005A GETNGBL R8 K8
+ 0x8C201109, // 005B GETMET R8 R8 K9
+ 0x002A2E07, // 005C ADD R10 K23 R7
+ 0x582C0012, // 005D LDCONST R11 K18
+ 0x7C200600, // 005E CALL R8 3
+ 0x8C200518, // 005F GETMET R8 R2 K24
+ 0x58280014, // 0060 LDCONST R10 K20
+ 0x582C0015, // 0061 LDCONST R11 K21
+ 0x5C300C00, // 0062 MOVE R12 R6
+ 0x8834011A, // 0063 GETMBR R13 R0 K26
+ 0x5C380E00, // 0064 MOVE R14 R7
+ 0x7C200C00, // 0065 CALL R8 6
+ 0xA8040001, // 0066 EXBLK 1 1
+ 0x70020010, // 0067 JMP #0079
+ 0xAC100002, // 0068 CATCH R4 0 2
+ 0x7002000D, // 0069 JMP #0078
+ 0xB81A1000, // 006A GETNGBL R6 K8
+ 0x8C180D09, // 006B GETMET R6 R6 K9
+ 0x60200008, // 006C GETGBL R8 G8
+ 0x5C240800, // 006D MOVE R9 R4
+ 0x7C200200, // 006E CALL R8 1
+ 0x00223608, // 006F ADD R8 K27 R8
+ 0x0020111C, // 0070 ADD R8 R8 K28
+ 0x60240008, // 0071 GETGBL R9 G8
+ 0x5C280A00, // 0072 MOVE R10 R5
+ 0x7C240200, // 0073 CALL R9 1
+ 0x00201009, // 0074 ADD R8 R8 R9
+ 0x5824000B, // 0075 LDCONST R9 K11
+ 0x7C180600, // 0076 CALL R6 3
+ 0x70020000, // 0077 JMP #0079
+ 0xB0080000, // 0078 RAISE 2 R0 R0
+ 0x80000000, // 0079 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_udp
+********************************************************************/
+be_local_closure(Matter_Device_start_udp, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(msg_received),
+ }),
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x680C0000, // 0000 GETUPV R3 U0
+ 0x8C0C0700, // 0001 GETMET R3 R3 K0
+ 0x5C140000, // 0002 MOVE R5 R0
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x5C1C0400, // 0004 MOVE R7 R2
+ 0x7C0C0800, // 0005 CALL R3 4
+ 0x80040600, // 0006 RET 1 R3
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(udp_server),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(MTR_X3A_X20starting_X20UDP_X20server_X20on_X20port_X3A_X20),
+ /* K4 */ be_const_int(2),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(UDPServer),
+ /* K7 */ be_nested_str_weak(),
+ /* K8 */ be_nested_str_weak(start),
+ }),
+ be_str_weak(start_udp),
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x780A0000, // 0001 JMPF R2 #0003
+ 0x80000400, // 0002 RET 0
+ 0x4C080000, // 0003 LDNIL R2
+ 0x1C080202, // 0004 EQ R2 R1 R2
+ 0x780A0000, // 0005 JMPF R2 #0007
+ 0x540615A3, // 0006 LDINT R1 5540
+ 0xB80A0200, // 0007 GETNGBL R2 K1
+ 0x8C080502, // 0008 GETMET R2 R2 K2
+ 0x60100008, // 0009 GETGBL R4 G8
+ 0x5C140200, // 000A MOVE R5 R1
+ 0x7C100200, // 000B CALL R4 1
+ 0x00120604, // 000C ADD R4 K3 R4
+ 0x58140004, // 000D LDCONST R5 K4
+ 0x7C080600, // 000E CALL R2 3
+ 0xB80A0A00, // 000F GETNGBL R2 K5
+ 0x8C080506, // 0010 GETMET R2 R2 K6
+ 0x58100007, // 0011 LDCONST R4 K7
+ 0x5C140200, // 0012 MOVE R5 R1
+ 0x7C080600, // 0013 CALL R2 3
+ 0x90020002, // 0014 SETMBR R0 K0 R2
+ 0x88080100, // 0015 GETMBR R2 R0 K0
+ 0x8C080508, // 0016 GETMET R2 R2 K8
+ 0x84100000, // 0017 CLOSURE R4 P0
+ 0x7C080400, // 0018 CALL R2 2
+ 0xA0000000, // 0019 CLOSE R0
+ 0x80000000, // 001A RET 0
})
)
);
@@ -2362,57 +2591,58 @@ be_local_closure(Matter_Device_msg_send, /* name */
be_local_class(Matter_Device,
18,
NULL,
- be_nested_map(49,
+ be_nested_map(50,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(compute_manual_pairing_code, 12), be_const_closure(Matter_Device_compute_manual_pairing_code_closure) },
- { be_const_key_weak(msg_handler, 45), be_const_var(2) },
- { be_const_key_weak(FILENAME, 20), be_nested_str_weak(_matter_device_X2Ejson) },
- { be_const_key_weak(plugins, 40), be_const_var(0) },
- { be_const_key_weak(process_attribute_expansion, -1), be_const_closure(Matter_Device_process_attribute_expansion_closure) },
- { be_const_key_weak(msg_send, -1), be_const_closure(Matter_Device_msg_send_closure) },
- { be_const_key_weak(packet_ack, -1), be_const_closure(Matter_Device_packet_ack_closure) },
- { be_const_key_weak(save_param, 48), be_const_closure(Matter_Device_save_param_closure) },
- { be_const_key_weak(_start_mdns_announce, -1), be_const_closure(Matter_Device__start_mdns_announce_closure) },
- { be_const_key_weak(start_operational_dicovery_deferred, -1), be_const_closure(Matter_Device_start_operational_dicovery_deferred_closure) },
- { be_const_key_weak(ui, 47), be_const_var(4) },
- { be_const_key_weak(w0, -1), be_const_var(15) },
- { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Device_invoke_request_closure) },
- { be_const_key_weak(passcode, 15), be_const_var(12) },
- { be_const_key_weak(start_mdns_announce_hostnames, -1), be_const_closure(Matter_Device_start_mdns_announce_hostnames_closure) },
- { be_const_key_weak(hostname_eth, 31), be_const_var(8) },
- { be_const_key_weak(L, -1), be_const_var(17) },
- { be_const_key_weak(every_second, 8), be_const_closure(Matter_Device_every_second_closure) },
- { be_const_key_weak(VENDOR_ID, -1), be_const_int(65521) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_Device_init_closure) },
- { be_const_key_weak(get_active_endpoints, -1), be_const_closure(Matter_Device_get_active_endpoints_closure) },
- { be_const_key_weak(iterations, 43), be_const_var(13) },
- { be_const_key_weak(commissioning_instance_eth, -1), be_const_var(6) },
- { be_const_key_weak(start_operational_dicovery, 41), be_const_closure(Matter_Device_start_operational_dicovery_closure) },
- { be_const_key_weak(start_commissioning_complete, 16), be_const_closure(Matter_Device_start_commissioning_complete_closure) },
- { be_const_key_weak(start_basic_commissioning, 42), be_const_closure(Matter_Device_start_basic_commissioning_closure) },
- { be_const_key_weak(productid, -1), be_const_var(10) },
- { be_const_key_weak(PRODUCT_ID, -1), be_const_int(32768) },
- { be_const_key_weak(PBKDF_ITERATIONS, 36), be_const_int(1000) },
- { be_const_key_weak(salt, 5), be_const_var(14) },
- { be_const_key_weak(w1, -1), be_const_var(16) },
- { be_const_key_weak(start_commissioning_complete_deferred, -1), be_const_closure(Matter_Device_start_commissioning_complete_deferred_closure) },
- { be_const_key_weak(mdns_announce_op_discovery, 27), be_const_closure(Matter_Device_mdns_announce_op_discovery_closure) },
- { be_const_key_weak(discriminator, -1), be_const_var(11) },
- { be_const_key_weak(commissioning_instance_wifi, -1), be_const_var(5) },
- { be_const_key_weak(start_udp, 34), be_const_closure(Matter_Device_start_udp_closure) },
- { be_const_key_weak(UDP_PORT, -1), be_const_int(5540) },
- { be_const_key_weak(compute_pbkdf, -1), be_const_closure(Matter_Device_compute_pbkdf_closure) },
- { be_const_key_weak(hostname_wifi, -1), be_const_var(7) },
- { be_const_key_weak(udp_server, 2), be_const_var(1) },
- { be_const_key_weak(finish_commissioning, -1), be_const_closure(Matter_Device_finish_commissioning_closure) },
- { be_const_key_weak(compute_qrcode_content, -1), be_const_closure(Matter_Device_compute_qrcode_content_closure) },
- { be_const_key_weak(PASSCODE_DEFAULT, -1), be_const_int(20202021) },
- { be_const_key_weak(vendorid, 44), be_const_var(9) },
- { be_const_key_weak(sessions, -1), be_const_var(3) },
{ be_const_key_weak(mdns_announce_op_discovery_all_sessions, -1), be_const_closure(Matter_Device_mdns_announce_op_discovery_all_sessions_closure) },
- { be_const_key_weak(msg_received, 6), be_const_closure(Matter_Device_msg_received_closure) },
- { be_const_key_weak(stop, -1), be_const_closure(Matter_Device_stop_closure) },
+ { be_const_key_weak(salt, 31), be_const_var(14) },
+ { be_const_key_weak(start_operational_dicovery, -1), be_const_closure(Matter_Device_start_operational_dicovery_closure) },
+ { be_const_key_weak(w1, -1), be_const_var(16) },
+ { be_const_key_weak(L, -1), be_const_var(17) },
+ { be_const_key_weak(init, 42), be_const_closure(Matter_Device_init_closure) },
+ { be_const_key_weak(compute_pbkdf, 12), be_const_closure(Matter_Device_compute_pbkdf_closure) },
+ { be_const_key_weak(ui, 4), be_const_var(4) },
+ { be_const_key_weak(UDP_PORT, -1), be_const_int(5540) },
+ { be_const_key_weak(PASSCODE_DEFAULT, -1), be_const_int(20202021) },
+ { be_const_key_weak(start_operational_dicovery_deferred, 43), be_const_closure(Matter_Device_start_operational_dicovery_deferred_closure) },
+ { be_const_key_weak(productid, -1), be_const_var(10) },
+ { be_const_key_weak(hostname_wifi, -1), be_const_var(7) },
+ { be_const_key_weak(msg_send, -1), be_const_closure(Matter_Device_msg_send_closure) },
+ { be_const_key_weak(finish_commissioning, -1), be_const_closure(Matter_Device_finish_commissioning_closure) },
+ { be_const_key_weak(every_second, 27), be_const_closure(Matter_Device_every_second_closure) },
+ { be_const_key_weak(commissioning_instance_wifi, -1), be_const_var(5) },
+ { be_const_key_weak(stop, 29), be_const_closure(Matter_Device_stop_closure) },
+ { be_const_key_weak(start_basic_commissioning, -1), be_const_closure(Matter_Device_start_basic_commissioning_closure) },
{ be_const_key_weak(load_param, -1), be_const_closure(Matter_Device_load_param_closure) },
+ { be_const_key_weak(udp_server, -1), be_const_var(1) },
+ { be_const_key_weak(plugins, -1), be_const_var(0) },
+ { be_const_key_weak(FILENAME, 26), be_nested_str_weak(_matter_device_X2Ejson) },
+ { be_const_key_weak(process_attribute_expansion, 30), be_const_closure(Matter_Device_process_attribute_expansion_closure) },
+ { be_const_key_weak(PRODUCT_ID, -1), be_const_int(32768) },
+ { be_const_key_weak(iterations, -1), be_const_var(13) },
+ { be_const_key_weak(mdns_announce_op_discovery, 32), be_const_closure(Matter_Device_mdns_announce_op_discovery_closure) },
+ { be_const_key_weak(passcode, -1), be_const_var(12) },
+ { be_const_key_weak(sessions, -1), be_const_var(3) },
+ { be_const_key_weak(compute_qrcode_content, -1), be_const_closure(Matter_Device_compute_qrcode_content_closure) },
+ { be_const_key_weak(packet_ack, -1), be_const_closure(Matter_Device_packet_ack_closure) },
+ { be_const_key_weak(_start_mdns_announce, 36), be_const_closure(Matter_Device__start_mdns_announce_closure) },
+ { be_const_key_weak(vendorid, 45), be_const_var(9) },
+ { be_const_key_weak(discriminator, -1), be_const_var(11) },
+ { be_const_key_weak(w0, -1), be_const_var(15) },
+ { be_const_key_weak(start_commissioning_complete, -1), be_const_closure(Matter_Device_start_commissioning_complete_closure) },
+ { be_const_key_weak(VENDOR_ID, -1), be_const_int(65521) },
+ { be_const_key_weak(get_active_endpoints, 41), be_const_closure(Matter_Device_get_active_endpoints_closure) },
+ { be_const_key_weak(msg_received, -1), be_const_closure(Matter_Device_msg_received_closure) },
+ { be_const_key_weak(start_mdns_announce_hostnames, 40), be_const_closure(Matter_Device_start_mdns_announce_hostnames_closure) },
+ { be_const_key_weak(message_handler, -1), be_const_var(2) },
+ { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Device_invoke_request_closure) },
+ { be_const_key_weak(start_commissioning_complete_deferred, -1), be_const_closure(Matter_Device_start_commissioning_complete_deferred_closure) },
+ { be_const_key_weak(compute_manual_pairing_code, -1), be_const_closure(Matter_Device_compute_manual_pairing_code_closure) },
+ { be_const_key_weak(hostname_eth, -1), be_const_var(8) },
+ { be_const_key_weak(commissioning_instance_eth, 46), be_const_var(6) },
+ { be_const_key_weak(sort_distinct, -1), be_const_static_closure(Matter_Device_sort_distinct_closure) },
+ { be_const_key_weak(start_udp, -1), be_const_closure(Matter_Device_start_udp_closure) },
+ { be_const_key_weak(save_param, 8), be_const_closure(Matter_Device_save_param_closure) },
+ { be_const_key_weak(PBKDF_ITERATIONS, -1), be_const_int(1000) },
})),
be_str_weak(Matter_Device)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
index 1e828f15b..75e7dbe16 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
@@ -4,282 +4,40 @@
\********************************************************************/
#include "be_constobj.h"
-extern const bclass be_class_Matter_Response_container;
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(Matter_Response_container_tostring, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* 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(),
- /* K2 */ be_nested_str_weak(endpoint),
- /* K3 */ be_nested_str_weak(format),
- /* K4 */ be_nested_str_weak(_X5B_X2502X_X5D),
- /* K5 */ be_nested_str_weak(_X5B_X2A_X2A_X5D),
- /* K6 */ be_nested_str_weak(cluster),
- /* K7 */ be_nested_str_weak(_X2504X_X2F),
- /* K8 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2F),
- /* K9 */ be_nested_str_weak(attribute),
- /* K10 */ be_nested_str_weak(_X2504X),
- /* K11 */ be_nested_str_weak(command),
- /* K12 */ be_nested_str_weak(Exception_X3E_X20),
- /* K13 */ be_nested_str_weak(_X2C_X20),
- }),
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[66]) { /* code */
- 0xA8020031, // 0000 EXBLK 0 #0033
- 0xA4060000, // 0001 IMPORT R1 K0
- 0x58080001, // 0002 LDCONST R2 K1
- 0x880C0102, // 0003 GETMBR R3 R0 K2
- 0x4C100000, // 0004 LDNIL R4
- 0x200C0604, // 0005 NE R3 R3 R4
- 0x780E0004, // 0006 JMPF R3 #000C
- 0x8C0C0303, // 0007 GETMET R3 R1 K3
- 0x58140004, // 0008 LDCONST R5 K4
- 0x88180102, // 0009 GETMBR R6 R0 K2
- 0x7C0C0600, // 000A CALL R3 3
- 0x70020000, // 000B JMP #000D
- 0x580C0005, // 000C LDCONST R3 K5
- 0x00080403, // 000D ADD R2 R2 R3
- 0x880C0106, // 000E GETMBR R3 R0 K6
- 0x4C100000, // 000F LDNIL R4
- 0x200C0604, // 0010 NE R3 R3 R4
- 0x780E0004, // 0011 JMPF R3 #0017
- 0x8C0C0303, // 0012 GETMET R3 R1 K3
- 0x58140007, // 0013 LDCONST R5 K7
- 0x88180106, // 0014 GETMBR R6 R0 K6
- 0x7C0C0600, // 0015 CALL R3 3
- 0x70020000, // 0016 JMP #0018
- 0x580C0008, // 0017 LDCONST R3 K8
- 0x00080403, // 0018 ADD R2 R2 R3
- 0x880C0109, // 0019 GETMBR R3 R0 K9
- 0x4C100000, // 001A LDNIL R4
- 0x200C0604, // 001B NE R3 R3 R4
- 0x780E0004, // 001C JMPF R3 #0022
- 0x8C0C0303, // 001D GETMET R3 R1 K3
- 0x5814000A, // 001E LDCONST R5 K10
- 0x88180109, // 001F GETMBR R6 R0 K9
- 0x7C0C0600, // 0020 CALL R3 3
- 0x70020000, // 0021 JMP #0023
- 0x580C0001, // 0022 LDCONST R3 K1
- 0x00080403, // 0023 ADD R2 R2 R3
- 0x880C010B, // 0024 GETMBR R3 R0 K11
- 0x4C100000, // 0025 LDNIL R4
- 0x200C0604, // 0026 NE R3 R3 R4
- 0x780E0004, // 0027 JMPF R3 #002D
- 0x8C0C0303, // 0028 GETMET R3 R1 K3
- 0x5814000A, // 0029 LDCONST R5 K10
- 0x88180109, // 002A GETMBR R6 R0 K9
- 0x7C0C0600, // 002B CALL R3 3
- 0x70020000, // 002C JMP #002E
- 0x580C0001, // 002D LDCONST R3 K1
- 0x00080403, // 002E ADD R2 R2 R3
- 0xA8040001, // 002F EXBLK 1 1
- 0x80040400, // 0030 RET 1 R2
- 0xA8040001, // 0031 EXBLK 1 1
- 0x7002000D, // 0032 JMP #0041
- 0xAC040002, // 0033 CATCH R1 0 2
- 0x7002000A, // 0034 JMP #0040
- 0x600C0008, // 0035 GETGBL R3 G8
- 0x5C100200, // 0036 MOVE R4 R1
- 0x7C0C0200, // 0037 CALL R3 1
- 0x000E1803, // 0038 ADD R3 K12 R3
- 0x000C070D, // 0039 ADD R3 R3 K13
- 0x60100008, // 003A GETGBL R4 G8
- 0x5C140400, // 003B MOVE R5 R2
- 0x7C100200, // 003C CALL R4 1
- 0x000C0604, // 003D ADD R3 R3 R4
- 0x80040600, // 003E RET 1 R3
- 0x70020000, // 003F JMP #0041
- 0xB0080000, // 0040 RAISE 2 R0 R0
- 0x80000000, // 0041 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: Matter_Response_container
-********************************************************************/
-be_local_class(Matter_Response_container,
- 5,
- NULL,
- be_nested_map(6,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(tostring, -1), be_const_closure(Matter_Response_container_tostring_closure) },
- { be_const_key_weak(cluster, 3), be_const_var(1) },
- { be_const_key_weak(command, -1), be_const_var(3) },
- { be_const_key_weak(status, 0), be_const_var(4) },
- { be_const_key_weak(endpoint, -1), be_const_var(0) },
- { be_const_key_weak(attribute, -1), be_const_var(2) },
- })),
- be_str_weak(Matter_Response_container)
-);
-/*******************************************************************/
-
-void be_load_Matter_Response_container_class(bvm *vm) {
- be_pushntvclass(vm, &be_class_Matter_Response_container);
- be_setglobal(vm, "Matter_Response_container");
- be_pop(vm, 1);
-}
-
extern const bclass be_class_Matter_IM;
/********************************************************************
-** Solidified function: process_timed_request
+** Solidified function: send_subscribe_response
********************************************************************/
-be_local_closure(Matter_IM_process_timed_request, /* name */
- be_nested_proto(
- 13, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[26]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TimedRequestMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20TimedRequestMessage_X3D),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(format),
- /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_IM_X20_X20_X20TimedRequest_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K10 */ be_nested_str_weak(timeout),
- /* K11 */ be_nested_str_weak(remote_ip),
- /* K12 */ be_nested_str_weak(remote_port),
- /* K13 */ be_const_int(2),
- /* K14 */ be_nested_str_weak(StatusResponseMessage),
- /* K15 */ be_nested_str_weak(status),
- /* K16 */ be_nested_str_weak(SUCCESS),
- /* K17 */ be_nested_str_weak(build_response),
- /* K18 */ be_const_int(1),
- /* K19 */ be_nested_str_weak(encode),
- /* K20 */ be_nested_str_weak(to_TLV),
- /* K21 */ be_nested_str_weak(encrypt),
- /* K22 */ be_nested_str_weak(responder),
- /* K23 */ be_nested_str_weak(send_response),
- /* K24 */ be_nested_str_weak(raw),
- /* K25 */ be_nested_str_weak(message_counter),
- }),
- be_str_weak(process_timed_request),
- &be_const_str_solidified,
- ( &(const binstruction[52]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0xB8160800, // 000F GETNGBL R5 K4
- 0x8C140B05, // 0010 GETMET R5 R5 K5
- 0x8C1C0708, // 0011 GETMET R7 R3 K8
- 0x58240009, // 0012 LDCONST R9 K9
- 0x8828090A, // 0013 GETMBR R10 R4 K10
- 0x882C030B, // 0014 GETMBR R11 R1 K11
- 0x8830030C, // 0015 GETMBR R12 R1 K12
- 0x7C1C0A00, // 0016 CALL R7 5
- 0x5820000D, // 0017 LDCONST R8 K13
- 0x7C140600, // 0018 CALL R5 3
- 0xB8160200, // 0019 GETNGBL R5 K1
- 0x8C140B0E, // 001A GETMET R5 R5 K14
- 0x7C140200, // 001B CALL R5 1
- 0xB81A0200, // 001C GETNGBL R6 K1
- 0x88180D10, // 001D GETMBR R6 R6 K16
- 0x90161E06, // 001E SETMBR R5 K15 R6
- 0x8C180311, // 001F GETMET R6 R1 K17
- 0x58200012, // 0020 LDCONST R8 K18
- 0x50240200, // 0021 LDBOOL R9 1 0
- 0x7C180600, // 0022 CALL R6 3
- 0x8C1C0D13, // 0023 GETMET R7 R6 K19
- 0x8C240B14, // 0024 GETMET R9 R5 K20
- 0x7C240200, // 0025 CALL R9 1
- 0x8C241313, // 0026 GETMET R9 R9 K19
- 0x7C240200, // 0027 CALL R9 1
- 0x7C1C0400, // 0028 CALL R7 2
- 0x8C1C0D15, // 0029 GETMET R7 R6 K21
- 0x7C1C0200, // 002A CALL R7 1
- 0x881C0116, // 002B GETMBR R7 R0 K22
- 0x8C1C0F17, // 002C GETMET R7 R7 K23
- 0x88240D18, // 002D GETMBR R9 R6 K24
- 0x8828030B, // 002E GETMBR R10 R1 K11
- 0x882C030C, // 002F GETMBR R11 R1 K12
- 0x88300D19, // 0030 GETMBR R12 R6 K25
- 0x7C1C0A00, // 0031 CALL R7 5
- 0x501C0200, // 0032 LDBOOL R7 1 0
- 0x80040E00, // 0033 RET 1 R7
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_status_response
-********************************************************************/
-be_local_closure(Matter_IM_process_status_response, /* name */
+be_local_closure(Matter_IM_send_subscribe_response, /* name */
be_nested_proto(
11, /* nstack */
- 3, /* argc */
+ 4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(findsubval),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(tasmota),
- /* K4 */ be_nested_str_weak(log),
- /* K5 */ be_nested_str_weak(format),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20Status_X20Response_X20_X3D_X200x_X2502X),
- /* K7 */ be_const_int(3),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_SubscribeResponse),
}),
- be_str_weak(process_status_response),
+ be_str_weak(send_subscribe_response),
&be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0x8C100501, // 0001 GETMET R4 R2 K1
- 0x58180002, // 0002 LDCONST R6 K2
- 0x541E00FE, // 0003 LDINT R7 255
- 0x7C100600, // 0004 CALL R4 3
- 0xB8160600, // 0005 GETNGBL R5 K3
- 0x8C140B04, // 0006 GETMET R5 R5 K4
- 0x8C1C0705, // 0007 GETMET R7 R3 K5
- 0x58240006, // 0008 LDCONST R9 K6
- 0x5C280800, // 0009 MOVE R10 R4
- 0x7C1C0600, // 000A CALL R7 3
- 0x58200007, // 000B LDCONST R8 K7
- 0x7C140600, // 000C CALL R5 3
- 0x50140200, // 000D LDBOOL R5 1 0
- 0x80040A00, // 000E RET 1 R5
+ ( &(const binstruction[10]) { /* code */
+ 0x88100100, // 0000 GETMBR R4 R0 K0
+ 0x8C100901, // 0001 GETMET R4 R4 K1
+ 0xB81A0400, // 0002 GETNGBL R6 K2
+ 0x8C180D03, // 0003 GETMET R6 R6 K3
+ 0x5C200200, // 0004 MOVE R8 R1
+ 0x5C240400, // 0005 MOVE R9 R2
+ 0x5C280600, // 0006 MOVE R10 R3
+ 0x7C180800, // 0007 CALL R6 4
+ 0x7C100400, // 0008 CALL R4 2
+ 0x80000000, // 0009 RET 0
})
)
);
@@ -287,55 +45,226 @@ be_local_closure(Matter_IM_process_status_response, /* name */
/********************************************************************
-** Solidified function: every_second
+** Solidified function: process_write_request
********************************************************************/
-be_local_closure(Matter_IM_every_second, /* name */
+be_local_closure(Matter_IM_process_write_request, /* 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: report_data
-********************************************************************/
-be_local_closure(Matter_IM_report_data, /* name */
- be_nested_proto(
- 9, /* nstack */
+ 20, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 19, /* nstack */
+ 5, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 1),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[25]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(get_attribute_name),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(_X20_X28),
+ /* K6 */ be_nested_str_weak(_X29),
+ /* K7 */ be_nested_str_weak(),
+ /* K8 */ be_nested_str_weak(status),
+ /* K9 */ be_nested_str_weak(UNSUPPORTED_WRITE),
+ /* K10 */ be_nested_str_weak(write_attribute),
+ /* K11 */ be_nested_str_weak(SUCCESS),
+ /* K12 */ be_nested_str_weak(AttributeStatusIB),
+ /* K13 */ be_nested_str_weak(path),
+ /* K14 */ be_nested_str_weak(AttributePathIB),
+ /* K15 */ be_nested_str_weak(StatusIB),
+ /* K16 */ be_nested_str_weak(endpoint),
+ /* K17 */ be_nested_str_weak(write_responses),
+ /* K18 */ be_nested_str_weak(push),
+ /* K19 */ be_nested_str_weak(tasmota),
+ /* K20 */ be_nested_str_weak(log),
+ /* K21 */ be_nested_str_weak(format),
+ /* K22 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
+ /* K23 */ be_const_int(2),
+ /* K24 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20IGNORED),
+ }),
+ be_str_weak(write_single_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[96]) { /* code */
+ 0xA4160000, // 0000 IMPORT R5 K0
+ 0xB81A0200, // 0001 GETNGBL R6 K1
+ 0x8C180D02, // 0002 GETMET R6 R6 K2
+ 0x88200503, // 0003 GETMBR R8 R2 K3
+ 0x88240504, // 0004 GETMBR R9 R2 K4
+ 0x7C180600, // 0005 CALL R6 3
+ 0x781A0002, // 0006 JMPF R6 #000A
+ 0x001E0A06, // 0007 ADD R7 K5 R6
+ 0x001C0F06, // 0008 ADD R7 R7 K6
+ 0x70020000, // 0009 JMP #000B
+ 0x581C0007, // 000A LDCONST R7 K7
+ 0x5C180E00, // 000B MOVE R6 R7
+ 0xB81E0200, // 000C GETNGBL R7 K1
+ 0x881C0F09, // 000D GETMBR R7 R7 K9
+ 0x900A1007, // 000E SETMBR R2 K8 R7
+ 0x4C1C0000, // 000F LDNIL R7
+ 0x201C0207, // 0010 NE R7 R1 R7
+ 0x781E0005, // 0011 JMPF R7 #0018
+ 0x8C1C030A, // 0012 GETMET R7 R1 K10
+ 0x68240000, // 0013 GETUPV R9 U0
+ 0x5C280400, // 0014 MOVE R10 R2
+ 0x5C2C0600, // 0015 MOVE R11 R3
+ 0x7C1C0800, // 0016 CALL R7 4
+ 0x70020000, // 0017 JMP #0019
+ 0x4C1C0000, // 0018 LDNIL R7
+ 0x781E0002, // 0019 JMPF R7 #001D
+ 0xB8220200, // 001A GETNGBL R8 K1
+ 0x8820110B, // 001B GETMBR R8 R8 K11
+ 0x900A1008, // 001C SETMBR R2 K8 R8
+ 0x88200508, // 001D GETMBR R8 R2 K8
+ 0x4C240000, // 001E LDNIL R9
+ 0x20201009, // 001F NE R8 R8 R9
+ 0x78220032, // 0020 JMPF R8 #0054
+ 0x78120030, // 0021 JMPF R4 #0053
+ 0xB8220200, // 0022 GETNGBL R8 K1
+ 0x8C20110C, // 0023 GETMET R8 R8 K12
+ 0x7C200200, // 0024 CALL R8 1
+ 0xB8260200, // 0025 GETNGBL R9 K1
+ 0x8C24130E, // 0026 GETMET R9 R9 K14
+ 0x7C240200, // 0027 CALL R9 1
+ 0x90221A09, // 0028 SETMBR R8 K13 R9
+ 0xB8260200, // 0029 GETNGBL R9 K1
+ 0x8C24130F, // 002A GETMET R9 R9 K15
+ 0x7C240200, // 002B CALL R9 1
+ 0x90221009, // 002C SETMBR R8 K8 R9
+ 0x8824110D, // 002D GETMBR R9 R8 K13
+ 0x88280510, // 002E GETMBR R10 R2 K16
+ 0x9026200A, // 002F SETMBR R9 K16 R10
+ 0x8824110D, // 0030 GETMBR R9 R8 K13
+ 0x88280503, // 0031 GETMBR R10 R2 K3
+ 0x9026060A, // 0032 SETMBR R9 K3 R10
+ 0x8824110D, // 0033 GETMBR R9 R8 K13
+ 0x88280504, // 0034 GETMBR R10 R2 K4
+ 0x9026080A, // 0035 SETMBR R9 K4 R10
+ 0x88241108, // 0036 GETMBR R9 R8 K8
+ 0x88280508, // 0037 GETMBR R10 R2 K8
+ 0x9026100A, // 0038 SETMBR R9 K8 R10
+ 0x88240111, // 0039 GETMBR R9 R0 K17
+ 0x8C241312, // 003A GETMET R9 R9 K18
+ 0x5C2C1000, // 003B MOVE R11 R8
+ 0x7C240400, // 003C CALL R9 2
+ 0xB8262600, // 003D GETNGBL R9 K19
+ 0x8C241314, // 003E GETMET R9 R9 K20
+ 0x8C2C0B15, // 003F GETMET R11 R5 K21
+ 0x58340016, // 0040 LDCONST R13 K22
+ 0x60380008, // 0041 GETGBL R14 G8
+ 0x5C3C0400, // 0042 MOVE R15 R2
+ 0x7C380200, // 0043 CALL R14 1
+ 0x5C3C0C00, // 0044 MOVE R15 R6
+ 0x88400508, // 0045 GETMBR R16 R2 K8
+ 0x88440508, // 0046 GETMBR R17 R2 K8
+ 0xB84A0200, // 0047 GETNGBL R18 K1
+ 0x8848250B, // 0048 GETMBR R18 R18 K11
+ 0x1C442212, // 0049 EQ R17 R17 R18
+ 0x78460001, // 004A JMPF R17 #004D
+ 0x5844000B, // 004B LDCONST R17 K11
+ 0x70020000, // 004C JMP #004E
+ 0x58440007, // 004D LDCONST R17 K7
+ 0x7C2C0C00, // 004E CALL R11 6
+ 0x58300017, // 004F LDCONST R12 K23
+ 0x7C240600, // 0050 CALL R9 3
+ 0x50240200, // 0051 LDBOOL R9 1 0
+ 0x80041200, // 0052 RET 1 R9
+ 0x7002000A, // 0053 JMP #005F
+ 0xB8222600, // 0054 GETNGBL R8 K19
+ 0x8C201114, // 0055 GETMET R8 R8 K20
+ 0x8C280B15, // 0056 GETMET R10 R5 K21
+ 0x58300018, // 0057 LDCONST R12 K24
+ 0x60340008, // 0058 GETGBL R13 G8
+ 0x5C380400, // 0059 MOVE R14 R2
+ 0x7C340200, // 005A CALL R13 1
+ 0x5C380C00, // 005B MOVE R14 R6
+ 0x7C280800, // 005C CALL R10 4
+ 0x582C0017, // 005D LDCONST R11 K23
+ 0x7C200600, // 005E CALL R8 3
+ 0x80000000, // 005F RET 0
+ })
+ ),
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 3]) { /* upvals */
+ be_local_const_upval(1, 7),
+ be_local_const_upval(1, 9),
+ be_local_const_upval(1, 13),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x680C0000, // 0000 GETUPV R3 U0
+ 0x68100001, // 0001 GETUPV R4 U1
+ 0x5C140000, // 0002 MOVE R5 R0
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x681C0002, // 0004 GETUPV R7 U2
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C0C0A00, // 0006 CALL R3 5
+ 0x80040600, // 0007 RET 1 R3
+ })
+ ),
+ }),
1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
+ ( &(const bvalue[36]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(ReportDataMessage),
+ /* K2 */ be_nested_str_weak(WriteRequestMessage),
/* K3 */ be_nested_str_weak(from_TLV),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20ReportDataMessage_X3D),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteRequestMessage_X3D),
/* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(suppress_response),
+ /* K9 */ be_nested_str_weak(device),
+ /* K10 */ be_nested_str_weak(get_active_endpoints),
+ /* K11 */ be_nested_str_weak(MTR_X3A_X20IM_X3Awrite_request_X20processing_X20start),
+ /* K12 */ be_nested_str_weak(Path),
+ /* K13 */ be_nested_str_weak(write_requests),
+ /* K14 */ be_nested_str_weak(WriteResponseMessage),
+ /* K15 */ be_nested_str_weak(write_responses),
+ /* K16 */ be_nested_str_weak(path),
+ /* K17 */ be_nested_str_weak(data),
+ /* K18 */ be_nested_str_weak(endpoint),
+ /* K19 */ be_nested_str_weak(cluster),
+ /* K20 */ be_nested_str_weak(attribute),
+ /* K21 */ be_nested_str_weak(status),
+ /* K22 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
+ /* K23 */ be_nested_str_weak(INVALID_ACTION),
+ /* K24 */ be_nested_str_weak(get_attribute_name),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20),
+ /* K26 */ be_nested_str_weak(_X20_X28),
+ /* K27 */ be_nested_str_weak(_X29),
+ /* K28 */ be_nested_str_weak(),
+ /* K29 */ be_const_int(2),
+ /* K30 */ be_nested_str_weak(process_attribute_expansion),
+ /* K31 */ be_nested_str_weak(stop_iteration),
+ /* K32 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessage_X3D),
+ /* K33 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessageTLV_X3D),
+ /* K34 */ be_nested_str_weak(to_TLV),
+ /* K35 */ be_nested_str_weak(send_write_response),
}),
- be_str_weak(report_data),
+ be_str_weak(process_write_request),
&be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
+ ( &(const binstruction[134]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x8C100902, // 0002 GETMET R4 R4 K2
@@ -351,8 +280,125 @@ be_local_closure(Matter_IM_report_data, /* name */
0x001E0C07, // 000C ADD R7 K6 R7
0x58200007, // 000D LDCONST R8 K7
0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
+ 0x88140908, // 000F GETMBR R5 R4 K8
+ 0x88180109, // 0010 GETMBR R6 R0 K9
+ 0x8C180D0A, // 0011 GETMET R6 R6 K10
+ 0x7C180200, // 0012 CALL R6 1
+ 0x841C0000, // 0013 CLOSURE R7 P0
+ 0xB8220800, // 0014 GETNGBL R8 K4
+ 0x8C201105, // 0015 GETMET R8 R8 K5
+ 0x5828000B, // 0016 LDCONST R10 K11
+ 0x542E0003, // 0017 LDINT R11 4
+ 0x7C200600, // 0018 CALL R8 3
+ 0xB8220200, // 0019 GETNGBL R8 K1
+ 0x8C20110C, // 001A GETMET R8 R8 K12
+ 0x7C200200, // 001B CALL R8 1
+ 0x8824090D, // 001C GETMBR R9 R4 K13
+ 0x4C280000, // 001D LDNIL R10
+ 0x2024120A, // 001E NE R9 R9 R10
+ 0x78260062, // 001F JMPF R9 #0083
+ 0xB8260200, // 0020 GETNGBL R9 K1
+ 0x8C24130E, // 0021 GETMET R9 R9 K14
+ 0x7C240200, // 0022 CALL R9 1
+ 0x60280012, // 0023 GETGBL R10 G18
+ 0x7C280000, // 0024 CALL R10 0
+ 0x90261E0A, // 0025 SETMBR R9 K15 R10
+ 0x60280010, // 0026 GETGBL R10 G16
+ 0x882C090D, // 0027 GETMBR R11 R4 K13
+ 0x7C280200, // 0028 CALL R10 1
+ 0xA802003D, // 0029 EXBLK 0 #0068
+ 0x5C2C1400, // 002A MOVE R11 R10
+ 0x7C2C0000, // 002B CALL R11 0
+ 0x88301710, // 002C GETMBR R12 R11 K16
+ 0x88341711, // 002D GETMBR R13 R11 K17
+ 0x88381912, // 002E GETMBR R14 R12 K18
+ 0x9022240E, // 002F SETMBR R8 K18 R14
+ 0x88381913, // 0030 GETMBR R14 R12 K19
+ 0x9022260E, // 0031 SETMBR R8 K19 R14
+ 0x88381914, // 0032 GETMBR R14 R12 K20
+ 0x9022280E, // 0033 SETMBR R8 K20 R14
+ 0xB83A0200, // 0034 GETNGBL R14 K1
+ 0x88381D16, // 0035 GETMBR R14 R14 K22
+ 0x90222A0E, // 0036 SETMBR R8 K21 R14
+ 0x88381113, // 0037 GETMBR R14 R8 K19
+ 0x4C3C0000, // 0038 LDNIL R15
+ 0x1C381C0F, // 0039 EQ R14 R14 R15
+ 0x743A0003, // 003A JMPT R14 #003F
+ 0x88381114, // 003B GETMBR R14 R8 K20
+ 0x4C3C0000, // 003C LDNIL R15
+ 0x1C381C0F, // 003D EQ R14 R14 R15
+ 0x783A000A, // 003E JMPF R14 #004A
+ 0xB83A0200, // 003F GETNGBL R14 K1
+ 0x88381D17, // 0040 GETMBR R14 R14 K23
+ 0x90222A0E, // 0041 SETMBR R8 K21 R14
+ 0x5C380E00, // 0042 MOVE R14 R7
+ 0x5C3C1200, // 0043 MOVE R15 R9
+ 0x4C400000, // 0044 LDNIL R16
+ 0x5C441000, // 0045 MOVE R17 R8
+ 0x4C480000, // 0046 LDNIL R18
+ 0x504C0200, // 0047 LDBOOL R19 1 0
+ 0x7C380A00, // 0048 CALL R14 5
+ 0x7001FFDF, // 0049 JMP #002A
+ 0x88381112, // 004A GETMBR R14 R8 K18
+ 0x4C3C0000, // 004B LDNIL R15
+ 0x1C381C0F, // 004C EQ R14 R14 R15
+ 0x783A0012, // 004D JMPF R14 #0061
+ 0xB83A0200, // 004E GETNGBL R14 K1
+ 0x8C381D18, // 004F GETMET R14 R14 K24
+ 0x88401113, // 0050 GETMBR R16 R8 K19
+ 0x88441114, // 0051 GETMBR R17 R8 K20
+ 0x7C380600, // 0052 CALL R14 3
+ 0xB83E0800, // 0053 GETNGBL R15 K4
+ 0x8C3C1F05, // 0054 GETMET R15 R15 K5
+ 0x60440008, // 0055 GETGBL R17 G8
+ 0x5C481000, // 0056 MOVE R18 R8
+ 0x7C440200, // 0057 CALL R17 1
+ 0x00463211, // 0058 ADD R17 K25 R17
+ 0x783A0002, // 0059 JMPF R14 #005D
+ 0x004A340E, // 005A ADD R18 K26 R14
+ 0x0048251B, // 005B ADD R18 R18 K27
+ 0x70020000, // 005C JMP #005E
+ 0x5848001C, // 005D LDCONST R18 K28
+ 0x00442212, // 005E ADD R17 R17 R18
+ 0x5848001D, // 005F LDCONST R18 K29
+ 0x7C3C0600, // 0060 CALL R15 3
+ 0x88380109, // 0061 GETMBR R14 R0 K9
+ 0x8C381D1E, // 0062 GETMET R14 R14 K30
+ 0x5C401000, // 0063 MOVE R16 R8
+ 0x84440001, // 0064 CLOSURE R17 P1
+ 0x7C380600, // 0065 CALL R14 3
+ 0xA0280000, // 0066 CLOSE R10
+ 0x7001FFC1, // 0067 JMP #002A
+ 0x5828001F, // 0068 LDCONST R10 K31
+ 0xAC280200, // 0069 CATCH R10 1 0
+ 0xB0080000, // 006A RAISE 2 R0 R0
+ 0xB82A0800, // 006B GETNGBL R10 K4
+ 0x8C281505, // 006C GETMET R10 R10 K5
+ 0x60300008, // 006D GETGBL R12 G8
+ 0x5C341200, // 006E MOVE R13 R9
+ 0x7C300200, // 006F CALL R12 1
+ 0x0032400C, // 0070 ADD R12 K32 R12
+ 0x54360003, // 0071 LDINT R13 4
+ 0x7C280600, // 0072 CALL R10 3
+ 0xB82A0800, // 0073 GETNGBL R10 K4
+ 0x8C281505, // 0074 GETMET R10 R10 K5
+ 0x60300008, // 0075 GETGBL R12 G8
+ 0x8C341322, // 0076 GETMET R13 R9 K34
+ 0x7C340200, // 0077 CALL R13 1
+ 0x7C300200, // 0078 CALL R12 1
+ 0x0032420C, // 0079 ADD R12 K33 R12
+ 0x58340007, // 007A LDCONST R13 K7
+ 0x7C280600, // 007B CALL R10 3
+ 0x5C280A00, // 007C MOVE R10 R5
+ 0x742A0003, // 007D JMPT R10 #0082
+ 0x8C280123, // 007E GETMET R10 R0 K35
+ 0x5C300200, // 007F MOVE R12 R1
+ 0x5C341200, // 0080 MOVE R13 R9
+ 0x7C280600, // 0081 CALL R10 3
+ 0xA0240000, // 0082 CLOSE R9
+ 0x50240200, // 0083 LDBOOL R9 1 0
+ 0xA0000000, // 0084 CLOSE R0
+ 0x80041200, // 0085 RET 1 R9
})
)
);
@@ -360,60 +406,11 @@ be_local_closure(Matter_IM_report_data, /* name */
/********************************************************************
-** Solidified function: process_invoke_response
+** Solidified function: _inner_process_read_request
********************************************************************/
-be_local_closure(Matter_IM_process_invoke_response, /* name */
+be_local_closure(Matter_IM__inner_process_read_request, /* name */
be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(InvokeResponseMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20InvokeResponseMessage_X3D),
- /* K7 */ be_const_int(3),
- }),
- be_str_weak(process_invoke_response),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_read_request
-********************************************************************/
-be_local_closure(Matter_IM_process_read_request, /* name */
- be_nested_proto(
- 15, /* nstack */
+ 14, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@@ -455,19 +452,19 @@ be_local_closure(Matter_IM_process_read_request, /* name */
/* K20 */ be_nested_str_weak(tasmota),
/* K21 */ be_nested_str_weak(log),
/* K22 */ be_nested_str_weak(format),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X25s_X25s_X20_X2D_X20_X25s),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20_X25s_X25s_X20_X2D_X20_X25s),
/* K24 */ be_const_int(2),
/* K25 */ be_nested_str_weak(status),
/* K26 */ be_nested_str_weak(attribute_status),
/* K27 */ be_nested_str_weak(AttributeStatusIB),
/* K28 */ be_nested_str_weak(StatusIB),
- /* K29 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
+ /* K29 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
/* K30 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
- /* K31 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X25s_X25s_X20_X2D_X20IGNORED),
+ /* K31 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20_X25s_X25s_X20_X2D_X20IGNORED),
}),
be_str_weak(read_single_attribute),
&be_const_str_solidified,
- ( &(const binstruction[150]) { /* code */
+ ( &(const binstruction[152]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0xB8160200, // 0001 GETNGBL R5 K1
0x8C140B02, // 0002 GETMET R5 R5 K2
@@ -540,7 +537,7 @@ be_local_closure(Matter_IM_process_read_request, /* name */
0x7C200600, // 0045 CALL R8 3
0x50200200, // 0046 LDBOOL R8 1 0
0x80041000, // 0047 RET 1 R8
- 0x7002004B, // 0048 JMP #0095
+ 0x7002004D, // 0048 JMP #0097
0x881C0519, // 0049 GETMBR R7 R2 K25
0x4C200000, // 004A LDNIL R8
0x201C0E08, // 004B NE R7 R7 R8
@@ -605,7 +602,7 @@ be_local_closure(Matter_IM_process_read_request, /* name */
0x7C200600, // 0086 CALL R8 3
0x50200200, // 0087 LDBOOL R8 1 0
0x80041000, // 0088 RET 1 R8
- 0x7002000A, // 0089 JMP #0095
+ 0x7002000C, // 0089 JMP #0097
0xB81E2800, // 008A GETNGBL R7 K20
0x8C1C0F15, // 008B GETMET R7 R7 K21
0x8C240916, // 008C GETMET R9 R4 K22
@@ -617,7 +614,9 @@ be_local_closure(Matter_IM_process_read_request, /* name */
0x7C240800, // 0092 CALL R9 4
0x58280018, // 0093 LDCONST R10 K24
0x7C1C0600, // 0094 CALL R7 3
- 0x80000000, // 0095 RET 0
+ 0x501C0000, // 0095 LDBOOL R7 0 0
+ 0x80040E00, // 0096 RET 1 R7
+ 0x80000000, // 0097 RET 0
})
),
be_nested_proto(
@@ -627,7 +626,7 @@ be_local_closure(Matter_IM_process_read_request, /* name */
1, /* has upvals */
( &(const bupvaldesc[ 2]) { /* upvals */
be_local_const_upval(1, 4),
- be_local_const_upval(1, 7),
+ be_local_const_upval(1, 6),
}),
0, /* has sup protos */
NULL, /* no sub protos */
@@ -647,166 +646,141 @@ be_local_closure(Matter_IM_process_read_request, /* name */
),
}),
1, /* has constants */
- ( &(const bvalue[30]) { /* constants */
+ ( &(const bvalue[26]) { /* constants */
/* K0 */ be_nested_str_weak(device),
/* K1 */ be_nested_str_weak(get_active_endpoints),
- /* K2 */ be_nested_str_weak(tasmota),
- /* K3 */ be_nested_str_weak(log),
- /* K4 */ be_nested_str_weak(MTR_X3A_X20IM_X3Aread_request_X20processing_X20start),
- /* K5 */ be_const_int(3),
- /* K6 */ be_nested_str_weak(matter),
- /* K7 */ be_nested_str_weak(Response_container),
- /* K8 */ be_nested_str_weak(ReadRequestMessage),
- /* K9 */ be_nested_str_weak(from_TLV),
- /* K10 */ be_nested_str_weak(attributes_requests),
- /* K11 */ be_nested_str_weak(ReportDataMessage),
- /* K12 */ be_nested_str_weak(attribute_reports),
- /* K13 */ be_nested_str_weak(endpoint),
- /* K14 */ be_nested_str_weak(cluster),
- /* K15 */ be_nested_str_weak(attribute),
- /* K16 */ be_nested_str_weak(status),
- /* K17 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
- /* K18 */ be_nested_str_weak(get_attribute_name),
- /* K19 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20),
- /* K20 */ be_nested_str_weak(_X20_X28),
- /* K21 */ be_nested_str_weak(_X29),
- /* K22 */ be_nested_str_weak(),
- /* K23 */ be_const_int(2),
- /* K24 */ be_nested_str_weak(process_attribute_expansion),
- /* K25 */ be_nested_str_weak(stop_iteration),
- /* K26 */ be_nested_str_weak(MTR_X3A_X20ReportDataMessage_X3D),
- /* K27 */ be_nested_str_weak(MTR_X3A_X20ReportDataMessageTLV_X3D),
- /* K28 */ be_nested_str_weak(to_TLV),
- /* K29 */ be_nested_str_weak(send_attr_report),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(Path),
+ /* K4 */ be_nested_str_weak(ReportDataMessage),
+ /* K5 */ be_nested_str_weak(attribute_reports),
+ /* K6 */ be_nested_str_weak(attributes_requests),
+ /* K7 */ be_nested_str_weak(endpoint),
+ /* K8 */ be_nested_str_weak(cluster),
+ /* K9 */ be_nested_str_weak(attribute),
+ /* K10 */ be_nested_str_weak(status),
+ /* K11 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
+ /* K12 */ be_nested_str_weak(get_attribute_name),
+ /* K13 */ be_nested_str_weak(tasmota),
+ /* K14 */ be_nested_str_weak(log),
+ /* K15 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20),
+ /* K16 */ be_nested_str_weak(_X20_X28),
+ /* K17 */ be_nested_str_weak(_X29),
+ /* K18 */ be_nested_str_weak(),
+ /* K19 */ be_const_int(2),
+ /* K20 */ be_nested_str_weak(process_attribute_expansion),
+ /* K21 */ be_nested_str_weak(stop_iteration),
+ /* K22 */ be_nested_str_weak(MTR_X3A_X20ReportDataMessage_X3D),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20ReportDataMessageTLV_X3D),
+ /* K24 */ be_nested_str_weak(to_TLV),
+ /* K25 */ be_const_int(3),
}),
- be_str_weak(process_read_request),
+ be_str_weak(_inner_process_read_request),
&be_const_str_solidified,
- ( &(const binstruction[125]) { /* code */
+ ( &(const binstruction[104]) { /* code */
0x880C0100, // 0000 GETMBR R3 R0 K0
0x8C0C0701, // 0001 GETMET R3 R3 K1
0x7C0C0200, // 0002 CALL R3 1
0x84100000, // 0003 CLOSURE R4 P0
0xB8160400, // 0004 GETNGBL R5 K2
0x8C140B03, // 0005 GETMET R5 R5 K3
- 0x581C0004, // 0006 LDCONST R7 K4
- 0x58200005, // 0007 LDCONST R8 K5
- 0x7C140600, // 0008 CALL R5 3
- 0xB8160C00, // 0009 GETNGBL R5 K6
- 0x8C140B07, // 000A GETMET R5 R5 K7
- 0x7C140200, // 000B CALL R5 1
- 0xB81A0C00, // 000C GETNGBL R6 K6
- 0x8C180D08, // 000D GETMET R6 R6 K8
- 0x7C180200, // 000E CALL R6 1
- 0x8C180D09, // 000F GETMET R6 R6 K9
- 0x5C200400, // 0010 MOVE R8 R2
- 0x7C180400, // 0011 CALL R6 2
- 0x881C0D0A, // 0012 GETMBR R7 R6 K10
- 0x4C200000, // 0013 LDNIL R8
- 0x201C0E08, // 0014 NE R7 R7 R8
- 0x781E0063, // 0015 JMPF R7 #007A
- 0xB81E0C00, // 0016 GETNGBL R7 K6
- 0x8C1C0F0B, // 0017 GETMET R7 R7 K11
- 0x7C1C0200, // 0018 CALL R7 1
- 0x60200012, // 0019 GETGBL R8 G18
- 0x7C200000, // 001A CALL R8 0
- 0x901E1808, // 001B SETMBR R7 K12 R8
- 0x60200010, // 001C GETGBL R8 G16
- 0x88240D0A, // 001D GETMBR R9 R6 K10
- 0x7C200200, // 001E CALL R8 1
- 0xA8020040, // 001F EXBLK 0 #0061
- 0x5C241000, // 0020 MOVE R9 R8
- 0x7C240000, // 0021 CALL R9 0
- 0x8828130D, // 0022 GETMBR R10 R9 K13
- 0x90161A0A, // 0023 SETMBR R5 K13 R10
- 0x8828130E, // 0024 GETMBR R10 R9 K14
- 0x90161C0A, // 0025 SETMBR R5 K14 R10
- 0x8828130F, // 0026 GETMBR R10 R9 K15
- 0x90161E0A, // 0027 SETMBR R5 K15 R10
- 0xB82A0C00, // 0028 GETNGBL R10 K6
- 0x88281511, // 0029 GETMBR R10 R10 K17
- 0x9016200A, // 002A SETMBR R5 K16 R10
- 0x88280B0D, // 002B GETMBR R10 R5 K13
- 0x4C2C0000, // 002C LDNIL R11
- 0x1C28140B, // 002D EQ R10 R10 R11
- 0x742A0007, // 002E JMPT R10 #0037
- 0x88280B0E, // 002F GETMBR R10 R5 K14
- 0x4C2C0000, // 0030 LDNIL R11
- 0x1C28140B, // 0031 EQ R10 R10 R11
- 0x742A0003, // 0032 JMPT R10 #0037
- 0x88280B0F, // 0033 GETMBR R10 R5 K15
- 0x4C2C0000, // 0034 LDNIL R11
- 0x1C28140B, // 0035 EQ R10 R10 R11
- 0x782A0023, // 0036 JMPF R10 #005B
- 0x88280B0E, // 0037 GETMBR R10 R5 K14
- 0x4C2C0000, // 0038 LDNIL R11
- 0x2028140B, // 0039 NE R10 R10 R11
- 0x782A0017, // 003A JMPF R10 #0053
- 0x88280B0F, // 003B GETMBR R10 R5 K15
- 0x4C2C0000, // 003C LDNIL R11
- 0x2028140B, // 003D NE R10 R10 R11
- 0x782A0013, // 003E JMPF R10 #0053
- 0xB82A0C00, // 003F GETNGBL R10 K6
- 0x8C281512, // 0040 GETMET R10 R10 K18
- 0x88300B0E, // 0041 GETMBR R12 R5 K14
- 0x88340B0F, // 0042 GETMBR R13 R5 K15
- 0x7C280600, // 0043 CALL R10 3
- 0xB82E0400, // 0044 GETNGBL R11 K2
- 0x8C2C1703, // 0045 GETMET R11 R11 K3
- 0x60340008, // 0046 GETGBL R13 G8
- 0x5C380A00, // 0047 MOVE R14 R5
- 0x7C340200, // 0048 CALL R13 1
- 0x0036260D, // 0049 ADD R13 K19 R13
- 0x782A0002, // 004A JMPF R10 #004E
- 0x003A280A, // 004B ADD R14 K20 R10
- 0x00381D15, // 004C ADD R14 R14 K21
- 0x70020000, // 004D JMP #004F
- 0x58380016, // 004E LDCONST R14 K22
- 0x00341A0E, // 004F ADD R13 R13 R14
- 0x58380017, // 0050 LDCONST R14 K23
- 0x7C2C0600, // 0051 CALL R11 3
- 0x70020007, // 0052 JMP #005B
- 0xB82A0400, // 0053 GETNGBL R10 K2
- 0x8C281503, // 0054 GETMET R10 R10 K3
- 0x60300008, // 0055 GETGBL R12 G8
- 0x5C340A00, // 0056 MOVE R13 R5
- 0x7C300200, // 0057 CALL R12 1
- 0x0032260C, // 0058 ADD R12 K19 R12
- 0x58340017, // 0059 LDCONST R13 K23
- 0x7C280600, // 005A CALL R10 3
- 0x88280100, // 005B GETMBR R10 R0 K0
- 0x8C281518, // 005C GETMET R10 R10 K24
- 0x5C300A00, // 005D MOVE R12 R5
- 0x84340001, // 005E CLOSURE R13 P1
- 0x7C280600, // 005F CALL R10 3
- 0x7001FFBE, // 0060 JMP #0020
- 0x58200019, // 0061 LDCONST R8 K25
- 0xAC200200, // 0062 CATCH R8 1 0
- 0xB0080000, // 0063 RAISE 2 R0 R0
- 0xB8220400, // 0064 GETNGBL R8 K2
- 0x8C201103, // 0065 GETMET R8 R8 K3
- 0x60280008, // 0066 GETGBL R10 G8
- 0x5C2C0E00, // 0067 MOVE R11 R7
- 0x7C280200, // 0068 CALL R10 1
- 0x002A340A, // 0069 ADD R10 K26 R10
- 0x582C0005, // 006A LDCONST R11 K5
- 0x7C200600, // 006B CALL R8 3
- 0xB8220400, // 006C GETNGBL R8 K2
- 0x8C201103, // 006D GETMET R8 R8 K3
- 0x60280008, // 006E GETGBL R10 G8
- 0x8C2C0F1C, // 006F GETMET R11 R7 K28
- 0x7C2C0200, // 0070 CALL R11 1
- 0x7C280200, // 0071 CALL R10 1
- 0x002A360A, // 0072 ADD R10 K27 R10
- 0x582C0005, // 0073 LDCONST R11 K5
- 0x7C200600, // 0074 CALL R8 3
- 0x8C20011D, // 0075 GETMET R8 R0 K29
- 0x5C280200, // 0076 MOVE R10 R1
- 0x5C2C0E00, // 0077 MOVE R11 R7
- 0x7C200600, // 0078 CALL R8 3
- 0xA01C0000, // 0079 CLOSE R7
- 0x501C0200, // 007A LDBOOL R7 1 0
- 0xA0000000, // 007B CLOSE R0
- 0x80040E00, // 007C RET 1 R7
+ 0x7C140200, // 0006 CALL R5 1
+ 0xB81A0400, // 0007 GETNGBL R6 K2
+ 0x8C180D04, // 0008 GETMET R6 R6 K4
+ 0x7C180200, // 0009 CALL R6 1
+ 0x601C0012, // 000A GETGBL R7 G18
+ 0x7C1C0000, // 000B CALL R7 0
+ 0x901A0A07, // 000C SETMBR R6 K5 R7
+ 0x601C0010, // 000D GETGBL R7 G16
+ 0x88200506, // 000E GETMBR R8 R2 K6
+ 0x7C1C0200, // 000F CALL R7 1
+ 0xA8020040, // 0010 EXBLK 0 #0052
+ 0x5C200E00, // 0011 MOVE R8 R7
+ 0x7C200000, // 0012 CALL R8 0
+ 0x88241107, // 0013 GETMBR R9 R8 K7
+ 0x90160E09, // 0014 SETMBR R5 K7 R9
+ 0x88241108, // 0015 GETMBR R9 R8 K8
+ 0x90161009, // 0016 SETMBR R5 K8 R9
+ 0x88241109, // 0017 GETMBR R9 R8 K9
+ 0x90161209, // 0018 SETMBR R5 K9 R9
+ 0xB8260400, // 0019 GETNGBL R9 K2
+ 0x8824130B, // 001A GETMBR R9 R9 K11
+ 0x90161409, // 001B SETMBR R5 K10 R9
+ 0x88240B07, // 001C GETMBR R9 R5 K7
+ 0x4C280000, // 001D LDNIL R10
+ 0x1C24120A, // 001E EQ R9 R9 R10
+ 0x74260007, // 001F JMPT R9 #0028
+ 0x88240B08, // 0020 GETMBR R9 R5 K8
+ 0x4C280000, // 0021 LDNIL R10
+ 0x1C24120A, // 0022 EQ R9 R9 R10
+ 0x74260003, // 0023 JMPT R9 #0028
+ 0x88240B09, // 0024 GETMBR R9 R5 K9
+ 0x4C280000, // 0025 LDNIL R10
+ 0x1C24120A, // 0026 EQ R9 R9 R10
+ 0x78260023, // 0027 JMPF R9 #004C
+ 0x88240B08, // 0028 GETMBR R9 R5 K8
+ 0x4C280000, // 0029 LDNIL R10
+ 0x2024120A, // 002A NE R9 R9 R10
+ 0x78260017, // 002B JMPF R9 #0044
+ 0x88240B09, // 002C GETMBR R9 R5 K9
+ 0x4C280000, // 002D LDNIL R10
+ 0x2024120A, // 002E NE R9 R9 R10
+ 0x78260013, // 002F JMPF R9 #0044
+ 0xB8260400, // 0030 GETNGBL R9 K2
+ 0x8C24130C, // 0031 GETMET R9 R9 K12
+ 0x882C0B08, // 0032 GETMBR R11 R5 K8
+ 0x88300B09, // 0033 GETMBR R12 R5 K9
+ 0x7C240600, // 0034 CALL R9 3
+ 0xB82A1A00, // 0035 GETNGBL R10 K13
+ 0x8C28150E, // 0036 GETMET R10 R10 K14
+ 0x60300008, // 0037 GETGBL R12 G8
+ 0x5C340A00, // 0038 MOVE R13 R5
+ 0x7C300200, // 0039 CALL R12 1
+ 0x00321E0C, // 003A ADD R12 K15 R12
+ 0x78260002, // 003B JMPF R9 #003F
+ 0x00362009, // 003C ADD R13 K16 R9
+ 0x00341B11, // 003D ADD R13 R13 K17
+ 0x70020000, // 003E JMP #0040
+ 0x58340012, // 003F LDCONST R13 K18
+ 0x0030180D, // 0040 ADD R12 R12 R13
+ 0x58340013, // 0041 LDCONST R13 K19
+ 0x7C280600, // 0042 CALL R10 3
+ 0x70020007, // 0043 JMP #004C
+ 0xB8261A00, // 0044 GETNGBL R9 K13
+ 0x8C24130E, // 0045 GETMET R9 R9 K14
+ 0x602C0008, // 0046 GETGBL R11 G8
+ 0x5C300A00, // 0047 MOVE R12 R5
+ 0x7C2C0200, // 0048 CALL R11 1
+ 0x002E1E0B, // 0049 ADD R11 K15 R11
+ 0x58300013, // 004A LDCONST R12 K19
+ 0x7C240600, // 004B CALL R9 3
+ 0x88240100, // 004C GETMBR R9 R0 K0
+ 0x8C241314, // 004D GETMET R9 R9 K20
+ 0x5C2C0A00, // 004E MOVE R11 R5
+ 0x84300001, // 004F CLOSURE R12 P1
+ 0x7C240600, // 0050 CALL R9 3
+ 0x7001FFBE, // 0051 JMP #0011
+ 0x581C0015, // 0052 LDCONST R7 K21
+ 0xAC1C0200, // 0053 CATCH R7 1 0
+ 0xB0080000, // 0054 RAISE 2 R0 R0
+ 0xB81E1A00, // 0055 GETNGBL R7 K13
+ 0x8C1C0F0E, // 0056 GETMET R7 R7 K14
+ 0x60240008, // 0057 GETGBL R9 G8
+ 0x5C280C00, // 0058 MOVE R10 R6
+ 0x7C240200, // 0059 CALL R9 1
+ 0x00262C09, // 005A ADD R9 K22 R9
+ 0x542A0003, // 005B LDINT R10 4
+ 0x7C1C0600, // 005C CALL R7 3
+ 0xB81E1A00, // 005D GETNGBL R7 K13
+ 0x8C1C0F0E, // 005E GETMET R7 R7 K14
+ 0x60240008, // 005F GETGBL R9 G8
+ 0x8C280D18, // 0060 GETMET R10 R6 K24
+ 0x7C280200, // 0061 CALL R10 1
+ 0x7C240200, // 0062 CALL R9 1
+ 0x00262E09, // 0063 ADD R9 K23 R9
+ 0x58280019, // 0064 LDCONST R10 K25
+ 0x7C1C0600, // 0065 CALL R7 3
+ 0xA0000000, // 0066 CLOSE R0
+ 0x80040C00, // 0067 RET 1 R6
})
)
);
@@ -814,9 +788,81 @@ be_local_closure(Matter_IM_process_read_request, /* name */
/********************************************************************
-** Solidified function: process_write_request
+** Solidified function: process_timed_request
********************************************************************/
-be_local_closure(Matter_IM_process_write_request, /* name */
+be_local_closure(Matter_IM_process_timed_request, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TimedRequestMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20TimedRequestMessage_X3D),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(format),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20TimedRequest_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K10 */ be_nested_str_weak(timeout),
+ /* K11 */ be_nested_str_weak(remote_ip),
+ /* K12 */ be_nested_str_weak(remote_port),
+ /* K13 */ be_const_int(2),
+ /* K14 */ be_nested_str_weak(send_status),
+ /* K15 */ be_nested_str_weak(SUCCESS),
+ }),
+ be_str_weak(process_timed_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0xB8160800, // 000F GETNGBL R5 K4
+ 0x8C140B05, // 0010 GETMET R5 R5 K5
+ 0x8C1C0708, // 0011 GETMET R7 R3 K8
+ 0x58240009, // 0012 LDCONST R9 K9
+ 0x8828090A, // 0013 GETMBR R10 R4 K10
+ 0x882C030B, // 0014 GETMBR R11 R1 K11
+ 0x8830030C, // 0015 GETMBR R12 R1 K12
+ 0x7C1C0A00, // 0016 CALL R7 5
+ 0x5820000D, // 0017 LDCONST R8 K13
+ 0x7C140600, // 0018 CALL R5 3
+ 0x8C14010E, // 0019 GETMET R5 R0 K14
+ 0x5C1C0200, // 001A MOVE R7 R1
+ 0xB8220200, // 001B GETNGBL R8 K1
+ 0x8820110F, // 001C GETMBR R8 R8 K15
+ 0x7C140600, // 001D CALL R5 3
+ 0x50140200, // 001E LDBOOL R5 1 0
+ 0x80040A00, // 001F RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_write_response
+********************************************************************/
+be_local_closure(Matter_IM_process_write_response, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
@@ -829,14 +875,14 @@ be_local_closure(Matter_IM_process_write_request, /* name */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(WriteRequestMessage),
+ /* K2 */ be_nested_str_weak(WriteResponseMessage),
/* K3 */ be_nested_str_weak(from_TLV),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteRequestMessage_X3D),
- /* K7 */ be_const_int(3),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteResponseMessage_X3D),
+ /* K7 */ be_const_int(2),
}),
- be_str_weak(process_write_request),
+ be_str_weak(process_write_response),
&be_const_str_solidified,
( &(const binstruction[17]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
@@ -863,11 +909,11 @@ be_local_closure(Matter_IM_process_write_request, /* name */
/********************************************************************
-** Solidified function: process_invoke_request
+** Solidified function: send_write_response
********************************************************************/
-be_local_closure(Matter_IM_process_invoke_request, /* name */
+be_local_closure(Matter_IM_send_write_response, /* name */
be_nested_proto(
- 18, /* nstack */
+ 9, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@@ -875,305 +921,24 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[52]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(MTR_X3A_X20IM_X3Ainvoke_request_X20processing_X20start),
- /* K4 */ be_const_int(3),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(Response_container),
- /* K7 */ be_nested_str_weak(InvokeRequestMessage),
- /* K8 */ be_nested_str_weak(from_TLV),
- /* K9 */ be_nested_str_weak(invoke_requests),
- /* K10 */ be_nested_str_weak(InvokeResponseMessage),
- /* K11 */ be_nested_str_weak(suppress_response),
- /* K12 */ be_nested_str_weak(invoke_responses),
- /* K13 */ be_nested_str_weak(endpoint),
- /* K14 */ be_nested_str_weak(command_path),
- /* K15 */ be_nested_str_weak(cluster),
- /* K16 */ be_nested_str_weak(command),
- /* K17 */ be_nested_str_weak(status),
- /* K18 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
- /* K19 */ be_nested_str_weak(get_command_name),
- /* K20 */ be_nested_str_weak(format),
- /* K21 */ be_nested_str_weak(0x_X2504X_X2F0x02X),
- /* K22 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_cmd_X20_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K23 */ be_nested_str_weak(remote_ip),
- /* K24 */ be_nested_str_weak(remote_port),
- /* K25 */ be_const_int(2),
- /* K26 */ be_nested_str_weak(responder),
- /* K27 */ be_nested_str_weak(device),
- /* K28 */ be_nested_str_weak(invoke_request),
- /* K29 */ be_nested_str_weak(command_fields),
- /* K30 */ be_nested_str_weak(InvokeResponseIB),
- /* K31 */ be_nested_str_weak(CommandDataIB),
- /* K32 */ be_nested_str_weak(CommandPathIB),
- /* K33 */ be_nested_str_weak(push),
- /* K34 */ be_nested_str_weak(0x_X2504X_X2F0x_X2502X),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_cmd_X20_X20_X20_X25s),
- /* K36 */ be_nested_str_weak(CommandStatusIB),
- /* K37 */ be_nested_str_weak(StatusIB),
- /* K38 */ be_nested_str_weak(stop_iteration),
- /* K39 */ be_nested_str_weak(MTR_X3A_X20invoke_responses_X3D),
- /* K40 */ be_const_int(0),
- /* K41 */ be_nested_str_weak(MTR_X3A_X20InvokeResponse_X3D),
- /* K42 */ be_nested_str_weak(MTR_X3A_X20InvokeResponseTLV_X3D),
- /* K43 */ be_nested_str_weak(to_TLV),
- /* K44 */ be_nested_str_weak(build_response),
- /* K45 */ be_nested_str_weak(encode),
- /* K46 */ be_nested_str_weak(encrypt),
- /* K47 */ be_nested_str_weak(send_response),
- /* K48 */ be_nested_str_weak(raw),
- /* K49 */ be_nested_str_weak(message_counter),
- /* K50 */ be_nested_str_weak(x_flag_r),
- /* K51 */ be_nested_str_weak(build_standalone_ack),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_WriteResponse),
}),
- be_str_weak(process_invoke_request),
+ be_str_weak(send_write_response),
&be_const_str_solidified,
- ( &(const binstruction[242]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x58180003, // 0003 LDCONST R6 K3
- 0x581C0004, // 0004 LDCONST R7 K4
- 0x7C100600, // 0005 CALL R4 3
- 0xB8120A00, // 0006 GETNGBL R4 K5
- 0x8C100906, // 0007 GETMET R4 R4 K6
- 0x7C100200, // 0008 CALL R4 1
- 0xB8160A00, // 0009 GETNGBL R5 K5
- 0x8C140B07, // 000A GETMET R5 R5 K7
- 0x7C140200, // 000B CALL R5 1
- 0x8C140B08, // 000C GETMET R5 R5 K8
- 0x5C1C0400, // 000D MOVE R7 R2
- 0x7C140400, // 000E CALL R5 2
- 0x88180B09, // 000F GETMBR R6 R5 K9
- 0x4C1C0000, // 0010 LDNIL R7
- 0x20180C07, // 0011 NE R6 R6 R7
- 0x781A00DD, // 0012 JMPF R6 #00F1
- 0xB81A0A00, // 0013 GETNGBL R6 K5
- 0x8C180D0A, // 0014 GETMET R6 R6 K10
- 0x7C180200, // 0015 CALL R6 1
- 0x501C0000, // 0016 LDBOOL R7 0 0
- 0x901A1607, // 0017 SETMBR R6 K11 R7
- 0x601C0012, // 0018 GETGBL R7 G18
- 0x7C1C0000, // 0019 CALL R7 0
- 0x901A1807, // 001A SETMBR R6 K12 R7
- 0x601C0010, // 001B GETGBL R7 G16
- 0x88200B09, // 001C GETMBR R8 R5 K9
- 0x7C1C0200, // 001D CALL R7 1
- 0xA802008D, // 001E EXBLK 0 #00AD
- 0x5C200E00, // 001F MOVE R8 R7
- 0x7C200000, // 0020 CALL R8 0
- 0x8824110E, // 0021 GETMBR R9 R8 K14
- 0x8824130D, // 0022 GETMBR R9 R9 K13
- 0x90121A09, // 0023 SETMBR R4 K13 R9
- 0x8824110E, // 0024 GETMBR R9 R8 K14
- 0x8824130F, // 0025 GETMBR R9 R9 K15
- 0x90121E09, // 0026 SETMBR R4 K15 R9
- 0x8824110E, // 0027 GETMBR R9 R8 K14
- 0x88241310, // 0028 GETMBR R9 R9 K16
- 0x90122009, // 0029 SETMBR R4 K16 R9
- 0xB8260A00, // 002A GETNGBL R9 K5
- 0x88241312, // 002B GETMBR R9 R9 K18
- 0x90122209, // 002C SETMBR R4 K17 R9
- 0xB8260A00, // 002D GETNGBL R9 K5
- 0x8C241313, // 002E GETMET R9 R9 K19
- 0x882C090F, // 002F GETMBR R11 R4 K15
- 0x88300910, // 0030 GETMBR R12 R4 K16
- 0x7C240600, // 0031 CALL R9 3
- 0x4C280000, // 0032 LDNIL R10
- 0x1C28120A, // 0033 EQ R10 R9 R10
- 0x782A0005, // 0034 JMPF R10 #003B
- 0x8C280714, // 0035 GETMET R10 R3 K20
- 0x58300015, // 0036 LDCONST R12 K21
- 0x8834090F, // 0037 GETMBR R13 R4 K15
- 0x88380910, // 0038 GETMBR R14 R4 K16
- 0x7C280800, // 0039 CALL R10 4
- 0x5C241400, // 003A MOVE R9 R10
- 0xB82A0200, // 003B GETNGBL R10 K1
- 0x8C281502, // 003C GETMET R10 R10 K2
- 0x8C300714, // 003D GETMET R12 R3 K20
- 0x58380016, // 003E LDCONST R14 K22
- 0x5C3C1200, // 003F MOVE R15 R9
- 0x88400317, // 0040 GETMBR R16 R1 K23
- 0x88440318, // 0041 GETMBR R17 R1 K24
- 0x7C300A00, // 0042 CALL R12 5
- 0x58340019, // 0043 LDCONST R13 K25
- 0x7C280600, // 0044 CALL R10 3
- 0x8828011A, // 0045 GETMBR R10 R0 K26
- 0x8828151B, // 0046 GETMBR R10 R10 K27
- 0x8C28151C, // 0047 GETMET R10 R10 K28
- 0x5C300200, // 0048 MOVE R12 R1
- 0x8834111D, // 0049 GETMBR R13 R8 K29
- 0x5C380800, // 004A MOVE R14 R4
- 0x7C280800, // 004B CALL R10 4
- 0xB82E0A00, // 004C GETNGBL R11 K5
- 0x8C2C171E, // 004D GETMET R11 R11 K30
- 0x7C2C0200, // 004E CALL R11 1
- 0x4C300000, // 004F LDNIL R12
- 0x2030140C, // 0050 NE R12 R10 R12
- 0x78320032, // 0051 JMPF R12 #0085
- 0xB8320A00, // 0052 GETNGBL R12 K5
- 0x8C30191F, // 0053 GETMET R12 R12 K31
- 0x7C300200, // 0054 CALL R12 1
- 0x902E200C, // 0055 SETMBR R11 K16 R12
- 0x88301710, // 0056 GETMBR R12 R11 K16
- 0xB8360A00, // 0057 GETNGBL R13 K5
- 0x8C341B20, // 0058 GETMET R13 R13 K32
- 0x7C340200, // 0059 CALL R13 1
- 0x90321C0D, // 005A SETMBR R12 K14 R13
- 0x88301710, // 005B GETMBR R12 R11 K16
- 0x8830190E, // 005C GETMBR R12 R12 K14
- 0x8834090D, // 005D GETMBR R13 R4 K13
- 0x90321A0D, // 005E SETMBR R12 K13 R13
- 0x88301710, // 005F GETMBR R12 R11 K16
- 0x8830190E, // 0060 GETMBR R12 R12 K14
- 0x8834090F, // 0061 GETMBR R13 R4 K15
- 0x90321E0D, // 0062 SETMBR R12 K15 R13
- 0x88301710, // 0063 GETMBR R12 R11 K16
- 0x8830190E, // 0064 GETMBR R12 R12 K14
- 0x88340910, // 0065 GETMBR R13 R4 K16
- 0x9032200D, // 0066 SETMBR R12 K16 R13
- 0x88301710, // 0067 GETMBR R12 R11 K16
- 0x90323A0A, // 0068 SETMBR R12 K29 R10
- 0x88300D0C, // 0069 GETMBR R12 R6 K12
- 0x8C301921, // 006A GETMET R12 R12 K33
- 0x5C381600, // 006B MOVE R14 R11
- 0x7C300400, // 006C CALL R12 2
- 0xB8320A00, // 006D GETNGBL R12 K5
- 0x8C301913, // 006E GETMET R12 R12 K19
- 0x8838090F, // 006F GETMBR R14 R4 K15
- 0x883C0910, // 0070 GETMBR R15 R4 K16
- 0x7C300600, // 0071 CALL R12 3
- 0x5C241800, // 0072 MOVE R9 R12
- 0x4C300000, // 0073 LDNIL R12
- 0x1C30120C, // 0074 EQ R12 R9 R12
- 0x78320005, // 0075 JMPF R12 #007C
- 0x8C300714, // 0076 GETMET R12 R3 K20
- 0x58380022, // 0077 LDCONST R14 K34
- 0x883C090F, // 0078 GETMBR R15 R4 K15
- 0x88400910, // 0079 GETMBR R16 R4 K16
- 0x7C300800, // 007A CALL R12 4
- 0x5C241800, // 007B MOVE R9 R12
- 0xB8320200, // 007C GETNGBL R12 K1
- 0x8C301902, // 007D GETMET R12 R12 K2
- 0x8C380714, // 007E GETMET R14 R3 K20
- 0x58400023, // 007F LDCONST R16 K35
- 0x5C441200, // 0080 MOVE R17 R9
- 0x7C380600, // 0081 CALL R14 3
- 0x583C0019, // 0082 LDCONST R15 K25
- 0x7C300600, // 0083 CALL R12 3
- 0x70020026, // 0084 JMP #00AC
- 0x88300911, // 0085 GETMBR R12 R4 K17
- 0x4C340000, // 0086 LDNIL R13
- 0x2030180D, // 0087 NE R12 R12 R13
- 0x78320022, // 0088 JMPF R12 #00AC
- 0xB8320A00, // 0089 GETNGBL R12 K5
- 0x8C301924, // 008A GETMET R12 R12 K36
- 0x7C300200, // 008B CALL R12 1
- 0x902E220C, // 008C SETMBR R11 K17 R12
- 0x88301711, // 008D GETMBR R12 R11 K17
- 0xB8360A00, // 008E GETNGBL R13 K5
- 0x8C341B20, // 008F GETMET R13 R13 K32
- 0x7C340200, // 0090 CALL R13 1
- 0x90321C0D, // 0091 SETMBR R12 K14 R13
- 0x88301711, // 0092 GETMBR R12 R11 K17
- 0x8830190E, // 0093 GETMBR R12 R12 K14
- 0x8834090D, // 0094 GETMBR R13 R4 K13
- 0x90321A0D, // 0095 SETMBR R12 K13 R13
- 0x88301711, // 0096 GETMBR R12 R11 K17
- 0x8830190E, // 0097 GETMBR R12 R12 K14
- 0x8834090F, // 0098 GETMBR R13 R4 K15
- 0x90321E0D, // 0099 SETMBR R12 K15 R13
- 0x88301711, // 009A GETMBR R12 R11 K17
- 0x8830190E, // 009B GETMBR R12 R12 K14
- 0x88340910, // 009C GETMBR R13 R4 K16
- 0x9032200D, // 009D SETMBR R12 K16 R13
- 0x88301711, // 009E GETMBR R12 R11 K17
- 0xB8360A00, // 009F GETNGBL R13 K5
- 0x8C341B25, // 00A0 GETMET R13 R13 K37
- 0x7C340200, // 00A1 CALL R13 1
- 0x9032220D, // 00A2 SETMBR R12 K17 R13
- 0x88301711, // 00A3 GETMBR R12 R11 K17
- 0x88301911, // 00A4 GETMBR R12 R12 K17
- 0x88340911, // 00A5 GETMBR R13 R4 K17
- 0x9032220D, // 00A6 SETMBR R12 K17 R13
- 0x88300D0C, // 00A7 GETMBR R12 R6 K12
- 0x8C301921, // 00A8 GETMET R12 R12 K33
- 0x5C381600, // 00A9 MOVE R14 R11
- 0x7C300400, // 00AA CALL R12 2
- 0x7001FFFF, // 00AB JMP #00AC
- 0x7001FF71, // 00AC JMP #001F
- 0x581C0026, // 00AD LDCONST R7 K38
- 0xAC1C0200, // 00AE CATCH R7 1 0
- 0xB0080000, // 00AF RAISE 2 R0 R0
- 0xB81E0200, // 00B0 GETNGBL R7 K1
- 0x8C1C0F02, // 00B1 GETMET R7 R7 K2
- 0x60240008, // 00B2 GETGBL R9 G8
- 0x88280D0C, // 00B3 GETMBR R10 R6 K12
- 0x7C240200, // 00B4 CALL R9 1
- 0x00264E09, // 00B5 ADD R9 K39 R9
- 0x58280004, // 00B6 LDCONST R10 K4
- 0x7C1C0600, // 00B7 CALL R7 3
- 0x601C000C, // 00B8 GETGBL R7 G12
- 0x88200D0C, // 00B9 GETMBR R8 R6 K12
- 0x7C1C0200, // 00BA CALL R7 1
- 0x241C0F28, // 00BB GT R7 R7 K40
- 0x781E0024, // 00BC JMPF R7 #00E2
- 0xB81E0200, // 00BD GETNGBL R7 K1
- 0x8C1C0F02, // 00BE GETMET R7 R7 K2
- 0x60240008, // 00BF GETGBL R9 G8
- 0x5C280C00, // 00C0 MOVE R10 R6
- 0x7C240200, // 00C1 CALL R9 1
- 0x00265209, // 00C2 ADD R9 K41 R9
- 0x58280004, // 00C3 LDCONST R10 K4
- 0x7C1C0600, // 00C4 CALL R7 3
- 0xB81E0200, // 00C5 GETNGBL R7 K1
- 0x8C1C0F02, // 00C6 GETMET R7 R7 K2
- 0x60240008, // 00C7 GETGBL R9 G8
- 0x8C280D2B, // 00C8 GETMET R10 R6 K43
- 0x7C280200, // 00C9 CALL R10 1
- 0x7C240200, // 00CA CALL R9 1
- 0x00265409, // 00CB ADD R9 K42 R9
- 0x58280004, // 00CC LDCONST R10 K4
- 0x7C1C0600, // 00CD CALL R7 3
- 0x8C1C032C, // 00CE GETMET R7 R1 K44
- 0x54260008, // 00CF LDINT R9 9
- 0x50280200, // 00D0 LDBOOL R10 1 0
- 0x7C1C0600, // 00D1 CALL R7 3
- 0x8C200F2D, // 00D2 GETMET R8 R7 K45
- 0x8C280D2B, // 00D3 GETMET R10 R6 K43
- 0x7C280200, // 00D4 CALL R10 1
- 0x8C28152D, // 00D5 GETMET R10 R10 K45
- 0x7C280200, // 00D6 CALL R10 1
- 0x7C200400, // 00D7 CALL R8 2
- 0x8C200F2E, // 00D8 GETMET R8 R7 K46
- 0x7C200200, // 00D9 CALL R8 1
- 0x8820011A, // 00DA GETMBR R8 R0 K26
- 0x8C20112F, // 00DB GETMET R8 R8 K47
- 0x88280F30, // 00DC GETMBR R10 R7 K48
- 0x882C0317, // 00DD GETMBR R11 R1 K23
- 0x88300318, // 00DE GETMBR R12 R1 K24
- 0x88340F31, // 00DF GETMBR R13 R7 K49
- 0x7C200A00, // 00E0 CALL R8 5
- 0x7002000E, // 00E1 JMP #00F1
- 0x881C0332, // 00E2 GETMBR R7 R1 K50
- 0x781E000C, // 00E3 JMPF R7 #00F1
- 0x8C1C0333, // 00E4 GETMET R7 R1 K51
- 0x7C1C0200, // 00E5 CALL R7 1
- 0x8C200F2D, // 00E6 GETMET R8 R7 K45
- 0x7C200200, // 00E7 CALL R8 1
- 0x8C200F2E, // 00E8 GETMET R8 R7 K46
- 0x7C200200, // 00E9 CALL R8 1
- 0x8820011A, // 00EA GETMBR R8 R0 K26
- 0x8C20112F, // 00EB GETMET R8 R8 K47
- 0x88280F30, // 00EC GETMBR R10 R7 K48
- 0x882C0317, // 00ED GETMBR R11 R1 K23
- 0x88300318, // 00EE GETMBR R12 R1 K24
- 0x88340F31, // 00EF GETMBR R13 R7 K49
- 0x7C200A00, // 00F0 CALL R8 5
- 0x80000000, // 00F1 RET 0
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
})
)
);
@@ -1181,11 +946,11 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
/********************************************************************
-** Solidified function: init
+** Solidified function: send_status
********************************************************************/
-be_local_closure(Matter_IM_init, /* name */
+be_local_closure(Matter_IM_send_status, /* name */
be_nested_proto(
- 3, /* nstack */
+ 9, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1193,173 +958,24 @@ be_local_closure(Matter_IM_init, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(responder),
- /* K1 */ be_nested_str_weak(device),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_Status),
}),
- be_str_weak(init),
+ be_str_weak(send_status),
&be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020202, // 0001 SETMBR R0 K1 R2
- 0x80000000, // 0002 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-extern const bclass be_class_Matter_Attr_Report;
-
-/********************************************************************
-** Solidified class: Matter_Attr_Report
-********************************************************************/
-be_local_class(Matter_Attr_Report,
- 3,
- NULL,
- be_nested_map(3,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(ret, 1), be_const_var(0) },
- { be_const_key_weak(expiration, 2), be_const_var(2) },
- { be_const_key_weak(resp, -1), be_const_var(1) },
- })),
- be_str_weak(Matter_Attr_Report)
-);
-
-/********************************************************************
-** Solidified function: send_attr_report
-********************************************************************/
-be_local_closure(Matter_IM_send_attr_report, /* name */
- be_nested_proto(
- 14, /* nstack */
- 3, /* 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_class(be_class_Matter_Attr_Report),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(attribute_reports),
- /* K3 */ be_nested_str_weak(to_TLV),
- /* K4 */ be_nested_str_weak(encode),
- /* K5 */ be_const_int(1),
- /* K6 */ be_nested_str_weak(MAX_MESSAGE),
- /* K7 */ be_const_int(2147483647),
- /* K8 */ be_nested_str_weak(more_chunked_messages),
- /* K9 */ be_nested_str_weak(build_response),
- /* K10 */ be_nested_str_weak(encrypt),
- /* K11 */ be_nested_str_weak(responder),
- /* K12 */ be_nested_str_weak(send_response),
- /* K13 */ be_nested_str_weak(raw),
- /* K14 */ be_nested_str_weak(remote_ip),
- /* K15 */ be_nested_str_weak(remote_port),
- /* K16 */ be_nested_str_weak(message_counter),
- /* K17 */ be_nested_str_weak(ret),
- /* K18 */ be_nested_str_weak(resp),
- /* K19 */ be_nested_str_weak(expiration),
- /* K20 */ be_nested_str_weak(tasmota),
- /* K21 */ be_nested_str_weak(millis),
- /* K22 */ be_nested_str_weak(MSG_TIMEOUT),
- }),
- be_str_weak(send_attr_report),
- &be_const_str_solidified,
- ( &(const binstruction[93]) { /* code */
- 0x580C0000, // 0000 LDCONST R3 K0
- 0xB4000000, // 0001 CLASS K0
- 0x58100001, // 0002 LDCONST R4 K1
- 0x58140001, // 0003 LDCONST R5 K1
- 0x6018000C, // 0004 GETGBL R6 G12
- 0x881C0502, // 0005 GETMBR R7 R2 K2
- 0x7C180200, // 0006 CALL R6 1
- 0x24180D01, // 0007 GT R6 R6 K1
- 0x781A0009, // 0008 JMPF R6 #0013
- 0x6018000C, // 0009 GETGBL R6 G12
- 0x881C0502, // 000A GETMBR R7 R2 K2
- 0x941C0F01, // 000B GETIDX R7 R7 K1
- 0x8C1C0F03, // 000C GETMET R7 R7 K3
- 0x7C1C0200, // 000D CALL R7 1
- 0x8C1C0F04, // 000E GETMET R7 R7 K4
- 0x7C1C0200, // 000F CALL R7 1
- 0x7C180200, // 0010 CALL R6 1
- 0x5C100C00, // 0011 MOVE R4 R6
- 0x58140005, // 0012 LDCONST R5 K5
- 0x88180106, // 0013 GETMBR R6 R0 K6
- 0x14180806, // 0014 LT R6 R4 R6
- 0x781A0013, // 0015 JMPF R6 #002A
- 0x6018000C, // 0016 GETGBL R6 G12
- 0x881C0502, // 0017 GETMBR R7 R2 K2
- 0x7C180200, // 0018 CALL R6 1
- 0x14180A06, // 0019 LT R6 R5 R6
- 0x781A000E, // 001A JMPF R6 #002A
- 0x6018000C, // 001B GETGBL R6 G12
- 0x881C0502, // 001C GETMBR R7 R2 K2
- 0x941C0E05, // 001D GETIDX R7 R7 R5
- 0x8C1C0F03, // 001E GETMET R7 R7 K3
- 0x7C1C0200, // 001F CALL R7 1
- 0x8C1C0F04, // 0020 GETMET R7 R7 K4
- 0x7C1C0200, // 0021 CALL R7 1
- 0x7C180200, // 0022 CALL R6 1
- 0x001C0806, // 0023 ADD R7 R4 R6
- 0x88200106, // 0024 GETMBR R8 R0 K6
- 0x141C0E08, // 0025 LT R7 R7 R8
- 0x781E0001, // 0026 JMPF R7 #0029
- 0x00100806, // 0027 ADD R4 R4 R6
- 0x00140B05, // 0028 ADD R5 R5 K5
- 0x7001FFE8, // 0029 JMP #0013
- 0x40180B07, // 002A CONNECT R6 R5 K7
- 0x881C0502, // 002B GETMBR R7 R2 K2
- 0x94180E06, // 002C GETIDX R6 R7 R6
- 0x04200B05, // 002D SUB R8 R5 K5
- 0x40220208, // 002E CONNECT R8 K1 R8
- 0x88240502, // 002F GETMBR R9 R2 K2
- 0x94201208, // 0030 GETIDX R8 R9 R8
- 0x900A0408, // 0031 SETMBR R2 K2 R8
- 0x6020000C, // 0032 GETGBL R8 G12
- 0x5C240C00, // 0033 MOVE R9 R6
- 0x7C200200, // 0034 CALL R8 1
- 0x24201101, // 0035 GT R8 R8 K1
- 0x78220001, // 0036 JMPF R8 #0039
- 0x50200200, // 0037 LDBOOL R8 1 0
- 0x900A1008, // 0038 SETMBR R2 K8 R8
- 0x8C1C0309, // 0039 GETMET R7 R1 K9
- 0x54260004, // 003A LDINT R9 5
- 0x50280200, // 003B LDBOOL R10 1 0
- 0x7C1C0600, // 003C CALL R7 3
- 0x8C200F04, // 003D GETMET R8 R7 K4
- 0x8C280503, // 003E GETMET R10 R2 K3
- 0x7C280200, // 003F CALL R10 1
- 0x8C281504, // 0040 GETMET R10 R10 K4
- 0x7C280200, // 0041 CALL R10 1
- 0x7C200400, // 0042 CALL R8 2
- 0x8C200F0A, // 0043 GETMET R8 R7 K10
- 0x7C200200, // 0044 CALL R8 1
- 0x8820010B, // 0045 GETMBR R8 R0 K11
- 0x8C20110C, // 0046 GETMET R8 R8 K12
- 0x88280F0D, // 0047 GETMBR R10 R7 K13
- 0x882C030E, // 0048 GETMBR R11 R1 K14
- 0x8830030F, // 0049 GETMBR R12 R1 K15
- 0x88340F10, // 004A GETMBR R13 R7 K16
- 0x7C200A00, // 004B CALL R8 5
- 0x6020000C, // 004C GETGBL R8 G12
- 0x5C240C00, // 004D MOVE R9 R6
- 0x7C200200, // 004E CALL R8 1
- 0x24201101, // 004F GT R8 R8 K1
- 0x7822000A, // 0050 JMPF R8 #005C
- 0x900A0406, // 0051 SETMBR R2 K2 R6
- 0x5C200600, // 0052 MOVE R8 R3
- 0x7C200000, // 0053 CALL R8 0
- 0x90222202, // 0054 SETMBR R8 K17 R2
- 0x90222407, // 0055 SETMBR R8 K18 R7
- 0xB8262800, // 0056 GETNGBL R9 K20
- 0x8C241315, // 0057 GETMET R9 R9 K21
- 0x7C240200, // 0058 CALL R9 1
- 0x88280116, // 0059 GETMBR R10 R0 K22
- 0x0024120A, // 005A ADD R9 R9 R10
- 0x90222609, // 005B SETMBR R8 K19 R9
- 0x80000000, // 005C RET 0
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
})
)
);
@@ -1387,7 +1003,7 @@ be_local_closure(Matter_IM_subscribe_response, /* name */
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
/* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeResponsetMessage_X3D),
- /* K7 */ be_const_int(3),
+ /* K7 */ be_const_int(2),
}),
be_str_weak(subscribe_response),
&be_const_str_solidified,
@@ -1415,10 +1031,586 @@ be_local_closure(Matter_IM_subscribe_response, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: process_read_request
+********************************************************************/
+be_local_closure(Matter_IM_process_read_request, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(ReadRequestMessage),
+ /* K2 */ be_nested_str_weak(from_TLV),
+ /* K3 */ be_nested_str_weak(attributes_requests),
+ /* K4 */ be_nested_str_weak(_inner_process_read_request),
+ /* K5 */ be_nested_str_weak(send_report_data),
+ }),
+ be_str_weak(process_read_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[20]) { /* code */
+ 0xB80E0000, // 0000 GETNGBL R3 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0702, // 0003 GETMET R3 R3 K2
+ 0x5C140400, // 0004 MOVE R5 R2
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x88100703, // 0006 GETMBR R4 R3 K3
+ 0x4C140000, // 0007 LDNIL R5
+ 0x20100805, // 0008 NE R4 R4 R5
+ 0x78120007, // 0009 JMPF R4 #0012
+ 0x8C100104, // 000A GETMET R4 R0 K4
+ 0x5C180200, // 000B MOVE R6 R1
+ 0x5C1C0600, // 000C MOVE R7 R3
+ 0x7C100600, // 000D CALL R4 3
+ 0x8C140105, // 000E GETMET R5 R0 K5
+ 0x5C1C0200, // 000F MOVE R7 R1
+ 0x5C200800, // 0010 MOVE R8 R4
+ 0x7C140600, // 0011 CALL R5 3
+ 0x50100200, // 0012 LDBOOL R4 1 0
+ 0x80040800, // 0013 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_report_data
+********************************************************************/
+be_local_closure(Matter_IM_send_report_data, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_ReportData),
+ }),
+ be_str_weak(send_report_data),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* 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(device),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(subs),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(IM_Subscription_Shop),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x60080012, // 0001 GETGBL R2 G18
+ 0x7C080000, // 0002 CALL R2 0
+ 0x90020202, // 0003 SETMBR R0 K1 R2
+ 0xB80A0600, // 0004 GETNGBL R2 K3
+ 0x8C080504, // 0005 GETMET R2 R2 K4
+ 0x5C100000, // 0006 MOVE R4 R0
+ 0x7C080400, // 0007 CALL R2 2
+ 0x90020402, // 0008 SETMBR R0 K2 R2
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: subscribe_request
********************************************************************/
be_local_closure(Matter_IM_subscribe_request, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(SubscribeRequestMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(keep_subscriptions),
+ /* K5 */ be_nested_str_weak(subs),
+ /* K6 */ be_nested_str_weak(remove_by_session),
+ /* K7 */ be_nested_str_weak(session),
+ /* K8 */ be_nested_str_weak(tasmota),
+ /* K9 */ be_nested_str_weak(log),
+ /* K10 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeRequestMessage_X3D),
+ /* K11 */ be_const_int(3),
+ /* K12 */ be_nested_str_weak(new_subscription),
+ /* K13 */ be_nested_str_weak(_inner_process_read_request),
+ /* K14 */ be_nested_str_weak(subscription_id),
+ /* K15 */ be_nested_str_weak(send_subscribe_response),
+ }),
+ be_str_weak(subscribe_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[39]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0x88140904, // 0007 GETMBR R5 R4 K4
+ 0x74160003, // 0008 JMPT R5 #000D
+ 0x88140105, // 0009 GETMBR R5 R0 K5
+ 0x8C140B06, // 000A GETMET R5 R5 K6
+ 0x881C0307, // 000B GETMBR R7 R1 K7
+ 0x7C140400, // 000C CALL R5 2
+ 0xB8161000, // 000D GETNGBL R5 K8
+ 0x8C140B09, // 000E GETMET R5 R5 K9
+ 0x601C0008, // 000F GETGBL R7 G8
+ 0x5C200800, // 0010 MOVE R8 R4
+ 0x7C1C0200, // 0011 CALL R7 1
+ 0x001E1407, // 0012 ADD R7 K10 R7
+ 0x5820000B, // 0013 LDCONST R8 K11
+ 0x7C140600, // 0014 CALL R5 3
+ 0x88140105, // 0015 GETMBR R5 R0 K5
+ 0x8C140B0C, // 0016 GETMET R5 R5 K12
+ 0x881C0307, // 0017 GETMBR R7 R1 K7
+ 0x5C200800, // 0018 MOVE R8 R4
+ 0x7C140600, // 0019 CALL R5 3
+ 0x8C18010D, // 001A GETMET R6 R0 K13
+ 0x5C200200, // 001B MOVE R8 R1
+ 0x5C240800, // 001C MOVE R9 R4
+ 0x7C180600, // 001D CALL R6 3
+ 0x881C0B0E, // 001E GETMBR R7 R5 K14
+ 0x901A1C07, // 001F SETMBR R6 K14 R7
+ 0x8C1C010F, // 0020 GETMET R7 R0 K15
+ 0x5C240200, // 0021 MOVE R9 R1
+ 0x5C280C00, // 0022 MOVE R10 R6
+ 0x5C2C0A00, // 0023 MOVE R11 R5
+ 0x7C1C0800, // 0024 CALL R7 4
+ 0x501C0200, // 0025 LDBOOL R7 1 0
+ 0x80040E00, // 0026 RET 1 R7
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_enqueued
+********************************************************************/
+be_local_closure(Matter_IM_send_enqueued, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(ready),
+ /* K3 */ be_nested_str_weak(send),
+ /* K4 */ be_nested_str_weak(remove),
+ /* K5 */ be_const_int(1),
+ }),
+ be_str_weak(send_enqueued),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E0011, // 0005 JMPF R3 #0018
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x88100702, // 0008 GETMBR R4 R3 K2
+ 0x7812000B, // 0009 JMPF R4 #0016
+ 0x8C100703, // 000A GETMET R4 R3 K3
+ 0x5C180200, // 000B MOVE R6 R1
+ 0x7C100400, // 000C CALL R4 2
+ 0x78120005, // 000D JMPF R4 #0014
+ 0x88140101, // 000E GETMBR R5 R0 K1
+ 0x8C140B04, // 000F GETMET R5 R5 K4
+ 0x5C1C0400, // 0010 MOVE R7 R2
+ 0x7C140400, // 0011 CALL R5 2
+ 0x04080505, // 0012 SUB R2 R2 K5
+ 0x70020001, // 0013 JMP #0016
+ 0x50140000, // 0014 LDBOOL R5 0 0
+ 0x900E0405, // 0015 SETMBR R3 K2 R5
+ 0x00080505, // 0016 ADD R2 R2 K5
+ 0x7001FFE8, // 0017 JMP #0001
+ 0x80000000, // 0018 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_invoke_request
+********************************************************************/
+be_local_closure(Matter_IM_process_invoke_request, /* name */
+ be_nested_proto(
+ 19, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[44]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(MTR_X3A_X20IM_X3Ainvoke_request_X20processing_X20start),
+ /* K4 */ be_nested_str_weak(matter),
+ /* K5 */ be_nested_str_weak(Path),
+ /* K6 */ be_nested_str_weak(InvokeRequestMessage),
+ /* K7 */ be_nested_str_weak(from_TLV),
+ /* K8 */ be_nested_str_weak(invoke_requests),
+ /* K9 */ be_nested_str_weak(InvokeResponseMessage),
+ /* K10 */ be_nested_str_weak(suppress_response),
+ /* K11 */ be_nested_str_weak(invoke_responses),
+ /* K12 */ be_nested_str_weak(endpoint),
+ /* K13 */ be_nested_str_weak(command_path),
+ /* K14 */ be_nested_str_weak(cluster),
+ /* K15 */ be_nested_str_weak(command),
+ /* K16 */ be_nested_str_weak(status),
+ /* K17 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
+ /* K18 */ be_nested_str_weak(get_command_name),
+ /* K19 */ be_nested_str_weak(format),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X25s_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K21 */ be_nested_str_weak(),
+ /* K22 */ be_nested_str_weak(remote_ip),
+ /* K23 */ be_nested_str_weak(remote_port),
+ /* K24 */ be_const_int(2),
+ /* K25 */ be_nested_str_weak(device),
+ /* K26 */ be_nested_str_weak(invoke_request),
+ /* K27 */ be_nested_str_weak(command_fields),
+ /* K28 */ be_nested_str_weak(InvokeResponseIB),
+ /* K29 */ be_nested_str_weak(CommandStatusIB),
+ /* K30 */ be_nested_str_weak(CommandPathIB),
+ /* K31 */ be_nested_str_weak(StatusIB),
+ /* K32 */ be_nested_str_weak(SUCCESS),
+ /* K33 */ be_nested_str_weak(push),
+ /* K34 */ be_nested_str_weak(CommandDataIB),
+ /* K35 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X25s_X20_X25s),
+ /* K36 */ be_nested_str_weak(stop_iteration),
+ /* K37 */ be_nested_str_weak(MTR_X3A_X20invoke_responses_X3D),
+ /* K38 */ be_const_int(0),
+ /* K39 */ be_nested_str_weak(MTR_X3A_X20InvokeResponse_X3D),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20InvokeResponseTLV_X3D),
+ /* K41 */ be_nested_str_weak(to_TLV),
+ /* K42 */ be_const_int(3),
+ /* K43 */ be_nested_str_weak(send_invoke_response),
+ }),
+ be_str_weak(process_invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[248]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x58180003, // 0003 LDCONST R6 K3
+ 0x541E0003, // 0004 LDINT R7 4
+ 0x7C100600, // 0005 CALL R4 3
+ 0xB8120800, // 0006 GETNGBL R4 K4
+ 0x8C100905, // 0007 GETMET R4 R4 K5
+ 0x7C100200, // 0008 CALL R4 1
+ 0xB8160800, // 0009 GETNGBL R5 K4
+ 0x8C140B06, // 000A GETMET R5 R5 K6
+ 0x7C140200, // 000B CALL R5 1
+ 0x8C140B07, // 000C GETMET R5 R5 K7
+ 0x5C1C0400, // 000D MOVE R7 R2
+ 0x7C140400, // 000E CALL R5 2
+ 0x88180B08, // 000F GETMBR R6 R5 K8
+ 0x4C1C0000, // 0010 LDNIL R7
+ 0x20180C07, // 0011 NE R6 R6 R7
+ 0x781A00E3, // 0012 JMPF R6 #00F7
+ 0xB81A0800, // 0013 GETNGBL R6 K4
+ 0x8C180D09, // 0014 GETMET R6 R6 K9
+ 0x7C180200, // 0015 CALL R6 1
+ 0x501C0000, // 0016 LDBOOL R7 0 0
+ 0x901A1407, // 0017 SETMBR R6 K10 R7
+ 0x601C0012, // 0018 GETGBL R7 G18
+ 0x7C1C0000, // 0019 CALL R7 0
+ 0x901A1607, // 001A SETMBR R6 K11 R7
+ 0x601C0010, // 001B GETGBL R7 G16
+ 0x88200B08, // 001C GETMBR R8 R5 K8
+ 0x7C1C0200, // 001D CALL R7 1
+ 0xA80200AD, // 001E EXBLK 0 #00CD
+ 0x5C200E00, // 001F MOVE R8 R7
+ 0x7C200000, // 0020 CALL R8 0
+ 0x8824110D, // 0021 GETMBR R9 R8 K13
+ 0x8824130C, // 0022 GETMBR R9 R9 K12
+ 0x90121809, // 0023 SETMBR R4 K12 R9
+ 0x8824110D, // 0024 GETMBR R9 R8 K13
+ 0x8824130E, // 0025 GETMBR R9 R9 K14
+ 0x90121C09, // 0026 SETMBR R4 K14 R9
+ 0x8824110D, // 0027 GETMBR R9 R8 K13
+ 0x8824130F, // 0028 GETMBR R9 R9 K15
+ 0x90121E09, // 0029 SETMBR R4 K15 R9
+ 0xB8260800, // 002A GETNGBL R9 K4
+ 0x88241311, // 002B GETMBR R9 R9 K17
+ 0x90122009, // 002C SETMBR R4 K16 R9
+ 0xB8260800, // 002D GETNGBL R9 K4
+ 0x8C241312, // 002E GETMET R9 R9 K18
+ 0x882C090E, // 002F GETMBR R11 R4 K14
+ 0x8830090F, // 0030 GETMBR R12 R4 K15
+ 0x7C240600, // 0031 CALL R9 3
+ 0xB82A0200, // 0032 GETNGBL R10 K1
+ 0x8C281502, // 0033 GETMET R10 R10 K2
+ 0x8C300713, // 0034 GETMET R12 R3 K19
+ 0x58380014, // 0035 LDCONST R14 K20
+ 0x603C0008, // 0036 GETGBL R15 G8
+ 0x5C400800, // 0037 MOVE R16 R4
+ 0x7C3C0200, // 0038 CALL R15 1
+ 0x78260001, // 0039 JMPF R9 #003C
+ 0x5C401200, // 003A MOVE R16 R9
+ 0x70020000, // 003B JMP #003D
+ 0x58400015, // 003C LDCONST R16 K21
+ 0x88440316, // 003D GETMBR R17 R1 K22
+ 0x88480317, // 003E GETMBR R18 R1 K23
+ 0x7C300C00, // 003F CALL R12 6
+ 0x58340018, // 0040 LDCONST R13 K24
+ 0x7C280600, // 0041 CALL R10 3
+ 0x88280119, // 0042 GETMBR R10 R0 K25
+ 0x8C28151A, // 0043 GETMET R10 R10 K26
+ 0x5C300200, // 0044 MOVE R12 R1
+ 0x8834111B, // 0045 GETMBR R13 R8 K27
+ 0x5C380800, // 0046 MOVE R14 R4
+ 0x7C280800, // 0047 CALL R10 4
+ 0xB82E0800, // 0048 GETNGBL R11 K4
+ 0x8C2C171C, // 0049 GETMET R11 R11 K28
+ 0x7C2C0200, // 004A CALL R11 1
+ 0x50300200, // 004B LDBOOL R12 1 0
+ 0x1C30140C, // 004C EQ R12 R10 R12
+ 0x78320023, // 004D JMPF R12 #0072
+ 0xB8320800, // 004E GETNGBL R12 K4
+ 0x8C30191D, // 004F GETMET R12 R12 K29
+ 0x7C300200, // 0050 CALL R12 1
+ 0x902E200C, // 0051 SETMBR R11 K16 R12
+ 0x88301710, // 0052 GETMBR R12 R11 K16
+ 0xB8360800, // 0053 GETNGBL R13 K4
+ 0x8C341B1E, // 0054 GETMET R13 R13 K30
+ 0x7C340200, // 0055 CALL R13 1
+ 0x90321A0D, // 0056 SETMBR R12 K13 R13
+ 0x88301710, // 0057 GETMBR R12 R11 K16
+ 0x8830190D, // 0058 GETMBR R12 R12 K13
+ 0x8834090C, // 0059 GETMBR R13 R4 K12
+ 0x9032180D, // 005A SETMBR R12 K12 R13
+ 0x88301710, // 005B GETMBR R12 R11 K16
+ 0x8830190D, // 005C GETMBR R12 R12 K13
+ 0x8834090E, // 005D GETMBR R13 R4 K14
+ 0x90321C0D, // 005E SETMBR R12 K14 R13
+ 0x88301710, // 005F GETMBR R12 R11 K16
+ 0x8830190D, // 0060 GETMBR R12 R12 K13
+ 0x8834090F, // 0061 GETMBR R13 R4 K15
+ 0x90321E0D, // 0062 SETMBR R12 K15 R13
+ 0x88301710, // 0063 GETMBR R12 R11 K16
+ 0xB8360800, // 0064 GETNGBL R13 K4
+ 0x8C341B1F, // 0065 GETMET R13 R13 K31
+ 0x7C340200, // 0066 CALL R13 1
+ 0x9032200D, // 0067 SETMBR R12 K16 R13
+ 0x88301710, // 0068 GETMBR R12 R11 K16
+ 0x88301910, // 0069 GETMBR R12 R12 K16
+ 0xB8360800, // 006A GETNGBL R13 K4
+ 0x88341B20, // 006B GETMBR R13 R13 K32
+ 0x9032200D, // 006C SETMBR R12 K16 R13
+ 0x88300D0B, // 006D GETMBR R12 R6 K11
+ 0x8C301921, // 006E GETMET R12 R12 K33
+ 0x5C381600, // 006F MOVE R14 R11
+ 0x7C300400, // 0070 CALL R12 2
+ 0x70020059, // 0071 JMP #00CC
+ 0x4C300000, // 0072 LDNIL R12
+ 0x2030140C, // 0073 NE R12 R10 R12
+ 0x7832002F, // 0074 JMPF R12 #00A5
+ 0xB8320800, // 0075 GETNGBL R12 K4
+ 0x8C301922, // 0076 GETMET R12 R12 K34
+ 0x7C300200, // 0077 CALL R12 1
+ 0x902E1E0C, // 0078 SETMBR R11 K15 R12
+ 0x8830170F, // 0079 GETMBR R12 R11 K15
+ 0xB8360800, // 007A GETNGBL R13 K4
+ 0x8C341B1E, // 007B GETMET R13 R13 K30
+ 0x7C340200, // 007C CALL R13 1
+ 0x90321A0D, // 007D SETMBR R12 K13 R13
+ 0x8830170F, // 007E GETMBR R12 R11 K15
+ 0x8830190D, // 007F GETMBR R12 R12 K13
+ 0x8834090C, // 0080 GETMBR R13 R4 K12
+ 0x9032180D, // 0081 SETMBR R12 K12 R13
+ 0x8830170F, // 0082 GETMBR R12 R11 K15
+ 0x8830190D, // 0083 GETMBR R12 R12 K13
+ 0x8834090E, // 0084 GETMBR R13 R4 K14
+ 0x90321C0D, // 0085 SETMBR R12 K14 R13
+ 0x8830170F, // 0086 GETMBR R12 R11 K15
+ 0x8830190D, // 0087 GETMBR R12 R12 K13
+ 0x8834090F, // 0088 GETMBR R13 R4 K15
+ 0x90321E0D, // 0089 SETMBR R12 K15 R13
+ 0x8830170F, // 008A GETMBR R12 R11 K15
+ 0x9032360A, // 008B SETMBR R12 K27 R10
+ 0x88300D0B, // 008C GETMBR R12 R6 K11
+ 0x8C301921, // 008D GETMET R12 R12 K33
+ 0x5C381600, // 008E MOVE R14 R11
+ 0x7C300400, // 008F CALL R12 2
+ 0xB8320800, // 0090 GETNGBL R12 K4
+ 0x8C301912, // 0091 GETMET R12 R12 K18
+ 0x8838090E, // 0092 GETMBR R14 R4 K14
+ 0x883C090F, // 0093 GETMBR R15 R4 K15
+ 0x7C300600, // 0094 CALL R12 3
+ 0x5C241800, // 0095 MOVE R9 R12
+ 0xB8320200, // 0096 GETNGBL R12 K1
+ 0x8C301902, // 0097 GETMET R12 R12 K2
+ 0x8C380713, // 0098 GETMET R14 R3 K19
+ 0x58400023, // 0099 LDCONST R16 K35
+ 0x60440008, // 009A GETGBL R17 G8
+ 0x5C480800, // 009B MOVE R18 R4
+ 0x7C440200, // 009C CALL R17 1
+ 0x78260001, // 009D JMPF R9 #00A0
+ 0x5C481200, // 009E MOVE R18 R9
+ 0x70020000, // 009F JMP #00A1
+ 0x58480015, // 00A0 LDCONST R18 K21
+ 0x7C380800, // 00A1 CALL R14 4
+ 0x583C0018, // 00A2 LDCONST R15 K24
+ 0x7C300600, // 00A3 CALL R12 3
+ 0x70020026, // 00A4 JMP #00CC
+ 0x88300910, // 00A5 GETMBR R12 R4 K16
+ 0x4C340000, // 00A6 LDNIL R13
+ 0x2030180D, // 00A7 NE R12 R12 R13
+ 0x78320022, // 00A8 JMPF R12 #00CC
+ 0xB8320800, // 00A9 GETNGBL R12 K4
+ 0x8C30191D, // 00AA GETMET R12 R12 K29
+ 0x7C300200, // 00AB CALL R12 1
+ 0x902E200C, // 00AC SETMBR R11 K16 R12
+ 0x88301710, // 00AD GETMBR R12 R11 K16
+ 0xB8360800, // 00AE GETNGBL R13 K4
+ 0x8C341B1E, // 00AF GETMET R13 R13 K30
+ 0x7C340200, // 00B0 CALL R13 1
+ 0x90321A0D, // 00B1 SETMBR R12 K13 R13
+ 0x88301710, // 00B2 GETMBR R12 R11 K16
+ 0x8830190D, // 00B3 GETMBR R12 R12 K13
+ 0x8834090C, // 00B4 GETMBR R13 R4 K12
+ 0x9032180D, // 00B5 SETMBR R12 K12 R13
+ 0x88301710, // 00B6 GETMBR R12 R11 K16
+ 0x8830190D, // 00B7 GETMBR R12 R12 K13
+ 0x8834090E, // 00B8 GETMBR R13 R4 K14
+ 0x90321C0D, // 00B9 SETMBR R12 K14 R13
+ 0x88301710, // 00BA GETMBR R12 R11 K16
+ 0x8830190D, // 00BB GETMBR R12 R12 K13
+ 0x8834090F, // 00BC GETMBR R13 R4 K15
+ 0x90321E0D, // 00BD SETMBR R12 K15 R13
+ 0x88301710, // 00BE GETMBR R12 R11 K16
+ 0xB8360800, // 00BF GETNGBL R13 K4
+ 0x8C341B1F, // 00C0 GETMET R13 R13 K31
+ 0x7C340200, // 00C1 CALL R13 1
+ 0x9032200D, // 00C2 SETMBR R12 K16 R13
+ 0x88301710, // 00C3 GETMBR R12 R11 K16
+ 0x88301910, // 00C4 GETMBR R12 R12 K16
+ 0x88340910, // 00C5 GETMBR R13 R4 K16
+ 0x9032200D, // 00C6 SETMBR R12 K16 R13
+ 0x88300D0B, // 00C7 GETMBR R12 R6 K11
+ 0x8C301921, // 00C8 GETMET R12 R12 K33
+ 0x5C381600, // 00C9 MOVE R14 R11
+ 0x7C300400, // 00CA CALL R12 2
+ 0x7001FFFF, // 00CB JMP #00CC
+ 0x7001FF51, // 00CC JMP #001F
+ 0x581C0024, // 00CD LDCONST R7 K36
+ 0xAC1C0200, // 00CE CATCH R7 1 0
+ 0xB0080000, // 00CF RAISE 2 R0 R0
+ 0xB81E0200, // 00D0 GETNGBL R7 K1
+ 0x8C1C0F02, // 00D1 GETMET R7 R7 K2
+ 0x60240008, // 00D2 GETGBL R9 G8
+ 0x88280D0B, // 00D3 GETMBR R10 R6 K11
+ 0x7C240200, // 00D4 CALL R9 1
+ 0x00264A09, // 00D5 ADD R9 K37 R9
+ 0x542A0003, // 00D6 LDINT R10 4
+ 0x7C1C0600, // 00D7 CALL R7 3
+ 0x601C000C, // 00D8 GETGBL R7 G12
+ 0x88200D0B, // 00D9 GETMBR R8 R6 K11
+ 0x7C1C0200, // 00DA CALL R7 1
+ 0x241C0F26, // 00DB GT R7 R7 K38
+ 0x781E0015, // 00DC JMPF R7 #00F3
+ 0xB81E0200, // 00DD GETNGBL R7 K1
+ 0x8C1C0F02, // 00DE GETMET R7 R7 K2
+ 0x60240008, // 00DF GETGBL R9 G8
+ 0x5C280C00, // 00E0 MOVE R10 R6
+ 0x7C240200, // 00E1 CALL R9 1
+ 0x00264E09, // 00E2 ADD R9 K39 R9
+ 0x542A0003, // 00E3 LDINT R10 4
+ 0x7C1C0600, // 00E4 CALL R7 3
+ 0xB81E0200, // 00E5 GETNGBL R7 K1
+ 0x8C1C0F02, // 00E6 GETMET R7 R7 K2
+ 0x60240008, // 00E7 GETGBL R9 G8
+ 0x8C280D29, // 00E8 GETMET R10 R6 K41
+ 0x7C280200, // 00E9 CALL R10 1
+ 0x7C240200, // 00EA CALL R9 1
+ 0x00265009, // 00EB ADD R9 K40 R9
+ 0x5828002A, // 00EC LDCONST R10 K42
+ 0x7C1C0600, // 00ED CALL R7 3
+ 0x8C1C012B, // 00EE GETMET R7 R0 K43
+ 0x5C240200, // 00EF MOVE R9 R1
+ 0x5C280C00, // 00F0 MOVE R10 R6
+ 0x7C1C0600, // 00F1 CALL R7 3
+ 0x70020001, // 00F2 JMP #00F5
+ 0x501C0000, // 00F3 LDBOOL R7 0 0
+ 0x80040E00, // 00F4 RET 1 R7
+ 0x501C0200, // 00F5 LDBOOL R7 1 0
+ 0x80040E00, // 00F6 RET 1 R7
+ 0x80000000, // 00F7 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_invoke_response
+********************************************************************/
+be_local_closure(Matter_IM_process_invoke_response, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
@@ -1431,14 +1623,14 @@ be_local_closure(Matter_IM_subscribe_request, /* name */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(SubscribeRequestMessage),
+ /* K2 */ be_nested_str_weak(InvokeResponseMessage),
/* K3 */ be_nested_str_weak(from_TLV),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeRequestMessage_X3D),
- /* K7 */ be_const_int(3),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20InvokeResponseMessage_X3D),
+ /* K7 */ be_const_int(2),
}),
- be_str_weak(subscribe_request),
+ be_str_weak(process_invoke_response),
&be_const_str_solidified,
( &(const binstruction[17]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
@@ -1465,9 +1657,59 @@ be_local_closure(Matter_IM_subscribe_request, /* name */
/********************************************************************
-** Solidified function: process_write_response
+** Solidified function: find_sendqueue_by_exchangeid
********************************************************************/
-be_local_closure(Matter_IM_process_write_response, /* name */
+be_local_closure(Matter_IM_find_sendqueue_by_exchangeid, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(get_exchangeid),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(find_sendqueue_by_exchangeid),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x4C080000, // 0003 LDNIL R2
+ 0x80040400, // 0004 RET 1 R2
+ 0x58080000, // 0005 LDCONST R2 K0
+ 0x600C000C, // 0006 GETGBL R3 G12
+ 0x88100101, // 0007 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0x140C0403, // 0009 LT R3 R2 R3
+ 0x780E0008, // 000A JMPF R3 #0014
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x940C0602, // 000C GETIDX R3 R3 R2
+ 0x8C100702, // 000D GETMET R4 R3 K2
+ 0x7C100200, // 000E CALL R4 1
+ 0x1C100801, // 000F EQ R4 R4 R1
+ 0x78120000, // 0010 JMPF R4 #0012
+ 0x80040600, // 0011 RET 1 R3
+ 0x00080503, // 0012 ADD R2 R2 K3
+ 0x7001FFF1, // 0013 JMP #0006
+ 0x4C0C0000, // 0014 LDNIL R3
+ 0x80040600, // 0015 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: report_data
+********************************************************************/
+be_local_closure(Matter_IM_report_data, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
@@ -1480,14 +1722,14 @@ be_local_closure(Matter_IM_process_write_response, /* name */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(WriteResponseMessage),
+ /* K2 */ be_nested_str_weak(ReportDataMessage),
/* K3 */ be_nested_str_weak(from_TLV),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteResponseMessage_X3D),
- /* K7 */ be_const_int(3),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20ReportDataMessage_X3D),
+ /* K7 */ be_const_int(2),
}),
- be_str_weak(process_write_response),
+ be_str_weak(report_data),
&be_const_str_solidified,
( &(const binstruction[17]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
@@ -1513,6 +1755,179 @@ be_local_closure(Matter_IM_process_write_response, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: send_invoke_response
+********************************************************************/
+be_local_closure(Matter_IM_send_invoke_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_InvokeResponse),
+ }),
+ be_str_weak(send_invoke_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_status_response
+********************************************************************/
+be_local_closure(Matter_IM_process_status_response, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 3, /* 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(findsubval),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(SUCCESS),
+ /* K5 */ be_nested_str_weak(tasmota),
+ /* K6 */ be_nested_str_weak(log),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus),
+ /* K8 */ be_const_int(2),
+ /* K9 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
+ /* K10 */ be_nested_str_weak(exchange_id),
+ /* K11 */ be_nested_str_weak(ack_received),
+ /* K12 */ be_nested_str_weak(format),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_X20_X20_X20_X20ERROR_X20_X3D_X200x_X2502X),
+ }),
+ be_str_weak(process_status_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[34]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0x8C100501, // 0001 GETMET R4 R2 K1
+ 0x58180002, // 0002 LDCONST R6 K2
+ 0x541E00FE, // 0003 LDINT R7 255
+ 0x7C100600, // 0004 CALL R4 3
+ 0xB8160600, // 0005 GETNGBL R5 K3
+ 0x88140B04, // 0006 GETMBR R5 R5 K4
+ 0x1C140805, // 0007 EQ R5 R4 R5
+ 0x7816000E, // 0008 JMPF R5 #0018
+ 0xB8160A00, // 0009 GETNGBL R5 K5
+ 0x8C140B06, // 000A GETMET R5 R5 K6
+ 0x581C0007, // 000B LDCONST R7 K7
+ 0x58200008, // 000C LDCONST R8 K8
+ 0x7C140600, // 000D CALL R5 3
+ 0x8C140109, // 000E GETMET R5 R0 K9
+ 0x881C030A, // 000F GETMBR R7 R1 K10
+ 0x7C140400, // 0010 CALL R5 2
+ 0x78160004, // 0011 JMPF R5 #0017
+ 0x8C180B0B, // 0012 GETMET R6 R5 K11
+ 0x5C200200, // 0013 MOVE R8 R1
+ 0x7C180400, // 0014 CALL R6 2
+ 0x50180200, // 0015 LDBOOL R6 1 0
+ 0x80040C00, // 0016 RET 1 R6
+ 0x70020007, // 0017 JMP #0020
+ 0xB8160A00, // 0018 GETNGBL R5 K5
+ 0x8C140B06, // 0019 GETMET R5 R5 K6
+ 0x8C1C070C, // 001A GETMET R7 R3 K12
+ 0x5824000D, // 001B LDCONST R9 K13
+ 0x5C280800, // 001C MOVE R10 R4
+ 0x7C1C0600, // 001D CALL R7 3
+ 0x58200008, // 001E LDCONST R8 K8
+ 0x7C140600, // 001F CALL R5 3
+ 0x50140000, // 0020 LDBOOL R5 0 0
+ 0x80040A00, // 0021 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_subscribe_update
+********************************************************************/
+be_local_closure(Matter_IM_send_subscribe_update, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* 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(string),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(ReportDataMessage),
+ /* K4 */ be_nested_str_weak(subscription_id),
+ /* K5 */ be_nested_str_weak(attribute_reports),
+ /* K6 */ be_nested_str_weak(suppress_response),
+ /* K7 */ be_nested_str_weak(send_queue),
+ /* K8 */ be_nested_str_weak(push),
+ /* K9 */ be_nested_str_weak(IM_ReportDataSubscribed),
+ /* K10 */ be_nested_str_weak(device),
+ /* K11 */ be_nested_str_weak(message_handler),
+ /* K12 */ be_nested_str_weak(send_enqueued),
+ }),
+ be_str_weak(send_subscribe_update),
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0301, // 0001 GETMBR R3 R1 K1
+ 0xB8120400, // 0002 GETNGBL R4 K2
+ 0x8C100903, // 0003 GETMET R4 R4 K3
+ 0x7C100200, // 0004 CALL R4 1
+ 0x88140304, // 0005 GETMBR R5 R1 K4
+ 0x90120805, // 0006 SETMBR R4 K4 R5
+ 0x60140012, // 0007 GETGBL R5 G18
+ 0x7C140000, // 0008 CALL R5 0
+ 0x90120A05, // 0009 SETMBR R4 K5 R5
+ 0x50140200, // 000A LDBOOL R5 1 0
+ 0x90120C05, // 000B SETMBR R4 K6 R5
+ 0x88140107, // 000C GETMBR R5 R0 K7
+ 0x8C140B08, // 000D GETMET R5 R5 K8
+ 0xB81E0400, // 000E GETNGBL R7 K2
+ 0x8C1C0F09, // 000F GETMET R7 R7 K9
+ 0x8824010A, // 0010 GETMBR R9 R0 K10
+ 0x8824130B, // 0011 GETMBR R9 R9 K11
+ 0x5C280600, // 0012 MOVE R10 R3
+ 0x5C2C0800, // 0013 MOVE R11 R4
+ 0x7C1C0800, // 0014 CALL R7 4
+ 0x7C140400, // 0015 CALL R5 2
+ 0x8C14010C, // 0016 GETMET R5 R0 K12
+ 0x881C010A, // 0017 GETMBR R7 R0 K10
+ 0x881C0F0B, // 0018 GETMBR R7 R7 K11
+ 0x7C140400, // 0019 CALL R5 2
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: process_incoming
********************************************************************/
@@ -1595,7 +2010,7 @@ be_local_closure(Matter_IM_process_incoming, /* name */
0x70020000, // 0022 JMP #0024
0x5818000D, // 0023 LDCONST R6 K13
0x001A1806, // 0024 ADD R6 K12 R6
- 0x581C0005, // 0025 LDCONST R7 K5
+ 0x541E0003, // 0025 LDINT R7 4
0x7C100600, // 0026 CALL R4 3
0x8810030E, // 0027 GETMBR R4 R1 K14
0x1C14090F, // 0028 EQ R5 R4 K15
@@ -1692,32 +2107,69 @@ be_local_closure(Matter_IM_process_incoming, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_IM_every_second, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(subs),
+ /* K1 */ be_nested_str_weak(every_second),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified class: Matter_IM
********************************************************************/
be_local_class(Matter_IM,
- 2,
+ 3,
NULL,
- be_nested_map(18,
+ be_nested_map(25,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(process_timed_request, 14), be_const_closure(Matter_IM_process_timed_request_closure) },
- { be_const_key_weak(responder, -1), be_const_var(0) },
- { be_const_key_weak(process_read_request, -1), be_const_closure(Matter_IM_process_read_request_closure) },
- { be_const_key_weak(every_second, 2), be_const_closure(Matter_IM_every_second_closure) },
- { be_const_key_weak(report_data, -1), be_const_closure(Matter_IM_report_data_closure) },
- { be_const_key_weak(process_invoke_response, -1), be_const_closure(Matter_IM_process_invoke_response_closure) },
- { be_const_key_weak(process_write_response, -1), be_const_closure(Matter_IM_process_write_response_closure) },
- { be_const_key_weak(device, -1), be_const_var(1) },
- { be_const_key_weak(subscribe_request, -1), be_const_closure(Matter_IM_subscribe_request_closure) },
- { be_const_key_weak(process_invoke_request, -1), be_const_closure(Matter_IM_process_invoke_request_closure) },
- { be_const_key_weak(MAX_MESSAGE, -1), be_const_int(1200) },
- { be_const_key_weak(process_status_response, 10), be_const_closure(Matter_IM_process_status_response_closure) },
- { be_const_key_weak(send_attr_report, -1), be_const_closure(Matter_IM_send_attr_report_closure) },
- { be_const_key_weak(subscribe_response, 8), be_const_closure(Matter_IM_subscribe_response_closure) },
+ { be_const_key_weak(send_subscribe_response, -1), be_const_closure(Matter_IM_send_subscribe_response_closure) },
{ be_const_key_weak(process_write_request, -1), be_const_closure(Matter_IM_process_write_request_closure) },
- { be_const_key_weak(init, 7), be_const_closure(Matter_IM_init_closure) },
- { be_const_key_weak(MSG_TIMEOUT, 6), be_const_int(10000) },
+ { be_const_key_weak(_inner_process_read_request, -1), be_const_closure(Matter_IM__inner_process_read_request_closure) },
+ { be_const_key_weak(process_timed_request, 10), be_const_closure(Matter_IM_process_timed_request_closure) },
+ { be_const_key_weak(process_write_response, -1), be_const_closure(Matter_IM_process_write_response_closure) },
+ { be_const_key_weak(send_write_response, 12), be_const_closure(Matter_IM_send_write_response_closure) },
+ { be_const_key_weak(send_status, 9), be_const_closure(Matter_IM_send_status_closure) },
+ { be_const_key_weak(subscribe_response, -1), be_const_closure(Matter_IM_subscribe_response_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_IM_every_second_closure) },
+ { be_const_key_weak(send_report_data, -1), be_const_closure(Matter_IM_send_report_data_closure) },
+ { be_const_key_weak(send_subscribe_update, 23), be_const_closure(Matter_IM_send_subscribe_update_closure) },
+ { be_const_key_weak(device, 21), be_const_var(0) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_init_closure) },
+ { be_const_key_weak(subscribe_request, -1), be_const_closure(Matter_IM_subscribe_request_closure) },
+ { be_const_key_weak(send_enqueued, -1), be_const_closure(Matter_IM_send_enqueued_closure) },
+ { be_const_key_weak(process_invoke_request, 8), be_const_closure(Matter_IM_process_invoke_request_closure) },
+ { be_const_key_weak(process_invoke_response, -1), be_const_closure(Matter_IM_process_invoke_response_closure) },
+ { be_const_key_weak(send_invoke_response, -1), be_const_closure(Matter_IM_send_invoke_response_closure) },
+ { be_const_key_weak(report_data, -1), be_const_closure(Matter_IM_report_data_closure) },
+ { be_const_key_weak(find_sendqueue_by_exchangeid, 17), be_const_closure(Matter_IM_find_sendqueue_by_exchangeid_closure) },
+ { be_const_key_weak(process_status_response, -1), be_const_closure(Matter_IM_process_status_response_closure) },
+ { be_const_key_weak(subs, -1), be_const_var(1) },
{ be_const_key_weak(process_incoming, -1), be_const_closure(Matter_IM_process_incoming_closure) },
+ { be_const_key_weak(process_read_request, 7), be_const_closure(Matter_IM_process_read_request_closure) },
+ { be_const_key_weak(send_queue, -1), be_const_var(2) },
})),
be_str_weak(Matter_IM)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Data.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Data.h
index 738b9ec91..aecff66c6 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Data.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Data.h
@@ -3026,7 +3026,7 @@ be_local_closure(Matter_SubscribeRequestMessage_from_TLV, /* name */
/* K4 */ be_const_int(1),
/* K5 */ be_nested_str_weak(max_interval_ceiling),
/* K6 */ be_const_int(2),
- /* K7 */ be_nested_str_weak(attribute_requests),
+ /* K7 */ be_nested_str_weak(attributes_requests),
/* K8 */ be_nested_str_weak(from_TLV_array),
/* K9 */ be_const_int(3),
/* K10 */ be_nested_str_weak(matter),
@@ -3041,7 +3041,7 @@ be_local_closure(Matter_SubscribeRequestMessage_from_TLV, /* name */
}),
be_str_weak(from_TLV),
&be_const_str_solidified,
- ( &(const binstruction[54]) { /* code */
+ ( &(const binstruction[58]) { /* code */
0x4C080000, // 0000 LDNIL R2
0x1C080202, // 0001 EQ R2 R1 R2
0x780A0001, // 0002 JMPF R2 #0005
@@ -3049,53 +3049,57 @@ be_local_closure(Matter_SubscribeRequestMessage_from_TLV, /* name */
0x80040400, // 0004 RET 1 R2
0x8C080301, // 0005 GETMET R2 R1 K1
0x58100002, // 0006 LDCONST R4 K2
- 0x7C080400, // 0007 CALL R2 2
- 0x90020002, // 0008 SETMBR R0 K0 R2
- 0x8C080301, // 0009 GETMET R2 R1 K1
- 0x58100004, // 000A LDCONST R4 K4
- 0x7C080400, // 000B CALL R2 2
- 0x90020602, // 000C SETMBR R0 K3 R2
- 0x8C080301, // 000D GETMET R2 R1 K1
- 0x58100006, // 000E LDCONST R4 K6
- 0x7C080400, // 000F CALL R2 2
- 0x90020A02, // 0010 SETMBR R0 K5 R2
- 0x8C080108, // 0011 GETMET R2 R0 K8
- 0x8C100301, // 0012 GETMET R4 R1 K1
- 0x58180009, // 0013 LDCONST R6 K9
- 0x7C100400, // 0014 CALL R4 2
- 0xB8161400, // 0015 GETNGBL R5 K10
- 0x88140B0B, // 0016 GETMBR R5 R5 K11
- 0x7C080600, // 0017 CALL R2 3
- 0x90020E02, // 0018 SETMBR R0 K7 R2
- 0x8C080108, // 0019 GETMET R2 R0 K8
- 0x8C100301, // 001A GETMET R4 R1 K1
- 0x541A0003, // 001B LDINT R6 4
- 0x7C100400, // 001C CALL R4 2
- 0xB8161400, // 001D GETNGBL R5 K10
- 0x88140B0D, // 001E GETMBR R5 R5 K13
- 0x7C080600, // 001F CALL R2 3
- 0x90021802, // 0020 SETMBR R0 K12 R2
- 0x8C080108, // 0021 GETMET R2 R0 K8
- 0x8C100301, // 0022 GETMET R4 R1 K1
- 0x541A0004, // 0023 LDINT R6 5
- 0x7C100400, // 0024 CALL R4 2
- 0xB8161400, // 0025 GETNGBL R5 K10
- 0x88140B0F, // 0026 GETMBR R5 R5 K15
- 0x7C080600, // 0027 CALL R2 3
- 0x90021C02, // 0028 SETMBR R0 K14 R2
- 0x8C080301, // 0029 GETMET R2 R1 K1
- 0x54120006, // 002A LDINT R4 7
- 0x7C080400, // 002B CALL R2 2
- 0x90022002, // 002C SETMBR R0 K16 R2
- 0x8C080108, // 002D GETMET R2 R0 K8
- 0x8C100301, // 002E GETMET R4 R1 K1
- 0x541A0007, // 002F LDINT R6 8
- 0x7C100400, // 0030 CALL R4 2
- 0xB8161400, // 0031 GETNGBL R5 K10
- 0x88140B12, // 0032 GETMBR R5 R5 K18
- 0x7C080600, // 0033 CALL R2 3
- 0x90022202, // 0034 SETMBR R0 K17 R2
- 0x80040000, // 0035 RET 1 R0
+ 0x50140000, // 0007 LDBOOL R5 0 0
+ 0x7C080600, // 0008 CALL R2 3
+ 0x90020002, // 0009 SETMBR R0 K0 R2
+ 0x8C080301, // 000A GETMET R2 R1 K1
+ 0x58100004, // 000B LDCONST R4 K4
+ 0x58140002, // 000C LDCONST R5 K2
+ 0x7C080600, // 000D CALL R2 3
+ 0x90020602, // 000E SETMBR R0 K3 R2
+ 0x8C080301, // 000F GETMET R2 R1 K1
+ 0x58100006, // 0010 LDCONST R4 K6
+ 0x5416003B, // 0011 LDINT R5 60
+ 0x7C080600, // 0012 CALL R2 3
+ 0x90020A02, // 0013 SETMBR R0 K5 R2
+ 0x8C080108, // 0014 GETMET R2 R0 K8
+ 0x8C100301, // 0015 GETMET R4 R1 K1
+ 0x58180009, // 0016 LDCONST R6 K9
+ 0x7C100400, // 0017 CALL R4 2
+ 0xB8161400, // 0018 GETNGBL R5 K10
+ 0x88140B0B, // 0019 GETMBR R5 R5 K11
+ 0x7C080600, // 001A CALL R2 3
+ 0x90020E02, // 001B SETMBR R0 K7 R2
+ 0x8C080108, // 001C GETMET R2 R0 K8
+ 0x8C100301, // 001D GETMET R4 R1 K1
+ 0x541A0003, // 001E LDINT R6 4
+ 0x7C100400, // 001F CALL R4 2
+ 0xB8161400, // 0020 GETNGBL R5 K10
+ 0x88140B0D, // 0021 GETMBR R5 R5 K13
+ 0x7C080600, // 0022 CALL R2 3
+ 0x90021802, // 0023 SETMBR R0 K12 R2
+ 0x8C080108, // 0024 GETMET R2 R0 K8
+ 0x8C100301, // 0025 GETMET R4 R1 K1
+ 0x541A0004, // 0026 LDINT R6 5
+ 0x7C100400, // 0027 CALL R4 2
+ 0xB8161400, // 0028 GETNGBL R5 K10
+ 0x88140B0F, // 0029 GETMBR R5 R5 K15
+ 0x7C080600, // 002A CALL R2 3
+ 0x90021C02, // 002B SETMBR R0 K14 R2
+ 0x8C080301, // 002C GETMET R2 R1 K1
+ 0x54120006, // 002D LDINT R4 7
+ 0x50140000, // 002E LDBOOL R5 0 0
+ 0x7C080600, // 002F CALL R2 3
+ 0x90022002, // 0030 SETMBR R0 K16 R2
+ 0x8C080108, // 0031 GETMET R2 R0 K8
+ 0x8C100301, // 0032 GETMET R4 R1 K1
+ 0x541A0007, // 0033 LDINT R6 8
+ 0x7C100400, // 0034 CALL R4 2
+ 0xB8161400, // 0035 GETNGBL R5 K10
+ 0x88140B12, // 0036 GETMBR R5 R5 K18
+ 0x7C080600, // 0037 CALL R2 3
+ 0x90022202, // 0038 SETMBR R0 K17 R2
+ 0x80040000, // 0039 RET 1 R0
})
)
);
@@ -3130,7 +3134,7 @@ be_local_closure(Matter_SubscribeRequestMessage_to_TLV, /* name */
/* K11 */ be_nested_str_weak(max_interval_ceiling),
/* K12 */ be_nested_str_weak(to_TLV_array),
/* K13 */ be_const_int(3),
- /* K14 */ be_nested_str_weak(attribute_requests),
+ /* K14 */ be_nested_str_weak(attributes_requests),
/* K15 */ be_nested_str_weak(event_requests),
/* K16 */ be_nested_str_weak(event_filters),
/* K17 */ be_nested_str_weak(fabric_filtered),
@@ -3207,13 +3211,13 @@ be_local_class(Matter_SubscribeRequestMessage,
be_nested_map(10,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(to_TLV, -1), be_const_closure(Matter_SubscribeRequestMessage_to_TLV_closure) },
- { be_const_key_weak(event_filters, -1), be_const_var(5) },
- { be_const_key_weak(event_requests, 6), be_const_var(4) },
+ { be_const_key_weak(attributes_requests, 7), be_const_var(3) },
+ { be_const_key_weak(fabric_filtered, 6), be_const_var(6) },
{ be_const_key_weak(min_interval_floor, -1), be_const_var(1) },
{ be_const_key_weak(data_version_filters, -1), be_const_var(7) },
{ be_const_key_weak(max_interval_ceiling, -1), be_const_var(2) },
- { be_const_key_weak(attribute_requests, 7), be_const_var(3) },
- { be_const_key_weak(fabric_filtered, 3), be_const_var(6) },
+ { be_const_key_weak(event_requests, 3), be_const_var(4) },
+ { be_const_key_weak(event_filters, -1), be_const_var(5) },
{ be_const_key_weak(from_TLV, -1), be_const_closure(Matter_SubscribeRequestMessage_from_TLV_closure) },
{ be_const_key_weak(keep_subscriptions, 0), be_const_var(0) },
})),
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
new file mode 100644
index 000000000..6eec4ee7c
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
@@ -0,0 +1,1024 @@
+/* Solidification of Matter_IM_Message.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Path;
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Matter_Path_tostring, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(),
+ /* K2 */ be_nested_str_weak(endpoint),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(_X5B_X2502X_X5D),
+ /* K5 */ be_nested_str_weak(_X5B_X2A_X2A_X5D),
+ /* K6 */ be_nested_str_weak(cluster),
+ /* K7 */ be_nested_str_weak(_X2504X_X2F),
+ /* K8 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2F),
+ /* K9 */ be_nested_str_weak(attribute),
+ /* K10 */ be_nested_str_weak(_X2504X),
+ /* K11 */ be_nested_str_weak(command),
+ /* K12 */ be_nested_str_weak(_X2A_X2A_X2A_X2A),
+ /* K13 */ be_nested_str_weak(Exception_X3E_X20),
+ /* K14 */ be_nested_str_weak(_X2C_X20),
+ }),
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[75]) { /* code */
+ 0xA802003A, // 0000 EXBLK 0 #003C
+ 0xA4060000, // 0001 IMPORT R1 K0
+ 0x58080001, // 0002 LDCONST R2 K1
+ 0x880C0102, // 0003 GETMBR R3 R0 K2
+ 0x4C100000, // 0004 LDNIL R4
+ 0x200C0604, // 0005 NE R3 R3 R4
+ 0x780E0004, // 0006 JMPF R3 #000C
+ 0x8C0C0303, // 0007 GETMET R3 R1 K3
+ 0x58140004, // 0008 LDCONST R5 K4
+ 0x88180102, // 0009 GETMBR R6 R0 K2
+ 0x7C0C0600, // 000A CALL R3 3
+ 0x70020000, // 000B JMP #000D
+ 0x580C0005, // 000C LDCONST R3 K5
+ 0x00080403, // 000D ADD R2 R2 R3
+ 0x880C0106, // 000E GETMBR R3 R0 K6
+ 0x4C100000, // 000F LDNIL R4
+ 0x200C0604, // 0010 NE R3 R3 R4
+ 0x780E0004, // 0011 JMPF R3 #0017
+ 0x8C0C0303, // 0012 GETMET R3 R1 K3
+ 0x58140007, // 0013 LDCONST R5 K7
+ 0x88180106, // 0014 GETMBR R6 R0 K6
+ 0x7C0C0600, // 0015 CALL R3 3
+ 0x70020000, // 0016 JMP #0018
+ 0x580C0008, // 0017 LDCONST R3 K8
+ 0x00080403, // 0018 ADD R2 R2 R3
+ 0x880C0109, // 0019 GETMBR R3 R0 K9
+ 0x4C100000, // 001A LDNIL R4
+ 0x200C0604, // 001B NE R3 R3 R4
+ 0x780E0004, // 001C JMPF R3 #0022
+ 0x8C0C0303, // 001D GETMET R3 R1 K3
+ 0x5814000A, // 001E LDCONST R5 K10
+ 0x88180109, // 001F GETMBR R6 R0 K9
+ 0x7C0C0600, // 0020 CALL R3 3
+ 0x70020000, // 0021 JMP #0023
+ 0x580C0001, // 0022 LDCONST R3 K1
+ 0x00080403, // 0023 ADD R2 R2 R3
+ 0x880C010B, // 0024 GETMBR R3 R0 K11
+ 0x4C100000, // 0025 LDNIL R4
+ 0x200C0604, // 0026 NE R3 R3 R4
+ 0x780E0004, // 0027 JMPF R3 #002D
+ 0x8C0C0303, // 0028 GETMET R3 R1 K3
+ 0x5814000A, // 0029 LDCONST R5 K10
+ 0x8818010B, // 002A GETMBR R6 R0 K11
+ 0x7C0C0600, // 002B CALL R3 3
+ 0x70020000, // 002C JMP #002E
+ 0x580C0001, // 002D LDCONST R3 K1
+ 0x00080403, // 002E ADD R2 R2 R3
+ 0x880C0109, // 002F GETMBR R3 R0 K9
+ 0x4C100000, // 0030 LDNIL R4
+ 0x1C0C0604, // 0031 EQ R3 R3 R4
+ 0x780E0004, // 0032 JMPF R3 #0038
+ 0x880C010B, // 0033 GETMBR R3 R0 K11
+ 0x4C100000, // 0034 LDNIL R4
+ 0x1C0C0604, // 0035 EQ R3 R3 R4
+ 0x780E0000, // 0036 JMPF R3 #0038
+ 0x0008050C, // 0037 ADD R2 R2 K12
+ 0xA8040001, // 0038 EXBLK 1 1
+ 0x80040400, // 0039 RET 1 R2
+ 0xA8040001, // 003A EXBLK 1 1
+ 0x7002000D, // 003B JMP #004A
+ 0xAC040002, // 003C CATCH R1 0 2
+ 0x7002000A, // 003D JMP #0049
+ 0x600C0008, // 003E GETGBL R3 G8
+ 0x5C100200, // 003F MOVE R4 R1
+ 0x7C0C0200, // 0040 CALL R3 1
+ 0x000E1A03, // 0041 ADD R3 K13 R3
+ 0x000C070E, // 0042 ADD R3 R3 K14
+ 0x60100008, // 0043 GETGBL R4 G8
+ 0x5C140400, // 0044 MOVE R5 R2
+ 0x7C100200, // 0045 CALL R4 1
+ 0x000C0604, // 0046 ADD R3 R3 R4
+ 0x80040600, // 0047 RET 1 R3
+ 0x70020000, // 0048 JMP #004A
+ 0xB0080000, // 0049 RAISE 2 R0 R0
+ 0x80000000, // 004A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Path
+********************************************************************/
+be_local_class(Matter_Path,
+ 5,
+ NULL,
+ be_nested_map(6,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(tostring, -1), be_const_closure(Matter_Path_tostring_closure) },
+ { be_const_key_weak(cluster, 3), be_const_var(1) },
+ { be_const_key_weak(command, -1), be_const_var(3) },
+ { be_const_key_weak(status, 0), be_const_var(4) },
+ { be_const_key_weak(endpoint, -1), be_const_var(0) },
+ { be_const_key_weak(attribute, -1), be_const_var(2) },
+ })),
+ be_str_weak(Matter_Path)
+);
+/*******************************************************************/
+
+void be_load_Matter_Path_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Path);
+ be_setglobal(vm, "Matter_Path");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_Message;
+
+/********************************************************************
+** Solidified function: send
+********************************************************************/
+be_local_closure(Matter_IM_Message_send, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(encode),
+ /* K2 */ be_nested_str_weak(data),
+ /* K3 */ be_nested_str_weak(to_TLV),
+ /* K4 */ be_nested_str_weak(encrypt),
+ /* K5 */ be_nested_str_weak(send_response),
+ /* K6 */ be_nested_str_weak(raw),
+ /* K7 */ be_nested_str_weak(remote_ip),
+ /* K8 */ be_nested_str_weak(remote_port),
+ /* K9 */ be_nested_str_weak(message_counter),
+ }),
+ be_str_weak(send),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C0C0501, // 0001 GETMET R3 R2 K1
+ 0x88140102, // 0002 GETMBR R5 R0 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x7C140200, // 0004 CALL R5 1
+ 0x8C140B01, // 0005 GETMET R5 R5 K1
+ 0x7C140200, // 0006 CALL R5 1
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x8C0C0504, // 0008 GETMET R3 R2 K4
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x8C0C0305, // 000A GETMET R3 R1 K5
+ 0x88140506, // 000B GETMBR R5 R2 K6
+ 0x88180507, // 000C GETMBR R6 R2 K7
+ 0x881C0508, // 000D GETMBR R7 R2 K8
+ 0x88200509, // 000E GETMBR R8 R2 K9
+ 0x7C0C0A00, // 000F CALL R3 5
+ 0x500C0200, // 0010 LDBOOL R3 1 0
+ 0x80040600, // 0011 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: ack_received
+********************************************************************/
+be_local_closure(Matter_IM_Message_ack_received, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* 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(resp),
+ /* K1 */ be_nested_str_weak(build_response),
+ /* K2 */ be_nested_str_weak(opcode),
+ /* K3 */ be_nested_str_weak(x_flag_r),
+ /* K4 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(ack_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x8C080301, // 0000 GETMET R2 R1 K1
+ 0x88100100, // 0001 GETMBR R4 R0 K0
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140100, // 0003 GETMBR R5 R0 K0
+ 0x88140B03, // 0004 GETMBR R5 R5 K3
+ 0x88180100, // 0005 GETMBR R6 R0 K0
+ 0x7C080800, // 0006 CALL R2 4
+ 0x90020002, // 0007 SETMBR R0 K0 R2
+ 0x50080200, // 0008 LDBOOL R2 1 0
+ 0x90020802, // 0009 SETMBR R0 K4 R2
+ 0x80000000, // 000A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_exchangeid
+********************************************************************/
+be_local_closure(Matter_IM_Message_get_exchangeid, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(exchange_id),
+ }),
+ be_str_weak(get_exchangeid),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_Message_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(build_response),
+ /* K2 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x8C100301, // 0000 GETMET R4 R1 K1
+ 0x5C180400, // 0001 MOVE R6 R2
+ 0x5C1C0600, // 0002 MOVE R7 R3
+ 0x7C100600, // 0003 CALL R4 3
+ 0x90020004, // 0004 SETMBR R0 K0 R4
+ 0x50100200, // 0005 LDBOOL R4 1 0
+ 0x90020404, // 0006 SETMBR R0 K2 R4
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_Message
+********************************************************************/
+be_local_class(Matter_IM_Message,
+ 3,
+ NULL,
+ be_nested_map(7,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(resp, -1), be_const_var(0) },
+ { be_const_key_weak(ready, 6), be_const_var(1) },
+ { be_const_key_weak(send, -1), be_const_closure(Matter_IM_Message_send_closure) },
+ { be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_Message_ack_received_closure) },
+ { be_const_key_weak(get_exchangeid, -1), be_const_closure(Matter_IM_Message_get_exchangeid_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Message_init_closure) },
+ { be_const_key_weak(data, -1), be_const_var(2) },
+ })),
+ be_str_weak(Matter_IM_Message)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_Message_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_Message);
+ be_setglobal(vm, "Matter_IM_Message");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_Status;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_Status_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(StatusResponseMessage),
+ /* K4 */ be_nested_str_weak(status),
+ /* K5 */ be_nested_str_weak(data),
+ /* K6 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[16]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x58180001, // 0005 LDCONST R6 K1
+ 0x501C0200, // 0006 LDBOOL R7 1 0
+ 0x7C0C0800, // 0007 CALL R3 4
+ 0xB80E0400, // 0008 GETNGBL R3 K2
+ 0x8C0C0703, // 0009 GETMET R3 R3 K3
+ 0x7C0C0200, // 000A CALL R3 1
+ 0x900E0802, // 000B SETMBR R3 K4 R2
+ 0x90020A03, // 000C SETMBR R0 K5 R3
+ 0x50100200, // 000D LDBOOL R4 1 0
+ 0x90020C04, // 000E SETMBR R0 K6 R4
+ 0x80000000, // 000F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_Status
+********************************************************************/
+extern const bclass be_class_Matter_IM_Message;
+be_local_class(Matter_IM_Status,
+ 0,
+ &be_class_Matter_IM_Message,
+ be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Status_init_closure) },
+ })),
+ be_str_weak(Matter_IM_Status)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_Status_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_Status);
+ be_setglobal(vm, "Matter_IM_Status");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_InvokeResponse;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_InvokeResponse_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(data),
+ /* K2 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x541A0008, // 0005 LDINT R6 9
+ 0x501C0200, // 0006 LDBOOL R7 1 0
+ 0x7C0C0800, // 0007 CALL R3 4
+ 0x90020202, // 0008 SETMBR R0 K1 R2
+ 0x500C0200, // 0009 LDBOOL R3 1 0
+ 0x90020403, // 000A SETMBR R0 K2 R3
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_InvokeResponse
+********************************************************************/
+extern const bclass be_class_Matter_IM_Message;
+be_local_class(Matter_IM_InvokeResponse,
+ 0,
+ &be_class_Matter_IM_Message,
+ be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_InvokeResponse_init_closure) },
+ })),
+ be_str_weak(Matter_IM_InvokeResponse)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_InvokeResponse_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_InvokeResponse);
+ be_setglobal(vm, "Matter_IM_InvokeResponse");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_WriteResponse;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_WriteResponse_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(data),
+ /* K2 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x541A0006, // 0005 LDINT R6 7
+ 0x501C0200, // 0006 LDBOOL R7 1 0
+ 0x7C0C0800, // 0007 CALL R3 4
+ 0x90020202, // 0008 SETMBR R0 K1 R2
+ 0x500C0200, // 0009 LDBOOL R3 1 0
+ 0x90020403, // 000A SETMBR R0 K2 R3
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_WriteResponse
+********************************************************************/
+extern const bclass be_class_Matter_IM_Message;
+be_local_class(Matter_IM_WriteResponse,
+ 0,
+ &be_class_Matter_IM_Message,
+ be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_WriteResponse_init_closure) },
+ })),
+ be_str_weak(Matter_IM_WriteResponse)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_WriteResponse_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_WriteResponse);
+ be_setglobal(vm, "Matter_IM_WriteResponse");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_ReportData;
+
+/********************************************************************
+** Solidified function: send
+********************************************************************/
+be_local_closure(Matter_IM_ReportData_send, /* name */
+ be_nested_proto(
+ 17, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[31]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(resp),
+ /* K2 */ be_nested_str_weak(data),
+ /* K3 */ be_nested_str_weak(more_chunked_messages),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(attribute_reports),
+ /* K6 */ be_nested_str_weak(to_TLV),
+ /* K7 */ be_nested_str_weak(encode_len),
+ /* K8 */ be_const_int(1),
+ /* K9 */ be_nested_str_weak(MAX_MESSAGE),
+ /* K10 */ be_nested_str_weak(tasmota),
+ /* K11 */ be_nested_str_weak(log),
+ /* K12 */ be_nested_str_weak(format),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20elements_X3D_X25i_X20msg_sz_X3D_X25i_X20total_X3D_X25i),
+ /* K14 */ be_const_int(3),
+ /* K15 */ be_const_int(2147483647),
+ /* K16 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20next_chunk_X20exch_X3D_X25i),
+ /* K17 */ be_nested_str_weak(get_exchangeid),
+ /* K18 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20first_chunk_X20exch_X3D_X25i),
+ /* K19 */ be_nested_str_weak(MTR_X3A_X20sending_X20TLV),
+ /* K20 */ be_nested_str_weak(encode),
+ /* 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(MTR_X3A_X20to_be_sent_later_X20TLV),
+ /* K28 */ be_nested_str_weak(expiration),
+ /* K29 */ be_nested_str_weak(millis),
+ /* K30 */ be_nested_str_weak(MSG_TIMEOUT),
+ }),
+ be_str_weak(send),
+ &be_const_str_solidified,
+ ( &(const binstruction[139]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0101, // 0001 GETMBR R3 R0 K1
+ 0x88100102, // 0002 GETMBR R4 R0 K2
+ 0x88140903, // 0003 GETMBR R5 R4 K3
+ 0x58180004, // 0004 LDCONST R6 K4
+ 0x581C0004, // 0005 LDCONST R7 K4
+ 0x6020000C, // 0006 GETGBL R8 G12
+ 0x88240905, // 0007 GETMBR R9 R4 K5
+ 0x7C200200, // 0008 CALL R8 1
+ 0x24201104, // 0009 GT R8 R8 K4
+ 0x78220007, // 000A JMPF R8 #0013
+ 0x88200905, // 000B GETMBR R8 R4 K5
+ 0x94201104, // 000C GETIDX R8 R8 K4
+ 0x8C201106, // 000D GETMET R8 R8 K6
+ 0x7C200200, // 000E CALL R8 1
+ 0x8C201107, // 000F GETMET R8 R8 K7
+ 0x7C200200, // 0010 CALL R8 1
+ 0x5C181000, // 0011 MOVE R6 R8
+ 0x581C0008, // 0012 LDCONST R7 K8
+ 0x88200109, // 0013 GETMBR R8 R0 K9
+ 0x14200C08, // 0014 LT R8 R6 R8
+ 0x78220013, // 0015 JMPF R8 #002A
+ 0x6020000C, // 0016 GETGBL R8 G12
+ 0x88240905, // 0017 GETMBR R9 R4 K5
+ 0x7C200200, // 0018 CALL R8 1
+ 0x14200E08, // 0019 LT R8 R7 R8
+ 0x7822000E, // 001A JMPF R8 #002A
+ 0x88200905, // 001B GETMBR R8 R4 K5
+ 0x94201007, // 001C GETIDX R8 R8 R7
+ 0x8C201106, // 001D GETMET R8 R8 K6
+ 0x7C200200, // 001E CALL R8 1
+ 0x8C201107, // 001F GETMET R8 R8 K7
+ 0x7C200200, // 0020 CALL R8 1
+ 0x00240C08, // 0021 ADD R9 R6 R8
+ 0x88280109, // 0022 GETMBR R10 R0 K9
+ 0x1424120A, // 0023 LT R9 R9 R10
+ 0x78260002, // 0024 JMPF R9 #0028
+ 0x00180C08, // 0025 ADD R6 R6 R8
+ 0x001C0F08, // 0026 ADD R7 R7 K8
+ 0x70020000, // 0027 JMP #0029
+ 0x70020000, // 0028 JMP #002A
+ 0x7001FFE8, // 0029 JMP #0013
+ 0xB8221400, // 002A GETNGBL R8 K10
+ 0x8C20110B, // 002B GETMET R8 R8 K11
+ 0x8C28050C, // 002C GETMET R10 R2 K12
+ 0x5830000D, // 002D LDCONST R12 K13
+ 0x5C340E00, // 002E MOVE R13 R7
+ 0x5C380C00, // 002F MOVE R14 R6
+ 0x603C000C, // 0030 GETGBL R15 G12
+ 0x88400905, // 0031 GETMBR R16 R4 K5
+ 0x7C3C0200, // 0032 CALL R15 1
+ 0x7C280A00, // 0033 CALL R10 5
+ 0x582C000E, // 0034 LDCONST R11 K14
+ 0x7C200600, // 0035 CALL R8 3
+ 0x40200F0F, // 0036 CONNECT R8 R7 K15
+ 0x88240905, // 0037 GETMBR R9 R4 K5
+ 0x94201208, // 0038 GETIDX R8 R9 R8
+ 0x04280F08, // 0039 SUB R10 R7 K8
+ 0x402A080A, // 003A CONNECT R10 K4 R10
+ 0x882C0905, // 003B GETMBR R11 R4 K5
+ 0x9428160A, // 003C GETIDX R10 R11 R10
+ 0x90120A0A, // 003D SETMBR R4 K5 R10
+ 0x6028000C, // 003E GETGBL R10 G12
+ 0x5C2C1000, // 003F MOVE R11 R8
+ 0x7C280200, // 0040 CALL R10 1
+ 0x24281504, // 0041 GT R10 R10 K4
+ 0x9012060A, // 0042 SETMBR R4 K3 R10
+ 0x78160008, // 0043 JMPF R5 #004D
+ 0xB82A1400, // 0044 GETNGBL R10 K10
+ 0x8C28150B, // 0045 GETMET R10 R10 K11
+ 0x8C30050C, // 0046 GETMET R12 R2 K12
+ 0x58380010, // 0047 LDCONST R14 K16
+ 0x8C3C0111, // 0048 GETMET R15 R0 K17
+ 0x7C3C0200, // 0049 CALL R15 1
+ 0x7C300600, // 004A CALL R12 3
+ 0x5834000E, // 004B LDCONST R13 K14
+ 0x7C280600, // 004C CALL R10 3
+ 0x88240903, // 004D GETMBR R9 R4 K3
+ 0x78260012, // 004E JMPF R9 #0062
+ 0x5C240A00, // 004F MOVE R9 R5
+ 0x74260008, // 0050 JMPT R9 #005A
+ 0xB8261400, // 0051 GETNGBL R9 K10
+ 0x8C24130B, // 0052 GETMET R9 R9 K11
+ 0x8C2C050C, // 0053 GETMET R11 R2 K12
+ 0x58340012, // 0054 LDCONST R13 K18
+ 0x8C380111, // 0055 GETMET R14 R0 K17
+ 0x7C380200, // 0056 CALL R14 1
+ 0x7C2C0600, // 0057 CALL R11 3
+ 0x5830000E, // 0058 LDCONST R12 K14
+ 0x7C240600, // 0059 CALL R9 3
+ 0xB8261400, // 005A GETNGBL R9 K10
+ 0x8C24130B, // 005B GETMET R9 R9 K11
+ 0x602C0008, // 005C GETGBL R11 G8
+ 0x5C300800, // 005D MOVE R12 R4
+ 0x7C2C0200, // 005E CALL R11 1
+ 0x002E260B, // 005F ADD R11 K19 R11
+ 0x5830000E, // 0060 LDCONST R12 K14
+ 0x7C240600, // 0061 CALL R9 3
+ 0x8C240714, // 0062 GETMET R9 R3 K20
+ 0x882C0102, // 0063 GETMBR R11 R0 K2
+ 0x8C2C1706, // 0064 GETMET R11 R11 K6
+ 0x7C2C0200, // 0065 CALL R11 1
+ 0x8C2C1714, // 0066 GETMET R11 R11 K20
+ 0x7C2C0200, // 0067 CALL R11 1
+ 0x7C240400, // 0068 CALL R9 2
+ 0x8C240715, // 0069 GETMET R9 R3 K21
+ 0x7C240200, // 006A CALL R9 1
+ 0x8C240316, // 006B GETMET R9 R1 K22
+ 0x882C0717, // 006C GETMBR R11 R3 K23
+ 0x88300718, // 006D GETMBR R12 R3 K24
+ 0x88340719, // 006E GETMBR R13 R3 K25
+ 0x8838071A, // 006F GETMBR R14 R3 K26
+ 0x7C240A00, // 0070 CALL R9 5
+ 0x6024000C, // 0071 GETGBL R9 G12
+ 0x5C281000, // 0072 MOVE R10 R8
+ 0x7C240200, // 0073 CALL R9 1
+ 0x24241304, // 0074 GT R9 R9 K4
+ 0x78260011, // 0075 JMPF R9 #0088
+ 0x90120A08, // 0076 SETMBR R4 K5 R8
+ 0xB8261400, // 0077 GETNGBL R9 K10
+ 0x8C24130B, // 0078 GETMET R9 R9 K11
+ 0x602C0008, // 0079 GETGBL R11 G8
+ 0x5C300800, // 007A MOVE R12 R4
+ 0x7C2C0200, // 007B CALL R11 1
+ 0x002E360B, // 007C ADD R11 K27 R11
+ 0x5830000E, // 007D LDCONST R12 K14
+ 0x7C240600, // 007E CALL R9 3
+ 0xB8261400, // 007F GETNGBL R9 K10
+ 0x8C24131D, // 0080 GETMET R9 R9 K29
+ 0x7C240200, // 0081 CALL R9 1
+ 0x8828011E, // 0082 GETMBR R10 R0 K30
+ 0x0024120A, // 0083 ADD R9 R9 R10
+ 0x90023809, // 0084 SETMBR R0 K28 R9
+ 0x50240000, // 0085 LDBOOL R9 0 0
+ 0x80041200, // 0086 RET 1 R9
+ 0x70020001, // 0087 JMP #008A
+ 0x50240200, // 0088 LDBOOL R9 1 0
+ 0x80041200, // 0089 RET 1 R9
+ 0x80000000, // 008A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_ReportData_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(data),
+ /* K2 */ be_nested_str_weak(ready),
+ /* K3 */ be_nested_str_weak(expiration),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(millis),
+ /* K6 */ be_nested_str_weak(MSG_TIMEOUT),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x541A0004, // 0005 LDINT R6 5
+ 0x501C0200, // 0006 LDBOOL R7 1 0
+ 0x7C0C0800, // 0007 CALL R3 4
+ 0x90020202, // 0008 SETMBR R0 K1 R2
+ 0x500C0200, // 0009 LDBOOL R3 1 0
+ 0x90020403, // 000A SETMBR R0 K2 R3
+ 0xB80E0800, // 000B GETNGBL R3 K4
+ 0x8C0C0705, // 000C GETMET R3 R3 K5
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x88100106, // 000E GETMBR R4 R0 K6
+ 0x000C0604, // 000F ADD R3 R3 R4
+ 0x90020603, // 0010 SETMBR R0 K3 R3
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_ReportData
+********************************************************************/
+extern const bclass be_class_Matter_IM_Message;
+be_local_class(Matter_IM_ReportData,
+ 1,
+ &be_class_Matter_IM_Message,
+ be_nested_map(5,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(expiration, 2), be_const_var(0) },
+ { be_const_key_weak(send, -1), be_const_closure(Matter_IM_ReportData_send_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_ReportData_init_closure) },
+ { be_const_key_weak(MAX_MESSAGE, 4), be_const_int(1200) },
+ { be_const_key_weak(MSG_TIMEOUT, -1), be_const_int(10000) },
+ })),
+ be_str_weak(Matter_IM_ReportData)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_ReportData_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_ReportData);
+ be_setglobal(vm, "Matter_IM_ReportData");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_ReportDataSubscribed;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_init, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(Frame),
+ /* K3 */ be_nested_str_weak(initiate_response),
+ /* K4 */ be_nested_str_weak(data),
+ /* K5 */ be_nested_str_weak(ready),
+ /* K6 */ be_nested_str_weak(expiration),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(millis),
+ /* K9 */ be_nested_str_weak(MSG_TIMEOUT),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0xB8120200, // 0000 GETNGBL R4 K1
+ 0x88100902, // 0001 GETMBR R4 R4 K2
+ 0x8C100903, // 0002 GETMET R4 R4 K3
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x5C1C0400, // 0004 MOVE R7 R2
+ 0x54220004, // 0005 LDINT R8 5
+ 0x50240200, // 0006 LDBOOL R9 1 0
+ 0x7C100A00, // 0007 CALL R4 5
+ 0x90020004, // 0008 SETMBR R0 K0 R4
+ 0x90020803, // 0009 SETMBR R0 K4 R3
+ 0x50100200, // 000A LDBOOL R4 1 0
+ 0x90020A04, // 000B SETMBR R0 K5 R4
+ 0xB8120E00, // 000C GETNGBL R4 K7
+ 0x8C100908, // 000D GETMET R4 R4 K8
+ 0x7C100200, // 000E CALL R4 1
+ 0x88140109, // 000F GETMBR R5 R0 K9
+ 0x00100805, // 0010 ADD R4 R4 R5
+ 0x90020C04, // 0011 SETMBR R0 K6 R4
+ 0x80000000, // 0012 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_ReportDataSubscribed
+********************************************************************/
+extern const bclass be_class_Matter_IM_ReportData;
+be_local_class(Matter_IM_ReportDataSubscribed,
+ 0,
+ &be_class_Matter_IM_ReportData,
+ be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_ReportDataSubscribed_init_closure) },
+ })),
+ be_str_weak(Matter_IM_ReportDataSubscribed)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_ReportDataSubscribed_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_ReportDataSubscribed);
+ be_setglobal(vm, "Matter_IM_ReportDataSubscribed");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_SubscribeResponse;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_SubscribeResponse_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(sub),
+ /* K2 */ be_nested_str_weak(report_data_phase),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x60100003, // 0000 GETGBL R4 G3
+ 0x5C140000, // 0001 MOVE R5 R0
+ 0x7C100200, // 0002 CALL R4 1
+ 0x8C100900, // 0003 GETMET R4 R4 K0
+ 0x5C180200, // 0004 MOVE R6 R1
+ 0x5C1C0400, // 0005 MOVE R7 R2
+ 0x7C100600, // 0006 CALL R4 3
+ 0x90020203, // 0007 SETMBR R0 K1 R3
+ 0x50100200, // 0008 LDBOOL R4 1 0
+ 0x90020404, // 0009 SETMBR R0 K2 R4
+ 0x80000000, // 000A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send
+********************************************************************/
+be_local_closure(Matter_IM_SubscribeResponse_send, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[17]) { /* constants */
+ /* K0 */ be_nested_str_weak(report_data_phase),
+ /* K1 */ be_nested_str_weak(send),
+ /* K2 */ be_nested_str_weak(resp),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(SubscribeResponseMessage),
+ /* K5 */ be_nested_str_weak(subscription_id),
+ /* K6 */ be_nested_str_weak(sub),
+ /* K7 */ be_nested_str_weak(max_interval),
+ /* K8 */ be_nested_str_weak(opcode),
+ /* K9 */ be_nested_str_weak(encode),
+ /* K10 */ be_nested_str_weak(to_TLV),
+ /* K11 */ be_nested_str_weak(encrypt),
+ /* K12 */ be_nested_str_weak(send_response),
+ /* K13 */ be_nested_str_weak(raw),
+ /* K14 */ be_nested_str_weak(remote_ip),
+ /* K15 */ be_nested_str_weak(remote_port),
+ /* K16 */ be_nested_str_weak(message_counter),
+ }),
+ be_str_weak(send),
+ &be_const_str_solidified,
+ ( &(const binstruction[47]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x780A000E, // 0001 JMPF R2 #0011
+ 0x60080003, // 0002 GETGBL R2 G3
+ 0x5C0C0000, // 0003 MOVE R3 R0
+ 0x7C080200, // 0004 CALL R2 1
+ 0x8C080501, // 0005 GETMET R2 R2 K1
+ 0x5C100200, // 0006 MOVE R4 R1
+ 0x7C080400, // 0007 CALL R2 2
+ 0x5C0C0400, // 0008 MOVE R3 R2
+ 0x740E0001, // 0009 JMPT R3 #000C
+ 0x500C0000, // 000A LDBOOL R3 0 0
+ 0x80040600, // 000B RET 1 R3
+ 0x500C0000, // 000C LDBOOL R3 0 0
+ 0x90020003, // 000D SETMBR R0 K0 R3
+ 0x500C0000, // 000E LDBOOL R3 0 0
+ 0x80040600, // 000F RET 1 R3
+ 0x7002001C, // 0010 JMP #002E
+ 0x88080102, // 0011 GETMBR R2 R0 K2
+ 0xB80E0600, // 0012 GETNGBL R3 K3
+ 0x8C0C0704, // 0013 GETMET R3 R3 K4
+ 0x7C0C0200, // 0014 CALL R3 1
+ 0x88100106, // 0015 GETMBR R4 R0 K6
+ 0x88100905, // 0016 GETMBR R4 R4 K5
+ 0x900E0A04, // 0017 SETMBR R3 K5 R4
+ 0x88100106, // 0018 GETMBR R4 R0 K6
+ 0x88100907, // 0019 GETMBR R4 R4 K7
+ 0x900E0E04, // 001A SETMBR R3 K7 R4
+ 0x88100102, // 001B GETMBR R4 R0 K2
+ 0x54160003, // 001C LDINT R5 4
+ 0x90121005, // 001D SETMBR R4 K8 R5
+ 0x8C100509, // 001E GETMET R4 R2 K9
+ 0x8C18070A, // 001F GETMET R6 R3 K10
+ 0x7C180200, // 0020 CALL R6 1
+ 0x8C180D09, // 0021 GETMET R6 R6 K9
+ 0x7C180200, // 0022 CALL R6 1
+ 0x7C100400, // 0023 CALL R4 2
+ 0x8C10050B, // 0024 GETMET R4 R2 K11
+ 0x7C100200, // 0025 CALL R4 1
+ 0x8C10030C, // 0026 GETMET R4 R1 K12
+ 0x8818050D, // 0027 GETMBR R6 R2 K13
+ 0x881C050E, // 0028 GETMBR R7 R2 K14
+ 0x8820050F, // 0029 GETMBR R8 R2 K15
+ 0x88240510, // 002A GETMBR R9 R2 K16
+ 0x7C100A00, // 002B CALL R4 5
+ 0x50100200, // 002C LDBOOL R4 1 0
+ 0x80040800, // 002D RET 1 R4
+ 0x80000000, // 002E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_SubscribeResponse
+********************************************************************/
+extern const bclass be_class_Matter_IM_ReportData;
+be_local_class(Matter_IM_SubscribeResponse,
+ 2,
+ &be_class_Matter_IM_ReportData,
+ be_nested_map(4,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(report_data_phase, -1), be_const_var(1) },
+ { be_const_key_weak(sub, -1), be_const_var(0) },
+ { be_const_key_weak(send, -1), be_const_closure(Matter_IM_SubscribeResponse_send_closure) },
+ { be_const_key_weak(init, 2), be_const_closure(Matter_IM_SubscribeResponse_init_closure) },
+ })),
+ be_str_weak(Matter_IM_SubscribeResponse)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_SubscribeResponse_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_SubscribeResponse);
+ be_setglobal(vm, "Matter_IM_SubscribeResponse");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
new file mode 100644
index 000000000..cc1075706
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
@@ -0,0 +1,585 @@
+/* Solidification of Matter_IM_Subscription.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_IM_Subscription;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_init, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 4, /* 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_nested_str_weak(subscription_id),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(min_interval_floor),
+ /* K3 */ be_const_int(0),
+ /* K4 */ be_nested_str_weak(min_interval),
+ /* K5 */ be_nested_str_weak(max_interval_ceiling),
+ /* K6 */ be_nested_str_weak(max_interval),
+ /* K7 */ be_nested_str_weak(fabric_filtered),
+ /* K8 */ be_nested_str_weak(path_list),
+ /* K9 */ be_nested_str_weak(attributes_requests),
+ /* K10 */ be_nested_str_weak(matter),
+ /* K11 */ be_nested_str_weak(Path),
+ /* K12 */ be_nested_str_weak(endpoint),
+ /* K13 */ be_nested_str_weak(cluster),
+ /* K14 */ be_nested_str_weak(attribute),
+ /* K15 */ be_nested_str_weak(push),
+ /* K16 */ be_nested_str_weak(stop_iteration),
+ /* K17 */ be_nested_str_weak(updates),
+ /* K18 */ be_nested_str_weak(clear_and_arm),
+ /* K19 */ be_nested_str_weak(tasmota),
+ /* K20 */ be_nested_str_weak(log),
+ /* K21 */ be_nested_str_weak(MTR_X3A_X20new_X20subsctiption_X20),
+ /* K22 */ be_nested_str_weak(inspect),
+ /* K23 */ be_const_int(2),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[64]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x90020202, // 0001 SETMBR R0 K1 R2
+ 0x88100702, // 0002 GETMBR R4 R3 K2
+ 0x14140903, // 0003 LT R5 R4 K3
+ 0x78160000, // 0004 JMPF R5 #0006
+ 0x58100003, // 0005 LDCONST R4 K3
+ 0x5416003B, // 0006 LDINT R5 60
+ 0x24140805, // 0007 GT R5 R4 R5
+ 0x78160000, // 0008 JMPF R5 #000A
+ 0x5412003B, // 0009 LDINT R4 60
+ 0x90020804, // 000A SETMBR R0 K4 R4
+ 0x88140705, // 000B GETMBR R5 R3 K5
+ 0x541A003B, // 000C LDINT R6 60
+ 0x14180A06, // 000D LT R6 R5 R6
+ 0x781A0000, // 000E JMPF R6 #0010
+ 0x5416003B, // 000F LDINT R5 60
+ 0x541A0E0F, // 0010 LDINT R6 3600
+ 0x24180A06, // 0011 GT R6 R5 R6
+ 0x781A0000, // 0012 JMPF R6 #0014
+ 0x54160E0F, // 0013 LDINT R5 3600
+ 0x90020C05, // 0014 SETMBR R0 K6 R5
+ 0x88180707, // 0015 GETMBR R6 R3 K7
+ 0x90020E06, // 0016 SETMBR R0 K7 R6
+ 0x60180012, // 0017 GETGBL R6 G18
+ 0x7C180000, // 0018 CALL R6 0
+ 0x90021006, // 0019 SETMBR R0 K8 R6
+ 0x60180010, // 001A GETGBL R6 G16
+ 0x881C0709, // 001B GETMBR R7 R3 K9
+ 0x7C180200, // 001C CALL R6 1
+ 0xA802000F, // 001D EXBLK 0 #002E
+ 0x5C1C0C00, // 001E MOVE R7 R6
+ 0x7C1C0000, // 001F CALL R7 0
+ 0xB8221400, // 0020 GETNGBL R8 K10
+ 0x8C20110B, // 0021 GETMET R8 R8 K11
+ 0x7C200200, // 0022 CALL R8 1
+ 0x88240F0C, // 0023 GETMBR R9 R7 K12
+ 0x90221809, // 0024 SETMBR R8 K12 R9
+ 0x88240F0D, // 0025 GETMBR R9 R7 K13
+ 0x90221A09, // 0026 SETMBR R8 K13 R9
+ 0x88240F0E, // 0027 GETMBR R9 R7 K14
+ 0x90221C09, // 0028 SETMBR R8 K14 R9
+ 0x88240108, // 0029 GETMBR R9 R0 K8
+ 0x8C24130F, // 002A GETMET R9 R9 K15
+ 0x5C2C1000, // 002B MOVE R11 R8
+ 0x7C240400, // 002C CALL R9 2
+ 0x7001FFEF, // 002D JMP #001E
+ 0x58180010, // 002E LDCONST R6 K16
+ 0xAC180200, // 002F CATCH R6 1 0
+ 0xB0080000, // 0030 RAISE 2 R0 R0
+ 0x60180012, // 0031 GETGBL R6 G18
+ 0x7C180000, // 0032 CALL R6 0
+ 0x90022206, // 0033 SETMBR R0 K17 R6
+ 0x8C180112, // 0034 GETMET R6 R0 K18
+ 0x7C180200, // 0035 CALL R6 1
+ 0xB81A2600, // 0036 GETNGBL R6 K19
+ 0x8C180D14, // 0037 GETMET R6 R6 K20
+ 0xB8221400, // 0038 GETNGBL R8 K10
+ 0x8C201116, // 0039 GETMET R8 R8 K22
+ 0x5C280000, // 003A MOVE R10 R0
+ 0x7C200400, // 003B CALL R8 2
+ 0x00222A08, // 003C ADD R8 K21 R8
+ 0x58240017, // 003D LDCONST R9 K23
+ 0x7C180600, // 003E CALL R6 3
+ 0x80000000, // 003F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: attribute_updated
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_attribute_updated, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(path_list),
+ /* K2 */ be_nested_str_weak(endpoint),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(updates),
+ /* K6 */ be_nested_str_weak(push),
+ /* K7 */ be_const_int(1),
+ }),
+ be_str_weak(attribute_updated),
+ &be_const_str_solidified,
+ ( &(const binstruction[39]) { /* code */
+ 0x580C0000, // 0000 LDCONST R3 K0
+ 0x6010000C, // 0001 GETGBL R4 G12
+ 0x88140101, // 0002 GETMBR R5 R0 K1
+ 0x7C100200, // 0003 CALL R4 1
+ 0x14100604, // 0004 LT R4 R3 R4
+ 0x7812001F, // 0005 JMPF R4 #0026
+ 0x88100101, // 0006 GETMBR R4 R0 K1
+ 0x94100803, // 0007 GETIDX R4 R4 R3
+ 0x88140902, // 0008 GETMBR R5 R4 K2
+ 0x4C180000, // 0009 LDNIL R6
+ 0x1C140A06, // 000A EQ R5 R5 R6
+ 0x74160003, // 000B JMPT R5 #0010
+ 0x88140902, // 000C GETMBR R5 R4 K2
+ 0x88180302, // 000D GETMBR R6 R1 K2
+ 0x1C140A06, // 000E EQ R5 R5 R6
+ 0x78160013, // 000F JMPF R5 #0024
+ 0x88140903, // 0010 GETMBR R5 R4 K3
+ 0x4C180000, // 0011 LDNIL R6
+ 0x1C140A06, // 0012 EQ R5 R5 R6
+ 0x74160003, // 0013 JMPT R5 #0018
+ 0x88140903, // 0014 GETMBR R5 R4 K3
+ 0x88180303, // 0015 GETMBR R6 R1 K3
+ 0x1C140A06, // 0016 EQ R5 R5 R6
+ 0x7816000B, // 0017 JMPF R5 #0024
+ 0x88140904, // 0018 GETMBR R5 R4 K4
+ 0x4C180000, // 0019 LDNIL R6
+ 0x1C140A06, // 001A EQ R5 R5 R6
+ 0x74160003, // 001B JMPT R5 #0020
+ 0x88140904, // 001C GETMBR R5 R4 K4
+ 0x88180304, // 001D GETMBR R6 R1 K4
+ 0x1C140A06, // 001E EQ R5 R5 R6
+ 0x78160003, // 001F JMPF R5 #0024
+ 0x88140105, // 0020 GETMBR R5 R0 K5
+ 0x8C140B06, // 0021 GETMET R5 R5 K6
+ 0x5C1C0200, // 0022 MOVE R7 R1
+ 0x7C140400, // 0023 CALL R5 2
+ 0x000C0707, // 0024 ADD R3 R3 K7
+ 0x7001FFDA, // 0025 JMP #0001
+ 0x80000000, // 0026 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: clear_and_arm
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_clear_and_arm, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(updates),
+ /* K1 */ be_nested_str_weak(clear),
+ /* K2 */ be_nested_str_weak(expiration),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(millis),
+ /* K5 */ be_nested_str_weak(max_interval),
+ /* K6 */ be_nested_str_weak(MAX_INTERVAL_MARGIN),
+ }),
+ be_str_weak(clear_and_arm),
+ &be_const_str_solidified,
+ ( &(const binstruction[14]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0xB8060600, // 0003 GETNGBL R1 K3
+ 0x8C040304, // 0004 GETMET R1 R1 K4
+ 0x7C040200, // 0005 CALL R1 1
+ 0x88080105, // 0006 GETMBR R2 R0 K5
+ 0x880C0106, // 0007 GETMBR R3 R0 K6
+ 0x04080403, // 0008 SUB R2 R2 R3
+ 0x540E03E7, // 0009 LDINT R3 1000
+ 0x08080403, // 000A MUL R2 R2 R3
+ 0x00040202, // 000B ADD R1 R1 R2
+ 0x90020401, // 000C SETMBR R0 K2 R1
+ 0x80000000, // 000D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_Subscription
+********************************************************************/
+be_local_class(Matter_IM_Subscription,
+ 8,
+ NULL,
+ be_nested_map(12,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(expiration, -1), be_const_var(6) },
+ { be_const_key_weak(updates, 9), be_const_var(7) },
+ { be_const_key_weak(fabric_filtered, -1), be_const_var(5) },
+ { be_const_key_weak(max_interval, 10), be_const_var(4) },
+ { be_const_key_weak(session, -1), be_const_var(1) },
+ { be_const_key_weak(min_interval, -1), be_const_var(3) },
+ { be_const_key_weak(MAX_INTERVAL_MARGIN, -1), be_const_int(10) },
+ { be_const_key_weak(attribute_updated, 4), be_const_closure(Matter_IM_Subscription_attribute_updated_closure) },
+ { be_const_key_weak(subscription_id, -1), be_const_var(0) },
+ { be_const_key_weak(clear_and_arm, -1), be_const_closure(Matter_IM_Subscription_clear_and_arm_closure) },
+ { be_const_key_weak(path_list, 11), be_const_var(2) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Subscription_init_closure) },
+ })),
+ be_str_weak(Matter_IM_Subscription)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_Subscription_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_Subscription);
+ be_setglobal(vm, "Matter_IM_Subscription");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_Subscription_Shop;
+
+/********************************************************************
+** Solidified function: new_subscription
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_new_subscription, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(random),
+ /* K2 */ be_const_int(2),
+ /* K3 */ be_nested_str_weak(get),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(get_by_id),
+ /* K6 */ be_nested_str_weak(matter),
+ /* K7 */ be_nested_str_weak(IM_Subscription),
+ /* K8 */ be_nested_str_weak(subs),
+ /* K9 */ be_nested_str_weak(push),
+ }),
+ be_str_weak(new_subscription),
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0x8C100701, // 0001 GETMET R4 R3 K1
+ 0x58180002, // 0002 LDCONST R6 K2
+ 0x7C100400, // 0003 CALL R4 2
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x58180004, // 0005 LDCONST R6 K4
+ 0x581C0002, // 0006 LDCONST R7 K2
+ 0x7C100600, // 0007 CALL R4 3
+ 0x8C140105, // 0008 GETMET R5 R0 K5
+ 0x5C1C0800, // 0009 MOVE R7 R4
+ 0x7C140400, // 000A CALL R5 2
+ 0x78160008, // 000B JMPF R5 #0015
+ 0x8C140701, // 000C GETMET R5 R3 K1
+ 0x581C0002, // 000D LDCONST R7 K2
+ 0x7C140400, // 000E CALL R5 2
+ 0x8C140B03, // 000F GETMET R5 R5 K3
+ 0x581C0004, // 0010 LDCONST R7 K4
+ 0x58200002, // 0011 LDCONST R8 K2
+ 0x7C140600, // 0012 CALL R5 3
+ 0x5C100A00, // 0013 MOVE R4 R5
+ 0x7001FFF2, // 0014 JMP #0008
+ 0xB8160C00, // 0015 GETNGBL R5 K6
+ 0x8C140B07, // 0016 GETMET R5 R5 K7
+ 0x5C1C0800, // 0017 MOVE R7 R4
+ 0x5C200200, // 0018 MOVE R8 R1
+ 0x5C240400, // 0019 MOVE R9 R2
+ 0x7C140800, // 001A CALL R5 4
+ 0x88180108, // 001B GETMBR R6 R0 K8
+ 0x8C180D09, // 001C GETMET R6 R6 K9
+ 0x5C200A00, // 001D MOVE R8 R5
+ 0x7C180400, // 001E CALL R6 2
+ 0x80040A00, // 001F RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_every_second, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(time_reached),
+ /* K4 */ be_nested_str_weak(expiration),
+ /* K5 */ be_nested_str_weak(im),
+ /* K6 */ be_nested_str_weak(send_subscribe_update),
+ /* K7 */ be_nested_str_weak(clear_and_arm),
+ /* K8 */ be_const_int(1),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* 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
+ 0x780A000E, // 0005 JMPF R2 #0015
+ 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
+ 0x780E0005, // 000C JMPF R3 #0013
+ 0x880C0105, // 000D GETMBR R3 R0 K5
+ 0x8C0C0706, // 000E GETMET R3 R3 K6
+ 0x5C140400, // 000F MOVE R5 R2
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x8C0C0507, // 0011 GETMET R3 R2 K7
+ 0x7C0C0200, // 0012 CALL R3 1
+ 0x00040308, // 0013 ADD R1 R1 K8
+ 0x7001FFEB, // 0014 JMP #0001
+ 0x80000000, // 0015 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_init, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(im),
+ /* K1 */ be_nested_str_weak(subs),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x60080012, // 0001 GETGBL R2 G18
+ 0x7C080000, // 0002 CALL R2 0
+ 0x90020202, // 0003 SETMBR R0 K1 R2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_by_session
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_remove_by_session, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* 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_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(session),
+ /* K3 */ be_nested_str_weak(remove),
+ /* K4 */ be_const_int(1),
+ }),
+ be_str_weak(remove_by_session),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E000B, // 0005 JMPF R3 #0012
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x880C0702, // 0008 GETMBR R3 R3 K2
+ 0x1C0C0601, // 0009 EQ R3 R3 R1
+ 0x780E0004, // 000A JMPF R3 #0010
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x8C0C0703, // 000C GETMET R3 R3 K3
+ 0x5C140400, // 000D MOVE R5 R2
+ 0x7C0C0400, // 000E CALL R3 2
+ 0x70020000, // 000F JMP #0011
+ 0x00080504, // 0010 ADD R2 R2 K4
+ 0x7001FFEE, // 0011 JMP #0001
+ 0x80000000, // 0012 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_by_id
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_get_by_id, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(subscription_id),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(get_by_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E0009, // 0005 JMPF R3 #0010
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x880C0702, // 0008 GETMBR R3 R3 K2
+ 0x1C0C0601, // 0009 EQ R3 R3 R1
+ 0x780E0002, // 000A JMPF R3 #000E
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x940C0602, // 000C GETIDX R3 R3 R2
+ 0x80040600, // 000D RET 1 R3
+ 0x00080503, // 000E ADD R2 R2 K3
+ 0x7001FFF0, // 000F JMP #0001
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: attribute_updated
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_attribute_updated, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(attribute_updated),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(attribute_updated),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x580C0000, // 0000 LDCONST R3 K0
+ 0x6010000C, // 0001 GETGBL R4 G12
+ 0x88140101, // 0002 GETMBR R5 R0 K1
+ 0x7C100200, // 0003 CALL R4 1
+ 0x14100604, // 0004 LT R4 R3 R4
+ 0x78120007, // 0005 JMPF R4 #000E
+ 0x88100101, // 0006 GETMBR R4 R0 K1
+ 0x94100803, // 0007 GETIDX R4 R4 R3
+ 0x8C100902, // 0008 GETMET R4 R4 K2
+ 0x5C180200, // 0009 MOVE R6 R1
+ 0x5C1C0400, // 000A MOVE R7 R2
+ 0x7C100600, // 000B CALL R4 3
+ 0x000C0703, // 000C ADD R3 R3 K3
+ 0x7001FFF2, // 000D JMP #0001
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_Subscription_Shop
+********************************************************************/
+be_local_class(Matter_IM_Subscription_Shop,
+ 2,
+ NULL,
+ be_nested_map(8,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(attribute_updated, -1), be_const_closure(Matter_IM_Subscription_Shop_attribute_updated_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_IM_Subscription_Shop_every_second_closure) },
+ { be_const_key_weak(subs, -1), be_const_var(0) },
+ { be_const_key_weak(init, 5), be_const_closure(Matter_IM_Subscription_Shop_init_closure) },
+ { be_const_key_weak(remove_by_session, -1), be_const_closure(Matter_IM_Subscription_Shop_remove_by_session_closure) },
+ { be_const_key_weak(im, 6), be_const_var(1) },
+ { be_const_key_weak(get_by_id, -1), be_const_closure(Matter_IM_Subscription_Shop_get_by_id_closure) },
+ { be_const_key_weak(new_subscription, 0), be_const_closure(Matter_IM_Subscription_Shop_new_subscription_closure) },
+ })),
+ be_str_weak(Matter_IM_Subscription_Shop)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_Subscription_Shop_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_Subscription_Shop);
+ be_setglobal(vm, "Matter_IM_Subscription_Shop");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
index 76f644b3a..d2b0f0b72 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
@@ -6,6 +6,39 @@
extern const bclass be_class_Matter_Frame;
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Frame_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(message_handler),
+ /* K1 */ be_nested_str_weak(raw),
+ /* K2 */ be_nested_str_weak(remote_ip),
+ /* K3 */ be_nested_str_weak(remote_port),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* 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
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: encrypt
********************************************************************/
@@ -19,7 +52,7 @@ be_local_closure(Matter_Frame_encrypt, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[30]) { /* constants */
+ ( &(const bvalue[29]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(raw),
/* K2 */ be_nested_str_weak(session),
@@ -39,17 +72,16 @@ be_local_closure(Matter_Frame_encrypt, /* name */
/* K16 */ be_nested_str_weak(log),
/* K17 */ be_nested_str_weak(MTR_X3A_X20cleartext_X3A_X20),
/* K18 */ be_nested_str_weak(tohex),
- /* K19 */ be_const_int(3),
- /* K20 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K21 */ be_nested_str_weak(MTR_X3A_X20r2i_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K22 */ be_nested_str_weak(MTR_X3A_X20p_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20a_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K24 */ be_nested_str_weak(MTR_X3A_X20n_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K25 */ be_nested_str_weak(AES_CCM),
- /* K26 */ be_nested_str_weak(encrypt),
- /* K27 */ be_nested_str_weak(tag),
- /* K28 */ be_nested_str_weak(MTR_X3A_X20ciphertext_X20_X20_X3D),
- /* K29 */ be_nested_str_weak(MTR_X3A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K19 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20r2i_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K21 */ be_nested_str_weak(MTR_X3A_X20p_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K22 */ be_nested_str_weak(MTR_X3A_X20a_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20n_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K24 */ be_nested_str_weak(AES_CCM),
+ /* K25 */ be_nested_str_weak(encrypt),
+ /* K26 */ be_nested_str_weak(tag),
+ /* K27 */ be_nested_str_weak(MTR_X3A_X20ciphertext_X20_X20_X3D),
+ /* K28 */ be_nested_str_weak(MTR_X3A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
}),
be_str_weak(encrypt),
&be_const_str_solidified,
@@ -94,42 +126,42 @@ be_local_closure(Matter_Frame_encrypt, /* name */
0x8C281512, // 0025 GETMET R10 R10 K18
0x7C280200, // 0026 CALL R10 1
0x002A220A, // 0027 ADD R10 K17 R10
- 0x582C0013, // 0028 LDCONST R11 K19
+ 0x542E0003, // 0028 LDINT R11 4
0x7C200600, // 0029 CALL R8 3
0xB8221E00, // 002A GETNGBL R8 K15
0x8C201110, // 002B GETMET R8 R8 K16
- 0x58280014, // 002C LDCONST R10 K20
- 0x582C0013, // 002D LDCONST R11 K19
+ 0x58280013, // 002C LDCONST R10 K19
+ 0x542E0003, // 002D LDINT R11 4
0x7C200600, // 002E CALL R8 3
0xB8221E00, // 002F GETNGBL R8 K15
0x8C201110, // 0030 GETMET R8 R8 K16
0x8C280912, // 0031 GETMET R10 R4 K18
0x7C280200, // 0032 CALL R10 1
- 0x002A2A0A, // 0033 ADD R10 K21 R10
- 0x582C0013, // 0034 LDCONST R11 K19
+ 0x002A280A, // 0033 ADD R10 K20 R10
+ 0x542E0003, // 0034 LDINT R11 4
0x7C200600, // 0035 CALL R8 3
0xB8221E00, // 0036 GETNGBL R8 K15
0x8C201110, // 0037 GETMET R8 R8 K16
0x8C280D12, // 0038 GETMET R10 R6 K18
0x7C280200, // 0039 CALL R10 1
- 0x002A2C0A, // 003A ADD R10 K22 R10
- 0x582C0013, // 003B LDCONST R11 K19
+ 0x002A2A0A, // 003A ADD R10 K21 R10
+ 0x542E0003, // 003B LDINT R11 4
0x7C200600, // 003C CALL R8 3
0xB8221E00, // 003D GETNGBL R8 K15
0x8C201110, // 003E GETMET R8 R8 K16
0x8C280B12, // 003F GETMET R10 R5 K18
0x7C280200, // 0040 CALL R10 1
- 0x002A2E0A, // 0041 ADD R10 K23 R10
- 0x582C0013, // 0042 LDCONST R11 K19
+ 0x002A2C0A, // 0041 ADD R10 K22 R10
+ 0x542E0003, // 0042 LDINT R11 4
0x7C200600, // 0043 CALL R8 3
0xB8221E00, // 0044 GETNGBL R8 K15
0x8C201110, // 0045 GETMET R8 R8 K16
0x8C280F12, // 0046 GETMET R10 R7 K18
0x7C280200, // 0047 CALL R10 1
- 0x002A300A, // 0048 ADD R10 K24 R10
- 0x582C0013, // 0049 LDCONST R11 K19
+ 0x002A2E0A, // 0048 ADD R10 K23 R10
+ 0x542E0003, // 0049 LDINT R11 4
0x7C200600, // 004A CALL R8 3
- 0x8C200319, // 004B GETMET R8 R1 K25
+ 0x8C200318, // 004B GETMET R8 R1 K24
0x5C280800, // 004C MOVE R10 R4
0x5C2C0E00, // 004D MOVE R11 R7
0x5C300A00, // 004E MOVE R12 R5
@@ -138,34 +170,34 @@ be_local_closure(Matter_Frame_encrypt, /* name */
0x7C340200, // 0051 CALL R13 1
0x543A000F, // 0052 LDINT R14 16
0x7C200C00, // 0053 CALL R8 6
- 0x8C24111A, // 0054 GETMET R9 R8 K26
+ 0x8C241119, // 0054 GETMET R9 R8 K25
0x5C2C0C00, // 0055 MOVE R11 R6
0x7C240400, // 0056 CALL R9 2
- 0x8C28111B, // 0057 GETMET R10 R8 K27
+ 0x8C28111A, // 0057 GETMET R10 R8 K26
0x7C280200, // 0058 CALL R10 1
0xB82E1E00, // 0059 GETNGBL R11 K15
0x8C2C1710, // 005A GETMET R11 R11 K16
- 0x58340014, // 005B LDCONST R13 K20
- 0x58380013, // 005C LDCONST R14 K19
+ 0x58340013, // 005B LDCONST R13 K19
+ 0x543A0003, // 005C LDINT R14 4
0x7C2C0600, // 005D CALL R11 3
0xB82E1E00, // 005E GETNGBL R11 K15
0x8C2C1710, // 005F GETMET R11 R11 K16
0x8C341312, // 0060 GETMET R13 R9 K18
0x7C340200, // 0061 CALL R13 1
- 0x0036380D, // 0062 ADD R13 K28 R13
- 0x58380013, // 0063 LDCONST R14 K19
+ 0x0036360D, // 0062 ADD R13 K27 R13
+ 0x543A0003, // 0063 LDINT R14 4
0x7C2C0600, // 0064 CALL R11 3
0xB82E1E00, // 0065 GETNGBL R11 K15
0x8C2C1710, // 0066 GETMET R11 R11 K16
0x8C341512, // 0067 GETMET R13 R10 K18
0x7C340200, // 0068 CALL R13 1
- 0x00363A0D, // 0069 ADD R13 K29 R13
- 0x58380013, // 006A LDCONST R14 K19
+ 0x0036380D, // 0069 ADD R13 K28 R13
+ 0x543A0003, // 006A LDINT R14 4
0x7C2C0600, // 006B CALL R11 3
0xB82E1E00, // 006C GETNGBL R11 K15
0x8C2C1710, // 006D GETMET R11 R11 K16
- 0x58340014, // 006E LDCONST R13 K20
- 0x58380013, // 006F LDCONST R14 K19
+ 0x58340013, // 006E LDCONST R13 K19
+ 0x543A0003, // 006F LDINT R14 4
0x7C2C0600, // 0070 CALL R11 3
0x882C0101, // 0071 GETMBR R11 R0 K1
0x8C2C170E, // 0072 GETMET R11 R11 K14
@@ -182,13 +214,168 @@ be_local_closure(Matter_Frame_encrypt, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: debug
+********************************************************************/
+be_local_closure(Matter_Frame_debug, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(Frame),
+ /* K2 */ be_nested_str_weak(message_handler),
+ /* K3 */ be_nested_str_weak(decode_header),
+ /* K4 */ be_nested_str_weak(decode_payload),
+ /* K5 */ be_nested_str_weak(tasmota),
+ /* K6 */ be_nested_str_weak(log),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20sending_X20decode_X3A_X20),
+ /* K8 */ be_nested_str_weak(inspect),
+ }),
+ be_str_weak(debug),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x88100102, // 0002 GETMBR R4 R0 K2
+ 0x5C140200, // 0003 MOVE R5 R1
+ 0x7C080600, // 0004 CALL R2 3
+ 0x8C0C0503, // 0005 GETMET R3 R2 K3
+ 0x7C0C0200, // 0006 CALL R3 1
+ 0x8C0C0504, // 0007 GETMET R3 R2 K4
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0xB80E0A00, // 0009 GETNGBL R3 K5
+ 0x8C0C0706, // 000A GETMET R3 R3 K6
+ 0xB8160000, // 000B GETNGBL R5 K0
+ 0x8C140B08, // 000C GETMET R5 R5 K8
+ 0x5C1C0400, // 000D MOVE R7 R2
+ 0x7C140400, // 000E CALL R5 2
+ 0x00160E05, // 000F ADD R5 K7 R5
+ 0x541A0003, // 0010 LDINT R6 4
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0x80000000, // 0012 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: build_standalone_ack
+********************************************************************/
+be_local_closure(Matter_Frame_build_standalone_ack, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[30]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(message_handler),
+ /* K2 */ be_nested_str_weak(remote_ip),
+ /* K3 */ be_nested_str_weak(remote_port),
+ /* K4 */ be_nested_str_weak(flag_s),
+ /* K5 */ be_nested_str_weak(flag_dsiz),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(dest_node_id_8),
+ /* K8 */ be_nested_str_weak(source_node_id),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_nested_str_weak(session),
+ /* K11 */ be_nested_str_weak(message_counter),
+ /* K12 */ be_nested_str_weak(counter_snd),
+ /* K13 */ be_nested_str_weak(next),
+ /* K14 */ be_nested_str_weak(local_session_id),
+ /* K15 */ be_nested_str_weak(initiator_session_id),
+ /* K16 */ be_nested_str_weak(x_flag_i),
+ /* K17 */ be_nested_str_weak(opcode),
+ /* K18 */ be_nested_str_weak(exchange_id),
+ /* K19 */ be_nested_str_weak(protocol_id),
+ /* K20 */ be_nested_str_weak(x_flag_a),
+ /* K21 */ be_nested_str_weak(ack_message_counter),
+ /* K22 */ be_nested_str_weak(x_flag_r),
+ /* K23 */ be_nested_str_weak(tasmota),
+ /* K24 */ be_nested_str_weak(log),
+ /* K25 */ be_nested_str_weak(format),
+ /* K26 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X25s),
+ /* K27 */ be_nested_str_weak(matter),
+ /* K28 */ be_nested_str_weak(get_opcode_name),
+ /* K29 */ be_const_int(3),
+ }),
+ be_str_weak(build_standalone_ack),
+ &be_const_str_solidified,
+ ( &(const binstruction[49]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x60080006, // 0001 GETGBL R2 G6
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C080200, // 0003 CALL R2 1
+ 0x880C0101, // 0004 GETMBR R3 R0 K1
+ 0x7C080200, // 0005 CALL R2 1
+ 0x880C0102, // 0006 GETMBR R3 R0 K2
+ 0x900A0403, // 0007 SETMBR R2 K2 R3
+ 0x880C0103, // 0008 GETMBR R3 R0 K3
+ 0x900A0603, // 0009 SETMBR R2 K3 R3
+ 0x880C0104, // 000A GETMBR R3 R0 K4
+ 0x780E0003, // 000B JMPF R3 #0010
+ 0x900A0B06, // 000C SETMBR R2 K5 K6
+ 0x880C0108, // 000D GETMBR R3 R0 K8
+ 0x900A0E03, // 000E SETMBR R2 K7 R3
+ 0x70020000, // 000F JMP #0011
+ 0x900A0B09, // 0010 SETMBR R2 K5 K9
+ 0x880C010A, // 0011 GETMBR R3 R0 K10
+ 0x900A1403, // 0012 SETMBR R2 K10 R3
+ 0x880C010A, // 0013 GETMBR R3 R0 K10
+ 0x880C070C, // 0014 GETMBR R3 R3 K12
+ 0x8C0C070D, // 0015 GETMET R3 R3 K13
+ 0x7C0C0200, // 0016 CALL R3 1
+ 0x900A1603, // 0017 SETMBR R2 K11 R3
+ 0x880C010A, // 0018 GETMBR R3 R0 K10
+ 0x880C070F, // 0019 GETMBR R3 R3 K15
+ 0x900A1C03, // 001A SETMBR R2 K14 R3
+ 0x900A2109, // 001B SETMBR R2 K16 K9
+ 0x540E000F, // 001C LDINT R3 16
+ 0x900A2203, // 001D SETMBR R2 K17 R3
+ 0x880C0112, // 001E GETMBR R3 R0 K18
+ 0x900A2403, // 001F SETMBR R2 K18 R3
+ 0x900A2709, // 0020 SETMBR R2 K19 K9
+ 0x900A2906, // 0021 SETMBR R2 K20 K6
+ 0x880C010B, // 0022 GETMBR R3 R0 K11
+ 0x900A2A03, // 0023 SETMBR R2 K21 R3
+ 0x900A2D06, // 0024 SETMBR R2 K22 K6
+ 0xB80E2E00, // 0025 GETNGBL R3 K23
+ 0x8C0C0718, // 0026 GETMET R3 R3 K24
+ 0x8C140319, // 0027 GETMET R5 R1 K25
+ 0x581C001A, // 0028 LDCONST R7 K26
+ 0xB8223600, // 0029 GETNGBL R8 K27
+ 0x8C20111C, // 002A GETMET R8 R8 K28
+ 0x88280511, // 002B GETMBR R10 R2 K17
+ 0x7C200400, // 002C CALL R8 2
+ 0x7C140600, // 002D CALL R5 3
+ 0x5818001D, // 002E LDCONST R6 K29
+ 0x7C0C0600, // 002F CALL R3 3
+ 0x80040400, // 0030 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: build_response
********************************************************************/
be_local_closure(Matter_Frame_build_response, /* name */
be_nested_proto(
12, /* nstack */
- 3, /* argc */
+ 4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -226,94 +413,98 @@ be_local_closure(Matter_Frame_build_response, /* name */
/* K27 */ be_nested_str_weak(0x_X2502X),
/* K28 */ be_nested_str_weak(tasmota),
/* K29 */ be_nested_str_weak(log),
- /* K30 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X20_X20_X20_X20_X25s),
+ /* K30 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X25s),
/* K31 */ be_const_int(2),
}),
be_str_weak(build_response),
&be_const_str_solidified,
- ( &(const binstruction[82]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0x60100006, // 0001 GETGBL R4 G6
- 0x5C140000, // 0002 MOVE R5 R0
- 0x7C100200, // 0003 CALL R4 1
- 0x88140101, // 0004 GETMBR R5 R0 K1
- 0x7C100200, // 0005 CALL R4 1
- 0x88140102, // 0006 GETMBR R5 R0 K2
- 0x90120405, // 0007 SETMBR R4 K2 R5
- 0x88140103, // 0008 GETMBR R5 R0 K3
- 0x90120605, // 0009 SETMBR R4 K3 R5
- 0x88140104, // 000A GETMBR R5 R0 K4
- 0x78160003, // 000B JMPF R5 #0010
- 0x90120B06, // 000C SETMBR R4 K5 K6
- 0x88140108, // 000D GETMBR R5 R0 K8
- 0x90120E05, // 000E SETMBR R4 K7 R5
- 0x70020000, // 000F JMP #0011
- 0x90120B09, // 0010 SETMBR R4 K5 K9
- 0x8814010A, // 0011 GETMBR R5 R0 K10
- 0x90121405, // 0012 SETMBR R4 K10 R5
- 0x8814010B, // 0013 GETMBR R5 R0 K11
- 0x20140B09, // 0014 NE R5 R5 K9
- 0x7816000E, // 0015 JMPF R5 #0025
- 0x8814010A, // 0016 GETMBR R5 R0 K10
- 0x7816000C, // 0017 JMPF R5 #0025
- 0x8814010A, // 0018 GETMBR R5 R0 K10
- 0x88140B0C, // 0019 GETMBR R5 R5 K12
- 0x20140B09, // 001A NE R5 R5 K9
- 0x78160008, // 001B JMPF R5 #0025
+ ( &(const binstruction[86]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0x4C140000, // 0001 LDNIL R5
+ 0x1C140605, // 0002 EQ R5 R3 R5
+ 0x78160005, // 0003 JMPF R5 #000A
+ 0x60140006, // 0004 GETGBL R5 G6
+ 0x5C180000, // 0005 MOVE R6 R0
+ 0x7C140200, // 0006 CALL R5 1
+ 0x88180101, // 0007 GETMBR R6 R0 K1
+ 0x7C140200, // 0008 CALL R5 1
+ 0x5C0C0A00, // 0009 MOVE R3 R5
+ 0x88140102, // 000A GETMBR R5 R0 K2
+ 0x900E0405, // 000B SETMBR R3 K2 R5
+ 0x88140103, // 000C GETMBR R5 R0 K3
+ 0x900E0605, // 000D SETMBR R3 K3 R5
+ 0x88140104, // 000E GETMBR R5 R0 K4
+ 0x78160003, // 000F JMPF R5 #0014
+ 0x900E0B06, // 0010 SETMBR R3 K5 K6
+ 0x88140108, // 0011 GETMBR R5 R0 K8
+ 0x900E0E05, // 0012 SETMBR R3 K7 R5
+ 0x70020000, // 0013 JMP #0015
+ 0x900E0B09, // 0014 SETMBR R3 K5 K9
+ 0x8814010A, // 0015 GETMBR R5 R0 K10
+ 0x900E1405, // 0016 SETMBR R3 K10 R5
+ 0x8814010B, // 0017 GETMBR R5 R0 K11
+ 0x20140B09, // 0018 NE R5 R5 K9
+ 0x7816000E, // 0019 JMPF R5 #0029
+ 0x8814010A, // 001A GETMBR R5 R0 K10
+ 0x7816000C, // 001B JMPF R5 #0029
0x8814010A, // 001C GETMBR R5 R0 K10
- 0x88140B0E, // 001D GETMBR R5 R5 K14
- 0x8C140B0F, // 001E GETMET R5 R5 K15
- 0x7C140200, // 001F CALL R5 1
- 0x90121A05, // 0020 SETMBR R4 K13 R5
- 0x8814010A, // 0021 GETMBR R5 R0 K10
- 0x88140B0C, // 0022 GETMBR R5 R5 K12
- 0x90121605, // 0023 SETMBR R4 K11 R5
- 0x70020005, // 0024 JMP #002B
+ 0x88140B0C, // 001D GETMBR R5 R5 K12
+ 0x20140B09, // 001E NE R5 R5 K9
+ 0x78160008, // 001F JMPF R5 #0029
+ 0x8814010A, // 0020 GETMBR R5 R0 K10
+ 0x88140B0E, // 0021 GETMBR R5 R5 K14
+ 0x8C140B0F, // 0022 GETMET R5 R5 K15
+ 0x7C140200, // 0023 CALL R5 1
+ 0x900E1A05, // 0024 SETMBR R3 K13 R5
0x8814010A, // 0025 GETMBR R5 R0 K10
- 0x88140B10, // 0026 GETMBR R5 R5 K16
- 0x8C140B0F, // 0027 GETMET R5 R5 K15
- 0x7C140200, // 0028 CALL R5 1
- 0x90121A05, // 0029 SETMBR R4 K13 R5
- 0x90121709, // 002A SETMBR R4 K11 K9
- 0x90122309, // 002B SETMBR R4 K17 K9
- 0x90122401, // 002C SETMBR R4 K18 R1
- 0x88140113, // 002D GETMBR R5 R0 K19
- 0x90122605, // 002E SETMBR R4 K19 R5
- 0x88140114, // 002F GETMBR R5 R0 K20
- 0x90122805, // 0030 SETMBR R4 K20 R5
- 0x88140115, // 0031 GETMBR R5 R0 K21
- 0x78160002, // 0032 JMPF R5 #0036
- 0x90122D06, // 0033 SETMBR R4 K22 K6
- 0x8814010D, // 0034 GETMBR R5 R0 K13
- 0x90122E05, // 0035 SETMBR R4 K23 R5
- 0x780A0001, // 0036 JMPF R2 #0039
- 0x58140006, // 0037 LDCONST R5 K6
- 0x70020000, // 0038 JMP #003A
- 0x58140009, // 0039 LDCONST R5 K9
- 0x90122A05, // 003A SETMBR R4 K21 R5
- 0x8814090B, // 003B GETMBR R5 R4 K11
- 0x1C140B09, // 003C EQ R5 R5 K9
- 0x78160012, // 003D JMPF R5 #0051
- 0xB8163000, // 003E GETNGBL R5 K24
- 0x8C140B19, // 003F GETMET R5 R5 K25
- 0x881C0912, // 0040 GETMBR R7 R4 K18
- 0x7C140400, // 0041 CALL R5 2
- 0x5C180A00, // 0042 MOVE R6 R5
- 0x741A0004, // 0043 JMPT R6 #0049
- 0x8C18071A, // 0044 GETMET R6 R3 K26
- 0x5820001B, // 0045 LDCONST R8 K27
- 0x88240912, // 0046 GETMBR R9 R4 K18
- 0x7C180600, // 0047 CALL R6 3
- 0x5C140C00, // 0048 MOVE R5 R6
- 0xB81A3800, // 0049 GETNGBL R6 K28
- 0x8C180D1D, // 004A GETMET R6 R6 K29
- 0x8C20071A, // 004B GETMET R8 R3 K26
- 0x5828001E, // 004C LDCONST R10 K30
- 0x5C2C0A00, // 004D MOVE R11 R5
- 0x7C200600, // 004E CALL R8 3
- 0x5824001F, // 004F LDCONST R9 K31
- 0x7C180600, // 0050 CALL R6 3
- 0x80040800, // 0051 RET 1 R4
+ 0x88140B0C, // 0026 GETMBR R5 R5 K12
+ 0x900E1605, // 0027 SETMBR R3 K11 R5
+ 0x70020005, // 0028 JMP #002F
+ 0x8814010A, // 0029 GETMBR R5 R0 K10
+ 0x88140B10, // 002A GETMBR R5 R5 K16
+ 0x8C140B0F, // 002B GETMET R5 R5 K15
+ 0x7C140200, // 002C CALL R5 1
+ 0x900E1A05, // 002D SETMBR R3 K13 R5
+ 0x900E1709, // 002E SETMBR R3 K11 K9
+ 0x900E2309, // 002F SETMBR R3 K17 K9
+ 0x900E2401, // 0030 SETMBR R3 K18 R1
+ 0x88140113, // 0031 GETMBR R5 R0 K19
+ 0x900E2605, // 0032 SETMBR R3 K19 R5
+ 0x88140114, // 0033 GETMBR R5 R0 K20
+ 0x900E2805, // 0034 SETMBR R3 K20 R5
+ 0x88140115, // 0035 GETMBR R5 R0 K21
+ 0x78160002, // 0036 JMPF R5 #003A
+ 0x900E2D06, // 0037 SETMBR R3 K22 K6
+ 0x8814010D, // 0038 GETMBR R5 R0 K13
+ 0x900E2E05, // 0039 SETMBR R3 K23 R5
+ 0x780A0001, // 003A JMPF R2 #003D
+ 0x58140006, // 003B LDCONST R5 K6
+ 0x70020000, // 003C JMP #003E
+ 0x58140009, // 003D LDCONST R5 K9
+ 0x900E2A05, // 003E SETMBR R3 K21 R5
+ 0x8814070B, // 003F GETMBR R5 R3 K11
+ 0x1C140B09, // 0040 EQ R5 R5 K9
+ 0x78160012, // 0041 JMPF R5 #0055
+ 0xB8163000, // 0042 GETNGBL R5 K24
+ 0x8C140B19, // 0043 GETMET R5 R5 K25
+ 0x881C0712, // 0044 GETMBR R7 R3 K18
+ 0x7C140400, // 0045 CALL R5 2
+ 0x5C180A00, // 0046 MOVE R6 R5
+ 0x741A0004, // 0047 JMPT R6 #004D
+ 0x8C18091A, // 0048 GETMET R6 R4 K26
+ 0x5820001B, // 0049 LDCONST R8 K27
+ 0x88240712, // 004A GETMBR R9 R3 K18
+ 0x7C180600, // 004B CALL R6 3
+ 0x5C140C00, // 004C MOVE R5 R6
+ 0xB81A3800, // 004D GETNGBL R6 K28
+ 0x8C180D1D, // 004E GETMET R6 R6 K29
+ 0x8C20091A, // 004F GETMET R8 R4 K26
+ 0x5828001E, // 0050 LDCONST R10 K30
+ 0x5C2C0A00, // 0051 MOVE R11 R5
+ 0x7C200600, // 0052 CALL R8 3
+ 0x5824001F, // 0053 LDCONST R9 K31
+ 0x7C180600, // 0054 CALL R6 3
+ 0x80040600, // 0055 RET 1 R3
})
)
);
@@ -321,32 +512,93 @@ be_local_closure(Matter_Frame_build_response, /* name */
/********************************************************************
-** Solidified function: init
+** Solidified function: initiate_response
********************************************************************/
-be_local_closure(Matter_Frame_init, /* name */
+be_local_closure(Matter_Frame_initiate_response, /* name */
be_nested_proto(
- 5, /* nstack */
+ 10, /* nstack */
5, /* argc */
- 2, /* varg */
+ 4, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(message_handler),
- /* K1 */ be_nested_str_weak(raw),
- /* K2 */ be_nested_str_weak(remote_ip),
- /* K3 */ be_nested_str_weak(remote_port),
+ ( &(const bvalue[24]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_Frame),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(Frame),
+ /* K4 */ be_nested_str_weak(remote_ip),
+ /* K5 */ be_nested_str_weak(__ip),
+ /* K6 */ be_nested_str_weak(remote_port),
+ /* K7 */ be_nested_str_weak(__port),
+ /* K8 */ be_nested_str_weak(flag_dsiz),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_nested_str_weak(session),
+ /* K11 */ be_nested_str_weak(initiator_session_id),
+ /* K12 */ be_nested_str_weak(message_counter),
+ /* K13 */ be_nested_str_weak(counter_snd),
+ /* K14 */ be_nested_str_weak(next),
+ /* K15 */ be_nested_str_weak(local_session_id),
+ /* K16 */ be_nested_str_weak(_counter_insecure_snd),
+ /* K17 */ be_nested_str_weak(x_flag_i),
+ /* K18 */ be_const_int(1),
+ /* K19 */ be_nested_str_weak(opcode),
+ /* K20 */ be_nested_str_weak(__exchange_id),
+ /* K21 */ be_nested_str_weak(exchange_id),
+ /* K22 */ be_nested_str_weak(protocol_id),
+ /* K23 */ be_nested_str_weak(x_flag_r),
}),
- be_str_weak(init),
+ be_str_weak(initiate_response),
&be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* 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
- 0x80000000, // 0004 RET 0
+ ( &(const binstruction[46]) { /* code */
+ 0x58140000, // 0000 LDCONST R5 K0
+ 0xA41A0200, // 0001 IMPORT R6 K1
+ 0x4C1C0000, // 0002 LDNIL R7
+ 0x1C1C0807, // 0003 EQ R7 R4 R7
+ 0x781E0004, // 0004 JMPF R7 #000A
+ 0xB81E0400, // 0005 GETNGBL R7 K2
+ 0x8C1C0F03, // 0006 GETMET R7 R7 K3
+ 0x5C240000, // 0007 MOVE R9 R0
+ 0x7C1C0400, // 0008 CALL R7 2
+ 0x5C100E00, // 0009 MOVE R4 R7
+ 0x881C0305, // 000A GETMBR R7 R1 K5
+ 0x90120807, // 000B SETMBR R4 K4 R7
+ 0x881C0307, // 000C GETMBR R7 R1 K7
+ 0x90120C07, // 000D SETMBR R4 K6 R7
+ 0x90121109, // 000E SETMBR R4 K8 K9
+ 0x90121401, // 000F SETMBR R4 K10 R1
+ 0x78060009, // 0010 JMPF R1 #001B
+ 0x881C030B, // 0011 GETMBR R7 R1 K11
+ 0x201C0F09, // 0012 NE R7 R7 K9
+ 0x781E0006, // 0013 JMPF R7 #001B
+ 0x881C030D, // 0014 GETMBR R7 R1 K13
+ 0x8C1C0F0E, // 0015 GETMET R7 R7 K14
+ 0x7C1C0200, // 0016 CALL R7 1
+ 0x90121807, // 0017 SETMBR R4 K12 R7
+ 0x881C030B, // 0018 GETMBR R7 R1 K11
+ 0x90121E07, // 0019 SETMBR R4 K15 R7
+ 0x70020004, // 001A JMP #0020
+ 0x881C0310, // 001B GETMBR R7 R1 K16
+ 0x8C1C0F0E, // 001C GETMET R7 R7 K14
+ 0x7C1C0200, // 001D CALL R7 1
+ 0x90121807, // 001E SETMBR R4 K12 R7
+ 0x90121F09, // 001F SETMBR R4 K15 K9
+ 0x90122312, // 0020 SETMBR R4 K17 K18
+ 0x90122602, // 0021 SETMBR R4 K19 R2
+ 0x881C0314, // 0022 GETMBR R7 R1 K20
+ 0x001C0F12, // 0023 ADD R7 R7 K18
+ 0x90062807, // 0024 SETMBR R1 K20 R7
+ 0x881C0314, // 0025 GETMBR R7 R1 K20
+ 0x90122A07, // 0026 SETMBR R4 K21 R7
+ 0x90122D12, // 0027 SETMBR R4 K22 K18
+ 0x780E0001, // 0028 JMPF R3 #002B
+ 0x581C0012, // 0029 LDCONST R7 K18
+ 0x70020000, // 002A JMP #002C
+ 0x581C0009, // 002B LDCONST R7 K9
+ 0x90122E07, // 002C SETMBR R4 K23 R7
+ 0x80040800, // 002D RET 1 R4
})
)
);
@@ -519,511 +771,6 @@ be_local_closure(Matter_Frame_decode_header, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: decode_payload
-********************************************************************/
-be_local_closure(Matter_Frame_decode_payload, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[19]) { /* constants */
- /* K0 */ be_nested_str_weak(payload_idx),
- /* K1 */ be_nested_str_weak(raw),
- /* K2 */ be_nested_str_weak(x_flags),
- /* K3 */ be_nested_str_weak(get),
- /* K4 */ be_const_int(1),
- /* K5 */ be_nested_str_weak(x_flag_v),
- /* K6 */ be_nested_str_weak(getbits),
- /* K7 */ be_nested_str_weak(x_flag_sx),
- /* K8 */ be_const_int(3),
- /* K9 */ be_nested_str_weak(x_flag_r),
- /* K10 */ be_const_int(2),
- /* K11 */ be_nested_str_weak(x_flag_a),
- /* K12 */ be_nested_str_weak(x_flag_i),
- /* K13 */ be_nested_str_weak(opcode),
- /* K14 */ be_nested_str_weak(exchange_id),
- /* K15 */ be_nested_str_weak(protocol_id),
- /* K16 */ be_nested_str_weak(vendor_id),
- /* K17 */ be_nested_str_weak(ack_message_counter),
- /* K18 */ be_nested_str_weak(app_payload_idx),
- }),
- be_str_weak(decode_payload),
- &be_const_str_solidified,
- ( &(const binstruction[87]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x88080101, // 0001 GETMBR R2 R0 K1
- 0x8C0C0503, // 0002 GETMET R3 R2 K3
- 0x5C140200, // 0003 MOVE R5 R1
- 0x58180004, // 0004 LDCONST R6 K4
- 0x7C0C0600, // 0005 CALL R3 3
- 0x90020403, // 0006 SETMBR R0 K2 R3
- 0x8C0C0506, // 0007 GETMET R3 R2 K6
- 0x54160007, // 0008 LDINT R5 8
- 0x08140205, // 0009 MUL R5 R1 R5
- 0x541A0003, // 000A LDINT R6 4
- 0x00140A06, // 000B ADD R5 R5 R6
- 0x58180004, // 000C LDCONST R6 K4
- 0x7C0C0600, // 000D CALL R3 3
- 0x90020A03, // 000E SETMBR R0 K5 R3
- 0x8C0C0506, // 000F GETMET R3 R2 K6
- 0x54160007, // 0010 LDINT R5 8
- 0x08140205, // 0011 MUL R5 R1 R5
- 0x00140B08, // 0012 ADD R5 R5 K8
- 0x58180004, // 0013 LDCONST R6 K4
- 0x7C0C0600, // 0014 CALL R3 3
- 0x90020E03, // 0015 SETMBR R0 K7 R3
- 0x8C0C0506, // 0016 GETMET R3 R2 K6
- 0x54160007, // 0017 LDINT R5 8
- 0x08140205, // 0018 MUL R5 R1 R5
- 0x00140B0A, // 0019 ADD R5 R5 K10
- 0x58180004, // 001A LDCONST R6 K4
- 0x7C0C0600, // 001B CALL R3 3
- 0x90021203, // 001C SETMBR R0 K9 R3
- 0x8C0C0506, // 001D GETMET R3 R2 K6
- 0x54160007, // 001E LDINT R5 8
- 0x08140205, // 001F MUL R5 R1 R5
- 0x00140B04, // 0020 ADD R5 R5 K4
- 0x58180004, // 0021 LDCONST R6 K4
- 0x7C0C0600, // 0022 CALL R3 3
- 0x90021603, // 0023 SETMBR R0 K11 R3
- 0x8C0C0506, // 0024 GETMET R3 R2 K6
- 0x54160007, // 0025 LDINT R5 8
- 0x08140205, // 0026 MUL R5 R1 R5
- 0x58180004, // 0027 LDCONST R6 K4
- 0x7C0C0600, // 0028 CALL R3 3
- 0x90021803, // 0029 SETMBR R0 K12 R3
- 0x8C0C0503, // 002A GETMET R3 R2 K3
- 0x00140304, // 002B ADD R5 R1 K4
- 0x58180004, // 002C LDCONST R6 K4
- 0x7C0C0600, // 002D CALL R3 3
- 0x90021A03, // 002E SETMBR R0 K13 R3
- 0x8C0C0503, // 002F GETMET R3 R2 K3
- 0x0014030A, // 0030 ADD R5 R1 K10
- 0x5818000A, // 0031 LDCONST R6 K10
- 0x7C0C0600, // 0032 CALL R3 3
- 0x90021C03, // 0033 SETMBR R0 K14 R3
- 0x8C0C0503, // 0034 GETMET R3 R2 K3
- 0x54160003, // 0035 LDINT R5 4
- 0x00140205, // 0036 ADD R5 R1 R5
- 0x5818000A, // 0037 LDCONST R6 K10
- 0x7C0C0600, // 0038 CALL R3 3
- 0x90021E03, // 0039 SETMBR R0 K15 R3
- 0x540E0005, // 003A LDINT R3 6
- 0x00040203, // 003B ADD R1 R1 R3
- 0x880C0105, // 003C GETMBR R3 R0 K5
- 0x780E0005, // 003D JMPF R3 #0044
- 0x8C0C0503, // 003E GETMET R3 R2 K3
- 0x5C140200, // 003F MOVE R5 R1
- 0x5818000A, // 0040 LDCONST R6 K10
- 0x7C0C0600, // 0041 CALL R3 3
- 0x90022003, // 0042 SETMBR R0 K16 R3
- 0x0004030A, // 0043 ADD R1 R1 K10
- 0x880C010B, // 0044 GETMBR R3 R0 K11
- 0x780E0006, // 0045 JMPF R3 #004D
- 0x8C0C0503, // 0046 GETMET R3 R2 K3
- 0x5C140200, // 0047 MOVE R5 R1
- 0x541A0003, // 0048 LDINT R6 4
- 0x7C0C0600, // 0049 CALL R3 3
- 0x90022203, // 004A SETMBR R0 K17 R3
- 0x540E0003, // 004B LDINT R3 4
- 0x00040203, // 004C ADD R1 R1 R3
- 0x880C0107, // 004D GETMBR R3 R0 K7
- 0x780E0005, // 004E JMPF R3 #0055
- 0x8C0C0503, // 004F GETMET R3 R2 K3
- 0x5C140200, // 0050 MOVE R5 R1
- 0x5818000A, // 0051 LDCONST R6 K10
- 0x7C0C0600, // 0052 CALL R3 3
- 0x0010070A, // 0053 ADD R4 R3 K10
- 0x00040204, // 0054 ADD R1 R1 R4
- 0x90022401, // 0055 SETMBR R0 K18 R1
- 0x80040000, // 0056 RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: debug
-********************************************************************/
-be_local_closure(Matter_Frame_debug, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[10]) { /* constants */
- /* K0 */ be_nested_str_weak(matter),
- /* K1 */ be_nested_str_weak(Frame),
- /* K2 */ be_nested_str_weak(message_handler),
- /* K3 */ be_nested_str_weak(decode_header),
- /* K4 */ be_nested_str_weak(decode_payload),
- /* K5 */ be_nested_str_weak(tasmota),
- /* K6 */ be_nested_str_weak(log),
- /* K7 */ be_nested_str_weak(MTR_X3A_X20sending_X20decode_X3A_X20),
- /* K8 */ be_nested_str_weak(inspect),
- /* K9 */ be_const_int(3),
- }),
- be_str_weak(debug),
- &be_const_str_solidified,
- ( &(const binstruction[19]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x88100102, // 0002 GETMBR R4 R0 K2
- 0x5C140200, // 0003 MOVE R5 R1
- 0x7C080600, // 0004 CALL R2 3
- 0x8C0C0503, // 0005 GETMET R3 R2 K3
- 0x7C0C0200, // 0006 CALL R3 1
- 0x8C0C0504, // 0007 GETMET R3 R2 K4
- 0x7C0C0200, // 0008 CALL R3 1
- 0xB80E0A00, // 0009 GETNGBL R3 K5
- 0x8C0C0706, // 000A GETMET R3 R3 K6
- 0xB8160000, // 000B GETNGBL R5 K0
- 0x8C140B08, // 000C GETMET R5 R5 K8
- 0x5C1C0400, // 000D MOVE R7 R2
- 0x7C140400, // 000E CALL R5 2
- 0x00160E05, // 000F ADD R5 K7 R5
- 0x58180009, // 0010 LDCONST R6 K9
- 0x7C0C0600, // 0011 CALL R3 3
- 0x80000000, // 0012 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: build_standalone_ack
-********************************************************************/
-be_local_closure(Matter_Frame_build_standalone_ack, /* name */
- be_nested_proto(
- 11, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[28]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(message_handler),
- /* K2 */ be_nested_str_weak(flag_s),
- /* K3 */ be_nested_str_weak(flag_dsiz),
- /* K4 */ be_const_int(1),
- /* K5 */ be_nested_str_weak(dest_node_id_8),
- /* K6 */ be_nested_str_weak(source_node_id),
- /* K7 */ be_const_int(0),
- /* K8 */ be_nested_str_weak(session),
- /* K9 */ be_nested_str_weak(message_counter),
- /* K10 */ be_nested_str_weak(counter_snd),
- /* K11 */ be_nested_str_weak(next),
- /* K12 */ be_nested_str_weak(local_session_id),
- /* K13 */ be_nested_str_weak(initiator_session_id),
- /* K14 */ be_nested_str_weak(x_flag_i),
- /* K15 */ be_nested_str_weak(opcode),
- /* K16 */ be_nested_str_weak(exchange_id),
- /* K17 */ be_nested_str_weak(protocol_id),
- /* K18 */ be_nested_str_weak(x_flag_a),
- /* K19 */ be_nested_str_weak(ack_message_counter),
- /* K20 */ be_nested_str_weak(x_flag_r),
- /* K21 */ be_nested_str_weak(tasmota),
- /* K22 */ be_nested_str_weak(log),
- /* K23 */ be_nested_str_weak(format),
- /* K24 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X20_X20_X20_X20_X25s),
- /* K25 */ be_nested_str_weak(matter),
- /* K26 */ be_nested_str_weak(get_opcode_name),
- /* K27 */ be_const_int(2),
- }),
- be_str_weak(build_standalone_ack),
- &be_const_str_solidified,
- ( &(const binstruction[45]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x60080006, // 0001 GETGBL R2 G6
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C080200, // 0003 CALL R2 1
- 0x880C0101, // 0004 GETMBR R3 R0 K1
- 0x7C080200, // 0005 CALL R2 1
- 0x880C0102, // 0006 GETMBR R3 R0 K2
- 0x780E0003, // 0007 JMPF R3 #000C
- 0x900A0704, // 0008 SETMBR R2 K3 K4
- 0x880C0106, // 0009 GETMBR R3 R0 K6
- 0x900A0A03, // 000A SETMBR R2 K5 R3
- 0x70020000, // 000B JMP #000D
- 0x900A0707, // 000C SETMBR R2 K3 K7
- 0x880C0108, // 000D GETMBR R3 R0 K8
- 0x900A1003, // 000E SETMBR R2 K8 R3
- 0x880C0108, // 000F GETMBR R3 R0 K8
- 0x880C070A, // 0010 GETMBR R3 R3 K10
- 0x8C0C070B, // 0011 GETMET R3 R3 K11
- 0x7C0C0200, // 0012 CALL R3 1
- 0x900A1203, // 0013 SETMBR R2 K9 R3
- 0x880C0108, // 0014 GETMBR R3 R0 K8
- 0x880C070D, // 0015 GETMBR R3 R3 K13
- 0x900A1803, // 0016 SETMBR R2 K12 R3
- 0x900A1D07, // 0017 SETMBR R2 K14 K7
- 0x540E000F, // 0018 LDINT R3 16
- 0x900A1E03, // 0019 SETMBR R2 K15 R3
- 0x880C0110, // 001A GETMBR R3 R0 K16
- 0x900A2003, // 001B SETMBR R2 K16 R3
- 0x900A2307, // 001C SETMBR R2 K17 K7
- 0x900A2504, // 001D SETMBR R2 K18 K4
- 0x880C0109, // 001E GETMBR R3 R0 K9
- 0x900A2603, // 001F SETMBR R2 K19 R3
- 0x900A2907, // 0020 SETMBR R2 K20 K7
- 0xB80E2A00, // 0021 GETNGBL R3 K21
- 0x8C0C0716, // 0022 GETMET R3 R3 K22
- 0x8C140317, // 0023 GETMET R5 R1 K23
- 0x581C0018, // 0024 LDCONST R7 K24
- 0xB8223200, // 0025 GETNGBL R8 K25
- 0x8C20111A, // 0026 GETMET R8 R8 K26
- 0x8828050F, // 0027 GETMBR R10 R2 K15
- 0x7C200400, // 0028 CALL R8 2
- 0x7C140600, // 0029 CALL R5 3
- 0x5818001B, // 002A LDCONST R6 K27
- 0x7C0C0600, // 002B CALL R3 3
- 0x80040400, // 002C RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: decrypt
-********************************************************************/
-be_local_closure(Matter_Frame_decrypt, /* name */
- be_nested_proto(
- 16, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[36]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(session),
- /* K2 */ be_nested_str_weak(raw),
- /* K3 */ be_const_int(2147483647),
- /* K4 */ be_nested_str_weak(get_i2r),
- /* K5 */ be_nested_str_weak(sec_p),
- /* K6 */ be_nested_str_weak(get_i2r_privacy),
- /* K7 */ be_nested_str_weak(add),
- /* K8 */ be_nested_str_weak(local_session_id),
- /* K9 */ be_nested_str_weak(payload_idx),
- /* K10 */ be_const_int(1),
- /* K11 */ be_nested_str_weak(AES_CTR),
- /* K12 */ be_nested_str_weak(decrypt),
- /* K13 */ be_const_int(2),
- /* K14 */ be_const_int(0),
- /* K15 */ be_const_int(3),
- /* K16 */ be_nested_str_weak(self),
- /* K17 */ be_nested_str_weak(flags),
- /* K18 */ be_nested_str_weak(message_counter),
- /* K19 */ be_nested_str_weak(source_node_id),
- /* K20 */ be_nested_str_weak(peer_node_id),
- /* K21 */ be_nested_str_weak(resize),
- /* K22 */ be_nested_str_weak(tasmota),
- /* K23 */ be_nested_str_weak(log),
- /* K24 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K25 */ be_nested_str_weak(MTR_X3A_X20i2r_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K26 */ be_nested_str_weak(tohex),
- /* K27 */ be_nested_str_weak(MTR_X3A_X20p_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K28 */ be_nested_str_weak(MTR_X3A_X20a_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K29 */ be_nested_str_weak(MTR_X3A_X20n_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K30 */ be_nested_str_weak(MTR_X3A_X20mic_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K31 */ be_nested_str_weak(AES_CCM),
- /* K32 */ be_nested_str_weak(tag),
- /* K33 */ be_nested_str_weak(MTR_X3A_X20cleartext_X20_X20_X20_X3D),
- /* K34 */ be_nested_str_weak(MTR_X3A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20rejected_X20packet_X20due_X20to_X20invalid_X20MIC),
- }),
- be_str_weak(decrypt),
- &be_const_str_solidified,
- ( &(const binstruction[165]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x88080101, // 0001 GETMBR R2 R0 K1
- 0x880C0102, // 0002 GETMBR R3 R0 K2
- 0x5411FFEF, // 0003 LDINT R4 -16
- 0x40100903, // 0004 CONNECT R4 R4 K3
- 0x94100604, // 0005 GETIDX R4 R3 R4
- 0x8C140504, // 0006 GETMET R5 R2 K4
- 0x7C140200, // 0007 CALL R5 1
- 0x88180105, // 0008 GETMBR R6 R0 K5
- 0x781A0025, // 0009 JMPF R6 #0030
- 0x8C180506, // 000A GETMET R6 R2 K6
- 0x7C180200, // 000B CALL R6 1
- 0x601C0015, // 000C GETGBL R7 G21
- 0x7C1C0000, // 000D CALL R7 0
- 0x8C1C0F07, // 000E GETMET R7 R7 K7
- 0x88240108, // 000F GETMBR R9 R0 K8
- 0x5429FFFD, // 0010 LDINT R10 -2
- 0x7C1C0600, // 0011 CALL R7 3
- 0x54220004, // 0012 LDINT R8 5
- 0x5426000E, // 0013 LDINT R9 15
- 0x40201009, // 0014 CONNECT R8 R8 R9
- 0x94200808, // 0015 GETIDX R8 R4 R8
- 0x001C0E08, // 0016 ADD R7 R7 R8
- 0x54220003, // 0017 LDINT R8 4
- 0x88240109, // 0018 GETMBR R9 R0 K9
- 0x0424130A, // 0019 SUB R9 R9 K10
- 0x40201009, // 001A CONNECT R8 R8 R9
- 0x88240102, // 001B GETMBR R9 R0 K2
- 0x94201208, // 001C GETIDX R8 R9 R8
- 0x8C28030B, // 001D GETMET R10 R1 K11
- 0x5C300C00, // 001E MOVE R12 R6
- 0x7C280400, // 001F CALL R10 2
- 0x8C28150C, // 0020 GETMET R10 R10 K12
- 0x5C301000, // 0021 MOVE R12 R8
- 0x5C340E00, // 0022 MOVE R13 R7
- 0x5838000D, // 0023 LDCONST R14 K13
- 0x7C280800, // 0024 CALL R10 4
- 0x5C241400, // 0025 MOVE R9 R10
- 0x402A1D0F, // 0026 CONNECT R10 K14 K15
- 0x882C0102, // 0027 GETMBR R11 R0 K2
- 0x9428160A, // 0028 GETIDX R10 R11 R10
- 0x00281409, // 0029 ADD R10 R10 R9
- 0x882C0110, // 002A GETMBR R11 R0 K16
- 0x882C1709, // 002B GETMBR R11 R11 K9
- 0x402C1703, // 002C CONNECT R11 R11 K3
- 0x942C100B, // 002D GETIDX R11 R8 R11
- 0x0028140B, // 002E ADD R10 R10 R11
- 0x9002040A, // 002F SETMBR R0 K2 R10
- 0x88180109, // 0030 GETMBR R6 R0 K9
- 0x04180D0A, // 0031 SUB R6 R6 K10
- 0x401A1C06, // 0032 CONNECT R6 K14 R6
- 0x94180606, // 0033 GETIDX R6 R3 R6
- 0x881C0109, // 0034 GETMBR R7 R0 K9
- 0x5421FFEE, // 0035 LDINT R8 -17
- 0x401C0E08, // 0036 CONNECT R7 R7 R8
- 0x941C0607, // 0037 GETIDX R7 R3 R7
- 0x60200015, // 0038 GETGBL R8 G21
- 0x7C200000, // 0039 CALL R8 0
- 0x8C241107, // 003A GETMET R9 R8 K7
- 0x882C0111, // 003B GETMBR R11 R0 K17
- 0x5830000A, // 003C LDCONST R12 K10
- 0x7C240600, // 003D CALL R9 3
- 0x8C241107, // 003E GETMET R9 R8 K7
- 0x882C0112, // 003F GETMBR R11 R0 K18
- 0x54320003, // 0040 LDINT R12 4
- 0x7C240600, // 0041 CALL R9 3
- 0x88240113, // 0042 GETMBR R9 R0 K19
- 0x78260001, // 0043 JMPF R9 #0046
- 0x40241103, // 0044 CONNECT R9 R8 K3
- 0x70020006, // 0045 JMP #004D
- 0x88240514, // 0046 GETMBR R9 R2 K20
- 0x78260001, // 0047 JMPF R9 #004A
- 0x88240514, // 0048 GETMBR R9 R2 K20
- 0x40241009, // 0049 CONNECT R9 R8 R9
- 0x8C241115, // 004A GETMET R9 R8 K21
- 0x542E000C, // 004B LDINT R11 13
- 0x7C240400, // 004C CALL R9 2
- 0xB8262C00, // 004D GETNGBL R9 K22
- 0x8C241317, // 004E GETMET R9 R9 K23
- 0x582C0018, // 004F LDCONST R11 K24
- 0x5830000F, // 0050 LDCONST R12 K15
- 0x7C240600, // 0051 CALL R9 3
- 0xB8262C00, // 0052 GETNGBL R9 K22
- 0x8C241317, // 0053 GETMET R9 R9 K23
- 0x8C2C0B1A, // 0054 GETMET R11 R5 K26
- 0x7C2C0200, // 0055 CALL R11 1
- 0x002E320B, // 0056 ADD R11 K25 R11
- 0x5830000F, // 0057 LDCONST R12 K15
- 0x7C240600, // 0058 CALL R9 3
- 0xB8262C00, // 0059 GETNGBL R9 K22
- 0x8C241317, // 005A GETMET R9 R9 K23
- 0x8C2C0F1A, // 005B GETMET R11 R7 K26
- 0x7C2C0200, // 005C CALL R11 1
- 0x002E360B, // 005D ADD R11 K27 R11
- 0x5830000F, // 005E LDCONST R12 K15
- 0x7C240600, // 005F CALL R9 3
- 0xB8262C00, // 0060 GETNGBL R9 K22
- 0x8C241317, // 0061 GETMET R9 R9 K23
- 0x8C2C0D1A, // 0062 GETMET R11 R6 K26
- 0x7C2C0200, // 0063 CALL R11 1
- 0x002E380B, // 0064 ADD R11 K28 R11
- 0x5830000F, // 0065 LDCONST R12 K15
- 0x7C240600, // 0066 CALL R9 3
- 0xB8262C00, // 0067 GETNGBL R9 K22
- 0x8C241317, // 0068 GETMET R9 R9 K23
- 0x8C2C111A, // 0069 GETMET R11 R8 K26
- 0x7C2C0200, // 006A CALL R11 1
- 0x002E3A0B, // 006B ADD R11 K29 R11
- 0x5830000F, // 006C LDCONST R12 K15
- 0x7C240600, // 006D CALL R9 3
- 0xB8262C00, // 006E GETNGBL R9 K22
- 0x8C241317, // 006F GETMET R9 R9 K23
- 0x8C2C091A, // 0070 GETMET R11 R4 K26
- 0x7C2C0200, // 0071 CALL R11 1
- 0x002E3C0B, // 0072 ADD R11 K30 R11
- 0x5830000F, // 0073 LDCONST R12 K15
- 0x7C240600, // 0074 CALL R9 3
- 0x8C24031F, // 0075 GETMET R9 R1 K31
- 0x5C2C0A00, // 0076 MOVE R11 R5
- 0x5C301000, // 0077 MOVE R12 R8
- 0x5C340C00, // 0078 MOVE R13 R6
- 0x6038000C, // 0079 GETGBL R14 G12
- 0x5C3C0E00, // 007A MOVE R15 R7
- 0x7C380200, // 007B CALL R14 1
- 0x543E000F, // 007C LDINT R15 16
- 0x7C240C00, // 007D CALL R9 6
- 0x8C28130C, // 007E GETMET R10 R9 K12
- 0x5C300E00, // 007F MOVE R12 R7
- 0x7C280400, // 0080 CALL R10 2
- 0x8C2C1320, // 0081 GETMET R11 R9 K32
- 0x7C2C0200, // 0082 CALL R11 1
- 0xB8322C00, // 0083 GETNGBL R12 K22
- 0x8C301917, // 0084 GETMET R12 R12 K23
- 0x58380018, // 0085 LDCONST R14 K24
- 0x583C000F, // 0086 LDCONST R15 K15
- 0x7C300600, // 0087 CALL R12 3
- 0xB8322C00, // 0088 GETNGBL R12 K22
- 0x8C301917, // 0089 GETMET R12 R12 K23
- 0x8C38151A, // 008A GETMET R14 R10 K26
- 0x7C380200, // 008B CALL R14 1
- 0x003A420E, // 008C ADD R14 K33 R14
- 0x583C000F, // 008D LDCONST R15 K15
- 0x7C300600, // 008E CALL R12 3
- 0xB8322C00, // 008F GETNGBL R12 K22
- 0x8C301917, // 0090 GETMET R12 R12 K23
- 0x8C38171A, // 0091 GETMET R14 R11 K26
- 0x7C380200, // 0092 CALL R14 1
- 0x003A440E, // 0093 ADD R14 K34 R14
- 0x583C000F, // 0094 LDCONST R15 K15
- 0x7C300600, // 0095 CALL R12 3
- 0xB8322C00, // 0096 GETNGBL R12 K22
- 0x8C301917, // 0097 GETMET R12 R12 K23
- 0x58380018, // 0098 LDCONST R14 K24
- 0x583C000F, // 0099 LDCONST R15 K15
- 0x7C300600, // 009A CALL R12 3
- 0x20301604, // 009B NE R12 R11 R4
- 0x78320006, // 009C JMPF R12 #00A4
- 0xB8322C00, // 009D GETNGBL R12 K22
- 0x8C301917, // 009E GETMET R12 R12 K23
- 0x58380023, // 009F LDCONST R14 K35
- 0x583C000F, // 00A0 LDCONST R15 K15
- 0x7C300600, // 00A1 CALL R12 3
- 0x4C300000, // 00A2 LDNIL R12
- 0x80041800, // 00A3 RET 1 R12
- 0x80041400, // 00A4 RET 1 R10
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: encode
********************************************************************/
@@ -1222,55 +969,411 @@ be_local_closure(Matter_Frame_encode, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: decode_payload
+********************************************************************/
+be_local_closure(Matter_Frame_decode_payload, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[19]) { /* constants */
+ /* K0 */ be_nested_str_weak(payload_idx),
+ /* K1 */ be_nested_str_weak(raw),
+ /* K2 */ be_nested_str_weak(x_flags),
+ /* K3 */ be_nested_str_weak(get),
+ /* K4 */ be_const_int(1),
+ /* K5 */ be_nested_str_weak(x_flag_v),
+ /* K6 */ be_nested_str_weak(getbits),
+ /* K7 */ be_nested_str_weak(x_flag_sx),
+ /* K8 */ be_const_int(3),
+ /* K9 */ be_nested_str_weak(x_flag_r),
+ /* K10 */ be_const_int(2),
+ /* K11 */ be_nested_str_weak(x_flag_a),
+ /* K12 */ be_nested_str_weak(x_flag_i),
+ /* K13 */ be_nested_str_weak(opcode),
+ /* K14 */ be_nested_str_weak(exchange_id),
+ /* K15 */ be_nested_str_weak(protocol_id),
+ /* K16 */ be_nested_str_weak(vendor_id),
+ /* K17 */ be_nested_str_weak(ack_message_counter),
+ /* K18 */ be_nested_str_weak(app_payload_idx),
+ }),
+ be_str_weak(decode_payload),
+ &be_const_str_solidified,
+ ( &(const binstruction[87]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x8C0C0503, // 0002 GETMET R3 R2 K3
+ 0x5C140200, // 0003 MOVE R5 R1
+ 0x58180004, // 0004 LDCONST R6 K4
+ 0x7C0C0600, // 0005 CALL R3 3
+ 0x90020403, // 0006 SETMBR R0 K2 R3
+ 0x8C0C0506, // 0007 GETMET R3 R2 K6
+ 0x54160007, // 0008 LDINT R5 8
+ 0x08140205, // 0009 MUL R5 R1 R5
+ 0x541A0003, // 000A LDINT R6 4
+ 0x00140A06, // 000B ADD R5 R5 R6
+ 0x58180004, // 000C LDCONST R6 K4
+ 0x7C0C0600, // 000D CALL R3 3
+ 0x90020A03, // 000E SETMBR R0 K5 R3
+ 0x8C0C0506, // 000F GETMET R3 R2 K6
+ 0x54160007, // 0010 LDINT R5 8
+ 0x08140205, // 0011 MUL R5 R1 R5
+ 0x00140B08, // 0012 ADD R5 R5 K8
+ 0x58180004, // 0013 LDCONST R6 K4
+ 0x7C0C0600, // 0014 CALL R3 3
+ 0x90020E03, // 0015 SETMBR R0 K7 R3
+ 0x8C0C0506, // 0016 GETMET R3 R2 K6
+ 0x54160007, // 0017 LDINT R5 8
+ 0x08140205, // 0018 MUL R5 R1 R5
+ 0x00140B0A, // 0019 ADD R5 R5 K10
+ 0x58180004, // 001A LDCONST R6 K4
+ 0x7C0C0600, // 001B CALL R3 3
+ 0x90021203, // 001C SETMBR R0 K9 R3
+ 0x8C0C0506, // 001D GETMET R3 R2 K6
+ 0x54160007, // 001E LDINT R5 8
+ 0x08140205, // 001F MUL R5 R1 R5
+ 0x00140B04, // 0020 ADD R5 R5 K4
+ 0x58180004, // 0021 LDCONST R6 K4
+ 0x7C0C0600, // 0022 CALL R3 3
+ 0x90021603, // 0023 SETMBR R0 K11 R3
+ 0x8C0C0506, // 0024 GETMET R3 R2 K6
+ 0x54160007, // 0025 LDINT R5 8
+ 0x08140205, // 0026 MUL R5 R1 R5
+ 0x58180004, // 0027 LDCONST R6 K4
+ 0x7C0C0600, // 0028 CALL R3 3
+ 0x90021803, // 0029 SETMBR R0 K12 R3
+ 0x8C0C0503, // 002A GETMET R3 R2 K3
+ 0x00140304, // 002B ADD R5 R1 K4
+ 0x58180004, // 002C LDCONST R6 K4
+ 0x7C0C0600, // 002D CALL R3 3
+ 0x90021A03, // 002E SETMBR R0 K13 R3
+ 0x8C0C0503, // 002F GETMET R3 R2 K3
+ 0x0014030A, // 0030 ADD R5 R1 K10
+ 0x5818000A, // 0031 LDCONST R6 K10
+ 0x7C0C0600, // 0032 CALL R3 3
+ 0x90021C03, // 0033 SETMBR R0 K14 R3
+ 0x8C0C0503, // 0034 GETMET R3 R2 K3
+ 0x54160003, // 0035 LDINT R5 4
+ 0x00140205, // 0036 ADD R5 R1 R5
+ 0x5818000A, // 0037 LDCONST R6 K10
+ 0x7C0C0600, // 0038 CALL R3 3
+ 0x90021E03, // 0039 SETMBR R0 K15 R3
+ 0x540E0005, // 003A LDINT R3 6
+ 0x00040203, // 003B ADD R1 R1 R3
+ 0x880C0105, // 003C GETMBR R3 R0 K5
+ 0x780E0005, // 003D JMPF R3 #0044
+ 0x8C0C0503, // 003E GETMET R3 R2 K3
+ 0x5C140200, // 003F MOVE R5 R1
+ 0x5818000A, // 0040 LDCONST R6 K10
+ 0x7C0C0600, // 0041 CALL R3 3
+ 0x90022003, // 0042 SETMBR R0 K16 R3
+ 0x0004030A, // 0043 ADD R1 R1 K10
+ 0x880C010B, // 0044 GETMBR R3 R0 K11
+ 0x780E0006, // 0045 JMPF R3 #004D
+ 0x8C0C0503, // 0046 GETMET R3 R2 K3
+ 0x5C140200, // 0047 MOVE R5 R1
+ 0x541A0003, // 0048 LDINT R6 4
+ 0x7C0C0600, // 0049 CALL R3 3
+ 0x90022203, // 004A SETMBR R0 K17 R3
+ 0x540E0003, // 004B LDINT R3 4
+ 0x00040203, // 004C ADD R1 R1 R3
+ 0x880C0107, // 004D GETMBR R3 R0 K7
+ 0x780E0005, // 004E JMPF R3 #0055
+ 0x8C0C0503, // 004F GETMET R3 R2 K3
+ 0x5C140200, // 0050 MOVE R5 R1
+ 0x5818000A, // 0051 LDCONST R6 K10
+ 0x7C0C0600, // 0052 CALL R3 3
+ 0x0010070A, // 0053 ADD R4 R3 K10
+ 0x00040204, // 0054 ADD R1 R1 R4
+ 0x90022401, // 0055 SETMBR R0 K18 R1
+ 0x80040000, // 0056 RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: decrypt
+********************************************************************/
+be_local_closure(Matter_Frame_decrypt, /* name */
+ be_nested_proto(
+ 16, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[36]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(raw),
+ /* K3 */ be_const_int(2147483647),
+ /* K4 */ be_nested_str_weak(get_i2r),
+ /* K5 */ be_nested_str_weak(sec_p),
+ /* K6 */ be_nested_str_weak(get_i2r_privacy),
+ /* K7 */ be_nested_str_weak(add),
+ /* K8 */ be_nested_str_weak(local_session_id),
+ /* K9 */ be_nested_str_weak(payload_idx),
+ /* K10 */ be_const_int(1),
+ /* K11 */ be_nested_str_weak(AES_CTR),
+ /* K12 */ be_nested_str_weak(decrypt),
+ /* K13 */ be_const_int(2),
+ /* K14 */ be_const_int(0),
+ /* K15 */ be_const_int(3),
+ /* K16 */ be_nested_str_weak(self),
+ /* K17 */ be_nested_str_weak(flags),
+ /* K18 */ be_nested_str_weak(message_counter),
+ /* K19 */ be_nested_str_weak(source_node_id),
+ /* K20 */ be_nested_str_weak(peer_node_id),
+ /* K21 */ be_nested_str_weak(resize),
+ /* K22 */ be_nested_str_weak(tasmota),
+ /* K23 */ be_nested_str_weak(log),
+ /* K24 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20i2r_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K26 */ be_nested_str_weak(tohex),
+ /* K27 */ be_nested_str_weak(MTR_X3A_X20p_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K28 */ be_nested_str_weak(MTR_X3A_X20a_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K29 */ be_nested_str_weak(MTR_X3A_X20n_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K30 */ be_nested_str_weak(MTR_X3A_X20mic_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K31 */ be_nested_str_weak(AES_CCM),
+ /* K32 */ be_nested_str_weak(tag),
+ /* K33 */ be_nested_str_weak(MTR_X3A_X20cleartext_X20_X20_X20_X3D),
+ /* K34 */ be_nested_str_weak(MTR_X3A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K35 */ be_nested_str_weak(MTR_X3A_X20rejected_X20packet_X20due_X20to_X20invalid_X20MIC),
+ }),
+ be_str_weak(decrypt),
+ &be_const_str_solidified,
+ ( &(const binstruction[165]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x880C0102, // 0002 GETMBR R3 R0 K2
+ 0x5411FFEF, // 0003 LDINT R4 -16
+ 0x40100903, // 0004 CONNECT R4 R4 K3
+ 0x94100604, // 0005 GETIDX R4 R3 R4
+ 0x8C140504, // 0006 GETMET R5 R2 K4
+ 0x7C140200, // 0007 CALL R5 1
+ 0x88180105, // 0008 GETMBR R6 R0 K5
+ 0x781A0025, // 0009 JMPF R6 #0030
+ 0x8C180506, // 000A GETMET R6 R2 K6
+ 0x7C180200, // 000B CALL R6 1
+ 0x601C0015, // 000C GETGBL R7 G21
+ 0x7C1C0000, // 000D CALL R7 0
+ 0x8C1C0F07, // 000E GETMET R7 R7 K7
+ 0x88240108, // 000F GETMBR R9 R0 K8
+ 0x5429FFFD, // 0010 LDINT R10 -2
+ 0x7C1C0600, // 0011 CALL R7 3
+ 0x54220004, // 0012 LDINT R8 5
+ 0x5426000E, // 0013 LDINT R9 15
+ 0x40201009, // 0014 CONNECT R8 R8 R9
+ 0x94200808, // 0015 GETIDX R8 R4 R8
+ 0x001C0E08, // 0016 ADD R7 R7 R8
+ 0x54220003, // 0017 LDINT R8 4
+ 0x88240109, // 0018 GETMBR R9 R0 K9
+ 0x0424130A, // 0019 SUB R9 R9 K10
+ 0x40201009, // 001A CONNECT R8 R8 R9
+ 0x88240102, // 001B GETMBR R9 R0 K2
+ 0x94201208, // 001C GETIDX R8 R9 R8
+ 0x8C28030B, // 001D GETMET R10 R1 K11
+ 0x5C300C00, // 001E MOVE R12 R6
+ 0x7C280400, // 001F CALL R10 2
+ 0x8C28150C, // 0020 GETMET R10 R10 K12
+ 0x5C301000, // 0021 MOVE R12 R8
+ 0x5C340E00, // 0022 MOVE R13 R7
+ 0x5838000D, // 0023 LDCONST R14 K13
+ 0x7C280800, // 0024 CALL R10 4
+ 0x5C241400, // 0025 MOVE R9 R10
+ 0x402A1D0F, // 0026 CONNECT R10 K14 K15
+ 0x882C0102, // 0027 GETMBR R11 R0 K2
+ 0x9428160A, // 0028 GETIDX R10 R11 R10
+ 0x00281409, // 0029 ADD R10 R10 R9
+ 0x882C0110, // 002A GETMBR R11 R0 K16
+ 0x882C1709, // 002B GETMBR R11 R11 K9
+ 0x402C1703, // 002C CONNECT R11 R11 K3
+ 0x942C100B, // 002D GETIDX R11 R8 R11
+ 0x0028140B, // 002E ADD R10 R10 R11
+ 0x9002040A, // 002F SETMBR R0 K2 R10
+ 0x88180109, // 0030 GETMBR R6 R0 K9
+ 0x04180D0A, // 0031 SUB R6 R6 K10
+ 0x401A1C06, // 0032 CONNECT R6 K14 R6
+ 0x94180606, // 0033 GETIDX R6 R3 R6
+ 0x881C0109, // 0034 GETMBR R7 R0 K9
+ 0x5421FFEE, // 0035 LDINT R8 -17
+ 0x401C0E08, // 0036 CONNECT R7 R7 R8
+ 0x941C0607, // 0037 GETIDX R7 R3 R7
+ 0x60200015, // 0038 GETGBL R8 G21
+ 0x7C200000, // 0039 CALL R8 0
+ 0x8C241107, // 003A GETMET R9 R8 K7
+ 0x882C0111, // 003B GETMBR R11 R0 K17
+ 0x5830000A, // 003C LDCONST R12 K10
+ 0x7C240600, // 003D CALL R9 3
+ 0x8C241107, // 003E GETMET R9 R8 K7
+ 0x882C0112, // 003F GETMBR R11 R0 K18
+ 0x54320003, // 0040 LDINT R12 4
+ 0x7C240600, // 0041 CALL R9 3
+ 0x88240113, // 0042 GETMBR R9 R0 K19
+ 0x78260001, // 0043 JMPF R9 #0046
+ 0x40241103, // 0044 CONNECT R9 R8 K3
+ 0x70020006, // 0045 JMP #004D
+ 0x88240514, // 0046 GETMBR R9 R2 K20
+ 0x78260001, // 0047 JMPF R9 #004A
+ 0x88240514, // 0048 GETMBR R9 R2 K20
+ 0x40241009, // 0049 CONNECT R9 R8 R9
+ 0x8C241115, // 004A GETMET R9 R8 K21
+ 0x542E000C, // 004B LDINT R11 13
+ 0x7C240400, // 004C CALL R9 2
+ 0xB8262C00, // 004D GETNGBL R9 K22
+ 0x8C241317, // 004E GETMET R9 R9 K23
+ 0x582C0018, // 004F LDCONST R11 K24
+ 0x54320003, // 0050 LDINT R12 4
+ 0x7C240600, // 0051 CALL R9 3
+ 0xB8262C00, // 0052 GETNGBL R9 K22
+ 0x8C241317, // 0053 GETMET R9 R9 K23
+ 0x8C2C0B1A, // 0054 GETMET R11 R5 K26
+ 0x7C2C0200, // 0055 CALL R11 1
+ 0x002E320B, // 0056 ADD R11 K25 R11
+ 0x54320003, // 0057 LDINT R12 4
+ 0x7C240600, // 0058 CALL R9 3
+ 0xB8262C00, // 0059 GETNGBL R9 K22
+ 0x8C241317, // 005A GETMET R9 R9 K23
+ 0x8C2C0F1A, // 005B GETMET R11 R7 K26
+ 0x7C2C0200, // 005C CALL R11 1
+ 0x002E360B, // 005D ADD R11 K27 R11
+ 0x54320003, // 005E LDINT R12 4
+ 0x7C240600, // 005F CALL R9 3
+ 0xB8262C00, // 0060 GETNGBL R9 K22
+ 0x8C241317, // 0061 GETMET R9 R9 K23
+ 0x8C2C0D1A, // 0062 GETMET R11 R6 K26
+ 0x7C2C0200, // 0063 CALL R11 1
+ 0x002E380B, // 0064 ADD R11 K28 R11
+ 0x54320003, // 0065 LDINT R12 4
+ 0x7C240600, // 0066 CALL R9 3
+ 0xB8262C00, // 0067 GETNGBL R9 K22
+ 0x8C241317, // 0068 GETMET R9 R9 K23
+ 0x8C2C111A, // 0069 GETMET R11 R8 K26
+ 0x7C2C0200, // 006A CALL R11 1
+ 0x002E3A0B, // 006B ADD R11 K29 R11
+ 0x54320003, // 006C LDINT R12 4
+ 0x7C240600, // 006D CALL R9 3
+ 0xB8262C00, // 006E GETNGBL R9 K22
+ 0x8C241317, // 006F GETMET R9 R9 K23
+ 0x8C2C091A, // 0070 GETMET R11 R4 K26
+ 0x7C2C0200, // 0071 CALL R11 1
+ 0x002E3C0B, // 0072 ADD R11 K30 R11
+ 0x54320003, // 0073 LDINT R12 4
+ 0x7C240600, // 0074 CALL R9 3
+ 0x8C24031F, // 0075 GETMET R9 R1 K31
+ 0x5C2C0A00, // 0076 MOVE R11 R5
+ 0x5C301000, // 0077 MOVE R12 R8
+ 0x5C340C00, // 0078 MOVE R13 R6
+ 0x6038000C, // 0079 GETGBL R14 G12
+ 0x5C3C0E00, // 007A MOVE R15 R7
+ 0x7C380200, // 007B CALL R14 1
+ 0x543E000F, // 007C LDINT R15 16
+ 0x7C240C00, // 007D CALL R9 6
+ 0x8C28130C, // 007E GETMET R10 R9 K12
+ 0x5C300E00, // 007F MOVE R12 R7
+ 0x7C280400, // 0080 CALL R10 2
+ 0x8C2C1320, // 0081 GETMET R11 R9 K32
+ 0x7C2C0200, // 0082 CALL R11 1
+ 0xB8322C00, // 0083 GETNGBL R12 K22
+ 0x8C301917, // 0084 GETMET R12 R12 K23
+ 0x58380018, // 0085 LDCONST R14 K24
+ 0x543E0003, // 0086 LDINT R15 4
+ 0x7C300600, // 0087 CALL R12 3
+ 0xB8322C00, // 0088 GETNGBL R12 K22
+ 0x8C301917, // 0089 GETMET R12 R12 K23
+ 0x8C38151A, // 008A GETMET R14 R10 K26
+ 0x7C380200, // 008B CALL R14 1
+ 0x003A420E, // 008C ADD R14 K33 R14
+ 0x543E0003, // 008D LDINT R15 4
+ 0x7C300600, // 008E CALL R12 3
+ 0xB8322C00, // 008F GETNGBL R12 K22
+ 0x8C301917, // 0090 GETMET R12 R12 K23
+ 0x8C38171A, // 0091 GETMET R14 R11 K26
+ 0x7C380200, // 0092 CALL R14 1
+ 0x003A440E, // 0093 ADD R14 K34 R14
+ 0x543E0003, // 0094 LDINT R15 4
+ 0x7C300600, // 0095 CALL R12 3
+ 0xB8322C00, // 0096 GETNGBL R12 K22
+ 0x8C301917, // 0097 GETMET R12 R12 K23
+ 0x58380018, // 0098 LDCONST R14 K24
+ 0x543E0003, // 0099 LDINT R15 4
+ 0x7C300600, // 009A CALL R12 3
+ 0x20301604, // 009B NE R12 R11 R4
+ 0x78320006, // 009C JMPF R12 #00A4
+ 0xB8322C00, // 009D GETNGBL R12 K22
+ 0x8C301917, // 009E GETMET R12 R12 K23
+ 0x58380023, // 009F LDCONST R14 K35
+ 0x583C000F, // 00A0 LDCONST R15 K15
+ 0x7C300600, // 00A1 CALL R12 3
+ 0x4C300000, // 00A2 LDNIL R12
+ 0x80041800, // 00A3 RET 1 R12
+ 0x80041400, // 00A4 RET 1 R10
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified class: Matter_Frame
********************************************************************/
be_local_class(Matter_Frame,
32,
NULL,
- be_nested_map(41,
+ be_nested_map(42,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(x_flag_a, 8), be_const_var(21) },
- { be_const_key_weak(x_flags, -1), be_const_var(17) },
- { be_const_key_weak(raw, 37), be_const_var(2) },
- { be_const_key_weak(sec_sesstype, 0), be_const_var(12) },
- { be_const_key_weak(build_response, 5), be_const_closure(Matter_Frame_build_response_closure) },
- { be_const_key_weak(sec_mx, -1), be_const_var(11) },
- { be_const_key_weak(dest_node_id_2, 32), be_const_var(15) },
- { be_const_key_weak(encode, -1), be_const_closure(Matter_Frame_encode_closure) },
+ { be_const_key_weak(x_flag_i, -1), be_const_var(22) },
+ { be_const_key_weak(dest_node_id_8, 7), be_const_var(16) },
+ { be_const_key_weak(remote_ip, -1), be_const_var(30) },
+ { be_const_key_weak(x_flag_a, -1), be_const_var(21) },
+ { be_const_key_weak(exchange_id, -1), be_const_var(24) },
+ { be_const_key_weak(opcode, -1), be_const_var(23) },
+ { be_const_key_weak(sec_sesstype, -1), be_const_var(12) },
+ { be_const_key_weak(app_payload_idx, -1), be_const_var(29) },
+ { be_const_key_weak(payload_idx, -1), be_const_var(3) },
+ { be_const_key_weak(ack_message_counter, 6), be_const_var(27) },
+ { be_const_key_weak(sec_c, -1), be_const_var(10) },
+ { be_const_key_weak(x_flag_v, -1), be_const_var(18) },
+ { be_const_key_weak(x_flag_sx, 10), be_const_var(19) },
+ { be_const_key_weak(encode, 28), be_const_closure(Matter_Frame_encode_closure) },
+ { be_const_key_weak(local_session_id, -1), be_const_var(7) },
+ { be_const_key_weak(flag_s, -1), be_const_var(5) },
+ { be_const_key_weak(debug, -1), be_const_closure(Matter_Frame_debug_closure) },
+ { be_const_key_weak(build_standalone_ack, 34), be_const_closure(Matter_Frame_build_standalone_ack_closure) },
+ { be_const_key_weak(encrypt, 12), be_const_closure(Matter_Frame_encrypt_closure) },
+ { be_const_key_weak(session, -1), be_const_var(1) },
+ { be_const_key_weak(sec_flags, -1), be_const_var(8) },
+ { be_const_key_weak(build_response, -1), be_const_closure(Matter_Frame_build_response_closure) },
+ { be_const_key_weak(initiate_response, -1), be_const_static_closure(Matter_Frame_initiate_response_closure) },
+ { be_const_key_weak(vendor_id, 32), be_const_var(26) },
+ { be_const_key_weak(decode_header, -1), be_const_closure(Matter_Frame_decode_header_closure) },
+ { be_const_key_weak(remote_port, 24), be_const_var(31) },
+ { be_const_key_weak(flags, -1), be_const_var(4) },
+ { be_const_key_weak(protocol_id, 23), be_const_var(25) },
+ { be_const_key_weak(raw, -1), be_const_var(2) },
+ { be_const_key_weak(source_node_id, 13), be_const_var(14) },
+ { be_const_key_weak(flag_dsiz, -1), be_const_var(6) },
+ { be_const_key_weak(x_flag_r, -1), be_const_var(20) },
+ { be_const_key_weak(message_counter, -1), be_const_var(13) },
+ { be_const_key_weak(init, 14), be_const_closure(Matter_Frame_init_closure) },
+ { be_const_key_weak(message_handler, -1), be_const_var(0) },
+ { be_const_key_weak(dest_node_id_2, -1), be_const_var(15) },
+ { be_const_key_weak(decode_payload, -1), be_const_closure(Matter_Frame_decode_payload_closure) },
+ { be_const_key_weak(sec_p, 8), be_const_var(9) },
{ be_const_key_weak(decrypt, -1), be_const_closure(Matter_Frame_decrypt_closure) },
{ be_const_key_weak(sec_extensions, -1), be_const_var(28) },
- { be_const_key_weak(remote_ip, 7), be_const_var(30) },
- { be_const_key_weak(message_counter, 33), be_const_var(13) },
- { be_const_key_weak(ack_message_counter, -1), be_const_var(27) },
- { be_const_key_weak(x_flag_i, -1), be_const_var(22) },
- { be_const_key_weak(dest_node_id_8, -1), be_const_var(16) },
- { be_const_key_weak(x_flag_r, 2), be_const_var(20) },
- { be_const_key_weak(x_flag_v, -1), be_const_var(18) },
- { be_const_key_weak(opcode, -1), be_const_var(23) },
- { be_const_key_weak(sec_c, 25), be_const_var(10) },
- { be_const_key_weak(sec_p, -1), be_const_var(9) },
- { be_const_key_weak(protocol_id, 29), be_const_var(25) },
- { be_const_key_weak(sec_flags, -1), be_const_var(8) },
- { be_const_key_weak(message_handler, -1), be_const_var(0) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_Frame_init_closure) },
- { be_const_key_weak(encrypt, 19), be_const_closure(Matter_Frame_encrypt_closure) },
- { be_const_key_weak(build_standalone_ack, 27), be_const_closure(Matter_Frame_build_standalone_ack_closure) },
- { be_const_key_weak(decode_payload, -1), be_const_closure(Matter_Frame_decode_payload_closure) },
- { be_const_key_weak(remote_port, 36), be_const_var(31) },
- { be_const_key_weak(flag_dsiz, -1), be_const_var(6) },
- { be_const_key_weak(vendor_id, 16), be_const_var(26) },
- { be_const_key_weak(payload_idx, -1), be_const_var(3) },
- { be_const_key_weak(debug, -1), be_const_closure(Matter_Frame_debug_closure) },
- { be_const_key_weak(x_flag_sx, 39), be_const_var(19) },
- { be_const_key_weak(decode_header, -1), be_const_closure(Matter_Frame_decode_header_closure) },
- { be_const_key_weak(flag_s, -1), be_const_var(5) },
- { be_const_key_weak(app_payload_idx, -1), be_const_var(29) },
- { be_const_key_weak(source_node_id, -1), be_const_var(14) },
- { be_const_key_weak(session, -1), be_const_var(1) },
- { be_const_key_weak(flags, -1), be_const_var(4) },
- { be_const_key_weak(local_session_id, 40), be_const_var(7) },
- { be_const_key_weak(exchange_id, -1), be_const_var(24) },
+ { be_const_key_weak(sec_mx, 3), be_const_var(11) },
+ { be_const_key_weak(x_flags, 2), be_const_var(17) },
})),
be_str_weak(Matter_Frame)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
index 453348f65..34f73b98f 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
@@ -45,7 +45,7 @@ be_local_closure(Matter_MessageHandler_send_response, /* name */
********************************************************************/
be_local_closure(Matter_MessageHandler_msg_received, /* name */
be_nested_proto(
- 17, /* nstack */
+ 18, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
@@ -53,7 +53,7 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[59]) { /* constants */
+ ( &(const bvalue[69]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(log),
@@ -72,342 +72,374 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
/* K15 */ be_nested_str_weak(MTR_X3A_X20find_X20session_X20by_X20source_node_id_X20_X3D_X20),
/* K16 */ be_nested_str_weak(session_id_X20_X3D_X20),
/* K17 */ be_const_int(3),
- /* K18 */ be_nested_str_weak(session),
- /* K19 */ be_nested_str_weak(counter_rcv),
- /* K20 */ be_nested_str_weak(validate),
- /* K21 */ be_nested_str_weak(message_counter),
- /* K22 */ be_nested_str_weak(format),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20unencrypted_X20message_X20_X3D_X20_X25i_X20ref_X20_X3D_X20_X25i),
- /* K24 */ be_nested_str_weak(val),
- /* K25 */ be_nested_str_weak(decode_payload),
- /* K26 */ be_nested_str_weak(packet_ack),
- /* K27 */ be_nested_str_weak(ack_message_counter),
- /* K28 */ be_nested_str_weak(opcode),
- /* K29 */ be_nested_str_weak(get_opcode_name),
- /* K30 */ be_nested_str_weak(0x_X2502X),
- /* K31 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X20_X20_X20_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K32 */ be_const_int(2),
- /* K33 */ be_nested_str_weak(commissioning),
- /* K34 */ be_nested_str_weak(process_incoming),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20decode_X20header_X3A_X20local_session_id_X3D_X25i_X20message_counter_X3D_X25i),
- /* K36 */ be_nested_str_weak(get_session_by_local_session_id),
- /* K37 */ be_nested_str_weak(MTR_X3A_X20unknown_X20local_session_id_X20),
- /* K38 */ be_nested_str_weak(MTR_X3A_X20frame_X3D),
- /* K39 */ be_nested_str_weak(inspect),
- /* K40 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20encrypted_X20message_X20_X3D_X20),
- /* K41 */ be_nested_str_weak(_X20counter_X3D),
- /* K42 */ be_nested_str_weak(decrypt),
- /* K43 */ be_nested_str_weak(raw),
- /* K44 */ be_nested_str_weak(payload_idx),
- /* K45 */ be_const_int(1),
- /* K46 */ be_nested_str_weak(MTR_X3A_X20idx_X3D_X25i_X20clear_X3D_X25s),
- /* K47 */ be_nested_str_weak(MTR_X3A_X20decrypted_X20message_X3A_X20protocol_id_X3A),
- /* K48 */ be_nested_str_weak(protocol_id),
- /* K49 */ be_nested_str_weak(_X20opcode_X3D),
- /* K50 */ be_nested_str_weak(_X20exchange_id),
- /* K51 */ be_nested_str_weak(exchange_id),
- /* K52 */ be_nested_str_weak(MTR_X3A_X20PROTOCOL_ID_SECURE_CHANNEL_X20),
- /* K53 */ be_nested_str_weak(im),
- /* K54 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
- /* K55 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
- /* K56 */ be_nested_str_weak(_X3B),
- /* K57 */ be_nested_str_weak(debug),
- /* K58 */ be_nested_str_weak(traceback),
+ /* K18 */ be_nested_str_weak(__ip),
+ /* K19 */ be_nested_str_weak(__port),
+ /* K20 */ be_nested_str_weak(session),
+ /* K21 */ be_nested_str_weak(counter_rcv),
+ /* K22 */ be_nested_str_weak(validate),
+ /* K23 */ be_nested_str_weak(message_counter),
+ /* K24 */ be_nested_str_weak(format),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20unencrypted_X20message_X20_X3D_X20_X25i_X20ref_X20_X3D_X20_X25i),
+ /* K26 */ be_nested_str_weak(val),
+ /* K27 */ be_nested_str_weak(decode_payload),
+ /* K28 */ be_nested_str_weak(packet_ack),
+ /* K29 */ be_nested_str_weak(ack_message_counter),
+ /* K30 */ be_nested_str_weak(opcode),
+ /* K31 */ be_nested_str_weak(get_opcode_name),
+ /* K32 */ be_nested_str_weak(0x_X2502X),
+ /* K33 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K34 */ be_const_int(2),
+ /* K35 */ be_nested_str_weak(commissioning),
+ /* K36 */ be_nested_str_weak(process_incoming),
+ /* K37 */ be_nested_str_weak(MTR_X3A_X20decode_X20header_X3A_X20local_session_id_X3D_X25i_X20message_counter_X3D_X25i),
+ /* K38 */ be_nested_str_weak(get_session_by_local_session_id),
+ /* K39 */ be_nested_str_weak(MTR_X3A_X20unknown_X20local_session_id_X20),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20frame_X3D),
+ /* K41 */ be_nested_str_weak(inspect),
+ /* K42 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20encrypted_X20message_X20_X3D_X20),
+ /* K43 */ be_nested_str_weak(_X20counter_X3D),
+ /* K44 */ be_nested_str_weak(decrypt),
+ /* K45 */ be_nested_str_weak(raw),
+ /* K46 */ be_nested_str_weak(payload_idx),
+ /* K47 */ be_const_int(1),
+ /* K48 */ be_nested_str_weak(MTR_X3A_X20idx_X3D_X25i_X20clear_X3D_X25s),
+ /* K49 */ be_nested_str_weak(MTR_X3A_X20decrypted_X20message_X3A_X20protocol_id_X3A),
+ /* K50 */ be_nested_str_weak(protocol_id),
+ /* K51 */ be_nested_str_weak(_X20opcode_X3D),
+ /* K52 */ be_nested_str_weak(_X20exchange_id_X3D),
+ /* K53 */ be_nested_str_weak(exchange_id),
+ /* K54 */ be_nested_str_weak(MTR_X3A_X20PROTOCOL_ID_SECURE_CHANNEL_X20),
+ /* K55 */ be_nested_str_weak(im),
+ /* K56 */ be_nested_str_weak(send_enqueued),
+ /* K57 */ be_nested_str_weak(x_flag_r),
+ /* K58 */ be_nested_str_weak(build_standalone_ack),
+ /* K59 */ be_nested_str_weak(encode),
+ /* K60 */ be_nested_str_weak(encrypt),
+ /* K61 */ be_nested_str_weak(send_response),
+ /* K62 */ be_nested_str_weak(remote_ip),
+ /* K63 */ be_nested_str_weak(remote_port),
+ /* K64 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
+ /* K65 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
+ /* K66 */ be_nested_str_weak(_X3B),
+ /* K67 */ be_nested_str_weak(debug),
+ /* K68 */ be_nested_str_weak(traceback),
}),
be_str_weak(msg_received),
&be_const_str_solidified,
- ( &(const binstruction[291]) { /* code */
+ ( &(const binstruction[313]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
- 0xA802010A, // 0001 EXBLK 0 #010D
- 0xB8160200, // 0002 GETNGBL R5 K1
- 0x8C140B02, // 0003 GETMET R5 R5 K2
- 0x8C1C0304, // 0004 GETMET R7 R1 K4
- 0x7C1C0200, // 0005 CALL R7 1
- 0x001E0607, // 0006 ADD R7 K3 R7
- 0x54220003, // 0007 LDINT R8 4
- 0x7C140600, // 0008 CALL R5 3
- 0xB8160A00, // 0009 GETNGBL R5 K5
- 0x8C140B06, // 000A GETMET R5 R5 K6
- 0x5C1C0000, // 000B MOVE R7 R0
- 0x5C200200, // 000C MOVE R8 R1
- 0x5C240400, // 000D MOVE R9 R2
- 0x5C280600, // 000E MOVE R10 R3
- 0x7C140A00, // 000F CALL R5 5
- 0x8C180B07, // 0010 GETMET R6 R5 K7
- 0x7C180200, // 0011 CALL R6 1
- 0x5C1C0C00, // 0012 MOVE R7 R6
- 0x741E0002, // 0013 JMPT R7 #0017
- 0x501C0000, // 0014 LDBOOL R7 0 0
- 0xA8040001, // 0015 EXBLK 1 1
- 0x80040E00, // 0016 RET 1 R7
- 0x881C0B08, // 0017 GETMBR R7 R5 K8
- 0x1C1C0F09, // 0018 EQ R7 R7 K9
- 0x781E0057, // 0019 JMPF R7 #0072
- 0x881C0B0A, // 001A GETMBR R7 R5 K10
- 0x1C1C0F09, // 001B EQ R7 R7 K9
- 0x781E0054, // 001C JMPF R7 #0072
- 0x881C010B, // 001D GETMBR R7 R0 K11
- 0x881C0F0C, // 001E GETMBR R7 R7 K12
- 0x8C1C0F0D, // 001F GETMET R7 R7 K13
- 0x88240B0E, // 0020 GETMBR R9 R5 K14
- 0x542A0059, // 0021 LDINT R10 90
- 0x7C1C0600, // 0022 CALL R7 3
- 0xB8220200, // 0023 GETNGBL R8 K1
- 0x8C201102, // 0024 GETMET R8 R8 K2
- 0x60280008, // 0025 GETGBL R10 G8
- 0x882C0B0E, // 0026 GETMBR R11 R5 K14
- 0x7C280200, // 0027 CALL R10 1
- 0x002A1E0A, // 0028 ADD R10 K15 R10
- 0x00281510, // 0029 ADD R10 R10 K16
- 0x602C0008, // 002A GETGBL R11 G8
- 0x88300F08, // 002B GETMBR R12 R7 K8
- 0x7C2C0200, // 002C CALL R11 1
- 0x0028140B, // 002D ADD R10 R10 R11
- 0x582C0011, // 002E LDCONST R11 K17
- 0x7C200600, // 002F CALL R8 3
- 0x90162407, // 0030 SETMBR R5 K18 R7
- 0x88200113, // 0031 GETMBR R8 R0 K19
- 0x8C201114, // 0032 GETMET R8 R8 K20
- 0x88280B15, // 0033 GETMBR R10 R5 K21
- 0x502C0000, // 0034 LDBOOL R11 0 0
- 0x7C200600, // 0035 CALL R8 3
- 0x7422000D, // 0036 JMPT R8 #0045
- 0xB8220200, // 0037 GETNGBL R8 K1
- 0x8C201102, // 0038 GETMET R8 R8 K2
- 0x8C280916, // 0039 GETMET R10 R4 K22
- 0x58300017, // 003A LDCONST R12 K23
- 0x88340B15, // 003B GETMBR R13 R5 K21
- 0x88380113, // 003C GETMBR R14 R0 K19
- 0x8C381D18, // 003D GETMET R14 R14 K24
- 0x7C380200, // 003E CALL R14 1
- 0x7C280800, // 003F CALL R10 4
- 0x582C0011, // 0040 LDCONST R11 K17
- 0x7C200600, // 0041 CALL R8 3
- 0x50200000, // 0042 LDBOOL R8 0 0
- 0xA8040001, // 0043 EXBLK 1 1
- 0x80041000, // 0044 RET 1 R8
- 0x8C200B19, // 0045 GETMET R8 R5 K25
- 0x7C200200, // 0046 CALL R8 1
- 0x74220002, // 0047 JMPT R8 #004B
- 0x50200000, // 0048 LDBOOL R8 0 0
- 0xA8040001, // 0049 EXBLK 1 1
- 0x80041000, // 004A RET 1 R8
- 0x8820010B, // 004B GETMBR R8 R0 K11
- 0x8C20111A, // 004C GETMET R8 R8 K26
- 0x88280B1B, // 004D GETMBR R10 R5 K27
- 0x7C200400, // 004E CALL R8 2
- 0x88200B1C, // 004F GETMBR R8 R5 K28
- 0x5426000F, // 0050 LDINT R9 16
- 0x20201009, // 0051 NE R8 R8 R9
- 0x78220014, // 0052 JMPF R8 #0068
- 0xB8220A00, // 0053 GETNGBL R8 K5
- 0x8C20111D, // 0054 GETMET R8 R8 K29
- 0x88280B1C, // 0055 GETMBR R10 R5 K28
- 0x7C200400, // 0056 CALL R8 2
- 0x5C241000, // 0057 MOVE R9 R8
- 0x74260004, // 0058 JMPT R9 #005E
- 0x8C240916, // 0059 GETMET R9 R4 K22
- 0x582C001E, // 005A LDCONST R11 K30
- 0x88300B1C, // 005B GETMBR R12 R5 K28
- 0x7C240600, // 005C CALL R9 3
- 0x5C201200, // 005D MOVE R8 R9
- 0xB8260200, // 005E GETNGBL R9 K1
- 0x8C241302, // 005F GETMET R9 R9 K2
- 0x8C2C0916, // 0060 GETMET R11 R4 K22
- 0x5834001F, // 0061 LDCONST R13 K31
- 0x5C381000, // 0062 MOVE R14 R8
- 0x5C3C0400, // 0063 MOVE R15 R2
- 0x5C400600, // 0064 MOVE R16 R3
- 0x7C2C0A00, // 0065 CALL R11 5
- 0x58300020, // 0066 LDCONST R12 K32
- 0x7C240600, // 0067 CALL R9 3
- 0x88200121, // 0068 GETMBR R8 R0 K33
- 0x8C201122, // 0069 GETMET R8 R8 K34
- 0x5C280A00, // 006A MOVE R10 R5
- 0x5C2C0400, // 006B MOVE R11 R2
- 0x5C300600, // 006C MOVE R12 R3
- 0x7C200800, // 006D CALL R8 4
- 0x50200200, // 006E LDBOOL R8 1 0
- 0xA8040001, // 006F EXBLK 1 1
- 0x80041000, // 0070 RET 1 R8
- 0x70020095, // 0071 JMP #0108
- 0xB81E0200, // 0072 GETNGBL R7 K1
- 0x8C1C0F02, // 0073 GETMET R7 R7 K2
- 0x8C240916, // 0074 GETMET R9 R4 K22
- 0x582C0023, // 0075 LDCONST R11 K35
- 0x88300B08, // 0076 GETMBR R12 R5 K8
- 0x88340B15, // 0077 GETMBR R13 R5 K21
- 0x7C240800, // 0078 CALL R9 4
- 0x58280011, // 0079 LDCONST R10 K17
- 0x7C1C0600, // 007A CALL R7 3
- 0x881C010B, // 007B GETMBR R7 R0 K11
- 0x881C0F0C, // 007C GETMBR R7 R7 K12
- 0x8C1C0F24, // 007D GETMET R7 R7 K36
- 0x88240B08, // 007E GETMBR R9 R5 K8
- 0x7C1C0400, // 007F CALL R7 2
- 0x4C200000, // 0080 LDNIL R8
- 0x1C200E08, // 0081 EQ R8 R7 R8
- 0x78220013, // 0082 JMPF R8 #0097
- 0xB8220200, // 0083 GETNGBL R8 K1
- 0x8C201102, // 0084 GETMET R8 R8 K2
- 0x60280008, // 0085 GETGBL R10 G8
- 0x882C0B08, // 0086 GETMBR R11 R5 K8
- 0x7C280200, // 0087 CALL R10 1
- 0x002A4A0A, // 0088 ADD R10 K37 R10
- 0x582C0011, // 0089 LDCONST R11 K17
- 0x7C200600, // 008A CALL R8 3
- 0xB8220200, // 008B GETNGBL R8 K1
- 0x8C201102, // 008C GETMET R8 R8 K2
- 0xB82A0A00, // 008D GETNGBL R10 K5
- 0x8C281527, // 008E GETMET R10 R10 K39
- 0x5C300A00, // 008F MOVE R12 R5
- 0x7C280400, // 0090 CALL R10 2
- 0x002A4C0A, // 0091 ADD R10 K38 R10
- 0x582C0011, // 0092 LDCONST R11 K17
- 0x7C200600, // 0093 CALL R8 3
- 0x50200000, // 0094 LDBOOL R8 0 0
- 0xA8040001, // 0095 EXBLK 1 1
- 0x80041000, // 0096 RET 1 R8
- 0x90162407, // 0097 SETMBR R5 K18 R7
- 0x88200F13, // 0098 GETMBR R8 R7 K19
- 0x8C201114, // 0099 GETMET R8 R8 K20
- 0x88280B15, // 009A GETMBR R10 R5 K21
- 0x502C0200, // 009B LDBOOL R11 1 0
- 0x7C200600, // 009C CALL R8 3
- 0x74220011, // 009D JMPT R8 #00B0
- 0xB8220200, // 009E GETNGBL R8 K1
- 0x8C201102, // 009F GETMET R8 R8 K2
- 0x60280008, // 00A0 GETGBL R10 G8
- 0x882C0B15, // 00A1 GETMBR R11 R5 K21
- 0x7C280200, // 00A2 CALL R10 1
- 0x002A500A, // 00A3 ADD R10 K40 R10
- 0x00281529, // 00A4 ADD R10 R10 K41
- 0x602C0008, // 00A5 GETGBL R11 G8
- 0x88300F13, // 00A6 GETMBR R12 R7 K19
- 0x8C301918, // 00A7 GETMET R12 R12 K24
- 0x7C300200, // 00A8 CALL R12 1
- 0x7C2C0200, // 00A9 CALL R11 1
- 0x0028140B, // 00AA ADD R10 R10 R11
- 0x582C0011, // 00AB LDCONST R11 K17
- 0x7C200600, // 00AC CALL R8 3
- 0x50200000, // 00AD LDBOOL R8 0 0
- 0xA8040001, // 00AE EXBLK 1 1
- 0x80041000, // 00AF RET 1 R8
- 0x8C200B2A, // 00B0 GETMET R8 R5 K42
- 0x7C200200, // 00B1 CALL R8 1
- 0x5C241000, // 00B2 MOVE R9 R8
- 0x74260002, // 00B3 JMPT R9 #00B7
- 0x50240000, // 00B4 LDBOOL R9 0 0
- 0xA8040001, // 00B5 EXBLK 1 1
- 0x80041200, // 00B6 RET 1 R9
- 0x88240B2C, // 00B7 GETMBR R9 R5 K44
- 0x0424132D, // 00B8 SUB R9 R9 K45
- 0x40261209, // 00B9 CONNECT R9 K9 R9
- 0x88280B2B, // 00BA GETMBR R10 R5 K43
- 0x94241409, // 00BB GETIDX R9 R10 R9
- 0x90165609, // 00BC SETMBR R5 K43 R9
- 0x88240B2B, // 00BD GETMBR R9 R5 K43
- 0x40241208, // 00BE CONNECT R9 R9 R8
- 0xB8260200, // 00BF GETNGBL R9 K1
- 0x8C241302, // 00C0 GETMET R9 R9 K2
- 0x8C2C0916, // 00C1 GETMET R11 R4 K22
- 0x5834002E, // 00C2 LDCONST R13 K46
- 0x88380B2C, // 00C3 GETMBR R14 R5 K44
- 0x883C0B2B, // 00C4 GETMBR R15 R5 K43
- 0x8C3C1F04, // 00C5 GETMET R15 R15 K4
- 0x7C3C0200, // 00C6 CALL R15 1
- 0x7C2C0800, // 00C7 CALL R11 4
- 0x58300011, // 00C8 LDCONST R12 K17
- 0x7C240600, // 00C9 CALL R9 3
- 0x8C240B19, // 00CA GETMET R9 R5 K25
- 0x7C240200, // 00CB CALL R9 1
- 0xB8260200, // 00CC GETNGBL R9 K1
- 0x8C241302, // 00CD GETMET R9 R9 K2
- 0x602C0008, // 00CE GETGBL R11 G8
- 0x88300B30, // 00CF GETMBR R12 R5 K48
- 0x7C2C0200, // 00D0 CALL R11 1
- 0x002E5E0B, // 00D1 ADD R11 K47 R11
- 0x002C1731, // 00D2 ADD R11 R11 K49
- 0x60300008, // 00D3 GETGBL R12 G8
- 0x88340B1C, // 00D4 GETMBR R13 R5 K28
- 0x7C300200, // 00D5 CALL R12 1
- 0x002C160C, // 00D6 ADD R11 R11 R12
- 0x002C1732, // 00D7 ADD R11 R11 K50
- 0x60300008, // 00D8 GETGBL R12 G8
- 0x88340B33, // 00D9 GETMBR R13 R5 K51
- 0x7C300200, // 00DA CALL R12 1
- 0x002C160C, // 00DB ADD R11 R11 R12
- 0x58300011, // 00DC LDCONST R12 K17
- 0x7C240600, // 00DD CALL R9 3
- 0x8824010B, // 00DE GETMBR R9 R0 K11
- 0x8C24131A, // 00DF GETMET R9 R9 K26
- 0x882C0B1B, // 00E0 GETMBR R11 R5 K27
- 0x7C240400, // 00E1 CALL R9 2
- 0x88240B30, // 00E2 GETMBR R9 R5 K48
- 0x1C281309, // 00E3 EQ R10 R9 K9
- 0x782A000C, // 00E4 JMPF R10 #00F2
- 0xB82A0200, // 00E5 GETNGBL R10 K1
- 0x8C281502, // 00E6 GETMET R10 R10 K2
- 0xB8320A00, // 00E7 GETNGBL R12 K5
- 0x8C301927, // 00E8 GETMET R12 R12 K39
- 0x5C380A00, // 00E9 MOVE R14 R5
- 0x7C300400, // 00EA CALL R12 2
- 0x0032680C, // 00EB ADD R12 K52 R12
- 0x58340011, // 00EC LDCONST R13 K17
- 0x7C280600, // 00ED CALL R10 3
- 0x50280200, // 00EE LDBOOL R10 1 0
- 0xA8040001, // 00EF EXBLK 1 1
- 0x80041400, // 00F0 RET 1 R10
- 0x70020015, // 00F1 JMP #0108
- 0x1C28132D, // 00F2 EQ R10 R9 K45
- 0x782A0008, // 00F3 JMPF R10 #00FD
- 0x88280135, // 00F4 GETMBR R10 R0 K53
- 0x8C281522, // 00F5 GETMET R10 R10 K34
- 0x5C300A00, // 00F6 MOVE R12 R5
- 0x5C340400, // 00F7 MOVE R13 R2
- 0x5C380600, // 00F8 MOVE R14 R3
- 0x7C280800, // 00F9 CALL R10 4
- 0xA8040001, // 00FA EXBLK 1 1
- 0x80041400, // 00FB RET 1 R10
- 0x7002000A, // 00FC JMP #0108
- 0xB82A0200, // 00FD GETNGBL R10 K1
- 0x8C281502, // 00FE GETMET R10 R10 K2
- 0x60300008, // 00FF GETGBL R12 G8
- 0x5C341200, // 0100 MOVE R13 R9
- 0x7C300200, // 0101 CALL R12 1
- 0x00326C0C, // 0102 ADD R12 K54 R12
- 0x58340011, // 0103 LDCONST R13 K17
- 0x7C280600, // 0104 CALL R10 3
- 0x50280000, // 0105 LDBOOL R10 0 0
- 0xA8040001, // 0106 EXBLK 1 1
- 0x80041400, // 0107 RET 1 R10
- 0x501C0200, // 0108 LDBOOL R7 1 0
- 0xA8040001, // 0109 EXBLK 1 1
- 0x80040E00, // 010A RET 1 R7
- 0xA8040001, // 010B EXBLK 1 1
- 0x70020014, // 010C JMP #0122
- 0xAC140002, // 010D CATCH R5 0 2
- 0x70020011, // 010E JMP #0121
- 0xB81E0200, // 010F GETNGBL R7 K1
- 0x8C1C0F02, // 0110 GETMET R7 R7 K2
- 0x60240008, // 0111 GETGBL R9 G8
- 0x5C280A00, // 0112 MOVE R10 R5
- 0x7C240200, // 0113 CALL R9 1
- 0x00266E09, // 0114 ADD R9 K55 R9
- 0x00241338, // 0115 ADD R9 R9 K56
- 0x60280008, // 0116 GETGBL R10 G8
- 0x5C2C0C00, // 0117 MOVE R11 R6
- 0x7C280200, // 0118 CALL R10 1
- 0x0024120A, // 0119 ADD R9 R9 R10
- 0x7C1C0400, // 011A CALL R7 2
- 0xA41E7200, // 011B IMPORT R7 K57
- 0x8C200F3A, // 011C GETMET R8 R7 K58
- 0x7C200200, // 011D CALL R8 1
- 0x50200000, // 011E LDBOOL R8 0 0
- 0x80041000, // 011F RET 1 R8
- 0x70020000, // 0120 JMP #0122
- 0xB0080000, // 0121 RAISE 2 R0 R0
- 0x80000000, // 0122 RET 0
+ 0x50140000, // 0001 LDBOOL R5 0 0
+ 0xA802011F, // 0002 EXBLK 0 #0123
+ 0xB81A0200, // 0003 GETNGBL R6 K1
+ 0x8C180D02, // 0004 GETMET R6 R6 K2
+ 0x8C200304, // 0005 GETMET R8 R1 K4
+ 0x7C200200, // 0006 CALL R8 1
+ 0x00220608, // 0007 ADD R8 K3 R8
+ 0x54260003, // 0008 LDINT R9 4
+ 0x7C180600, // 0009 CALL R6 3
+ 0xB81A0A00, // 000A GETNGBL R6 K5
+ 0x8C180D06, // 000B GETMET R6 R6 K6
+ 0x5C200000, // 000C MOVE R8 R0
+ 0x5C240200, // 000D MOVE R9 R1
+ 0x5C280400, // 000E MOVE R10 R2
+ 0x5C2C0600, // 000F MOVE R11 R3
+ 0x7C180A00, // 0010 CALL R6 5
+ 0x8C1C0D07, // 0011 GETMET R7 R6 K7
+ 0x7C1C0200, // 0012 CALL R7 1
+ 0x5C200E00, // 0013 MOVE R8 R7
+ 0x74220002, // 0014 JMPT R8 #0018
+ 0x50200000, // 0015 LDBOOL R8 0 0
+ 0xA8040001, // 0016 EXBLK 1 1
+ 0x80041000, // 0017 RET 1 R8
+ 0x88200D08, // 0018 GETMBR R8 R6 K8
+ 0x1C201109, // 0019 EQ R8 R8 K9
+ 0x7822005B, // 001A JMPF R8 #0077
+ 0x88200D0A, // 001B GETMBR R8 R6 K10
+ 0x1C201109, // 001C EQ R8 R8 K9
+ 0x78220058, // 001D JMPF R8 #0077
+ 0x8820010B, // 001E GETMBR R8 R0 K11
+ 0x8820110C, // 001F GETMBR R8 R8 K12
+ 0x8C20110D, // 0020 GETMET R8 R8 K13
+ 0x88280D0E, // 0021 GETMBR R10 R6 K14
+ 0x542E0059, // 0022 LDINT R11 90
+ 0x7C200600, // 0023 CALL R8 3
+ 0xB8260200, // 0024 GETNGBL R9 K1
+ 0x8C241302, // 0025 GETMET R9 R9 K2
+ 0x602C0008, // 0026 GETGBL R11 G8
+ 0x88300D0E, // 0027 GETMBR R12 R6 K14
+ 0x7C2C0200, // 0028 CALL R11 1
+ 0x002E1E0B, // 0029 ADD R11 K15 R11
+ 0x002C1710, // 002A ADD R11 R11 K16
+ 0x60300008, // 002B GETGBL R12 G8
+ 0x88341108, // 002C GETMBR R13 R8 K8
+ 0x7C300200, // 002D CALL R12 1
+ 0x002C160C, // 002E ADD R11 R11 R12
+ 0x58300011, // 002F LDCONST R12 K17
+ 0x7C240600, // 0030 CALL R9 3
+ 0x780A0000, // 0031 JMPF R2 #0033
+ 0x90222402, // 0032 SETMBR R8 K18 R2
+ 0x780E0000, // 0033 JMPF R3 #0035
+ 0x90222603, // 0034 SETMBR R8 K19 R3
+ 0x901A2808, // 0035 SETMBR R6 K20 R8
+ 0x88240115, // 0036 GETMBR R9 R0 K21
+ 0x8C241316, // 0037 GETMET R9 R9 K22
+ 0x882C0D17, // 0038 GETMBR R11 R6 K23
+ 0x50300000, // 0039 LDBOOL R12 0 0
+ 0x7C240600, // 003A CALL R9 3
+ 0x7426000D, // 003B JMPT R9 #004A
+ 0xB8260200, // 003C GETNGBL R9 K1
+ 0x8C241302, // 003D GETMET R9 R9 K2
+ 0x8C2C0918, // 003E GETMET R11 R4 K24
+ 0x58340019, // 003F LDCONST R13 K25
+ 0x88380D17, // 0040 GETMBR R14 R6 K23
+ 0x883C0115, // 0041 GETMBR R15 R0 K21
+ 0x8C3C1F1A, // 0042 GETMET R15 R15 K26
+ 0x7C3C0200, // 0043 CALL R15 1
+ 0x7C2C0800, // 0044 CALL R11 4
+ 0x58300011, // 0045 LDCONST R12 K17
+ 0x7C240600, // 0046 CALL R9 3
+ 0x50240000, // 0047 LDBOOL R9 0 0
+ 0xA8040001, // 0048 EXBLK 1 1
+ 0x80041200, // 0049 RET 1 R9
+ 0x8C240D1B, // 004A GETMET R9 R6 K27
+ 0x7C240200, // 004B CALL R9 1
+ 0x74260002, // 004C JMPT R9 #0050
+ 0x50240000, // 004D LDBOOL R9 0 0
+ 0xA8040001, // 004E EXBLK 1 1
+ 0x80041200, // 004F RET 1 R9
+ 0x8824010B, // 0050 GETMBR R9 R0 K11
+ 0x8C24131C, // 0051 GETMET R9 R9 K28
+ 0x882C0D1D, // 0052 GETMBR R11 R6 K29
+ 0x7C240400, // 0053 CALL R9 2
+ 0x88240D1E, // 0054 GETMBR R9 R6 K30
+ 0x542A000F, // 0055 LDINT R10 16
+ 0x2024120A, // 0056 NE R9 R9 R10
+ 0x78260014, // 0057 JMPF R9 #006D
+ 0xB8260A00, // 0058 GETNGBL R9 K5
+ 0x8C24131F, // 0059 GETMET R9 R9 K31
+ 0x882C0D1E, // 005A GETMBR R11 R6 K30
+ 0x7C240400, // 005B CALL R9 2
+ 0x5C281200, // 005C MOVE R10 R9
+ 0x742A0004, // 005D JMPT R10 #0063
+ 0x8C280918, // 005E GETMET R10 R4 K24
+ 0x58300020, // 005F LDCONST R12 K32
+ 0x88340D1E, // 0060 GETMBR R13 R6 K30
+ 0x7C280600, // 0061 CALL R10 3
+ 0x5C241400, // 0062 MOVE R9 R10
+ 0xB82A0200, // 0063 GETNGBL R10 K1
+ 0x8C281502, // 0064 GETMET R10 R10 K2
+ 0x8C300918, // 0065 GETMET R12 R4 K24
+ 0x58380021, // 0066 LDCONST R14 K33
+ 0x5C3C1200, // 0067 MOVE R15 R9
+ 0x5C400400, // 0068 MOVE R16 R2
+ 0x5C440600, // 0069 MOVE R17 R3
+ 0x7C300A00, // 006A CALL R12 5
+ 0x58340022, // 006B LDCONST R13 K34
+ 0x7C280600, // 006C CALL R10 3
+ 0x88240123, // 006D GETMBR R9 R0 K35
+ 0x8C241324, // 006E GETMET R9 R9 K36
+ 0x5C2C0C00, // 006F MOVE R11 R6
+ 0x5C300400, // 0070 MOVE R12 R2
+ 0x5C340600, // 0071 MOVE R13 R3
+ 0x7C240800, // 0072 CALL R9 4
+ 0x50240200, // 0073 LDBOOL R9 1 0
+ 0xA8040001, // 0074 EXBLK 1 1
+ 0x80041200, // 0075 RET 1 R9
+ 0x700200A7, // 0076 JMP #011F
+ 0xB8220200, // 0077 GETNGBL R8 K1
+ 0x8C201102, // 0078 GETMET R8 R8 K2
+ 0x8C280918, // 0079 GETMET R10 R4 K24
+ 0x58300025, // 007A LDCONST R12 K37
+ 0x88340D08, // 007B GETMBR R13 R6 K8
+ 0x88380D17, // 007C GETMBR R14 R6 K23
+ 0x7C280800, // 007D CALL R10 4
+ 0x582C0011, // 007E LDCONST R11 K17
+ 0x7C200600, // 007F CALL R8 3
+ 0x8820010B, // 0080 GETMBR R8 R0 K11
+ 0x8820110C, // 0081 GETMBR R8 R8 K12
+ 0x8C201126, // 0082 GETMET R8 R8 K38
+ 0x88280D08, // 0083 GETMBR R10 R6 K8
+ 0x7C200400, // 0084 CALL R8 2
+ 0x4C240000, // 0085 LDNIL R9
+ 0x1C241009, // 0086 EQ R9 R8 R9
+ 0x78260013, // 0087 JMPF R9 #009C
+ 0xB8260200, // 0088 GETNGBL R9 K1
+ 0x8C241302, // 0089 GETMET R9 R9 K2
+ 0x602C0008, // 008A GETGBL R11 G8
+ 0x88300D08, // 008B GETMBR R12 R6 K8
+ 0x7C2C0200, // 008C CALL R11 1
+ 0x002E4E0B, // 008D ADD R11 K39 R11
+ 0x58300011, // 008E LDCONST R12 K17
+ 0x7C240600, // 008F CALL R9 3
+ 0xB8260200, // 0090 GETNGBL R9 K1
+ 0x8C241302, // 0091 GETMET R9 R9 K2
+ 0xB82E0A00, // 0092 GETNGBL R11 K5
+ 0x8C2C1729, // 0093 GETMET R11 R11 K41
+ 0x5C340C00, // 0094 MOVE R13 R6
+ 0x7C2C0400, // 0095 CALL R11 2
+ 0x002E500B, // 0096 ADD R11 K40 R11
+ 0x58300011, // 0097 LDCONST R12 K17
+ 0x7C240600, // 0098 CALL R9 3
+ 0x50240000, // 0099 LDBOOL R9 0 0
+ 0xA8040001, // 009A EXBLK 1 1
+ 0x80041200, // 009B RET 1 R9
+ 0x780A0000, // 009C JMPF R2 #009E
+ 0x90222402, // 009D SETMBR R8 K18 R2
+ 0x780E0000, // 009E JMPF R3 #00A0
+ 0x90222603, // 009F SETMBR R8 K19 R3
+ 0x901A2808, // 00A0 SETMBR R6 K20 R8
+ 0x88241115, // 00A1 GETMBR R9 R8 K21
+ 0x8C241316, // 00A2 GETMET R9 R9 K22
+ 0x882C0D17, // 00A3 GETMBR R11 R6 K23
+ 0x50300200, // 00A4 LDBOOL R12 1 0
+ 0x7C240600, // 00A5 CALL R9 3
+ 0x74260011, // 00A6 JMPT R9 #00B9
+ 0xB8260200, // 00A7 GETNGBL R9 K1
+ 0x8C241302, // 00A8 GETMET R9 R9 K2
+ 0x602C0008, // 00A9 GETGBL R11 G8
+ 0x88300D17, // 00AA GETMBR R12 R6 K23
+ 0x7C2C0200, // 00AB CALL R11 1
+ 0x002E540B, // 00AC ADD R11 K42 R11
+ 0x002C172B, // 00AD ADD R11 R11 K43
+ 0x60300008, // 00AE GETGBL R12 G8
+ 0x88341115, // 00AF GETMBR R13 R8 K21
+ 0x8C341B1A, // 00B0 GETMET R13 R13 K26
+ 0x7C340200, // 00B1 CALL R13 1
+ 0x7C300200, // 00B2 CALL R12 1
+ 0x002C160C, // 00B3 ADD R11 R11 R12
+ 0x58300011, // 00B4 LDCONST R12 K17
+ 0x7C240600, // 00B5 CALL R9 3
+ 0x50240000, // 00B6 LDBOOL R9 0 0
+ 0xA8040001, // 00B7 EXBLK 1 1
+ 0x80041200, // 00B8 RET 1 R9
+ 0x8C240D2C, // 00B9 GETMET R9 R6 K44
+ 0x7C240200, // 00BA CALL R9 1
+ 0x5C281200, // 00BB MOVE R10 R9
+ 0x742A0002, // 00BC JMPT R10 #00C0
+ 0x50280000, // 00BD LDBOOL R10 0 0
+ 0xA8040001, // 00BE EXBLK 1 1
+ 0x80041400, // 00BF RET 1 R10
+ 0x88280D2E, // 00C0 GETMBR R10 R6 K46
+ 0x0428152F, // 00C1 SUB R10 R10 K47
+ 0x402A120A, // 00C2 CONNECT R10 K9 R10
+ 0x882C0D2D, // 00C3 GETMBR R11 R6 K45
+ 0x9428160A, // 00C4 GETIDX R10 R11 R10
+ 0x901A5A0A, // 00C5 SETMBR R6 K45 R10
+ 0x88280D2D, // 00C6 GETMBR R10 R6 K45
+ 0x40281409, // 00C7 CONNECT R10 R10 R9
+ 0xB82A0200, // 00C8 GETNGBL R10 K1
+ 0x8C281502, // 00C9 GETMET R10 R10 K2
+ 0x8C300918, // 00CA GETMET R12 R4 K24
+ 0x58380030, // 00CB LDCONST R14 K48
+ 0x883C0D2E, // 00CC GETMBR R15 R6 K46
+ 0x88400D2D, // 00CD GETMBR R16 R6 K45
+ 0x8C402104, // 00CE GETMET R16 R16 K4
+ 0x7C400200, // 00CF CALL R16 1
+ 0x7C300800, // 00D0 CALL R12 4
+ 0x58340011, // 00D1 LDCONST R13 K17
+ 0x7C280600, // 00D2 CALL R10 3
+ 0x8C280D1B, // 00D3 GETMET R10 R6 K27
+ 0x7C280200, // 00D4 CALL R10 1
+ 0xB82A0200, // 00D5 GETNGBL R10 K1
+ 0x8C281502, // 00D6 GETMET R10 R10 K2
+ 0x60300008, // 00D7 GETGBL R12 G8
+ 0x88340D32, // 00D8 GETMBR R13 R6 K50
+ 0x7C300200, // 00D9 CALL R12 1
+ 0x0032620C, // 00DA ADD R12 K49 R12
+ 0x00301933, // 00DB ADD R12 R12 K51
+ 0x60340008, // 00DC GETGBL R13 G8
+ 0x88380D1E, // 00DD GETMBR R14 R6 K30
+ 0x7C340200, // 00DE CALL R13 1
+ 0x0030180D, // 00DF ADD R12 R12 R13
+ 0x00301934, // 00E0 ADD R12 R12 K52
+ 0x60340008, // 00E1 GETGBL R13 G8
+ 0x88380D35, // 00E2 GETMBR R14 R6 K53
+ 0x7C340200, // 00E3 CALL R13 1
+ 0x0030180D, // 00E4 ADD R12 R12 R13
+ 0x58340011, // 00E5 LDCONST R13 K17
+ 0x7C280600, // 00E6 CALL R10 3
+ 0x8828010B, // 00E7 GETMBR R10 R0 K11
+ 0x8C28151C, // 00E8 GETMET R10 R10 K28
+ 0x88300D1D, // 00E9 GETMBR R12 R6 K29
+ 0x7C280400, // 00EA CALL R10 2
+ 0x88280D32, // 00EB GETMBR R10 R6 K50
+ 0x1C2C1509, // 00EC EQ R11 R10 K9
+ 0x782E000A, // 00ED JMPF R11 #00F9
+ 0xB82E0200, // 00EE GETNGBL R11 K1
+ 0x8C2C1702, // 00EF GETMET R11 R11 K2
+ 0xB8360A00, // 00F0 GETNGBL R13 K5
+ 0x8C341B29, // 00F1 GETMET R13 R13 K41
+ 0x5C3C0C00, // 00F2 MOVE R15 R6
+ 0x7C340400, // 00F3 CALL R13 2
+ 0x00366C0D, // 00F4 ADD R13 K54 R13
+ 0x58380011, // 00F5 LDCONST R14 K17
+ 0x7C2C0600, // 00F6 CALL R11 3
+ 0x50140200, // 00F7 LDBOOL R5 1 0
+ 0x70020025, // 00F8 JMP #011F
+ 0x1C2C152F, // 00F9 EQ R11 R10 K47
+ 0x782E001B, // 00FA JMPF R11 #0117
+ 0x882C0137, // 00FB GETMBR R11 R0 K55
+ 0x8C2C1724, // 00FC GETMET R11 R11 K36
+ 0x5C340C00, // 00FD MOVE R13 R6
+ 0x5C380400, // 00FE MOVE R14 R2
+ 0x5C3C0600, // 00FF MOVE R15 R3
+ 0x7C2C0800, // 0100 CALL R11 4
+ 0x5C141600, // 0101 MOVE R5 R11
+ 0x78160004, // 0102 JMPF R5 #0108
+ 0x882C0137, // 0103 GETMBR R11 R0 K55
+ 0x8C2C1738, // 0104 GETMET R11 R11 K56
+ 0x5C340000, // 0105 MOVE R13 R0
+ 0x7C2C0400, // 0106 CALL R11 2
+ 0x7002000D, // 0107 JMP #0116
+ 0x882C0D39, // 0108 GETMBR R11 R6 K57
+ 0x782E000B, // 0109 JMPF R11 #0116
+ 0x8C2C0D3A, // 010A GETMET R11 R6 K58
+ 0x7C2C0200, // 010B CALL R11 1
+ 0x8C30173B, // 010C GETMET R12 R11 K59
+ 0x7C300200, // 010D CALL R12 1
+ 0x8C30173C, // 010E GETMET R12 R11 K60
+ 0x7C300200, // 010F CALL R12 1
+ 0x8C30013D, // 0110 GETMET R12 R0 K61
+ 0x8838172D, // 0111 GETMBR R14 R11 K45
+ 0x883C173E, // 0112 GETMBR R15 R11 K62
+ 0x8840173F, // 0113 GETMBR R16 R11 K63
+ 0x88441717, // 0114 GETMBR R17 R11 K23
+ 0x7C300A00, // 0115 CALL R12 5
+ 0x70020007, // 0116 JMP #011F
+ 0xB82E0200, // 0117 GETNGBL R11 K1
+ 0x8C2C1702, // 0118 GETMET R11 R11 K2
+ 0x60340008, // 0119 GETGBL R13 G8
+ 0x5C381400, // 011A MOVE R14 R10
+ 0x7C340200, // 011B CALL R13 1
+ 0x0036800D, // 011C ADD R13 K64 R13
+ 0x58380011, // 011D LDCONST R14 K17
+ 0x7C2C0600, // 011E CALL R11 3
+ 0xA8040001, // 011F EXBLK 1 1
+ 0x80040A00, // 0120 RET 1 R5
+ 0xA8040001, // 0121 EXBLK 1 1
+ 0x70020014, // 0122 JMP #0138
+ 0xAC180002, // 0123 CATCH R6 0 2
+ 0x70020011, // 0124 JMP #0137
+ 0xB8220200, // 0125 GETNGBL R8 K1
+ 0x8C201102, // 0126 GETMET R8 R8 K2
+ 0x60280008, // 0127 GETGBL R10 G8
+ 0x5C2C0C00, // 0128 MOVE R11 R6
+ 0x7C280200, // 0129 CALL R10 1
+ 0x002A820A, // 012A ADD R10 K65 R10
+ 0x00281542, // 012B ADD R10 R10 K66
+ 0x602C0008, // 012C GETGBL R11 G8
+ 0x5C300E00, // 012D MOVE R12 R7
+ 0x7C2C0200, // 012E CALL R11 1
+ 0x0028140B, // 012F ADD R10 R10 R11
+ 0x7C200400, // 0130 CALL R8 2
+ 0xA4228600, // 0131 IMPORT R8 K67
+ 0x8C241144, // 0132 GETMET R9 R8 K68
+ 0x7C240200, // 0133 CALL R9 1
+ 0x50240000, // 0134 LDBOOL R9 0 0
+ 0x80041200, // 0135 RET 1 R9
+ 0x70020000, // 0136 JMP #0138
+ 0xB0080000, // 0137 RAISE 2 R0 R0
+ 0x80000000, // 0138 RET 0
})
)
);
@@ -476,7 +508,7 @@ be_local_closure(Matter_MessageHandler_add_session, /* name */
********************************************************************/
be_local_closure(Matter_MessageHandler_init, /* name */
be_nested_proto(
- 6, /* nstack */
+ 5, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -496,7 +528,7 @@ be_local_closure(Matter_MessageHandler_init, /* name */
}),
be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
+ ( &(const binstruction[16]) { /* code */
0x90020001, // 0000 SETMBR R0 K0 R1
0xB80A0400, // 0001 GETNGBL R2 K2
0x8C080503, // 0002 GETMET R2 R2 K3
@@ -505,15 +537,14 @@ be_local_closure(Matter_MessageHandler_init, /* name */
0x90020202, // 0005 SETMBR R0 K1 R2
0xB80A0400, // 0006 GETNGBL R2 K2
0x8C080505, // 0007 GETMET R2 R2 K5
- 0x5C100000, // 0008 MOVE R4 R0
- 0x5C140200, // 0009 MOVE R5 R1
- 0x7C080600, // 000A CALL R2 3
- 0x90020802, // 000B SETMBR R0 K4 R2
- 0xB80A0400, // 000C GETNGBL R2 K2
- 0x8C080507, // 000D GETMET R2 R2 K7
- 0x7C080200, // 000E CALL R2 1
- 0x90020C02, // 000F SETMBR R0 K6 R2
- 0x80000000, // 0010 RET 0
+ 0x5C100200, // 0008 MOVE R4 R1
+ 0x7C080400, // 0009 CALL R2 2
+ 0x90020802, // 000A SETMBR R0 K4 R2
+ 0xB80A0400, // 000B GETNGBL R2 K2
+ 0x8C080507, // 000C GETMET R2 R2 K7
+ 0x7C080200, // 000D CALL R2 1
+ 0x90020C02, // 000E SETMBR R0 K6 R2
+ 0x80000000, // 000F RET 0
})
)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h
index 8091439a8..93432fe41 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h
@@ -321,8 +321,8 @@ be_local_closure(Matter_Plugin_get_endpoints, /* name */
********************************************************************/
be_local_closure(Matter_Plugin_write_attribute, /* name */
be_nested_proto(
- 6, /* nstack */
- 5, /* argc */
+ 5, /* nstack */
+ 4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -333,8 +333,8 @@ be_local_closure(Matter_Plugin_write_attribute, /* name */
be_str_weak(write_attribute),
&be_const_str_solidified,
( &(const binstruction[ 2]) { /* code */
- 0x4C140000, // 0000 LDNIL R5
- 0x80040A00, // 0001 RET 1 R5
+ 0x4C100000, // 0000 LDNIL R4
+ 0x80040800, // 0001 RET 1 R4
})
)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
new file mode 100644
index 000000000..a21dbe805
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
@@ -0,0 +1,389 @@
+/* Solidification of Matter_Plugin_OnOff.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Plugin_OnOff;
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_invoke_request, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 4, /* 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(matter),
+ /* K1 */ be_nested_str_weak(TLV),
+ /* K2 */ be_nested_str_weak(cluster),
+ /* K3 */ be_nested_str_weak(command),
+ /* K4 */ be_nested_str_weak(session),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_const_int(1),
+ /* K8 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K9 */ be_nested_str_weak(add_TLV),
+ /* K10 */ be_nested_str_weak(U2),
+ /* K11 */ be_nested_str_weak(onoff),
+ /* K12 */ be_const_int(2),
+ }),
+ be_str_weak(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[69]) { /* code */
+ 0xB8120000, // 0000 GETNGBL R4 K0
+ 0x88100901, // 0001 GETMBR R4 R4 K1
+ 0x88140702, // 0002 GETMBR R5 R3 K2
+ 0x88180703, // 0003 GETMBR R6 R3 K3
+ 0x881C0304, // 0004 GETMBR R7 R1 K4
+ 0x1C200B05, // 0005 EQ R8 R5 K5
+ 0x78220016, // 0006 JMPF R8 #001E
+ 0x1C200D06, // 0007 EQ R8 R6 K6
+ 0x78220002, // 0008 JMPF R8 #000C
+ 0x50200200, // 0009 LDBOOL R8 1 0
+ 0x80041000, // 000A RET 1 R8
+ 0x70020010, // 000B JMP #001D
+ 0x1C200D07, // 000C EQ R8 R6 K7
+ 0x78220009, // 000D JMPF R8 #0018
+ 0x8C200908, // 000E GETMET R8 R4 K8
+ 0x7C200200, // 000F CALL R8 1
+ 0x8C241109, // 0010 GETMET R9 R8 K9
+ 0x582C0006, // 0011 LDCONST R11 K6
+ 0x8830090A, // 0012 GETMBR R12 R4 K10
+ 0x58340006, // 0013 LDCONST R13 K6
+ 0x7C240800, // 0014 CALL R9 4
+ 0x900E0706, // 0015 SETMBR R3 K3 K6
+ 0x80041000, // 0016 RET 1 R8
+ 0x70020004, // 0017 JMP #001D
+ 0x5422003F, // 0018 LDINT R8 64
+ 0x1C200C08, // 0019 EQ R8 R6 R8
+ 0x78220001, // 001A JMPF R8 #001D
+ 0x50200200, // 001B LDBOOL R8 1 0
+ 0x80041000, // 001C RET 1 R8
+ 0x70020025, // 001D JMP #0044
+ 0x54220003, // 001E LDINT R8 4
+ 0x1C200A08, // 001F EQ R8 R5 R8
+ 0x78220002, // 0020 JMPF R8 #0024
+ 0x50200200, // 0021 LDBOOL R8 1 0
+ 0x80041000, // 0022 RET 1 R8
+ 0x7002001F, // 0023 JMP #0044
+ 0x54220004, // 0024 LDINT R8 5
+ 0x1C200A08, // 0025 EQ R8 R5 R8
+ 0x78220002, // 0026 JMPF R8 #002A
+ 0x50200200, // 0027 LDBOOL R8 1 0
+ 0x80041000, // 0028 RET 1 R8
+ 0x70020019, // 0029 JMP #0044
+ 0x54220005, // 002A LDINT R8 6
+ 0x1C200A08, // 002B EQ R8 R5 R8
+ 0x78220016, // 002C JMPF R8 #0044
+ 0x1C200D06, // 002D EQ R8 R6 K6
+ 0x78220004, // 002E JMPF R8 #0034
+ 0x50200000, // 002F LDBOOL R8 0 0
+ 0x90021608, // 0030 SETMBR R0 K11 R8
+ 0x50200200, // 0031 LDBOOL R8 1 0
+ 0x80041000, // 0032 RET 1 R8
+ 0x7002000F, // 0033 JMP #0044
+ 0x1C200D07, // 0034 EQ R8 R6 K7
+ 0x78220004, // 0035 JMPF R8 #003B
+ 0x50200200, // 0036 LDBOOL R8 1 0
+ 0x90021608, // 0037 SETMBR R0 K11 R8
+ 0x50200200, // 0038 LDBOOL R8 1 0
+ 0x80041000, // 0039 RET 1 R8
+ 0x70020008, // 003A JMP #0044
+ 0x1C200D0C, // 003B EQ R8 R6 K12
+ 0x78220006, // 003C JMPF R8 #0044
+ 0x8820010B, // 003D GETMBR R8 R0 K11
+ 0x78220000, // 003E JMPF R8 #0040
+ 0x50200001, // 003F LDBOOL R8 0 1
+ 0x50200200, // 0040 LDBOOL R8 1 0
+ 0x90021608, // 0041 SETMBR R0 K11 R8
+ 0x50200200, // 0042 LDBOOL R8 1 0
+ 0x80041000, // 0043 RET 1 R8
+ 0x80000000, // 0044 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(endpoints),
+ /* K2 */ be_nested_str_weak(ENDPOINTS),
+ /* K3 */ be_nested_str_weak(clusters),
+ /* K4 */ be_nested_str_weak(CLUSTERS),
+ /* K5 */ be_nested_str_weak(onoff),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080500, // 0003 GETMET R2 R2 K0
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x88080102, // 0006 GETMBR R2 R0 K2
+ 0x90020202, // 0007 SETMBR R0 K1 R2
+ 0x88080104, // 0008 GETMBR R2 R0 K4
+ 0x90020602, // 0009 SETMBR R0 K3 R2
+ 0x50080000, // 000A LDBOOL R2 0 0
+ 0x90020A02, // 000B SETMBR R0 K5 R2
+ 0x80000000, // 000C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: read_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
+ be_nested_proto(
+ 16, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[21]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(Matter_TLV_array),
+ /* K7 */ be_nested_str_weak(TYPES),
+ /* K8 */ be_nested_str_weak(add_struct),
+ /* K9 */ be_nested_str_weak(add_TLV),
+ /* K10 */ be_nested_str_weak(U2),
+ /* K11 */ be_const_int(1),
+ /* K12 */ be_nested_str_weak(stop_iteration),
+ /* K13 */ be_nested_str_weak(get_cluster_list),
+ /* K14 */ be_nested_str_weak(U4),
+ /* K15 */ be_const_int(2),
+ /* K16 */ be_const_int(3),
+ /* K17 */ be_nested_str_weak(create_TLV),
+ /* K18 */ be_nested_str_weak(U1),
+ /* K19 */ be_nested_str_weak(BOOL),
+ /* K20 */ be_nested_str_weak(onoff),
+ }),
+ be_str_weak(read_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[113]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x88180504, // 0004 GETMBR R6 R2 K4
+ 0x541E001C, // 0005 LDINT R7 29
+ 0x1C1C0A07, // 0006 EQ R7 R5 R7
+ 0x781E0042, // 0007 JMPF R7 #004B
+ 0x1C1C0D05, // 0008 EQ R7 R6 K5
+ 0x781E0019, // 0009 JMPF R7 #0024
+ 0x8C1C0906, // 000A GETMET R7 R4 K6
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x60200010, // 000C GETGBL R8 G16
+ 0x88240107, // 000D GETMBR R9 R0 K7
+ 0x7C200200, // 000E CALL R8 1
+ 0xA802000E, // 000F EXBLK 0 #001F
+ 0x5C241000, // 0010 MOVE R9 R8
+ 0x7C240000, // 0011 CALL R9 0
+ 0x8C280F08, // 0012 GETMET R10 R7 K8
+ 0x7C280200, // 0013 CALL R10 1
+ 0x8C2C1509, // 0014 GETMET R11 R10 K9
+ 0x58340005, // 0015 LDCONST R13 K5
+ 0x8838090A, // 0016 GETMBR R14 R4 K10
+ 0x5C3C1200, // 0017 MOVE R15 R9
+ 0x7C2C0800, // 0018 CALL R11 4
+ 0x8C2C1509, // 0019 GETMET R11 R10 K9
+ 0x5834000B, // 001A LDCONST R13 K11
+ 0x8838090A, // 001B GETMBR R14 R4 K10
+ 0x583C000B, // 001C LDCONST R15 K11
+ 0x7C2C0800, // 001D CALL R11 4
+ 0x7001FFF0, // 001E JMP #0010
+ 0x5820000C, // 001F LDCONST R8 K12
+ 0xAC200200, // 0020 CATCH R8 1 0
+ 0xB0080000, // 0021 RAISE 2 R0 R0
+ 0x80040E00, // 0022 RET 1 R7
+ 0x70020025, // 0023 JMP #004A
+ 0x1C1C0D0B, // 0024 EQ R7 R6 K11
+ 0x781E0013, // 0025 JMPF R7 #003A
+ 0x8C1C0906, // 0026 GETMET R7 R4 K6
+ 0x7C1C0200, // 0027 CALL R7 1
+ 0x60200010, // 0028 GETGBL R8 G16
+ 0x8C24010D, // 0029 GETMET R9 R0 K13
+ 0x7C240200, // 002A CALL R9 1
+ 0x7C200200, // 002B CALL R8 1
+ 0xA8020007, // 002C EXBLK 0 #0035
+ 0x5C241000, // 002D MOVE R9 R8
+ 0x7C240000, // 002E CALL R9 0
+ 0x8C280F09, // 002F GETMET R10 R7 K9
+ 0x4C300000, // 0030 LDNIL R12
+ 0x8834090E, // 0031 GETMBR R13 R4 K14
+ 0x5C381200, // 0032 MOVE R14 R9
+ 0x7C280800, // 0033 CALL R10 4
+ 0x7001FFF7, // 0034 JMP #002D
+ 0x5820000C, // 0035 LDCONST R8 K12
+ 0xAC200200, // 0036 CATCH R8 1 0
+ 0xB0080000, // 0037 RAISE 2 R0 R0
+ 0x80040E00, // 0038 RET 1 R7
+ 0x7002000F, // 0039 JMP #004A
+ 0x1C1C0D0F, // 003A EQ R7 R6 K15
+ 0x781E0008, // 003B JMPF R7 #0045
+ 0x8C1C0906, // 003C GETMET R7 R4 K6
+ 0x7C1C0200, // 003D CALL R7 1
+ 0x8C200F09, // 003E GETMET R8 R7 K9
+ 0x4C280000, // 003F LDNIL R10
+ 0x882C090A, // 0040 GETMBR R11 R4 K10
+ 0x54320005, // 0041 LDINT R12 6
+ 0x7C200800, // 0042 CALL R8 4
+ 0x80040E00, // 0043 RET 1 R7
+ 0x70020004, // 0044 JMP #004A
+ 0x1C1C0D10, // 0045 EQ R7 R6 K16
+ 0x781E0002, // 0046 JMPF R7 #004A
+ 0x8C1C0906, // 0047 GETMET R7 R4 K6
+ 0x7C1C0200, // 0048 CALL R7 1
+ 0x80040E00, // 0049 RET 1 R7
+ 0x70020024, // 004A JMP #0070
+ 0x1C1C0B10, // 004B EQ R7 R5 K16
+ 0x781E000F, // 004C JMPF R7 #005D
+ 0x1C1C0D05, // 004D EQ R7 R6 K5
+ 0x781E0005, // 004E JMPF R7 #0055
+ 0x8C1C0911, // 004F GETMET R7 R4 K17
+ 0x8824090A, // 0050 GETMBR R9 R4 K10
+ 0x58280005, // 0051 LDCONST R10 K5
+ 0x7C1C0600, // 0052 CALL R7 3
+ 0x80040E00, // 0053 RET 1 R7
+ 0x70020006, // 0054 JMP #005C
+ 0x1C1C0D0B, // 0055 EQ R7 R6 K11
+ 0x781E0004, // 0056 JMPF R7 #005C
+ 0x8C1C0911, // 0057 GETMET R7 R4 K17
+ 0x88240912, // 0058 GETMBR R9 R4 K18
+ 0x58280005, // 0059 LDCONST R10 K5
+ 0x7C1C0600, // 005A CALL R7 3
+ 0x80040E00, // 005B RET 1 R7
+ 0x70020012, // 005C JMP #0070
+ 0x541E0005, // 005D LDINT R7 6
+ 0x1C1C0A07, // 005E EQ R7 R5 R7
+ 0x781E000F, // 005F JMPF R7 #0070
+ 0x1C1C0D05, // 0060 EQ R7 R6 K5
+ 0x781E0005, // 0061 JMPF R7 #0068
+ 0x8C1C0911, // 0062 GETMET R7 R4 K17
+ 0x88240913, // 0063 GETMBR R9 R4 K19
+ 0x88280114, // 0064 GETMBR R10 R0 K20
+ 0x7C1C0600, // 0065 CALL R7 3
+ 0x80040E00, // 0066 RET 1 R7
+ 0x70020007, // 0067 JMP #0070
+ 0x541EFFFB, // 0068 LDINT R7 65532
+ 0x1C1C0C07, // 0069 EQ R7 R6 R7
+ 0x781E0004, // 006A JMPF R7 #0070
+ 0x8C1C0911, // 006B GETMET R7 R4 K17
+ 0x8824090E, // 006C GETMBR R9 R4 K14
+ 0x58280005, // 006D LDCONST R10 K5
+ 0x7C1C0600, // 006E CALL R7 3
+ 0x80040E00, // 006F RET 1 R7
+ 0x80000000, // 0070 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Plugin_OnOff
+********************************************************************/
+extern const bclass be_class_Matter_Plugin;
+be_local_class(Matter_Plugin_OnOff,
+ 1,
+ &be_class_Matter_Plugin,
+ be_nested_map(7,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(invoke_request, 1), be_const_closure(Matter_Plugin_OnOff_invoke_request_closure) },
+ { be_const_key_weak(read_attribute, 4), be_const_closure(Matter_Plugin_OnOff_read_attribute_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_OnOff_init_closure) },
+ { be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(1,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(256),
+ })) ) } )) },
+ { be_const_key_weak(CLUSTERS, 6), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(5,
+ ( (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(6,
+ ( (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_key_int(6, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(2,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(65532),
+ })) ) } )) },
+ { be_const_key_int(29, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(4,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(3),
+ })) ) } )) },
+ { be_const_key_int(3, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(2,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ })) ) } )) },
+ { be_const_key_int(4, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(1,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ })) ) } )) },
+ })) ) } )) },
+ { be_const_key_weak(onoff, 2), be_const_var(0) },
+ { be_const_key_weak(ENDPOINTS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(1,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(1),
+ })) ) } )) },
+ })),
+ be_str_weak(Matter_Plugin_OnOff)
+);
+/*******************************************************************/
+
+void be_load_Matter_Plugin_OnOff_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Plugin_OnOff);
+ be_setglobal(vm, "Matter_Plugin_OnOff");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Relay.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Relay.h
deleted file mode 100644
index 8a68d6822..000000000
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Relay.h
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Solidification of Matter_Plugin_Relay.h */
-/********************************************************************\
-* Generated code, don't edit *
-\********************************************************************/
-#include "be_constobj.h"
-
-extern const bclass be_class_Matter_Plugin_Relay;
-
-/********************************************************************
-** Solidified function: read_attribute
-********************************************************************/
-be_local_closure(Matter_Plugin_Relay_read_attribute, /* name */
- be_nested_proto(
- 15, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[17]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TLV),
- /* K3 */ be_nested_str_weak(cluster),
- /* K4 */ be_nested_str_weak(attribute),
- /* K5 */ be_const_int(0),
- /* K6 */ be_nested_str_weak(Matter_TLV_array),
- /* K7 */ be_nested_str_weak(add_struct),
- /* K8 */ be_nested_str_weak(add_TLV),
- /* K9 */ be_nested_str_weak(U2),
- /* K10 */ be_nested_str_weak(TYPES),
- /* K11 */ be_const_int(1),
- /* K12 */ be_nested_str_weak(get_cluster_list),
- /* K13 */ be_nested_str_weak(U4),
- /* K14 */ be_nested_str_weak(stop_iteration),
- /* K15 */ be_const_int(2),
- /* K16 */ be_const_int(3),
- }),
- be_str_weak(read_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[66]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x88100902, // 0002 GETMBR R4 R4 K2
- 0x88140503, // 0003 GETMBR R5 R2 K3
- 0x88180504, // 0004 GETMBR R6 R2 K4
- 0x541E001C, // 0005 LDINT R7 29
- 0x1C1C0A07, // 0006 EQ R7 R5 R7
- 0x781E0038, // 0007 JMPF R7 #0041
- 0x1C1C0D05, // 0008 EQ R7 R6 K5
- 0x781E0010, // 0009 JMPF R7 #001B
- 0x8C1C0906, // 000A GETMET R7 R4 K6
- 0x7C1C0200, // 000B CALL R7 1
- 0x8C200F07, // 000C GETMET R8 R7 K7
- 0x7C200200, // 000D CALL R8 1
- 0x8C241108, // 000E GETMET R9 R8 K8
- 0x582C0005, // 000F LDCONST R11 K5
- 0x88300909, // 0010 GETMBR R12 R4 K9
- 0x8834010A, // 0011 GETMBR R13 R0 K10
- 0x94341B05, // 0012 GETIDX R13 R13 K5
- 0x7C240800, // 0013 CALL R9 4
- 0x8C241108, // 0014 GETMET R9 R8 K8
- 0x582C000B, // 0015 LDCONST R11 K11
- 0x88300909, // 0016 GETMBR R12 R4 K9
- 0x5834000B, // 0017 LDCONST R13 K11
- 0x7C240800, // 0018 CALL R9 4
- 0x80040E00, // 0019 RET 1 R7
- 0x70020025, // 001A JMP #0041
- 0x1C1C0D0B, // 001B EQ R7 R6 K11
- 0x781E0013, // 001C JMPF R7 #0031
- 0x8C1C0906, // 001D GETMET R7 R4 K6
- 0x7C1C0200, // 001E CALL R7 1
- 0x60200010, // 001F GETGBL R8 G16
- 0x8C24010C, // 0020 GETMET R9 R0 K12
- 0x7C240200, // 0021 CALL R9 1
- 0x7C200200, // 0022 CALL R8 1
- 0xA8020007, // 0023 EXBLK 0 #002C
- 0x5C241000, // 0024 MOVE R9 R8
- 0x7C240000, // 0025 CALL R9 0
- 0x8C280F08, // 0026 GETMET R10 R7 K8
- 0x4C300000, // 0027 LDNIL R12
- 0x8834090D, // 0028 GETMBR R13 R4 K13
- 0x5C381200, // 0029 MOVE R14 R9
- 0x7C280800, // 002A CALL R10 4
- 0x7001FFF7, // 002B JMP #0024
- 0x5820000E, // 002C LDCONST R8 K14
- 0xAC200200, // 002D CATCH R8 1 0
- 0xB0080000, // 002E RAISE 2 R0 R0
- 0x80040E00, // 002F RET 1 R7
- 0x7002000F, // 0030 JMP #0041
- 0x1C1C0D0F, // 0031 EQ R7 R6 K15
- 0x781E0008, // 0032 JMPF R7 #003C
- 0x8C1C0906, // 0033 GETMET R7 R4 K6
- 0x7C1C0200, // 0034 CALL R7 1
- 0x8C200F08, // 0035 GETMET R8 R7 K8
- 0x4C280000, // 0036 LDNIL R10
- 0x882C0909, // 0037 GETMBR R11 R4 K9
- 0x54320005, // 0038 LDINT R12 6
- 0x7C200800, // 0039 CALL R8 4
- 0x80040E00, // 003A RET 1 R7
- 0x70020004, // 003B JMP #0041
- 0x1C1C0D10, // 003C EQ R7 R6 K16
- 0x781E0002, // 003D JMPF R7 #0041
- 0x8C1C0906, // 003E GETMET R7 R4 K6
- 0x7C1C0200, // 003F CALL R7 1
- 0x80040E00, // 0040 RET 1 R7
- 0x80000000, // 0041 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_Plugin_Relay_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* 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(init),
- /* K1 */ be_nested_str_weak(endpoints),
- /* K2 */ be_nested_str_weak(ENDPOINTS),
- /* K3 */ be_nested_str_weak(clusters),
- /* K4 */ be_nested_str_weak(CLUSTERS),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080500, // 0003 GETMET R2 R2 K0
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x88080102, // 0006 GETMBR R2 R0 K2
- 0x90020202, // 0007 SETMBR R0 K1 R2
- 0x88080104, // 0008 GETMBR R2 R0 K4
- 0x90020602, // 0009 SETMBR R0 K3 R2
- 0x80000000, // 000A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: invoke_request
-********************************************************************/
-be_local_closure(Matter_Plugin_Relay_invoke_request, /* name */
- be_nested_proto(
- 4, /* nstack */
- 4, /* 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(invoke_request),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: Matter_Plugin_Relay
-********************************************************************/
-extern const bclass be_class_Matter_Plugin;
-be_local_class(Matter_Plugin_Relay,
- 0,
- &be_class_Matter_Plugin,
- be_nested_map(6,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_Relay_read_attribute_closure) },
- { be_const_key_weak(ENDPOINTS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(1),
- })) ) } )) },
- { be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(256),
- })) ) } )) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Relay_init_closure) },
- { 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(6, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- })) ) } )) },
- { be_const_key_int(29, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(4,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
- be_const_int(3),
- })) ) } )) },
- { be_const_key_int(8, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(3, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(5, 1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- })) ) } )) },
- { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_Relay_invoke_request_closure) },
- })),
- be_str_weak(Matter_Plugin_Relay)
-);
-/*******************************************************************/
-
-void be_load_Matter_Plugin_Relay_class(bvm *vm) {
- be_pushntvclass(vm, &be_class_Matter_Plugin_Relay);
- be_setglobal(vm, "Matter_Plugin_Relay");
- be_pop(vm, 1);
-}
-/********************************************************************/
-/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_core.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
similarity index 76%
rename from lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_core.h
rename to lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
index 10592a17a..ddf921c29 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_core.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
@@ -1,15 +1,1106 @@
-/* Solidification of Matter_Plugin_core.h */
+/* Solidification of Matter_Plugin_Root.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
-extern const bclass be_class_Matter_Plugin_core;
+extern const bclass be_class_Matter_Plugin_Root;
+
+/********************************************************************
+** Solidified function: read_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
+ be_nested_proto(
+ 24, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[82]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(create_TLV),
+ /* K7 */ be_nested_str_weak(U8),
+ /* K8 */ be_nested_str_weak(session),
+ /* K9 */ be_nested_str_weak(__breadcrumb),
+ /* K10 */ be_const_int(1),
+ /* K11 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K12 */ be_nested_str_weak(add_TLV),
+ /* K13 */ be_nested_str_weak(U2),
+ /* K14 */ be_const_int(2),
+ /* K15 */ be_nested_str_weak(U1),
+ /* K16 */ be_const_int(3),
+ /* K17 */ be_nested_str_weak(BOOL),
+ /* K18 */ be_nested_str_weak(Matter_TLV_array),
+ /* K19 */ be_nested_str_weak(tasmota),
+ /* K20 */ be_nested_str_weak(eth),
+ /* K21 */ be_nested_str_weak(up),
+ /* K22 */ be_nested_str_weak(add_struct),
+ /* K23 */ be_nested_str_weak(UTF1),
+ /* K24 */ be_nested_str_weak(ethernet),
+ /* K25 */ be_nested_str_weak(NULL),
+ /* K26 */ be_nested_str_weak(fromhex),
+ /* K27 */ be_nested_str_weak(replace),
+ /* K28 */ be_nested_str_weak(find),
+ /* K29 */ be_nested_str_weak(mac),
+ /* K30 */ be_nested_str_weak(),
+ /* K31 */ be_nested_str_weak(_X3A),
+ /* K32 */ be_nested_str_weak(B1),
+ /* K33 */ be_nested_str_weak(add_array),
+ /* K34 */ be_nested_str_weak(get_ip_bytes),
+ /* K35 */ be_nested_str_weak(ip),
+ /* K36 */ be_nested_str_weak(ip6local),
+ /* K37 */ be_nested_str_weak(ip6),
+ /* K38 */ be_nested_str_weak(wifi),
+ /* K39 */ be_nested_str_weak(cmd),
+ /* K40 */ be_nested_str_weak(Status_X201),
+ /* K41 */ be_nested_str_weak(StatusPRM),
+ /* K42 */ be_nested_str_weak(BootCount),
+ /* K43 */ be_nested_str_weak(U4),
+ /* K44 */ be_nested_str_weak(Status_X2011),
+ /* K45 */ be_nested_str_weak(StatusSTS),
+ /* K46 */ be_nested_str_weak(UptimeSec),
+ /* K47 */ be_nested_str_weak(int64),
+ /* K48 */ be_nested_str_weak(rtc),
+ /* K49 */ be_nested_str_weak(utc),
+ /* K50 */ be_const_int(1000000),
+ /* K51 */ be_nested_str_weak(local),
+ /* K52 */ be_nested_str_weak(device),
+ /* K53 */ be_nested_str_weak(sessions),
+ /* K54 */ be_nested_str_weak(sessions_active),
+ /* K55 */ be_nested_str_weak(B2),
+ /* K56 */ be_nested_str_weak(noc),
+ /* K57 */ be_nested_str_weak(icac),
+ /* K58 */ be_nested_str_weak(stop_iteration),
+ /* K59 */ be_nested_str_weak(parse),
+ /* K60 */ be_nested_str_weak(get_ca),
+ /* K61 */ be_nested_str_weak(findsubval),
+ /* K62 */ be_nested_str_weak(admin_vendor),
+ /* K63 */ be_nested_str_weak(fabric),
+ /* K64 */ be_nested_str_weak(deviceid),
+ /* K65 */ be_nested_str_weak(fabric_label),
+ /* K66 */ be_nested_str_weak(Tasmota),
+ /* K67 */ be_nested_str_weak(vendorid),
+ /* K68 */ be_nested_str_weak(DeviceName),
+ /* K69 */ be_nested_str_weak(FriendlyName),
+ /* K70 */ be_nested_str_weak(FriendlyName1),
+ /* K71 */ be_nested_str_weak(XX),
+ /* K72 */ be_nested_str_weak(Status_X202),
+ /* K73 */ be_nested_str_weak(StatusFWR),
+ /* K74 */ be_nested_str_weak(Hardware),
+ /* K75 */ be_nested_str_weak(Version),
+ /* K76 */ be_nested_str_weak(locale),
+ /* K77 */ be_nested_str_weak(TYPES),
+ /* K78 */ be_nested_str_weak(get_cluster_list),
+ /* K79 */ be_nested_str_weak(get_active_endpoints),
+ /* K80 */ be_nested_str_weak(status),
+ /* K81 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
+ }),
+ be_str_weak(read_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[809]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x88180504, // 0004 GETMBR R6 R2 K4
+ 0x541E002F, // 0005 LDINT R7 48
+ 0x1C1C0A07, // 0006 EQ R7 R5 R7
+ 0x781E0031, // 0007 JMPF R7 #003A
+ 0x1C1C0D05, // 0008 EQ R7 R6 K5
+ 0x781E0006, // 0009 JMPF R7 #0011
+ 0x8C1C0906, // 000A GETMET R7 R4 K6
+ 0x88240907, // 000B GETMBR R9 R4 K7
+ 0x88280308, // 000C GETMBR R10 R1 K8
+ 0x88281509, // 000D GETMBR R10 R10 K9
+ 0x7C1C0600, // 000E CALL R7 3
+ 0x80040E00, // 000F RET 1 R7
+ 0x70020027, // 0010 JMP #0039
+ 0x1C1C0D0A, // 0011 EQ R7 R6 K10
+ 0x781E000D, // 0012 JMPF R7 #0021
+ 0x8C1C090B, // 0013 GETMET R7 R4 K11
+ 0x7C1C0200, // 0014 CALL R7 1
+ 0x8C200F0C, // 0015 GETMET R8 R7 K12
+ 0x58280005, // 0016 LDCONST R10 K5
+ 0x882C090D, // 0017 GETMBR R11 R4 K13
+ 0x5432003B, // 0018 LDINT R12 60
+ 0x7C200800, // 0019 CALL R8 4
+ 0x8C200F0C, // 001A GETMET R8 R7 K12
+ 0x5828000A, // 001B LDCONST R10 K10
+ 0x882C090D, // 001C GETMBR R11 R4 K13
+ 0x54320383, // 001D LDINT R12 900
+ 0x7C200800, // 001E CALL R8 4
+ 0x80040E00, // 001F RET 1 R7
+ 0x70020017, // 0020 JMP #0039
+ 0x1C1C0D0E, // 0021 EQ R7 R6 K14
+ 0x781E0005, // 0022 JMPF R7 #0029
+ 0x8C1C0906, // 0023 GETMET R7 R4 K6
+ 0x8824090F, // 0024 GETMBR R9 R4 K15
+ 0x5828000E, // 0025 LDCONST R10 K14
+ 0x7C1C0600, // 0026 CALL R7 3
+ 0x80040E00, // 0027 RET 1 R7
+ 0x7002000F, // 0028 JMP #0039
+ 0x1C1C0D10, // 0029 EQ R7 R6 K16
+ 0x781E0005, // 002A JMPF R7 #0031
+ 0x8C1C0906, // 002B GETMET R7 R4 K6
+ 0x8824090F, // 002C GETMBR R9 R4 K15
+ 0x5828000E, // 002D LDCONST R10 K14
+ 0x7C1C0600, // 002E CALL R7 3
+ 0x80040E00, // 002F RET 1 R7
+ 0x70020007, // 0030 JMP #0039
+ 0x541E0003, // 0031 LDINT R7 4
+ 0x1C1C0C07, // 0032 EQ R7 R6 R7
+ 0x781E0004, // 0033 JMPF R7 #0039
+ 0x8C1C0906, // 0034 GETMET R7 R4 K6
+ 0x88240911, // 0035 GETMBR R9 R4 K17
+ 0x50280000, // 0036 LDBOOL R10 0 0
+ 0x7C1C0600, // 0037 CALL R7 3
+ 0x80040E00, // 0038 RET 1 R7
+ 0x700202ED, // 0039 JMP #0328
+ 0x541E0031, // 003A LDINT R7 50
+ 0x1C1C0A07, // 003B EQ R7 R5 R7
+ 0x781E0000, // 003C JMPF R7 #003E
+ 0x700202E9, // 003D JMP #0328
+ 0x541E0032, // 003E LDINT R7 51
+ 0x1C1C0A07, // 003F EQ R7 R5 R7
+ 0x781E00DA, // 0040 JMPF R7 #011C
+ 0x1C1C0D05, // 0041 EQ R7 R6 K5
+ 0x781E00B5, // 0042 JMPF R7 #00F9
+ 0x8C1C0912, // 0043 GETMET R7 R4 K18
+ 0x7C1C0200, // 0044 CALL R7 1
+ 0xB8222600, // 0045 GETNGBL R8 K19
+ 0x8C201114, // 0046 GETMET R8 R8 K20
+ 0x7C200200, // 0047 CALL R8 1
+ 0x94241115, // 0048 GETIDX R9 R8 K21
+ 0x78260053, // 0049 JMPF R9 #009E
+ 0x8C240F16, // 004A GETMET R9 R7 K22
+ 0x4C2C0000, // 004B LDNIL R11
+ 0x7C240400, // 004C CALL R9 2
+ 0x8C28130C, // 004D GETMET R10 R9 K12
+ 0x58300005, // 004E LDCONST R12 K5
+ 0x88340917, // 004F GETMBR R13 R4 K23
+ 0x58380018, // 0050 LDCONST R14 K24
+ 0x7C280800, // 0051 CALL R10 4
+ 0x8C28130C, // 0052 GETMET R10 R9 K12
+ 0x5830000A, // 0053 LDCONST R12 K10
+ 0x88340911, // 0054 GETMBR R13 R4 K17
+ 0x5838000A, // 0055 LDCONST R14 K10
+ 0x7C280800, // 0056 CALL R10 4
+ 0x8C28130C, // 0057 GETMET R10 R9 K12
+ 0x5830000E, // 0058 LDCONST R12 K14
+ 0x88340911, // 0059 GETMBR R13 R4 K17
+ 0x5838000A, // 005A LDCONST R14 K10
+ 0x7C280800, // 005B CALL R10 4
+ 0x8C28130C, // 005C GETMET R10 R9 K12
+ 0x58300010, // 005D LDCONST R12 K16
+ 0x88340919, // 005E GETMBR R13 R4 K25
+ 0x4C380000, // 005F LDNIL R14
+ 0x7C280800, // 0060 CALL R10 4
+ 0x60280015, // 0061 GETGBL R10 G21
+ 0x7C280000, // 0062 CALL R10 0
+ 0x8C28151A, // 0063 GETMET R10 R10 K26
+ 0x8C30071B, // 0064 GETMET R12 R3 K27
+ 0x8C38111C, // 0065 GETMET R14 R8 K28
+ 0x5840001D, // 0066 LDCONST R16 K29
+ 0x5844001E, // 0067 LDCONST R17 K30
+ 0x7C380600, // 0068 CALL R14 3
+ 0x583C001F, // 0069 LDCONST R15 K31
+ 0x5840001E, // 006A LDCONST R16 K30
+ 0x7C300800, // 006B CALL R12 4
+ 0x7C280400, // 006C CALL R10 2
+ 0x8C2C130C, // 006D GETMET R11 R9 K12
+ 0x54360003, // 006E LDINT R13 4
+ 0x88380920, // 006F GETMBR R14 R4 K32
+ 0x5C3C1400, // 0070 MOVE R15 R10
+ 0x7C2C0800, // 0071 CALL R11 4
+ 0x8C2C1321, // 0072 GETMET R11 R9 K33
+ 0x54360004, // 0073 LDINT R13 5
+ 0x7C2C0400, // 0074 CALL R11 2
+ 0x8C30170C, // 0075 GETMET R12 R11 K12
+ 0x4C380000, // 0076 LDNIL R14
+ 0x883C0920, // 0077 GETMBR R15 R4 K32
+ 0xB8420200, // 0078 GETNGBL R16 K1
+ 0x8C402122, // 0079 GETMET R16 R16 K34
+ 0x8C48111C, // 007A GETMET R18 R8 K28
+ 0x58500023, // 007B LDCONST R20 K35
+ 0x5854001E, // 007C LDCONST R21 K30
+ 0x7C480600, // 007D CALL R18 3
+ 0x7C400400, // 007E CALL R16 2
+ 0x7C300800, // 007F CALL R12 4
+ 0x8C301321, // 0080 GETMET R12 R9 K33
+ 0x543A0005, // 0081 LDINT R14 6
+ 0x7C300400, // 0082 CALL R12 2
+ 0x8C34190C, // 0083 GETMET R13 R12 K12
+ 0x4C3C0000, // 0084 LDNIL R15
+ 0x88400920, // 0085 GETMBR R16 R4 K32
+ 0xB8460200, // 0086 GETNGBL R17 K1
+ 0x8C442322, // 0087 GETMET R17 R17 K34
+ 0x8C4C111C, // 0088 GETMET R19 R8 K28
+ 0x58540024, // 0089 LDCONST R21 K36
+ 0x5858001E, // 008A LDCONST R22 K30
+ 0x7C4C0600, // 008B CALL R19 3
+ 0x7C440400, // 008C CALL R17 2
+ 0x7C340800, // 008D CALL R13 4
+ 0x8C34190C, // 008E GETMET R13 R12 K12
+ 0x4C3C0000, // 008F LDNIL R15
+ 0x88400920, // 0090 GETMBR R16 R4 K32
+ 0xB8460200, // 0091 GETNGBL R17 K1
+ 0x8C442322, // 0092 GETMET R17 R17 K34
+ 0x8C4C111C, // 0093 GETMET R19 R8 K28
+ 0x58540025, // 0094 LDCONST R21 K37
+ 0x5858001E, // 0095 LDCONST R22 K30
+ 0x7C4C0600, // 0096 CALL R19 3
+ 0x7C440400, // 0097 CALL R17 2
+ 0x7C340800, // 0098 CALL R13 4
+ 0x8C34130C, // 0099 GETMET R13 R9 K12
+ 0x543E0006, // 009A LDINT R15 7
+ 0x8840090F, // 009B GETMBR R16 R4 K15
+ 0x5844000E, // 009C LDCONST R17 K14
+ 0x7C340800, // 009D CALL R13 4
+ 0xB8262600, // 009E GETNGBL R9 K19
+ 0x8C241326, // 009F GETMET R9 R9 K38
+ 0x7C240200, // 00A0 CALL R9 1
+ 0x94281315, // 00A1 GETIDX R10 R9 K21
+ 0x782A0053, // 00A2 JMPF R10 #00F7
+ 0x8C280F16, // 00A3 GETMET R10 R7 K22
+ 0x4C300000, // 00A4 LDNIL R12
+ 0x7C280400, // 00A5 CALL R10 2
+ 0x8C2C150C, // 00A6 GETMET R11 R10 K12
+ 0x58340005, // 00A7 LDCONST R13 K5
+ 0x88380917, // 00A8 GETMBR R14 R4 K23
+ 0x583C0026, // 00A9 LDCONST R15 K38
+ 0x7C2C0800, // 00AA CALL R11 4
+ 0x8C2C150C, // 00AB GETMET R11 R10 K12
+ 0x5834000A, // 00AC LDCONST R13 K10
+ 0x88380911, // 00AD GETMBR R14 R4 K17
+ 0x583C000A, // 00AE LDCONST R15 K10
+ 0x7C2C0800, // 00AF CALL R11 4
+ 0x8C2C150C, // 00B0 GETMET R11 R10 K12
+ 0x5834000E, // 00B1 LDCONST R13 K14
+ 0x88380911, // 00B2 GETMBR R14 R4 K17
+ 0x583C000A, // 00B3 LDCONST R15 K10
+ 0x7C2C0800, // 00B4 CALL R11 4
+ 0x8C2C150C, // 00B5 GETMET R11 R10 K12
+ 0x58340010, // 00B6 LDCONST R13 K16
+ 0x88380919, // 00B7 GETMBR R14 R4 K25
+ 0x4C3C0000, // 00B8 LDNIL R15
+ 0x7C2C0800, // 00B9 CALL R11 4
+ 0x602C0015, // 00BA GETGBL R11 G21
+ 0x7C2C0000, // 00BB CALL R11 0
+ 0x8C2C171A, // 00BC GETMET R11 R11 K26
+ 0x8C34071B, // 00BD GETMET R13 R3 K27
+ 0x8C3C131C, // 00BE GETMET R15 R9 K28
+ 0x5844001D, // 00BF LDCONST R17 K29
+ 0x5848001E, // 00C0 LDCONST R18 K30
+ 0x7C3C0600, // 00C1 CALL R15 3
+ 0x5840001F, // 00C2 LDCONST R16 K31
+ 0x5844001E, // 00C3 LDCONST R17 K30
+ 0x7C340800, // 00C4 CALL R13 4
+ 0x7C2C0400, // 00C5 CALL R11 2
+ 0x8C30150C, // 00C6 GETMET R12 R10 K12
+ 0x543A0003, // 00C7 LDINT R14 4
+ 0x883C0920, // 00C8 GETMBR R15 R4 K32
+ 0x5C401600, // 00C9 MOVE R16 R11
+ 0x7C300800, // 00CA CALL R12 4
+ 0x8C301521, // 00CB GETMET R12 R10 K33
+ 0x543A0004, // 00CC LDINT R14 5
+ 0x7C300400, // 00CD CALL R12 2
+ 0x8C34190C, // 00CE GETMET R13 R12 K12
+ 0x4C3C0000, // 00CF LDNIL R15
+ 0x88400920, // 00D0 GETMBR R16 R4 K32
+ 0xB8460200, // 00D1 GETNGBL R17 K1
+ 0x8C442322, // 00D2 GETMET R17 R17 K34
+ 0x8C4C131C, // 00D3 GETMET R19 R9 K28
+ 0x58540023, // 00D4 LDCONST R21 K35
+ 0x5858001E, // 00D5 LDCONST R22 K30
+ 0x7C4C0600, // 00D6 CALL R19 3
+ 0x7C440400, // 00D7 CALL R17 2
+ 0x7C340800, // 00D8 CALL R13 4
+ 0x8C341521, // 00D9 GETMET R13 R10 K33
+ 0x543E0005, // 00DA LDINT R15 6
+ 0x7C340400, // 00DB CALL R13 2
+ 0x8C381B0C, // 00DC GETMET R14 R13 K12
+ 0x4C400000, // 00DD LDNIL R16
+ 0x88440920, // 00DE GETMBR R17 R4 K32
+ 0xB84A0200, // 00DF GETNGBL R18 K1
+ 0x8C482522, // 00E0 GETMET R18 R18 K34
+ 0x8C50131C, // 00E1 GETMET R20 R9 K28
+ 0x58580024, // 00E2 LDCONST R22 K36
+ 0x585C001E, // 00E3 LDCONST R23 K30
+ 0x7C500600, // 00E4 CALL R20 3
+ 0x7C480400, // 00E5 CALL R18 2
+ 0x7C380800, // 00E6 CALL R14 4
+ 0x8C381B0C, // 00E7 GETMET R14 R13 K12
+ 0x4C400000, // 00E8 LDNIL R16
+ 0x88440920, // 00E9 GETMBR R17 R4 K32
+ 0xB84A0200, // 00EA GETNGBL R18 K1
+ 0x8C482522, // 00EB GETMET R18 R18 K34
+ 0x8C50131C, // 00EC GETMET R20 R9 K28
+ 0x58580025, // 00ED LDCONST R22 K37
+ 0x585C001E, // 00EE LDCONST R23 K30
+ 0x7C500600, // 00EF CALL R20 3
+ 0x7C480400, // 00F0 CALL R18 2
+ 0x7C380800, // 00F1 CALL R14 4
+ 0x8C38150C, // 00F2 GETMET R14 R10 K12
+ 0x54420006, // 00F3 LDINT R16 7
+ 0x8844090F, // 00F4 GETMBR R17 R4 K15
+ 0x5848000A, // 00F5 LDCONST R18 K10
+ 0x7C380800, // 00F6 CALL R14 4
+ 0x80040E00, // 00F7 RET 1 R7
+ 0x70020021, // 00F8 JMP #011B
+ 0x1C1C0D0A, // 00F9 EQ R7 R6 K10
+ 0x781E000A, // 00FA JMPF R7 #0106
+ 0x8C1C0906, // 00FB GETMET R7 R4 K6
+ 0x8824090D, // 00FC GETMBR R9 R4 K13
+ 0xB82A2600, // 00FD GETNGBL R10 K19
+ 0x8C281527, // 00FE GETMET R10 R10 K39
+ 0x58300028, // 00FF LDCONST R12 K40
+ 0x7C280400, // 0100 CALL R10 2
+ 0x94281529, // 0101 GETIDX R10 R10 K41
+ 0x9428152A, // 0102 GETIDX R10 R10 K42
+ 0x7C1C0600, // 0103 CALL R7 3
+ 0x80040E00, // 0104 RET 1 R7
+ 0x70020014, // 0105 JMP #011B
+ 0x1C1C0D0E, // 0106 EQ R7 R6 K14
+ 0x781E000A, // 0107 JMPF R7 #0113
+ 0x8C1C0906, // 0108 GETMET R7 R4 K6
+ 0x8824092B, // 0109 GETMBR R9 R4 K43
+ 0xB82A2600, // 010A GETNGBL R10 K19
+ 0x8C281527, // 010B GETMET R10 R10 K39
+ 0x5830002C, // 010C LDCONST R12 K44
+ 0x7C280400, // 010D CALL R10 2
+ 0x9428152D, // 010E GETIDX R10 R10 K45
+ 0x9428152E, // 010F GETIDX R10 R10 K46
+ 0x7C1C0600, // 0110 CALL R7 3
+ 0x80040E00, // 0111 RET 1 R7
+ 0x70020007, // 0112 JMP #011B
+ 0x541E0007, // 0113 LDINT R7 8
+ 0x1C1C0C07, // 0114 EQ R7 R6 R7
+ 0x781E0004, // 0115 JMPF R7 #011B
+ 0x8C1C0906, // 0116 GETMET R7 R4 K6
+ 0x88240911, // 0117 GETMBR R9 R4 K17
+ 0x50280000, // 0118 LDBOOL R10 0 0
+ 0x7C1C0600, // 0119 CALL R7 3
+ 0x80040E00, // 011A RET 1 R7
+ 0x7002020B, // 011B JMP #0328
+ 0x541E0033, // 011C LDINT R7 52
+ 0x1C1C0A07, // 011D EQ R7 R5 R7
+ 0x781E0000, // 011E JMPF R7 #0120
+ 0x70020207, // 011F JMP #0328
+ 0x541E0037, // 0120 LDINT R7 56
+ 0x1C1C0A07, // 0121 EQ R7 R5 R7
+ 0x781E002C, // 0122 JMPF R7 #0150
+ 0x1C1C0D05, // 0123 EQ R7 R6 K5
+ 0x781E000F, // 0124 JMPF R7 #0135
+ 0xB81E5E00, // 0125 GETNGBL R7 K47
+ 0xB8222600, // 0126 GETNGBL R8 K19
+ 0x8C201130, // 0127 GETMET R8 R8 K48
+ 0x7C200200, // 0128 CALL R8 1
+ 0x94201131, // 0129 GETIDX R8 R8 K49
+ 0x7C1C0200, // 012A CALL R7 1
+ 0xB8225E00, // 012B GETNGBL R8 K47
+ 0x58240032, // 012C LDCONST R9 K50
+ 0x7C200200, // 012D CALL R8 1
+ 0x081C0E08, // 012E MUL R7 R7 R8
+ 0x8C200906, // 012F GETMET R8 R4 K6
+ 0x88280907, // 0130 GETMBR R10 R4 K7
+ 0x5C2C0E00, // 0131 MOVE R11 R7
+ 0x7C200600, // 0132 CALL R8 3
+ 0x80041000, // 0133 RET 1 R8
+ 0x70020019, // 0134 JMP #014F
+ 0x1C1C0D0A, // 0135 EQ R7 R6 K10
+ 0x781E0005, // 0136 JMPF R7 #013D
+ 0x8C1C0906, // 0137 GETMET R7 R4 K6
+ 0x8824090F, // 0138 GETMBR R9 R4 K15
+ 0x58280010, // 0139 LDCONST R10 K16
+ 0x7C1C0600, // 013A CALL R7 3
+ 0x80040E00, // 013B RET 1 R7
+ 0x70020011, // 013C JMP #014F
+ 0x541E0006, // 013D LDINT R7 7
+ 0x1C1C0C07, // 013E EQ R7 R6 R7
+ 0x781E000E, // 013F JMPF R7 #014F
+ 0xB81E5E00, // 0140 GETNGBL R7 K47
+ 0xB8222600, // 0141 GETNGBL R8 K19
+ 0x8C201130, // 0142 GETMET R8 R8 K48
+ 0x7C200200, // 0143 CALL R8 1
+ 0x94201133, // 0144 GETIDX R8 R8 K51
+ 0x7C1C0200, // 0145 CALL R7 1
+ 0xB8225E00, // 0146 GETNGBL R8 K47
+ 0x58240032, // 0147 LDCONST R9 K50
+ 0x7C200200, // 0148 CALL R8 1
+ 0x081C0E08, // 0149 MUL R7 R7 R8
+ 0x8C200906, // 014A GETMET R8 R4 K6
+ 0x88280907, // 014B GETMBR R10 R4 K7
+ 0x5C2C0E00, // 014C MOVE R11 R7
+ 0x7C200600, // 014D CALL R8 3
+ 0x80041000, // 014E RET 1 R8
+ 0x700201D7, // 014F JMP #0328
+ 0x541E003D, // 0150 LDINT R7 62
+ 0x1C1C0A07, // 0151 EQ R7 R5 R7
+ 0x781E0082, // 0152 JMPF R7 #01D6
+ 0x1C1C0D05, // 0153 EQ R7 R6 K5
+ 0x781E001D, // 0154 JMPF R7 #0173
+ 0x8C1C0912, // 0155 GETMET R7 R4 K18
+ 0x7C1C0200, // 0156 CALL R7 1
+ 0x60200010, // 0157 GETGBL R8 G16
+ 0x88240134, // 0158 GETMBR R9 R0 K52
+ 0x88241335, // 0159 GETMBR R9 R9 K53
+ 0x8C241336, // 015A GETMET R9 R9 K54
+ 0x7C240200, // 015B CALL R9 1
+ 0x7C200200, // 015C CALL R8 1
+ 0xA802000F, // 015D EXBLK 0 #016E
+ 0x5C241000, // 015E MOVE R9 R8
+ 0x7C240000, // 015F CALL R9 0
+ 0x8C280F16, // 0160 GETMET R10 R7 K22
+ 0x4C300000, // 0161 LDNIL R12
+ 0x7C280400, // 0162 CALL R10 2
+ 0x8C2C150C, // 0163 GETMET R11 R10 K12
+ 0x5834000A, // 0164 LDCONST R13 K10
+ 0x88380937, // 0165 GETMBR R14 R4 K55
+ 0x883C1338, // 0166 GETMBR R15 R9 K56
+ 0x7C2C0800, // 0167 CALL R11 4
+ 0x8C2C150C, // 0168 GETMET R11 R10 K12
+ 0x5834000E, // 0169 LDCONST R13 K14
+ 0x88380937, // 016A GETMBR R14 R4 K55
+ 0x883C1339, // 016B GETMBR R15 R9 K57
+ 0x7C2C0800, // 016C CALL R11 4
+ 0x7001FFEF, // 016D JMP #015E
+ 0x5820003A, // 016E LDCONST R8 K58
+ 0xAC200200, // 016F CATCH R8 1 0
+ 0xB0080000, // 0170 RAISE 2 R0 R0
+ 0x80040E00, // 0171 RET 1 R7
+ 0x70020061, // 0172 JMP #01D5
+ 0x1C1C0D0A, // 0173 EQ R7 R6 K10
+ 0x781E0032, // 0174 JMPF R7 #01A8
+ 0x8C1C0912, // 0175 GETMET R7 R4 K18
+ 0x7C1C0200, // 0176 CALL R7 1
+ 0x60200010, // 0177 GETGBL R8 G16
+ 0x88240134, // 0178 GETMBR R9 R0 K52
+ 0x88241335, // 0179 GETMBR R9 R9 K53
+ 0x8C241336, // 017A GETMET R9 R9 K54
+ 0x7C240200, // 017B CALL R9 1
+ 0x7C200200, // 017C CALL R8 1
+ 0xA8020024, // 017D EXBLK 0 #01A3
+ 0x5C241000, // 017E MOVE R9 R8
+ 0x7C240000, // 017F CALL R9 0
+ 0x8C28093B, // 0180 GETMET R10 R4 K59
+ 0x8C30133C, // 0181 GETMET R12 R9 K60
+ 0x7C300200, // 0182 CALL R12 1
+ 0x7C280400, // 0183 CALL R10 2
+ 0x8C2C0F16, // 0184 GETMET R11 R7 K22
+ 0x4C340000, // 0185 LDNIL R13
+ 0x7C2C0400, // 0186 CALL R11 2
+ 0x8C30170C, // 0187 GETMET R12 R11 K12
+ 0x5838000A, // 0188 LDCONST R14 K10
+ 0x883C0937, // 0189 GETMBR R15 R4 K55
+ 0x8C40153D, // 018A GETMET R16 R10 K61
+ 0x544A0008, // 018B LDINT R18 9
+ 0x7C400400, // 018C CALL R16 2
+ 0x7C300800, // 018D CALL R12 4
+ 0x8C30170C, // 018E GETMET R12 R11 K12
+ 0x5838000E, // 018F LDCONST R14 K14
+ 0x883C090D, // 0190 GETMBR R15 R4 K13
+ 0x8840133E, // 0191 GETMBR R16 R9 K62
+ 0x7C300800, // 0192 CALL R12 4
+ 0x8C30170C, // 0193 GETMET R12 R11 K12
+ 0x58380010, // 0194 LDCONST R14 K16
+ 0x883C0907, // 0195 GETMBR R15 R4 K7
+ 0x8840133F, // 0196 GETMBR R16 R9 K63
+ 0x7C300800, // 0197 CALL R12 4
+ 0x8C30170C, // 0198 GETMET R12 R11 K12
+ 0x543A0003, // 0199 LDINT R14 4
+ 0x883C0907, // 019A GETMBR R15 R4 K7
+ 0x88401340, // 019B GETMBR R16 R9 K64
+ 0x7C300800, // 019C CALL R12 4
+ 0x8C30170C, // 019D GETMET R12 R11 K12
+ 0x543A0004, // 019E LDINT R14 5
+ 0x883C0917, // 019F GETMBR R15 R4 K23
+ 0x88401341, // 01A0 GETMBR R16 R9 K65
+ 0x7C300800, // 01A1 CALL R12 4
+ 0x7001FFDA, // 01A2 JMP #017E
+ 0x5820003A, // 01A3 LDCONST R8 K58
+ 0xAC200200, // 01A4 CATCH R8 1 0
+ 0xB0080000, // 01A5 RAISE 2 R0 R0
+ 0x80040E00, // 01A6 RET 1 R7
+ 0x7002002C, // 01A7 JMP #01D5
+ 0x1C1C0D0E, // 01A8 EQ R7 R6 K14
+ 0x781E0005, // 01A9 JMPF R7 #01B0
+ 0x8C1C0906, // 01AA GETMET R7 R4 K6
+ 0x8824090F, // 01AB GETMBR R9 R4 K15
+ 0x542A0004, // 01AC LDINT R10 5
+ 0x7C1C0600, // 01AD CALL R7 3
+ 0x80040E00, // 01AE RET 1 R7
+ 0x70020024, // 01AF JMP #01D5
+ 0x1C1C0D10, // 01B0 EQ R7 R6 K16
+ 0x781E000B, // 01B1 JMPF R7 #01BE
+ 0x881C0134, // 01B2 GETMBR R7 R0 K52
+ 0x881C0F35, // 01B3 GETMBR R7 R7 K53
+ 0x8C1C0F36, // 01B4 GETMET R7 R7 K54
+ 0x7C1C0200, // 01B5 CALL R7 1
+ 0x8C200906, // 01B6 GETMET R8 R4 K6
+ 0x8828090F, // 01B7 GETMBR R10 R4 K15
+ 0x602C000C, // 01B8 GETGBL R11 G12
+ 0x5C300E00, // 01B9 MOVE R12 R7
+ 0x7C2C0200, // 01BA CALL R11 1
+ 0x7C200600, // 01BB CALL R8 3
+ 0x80041000, // 01BC RET 1 R8
+ 0x70020016, // 01BD JMP #01D5
+ 0x541E0003, // 01BE LDINT R7 4
+ 0x1C1C0C07, // 01BF EQ R7 R6 R7
+ 0x781E0000, // 01C0 JMPF R7 #01C2
+ 0x70020012, // 01C1 JMP #01D5
+ 0x541E0004, // 01C2 LDINT R7 5
+ 0x1C1C0C07, // 01C3 EQ R7 R6 R7
+ 0x781E000F, // 01C4 JMPF R7 #01D5
+ 0x881C0134, // 01C5 GETMBR R7 R0 K52
+ 0x881C0F35, // 01C6 GETMBR R7 R7 K53
+ 0x8C1C0F36, // 01C7 GETMET R7 R7 K54
+ 0x7C1C0200, // 01C8 CALL R7 1
+ 0x8C200F1C, // 01C9 GETMET R8 R7 K28
+ 0x88280308, // 01CA GETMBR R10 R1 K8
+ 0x7C200400, // 01CB CALL R8 2
+ 0x4C240000, // 01CC LDNIL R9
+ 0x1C241009, // 01CD EQ R9 R8 R9
+ 0x78260000, // 01CE JMPF R9 #01D0
+ 0x58200005, // 01CF LDCONST R8 K5
+ 0x8C240906, // 01D0 GETMET R9 R4 K6
+ 0x882C090F, // 01D1 GETMBR R11 R4 K15
+ 0x5C301000, // 01D2 MOVE R12 R8
+ 0x7C240600, // 01D3 CALL R9 3
+ 0x80041200, // 01D4 RET 1 R9
+ 0x70020151, // 01D5 JMP #0328
+ 0x541E003B, // 01D6 LDINT R7 60
+ 0x1C1C0A07, // 01D7 EQ R7 R5 R7
+ 0x781E0000, // 01D8 JMPF R7 #01DA
+ 0x7002014D, // 01D9 JMP #0328
+ 0x541E0027, // 01DA LDINT R7 40
+ 0x1C1C0A07, // 01DB EQ R7 R5 R7
+ 0x781E0080, // 01DC JMPF R7 #025E
+ 0x1C1C0D05, // 01DD EQ R7 R6 K5
+ 0x781E0005, // 01DE JMPF R7 #01E5
+ 0x8C1C0906, // 01DF GETMET R7 R4 K6
+ 0x8824090D, // 01E0 GETMBR R9 R4 K13
+ 0x58280005, // 01E1 LDCONST R10 K5
+ 0x7C1C0600, // 01E2 CALL R7 3
+ 0x80040E00, // 01E3 RET 1 R7
+ 0x70020077, // 01E4 JMP #025D
+ 0x1C1C0D0A, // 01E5 EQ R7 R6 K10
+ 0x781E0005, // 01E6 JMPF R7 #01ED
+ 0x8C1C0906, // 01E7 GETMET R7 R4 K6
+ 0x88240917, // 01E8 GETMBR R9 R4 K23
+ 0x58280042, // 01E9 LDCONST R10 K66
+ 0x7C1C0600, // 01EA CALL R7 3
+ 0x80040E00, // 01EB RET 1 R7
+ 0x7002006F, // 01EC JMP #025D
+ 0x1C1C0D0E, // 01ED EQ R7 R6 K14
+ 0x781E0006, // 01EE JMPF R7 #01F6
+ 0x8C1C0906, // 01EF GETMET R7 R4 K6
+ 0x8824090D, // 01F0 GETMBR R9 R4 K13
+ 0x88280134, // 01F1 GETMBR R10 R0 K52
+ 0x88281543, // 01F2 GETMBR R10 R10 K67
+ 0x7C1C0600, // 01F3 CALL R7 3
+ 0x80040E00, // 01F4 RET 1 R7
+ 0x70020066, // 01F5 JMP #025D
+ 0x1C1C0D10, // 01F6 EQ R7 R6 K16
+ 0x781E0009, // 01F7 JMPF R7 #0202
+ 0x8C1C0906, // 01F8 GETMET R7 R4 K6
+ 0x88240917, // 01F9 GETMBR R9 R4 K23
+ 0xB82A2600, // 01FA GETNGBL R10 K19
+ 0x8C281527, // 01FB GETMET R10 R10 K39
+ 0x58300044, // 01FC LDCONST R12 K68
+ 0x7C280400, // 01FD CALL R10 2
+ 0x94281544, // 01FE GETIDX R10 R10 K68
+ 0x7C1C0600, // 01FF CALL R7 3
+ 0x80040E00, // 0200 RET 1 R7
+ 0x7002005A, // 0201 JMP #025D
+ 0x541E0003, // 0202 LDINT R7 4
+ 0x1C1C0C07, // 0203 EQ R7 R6 R7
+ 0x781E0005, // 0204 JMPF R7 #020B
+ 0x8C1C0906, // 0205 GETMET R7 R4 K6
+ 0x8824090D, // 0206 GETMBR R9 R4 K13
+ 0x542A7FFF, // 0207 LDINT R10 32768
+ 0x7C1C0600, // 0208 CALL R7 3
+ 0x80040E00, // 0209 RET 1 R7
+ 0x70020051, // 020A JMP #025D
+ 0x541E0004, // 020B LDINT R7 5
+ 0x1C1C0C07, // 020C EQ R7 R6 R7
+ 0x781E0009, // 020D JMPF R7 #0218
+ 0x8C1C0906, // 020E GETMET R7 R4 K6
+ 0x88240917, // 020F GETMBR R9 R4 K23
+ 0xB82A2600, // 0210 GETNGBL R10 K19
+ 0x8C281527, // 0211 GETMET R10 R10 K39
+ 0x58300045, // 0212 LDCONST R12 K69
+ 0x7C280400, // 0213 CALL R10 2
+ 0x94281546, // 0214 GETIDX R10 R10 K70
+ 0x7C1C0600, // 0215 CALL R7 3
+ 0x80040E00, // 0216 RET 1 R7
+ 0x70020044, // 0217 JMP #025D
+ 0x541E0005, // 0218 LDINT R7 6
+ 0x1C1C0C07, // 0219 EQ R7 R6 R7
+ 0x781E0005, // 021A JMPF R7 #0221
+ 0x8C1C0906, // 021B GETMET R7 R4 K6
+ 0x88240917, // 021C GETMBR R9 R4 K23
+ 0x58280047, // 021D LDCONST R10 K71
+ 0x7C1C0600, // 021E CALL R7 3
+ 0x80040E00, // 021F RET 1 R7
+ 0x7002003B, // 0220 JMP #025D
+ 0x541E0006, // 0221 LDINT R7 7
+ 0x1C1C0C07, // 0222 EQ R7 R6 R7
+ 0x781E0005, // 0223 JMPF R7 #022A
+ 0x8C1C0906, // 0224 GETMET R7 R4 K6
+ 0x8824090D, // 0225 GETMBR R9 R4 K13
+ 0x58280005, // 0226 LDCONST R10 K5
+ 0x7C1C0600, // 0227 CALL R7 3
+ 0x80040E00, // 0228 RET 1 R7
+ 0x70020032, // 0229 JMP #025D
+ 0x541E0007, // 022A LDINT R7 8
+ 0x1C1C0C07, // 022B EQ R7 R6 R7
+ 0x781E000A, // 022C JMPF R7 #0238
+ 0x8C1C0906, // 022D GETMET R7 R4 K6
+ 0x88240917, // 022E GETMBR R9 R4 K23
+ 0xB82A2600, // 022F GETNGBL R10 K19
+ 0x8C281527, // 0230 GETMET R10 R10 K39
+ 0x58300048, // 0231 LDCONST R12 K72
+ 0x7C280400, // 0232 CALL R10 2
+ 0x94281549, // 0233 GETIDX R10 R10 K73
+ 0x9428154A, // 0234 GETIDX R10 R10 K74
+ 0x7C1C0600, // 0235 CALL R7 3
+ 0x80040E00, // 0236 RET 1 R7
+ 0x70020024, // 0237 JMP #025D
+ 0x541E0008, // 0238 LDINT R7 9
+ 0x1C1C0C07, // 0239 EQ R7 R6 R7
+ 0x781E0005, // 023A JMPF R7 #0241
+ 0x8C1C0906, // 023B GETMET R7 R4 K6
+ 0x8824090D, // 023C GETMBR R9 R4 K13
+ 0x58280005, // 023D LDCONST R10 K5
+ 0x7C1C0600, // 023E CALL R7 3
+ 0x80040E00, // 023F RET 1 R7
+ 0x7002001B, // 0240 JMP #025D
+ 0x541E0009, // 0241 LDINT R7 10
+ 0x1C1C0C07, // 0242 EQ R7 R6 R7
+ 0x781E000A, // 0243 JMPF R7 #024F
+ 0x8C1C0906, // 0244 GETMET R7 R4 K6
+ 0x88240917, // 0245 GETMBR R9 R4 K23
+ 0xB82A2600, // 0246 GETNGBL R10 K19
+ 0x8C281527, // 0247 GETMET R10 R10 K39
+ 0x58300048, // 0248 LDCONST R12 K72
+ 0x7C280400, // 0249 CALL R10 2
+ 0x94281549, // 024A GETIDX R10 R10 K73
+ 0x9428154B, // 024B GETIDX R10 R10 K75
+ 0x7C1C0600, // 024C CALL R7 3
+ 0x80040E00, // 024D RET 1 R7
+ 0x7002000D, // 024E JMP #025D
+ 0x541E0011, // 024F LDINT R7 18
+ 0x1C1C0C07, // 0250 EQ R7 R6 R7
+ 0x781E000A, // 0251 JMPF R7 #025D
+ 0x8C1C0906, // 0252 GETMET R7 R4 K6
+ 0x88240917, // 0253 GETMBR R9 R4 K23
+ 0xB82A2600, // 0254 GETNGBL R10 K19
+ 0x8C281526, // 0255 GETMET R10 R10 K38
+ 0x7C280200, // 0256 CALL R10 1
+ 0x8C28151C, // 0257 GETMET R10 R10 K28
+ 0x5830001D, // 0258 LDCONST R12 K29
+ 0x5834001E, // 0259 LDCONST R13 K30
+ 0x7C280600, // 025A CALL R10 3
+ 0x7C1C0600, // 025B CALL R7 3
+ 0x80040E00, // 025C RET 1 R7
+ 0x700200C9, // 025D JMP #0328
+ 0x541E003E, // 025E LDINT R7 63
+ 0x1C1C0A07, // 025F EQ R7 R5 R7
+ 0x781E0000, // 0260 JMPF R7 #0262
+ 0x700200C5, // 0261 JMP #0328
+ 0x541E0029, // 0262 LDINT R7 42
+ 0x1C1C0A07, // 0263 EQ R7 R5 R7
+ 0x781E001D, // 0264 JMPF R7 #0283
+ 0x1C1C0D05, // 0265 EQ R7 R6 K5
+ 0x781E0003, // 0266 JMPF R7 #026B
+ 0x8C1C0912, // 0267 GETMET R7 R4 K18
+ 0x7C1C0200, // 0268 CALL R7 1
+ 0x80040E00, // 0269 RET 1 R7
+ 0x70020016, // 026A JMP #0282
+ 0x1C1C0D0A, // 026B EQ R7 R6 K10
+ 0x781E0005, // 026C JMPF R7 #0273
+ 0x8C1C0906, // 026D GETMET R7 R4 K6
+ 0x88240911, // 026E GETMBR R9 R4 K17
+ 0x58280005, // 026F LDCONST R10 K5
+ 0x7C1C0600, // 0270 CALL R7 3
+ 0x80040E00, // 0271 RET 1 R7
+ 0x7002000E, // 0272 JMP #0282
+ 0x1C1C0D0E, // 0273 EQ R7 R6 K14
+ 0x781E0005, // 0274 JMPF R7 #027B
+ 0x8C1C0906, // 0275 GETMET R7 R4 K6
+ 0x8824090F, // 0276 GETMBR R9 R4 K15
+ 0x5828000A, // 0277 LDCONST R10 K10
+ 0x7C1C0600, // 0278 CALL R7 3
+ 0x80040E00, // 0279 RET 1 R7
+ 0x70020006, // 027A JMP #0282
+ 0x1C1C0D10, // 027B EQ R7 R6 K16
+ 0x781E0004, // 027C JMPF R7 #0282
+ 0x8C1C0906, // 027D GETMET R7 R4 K6
+ 0x88240919, // 027E GETMBR R9 R4 K25
+ 0x4C280000, // 027F LDNIL R10
+ 0x7C1C0600, // 0280 CALL R7 3
+ 0x80040E00, // 0281 RET 1 R7
+ 0x700200A4, // 0282 JMP #0328
+ 0x541E002A, // 0283 LDINT R7 43
+ 0x1C1C0A07, // 0284 EQ R7 R5 R7
+ 0x781E0016, // 0285 JMPF R7 #029D
+ 0x1C1C0D05, // 0286 EQ R7 R6 K5
+ 0x781E0007, // 0287 JMPF R7 #0290
+ 0x8C1C0906, // 0288 GETMET R7 R4 K6
+ 0x88240917, // 0289 GETMBR R9 R4 K23
+ 0xB82A2600, // 028A GETNGBL R10 K19
+ 0x8C28154C, // 028B GETMET R10 R10 K76
+ 0x7C280200, // 028C CALL R10 1
+ 0x7C1C0600, // 028D CALL R7 3
+ 0x80040E00, // 028E RET 1 R7
+ 0x7002000B, // 028F JMP #029C
+ 0x1C1C0D0A, // 0290 EQ R7 R6 K10
+ 0x781E0009, // 0291 JMPF R7 #029C
+ 0x8C1C0912, // 0292 GETMET R7 R4 K18
+ 0x7C1C0200, // 0293 CALL R7 1
+ 0x8C200F0C, // 0294 GETMET R8 R7 K12
+ 0x4C280000, // 0295 LDNIL R10
+ 0x882C0917, // 0296 GETMBR R11 R4 K23
+ 0xB8322600, // 0297 GETNGBL R12 K19
+ 0x8C30194C, // 0298 GETMET R12 R12 K76
+ 0x7C300200, // 0299 CALL R12 1
+ 0x7C200800, // 029A CALL R8 4
+ 0x80040E00, // 029B RET 1 R7
+ 0x7002008A, // 029C JMP #0328
+ 0x541E002B, // 029D LDINT R7 44
+ 0x1C1C0A07, // 029E EQ R7 R5 R7
+ 0x781E001C, // 029F JMPF R7 #02BD
+ 0x1C1C0D05, // 02A0 EQ R7 R6 K5
+ 0x781E0005, // 02A1 JMPF R7 #02A8
+ 0x8C1C0906, // 02A2 GETMET R7 R4 K6
+ 0x8824090F, // 02A3 GETMBR R9 R4 K15
+ 0x5828000A, // 02A4 LDCONST R10 K10
+ 0x7C1C0600, // 02A5 CALL R7 3
+ 0x80040E00, // 02A6 RET 1 R7
+ 0x70020013, // 02A7 JMP #02BC
+ 0x1C1C0D0A, // 02A8 EQ R7 R6 K10
+ 0x781E0005, // 02A9 JMPF R7 #02B0
+ 0x8C1C0906, // 02AA GETMET R7 R4 K6
+ 0x8824090F, // 02AB GETMBR R9 R4 K15
+ 0x542A0003, // 02AC LDINT R10 4
+ 0x7C1C0600, // 02AD CALL R7 3
+ 0x80040E00, // 02AE RET 1 R7
+ 0x7002000B, // 02AF JMP #02BC
+ 0x1C1C0D0E, // 02B0 EQ R7 R6 K14
+ 0x781E0009, // 02B1 JMPF R7 #02BC
+ 0x8C1C0912, // 02B2 GETMET R7 R4 K18
+ 0x7C1C0200, // 02B3 CALL R7 1
+ 0x8C200F0C, // 02B4 GETMET R8 R7 K12
+ 0x4C280000, // 02B5 LDNIL R10
+ 0x8C2C0906, // 02B6 GETMET R11 R4 K6
+ 0x8834090F, // 02B7 GETMBR R13 R4 K15
+ 0x543A0003, // 02B8 LDINT R14 4
+ 0x7C2C0600, // 02B9 CALL R11 3
+ 0x7C200600, // 02BA CALL R8 3
+ 0x80040E00, // 02BB RET 1 R7
+ 0x7002006A, // 02BC JMP #0328
+ 0x541E0030, // 02BD LDINT R7 49
+ 0x1C1C0A07, // 02BE EQ R7 R5 R7
+ 0x781E0010, // 02BF JMPF R7 #02D1
+ 0x1C1C0D10, // 02C0 EQ R7 R6 K16
+ 0x781E0005, // 02C1 JMPF R7 #02C8
+ 0x8C1C0906, // 02C2 GETMET R7 R4 K6
+ 0x8824090F, // 02C3 GETMBR R9 R4 K15
+ 0x542A001D, // 02C4 LDINT R10 30
+ 0x7C1C0600, // 02C5 CALL R7 3
+ 0x80040E00, // 02C6 RET 1 R7
+ 0x70020007, // 02C7 JMP #02D0
+ 0x541EFFFB, // 02C8 LDINT R7 65532
+ 0x1C1C0C07, // 02C9 EQ R7 R6 R7
+ 0x781E0004, // 02CA JMPF R7 #02D0
+ 0x8C1C0906, // 02CB GETMET R7 R4 K6
+ 0x8824092B, // 02CC GETMBR R9 R4 K43
+ 0x58280005, // 02CD LDCONST R10 K5
+ 0x7C1C0600, // 02CE CALL R7 3
+ 0x80040E00, // 02CF RET 1 R7
+ 0x70020056, // 02D0 JMP #0328
+ 0x541E001C, // 02D1 LDINT R7 29
+ 0x1C1C0A07, // 02D2 EQ R7 R5 R7
+ 0x781E0050, // 02D3 JMPF R7 #0325
+ 0x1C1C0D05, // 02D4 EQ R7 R6 K5
+ 0x781E0019, // 02D5 JMPF R7 #02F0
+ 0x8C1C0912, // 02D6 GETMET R7 R4 K18
+ 0x7C1C0200, // 02D7 CALL R7 1
+ 0x60200010, // 02D8 GETGBL R8 G16
+ 0x8824014D, // 02D9 GETMBR R9 R0 K77
+ 0x7C200200, // 02DA CALL R8 1
+ 0xA802000E, // 02DB EXBLK 0 #02EB
+ 0x5C241000, // 02DC MOVE R9 R8
+ 0x7C240000, // 02DD CALL R9 0
+ 0x8C280F16, // 02DE GETMET R10 R7 K22
+ 0x7C280200, // 02DF CALL R10 1
+ 0x8C2C150C, // 02E0 GETMET R11 R10 K12
+ 0x58340005, // 02E1 LDCONST R13 K5
+ 0x8838090D, // 02E2 GETMBR R14 R4 K13
+ 0x5C3C1200, // 02E3 MOVE R15 R9
+ 0x7C2C0800, // 02E4 CALL R11 4
+ 0x8C2C150C, // 02E5 GETMET R11 R10 K12
+ 0x5834000A, // 02E6 LDCONST R13 K10
+ 0x8838090D, // 02E7 GETMBR R14 R4 K13
+ 0x583C000A, // 02E8 LDCONST R15 K10
+ 0x7C2C0800, // 02E9 CALL R11 4
+ 0x7001FFF0, // 02EA JMP #02DC
+ 0x5820003A, // 02EB LDCONST R8 K58
+ 0xAC200200, // 02EC CATCH R8 1 0
+ 0xB0080000, // 02ED RAISE 2 R0 R0
+ 0x80040E00, // 02EE RET 1 R7
+ 0x70020033, // 02EF JMP #0324
+ 0x1C1C0D0A, // 02F0 EQ R7 R6 K10
+ 0x781E0013, // 02F1 JMPF R7 #0306
+ 0x8C1C0912, // 02F2 GETMET R7 R4 K18
+ 0x7C1C0200, // 02F3 CALL R7 1
+ 0x60200010, // 02F4 GETGBL R8 G16
+ 0x8C24014E, // 02F5 GETMET R9 R0 K78
+ 0x7C240200, // 02F6 CALL R9 1
+ 0x7C200200, // 02F7 CALL R8 1
+ 0xA8020007, // 02F8 EXBLK 0 #0301
+ 0x5C241000, // 02F9 MOVE R9 R8
+ 0x7C240000, // 02FA CALL R9 0
+ 0x8C280F0C, // 02FB GETMET R10 R7 K12
+ 0x4C300000, // 02FC LDNIL R12
+ 0x8834092B, // 02FD GETMBR R13 R4 K43
+ 0x5C381200, // 02FE MOVE R14 R9
+ 0x7C280800, // 02FF CALL R10 4
+ 0x7001FFF7, // 0300 JMP #02F9
+ 0x5820003A, // 0301 LDCONST R8 K58
+ 0xAC200200, // 0302 CATCH R8 1 0
+ 0xB0080000, // 0303 RAISE 2 R0 R0
+ 0x80040E00, // 0304 RET 1 R7
+ 0x7002001D, // 0305 JMP #0324
+ 0x1C1C0D0E, // 0306 EQ R7 R6 K14
+ 0x781E0003, // 0307 JMPF R7 #030C
+ 0x8C1C0912, // 0308 GETMET R7 R4 K18
+ 0x7C1C0200, // 0309 CALL R7 1
+ 0x80040E00, // 030A RET 1 R7
+ 0x70020017, // 030B JMP #0324
+ 0x1C1C0D10, // 030C EQ R7 R6 K16
+ 0x781E0015, // 030D JMPF R7 #0324
+ 0x881C0134, // 030E GETMBR R7 R0 K52
+ 0x8C1C0F4F, // 030F GETMET R7 R7 K79
+ 0x50240200, // 0310 LDBOOL R9 1 0
+ 0x7C1C0400, // 0311 CALL R7 2
+ 0x8C200912, // 0312 GETMET R8 R4 K18
+ 0x7C200200, // 0313 CALL R8 1
+ 0x60240010, // 0314 GETGBL R9 G16
+ 0x5C280E00, // 0315 MOVE R10 R7
+ 0x7C240200, // 0316 CALL R9 1
+ 0xA8020007, // 0317 EXBLK 0 #0320
+ 0x5C281200, // 0318 MOVE R10 R9
+ 0x7C280000, // 0319 CALL R10 0
+ 0x8C2C110C, // 031A GETMET R11 R8 K12
+ 0x4C340000, // 031B LDNIL R13
+ 0x8838090D, // 031C GETMBR R14 R4 K13
+ 0x5C3C1400, // 031D MOVE R15 R10
+ 0x7C2C0800, // 031E CALL R11 4
+ 0x7001FFF7, // 031F JMP #0318
+ 0x5824003A, // 0320 LDCONST R9 K58
+ 0xAC240200, // 0321 CATCH R9 1 0
+ 0xB0080000, // 0322 RAISE 2 R0 R0
+ 0x80041000, // 0323 RET 1 R8
+ 0x70020002, // 0324 JMP #0328
+ 0xB81E0200, // 0325 GETNGBL R7 K1
+ 0x881C0F51, // 0326 GETMBR R7 R7 K81
+ 0x900AA007, // 0327 SETMBR R2 K80 R7
+ 0x80000000, // 0328 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: write_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_Root_write_attribute, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 4, /* 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(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(int),
+ /* K7 */ be_nested_str_weak(int64),
+ /* K8 */ be_nested_str_weak(session),
+ /* K9 */ be_nested_str_weak(__breadcrumb),
+ /* K10 */ be_nested_str_weak(status),
+ /* K11 */ be_nested_str_weak(CONSTRAINT_ERROR),
+ /* K12 */ be_const_int(1),
+ /* K13 */ be_nested_str_weak(INVALID_ACTION),
+ }),
+ be_str_weak(write_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[98]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0xB8160200, // 0001 GETNGBL R5 K1
+ 0x88140B02, // 0002 GETMBR R5 R5 K2
+ 0x88180503, // 0003 GETMBR R6 R2 K3
+ 0x881C0504, // 0004 GETMBR R7 R2 K4
+ 0x5422002F, // 0005 LDINT R8 48
+ 0x1C200C08, // 0006 EQ R8 R6 R8
+ 0x78220016, // 0007 JMPF R8 #001F
+ 0x1C200F05, // 0008 EQ R8 R7 K5
+ 0x78220013, // 0009 JMPF R8 #001E
+ 0x60200004, // 000A GETGBL R8 G4
+ 0x5C240600, // 000B MOVE R9 R3
+ 0x7C200200, // 000C CALL R8 1
+ 0x1C201106, // 000D EQ R8 R8 K6
+ 0x74220004, // 000E JMPT R8 #0014
+ 0x6020000F, // 000F GETGBL R8 G15
+ 0x5C240600, // 0010 MOVE R9 R3
+ 0xB82A0E00, // 0011 GETNGBL R10 K7
+ 0x7C200400, // 0012 CALL R8 2
+ 0x78220004, // 0013 JMPF R8 #0019
+ 0x88200308, // 0014 GETMBR R8 R1 K8
+ 0x90221203, // 0015 SETMBR R8 K9 R3
+ 0x50200200, // 0016 LDBOOL R8 1 0
+ 0x80041000, // 0017 RET 1 R8
+ 0x70020004, // 0018 JMP #001E
+ 0xB8220200, // 0019 GETNGBL R8 K1
+ 0x8820110B, // 001A GETMBR R8 R8 K11
+ 0x900A1408, // 001B SETMBR R2 K10 R8
+ 0x50200000, // 001C LDBOOL R8 0 0
+ 0x80041000, // 001D RET 1 R8
+ 0x70020041, // 001E JMP #0061
+ 0x5422001E, // 001F LDINT R8 31
+ 0x1C200C08, // 0020 EQ R8 R6 R8
+ 0x78220004, // 0021 JMPF R8 #0027
+ 0x1C200F05, // 0022 EQ R8 R7 K5
+ 0x78220001, // 0023 JMPF R8 #0026
+ 0x50200200, // 0024 LDBOOL R8 1 0
+ 0x80041000, // 0025 RET 1 R8
+ 0x70020039, // 0026 JMP #0061
+ 0x54220027, // 0027 LDINT R8 40
+ 0x1C200C08, // 0028 EQ R8 R6 R8
+ 0x7822000B, // 0029 JMPF R8 #0036
+ 0x54220004, // 002A LDINT R8 5
+ 0x1C200E08, // 002B EQ R8 R7 R8
+ 0x78220002, // 002C JMPF R8 #0030
+ 0x50200200, // 002D LDBOOL R8 1 0
+ 0x80041000, // 002E RET 1 R8
+ 0x70020004, // 002F JMP #0035
+ 0x54220005, // 0030 LDINT R8 6
+ 0x1C200E08, // 0031 EQ R8 R7 R8
+ 0x78220001, // 0032 JMPF R8 #0035
+ 0x50200200, // 0033 LDBOOL R8 1 0
+ 0x80041000, // 0034 RET 1 R8
+ 0x7002002A, // 0035 JMP #0061
+ 0x54220029, // 0036 LDINT R8 42
+ 0x1C200C08, // 0037 EQ R8 R6 R8
+ 0x78220004, // 0038 JMPF R8 #003E
+ 0x1C200F05, // 0039 EQ R8 R7 K5
+ 0x78220001, // 003A JMPF R8 #003D
+ 0x50200200, // 003B LDBOOL R8 1 0
+ 0x80041000, // 003C RET 1 R8
+ 0x70020022, // 003D JMP #0061
+ 0x5422002A, // 003E LDINT R8 43
+ 0x1C200C08, // 003F EQ R8 R6 R8
+ 0x78220007, // 0040 JMPF R8 #0049
+ 0x1C200F05, // 0041 EQ R8 R7 K5
+ 0x78220004, // 0042 JMPF R8 #0048
+ 0xB8220200, // 0043 GETNGBL R8 K1
+ 0x8820110B, // 0044 GETMBR R8 R8 K11
+ 0x900A1408, // 0045 SETMBR R2 K10 R8
+ 0x50200000, // 0046 LDBOOL R8 0 0
+ 0x80041000, // 0047 RET 1 R8
+ 0x70020017, // 0048 JMP #0061
+ 0x5422002B, // 0049 LDINT R8 44
+ 0x1C200C08, // 004A EQ R8 R6 R8
+ 0x78220009, // 004B JMPF R8 #0056
+ 0x1C200F05, // 004C EQ R8 R7 K5
+ 0x78220002, // 004D JMPF R8 #0051
+ 0x50200200, // 004E LDBOOL R8 1 0
+ 0x80041000, // 004F RET 1 R8
+ 0x70020003, // 0050 JMP #0055
+ 0x1C200F0C, // 0051 EQ R8 R7 K12
+ 0x78220001, // 0052 JMPF R8 #0055
+ 0x50200200, // 0053 LDBOOL R8 1 0
+ 0x80041000, // 0054 RET 1 R8
+ 0x7002000A, // 0055 JMP #0061
+ 0x54220030, // 0056 LDINT R8 49
+ 0x1C200C08, // 0057 EQ R8 R6 R8
+ 0x78220007, // 0058 JMPF R8 #0061
+ 0x54220003, // 0059 LDINT R8 4
+ 0x1C200E08, // 005A EQ R8 R7 R8
+ 0x78220004, // 005B JMPF R8 #0061
+ 0xB8220200, // 005C GETNGBL R8 K1
+ 0x8820110D, // 005D GETMBR R8 R8 K13
+ 0x900A1408, // 005E SETMBR R2 K10 R8
+ 0x50200000, // 005F LDBOOL R8 0 0
+ 0x80041000, // 0060 RET 1 R8
+ 0x80000000, // 0061 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_Root_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* 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(init),
+ /* K1 */ be_nested_str_weak(endpoints),
+ /* K2 */ be_nested_str_weak(ENDPOINTS),
+ /* K3 */ be_nested_str_weak(clusters),
+ /* K4 */ be_nested_str_weak(CLUSTERS),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080500, // 0003 GETMET R2 R2 K0
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x88080102, // 0006 GETMBR R2 R0 K2
+ 0x90020202, // 0007 SETMBR R0 K1 R2
+ 0x88080104, // 0008 GETMBR R2 R0 K4
+ 0x90020602, // 0009 SETMBR R0 K3 R2
+ 0x80000000, // 000A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
/********************************************************************
** Solidified function: invoke_request
********************************************************************/
-be_local_closure(Matter_Plugin_core_invoke_request, /* name */
+be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
be_nested_proto(
29, /* nstack */
4, /* argc */
@@ -29,7 +1120,7 @@ be_local_closure(Matter_Plugin_core_invoke_request, /* name */
/* K6 */ be_const_int(0),
/* K7 */ be_nested_str_weak(findsubval),
/* K8 */ be_const_int(1),
- /* K9 */ be_nested_str_weak(breadcrumb),
+ /* K9 */ be_nested_str_weak(__breadcrumb),
/* K10 */ be_nested_str_weak(Matter_TLV_struct),
/* K11 */ be_nested_str_weak(add_TLV),
/* K12 */ be_nested_str_weak(U1),
@@ -599,952 +1690,30 @@ be_local_closure(Matter_Plugin_core_invoke_request, /* name */
/********************************************************************
-** Solidified function: read_attribute
-********************************************************************/
-be_local_closure(Matter_Plugin_core_read_attribute, /* name */
- be_nested_proto(
- 24, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[82]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TLV),
- /* K3 */ be_nested_str_weak(cluster),
- /* K4 */ be_nested_str_weak(attribute),
- /* K5 */ be_const_int(0),
- /* K6 */ be_nested_str_weak(create_TLV),
- /* K7 */ be_nested_str_weak(U8),
- /* K8 */ be_nested_str_weak(session),
- /* K9 */ be_nested_str_weak(breadcrumb),
- /* K10 */ be_const_int(1),
- /* K11 */ be_nested_str_weak(Matter_TLV_struct),
- /* K12 */ be_nested_str_weak(add_TLV),
- /* K13 */ be_nested_str_weak(U2),
- /* K14 */ be_const_int(2),
- /* K15 */ be_nested_str_weak(U1),
- /* K16 */ be_const_int(3),
- /* K17 */ be_nested_str_weak(BOOL),
- /* K18 */ be_nested_str_weak(Matter_TLV_array),
- /* K19 */ be_nested_str_weak(tasmota),
- /* K20 */ be_nested_str_weak(eth),
- /* K21 */ be_nested_str_weak(up),
- /* K22 */ be_nested_str_weak(add_struct),
- /* K23 */ be_nested_str_weak(UTF1),
- /* K24 */ be_nested_str_weak(ethernet),
- /* K25 */ be_nested_str_weak(NULL),
- /* K26 */ be_nested_str_weak(fromhex),
- /* K27 */ be_nested_str_weak(replace),
- /* K28 */ be_nested_str_weak(find),
- /* K29 */ be_nested_str_weak(mac),
- /* K30 */ be_nested_str_weak(),
- /* K31 */ be_nested_str_weak(_X3A),
- /* K32 */ be_nested_str_weak(B1),
- /* K33 */ be_nested_str_weak(add_array),
- /* K34 */ be_nested_str_weak(get_ip_bytes),
- /* K35 */ be_nested_str_weak(ip),
- /* K36 */ be_nested_str_weak(ip6local),
- /* K37 */ be_nested_str_weak(ip6),
- /* K38 */ be_nested_str_weak(wifi),
- /* K39 */ be_nested_str_weak(cmd),
- /* K40 */ be_nested_str_weak(Status_X201),
- /* K41 */ be_nested_str_weak(StatusPRM),
- /* K42 */ be_nested_str_weak(BootCount),
- /* K43 */ be_nested_str_weak(U4),
- /* K44 */ be_nested_str_weak(Status_X2011),
- /* K45 */ be_nested_str_weak(StatusSTS),
- /* K46 */ be_nested_str_weak(UptimeSec),
- /* K47 */ be_nested_str_weak(int64),
- /* K48 */ be_nested_str_weak(rtc),
- /* K49 */ be_nested_str_weak(utc),
- /* K50 */ be_const_int(1000000),
- /* K51 */ be_nested_str_weak(local),
- /* K52 */ be_nested_str_weak(device),
- /* K53 */ be_nested_str_weak(sessions),
- /* K54 */ be_nested_str_weak(sessions_active),
- /* K55 */ be_nested_str_weak(B2),
- /* K56 */ be_nested_str_weak(noc),
- /* K57 */ be_nested_str_weak(icac),
- /* K58 */ be_nested_str_weak(stop_iteration),
- /* K59 */ be_nested_str_weak(parse),
- /* K60 */ be_nested_str_weak(get_ca),
- /* K61 */ be_nested_str_weak(findsubval),
- /* K62 */ be_nested_str_weak(admin_vendor),
- /* K63 */ be_nested_str_weak(fabric),
- /* K64 */ be_nested_str_weak(deviceid),
- /* K65 */ be_nested_str_weak(fabric_label),
- /* K66 */ be_nested_str_weak(Tasmota),
- /* K67 */ be_nested_str_weak(vendorid),
- /* K68 */ be_nested_str_weak(DeviceName),
- /* K69 */ be_nested_str_weak(FriendlyName),
- /* K70 */ be_nested_str_weak(FriendlyName1),
- /* K71 */ be_nested_str_weak(XX),
- /* K72 */ be_nested_str_weak(Status_X202),
- /* K73 */ be_nested_str_weak(StatusFWR),
- /* K74 */ be_nested_str_weak(Hardware),
- /* K75 */ be_nested_str_weak(Version),
- /* K76 */ be_nested_str_weak(locale),
- /* K77 */ be_nested_str_weak(Matter_TLV_list),
- /* K78 */ be_nested_str_weak(get_cluster_list),
- /* K79 */ be_nested_str_weak(get_active_endpoints),
- /* K80 */ be_nested_str_weak(status),
- /* K81 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
- }),
- be_str_weak(read_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[736]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x88100902, // 0002 GETMBR R4 R4 K2
- 0x88140503, // 0003 GETMBR R5 R2 K3
- 0x88180504, // 0004 GETMBR R6 R2 K4
- 0x541E002F, // 0005 LDINT R7 48
- 0x1C1C0A07, // 0006 EQ R7 R5 R7
- 0x781E0031, // 0007 JMPF R7 #003A
- 0x1C1C0D05, // 0008 EQ R7 R6 K5
- 0x781E0006, // 0009 JMPF R7 #0011
- 0x8C1C0906, // 000A GETMET R7 R4 K6
- 0x88240907, // 000B GETMBR R9 R4 K7
- 0x88280308, // 000C GETMBR R10 R1 K8
- 0x88281509, // 000D GETMBR R10 R10 K9
- 0x7C1C0600, // 000E CALL R7 3
- 0x80040E00, // 000F RET 1 R7
- 0x70020027, // 0010 JMP #0039
- 0x1C1C0D0A, // 0011 EQ R7 R6 K10
- 0x781E000D, // 0012 JMPF R7 #0021
- 0x8C1C090B, // 0013 GETMET R7 R4 K11
- 0x7C1C0200, // 0014 CALL R7 1
- 0x8C200F0C, // 0015 GETMET R8 R7 K12
- 0x58280005, // 0016 LDCONST R10 K5
- 0x882C090D, // 0017 GETMBR R11 R4 K13
- 0x5432003B, // 0018 LDINT R12 60
- 0x7C200800, // 0019 CALL R8 4
- 0x8C200F0C, // 001A GETMET R8 R7 K12
- 0x5828000A, // 001B LDCONST R10 K10
- 0x882C090D, // 001C GETMBR R11 R4 K13
- 0x54320383, // 001D LDINT R12 900
- 0x7C200800, // 001E CALL R8 4
- 0x80040E00, // 001F RET 1 R7
- 0x70020017, // 0020 JMP #0039
- 0x1C1C0D0E, // 0021 EQ R7 R6 K14
- 0x781E0005, // 0022 JMPF R7 #0029
- 0x8C1C0906, // 0023 GETMET R7 R4 K6
- 0x8824090F, // 0024 GETMBR R9 R4 K15
- 0x5828000E, // 0025 LDCONST R10 K14
- 0x7C1C0600, // 0026 CALL R7 3
- 0x80040E00, // 0027 RET 1 R7
- 0x7002000F, // 0028 JMP #0039
- 0x1C1C0D10, // 0029 EQ R7 R6 K16
- 0x781E0005, // 002A JMPF R7 #0031
- 0x8C1C0906, // 002B GETMET R7 R4 K6
- 0x8824090F, // 002C GETMBR R9 R4 K15
- 0x5828000E, // 002D LDCONST R10 K14
- 0x7C1C0600, // 002E CALL R7 3
- 0x80040E00, // 002F RET 1 R7
- 0x70020007, // 0030 JMP #0039
- 0x541E0003, // 0031 LDINT R7 4
- 0x1C1C0C07, // 0032 EQ R7 R6 R7
- 0x781E0004, // 0033 JMPF R7 #0039
- 0x8C1C0906, // 0034 GETMET R7 R4 K6
- 0x88240911, // 0035 GETMBR R9 R4 K17
- 0x50280000, // 0036 LDBOOL R10 0 0
- 0x7C1C0600, // 0037 CALL R7 3
- 0x80040E00, // 0038 RET 1 R7
- 0x700202A4, // 0039 JMP #02DF
- 0x541E0031, // 003A LDINT R7 50
- 0x1C1C0A07, // 003B EQ R7 R5 R7
- 0x781E0000, // 003C JMPF R7 #003E
- 0x700202A0, // 003D JMP #02DF
- 0x541E0032, // 003E LDINT R7 51
- 0x1C1C0A07, // 003F EQ R7 R5 R7
- 0x781E00DA, // 0040 JMPF R7 #011C
- 0x1C1C0D05, // 0041 EQ R7 R6 K5
- 0x781E00B5, // 0042 JMPF R7 #00F9
- 0x8C1C0912, // 0043 GETMET R7 R4 K18
- 0x7C1C0200, // 0044 CALL R7 1
- 0xB8222600, // 0045 GETNGBL R8 K19
- 0x8C201114, // 0046 GETMET R8 R8 K20
- 0x7C200200, // 0047 CALL R8 1
- 0x94241115, // 0048 GETIDX R9 R8 K21
- 0x78260053, // 0049 JMPF R9 #009E
- 0x8C240F16, // 004A GETMET R9 R7 K22
- 0x4C2C0000, // 004B LDNIL R11
- 0x7C240400, // 004C CALL R9 2
- 0x8C28130C, // 004D GETMET R10 R9 K12
- 0x58300005, // 004E LDCONST R12 K5
- 0x88340917, // 004F GETMBR R13 R4 K23
- 0x58380018, // 0050 LDCONST R14 K24
- 0x7C280800, // 0051 CALL R10 4
- 0x8C28130C, // 0052 GETMET R10 R9 K12
- 0x5830000A, // 0053 LDCONST R12 K10
- 0x88340911, // 0054 GETMBR R13 R4 K17
- 0x5838000A, // 0055 LDCONST R14 K10
- 0x7C280800, // 0056 CALL R10 4
- 0x8C28130C, // 0057 GETMET R10 R9 K12
- 0x5830000E, // 0058 LDCONST R12 K14
- 0x88340911, // 0059 GETMBR R13 R4 K17
- 0x5838000A, // 005A LDCONST R14 K10
- 0x7C280800, // 005B CALL R10 4
- 0x8C28130C, // 005C GETMET R10 R9 K12
- 0x58300010, // 005D LDCONST R12 K16
- 0x88340919, // 005E GETMBR R13 R4 K25
- 0x4C380000, // 005F LDNIL R14
- 0x7C280800, // 0060 CALL R10 4
- 0x60280015, // 0061 GETGBL R10 G21
- 0x7C280000, // 0062 CALL R10 0
- 0x8C28151A, // 0063 GETMET R10 R10 K26
- 0x8C30071B, // 0064 GETMET R12 R3 K27
- 0x8C38111C, // 0065 GETMET R14 R8 K28
- 0x5840001D, // 0066 LDCONST R16 K29
- 0x5844001E, // 0067 LDCONST R17 K30
- 0x7C380600, // 0068 CALL R14 3
- 0x583C001F, // 0069 LDCONST R15 K31
- 0x5840001E, // 006A LDCONST R16 K30
- 0x7C300800, // 006B CALL R12 4
- 0x7C280400, // 006C CALL R10 2
- 0x8C2C130C, // 006D GETMET R11 R9 K12
- 0x54360003, // 006E LDINT R13 4
- 0x88380920, // 006F GETMBR R14 R4 K32
- 0x5C3C1400, // 0070 MOVE R15 R10
- 0x7C2C0800, // 0071 CALL R11 4
- 0x8C2C1321, // 0072 GETMET R11 R9 K33
- 0x54360004, // 0073 LDINT R13 5
- 0x7C2C0400, // 0074 CALL R11 2
- 0x8C30170C, // 0075 GETMET R12 R11 K12
- 0x4C380000, // 0076 LDNIL R14
- 0x883C0920, // 0077 GETMBR R15 R4 K32
- 0xB8420200, // 0078 GETNGBL R16 K1
- 0x8C402122, // 0079 GETMET R16 R16 K34
- 0x8C48111C, // 007A GETMET R18 R8 K28
- 0x58500023, // 007B LDCONST R20 K35
- 0x5854001E, // 007C LDCONST R21 K30
- 0x7C480600, // 007D CALL R18 3
- 0x7C400400, // 007E CALL R16 2
- 0x7C300800, // 007F CALL R12 4
- 0x8C301321, // 0080 GETMET R12 R9 K33
- 0x543A0005, // 0081 LDINT R14 6
- 0x7C300400, // 0082 CALL R12 2
- 0x8C34190C, // 0083 GETMET R13 R12 K12
- 0x4C3C0000, // 0084 LDNIL R15
- 0x88400920, // 0085 GETMBR R16 R4 K32
- 0xB8460200, // 0086 GETNGBL R17 K1
- 0x8C442322, // 0087 GETMET R17 R17 K34
- 0x8C4C111C, // 0088 GETMET R19 R8 K28
- 0x58540024, // 0089 LDCONST R21 K36
- 0x5858001E, // 008A LDCONST R22 K30
- 0x7C4C0600, // 008B CALL R19 3
- 0x7C440400, // 008C CALL R17 2
- 0x7C340800, // 008D CALL R13 4
- 0x8C34190C, // 008E GETMET R13 R12 K12
- 0x4C3C0000, // 008F LDNIL R15
- 0x88400920, // 0090 GETMBR R16 R4 K32
- 0xB8460200, // 0091 GETNGBL R17 K1
- 0x8C442322, // 0092 GETMET R17 R17 K34
- 0x8C4C111C, // 0093 GETMET R19 R8 K28
- 0x58540025, // 0094 LDCONST R21 K37
- 0x5858001E, // 0095 LDCONST R22 K30
- 0x7C4C0600, // 0096 CALL R19 3
- 0x7C440400, // 0097 CALL R17 2
- 0x7C340800, // 0098 CALL R13 4
- 0x8C34130C, // 0099 GETMET R13 R9 K12
- 0x543E0006, // 009A LDINT R15 7
- 0x8840090F, // 009B GETMBR R16 R4 K15
- 0x5844000E, // 009C LDCONST R17 K14
- 0x7C340800, // 009D CALL R13 4
- 0xB8262600, // 009E GETNGBL R9 K19
- 0x8C241326, // 009F GETMET R9 R9 K38
- 0x7C240200, // 00A0 CALL R9 1
- 0x94281315, // 00A1 GETIDX R10 R9 K21
- 0x782A0053, // 00A2 JMPF R10 #00F7
- 0x8C280F16, // 00A3 GETMET R10 R7 K22
- 0x4C300000, // 00A4 LDNIL R12
- 0x7C280400, // 00A5 CALL R10 2
- 0x8C2C150C, // 00A6 GETMET R11 R10 K12
- 0x58340005, // 00A7 LDCONST R13 K5
- 0x88380917, // 00A8 GETMBR R14 R4 K23
- 0x583C0026, // 00A9 LDCONST R15 K38
- 0x7C2C0800, // 00AA CALL R11 4
- 0x8C2C150C, // 00AB GETMET R11 R10 K12
- 0x5834000A, // 00AC LDCONST R13 K10
- 0x88380911, // 00AD GETMBR R14 R4 K17
- 0x583C000A, // 00AE LDCONST R15 K10
- 0x7C2C0800, // 00AF CALL R11 4
- 0x8C2C150C, // 00B0 GETMET R11 R10 K12
- 0x5834000E, // 00B1 LDCONST R13 K14
- 0x88380911, // 00B2 GETMBR R14 R4 K17
- 0x583C000A, // 00B3 LDCONST R15 K10
- 0x7C2C0800, // 00B4 CALL R11 4
- 0x8C2C150C, // 00B5 GETMET R11 R10 K12
- 0x58340010, // 00B6 LDCONST R13 K16
- 0x88380919, // 00B7 GETMBR R14 R4 K25
- 0x4C3C0000, // 00B8 LDNIL R15
- 0x7C2C0800, // 00B9 CALL R11 4
- 0x602C0015, // 00BA GETGBL R11 G21
- 0x7C2C0000, // 00BB CALL R11 0
- 0x8C2C171A, // 00BC GETMET R11 R11 K26
- 0x8C34071B, // 00BD GETMET R13 R3 K27
- 0x8C3C131C, // 00BE GETMET R15 R9 K28
- 0x5844001D, // 00BF LDCONST R17 K29
- 0x5848001E, // 00C0 LDCONST R18 K30
- 0x7C3C0600, // 00C1 CALL R15 3
- 0x5840001F, // 00C2 LDCONST R16 K31
- 0x5844001E, // 00C3 LDCONST R17 K30
- 0x7C340800, // 00C4 CALL R13 4
- 0x7C2C0400, // 00C5 CALL R11 2
- 0x8C30150C, // 00C6 GETMET R12 R10 K12
- 0x543A0003, // 00C7 LDINT R14 4
- 0x883C0920, // 00C8 GETMBR R15 R4 K32
- 0x5C401600, // 00C9 MOVE R16 R11
- 0x7C300800, // 00CA CALL R12 4
- 0x8C301521, // 00CB GETMET R12 R10 K33
- 0x543A0004, // 00CC LDINT R14 5
- 0x7C300400, // 00CD CALL R12 2
- 0x8C34190C, // 00CE GETMET R13 R12 K12
- 0x4C3C0000, // 00CF LDNIL R15
- 0x88400920, // 00D0 GETMBR R16 R4 K32
- 0xB8460200, // 00D1 GETNGBL R17 K1
- 0x8C442322, // 00D2 GETMET R17 R17 K34
- 0x8C4C131C, // 00D3 GETMET R19 R9 K28
- 0x58540023, // 00D4 LDCONST R21 K35
- 0x5858001E, // 00D5 LDCONST R22 K30
- 0x7C4C0600, // 00D6 CALL R19 3
- 0x7C440400, // 00D7 CALL R17 2
- 0x7C340800, // 00D8 CALL R13 4
- 0x8C341521, // 00D9 GETMET R13 R10 K33
- 0x543E0005, // 00DA LDINT R15 6
- 0x7C340400, // 00DB CALL R13 2
- 0x8C381B0C, // 00DC GETMET R14 R13 K12
- 0x4C400000, // 00DD LDNIL R16
- 0x88440920, // 00DE GETMBR R17 R4 K32
- 0xB84A0200, // 00DF GETNGBL R18 K1
- 0x8C482522, // 00E0 GETMET R18 R18 K34
- 0x8C50131C, // 00E1 GETMET R20 R9 K28
- 0x58580024, // 00E2 LDCONST R22 K36
- 0x585C001E, // 00E3 LDCONST R23 K30
- 0x7C500600, // 00E4 CALL R20 3
- 0x7C480400, // 00E5 CALL R18 2
- 0x7C380800, // 00E6 CALL R14 4
- 0x8C381B0C, // 00E7 GETMET R14 R13 K12
- 0x4C400000, // 00E8 LDNIL R16
- 0x88440920, // 00E9 GETMBR R17 R4 K32
- 0xB84A0200, // 00EA GETNGBL R18 K1
- 0x8C482522, // 00EB GETMET R18 R18 K34
- 0x8C50131C, // 00EC GETMET R20 R9 K28
- 0x58580025, // 00ED LDCONST R22 K37
- 0x585C001E, // 00EE LDCONST R23 K30
- 0x7C500600, // 00EF CALL R20 3
- 0x7C480400, // 00F0 CALL R18 2
- 0x7C380800, // 00F1 CALL R14 4
- 0x8C38150C, // 00F2 GETMET R14 R10 K12
- 0x54420006, // 00F3 LDINT R16 7
- 0x8844090F, // 00F4 GETMBR R17 R4 K15
- 0x5848000A, // 00F5 LDCONST R18 K10
- 0x7C380800, // 00F6 CALL R14 4
- 0x80040E00, // 00F7 RET 1 R7
- 0x70020021, // 00F8 JMP #011B
- 0x1C1C0D0A, // 00F9 EQ R7 R6 K10
- 0x781E000A, // 00FA JMPF R7 #0106
- 0x8C1C0906, // 00FB GETMET R7 R4 K6
- 0x8824090D, // 00FC GETMBR R9 R4 K13
- 0xB82A2600, // 00FD GETNGBL R10 K19
- 0x8C281527, // 00FE GETMET R10 R10 K39
- 0x58300028, // 00FF LDCONST R12 K40
- 0x7C280400, // 0100 CALL R10 2
- 0x94281529, // 0101 GETIDX R10 R10 K41
- 0x9428152A, // 0102 GETIDX R10 R10 K42
- 0x7C1C0600, // 0103 CALL R7 3
- 0x80040E00, // 0104 RET 1 R7
- 0x70020014, // 0105 JMP #011B
- 0x1C1C0D0E, // 0106 EQ R7 R6 K14
- 0x781E000A, // 0107 JMPF R7 #0113
- 0x8C1C0906, // 0108 GETMET R7 R4 K6
- 0x8824092B, // 0109 GETMBR R9 R4 K43
- 0xB82A2600, // 010A GETNGBL R10 K19
- 0x8C281527, // 010B GETMET R10 R10 K39
- 0x5830002C, // 010C LDCONST R12 K44
- 0x7C280400, // 010D CALL R10 2
- 0x9428152D, // 010E GETIDX R10 R10 K45
- 0x9428152E, // 010F GETIDX R10 R10 K46
- 0x7C1C0600, // 0110 CALL R7 3
- 0x80040E00, // 0111 RET 1 R7
- 0x70020007, // 0112 JMP #011B
- 0x541E0007, // 0113 LDINT R7 8
- 0x1C1C0C07, // 0114 EQ R7 R6 R7
- 0x781E0004, // 0115 JMPF R7 #011B
- 0x8C1C0906, // 0116 GETMET R7 R4 K6
- 0x88240911, // 0117 GETMBR R9 R4 K17
- 0x50280000, // 0118 LDBOOL R10 0 0
- 0x7C1C0600, // 0119 CALL R7 3
- 0x80040E00, // 011A RET 1 R7
- 0x700201C2, // 011B JMP #02DF
- 0x541E0033, // 011C LDINT R7 52
- 0x1C1C0A07, // 011D EQ R7 R5 R7
- 0x781E0000, // 011E JMPF R7 #0120
- 0x700201BE, // 011F JMP #02DF
- 0x541E0037, // 0120 LDINT R7 56
- 0x1C1C0A07, // 0121 EQ R7 R5 R7
- 0x781E002C, // 0122 JMPF R7 #0150
- 0x1C1C0D05, // 0123 EQ R7 R6 K5
- 0x781E000F, // 0124 JMPF R7 #0135
- 0xB81E5E00, // 0125 GETNGBL R7 K47
- 0xB8222600, // 0126 GETNGBL R8 K19
- 0x8C201130, // 0127 GETMET R8 R8 K48
- 0x7C200200, // 0128 CALL R8 1
- 0x94201131, // 0129 GETIDX R8 R8 K49
- 0x7C1C0200, // 012A CALL R7 1
- 0xB8225E00, // 012B GETNGBL R8 K47
- 0x58240032, // 012C LDCONST R9 K50
- 0x7C200200, // 012D CALL R8 1
- 0x081C0E08, // 012E MUL R7 R7 R8
- 0x8C200906, // 012F GETMET R8 R4 K6
- 0x88280907, // 0130 GETMBR R10 R4 K7
- 0x5C2C0E00, // 0131 MOVE R11 R7
- 0x7C200600, // 0132 CALL R8 3
- 0x80041000, // 0133 RET 1 R8
- 0x70020019, // 0134 JMP #014F
- 0x1C1C0D0A, // 0135 EQ R7 R6 K10
- 0x781E0005, // 0136 JMPF R7 #013D
- 0x8C1C0906, // 0137 GETMET R7 R4 K6
- 0x8824090F, // 0138 GETMBR R9 R4 K15
- 0x58280010, // 0139 LDCONST R10 K16
- 0x7C1C0600, // 013A CALL R7 3
- 0x80040E00, // 013B RET 1 R7
- 0x70020011, // 013C JMP #014F
- 0x541E0006, // 013D LDINT R7 7
- 0x1C1C0C07, // 013E EQ R7 R6 R7
- 0x781E000E, // 013F JMPF R7 #014F
- 0xB81E5E00, // 0140 GETNGBL R7 K47
- 0xB8222600, // 0141 GETNGBL R8 K19
- 0x8C201130, // 0142 GETMET R8 R8 K48
- 0x7C200200, // 0143 CALL R8 1
- 0x94201133, // 0144 GETIDX R8 R8 K51
- 0x7C1C0200, // 0145 CALL R7 1
- 0xB8225E00, // 0146 GETNGBL R8 K47
- 0x58240032, // 0147 LDCONST R9 K50
- 0x7C200200, // 0148 CALL R8 1
- 0x081C0E08, // 0149 MUL R7 R7 R8
- 0x8C200906, // 014A GETMET R8 R4 K6
- 0x88280907, // 014B GETMBR R10 R4 K7
- 0x5C2C0E00, // 014C MOVE R11 R7
- 0x7C200600, // 014D CALL R8 3
- 0x80041000, // 014E RET 1 R8
- 0x7002018E, // 014F JMP #02DF
- 0x541E003D, // 0150 LDINT R7 62
- 0x1C1C0A07, // 0151 EQ R7 R5 R7
- 0x781E0082, // 0152 JMPF R7 #01D6
- 0x1C1C0D05, // 0153 EQ R7 R6 K5
- 0x781E001D, // 0154 JMPF R7 #0173
- 0x8C1C0912, // 0155 GETMET R7 R4 K18
- 0x7C1C0200, // 0156 CALL R7 1
- 0x60200010, // 0157 GETGBL R8 G16
- 0x88240134, // 0158 GETMBR R9 R0 K52
- 0x88241335, // 0159 GETMBR R9 R9 K53
- 0x8C241336, // 015A GETMET R9 R9 K54
- 0x7C240200, // 015B CALL R9 1
- 0x7C200200, // 015C CALL R8 1
- 0xA802000F, // 015D EXBLK 0 #016E
- 0x5C241000, // 015E MOVE R9 R8
- 0x7C240000, // 015F CALL R9 0
- 0x8C280F16, // 0160 GETMET R10 R7 K22
- 0x4C300000, // 0161 LDNIL R12
- 0x7C280400, // 0162 CALL R10 2
- 0x8C2C150C, // 0163 GETMET R11 R10 K12
- 0x5834000A, // 0164 LDCONST R13 K10
- 0x88380937, // 0165 GETMBR R14 R4 K55
- 0x883C1338, // 0166 GETMBR R15 R9 K56
- 0x7C2C0800, // 0167 CALL R11 4
- 0x8C2C150C, // 0168 GETMET R11 R10 K12
- 0x5834000E, // 0169 LDCONST R13 K14
- 0x88380937, // 016A GETMBR R14 R4 K55
- 0x883C1339, // 016B GETMBR R15 R9 K57
- 0x7C2C0800, // 016C CALL R11 4
- 0x7001FFEF, // 016D JMP #015E
- 0x5820003A, // 016E LDCONST R8 K58
- 0xAC200200, // 016F CATCH R8 1 0
- 0xB0080000, // 0170 RAISE 2 R0 R0
- 0x80040E00, // 0171 RET 1 R7
- 0x70020061, // 0172 JMP #01D5
- 0x1C1C0D0A, // 0173 EQ R7 R6 K10
- 0x781E0032, // 0174 JMPF R7 #01A8
- 0x8C1C0912, // 0175 GETMET R7 R4 K18
- 0x7C1C0200, // 0176 CALL R7 1
- 0x60200010, // 0177 GETGBL R8 G16
- 0x88240134, // 0178 GETMBR R9 R0 K52
- 0x88241335, // 0179 GETMBR R9 R9 K53
- 0x8C241336, // 017A GETMET R9 R9 K54
- 0x7C240200, // 017B CALL R9 1
- 0x7C200200, // 017C CALL R8 1
- 0xA8020024, // 017D EXBLK 0 #01A3
- 0x5C241000, // 017E MOVE R9 R8
- 0x7C240000, // 017F CALL R9 0
- 0x8C28093B, // 0180 GETMET R10 R4 K59
- 0x8C30133C, // 0181 GETMET R12 R9 K60
- 0x7C300200, // 0182 CALL R12 1
- 0x7C280400, // 0183 CALL R10 2
- 0x8C2C0F16, // 0184 GETMET R11 R7 K22
- 0x4C340000, // 0185 LDNIL R13
- 0x7C2C0400, // 0186 CALL R11 2
- 0x8C30170C, // 0187 GETMET R12 R11 K12
- 0x5838000A, // 0188 LDCONST R14 K10
- 0x883C0937, // 0189 GETMBR R15 R4 K55
- 0x8C40153D, // 018A GETMET R16 R10 K61
- 0x544A0008, // 018B LDINT R18 9
- 0x7C400400, // 018C CALL R16 2
- 0x7C300800, // 018D CALL R12 4
- 0x8C30170C, // 018E GETMET R12 R11 K12
- 0x5838000E, // 018F LDCONST R14 K14
- 0x883C090D, // 0190 GETMBR R15 R4 K13
- 0x8840133E, // 0191 GETMBR R16 R9 K62
- 0x7C300800, // 0192 CALL R12 4
- 0x8C30170C, // 0193 GETMET R12 R11 K12
- 0x58380010, // 0194 LDCONST R14 K16
- 0x883C0907, // 0195 GETMBR R15 R4 K7
- 0x8840133F, // 0196 GETMBR R16 R9 K63
- 0x7C300800, // 0197 CALL R12 4
- 0x8C30170C, // 0198 GETMET R12 R11 K12
- 0x543A0003, // 0199 LDINT R14 4
- 0x883C0907, // 019A GETMBR R15 R4 K7
- 0x88401340, // 019B GETMBR R16 R9 K64
- 0x7C300800, // 019C CALL R12 4
- 0x8C30170C, // 019D GETMET R12 R11 K12
- 0x543A0004, // 019E LDINT R14 5
- 0x883C0917, // 019F GETMBR R15 R4 K23
- 0x88401341, // 01A0 GETMBR R16 R9 K65
- 0x7C300800, // 01A1 CALL R12 4
- 0x7001FFDA, // 01A2 JMP #017E
- 0x5820003A, // 01A3 LDCONST R8 K58
- 0xAC200200, // 01A4 CATCH R8 1 0
- 0xB0080000, // 01A5 RAISE 2 R0 R0
- 0x80040E00, // 01A6 RET 1 R7
- 0x7002002C, // 01A7 JMP #01D5
- 0x1C1C0D0E, // 01A8 EQ R7 R6 K14
- 0x781E0005, // 01A9 JMPF R7 #01B0
- 0x8C1C0906, // 01AA GETMET R7 R4 K6
- 0x8824090F, // 01AB GETMBR R9 R4 K15
- 0x542A0004, // 01AC LDINT R10 5
- 0x7C1C0600, // 01AD CALL R7 3
- 0x80040E00, // 01AE RET 1 R7
- 0x70020024, // 01AF JMP #01D5
- 0x1C1C0D10, // 01B0 EQ R7 R6 K16
- 0x781E000B, // 01B1 JMPF R7 #01BE
- 0x881C0134, // 01B2 GETMBR R7 R0 K52
- 0x881C0F35, // 01B3 GETMBR R7 R7 K53
- 0x8C1C0F36, // 01B4 GETMET R7 R7 K54
- 0x7C1C0200, // 01B5 CALL R7 1
- 0x8C200906, // 01B6 GETMET R8 R4 K6
- 0x8828090F, // 01B7 GETMBR R10 R4 K15
- 0x602C000C, // 01B8 GETGBL R11 G12
- 0x5C300E00, // 01B9 MOVE R12 R7
- 0x7C2C0200, // 01BA CALL R11 1
- 0x7C200600, // 01BB CALL R8 3
- 0x80041000, // 01BC RET 1 R8
- 0x70020016, // 01BD JMP #01D5
- 0x541E0003, // 01BE LDINT R7 4
- 0x1C1C0C07, // 01BF EQ R7 R6 R7
- 0x781E0000, // 01C0 JMPF R7 #01C2
- 0x70020012, // 01C1 JMP #01D5
- 0x541E0004, // 01C2 LDINT R7 5
- 0x1C1C0C07, // 01C3 EQ R7 R6 R7
- 0x781E000F, // 01C4 JMPF R7 #01D5
- 0x881C0134, // 01C5 GETMBR R7 R0 K52
- 0x881C0F35, // 01C6 GETMBR R7 R7 K53
- 0x8C1C0F36, // 01C7 GETMET R7 R7 K54
- 0x7C1C0200, // 01C8 CALL R7 1
- 0x8C200F1C, // 01C9 GETMET R8 R7 K28
- 0x88280308, // 01CA GETMBR R10 R1 K8
- 0x7C200400, // 01CB CALL R8 2
- 0x4C240000, // 01CC LDNIL R9
- 0x1C241009, // 01CD EQ R9 R8 R9
- 0x78260000, // 01CE JMPF R9 #01D0
- 0x58200005, // 01CF LDCONST R8 K5
- 0x8C240906, // 01D0 GETMET R9 R4 K6
- 0x882C090F, // 01D1 GETMBR R11 R4 K15
- 0x5C301000, // 01D2 MOVE R12 R8
- 0x7C240600, // 01D3 CALL R9 3
- 0x80041200, // 01D4 RET 1 R9
- 0x70020108, // 01D5 JMP #02DF
- 0x541E003B, // 01D6 LDINT R7 60
- 0x1C1C0A07, // 01D7 EQ R7 R5 R7
- 0x781E0000, // 01D8 JMPF R7 #01DA
- 0x70020104, // 01D9 JMP #02DF
- 0x541E0027, // 01DA LDINT R7 40
- 0x1C1C0A07, // 01DB EQ R7 R5 R7
- 0x781E0071, // 01DC JMPF R7 #024F
- 0x1C1C0D05, // 01DD EQ R7 R6 K5
- 0x781E0005, // 01DE JMPF R7 #01E5
- 0x8C1C0906, // 01DF GETMET R7 R4 K6
- 0x8824090D, // 01E0 GETMBR R9 R4 K13
- 0x58280005, // 01E1 LDCONST R10 K5
- 0x7C1C0600, // 01E2 CALL R7 3
- 0x80040E00, // 01E3 RET 1 R7
- 0x70020068, // 01E4 JMP #024E
- 0x1C1C0D0A, // 01E5 EQ R7 R6 K10
- 0x781E0005, // 01E6 JMPF R7 #01ED
- 0x8C1C0906, // 01E7 GETMET R7 R4 K6
- 0x88240917, // 01E8 GETMBR R9 R4 K23
- 0x58280042, // 01E9 LDCONST R10 K66
- 0x7C1C0600, // 01EA CALL R7 3
- 0x80040E00, // 01EB RET 1 R7
- 0x70020060, // 01EC JMP #024E
- 0x1C1C0D0E, // 01ED EQ R7 R6 K14
- 0x781E0006, // 01EE JMPF R7 #01F6
- 0x8C1C0906, // 01EF GETMET R7 R4 K6
- 0x8824090D, // 01F0 GETMBR R9 R4 K13
- 0x88280134, // 01F1 GETMBR R10 R0 K52
- 0x88281543, // 01F2 GETMBR R10 R10 K67
- 0x7C1C0600, // 01F3 CALL R7 3
- 0x80040E00, // 01F4 RET 1 R7
- 0x70020057, // 01F5 JMP #024E
- 0x1C1C0D10, // 01F6 EQ R7 R6 K16
- 0x781E0009, // 01F7 JMPF R7 #0202
- 0x8C1C0906, // 01F8 GETMET R7 R4 K6
- 0x88240917, // 01F9 GETMBR R9 R4 K23
- 0xB82A2600, // 01FA GETNGBL R10 K19
- 0x8C281527, // 01FB GETMET R10 R10 K39
- 0x58300044, // 01FC LDCONST R12 K68
- 0x7C280400, // 01FD CALL R10 2
- 0x94281544, // 01FE GETIDX R10 R10 K68
- 0x7C1C0600, // 01FF CALL R7 3
- 0x80040E00, // 0200 RET 1 R7
- 0x7002004B, // 0201 JMP #024E
- 0x541E0003, // 0202 LDINT R7 4
- 0x1C1C0C07, // 0203 EQ R7 R6 R7
- 0x781E0005, // 0204 JMPF R7 #020B
- 0x8C1C0906, // 0205 GETMET R7 R4 K6
- 0x8824090D, // 0206 GETMBR R9 R4 K13
- 0x542A7FFF, // 0207 LDINT R10 32768
- 0x7C1C0600, // 0208 CALL R7 3
- 0x80040E00, // 0209 RET 1 R7
- 0x70020042, // 020A JMP #024E
- 0x541E0004, // 020B LDINT R7 5
- 0x1C1C0C07, // 020C EQ R7 R6 R7
- 0x781E0009, // 020D JMPF R7 #0218
- 0x8C1C0906, // 020E GETMET R7 R4 K6
- 0x88240917, // 020F GETMBR R9 R4 K23
- 0xB82A2600, // 0210 GETNGBL R10 K19
- 0x8C281527, // 0211 GETMET R10 R10 K39
- 0x58300045, // 0212 LDCONST R12 K69
- 0x7C280400, // 0213 CALL R10 2
- 0x94281546, // 0214 GETIDX R10 R10 K70
- 0x7C1C0600, // 0215 CALL R7 3
- 0x80040E00, // 0216 RET 1 R7
- 0x70020035, // 0217 JMP #024E
- 0x541E0005, // 0218 LDINT R7 6
- 0x1C1C0C07, // 0219 EQ R7 R6 R7
- 0x781E0005, // 021A JMPF R7 #0221
- 0x8C1C0906, // 021B GETMET R7 R4 K6
- 0x88240917, // 021C GETMBR R9 R4 K23
- 0x58280047, // 021D LDCONST R10 K71
- 0x7C1C0600, // 021E CALL R7 3
- 0x80040E00, // 021F RET 1 R7
- 0x7002002C, // 0220 JMP #024E
- 0x541E0006, // 0221 LDINT R7 7
- 0x1C1C0C07, // 0222 EQ R7 R6 R7
- 0x781E0005, // 0223 JMPF R7 #022A
- 0x8C1C0906, // 0224 GETMET R7 R4 K6
- 0x8824090D, // 0225 GETMBR R9 R4 K13
- 0x58280005, // 0226 LDCONST R10 K5
- 0x7C1C0600, // 0227 CALL R7 3
- 0x80040E00, // 0228 RET 1 R7
- 0x70020023, // 0229 JMP #024E
- 0x541E0007, // 022A LDINT R7 8
- 0x1C1C0C07, // 022B EQ R7 R6 R7
- 0x781E000A, // 022C JMPF R7 #0238
- 0x8C1C0906, // 022D GETMET R7 R4 K6
- 0x88240917, // 022E GETMBR R9 R4 K23
- 0xB82A2600, // 022F GETNGBL R10 K19
- 0x8C281527, // 0230 GETMET R10 R10 K39
- 0x58300048, // 0231 LDCONST R12 K72
- 0x7C280400, // 0232 CALL R10 2
- 0x94281549, // 0233 GETIDX R10 R10 K73
- 0x9428154A, // 0234 GETIDX R10 R10 K74
- 0x7C1C0600, // 0235 CALL R7 3
- 0x80040E00, // 0236 RET 1 R7
- 0x70020015, // 0237 JMP #024E
- 0x541E0008, // 0238 LDINT R7 9
- 0x1C1C0C07, // 0239 EQ R7 R6 R7
- 0x781E0005, // 023A JMPF R7 #0241
- 0x8C1C0906, // 023B GETMET R7 R4 K6
- 0x8824090D, // 023C GETMBR R9 R4 K13
- 0x58280005, // 023D LDCONST R10 K5
- 0x7C1C0600, // 023E CALL R7 3
- 0x80040E00, // 023F RET 1 R7
- 0x7002000C, // 0240 JMP #024E
- 0x541E0009, // 0241 LDINT R7 10
- 0x1C1C0C07, // 0242 EQ R7 R6 R7
- 0x781E0009, // 0243 JMPF R7 #024E
- 0x8C1C0906, // 0244 GETMET R7 R4 K6
- 0x88240917, // 0245 GETMBR R9 R4 K23
- 0xB82A2600, // 0246 GETNGBL R10 K19
- 0x8C281527, // 0247 GETMET R10 R10 K39
- 0x58300048, // 0248 LDCONST R12 K72
- 0x7C280400, // 0249 CALL R10 2
- 0x94281549, // 024A GETIDX R10 R10 K73
- 0x9428154B, // 024B GETIDX R10 R10 K75
- 0x7C1C0600, // 024C CALL R7 3
- 0x80040E00, // 024D RET 1 R7
- 0x7002008F, // 024E JMP #02DF
- 0x541E003E, // 024F LDINT R7 63
- 0x1C1C0A07, // 0250 EQ R7 R5 R7
- 0x781E0000, // 0251 JMPF R7 #0253
- 0x7002008B, // 0252 JMP #02DF
- 0x541E002A, // 0253 LDINT R7 43
- 0x1C1C0A07, // 0254 EQ R7 R5 R7
- 0x781E0016, // 0255 JMPF R7 #026D
- 0x1C1C0D05, // 0256 EQ R7 R6 K5
- 0x781E0007, // 0257 JMPF R7 #0260
- 0x8C1C0906, // 0258 GETMET R7 R4 K6
- 0x88240917, // 0259 GETMBR R9 R4 K23
- 0xB82A2600, // 025A GETNGBL R10 K19
- 0x8C28154C, // 025B GETMET R10 R10 K76
- 0x7C280200, // 025C CALL R10 1
- 0x7C1C0600, // 025D CALL R7 3
- 0x80040E00, // 025E RET 1 R7
- 0x7002000B, // 025F JMP #026C
- 0x1C1C0D0A, // 0260 EQ R7 R6 K10
- 0x781E0009, // 0261 JMPF R7 #026C
- 0x8C1C094D, // 0262 GETMET R7 R4 K77
- 0x7C1C0200, // 0263 CALL R7 1
- 0x8C200F0C, // 0264 GETMET R8 R7 K12
- 0x4C280000, // 0265 LDNIL R10
- 0x882C0917, // 0266 GETMBR R11 R4 K23
- 0xB8322600, // 0267 GETNGBL R12 K19
- 0x8C30194C, // 0268 GETMET R12 R12 K76
- 0x7C300200, // 0269 CALL R12 1
- 0x7C200800, // 026A CALL R8 4
- 0x80040E00, // 026B RET 1 R7
- 0x70020071, // 026C JMP #02DF
- 0x541E002B, // 026D LDINT R7 44
- 0x1C1C0A07, // 026E EQ R7 R5 R7
- 0x781E001C, // 026F JMPF R7 #028D
- 0x1C1C0D05, // 0270 EQ R7 R6 K5
- 0x781E0005, // 0271 JMPF R7 #0278
- 0x8C1C0906, // 0272 GETMET R7 R4 K6
- 0x8824090F, // 0273 GETMBR R9 R4 K15
- 0x5828000A, // 0274 LDCONST R10 K10
- 0x7C1C0600, // 0275 CALL R7 3
- 0x80040E00, // 0276 RET 1 R7
- 0x70020013, // 0277 JMP #028C
- 0x1C1C0D0A, // 0278 EQ R7 R6 K10
- 0x781E0005, // 0279 JMPF R7 #0280
- 0x8C1C0906, // 027A GETMET R7 R4 K6
- 0x8824090F, // 027B GETMBR R9 R4 K15
- 0x542A0003, // 027C LDINT R10 4
- 0x7C1C0600, // 027D CALL R7 3
- 0x80040E00, // 027E RET 1 R7
- 0x7002000B, // 027F JMP #028C
- 0x1C1C0D0E, // 0280 EQ R7 R6 K14
- 0x781E0009, // 0281 JMPF R7 #028C
- 0x8C1C094D, // 0282 GETMET R7 R4 K77
- 0x7C1C0200, // 0283 CALL R7 1
- 0x8C200F0C, // 0284 GETMET R8 R7 K12
- 0x4C280000, // 0285 LDNIL R10
- 0x8C2C0906, // 0286 GETMET R11 R4 K6
- 0x8834090F, // 0287 GETMBR R13 R4 K15
- 0x543A0003, // 0288 LDINT R14 4
- 0x7C2C0600, // 0289 CALL R11 3
- 0x7C200600, // 028A CALL R8 3
- 0x80040E00, // 028B RET 1 R7
- 0x70020051, // 028C JMP #02DF
- 0x541E0030, // 028D LDINT R7 49
- 0x1C1C0A07, // 028E EQ R7 R5 R7
- 0x781E0010, // 028F JMPF R7 #02A1
- 0x1C1C0D10, // 0290 EQ R7 R6 K16
- 0x781E0005, // 0291 JMPF R7 #0298
- 0x8C1C0906, // 0292 GETMET R7 R4 K6
- 0x8824090F, // 0293 GETMBR R9 R4 K15
- 0x542A001D, // 0294 LDINT R10 30
- 0x7C1C0600, // 0295 CALL R7 3
- 0x80040E00, // 0296 RET 1 R7
- 0x70020007, // 0297 JMP #02A0
- 0x541EFFFB, // 0298 LDINT R7 65532
- 0x1C1C0C07, // 0299 EQ R7 R6 R7
- 0x781E0004, // 029A JMPF R7 #02A0
- 0x8C1C0906, // 029B GETMET R7 R4 K6
- 0x8824092B, // 029C GETMBR R9 R4 K43
- 0x58280005, // 029D LDCONST R10 K5
- 0x7C1C0600, // 029E CALL R7 3
- 0x80040E00, // 029F RET 1 R7
- 0x7002003D, // 02A0 JMP #02DF
- 0x541E001C, // 02A1 LDINT R7 29
- 0x1C1C0A07, // 02A2 EQ R7 R5 R7
- 0x781E0037, // 02A3 JMPF R7 #02DC
- 0x1C1C0D05, // 02A4 EQ R7 R6 K5
- 0x781E0000, // 02A5 JMPF R7 #02A7
- 0x70020033, // 02A6 JMP #02DB
- 0x1C1C0D0A, // 02A7 EQ R7 R6 K10
- 0x781E0013, // 02A8 JMPF R7 #02BD
- 0x8C1C0912, // 02A9 GETMET R7 R4 K18
- 0x7C1C0200, // 02AA CALL R7 1
- 0x60200010, // 02AB GETGBL R8 G16
- 0x8C24014E, // 02AC GETMET R9 R0 K78
- 0x7C240200, // 02AD CALL R9 1
- 0x7C200200, // 02AE CALL R8 1
- 0xA8020007, // 02AF EXBLK 0 #02B8
- 0x5C241000, // 02B0 MOVE R9 R8
- 0x7C240000, // 02B1 CALL R9 0
- 0x8C280F0C, // 02B2 GETMET R10 R7 K12
- 0x4C300000, // 02B3 LDNIL R12
- 0x8834092B, // 02B4 GETMBR R13 R4 K43
- 0x5C381200, // 02B5 MOVE R14 R9
- 0x7C280800, // 02B6 CALL R10 4
- 0x7001FFF7, // 02B7 JMP #02B0
- 0x5820003A, // 02B8 LDCONST R8 K58
- 0xAC200200, // 02B9 CATCH R8 1 0
- 0xB0080000, // 02BA RAISE 2 R0 R0
- 0x80040E00, // 02BB RET 1 R7
- 0x7002001D, // 02BC JMP #02DB
- 0x1C1C0D0E, // 02BD EQ R7 R6 K14
- 0x781E0003, // 02BE JMPF R7 #02C3
- 0x8C1C0912, // 02BF GETMET R7 R4 K18
- 0x7C1C0200, // 02C0 CALL R7 1
- 0x80040E00, // 02C1 RET 1 R7
- 0x70020017, // 02C2 JMP #02DB
- 0x1C1C0D10, // 02C3 EQ R7 R6 K16
- 0x781E0015, // 02C4 JMPF R7 #02DB
- 0x881C0134, // 02C5 GETMBR R7 R0 K52
- 0x8C1C0F4F, // 02C6 GETMET R7 R7 K79
- 0x50240200, // 02C7 LDBOOL R9 1 0
- 0x7C1C0400, // 02C8 CALL R7 2
- 0x8C200912, // 02C9 GETMET R8 R4 K18
- 0x7C200200, // 02CA CALL R8 1
- 0x60240010, // 02CB GETGBL R9 G16
- 0x5C280E00, // 02CC MOVE R10 R7
- 0x7C240200, // 02CD CALL R9 1
- 0xA8020007, // 02CE EXBLK 0 #02D7
- 0x5C281200, // 02CF MOVE R10 R9
- 0x7C280000, // 02D0 CALL R10 0
- 0x8C2C110C, // 02D1 GETMET R11 R8 K12
- 0x4C340000, // 02D2 LDNIL R13
- 0x8838090D, // 02D3 GETMBR R14 R4 K13
- 0x5C3C1400, // 02D4 MOVE R15 R10
- 0x7C2C0800, // 02D5 CALL R11 4
- 0x7001FFF7, // 02D6 JMP #02CF
- 0x5824003A, // 02D7 LDCONST R9 K58
- 0xAC240200, // 02D8 CATCH R9 1 0
- 0xB0080000, // 02D9 RAISE 2 R0 R0
- 0x80041000, // 02DA RET 1 R8
- 0x70020002, // 02DB JMP #02DF
- 0xB81E0200, // 02DC GETNGBL R7 K1
- 0x881C0F51, // 02DD GETMBR R7 R7 K81
- 0x900AA007, // 02DE SETMBR R2 K80 R7
- 0x80000000, // 02DF RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_Plugin_core_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* 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(init),
- /* K1 */ be_nested_str_weak(endpoints),
- /* K2 */ be_nested_str_weak(ENDPOINTS),
- /* K3 */ be_nested_str_weak(clusters),
- /* K4 */ be_nested_str_weak(CLUSTERS),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080500, // 0003 GETMET R2 R2 K0
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x88080102, // 0006 GETMBR R2 R0 K2
- 0x90020202, // 0007 SETMBR R0 K1 R2
- 0x88080104, // 0008 GETMBR R2 R0 K4
- 0x90020602, // 0009 SETMBR R0 K3 R2
- 0x80000000, // 000A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: Matter_Plugin_core
+** Solidified class: Matter_Plugin_Root
********************************************************************/
extern const bclass be_class_Matter_Plugin;
-be_local_class(Matter_Plugin_core,
+be_local_class(Matter_Plugin_Root,
0,
&be_class_Matter_Plugin,
- be_nested_map(5,
+ be_nested_map(7,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(ENDPOINTS, 3), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- })) ) } )) },
- { be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_core_read_attribute_closure) },
- { be_const_key_weak(invoke_request, 1), be_const_closure(Matter_Plugin_core_invoke_request_closure) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_core_init_closure) },
- { be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(13,
+ { be_const_key_weak(read_attribute, 1), be_const_closure(Matter_Plugin_Root_read_attribute_closure) },
+ { be_const_key_weak(invoke_request, 2), be_const_closure(Matter_Plugin_Root_invoke_request_closure) },
+ { be_const_key_weak(CLUSTERS, 6), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(15,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_int(52, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ { be_const_key_int(60, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(0,
( (struct bvalue*) &(const bvalue[]) {
})) ) } )) },
- { be_const_key_int(40, -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(4),
- be_const_int(5),
- be_const_int(6),
- be_const_int(7),
- be_const_int(8),
- be_const_int(9),
- })) ) } )) },
- { be_const_key_int(43, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(2,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- })) ) } )) },
- { be_const_key_int(29, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ { be_const_key_int(31, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(4,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
- be_const_int(1),
be_const_int(2),
be_const_int(3),
- })) ) } )) },
- { be_const_key_int(56, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(3,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(7),
- })) ) } )) },
- { be_const_key_int(44, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(3,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
+ be_const_int(4),
})) ) } )) },
{ be_const_key_int(62, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(6,
@@ -1556,15 +1725,7 @@ be_local_class(Matter_Plugin_core,
be_const_int(4),
be_const_int(5),
})) ) } )) },
- { be_const_key_int(50, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(60, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(48, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ { be_const_key_int(48, 9), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(5,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
@@ -1573,13 +1734,14 @@ be_local_class(Matter_Plugin_core,
be_const_int(3),
be_const_int(4),
})) ) } )) },
- { be_const_key_int(49, 6), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(2,
+ { be_const_key_int(49, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(3),
+ be_const_int(4),
be_const_int(65532),
})) ) } )) },
- { be_const_key_int(63, 7), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ { be_const_key_int(50, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(0,
( (struct bvalue*) &(const bvalue[]) {
})) ) } )) },
@@ -1591,15 +1753,86 @@ be_local_class(Matter_Plugin_core,
be_const_int(2),
be_const_int(8),
})) ) } )) },
+ { be_const_key_int(52, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(0,
+ ( (struct bvalue*) &(const bvalue[]) {
+ })) ) } )) },
+ { be_const_key_int(29, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(4,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(3),
+ })) ) } )) },
+ { be_const_key_int(63, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(0,
+ ( (struct bvalue*) &(const bvalue[]) {
+ })) ) } )) },
+ { be_const_key_int(40, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(11,
+ ( (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(6),
+ be_const_int(7),
+ be_const_int(8),
+ be_const_int(9),
+ be_const_int(18),
+ })) ) } )) },
+ { be_const_key_int(56, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(7),
+ })) ) } )) },
+ { be_const_key_int(42, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(4,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(3),
+ })) ) } )) },
+ { be_const_key_int(43, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(2,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ })) ) } )) },
+ { be_const_key_int(44, 8), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ })) ) } )) },
+ })) ) } )) },
+ { be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(1,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(22),
+ })) ) } )) },
+ { be_const_key_weak(write_attribute, -1), be_const_closure(Matter_Plugin_Root_write_attribute_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Root_init_closure) },
+ { be_const_key_weak(ENDPOINTS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(1,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
})) ) } )) },
})),
- be_str_weak(Matter_Plugin_core)
+ be_str_weak(Matter_Plugin_Root)
);
/*******************************************************************/
-void be_load_Matter_Plugin_core_class(bvm *vm) {
- be_pushntvclass(vm, &be_class_Matter_Plugin_core);
- be_setglobal(vm, "Matter_Plugin_core");
+void be_load_Matter_Plugin_Root_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Plugin_Root);
+ be_setglobal(vm, "Matter_Plugin_Root");
be_pop(vm, 1);
}
/********************************************************************/
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
index 45fcfe981..6c610d038 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
@@ -7,12 +7,12 @@
extern const bclass be_class_Matter_Session;
/********************************************************************
-** Solidified function: save
+** Solidified function: set_fabric_label
********************************************************************/
-be_local_closure(Matter_Session_save, /* name */
+be_local_closure(Matter_Session_set_fabric_label, /* name */
be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
+ 4, /* nstack */
+ 2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -20,16 +20,158 @@ be_local_closure(Matter_Session_save, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(__store),
- /* K1 */ be_nested_str_weak(save),
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(fabric_label),
}),
- be_str_weak(save),
+ be_str_weak(set_fabric_label),
&be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
+ ( &(const binstruction[ 7]) { /* code */
+ 0x60080004, // 0000 GETGBL R2 G4
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x1C080500, // 0003 EQ R2 R2 K0
+ 0x780A0000, // 0004 JMPF R2 #0006
+ 0x90020201, // 0005 SETMBR R0 K1 R1
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_no_expiration
+********************************************************************/
+be_local_closure(Matter_Session_set_no_expiration, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(expiration),
+ }),
+ be_str_weak(set_no_expiration),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x4C040000, // 0000 LDNIL R1
+ 0x90020001, // 0001 SETMBR R0 K0 R1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_mode
+********************************************************************/
+be_local_closure(Matter_Session_set_mode, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(mode),
+ }),
+ be_str_weak(set_mode),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_expire_time
+********************************************************************/
+be_local_closure(Matter_Session_set_expire_time, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(expiration),
+ }),
+ be_str_weak(set_expire_time),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080009, // 0000 GETGBL R2 G9
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x90020002, // 0003 SETMBR R0 K0 R2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_i2r
+********************************************************************/
+be_local_closure(Matter_Session_get_i2r, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(i2rkey),
+ }),
+ be_str_weak(get_i2r),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x80000000, // 0003 RET 0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ipk_epoch_key
+********************************************************************/
+be_local_closure(Matter_Session_get_ipk_epoch_key, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(ipk_epoch_key),
+ }),
+ be_str_weak(get_ipk_epoch_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
})
)
);
@@ -80,11 +222,38 @@ be_local_closure(Matter_Session_set_expire_in_seconds, /* name */
/********************************************************************
-** Solidified function: get_i2r_privacy
+** Solidified function: set_ipk_epoch_key
********************************************************************/
-be_local_closure(Matter_Session_get_i2r_privacy, /* name */
+be_local_closure(Matter_Session_set_ipk_epoch_key, /* name */
be_nested_proto(
- 9, /* nstack */
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(ipk_epoch_key),
+ }),
+ be_str_weak(set_ipk_epoch_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_deviceid
+********************************************************************/
+be_local_closure(Matter_Session_get_deviceid, /* name */
+ be_nested_proto(
+ 2, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -92,40 +261,14 @@ be_local_closure(Matter_Session_get_i2r_privacy, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(_i2r_privacy),
- /* K1 */ be_nested_str_weak(crypto),
- /* K2 */ be_nested_str_weak(HKDF_SHA256),
- /* K3 */ be_nested_str_weak(derive),
- /* K4 */ be_nested_str_weak(get_i2r),
- /* K5 */ be_nested_str_weak(fromstring),
- /* K6 */ be_nested_str_weak(PrivacyKey),
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(deviceid),
}),
- be_str_weak(get_i2r_privacy),
+ be_str_weak(get_deviceid),
&be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
+ ( &(const binstruction[ 2]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
- 0x4C080000, // 0001 LDNIL R2
- 0x1C040202, // 0002 EQ R1 R1 R2
- 0x7806000F, // 0003 JMPF R1 #0014
- 0xA4060200, // 0004 IMPORT R1 K1
- 0x8C080302, // 0005 GETMET R2 R1 K2
- 0x7C080200, // 0006 CALL R2 1
- 0x8C080503, // 0007 GETMET R2 R2 K3
- 0x8C100104, // 0008 GETMET R4 R0 K4
- 0x7C100200, // 0009 CALL R4 1
- 0x60140015, // 000A GETGBL R5 G21
- 0x7C140000, // 000B CALL R5 0
- 0x60180015, // 000C GETGBL R6 G21
- 0x7C180000, // 000D CALL R6 0
- 0x8C180D05, // 000E GETMET R6 R6 K5
- 0x58200006, // 000F LDCONST R8 K6
- 0x7C180400, // 0010 CALL R6 2
- 0x541E000F, // 0011 LDINT R7 16
- 0x7C080A00, // 0012 CALL R2 5
- 0x90020002, // 0013 SETMBR R0 K0 R2
- 0x88040100, // 0014 GETMBR R1 R0 K0
- 0x80040200, // 0015 RET 1 R1
+ 0x80040200, // 0001 RET 1 R1
})
)
);
@@ -177,9 +320,9 @@ be_local_closure(Matter_Session_has_expired, /* name */
/********************************************************************
-** Solidified function: get_icac
+** Solidified function: get_r2i
********************************************************************/
-be_local_closure(Matter_Session_get_icac, /* name */
+be_local_closure(Matter_Session_get_r2i, /* name */
be_nested_proto(
2, /* nstack */
1, /* argc */
@@ -190,9 +333,9 @@ be_local_closure(Matter_Session_get_icac, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(icac),
+ /* K0 */ be_nested_str_weak(r2ikey),
}),
- be_str_weak(get_icac),
+ be_str_weak(get_r2i),
&be_const_str_solidified,
( &(const binstruction[ 2]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
@@ -204,9 +347,9 @@ be_local_closure(Matter_Session_get_icac, /* name */
/********************************************************************
-** Solidified function: get_deviceid
+** Solidified function: get_fabric
********************************************************************/
-be_local_closure(Matter_Session_get_deviceid, /* name */
+be_local_closure(Matter_Session_get_fabric, /* name */
be_nested_proto(
2, /* nstack */
1, /* argc */
@@ -217,9 +360,9 @@ be_local_closure(Matter_Session_get_deviceid, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(deviceid),
+ /* K0 */ be_nested_str_weak(fabric),
}),
- be_str_weak(get_deviceid),
+ be_str_weak(get_fabric),
&be_const_str_solidified,
( &(const binstruction[ 2]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
@@ -231,291 +374,35 @@ be_local_closure(Matter_Session_get_deviceid, /* name */
/********************************************************************
-** Solidified function: get_noc
+** Solidified function: set_keys
********************************************************************/
-be_local_closure(Matter_Session_get_noc, /* name */
+be_local_closure(Matter_Session_set_keys, /* name */
be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
+ 6, /* nstack */
+ 5, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(noc),
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(i2rkey),
+ /* K1 */ be_nested_str_weak(_i2r_privacy),
+ /* K2 */ be_nested_str_weak(r2ikey),
+ /* K3 */ be_nested_str_weak(attestation_challenge),
+ /* K4 */ be_nested_str_weak(session_timestamp),
}),
- be_str_weak(get_noc),
+ be_str_weak(set_keys),
&be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: close
-********************************************************************/
-be_local_closure(Matter_Session_close, /* name */
- be_nested_proto(
- 9, /* 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_nested_str_weak(_persist),
- /* K1 */ be_nested_str_weak(local_session_id),
- /* K2 */ be_nested_str_weak(_future_local_session_id),
- /* K3 */ be_nested_str_weak(initiator_session_id),
- /* K4 */ be_nested_str_weak(_future_initiator_session_id),
- /* K5 */ be_nested_str_weak(source_node_id),
- /* K6 */ be_nested_str_weak(counter_rcv),
- /* K7 */ be_nested_str_weak(reset),
- /* K8 */ be_nested_str_weak(counter_snd),
- /* K9 */ be_nested_str_weak(i2rkey),
- /* K10 */ be_nested_str_weak(_i2r_privacy),
- /* K11 */ be_nested_str_weak(r2ikey),
- /* K12 */ be_nested_str_weak(attestation_challenge),
- /* K13 */ be_nested_str_weak(fabric_label),
- /* K14 */ be_nested_str_weak(),
- /* K15 */ be_nested_str_weak(introspect),
- /* K16 */ be_nested_str_weak(members),
- /* K17 */ be_nested_str_weak(get),
- /* K18 */ be_nested_str_weak(function),
- /* K19 */ be_nested_str_weak(instance),
- /* K20 */ be_const_int(0),
- /* K21 */ be_nested_str_weak(_),
- /* K22 */ be_const_int(1),
- /* K23 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(close),
- &be_const_str_solidified,
- ( &(const binstruction[59]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x88080102, // 0001 GETMBR R2 R0 K2
- 0x90020202, // 0002 SETMBR R0 K1 R2
- 0x88080104, // 0003 GETMBR R2 R0 K4
- 0x90020602, // 0004 SETMBR R0 K3 R2
- 0x4C080000, // 0005 LDNIL R2
- 0x90020A02, // 0006 SETMBR R0 K5 R2
- 0x88080106, // 0007 GETMBR R2 R0 K6
- 0x8C080507, // 0008 GETMET R2 R2 K7
- 0x7C080200, // 0009 CALL R2 1
- 0x88080108, // 000A GETMBR R2 R0 K8
- 0x8C080507, // 000B GETMET R2 R2 K7
- 0x7C080200, // 000C CALL R2 1
- 0x4C080000, // 000D LDNIL R2
- 0x90021202, // 000E SETMBR R0 K9 R2
- 0x4C080000, // 000F LDNIL R2
- 0x90021402, // 0010 SETMBR R0 K10 R2
- 0x4C080000, // 0011 LDNIL R2
- 0x90021602, // 0012 SETMBR R0 K11 R2
- 0x4C080000, // 0013 LDNIL R2
- 0x90021802, // 0014 SETMBR R0 K12 R2
- 0x90021B0E, // 0015 SETMBR R0 K13 K14
- 0xA40A1E00, // 0016 IMPORT R2 K15
- 0x600C0010, // 0017 GETGBL R3 G16
- 0x8C100510, // 0018 GETMET R4 R2 K16
- 0x5C180000, // 0019 MOVE R6 R0
- 0x7C100400, // 001A CALL R4 2
- 0x7C0C0200, // 001B CALL R3 1
- 0xA8020018, // 001C EXBLK 0 #0036
- 0x5C100600, // 001D MOVE R4 R3
- 0x7C100000, // 001E CALL R4 0
- 0x8C140511, // 001F GETMET R5 R2 K17
- 0x5C1C0000, // 0020 MOVE R7 R0
- 0x5C200800, // 0021 MOVE R8 R4
- 0x7C140600, // 0022 CALL R5 3
- 0x60180004, // 0023 GETGBL R6 G4
- 0x5C1C0A00, // 0024 MOVE R7 R5
- 0x7C180200, // 0025 CALL R6 1
- 0x20180D12, // 0026 NE R6 R6 K18
- 0x781A000C, // 0027 JMPF R6 #0035
- 0x60180004, // 0028 GETGBL R6 G4
- 0x5C1C0A00, // 0029 MOVE R7 R5
- 0x7C180200, // 002A CALL R6 1
- 0x20180D13, // 002B NE R6 R6 K19
- 0x781A0007, // 002C JMPF R6 #0035
- 0x94180914, // 002D GETIDX R6 R4 K20
- 0x1C180D15, // 002E EQ R6 R6 K21
- 0x781A0004, // 002F JMPF R6 #0035
- 0x94180916, // 0030 GETIDX R6 R4 K22
- 0x20180D15, // 0031 NE R6 R6 K21
- 0x781A0001, // 0032 JMPF R6 #0035
- 0x4C180000, // 0033 LDNIL R6
- 0x90000806, // 0034 SETMBR R0 R4 R6
- 0x7001FFE6, // 0035 JMP #001D
- 0x580C0017, // 0036 LDCONST R3 K23
- 0xAC0C0200, // 0037 CATCH R3 1 0
- 0xB0080000, // 0038 RAISE 2 R0 R0
- 0x90020001, // 0039 SETMBR R0 K0 R1
- 0x80000000, // 003A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: fromjson
-********************************************************************/
-be_local_closure(Matter_Session_fromjson, /* name */
- be_nested_proto(
- 16, /* nstack */
- 2, /* argc */
- 4, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[19]) { /* constants */
- /* K0 */ be_const_class(be_class_Matter_Session),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(introspect),
- /* K3 */ be_nested_str_weak(matter),
- /* K4 */ be_nested_str_weak(Session),
- /* K5 */ be_nested_str_weak(keys),
- /* K6 */ be_nested_str_weak(counter_rcv),
- /* K7 */ be_nested_str_weak(reset),
- /* K8 */ be_nested_str_weak(counter_snd),
- /* K9 */ be_nested_str_weak(find),
- /* K10 */ be_nested_str_weak(0x),
- /* K11 */ be_const_int(0),
- /* K12 */ be_nested_str_weak(set),
- /* K13 */ be_nested_str_weak(fromhex),
- /* K14 */ be_const_int(2),
- /* K15 */ be_const_int(2147483647),
- /* K16 */ be_nested_str_weak(_X24_X24),
- /* K17 */ be_nested_str_weak(fromb64),
- /* K18 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(fromjson),
- &be_const_str_solidified,
- ( &(const binstruction[88]) { /* code */
- 0x58080000, // 0000 LDCONST R2 K0
- 0xA40E0200, // 0001 IMPORT R3 K1
- 0xA4120400, // 0002 IMPORT R4 K2
- 0xB8160600, // 0003 GETNGBL R5 K3
- 0x8C140B04, // 0004 GETMET R5 R5 K4
- 0x5C1C0000, // 0005 MOVE R7 R0
- 0x7C140400, // 0006 CALL R5 2
- 0x60180010, // 0007 GETGBL R6 G16
- 0x8C1C0305, // 0008 GETMET R7 R1 K5
- 0x7C1C0200, // 0009 CALL R7 1
- 0x7C180200, // 000A CALL R6 1
- 0xA8020047, // 000B EXBLK 0 #0054
- 0x5C1C0C00, // 000C MOVE R7 R6
- 0x7C1C0000, // 000D CALL R7 0
- 0x94200207, // 000E GETIDX R8 R1 R7
- 0x1C240F06, // 000F EQ R9 R7 K6
- 0x78260006, // 0010 JMPF R9 #0018
- 0x88240B06, // 0011 GETMBR R9 R5 K6
- 0x8C241307, // 0012 GETMET R9 R9 K7
- 0x602C0009, // 0013 GETGBL R11 G9
- 0x5C301000, // 0014 MOVE R12 R8
- 0x7C2C0200, // 0015 CALL R11 1
- 0x7C240400, // 0016 CALL R9 2
- 0x7002003A, // 0017 JMP #0053
- 0x1C240F08, // 0018 EQ R9 R7 K8
- 0x78260006, // 0019 JMPF R9 #0021
- 0x88240B08, // 001A GETMBR R9 R5 K8
- 0x8C241307, // 001B GETMET R9 R9 K7
- 0x602C0009, // 001C GETGBL R11 G9
- 0x5C301000, // 001D MOVE R12 R8
- 0x7C2C0200, // 001E CALL R11 1
- 0x7C240400, // 001F CALL R9 2
- 0x70020031, // 0020 JMP #0053
- 0x60240004, // 0021 GETGBL R9 G4
- 0x5C281000, // 0022 MOVE R10 R8
- 0x7C240200, // 0023 CALL R9 1
- 0x1C241301, // 0024 EQ R9 R9 K1
- 0x78260027, // 0025 JMPF R9 #004E
- 0x8C240709, // 0026 GETMET R9 R3 K9
- 0x5C2C1000, // 0027 MOVE R11 R8
- 0x5830000A, // 0028 LDCONST R12 K10
- 0x7C240600, // 0029 CALL R9 3
- 0x1C24130B, // 002A EQ R9 R9 K11
- 0x7826000A, // 002B JMPF R9 #0037
- 0x8C24090C, // 002C GETMET R9 R4 K12
- 0x5C2C0A00, // 002D MOVE R11 R5
- 0x5C300E00, // 002E MOVE R12 R7
- 0x60340015, // 002F GETGBL R13 G21
- 0x7C340000, // 0030 CALL R13 0
- 0x8C341B0D, // 0031 GETMET R13 R13 K13
- 0x403E1D0F, // 0032 CONNECT R15 K14 K15
- 0x943C100F, // 0033 GETIDX R15 R8 R15
- 0x7C340400, // 0034 CALL R13 2
- 0x7C240800, // 0035 CALL R9 4
- 0x70020015, // 0036 JMP #004D
- 0x8C240709, // 0037 GETMET R9 R3 K9
- 0x5C2C1000, // 0038 MOVE R11 R8
- 0x58300010, // 0039 LDCONST R12 K16
- 0x7C240600, // 003A CALL R9 3
- 0x1C24130B, // 003B EQ R9 R9 K11
- 0x7826000A, // 003C JMPF R9 #0048
- 0x8C24090C, // 003D GETMET R9 R4 K12
- 0x5C2C0A00, // 003E MOVE R11 R5
- 0x5C300E00, // 003F MOVE R12 R7
- 0x60340015, // 0040 GETGBL R13 G21
- 0x7C340000, // 0041 CALL R13 0
- 0x8C341B11, // 0042 GETMET R13 R13 K17
- 0x403E1D0F, // 0043 CONNECT R15 K14 K15
- 0x943C100F, // 0044 GETIDX R15 R8 R15
- 0x7C340400, // 0045 CALL R13 2
- 0x7C240800, // 0046 CALL R9 4
- 0x70020004, // 0047 JMP #004D
- 0x8C24090C, // 0048 GETMET R9 R4 K12
- 0x5C2C0A00, // 0049 MOVE R11 R5
- 0x5C300E00, // 004A MOVE R12 R7
- 0x5C341000, // 004B MOVE R13 R8
- 0x7C240800, // 004C CALL R9 4
- 0x70020004, // 004D JMP #0053
- 0x8C24090C, // 004E GETMET R9 R4 K12
- 0x5C2C0A00, // 004F MOVE R11 R5
- 0x5C300E00, // 0050 MOVE R12 R7
- 0x5C341000, // 0051 MOVE R13 R8
- 0x7C240800, // 0052 CALL R9 4
- 0x7001FFB7, // 0053 JMP #000C
- 0x58180012, // 0054 LDCONST R6 K18
- 0xAC180200, // 0055 CATCH R6 1 0
- 0xB0080000, // 0056 RAISE 2 R0 R0
- 0x80040A00, // 0057 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ipk_epoch_key
-********************************************************************/
-be_local_closure(Matter_Session_get_ipk_epoch_key, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(ipk_epoch_key),
- }),
- be_str_weak(get_ipk_epoch_key),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
+ ( &(const binstruction[ 7]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x4C140000, // 0001 LDNIL R5
+ 0x90020205, // 0002 SETMBR R0 K1 R5
+ 0x90020402, // 0003 SETMBR R0 K2 R2
+ 0x90020603, // 0004 SETMBR R0 K3 R3
+ 0x90020804, // 0005 SETMBR R0 K4 R4
+ 0x80000000, // 0006 RET 0
})
)
);
@@ -669,11 +556,11 @@ be_local_closure(Matter_Session_tojson, /* name */
/********************************************************************
-** Solidified function: get_ac
+** Solidified function: get_ipk_group_key
********************************************************************/
-be_local_closure(Matter_Session_get_ac, /* name */
+be_local_closure(Matter_Session_get_ipk_group_key, /* name */
be_nested_proto(
- 2, /* nstack */
+ 10, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -681,152 +568,238 @@ be_local_closure(Matter_Session_get_ac, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(attestation_challenge),
- }),
- be_str_weak(get_ac),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_no_expiration
-********************************************************************/
-be_local_closure(Matter_Session_set_no_expiration, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(expiration),
- }),
- be_str_weak(set_no_expiration),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x4C040000, // 0000 LDNIL R1
- 0x90020001, // 0001 SETMBR R0 K0 R1
- 0x80000000, // 0002 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_r2i
-********************************************************************/
-be_local_closure(Matter_Session_get_r2i, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(r2ikey),
- }),
- be_str_weak(get_r2i),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_fabric_compressed
-********************************************************************/
-be_local_closure(Matter_Session_get_fabric_compressed, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(fabric_compressed),
- }),
- be_str_weak(get_fabric_compressed),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_fabric_label
-********************************************************************/
-be_local_closure(Matter_Session_set_fabric_label, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(fabric_label),
- }),
- be_str_weak(set_fabric_label),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x60080004, // 0000 GETGBL R2 G4
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x1C080500, // 0003 EQ R2 R2 K0
- 0x780A0000, // 0004 JMPF R2 #0006
- 0x90020201, // 0005 SETMBR R0 K1 R1
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_ipk_epoch_key
-********************************************************************/
-be_local_closure(Matter_Session_set_ipk_epoch_key, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
+ ( &(const bvalue[ 7]) { /* constants */
/* K0 */ be_nested_str_weak(ipk_epoch_key),
+ /* K1 */ be_nested_str_weak(fabric_compressed),
+ /* K2 */ be_nested_str_weak(crypto),
+ /* K3 */ be_nested_str_weak(HKDF_SHA256),
+ /* K4 */ be_nested_str_weak(fromstring),
+ /* K5 */ be_nested_str_weak(__GROUP_KEY),
+ /* K6 */ be_nested_str_weak(derive),
}),
- be_str_weak(set_ipk_epoch_key),
+ be_str_weak(get_ipk_group_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x4C080000, // 0001 LDNIL R2
+ 0x1C040202, // 0002 EQ R1 R1 R2
+ 0x74060003, // 0003 JMPT R1 #0008
+ 0x88040101, // 0004 GETMBR R1 R0 K1
+ 0x4C080000, // 0005 LDNIL R2
+ 0x1C040202, // 0006 EQ R1 R1 R2
+ 0x78060001, // 0007 JMPF R1 #000A
+ 0x4C040000, // 0008 LDNIL R1
+ 0x80040200, // 0009 RET 1 R1
+ 0xA4060400, // 000A IMPORT R1 K2
+ 0x8C080303, // 000B GETMET R2 R1 K3
+ 0x7C080200, // 000C CALL R2 1
+ 0x600C0015, // 000D GETGBL R3 G21
+ 0x7C0C0000, // 000E CALL R3 0
+ 0x8C0C0704, // 000F GETMET R3 R3 K4
+ 0x88140105, // 0010 GETMBR R5 R0 K5
+ 0x7C0C0400, // 0011 CALL R3 2
+ 0x8C100506, // 0012 GETMET R4 R2 K6
+ 0x88180100, // 0013 GETMBR R6 R0 K0
+ 0x881C0101, // 0014 GETMBR R7 R0 K1
+ 0x5C200600, // 0015 MOVE R8 R3
+ 0x5426000F, // 0016 LDINT R9 16
+ 0x7C100A00, // 0017 CALL R4 5
+ 0x80040800, // 0018 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ca_pub
+********************************************************************/
+be_local_closure(Matter_Session_get_ca_pub, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* 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(root_ca_certificate),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(parse),
+ /* K4 */ be_nested_str_weak(findsubval),
+ }),
+ be_str_weak(get_ca_pub),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x78060008, // 0001 JMPF R1 #000B
+ 0xB8060200, // 0002 GETNGBL R1 K1
+ 0x88040302, // 0003 GETMBR R1 R1 K2
+ 0x8C040303, // 0004 GETMET R1 R1 K3
+ 0x880C0100, // 0005 GETMBR R3 R0 K0
+ 0x7C040400, // 0006 CALL R1 2
+ 0x8C080304, // 0007 GETMET R2 R1 K4
+ 0x54120008, // 0008 LDINT R4 9
+ 0x7C080400, // 0009 CALL R2 2
+ 0x80040400, // 000A RET 1 R2
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: fromjson
+********************************************************************/
+be_local_closure(Matter_Session_fromjson, /* name */
+ be_nested_proto(
+ 16, /* nstack */
+ 2, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[19]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_Session),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(introspect),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(Session),
+ /* K5 */ be_nested_str_weak(keys),
+ /* K6 */ be_nested_str_weak(counter_rcv),
+ /* K7 */ be_nested_str_weak(reset),
+ /* K8 */ be_nested_str_weak(counter_snd),
+ /* K9 */ be_nested_str_weak(find),
+ /* K10 */ be_nested_str_weak(0x),
+ /* K11 */ be_const_int(0),
+ /* K12 */ be_nested_str_weak(set),
+ /* K13 */ be_nested_str_weak(fromhex),
+ /* K14 */ be_const_int(2),
+ /* K15 */ be_const_int(2147483647),
+ /* K16 */ be_nested_str_weak(_X24_X24),
+ /* K17 */ be_nested_str_weak(fromb64),
+ /* K18 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(fromjson),
+ &be_const_str_solidified,
+ ( &(const binstruction[88]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0xA4120400, // 0002 IMPORT R4 K2
+ 0xB8160600, // 0003 GETNGBL R5 K3
+ 0x8C140B04, // 0004 GETMET R5 R5 K4
+ 0x5C1C0000, // 0005 MOVE R7 R0
+ 0x7C140400, // 0006 CALL R5 2
+ 0x60180010, // 0007 GETGBL R6 G16
+ 0x8C1C0305, // 0008 GETMET R7 R1 K5
+ 0x7C1C0200, // 0009 CALL R7 1
+ 0x7C180200, // 000A CALL R6 1
+ 0xA8020047, // 000B EXBLK 0 #0054
+ 0x5C1C0C00, // 000C MOVE R7 R6
+ 0x7C1C0000, // 000D CALL R7 0
+ 0x94200207, // 000E GETIDX R8 R1 R7
+ 0x1C240F06, // 000F EQ R9 R7 K6
+ 0x78260006, // 0010 JMPF R9 #0018
+ 0x88240B06, // 0011 GETMBR R9 R5 K6
+ 0x8C241307, // 0012 GETMET R9 R9 K7
+ 0x602C0009, // 0013 GETGBL R11 G9
+ 0x5C301000, // 0014 MOVE R12 R8
+ 0x7C2C0200, // 0015 CALL R11 1
+ 0x7C240400, // 0016 CALL R9 2
+ 0x7002003A, // 0017 JMP #0053
+ 0x1C240F08, // 0018 EQ R9 R7 K8
+ 0x78260006, // 0019 JMPF R9 #0021
+ 0x88240B08, // 001A GETMBR R9 R5 K8
+ 0x8C241307, // 001B GETMET R9 R9 K7
+ 0x602C0009, // 001C GETGBL R11 G9
+ 0x5C301000, // 001D MOVE R12 R8
+ 0x7C2C0200, // 001E CALL R11 1
+ 0x7C240400, // 001F CALL R9 2
+ 0x70020031, // 0020 JMP #0053
+ 0x60240004, // 0021 GETGBL R9 G4
+ 0x5C281000, // 0022 MOVE R10 R8
+ 0x7C240200, // 0023 CALL R9 1
+ 0x1C241301, // 0024 EQ R9 R9 K1
+ 0x78260027, // 0025 JMPF R9 #004E
+ 0x8C240709, // 0026 GETMET R9 R3 K9
+ 0x5C2C1000, // 0027 MOVE R11 R8
+ 0x5830000A, // 0028 LDCONST R12 K10
+ 0x7C240600, // 0029 CALL R9 3
+ 0x1C24130B, // 002A EQ R9 R9 K11
+ 0x7826000A, // 002B JMPF R9 #0037
+ 0x8C24090C, // 002C GETMET R9 R4 K12
+ 0x5C2C0A00, // 002D MOVE R11 R5
+ 0x5C300E00, // 002E MOVE R12 R7
+ 0x60340015, // 002F GETGBL R13 G21
+ 0x7C340000, // 0030 CALL R13 0
+ 0x8C341B0D, // 0031 GETMET R13 R13 K13
+ 0x403E1D0F, // 0032 CONNECT R15 K14 K15
+ 0x943C100F, // 0033 GETIDX R15 R8 R15
+ 0x7C340400, // 0034 CALL R13 2
+ 0x7C240800, // 0035 CALL R9 4
+ 0x70020015, // 0036 JMP #004D
+ 0x8C240709, // 0037 GETMET R9 R3 K9
+ 0x5C2C1000, // 0038 MOVE R11 R8
+ 0x58300010, // 0039 LDCONST R12 K16
+ 0x7C240600, // 003A CALL R9 3
+ 0x1C24130B, // 003B EQ R9 R9 K11
+ 0x7826000A, // 003C JMPF R9 #0048
+ 0x8C24090C, // 003D GETMET R9 R4 K12
+ 0x5C2C0A00, // 003E MOVE R11 R5
+ 0x5C300E00, // 003F MOVE R12 R7
+ 0x60340015, // 0040 GETGBL R13 G21
+ 0x7C340000, // 0041 CALL R13 0
+ 0x8C341B11, // 0042 GETMET R13 R13 K17
+ 0x403E1D0F, // 0043 CONNECT R15 K14 K15
+ 0x943C100F, // 0044 GETIDX R15 R8 R15
+ 0x7C340400, // 0045 CALL R13 2
+ 0x7C240800, // 0046 CALL R9 4
+ 0x70020004, // 0047 JMP #004D
+ 0x8C24090C, // 0048 GETMET R9 R4 K12
+ 0x5C2C0A00, // 0049 MOVE R11 R5
+ 0x5C300E00, // 004A MOVE R12 R7
+ 0x5C341000, // 004B MOVE R13 R8
+ 0x7C240800, // 004C CALL R9 4
+ 0x70020004, // 004D JMP #0053
+ 0x8C24090C, // 004E GETMET R9 R4 K12
+ 0x5C2C0A00, // 004F MOVE R11 R5
+ 0x5C300E00, // 0050 MOVE R12 R7
+ 0x5C341000, // 0051 MOVE R13 R8
+ 0x7C240800, // 0052 CALL R9 4
+ 0x7001FFB7, // 0053 JMP #000C
+ 0x58180012, // 0054 LDCONST R6 K18
+ 0xAC180200, // 0055 CATCH R6 1 0
+ 0xB0080000, // 0056 RAISE 2 R0 R0
+ 0x80040A00, // 0057 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_ca
+********************************************************************/
+be_local_closure(Matter_Session_set_ca, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(root_ca_certificate),
+ }),
+ be_str_weak(set_ca),
&be_const_str_solidified,
( &(const binstruction[ 2]) { /* code */
0x90020001, // 0000 SETMBR R0 K0 R1
@@ -838,36 +811,35 @@ be_local_closure(Matter_Session_set_ipk_epoch_key, /* name */
/********************************************************************
-** Solidified function: set_fabric_device
+** Solidified function: get_pk
********************************************************************/
-be_local_closure(Matter_Session_set_fabric_device, /* name */
+be_local_closure(Matter_Session_get_pk, /* name */
be_nested_proto(
- 7, /* nstack */
- 4, /* argc */
+ 5, /* nstack */
+ 1, /* 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(fabric),
- /* K1 */ be_nested_str_weak(deviceid),
- /* K2 */ be_nested_str_weak(fabric_compressed),
- /* K3 */ be_nested_str_weak(__store),
- /* K4 */ be_nested_str_weak(remove_redundant_session),
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(no_private_key),
+ /* K1 */ be_nested_str_weak(crypto),
+ /* K2 */ be_nested_str_weak(random),
}),
- be_str_weak(set_fabric_device),
+ be_str_weak(get_pk),
&be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020202, // 0001 SETMBR R0 K1 R2
- 0x90020403, // 0002 SETMBR R0 K2 R3
- 0x88100103, // 0003 GETMBR R4 R0 K3
- 0x8C100904, // 0004 GETMET R4 R4 K4
- 0x5C180000, // 0005 MOVE R6 R0
- 0x7C100400, // 0006 CALL R4 2
- 0x80000000, // 0007 RET 0
+ ( &(const binstruction[ 9]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x74060004, // 0001 JMPT R1 #0007
+ 0xA4060200, // 0002 IMPORT R1 K1
+ 0x8C080302, // 0003 GETMET R2 R1 K2
+ 0x5412001F, // 0004 LDINT R4 32
+ 0x7C080400, // 0005 CALL R2 2
+ 0x90020002, // 0006 SETMBR R0 K0 R2
+ 0x88040100, // 0007 GETMBR R1 R0 K0
+ 0x80040200, // 0008 RET 1 R1
})
)
);
@@ -904,6 +876,113 @@ be_local_closure(Matter_Session_set_persist, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: close
+********************************************************************/
+be_local_closure(Matter_Session_close, /* name */
+ be_nested_proto(
+ 9, /* 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_nested_str_weak(_persist),
+ /* K1 */ be_nested_str_weak(local_session_id),
+ /* K2 */ be_nested_str_weak(_future_local_session_id),
+ /* K3 */ be_nested_str_weak(initiator_session_id),
+ /* K4 */ be_nested_str_weak(_future_initiator_session_id),
+ /* K5 */ be_nested_str_weak(source_node_id),
+ /* K6 */ be_nested_str_weak(counter_rcv),
+ /* K7 */ be_nested_str_weak(reset),
+ /* K8 */ be_nested_str_weak(counter_snd),
+ /* K9 */ be_nested_str_weak(i2rkey),
+ /* K10 */ be_nested_str_weak(_i2r_privacy),
+ /* K11 */ be_nested_str_weak(r2ikey),
+ /* K12 */ be_nested_str_weak(attestation_challenge),
+ /* K13 */ be_nested_str_weak(fabric_label),
+ /* K14 */ be_nested_str_weak(),
+ /* K15 */ be_nested_str_weak(introspect),
+ /* K16 */ be_nested_str_weak(members),
+ /* K17 */ be_nested_str_weak(get),
+ /* K18 */ be_nested_str_weak(function),
+ /* K19 */ be_nested_str_weak(instance),
+ /* K20 */ be_const_int(0),
+ /* K21 */ be_nested_str_weak(_),
+ /* K22 */ be_const_int(1),
+ /* K23 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(close),
+ &be_const_str_solidified,
+ ( &(const binstruction[59]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88080102, // 0001 GETMBR R2 R0 K2
+ 0x90020202, // 0002 SETMBR R0 K1 R2
+ 0x88080104, // 0003 GETMBR R2 R0 K4
+ 0x90020602, // 0004 SETMBR R0 K3 R2
+ 0x4C080000, // 0005 LDNIL R2
+ 0x90020A02, // 0006 SETMBR R0 K5 R2
+ 0x88080106, // 0007 GETMBR R2 R0 K6
+ 0x8C080507, // 0008 GETMET R2 R2 K7
+ 0x7C080200, // 0009 CALL R2 1
+ 0x88080108, // 000A GETMBR R2 R0 K8
+ 0x8C080507, // 000B GETMET R2 R2 K7
+ 0x7C080200, // 000C CALL R2 1
+ 0x4C080000, // 000D LDNIL R2
+ 0x90021202, // 000E SETMBR R0 K9 R2
+ 0x4C080000, // 000F LDNIL R2
+ 0x90021402, // 0010 SETMBR R0 K10 R2
+ 0x4C080000, // 0011 LDNIL R2
+ 0x90021602, // 0012 SETMBR R0 K11 R2
+ 0x4C080000, // 0013 LDNIL R2
+ 0x90021802, // 0014 SETMBR R0 K12 R2
+ 0x90021B0E, // 0015 SETMBR R0 K13 K14
+ 0xA40A1E00, // 0016 IMPORT R2 K15
+ 0x600C0010, // 0017 GETGBL R3 G16
+ 0x8C100510, // 0018 GETMET R4 R2 K16
+ 0x5C180000, // 0019 MOVE R6 R0
+ 0x7C100400, // 001A CALL R4 2
+ 0x7C0C0200, // 001B CALL R3 1
+ 0xA8020018, // 001C EXBLK 0 #0036
+ 0x5C100600, // 001D MOVE R4 R3
+ 0x7C100000, // 001E CALL R4 0
+ 0x8C140511, // 001F GETMET R5 R2 K17
+ 0x5C1C0000, // 0020 MOVE R7 R0
+ 0x5C200800, // 0021 MOVE R8 R4
+ 0x7C140600, // 0022 CALL R5 3
+ 0x60180004, // 0023 GETGBL R6 G4
+ 0x5C1C0A00, // 0024 MOVE R7 R5
+ 0x7C180200, // 0025 CALL R6 1
+ 0x20180D12, // 0026 NE R6 R6 K18
+ 0x781A000C, // 0027 JMPF R6 #0035
+ 0x60180004, // 0028 GETGBL R6 G4
+ 0x5C1C0A00, // 0029 MOVE R7 R5
+ 0x7C180200, // 002A CALL R6 1
+ 0x20180D13, // 002B NE R6 R6 K19
+ 0x781A0007, // 002C JMPF R6 #0035
+ 0x94180914, // 002D GETIDX R6 R4 K20
+ 0x1C180D15, // 002E EQ R6 R6 K21
+ 0x781A0004, // 002F JMPF R6 #0035
+ 0x94180916, // 0030 GETIDX R6 R4 K22
+ 0x20180D15, // 0031 NE R6 R6 K21
+ 0x781A0001, // 0032 JMPF R6 #0035
+ 0x4C180000, // 0033 LDNIL R6
+ 0x90000806, // 0034 SETMBR R0 R4 R6
+ 0x7001FFE6, // 0035 JMP #001D
+ 0x580C0017, // 0036 LDCONST R3 K23
+ 0xAC0C0200, // 0037 CATCH R3 1 0
+ 0xB0080000, // 0038 RAISE 2 R0 R0
+ 0x90020001, // 0039 SETMBR R0 K0 R1
+ 0x80000000, // 003A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: gen_CSR
********************************************************************/
@@ -1013,347 +1092,6 @@ be_local_closure(Matter_Session_gen_CSR, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: set_ca
-********************************************************************/
-be_local_closure(Matter_Session_set_ca, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(root_ca_certificate),
- }),
- be_str_weak(set_ca),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_expire_time
-********************************************************************/
-be_local_closure(Matter_Session_set_expire_time, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(expiration),
- }),
- be_str_weak(set_expire_time),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x60080009, // 0000 GETGBL R2 G9
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x90020002, // 0003 SETMBR R0 K0 R2
- 0x80000000, // 0004 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_i2r
-********************************************************************/
-be_local_closure(Matter_Session_get_i2r, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(i2rkey),
- }),
- be_str_weak(get_i2r),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_keys
-********************************************************************/
-be_local_closure(Matter_Session_set_keys, /* name */
- be_nested_proto(
- 6, /* nstack */
- 5, /* 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(i2rkey),
- /* K1 */ be_nested_str_weak(_i2r_privacy),
- /* K2 */ be_nested_str_weak(r2ikey),
- /* K3 */ be_nested_str_weak(attestation_challenge),
- /* K4 */ be_nested_str_weak(session_timestamp),
- }),
- be_str_weak(set_keys),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x4C140000, // 0001 LDNIL R5
- 0x90020205, // 0002 SETMBR R0 K1 R5
- 0x90020402, // 0003 SETMBR R0 K2 R2
- 0x90020603, // 0004 SETMBR R0 K3 R3
- 0x90020804, // 0005 SETMBR R0 K4 R4
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ca
-********************************************************************/
-be_local_closure(Matter_Session_get_ca, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(root_ca_certificate),
- }),
- be_str_weak(get_ca),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_pk
-********************************************************************/
-be_local_closure(Matter_Session_get_pk, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(no_private_key),
- /* K1 */ be_nested_str_weak(crypto),
- /* K2 */ be_nested_str_weak(random),
- }),
- be_str_weak(get_pk),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x74060004, // 0001 JMPT R1 #0007
- 0xA4060200, // 0002 IMPORT R1 K1
- 0x8C080302, // 0003 GETMET R2 R1 K2
- 0x5412001F, // 0004 LDINT R4 32
- 0x7C080400, // 0005 CALL R2 2
- 0x90020002, // 0006 SETMBR R0 K0 R2
- 0x88040100, // 0007 GETMBR R1 R0 K0
- 0x80040200, // 0008 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ca_pub
-********************************************************************/
-be_local_closure(Matter_Session_get_ca_pub, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* 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(root_ca_certificate),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TLV),
- /* K3 */ be_nested_str_weak(parse),
- /* K4 */ be_nested_str_weak(findsubval),
- }),
- be_str_weak(get_ca_pub),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x78060008, // 0001 JMPF R1 #000B
- 0xB8060200, // 0002 GETNGBL R1 K1
- 0x88040302, // 0003 GETMBR R1 R1 K2
- 0x8C040303, // 0004 GETMET R1 R1 K3
- 0x880C0100, // 0005 GETMBR R3 R0 K0
- 0x7C040400, // 0006 CALL R1 2
- 0x8C080304, // 0007 GETMET R2 R1 K4
- 0x54120008, // 0008 LDINT R4 9
- 0x7C080400, // 0009 CALL R2 2
- 0x80040400, // 000A RET 1 R2
- 0x80000000, // 000B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_Session_init, /* name */
- be_nested_proto(
- 6, /* nstack */
- 4, /* 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(__store),
- /* K1 */ be_nested_str_weak(mode),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(local_session_id),
- /* K4 */ be_nested_str_weak(initiator_session_id),
- /* K5 */ be_nested_str_weak(counter_rcv),
- /* K6 */ be_nested_str_weak(matter),
- /* K7 */ be_nested_str_weak(Counter),
- /* K8 */ be_nested_str_weak(counter_snd),
- /* K9 */ be_nested_str_weak(_counter_insecure_rcv),
- /* K10 */ be_nested_str_weak(_counter_insecure_snd),
- /* K11 */ be_nested_str_weak(breadcrumb),
- /* K12 */ be_nested_str_weak(int64),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[24]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020302, // 0001 SETMBR R0 K1 K2
- 0x90020602, // 0002 SETMBR R0 K3 R2
- 0x90020803, // 0003 SETMBR R0 K4 R3
- 0xB8120C00, // 0004 GETNGBL R4 K6
- 0x8C100907, // 0005 GETMET R4 R4 K7
- 0x7C100200, // 0006 CALL R4 1
- 0x90020A04, // 0007 SETMBR R0 K5 R4
- 0xB8120C00, // 0008 GETNGBL R4 K6
- 0x8C100907, // 0009 GETMET R4 R4 K7
- 0x7C100200, // 000A CALL R4 1
- 0x90021004, // 000B SETMBR R0 K8 R4
- 0xB8120C00, // 000C GETNGBL R4 K6
- 0x8C100907, // 000D GETMET R4 R4 K7
- 0x7C100200, // 000E CALL R4 1
- 0x90021204, // 000F SETMBR R0 K9 R4
- 0xB8120C00, // 0010 GETNGBL R4 K6
- 0x8C100907, // 0011 GETMET R4 R4 K7
- 0x7C100200, // 0012 CALL R4 1
- 0x90021404, // 0013 SETMBR R0 K10 R4
- 0xB8121800, // 0014 GETNGBL R4 K12
- 0x7C100000, // 0015 CALL R4 0
- 0x90021604, // 0016 SETMBR R0 K11 R4
- 0x80000000, // 0017 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ipk_group_key
-********************************************************************/
-be_local_closure(Matter_Session_get_ipk_group_key, /* name */
- be_nested_proto(
- 10, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(ipk_epoch_key),
- /* K1 */ be_nested_str_weak(fabric_compressed),
- /* K2 */ be_nested_str_weak(crypto),
- /* K3 */ be_nested_str_weak(HKDF_SHA256),
- /* K4 */ be_nested_str_weak(fromstring),
- /* K5 */ be_nested_str_weak(__GROUP_KEY),
- /* K6 */ be_nested_str_weak(derive),
- }),
- be_str_weak(get_ipk_group_key),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x4C080000, // 0001 LDNIL R2
- 0x1C040202, // 0002 EQ R1 R1 R2
- 0x74060003, // 0003 JMPT R1 #0008
- 0x88040101, // 0004 GETMBR R1 R0 K1
- 0x4C080000, // 0005 LDNIL R2
- 0x1C040202, // 0006 EQ R1 R1 R2
- 0x78060001, // 0007 JMPF R1 #000A
- 0x4C040000, // 0008 LDNIL R1
- 0x80040200, // 0009 RET 1 R1
- 0xA4060400, // 000A IMPORT R1 K2
- 0x8C080303, // 000B GETMET R2 R1 K3
- 0x7C080200, // 000C CALL R2 1
- 0x600C0015, // 000D GETGBL R3 G21
- 0x7C0C0000, // 000E CALL R3 0
- 0x8C0C0704, // 000F GETMET R3 R3 K4
- 0x88140105, // 0010 GETMBR R5 R0 K5
- 0x7C0C0400, // 0011 CALL R3 2
- 0x8C100506, // 0012 GETMET R4 R2 K6
- 0x88180100, // 0013 GETMBR R6 R0 K0
- 0x881C0101, // 0014 GETMBR R7 R0 K1
- 0x5C200600, // 0015 MOVE R8 R3
- 0x5426000F, // 0016 LDINT R9 16
- 0x7C100A00, // 0017 CALL R4 5
- 0x80040800, // 0018 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: set_noc
********************************************************************/
@@ -1384,9 +1122,9 @@ be_local_closure(Matter_Session_set_noc, /* name */
/********************************************************************
-** Solidified function: get_fabric
+** Solidified function: get_noc
********************************************************************/
-be_local_closure(Matter_Session_get_fabric, /* name */
+be_local_closure(Matter_Session_get_noc, /* name */
be_nested_proto(
2, /* nstack */
1, /* argc */
@@ -1397,9 +1135,135 @@ be_local_closure(Matter_Session_get_fabric, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(fabric),
+ /* K0 */ be_nested_str_weak(noc),
}),
- be_str_weak(get_fabric),
+ be_str_weak(get_noc),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ac
+********************************************************************/
+be_local_closure(Matter_Session_get_ac, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(attestation_challenge),
+ }),
+ be_str_weak(get_ac),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Session_init, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[17]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(__store),
+ /* K2 */ be_nested_str_weak(mode),
+ /* K3 */ be_const_int(0),
+ /* K4 */ be_nested_str_weak(local_session_id),
+ /* K5 */ be_nested_str_weak(initiator_session_id),
+ /* K6 */ be_nested_str_weak(counter_rcv),
+ /* K7 */ be_nested_str_weak(matter),
+ /* K8 */ be_nested_str_weak(Counter),
+ /* K9 */ be_nested_str_weak(counter_snd),
+ /* K10 */ be_nested_str_weak(_counter_insecure_rcv),
+ /* K11 */ be_nested_str_weak(_counter_insecure_snd),
+ /* K12 */ be_nested_str_weak(__breadcrumb),
+ /* K13 */ be_nested_str_weak(__exchange_id),
+ /* K14 */ be_nested_str_weak(random),
+ /* K15 */ be_const_int(2),
+ /* K16 */ be_nested_str_weak(get),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[31]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0x90020201, // 0001 SETMBR R0 K1 R1
+ 0x90020503, // 0002 SETMBR R0 K2 K3
+ 0x90020802, // 0003 SETMBR R0 K4 R2
+ 0x90020A03, // 0004 SETMBR R0 K5 R3
+ 0xB8160E00, // 0005 GETNGBL R5 K7
+ 0x8C140B08, // 0006 GETMET R5 R5 K8
+ 0x7C140200, // 0007 CALL R5 1
+ 0x90020C05, // 0008 SETMBR R0 K6 R5
+ 0xB8160E00, // 0009 GETNGBL R5 K7
+ 0x8C140B08, // 000A GETMET R5 R5 K8
+ 0x7C140200, // 000B CALL R5 1
+ 0x90021205, // 000C SETMBR R0 K9 R5
+ 0xB8160E00, // 000D GETNGBL R5 K7
+ 0x8C140B08, // 000E GETMET R5 R5 K8
+ 0x7C140200, // 000F CALL R5 1
+ 0x90021405, // 0010 SETMBR R0 K10 R5
+ 0xB8160E00, // 0011 GETNGBL R5 K7
+ 0x8C140B08, // 0012 GETMET R5 R5 K8
+ 0x7C140200, // 0013 CALL R5 1
+ 0x90021605, // 0014 SETMBR R0 K11 R5
+ 0x90021903, // 0015 SETMBR R0 K12 K3
+ 0x8C14090E, // 0016 GETMET R5 R4 K14
+ 0x581C000F, // 0017 LDCONST R7 K15
+ 0x7C140400, // 0018 CALL R5 2
+ 0x8C140B10, // 0019 GETMET R5 R5 K16
+ 0x581C0003, // 001A LDCONST R7 K3
+ 0x5820000F, // 001B LDCONST R8 K15
+ 0x7C140600, // 001C CALL R5 3
+ 0x90021A05, // 001D SETMBR R0 K13 R5
+ 0x80000000, // 001E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_icac
+********************************************************************/
+be_local_closure(Matter_Session_get_icac, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(icac),
+ }),
+ be_str_weak(get_icac),
&be_const_str_solidified,
( &(const binstruction[ 2]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
@@ -1438,12 +1302,102 @@ be_local_closure(Matter_Session_get_mode, /* name */
/********************************************************************
-** Solidified function: set_mode
+** Solidified function: set_fabric_device
********************************************************************/
-be_local_closure(Matter_Session_set_mode, /* name */
+be_local_closure(Matter_Session_set_fabric_device, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 4, /* 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(fabric),
+ /* K1 */ be_nested_str_weak(deviceid),
+ /* K2 */ be_nested_str_weak(fabric_compressed),
+ /* K3 */ be_nested_str_weak(__store),
+ /* K4 */ be_nested_str_weak(remove_redundant_session),
+ }),
+ be_str_weak(set_fabric_device),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x90020202, // 0001 SETMBR R0 K1 R2
+ 0x90020403, // 0002 SETMBR R0 K2 R3
+ 0x88100103, // 0003 GETMBR R4 R0 K3
+ 0x8C100904, // 0004 GETMET R4 R4 K4
+ 0x5C180000, // 0005 MOVE R6 R0
+ 0x7C100400, // 0006 CALL R4 2
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_i2r_privacy
+********************************************************************/
+be_local_closure(Matter_Session_get_i2r_privacy, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(_i2r_privacy),
+ /* K1 */ be_nested_str_weak(crypto),
+ /* K2 */ be_nested_str_weak(HKDF_SHA256),
+ /* K3 */ be_nested_str_weak(derive),
+ /* K4 */ be_nested_str_weak(get_i2r),
+ /* K5 */ be_nested_str_weak(fromstring),
+ /* K6 */ be_nested_str_weak(PrivacyKey),
+ }),
+ be_str_weak(get_i2r_privacy),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x4C080000, // 0001 LDNIL R2
+ 0x1C040202, // 0002 EQ R1 R1 R2
+ 0x7806000F, // 0003 JMPF R1 #0014
+ 0xA4060200, // 0004 IMPORT R1 K1
+ 0x8C080302, // 0005 GETMET R2 R1 K2
+ 0x7C080200, // 0006 CALL R2 1
+ 0x8C080503, // 0007 GETMET R2 R2 K3
+ 0x8C100104, // 0008 GETMET R4 R0 K4
+ 0x7C100200, // 0009 CALL R4 1
+ 0x60140015, // 000A GETGBL R5 G21
+ 0x7C140000, // 000B CALL R5 0
+ 0x60180015, // 000C GETGBL R6 G21
+ 0x7C180000, // 000D CALL R6 0
+ 0x8C180D05, // 000E GETMET R6 R6 K5
+ 0x58200006, // 000F LDCONST R8 K6
+ 0x7C180400, // 0010 CALL R6 2
+ 0x541E000F, // 0011 LDINT R7 16
+ 0x7C080A00, // 0012 CALL R2 5
+ 0x90020002, // 0013 SETMBR R0 K0 R2
+ 0x88040100, // 0014 GETMBR R1 R0 K0
+ 0x80040200, // 0015 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ca
+********************************************************************/
+be_local_closure(Matter_Session_get_ca, /* name */
be_nested_proto(
2, /* nstack */
- 2, /* argc */
+ 1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -1451,13 +1405,70 @@ be_local_closure(Matter_Session_set_mode, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(mode),
+ /* K0 */ be_nested_str_weak(root_ca_certificate),
}),
- be_str_weak(set_mode),
+ be_str_weak(get_ca),
&be_const_str_solidified,
( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: save
+********************************************************************/
+be_local_closure(Matter_Session_save, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(__store),
+ /* K1 */ be_nested_str_weak(save),
+ }),
+ be_str_weak(save),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_fabric_compressed
+********************************************************************/
+be_local_closure(Matter_Session_get_fabric_compressed, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(fabric_compressed),
+ }),
+ be_str_weak(get_fabric_compressed),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
})
)
);
@@ -1468,82 +1479,85 @@ be_local_closure(Matter_Session_set_mode, /* name */
** Solidified class: Matter_Session
********************************************************************/
be_local_class(Matter_Session,
- 36,
+ 39,
NULL,
- be_nested_map(72,
+ be_nested_map(75,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(save, -1), be_const_closure(Matter_Session_save_closure) },
+ { be_const_key_weak(peer_node_id, -1), be_const_var(19) },
+ { be_const_key_weak(fabric_label, -1), be_const_var(31) },
+ { be_const_key_weak(set_fabric_label, 1), be_const_closure(Matter_Session_set_fabric_label_closure) },
+ { be_const_key_weak(get_r2i, -1), be_const_closure(Matter_Session_get_r2i_closure) },
+ { be_const_key_weak(get_ca, 61), be_const_closure(Matter_Session_get_ca_closure) },
{ be_const_key_weak(set_mode, -1), be_const_closure(Matter_Session_set_mode_closure) },
- { be_const_key_weak(root_ca_certificate, -1), be_const_var(19) },
- { be_const_key_weak(admin_subject, 29), be_const_var(29) },
- { be_const_key_weak(get_i2r_privacy, 25), be_const_closure(Matter_Session_get_i2r_privacy_closure) },
- { be_const_key_weak(has_expired, -1), be_const_closure(Matter_Session_has_expired_closure) },
- { be_const_key_weak(set_no_expiration, -1), be_const_closure(Matter_Session_set_no_expiration_closure) },
- { be_const_key_weak(get_deviceid, 61), be_const_closure(Matter_Session_get_deviceid_closure) },
- { be_const_key_weak(local_session_id, -1), be_const_var(2) },
- { be_const_key_weak(get_mode, -1), be_const_closure(Matter_Session_get_mode_closure) },
- { be_const_key_weak(set_fabric_device, -1), be_const_closure(Matter_Session_set_fabric_device_closure) },
- { be_const_key_weak(fromjson, -1), be_const_static_closure(Matter_Session_fromjson_closure) },
- { be_const_key_weak(get_ipk_epoch_key, -1), be_const_closure(Matter_Session_get_ipk_epoch_key_closure) },
- { be_const_key_weak(get_fabric, 33), be_const_closure(Matter_Session_get_fabric_closure) },
- { be_const_key_weak(tojson, -1), be_const_closure(Matter_Session_tojson_closure) },
- { be_const_key_weak(set_noc, 37), be_const_closure(Matter_Session_set_noc_closure) },
- { be_const_key_weak(get_ac, -1), be_const_closure(Matter_Session_get_ac_closure) },
- { be_const_key_weak(_counter_insecure_snd, 6), be_const_var(11) },
- { be_const_key_weak(initiator_session_id, -1), be_const_var(3) },
- { be_const_key_weak(get_fabric_compressed, -1), be_const_closure(Matter_Session_get_fabric_compressed_closure) },
- { be_const_key_weak(set_fabric_label, -1), be_const_closure(Matter_Session_set_fabric_label_closure) },
- { be_const_key_weak(shared_secret, 8), be_const_var(24) },
- { be_const_key_weak(get_ipk_group_key, 43), be_const_closure(Matter_Session_get_ipk_group_key_closure) },
- { be_const_key_weak(init, 42), be_const_closure(Matter_Session_init_closure) },
- { be_const_key_weak(_chunked_attr_reports, -1), be_const_var(35) },
- { be_const_key_weak(set_persist, -1), be_const_closure(Matter_Session_set_persist_closure) },
- { be_const_key_weak(_future_initiator_session_id, -1), be_const_var(6) },
- { be_const_key_weak(_Msg2, -1), be_const_var(32) },
- { be_const_key_weak(fabric, -1), be_const_var(25) },
- { be_const_key_weak(close, -1), be_const_closure(Matter_Session_close_closure) },
- { be_const_key_weak(_i2r_privacy, -1), be_const_var(14) },
- { be_const_key_weak(ipk_epoch_key, -1), be_const_var(22) },
- { be_const_key_weak(get_ca, 10), be_const_closure(Matter_Session_get_ca_closure) },
- { be_const_key_weak(resumption_id, -1), be_const_var(23) },
- { be_const_key_weak(gen_CSR, 38), be_const_closure(Matter_Session_gen_CSR_closure) },
- { be_const_key_weak(source_node_id, -1), be_const_var(5) },
- { be_const_key_weak(set_ca, -1), be_const_closure(Matter_Session_set_ca_closure) },
- { be_const_key_weak(set_ipk_epoch_key, -1), be_const_closure(Matter_Session_set_ipk_epoch_key_closure) },
- { be_const_key_weak(_future_local_session_id, -1), be_const_var(7) },
- { be_const_key_weak(get_r2i, 31), be_const_closure(Matter_Session_get_r2i_closure) },
- { be_const_key_weak(icac, -1), be_const_var(21) },
- { be_const_key_weak(fabric_label, -1), be_const_var(28) },
- { be_const_key_weak(attestation_challenge, -1), be_const_var(15) },
- { be_const_key_weak(peer_node_id, 49), be_const_var(16) },
- { be_const_key_weak(get_noc, 53), be_const_closure(Matter_Session_get_noc_closure) },
- { be_const_key_weak(set_expire_time, 40), be_const_closure(Matter_Session_set_expire_time_closure) },
- { be_const_key_weak(deviceid, -1), be_const_var(27) },
+ { be_const_key_weak(set_expire_time, -1), be_const_closure(Matter_Session_set_expire_time_closure) },
+ { be_const_key_weak(get_i2r, -1), be_const_closure(Matter_Session_get_i2r_closure) },
{ be_const_key_weak(__CASE, -1), be_const_int(2) },
- { be_const_key_weak(get_icac, 50), be_const_closure(Matter_Session_get_icac_closure) },
- { be_const_key_weak(_Msg1, -1), be_const_var(31) },
- { be_const_key_weak(set_keys, 58), be_const_closure(Matter_Session_set_keys_closure) },
- { be_const_key_weak(noc, 23), be_const_var(20) },
- { be_const_key_weak(__PASE, -1), be_const_int(1) },
- { be_const_key_weak(breadcrumb, 26), be_const_var(17) },
- { be_const_key_weak(__GROUP_KEY, -1), be_nested_str_weak(GroupKey_X20v1_X2E0) },
- { be_const_key_weak(counter_snd, -1), be_const_var(9) },
- { be_const_key_weak(fabric_compressed, 32), be_const_var(26) },
- { be_const_key_weak(get_pk, -1), be_const_closure(Matter_Session_get_pk_closure) },
- { be_const_key_weak(expiration, -1), be_const_var(34) },
- { be_const_key_weak(r2ikey, -1), be_const_var(13) },
- { be_const_key_weak(get_ca_pub, -1), be_const_closure(Matter_Session_get_ca_pub_closure) },
- { be_const_key_weak(counter_rcv, -1), be_const_var(8) },
- { be_const_key_weak(_persist, 22), be_const_var(33) },
- { be_const_key_weak(i2rkey, 18), be_const_var(12) },
- { be_const_key_weak(session_timestamp, 15), be_const_var(4) },
+ { be_const_key_weak(get_ipk_epoch_key, -1), be_const_closure(Matter_Session_get_ipk_epoch_key_closure) },
+ { be_const_key_weak(_future_local_session_id, -1), be_const_var(7) },
{ be_const_key_weak(set_expire_in_seconds, 13), be_const_closure(Matter_Session_set_expire_in_seconds_closure) },
- { be_const_key_weak(mode, -1), be_const_var(1) },
- { be_const_key_weak(get_i2r, 9), be_const_closure(Matter_Session_get_i2r_closure) },
+ { be_const_key_weak(admin_vendor, -1), be_const_var(33) },
+ { be_const_key_weak(fromjson, -1), be_const_static_closure(Matter_Session_fromjson_closure) },
+ { be_const_key_weak(set_ca, -1), be_const_closure(Matter_Session_set_ca_closure) },
+ { be_const_key_weak(expiration, -1), be_const_var(37) },
+ { be_const_key_weak(get_deviceid, 63), be_const_closure(Matter_Session_get_deviceid_closure) },
+ { be_const_key_weak(has_expired, -1), be_const_closure(Matter_Session_has_expired_closure) },
+ { be_const_key_weak(i2rkey, -1), be_const_var(15) },
+ { be_const_key_weak(get_pk, -1), be_const_closure(Matter_Session_get_pk_closure) },
+ { be_const_key_weak(get_fabric, -1), be_const_closure(Matter_Session_get_fabric_closure) },
+ { be_const_key_weak(admin_subject, 34), be_const_var(32) },
+ { be_const_key_weak(noc, -1), be_const_var(23) },
+ { be_const_key_weak(get_ipk_group_key, -1), be_const_closure(Matter_Session_get_ipk_group_key_closure) },
+ { be_const_key_weak(get_ca_pub, -1), be_const_closure(Matter_Session_get_ca_pub_closure) },
+ { be_const_key_weak(ipk_epoch_key, 14), be_const_var(25) },
+ { be_const_key_weak(tojson, 54), be_const_closure(Matter_Session_tojson_closure) },
+ { be_const_key_weak(_i2r_privacy, 66), be_const_var(17) },
+ { be_const_key_weak(get_icac, 39), be_const_closure(Matter_Session_get_icac_closure) },
+ { be_const_key_weak(init, 35), be_const_closure(Matter_Session_init_closure) },
+ { be_const_key_weak(shared_secret, 29), be_const_var(27) },
+ { be_const_key_weak(set_persist, -1), be_const_closure(Matter_Session_set_persist_closure) },
+ { be_const_key_weak(resumption_id, -1), be_const_var(26) },
+ { be_const_key_weak(r2ikey, 38), be_const_var(16) },
+ { be_const_key_weak(__breadcrumb, 60), be_const_var(20) },
+ { be_const_key_weak(local_session_id, 19), be_const_var(2) },
+ { be_const_key_weak(__GROUP_KEY, 22), be_nested_str_weak(GroupKey_X20v1_X2E0) },
+ { be_const_key_weak(deviceid, -1), be_const_var(30) },
+ { be_const_key_weak(source_node_id, -1), be_const_var(5) },
+ { be_const_key_weak(attestation_challenge, 25), be_const_var(18) },
+ { be_const_key_weak(no_private_key, 62), be_const_var(21) },
+ { be_const_key_weak(_future_initiator_session_id, 4), be_const_var(6) },
+ { be_const_key_weak(fabric, -1), be_const_var(28) },
+ { be_const_key_weak(counter_rcv, -1), be_const_var(8) },
+ { be_const_key_weak(__ip, -1), be_const_var(11) },
+ { be_const_key_weak(_counter_insecure_rcv, -1), be_const_var(13) },
+ { be_const_key_weak(gen_CSR, 59), be_const_closure(Matter_Session_gen_CSR_closure) },
+ { be_const_key_weak(__port, 33), be_const_var(12) },
+ { be_const_key_weak(mode, 28), be_const_var(1) },
+ { be_const_key_weak(session_timestamp, 42), be_const_var(4) },
{ be_const_key_weak(__store, -1), be_const_var(0) },
- { be_const_key_weak(_counter_insecure_rcv, -1), be_const_var(10) },
- { be_const_key_weak(no_private_key, 2), be_const_var(18) },
- { be_const_key_weak(admin_vendor, 1), be_const_var(30) },
+ { be_const_key_weak(icac, -1), be_const_var(24) },
+ { be_const_key_weak(counter_snd, -1), be_const_var(9) },
+ { be_const_key_weak(_counter_insecure_snd, -1), be_const_var(14) },
+ { be_const_key_weak(_Msg1, 12), be_const_var(34) },
+ { be_const_key_weak(set_ipk_epoch_key, 44), be_const_closure(Matter_Session_set_ipk_epoch_key_closure) },
+ { be_const_key_weak(get_noc, -1), be_const_closure(Matter_Session_get_noc_closure) },
+ { be_const_key_weak(_Msg2, -1), be_const_var(35) },
+ { be_const_key_weak(get_ac, -1), be_const_closure(Matter_Session_get_ac_closure) },
+ { be_const_key_weak(set_noc, -1), be_const_closure(Matter_Session_set_noc_closure) },
+ { be_const_key_weak(_chunked_attr_reports, 27), be_const_var(38) },
+ { be_const_key_weak(_persist, -1), be_const_var(36) },
+ { be_const_key_weak(__exchange_id, -1), be_const_var(10) },
+ { be_const_key_weak(__PASE, -1), be_const_int(1) },
+ { be_const_key_weak(get_mode, -1), be_const_closure(Matter_Session_get_mode_closure) },
+ { be_const_key_weak(fabric_compressed, -1), be_const_var(29) },
+ { be_const_key_weak(close, 71), be_const_closure(Matter_Session_close_closure) },
+ { be_const_key_weak(root_ca_certificate, -1), be_const_var(22) },
+ { be_const_key_weak(set_fabric_device, -1), be_const_closure(Matter_Session_set_fabric_device_closure) },
+ { be_const_key_weak(initiator_session_id, -1), be_const_var(3) },
+ { be_const_key_weak(get_i2r_privacy, -1), be_const_closure(Matter_Session_get_i2r_privacy_closure) },
+ { be_const_key_weak(set_keys, 3), be_const_closure(Matter_Session_set_keys_closure) },
+ { be_const_key_weak(save, -1), be_const_closure(Matter_Session_save_closure) },
+ { be_const_key_weak(get_fabric_compressed, -1), be_const_closure(Matter_Session_get_fabric_compressed_closure) },
+ { be_const_key_weak(set_no_expiration, 0), be_const_closure(Matter_Session_set_no_expiration_closure) },
})),
be_str_weak(Matter_Session)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_TLV.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_TLV.h
index dc225d633..bac1a044b 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_TLV.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_TLV.h
@@ -6,6 +6,264 @@
extern const bclass be_class_Matter_TLV_item;
+/********************************************************************
+** Solidified function: set_parent
+********************************************************************/
+be_local_closure(Matter_TLV_item_set_parent, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(parent),
+ }),
+ be_str_weak(set_parent),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: create_TLV
+********************************************************************/
+be_local_closure(Matter_TLV_item_create_TLV, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_TLV_item),
+ /* K1 */ be_nested_str_weak(typ),
+ /* K2 */ be_nested_str_weak(val),
+ }),
+ be_str_weak(create_TLV),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x200C0203, // 0002 NE R3 R1 R3
+ 0x780E0004, // 0003 JMPF R3 #0009
+ 0x5C0C0400, // 0004 MOVE R3 R2
+ 0x7C0C0000, // 0005 CALL R3 0
+ 0x900E0200, // 0006 SETMBR R3 K1 R0
+ 0x900E0401, // 0007 SETMBR R3 K2 R1
+ 0x80040600, // 0008 RET 1 R3
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_anonymoustag
+********************************************************************/
+be_local_closure(Matter_TLV_item_set_anonymoustag, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(set_fulltag),
+ }),
+ be_str_weak(set_anonymoustag),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _encode_tag
+********************************************************************/
+be_local_closure(Matter_TLV_item__encode_tag, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(tag_number),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(tag_vendor),
+ /* K3 */ be_nested_str_weak(add),
+ /* K4 */ be_nested_str_weak(typ),
+ /* K5 */ be_const_int(1),
+ /* K6 */ be_const_int(2),
+ /* K7 */ be_nested_str_weak(tag_profile),
+ /* K8 */ be_nested_str_weak(tag_sub),
+ }),
+ be_str_weak(_encode_tag),
+ &be_const_str_solidified,
+ ( &(const binstruction[133]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x20080403, // 0002 NE R2 R2 R3
+ 0x780A0001, // 0003 JMPF R2 #0006
+ 0x88080100, // 0004 GETMBR R2 R0 K0
+ 0x70020000, // 0005 JMP #0007
+ 0x58080001, // 0006 LDCONST R2 K1
+ 0x540EFFFF, // 0007 LDINT R3 65536
+ 0x280C0403, // 0008 GE R3 R2 R3
+ 0x740E0002, // 0009 JMPT R3 #000D
+ 0x140C0501, // 000A LT R3 R2 K1
+ 0x740E0000, // 000B JMPT R3 #000D
+ 0x500C0001, // 000C LDBOOL R3 0 1
+ 0x500C0200, // 000D LDBOOL R3 1 0
+ 0x58100001, // 000E LDCONST R4 K1
+ 0x88140102, // 000F GETMBR R5 R0 K2
+ 0x4C180000, // 0010 LDNIL R6
+ 0x20140A06, // 0011 NE R5 R5 R6
+ 0x78160026, // 0012 JMPF R5 #003A
+ 0x780E0012, // 0013 JMPF R3 #0027
+ 0x8C140303, // 0014 GETMET R5 R1 K3
+ 0x541E00DF, // 0015 LDINT R7 224
+ 0x88200104, // 0016 GETMBR R8 R0 K4
+ 0x001C0E08, // 0017 ADD R7 R7 R8
+ 0x58200005, // 0018 LDCONST R8 K5
+ 0x7C140600, // 0019 CALL R5 3
+ 0x8C140303, // 001A GETMET R5 R1 K3
+ 0x881C0102, // 001B GETMBR R7 R0 K2
+ 0x58200006, // 001C LDCONST R8 K6
+ 0x7C140600, // 001D CALL R5 3
+ 0x8C140303, // 001E GETMET R5 R1 K3
+ 0x881C0107, // 001F GETMBR R7 R0 K7
+ 0x58200006, // 0020 LDCONST R8 K6
+ 0x7C140600, // 0021 CALL R5 3
+ 0x8C140303, // 0022 GETMET R5 R1 K3
+ 0x881C0100, // 0023 GETMBR R7 R0 K0
+ 0x54220003, // 0024 LDINT R8 4
+ 0x7C140600, // 0025 CALL R5 3
+ 0x70020011, // 0026 JMP #0039
+ 0x8C140303, // 0027 GETMET R5 R1 K3
+ 0x541E00BF, // 0028 LDINT R7 192
+ 0x88200104, // 0029 GETMBR R8 R0 K4
+ 0x001C0E08, // 002A ADD R7 R7 R8
+ 0x58200005, // 002B LDCONST R8 K5
+ 0x7C140600, // 002C CALL R5 3
+ 0x8C140303, // 002D GETMET R5 R1 K3
+ 0x881C0102, // 002E GETMBR R7 R0 K2
+ 0x58200006, // 002F LDCONST R8 K6
+ 0x7C140600, // 0030 CALL R5 3
+ 0x8C140303, // 0031 GETMET R5 R1 K3
+ 0x881C0107, // 0032 GETMBR R7 R0 K7
+ 0x58200006, // 0033 LDCONST R8 K6
+ 0x7C140600, // 0034 CALL R5 3
+ 0x8C140303, // 0035 GETMET R5 R1 K3
+ 0x881C0100, // 0036 GETMBR R7 R0 K0
+ 0x58200006, // 0037 LDCONST R8 K6
+ 0x7C140600, // 0038 CALL R5 3
+ 0x70020049, // 0039 JMP #0084
+ 0x88140107, // 003A GETMBR R5 R0 K7
+ 0x5419FFFE, // 003B LDINT R6 -1
+ 0x1C140A06, // 003C EQ R5 R5 R6
+ 0x78160016, // 003D JMPF R5 #0055
+ 0x780E000A, // 003E JMPF R3 #004A
+ 0x8C140303, // 003F GETMET R5 R1 K3
+ 0x541E005F, // 0040 LDINT R7 96
+ 0x88200104, // 0041 GETMBR R8 R0 K4
+ 0x001C0E08, // 0042 ADD R7 R7 R8
+ 0x58200005, // 0043 LDCONST R8 K5
+ 0x7C140600, // 0044 CALL R5 3
+ 0x8C140303, // 0045 GETMET R5 R1 K3
+ 0x881C0100, // 0046 GETMBR R7 R0 K0
+ 0x54220003, // 0047 LDINT R8 4
+ 0x7C140600, // 0048 CALL R5 3
+ 0x70020009, // 0049 JMP #0054
+ 0x8C140303, // 004A GETMET R5 R1 K3
+ 0x541E003F, // 004B LDINT R7 64
+ 0x88200104, // 004C GETMBR R8 R0 K4
+ 0x001C0E08, // 004D ADD R7 R7 R8
+ 0x58200005, // 004E LDCONST R8 K5
+ 0x7C140600, // 004F CALL R5 3
+ 0x8C140303, // 0050 GETMET R5 R1 K3
+ 0x881C0100, // 0051 GETMBR R7 R0 K0
+ 0x58200006, // 0052 LDCONST R8 K6
+ 0x7C140600, // 0053 CALL R5 3
+ 0x7002002E, // 0054 JMP #0084
+ 0x88140107, // 0055 GETMBR R5 R0 K7
+ 0x4C180000, // 0056 LDNIL R6
+ 0x20140A06, // 0057 NE R5 R5 R6
+ 0x78160016, // 0058 JMPF R5 #0070
+ 0x780E000A, // 0059 JMPF R3 #0065
+ 0x8C140303, // 005A GETMET R5 R1 K3
+ 0x541E009F, // 005B LDINT R7 160
+ 0x88200104, // 005C GETMBR R8 R0 K4
+ 0x001C0E08, // 005D ADD R7 R7 R8
+ 0x58200005, // 005E LDCONST R8 K5
+ 0x7C140600, // 005F CALL R5 3
+ 0x8C140303, // 0060 GETMET R5 R1 K3
+ 0x881C0100, // 0061 GETMBR R7 R0 K0
+ 0x54220003, // 0062 LDINT R8 4
+ 0x7C140600, // 0063 CALL R5 3
+ 0x70020009, // 0064 JMP #006F
+ 0x8C140303, // 0065 GETMET R5 R1 K3
+ 0x541E007F, // 0066 LDINT R7 128
+ 0x88200104, // 0067 GETMBR R8 R0 K4
+ 0x001C0E08, // 0068 ADD R7 R7 R8
+ 0x58200005, // 0069 LDCONST R8 K5
+ 0x7C140600, // 006A CALL R5 3
+ 0x8C140303, // 006B GETMET R5 R1 K3
+ 0x881C0100, // 006C GETMBR R7 R0 K0
+ 0x58200006, // 006D LDCONST R8 K6
+ 0x7C140600, // 006E CALL R5 3
+ 0x70020013, // 006F JMP #0084
+ 0x88140108, // 0070 GETMBR R5 R0 K8
+ 0x4C180000, // 0071 LDNIL R6
+ 0x20140A06, // 0072 NE R5 R5 R6
+ 0x7816000A, // 0073 JMPF R5 #007F
+ 0x8C140303, // 0074 GETMET R5 R1 K3
+ 0x541E001F, // 0075 LDINT R7 32
+ 0x88200104, // 0076 GETMBR R8 R0 K4
+ 0x001C0E08, // 0077 ADD R7 R7 R8
+ 0x58200005, // 0078 LDCONST R8 K5
+ 0x7C140600, // 0079 CALL R5 3
+ 0x8C140303, // 007A GETMET R5 R1 K3
+ 0x881C0108, // 007B GETMBR R7 R0 K8
+ 0x58200005, // 007C LDCONST R8 K5
+ 0x7C140600, // 007D CALL R5 3
+ 0x70020004, // 007E JMP #0084
+ 0x8C140303, // 007F GETMET R5 R1 K3
+ 0x881C0104, // 0080 GETMBR R7 R0 K4
+ 0x001E0207, // 0081 ADD R7 K1 R7
+ 0x58200005, // 0082 LDCONST R8 K5
+ 0x7C140600, // 0083 CALL R5 3
+ 0x80000000, // 0084 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: set_commonprofile
********************************************************************/
@@ -37,6 +295,826 @@ be_local_closure(Matter_TLV_item_set_commonprofile, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: _cmp_gt
+********************************************************************/
+be_local_closure(Matter_TLV_item__cmp_gt, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(tag_vendor),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_nested_str_weak(tag_profile),
+ /* K3 */ be_const_int(0),
+ /* K4 */ be_nested_str_weak(tag_number),
+ /* K5 */ be_nested_str_weak(tag_sub),
+ }),
+ be_str_weak(_cmp_gt),
+ &be_const_str_solidified,
+ ( &(const binstruction[72]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x20080403, // 0002 NE R2 R2 R3
+ 0x780A0012, // 0003 JMPF R2 #0017
+ 0x88080300, // 0004 GETMBR R2 R1 K0
+ 0x4C0C0000, // 0005 LDNIL R3
+ 0x1C080403, // 0006 EQ R2 R2 R3
+ 0x780A0000, // 0007 JMPF R2 #0009
+ 0x80060200, // 0008 RET 1 K1
+ 0x88080100, // 0009 GETMBR R2 R0 K0
+ 0x880C0300, // 000A GETMBR R3 R1 K0
+ 0x24080403, // 000B GT R2 R2 R3
+ 0x780A0000, // 000C JMPF R2 #000E
+ 0x80060200, // 000D RET 1 K1
+ 0x88080100, // 000E GETMBR R2 R0 K0
+ 0x880C0300, // 000F GETMBR R3 R1 K0
+ 0x1C080403, // 0010 EQ R2 R2 R3
+ 0x780A0004, // 0011 JMPF R2 #0017
+ 0x88080102, // 0012 GETMBR R2 R0 K2
+ 0x880C0302, // 0013 GETMBR R3 R1 K2
+ 0x24080403, // 0014 GT R2 R2 R3
+ 0x780A0000, // 0015 JMPF R2 #0017
+ 0x80060200, // 0016 RET 1 K1
+ 0x88080102, // 0017 GETMBR R2 R0 K2
+ 0x540DFFFE, // 0018 LDINT R3 -1
+ 0x1C080403, // 0019 EQ R2 R2 R3
+ 0x780A0005, // 001A JMPF R2 #0021
+ 0x88080302, // 001B GETMBR R2 R1 K2
+ 0x4C0C0000, // 001C LDNIL R3
+ 0x1C080403, // 001D EQ R2 R2 R3
+ 0x780A0000, // 001E JMPF R2 #0020
+ 0x80060200, // 001F RET 1 K1
+ 0x70020008, // 0020 JMP #002A
+ 0x88080102, // 0021 GETMBR R2 R0 K2
+ 0x4C0C0000, // 0022 LDNIL R3
+ 0x1C080403, // 0023 EQ R2 R2 R3
+ 0x780A0004, // 0024 JMPF R2 #002A
+ 0x88080302, // 0025 GETMBR R2 R1 K2
+ 0x540DFFFE, // 0026 LDINT R3 -1
+ 0x1C080403, // 0027 EQ R2 R2 R3
+ 0x780A0000, // 0028 JMPF R2 #002A
+ 0x80060600, // 0029 RET 1 K3
+ 0x88080104, // 002A GETMBR R2 R0 K4
+ 0x4C0C0000, // 002B LDNIL R3
+ 0x20080403, // 002C NE R2 R2 R3
+ 0x780A000A, // 002D JMPF R2 #0039
+ 0x88080304, // 002E GETMBR R2 R1 K4
+ 0x4C0C0000, // 002F LDNIL R3
+ 0x1C080403, // 0030 EQ R2 R2 R3
+ 0x780A0000, // 0031 JMPF R2 #0033
+ 0x80060200, // 0032 RET 1 K1
+ 0x88080104, // 0033 GETMBR R2 R0 K4
+ 0x880C0304, // 0034 GETMBR R3 R1 K4
+ 0x24080403, // 0035 GT R2 R2 R3
+ 0x780A0000, // 0036 JMPF R2 #0038
+ 0x80060200, // 0037 RET 1 K1
+ 0x80060600, // 0038 RET 1 K3
+ 0x88080105, // 0039 GETMBR R2 R0 K5
+ 0x4C0C0000, // 003A LDNIL R3
+ 0x20080403, // 003B NE R2 R2 R3
+ 0x780A0009, // 003C JMPF R2 #0047
+ 0x88080305, // 003D GETMBR R2 R1 K5
+ 0x4C0C0000, // 003E LDNIL R3
+ 0x1C080403, // 003F EQ R2 R2 R3
+ 0x780A0000, // 0040 JMPF R2 #0042
+ 0x80060200, // 0041 RET 1 K1
+ 0x88080105, // 0042 GETMBR R2 R0 K5
+ 0x880C0305, // 0043 GETMBR R3 R1 K5
+ 0x24080403, // 0044 GT R2 R2 R3
+ 0x780A0000, // 0045 JMPF R2 #0047
+ 0x80060200, // 0046 RET 1 K1
+ 0x80060600, // 0047 RET 1 K3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Matter_TLV_item_tostring, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[35]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(),
+ /* K2 */ be_nested_str_weak(tag_profile),
+ /* K3 */ be_nested_str_weak(Matter_X3A_X3A),
+ /* K4 */ be_nested_str_weak(tag_number),
+ /* K5 */ be_nested_str_weak(format),
+ /* K6 */ be_nested_str_weak(0x_X2508X_X20),
+ /* K7 */ be_nested_str_weak(tag_vendor),
+ /* K8 */ be_nested_str_weak(0x_X2504X_X3A_X3A),
+ /* K9 */ be_nested_str_weak(0x_X2504X_X3A),
+ /* K10 */ be_nested_str_weak(tag_sub),
+ /* K11 */ be_nested_str_weak(_X25i_X20),
+ /* K12 */ be_const_int(0),
+ /* K13 */ be_nested_str_weak(_X3D_X20),
+ /* K14 */ be_nested_str_weak(val),
+ /* K15 */ be_nested_str_weak(int),
+ /* K16 */ be_nested_str_weak(_X25i),
+ /* K17 */ be_nested_str_weak(typ),
+ /* K18 */ be_nested_str_weak(TLV),
+ /* K19 */ be_nested_str_weak(U1),
+ /* K20 */ be_nested_str_weak(U8),
+ /* K21 */ be_nested_str_weak(U),
+ /* K22 */ be_nested_str_weak(bool),
+ /* K23 */ be_nested_str_weak(true),
+ /* K24 */ be_nested_str_weak(false),
+ /* K25 */ be_nested_str_weak(null),
+ /* K26 */ be_nested_str_weak(real),
+ /* K27 */ be_nested_str_weak(_X25g),
+ /* K28 */ be_nested_str_weak(_X22_X25s_X22),
+ /* K29 */ be_nested_str_weak(int64),
+ /* K30 */ be_nested_str_weak(tostring),
+ /* K31 */ be_nested_str_weak(instance),
+ /* K32 */ be_nested_str_weak(_X25s),
+ /* K33 */ be_nested_str_weak(tohex),
+ /* K34 */ be_nested_str_weak(_X20),
+ }),
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[165]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x58080001, // 0001 LDCONST R2 K1
+ 0xA8020099, // 0002 EXBLK 0 #009D
+ 0x880C0102, // 0003 GETMBR R3 R0 K2
+ 0x5411FFFE, // 0004 LDINT R4 -1
+ 0x1C0C0604, // 0005 EQ R3 R3 R4
+ 0x780E000A, // 0006 JMPF R3 #0012
+ 0x00080503, // 0007 ADD R2 R2 K3
+ 0x880C0104, // 0008 GETMBR R3 R0 K4
+ 0x4C100000, // 0009 LDNIL R4
+ 0x200C0604, // 000A NE R3 R3 R4
+ 0x780E0004, // 000B JMPF R3 #0011
+ 0x8C0C0305, // 000C GETMET R3 R1 K5
+ 0x58140006, // 000D LDCONST R5 K6
+ 0x88180104, // 000E GETMBR R6 R0 K4
+ 0x7C0C0600, // 000F CALL R3 3
+ 0x00080403, // 0010 ADD R2 R2 R3
+ 0x70020023, // 0011 JMP #0036
+ 0x880C0107, // 0012 GETMBR R3 R0 K7
+ 0x4C100000, // 0013 LDNIL R4
+ 0x200C0604, // 0014 NE R3 R3 R4
+ 0x780E0004, // 0015 JMPF R3 #001B
+ 0x8C0C0305, // 0016 GETMET R3 R1 K5
+ 0x58140008, // 0017 LDCONST R5 K8
+ 0x88180107, // 0018 GETMBR R6 R0 K7
+ 0x7C0C0600, // 0019 CALL R3 3
+ 0x00080403, // 001A ADD R2 R2 R3
+ 0x880C0102, // 001B GETMBR R3 R0 K2
+ 0x4C100000, // 001C LDNIL R4
+ 0x200C0604, // 001D NE R3 R3 R4
+ 0x780E0004, // 001E JMPF R3 #0024
+ 0x8C0C0305, // 001F GETMET R3 R1 K5
+ 0x58140009, // 0020 LDCONST R5 K9
+ 0x88180102, // 0021 GETMBR R6 R0 K2
+ 0x7C0C0600, // 0022 CALL R3 3
+ 0x00080403, // 0023 ADD R2 R2 R3
+ 0x880C0104, // 0024 GETMBR R3 R0 K4
+ 0x4C100000, // 0025 LDNIL R4
+ 0x200C0604, // 0026 NE R3 R3 R4
+ 0x780E0004, // 0027 JMPF R3 #002D
+ 0x8C0C0305, // 0028 GETMET R3 R1 K5
+ 0x58140006, // 0029 LDCONST R5 K6
+ 0x88180104, // 002A GETMBR R6 R0 K4
+ 0x7C0C0600, // 002B CALL R3 3
+ 0x00080403, // 002C ADD R2 R2 R3
+ 0x880C010A, // 002D GETMBR R3 R0 K10
+ 0x4C100000, // 002E LDNIL R4
+ 0x200C0604, // 002F NE R3 R3 R4
+ 0x780E0004, // 0030 JMPF R3 #0036
+ 0x8C0C0305, // 0031 GETMET R3 R1 K5
+ 0x5814000B, // 0032 LDCONST R5 K11
+ 0x8818010A, // 0033 GETMBR R6 R0 K10
+ 0x7C0C0600, // 0034 CALL R3 3
+ 0x00080403, // 0035 ADD R2 R2 R3
+ 0x600C000C, // 0036 GETGBL R3 G12
+ 0x5C100400, // 0037 MOVE R4 R2
+ 0x7C0C0200, // 0038 CALL R3 1
+ 0x240C070C, // 0039 GT R3 R3 K12
+ 0x780E0000, // 003A JMPF R3 #003C
+ 0x0008050D, // 003B ADD R2 R2 K13
+ 0x600C0004, // 003C GETGBL R3 G4
+ 0x8810010E, // 003D GETMBR R4 R0 K14
+ 0x7C0C0200, // 003E CALL R3 1
+ 0x1C0C070F, // 003F EQ R3 R3 K15
+ 0x780E0010, // 0040 JMPF R3 #0052
+ 0x8C0C0305, // 0041 GETMET R3 R1 K5
+ 0x58140010, // 0042 LDCONST R5 K16
+ 0x8818010E, // 0043 GETMBR R6 R0 K14
+ 0x7C0C0600, // 0044 CALL R3 3
+ 0x00080403, // 0045 ADD R2 R2 R3
+ 0x880C0111, // 0046 GETMBR R3 R0 K17
+ 0x88100112, // 0047 GETMBR R4 R0 K18
+ 0x88100913, // 0048 GETMBR R4 R4 K19
+ 0x280C0604, // 0049 GE R3 R3 R4
+ 0x780E0005, // 004A JMPF R3 #0051
+ 0x880C0111, // 004B GETMBR R3 R0 K17
+ 0x88100112, // 004C GETMBR R4 R0 K18
+ 0x88100914, // 004D GETMBR R4 R4 K20
+ 0x180C0604, // 004E LE R3 R3 R4
+ 0x780E0000, // 004F JMPF R3 #0051
+ 0x00080515, // 0050 ADD R2 R2 K21
+ 0x70020048, // 0051 JMP #009B
+ 0x600C0004, // 0052 GETGBL R3 G4
+ 0x8810010E, // 0053 GETMBR R4 R0 K14
+ 0x7C0C0200, // 0054 CALL R3 1
+ 0x1C0C0716, // 0055 EQ R3 R3 K22
+ 0x780E0006, // 0056 JMPF R3 #005E
+ 0x880C010E, // 0057 GETMBR R3 R0 K14
+ 0x780E0001, // 0058 JMPF R3 #005B
+ 0x580C0017, // 0059 LDCONST R3 K23
+ 0x70020000, // 005A JMP #005C
+ 0x580C0018, // 005B LDCONST R3 K24
+ 0x00080403, // 005C ADD R2 R2 R3
+ 0x7002003C, // 005D JMP #009B
+ 0x880C010E, // 005E GETMBR R3 R0 K14
+ 0x4C100000, // 005F LDNIL R4
+ 0x1C0C0604, // 0060 EQ R3 R3 R4
+ 0x780E0001, // 0061 JMPF R3 #0064
+ 0x00080519, // 0062 ADD R2 R2 K25
+ 0x70020036, // 0063 JMP #009B
+ 0x600C0004, // 0064 GETGBL R3 G4
+ 0x8810010E, // 0065 GETMBR R4 R0 K14
+ 0x7C0C0200, // 0066 CALL R3 1
+ 0x1C0C071A, // 0067 EQ R3 R3 K26
+ 0x780E0005, // 0068 JMPF R3 #006F
+ 0x8C0C0305, // 0069 GETMET R3 R1 K5
+ 0x5814001B, // 006A LDCONST R5 K27
+ 0x8818010E, // 006B GETMBR R6 R0 K14
+ 0x7C0C0600, // 006C CALL R3 3
+ 0x00080403, // 006D ADD R2 R2 R3
+ 0x7002002B, // 006E JMP #009B
+ 0x600C0004, // 006F GETGBL R3 G4
+ 0x8810010E, // 0070 GETMBR R4 R0 K14
+ 0x7C0C0200, // 0071 CALL R3 1
+ 0x1C0C0700, // 0072 EQ R3 R3 K0
+ 0x780E0005, // 0073 JMPF R3 #007A
+ 0x8C0C0305, // 0074 GETMET R3 R1 K5
+ 0x5814001C, // 0075 LDCONST R5 K28
+ 0x8818010E, // 0076 GETMBR R6 R0 K14
+ 0x7C0C0600, // 0077 CALL R3 3
+ 0x00080403, // 0078 ADD R2 R2 R3
+ 0x70020020, // 0079 JMP #009B
+ 0x600C000F, // 007A GETGBL R3 G15
+ 0x8810010E, // 007B GETMBR R4 R0 K14
+ 0xB8163A00, // 007C GETNGBL R5 K29
+ 0x7C0C0400, // 007D CALL R3 2
+ 0x780E000F, // 007E JMPF R3 #008F
+ 0x880C010E, // 007F GETMBR R3 R0 K14
+ 0x8C0C071E, // 0080 GETMET R3 R3 K30
+ 0x7C0C0200, // 0081 CALL R3 1
+ 0x00080403, // 0082 ADD R2 R2 R3
+ 0x880C0111, // 0083 GETMBR R3 R0 K17
+ 0x88100112, // 0084 GETMBR R4 R0 K18
+ 0x88100913, // 0085 GETMBR R4 R4 K19
+ 0x280C0604, // 0086 GE R3 R3 R4
+ 0x780E0005, // 0087 JMPF R3 #008E
+ 0x880C0111, // 0088 GETMBR R3 R0 K17
+ 0x88100112, // 0089 GETMBR R4 R0 K18
+ 0x88100914, // 008A GETMBR R4 R4 K20
+ 0x180C0604, // 008B LE R3 R3 R4
+ 0x780E0000, // 008C JMPF R3 #008E
+ 0x00080515, // 008D ADD R2 R2 K21
+ 0x7002000B, // 008E JMP #009B
+ 0x600C0004, // 008F GETGBL R3 G4
+ 0x8810010E, // 0090 GETMBR R4 R0 K14
+ 0x7C0C0200, // 0091 CALL R3 1
+ 0x1C0C071F, // 0092 EQ R3 R3 K31
+ 0x780E0006, // 0093 JMPF R3 #009B
+ 0x8C0C0305, // 0094 GETMET R3 R1 K5
+ 0x58140020, // 0095 LDCONST R5 K32
+ 0x8818010E, // 0096 GETMBR R6 R0 K14
+ 0x8C180D21, // 0097 GETMET R6 R6 K33
+ 0x7C180200, // 0098 CALL R6 1
+ 0x7C0C0600, // 0099 CALL R3 3
+ 0x00080403, // 009A ADD R2 R2 R3
+ 0xA8040001, // 009B EXBLK 1 1
+ 0x70020006, // 009C JMP #00A4
+ 0xAC0C0002, // 009D CATCH R3 0 2
+ 0x70020003, // 009E JMP #00A3
+ 0x00140722, // 009F ADD R5 R3 K34
+ 0x00140A04, // 00A0 ADD R5 R5 R4
+ 0x80040A00, // 00A1 RET 1 R5
+ 0x70020000, // 00A2 JMP #00A4
+ 0xB0080000, // 00A3 RAISE 2 R0 R0
+ 0x80040400, // 00A4 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: encode_len
+********************************************************************/
+be_local_closure(Matter_TLV_item_encode_len, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[31]) { /* constants */
+ /* K0 */ be_nested_str_weak(TLV),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(typ),
+ /* K3 */ be_nested_str_weak(BFALSE),
+ /* K4 */ be_nested_str_weak(BTRUE),
+ /* K5 */ be_nested_str_weak(val),
+ /* K6 */ be_nested_str_weak(I2),
+ /* K7 */ be_nested_str_weak(I4),
+ /* K8 */ be_nested_str_weak(I1),
+ /* K9 */ be_nested_str_weak(U2),
+ /* K10 */ be_nested_str_weak(U4),
+ /* K11 */ be_nested_str_weak(U1),
+ /* K12 */ be_nested_str_weak(B1),
+ /* K13 */ be_nested_str_weak(B8),
+ /* K14 */ be_nested_str_weak(B2),
+ /* K15 */ be_nested_str_weak(B4),
+ /* K16 */ be_nested_str_weak(UTF1),
+ /* K17 */ be_nested_str_weak(UTF8),
+ /* K18 */ be_nested_str_weak(UTF2),
+ /* K19 */ be_nested_str_weak(UTF4),
+ /* K20 */ be_nested_str_weak(_encode_tag_len),
+ /* K21 */ be_const_int(1),
+ /* K22 */ be_const_int(2),
+ /* K23 */ be_nested_str_weak(I8),
+ /* K24 */ be_nested_str_weak(U8),
+ /* K25 */ be_nested_str_weak(FLOAT),
+ /* K26 */ be_nested_str_weak(DOUBLE),
+ /* K27 */ be_nested_str_weak(value_error),
+ /* K28 */ be_nested_str_weak(Unsupported_X20type_X20TLV_X2EDOUBLE),
+ /* K29 */ be_nested_str_weak(NULL),
+ /* K30 */ be_nested_str_weak(unsupported_X20type_X20),
+ }),
+ be_str_weak(encode_len),
+ &be_const_str_solidified,
+ ( &(const binstruction[250]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x58080001, // 0001 LDCONST R2 K1
+ 0x880C0102, // 0002 GETMBR R3 R0 K2
+ 0x88100303, // 0003 GETMBR R4 R1 K3
+ 0x1C0C0604, // 0004 EQ R3 R3 R4
+ 0x740E0003, // 0005 JMPT R3 #000A
+ 0x880C0102, // 0006 GETMBR R3 R0 K2
+ 0x88100304, // 0007 GETMBR R4 R1 K4
+ 0x1C0C0604, // 0008 EQ R3 R3 R4
+ 0x780E0008, // 0009 JMPF R3 #0013
+ 0x600C0017, // 000A GETGBL R3 G23
+ 0x88100105, // 000B GETMBR R4 R0 K5
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x780E0001, // 000D JMPF R3 #0010
+ 0x880C0304, // 000E GETMBR R3 R1 K4
+ 0x70020000, // 000F JMP #0011
+ 0x880C0303, // 0010 GETMBR R3 R1 K3
+ 0x90020403, // 0011 SETMBR R0 K2 R3
+ 0x70020070, // 0012 JMP #0084
+ 0x880C0102, // 0013 GETMBR R3 R0 K2
+ 0x88100306, // 0014 GETMBR R4 R1 K6
+ 0x280C0604, // 0015 GE R3 R3 R4
+ 0x780E0018, // 0016 JMPF R3 #0030
+ 0x880C0102, // 0017 GETMBR R3 R0 K2
+ 0x88100307, // 0018 GETMBR R4 R1 K7
+ 0x180C0604, // 0019 LE R3 R3 R4
+ 0x780E0014, // 001A JMPF R3 #0030
+ 0x600C0009, // 001B GETGBL R3 G9
+ 0x88100105, // 001C GETMBR R4 R0 K5
+ 0x7C0C0200, // 001D CALL R3 1
+ 0x5412007E, // 001E LDINT R4 127
+ 0x18100604, // 001F LE R4 R3 R4
+ 0x78120005, // 0020 JMPF R4 #0027
+ 0x5411FF7F, // 0021 LDINT R4 -128
+ 0x28100604, // 0022 GE R4 R3 R4
+ 0x78120002, // 0023 JMPF R4 #0027
+ 0x88100308, // 0024 GETMBR R4 R1 K8
+ 0x90020404, // 0025 SETMBR R0 K2 R4
+ 0x70020007, // 0026 JMP #002F
+ 0x54127FFE, // 0027 LDINT R4 32767
+ 0x18100604, // 0028 LE R4 R3 R4
+ 0x78120004, // 0029 JMPF R4 #002F
+ 0x54117FFF, // 002A LDINT R4 -32768
+ 0x28100604, // 002B GE R4 R3 R4
+ 0x78120001, // 002C JMPF R4 #002F
+ 0x88100306, // 002D GETMBR R4 R1 K6
+ 0x90020404, // 002E SETMBR R0 K2 R4
+ 0x70020053, // 002F JMP #0084
+ 0x880C0102, // 0030 GETMBR R3 R0 K2
+ 0x88100309, // 0031 GETMBR R4 R1 K9
+ 0x280C0604, // 0032 GE R3 R3 R4
+ 0x780E0016, // 0033 JMPF R3 #004B
+ 0x880C0102, // 0034 GETMBR R3 R0 K2
+ 0x8810030A, // 0035 GETMBR R4 R1 K10
+ 0x180C0604, // 0036 LE R3 R3 R4
+ 0x780E0012, // 0037 JMPF R3 #004B
+ 0x600C0009, // 0038 GETGBL R3 G9
+ 0x88100105, // 0039 GETMBR R4 R0 K5
+ 0x7C0C0200, // 003A CALL R3 1
+ 0x541200FE, // 003B LDINT R4 255
+ 0x18100604, // 003C LE R4 R3 R4
+ 0x78120004, // 003D JMPF R4 #0043
+ 0x28100701, // 003E GE R4 R3 K1
+ 0x78120002, // 003F JMPF R4 #0043
+ 0x8810030B, // 0040 GETMBR R4 R1 K11
+ 0x90020404, // 0041 SETMBR R0 K2 R4
+ 0x70020006, // 0042 JMP #004A
+ 0x5412FFFE, // 0043 LDINT R4 65535
+ 0x18100604, // 0044 LE R4 R3 R4
+ 0x78120003, // 0045 JMPF R4 #004A
+ 0x28100701, // 0046 GE R4 R3 K1
+ 0x78120001, // 0047 JMPF R4 #004A
+ 0x88100309, // 0048 GETMBR R4 R1 K9
+ 0x90020404, // 0049 SETMBR R0 K2 R4
+ 0x70020038, // 004A JMP #0084
+ 0x880C0102, // 004B GETMBR R3 R0 K2
+ 0x8810030C, // 004C GETMBR R4 R1 K12
+ 0x280C0604, // 004D GE R3 R3 R4
+ 0x780E0018, // 004E JMPF R3 #0068
+ 0x880C0102, // 004F GETMBR R3 R0 K2
+ 0x8810030D, // 0050 GETMBR R4 R1 K13
+ 0x180C0604, // 0051 LE R3 R3 R4
+ 0x780E0014, // 0052 JMPF R3 #0068
+ 0x600C000C, // 0053 GETGBL R3 G12
+ 0x88100105, // 0054 GETMBR R4 R0 K5
+ 0x7C0C0200, // 0055 CALL R3 1
+ 0x541200FE, // 0056 LDINT R4 255
+ 0x180C0604, // 0057 LE R3 R3 R4
+ 0x780E0002, // 0058 JMPF R3 #005C
+ 0x880C030C, // 0059 GETMBR R3 R1 K12
+ 0x90020403, // 005A SETMBR R0 K2 R3
+ 0x7002000A, // 005B JMP #0067
+ 0x600C000C, // 005C GETGBL R3 G12
+ 0x88100105, // 005D GETMBR R4 R0 K5
+ 0x7C0C0200, // 005E CALL R3 1
+ 0x5412FFFE, // 005F LDINT R4 65535
+ 0x180C0604, // 0060 LE R3 R3 R4
+ 0x780E0002, // 0061 JMPF R3 #0065
+ 0x880C030E, // 0062 GETMBR R3 R1 K14
+ 0x90020403, // 0063 SETMBR R0 K2 R3
+ 0x70020001, // 0064 JMP #0067
+ 0x880C030F, // 0065 GETMBR R3 R1 K15
+ 0x90020403, // 0066 SETMBR R0 K2 R3
+ 0x7002001B, // 0067 JMP #0084
+ 0x880C0102, // 0068 GETMBR R3 R0 K2
+ 0x88100310, // 0069 GETMBR R4 R1 K16
+ 0x280C0604, // 006A GE R3 R3 R4
+ 0x780E0017, // 006B JMPF R3 #0084
+ 0x880C0102, // 006C GETMBR R3 R0 K2
+ 0x88100311, // 006D GETMBR R4 R1 K17
+ 0x180C0604, // 006E LE R3 R3 R4
+ 0x780E0013, // 006F JMPF R3 #0084
+ 0x600C000C, // 0070 GETGBL R3 G12
+ 0x88100105, // 0071 GETMBR R4 R0 K5
+ 0x7C0C0200, // 0072 CALL R3 1
+ 0x541200FE, // 0073 LDINT R4 255
+ 0x180C0604, // 0074 LE R3 R3 R4
+ 0x780E0002, // 0075 JMPF R3 #0079
+ 0x880C0310, // 0076 GETMBR R3 R1 K16
+ 0x90020403, // 0077 SETMBR R0 K2 R3
+ 0x7002000A, // 0078 JMP #0084
+ 0x600C000C, // 0079 GETGBL R3 G12
+ 0x88100105, // 007A GETMBR R4 R0 K5
+ 0x7C0C0200, // 007B CALL R3 1
+ 0x5412FFFE, // 007C LDINT R4 65535
+ 0x180C0604, // 007D LE R3 R3 R4
+ 0x780E0002, // 007E JMPF R3 #0082
+ 0x880C0312, // 007F GETMBR R3 R1 K18
+ 0x90020403, // 0080 SETMBR R0 K2 R3
+ 0x70020001, // 0081 JMP #0084
+ 0x880C0313, // 0082 GETMBR R3 R1 K19
+ 0x90020403, // 0083 SETMBR R0 K2 R3
+ 0x8C0C0114, // 0084 GETMET R3 R0 K20
+ 0x7C0C0200, // 0085 CALL R3 1
+ 0x00080403, // 0086 ADD R2 R2 R3
+ 0x880C0102, // 0087 GETMBR R3 R0 K2
+ 0x88100308, // 0088 GETMBR R4 R1 K8
+ 0x1C0C0604, // 0089 EQ R3 R3 R4
+ 0x740E0003, // 008A JMPT R3 #008F
+ 0x880C0102, // 008B GETMBR R3 R0 K2
+ 0x8810030B, // 008C GETMBR R4 R1 K11
+ 0x1C0C0604, // 008D EQ R3 R3 R4
+ 0x780E0001, // 008E JMPF R3 #0091
+ 0x00080515, // 008F ADD R2 R2 K21
+ 0x70020067, // 0090 JMP #00F9
+ 0x880C0102, // 0091 GETMBR R3 R0 K2
+ 0x88100306, // 0092 GETMBR R4 R1 K6
+ 0x1C0C0604, // 0093 EQ R3 R3 R4
+ 0x740E0003, // 0094 JMPT R3 #0099
+ 0x880C0102, // 0095 GETMBR R3 R0 K2
+ 0x88100309, // 0096 GETMBR R4 R1 K9
+ 0x1C0C0604, // 0097 EQ R3 R3 R4
+ 0x780E0001, // 0098 JMPF R3 #009B
+ 0x00080516, // 0099 ADD R2 R2 K22
+ 0x7002005D, // 009A JMP #00F9
+ 0x880C0102, // 009B GETMBR R3 R0 K2
+ 0x88100307, // 009C GETMBR R4 R1 K7
+ 0x1C0C0604, // 009D EQ R3 R3 R4
+ 0x740E0003, // 009E JMPT R3 #00A3
+ 0x880C0102, // 009F GETMBR R3 R0 K2
+ 0x8810030A, // 00A0 GETMBR R4 R1 K10
+ 0x1C0C0604, // 00A1 EQ R3 R3 R4
+ 0x780E0002, // 00A2 JMPF R3 #00A6
+ 0x540E0003, // 00A3 LDINT R3 4
+ 0x00080403, // 00A4 ADD R2 R2 R3
+ 0x70020052, // 00A5 JMP #00F9
+ 0x880C0102, // 00A6 GETMBR R3 R0 K2
+ 0x88100317, // 00A7 GETMBR R4 R1 K23
+ 0x1C0C0604, // 00A8 EQ R3 R3 R4
+ 0x740E0003, // 00A9 JMPT R3 #00AE
+ 0x880C0102, // 00AA GETMBR R3 R0 K2
+ 0x88100318, // 00AB GETMBR R4 R1 K24
+ 0x1C0C0604, // 00AC EQ R3 R3 R4
+ 0x780E0002, // 00AD JMPF R3 #00B1
+ 0x540E0007, // 00AE LDINT R3 8
+ 0x00080403, // 00AF ADD R2 R2 R3
+ 0x70020047, // 00B0 JMP #00F9
+ 0x880C0102, // 00B1 GETMBR R3 R0 K2
+ 0x88100303, // 00B2 GETMBR R4 R1 K3
+ 0x1C0C0604, // 00B3 EQ R3 R3 R4
+ 0x740E0003, // 00B4 JMPT R3 #00B9
+ 0x880C0102, // 00B5 GETMBR R3 R0 K2
+ 0x88100304, // 00B6 GETMBR R4 R1 K4
+ 0x1C0C0604, // 00B7 EQ R3 R3 R4
+ 0x780E0000, // 00B8 JMPF R3 #00BA
+ 0x7002003E, // 00B9 JMP #00F9
+ 0x880C0102, // 00BA GETMBR R3 R0 K2
+ 0x88100319, // 00BB GETMBR R4 R1 K25
+ 0x1C0C0604, // 00BC EQ R3 R3 R4
+ 0x780E0002, // 00BD JMPF R3 #00C1
+ 0x540E0003, // 00BE LDINT R3 4
+ 0x00080403, // 00BF ADD R2 R2 R3
+ 0x70020037, // 00C0 JMP #00F9
+ 0x880C0102, // 00C1 GETMBR R3 R0 K2
+ 0x8810031A, // 00C2 GETMBR R4 R1 K26
+ 0x1C0C0604, // 00C3 EQ R3 R3 R4
+ 0x780E0001, // 00C4 JMPF R3 #00C7
+ 0xB006371C, // 00C5 RAISE 1 K27 K28
+ 0x70020031, // 00C6 JMP #00F9
+ 0x880C0102, // 00C7 GETMBR R3 R0 K2
+ 0x88100310, // 00C8 GETMBR R4 R1 K16
+ 0x1C0C0604, // 00C9 EQ R3 R3 R4
+ 0x780E0005, // 00CA JMPF R3 #00D1
+ 0x600C000C, // 00CB GETGBL R3 G12
+ 0x88100105, // 00CC GETMBR R4 R0 K5
+ 0x7C0C0200, // 00CD CALL R3 1
+ 0x000E2A03, // 00CE ADD R3 K21 R3
+ 0x00080403, // 00CF ADD R2 R2 R3
+ 0x70020027, // 00D0 JMP #00F9
+ 0x880C0102, // 00D1 GETMBR R3 R0 K2
+ 0x88100312, // 00D2 GETMBR R4 R1 K18
+ 0x1C0C0604, // 00D3 EQ R3 R3 R4
+ 0x780E0005, // 00D4 JMPF R3 #00DB
+ 0x600C000C, // 00D5 GETGBL R3 G12
+ 0x88100105, // 00D6 GETMBR R4 R0 K5
+ 0x7C0C0200, // 00D7 CALL R3 1
+ 0x000E2C03, // 00D8 ADD R3 K22 R3
+ 0x00080403, // 00D9 ADD R2 R2 R3
+ 0x7002001D, // 00DA JMP #00F9
+ 0x880C0102, // 00DB GETMBR R3 R0 K2
+ 0x8810030C, // 00DC GETMBR R4 R1 K12
+ 0x1C0C0604, // 00DD EQ R3 R3 R4
+ 0x780E0005, // 00DE JMPF R3 #00E5
+ 0x600C000C, // 00DF GETGBL R3 G12
+ 0x88100105, // 00E0 GETMBR R4 R0 K5
+ 0x7C0C0200, // 00E1 CALL R3 1
+ 0x000E2A03, // 00E2 ADD R3 K21 R3
+ 0x00080403, // 00E3 ADD R2 R2 R3
+ 0x70020013, // 00E4 JMP #00F9
+ 0x880C0102, // 00E5 GETMBR R3 R0 K2
+ 0x8810030E, // 00E6 GETMBR R4 R1 K14
+ 0x1C0C0604, // 00E7 EQ R3 R3 R4
+ 0x780E0005, // 00E8 JMPF R3 #00EF
+ 0x600C000C, // 00E9 GETGBL R3 G12
+ 0x88100105, // 00EA GETMBR R4 R0 K5
+ 0x7C0C0200, // 00EB CALL R3 1
+ 0x000E2C03, // 00EC ADD R3 K22 R3
+ 0x00080403, // 00ED ADD R2 R2 R3
+ 0x70020009, // 00EE JMP #00F9
+ 0x880C0102, // 00EF GETMBR R3 R0 K2
+ 0x8810031D, // 00F0 GETMBR R4 R1 K29
+ 0x1C0C0604, // 00F1 EQ R3 R3 R4
+ 0x780E0000, // 00F2 JMPF R3 #00F4
+ 0x70020004, // 00F3 JMP #00F9
+ 0x600C0008, // 00F4 GETGBL R3 G8
+ 0x88100102, // 00F5 GETMBR R4 R0 K2
+ 0x7C0C0200, // 00F6 CALL R3 1
+ 0x000E3C03, // 00F7 ADD R3 K30 R3
+ 0xB0063603, // 00F8 RAISE 1 K27 R3
+ 0x80040400, // 00F9 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_contextspecific
+********************************************************************/
+be_local_closure(Matter_TLV_item_set_contextspecific, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(set_fulltag),
+ /* K1 */ be_nested_str_weak(tag_sub),
+ }),
+ be_str_weak(set_contextspecific),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x8C080100, // 0000 GETMET R2 R0 K0
+ 0x7C080200, // 0001 CALL R2 1
+ 0x60080009, // 0002 GETGBL R2 G9
+ 0x5C0C0200, // 0003 MOVE R3 R1
+ 0x7C080200, // 0004 CALL R2 1
+ 0x90020202, // 0005 SETMBR R0 K1 R2
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_fulltag
+********************************************************************/
+be_local_closure(Matter_TLV_item_set_fulltag, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(tag_vendor),
+ /* K1 */ be_nested_str_weak(tag_profile),
+ /* K2 */ be_nested_str_weak(tag_number),
+ /* K3 */ be_nested_str_weak(tag_sub),
+ }),
+ be_str_weak(set_fulltag),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x60100009, // 0000 GETGBL R4 G9
+ 0x5C140200, // 0001 MOVE R5 R1
+ 0x7C100200, // 0002 CALL R4 1
+ 0x90020004, // 0003 SETMBR R0 K0 R4
+ 0x60100009, // 0004 GETGBL R4 G9
+ 0x5C140400, // 0005 MOVE R5 R2
+ 0x7C100200, // 0006 CALL R4 1
+ 0x90020204, // 0007 SETMBR R0 K1 R4
+ 0x60100009, // 0008 GETGBL R4 G9
+ 0x5C140600, // 0009 MOVE R5 R3
+ 0x7C100200, // 000A CALL R4 1
+ 0x90020404, // 000B SETMBR R0 K2 R4
+ 0x4C100000, // 000C LDNIL R4
+ 0x90020604, // 000D SETMBR R0 K3 R4
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _encode_tag_len
+********************************************************************/
+be_local_closure(Matter_TLV_item__encode_tag_len, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(tag_number),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(tag_vendor),
+ /* K3 */ be_nested_str_weak(tag_profile),
+ /* K4 */ be_const_int(3),
+ /* K5 */ be_nested_str_weak(tag_sub),
+ /* K6 */ be_const_int(2),
+ /* K7 */ be_const_int(1),
+ }),
+ be_str_weak(_encode_tag_len),
+ &be_const_str_solidified,
+ ( &(const binstruction[54]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x4C080000, // 0001 LDNIL R2
+ 0x20040202, // 0002 NE R1 R1 R2
+ 0x78060001, // 0003 JMPF R1 #0006
+ 0x88040100, // 0004 GETMBR R1 R0 K0
+ 0x70020000, // 0005 JMP #0007
+ 0x58040001, // 0006 LDCONST R1 K1
+ 0x540AFFFF, // 0007 LDINT R2 65536
+ 0x28080202, // 0008 GE R2 R1 R2
+ 0x740A0002, // 0009 JMPT R2 #000D
+ 0x14080301, // 000A LT R2 R1 K1
+ 0x740A0000, // 000B JMPT R2 #000D
+ 0x50080001, // 000C LDBOOL R2 0 1
+ 0x50080200, // 000D LDBOOL R2 1 0
+ 0x580C0001, // 000E LDCONST R3 K1
+ 0x88100102, // 000F GETMBR R4 R0 K2
+ 0x4C140000, // 0010 LDNIL R5
+ 0x20100805, // 0011 NE R4 R4 R5
+ 0x78120006, // 0012 JMPF R4 #001A
+ 0x780A0002, // 0013 JMPF R2 #0017
+ 0x54120008, // 0014 LDINT R4 9
+ 0x80040800, // 0015 RET 1 R4
+ 0x70020001, // 0016 JMP #0019
+ 0x54120006, // 0017 LDINT R4 7
+ 0x80040800, // 0018 RET 1 R4
+ 0x7002001A, // 0019 JMP #0035
+ 0x88100103, // 001A GETMBR R4 R0 K3
+ 0x5415FFFE, // 001B LDINT R5 -1
+ 0x1C100805, // 001C EQ R4 R4 R5
+ 0x78120005, // 001D JMPF R4 #0024
+ 0x780A0002, // 001E JMPF R2 #0022
+ 0x54120004, // 001F LDINT R4 5
+ 0x80040800, // 0020 RET 1 R4
+ 0x70020000, // 0021 JMP #0023
+ 0x80060800, // 0022 RET 1 K4
+ 0x70020010, // 0023 JMP #0035
+ 0x88100103, // 0024 GETMBR R4 R0 K3
+ 0x4C140000, // 0025 LDNIL R5
+ 0x20100805, // 0026 NE R4 R4 R5
+ 0x78120005, // 0027 JMPF R4 #002E
+ 0x780A0002, // 0028 JMPF R2 #002C
+ 0x54120004, // 0029 LDINT R4 5
+ 0x80040800, // 002A RET 1 R4
+ 0x70020000, // 002B JMP #002D
+ 0x80060800, // 002C RET 1 K4
+ 0x70020006, // 002D JMP #0035
+ 0x88100105, // 002E GETMBR R4 R0 K5
+ 0x4C140000, // 002F LDNIL R5
+ 0x20100805, // 0030 NE R4 R4 R5
+ 0x78120001, // 0031 JMPF R4 #0034
+ 0x80060C00, // 0032 RET 1 K6
+ 0x70020000, // 0033 JMP #0035
+ 0x80060E00, // 0034 RET 1 K7
+ 0x80000000, // 0035 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_TLV_item_init, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(parent),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: encode
********************************************************************/
@@ -464,272 +1542,61 @@ be_local_closure(Matter_TLV_item_encode, /* name */
/********************************************************************
-** Solidified function: create_TLV
+** Solidified function: sort
********************************************************************/
-be_local_closure(Matter_TLV_item_create_TLV, /* name */
+be_local_closure(Matter_TLV_item_sort, /* name */
be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
+ 9, /* nstack */
+ 1, /* argc */
4, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
+ ( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_const_class(be_class_Matter_TLV_item),
- /* K1 */ be_nested_str_weak(typ),
- /* K2 */ be_nested_str_weak(val),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(_cmp_gt),
+ /* K4 */ be_nested_str_weak(stop_iteration),
}),
- be_str_weak(create_TLV),
+ be_str_weak(sort),
&be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x58080000, // 0000 LDCONST R2 K0
- 0x4C0C0000, // 0001 LDNIL R3
- 0x200C0203, // 0002 NE R3 R1 R3
- 0x780E0004, // 0003 JMPF R3 #0009
- 0x5C0C0400, // 0004 MOVE R3 R2
- 0x7C0C0000, // 0005 CALL R3 0
- 0x900E0200, // 0006 SETMBR R3 K1 R0
- 0x900E0401, // 0007 SETMBR R3 K2 R1
- 0x80040600, // 0008 RET 1 R3
- 0x80000000, // 0009 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _encode_tag
-********************************************************************/
-be_local_closure(Matter_TLV_item__encode_tag, /* name */
- be_nested_proto(
- 9, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
- /* K0 */ be_nested_str_weak(tag_number),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(tag_vendor),
- /* K3 */ be_nested_str_weak(add),
- /* K4 */ be_nested_str_weak(typ),
- /* K5 */ be_const_int(1),
- /* K6 */ be_const_int(2),
- /* K7 */ be_nested_str_weak(tag_profile),
- /* K8 */ be_nested_str_weak(tag_sub),
- }),
- be_str_weak(_encode_tag),
- &be_const_str_solidified,
- ( &(const binstruction[133]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x4C0C0000, // 0001 LDNIL R3
- 0x20080403, // 0002 NE R2 R2 R3
- 0x780A0001, // 0003 JMPF R2 #0006
- 0x88080100, // 0004 GETMBR R2 R0 K0
- 0x70020000, // 0005 JMP #0007
- 0x58080001, // 0006 LDCONST R2 K1
- 0x540EFFFF, // 0007 LDINT R3 65536
- 0x280C0403, // 0008 GE R3 R2 R3
- 0x740E0002, // 0009 JMPT R3 #000D
- 0x140C0501, // 000A LT R3 R2 K1
- 0x740E0000, // 000B JMPT R3 #000D
- 0x500C0001, // 000C LDBOOL R3 0 1
- 0x500C0200, // 000D LDBOOL R3 1 0
- 0x58100001, // 000E LDCONST R4 K1
- 0x88140102, // 000F GETMBR R5 R0 K2
- 0x4C180000, // 0010 LDNIL R6
- 0x20140A06, // 0011 NE R5 R5 R6
- 0x78160026, // 0012 JMPF R5 #003A
- 0x780E0012, // 0013 JMPF R3 #0027
- 0x8C140303, // 0014 GETMET R5 R1 K3
- 0x541E00DF, // 0015 LDINT R7 224
- 0x88200104, // 0016 GETMBR R8 R0 K4
- 0x001C0E08, // 0017 ADD R7 R7 R8
- 0x58200005, // 0018 LDCONST R8 K5
- 0x7C140600, // 0019 CALL R5 3
- 0x8C140303, // 001A GETMET R5 R1 K3
- 0x881C0102, // 001B GETMBR R7 R0 K2
- 0x58200006, // 001C LDCONST R8 K6
- 0x7C140600, // 001D CALL R5 3
- 0x8C140303, // 001E GETMET R5 R1 K3
- 0x881C0107, // 001F GETMBR R7 R0 K7
- 0x58200006, // 0020 LDCONST R8 K6
- 0x7C140600, // 0021 CALL R5 3
- 0x8C140303, // 0022 GETMET R5 R1 K3
- 0x881C0100, // 0023 GETMBR R7 R0 K0
- 0x54220003, // 0024 LDINT R8 4
- 0x7C140600, // 0025 CALL R5 3
- 0x70020011, // 0026 JMP #0039
- 0x8C140303, // 0027 GETMET R5 R1 K3
- 0x541E00BF, // 0028 LDINT R7 192
- 0x88200104, // 0029 GETMBR R8 R0 K4
- 0x001C0E08, // 002A ADD R7 R7 R8
- 0x58200005, // 002B LDCONST R8 K5
- 0x7C140600, // 002C CALL R5 3
- 0x8C140303, // 002D GETMET R5 R1 K3
- 0x881C0102, // 002E GETMBR R7 R0 K2
- 0x58200006, // 002F LDCONST R8 K6
- 0x7C140600, // 0030 CALL R5 3
- 0x8C140303, // 0031 GETMET R5 R1 K3
- 0x881C0107, // 0032 GETMBR R7 R0 K7
- 0x58200006, // 0033 LDCONST R8 K6
- 0x7C140600, // 0034 CALL R5 3
- 0x8C140303, // 0035 GETMET R5 R1 K3
- 0x881C0100, // 0036 GETMBR R7 R0 K0
- 0x58200006, // 0037 LDCONST R8 K6
- 0x7C140600, // 0038 CALL R5 3
- 0x70020049, // 0039 JMP #0084
- 0x88140107, // 003A GETMBR R5 R0 K7
- 0x5419FFFE, // 003B LDINT R6 -1
- 0x1C140A06, // 003C EQ R5 R5 R6
- 0x78160016, // 003D JMPF R5 #0055
- 0x780E000A, // 003E JMPF R3 #004A
- 0x8C140303, // 003F GETMET R5 R1 K3
- 0x541E005F, // 0040 LDINT R7 96
- 0x88200104, // 0041 GETMBR R8 R0 K4
- 0x001C0E08, // 0042 ADD R7 R7 R8
- 0x58200005, // 0043 LDCONST R8 K5
- 0x7C140600, // 0044 CALL R5 3
- 0x8C140303, // 0045 GETMET R5 R1 K3
- 0x881C0100, // 0046 GETMBR R7 R0 K0
- 0x54220003, // 0047 LDINT R8 4
- 0x7C140600, // 0048 CALL R5 3
- 0x70020009, // 0049 JMP #0054
- 0x8C140303, // 004A GETMET R5 R1 K3
- 0x541E003F, // 004B LDINT R7 64
- 0x88200104, // 004C GETMBR R8 R0 K4
- 0x001C0E08, // 004D ADD R7 R7 R8
- 0x58200005, // 004E LDCONST R8 K5
- 0x7C140600, // 004F CALL R5 3
- 0x8C140303, // 0050 GETMET R5 R1 K3
- 0x881C0100, // 0051 GETMBR R7 R0 K0
- 0x58200006, // 0052 LDCONST R8 K6
- 0x7C140600, // 0053 CALL R5 3
- 0x7002002E, // 0054 JMP #0084
- 0x88140107, // 0055 GETMBR R5 R0 K7
- 0x4C180000, // 0056 LDNIL R6
- 0x20140A06, // 0057 NE R5 R5 R6
- 0x78160016, // 0058 JMPF R5 #0070
- 0x780E000A, // 0059 JMPF R3 #0065
- 0x8C140303, // 005A GETMET R5 R1 K3
- 0x541E009F, // 005B LDINT R7 160
- 0x88200104, // 005C GETMBR R8 R0 K4
- 0x001C0E08, // 005D ADD R7 R7 R8
- 0x58200005, // 005E LDCONST R8 K5
- 0x7C140600, // 005F CALL R5 3
- 0x8C140303, // 0060 GETMET R5 R1 K3
- 0x881C0100, // 0061 GETMBR R7 R0 K0
- 0x54220003, // 0062 LDINT R8 4
- 0x7C140600, // 0063 CALL R5 3
- 0x70020009, // 0064 JMP #006F
- 0x8C140303, // 0065 GETMET R5 R1 K3
- 0x541E007F, // 0066 LDINT R7 128
- 0x88200104, // 0067 GETMBR R8 R0 K4
- 0x001C0E08, // 0068 ADD R7 R7 R8
- 0x58200005, // 0069 LDCONST R8 K5
- 0x7C140600, // 006A CALL R5 3
- 0x8C140303, // 006B GETMET R5 R1 K3
- 0x881C0100, // 006C GETMBR R7 R0 K0
- 0x58200006, // 006D LDCONST R8 K6
- 0x7C140600, // 006E CALL R5 3
- 0x70020013, // 006F JMP #0084
- 0x88140108, // 0070 GETMBR R5 R0 K8
- 0x4C180000, // 0071 LDNIL R6
- 0x20140A06, // 0072 NE R5 R5 R6
- 0x7816000A, // 0073 JMPF R5 #007F
- 0x8C140303, // 0074 GETMET R5 R1 K3
- 0x541E001F, // 0075 LDINT R7 32
- 0x88200104, // 0076 GETMBR R8 R0 K4
- 0x001C0E08, // 0077 ADD R7 R7 R8
- 0x58200005, // 0078 LDCONST R8 K5
- 0x7C140600, // 0079 CALL R5 3
- 0x8C140303, // 007A GETMET R5 R1 K3
- 0x881C0108, // 007B GETMBR R7 R0 K8
- 0x58200005, // 007C LDCONST R8 K5
- 0x7C140600, // 007D CALL R5 3
- 0x70020004, // 007E JMP #0084
- 0x8C140303, // 007F GETMET R5 R1 K3
- 0x881C0104, // 0080 GETMBR R7 R0 K4
- 0x001E0207, // 0081 ADD R7 K1 R7
- 0x58200005, // 0082 LDCONST R8 K5
- 0x7C140600, // 0083 CALL R5 3
- 0x80000000, // 0084 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_parent
-********************************************************************/
-be_local_closure(Matter_TLV_item_set_parent, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(parent),
- }),
- be_str_weak(set_parent),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_fulltag
-********************************************************************/
-be_local_closure(Matter_TLV_item_set_fulltag, /* name */
- be_nested_proto(
- 6, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(tag_vendor),
- /* K1 */ be_nested_str_weak(tag_profile),
- /* K2 */ be_nested_str_weak(tag_number),
- /* K3 */ be_nested_str_weak(tag_sub),
- }),
- be_str_weak(set_fulltag),
- &be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x60100009, // 0000 GETGBL R4 G9
- 0x5C140200, // 0001 MOVE R5 R1
- 0x7C100200, // 0002 CALL R4 1
- 0x90020004, // 0003 SETMBR R0 K0 R4
- 0x60100009, // 0004 GETGBL R4 G9
- 0x5C140400, // 0005 MOVE R5 R2
- 0x7C100200, // 0006 CALL R4 1
- 0x90020204, // 0007 SETMBR R0 K1 R4
- 0x60100009, // 0008 GETGBL R4 G9
- 0x5C140600, // 0009 MOVE R5 R3
- 0x7C100200, // 000A CALL R4 1
- 0x90020404, // 000B SETMBR R0 K2 R4
- 0x4C100000, // 000C LDNIL R4
- 0x90020604, // 000D SETMBR R0 K3 R4
- 0x80000000, // 000E RET 0
+ ( &(const binstruction[33]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x60080010, // 0001 GETGBL R2 G16
+ 0x600C000C, // 0002 GETGBL R3 G12
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x040C0701, // 0005 SUB R3 R3 K1
+ 0x400E0203, // 0006 CONNECT R3 K1 R3
+ 0x7C080200, // 0007 CALL R2 1
+ 0xA8020013, // 0008 EXBLK 0 #001D
+ 0x5C0C0400, // 0009 MOVE R3 R2
+ 0x7C0C0000, // 000A CALL R3 0
+ 0x94100003, // 000B GETIDX R4 R0 R3
+ 0x5C140600, // 000C MOVE R5 R3
+ 0x24180B02, // 000D GT R6 R5 K2
+ 0x781A000B, // 000E JMPF R6 #001B
+ 0x04180B01, // 000F SUB R6 R5 K1
+ 0x94180006, // 0010 GETIDX R6 R0 R6
+ 0x8C180D03, // 0011 GETMET R6 R6 K3
+ 0x5C200800, // 0012 MOVE R8 R4
+ 0x7C180400, // 0013 CALL R6 2
+ 0x24180D02, // 0014 GT R6 R6 K2
+ 0x781A0004, // 0015 JMPF R6 #001B
+ 0x04180B01, // 0016 SUB R6 R5 K1
+ 0x94180006, // 0017 GETIDX R6 R0 R6
+ 0x98000A06, // 0018 SETIDX R0 R5 R6
+ 0x04140B01, // 0019 SUB R5 R5 K1
+ 0x7001FFF1, // 001A JMP #000D
+ 0x98000A04, // 001B SETIDX R0 R5 R4
+ 0x7001FFEB, // 001C JMP #0009
+ 0x58080004, // 001D LDCONST R2 K4
+ 0xAC080200, // 001E CATCH R2 1 0
+ 0xB0080000, // 001F RAISE 2 R0 R0
+ 0x80040000, // 0020 RET 1 R0
})
)
);
@@ -760,230 +1627,6 @@ be_local_closure(Matter_TLV_item_to_TLV, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(Matter_TLV_item_tostring, /* name */
- be_nested_proto(
- 8, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[35]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(),
- /* K2 */ be_nested_str_weak(tag_profile),
- /* K3 */ be_nested_str_weak(Matter_X3A_X3A),
- /* K4 */ be_nested_str_weak(tag_number),
- /* K5 */ be_nested_str_weak(format),
- /* K6 */ be_nested_str_weak(0x_X2508X_X20),
- /* K7 */ be_nested_str_weak(tag_vendor),
- /* K8 */ be_nested_str_weak(0x_X2504X_X3A_X3A),
- /* K9 */ be_nested_str_weak(0x_X2504X_X3A),
- /* K10 */ be_nested_str_weak(tag_sub),
- /* K11 */ be_nested_str_weak(_X25i_X20),
- /* K12 */ be_const_int(0),
- /* K13 */ be_nested_str_weak(_X3D_X20),
- /* K14 */ be_nested_str_weak(val),
- /* K15 */ be_nested_str_weak(int),
- /* K16 */ be_nested_str_weak(_X25i),
- /* K17 */ be_nested_str_weak(typ),
- /* K18 */ be_nested_str_weak(TLV),
- /* K19 */ be_nested_str_weak(U1),
- /* K20 */ be_nested_str_weak(U8),
- /* K21 */ be_nested_str_weak(U),
- /* K22 */ be_nested_str_weak(bool),
- /* K23 */ be_nested_str_weak(true),
- /* K24 */ be_nested_str_weak(false),
- /* K25 */ be_nested_str_weak(null),
- /* K26 */ be_nested_str_weak(real),
- /* K27 */ be_nested_str_weak(_X25g),
- /* K28 */ be_nested_str_weak(_X22_X25s_X22),
- /* K29 */ be_nested_str_weak(int64),
- /* K30 */ be_nested_str_weak(tostring),
- /* K31 */ be_nested_str_weak(instance),
- /* K32 */ be_nested_str_weak(_X25s),
- /* K33 */ be_nested_str_weak(tohex),
- /* K34 */ be_nested_str_weak(_X20),
- }),
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[165]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x58080001, // 0001 LDCONST R2 K1
- 0xA8020099, // 0002 EXBLK 0 #009D
- 0x880C0102, // 0003 GETMBR R3 R0 K2
- 0x5411FFFE, // 0004 LDINT R4 -1
- 0x1C0C0604, // 0005 EQ R3 R3 R4
- 0x780E000A, // 0006 JMPF R3 #0012
- 0x00080503, // 0007 ADD R2 R2 K3
- 0x880C0104, // 0008 GETMBR R3 R0 K4
- 0x4C100000, // 0009 LDNIL R4
- 0x200C0604, // 000A NE R3 R3 R4
- 0x780E0004, // 000B JMPF R3 #0011
- 0x8C0C0305, // 000C GETMET R3 R1 K5
- 0x58140006, // 000D LDCONST R5 K6
- 0x88180104, // 000E GETMBR R6 R0 K4
- 0x7C0C0600, // 000F CALL R3 3
- 0x00080403, // 0010 ADD R2 R2 R3
- 0x70020023, // 0011 JMP #0036
- 0x880C0107, // 0012 GETMBR R3 R0 K7
- 0x4C100000, // 0013 LDNIL R4
- 0x200C0604, // 0014 NE R3 R3 R4
- 0x780E0004, // 0015 JMPF R3 #001B
- 0x8C0C0305, // 0016 GETMET R3 R1 K5
- 0x58140008, // 0017 LDCONST R5 K8
- 0x88180107, // 0018 GETMBR R6 R0 K7
- 0x7C0C0600, // 0019 CALL R3 3
- 0x00080403, // 001A ADD R2 R2 R3
- 0x880C0102, // 001B GETMBR R3 R0 K2
- 0x4C100000, // 001C LDNIL R4
- 0x200C0604, // 001D NE R3 R3 R4
- 0x780E0004, // 001E JMPF R3 #0024
- 0x8C0C0305, // 001F GETMET R3 R1 K5
- 0x58140009, // 0020 LDCONST R5 K9
- 0x88180102, // 0021 GETMBR R6 R0 K2
- 0x7C0C0600, // 0022 CALL R3 3
- 0x00080403, // 0023 ADD R2 R2 R3
- 0x880C0104, // 0024 GETMBR R3 R0 K4
- 0x4C100000, // 0025 LDNIL R4
- 0x200C0604, // 0026 NE R3 R3 R4
- 0x780E0004, // 0027 JMPF R3 #002D
- 0x8C0C0305, // 0028 GETMET R3 R1 K5
- 0x58140006, // 0029 LDCONST R5 K6
- 0x88180104, // 002A GETMBR R6 R0 K4
- 0x7C0C0600, // 002B CALL R3 3
- 0x00080403, // 002C ADD R2 R2 R3
- 0x880C010A, // 002D GETMBR R3 R0 K10
- 0x4C100000, // 002E LDNIL R4
- 0x200C0604, // 002F NE R3 R3 R4
- 0x780E0004, // 0030 JMPF R3 #0036
- 0x8C0C0305, // 0031 GETMET R3 R1 K5
- 0x5814000B, // 0032 LDCONST R5 K11
- 0x8818010A, // 0033 GETMBR R6 R0 K10
- 0x7C0C0600, // 0034 CALL R3 3
- 0x00080403, // 0035 ADD R2 R2 R3
- 0x600C000C, // 0036 GETGBL R3 G12
- 0x5C100400, // 0037 MOVE R4 R2
- 0x7C0C0200, // 0038 CALL R3 1
- 0x240C070C, // 0039 GT R3 R3 K12
- 0x780E0000, // 003A JMPF R3 #003C
- 0x0008050D, // 003B ADD R2 R2 K13
- 0x600C0004, // 003C GETGBL R3 G4
- 0x8810010E, // 003D GETMBR R4 R0 K14
- 0x7C0C0200, // 003E CALL R3 1
- 0x1C0C070F, // 003F EQ R3 R3 K15
- 0x780E0010, // 0040 JMPF R3 #0052
- 0x8C0C0305, // 0041 GETMET R3 R1 K5
- 0x58140010, // 0042 LDCONST R5 K16
- 0x8818010E, // 0043 GETMBR R6 R0 K14
- 0x7C0C0600, // 0044 CALL R3 3
- 0x00080403, // 0045 ADD R2 R2 R3
- 0x880C0111, // 0046 GETMBR R3 R0 K17
- 0x88100112, // 0047 GETMBR R4 R0 K18
- 0x88100913, // 0048 GETMBR R4 R4 K19
- 0x280C0604, // 0049 GE R3 R3 R4
- 0x780E0005, // 004A JMPF R3 #0051
- 0x880C0111, // 004B GETMBR R3 R0 K17
- 0x88100112, // 004C GETMBR R4 R0 K18
- 0x88100914, // 004D GETMBR R4 R4 K20
- 0x180C0604, // 004E LE R3 R3 R4
- 0x780E0000, // 004F JMPF R3 #0051
- 0x00080515, // 0050 ADD R2 R2 K21
- 0x70020048, // 0051 JMP #009B
- 0x600C0004, // 0052 GETGBL R3 G4
- 0x8810010E, // 0053 GETMBR R4 R0 K14
- 0x7C0C0200, // 0054 CALL R3 1
- 0x1C0C0716, // 0055 EQ R3 R3 K22
- 0x780E0006, // 0056 JMPF R3 #005E
- 0x880C010E, // 0057 GETMBR R3 R0 K14
- 0x780E0001, // 0058 JMPF R3 #005B
- 0x580C0017, // 0059 LDCONST R3 K23
- 0x70020000, // 005A JMP #005C
- 0x580C0018, // 005B LDCONST R3 K24
- 0x00080403, // 005C ADD R2 R2 R3
- 0x7002003C, // 005D JMP #009B
- 0x880C010E, // 005E GETMBR R3 R0 K14
- 0x4C100000, // 005F LDNIL R4
- 0x1C0C0604, // 0060 EQ R3 R3 R4
- 0x780E0001, // 0061 JMPF R3 #0064
- 0x00080519, // 0062 ADD R2 R2 K25
- 0x70020036, // 0063 JMP #009B
- 0x600C0004, // 0064 GETGBL R3 G4
- 0x8810010E, // 0065 GETMBR R4 R0 K14
- 0x7C0C0200, // 0066 CALL R3 1
- 0x1C0C071A, // 0067 EQ R3 R3 K26
- 0x780E0005, // 0068 JMPF R3 #006F
- 0x8C0C0305, // 0069 GETMET R3 R1 K5
- 0x5814001B, // 006A LDCONST R5 K27
- 0x8818010E, // 006B GETMBR R6 R0 K14
- 0x7C0C0600, // 006C CALL R3 3
- 0x00080403, // 006D ADD R2 R2 R3
- 0x7002002B, // 006E JMP #009B
- 0x600C0004, // 006F GETGBL R3 G4
- 0x8810010E, // 0070 GETMBR R4 R0 K14
- 0x7C0C0200, // 0071 CALL R3 1
- 0x1C0C0700, // 0072 EQ R3 R3 K0
- 0x780E0005, // 0073 JMPF R3 #007A
- 0x8C0C0305, // 0074 GETMET R3 R1 K5
- 0x5814001C, // 0075 LDCONST R5 K28
- 0x8818010E, // 0076 GETMBR R6 R0 K14
- 0x7C0C0600, // 0077 CALL R3 3
- 0x00080403, // 0078 ADD R2 R2 R3
- 0x70020020, // 0079 JMP #009B
- 0x600C000F, // 007A GETGBL R3 G15
- 0x8810010E, // 007B GETMBR R4 R0 K14
- 0xB8163A00, // 007C GETNGBL R5 K29
- 0x7C0C0400, // 007D CALL R3 2
- 0x780E000F, // 007E JMPF R3 #008F
- 0x880C010E, // 007F GETMBR R3 R0 K14
- 0x8C0C071E, // 0080 GETMET R3 R3 K30
- 0x7C0C0200, // 0081 CALL R3 1
- 0x00080403, // 0082 ADD R2 R2 R3
- 0x880C0111, // 0083 GETMBR R3 R0 K17
- 0x88100112, // 0084 GETMBR R4 R0 K18
- 0x88100913, // 0085 GETMBR R4 R4 K19
- 0x280C0604, // 0086 GE R3 R3 R4
- 0x780E0005, // 0087 JMPF R3 #008E
- 0x880C0111, // 0088 GETMBR R3 R0 K17
- 0x88100112, // 0089 GETMBR R4 R0 K18
- 0x88100914, // 008A GETMBR R4 R4 K20
- 0x180C0604, // 008B LE R3 R3 R4
- 0x780E0000, // 008C JMPF R3 #008E
- 0x00080515, // 008D ADD R2 R2 K21
- 0x7002000B, // 008E JMP #009B
- 0x600C0004, // 008F GETGBL R3 G4
- 0x8810010E, // 0090 GETMBR R4 R0 K14
- 0x7C0C0200, // 0091 CALL R3 1
- 0x1C0C071F, // 0092 EQ R3 R3 K31
- 0x780E0006, // 0093 JMPF R3 #009B
- 0x8C0C0305, // 0094 GETMET R3 R1 K5
- 0x58140020, // 0095 LDCONST R5 K32
- 0x8818010E, // 0096 GETMBR R6 R0 K14
- 0x8C180D21, // 0097 GETMET R6 R6 K33
- 0x7C180200, // 0098 CALL R6 1
- 0x7C0C0600, // 0099 CALL R3 3
- 0x00080403, // 009A ADD R2 R2 R3
- 0xA8040001, // 009B EXBLK 1 1
- 0x70020006, // 009C JMP #00A4
- 0xAC0C0002, // 009D CATCH R3 0 2
- 0x70020003, // 009E JMP #00A3
- 0x00140722, // 009F ADD R5 R3 K34
- 0x00140A04, // 00A0 ADD R5 R5 R4
- 0x80040A00, // 00A1 RET 1 R5
- 0x70020000, // 00A2 JMP #00A4
- 0xB0080000, // 00A3 RAISE 2 R0 R0
- 0x80040400, // 00A4 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: parse
********************************************************************/
@@ -1138,289 +1781,39 @@ be_local_closure(Matter_TLV_item_parse, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_TLV_item_init, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(parent),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _cmp_gt
-********************************************************************/
-be_local_closure(Matter_TLV_item__cmp_gt, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(tag_vendor),
- /* K1 */ be_const_int(1),
- /* K2 */ be_nested_str_weak(tag_profile),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str_weak(tag_number),
- /* K5 */ be_nested_str_weak(tag_sub),
- }),
- be_str_weak(_cmp_gt),
- &be_const_str_solidified,
- ( &(const binstruction[72]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x4C0C0000, // 0001 LDNIL R3
- 0x20080403, // 0002 NE R2 R2 R3
- 0x780A0012, // 0003 JMPF R2 #0017
- 0x88080300, // 0004 GETMBR R2 R1 K0
- 0x4C0C0000, // 0005 LDNIL R3
- 0x1C080403, // 0006 EQ R2 R2 R3
- 0x780A0000, // 0007 JMPF R2 #0009
- 0x80060200, // 0008 RET 1 K1
- 0x88080100, // 0009 GETMBR R2 R0 K0
- 0x880C0300, // 000A GETMBR R3 R1 K0
- 0x24080403, // 000B GT R2 R2 R3
- 0x780A0000, // 000C JMPF R2 #000E
- 0x80060200, // 000D RET 1 K1
- 0x88080100, // 000E GETMBR R2 R0 K0
- 0x880C0300, // 000F GETMBR R3 R1 K0
- 0x1C080403, // 0010 EQ R2 R2 R3
- 0x780A0004, // 0011 JMPF R2 #0017
- 0x88080102, // 0012 GETMBR R2 R0 K2
- 0x880C0302, // 0013 GETMBR R3 R1 K2
- 0x24080403, // 0014 GT R2 R2 R3
- 0x780A0000, // 0015 JMPF R2 #0017
- 0x80060200, // 0016 RET 1 K1
- 0x88080102, // 0017 GETMBR R2 R0 K2
- 0x540DFFFE, // 0018 LDINT R3 -1
- 0x1C080403, // 0019 EQ R2 R2 R3
- 0x780A0005, // 001A JMPF R2 #0021
- 0x88080302, // 001B GETMBR R2 R1 K2
- 0x4C0C0000, // 001C LDNIL R3
- 0x1C080403, // 001D EQ R2 R2 R3
- 0x780A0000, // 001E JMPF R2 #0020
- 0x80060200, // 001F RET 1 K1
- 0x70020008, // 0020 JMP #002A
- 0x88080102, // 0021 GETMBR R2 R0 K2
- 0x4C0C0000, // 0022 LDNIL R3
- 0x1C080403, // 0023 EQ R2 R2 R3
- 0x780A0004, // 0024 JMPF R2 #002A
- 0x88080302, // 0025 GETMBR R2 R1 K2
- 0x540DFFFE, // 0026 LDINT R3 -1
- 0x1C080403, // 0027 EQ R2 R2 R3
- 0x780A0000, // 0028 JMPF R2 #002A
- 0x80060600, // 0029 RET 1 K3
- 0x88080104, // 002A GETMBR R2 R0 K4
- 0x4C0C0000, // 002B LDNIL R3
- 0x20080403, // 002C NE R2 R2 R3
- 0x780A000A, // 002D JMPF R2 #0039
- 0x88080304, // 002E GETMBR R2 R1 K4
- 0x4C0C0000, // 002F LDNIL R3
- 0x1C080403, // 0030 EQ R2 R2 R3
- 0x780A0000, // 0031 JMPF R2 #0033
- 0x80060200, // 0032 RET 1 K1
- 0x88080104, // 0033 GETMBR R2 R0 K4
- 0x880C0304, // 0034 GETMBR R3 R1 K4
- 0x24080403, // 0035 GT R2 R2 R3
- 0x780A0000, // 0036 JMPF R2 #0038
- 0x80060200, // 0037 RET 1 K1
- 0x80060600, // 0038 RET 1 K3
- 0x88080105, // 0039 GETMBR R2 R0 K5
- 0x4C0C0000, // 003A LDNIL R3
- 0x20080403, // 003B NE R2 R2 R3
- 0x780A0009, // 003C JMPF R2 #0047
- 0x88080305, // 003D GETMBR R2 R1 K5
- 0x4C0C0000, // 003E LDNIL R3
- 0x1C080403, // 003F EQ R2 R2 R3
- 0x780A0000, // 0040 JMPF R2 #0042
- 0x80060200, // 0041 RET 1 K1
- 0x88080105, // 0042 GETMBR R2 R0 K5
- 0x880C0305, // 0043 GETMBR R3 R1 K5
- 0x24080403, // 0044 GT R2 R2 R3
- 0x780A0000, // 0045 JMPF R2 #0047
- 0x80060200, // 0046 RET 1 K1
- 0x80060600, // 0047 RET 1 K3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: sort
-********************************************************************/
-be_local_closure(Matter_TLV_item_sort, /* name */
- be_nested_proto(
- 9, /* nstack */
- 1, /* argc */
- 4, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_const_class(be_class_Matter_TLV_item),
- /* K1 */ be_const_int(1),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(_cmp_gt),
- /* K4 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(sort),
- &be_const_str_solidified,
- ( &(const binstruction[33]) { /* code */
- 0x58040000, // 0000 LDCONST R1 K0
- 0x60080010, // 0001 GETGBL R2 G16
- 0x600C000C, // 0002 GETGBL R3 G12
- 0x5C100000, // 0003 MOVE R4 R0
- 0x7C0C0200, // 0004 CALL R3 1
- 0x040C0701, // 0005 SUB R3 R3 K1
- 0x400E0203, // 0006 CONNECT R3 K1 R3
- 0x7C080200, // 0007 CALL R2 1
- 0xA8020013, // 0008 EXBLK 0 #001D
- 0x5C0C0400, // 0009 MOVE R3 R2
- 0x7C0C0000, // 000A CALL R3 0
- 0x94100003, // 000B GETIDX R4 R0 R3
- 0x5C140600, // 000C MOVE R5 R3
- 0x24180B02, // 000D GT R6 R5 K2
- 0x781A000B, // 000E JMPF R6 #001B
- 0x04180B01, // 000F SUB R6 R5 K1
- 0x94180006, // 0010 GETIDX R6 R0 R6
- 0x8C180D03, // 0011 GETMET R6 R6 K3
- 0x5C200800, // 0012 MOVE R8 R4
- 0x7C180400, // 0013 CALL R6 2
- 0x24180D02, // 0014 GT R6 R6 K2
- 0x781A0004, // 0015 JMPF R6 #001B
- 0x04180B01, // 0016 SUB R6 R5 K1
- 0x94180006, // 0017 GETIDX R6 R0 R6
- 0x98000A06, // 0018 SETIDX R0 R5 R6
- 0x04140B01, // 0019 SUB R5 R5 K1
- 0x7001FFF1, // 001A JMP #000D
- 0x98000A04, // 001B SETIDX R0 R5 R4
- 0x7001FFEB, // 001C JMP #0009
- 0x58080004, // 001D LDCONST R2 K4
- 0xAC080200, // 001E CATCH R2 1 0
- 0xB0080000, // 001F RAISE 2 R0 R0
- 0x80040000, // 0020 RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_anonymoustag
-********************************************************************/
-be_local_closure(Matter_TLV_item_set_anonymoustag, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(set_fulltag),
- }),
- be_str_weak(set_anonymoustag),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x8C040100, // 0000 GETMET R1 R0 K0
- 0x7C040200, // 0001 CALL R1 1
- 0x80000000, // 0002 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_contextspecific
-********************************************************************/
-be_local_closure(Matter_TLV_item_set_contextspecific, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(set_fulltag),
- /* K1 */ be_nested_str_weak(tag_sub),
- }),
- be_str_weak(set_contextspecific),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x8C080100, // 0000 GETMET R2 R0 K0
- 0x7C080200, // 0001 CALL R2 1
- 0x60080009, // 0002 GETGBL R2 G9
- 0x5C0C0200, // 0003 MOVE R3 R1
- 0x7C080200, // 0004 CALL R2 1
- 0x90020202, // 0005 SETMBR R0 K1 R2
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified class: Matter_TLV_item
********************************************************************/
be_local_class(Matter_TLV_item,
8,
NULL,
- be_nested_map(23,
+ be_nested_map(25,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(set_commonprofile, -1), be_const_closure(Matter_TLV_item_set_commonprofile_closure) },
{ be_const_key_weak(set_parent, -1), be_const_closure(Matter_TLV_item_set_parent_closure) },
- { be_const_key_weak(tag_profile, 3), be_const_var(3) },
- { be_const_key_weak(set_anonymoustag, 8), be_const_closure(Matter_TLV_item_set_anonymoustag_closure) },
{ be_const_key_weak(create_TLV, -1), be_const_static_closure(Matter_TLV_item_create_TLV_closure) },
- { be_const_key_weak(_encode_tag, -1), be_const_closure(Matter_TLV_item__encode_tag_closure) },
- { be_const_key_weak(val, -1), be_const_var(7) },
- { be_const_key_weak(TLV, 20), be_const_class(be_class_Matter_TLV) },
- { be_const_key_weak(tag_vendor, 1), be_const_var(2) },
- { be_const_key_weak(tostring, -1), be_const_closure(Matter_TLV_item_tostring_closure) },
- { be_const_key_weak(parse, -1), be_const_closure(Matter_TLV_item_parse_closure) },
- { be_const_key_weak(tag_number, -1), be_const_var(4) },
- { be_const_key_weak(sort, -1), be_const_static_closure(Matter_TLV_item_sort_closure) },
{ be_const_key_weak(next_idx, -1), be_const_var(1) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_TLV_item_init_closure) },
- { be_const_key_weak(_cmp_gt, -1), be_const_closure(Matter_TLV_item__cmp_gt_closure) },
- { be_const_key_weak(encode, 12), be_const_closure(Matter_TLV_item_encode_closure) },
- { be_const_key_weak(typ, -1), be_const_var(6) },
- { be_const_key_weak(parent, -1), be_const_var(0) },
- { be_const_key_weak(to_TLV, 6), be_const_closure(Matter_TLV_item_to_TLV_closure) },
+ { be_const_key_weak(TLV, -1), be_const_class(be_class_Matter_TLV) },
+ { be_const_key_weak(_encode_tag, 10), be_const_closure(Matter_TLV_item__encode_tag_closure) },
+ { be_const_key_weak(set_anonymoustag, 17), be_const_closure(Matter_TLV_item_set_anonymoustag_closure) },
+ { be_const_key_weak(val, -1), be_const_var(7) },
+ { be_const_key_weak(parse, -1), be_const_closure(Matter_TLV_item_parse_closure) },
+ { be_const_key_weak(to_TLV, -1), be_const_closure(Matter_TLV_item_to_TLV_closure) },
+ { be_const_key_weak(_cmp_gt, 8), be_const_closure(Matter_TLV_item__cmp_gt_closure) },
+ { be_const_key_weak(tag_vendor, -1), be_const_var(2) },
+ { be_const_key_weak(encode_len, 19), be_const_closure(Matter_TLV_item_encode_len_closure) },
+ { be_const_key_weak(set_contextspecific, 7), be_const_closure(Matter_TLV_item_set_contextspecific_closure) },
{ be_const_key_weak(set_fulltag, -1), be_const_closure(Matter_TLV_item_set_fulltag_closure) },
- { be_const_key_weak(tag_sub, 2), be_const_var(5) },
- { be_const_key_weak(set_contextspecific, -1), be_const_closure(Matter_TLV_item_set_contextspecific_closure) },
+ { be_const_key_weak(parent, -1), be_const_var(0) },
+ { be_const_key_weak(encode, 18), be_const_closure(Matter_TLV_item_encode_closure) },
+ { be_const_key_weak(tag_sub, -1), be_const_var(5) },
+ { be_const_key_weak(init, 23), be_const_closure(Matter_TLV_item_init_closure) },
+ { be_const_key_weak(_encode_tag_len, 22), be_const_closure(Matter_TLV_item__encode_tag_len_closure) },
+ { be_const_key_weak(tag_profile, -1), be_const_var(3) },
+ { be_const_key_weak(set_commonprofile, 15), be_const_closure(Matter_TLV_item_set_commonprofile_closure) },
+ { be_const_key_weak(sort, -1), be_const_static_closure(Matter_TLV_item_sort_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(Matter_TLV_item_tostring_closure) },
+ { be_const_key_weak(tag_number, 16), be_const_var(4) },
+ { be_const_key_weak(typ, 3), be_const_var(6) },
})),
be_str_weak(Matter_TLV_item)
);
@@ -1711,7 +2104,7 @@ be_local_closure(Matter_TLV_list_findsubtyp, /* name */
********************************************************************/
be_local_closure(Matter_TLV_list_encode, /* name */
be_nested_proto(
- 6, /* nstack */
+ 8, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1719,18 +2112,58 @@ be_local_closure(Matter_TLV_list_encode, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(_encode_inner),
- /* K1 */ be_nested_str_weak(is_struct),
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(_encode_tag),
+ /* K1 */ be_nested_str_weak(val),
+ /* K2 */ be_nested_str_weak(copy),
+ /* K3 */ be_nested_str_weak(is_struct),
+ /* K4 */ be_nested_str_weak(sort),
+ /* K5 */ be_nested_str_weak(encode),
+ /* K6 */ be_nested_str_weak(stop_iteration),
+ /* K7 */ be_nested_str_weak(add),
+ /* K8 */ be_nested_str_weak(TLV),
+ /* K9 */ be_nested_str_weak(EOC),
+ /* K10 */ be_const_int(1),
}),
be_str_weak(encode),
&be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x8C080100, // 0000 GETMET R2 R0 K0
- 0x5C100200, // 0001 MOVE R4 R1
- 0x88140101, // 0002 GETMBR R5 R0 K1
- 0x7C080600, // 0003 CALL R2 3
- 0x80040400, // 0004 RET 1 R2
+ ( &(const binstruction[36]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0002, // 0002 JMPF R2 #0006
+ 0x60080015, // 0003 GETGBL R2 G21
+ 0x7C080000, // 0004 CALL R2 0
+ 0x5C040400, // 0005 MOVE R1 R2
+ 0x8C080100, // 0006 GETMET R2 R0 K0
+ 0x5C100200, // 0007 MOVE R4 R1
+ 0x7C080400, // 0008 CALL R2 2
+ 0x88080101, // 0009 GETMBR R2 R0 K1
+ 0x8C080502, // 000A GETMET R2 R2 K2
+ 0x7C080200, // 000B CALL R2 1
+ 0x880C0103, // 000C GETMBR R3 R0 K3
+ 0x780E0002, // 000D JMPF R3 #0011
+ 0x8C0C0104, // 000E GETMET R3 R0 K4
+ 0x5C140400, // 000F MOVE R5 R2
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x600C0010, // 0011 GETGBL R3 G16
+ 0x5C100400, // 0012 MOVE R4 R2
+ 0x7C0C0200, // 0013 CALL R3 1
+ 0xA8020005, // 0014 EXBLK 0 #001B
+ 0x5C100600, // 0015 MOVE R4 R3
+ 0x7C100000, // 0016 CALL R4 0
+ 0x8C140905, // 0017 GETMET R5 R4 K5
+ 0x5C1C0200, // 0018 MOVE R7 R1
+ 0x7C140400, // 0019 CALL R5 2
+ 0x7001FFF9, // 001A JMP #0015
+ 0x580C0006, // 001B LDCONST R3 K6
+ 0xAC0C0200, // 001C CATCH R3 1 0
+ 0xB0080000, // 001D RAISE 2 R0 R0
+ 0x8C0C0307, // 001E GETMET R3 R1 K7
+ 0x88140108, // 001F GETMBR R5 R0 K8
+ 0x88140B09, // 0020 GETMBR R5 R5 K9
+ 0x5818000A, // 0021 LDCONST R6 K10
+ 0x7C0C0600, // 0022 CALL R3 3
+ 0x80040200, // 0023 RET 1 R1
})
)
);
@@ -1865,11 +2298,11 @@ be_local_closure(Matter_TLV_list_tostring_inner, /* name */
/********************************************************************
-** Solidified function: tostring
+** Solidified function: encode_len
********************************************************************/
-be_local_closure(Matter_TLV_list_tostring, /* name */
+be_local_closure(Matter_TLV_list_encode_len, /* name */
be_nested_proto(
- 6, /* nstack */
+ 5, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1877,20 +2310,33 @@ be_local_closure(Matter_TLV_list_tostring, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(tostring_inner),
- /* K1 */ be_nested_str_weak(_X5B_X5B),
- /* K2 */ be_nested_str_weak(_X5D_X5D),
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_encode_tag_len),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(val),
+ /* K3 */ be_nested_str_weak(encode_len),
+ /* K4 */ be_const_int(1),
}),
- be_str_weak(tostring),
+ be_str_weak(encode_len),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
+ ( &(const binstruction[17]) { /* code */
0x8C040100, // 0000 GETMET R1 R0 K0
- 0x500C0000, // 0001 LDBOOL R3 0 0
- 0x58100001, // 0002 LDCONST R4 K1
- 0x58140002, // 0003 LDCONST R5 K2
- 0x7C040800, // 0004 CALL R1 4
- 0x80040200, // 0005 RET 1 R1
+ 0x7C040200, // 0001 CALL R1 1
+ 0x58080001, // 0002 LDCONST R2 K1
+ 0x600C000C, // 0003 GETGBL R3 G12
+ 0x88100102, // 0004 GETMBR R4 R0 K2
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x140C0403, // 0006 LT R3 R2 R3
+ 0x780E0006, // 0007 JMPF R3 #000F
+ 0x880C0102, // 0008 GETMBR R3 R0 K2
+ 0x940C0602, // 0009 GETIDX R3 R3 R2
+ 0x8C0C0703, // 000A GETMET R3 R3 K3
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x00040203, // 000C ADD R1 R1 R3
+ 0x00080504, // 000D ADD R2 R2 K4
+ 0x7001FFF3, // 000E JMP #0003
+ 0x00040304, // 000F ADD R1 R1 K4
+ 0x80040200, // 0010 RET 1 R1
})
)
);
@@ -2093,75 +2539,6 @@ be_local_closure(Matter_TLV_list_setitem, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: _encode_inner
-********************************************************************/
-be_local_closure(Matter_TLV_list__encode_inner, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[10]) { /* constants */
- /* K0 */ be_nested_str_weak(_encode_tag),
- /* K1 */ be_nested_str_weak(val),
- /* K2 */ be_nested_str_weak(copy),
- /* K3 */ be_nested_str_weak(sort),
- /* K4 */ be_nested_str_weak(encode),
- /* K5 */ be_nested_str_weak(stop_iteration),
- /* K6 */ be_nested_str_weak(add),
- /* K7 */ be_nested_str_weak(TLV),
- /* K8 */ be_nested_str_weak(EOC),
- /* K9 */ be_const_int(1),
- }),
- be_str_weak(_encode_inner),
- &be_const_str_solidified,
- ( &(const binstruction[35]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x1C0C0203, // 0001 EQ R3 R1 R3
- 0x780E0002, // 0002 JMPF R3 #0006
- 0x600C0015, // 0003 GETGBL R3 G21
- 0x7C0C0000, // 0004 CALL R3 0
- 0x5C040600, // 0005 MOVE R1 R3
- 0x8C0C0100, // 0006 GETMET R3 R0 K0
- 0x5C140200, // 0007 MOVE R5 R1
- 0x7C0C0400, // 0008 CALL R3 2
- 0x880C0101, // 0009 GETMBR R3 R0 K1
- 0x8C0C0702, // 000A GETMET R3 R3 K2
- 0x7C0C0200, // 000B CALL R3 1
- 0x780A0002, // 000C JMPF R2 #0010
- 0x8C100103, // 000D GETMET R4 R0 K3
- 0x5C180600, // 000E MOVE R6 R3
- 0x7C100400, // 000F CALL R4 2
- 0x60100010, // 0010 GETGBL R4 G16
- 0x5C140600, // 0011 MOVE R5 R3
- 0x7C100200, // 0012 CALL R4 1
- 0xA8020005, // 0013 EXBLK 0 #001A
- 0x5C140800, // 0014 MOVE R5 R4
- 0x7C140000, // 0015 CALL R5 0
- 0x8C180B04, // 0016 GETMET R6 R5 K4
- 0x5C200200, // 0017 MOVE R8 R1
- 0x7C180400, // 0018 CALL R6 2
- 0x7001FFF9, // 0019 JMP #0014
- 0x58100005, // 001A LDCONST R4 K5
- 0xAC100200, // 001B CATCH R4 1 0
- 0xB0080000, // 001C RAISE 2 R0 R0
- 0x8C100306, // 001D GETMET R4 R1 K6
- 0x88180107, // 001E GETMBR R6 R0 K7
- 0x88180D08, // 001F GETMBR R6 R6 K8
- 0x581C0009, // 0020 LDCONST R7 K9
- 0x7C100600, // 0021 CALL R4 3
- 0x80040200, // 0022 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: findsub
********************************************************************/
@@ -2205,6 +2582,39 @@ be_local_closure(Matter_TLV_list_findsub, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Matter_TLV_list_tostring, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(tostring_inner),
+ /* K1 */ be_nested_str_weak(_X5B_X5B),
+ /* K2 */ be_nested_str_weak(_X5D_X5D),
+ }),
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x500C0000, // 0001 LDBOOL R3 0 0
+ 0x58100001, // 0002 LDCONST R4 K1
+ 0x58140002, // 0003 LDCONST R5 K2
+ 0x7C040800, // 0004 CALL R1 4
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: parse
********************************************************************/
@@ -2310,13 +2720,13 @@ be_local_class(Matter_TLV_list,
{ be_const_key_weak(findsubtyp, -1), be_const_closure(Matter_TLV_list_findsubtyp_closure) },
{ be_const_key_weak(encode, -1), be_const_closure(Matter_TLV_list_encode_closure) },
{ be_const_key_weak(tostring_inner, 4), be_const_closure(Matter_TLV_list_tostring_inner_closure) },
- { be_const_key_weak(tostring, 16), be_const_closure(Matter_TLV_list_tostring_closure) },
+ { be_const_key_weak(encode_len, 15), be_const_closure(Matter_TLV_list_encode_len_closure) },
{ be_const_key_weak(findsubval, -1), be_const_closure(Matter_TLV_list_findsubval_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_TLV_list_init_closure) },
- { be_const_key_weak(add_array, 15), be_const_closure(Matter_TLV_list_add_array_closure) },
+ { be_const_key_weak(add_array, 16), be_const_closure(Matter_TLV_list_add_array_closure) },
{ be_const_key_weak(add_TLV, 18), be_const_closure(Matter_TLV_list_add_TLV_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(Matter_TLV_list_tostring_closure) },
{ be_const_key_weak(findsub, -1), be_const_closure(Matter_TLV_list_findsub_closure) },
- { be_const_key_weak(_encode_inner, -1), be_const_closure(Matter_TLV_list__encode_inner_closure) },
{ be_const_key_weak(is_struct, -1), be_const_bool(0) },
{ be_const_key_weak(setitem, -1), be_const_closure(Matter_TLV_list_setitem_closure) },
{ be_const_key_weak(item, 5), be_const_closure(Matter_TLV_list_item_closure) },
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
index 9cf11d294..7e6dd5547 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
@@ -66,7 +66,7 @@ be_local_closure(Matter_UDPPacket_sent_send, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[14]) { /* constants */
+ ( &(const bvalue[13]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(send),
/* K2 */ be_nested_str_weak(addr),
@@ -78,9 +78,8 @@ be_local_closure(Matter_UDPPacket_sent_send, /* name */
/* 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_const_int(3),
- /* K12 */ be_nested_str_weak(MTR_X3A_X20failed_X20to_X20send_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
- /* K13 */ be_const_int(2),
+ /* K11 */ be_nested_str_weak(MTR_X3A_X20error_X20sending_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
+ /* K12 */ be_const_int(3),
}),
be_str_weak(send),
&be_const_str_solidified,
@@ -107,17 +106,17 @@ be_local_closure(Matter_UDPPacket_sent_send, /* name */
0x88240102, // 0013 GETMBR R9 R0 K2
0x88280104, // 0014 GETMBR R10 R0 K4
0x7C180800, // 0015 CALL R6 4
- 0x581C000B, // 0016 LDCONST R7 K11
+ 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
- 0x5820000C, // 001C LDCONST R8 K12
+ 0x5820000B, // 001C LDCONST R8 K11
0x88240102, // 001D GETMBR R9 R0 K2
0x88280104, // 001E GETMBR R10 R0 K4
0x7C180800, // 001F CALL R6 4
- 0x581C000D, // 0020 LDCONST R7 K13
+ 0x581C000C, // 0020 LDCONST R7 K12
0x7C100600, // 0021 CALL R4 3
0x80000000, // 0022 RET 0
})
@@ -357,7 +356,7 @@ be_local_closure(Matter_UDPServer_every_50ms, /* name */
********************************************************************/
be_local_closure(Matter_UDPServer_resend_packets, /* name */
be_nested_proto(
- 7, /* nstack */
+ 11, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -365,7 +364,7 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[17]) { /* constants */
+ ( &(const bvalue[22]) { /* constants */
/* K0 */ be_nested_str_weak(packets_sent),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(time_reached),
@@ -379,25 +378,30 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
/* K10 */ be_nested_str_weak(retries),
/* K11 */ be_const_int(1),
/* K12 */ be_const_int(0),
- /* K13 */ be_nested_str_weak(remove),
- /* K14 */ be_nested_str_weak(millis),
- /* K15 */ be_nested_str_weak(RETRY_MS),
- /* K16 */ be_nested_str_weak(stop_iteration),
+ /* K13 */ be_nested_str_weak(string),
+ /* K14 */ be_nested_str_weak(remove),
+ /* K15 */ be_nested_str_weak(format),
+ /* K16 */ be_nested_str_weak(MTR_X3A_X20non_X2Dacked_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
+ /* K17 */ be_nested_str_weak(addr),
+ /* K18 */ be_nested_str_weak(port),
+ /* K19 */ be_nested_str_weak(millis),
+ /* K20 */ be_nested_str_weak(RETRY_MS),
+ /* K21 */ be_nested_str_weak(stop_iteration),
}),
be_str_weak(resend_packets),
&be_const_str_solidified,
- ( &(const binstruction[44]) { /* code */
+ ( &(const binstruction[54]) { /* code */
0x60040010, // 0000 GETGBL R1 G16
0x88080100, // 0001 GETMBR R2 R0 K0
0x7C040200, // 0002 CALL R1 1
- 0xA8020023, // 0003 EXBLK 0 #0028
+ 0xA802002D, // 0003 EXBLK 0 #0032
0x5C080200, // 0004 MOVE R2 R1
0x7C080000, // 0005 CALL R2 0
0xB80E0200, // 0006 GETNGBL R3 K1
0x8C0C0702, // 0007 GETMET R3 R3 K2
0x88140503, // 0008 GETMBR R5 R2 K3
0x7C0C0400, // 0009 CALL R3 2
- 0x780E001B, // 000A JMPF R3 #0027
+ 0x780E0025, // 000A JMPF R3 #0031
0xB80E0200, // 000B GETNGBL R3 K1
0x8C0C0704, // 000C GETMET R3 R3 K4
0x60140008, // 000D GETGBL R5 G8
@@ -414,23 +418,33 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
0x900A1403, // 0018 SETMBR R2 K10 R3
0x880C050A, // 0019 GETMBR R3 R2 K10
0x180C070C, // 001A LE R3 R3 K12
- 0x780E0004, // 001B JMPF R3 #0021
- 0x880C0100, // 001C GETMBR R3 R0 K0
- 0x8C0C070D, // 001D GETMET R3 R3 K13
- 0x88140506, // 001E GETMBR R5 R2 K6
- 0x7C0C0400, // 001F CALL R3 2
- 0x70020005, // 0020 JMP #0027
- 0xB80E0200, // 0021 GETNGBL R3 K1
- 0x8C0C070E, // 0022 GETMET R3 R3 K14
- 0x7C0C0200, // 0023 CALL R3 1
- 0x8810050F, // 0024 GETMBR R4 R2 K15
- 0x000C0604, // 0025 ADD R3 R3 R4
- 0x900A0603, // 0026 SETMBR R2 K3 R3
- 0x7001FFDB, // 0027 JMP #0004
- 0x58040010, // 0028 LDCONST R1 K16
- 0xAC040200, // 0029 CATCH R1 1 0
- 0xB0080000, // 002A RAISE 2 R0 R0
- 0x80000000, // 002B RET 0
+ 0x780E000E, // 001B JMPF R3 #002B
+ 0xA40E1A00, // 001C IMPORT R3 K13
+ 0x88100100, // 001D GETMBR R4 R0 K0
+ 0x8C10090E, // 001E GETMET R4 R4 K14
+ 0x88180506, // 001F GETMBR R6 R2 K6
+ 0x7C100400, // 0020 CALL R4 2
+ 0xB8120200, // 0021 GETNGBL R4 K1
+ 0x8C100904, // 0022 GETMET R4 R4 K4
+ 0x8C18070F, // 0023 GETMET R6 R3 K15
+ 0x58200010, // 0024 LDCONST R8 K16
+ 0x88240511, // 0025 GETMBR R9 R2 K17
+ 0x88280512, // 0026 GETMBR R10 R2 K18
+ 0x7C180800, // 0027 CALL R6 4
+ 0x581C0007, // 0028 LDCONST R7 K7
+ 0x7C100600, // 0029 CALL R4 3
+ 0x70020005, // 002A JMP #0031
+ 0xB80E0200, // 002B GETNGBL R3 K1
+ 0x8C0C0713, // 002C GETMET R3 R3 K19
+ 0x7C0C0200, // 002D CALL R3 1
+ 0x88100514, // 002E GETMBR R4 R2 K20
+ 0x000C0604, // 002F ADD R3 R3 R4
+ 0x900A0603, // 0030 SETMBR R2 K3 R3
+ 0x7001FFD1, // 0031 JMP #0004
+ 0x58040015, // 0032 LDCONST R1 K21
+ 0xAC040200, // 0033 CATCH R1 1 0
+ 0xB0080000, // 0034 RAISE 2 R0 R0
+ 0x80000000, // 0035 RET 0
})
)
);
@@ -549,14 +563,13 @@ be_local_closure(Matter_UDPServer_packet_ack, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
+ ( &(const bvalue[ 6]) { /* constants */
/* K0 */ be_nested_str_weak(packets_sent),
/* K1 */ be_nested_str_weak(contains),
/* K2 */ be_nested_str_weak(remove),
/* K3 */ be_nested_str_weak(tasmota),
/* K4 */ be_nested_str_weak(log),
/* K5 */ be_nested_str_weak(MTR_X3A_X20removed_X20packet_X20from_X20sending_X20list_X20id_X3D),
- /* K6 */ be_const_int(3),
}),
be_str_weak(packet_ack),
&be_const_str_solidified,
@@ -580,7 +593,7 @@ be_local_closure(Matter_UDPServer_packet_ack, /* name */
0x5C140200, // 0010 MOVE R5 R1
0x7C100200, // 0011 CALL R4 1
0x00120A04, // 0012 ADD R4 K5 R4
- 0x58140006, // 0013 LDCONST R5 K6
+ 0x54160003, // 0013 LDINT R5 4
0x7C080600, // 0014 CALL R2 3
0x80000000, // 0015 RET 0
})
From 64083c902e9915b6820bc21b207f39f2eadefb49 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Sun, 19 Feb 2023 21:52:35 +0100
Subject: [PATCH 015/227] Delete settings.json (#18001)
---
.vscode/settings.json | 75 -------------------------------------------
1 file changed, 75 deletions(-)
delete mode 100644 .vscode/settings.json
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 0188fe67c..000000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "platformio-ide.toolbar": [
- {
- "text": "$(home)",
- "tooltip": "PlatformIO: Home",
- "commands": [
- {
- "id": "platformio-ide.runPIOCoreCommand",
- "args": "pio home"
- }
- ]
- },
- {
- "text": "$(trash)",
- "tooltip": "PlatformIO: Clean All",
- "commands": [
- {
- "id": "workbench.action.tasks.runTask",
- "args": "PlatformIO: Clean All"
- }
- ]
- },
- {
- "text": "$(check)",
- "tooltip": "PlatformIO: Build",
- "commands": [
- {
- "id": "workbench.action.tasks.runTask",
- "args": "PlatformIO: Build"
- }
- ]
- },
- {
- "text": "$(zap)",
- "tooltip": "PlatformIO: Build and Upload",
- "commands": [
- {
- "id": "workbench.action.tasks.runTask",
- "args": "PlatformIO: Upload"
- }
- ]
- },
- {
- "text": "$(flame)",
- "tooltip": "PlatformIO: Build, Erase and Upload",
- "commands": [
- {
- "id": "platformio-ide.runPIOCoreCommand",
- "args": "pio run -t erase_upload"
- }
- ]
- },
- {
- "text": "$(device-desktop)",
- "tooltip": "PlatformIO: Serial Monitor",
- "commands": [
- {
- "id": "workbench.action.tasks.runTask",
- "args": "PlatformIO: Monitor"
- }
- ]
- },
- {
- "text": "$(refresh)",
- "tooltip": "PlatformIO: Rebuild IntelliSense Index",
- "commands": [
- {
- "id": "workbench.action.tasks.runTask",
- "args": "PlatformIO: Rebuild IntelliSense Index"
- }
- ]
- }
- ]
-}
-
From dcbf50a91842748870a1251e8ffcb1e4ac119bcd Mon Sep 17 00:00:00 2001
From: s-hadinger <49731213+s-hadinger@users.noreply.github.com>
Date: Sun, 19 Feb 2023 22:25:29 +0100
Subject: [PATCH 016/227] Matter automatic ifdefs (#18002)
---
lib/libesp32/berry/default/be_modtab.c | 2 +-
.../src/{berry_tasmota.h => berry_matter.h} | 0
.../berry_tasmota/src/be_crypto_lib.c | 12 --------
tasmota/my_user_config.h | 28 +++++++++++++++++++
.../tasmota_xdrv_driver/xdrv_52_9_berry.ino | 2 +-
5 files changed, 30 insertions(+), 14 deletions(-)
rename lib/libesp32/berry_matter/src/{berry_tasmota.h => berry_matter.h} (100%)
diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c
index e95c65ba2..50c4152b5 100644
--- a/lib/libesp32/berry/default/be_modtab.c
+++ b/lib/libesp32/berry/default/be_modtab.c
@@ -301,7 +301,7 @@ BERRY_LOCAL bclass_array be_class_table = {
#endif // USE_UFILESYS
&be_native_class(AudioOpusDecoder),
#endif // USE_I2S_AUDIO_BERRY
-#ifdef USE_BERRY_INT64
+#if defined(USE_BERRY_INT64) || defined(USE_MATTER_DEVICE)
&be_native_class(int64),
#endif
#endif // TASMOTA
diff --git a/lib/libesp32/berry_matter/src/berry_tasmota.h b/lib/libesp32/berry_matter/src/berry_matter.h
similarity index 100%
rename from lib/libesp32/berry_matter/src/berry_tasmota.h
rename to lib/libesp32/berry_matter/src/berry_matter.h
diff --git a/lib/libesp32/berry_tasmota/src/be_crypto_lib.c b/lib/libesp32/berry_tasmota/src/be_crypto_lib.c
index 90c2ae7c6..621d17113 100644
--- a/lib/libesp32/berry_tasmota/src/be_crypto_lib.c
+++ b/lib/libesp32/berry_tasmota/src/be_crypto_lib.c
@@ -67,18 +67,6 @@ extern const bclass be_class_md5;
#include "be_fixed_be_class_hkdf_sha256.h"
#include "be_fixed_crypto.h"
-// Enable all the crypto required by Matter
-#ifdef USE_BERRY_CRYPTO_SPAKE2P_MATTER
- #undef USE_BERRY_CRYPTO_EC_P256
- #define USE_BERRY_CRYPTO_EC_P256
- #undef USE_BERRY_CRYPTO_HMAC_SHA256
- #define USE_BERRY_CRYPTO_HMAC_SHA256
- #undef USE_BERRY_CRYPTO_HKDF_SHA256
- #define USE_BERRY_CRYPTO_HKDF_SHA256
- #undef USE_BERRY_CRYPTO_AES_CCM
- #define USE_BERRY_CRYPTO_AES_CCM
-#endif
-
const be_const_member_t be_crypto_members[] = {
// name with prefix '/' indicates a Berry class
// entries need to be sorted (ignoring the prefix char)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 1105b2fb8..73f79b3f4 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -1278,6 +1278,34 @@
#define USE_TLS // flag indicates we need to include TLS code
#endif
+/*********************************************************************************************\
+ * Post-process compile options for Matter
+\*********************************************************************************************/
+
+#ifdef ESP32
+#ifdef USE_MATTER_DEVICE
+ #undef USE_DISCOVERY
+ #define USE_DISCOVERY
+
+// Enable all the crypto required by Matter
+ #undef USE_BERRY_CRYPTO_EC_P256
+ #define USE_BERRY_CRYPTO_EC_P256
+ #undef USE_BERRY_CRYPTO_HMAC_SHA256
+ #define USE_BERRY_CRYPTO_HMAC_SHA256
+ #undef USE_BERRY_CRYPTO_HKDF_SHA256
+ #define USE_BERRY_CRYPTO_HKDF_SHA256
+ #undef USE_BERRY_CRYPTO_AES_CCM
+ #define USE_BERRY_CRYPTO_AES_CCM
+ #undef USE_BERRY_CRYPTO_AES_CTR
+ #define USE_BERRY_CRYPTO_AES_CTR
+ #undef USE_BERRY_CRYPTO_PBKDF2_HMAC_SHA256
+ #define USE_BERRY_CRYPTO_PBKDF2_HMAC_SHA256
+ #undef USE_BERRY_CRYPTO_SPAKE2P_MATTER
+ #define USE_BERRY_CRYPTO_SPAKE2P_MATTER
+
+#endif // USE_MATTER_DEVICE
+#endif
+
/*********************************************************************************************\
* Post-process stack size adjustment
\*********************************************************************************************/
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_52_9_berry.ino b/tasmota/tasmota_xdrv_driver/xdrv_52_9_berry.ino
index d6e9fabf5..8bee89061 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_52_9_berry.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_52_9_berry.ino
@@ -24,7 +24,7 @@
#include
#include "berry_tasmota.h"
-#ifdef USE_MATTER
+#ifdef USE_MATTER_DEVICE
#include "berry_matter.h"
#endif
#include "be_vm.h"
From c1dec03adb22a723b6af3ae3a6b8c14fc247202d Mon Sep 17 00:00:00 2001
From: gemu
Date: Sun, 19 Feb 2023 22:25:45 +0100
Subject: [PATCH 017/227] fix epaper 29 non-universal display (#17999)
* make v1 configurable
* fix ep29 v1
---
.../Epaper_29-gemu-1.0/epd2in9.cpp | 24 +++++++------------
lib/lib_display/Epaper_29-gemu-1.0/epd2in9.h | 1 +
2 files changed, 10 insertions(+), 15 deletions(-)
diff --git a/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp b/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp
index 94dfb9ae7..32d0f2ad6 100644
--- a/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp
+++ b/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp
@@ -35,7 +35,6 @@
//#define BUSY_PIN 16
-
Epd::Epd(int16_t width, int16_t height) :
Paint(width,height) {
}
@@ -87,7 +86,6 @@ void Epd::DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font) {
setTextColor(WHITE,BLACK);
setCursor(0,0);
fillScreen(BLACK);
-
disp_bpp = 1;
}
@@ -102,7 +100,6 @@ void Epd::Begin(int16_t cs,int16_t mosi,int16_t sclk, int16_t rst, int16_t busy)
#endif
}
-
void Epd::Init(int8_t p) {
if (p == DISPLAY_INIT_PARTIAL) {
Init(lut_partial_update);
@@ -119,20 +116,14 @@ void Epd::Init(int8_t p) {
}
}
-
int Epd::Init(const unsigned char* lut) {
- /* this calls the peripheral hardware interface, see epdif */
- /*if (IfInit() != 0) {
- return -1;
- }*/
-/*
- cs_pin=pin[GPIO_SSPI_CS];
- mosi_pin=pin[GPIO_SSPI_MOSI];
- sclk_pin=pin[GPIO_SSPI_SCLK];
-*/
- if (framebuffer) {
- // free(framebuffer);
+ if (iniz) {
+#ifndef EPD_29_V2
+ this->lut = lut;
+ SetLut(this->lut);
+#endif
+ return 0;
}
framebuffer = (uint8_t*)malloc(EPD_WIDTH * EPD_HEIGHT / 8);
if (!framebuffer) return -1;
@@ -207,6 +198,7 @@ int Epd::Init(const unsigned char* lut) {
SetLut(this->lut);
#endif
/* EPD hardware init end */
+ iniz = 1;
return 0;
}
@@ -253,7 +245,9 @@ void Epd::Reset(void) {
digitalWrite(rst_pin, HIGH);
delay(200);
} else {
+#ifdef EPD_29_V2
SendCommand(0x12);
+#endif
}
}
diff --git a/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.h b/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.h
index 1fdba92fd..9935f4f9d 100644
--- a/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.h
+++ b/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.h
@@ -109,6 +109,7 @@ private:
unsigned int mosi_pin;
unsigned int sclk_pin;
unsigned char mode;
+ uint8_t iniz = 0;
void delay_busy(uint32_t wait);
void SetLut(const unsigned char* lut);
void SetMemoryArea(int x_start, int y_start, int x_end, int y_end);
From 2d83c335bc8ba2f70ce78ac7306f9db7b865cf8d Mon Sep 17 00:00:00 2001
From: AleXSR700 <57034871+AleXSR700@users.noreply.github.com>
Date: Mon, 20 Feb 2023 10:51:44 +0100
Subject: [PATCH 018/227] Update xdrv_79_esp32_ble.ino (#17990)
Increase maximum length of Alias as the short MaxAlias is not in line with name length and limits the user (e.g. if sensors have room names as appendix like "_master_bathroom").
---
tasmota/tasmota_xdrv_driver/xdrv_79_esp32_ble.ino | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_79_esp32_ble.ino b/tasmota/tasmota_xdrv_driver/xdrv_79_esp32_ble.ino
index fabcf916e..6f9089e1f 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_79_esp32_ble.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_79_esp32_ble.ino
@@ -204,7 +204,7 @@ namespace BLE_ESP32 {
/////////////////////////////////////////////////////
#define BLE_ESP32_MAXNAMELEN 32
-#define BLE_ESP32_MAXALIASLEN 20
+#define BLE_ESP32_MAXALIASLEN 32
#define MAX_BLE_DATA_LEN 100
From 692e9090c8835f877aa13588ba38a449aca9a7ed Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Mon, 20 Feb 2023 11:31:12 +0100
Subject: [PATCH 019/227] Attempt to stabilize Shelly Pro 4PM values
---
tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino | 6 ++++++
tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino | 6 ++++++
2 files changed, 12 insertions(+)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
index 16dd8db3e..c93c1a077 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
@@ -272,6 +272,10 @@ void ShellyProUpdateIsr(void) {
/*
The goal if this function is to minimize SPI and SetVirtualPinState calls
*/
+ noInterrupts();
+ detachInterrupt(SPro.pin_mcp23s17_int);
+ interrupts();
+
uint32_t input_state = SP4Mcp23S17Read16(SP4_MCP23S17_INTCAPA); // Read intcap and clear interrupt
input_state &= 0x806F; // Only test input bits
@@ -298,6 +302,8 @@ void ShellyProUpdateIsr(void) {
mask <<= 1;
}
SPro.input_state = input_state;
+
+ attachInterrupt(SPro.pin_mcp23s17_int, ShellyProUpdateIsr, CHANGE);
}
bool ShellyProButton(void) {
diff --git a/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino b/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino
index 8f5fb7237..935a5a7f0 100644
--- a/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino
+++ b/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino
@@ -836,6 +836,7 @@ bool Xnrg07(uint32_t function) {
bool result = false;
switch (function) {
+/*
case FUNC_ENERGY_EVERY_SECOND: // Use energy interrupt timer (fails on SPI)
if (!Ade7953.use_spi) { // No SPI
Ade7953EnergyEverySecond();
@@ -846,6 +847,11 @@ bool Xnrg07(uint32_t function) {
Ade7953EnergyEverySecond();
}
break;
+*/
+ case FUNC_ENERGY_EVERY_SECOND: // Use energy interrupt timer (fails on SPI)
+ Ade7953EnergyEverySecond();
+ break;
+
case FUNC_COMMAND:
result = Ade7953Command();
break;
From d2f450316c0449377446da27d5f541aec9a61776 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Mon, 20 Feb 2023 15:21:24 +0100
Subject: [PATCH 020/227] Set correct OTA URL for all Tasmota build env
(#18008)
* OTA URL Part 1
* typo
* OTA URL Part 2
* OTA URL Part 3
* fix s2 safeboot
* formatting
* rm whitespace
* more beautify
* last whitespace
---
platformio_tasmota_cenv_sample.ini | 146 +++++++++++---------
platformio_tasmota_env.ini | 71 +++++-----
platformio_tasmota_env32.ini | 214 ++++++++++++++++++-----------
tasmota/my_user_config.h | 18 ---
4 files changed, 257 insertions(+), 192 deletions(-)
diff --git a/platformio_tasmota_cenv_sample.ini b/platformio_tasmota_cenv_sample.ini
index 40d9afadf..4052ce7e9 100644
--- a/platformio_tasmota_cenv_sample.ini
+++ b/platformio_tasmota_cenv_sample.ini
@@ -1,23 +1,27 @@
[env:tasmota-rangeextender]
build_flags = ${env.build_flags}
- -D FIRMWARE_RANGE_EXTENDER
- -D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH
- -D USE_WIFI_RANGE_EXTENDER
- -D USE_WIFI_RANGE_EXTENDER_NAPT
+ -DFIRMWARE_RANGE_EXTENDER
+ -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH
+ -DUSE_WIFI_RANGE_EXTENDER
+ -DUSE_WIFI_RANGE_EXTENDER_NAPT
+ -DOTA_URL='""'
[env:tasmota32-rangeextender]
extends = env:tasmota32_base
build_flags = ${env:tasmota32_base.build_flags}
- -D FIRMWARE_TASMOTA32
- -D USE_WIFI_RANGE_EXTENDER
- -D USE_WIFI_RANGE_EXTENDER_NAPT
+ -DFIRMWARE_TASMOTA32
+ -DUSE_WIFI_RANGE_EXTENDER
+ -DUSE_WIFI_RANGE_EXTENDER_NAPT
+ -DOTA_URL='""'
[env:tasmota32s3-file]
extends = env:tasmota32_base
board = esp32s3-qio_qspi
board_build.f_cpu = 240000000L
board_build.f_flash = 80000000L
-build_flags = ${env:tasmota32_base.build_flags} -D FIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_TASMOTA32
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s3.bin"'
; !!! Real flash size needed, avoid autoresize since it is formating FS !!!
board_upload.flash_size = 8MB
board_upload.maximum_size = 8388608
@@ -31,25 +35,33 @@ custom_files_upload = ${env:tasmota32_base.custom_files_upload}
https://github.com/tasmota/autoconf/raw/main/esp32s3/DevKitC-1.autoconf
[env:tasmota32s3-qio_opi-all]
-extends = env:tasmota32_base
-board = esp32s3-qio_opi
-board_build.f_cpu = 240000000L
-board_build.f_flash = 80000000L
-build_flags = ${env:tasmota32_base.build_flags} -DUSE_WEBCAM -DUSE_BERRY_ULP -DFIRMWARE_LVGL -DUSE_LVGL_OPENHASP
+extends = env:tasmota32_base
+board = esp32s3-qio_opi
+board_build.f_cpu = 240000000L
+board_build.f_flash = 80000000L
+build_flags = ${env:tasmota32_base.build_flags}
+ -DUSE_WEBCAM
+ -DUSE_BERRY_ULP
+ -DFIRMWARE_LVGL
+ -DUSE_LVGL_OPENHASP
+ -DOTA_URL='""'
[env:tasmota32c3-bluetooth]
extends = env:tasmota32c3
build_flags = ${env:tasmota32c3.build_flags}
- -D USE_BLE_ESP32
- -D USE_MI_ESP32
-; -D USE_EQ3_ESP32
+ -DUSE_BLE_ESP32
+ -DUSE_MI_ESP32
+; -DUSE_EQ3_ESP32
+ -DOTA_URL='""'
lib_extra_dirs = lib/libesp32, lib/libesp32_div, lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div, lib/lib_ssl, lib/lib_display, lib/lib_audio
[env:tasmota32s3-bluetooth]
extends = env:tasmota32_base
board = esp32s3
-build_flags = ${env:tasmota32_base.build_flags} -D FIRMWARE_BLUETOOTH
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_BLUETOOTH
+ -DOTA_URL='""'
lib_extra_dirs = lib/libesp32, lib/libesp32_div, lib/lib_basic, lib/lib_ssl, lib/lib_i2c
lib_ignore = TTGO TWatch Library
Micro-RTSP
@@ -61,6 +73,7 @@ build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_BLUETOOTH
-DUSE_MI_EXT_GUI
-DUSE_MI_HOMEKIT=1 ; 1 to enable; 0 to disable
+ -DOTA_URL='""'
lib_extra_dirs = lib/libesp32, lib/libesp32_div, lib/lib_basic, lib/lib_i2c, lib/lib_div, lib/lib_ssl
lib_ignore = ESP8266Audio
ESP8266SAM
@@ -74,6 +87,7 @@ build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_BLUETOOTH
-DUSE_MI_EXT_GUI
-DUSE_MI_HOMEKIT=1 ; 1 to enable; 0 to disable
+ -DOTA_URL='""'
lib_extra_dirs = lib/libesp32, lib/libesp32_div, lib/lib_basic, lib/lib_i2c, lib/lib_div, lib/lib_ssl
lib_ignore = ESP8266Audio
ESP8266SAM
@@ -87,6 +101,7 @@ build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_BLUETOOTH
-DUSE_MI_EXT_GUI
-DUSE_MI_HOMEKIT=1 ; 1 to enable; 0 to disable
+ -DOTA_URL='""'
lib_extra_dirs = lib/libesp32, lib/libesp32_div, lib/lib_basic, lib/lib_i2c, lib/lib_div, lib/lib_ssl
lib_ignore = ESP8266Audio
ESP8266SAM
@@ -103,12 +118,14 @@ check_tool = cppcheck
check_skip_packages = yes
build_flags = ${env.build_flags}
; -Wstack-usage=300
+ -DOTA_URL='""'
[env:tasmota32-debug]
extends = env:tasmota32_base
build_type = debug
build_unflags = ${env:tasmota32_base.build_unflags}
build_flags = ${env:tasmota32_base.build_flags}
+ -DOTA_URL='""'
check_tool = cppcheck
;clangtidy
check_skip_packages = yes
@@ -120,58 +137,63 @@ monitor_filters = esp32_exception_decoder
; *** Install howto for Windows https://community.platformio.org/t/esp32-pio-unified-debugger/4541/20
[env:tasmota32-ocd]
-build_type = debug
-extends = env:tasmota32_base
-board = esp32
-debug_tool = esp-prog
-upload_protocol = esp-prog
-debug_init_break = tbreak setup
-build_unflags = ${env:tasmota32_base.build_unflags}
-build_flags = ${env:tasmota32_base.build_flags}
-monitor_filters = esp32_exception_decoder
+build_type = debug
+extends = env:tasmota32_base
+board = esp32
+debug_tool = esp-prog
+upload_protocol = esp-prog
+debug_init_break = tbreak setup
+build_unflags = ${env:tasmota32_base.build_unflags}
+build_flags = ${env:tasmota32_base.build_flags}
+ -DOTA_URL='""'
+monitor_filters = esp32_exception_decoder
[env:tasmota32solo1-ocd]
-build_type = debug
-extends = env:tasmota32solo1
-board = esp32_solo1
-debug_tool = esp-prog
-upload_protocol = esp-prog
-debug_init_break = tbreak setup
-build_unflags = ${env:tasmota32_base.build_unflags}
-build_flags = ${env:tasmota32_base.build_flags}
-monitor_filters = esp32_exception_decoder
+build_type = debug
+extends = env:tasmota32solo1
+board = esp32_solo1
+debug_tool = esp-prog
+upload_protocol = esp-prog
+debug_init_break = tbreak setup
+build_unflags = ${env:tasmota32_base.build_unflags}
+build_flags = ${env:tasmota32_base.build_flags}
+ -DOTA_URL='""'
+monitor_filters = esp32_exception_decoder
[env:tasmota32s2-ocd]
-build_type = debug
-extends = env:tasmota32_base
-board = esp32s2
-debug_tool = esp-prog
-upload_protocol = esp-prog
-debug_init_break = tbreak setup
-build_unflags = ${env:tasmota32_base.build_unflags}
-build_flags = ${env:tasmota32_base.build_flags}
-monitor_filters = esp32_exception_decoder
+build_type = debug
+extends = env:tasmota32_base
+board = esp32s2
+debug_tool = esp-prog
+upload_protocol = esp-prog
+debug_init_break = tbreak setup
+build_unflags = ${env:tasmota32_base.build_unflags}
+build_flags = ${env:tasmota32_base.build_flags}
+ -DOTA_URL='""'
+monitor_filters = esp32_exception_decoder
; *** JTAG Debug versions (only C3/S3), uses inbuilt CDC/jtag. No extra jtag hardware required!
[env:tasmota32s3cdc-ocd]
-build_type = debug
-extends = env:tasmota32s3
-board = esp32s3cdc-qio_opi
-debug_tool = esp-builtin
-upload_protocol = esp-builtin
-debug_init_break = tbreak setup
-build_unflags = ${env:tasmota32_base.build_unflags}
-build_flags = ${env:tasmota32_base.build_flags}
-monitor_filters = esp32_exception_decoder
+build_type = debug
+extends = env:tasmota32s3
+board = esp32s3cdc-qio_opi
+debug_tool = esp-builtin
+upload_protocol = esp-builtin
+debug_init_break = tbreak setup
+build_unflags = ${env:tasmota32_base.build_unflags}
+build_flags = ${env:tasmota32_base.build_flags}
+ -DOTA_URL='""'
+monitor_filters = esp32_exception_decoder
[env:tasmota32c3cdc-ocd]
-build_type = debug
-extends = env:tasmota32c3
-board = esp32c3cdc
-debug_tool = esp-builtin
-upload_protocol = esp-builtin
-debug_init_break = tbreak setup
-build_unflags = ${env:tasmota32c3.build_unflags}
-build_flags = ${env:tasmota32c3.build_flags}
-monitor_filters = esp32_exception_decoder
+build_type = debug
+extends = env:tasmota32c3
+board = esp32c3cdc
+debug_tool = esp-builtin
+upload_protocol = esp-builtin
+debug_init_break = tbreak setup
+build_unflags = ${env:tasmota32c3.build_unflags}
+build_flags = ${env:tasmota32c3.build_flags}
+ -DOTA_URL='""'
+monitor_filters = esp32_exception_decoder
diff --git a/platformio_tasmota_env.ini b/platformio_tasmota_env.ini
index a7cf65cea..7912f7214 100644
--- a/platformio_tasmota_env.ini
+++ b/platformio_tasmota_env.ini
@@ -32,118 +32,121 @@ lib_ignore =
[env:tasmota]
+build_flags = ${env.build_flags} -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota.bin.gz"'
[env:tasmota-4M]
board = esp8266_4M2M
+build_flags = ${env.build_flags} -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-4M.bin.gz"'
+
[env:tasmota-minimal]
-build_flags = ${env.build_flags} -DFIRMWARE_MINIMAL
+build_flags = ${env.build_flags} -DFIRMWARE_MINIMAL -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-minimal.bin.gz"'
lib_extra_dirs =
[env:tasmota-lite]
-build_flags = ${env.build_flags} -DFIRMWARE_LITE
+build_flags = ${env.build_flags} -DFIRMWARE_LITE -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-lite.bin.gz"'
lib_extra_dirs =
[env:tasmota-knx]
-build_flags = ${env.build_flags} -DFIRMWARE_KNX_NO_EMULATION
+build_flags = ${env.build_flags} -DFIRMWARE_KNX_NO_EMULATION -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-knx.bin.gz"'
lib_extra_dirs = lib/lib_basic, lib/lib_div
[env:tasmota-sensors]
-build_flags = ${env.build_flags} -DFIRMWARE_SENSORS
+build_flags = ${env.build_flags} -DFIRMWARE_SENSORS -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-sensors.bin.gz"'
lib_extra_dirs = lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div
[env:tasmota-display]
-build_flags = ${env.build_flags} -DFIRMWARE_DISPLAYS
+build_flags = ${env.build_flags} -DFIRMWARE_DISPLAYS -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-display.bin.gz"'
lib_extra_dirs = lib/lib_basic, lib/lib_display
[env:tasmota-ir]
-build_flags = ${env.build_flags} -DFIRMWARE_IR
+build_flags = ${env.build_flags} -DFIRMWARE_IR -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-ir.bin.gz"'
lib_extra_dirs = lib/lib_basic
[env:tasmota-zbbridge]
-build_flags = ${env.build_flags} -DFIRMWARE_ZBBRIDGE
+build_flags = ${env.build_flags} -DFIRMWARE_ZBBRIDGE -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-zbbridge.bin.gz"'
board = esp8266_zbbridge
lib_extra_dirs = lib/lib_basic, lib/lib_ssl, lib/lib_div
[env:tasmota-zigbee]
-build_flags = ${env.build_flags} -DUSE_ZIGBEE -DUSE_CCLOADER -DUSE_UFILESYS
+build_flags = ${env.build_flags} -DUSE_ZIGBEE -DUSE_CCLOADER -DUSE_UFILESYS -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-zigbee.bin.gz"'
board = esp8266_4M2M
board_build.f_cpu = 160000000L
[env:tasmota-AD]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=ca_AD
+build_flags = ${env.build_flags} -DMY_LANGUAGE=ca_AD -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmot-AD.bin.gz"'
[env:tasmota-AF]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=af_AF
+build_flags = ${env.build_flags} -DMY_LANGUAGE=af_AF -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-AF.bin.gz"'
[env:tasmota-BG]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=bg_BG
+build_flags = ${env.build_flags} -DMY_LANGUAGE=bg_BG -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-BG.bin.gz"'
[env:tasmota-BR]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=pt_BR
+build_flags = ${env.build_flags} -DMY_LANGUAGE=pt_BR -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-BR.bin.gz"'
[env:tasmota-CN]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=zh_CN
+build_flags = ${env.build_flags} -DMY_LANGUAGE=zh_CN -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-CN.bin.gz"'
[env:tasmota-CZ]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=cs_CZ
+build_flags = ${env.build_flags} -DMY_LANGUAGE=cs_CZ -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-CZ.bin.gz"'
[env:tasmota-DE]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=de_DE
+build_flags = ${env.build_flags} -DMY_LANGUAGE=de_DE -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-DE.bin.gz"'
[env:tasmota-ES]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=es_ES
+build_flags = ${env.build_flags} -DMY_LANGUAGE=es_ES -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-ES.bin.gz"'
[env:tasmota-FR]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=fr_FR
+build_flags = ${env.build_flags} -DMY_LANGUAGE=fr_FR -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-FR.bin.gz"'
[env:tasmota-FY]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=fy_NL
+build_flags = ${env.build_flags} -DMY_LANGUAGE=fy_NL -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-FY.bin.gz"'
[env:tasmota-GR]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=el_GR
+build_flags = ${env.build_flags} -DMY_LANGUAGE=el_GR -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-GR.bin.gz"'
[env:tasmota-HE]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=he_HE
+build_flags = ${env.build_flags} -DMY_LANGUAGE=he_HE -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-HE.bin.gz"'
[env:tasmota-HU]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=hu_HU
+build_flags = ${env.build_flags} -DMY_LANGUAGE=hu_HU -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-HU.bin.gz"'
[env:tasmota-IT]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=it_IT
+build_flags = ${env.build_flags} -DMY_LANGUAGE=it_IT -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-IT.bin.gz"'
[env:tasmota-KO]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=ko_KO
+build_flags = ${env.build_flags} -DMY_LANGUAGE=ko_KO -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-KO.bin.gz"'
[env:tasmota-NL]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=nl_NL
+build_flags = ${env.build_flags} -DMY_LANGUAGE=nl_NL -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-NL.bin.gz"'
[env:tasmota-PL]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=pl_PL
+build_flags = ${env.build_flags} -DMY_LANGUAGE=pl_PL -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-PL.bin.gz"'
[env:tasmota-PT]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=pt_PT
+build_flags = ${env.build_flags} -DMY_LANGUAGE=pt_PT -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-PT.bin.gz"'
[env:tasmota-RO]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=ro_RO
+build_flags = ${env.build_flags} -DMY_LANGUAGE=ro_RO -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-RO.bin.gz"'
[env:tasmota-RU]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=ru_RU
+build_flags = ${env.build_flags} -DMY_LANGUAGE=ru_RU -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-RU.bin.gz"'
[env:tasmota-SE]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=sv_SE
+build_flags = ${env.build_flags} -DMY_LANGUAGE=sv_SE -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-SE.bin.gz"'
[env:tasmota-SK]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=sk_SK
+build_flags = ${env.build_flags} -DMY_LANGUAGE=sk_SK -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-SK.bin.gz"'
[env:tasmota-TR]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=tr_TR
+build_flags = ${env.build_flags} -DMY_LANGUAGE=tr_TR -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-TR.bin.gz"'
[env:tasmota-TW]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=zh_TW
+build_flags = ${env.build_flags} -DMY_LANGUAGE=zh_TW -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-TW.bin.gz"'
[env:tasmota-UK]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=uk_UA
+build_flags = ${env.build_flags} -DMY_LANGUAGE=uk_UA -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-UK.bin.gz"'
[env:tasmota-VN]
-build_flags = ${env.build_flags} -DMY_LANGUAGE=vi_VN
+build_flags = ${env.build_flags} -DMY_LANGUAGE=vi_VN -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-VN.bin.gz"'
diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini
index f16b4cc12..a408338d4 100644
--- a/platformio_tasmota_env32.ini
+++ b/platformio_tasmota_env32.ini
@@ -1,48 +1,50 @@
[env:tasmota32_base]
-framework = ${common.framework}
-platform = ${core32.platform}
-platform_packages = ${core32.platform_packages}
-board_build.filesystem = ${common.board_build.filesystem}
-custom_unpack_dir = ${common.custom_unpack_dir}
-board = esp32
-monitor_speed = 115200
-upload_resetmethod = ${common.upload_resetmethod}
-extra_scripts = ${esp32_defaults.extra_scripts}
-build_unflags = ${core32.build_unflags}
-build_flags = ${core32.build_flags}
-lib_ldf_mode = ${common.lib_ldf_mode}
-lib_compat_mode = ${common.lib_compat_mode}
-lib_extra_dirs = ${common.lib_extra_dirs}
- lib/libesp32
- lib/libesp32_lvgl
- lib/libesp32_div
- lib/libesp32_eink
- lib/libesp32_audio
-lib_ignore =
- HTTPUpdateServer
- ESP RainMaker
- WiFiProv
- USB
- SPIFFS
- ESP32 Azure IoT Arduino
- ESP32 Async UDP
- ESP32 BLE Arduino
-; SimpleBLE
- NetBIOS
- ESP32
- Preferences
- BluetoothSerial
+framework = ${common.framework}
+platform = ${core32.platform}
+platform_packages = ${core32.platform_packages}
+board_build.filesystem = ${common.board_build.filesystem}
+custom_unpack_dir = ${common.custom_unpack_dir}
+board = esp32
+monitor_speed = 115200
+upload_resetmethod = ${common.upload_resetmethod}
+extra_scripts = ${esp32_defaults.extra_scripts}
+build_unflags = ${core32.build_unflags}
+build_flags = ${core32.build_flags}
+lib_ldf_mode = ${common.lib_ldf_mode}
+lib_compat_mode = ${common.lib_compat_mode}
+lib_extra_dirs = ${common.lib_extra_dirs}
+ lib/libesp32
+ lib/libesp32_lvgl
+ lib/libesp32_div
+ lib/libesp32_eink
+ lib/libesp32_audio
+lib_ignore =
+ HTTPUpdateServer
+ ESP RainMaker
+ WiFiProv
+ USB
+ SPIFFS
+ ESP32 Azure IoT Arduino
+ ESP32 Async UDP
+ ESP32 BLE Arduino
+; SimpleBLE
+ NetBIOS
+ ESP32
+ Preferences
+ BluetoothSerial
; Disable next if you want to use ArduinoOTA in Tasmota32 (default disabled)
- ArduinoOTA
+ ArduinoOTA
; Add files to Filesystem for all env (global). Remove no files entry and add add a line with the file to include
; Example for adding the Partition Manager
; custom_files_upload =
; tasmota/berry/modules/Partition_Manager.tapp
-custom_files_upload = no_files
+custom_files_upload = no_files
[env:tasmota32-safeboot]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_SAFEBOOT
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_SAFEBOOT
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore =
Micro-RTSP
@@ -51,19 +53,25 @@ lib_ignore =
[env:tasmota32]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_TASMOTA32
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32.bin"'
[env:tasmota32-webcam]
extends = env:tasmota32_base
board = esp32-fix
board_build.f_cpu = 240000000L
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_WEBCAM -DCAMERA_MODEL_AI_THINKER
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_WEBCAM -DCAMERA_MODEL_AI_THINKER
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-webcam.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
[env:tasmota32-odroidgo]
extends = env:tasmota32-lvgl
board_build.f_cpu = 240000000L
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32 -DARDUINO_ODROID_ESP32
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_TASMOTA32 -DARDUINO_ODROID_ESP32
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-lvgl.bin"'
board = esp32-fix
[env:tasmota32-core2]
@@ -71,39 +79,56 @@ extends = env:tasmota32-lvgl
board_build.flash_mode = qio
board_build.f_cpu = 240000000L
board_build.f_flash = 80000000L
-build_flags = ${env:tasmota32-lvgl.build_flags} -DUSE_I2S_SAY_TIME -DUSE_I2S_WEBRADIO -DUSE_SENDMAIL
+build_flags = ${env:tasmota32-lvgl.build_flags}
+ -DUSE_I2S_SAY_TIME
+ -DUSE_I2S_WEBRADIO
+ -DUSE_SENDMAIL
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-lvgl.bin"'
lib_extra_dirs = lib/libesp32, lib/libesp32_lvgl, lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div, lib/lib_ssl, lib/lib_display, lib/lib_audio
[env:tasmota32-bluetooth]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_BLUETOOTH
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_BLUETOOTH
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-bluetooth.bin"'
lib_extra_dirs = lib/libesp32, lib/libesp32_div, lib/lib_basic, lib/lib_i2c, lib/lib_ssl
[env:tasmota32-display]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_DISPLAYS
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_DISPLAYS
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-display.bin"'
lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_display, lib/lib_ssl
[env:tasmota32-lvgl]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_LVGL
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_LVGL
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-lvgl.bin"'
board_build.f_cpu = 240000000L
lib_extra_dirs = lib/libesp32, lib/libesp32_lvgl, lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div, lib/lib_ssl, lib/lib_display
[env:tasmota32-ir]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DUSE_IR_REMOTE_FULL -DFIRMWARE_IR
+build_flags = ${env:tasmota32_base.build_flags}
+ -DUSE_IR_REMOTE_FULL
+ -DFIRMWARE_IR
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-ir.bin"'
lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_ssl
[env:tasmota32solo1]
extends = env:tasmota32_base
board = esp32_solo1
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_TASMOTA32
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32solo1.bin"'
[env:tasmota32solo1-safeboot]
extends = env:tasmota32_base
board = esp32_solo1
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_SAFEBOOT
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_SAFEBOOT
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32solo1-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore =
Micro-RTSP
@@ -114,6 +139,7 @@ lib_ignore =
extends = env:tasmota32_base
board_build.partitions = partitions/esp32_partition_app1856k_fs1344k.csv
build_flags = ${env:tasmota32_base.build_flags}
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-zbbrdgpro.bin"'
-DFIRMWARE_ZBBRDGPRO
-DFRAMEWORK_ARDUINO_ITEAD
custom_files_upload = ${env:tasmota32_base.custom_files_upload}
@@ -127,6 +153,7 @@ lib_extra_dirs = lib/lib_basic, lib/lib_ssl, lib/libesp32
[env:tasmota32-nspanel]
extends = env:tasmota32_base
build_flags = ${env:tasmota32_base.build_flags}
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-nspanel.bin"'
-DFIRMWARE_NSPANEL
-DFRAMEWORK_ARDUINO_ITEAD
@@ -136,7 +163,9 @@ board = esp32c3
build_unflags = ${env:tasmota32_base.build_unflags}
-flto
-mtarget-align
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_SAFEBOOT
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_SAFEBOOT
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c3-safeboot.bin"'
-fno-lto
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore =
@@ -150,7 +179,9 @@ board = esp32c3
build_unflags = ${env:tasmota32_base.build_unflags}
-flto
-mtarget-align
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_TASMOTA32
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c3.bin"'
-fno-lto
lib_ignore =
TTGO TWatch Library
@@ -161,15 +192,24 @@ lib_ignore =
[env:tasmota32c3cdc-safeboot]
extends = env:tasmota32c3-safeboot
board = esp32c3cdc
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_SAFEBOOT
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c3cdc-safeboot.bin"'
+ -fno-lto
[env:tasmota32c3cdc]
extends = env:tasmota32c3
board = esp32c3cdc
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_TASMOTA32
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c3cdc.bin"'
[env:tasmota32s2-safeboot]
extends = env:tasmota32_base
board = esp32s2
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_SAFEBOOT
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_SAFEBOOT
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s2-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore =
Micro-RTSP
@@ -179,7 +219,9 @@ lib_ignore =
[env:tasmota32s2]
extends = env:tasmota32_base
board = esp32s2
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_TASMOTA32
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s2.bin"'
lib_ignore =
TTGO TWatch Library
NimBLE-Arduino
@@ -189,15 +231,23 @@ lib_ignore =
[env:tasmota32s2cdc-safeboot]
extends = env:tasmota32s2-safeboot
board = esp32s2cdc
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_SAFEBOOT
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s2cdc-safeboot.bin"'
[env:tasmota32s2cdc]
extends = env:tasmota32s2
board = esp32s2cdc
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_TASMOTA32
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s2cdc.bin"'
[env:tasmota32s3-safeboot]
extends = env:tasmota32_base
board = esp32s3-qio_qspi
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_SAFEBOOT
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_SAFEBOOT
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s3-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore =
Micro-RTSP
@@ -207,7 +257,9 @@ lib_ignore =
[env:tasmota32s3]
extends = env:tasmota32_base
board = esp32s3-qio_qspi
-build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_TASMOTA32
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s3.bin"'
lib_ignore =
TTGO TWatch Library
Micro-RTSP
@@ -216,111 +268,117 @@ lib_ignore =
[env:tasmota32s3cdc-safeboot]
extends = env:tasmota32s3-safeboot
board = esp32s3cdc-qio_qspi
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_SAFEBOOT
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c3cdc-safeboot.bin"'
[env:tasmota32s3cdc]
extends = env:tasmota32s3
board = esp32s3cdc-qio_qspi
+build_flags = ${env:tasmota32_base.build_flags}
+ -DFIRMWARE_TASMOTA32
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s3cdc.bin"'
[env:tasmota32-AD]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=ca_AD -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=ca_AD -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-AD.bin"'
[env:tasmota32-AF]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=af_AF -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=af_AF -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-AF.bin"'
[env:tasmota32-BG]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=bg_BG -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=bg_BG -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-BG.bin"'
[env:tasmota32-BR]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=pt_BR -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=pt_BR -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-BR.bin"'
[env:tasmota32-CN]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=zh_CN -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=zh_CN -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-CN.bin"'
[env:tasmota32-CZ]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=cs_CZ -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=cs_CZ -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-CZ.bin"'
[env:tasmota32-DE]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=de_DE -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=de_DE -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-DE.bin"'
[env:tasmota32-ES]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=es_ES -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=es_ES -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-ES.bin"'
[env:tasmota32-FR]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=fr_FR -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=fr_FR -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-FR.bin"'
[env:tasmota32-FY]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=fy_NL -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=fy_NL -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-FY.bin"'
[env:tasmota32-GR]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=el_GR -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=el_GR -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-GR.bin"'
[env:tasmota32-HE]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=he_HE -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=he_HE -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-HE.bin"'
[env:tasmota32-HU]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=hu_HU -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=hu_HU -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-HU.bin"'
[env:tasmota32-IT]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=it_IT -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=it_IT -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-IT.bin"'
[env:tasmota32-KO]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=ko_KO -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=ko_KO -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-KO.bin"'
[env:tasmota32-NL]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=nl_NL -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=nl_NL -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-NL.bin"'
[env:tasmota32-PL]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=pl_PL -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=pl_PL -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-PL.bin"'
[env:tasmota32-PT]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=pt_PT -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=pt_PT -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-PT.bin"'
[env:tasmota32-RO]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=ro_RO -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=ro_RO -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-RO.bin"'
[env:tasmota32-RU]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=ru_RU -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=ru_RU -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-RU.bin"'
[env:tasmota32-SE]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=sv_SE -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=sv_SE -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-SE.bin"'
[env:tasmota32-SK]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=sk_SK -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=sk_SK -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-SK.bin"'
[env:tasmota32-TR]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=tr_TR -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=tr_TR -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-TR.bin"'
[env:tasmota32-TW]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=zh_TW -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=zh_TW -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-TW.bin"'
[env:tasmota32-UK]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=uk_UA -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=uk_UA -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-UK.bin"'
[env:tasmota32-VN]
extends = env:tasmota32_base
-build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=vi_VN -DFIRMWARE_TASMOTA32
+build_flags = ${env:tasmota32_base.build_flags} -DMY_LANGUAGE=vi_VN -DFIRMWARE_TASMOTA32 -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-VN.bin"'
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 73f79b3f4..eae01fcd9 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -93,24 +93,6 @@
#define WEB_LOG_LEVEL LOG_LEVEL_INFO // [WebLog] (LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE)
#define MQTT_LOG_LEVEL LOG_LEVEL_NONE // [MqttLog] (LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE)
-// -- Ota -----------------------------------------
-#ifdef ESP8266
-#define OTA_URL "http://ota.tasmota.com/tasmota/release/tasmota.bin.gz" // [OtaUrl]
-#endif // ESP8266
-#ifdef ESP32
-#ifdef CONFIG_IDF_TARGET_ESP32C3
-#define OTA_URL "https://ota.tasmota.com/tasmota32/release/tasmota32c3.bin" // [OtaUrl]
-#elif defined(CONFIG_IDF_TARGET_ESP32S2)
-#define OTA_URL "https://ota.tasmota.com/tasmota32/release/tasmota32s2.bin" // [OtaUrl]
-#elif defined(CONFIG_IDF_TARGET_ESP32S3)
-#define OTA_URL "https://ota.tasmota.com/tasmota32/release/tasmota32s3.bin" // [OtaUrl]
-#elif defined(CORE32SOLO1)
-#define OTA_URL "https://ota.tasmota.com/tasmota32/release/tasmota32solo1.bin" // [OtaUrl]
-#else
-#define OTA_URL "https://ota.tasmota.com/tasmota32/release/tasmota32.bin" // [OtaUrl]
-#endif // CONFIG_IDF_TARGET_ESP32C3
-#endif // ESP32
-
// -- MQTT ----------------------------------------
#define MQTT_USE true // [SetOption3] Select default MQTT use (false = Off, true = On)
From 3ce011c2cebd9c20228c1531e0b568ef39635083 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Mon, 20 Feb 2023 18:02:43 +0100
Subject: [PATCH 021/227] Attempt to stabilize Shelly Pro 4PM values
---
.../xdrv_88_esp32_shelly_pro.ino | 6 -----
.../tasmota_xnrg_energy/xnrg_07_ade7953.ino | 26 ++++++++++++++-----
2 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
index c93c1a077..16dd8db3e 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
@@ -272,10 +272,6 @@ void ShellyProUpdateIsr(void) {
/*
The goal if this function is to minimize SPI and SetVirtualPinState calls
*/
- noInterrupts();
- detachInterrupt(SPro.pin_mcp23s17_int);
- interrupts();
-
uint32_t input_state = SP4Mcp23S17Read16(SP4_MCP23S17_INTCAPA); // Read intcap and clear interrupt
input_state &= 0x806F; // Only test input bits
@@ -302,8 +298,6 @@ void ShellyProUpdateIsr(void) {
mask <<= 1;
}
SPro.input_state = input_state;
-
- attachInterrupt(SPro.pin_mcp23s17_int, ShellyProUpdateIsr, CHANGE);
}
bool ShellyProButton(void) {
diff --git a/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino b/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino
index 935a5a7f0..78fb0fcc0 100644
--- a/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino
+++ b/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino
@@ -231,6 +231,7 @@ typedef struct {
} tAde7953Channel;
struct Ade7953 {
+ uint32_t last_update;
uint32_t voltage_rms[ADE7953_MAX_CHANNEL] = { 0, 0 };
uint32_t current_rms[ADE7953_MAX_CHANNEL] = { 0, 0 };
uint32_t active_power[ADE7953_MAX_CHANNEL] = { 0, 0 };
@@ -523,6 +524,19 @@ void Ade7953GetData(void) {
}
if (Energy->power_on) { // Powered on
+
+ float correction = 1.0f;
+ if (Ade7953.use_spi) { // SPI
+ uint32_t time = millis();
+ if (Ade7953.last_update) {
+ uint32_t difference = time - Ade7953.last_update;
+ correction = (float)difference / 1000; // Correction to 1 second
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("ADE: Correction %4_f"), &correction);
+ }
+ Ade7953.last_update = time;
+ }
+
float divider;
for (uint32_t channel = 0; channel < Energy->phase_count; channel++) {
Energy->data_valid[channel] = 0;
@@ -557,6 +571,12 @@ void Ade7953GetData(void) {
divider = (Ade7953.calib_data[channel][ADE7953_CAL_VAGAIN] != ADE7953_GAIN_DEFAULT) ? ADE7953_LSB_PER_WATTSECOND : power_calibration;
Energy->apparent_power[channel] = (float)apparent_power[channel] / divider;
+ if (Ade7953.use_spi) { // SPI
+ Energy->active_power[channel] /= correction;
+ Energy->reactive_power[channel] /= correction;
+ Energy->apparent_power[channel] /= correction;
+ }
+
if (0 == Energy->active_power[channel]) {
Energy->current[channel] = 0;
} else {
@@ -836,7 +856,6 @@ bool Xnrg07(uint32_t function) {
bool result = false;
switch (function) {
-/*
case FUNC_ENERGY_EVERY_SECOND: // Use energy interrupt timer (fails on SPI)
if (!Ade7953.use_spi) { // No SPI
Ade7953EnergyEverySecond();
@@ -847,11 +866,6 @@ bool Xnrg07(uint32_t function) {
Ade7953EnergyEverySecond();
}
break;
-*/
- case FUNC_ENERGY_EVERY_SECOND: // Use energy interrupt timer (fails on SPI)
- Ade7953EnergyEverySecond();
- break;
-
case FUNC_COMMAND:
result = Ade7953Command();
break;
From 84442dcd39fbd0930c13c8dc79ffcc23f6b20ccc Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Mon, 20 Feb 2023 22:36:34 +0100
Subject: [PATCH 022/227] OTA_URL safeguard (#18010)
---
tasmota/my_user_config.h | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index eae01fcd9..d2f6cd513 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -1198,6 +1198,14 @@
//#define FIRMWARE_IR // Create tasmota-ir with IR full protocols activated, and many sensors disabled
//#define FIRMWARE_MINIMAL // Create tasmota-minimal as intermediate firmware for OTA-MAGIC
+/*********************************************************************************************\
+ * Safe guard when needed defines are not done in Platformio *
+\*********************************************************************************************/
+
+#ifndef OTA_URL
+ #define OTA_URL
+#endif
+
/*********************************************************************************************\
* User configurable items override *
\*********************************************************************************************/
From dbcffa66e4d429efacf949d085b0f39b5c540f5d Mon Sep 17 00:00:00 2001
From: Barbudor
Date: Tue, 21 Feb 2023 09:13:00 +0100
Subject: [PATCH 023/227] Fix ir panasonic esp8266 (#18013)
* revert part of #16179 for ESP8266
* Revert "revert part of #16179 for ESP8266"
This reverts commit b8e61264074f0dd92e5fca29a991d31c97f8f9ee.
* try to revert #16179 for esp8266
---
.../IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp
index 95f7c2af9..00bc1f3ab 100644
--- a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp
+++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp
@@ -411,6 +411,10 @@ void IRrecv::pause(void) {
params.rcvstate = kStopState;
params.rawlen = 0;
params.overflow = false;
+#if defined(ESP8266)
+ os_timer_disarm(&timer);
+ detachInterrupt(params.recvpin);
+#endif
#if defined(ESP32)
gpio_intr_disable((gpio_num_t)params.recvpin);
#endif // ESP32
@@ -424,6 +428,10 @@ void IRrecv::resume(void) {
params.rcvstate = kIdleState;
params.rawlen = 0;
params.overflow = false;
+#if defined(ESP8266)
+ os_timer_setfn(&timer, reinterpret_cast(read_timeout),NULL);
+ attachInterrupt(params.recvpin, gpio_intr, CHANGE);
+#endif
#if defined(ESP32)
timerAlarmDisable(timer);
gpio_intr_enable((gpio_num_t)params.recvpin);
From 8f17820a43b4f48c2e7d34bac32dad14e0800325 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Tue, 21 Feb 2023 13:08:27 +0100
Subject: [PATCH 024/227] Update to Tasmota Arduino ESP32 Core 2.0.7 (#18014)
* Tasmota Arduino ESP32 Core 2.0.7
---
.github/PULL_REQUEST_TEMPLATE.md | 2 +-
platformio_tasmota32.ini | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 5ba7951ba..f99a39107 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -7,7 +7,7 @@
- [ ] Only relevant files were touched
- [ ] Only one feature/fix was added per PR and the code change compiles without warnings
- [ ] The code change is tested and works with Tasmota core ESP8266 V.2.7.4.9
- - [ ] The code change is tested and works with Tasmota core ESP32 V.2.0.6
+ - [ ] The code change is tested and works with Tasmota core ESP32 V.2.0.7
- [ ] I accept the [CLA](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md#contributor-license-agreement-cla).
_NOTE: The code change must pass CI tests. **Your PR cannot be merged unless tests pass**_
diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini
index 08bd7e0a3..1d2c2f2db 100644
--- a/platformio_tasmota32.ini
+++ b/platformio_tasmota32.ini
@@ -42,7 +42,7 @@ extra_scripts = pre:pio-tools/add_c_flags.py
${esp_defaults.extra_scripts}
[core32]
-platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.01.01/platform-espressif32.zip
+platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.02.00/platform-espressif32.zip
platform_packages =
build_unflags = ${esp32_defaults.build_unflags}
build_flags = ${esp32_defaults.build_flags}
From 47da60f280f0e4298c0c5fb6b1ec0040bc8378c1 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Tue, 21 Feb 2023 13:27:03 +0100
Subject: [PATCH 025/227] ESP32 Framework (Core) v2.0.7
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 42a743a91..c1249a792 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file.
### Changed
- ADC Range oversample from 2 to 32 (#17975)
+- ESP32 Framework (Core) from v2.0.6 to v2.0.7
### Fixed
- SEN5X floats and units (#17961)
From 2827bdec22d328bc1b9010fc93c3b2c4b08040c7 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 21 Feb 2023 17:19:25 +0100
Subject: [PATCH 026/227] Update changelogs
---
CHANGELOG.md | 3 +++
RELEASENOTES.md | 9 ++++++---
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c1249a792..0966b3fbc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,18 +5,21 @@ All notable changes to this project will be documented in this file.
## [12.4.0.1]
### Added
+- Matter read/write and commands (#18000)
### Breaking Changed
### Changed
- ADC Range oversample from 2 to 32 (#17975)
- ESP32 Framework (Core) from v2.0.6 to v2.0.7
+- Move #define OTA_URL from user_config.h to board files for better inital support (#18008)
### Fixed
- SEN5X floats and units (#17961)
- Energytotals cannot be set to negative values (#17965)
- Undocumented support for non-sequential buttons and switches (#17967)
- SR04 driver single pin ultrasonic sensor detection (#17966)
+- IR panasonic protocol regression from v12.0.2.4 (#18013)
### Removed
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index b33447bb1..dd039ce1d 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -36,9 +36,9 @@ While fallback or downgrading is common practice it was never supported due to S
This release will be supported from ESP8266/Arduino library Core version **2.7.4.9** due to reported security and stability issues on previous Core version. This will also support gzipped binaries.
-This release will be supported from ESP32/Arduino library Core version **2.0.6**.
+This release will be supported from ESP32/Arduino library Core version **2.0.7**.
-Support of ESP8266 Core versions before 2.7.4.9 and ESP32 Core versions before 2.0.6 have been removed.
+Support of ESP8266 Core versions before 2.7.4.9 and ESP32 Core versions before 2.0.7 have been removed.
## Support of TLS
@@ -80,7 +80,7 @@ Historical binaries can be downloaded from
The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz``
### ESP32, ESP32-C3, ESP32-S2 and ESP32-S3 based
-The following binary downloads have been compiled with ESP32/Arduino library core version **2.0.6**.
+The following binary downloads have been compiled with ESP32/Arduino library core version **2.0.7**.
- **tasmota32.bin** = The Tasmota version with most drivers including additional sensors and KNX for 4M+ flash. **RECOMMENDED RELEASE BINARY**
- **tasmota32xy.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-C3/S2/S3 and 4M+ flash.
@@ -116,9 +116,12 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
### Breaking Changed
### Changed
+- ESP32 Framework (Core) from v2.0.6 to v2.0.7
- ADC Range oversample from 2 to 32 [#17975](https://github.com/arendst/Tasmota/issues/17975)
+- Move #define OTA_URL from user_config.h to board files for better inital support [#18008](https://github.com/arendst/Tasmota/issues/18008)
### Fixed
- SEN5X floats and units [#17961](https://github.com/arendst/Tasmota/issues/17961)
- Energytotals cannot be set to negative values [#17965](https://github.com/arendst/Tasmota/issues/17965)
- SR04 driver single pin ultrasonic sensor detection [#17966](https://github.com/arendst/Tasmota/issues/17966)
+- IR panasonic protocol regression from v12.0.2.4 [#18013](https://github.com/arendst/Tasmota/issues/18013)
From 103041cd1aef6f69b7df1467dc4ede720521fae0 Mon Sep 17 00:00:00 2001
From: s-hadinger <49731213+s-hadinger@users.noreply.github.com>
Date: Tue, 21 Feb 2023 21:46:54 +0100
Subject: [PATCH 027/227] Matter support for subscriptions (#18017)
---
.../src/embedded/Matter_Device.be | 53 +-
.../berry_matter/src/embedded/Matter_IM.be | 76 +-
.../src/embedded/Matter_IM_Message.be | 59 +-
.../src/embedded/Matter_IM_Subscription.be | 71 +-
.../src/embedded/Matter_Message.be | 17 +-
.../src/embedded/Matter_MessageHandler.be | 13 +-
.../src/embedded/Matter_Plugin.be | 20 +-
.../src/embedded/Matter_Plugin_OnOff.be | 15 +-
.../src/embedded/Matter_Plugin_Root.be | 32 +-
.../src/embedded/Matter_Session.be | 5 +-
.../src/embedded/Matter_UDPServer.be | 43 +-
.../berry_matter/src/embedded/Matter_UI.be | 2 +
.../src/solidify/solidified_Matter_Device.h | 3413 +++++++++--------
.../src/solidify/solidified_Matter_IM.h | 2848 +++++++-------
.../solidify/solidified_Matter_IM_Message.h | 468 ++-
.../solidified_Matter_IM_Subscription.h | 801 ++--
.../src/solidify/solidified_Matter_Message.h | 284 +-
.../solidified_Matter_MessageHandler.h | 980 ++---
.../src/solidify/solidified_Matter_Plugin.h | 379 +-
.../solidify/solidified_Matter_Plugin_OnOff.h | 218 +-
.../solidify/solidified_Matter_Plugin_Root.h | 3041 +++++++--------
.../src/solidify/solidified_Matter_Session.h | 1625 ++++----
.../solidify/solidified_Matter_UDPServer.h | 598 +--
.../src/solidify/solidified_Matter_UI.h | 312 +-
24 files changed, 8245 insertions(+), 7128 deletions(-)
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Device.be b/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
index 3477d09fa..f32e6d1d7 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
@@ -38,9 +38,11 @@ class Matter_Device
var hostname_eth # MAC-derived hostname for commissioning
var vendorid
var productid
+ # saved in parameters
var discriminator
- # context for PBKDF
var passcode
+ var ipv4only # advertize only IPv4 addresses (no IPv6)
+ # context for PBKDF
var iterations
# PBKDF information used only during PASE (freed afterwards)
var salt
@@ -59,6 +61,7 @@ class Matter_Device
self.vendorid = self.VENDOR_ID
self.productid = self.PRODUCT_ID
self.iterations = self.PBKDF_ITERATIONS
+ self.ipv4only = false
self.load_param()
self.commissioning_instance_wifi = crypto.random(8).tohex() # 16 characters random hostname
self.commissioning_instance_eth = crypto.random(8).tohex() # 16 characters random hostname
@@ -170,6 +173,12 @@ class Matter_Device
self.message_handler.every_second()
end
+ #############################################################
+ # dispatch every 250ms click to sub-objects that need it
+ def every_250ms()
+ self.message_handler.every_250ms()
+ end
+
#############################################################
def stop()
if self.udp_server self.udp_server.stop() end
@@ -275,6 +284,18 @@ class Matter_Device
return l
end
+ #############################################################
+ # signal that an attribute has been changed
+ #
+ def attribute_updated(endpoint, cluster, attribute, fabric_specific)
+ if fabric_specific == nil fabric_specific = false end
+ var ctx = matter.Path()
+ ctx.endpoint = endpoint
+ ctx.cluster = cluster
+ ctx.attribute = attribute
+ self.message_handler.im.subs.attribute_updated_ctx(ctx, fabric_specific)
+ end
+
#############################################################
# expand attribute list based
#
@@ -344,7 +365,7 @@ class Matter_Device
var attr_list = pi.get_attribute_list(ep, cl)
tasmota.log(string.format("MTR: pi=%s ep=%s cl=%s at_list=%s", str(pi), str(ep), str(cl), str(attr_list)), 4)
for at: attr_list
- if attribute != nil && at != attribute continue end # skip if specific attribiute and no match
+ if attribute != nil && at != attribute continue end # skip if specific attribute and no match
# from now on, 'at' is a good candidate
if !all[ep][cl].contains(at) all[ep][cl][at] = [] end
attribute_found = true
@@ -386,11 +407,6 @@ class Matter_Device
end
end
- # def process_read_attribute(ctx)
- # self.process_attribute_expansion(ctx,
- # / pi, ctx, direct -> pi.read_attribute(ctx))
- # end
-
#############################################################
# get active endpoints
#
@@ -416,7 +432,7 @@ class Matter_Device
#
def save_param()
import json
- var j = json.dump({'distinguish':self.discriminator, 'passcode':self.passcode})
+ var j = json.dump({'distinguish':self.discriminator, 'passcode':self.passcode, 'ipv4only':self.ipv4only})
try
import string
var f = open(self.FILENAME, "w")
@@ -442,8 +458,9 @@ class Matter_Device
import json
var j = json.load(s)
- self.discriminator = j.find("distinguish")
- self.passcode = j.find("passcode")
+ self.discriminator = j.find("distinguish", self.discriminator)
+ self.passcode = j.find("passcode", self.passcode)
+ self.ipv4only = bool(j.find("ipv4only", false))
except .. as e, m
if e != "io_error"
tasmota.log("MTR: Session_Store::load Exception:" + str(e) + "|" + str(m), 2)
@@ -469,12 +486,12 @@ class Matter_Device
# Plugins allow to specify response to read/write attributes
# and command invokes
#############################################################
- def invoke_request(msg, val, ctx)
+ def invoke_request(session, val, ctx)
var idx = 0
while idx < size(self.plugins)
var plugin = self.plugins[idx]
- var ret = plugin.invoke_request(msg, val, ctx)
+ var ret = plugin.invoke_request(session, val, ctx)
if ret != nil || ctx.status != matter.UNSUPPORTED_COMMAND # default value
return ret
end
@@ -533,7 +550,11 @@ class Matter_Device
if is_eth
var eth = tasmota.eth()
self.hostname_eth = string.replace(eth.find("mac"), ':', '')
- mdns.add_hostname(self.hostname_eth, eth.find('ip6local',''), eth.find('ip',''), eth.find('ip6',''))
+ if !self.ipv4only
+ mdns.add_hostname(self.hostname_eth, eth.find('ip6local',''), eth.find('ip',''), eth.find('ip6',''))
+ else
+ mdns.add_hostname(self.hostname_eth, eth.find('ip',''))
+ end
mdns.add_service("_matterc", "_udp", 5540, services, self.commissioning_instance_eth, self.hostname_eth)
tasmota.log(string.format("MTR: starting mDNS on %s '%s' ptr to `%s.local`", is_eth ? "eth" : "wifi",
@@ -556,7 +577,11 @@ class Matter_Device
else
var wifi = tasmota.wifi()
self.hostname_wifi = string.replace(wifi.find("mac"), ':', '')
- mdns.add_hostname(self.hostname_wifi, wifi.find('ip6local',''), wifi.find('ip',''), wifi.find('ip6',''))
+ if !self.ipv4only
+ mdns.add_hostname(self.hostname_wifi, wifi.find('ip6local',''), wifi.find('ip',''), wifi.find('ip6',''))
+ else
+ mdns.add_hostname(self.hostname_wifi, wifi.find('ip',''))
+ end
mdns.add_service("_matterc", "_udp", 5540, services, self.commissioning_instance_wifi, self.hostname_wifi)
tasmota.log(string.format("MTR: starting mDNS on %s '%s' ptr to `%s.local`", is_eth ? "eth" : "wifi",
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
index 1aedb3b55..f0c0e0599 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
@@ -111,34 +111,52 @@ class Matter_IM
return nil
end
+ #############################################################
+ # find in send_queue by exchangeid
+ #
+ def remove_sendqueue_by_exchangeid(exchangeid)
+ if exchangeid == nil return end
+ var idx = 0
+ while idx < size(self.send_queue)
+ if self.send_queue[idx].get_exchangeid() == exchangeid
+ self.send_queue.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ end
#############################################################
# process IM 0x01 Status Response
#
# val is the TLV structure
# or raises an exception
+ # return true if we handled the response and ack, false instead
def process_status_response(msg, val)
import string
var status = val.findsubval(0, 0xFF)
+ var message = self.find_sendqueue_by_exchangeid(msg.exchange_id)
if status == matter.SUCCESS
- tasmota.log("MTR: >Status", 2) # don't show 'SUCCESS' to not overflow logs with non-information
- var message = self.find_sendqueue_by_exchangeid(msg.exchange_id)
+ tasmota.log("MTR: >Status_OK", 2) # don't show 'SUCCESS' to not overflow logs with non-information
if message
- message.ack_received(msg) # re-arm the sending of next packets for the same exchange
- return true
+ return message.ack_received(msg) # re-arm the sending of next packets for the same exchange
end
else
+ # error
tasmota.log(string.format("MTR: >Status ERROR = 0x%02X", status), 2)
+ if message
+ message.ack_error(msg)
+ self.remove_sendqueue_by_exchangeid(msg.exchange_id)
+ end
end
- return false
+ return false # we did not ack the message, do it at higher level
end
#############################################################
# Inner code shared between read_attributes and subscribe_request
#
# query: `ReadRequestMessage` or `SubscribeRequestMessage`
- def _inner_process_read_request(msg, query)
- var endpoints = self.device.get_active_endpoints()
+ def _inner_process_read_request(session, query)
### Inner function to be iterated upon
# ret is the ReportDataMessage list to send back
@@ -154,7 +172,7 @@ class Matter_IM
attr_name = attr_name ? " (" + attr_name + ")" : ""
# tasmota.log(string.format("MTR: Read Attribute " + str(ctx) + (attr_name ? " (" + attr_name + ")" : ""), 2)
# Special case to report unsupported item, if pi==nil
- var res = (pi != nil) ? pi.read_attribute(msg, ctx) : nil
+ var res = (pi != nil) ? pi.read_attribute(session, ctx) : nil
if res != nil
var a1 = matter.AttributeReportIB()
a1.attribute_data = matter.AttributeDataIB()
@@ -190,6 +208,7 @@ class Matter_IM
end
end
+ var endpoints = self.device.get_active_endpoints()
# structure is `ReadRequestMessage` 10.6.2 p.558
var ctx = matter.Path()
@@ -238,7 +257,7 @@ class Matter_IM
def process_read_request(msg, val)
var query = matter.ReadRequestMessage().from_TLV(val)
if query.attributes_requests != nil
- var ret = self._inner_process_read_request(msg, query)
+ var ret = self._inner_process_read_request(msg.session, query)
self.send_report_data(msg, ret)
end
@@ -258,7 +277,8 @@ class Matter_IM
tasmota.log("MTR: received SubscribeRequestMessage=" + str(query), 3)
var sub = self.subs.new_subscription(msg.session, query)
- var ret = self._inner_process_read_request(msg, query)
+ tasmota.log("MTR: >Subscribe sub_id=" + str(sub.subscription_id), 2)
+ var ret = self._inner_process_read_request(msg.session, query)
# ret is of type `Matter_ReportDataMessage`
ret.subscription_id = sub.subscription_id # enrich with subscription id TODO
self.send_subscribe_response(msg, ret, sub)
@@ -292,7 +312,7 @@ class Matter_IM
var cmd_name = matter.get_command_name(ctx.cluster, ctx.command)
tasmota.log(string.format("MTR: >Received %s %s from [%s]:%i", str(ctx), cmd_name ? cmd_name : "", msg.remote_ip, msg.remote_port), 2)
- var res = self.device.invoke_request(msg, q.command_fields, ctx)
+ var res = self.device.invoke_request(msg.session, q.command_fields, ctx)
var a1 = matter.InvokeResponseIB()
if res == true # special case, just respond ok
a1.status = matter.CommandStatusIB()
@@ -391,7 +411,7 @@ class Matter_IM
# tasmota.log(string.format("MTR: Read Attribute " + str(ctx) + (attr_name ? " (" + attr_name + ")" : ""), 2)
# Special case to report unsupported item, if pi==nil
ctx.status = matter.UNSUPPORTED_WRITE
- var res = (pi != nil) ? pi.write_attribute(msg, ctx, write_data) : nil
+ var res = (pi != nil) ? pi.write_attribute(msg.session, ctx, write_data) : nil
if res ctx.status = matter.SUCCESS end # if the cb returns true, the request was processed
if ctx.status != nil
if direct
@@ -507,14 +527,26 @@ class Matter_IM
import string
var session = sub.session
- var ret = matter.ReportDataMessage()
+ # create a fake read request to feed to the ReportData
+ var fake_read = matter.ReadRequestMessage()
+ fake_read.fabric_filtered = false
+ fake_read.attributes_requests = []
+
+ for ctx: sub.updates
+ var p1 = matter.AttributePathIB()
+ p1.endpoint = ctx.endpoint
+ p1.cluster = ctx.cluster
+ p1.attribute = ctx.attribute
+ fake_read.attributes_requests.push(p1)
+ end
+
+ tasmota.log("MTR: 0 && tasmota.time_reached(sub.not_before)
+ self.im.send_subscribe_update(sub)
+ sub.clear_and_arm()
+ end
+ idx += 1
+ end
+
+ # any heartbeat needing to be sent
+ idx = 0
while idx < size(self.subs)
var sub = self.subs[idx]
if tasmota.time_reached(sub.expiration)
@@ -167,11 +218,11 @@ class Matter_IM_Subscription_Shop
end
# signal that an attribute was updated, to add to the list of reportable
- def attribute_updated(ctx, fabric_specific)
+ def attribute_updated_ctx(ctx, fabric_specific)
# signal any relevant subscription
var idx = 0
while idx < size(self.subs)
- self.subs[idx].attribute_updated(ctx, fabric_specific)
+ self.subs[idx].attribute_updated_ctx(ctx, fabric_specific)
idx += 1
end
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Message.be b/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
index 8f9e14fad..2d1378bc3 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
@@ -52,7 +52,7 @@ class Matter_Frame
var x_flag_a
var x_flag_i
var opcode
- var exchange_id
+ var exchange_id # exchange_id is 16 bits unsigned, we set bit 16 if it's an id generated locally
var protocol_id
var vendor_id # (opt)
var ack_message_counter # (opt)
@@ -140,6 +140,7 @@ class Matter_Frame
self.opcode = raw.get(idx+1, 1)
self.exchange_id = raw.get(idx+2, 2)
+ if !self.x_flag_i self.exchange_id |= 0x10000 end # special encoding for local exchange_id
self.protocol_id = raw.get(idx+4, 2)
idx += 6
@@ -210,7 +211,7 @@ class Matter_Frame
raw.add(self.x_flags, 1)
# opcode (mandatory)
raw.add(self.opcode, 1)
- raw.add(self.exchange_id, 2)
+ raw.add(self.exchange_id & 0xFFFF, 2)
raw.add(self.protocol_id, 2)
if self.x_flag_a raw.add(self.ack_message_counter, 4) end
# finally payload
@@ -246,7 +247,7 @@ class Matter_Frame
resp.message_counter = self.session.counter_snd.next()
resp.local_session_id = self.session.initiator_session_id
- resp.x_flag_i = 0 # not sent by initiator
+ resp.x_flag_i = (self.x_flag_i ? 0 : 1) # invert the initiator flag
resp.opcode = 0x10 # MRP Standalone Acknowledgement
resp.exchange_id = self.exchange_id
resp.protocol_id = 0 # PROTOCOL_ID_SECURE_CHANNEL
@@ -290,7 +291,7 @@ class Matter_Frame
resp.local_session_id = 0
end
- resp.x_flag_i = 0 # not sent by initiator
+ resp.x_flag_i = (self.x_flag_i ? 0 : 1) # invert the initiator flag
resp.opcode = opcode
resp.exchange_id = self.exchange_id
resp.protocol_id = self.protocol_id
@@ -333,11 +334,11 @@ class Matter_Frame
resp.local_session_id = 0
end
- resp.x_flag_i = 1 # we are the initiator
+ resp.x_flag_i = 1 # we are the initiator
resp.opcode = opcode
- session.__exchange_id += 1 # move to next exchange_id
- resp.exchange_id = session.__exchange_id
- resp.protocol_id = 0x0001 # PROTOCOL_ID_INTERACTION_MODEL
+ session.__exchange_id += 1 # move to next exchange_id
+ resp.exchange_id = session.__exchange_id | 0x10000 # special encoding for local exchange_id
+ resp.protocol_id = 0x0001 # PROTOCOL_ID_INTERACTION_MODEL
resp.x_flag_r = reliable ? 1 : 0
return resp
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be b/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
index e019a56bb..830166737 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
@@ -64,6 +64,7 @@ class Matter_MessageHandler
tasmota.log("MTR: find session by source_node_id = " + str(frame.source_node_id) + "session_id = " + str(session.local_session_id), 3)
if addr session.__ip = addr end
if port session.__port = port end
+ session.__message_handler = self
frame.session = session
# check if it's a duplicate
@@ -94,6 +95,7 @@ class Matter_MessageHandler
end
if addr session.__ip = addr end
if port session.__port = port end
+ session.__message_handler = self
frame.session = session # keep a pointer of the session in the message
# check if it's a duplicate
@@ -112,7 +114,7 @@ class Matter_MessageHandler
# continue decoding
tasmota.log(string.format("MTR: idx=%i clear=%s", frame.payload_idx, frame.raw.tohex()), 3)
frame.decode_payload()
- tasmota.log("MTR: decrypted message: protocol_id:"+str(frame.protocol_id)+" opcode="+str(frame.opcode)+" exchange_id="+str(frame.exchange_id), 3)
+ tasmota.log("MTR: decrypted message: protocol_id:"+str(frame.protocol_id)+" opcode="+str(frame.opcode)+" exchange_id="+str(frame.exchange_id & 0xFFFF), 3)
self.device.packet_ack(frame.ack_message_counter) # acknowledge packet
@@ -135,9 +137,7 @@ class Matter_MessageHandler
var resp = frame.build_standalone_ack()
resp.encode()
resp.encrypt()
- # no ecnryption required for ACK
self.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter)
- # send simple ack
end
# -- PROTOCOL_ID_BDX is used for file transfer between devices, not used in Tasmota
@@ -184,5 +184,12 @@ class Matter_MessageHandler
self.commissioning.every_second()
self.im.every_second()
end
+
+ #############################################################
+ # dispatch every 250ms click to sub-objects that need it
+ def every_250ms()
+ self.im.every_250ms()
+ end
+
end
matter.MessageHandler = Matter_MessageHandler
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be
index 4e16d9464..4d2a856ba 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be
@@ -37,6 +37,12 @@ class Matter_Plugin
self.clusters = self.EMPTY_LIST
end
+ #############################################################
+ # signal that an attribute has been changed
+ def attribute_updated(endpoint, cluster, attribute, fabric_specific)
+ self.device.attribute_updated(endpoint, cluster, attribute, fabric_specific)
+ end
+
#############################################################
# Which endpoints does it handle (list of numbers)
def get_endpoints()
@@ -64,47 +70,47 @@ class Matter_Plugin
#############################################################
# read attribute
- def read_attribute(msg, ctx)
+ def read_attribute(session, ctx)
return nil
end
#############################################################
# read event
# TODO
- def read_event(msg, endpoint, cluster, eventid)
+ def read_event(session, endpoint, cluster, eventid)
return nil
end
#############################################################
# subscribe attribute
# TODO
- def subscribe_attribute(msg, endpoint, cluster, attribute)
+ def subscribe_attribute(session, endpoint, cluster, attribute)
return nil
end
#############################################################
# subscribe event
# TODO
- def subscribe_event(msg, endpoint, cluster, eventid)
+ def subscribe_event(session, endpoint, cluster, eventid)
return nil
end
#############################################################
# write attribute
- def write_attribute(msg, ctx, write_data)
+ def write_attribute(session, ctx, write_data)
return nil
end
#############################################################
# invoke command
- def invoke_request(msg, val, ctx)
+ def invoke_request(session, val, ctx)
return nil
end
#############################################################
# timed request
# TODO - should we even support this?
- def timed_request(msg, val, ctx)
+ def timed_request(session, val, ctx)
return nil
end
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
index e7827c5bf..5677c06ac 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
@@ -49,7 +49,7 @@ class Matter_Plugin_OnOff : Matter_Plugin
#############################################################
# read an attribute
#
- def read_attribute(msg, ctx)
+ def read_attribute(session, ctx)
import string
var TLV = matter.TLV
var cluster = ctx.cluster
@@ -105,11 +105,10 @@ class Matter_Plugin_OnOff : Matter_Plugin
#
# returns a TLV object if successful, contains the response
# or an `int` to indicate a status
- def invoke_request(msg, val, ctx)
+ def invoke_request(session, val, ctx)
var TLV = matter.TLV
var cluster = ctx.cluster
var command = ctx.command
- var session = msg.session
# ====================================================================================================
if cluster == 0x0003 # ========== Identify 1.2 p.16 ==========
@@ -140,17 +139,27 @@ class Matter_Plugin_OnOff : Matter_Plugin
# ====================================================================================================
elif cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
if command == 0x0000 # ---------- Off ----------
+ if self.onoff self.onoff_changed(ctx) end
self.onoff = false
return true
elif command == 0x0001 # ---------- On ----------
+ if !self.onoff self.onoff_changed(ctx) end
self.onoff = true
return true
elif command == 0x0002 # ---------- Toggle ----------
+ self.onoff_changed(ctx)
self.onoff = !self.onoff
return true
end
end
end
+
+ #############################################################
+ # Signal that onoff attribute changed
+ def onoff_changed(ctx)
+ self.attribute_updated(ctx.endpoint, 0x0006, 0x0000)
+ end
+
end
matter.Plugin_OnOff = Matter_Plugin_OnOff
\ No newline at end of file
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
index 88ccfbb05..2f641189a 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
@@ -56,7 +56,7 @@ class Matter_Plugin_Root : Matter_Plugin
#############################################################
# read an attribute
#
- def read_attribute(msg, ctx)
+ def read_attribute(session, ctx)
import string
var TLV = matter.TLV
var cluster = ctx.cluster
@@ -65,7 +65,7 @@ class Matter_Plugin_Root : Matter_Plugin
if cluster == 0x0030 # ========== GeneralCommissioning cluster 11.9 p.627 ==========
if attribute == 0x0000 # ---------- Breadcrumb ----------
- return TLV.create_TLV(TLV.U8, msg.session.__breadcrumb)
+ return TLV.create_TLV(TLV.U8, session.__breadcrumb)
elif attribute == 0x0001 # ---------- BasicCommissioningInfo / BasicCommissioningInfo----------
var bci = TLV.Matter_TLV_struct()
bci.add_TLV(0, TLV.U2, 60) # FailSafeExpiryLengthSeconds
@@ -153,22 +153,22 @@ class Matter_Plugin_Root : Matter_Plugin
if attribute == 0x0000 # ---------- NOCs / list[NOCStruct] ----------
var nocl = TLV.Matter_TLV_array() # NOCs, p.711
- for session: self.device.sessions.sessions_active()
+ for loc_session: self.device.sessions.sessions_active()
var nocs = nocl.add_struct(nil)
- nocs.add_TLV(1, TLV.B2, session.noc) # NOC
- nocs.add_TLV(2, TLV.B2, session.icac) # ICAC
+ nocs.add_TLV(1, TLV.B2, loc_session.noc) # NOC
+ nocs.add_TLV(2, TLV.B2, loc_session.icac) # ICAC
end
return nocl
elif attribute == 0x0001 # ---------- Fabrics / list[FabricDescriptorStruct] ----------
var fabrics = TLV.Matter_TLV_array() # Fabrics, p.711
- for session: self.device.sessions.sessions_active()
- var root_ca_tlv = TLV.parse(session.get_ca())
+ for loc_session: self.device.sessions.sessions_active()
+ var root_ca_tlv = TLV.parse(loc_session.get_ca())
var fab = fabrics.add_struct(nil) # encoding see p.303
fab.add_TLV(1, TLV.B2, root_ca_tlv.findsubval(9)) # RootPublicKey
- fab.add_TLV(2, TLV.U2, session.admin_vendor) # VendorID
- fab.add_TLV(3, TLV.U8, session.fabric) # FabricID
- fab.add_TLV(4, TLV.U8, session.deviceid) # NodeID
- fab.add_TLV(5, TLV.UTF1, session.fabric_label) # Label
+ fab.add_TLV(2, TLV.U2, loc_session.admin_vendor) # VendorID
+ fab.add_TLV(3, TLV.U8, loc_session.fabric) # FabricID
+ fab.add_TLV(4, TLV.U8, loc_session.deviceid) # NodeID
+ fab.add_TLV(5, TLV.UTF1, loc_session.fabric_label) # Label
end
return fabrics
elif attribute == 0x0002 # ---------- SupportedFabrics / u1 ----------
@@ -180,7 +180,7 @@ class Matter_Plugin_Root : Matter_Plugin
# TODO
elif attribute == 0x0005 # ---------- Current FabricIndex / u1 ----------
var sessions_active = self.device.sessions.sessions_active()
- var fabric_index = sessions_active.find(msg.session)
+ var fabric_index = sessions_active.find(session)
if fabric_index == nil fabric_index = 0 end
return TLV.create_TLV(TLV.U1, fabric_index) # number of active sessions
end
@@ -307,12 +307,11 @@ class Matter_Plugin_Root : Matter_Plugin
#
# returns a TLV object if successful, contains the response
# or an `int` to indicate a status
- def invoke_request(msg, val, ctx)
+ def invoke_request(session, val, ctx)
import crypto
var TLV = matter.TLV
var cluster = ctx.cluster
var command = ctx.command
- var session = msg.session
if cluster == 0x0030 # ========== GeneralCommissioning cluster 11.9 p.627 ==========
if command == 0x0000 # ---------- ArmFailSafe ----------
@@ -516,7 +515,7 @@ class Matter_Plugin_Root : Matter_Plugin
#############################################################
# write an attribute
#
- def write_attribute(msg, ctx, write_data)
+ def write_attribute(session, ctx, write_data)
import string
var TLV = matter.TLV
var cluster = ctx.cluster
@@ -534,7 +533,8 @@ class Matter_Plugin_Root : Matter_Plugin
if attribute == 0x0000 # ---------- Breadcrumb ----------
if type(write_data) == 'int' || isinstance(write_data, int64)
- msg.session.__breadcrumb = write_data
+ session.__breadcrumb = write_data
+ self.attribute_updated(ctx.endpoint, ctx.cluster, ctx.attribute) # TODO should we have a more generalized way each time a write_attribute is triggered, declare the attribute as changed?
return true
else
ctx.status = matter.CONSTRAINT_ERROR
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Session.be b/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
index 9d57e24ee..4fbe82e6a 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
@@ -49,8 +49,9 @@ class Matter_Session
var counter_snd # counter for outgoing messages
var __exchange_id # exchange id for locally initiated transaction, non-persistent
# keep track of last known IP/Port of the fabric
- var __ip
- var __port
+ var __ip # IP of the last received packet
+ var __port # port of the last received packet
+ var __message_handler # pointer to the message handler for this session
# non-session counters
var _counter_insecure_rcv # counter for incoming messages
var _counter_insecure_snd # counter for outgoing messages
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be b/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
index 3bd7d16a5..2e7d71160 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
@@ -33,13 +33,11 @@ import matter
# A packet that needs to be resent if not acknowledged by the other party
#################################################################################
class Matter_UDPPacket_sent
- static var RETRY_MS = 500 # retry every 500 ms
- static var RETRIES = 4 # retry every 500 ms
var raw # bytes() to be sent
var addr # ip_address (string)
var port # port (int)
var msg_id # (int) message identifier that needs to be acknowledged
- var retries # how many retries are allowed, when `0` drop and log
+ 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)
@@ -47,8 +45,8 @@ class Matter_UDPPacket_sent
self.addr = addr
self.port = port
self.msg_id = id
- self.retries = self.RETRIES
- self.next_try = tasmota.millis() + self.RETRY_MS
+ self.retries = 0
+ self.next_try = tasmota.millis() + self.backoff_time(self.retries)
end
def send(udp_socket)
@@ -60,6 +58,26 @@ class Matter_UDPPacket_sent
tasmota.log(string.format("MTR: error sending packet to '[%s]:%i'", self.addr, self.port), 3)
end
end
+
+ #############################################################
+ # Compute exponential backoff as per 4.11.2.1 p.137
+ def backoff_time(n)
+ def power_int(v, n)
+ var r = 1
+ while n > 0
+ r *= v
+ n -= 1
+ end
+ return r
+ end
+
+ import math
+ var i = 300 # SLEEPY_ACTIVE_INTERVAL
+ var rand = real(math.rand() & 0xFF) / 255 # 0..1 with reasonable granularity
+ var n_power = n > 0 ? n - 1 : 0
+ var mrpBackoffTime = i * power_int(1.6, n_power) * (1.0 + rand * 0.25 )
+ return int(mrpBackoffTime)
+ end
end
matter.UDPPacket_sent = Matter_UDPPacket_sent
@@ -68,6 +86,7 @@ matter.UDPPacket_sent = Matter_UDPPacket_sent
#
#################################################################################
class Matter_UDPServer
+ static var RETRIES = 4 # 5 transmissions max (4 retries) `MRP_MAX_TRANSMISSIONS` 4.11.8 p.146
static var MAX_PACKETS_READ = 4 # read at most 4 packets per tick
var address, port # local address and port
var listening # true if active
@@ -140,15 +159,15 @@ class Matter_UDPServer
def resend_packets()
for packet:self.packets_sent
if tasmota.time_reached(packet.next_try)
- tasmota.log("MTR: resending packet id=" + str(packet.msg_id), 3)
- packet.send(self.udp_socket) # resend
- packet.retries -= 1
- if packet.retries <= 0
+ if packet.retries <= self.RETRIES
+ tasmota.log("MTR: resending packet id=" + str(packet.msg_id), 3)
+ packet.send(self.udp_socket) # resend
+ packet.next_try = tasmota.millis() + packet.backoff_time(packet.retries)
+ packet.retries += 1
+ else
import string
self.packets_sent.remove(packet.msg_id)
- tasmota.log(string.format("MTR: non-acked packet to '[%s]:%i'", packet.addr, packet.port), 3)
- else
- packet.next_try = tasmota.millis() + packet.RETRY_MS
+ tasmota.log(string.format("MTR: target unreachable '[%s]:%i'", packet.addr, packet.port), 2)
end
end
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_UI.be b/lib/libesp32/berry_matter/src/embedded/Matter_UI.be
index 7bd6921f4..54152f38b 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_UI.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_UI.be
@@ -98,6 +98,7 @@ class Matter_UI
webserver.content_send(string.format(" ", self.device.passcode))
webserver.content_send("Distinguish id:
")
webserver.content_send(string.format(" ", self.device.discriminator))
+ webserver.content_send(string.format(" IPv4 only
", self.device.ipv4only ? " checked" : ""))
webserver.content_send("
Change
")
@@ -205,6 +206,7 @@ class Matter_UI
if webserver.has_arg("discriminator")
self.device.discriminator = int(webserver.arg("discriminator"))
end
+ self.device.ipv4only = webserver.arg("ipv4") == 'on'
self.device.save_param()
#- and force restart -#
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
index 7bdc6998d..51f6129fd 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
@@ -7,49 +7,32 @@
extern const bclass be_class_Matter_Device;
/********************************************************************
-** Solidified function: mdns_announce_op_discovery_all_sessions
+** Solidified function: msg_received
********************************************************************/
-be_local_closure(Matter_Device_mdns_announce_op_discovery_all_sessions, /* name */
+be_local_closure(Matter_Device_msg_received, /* name */
be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
+ 9, /* nstack */
+ 4, /* 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(sessions),
- /* K1 */ be_nested_str_weak(get_deviceid),
- /* K2 */ be_nested_str_weak(get_fabric),
- /* K3 */ be_nested_str_weak(mdns_announce_op_discovery),
- /* K4 */ be_nested_str_weak(stop_iteration),
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(message_handler),
+ /* K1 */ be_nested_str_weak(msg_received),
}),
- be_str_weak(mdns_announce_op_discovery_all_sessions),
+ be_str_weak(msg_received),
&be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
- 0x60040010, // 0000 GETGBL R1 G16
- 0x88080100, // 0001 GETMBR R2 R0 K0
- 0x88080500, // 0002 GETMBR R2 R2 K0
- 0x7C040200, // 0003 CALL R1 1
- 0xA802000B, // 0004 EXBLK 0 #0011
- 0x5C080200, // 0005 MOVE R2 R1
- 0x7C080000, // 0006 CALL R2 0
- 0x8C0C0501, // 0007 GETMET R3 R2 K1
- 0x7C0C0200, // 0008 CALL R3 1
- 0x780E0005, // 0009 JMPF R3 #0010
- 0x8C0C0502, // 000A GETMET R3 R2 K2
- 0x7C0C0200, // 000B CALL R3 1
- 0x780E0002, // 000C JMPF R3 #0010
- 0x8C0C0103, // 000D GETMET R3 R0 K3
- 0x5C140400, // 000E MOVE R5 R2
- 0x7C0C0400, // 000F CALL R3 2
- 0x7001FFF3, // 0010 JMP #0005
- 0x58040004, // 0011 LDCONST R1 K4
- 0xAC040200, // 0012 CATCH R1 1 0
- 0xB0080000, // 0013 RAISE 2 R0 R0
- 0x80000000, // 0014 RET 0
+ ( &(const binstruction[ 7]) { /* code */
+ 0x88100100, // 0000 GETMBR R4 R0 K0
+ 0x8C100901, // 0001 GETMET R4 R4 K1
+ 0x5C180200, // 0002 MOVE R6 R1
+ 0x5C1C0400, // 0003 MOVE R7 R2
+ 0x5C200600, // 0004 MOVE R8 R3
+ 0x7C100800, // 0005 CALL R4 4
+ 0x80040800, // 0006 RET 1 R4
})
)
);
@@ -57,11 +40,98 @@ be_local_closure(Matter_Device_mdns_announce_op_discovery_all_sessions, /* nam
/********************************************************************
-** Solidified function: start_operational_dicovery
+** Solidified function: start_udp
********************************************************************/
-be_local_closure(Matter_Device_start_operational_dicovery, /* name */
+be_local_closure(Matter_Device_start_udp, /* name */
be_nested_proto(
- 8, /* nstack */
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(msg_received),
+ }),
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x680C0000, // 0000 GETUPV R3 U0
+ 0x8C0C0700, // 0001 GETMET R3 R3 K0
+ 0x5C140000, // 0002 MOVE R5 R0
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x5C1C0400, // 0004 MOVE R7 R2
+ 0x7C0C0800, // 0005 CALL R3 4
+ 0x80040600, // 0006 RET 1 R3
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(udp_server),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(MTR_X3A_X20starting_X20UDP_X20server_X20on_X20port_X3A_X20),
+ /* K4 */ be_const_int(2),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(UDPServer),
+ /* K7 */ be_nested_str_weak(),
+ /* K8 */ be_nested_str_weak(start),
+ }),
+ be_str_weak(start_udp),
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x780A0000, // 0001 JMPF R2 #0003
+ 0x80000400, // 0002 RET 0
+ 0x4C080000, // 0003 LDNIL R2
+ 0x1C080202, // 0004 EQ R2 R1 R2
+ 0x780A0000, // 0005 JMPF R2 #0007
+ 0x540615A3, // 0006 LDINT R1 5540
+ 0xB80A0200, // 0007 GETNGBL R2 K1
+ 0x8C080502, // 0008 GETMET R2 R2 K2
+ 0x60100008, // 0009 GETGBL R4 G8
+ 0x5C140200, // 000A MOVE R5 R1
+ 0x7C100200, // 000B CALL R4 1
+ 0x00120604, // 000C ADD R4 K3 R4
+ 0x58140004, // 000D LDCONST R5 K4
+ 0x7C080600, // 000E CALL R2 3
+ 0xB80A0A00, // 000F GETNGBL R2 K5
+ 0x8C080506, // 0010 GETMET R2 R2 K6
+ 0x58100007, // 0011 LDCONST R4 K7
+ 0x5C140200, // 0012 MOVE R5 R1
+ 0x7C080600, // 0013 CALL R2 3
+ 0x90020002, // 0014 SETMBR R0 K0 R2
+ 0x88080100, // 0015 GETMBR R2 R0 K0
+ 0x8C080508, // 0016 GETMET R2 R2 K8
+ 0x84100000, // 0017 CLOSURE R4 P0
+ 0x7C080400, // 0018 CALL R2 2
+ 0xA0000000, // 0019 CLOSE R0
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: packet_ack
+********************************************************************/
+be_local_closure(Matter_Device_packet_ack, /* name */
+ be_nested_proto(
+ 5, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -69,49 +139,459 @@ be_local_closure(Matter_Device_start_operational_dicovery, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[13]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(mdns),
- /* K2 */ be_nested_str_weak(string),
- /* K3 */ be_nested_str_weak(salt),
- /* K4 */ be_nested_str_weak(w0),
- /* K5 */ be_nested_str_weak(w1),
- /* K6 */ be_nested_str_weak(L),
- /* K7 */ be_nested_str_weak(set_no_expiration),
- /* K8 */ be_nested_str_weak(set_persist),
- /* K9 */ be_nested_str_weak(close),
- /* K10 */ be_nested_str_weak(sessions),
- /* K11 */ be_nested_str_weak(save),
- /* K12 */ be_nested_str_weak(mdns_announce_op_discovery),
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(udp_server),
+ /* K1 */ be_nested_str_weak(packet_ack),
}),
- be_str_weak(start_operational_dicovery),
+ be_str_weak(packet_ack),
+ &be_const_str_solidified,
+ ( &(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
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Device_invoke_request, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(plugins),
+ /* K2 */ be_nested_str_weak(invoke_request),
+ /* K3 */ be_nested_str_weak(status),
+ /* K4 */ be_nested_str_weak(matter),
+ /* K5 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
+ /* K6 */ be_const_int(1),
+ }),
+ be_str_weak(invoke_request),
&be_const_str_solidified,
( &(const binstruction[25]) { /* code */
+ 0x58100000, // 0000 LDCONST R4 K0
+ 0x6014000C, // 0001 GETGBL R5 G12
+ 0x88180101, // 0002 GETMBR R6 R0 K1
+ 0x7C140200, // 0003 CALL R5 1
+ 0x14140805, // 0004 LT R5 R4 R5
+ 0x78160011, // 0005 JMPF R5 #0018
+ 0x88140101, // 0006 GETMBR R5 R0 K1
+ 0x94140A04, // 0007 GETIDX R5 R5 R4
+ 0x8C180B02, // 0008 GETMET R6 R5 K2
+ 0x5C200200, // 0009 MOVE R8 R1
+ 0x5C240400, // 000A MOVE R9 R2
+ 0x5C280600, // 000B MOVE R10 R3
+ 0x7C180800, // 000C CALL R6 4
+ 0x4C1C0000, // 000D LDNIL R7
+ 0x201C0C07, // 000E NE R7 R6 R7
+ 0x741E0004, // 000F JMPT R7 #0015
+ 0x881C0703, // 0010 GETMBR R7 R3 K3
+ 0xB8220800, // 0011 GETNGBL R8 K4
+ 0x88201105, // 0012 GETMBR R8 R8 K5
+ 0x201C0E08, // 0013 NE R7 R7 R8
+ 0x781E0000, // 0014 JMPF R7 #0016
+ 0x80040C00, // 0015 RET 1 R6
+ 0x00100906, // 0016 ADD R4 R4 K6
+ 0x7001FFE8, // 0017 JMP #0001
+ 0x80000000, // 0018 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _start_mdns_announce
+********************************************************************/
+be_local_closure(Matter_Device__start_mdns_announce, /* name */
+ be_nested_proto(
+ 15, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[49]) { /* constants */
+ /* K0 */ be_nested_str_weak(mdns),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(start),
+ /* K3 */ be_nested_str_weak(VP),
+ /* K4 */ be_nested_str_weak(vendorid),
+ /* K5 */ be_nested_str_weak(_X2B),
+ /* K6 */ be_nested_str_weak(productid),
+ /* K7 */ be_nested_str_weak(D),
+ /* K8 */ be_nested_str_weak(discriminator),
+ /* K9 */ be_nested_str_weak(CM),
+ /* K10 */ be_const_int(1),
+ /* K11 */ be_nested_str_weak(T),
+ /* K12 */ be_const_int(0),
+ /* K13 */ be_nested_str_weak(SII),
+ /* K14 */ be_nested_str_weak(SAI),
+ /* K15 */ be_nested_str_weak(tasmota),
+ /* K16 */ be_nested_str_weak(eth),
+ /* K17 */ be_nested_str_weak(hostname_eth),
+ /* K18 */ be_nested_str_weak(replace),
+ /* K19 */ be_nested_str_weak(find),
+ /* K20 */ be_nested_str_weak(mac),
+ /* K21 */ be_nested_str_weak(_X3A),
+ /* K22 */ be_nested_str_weak(),
+ /* K23 */ be_nested_str_weak(ipv4only),
+ /* K24 */ be_nested_str_weak(add_hostname),
+ /* K25 */ be_nested_str_weak(ip6local),
+ /* K26 */ be_nested_str_weak(ip),
+ /* K27 */ be_nested_str_weak(ip6),
+ /* K28 */ be_nested_str_weak(add_service),
+ /* K29 */ be_nested_str_weak(_matterc),
+ /* K30 */ be_nested_str_weak(_udp),
+ /* K31 */ be_nested_str_weak(commissioning_instance_eth),
+ /* K32 */ be_nested_str_weak(log),
+ /* K33 */ be_nested_str_weak(format),
+ /* K34 */ be_nested_str_weak(MTR_X3A_X20starting_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27_X20ptr_X20to_X20_X60_X25s_X2Elocal_X60),
+ /* K35 */ be_nested_str_weak(wifi),
+ /* K36 */ be_nested_str_weak(commissioning_instance_wifi),
+ /* K37 */ be_nested_str_weak(hostname_wifi),
+ /* K38 */ be_const_int(2),
+ /* K39 */ be_nested_str_weak(_L),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20adding_X20subtype_X3A_X20),
+ /* K41 */ be_const_int(3),
+ /* K42 */ be_nested_str_weak(add_subtype),
+ /* K43 */ be_nested_str_weak(_S),
+ /* K44 */ be_nested_str_weak(_V),
+ /* K45 */ be_nested_str_weak(_CM1),
+ /* K46 */ be_nested_str_weak(MTR_X3A_X20Exception),
+ /* K47 */ be_nested_str_weak(_X7C),
+ /* K48 */ be_nested_str_weak(mdns_announce_op_discovery_all_sessions),
+ }),
+ be_str_weak(_start_mdns_announce),
+ &be_const_str_solidified,
+ ( &(const binstruction[312]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0xA40E0200, // 0001 IMPORT R3 K1
- 0xA4120400, // 0002 IMPORT R4 K2
- 0x4C140000, // 0003 LDNIL R5
- 0x90020605, // 0004 SETMBR R0 K3 R5
- 0x4C140000, // 0005 LDNIL R5
- 0x90020805, // 0006 SETMBR R0 K4 R5
- 0x4C140000, // 0007 LDNIL R5
- 0x90020A05, // 0008 SETMBR R0 K5 R5
- 0x4C140000, // 0009 LDNIL R5
- 0x90020C05, // 000A SETMBR R0 K6 R5
- 0x8C140307, // 000B GETMET R5 R1 K7
- 0x7C140200, // 000C CALL R5 1
- 0x8C140308, // 000D GETMET R5 R1 K8
- 0x501C0200, // 000E LDBOOL R7 1 0
- 0x7C140400, // 000F CALL R5 2
- 0x8C140309, // 0010 GETMET R5 R1 K9
- 0x7C140200, // 0011 CALL R5 1
- 0x8814010A, // 0012 GETMBR R5 R0 K10
- 0x8C140B0B, // 0013 GETMET R5 R5 K11
- 0x7C140200, // 0014 CALL R5 1
- 0x8C14010C, // 0015 GETMET R5 R0 K12
- 0x5C1C0200, // 0016 MOVE R7 R1
- 0x7C140400, // 0017 CALL R5 2
- 0x80000000, // 0018 RET 0
+ 0x8C100502, // 0002 GETMET R4 R2 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x60100013, // 0004 GETGBL R4 G19
+ 0x7C100000, // 0005 CALL R4 0
+ 0x60140008, // 0006 GETGBL R5 G8
+ 0x88180104, // 0007 GETMBR R6 R0 K4
+ 0x7C140200, // 0008 CALL R5 1
+ 0x00140B05, // 0009 ADD R5 R5 K5
+ 0x60180008, // 000A GETGBL R6 G8
+ 0x881C0106, // 000B GETMBR R7 R0 K6
+ 0x7C180200, // 000C CALL R6 1
+ 0x00140A06, // 000D ADD R5 R5 R6
+ 0x98120605, // 000E SETIDX R4 K3 R5
+ 0x88140108, // 000F GETMBR R5 R0 K8
+ 0x98120E05, // 0010 SETIDX R4 K7 R5
+ 0x9812130A, // 0011 SETIDX R4 K9 K10
+ 0x9812170C, // 0012 SETIDX R4 K11 K12
+ 0x54161387, // 0013 LDINT R5 5000
+ 0x98121A05, // 0014 SETIDX R4 K13 R5
+ 0x5416012B, // 0015 LDINT R5 300
+ 0x98121C05, // 0016 SETIDX R4 K14 R5
+ 0xA802010B, // 0017 EXBLK 0 #0124
+ 0x78060084, // 0018 JMPF R1 #009E
+ 0xB8161E00, // 0019 GETNGBL R5 K15
+ 0x8C140B10, // 001A GETMET R5 R5 K16
+ 0x7C140200, // 001B CALL R5 1
+ 0x8C180712, // 001C GETMET R6 R3 K18
+ 0x8C200B13, // 001D GETMET R8 R5 K19
+ 0x58280014, // 001E LDCONST R10 K20
+ 0x7C200400, // 001F CALL R8 2
+ 0x58240015, // 0020 LDCONST R9 K21
+ 0x58280016, // 0021 LDCONST R10 K22
+ 0x7C180800, // 0022 CALL R6 4
+ 0x90022206, // 0023 SETMBR R0 K17 R6
+ 0x88180117, // 0024 GETMBR R6 R0 K23
+ 0x741A000F, // 0025 JMPT R6 #0036
+ 0x8C180518, // 0026 GETMET R6 R2 K24
+ 0x88200111, // 0027 GETMBR R8 R0 K17
+ 0x8C240B13, // 0028 GETMET R9 R5 K19
+ 0x582C0019, // 0029 LDCONST R11 K25
+ 0x58300016, // 002A LDCONST R12 K22
+ 0x7C240600, // 002B CALL R9 3
+ 0x8C280B13, // 002C GETMET R10 R5 K19
+ 0x5830001A, // 002D LDCONST R12 K26
+ 0x58340016, // 002E LDCONST R13 K22
+ 0x7C280600, // 002F CALL R10 3
+ 0x8C2C0B13, // 0030 GETMET R11 R5 K19
+ 0x5834001B, // 0031 LDCONST R13 K27
+ 0x58380016, // 0032 LDCONST R14 K22
+ 0x7C2C0600, // 0033 CALL R11 3
+ 0x7C180A00, // 0034 CALL R6 5
+ 0x70020006, // 0035 JMP #003D
+ 0x8C180518, // 0036 GETMET R6 R2 K24
+ 0x88200111, // 0037 GETMBR R8 R0 K17
+ 0x8C240B13, // 0038 GETMET R9 R5 K19
+ 0x582C001A, // 0039 LDCONST R11 K26
+ 0x58300016, // 003A LDCONST R12 K22
+ 0x7C240600, // 003B CALL R9 3
+ 0x7C180600, // 003C CALL R6 3
+ 0x8C18051C, // 003D GETMET R6 R2 K28
+ 0x5820001D, // 003E LDCONST R8 K29
+ 0x5824001E, // 003F LDCONST R9 K30
+ 0x542A15A3, // 0040 LDINT R10 5540
+ 0x5C2C0800, // 0041 MOVE R11 R4
+ 0x8830011F, // 0042 GETMBR R12 R0 K31
+ 0x88340111, // 0043 GETMBR R13 R0 K17
+ 0x7C180E00, // 0044 CALL R6 7
+ 0xB81A1E00, // 0045 GETNGBL R6 K15
+ 0x8C180D20, // 0046 GETMET R6 R6 K32
+ 0x8C200721, // 0047 GETMET R8 R3 K33
+ 0x58280022, // 0048 LDCONST R10 K34
+ 0x78060001, // 0049 JMPF R1 #004C
+ 0x582C0010, // 004A LDCONST R11 K16
+ 0x70020000, // 004B JMP #004D
+ 0x582C0023, // 004C LDCONST R11 K35
+ 0x78060001, // 004D JMPF R1 #0050
+ 0x8830011F, // 004E GETMBR R12 R0 K31
+ 0x70020000, // 004F JMP #0051
+ 0x88300124, // 0050 GETMBR R12 R0 K36
+ 0x78060001, // 0051 JMPF R1 #0054
+ 0x88340111, // 0052 GETMBR R13 R0 K17
+ 0x70020000, // 0053 JMP #0055
+ 0x88340125, // 0054 GETMBR R13 R0 K37
+ 0x7C200A00, // 0055 CALL R8 5
+ 0x58240026, // 0056 LDCONST R9 K38
+ 0x7C180600, // 0057 CALL R6 3
+ 0x60180008, // 0058 GETGBL R6 G8
+ 0x881C0108, // 0059 GETMBR R7 R0 K8
+ 0x54220FFE, // 005A LDINT R8 4095
+ 0x2C1C0E08, // 005B AND R7 R7 R8
+ 0x7C180200, // 005C CALL R6 1
+ 0x001A4E06, // 005D ADD R6 K39 R6
+ 0xB81E1E00, // 005E GETNGBL R7 K15
+ 0x8C1C0F20, // 005F GETMET R7 R7 K32
+ 0x00265006, // 0060 ADD R9 K40 R6
+ 0x58280029, // 0061 LDCONST R10 K41
+ 0x7C1C0600, // 0062 CALL R7 3
+ 0x8C1C052A, // 0063 GETMET R7 R2 K42
+ 0x5824001D, // 0064 LDCONST R9 K29
+ 0x5828001E, // 0065 LDCONST R10 K30
+ 0x882C011F, // 0066 GETMBR R11 R0 K31
+ 0x88300111, // 0067 GETMBR R12 R0 K17
+ 0x5C340C00, // 0068 MOVE R13 R6
+ 0x7C1C0C00, // 0069 CALL R7 6
+ 0x601C0008, // 006A GETGBL R7 G8
+ 0x88200108, // 006B GETMBR R8 R0 K8
+ 0x54260EFF, // 006C LDINT R9 3840
+ 0x2C201009, // 006D AND R8 R8 R9
+ 0x54260007, // 006E LDINT R9 8
+ 0x3C201009, // 006F SHR R8 R8 R9
+ 0x7C1C0200, // 0070 CALL R7 1
+ 0x001E5607, // 0071 ADD R7 K43 R7
+ 0x5C180E00, // 0072 MOVE R6 R7
+ 0xB81E1E00, // 0073 GETNGBL R7 K15
+ 0x8C1C0F20, // 0074 GETMET R7 R7 K32
+ 0x00265006, // 0075 ADD R9 K40 R6
+ 0x58280029, // 0076 LDCONST R10 K41
+ 0x7C1C0600, // 0077 CALL R7 3
+ 0x8C1C052A, // 0078 GETMET R7 R2 K42
+ 0x5824001D, // 0079 LDCONST R9 K29
+ 0x5828001E, // 007A LDCONST R10 K30
+ 0x882C011F, // 007B GETMBR R11 R0 K31
+ 0x88300111, // 007C GETMBR R12 R0 K17
+ 0x5C340C00, // 007D MOVE R13 R6
+ 0x7C1C0C00, // 007E CALL R7 6
+ 0x601C0008, // 007F GETGBL R7 G8
+ 0x88200104, // 0080 GETMBR R8 R0 K4
+ 0x7C1C0200, // 0081 CALL R7 1
+ 0x001E5807, // 0082 ADD R7 K44 R7
+ 0x5C180E00, // 0083 MOVE R6 R7
+ 0xB81E1E00, // 0084 GETNGBL R7 K15
+ 0x8C1C0F20, // 0085 GETMET R7 R7 K32
+ 0x00265006, // 0086 ADD R9 K40 R6
+ 0x58280029, // 0087 LDCONST R10 K41
+ 0x7C1C0600, // 0088 CALL R7 3
+ 0x8C1C052A, // 0089 GETMET R7 R2 K42
+ 0x5824001D, // 008A LDCONST R9 K29
+ 0x5828001E, // 008B LDCONST R10 K30
+ 0x882C011F, // 008C GETMBR R11 R0 K31
+ 0x88300111, // 008D GETMBR R12 R0 K17
+ 0x5C340C00, // 008E MOVE R13 R6
+ 0x7C1C0C00, // 008F CALL R7 6
+ 0x5818002D, // 0090 LDCONST R6 K45
+ 0xB81E1E00, // 0091 GETNGBL R7 K15
+ 0x8C1C0F20, // 0092 GETMET R7 R7 K32
+ 0x00265006, // 0093 ADD R9 K40 R6
+ 0x58280029, // 0094 LDCONST R10 K41
+ 0x7C1C0600, // 0095 CALL R7 3
+ 0x8C1C052A, // 0096 GETMET R7 R2 K42
+ 0x5824001D, // 0097 LDCONST R9 K29
+ 0x5828001E, // 0098 LDCONST R10 K30
+ 0x882C011F, // 0099 GETMBR R11 R0 K31
+ 0x88300111, // 009A GETMBR R12 R0 K17
+ 0x5C340C00, // 009B MOVE R13 R6
+ 0x7C1C0C00, // 009C CALL R7 6
+ 0x70020083, // 009D JMP #0122
+ 0xB8161E00, // 009E GETNGBL R5 K15
+ 0x8C140B23, // 009F GETMET R5 R5 K35
+ 0x7C140200, // 00A0 CALL R5 1
+ 0x8C180712, // 00A1 GETMET R6 R3 K18
+ 0x8C200B13, // 00A2 GETMET R8 R5 K19
+ 0x58280014, // 00A3 LDCONST R10 K20
+ 0x7C200400, // 00A4 CALL R8 2
+ 0x58240015, // 00A5 LDCONST R9 K21
+ 0x58280016, // 00A6 LDCONST R10 K22
+ 0x7C180800, // 00A7 CALL R6 4
+ 0x90024A06, // 00A8 SETMBR R0 K37 R6
+ 0x88180117, // 00A9 GETMBR R6 R0 K23
+ 0x741A000F, // 00AA JMPT R6 #00BB
+ 0x8C180518, // 00AB GETMET R6 R2 K24
+ 0x88200125, // 00AC GETMBR R8 R0 K37
+ 0x8C240B13, // 00AD GETMET R9 R5 K19
+ 0x582C0019, // 00AE LDCONST R11 K25
+ 0x58300016, // 00AF LDCONST R12 K22
+ 0x7C240600, // 00B0 CALL R9 3
+ 0x8C280B13, // 00B1 GETMET R10 R5 K19
+ 0x5830001A, // 00B2 LDCONST R12 K26
+ 0x58340016, // 00B3 LDCONST R13 K22
+ 0x7C280600, // 00B4 CALL R10 3
+ 0x8C2C0B13, // 00B5 GETMET R11 R5 K19
+ 0x5834001B, // 00B6 LDCONST R13 K27
+ 0x58380016, // 00B7 LDCONST R14 K22
+ 0x7C2C0600, // 00B8 CALL R11 3
+ 0x7C180A00, // 00B9 CALL R6 5
+ 0x70020006, // 00BA JMP #00C2
+ 0x8C180518, // 00BB GETMET R6 R2 K24
+ 0x88200125, // 00BC GETMBR R8 R0 K37
+ 0x8C240B13, // 00BD GETMET R9 R5 K19
+ 0x582C001A, // 00BE LDCONST R11 K26
+ 0x58300016, // 00BF LDCONST R12 K22
+ 0x7C240600, // 00C0 CALL R9 3
+ 0x7C180600, // 00C1 CALL R6 3
+ 0x8C18051C, // 00C2 GETMET R6 R2 K28
+ 0x5820001D, // 00C3 LDCONST R8 K29
+ 0x5824001E, // 00C4 LDCONST R9 K30
+ 0x542A15A3, // 00C5 LDINT R10 5540
+ 0x5C2C0800, // 00C6 MOVE R11 R4
+ 0x88300124, // 00C7 GETMBR R12 R0 K36
+ 0x88340125, // 00C8 GETMBR R13 R0 K37
+ 0x7C180E00, // 00C9 CALL R6 7
+ 0xB81A1E00, // 00CA GETNGBL R6 K15
+ 0x8C180D20, // 00CB GETMET R6 R6 K32
+ 0x8C200721, // 00CC GETMET R8 R3 K33
+ 0x58280022, // 00CD LDCONST R10 K34
+ 0x78060001, // 00CE JMPF R1 #00D1
+ 0x582C0010, // 00CF LDCONST R11 K16
+ 0x70020000, // 00D0 JMP #00D2
+ 0x582C0023, // 00D1 LDCONST R11 K35
+ 0x78060001, // 00D2 JMPF R1 #00D5
+ 0x8830011F, // 00D3 GETMBR R12 R0 K31
+ 0x70020000, // 00D4 JMP #00D6
+ 0x88300124, // 00D5 GETMBR R12 R0 K36
+ 0x78060001, // 00D6 JMPF R1 #00D9
+ 0x88340111, // 00D7 GETMBR R13 R0 K17
+ 0x70020000, // 00D8 JMP #00DA
+ 0x88340125, // 00D9 GETMBR R13 R0 K37
+ 0x7C200A00, // 00DA CALL R8 5
+ 0x58240026, // 00DB LDCONST R9 K38
+ 0x7C180600, // 00DC CALL R6 3
+ 0x60180008, // 00DD GETGBL R6 G8
+ 0x881C0108, // 00DE GETMBR R7 R0 K8
+ 0x54220FFE, // 00DF LDINT R8 4095
+ 0x2C1C0E08, // 00E0 AND R7 R7 R8
+ 0x7C180200, // 00E1 CALL R6 1
+ 0x001A4E06, // 00E2 ADD R6 K39 R6
+ 0xB81E1E00, // 00E3 GETNGBL R7 K15
+ 0x8C1C0F20, // 00E4 GETMET R7 R7 K32
+ 0x00265006, // 00E5 ADD R9 K40 R6
+ 0x58280029, // 00E6 LDCONST R10 K41
+ 0x7C1C0600, // 00E7 CALL R7 3
+ 0x8C1C052A, // 00E8 GETMET R7 R2 K42
+ 0x5824001D, // 00E9 LDCONST R9 K29
+ 0x5828001E, // 00EA LDCONST R10 K30
+ 0x882C0124, // 00EB GETMBR R11 R0 K36
+ 0x88300125, // 00EC GETMBR R12 R0 K37
+ 0x5C340C00, // 00ED MOVE R13 R6
+ 0x7C1C0C00, // 00EE CALL R7 6
+ 0x601C0008, // 00EF GETGBL R7 G8
+ 0x88200108, // 00F0 GETMBR R8 R0 K8
+ 0x54260EFF, // 00F1 LDINT R9 3840
+ 0x2C201009, // 00F2 AND R8 R8 R9
+ 0x54260007, // 00F3 LDINT R9 8
+ 0x3C201009, // 00F4 SHR R8 R8 R9
+ 0x7C1C0200, // 00F5 CALL R7 1
+ 0x001E5607, // 00F6 ADD R7 K43 R7
+ 0x5C180E00, // 00F7 MOVE R6 R7
+ 0xB81E1E00, // 00F8 GETNGBL R7 K15
+ 0x8C1C0F20, // 00F9 GETMET R7 R7 K32
+ 0x00265006, // 00FA ADD R9 K40 R6
+ 0x58280029, // 00FB LDCONST R10 K41
+ 0x7C1C0600, // 00FC CALL R7 3
+ 0x8C1C052A, // 00FD GETMET R7 R2 K42
+ 0x5824001D, // 00FE LDCONST R9 K29
+ 0x5828001E, // 00FF LDCONST R10 K30
+ 0x882C0124, // 0100 GETMBR R11 R0 K36
+ 0x88300125, // 0101 GETMBR R12 R0 K37
+ 0x5C340C00, // 0102 MOVE R13 R6
+ 0x7C1C0C00, // 0103 CALL R7 6
+ 0x601C0008, // 0104 GETGBL R7 G8
+ 0x88200104, // 0105 GETMBR R8 R0 K4
+ 0x7C1C0200, // 0106 CALL R7 1
+ 0x001E5807, // 0107 ADD R7 K44 R7
+ 0x5C180E00, // 0108 MOVE R6 R7
+ 0xB81E1E00, // 0109 GETNGBL R7 K15
+ 0x8C1C0F20, // 010A GETMET R7 R7 K32
+ 0x00265006, // 010B ADD R9 K40 R6
+ 0x58280029, // 010C LDCONST R10 K41
+ 0x7C1C0600, // 010D CALL R7 3
+ 0x8C1C052A, // 010E GETMET R7 R2 K42
+ 0x5824001D, // 010F LDCONST R9 K29
+ 0x5828001E, // 0110 LDCONST R10 K30
+ 0x882C0124, // 0111 GETMBR R11 R0 K36
+ 0x88300125, // 0112 GETMBR R12 R0 K37
+ 0x5C340C00, // 0113 MOVE R13 R6
+ 0x7C1C0C00, // 0114 CALL R7 6
+ 0x5818002D, // 0115 LDCONST R6 K45
+ 0xB81E1E00, // 0116 GETNGBL R7 K15
+ 0x8C1C0F20, // 0117 GETMET R7 R7 K32
+ 0x00265006, // 0118 ADD R9 K40 R6
+ 0x58280029, // 0119 LDCONST R10 K41
+ 0x7C1C0600, // 011A CALL R7 3
+ 0x8C1C052A, // 011B GETMET R7 R2 K42
+ 0x5824001D, // 011C LDCONST R9 K29
+ 0x5828001E, // 011D LDCONST R10 K30
+ 0x882C0124, // 011E GETMBR R11 R0 K36
+ 0x88300125, // 011F GETMBR R12 R0 K37
+ 0x5C340C00, // 0120 MOVE R13 R6
+ 0x7C1C0C00, // 0121 CALL R7 6
+ 0xA8040001, // 0122 EXBLK 1 1
+ 0x70020010, // 0123 JMP #0135
+ 0xAC140002, // 0124 CATCH R5 0 2
+ 0x7002000D, // 0125 JMP #0134
+ 0xB81E1E00, // 0126 GETNGBL R7 K15
+ 0x8C1C0F20, // 0127 GETMET R7 R7 K32
+ 0x60240008, // 0128 GETGBL R9 G8
+ 0x5C280A00, // 0129 MOVE R10 R5
+ 0x7C240200, // 012A CALL R9 1
+ 0x00265C09, // 012B ADD R9 K46 R9
+ 0x0024132F, // 012C ADD R9 R9 K47
+ 0x60280008, // 012D GETGBL R10 G8
+ 0x5C2C0C00, // 012E MOVE R11 R6
+ 0x7C280200, // 012F CALL R10 1
+ 0x0024120A, // 0130 ADD R9 R9 R10
+ 0x58280026, // 0131 LDCONST R10 K38
+ 0x7C1C0600, // 0132 CALL R7 3
+ 0x70020000, // 0133 JMP #0135
+ 0xB0080000, // 0134 RAISE 2 R0 R0
+ 0x8C140130, // 0135 GETMET R5 R0 K48
+ 0x7C140200, // 0136 CALL R5 1
+ 0x80000000, // 0137 RET 0
})
)
);
@@ -202,7 +682,7 @@ be_local_closure(Matter_Device_init, /* name */
),
}),
1, /* has constants */
- ( &(const bvalue[39]) { /* constants */
+ ( &(const bvalue[40]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(string),
/* K2 */ be_nested_str_weak(tasmota),
@@ -217,35 +697,36 @@ be_local_closure(Matter_Device_init, /* name */
/* K11 */ be_nested_str_weak(PRODUCT_ID),
/* K12 */ be_nested_str_weak(iterations),
/* K13 */ be_nested_str_weak(PBKDF_ITERATIONS),
- /* K14 */ be_nested_str_weak(load_param),
- /* K15 */ be_nested_str_weak(commissioning_instance_wifi),
- /* K16 */ be_nested_str_weak(random),
- /* K17 */ be_nested_str_weak(tohex),
- /* K18 */ be_nested_str_weak(commissioning_instance_eth),
- /* K19 */ be_nested_str_weak(sessions),
- /* K20 */ be_nested_str_weak(Session_Store),
- /* K21 */ be_nested_str_weak(load),
- /* K22 */ be_nested_str_weak(message_handler),
- /* K23 */ be_nested_str_weak(MessageHandler),
- /* K24 */ be_nested_str_weak(ui),
- /* K25 */ be_nested_str_weak(push),
- /* K26 */ be_nested_str_weak(Plugin_Root),
- /* K27 */ be_nested_str_weak(Plugin_OnOff),
- /* K28 */ be_nested_str_weak(start_mdns_announce_hostnames),
- /* K29 */ be_nested_str_weak(wifi),
- /* K30 */ be_nested_str_weak(up),
- /* K31 */ be_nested_str_weak(start_udp),
- /* K32 */ be_nested_str_weak(UDP_PORT),
- /* K33 */ be_nested_str_weak(add_rule),
- /* K34 */ be_nested_str_weak(Wifi_X23Connected),
- /* K35 */ be_nested_str_weak(eth),
- /* K36 */ be_nested_str_weak(Eth_X23Connected),
- /* K37 */ be_nested_str_weak(start_basic_commissioning),
- /* K38 */ be_nested_str_weak(add_driver),
+ /* K14 */ be_nested_str_weak(ipv4only),
+ /* K15 */ be_nested_str_weak(load_param),
+ /* K16 */ be_nested_str_weak(commissioning_instance_wifi),
+ /* K17 */ be_nested_str_weak(random),
+ /* K18 */ be_nested_str_weak(tohex),
+ /* K19 */ be_nested_str_weak(commissioning_instance_eth),
+ /* K20 */ be_nested_str_weak(sessions),
+ /* K21 */ be_nested_str_weak(Session_Store),
+ /* K22 */ be_nested_str_weak(load),
+ /* K23 */ be_nested_str_weak(message_handler),
+ /* K24 */ be_nested_str_weak(MessageHandler),
+ /* K25 */ be_nested_str_weak(ui),
+ /* K26 */ be_nested_str_weak(push),
+ /* K27 */ be_nested_str_weak(Plugin_Root),
+ /* K28 */ be_nested_str_weak(Plugin_OnOff),
+ /* K29 */ be_nested_str_weak(start_mdns_announce_hostnames),
+ /* K30 */ be_nested_str_weak(wifi),
+ /* K31 */ be_nested_str_weak(up),
+ /* K32 */ be_nested_str_weak(start_udp),
+ /* K33 */ be_nested_str_weak(UDP_PORT),
+ /* K34 */ be_nested_str_weak(add_rule),
+ /* K35 */ be_nested_str_weak(Wifi_X23Connected),
+ /* K36 */ be_nested_str_weak(eth),
+ /* K37 */ be_nested_str_weak(Eth_X23Connected),
+ /* K38 */ be_nested_str_weak(start_basic_commissioning),
+ /* K39 */ be_nested_str_weak(add_driver),
}),
be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[107]) { /* code */
+ ( &(const binstruction[109]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0xA40A0200, // 0001 IMPORT R2 K1
0xB80E0400, // 0002 GETNGBL R3 K2
@@ -268,91 +749,407 @@ be_local_closure(Matter_Device_init, /* name */
0x90021403, // 0013 SETMBR R0 K10 R3
0x880C010D, // 0014 GETMBR R3 R0 K13
0x90021803, // 0015 SETMBR R0 K12 R3
- 0x8C0C010E, // 0016 GETMET R3 R0 K14
- 0x7C0C0200, // 0017 CALL R3 1
- 0x8C0C0310, // 0018 GETMET R3 R1 K16
- 0x54160007, // 0019 LDINT R5 8
- 0x7C0C0400, // 001A CALL R3 2
- 0x8C0C0711, // 001B GETMET R3 R3 K17
- 0x7C0C0200, // 001C CALL R3 1
- 0x90021E03, // 001D SETMBR R0 K15 R3
- 0x8C0C0310, // 001E GETMET R3 R1 K16
- 0x54160007, // 001F LDINT R5 8
- 0x7C0C0400, // 0020 CALL R3 2
- 0x8C0C0711, // 0021 GETMET R3 R3 K17
- 0x7C0C0200, // 0022 CALL R3 1
- 0x90022403, // 0023 SETMBR R0 K18 R3
- 0xB80E0800, // 0024 GETNGBL R3 K4
- 0x8C0C0714, // 0025 GETMET R3 R3 K20
- 0x7C0C0200, // 0026 CALL R3 1
- 0x90022603, // 0027 SETMBR R0 K19 R3
- 0x880C0113, // 0028 GETMBR R3 R0 K19
- 0x8C0C0715, // 0029 GETMET R3 R3 K21
- 0x7C0C0200, // 002A CALL R3 1
- 0xB80E0800, // 002B GETNGBL R3 K4
- 0x8C0C0717, // 002C GETMET R3 R3 K23
- 0x5C140000, // 002D MOVE R5 R0
- 0x7C0C0400, // 002E CALL R3 2
- 0x90022C03, // 002F SETMBR R0 K22 R3
- 0xB80E0800, // 0030 GETNGBL R3 K4
- 0x8C0C0706, // 0031 GETMET R3 R3 K6
- 0x5C140000, // 0032 MOVE R5 R0
- 0x7C0C0400, // 0033 CALL R3 2
- 0x90023003, // 0034 SETMBR R0 K24 R3
- 0x880C0107, // 0035 GETMBR R3 R0 K7
- 0x8C0C0719, // 0036 GETMET R3 R3 K25
- 0xB8160800, // 0037 GETNGBL R5 K4
- 0x8C140B1A, // 0038 GETMET R5 R5 K26
- 0x5C1C0000, // 0039 MOVE R7 R0
- 0x7C140400, // 003A CALL R5 2
- 0x7C0C0400, // 003B CALL R3 2
- 0x880C0107, // 003C GETMBR R3 R0 K7
- 0x8C0C0719, // 003D GETMET R3 R3 K25
- 0xB8160800, // 003E GETNGBL R5 K4
- 0x8C140B1B, // 003F GETMET R5 R5 K27
- 0x5C1C0000, // 0040 MOVE R7 R0
- 0x7C140400, // 0041 CALL R5 2
- 0x7C0C0400, // 0042 CALL R3 2
- 0x8C0C011C, // 0043 GETMET R3 R0 K28
- 0x7C0C0200, // 0044 CALL R3 1
- 0xB80E0400, // 0045 GETNGBL R3 K2
- 0x8C0C071D, // 0046 GETMET R3 R3 K29
- 0x7C0C0200, // 0047 CALL R3 1
- 0x940C071E, // 0048 GETIDX R3 R3 K30
- 0x780E0003, // 0049 JMPF R3 #004E
- 0x8C0C011F, // 004A GETMET R3 R0 K31
- 0x88140120, // 004B GETMBR R5 R0 K32
- 0x7C0C0400, // 004C CALL R3 2
- 0x70020005, // 004D JMP #0054
- 0xB80E0400, // 004E GETNGBL R3 K2
- 0x8C0C0721, // 004F GETMET R3 R3 K33
- 0x58140022, // 0050 LDCONST R5 K34
- 0x84180000, // 0051 CLOSURE R6 P0
- 0x5C1C0000, // 0052 MOVE R7 R0
- 0x7C0C0800, // 0053 CALL R3 4
- 0xB80E0400, // 0054 GETNGBL R3 K2
- 0x8C0C0723, // 0055 GETMET R3 R3 K35
- 0x7C0C0200, // 0056 CALL R3 1
- 0x940C071E, // 0057 GETIDX R3 R3 K30
- 0x780E0003, // 0058 JMPF R3 #005D
- 0x8C0C011F, // 0059 GETMET R3 R0 K31
- 0x88140120, // 005A GETMBR R5 R0 K32
- 0x7C0C0400, // 005B CALL R3 2
- 0x70020005, // 005C JMP #0063
- 0xB80E0400, // 005D GETNGBL R3 K2
- 0x8C0C0721, // 005E GETMET R3 R3 K33
- 0x58140024, // 005F LDCONST R5 K36
- 0x84180001, // 0060 CLOSURE R6 P1
- 0x5C1C0000, // 0061 MOVE R7 R0
- 0x7C0C0800, // 0062 CALL R3 4
- 0x8C0C0125, // 0063 GETMET R3 R0 K37
- 0x7C0C0200, // 0064 CALL R3 1
- 0xB80E0400, // 0065 GETNGBL R3 K2
- 0x8C0C0726, // 0066 GETMET R3 R3 K38
- 0x5C140000, // 0067 MOVE R5 R0
- 0x7C0C0400, // 0068 CALL R3 2
- 0xA0000000, // 0069 CLOSE R0
- 0x80000000, // 006A RET 0
+ 0x500C0000, // 0016 LDBOOL R3 0 0
+ 0x90021C03, // 0017 SETMBR R0 K14 R3
+ 0x8C0C010F, // 0018 GETMET R3 R0 K15
+ 0x7C0C0200, // 0019 CALL R3 1
+ 0x8C0C0311, // 001A GETMET R3 R1 K17
+ 0x54160007, // 001B LDINT R5 8
+ 0x7C0C0400, // 001C CALL R3 2
+ 0x8C0C0712, // 001D GETMET R3 R3 K18
+ 0x7C0C0200, // 001E CALL R3 1
+ 0x90022003, // 001F SETMBR R0 K16 R3
+ 0x8C0C0311, // 0020 GETMET R3 R1 K17
+ 0x54160007, // 0021 LDINT R5 8
+ 0x7C0C0400, // 0022 CALL R3 2
+ 0x8C0C0712, // 0023 GETMET R3 R3 K18
+ 0x7C0C0200, // 0024 CALL R3 1
+ 0x90022603, // 0025 SETMBR R0 K19 R3
+ 0xB80E0800, // 0026 GETNGBL R3 K4
+ 0x8C0C0715, // 0027 GETMET R3 R3 K21
+ 0x7C0C0200, // 0028 CALL R3 1
+ 0x90022803, // 0029 SETMBR R0 K20 R3
+ 0x880C0114, // 002A GETMBR R3 R0 K20
+ 0x8C0C0716, // 002B GETMET R3 R3 K22
+ 0x7C0C0200, // 002C CALL R3 1
+ 0xB80E0800, // 002D GETNGBL R3 K4
+ 0x8C0C0718, // 002E GETMET R3 R3 K24
+ 0x5C140000, // 002F MOVE R5 R0
+ 0x7C0C0400, // 0030 CALL R3 2
+ 0x90022E03, // 0031 SETMBR R0 K23 R3
+ 0xB80E0800, // 0032 GETNGBL R3 K4
+ 0x8C0C0706, // 0033 GETMET R3 R3 K6
+ 0x5C140000, // 0034 MOVE R5 R0
+ 0x7C0C0400, // 0035 CALL R3 2
+ 0x90023203, // 0036 SETMBR R0 K25 R3
+ 0x880C0107, // 0037 GETMBR R3 R0 K7
+ 0x8C0C071A, // 0038 GETMET R3 R3 K26
+ 0xB8160800, // 0039 GETNGBL R5 K4
+ 0x8C140B1B, // 003A GETMET R5 R5 K27
+ 0x5C1C0000, // 003B MOVE R7 R0
+ 0x7C140400, // 003C CALL R5 2
+ 0x7C0C0400, // 003D CALL R3 2
+ 0x880C0107, // 003E GETMBR R3 R0 K7
+ 0x8C0C071A, // 003F GETMET R3 R3 K26
+ 0xB8160800, // 0040 GETNGBL R5 K4
+ 0x8C140B1C, // 0041 GETMET R5 R5 K28
+ 0x5C1C0000, // 0042 MOVE R7 R0
+ 0x7C140400, // 0043 CALL R5 2
+ 0x7C0C0400, // 0044 CALL R3 2
+ 0x8C0C011D, // 0045 GETMET R3 R0 K29
+ 0x7C0C0200, // 0046 CALL R3 1
+ 0xB80E0400, // 0047 GETNGBL R3 K2
+ 0x8C0C071E, // 0048 GETMET R3 R3 K30
+ 0x7C0C0200, // 0049 CALL R3 1
+ 0x940C071F, // 004A GETIDX R3 R3 K31
+ 0x780E0003, // 004B JMPF R3 #0050
+ 0x8C0C0120, // 004C GETMET R3 R0 K32
+ 0x88140121, // 004D GETMBR R5 R0 K33
+ 0x7C0C0400, // 004E CALL R3 2
+ 0x70020005, // 004F JMP #0056
+ 0xB80E0400, // 0050 GETNGBL R3 K2
+ 0x8C0C0722, // 0051 GETMET R3 R3 K34
+ 0x58140023, // 0052 LDCONST R5 K35
+ 0x84180000, // 0053 CLOSURE R6 P0
+ 0x5C1C0000, // 0054 MOVE R7 R0
+ 0x7C0C0800, // 0055 CALL R3 4
+ 0xB80E0400, // 0056 GETNGBL R3 K2
+ 0x8C0C0724, // 0057 GETMET R3 R3 K36
+ 0x7C0C0200, // 0058 CALL R3 1
+ 0x940C071F, // 0059 GETIDX R3 R3 K31
+ 0x780E0003, // 005A JMPF R3 #005F
+ 0x8C0C0120, // 005B GETMET R3 R0 K32
+ 0x88140121, // 005C GETMBR R5 R0 K33
+ 0x7C0C0400, // 005D CALL R3 2
+ 0x70020005, // 005E JMP #0065
+ 0xB80E0400, // 005F GETNGBL R3 K2
+ 0x8C0C0722, // 0060 GETMET R3 R3 K34
+ 0x58140025, // 0061 LDCONST R5 K37
+ 0x84180001, // 0062 CLOSURE R6 P1
+ 0x5C1C0000, // 0063 MOVE R7 R0
+ 0x7C0C0800, // 0064 CALL R3 4
+ 0x8C0C0126, // 0065 GETMET R3 R0 K38
+ 0x7C0C0200, // 0066 CALL R3 1
+ 0xB80E0400, // 0067 GETNGBL R3 K2
+ 0x8C0C0727, // 0068 GETMET R3 R3 K39
+ 0x5C140000, // 0069 MOVE R5 R0
+ 0x7C0C0400, // 006A CALL R3 2
+ 0xA0000000, // 006B CLOSE R0
+ 0x80000000, // 006C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: finish_commissioning
+********************************************************************/
+be_local_closure(Matter_Device_finish_commissioning, /* 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(finish_commissioning),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: save_param
+********************************************************************/
+be_local_closure(Matter_Device_save_param, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(json),
+ /* K1 */ be_nested_str_weak(dump),
+ /* K2 */ be_nested_str_weak(distinguish),
+ /* K3 */ be_nested_str_weak(discriminator),
+ /* K4 */ be_nested_str_weak(passcode),
+ /* K5 */ be_nested_str_weak(ipv4only),
+ /* K6 */ be_nested_str_weak(string),
+ /* K7 */ be_nested_str_weak(FILENAME),
+ /* K8 */ be_nested_str_weak(w),
+ /* K9 */ be_nested_str_weak(write),
+ /* K10 */ be_nested_str_weak(close),
+ /* K11 */ be_nested_str_weak(tasmota),
+ /* K12 */ be_nested_str_weak(log),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Asave_X20Exception_X3A),
+ /* K14 */ be_nested_str_weak(_X7C),
+ /* K15 */ be_const_int(2),
+ }),
+ be_str_weak(save_param),
+ &be_const_str_solidified,
+ ( &(const binstruction[45]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x8C080301, // 0001 GETMET R2 R1 K1
+ 0x60100013, // 0002 GETGBL R4 G19
+ 0x7C100000, // 0003 CALL R4 0
+ 0x88140103, // 0004 GETMBR R5 R0 K3
+ 0x98120405, // 0005 SETIDX R4 K2 R5
+ 0x88140104, // 0006 GETMBR R5 R0 K4
+ 0x98120805, // 0007 SETIDX R4 K4 R5
+ 0x88140105, // 0008 GETMBR R5 R0 K5
+ 0x98120A05, // 0009 SETIDX R4 K5 R5
+ 0x7C080400, // 000A CALL R2 2
+ 0xA802000D, // 000B EXBLK 0 #001A
+ 0xA40E0C00, // 000C IMPORT R3 K6
+ 0x60100011, // 000D GETGBL R4 G17
+ 0x88140107, // 000E GETMBR R5 R0 K7
+ 0x58180008, // 000F LDCONST R6 K8
+ 0x7C100400, // 0010 CALL R4 2
+ 0x8C140909, // 0011 GETMET R5 R4 K9
+ 0x5C1C0400, // 0012 MOVE R7 R2
+ 0x7C140400, // 0013 CALL R5 2
+ 0x8C14090A, // 0014 GETMET R5 R4 K10
+ 0x7C140200, // 0015 CALL R5 1
+ 0xA8040001, // 0016 EXBLK 1 1
+ 0x80040400, // 0017 RET 1 R2
+ 0xA8040001, // 0018 EXBLK 1 1
+ 0x70020011, // 0019 JMP #002C
+ 0xAC0C0002, // 001A CATCH R3 0 2
+ 0x7002000E, // 001B JMP #002B
+ 0xB8161600, // 001C GETNGBL R5 K11
+ 0x8C140B0C, // 001D GETMET R5 R5 K12
+ 0x601C0008, // 001E GETGBL R7 G8
+ 0x5C200600, // 001F MOVE R8 R3
+ 0x7C1C0200, // 0020 CALL R7 1
+ 0x001E1A07, // 0021 ADD R7 K13 R7
+ 0x001C0F0E, // 0022 ADD R7 R7 K14
+ 0x60200008, // 0023 GETGBL R8 G8
+ 0x5C240800, // 0024 MOVE R9 R4
+ 0x7C200200, // 0025 CALL R8 1
+ 0x001C0E08, // 0026 ADD R7 R7 R8
+ 0x5820000F, // 0027 LDCONST R8 K15
+ 0x7C140600, // 0028 CALL R5 3
+ 0x80040400, // 0029 RET 1 R2
+ 0x70020000, // 002A JMP #002C
+ 0xB0080000, // 002B RAISE 2 R0 R0
+ 0x80000000, // 002C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: mdns_announce_op_discovery
+********************************************************************/
+be_local_closure(Matter_Device_mdns_announce_op_discovery, /* name */
+ be_nested_proto(
+ 15, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[29]) { /* constants */
+ /* K0 */ be_nested_str_weak(mdns),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(get_deviceid),
+ /* K3 */ be_nested_str_weak(copy),
+ /* K4 */ be_nested_str_weak(reverse),
+ /* K5 */ be_nested_str_weak(get_fabric_compressed),
+ /* K6 */ be_nested_str_weak(tohex),
+ /* K7 */ be_nested_str_weak(_X2D),
+ /* K8 */ be_nested_str_weak(tasmota),
+ /* K9 */ be_nested_str_weak(log),
+ /* K10 */ be_nested_str_weak(MTR_X3A_X20Operational_X20Discovery_X20node_X20_X3D_X20),
+ /* K11 */ be_const_int(2),
+ /* K12 */ be_nested_str_weak(eth),
+ /* K13 */ be_nested_str_weak(find),
+ /* K14 */ be_nested_str_weak(up),
+ /* K15 */ be_nested_str_weak(format),
+ /* K16 */ be_nested_str_weak(MTR_X3A_X20adding_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27_X20ptr_X20to_X20_X60_X25s_X2Elocal_X60),
+ /* K17 */ be_nested_str_weak(hostname_eth),
+ /* K18 */ be_const_int(3),
+ /* K19 */ be_nested_str_weak(add_service),
+ /* K20 */ be_nested_str_weak(_matter),
+ /* K21 */ be_nested_str_weak(_tcp),
+ /* K22 */ be_nested_str_weak(_I),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20adding_X20subtype_X3A_X20),
+ /* K24 */ be_nested_str_weak(add_subtype),
+ /* K25 */ be_nested_str_weak(wifi),
+ /* K26 */ be_nested_str_weak(hostname_wifi),
+ /* K27 */ be_nested_str_weak(MTR_X3A_X20Exception),
+ /* K28 */ be_nested_str_weak(_X7C),
+ }),
+ be_str_weak(mdns_announce_op_discovery),
+ &be_const_str_solidified,
+ ( &(const binstruction[122]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0xA8020064, // 0002 EXBLK 0 #0068
+ 0x8C100302, // 0003 GETMET R4 R1 K2
+ 0x7C100200, // 0004 CALL R4 1
+ 0x8C100903, // 0005 GETMET R4 R4 K3
+ 0x7C100200, // 0006 CALL R4 1
+ 0x8C100904, // 0007 GETMET R4 R4 K4
+ 0x7C100200, // 0008 CALL R4 1
+ 0x8C140305, // 0009 GETMET R5 R1 K5
+ 0x7C140200, // 000A CALL R5 1
+ 0x8C180B06, // 000B GETMET R6 R5 K6
+ 0x7C180200, // 000C CALL R6 1
+ 0x00180D07, // 000D ADD R6 R6 K7
+ 0x8C1C0906, // 000E GETMET R7 R4 K6
+ 0x7C1C0200, // 000F CALL R7 1
+ 0x00180C07, // 0010 ADD R6 R6 R7
+ 0xB81E1000, // 0011 GETNGBL R7 K8
+ 0x8C1C0F09, // 0012 GETMET R7 R7 K9
+ 0x00261406, // 0013 ADD R9 K10 R6
+ 0x5828000B, // 0014 LDCONST R10 K11
+ 0x7C1C0600, // 0015 CALL R7 3
+ 0xB81E1000, // 0016 GETNGBL R7 K8
+ 0x8C1C0F0C, // 0017 GETMET R7 R7 K12
+ 0x7C1C0200, // 0018 CALL R7 1
+ 0x8C1C0F0D, // 0019 GETMET R7 R7 K13
+ 0x5824000E, // 001A LDCONST R9 K14
+ 0x7C1C0400, // 001B CALL R7 2
+ 0x781E0020, // 001C JMPF R7 #003E
+ 0xB81E1000, // 001D GETNGBL R7 K8
+ 0x8C1C0F09, // 001E GETMET R7 R7 K9
+ 0x8C24070F, // 001F GETMET R9 R3 K15
+ 0x582C0010, // 0020 LDCONST R11 K16
+ 0x5830000C, // 0021 LDCONST R12 K12
+ 0x5C340C00, // 0022 MOVE R13 R6
+ 0x88380111, // 0023 GETMBR R14 R0 K17
+ 0x7C240A00, // 0024 CALL R9 5
+ 0x58280012, // 0025 LDCONST R10 K18
+ 0x7C1C0600, // 0026 CALL R7 3
+ 0x8C1C0513, // 0027 GETMET R7 R2 K19
+ 0x58240014, // 0028 LDCONST R9 K20
+ 0x58280015, // 0029 LDCONST R10 K21
+ 0x542E15A3, // 002A LDINT R11 5540
+ 0x4C300000, // 002B LDNIL R12
+ 0x5C340C00, // 002C MOVE R13 R6
+ 0x88380111, // 002D GETMBR R14 R0 K17
+ 0x7C1C0E00, // 002E CALL R7 7
+ 0x8C1C0B06, // 002F GETMET R7 R5 K6
+ 0x7C1C0200, // 0030 CALL R7 1
+ 0x001E2C07, // 0031 ADD R7 K22 R7
+ 0xB8221000, // 0032 GETNGBL R8 K8
+ 0x8C201109, // 0033 GETMET R8 R8 K9
+ 0x002A2E07, // 0034 ADD R10 K23 R7
+ 0x582C0012, // 0035 LDCONST R11 K18
+ 0x7C200600, // 0036 CALL R8 3
+ 0x8C200518, // 0037 GETMET R8 R2 K24
+ 0x58280014, // 0038 LDCONST R10 K20
+ 0x582C0015, // 0039 LDCONST R11 K21
+ 0x5C300C00, // 003A MOVE R12 R6
+ 0x88340111, // 003B GETMBR R13 R0 K17
+ 0x5C380E00, // 003C MOVE R14 R7
+ 0x7C200C00, // 003D CALL R8 6
+ 0xB81E1000, // 003E GETNGBL R7 K8
+ 0x8C1C0F19, // 003F GETMET R7 R7 K25
+ 0x7C1C0200, // 0040 CALL R7 1
+ 0x8C1C0F0D, // 0041 GETMET R7 R7 K13
+ 0x5824000E, // 0042 LDCONST R9 K14
+ 0x7C1C0400, // 0043 CALL R7 2
+ 0x781E0020, // 0044 JMPF R7 #0066
+ 0xB81E1000, // 0045 GETNGBL R7 K8
+ 0x8C1C0F09, // 0046 GETMET R7 R7 K9
+ 0x8C24070F, // 0047 GETMET R9 R3 K15
+ 0x582C0010, // 0048 LDCONST R11 K16
+ 0x58300019, // 0049 LDCONST R12 K25
+ 0x5C340C00, // 004A MOVE R13 R6
+ 0x8838011A, // 004B GETMBR R14 R0 K26
+ 0x7C240A00, // 004C CALL R9 5
+ 0x58280012, // 004D LDCONST R10 K18
+ 0x7C1C0600, // 004E CALL R7 3
+ 0x8C1C0513, // 004F GETMET R7 R2 K19
+ 0x58240014, // 0050 LDCONST R9 K20
+ 0x58280015, // 0051 LDCONST R10 K21
+ 0x542E15A3, // 0052 LDINT R11 5540
+ 0x4C300000, // 0053 LDNIL R12
+ 0x5C340C00, // 0054 MOVE R13 R6
+ 0x8838011A, // 0055 GETMBR R14 R0 K26
+ 0x7C1C0E00, // 0056 CALL R7 7
+ 0x8C1C0B06, // 0057 GETMET R7 R5 K6
+ 0x7C1C0200, // 0058 CALL R7 1
+ 0x001E2C07, // 0059 ADD R7 K22 R7
+ 0xB8221000, // 005A GETNGBL R8 K8
+ 0x8C201109, // 005B GETMET R8 R8 K9
+ 0x002A2E07, // 005C ADD R10 K23 R7
+ 0x582C0012, // 005D LDCONST R11 K18
+ 0x7C200600, // 005E CALL R8 3
+ 0x8C200518, // 005F GETMET R8 R2 K24
+ 0x58280014, // 0060 LDCONST R10 K20
+ 0x582C0015, // 0061 LDCONST R11 K21
+ 0x5C300C00, // 0062 MOVE R12 R6
+ 0x8834011A, // 0063 GETMBR R13 R0 K26
+ 0x5C380E00, // 0064 MOVE R14 R7
+ 0x7C200C00, // 0065 CALL R8 6
+ 0xA8040001, // 0066 EXBLK 1 1
+ 0x70020010, // 0067 JMP #0079
+ 0xAC100002, // 0068 CATCH R4 0 2
+ 0x7002000D, // 0069 JMP #0078
+ 0xB81A1000, // 006A GETNGBL R6 K8
+ 0x8C180D09, // 006B GETMET R6 R6 K9
+ 0x60200008, // 006C GETGBL R8 G8
+ 0x5C240800, // 006D MOVE R9 R4
+ 0x7C200200, // 006E CALL R8 1
+ 0x00223608, // 006F ADD R8 K27 R8
+ 0x0020111C, // 0070 ADD R8 R8 K28
+ 0x60240008, // 0071 GETGBL R9 G8
+ 0x5C280A00, // 0072 MOVE R10 R5
+ 0x7C240200, // 0073 CALL R9 1
+ 0x00201009, // 0074 ADD R8 R8 R9
+ 0x5824000B, // 0075 LDCONST R9 K11
+ 0x7C180600, // 0076 CALL R6 3
+ 0x70020000, // 0077 JMP #0079
+ 0xB0080000, // 0078 RAISE 2 R0 R0
+ 0x80000000, // 0079 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_basic_commissioning
+********************************************************************/
+be_local_closure(Matter_Device_start_basic_commissioning, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(compute_pbkdf),
+ /* K1 */ be_nested_str_weak(passcode),
+ }),
+ be_str_weak(start_basic_commissioning),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x880C0101, // 0001 GETMBR R3 R0 K1
+ 0x7C040400, // 0002 CALL R1 2
+ 0x80000000, // 0003 RET 0
})
)
);
@@ -502,81 +1299,81 @@ be_local_closure(Matter_Device_compute_pbkdf, /* name */
/********************************************************************
-** Solidified function: save_param
+** Solidified function: sort_distinct
********************************************************************/
-be_local_closure(Matter_Device_save_param, /* name */
+be_local_closure(Matter_Device_sort_distinct, /* name */
be_nested_proto(
- 10, /* nstack */
+ 7, /* nstack */
1, /* argc */
- 2, /* varg */
+ 4, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[15]) { /* constants */
- /* K0 */ be_nested_str_weak(json),
- /* K1 */ be_nested_str_weak(dump),
- /* K2 */ be_nested_str_weak(distinguish),
- /* K3 */ be_nested_str_weak(discriminator),
- /* K4 */ be_nested_str_weak(passcode),
- /* K5 */ be_nested_str_weak(string),
- /* K6 */ be_nested_str_weak(FILENAME),
- /* K7 */ be_nested_str_weak(w),
- /* K8 */ be_nested_str_weak(write),
- /* K9 */ be_nested_str_weak(close),
- /* K10 */ be_nested_str_weak(tasmota),
- /* K11 */ be_nested_str_weak(log),
- /* K12 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Asave_X20Exception_X3A),
- /* K13 */ be_nested_str_weak(_X7C),
- /* K14 */ be_const_int(2),
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_Device),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(stop_iteration),
+ /* K4 */ be_nested_str_weak(remove),
}),
- be_str_weak(save_param),
+ be_str_weak(sort_distinct),
&be_const_str_solidified,
- ( &(const binstruction[43]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x8C080301, // 0001 GETMET R2 R1 K1
- 0x60100013, // 0002 GETGBL R4 G19
- 0x7C100000, // 0003 CALL R4 0
- 0x88140103, // 0004 GETMBR R5 R0 K3
- 0x98120405, // 0005 SETIDX R4 K2 R5
- 0x88140104, // 0006 GETMBR R5 R0 K4
- 0x98120805, // 0007 SETIDX R4 K4 R5
- 0x7C080400, // 0008 CALL R2 2
- 0xA802000D, // 0009 EXBLK 0 #0018
- 0xA40E0A00, // 000A IMPORT R3 K5
- 0x60100011, // 000B GETGBL R4 G17
- 0x88140106, // 000C GETMBR R5 R0 K6
- 0x58180007, // 000D LDCONST R6 K7
- 0x7C100400, // 000E CALL R4 2
- 0x8C140908, // 000F GETMET R5 R4 K8
- 0x5C1C0400, // 0010 MOVE R7 R2
- 0x7C140400, // 0011 CALL R5 2
- 0x8C140909, // 0012 GETMET R5 R4 K9
- 0x7C140200, // 0013 CALL R5 1
- 0xA8040001, // 0014 EXBLK 1 1
- 0x80040400, // 0015 RET 1 R2
- 0xA8040001, // 0016 EXBLK 1 1
- 0x70020011, // 0017 JMP #002A
- 0xAC0C0002, // 0018 CATCH R3 0 2
- 0x7002000E, // 0019 JMP #0029
- 0xB8161400, // 001A GETNGBL R5 K10
- 0x8C140B0B, // 001B GETMET R5 R5 K11
- 0x601C0008, // 001C GETGBL R7 G8
- 0x5C200600, // 001D MOVE R8 R3
- 0x7C1C0200, // 001E CALL R7 1
- 0x001E1807, // 001F ADD R7 K12 R7
- 0x001C0F0D, // 0020 ADD R7 R7 K13
- 0x60200008, // 0021 GETGBL R8 G8
- 0x5C240800, // 0022 MOVE R9 R4
- 0x7C200200, // 0023 CALL R8 1
- 0x001C0E08, // 0024 ADD R7 R7 R8
- 0x5820000E, // 0025 LDCONST R8 K14
- 0x7C140600, // 0026 CALL R5 3
- 0x80040400, // 0027 RET 1 R2
- 0x70020000, // 0028 JMP #002A
- 0xB0080000, // 0029 RAISE 2 R0 R0
- 0x80000000, // 002A RET 0
+ ( &(const binstruction[53]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x60080010, // 0001 GETGBL R2 G16
+ 0x600C000C, // 0002 GETGBL R3 G12
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x040C0701, // 0005 SUB R3 R3 K1
+ 0x400E0203, // 0006 CONNECT R3 K1 R3
+ 0x7C080200, // 0007 CALL R2 1
+ 0xA8020010, // 0008 EXBLK 0 #001A
+ 0x5C0C0400, // 0009 MOVE R3 R2
+ 0x7C0C0000, // 000A CALL R3 0
+ 0x94100003, // 000B GETIDX R4 R0 R3
+ 0x5C140600, // 000C MOVE R5 R3
+ 0x24180B02, // 000D GT R6 R5 K2
+ 0x781A0008, // 000E JMPF R6 #0018
+ 0x04180B01, // 000F SUB R6 R5 K1
+ 0x94180006, // 0010 GETIDX R6 R0 R6
+ 0x24180C04, // 0011 GT R6 R6 R4
+ 0x781A0004, // 0012 JMPF R6 #0018
+ 0x04180B01, // 0013 SUB R6 R5 K1
+ 0x94180006, // 0014 GETIDX R6 R0 R6
+ 0x98000A06, // 0015 SETIDX R0 R5 R6
+ 0x04140B01, // 0016 SUB R5 R5 K1
+ 0x7001FFF4, // 0017 JMP #000D
+ 0x98000A04, // 0018 SETIDX R0 R5 R4
+ 0x7001FFEE, // 0019 JMP #0009
+ 0x58080003, // 001A LDCONST R2 K3
+ 0xAC080200, // 001B CATCH R2 1 0
+ 0xB0080000, // 001C RAISE 2 R0 R0
+ 0x58080001, // 001D LDCONST R2 K1
+ 0x600C000C, // 001E GETGBL R3 G12
+ 0x5C100000, // 001F MOVE R4 R0
+ 0x7C0C0200, // 0020 CALL R3 1
+ 0x180C0701, // 0021 LE R3 R3 K1
+ 0x780E0000, // 0022 JMPF R3 #0024
+ 0x80040000, // 0023 RET 1 R0
+ 0x940C0102, // 0024 GETIDX R3 R0 K2
+ 0x6010000C, // 0025 GETGBL R4 G12
+ 0x5C140000, // 0026 MOVE R5 R0
+ 0x7C100200, // 0027 CALL R4 1
+ 0x14100404, // 0028 LT R4 R2 R4
+ 0x78120009, // 0029 JMPF R4 #0034
+ 0x94100002, // 002A GETIDX R4 R0 R2
+ 0x1C100803, // 002B EQ R4 R4 R3
+ 0x78120003, // 002C JMPF R4 #0031
+ 0x8C100104, // 002D GETMET R4 R0 K4
+ 0x5C180400, // 002E MOVE R6 R2
+ 0x7C100400, // 002F CALL R4 2
+ 0x70020001, // 0030 JMP #0033
+ 0x940C0002, // 0031 GETIDX R3 R0 R2
+ 0x00080501, // 0032 ADD R2 R2 K1
+ 0x7001FFF0, // 0033 JMP #0025
+ 0x80040000, // 0034 RET 1 R0
})
)
);
@@ -584,9 +1381,140 @@ be_local_closure(Matter_Device_save_param, /* name */
/********************************************************************
-** Solidified function: start_operational_dicovery_deferred
+** Solidified function: start_mdns_announce_hostnames
********************************************************************/
-be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
+be_local_closure(Matter_Device_start_mdns_announce_hostnames, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 4, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_start_mdns_announce),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(remove_rule),
+ /* K3 */ be_nested_str_weak(Wifi_X23Connected),
+ /* K4 */ be_nested_str_weak(matter_device_mdns),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x50080000, // 0002 LDBOOL R2 0 0
+ 0x7C000400, // 0003 CALL R0 2
+ 0xB8020200, // 0004 GETNGBL R0 K1
+ 0x8C000102, // 0005 GETMET R0 R0 K2
+ 0x58080003, // 0006 LDCONST R2 K3
+ 0x580C0004, // 0007 LDCONST R3 K4
+ 0x7C000600, // 0008 CALL R0 3
+ 0x80000000, // 0009 RET 0
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_start_mdns_announce),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(remove_rule),
+ /* K3 */ be_nested_str_weak(Eth_X23Connected),
+ /* K4 */ be_nested_str_weak(matter_device_mdns),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x50080200, // 0002 LDBOOL R2 1 0
+ 0x7C000400, // 0003 CALL R0 2
+ 0xB8020200, // 0004 GETNGBL R0 K1
+ 0x8C000102, // 0005 GETMET R0 R0 K2
+ 0x58080003, // 0006 LDCONST R2 K3
+ 0x580C0004, // 0007 LDCONST R3 K4
+ 0x7C000600, // 0008 CALL R0 3
+ 0x80000000, // 0009 RET 0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(wifi),
+ /* K2 */ be_nested_str_weak(up),
+ /* K3 */ be_nested_str_weak(_start_mdns_announce),
+ /* K4 */ be_nested_str_weak(add_rule),
+ /* K5 */ be_nested_str_weak(Wifi_X23Connected),
+ /* K6 */ be_nested_str_weak(eth),
+ /* K7 */ be_nested_str_weak(Eth_X23Connected),
+ }),
+ be_str_weak(start_mdns_announce_hostnames),
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x94040302, // 0003 GETIDX R1 R1 K2
+ 0x78060003, // 0004 JMPF R1 #0009
+ 0x8C040103, // 0005 GETMET R1 R0 K3
+ 0x500C0000, // 0006 LDBOOL R3 0 0
+ 0x7C040400, // 0007 CALL R1 2
+ 0x70020005, // 0008 JMP #000F
+ 0xB8060000, // 0009 GETNGBL R1 K0
+ 0x8C040304, // 000A GETMET R1 R1 K4
+ 0x580C0005, // 000B LDCONST R3 K5
+ 0x84100000, // 000C CLOSURE R4 P0
+ 0x5C140000, // 000D MOVE R5 R0
+ 0x7C040800, // 000E CALL R1 4
+ 0xB8060000, // 000F GETNGBL R1 K0
+ 0x8C040306, // 0010 GETMET R1 R1 K6
+ 0x7C040200, // 0011 CALL R1 1
+ 0x94040302, // 0012 GETIDX R1 R1 K2
+ 0x78060003, // 0013 JMPF R1 #0018
+ 0x8C040103, // 0014 GETMET R1 R0 K3
+ 0x500C0200, // 0015 LDBOOL R3 1 0
+ 0x7C040400, // 0016 CALL R1 2
+ 0x70020005, // 0017 JMP #001E
+ 0xB8060000, // 0018 GETNGBL R1 K0
+ 0x8C040304, // 0019 GETMET R1 R1 K4
+ 0x580C0007, // 001A LDCONST R3 K7
+ 0x84100001, // 001B CLOSURE R4 P1
+ 0x5C140000, // 001C MOVE R5 R0
+ 0x7C040800, // 001D CALL R1 4
+ 0xA0000000, // 001E CLOSE R0
+ 0x80000000, // 001F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_commissioning_complete_deferred
+********************************************************************/
+be_local_closure(Matter_Device_start_commissioning_complete_deferred, /* name */
be_nested_proto(
6, /* nstack */
2, /* argc */
@@ -608,7 +1536,7 @@ be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(start_operational_dicovery),
+ /* K0 */ be_nested_str_weak(start_commissioning_complete),
}),
be_str_weak(_X3Clambda_X3E),
&be_const_str_solidified,
@@ -627,7 +1555,7 @@ be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
/* K1 */ be_nested_str_weak(set_timer),
/* K2 */ be_const_int(0),
}),
- be_str_weak(start_operational_dicovery_deferred),
+ be_str_weak(start_commissioning_complete_deferred),
&be_const_str_solidified,
( &(const binstruction[ 7]) { /* code */
0xB80A0000, // 0000 GETNGBL R2 K0
@@ -644,11 +1572,11 @@ be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
/********************************************************************
-** Solidified function: get_active_endpoints
+** Solidified function: start_operational_dicovery
********************************************************************/
-be_local_closure(Matter_Device_get_active_endpoints, /* name */
+be_local_closure(Matter_Device_start_operational_dicovery, /* name */
be_nested_proto(
- 11, /* nstack */
+ 8, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -656,325 +1584,49 @@ be_local_closure(Matter_Device_get_active_endpoints, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(plugins),
- /* K1 */ be_nested_str_weak(get_endpoints),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(find),
- /* K4 */ be_nested_str_weak(push),
- /* K5 */ be_nested_str_weak(stop_iteration),
+ ( &(const bvalue[13]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(mdns),
+ /* K2 */ be_nested_str_weak(string),
+ /* K3 */ be_nested_str_weak(salt),
+ /* K4 */ be_nested_str_weak(w0),
+ /* K5 */ be_nested_str_weak(w1),
+ /* K6 */ be_nested_str_weak(L),
+ /* K7 */ be_nested_str_weak(set_no_expiration),
+ /* K8 */ be_nested_str_weak(set_persist),
+ /* K9 */ be_nested_str_weak(close),
+ /* K10 */ be_nested_str_weak(sessions),
+ /* K11 */ be_nested_str_weak(save),
+ /* K12 */ be_nested_str_weak(mdns_announce_op_discovery),
}),
- be_str_weak(get_active_endpoints),
+ be_str_weak(start_operational_dicovery),
&be_const_str_solidified,
- ( &(const binstruction[38]) { /* code */
- 0x60080012, // 0000 GETGBL R2 G18
- 0x7C080000, // 0001 CALL R2 0
- 0x600C0010, // 0002 GETGBL R3 G16
- 0x88100100, // 0003 GETMBR R4 R0 K0
- 0x7C0C0200, // 0004 CALL R3 1
- 0xA802001B, // 0005 EXBLK 0 #0022
- 0x5C100600, // 0006 MOVE R4 R3
- 0x7C100000, // 0007 CALL R4 0
- 0x8C140901, // 0008 GETMET R5 R4 K1
- 0x7C140200, // 0009 CALL R5 1
- 0x60180010, // 000A GETGBL R6 G16
- 0x5C1C0A00, // 000B MOVE R7 R5
- 0x7C180200, // 000C CALL R6 1
- 0xA802000F, // 000D EXBLK 0 #001E
- 0x5C1C0C00, // 000E MOVE R7 R6
- 0x7C1C0000, // 000F CALL R7 0
- 0x78060002, // 0010 JMPF R1 #0014
- 0x1C200F02, // 0011 EQ R8 R7 K2
- 0x78220000, // 0012 JMPF R8 #0014
- 0x7001FFF9, // 0013 JMP #000E
- 0x8C200503, // 0014 GETMET R8 R2 K3
- 0x5C280E00, // 0015 MOVE R10 R7
- 0x7C200400, // 0016 CALL R8 2
- 0x4C240000, // 0017 LDNIL R9
- 0x1C201009, // 0018 EQ R8 R8 R9
- 0x78220002, // 0019 JMPF R8 #001D
- 0x8C200504, // 001A GETMET R8 R2 K4
- 0x5C280E00, // 001B MOVE R10 R7
- 0x7C200400, // 001C CALL R8 2
- 0x7001FFEF, // 001D JMP #000E
- 0x58180005, // 001E LDCONST R6 K5
- 0xAC180200, // 001F CATCH R6 1 0
- 0xB0080000, // 0020 RAISE 2 R0 R0
- 0x7001FFE3, // 0021 JMP #0006
- 0x580C0005, // 0022 LDCONST R3 K5
- 0xAC0C0200, // 0023 CATCH R3 1 0
- 0xB0080000, // 0024 RAISE 2 R0 R0
- 0x80040400, // 0025 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: msg_send
-********************************************************************/
-be_local_closure(Matter_Device_msg_send, /* name */
- be_nested_proto(
- 11, /* nstack */
- 5, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(send_response),
- }),
- be_str_weak(msg_send),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x88140100, // 0000 GETMBR R5 R0 K0
- 0x8C140B01, // 0001 GETMET R5 R5 K1
- 0x5C1C0200, // 0002 MOVE R7 R1
- 0x5C200400, // 0003 MOVE R8 R2
- 0x5C240600, // 0004 MOVE R9 R3
- 0x5C280800, // 0005 MOVE R10 R4
- 0x7C140A00, // 0006 CALL R5 5
- 0x80040A00, // 0007 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: finish_commissioning
-********************************************************************/
-be_local_closure(Matter_Device_finish_commissioning, /* 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(finish_commissioning),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: every_second
-********************************************************************/
-be_local_closure(Matter_Device_every_second, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(sessions),
- /* K1 */ be_nested_str_weak(every_second),
- /* K2 */ be_nested_str_weak(message_handler),
- }),
- be_str_weak(every_second),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x88040102, // 0003 GETMBR R1 R0 K2
- 0x8C040301, // 0004 GETMET R1 R1 K1
- 0x7C040200, // 0005 CALL R1 1
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: stop
-********************************************************************/
-be_local_closure(Matter_Device_stop, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(stop),
- }),
- be_str_weak(stop),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x78060002, // 0001 JMPF R1 #0005
- 0x88040100, // 0002 GETMBR R1 R0 K0
- 0x8C040301, // 0003 GETMET R1 R1 K1
- 0x7C040200, // 0004 CALL R1 1
- 0x80000000, // 0005 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_basic_commissioning
-********************************************************************/
-be_local_closure(Matter_Device_start_basic_commissioning, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(compute_pbkdf),
- /* K1 */ be_nested_str_weak(passcode),
- }),
- be_str_weak(start_basic_commissioning),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x8C040100, // 0000 GETMET R1 R0 K0
- 0x880C0101, // 0001 GETMBR R3 R0 K1
- 0x7C040400, // 0002 CALL R1 2
- 0x80000000, // 0003 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: load_param
-********************************************************************/
-be_local_closure(Matter_Device_load_param, /* name */
- be_nested_proto(
- 10, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[22]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(crypto),
- /* K2 */ be_nested_str_weak(FILENAME),
- /* K3 */ be_nested_str_weak(read),
- /* K4 */ be_nested_str_weak(close),
- /* K5 */ be_nested_str_weak(json),
- /* K6 */ be_nested_str_weak(load),
- /* K7 */ be_nested_str_weak(discriminator),
- /* K8 */ be_nested_str_weak(find),
- /* K9 */ be_nested_str_weak(distinguish),
- /* K10 */ be_nested_str_weak(passcode),
- /* K11 */ be_nested_str_weak(io_error),
- /* K12 */ be_nested_str_weak(tasmota),
- /* K13 */ be_nested_str_weak(log),
- /* K14 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Aload_X20Exception_X3A),
- /* K15 */ be_nested_str_weak(_X7C),
- /* K16 */ be_const_int(2),
- /* K17 */ be_nested_str_weak(random),
- /* K18 */ be_nested_str_weak(get),
- /* K19 */ be_const_int(0),
- /* K20 */ be_nested_str_weak(PASSCODE_DEFAULT),
- /* K21 */ be_nested_str_weak(save_param),
- }),
- be_str_weak(load_param),
- &be_const_str_solidified,
- ( &(const binstruction[70]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0xA8020014, // 0002 EXBLK 0 #0018
- 0x600C0011, // 0003 GETGBL R3 G17
- 0x88100102, // 0004 GETMBR R4 R0 K2
- 0x7C0C0200, // 0005 CALL R3 1
- 0x8C100703, // 0006 GETMET R4 R3 K3
- 0x7C100200, // 0007 CALL R4 1
- 0x8C140704, // 0008 GETMET R5 R3 K4
- 0x7C140200, // 0009 CALL R5 1
- 0xA4160A00, // 000A IMPORT R5 K5
- 0x8C180B06, // 000B GETMET R6 R5 K6
- 0x5C200800, // 000C MOVE R8 R4
- 0x7C180400, // 000D CALL R6 2
- 0x8C1C0D08, // 000E GETMET R7 R6 K8
- 0x58240009, // 000F LDCONST R9 K9
- 0x7C1C0400, // 0010 CALL R7 2
- 0x90020E07, // 0011 SETMBR R0 K7 R7
- 0x8C1C0D08, // 0012 GETMET R7 R6 K8
- 0x5824000A, // 0013 LDCONST R9 K10
- 0x7C1C0400, // 0014 CALL R7 2
- 0x90021407, // 0015 SETMBR R0 K10 R7
- 0xA8040001, // 0016 EXBLK 1 1
- 0x70020012, // 0017 JMP #002B
- 0xAC0C0002, // 0018 CATCH R3 0 2
- 0x7002000F, // 0019 JMP #002A
- 0x2014070B, // 001A NE R5 R3 K11
- 0x7816000C, // 001B JMPF R5 #0029
- 0xB8161800, // 001C GETNGBL R5 K12
- 0x8C140B0D, // 001D GETMET R5 R5 K13
- 0x601C0008, // 001E GETGBL R7 G8
- 0x5C200600, // 001F MOVE R8 R3
- 0x7C1C0200, // 0020 CALL R7 1
- 0x001E1C07, // 0021 ADD R7 K14 R7
- 0x001C0F0F, // 0022 ADD R7 R7 K15
- 0x60200008, // 0023 GETGBL R8 G8
- 0x5C240800, // 0024 MOVE R9 R4
- 0x7C200200, // 0025 CALL R8 1
- 0x001C0E08, // 0026 ADD R7 R7 R8
- 0x58200010, // 0027 LDCONST R8 K16
- 0x7C140600, // 0028 CALL R5 3
- 0x70020000, // 0029 JMP #002B
- 0xB0080000, // 002A RAISE 2 R0 R0
- 0x500C0000, // 002B LDBOOL R3 0 0
- 0x88100107, // 002C GETMBR R4 R0 K7
- 0x4C140000, // 002D LDNIL R5
- 0x1C100805, // 002E EQ R4 R4 R5
- 0x7812000A, // 002F JMPF R4 #003B
- 0x8C100511, // 0030 GETMET R4 R2 K17
- 0x58180010, // 0031 LDCONST R6 K16
- 0x7C100400, // 0032 CALL R4 2
- 0x8C100912, // 0033 GETMET R4 R4 K18
- 0x58180013, // 0034 LDCONST R6 K19
- 0x581C0010, // 0035 LDCONST R7 K16
- 0x7C100600, // 0036 CALL R4 3
- 0x54160FFE, // 0037 LDINT R5 4095
- 0x2C100805, // 0038 AND R4 R4 R5
- 0x90020E04, // 0039 SETMBR R0 K7 R4
- 0x500C0200, // 003A LDBOOL R3 1 0
- 0x8810010A, // 003B GETMBR R4 R0 K10
- 0x4C140000, // 003C LDNIL R5
- 0x1C100805, // 003D EQ R4 R4 R5
- 0x78120002, // 003E JMPF R4 #0042
- 0x88100114, // 003F GETMBR R4 R0 K20
- 0x90021404, // 0040 SETMBR R0 K10 R4
- 0x500C0200, // 0041 LDBOOL R3 1 0
- 0x780E0001, // 0042 JMPF R3 #0045
- 0x8C100115, // 0043 GETMET R4 R0 K21
- 0x7C100200, // 0044 CALL R4 1
- 0x80000000, // 0045 RET 0
+ ( &(const binstruction[25]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0xA4120400, // 0002 IMPORT R4 K2
+ 0x4C140000, // 0003 LDNIL R5
+ 0x90020605, // 0004 SETMBR R0 K3 R5
+ 0x4C140000, // 0005 LDNIL R5
+ 0x90020805, // 0006 SETMBR R0 K4 R5
+ 0x4C140000, // 0007 LDNIL R5
+ 0x90020A05, // 0008 SETMBR R0 K5 R5
+ 0x4C140000, // 0009 LDNIL R5
+ 0x90020C05, // 000A SETMBR R0 K6 R5
+ 0x8C140307, // 000B GETMET R5 R1 K7
+ 0x7C140200, // 000C CALL R5 1
+ 0x8C140308, // 000D GETMET R5 R1 K8
+ 0x501C0200, // 000E LDBOOL R7 1 0
+ 0x7C140400, // 000F CALL R5 2
+ 0x8C140309, // 0010 GETMET R5 R1 K9
+ 0x7C140200, // 0011 CALL R5 1
+ 0x8814010A, // 0012 GETMBR R5 R0 K10
+ 0x8C140B0B, // 0013 GETMET R5 R5 K11
+ 0x7C140200, // 0014 CALL R5 1
+ 0x8C14010C, // 0015 GETMET R5 R0 K12
+ 0x5C1C0200, // 0016 MOVE R7 R1
+ 0x7C140400, // 0017 CALL R5 2
+ 0x80000000, // 0018 RET 0
})
)
);
@@ -1394,81 +2046,303 @@ be_local_closure(Matter_Device_process_attribute_expansion, /* name */
/********************************************************************
-** Solidified function: sort_distinct
+** Solidified function: attribute_updated
********************************************************************/
-be_local_closure(Matter_Device_sort_distinct, /* name */
+be_local_closure(Matter_Device_attribute_updated, /* name */
be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 4, /* varg */
+ 10, /* nstack */
+ 5, /* 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_const_class(be_class_Matter_Device),
- /* K1 */ be_const_int(1),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(stop_iteration),
- /* K4 */ be_nested_str_weak(remove),
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(Path),
+ /* K2 */ be_nested_str_weak(endpoint),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(message_handler),
+ /* K6 */ be_nested_str_weak(im),
+ /* K7 */ be_nested_str_weak(subs),
+ /* K8 */ be_nested_str_weak(attribute_updated_ctx),
}),
- be_str_weak(sort_distinct),
+ be_str_weak(attribute_updated),
&be_const_str_solidified,
- ( &(const binstruction[53]) { /* code */
- 0x58040000, // 0000 LDCONST R1 K0
- 0x60080010, // 0001 GETGBL R2 G16
- 0x600C000C, // 0002 GETGBL R3 G12
- 0x5C100000, // 0003 MOVE R4 R0
- 0x7C0C0200, // 0004 CALL R3 1
- 0x040C0701, // 0005 SUB R3 R3 K1
- 0x400E0203, // 0006 CONNECT R3 K1 R3
- 0x7C080200, // 0007 CALL R2 1
- 0xA8020010, // 0008 EXBLK 0 #001A
- 0x5C0C0400, // 0009 MOVE R3 R2
- 0x7C0C0000, // 000A CALL R3 0
- 0x94100003, // 000B GETIDX R4 R0 R3
- 0x5C140600, // 000C MOVE R5 R3
- 0x24180B02, // 000D GT R6 R5 K2
- 0x781A0008, // 000E JMPF R6 #0018
- 0x04180B01, // 000F SUB R6 R5 K1
- 0x94180006, // 0010 GETIDX R6 R0 R6
- 0x24180C04, // 0011 GT R6 R6 R4
- 0x781A0004, // 0012 JMPF R6 #0018
- 0x04180B01, // 0013 SUB R6 R5 K1
- 0x94180006, // 0014 GETIDX R6 R0 R6
- 0x98000A06, // 0015 SETIDX R0 R5 R6
- 0x04140B01, // 0016 SUB R5 R5 K1
- 0x7001FFF4, // 0017 JMP #000D
- 0x98000A04, // 0018 SETIDX R0 R5 R4
- 0x7001FFEE, // 0019 JMP #0009
- 0x58080003, // 001A LDCONST R2 K3
- 0xAC080200, // 001B CATCH R2 1 0
- 0xB0080000, // 001C RAISE 2 R0 R0
- 0x58080001, // 001D LDCONST R2 K1
- 0x600C000C, // 001E GETGBL R3 G12
- 0x5C100000, // 001F MOVE R4 R0
- 0x7C0C0200, // 0020 CALL R3 1
- 0x180C0701, // 0021 LE R3 R3 K1
- 0x780E0000, // 0022 JMPF R3 #0024
- 0x80040000, // 0023 RET 1 R0
- 0x940C0102, // 0024 GETIDX R3 R0 K2
- 0x6010000C, // 0025 GETGBL R4 G12
- 0x5C140000, // 0026 MOVE R5 R0
- 0x7C100200, // 0027 CALL R4 1
- 0x14100404, // 0028 LT R4 R2 R4
- 0x78120009, // 0029 JMPF R4 #0034
- 0x94100002, // 002A GETIDX R4 R0 R2
- 0x1C100803, // 002B EQ R4 R4 R3
- 0x78120003, // 002C JMPF R4 #0031
- 0x8C100104, // 002D GETMET R4 R0 K4
- 0x5C180400, // 002E MOVE R6 R2
- 0x7C100400, // 002F CALL R4 2
- 0x70020001, // 0030 JMP #0033
- 0x940C0002, // 0031 GETIDX R3 R0 R2
- 0x00080501, // 0032 ADD R2 R2 K1
- 0x7001FFF0, // 0033 JMP #0025
- 0x80040000, // 0034 RET 1 R0
+ ( &(const binstruction[18]) { /* code */
+ 0x4C140000, // 0000 LDNIL R5
+ 0x1C140805, // 0001 EQ R5 R4 R5
+ 0x78160000, // 0002 JMPF R5 #0004
+ 0x50100000, // 0003 LDBOOL R4 0 0
+ 0xB8160000, // 0004 GETNGBL R5 K0
+ 0x8C140B01, // 0005 GETMET R5 R5 K1
+ 0x7C140200, // 0006 CALL R5 1
+ 0x90160401, // 0007 SETMBR R5 K2 R1
+ 0x90160602, // 0008 SETMBR R5 K3 R2
+ 0x90160803, // 0009 SETMBR R5 K4 R3
+ 0x88180105, // 000A GETMBR R6 R0 K5
+ 0x88180D06, // 000B GETMBR R6 R6 K6
+ 0x88180D07, // 000C GETMBR R6 R6 K7
+ 0x8C180D08, // 000D GETMET R6 R6 K8
+ 0x5C200A00, // 000E MOVE R8 R5
+ 0x5C240800, // 000F MOVE R9 R4
+ 0x7C180600, // 0010 CALL R6 3
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_Device_every_second, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_nested_str_weak(every_second),
+ /* K2 */ be_nested_str_weak(message_handler),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x88040102, // 0003 GETMBR R1 R0 K2
+ 0x8C040301, // 0004 GETMET R1 R1 K1
+ 0x7C040200, // 0005 CALL R1 1
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_250ms
+********************************************************************/
+be_local_closure(Matter_Device_every_250ms, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(message_handler),
+ /* K1 */ be_nested_str_weak(every_250ms),
+ }),
+ be_str_weak(every_250ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_operational_dicovery_deferred
+********************************************************************/
+be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 3, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 2]) { /* upvals */
+ be_local_const_upval(1, 0),
+ be_local_const_upval(1, 1),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(start_operational_dicovery),
+ }),
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x68080001, // 0002 GETUPV R2 U1
+ 0x7C000400, // 0003 CALL R0 2
+ 0x80040000, // 0004 RET 1 R0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(set_timer),
+ /* K2 */ be_const_int(0),
+ }),
+ be_str_weak(start_operational_dicovery_deferred),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x84140000, // 0003 CLOSURE R5 P0
+ 0x7C080600, // 0004 CALL R2 3
+ 0xA0000000, // 0005 CLOSE R0
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_commissioning_complete
+********************************************************************/
+be_local_closure(Matter_Device_start_commissioning_complete, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(log),
+ /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X20Commissioning_X20complete_X20_X2A_X2A_X2A),
+ /* K3 */ be_const_int(2),
+ }),
+ be_str_weak(start_commissioning_complete),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x58140003, // 0003 LDCONST R5 K3
+ 0x7C080600, // 0004 CALL R2 3
+ 0x80000000, // 0005 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: compute_manual_pairing_code
+********************************************************************/
+be_local_closure(Matter_Device_compute_manual_pairing_code, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(discriminator),
+ /* K2 */ be_nested_str_weak(passcode),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(_X251i_X2505i_X2504i),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(Verhoeff),
+ /* K7 */ be_nested_str_weak(checksum),
+ }),
+ be_str_weak(compute_manual_pairing_code),
+ &be_const_str_solidified,
+ ( &(const binstruction[31]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x540E0FFE, // 0002 LDINT R3 4095
+ 0x2C080403, // 0003 AND R2 R2 R3
+ 0x540E0009, // 0004 LDINT R3 10
+ 0x3C080403, // 0005 SHR R2 R2 R3
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x541202FF, // 0007 LDINT R4 768
+ 0x2C0C0604, // 0008 AND R3 R3 R4
+ 0x54120005, // 0009 LDINT R4 6
+ 0x380C0604, // 000A SHL R3 R3 R4
+ 0x88100102, // 000B GETMBR R4 R0 K2
+ 0x54163FFE, // 000C LDINT R5 16383
+ 0x2C100805, // 000D AND R4 R4 R5
+ 0x300C0604, // 000E OR R3 R3 R4
+ 0x88100102, // 000F GETMBR R4 R0 K2
+ 0x5416000D, // 0010 LDINT R5 14
+ 0x3C100805, // 0011 SHR R4 R4 R5
+ 0x8C140303, // 0012 GETMET R5 R1 K3
+ 0x581C0004, // 0013 LDCONST R7 K4
+ 0x5C200400, // 0014 MOVE R8 R2
+ 0x5C240600, // 0015 MOVE R9 R3
+ 0x5C280800, // 0016 MOVE R10 R4
+ 0x7C140A00, // 0017 CALL R5 5
+ 0xB81A0A00, // 0018 GETNGBL R6 K5
+ 0x88180D06, // 0019 GETMBR R6 R6 K6
+ 0x8C180D07, // 001A GETMET R6 R6 K7
+ 0x5C200A00, // 001B MOVE R8 R5
+ 0x7C180400, // 001C CALL R6 2
+ 0x00140A06, // 001D ADD R5 R5 R6
+ 0x80040A00, // 001E RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: stop
+********************************************************************/
+be_local_closure(Matter_Device_stop, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(udp_server),
+ /* K1 */ be_nested_str_weak(stop),
+ }),
+ be_str_weak(stop),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x78060002, // 0001 JMPF R1 #0005
+ 0x88040100, // 0002 GETMBR R1 R0 K0
+ 0x8C040301, // 0003 GETMET R1 R1 K1
+ 0x7C040200, // 0004 CALL R1 1
+ 0x80000000, // 0005 RET 0
})
)
);
@@ -1552,142 +2426,11 @@ be_local_closure(Matter_Device_compute_qrcode_content, /* name */
/********************************************************************
-** Solidified function: start_mdns_announce_hostnames
+** Solidified function: load_param
********************************************************************/
-be_local_closure(Matter_Device_start_mdns_announce_hostnames, /* name */
+be_local_closure(Matter_Device_load_param, /* name */
be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 2]) {
- be_nested_proto(
- 4, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(_start_mdns_announce),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(remove_rule),
- /* K3 */ be_nested_str_weak(Wifi_X23Connected),
- /* K4 */ be_nested_str_weak(matter_device_mdns),
- }),
- be_str_weak(_anonymous_),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x50080000, // 0002 LDBOOL R2 0 0
- 0x7C000400, // 0003 CALL R0 2
- 0xB8020200, // 0004 GETNGBL R0 K1
- 0x8C000102, // 0005 GETMET R0 R0 K2
- 0x58080003, // 0006 LDCONST R2 K3
- 0x580C0004, // 0007 LDCONST R3 K4
- 0x7C000600, // 0008 CALL R0 3
- 0x80000000, // 0009 RET 0
- })
- ),
- be_nested_proto(
- 4, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(_start_mdns_announce),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(remove_rule),
- /* K3 */ be_nested_str_weak(Eth_X23Connected),
- /* K4 */ be_nested_str_weak(matter_device_mdns),
- }),
- be_str_weak(_anonymous_),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x50080200, // 0002 LDBOOL R2 1 0
- 0x7C000400, // 0003 CALL R0 2
- 0xB8020200, // 0004 GETNGBL R0 K1
- 0x8C000102, // 0005 GETMET R0 R0 K2
- 0x58080003, // 0006 LDCONST R2 K3
- 0x580C0004, // 0007 LDCONST R3 K4
- 0x7C000600, // 0008 CALL R0 3
- 0x80000000, // 0009 RET 0
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(wifi),
- /* K2 */ be_nested_str_weak(up),
- /* K3 */ be_nested_str_weak(_start_mdns_announce),
- /* K4 */ be_nested_str_weak(add_rule),
- /* K5 */ be_nested_str_weak(Wifi_X23Connected),
- /* K6 */ be_nested_str_weak(eth),
- /* K7 */ be_nested_str_weak(Eth_X23Connected),
- }),
- be_str_weak(start_mdns_announce_hostnames),
- &be_const_str_solidified,
- ( &(const binstruction[32]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x94040302, // 0003 GETIDX R1 R1 K2
- 0x78060003, // 0004 JMPF R1 #0009
- 0x8C040103, // 0005 GETMET R1 R0 K3
- 0x500C0000, // 0006 LDBOOL R3 0 0
- 0x7C040400, // 0007 CALL R1 2
- 0x70020005, // 0008 JMP #000F
- 0xB8060000, // 0009 GETNGBL R1 K0
- 0x8C040304, // 000A GETMET R1 R1 K4
- 0x580C0005, // 000B LDCONST R3 K5
- 0x84100000, // 000C CLOSURE R4 P0
- 0x5C140000, // 000D MOVE R5 R0
- 0x7C040800, // 000E CALL R1 4
- 0xB8060000, // 000F GETNGBL R1 K0
- 0x8C040306, // 0010 GETMET R1 R1 K6
- 0x7C040200, // 0011 CALL R1 1
- 0x94040302, // 0012 GETIDX R1 R1 K2
- 0x78060003, // 0013 JMPF R1 #0018
- 0x8C040103, // 0014 GETMET R1 R0 K3
- 0x500C0200, // 0015 LDBOOL R3 1 0
- 0x7C040400, // 0016 CALL R1 2
- 0x70020005, // 0017 JMP #001E
- 0xB8060000, // 0018 GETNGBL R1 K0
- 0x8C040304, // 0019 GETMET R1 R1 K4
- 0x580C0007, // 001A LDCONST R3 K7
- 0x84100001, // 001B CLOSURE R4 P1
- 0x5C140000, // 001C MOVE R5 R0
- 0x7C040800, // 001D CALL R1 4
- 0xA0000000, // 001E CLOSE R0
- 0x80000000, // 001F RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: compute_manual_pairing_code
-********************************************************************/
-be_local_closure(Matter_Device_compute_manual_pairing_code, /* name */
- be_nested_proto(
- 11, /* nstack */
+ 12, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1695,50 +2438,113 @@ be_local_closure(Matter_Device_compute_manual_pairing_code, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
+ ( &(const bvalue[23]) { /* constants */
/* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(discriminator),
- /* K2 */ be_nested_str_weak(passcode),
- /* K3 */ be_nested_str_weak(format),
- /* K4 */ be_nested_str_weak(_X251i_X2505i_X2504i),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(Verhoeff),
- /* K7 */ be_nested_str_weak(checksum),
+ /* K1 */ be_nested_str_weak(crypto),
+ /* K2 */ be_nested_str_weak(FILENAME),
+ /* K3 */ be_nested_str_weak(read),
+ /* K4 */ be_nested_str_weak(close),
+ /* K5 */ be_nested_str_weak(json),
+ /* K6 */ be_nested_str_weak(load),
+ /* K7 */ be_nested_str_weak(discriminator),
+ /* K8 */ be_nested_str_weak(find),
+ /* K9 */ be_nested_str_weak(distinguish),
+ /* K10 */ be_nested_str_weak(passcode),
+ /* K11 */ be_nested_str_weak(ipv4only),
+ /* K12 */ be_nested_str_weak(io_error),
+ /* K13 */ be_nested_str_weak(tasmota),
+ /* K14 */ be_nested_str_weak(log),
+ /* K15 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Aload_X20Exception_X3A),
+ /* K16 */ be_nested_str_weak(_X7C),
+ /* K17 */ be_const_int(2),
+ /* K18 */ be_nested_str_weak(random),
+ /* K19 */ be_nested_str_weak(get),
+ /* K20 */ be_const_int(0),
+ /* K21 */ be_nested_str_weak(PASSCODE_DEFAULT),
+ /* K22 */ be_nested_str_weak(save_param),
}),
- be_str_weak(compute_manual_pairing_code),
+ be_str_weak(load_param),
&be_const_str_solidified,
- ( &(const binstruction[31]) { /* code */
+ ( &(const binstruction[79]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
- 0x88080101, // 0001 GETMBR R2 R0 K1
- 0x540E0FFE, // 0002 LDINT R3 4095
- 0x2C080403, // 0003 AND R2 R2 R3
- 0x540E0009, // 0004 LDINT R3 10
- 0x3C080403, // 0005 SHR R2 R2 R3
- 0x880C0101, // 0006 GETMBR R3 R0 K1
- 0x541202FF, // 0007 LDINT R4 768
- 0x2C0C0604, // 0008 AND R3 R3 R4
- 0x54120005, // 0009 LDINT R4 6
- 0x380C0604, // 000A SHL R3 R3 R4
- 0x88100102, // 000B GETMBR R4 R0 K2
- 0x54163FFE, // 000C LDINT R5 16383
- 0x2C100805, // 000D AND R4 R4 R5
- 0x300C0604, // 000E OR R3 R3 R4
- 0x88100102, // 000F GETMBR R4 R0 K2
- 0x5416000D, // 0010 LDINT R5 14
- 0x3C100805, // 0011 SHR R4 R4 R5
- 0x8C140303, // 0012 GETMET R5 R1 K3
- 0x581C0004, // 0013 LDCONST R7 K4
- 0x5C200400, // 0014 MOVE R8 R2
- 0x5C240600, // 0015 MOVE R9 R3
- 0x5C280800, // 0016 MOVE R10 R4
- 0x7C140A00, // 0017 CALL R5 5
- 0xB81A0A00, // 0018 GETNGBL R6 K5
- 0x88180D06, // 0019 GETMBR R6 R6 K6
- 0x8C180D07, // 001A GETMET R6 R6 K7
- 0x5C200A00, // 001B MOVE R8 R5
- 0x7C180400, // 001C CALL R6 2
- 0x00140A06, // 001D ADD R5 R5 R6
- 0x80040A00, // 001E RET 1 R5
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0xA802001D, // 0002 EXBLK 0 #0021
+ 0x600C0011, // 0003 GETGBL R3 G17
+ 0x88100102, // 0004 GETMBR R4 R0 K2
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x8C100703, // 0006 GETMET R4 R3 K3
+ 0x7C100200, // 0007 CALL R4 1
+ 0x8C140704, // 0008 GETMET R5 R3 K4
+ 0x7C140200, // 0009 CALL R5 1
+ 0xA4160A00, // 000A IMPORT R5 K5
+ 0x8C180B06, // 000B GETMET R6 R5 K6
+ 0x5C200800, // 000C MOVE R8 R4
+ 0x7C180400, // 000D CALL R6 2
+ 0x8C1C0D08, // 000E GETMET R7 R6 K8
+ 0x58240009, // 000F LDCONST R9 K9
+ 0x88280107, // 0010 GETMBR R10 R0 K7
+ 0x7C1C0600, // 0011 CALL R7 3
+ 0x90020E07, // 0012 SETMBR R0 K7 R7
+ 0x8C1C0D08, // 0013 GETMET R7 R6 K8
+ 0x5824000A, // 0014 LDCONST R9 K10
+ 0x8828010A, // 0015 GETMBR R10 R0 K10
+ 0x7C1C0600, // 0016 CALL R7 3
+ 0x90021407, // 0017 SETMBR R0 K10 R7
+ 0x601C0017, // 0018 GETGBL R7 G23
+ 0x8C200D08, // 0019 GETMET R8 R6 K8
+ 0x5828000B, // 001A LDCONST R10 K11
+ 0x502C0000, // 001B LDBOOL R11 0 0
+ 0x7C200600, // 001C CALL R8 3
+ 0x7C1C0200, // 001D CALL R7 1
+ 0x90021607, // 001E SETMBR R0 K11 R7
+ 0xA8040001, // 001F EXBLK 1 1
+ 0x70020012, // 0020 JMP #0034
+ 0xAC0C0002, // 0021 CATCH R3 0 2
+ 0x7002000F, // 0022 JMP #0033
+ 0x2014070C, // 0023 NE R5 R3 K12
+ 0x7816000C, // 0024 JMPF R5 #0032
+ 0xB8161A00, // 0025 GETNGBL R5 K13
+ 0x8C140B0E, // 0026 GETMET R5 R5 K14
+ 0x601C0008, // 0027 GETGBL R7 G8
+ 0x5C200600, // 0028 MOVE R8 R3
+ 0x7C1C0200, // 0029 CALL R7 1
+ 0x001E1E07, // 002A ADD R7 K15 R7
+ 0x001C0F10, // 002B ADD R7 R7 K16
+ 0x60200008, // 002C GETGBL R8 G8
+ 0x5C240800, // 002D MOVE R9 R4
+ 0x7C200200, // 002E CALL R8 1
+ 0x001C0E08, // 002F ADD R7 R7 R8
+ 0x58200011, // 0030 LDCONST R8 K17
+ 0x7C140600, // 0031 CALL R5 3
+ 0x70020000, // 0032 JMP #0034
+ 0xB0080000, // 0033 RAISE 2 R0 R0
+ 0x500C0000, // 0034 LDBOOL R3 0 0
+ 0x88100107, // 0035 GETMBR R4 R0 K7
+ 0x4C140000, // 0036 LDNIL R5
+ 0x1C100805, // 0037 EQ R4 R4 R5
+ 0x7812000A, // 0038 JMPF R4 #0044
+ 0x8C100512, // 0039 GETMET R4 R2 K18
+ 0x58180011, // 003A LDCONST R6 K17
+ 0x7C100400, // 003B CALL R4 2
+ 0x8C100913, // 003C GETMET R4 R4 K19
+ 0x58180014, // 003D LDCONST R6 K20
+ 0x581C0011, // 003E LDCONST R7 K17
+ 0x7C100600, // 003F CALL R4 3
+ 0x54160FFE, // 0040 LDINT R5 4095
+ 0x2C100805, // 0041 AND R4 R4 R5
+ 0x90020E04, // 0042 SETMBR R0 K7 R4
+ 0x500C0200, // 0043 LDBOOL R3 1 0
+ 0x8810010A, // 0044 GETMBR R4 R0 K10
+ 0x4C140000, // 0045 LDNIL R5
+ 0x1C100805, // 0046 EQ R4 R4 R5
+ 0x78120002, // 0047 JMPF R4 #004B
+ 0x88100115, // 0048 GETMBR R4 R0 K21
+ 0x90021404, // 0049 SETMBR R0 K10 R4
+ 0x500C0200, // 004A LDBOOL R3 1 0
+ 0x780E0001, // 004B JMPF R3 #004E
+ 0x8C100116, // 004C GETMET R4 R0 K22
+ 0x7C100200, // 004D CALL R4 1
+ 0x80000000, // 004E RET 0
})
)
);
@@ -1746,33 +2552,49 @@ be_local_closure(Matter_Device_compute_manual_pairing_code, /* name */
/********************************************************************
-** Solidified function: start_commissioning_complete
+** Solidified function: mdns_announce_op_discovery_all_sessions
********************************************************************/
-be_local_closure(Matter_Device_start_commissioning_complete, /* name */
+be_local_closure(Matter_Device_mdns_announce_op_discovery_all_sessions, /* name */
be_nested_proto(
6, /* nstack */
- 2, /* argc */
+ 1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(log),
- /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X20Commissioning_X20complete_X20_X2A_X2A_X2A),
- /* K3 */ be_const_int(2),
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_nested_str_weak(get_deviceid),
+ /* K2 */ be_nested_str_weak(get_fabric),
+ /* K3 */ be_nested_str_weak(mdns_announce_op_discovery),
+ /* K4 */ be_nested_str_weak(stop_iteration),
}),
- be_str_weak(start_commissioning_complete),
+ be_str_weak(mdns_announce_op_discovery_all_sessions),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x58100002, // 0002 LDCONST R4 K2
- 0x58140003, // 0003 LDCONST R5 K3
- 0x7C080600, // 0004 CALL R2 3
- 0x80000000, // 0005 RET 0
+ ( &(const binstruction[21]) { /* code */
+ 0x60040010, // 0000 GETGBL R1 G16
+ 0x88080100, // 0001 GETMBR R2 R0 K0
+ 0x88080500, // 0002 GETMBR R2 R2 K0
+ 0x7C040200, // 0003 CALL R1 1
+ 0xA802000B, // 0004 EXBLK 0 #0011
+ 0x5C080200, // 0005 MOVE R2 R1
+ 0x7C080000, // 0006 CALL R2 0
+ 0x8C0C0501, // 0007 GETMET R3 R2 K1
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0x780E0005, // 0009 JMPF R3 #0010
+ 0x8C0C0502, // 000A GETMET R3 R2 K2
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x780E0002, // 000C JMPF R3 #0010
+ 0x8C0C0103, // 000D GETMET R3 R0 K3
+ 0x5C140400, // 000E MOVE R5 R2
+ 0x7C0C0400, // 000F CALL R3 2
+ 0x7001FFF3, // 0010 JMP #0005
+ 0x58040004, // 0011 LDCONST R1 K4
+ 0xAC040200, // 0012 CATCH R1 1 0
+ 0xB0080000, // 0013 RAISE 2 R0 R0
+ 0x80000000, // 0014 RET 0
})
)
);
@@ -1780,525 +2602,12 @@ be_local_closure(Matter_Device_start_commissioning_complete, /* name */
/********************************************************************
-** Solidified function: start_commissioning_complete_deferred
+** Solidified function: msg_send
********************************************************************/
-be_local_closure(Matter_Device_start_commissioning_complete_deferred, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 1]) {
- be_nested_proto(
- 3, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 2]) { /* upvals */
- be_local_const_upval(1, 0),
- be_local_const_upval(1, 1),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(start_commissioning_complete),
- }),
- be_str_weak(_X3Clambda_X3E),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x68080001, // 0002 GETUPV R2 U1
- 0x7C000400, // 0003 CALL R0 2
- 0x80040000, // 0004 RET 1 R0
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(set_timer),
- /* K2 */ be_const_int(0),
- }),
- be_str_weak(start_commissioning_complete_deferred),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x58100002, // 0002 LDCONST R4 K2
- 0x84140000, // 0003 CLOSURE R5 P0
- 0x7C080600, // 0004 CALL R2 3
- 0xA0000000, // 0005 CLOSE R0
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: invoke_request
-********************************************************************/
-be_local_closure(Matter_Device_invoke_request, /* name */
+be_local_closure(Matter_Device_msg_send, /* name */
be_nested_proto(
11, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(plugins),
- /* K2 */ be_nested_str_weak(invoke_request),
- /* K3 */ be_nested_str_weak(status),
- /* K4 */ be_nested_str_weak(matter),
- /* K5 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
- /* K6 */ be_const_int(1),
- }),
- be_str_weak(invoke_request),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x58100000, // 0000 LDCONST R4 K0
- 0x6014000C, // 0001 GETGBL R5 G12
- 0x88180101, // 0002 GETMBR R6 R0 K1
- 0x7C140200, // 0003 CALL R5 1
- 0x14140805, // 0004 LT R5 R4 R5
- 0x78160011, // 0005 JMPF R5 #0018
- 0x88140101, // 0006 GETMBR R5 R0 K1
- 0x94140A04, // 0007 GETIDX R5 R5 R4
- 0x8C180B02, // 0008 GETMET R6 R5 K2
- 0x5C200200, // 0009 MOVE R8 R1
- 0x5C240400, // 000A MOVE R9 R2
- 0x5C280600, // 000B MOVE R10 R3
- 0x7C180800, // 000C CALL R6 4
- 0x4C1C0000, // 000D LDNIL R7
- 0x201C0C07, // 000E NE R7 R6 R7
- 0x741E0004, // 000F JMPT R7 #0015
- 0x881C0703, // 0010 GETMBR R7 R3 K3
- 0xB8220800, // 0011 GETNGBL R8 K4
- 0x88201105, // 0012 GETMBR R8 R8 K5
- 0x201C0E08, // 0013 NE R7 R7 R8
- 0x781E0000, // 0014 JMPF R7 #0016
- 0x80040C00, // 0015 RET 1 R6
- 0x00100906, // 0016 ADD R4 R4 K6
- 0x7001FFE8, // 0017 JMP #0001
- 0x80000000, // 0018 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: msg_received
-********************************************************************/
-be_local_closure(Matter_Device_msg_received, /* name */
- be_nested_proto(
- 9, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(message_handler),
- /* K1 */ be_nested_str_weak(msg_received),
- }),
- be_str_weak(msg_received),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x88100100, // 0000 GETMBR R4 R0 K0
- 0x8C100901, // 0001 GETMET R4 R4 K1
- 0x5C180200, // 0002 MOVE R6 R1
- 0x5C1C0400, // 0003 MOVE R7 R2
- 0x5C200600, // 0004 MOVE R8 R3
- 0x7C100800, // 0005 CALL R4 4
- 0x80040800, // 0006 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _start_mdns_announce
-********************************************************************/
-be_local_closure(Matter_Device__start_mdns_announce, /* name */
- be_nested_proto(
- 15, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[48]) { /* constants */
- /* K0 */ be_nested_str_weak(mdns),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(start),
- /* K3 */ be_nested_str_weak(VP),
- /* K4 */ be_nested_str_weak(vendorid),
- /* K5 */ be_nested_str_weak(_X2B),
- /* K6 */ be_nested_str_weak(productid),
- /* K7 */ be_nested_str_weak(D),
- /* K8 */ be_nested_str_weak(discriminator),
- /* K9 */ be_nested_str_weak(CM),
- /* K10 */ be_const_int(1),
- /* K11 */ be_nested_str_weak(T),
- /* K12 */ be_const_int(0),
- /* K13 */ be_nested_str_weak(SII),
- /* K14 */ be_nested_str_weak(SAI),
- /* K15 */ be_nested_str_weak(tasmota),
- /* K16 */ be_nested_str_weak(eth),
- /* K17 */ be_nested_str_weak(hostname_eth),
- /* K18 */ be_nested_str_weak(replace),
- /* K19 */ be_nested_str_weak(find),
- /* K20 */ be_nested_str_weak(mac),
- /* K21 */ be_nested_str_weak(_X3A),
- /* K22 */ be_nested_str_weak(),
- /* K23 */ be_nested_str_weak(add_hostname),
- /* K24 */ be_nested_str_weak(ip6local),
- /* K25 */ be_nested_str_weak(ip),
- /* K26 */ be_nested_str_weak(ip6),
- /* K27 */ be_nested_str_weak(add_service),
- /* K28 */ be_nested_str_weak(_matterc),
- /* K29 */ be_nested_str_weak(_udp),
- /* K30 */ be_nested_str_weak(commissioning_instance_eth),
- /* K31 */ be_nested_str_weak(log),
- /* K32 */ be_nested_str_weak(format),
- /* K33 */ be_nested_str_weak(MTR_X3A_X20starting_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27_X20ptr_X20to_X20_X60_X25s_X2Elocal_X60),
- /* K34 */ be_nested_str_weak(wifi),
- /* K35 */ be_nested_str_weak(commissioning_instance_wifi),
- /* K36 */ be_nested_str_weak(hostname_wifi),
- /* K37 */ be_const_int(2),
- /* K38 */ be_nested_str_weak(_L),
- /* K39 */ be_nested_str_weak(MTR_X3A_X20adding_X20subtype_X3A_X20),
- /* K40 */ be_const_int(3),
- /* K41 */ be_nested_str_weak(add_subtype),
- /* K42 */ be_nested_str_weak(_S),
- /* K43 */ be_nested_str_weak(_V),
- /* K44 */ be_nested_str_weak(_CM1),
- /* K45 */ be_nested_str_weak(MTR_X3A_X20Exception),
- /* K46 */ be_nested_str_weak(_X7C),
- /* K47 */ be_nested_str_weak(mdns_announce_op_discovery_all_sessions),
- }),
- be_str_weak(_start_mdns_announce),
- &be_const_str_solidified,
- ( &(const binstruction[292]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0xA40E0200, // 0001 IMPORT R3 K1
- 0x8C100502, // 0002 GETMET R4 R2 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x60100013, // 0004 GETGBL R4 G19
- 0x7C100000, // 0005 CALL R4 0
- 0x60140008, // 0006 GETGBL R5 G8
- 0x88180104, // 0007 GETMBR R6 R0 K4
- 0x7C140200, // 0008 CALL R5 1
- 0x00140B05, // 0009 ADD R5 R5 K5
- 0x60180008, // 000A GETGBL R6 G8
- 0x881C0106, // 000B GETMBR R7 R0 K6
- 0x7C180200, // 000C CALL R6 1
- 0x00140A06, // 000D ADD R5 R5 R6
- 0x98120605, // 000E SETIDX R4 K3 R5
- 0x88140108, // 000F GETMBR R5 R0 K8
- 0x98120E05, // 0010 SETIDX R4 K7 R5
- 0x9812130A, // 0011 SETIDX R4 K9 K10
- 0x9812170C, // 0012 SETIDX R4 K11 K12
- 0x54161387, // 0013 LDINT R5 5000
- 0x98121A05, // 0014 SETIDX R4 K13 R5
- 0x5416012B, // 0015 LDINT R5 300
- 0x98121C05, // 0016 SETIDX R4 K14 R5
- 0xA80200F7, // 0017 EXBLK 0 #0110
- 0x7806007A, // 0018 JMPF R1 #0094
- 0xB8161E00, // 0019 GETNGBL R5 K15
- 0x8C140B10, // 001A GETMET R5 R5 K16
- 0x7C140200, // 001B CALL R5 1
- 0x8C180712, // 001C GETMET R6 R3 K18
- 0x8C200B13, // 001D GETMET R8 R5 K19
- 0x58280014, // 001E LDCONST R10 K20
- 0x7C200400, // 001F CALL R8 2
- 0x58240015, // 0020 LDCONST R9 K21
- 0x58280016, // 0021 LDCONST R10 K22
- 0x7C180800, // 0022 CALL R6 4
- 0x90022206, // 0023 SETMBR R0 K17 R6
- 0x8C180517, // 0024 GETMET R6 R2 K23
- 0x88200111, // 0025 GETMBR R8 R0 K17
- 0x8C240B13, // 0026 GETMET R9 R5 K19
- 0x582C0018, // 0027 LDCONST R11 K24
- 0x58300016, // 0028 LDCONST R12 K22
- 0x7C240600, // 0029 CALL R9 3
- 0x8C280B13, // 002A GETMET R10 R5 K19
- 0x58300019, // 002B LDCONST R12 K25
- 0x58340016, // 002C LDCONST R13 K22
- 0x7C280600, // 002D CALL R10 3
- 0x8C2C0B13, // 002E GETMET R11 R5 K19
- 0x5834001A, // 002F LDCONST R13 K26
- 0x58380016, // 0030 LDCONST R14 K22
- 0x7C2C0600, // 0031 CALL R11 3
- 0x7C180A00, // 0032 CALL R6 5
- 0x8C18051B, // 0033 GETMET R6 R2 K27
- 0x5820001C, // 0034 LDCONST R8 K28
- 0x5824001D, // 0035 LDCONST R9 K29
- 0x542A15A3, // 0036 LDINT R10 5540
- 0x5C2C0800, // 0037 MOVE R11 R4
- 0x8830011E, // 0038 GETMBR R12 R0 K30
- 0x88340111, // 0039 GETMBR R13 R0 K17
- 0x7C180E00, // 003A CALL R6 7
- 0xB81A1E00, // 003B GETNGBL R6 K15
- 0x8C180D1F, // 003C GETMET R6 R6 K31
- 0x8C200720, // 003D GETMET R8 R3 K32
- 0x58280021, // 003E LDCONST R10 K33
- 0x78060001, // 003F JMPF R1 #0042
- 0x582C0010, // 0040 LDCONST R11 K16
- 0x70020000, // 0041 JMP #0043
- 0x582C0022, // 0042 LDCONST R11 K34
- 0x78060001, // 0043 JMPF R1 #0046
- 0x8830011E, // 0044 GETMBR R12 R0 K30
- 0x70020000, // 0045 JMP #0047
- 0x88300123, // 0046 GETMBR R12 R0 K35
- 0x78060001, // 0047 JMPF R1 #004A
- 0x88340111, // 0048 GETMBR R13 R0 K17
- 0x70020000, // 0049 JMP #004B
- 0x88340124, // 004A GETMBR R13 R0 K36
- 0x7C200A00, // 004B CALL R8 5
- 0x58240025, // 004C LDCONST R9 K37
- 0x7C180600, // 004D CALL R6 3
- 0x60180008, // 004E GETGBL R6 G8
- 0x881C0108, // 004F GETMBR R7 R0 K8
- 0x54220FFE, // 0050 LDINT R8 4095
- 0x2C1C0E08, // 0051 AND R7 R7 R8
- 0x7C180200, // 0052 CALL R6 1
- 0x001A4C06, // 0053 ADD R6 K38 R6
- 0xB81E1E00, // 0054 GETNGBL R7 K15
- 0x8C1C0F1F, // 0055 GETMET R7 R7 K31
- 0x00264E06, // 0056 ADD R9 K39 R6
- 0x58280028, // 0057 LDCONST R10 K40
- 0x7C1C0600, // 0058 CALL R7 3
- 0x8C1C0529, // 0059 GETMET R7 R2 K41
- 0x5824001C, // 005A LDCONST R9 K28
- 0x5828001D, // 005B LDCONST R10 K29
- 0x882C011E, // 005C GETMBR R11 R0 K30
- 0x88300111, // 005D GETMBR R12 R0 K17
- 0x5C340C00, // 005E MOVE R13 R6
- 0x7C1C0C00, // 005F CALL R7 6
- 0x601C0008, // 0060 GETGBL R7 G8
- 0x88200108, // 0061 GETMBR R8 R0 K8
- 0x54260EFF, // 0062 LDINT R9 3840
- 0x2C201009, // 0063 AND R8 R8 R9
- 0x54260007, // 0064 LDINT R9 8
- 0x3C201009, // 0065 SHR R8 R8 R9
- 0x7C1C0200, // 0066 CALL R7 1
- 0x001E5407, // 0067 ADD R7 K42 R7
- 0x5C180E00, // 0068 MOVE R6 R7
- 0xB81E1E00, // 0069 GETNGBL R7 K15
- 0x8C1C0F1F, // 006A GETMET R7 R7 K31
- 0x00264E06, // 006B ADD R9 K39 R6
- 0x58280028, // 006C LDCONST R10 K40
- 0x7C1C0600, // 006D CALL R7 3
- 0x8C1C0529, // 006E GETMET R7 R2 K41
- 0x5824001C, // 006F LDCONST R9 K28
- 0x5828001D, // 0070 LDCONST R10 K29
- 0x882C011E, // 0071 GETMBR R11 R0 K30
- 0x88300111, // 0072 GETMBR R12 R0 K17
- 0x5C340C00, // 0073 MOVE R13 R6
- 0x7C1C0C00, // 0074 CALL R7 6
- 0x601C0008, // 0075 GETGBL R7 G8
- 0x88200104, // 0076 GETMBR R8 R0 K4
- 0x7C1C0200, // 0077 CALL R7 1
- 0x001E5607, // 0078 ADD R7 K43 R7
- 0x5C180E00, // 0079 MOVE R6 R7
- 0xB81E1E00, // 007A GETNGBL R7 K15
- 0x8C1C0F1F, // 007B GETMET R7 R7 K31
- 0x00264E06, // 007C ADD R9 K39 R6
- 0x58280028, // 007D LDCONST R10 K40
- 0x7C1C0600, // 007E CALL R7 3
- 0x8C1C0529, // 007F GETMET R7 R2 K41
- 0x5824001C, // 0080 LDCONST R9 K28
- 0x5828001D, // 0081 LDCONST R10 K29
- 0x882C011E, // 0082 GETMBR R11 R0 K30
- 0x88300111, // 0083 GETMBR R12 R0 K17
- 0x5C340C00, // 0084 MOVE R13 R6
- 0x7C1C0C00, // 0085 CALL R7 6
- 0x5818002C, // 0086 LDCONST R6 K44
- 0xB81E1E00, // 0087 GETNGBL R7 K15
- 0x8C1C0F1F, // 0088 GETMET R7 R7 K31
- 0x00264E06, // 0089 ADD R9 K39 R6
- 0x58280028, // 008A LDCONST R10 K40
- 0x7C1C0600, // 008B CALL R7 3
- 0x8C1C0529, // 008C GETMET R7 R2 K41
- 0x5824001C, // 008D LDCONST R9 K28
- 0x5828001D, // 008E LDCONST R10 K29
- 0x882C011E, // 008F GETMBR R11 R0 K30
- 0x88300111, // 0090 GETMBR R12 R0 K17
- 0x5C340C00, // 0091 MOVE R13 R6
- 0x7C1C0C00, // 0092 CALL R7 6
- 0x70020079, // 0093 JMP #010E
- 0xB8161E00, // 0094 GETNGBL R5 K15
- 0x8C140B22, // 0095 GETMET R5 R5 K34
- 0x7C140200, // 0096 CALL R5 1
- 0x8C180712, // 0097 GETMET R6 R3 K18
- 0x8C200B13, // 0098 GETMET R8 R5 K19
- 0x58280014, // 0099 LDCONST R10 K20
- 0x7C200400, // 009A CALL R8 2
- 0x58240015, // 009B LDCONST R9 K21
- 0x58280016, // 009C LDCONST R10 K22
- 0x7C180800, // 009D CALL R6 4
- 0x90024806, // 009E SETMBR R0 K36 R6
- 0x8C180517, // 009F GETMET R6 R2 K23
- 0x88200124, // 00A0 GETMBR R8 R0 K36
- 0x8C240B13, // 00A1 GETMET R9 R5 K19
- 0x582C0018, // 00A2 LDCONST R11 K24
- 0x58300016, // 00A3 LDCONST R12 K22
- 0x7C240600, // 00A4 CALL R9 3
- 0x8C280B13, // 00A5 GETMET R10 R5 K19
- 0x58300019, // 00A6 LDCONST R12 K25
- 0x58340016, // 00A7 LDCONST R13 K22
- 0x7C280600, // 00A8 CALL R10 3
- 0x8C2C0B13, // 00A9 GETMET R11 R5 K19
- 0x5834001A, // 00AA LDCONST R13 K26
- 0x58380016, // 00AB LDCONST R14 K22
- 0x7C2C0600, // 00AC CALL R11 3
- 0x7C180A00, // 00AD CALL R6 5
- 0x8C18051B, // 00AE GETMET R6 R2 K27
- 0x5820001C, // 00AF LDCONST R8 K28
- 0x5824001D, // 00B0 LDCONST R9 K29
- 0x542A15A3, // 00B1 LDINT R10 5540
- 0x5C2C0800, // 00B2 MOVE R11 R4
- 0x88300123, // 00B3 GETMBR R12 R0 K35
- 0x88340124, // 00B4 GETMBR R13 R0 K36
- 0x7C180E00, // 00B5 CALL R6 7
- 0xB81A1E00, // 00B6 GETNGBL R6 K15
- 0x8C180D1F, // 00B7 GETMET R6 R6 K31
- 0x8C200720, // 00B8 GETMET R8 R3 K32
- 0x58280021, // 00B9 LDCONST R10 K33
- 0x78060001, // 00BA JMPF R1 #00BD
- 0x582C0010, // 00BB LDCONST R11 K16
- 0x70020000, // 00BC JMP #00BE
- 0x582C0022, // 00BD LDCONST R11 K34
- 0x78060001, // 00BE JMPF R1 #00C1
- 0x8830011E, // 00BF GETMBR R12 R0 K30
- 0x70020000, // 00C0 JMP #00C2
- 0x88300123, // 00C1 GETMBR R12 R0 K35
- 0x78060001, // 00C2 JMPF R1 #00C5
- 0x88340111, // 00C3 GETMBR R13 R0 K17
- 0x70020000, // 00C4 JMP #00C6
- 0x88340124, // 00C5 GETMBR R13 R0 K36
- 0x7C200A00, // 00C6 CALL R8 5
- 0x58240025, // 00C7 LDCONST R9 K37
- 0x7C180600, // 00C8 CALL R6 3
- 0x60180008, // 00C9 GETGBL R6 G8
- 0x881C0108, // 00CA GETMBR R7 R0 K8
- 0x54220FFE, // 00CB LDINT R8 4095
- 0x2C1C0E08, // 00CC AND R7 R7 R8
- 0x7C180200, // 00CD CALL R6 1
- 0x001A4C06, // 00CE ADD R6 K38 R6
- 0xB81E1E00, // 00CF GETNGBL R7 K15
- 0x8C1C0F1F, // 00D0 GETMET R7 R7 K31
- 0x00264E06, // 00D1 ADD R9 K39 R6
- 0x58280028, // 00D2 LDCONST R10 K40
- 0x7C1C0600, // 00D3 CALL R7 3
- 0x8C1C0529, // 00D4 GETMET R7 R2 K41
- 0x5824001C, // 00D5 LDCONST R9 K28
- 0x5828001D, // 00D6 LDCONST R10 K29
- 0x882C0123, // 00D7 GETMBR R11 R0 K35
- 0x88300124, // 00D8 GETMBR R12 R0 K36
- 0x5C340C00, // 00D9 MOVE R13 R6
- 0x7C1C0C00, // 00DA CALL R7 6
- 0x601C0008, // 00DB GETGBL R7 G8
- 0x88200108, // 00DC GETMBR R8 R0 K8
- 0x54260EFF, // 00DD LDINT R9 3840
- 0x2C201009, // 00DE AND R8 R8 R9
- 0x54260007, // 00DF LDINT R9 8
- 0x3C201009, // 00E0 SHR R8 R8 R9
- 0x7C1C0200, // 00E1 CALL R7 1
- 0x001E5407, // 00E2 ADD R7 K42 R7
- 0x5C180E00, // 00E3 MOVE R6 R7
- 0xB81E1E00, // 00E4 GETNGBL R7 K15
- 0x8C1C0F1F, // 00E5 GETMET R7 R7 K31
- 0x00264E06, // 00E6 ADD R9 K39 R6
- 0x58280028, // 00E7 LDCONST R10 K40
- 0x7C1C0600, // 00E8 CALL R7 3
- 0x8C1C0529, // 00E9 GETMET R7 R2 K41
- 0x5824001C, // 00EA LDCONST R9 K28
- 0x5828001D, // 00EB LDCONST R10 K29
- 0x882C0123, // 00EC GETMBR R11 R0 K35
- 0x88300124, // 00ED GETMBR R12 R0 K36
- 0x5C340C00, // 00EE MOVE R13 R6
- 0x7C1C0C00, // 00EF CALL R7 6
- 0x601C0008, // 00F0 GETGBL R7 G8
- 0x88200104, // 00F1 GETMBR R8 R0 K4
- 0x7C1C0200, // 00F2 CALL R7 1
- 0x001E5607, // 00F3 ADD R7 K43 R7
- 0x5C180E00, // 00F4 MOVE R6 R7
- 0xB81E1E00, // 00F5 GETNGBL R7 K15
- 0x8C1C0F1F, // 00F6 GETMET R7 R7 K31
- 0x00264E06, // 00F7 ADD R9 K39 R6
- 0x58280028, // 00F8 LDCONST R10 K40
- 0x7C1C0600, // 00F9 CALL R7 3
- 0x8C1C0529, // 00FA GETMET R7 R2 K41
- 0x5824001C, // 00FB LDCONST R9 K28
- 0x5828001D, // 00FC LDCONST R10 K29
- 0x882C0123, // 00FD GETMBR R11 R0 K35
- 0x88300124, // 00FE GETMBR R12 R0 K36
- 0x5C340C00, // 00FF MOVE R13 R6
- 0x7C1C0C00, // 0100 CALL R7 6
- 0x5818002C, // 0101 LDCONST R6 K44
- 0xB81E1E00, // 0102 GETNGBL R7 K15
- 0x8C1C0F1F, // 0103 GETMET R7 R7 K31
- 0x00264E06, // 0104 ADD R9 K39 R6
- 0x58280028, // 0105 LDCONST R10 K40
- 0x7C1C0600, // 0106 CALL R7 3
- 0x8C1C0529, // 0107 GETMET R7 R2 K41
- 0x5824001C, // 0108 LDCONST R9 K28
- 0x5828001D, // 0109 LDCONST R10 K29
- 0x882C0123, // 010A GETMBR R11 R0 K35
- 0x88300124, // 010B GETMBR R12 R0 K36
- 0x5C340C00, // 010C MOVE R13 R6
- 0x7C1C0C00, // 010D CALL R7 6
- 0xA8040001, // 010E EXBLK 1 1
- 0x70020010, // 010F JMP #0121
- 0xAC140002, // 0110 CATCH R5 0 2
- 0x7002000D, // 0111 JMP #0120
- 0xB81E1E00, // 0112 GETNGBL R7 K15
- 0x8C1C0F1F, // 0113 GETMET R7 R7 K31
- 0x60240008, // 0114 GETGBL R9 G8
- 0x5C280A00, // 0115 MOVE R10 R5
- 0x7C240200, // 0116 CALL R9 1
- 0x00265A09, // 0117 ADD R9 K45 R9
- 0x0024132E, // 0118 ADD R9 R9 K46
- 0x60280008, // 0119 GETGBL R10 G8
- 0x5C2C0C00, // 011A MOVE R11 R6
- 0x7C280200, // 011B CALL R10 1
- 0x0024120A, // 011C ADD R9 R9 R10
- 0x58280025, // 011D LDCONST R10 K37
- 0x7C1C0600, // 011E CALL R7 3
- 0x70020000, // 011F JMP #0121
- 0xB0080000, // 0120 RAISE 2 R0 R0
- 0x8C14012F, // 0121 GETMET R5 R0 K47
- 0x7C140200, // 0122 CALL R5 1
- 0x80000000, // 0123 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: packet_ack
-********************************************************************/
-be_local_closure(Matter_Device_packet_ack, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
+ 5, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -2307,16 +2616,19 @@ be_local_closure(Matter_Device_packet_ack, /* name */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(packet_ack),
+ /* K1 */ be_nested_str_weak(send_response),
}),
- be_str_weak(packet_ack),
+ be_str_weak(msg_send),
&be_const_str_solidified,
- ( &(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
+ ( &(const binstruction[ 8]) { /* code */
+ 0x88140100, // 0000 GETMBR R5 R0 K0
+ 0x8C140B01, // 0001 GETMET R5 R5 K1
+ 0x5C1C0200, // 0002 MOVE R7 R1
+ 0x5C200400, // 0003 MOVE R8 R2
+ 0x5C240600, // 0004 MOVE R9 R3
+ 0x5C280800, // 0005 MOVE R10 R4
+ 0x7C140A00, // 0006 CALL R5 5
+ 0x80040A00, // 0007 RET 1 R5
})
)
);
@@ -2324,11 +2636,11 @@ be_local_closure(Matter_Device_packet_ack, /* name */
/********************************************************************
-** Solidified function: mdns_announce_op_discovery
+** Solidified function: get_active_endpoints
********************************************************************/
-be_local_closure(Matter_Device_mdns_announce_op_discovery, /* name */
+be_local_closure(Matter_Device_get_active_endpoints, /* name */
be_nested_proto(
- 15, /* nstack */
+ 11, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -2336,249 +2648,55 @@ be_local_closure(Matter_Device_mdns_announce_op_discovery, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[29]) { /* constants */
- /* K0 */ be_nested_str_weak(mdns),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(get_deviceid),
- /* K3 */ be_nested_str_weak(copy),
- /* K4 */ be_nested_str_weak(reverse),
- /* K5 */ be_nested_str_weak(get_fabric_compressed),
- /* K6 */ be_nested_str_weak(tohex),
- /* K7 */ be_nested_str_weak(_X2D),
- /* K8 */ be_nested_str_weak(tasmota),
- /* K9 */ be_nested_str_weak(log),
- /* K10 */ be_nested_str_weak(MTR_X3A_X20Operational_X20Discovery_X20node_X20_X3D_X20),
- /* K11 */ be_const_int(2),
- /* K12 */ be_nested_str_weak(eth),
- /* K13 */ be_nested_str_weak(find),
- /* K14 */ be_nested_str_weak(up),
- /* K15 */ be_nested_str_weak(format),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20adding_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27_X20ptr_X20to_X20_X60_X25s_X2Elocal_X60),
- /* K17 */ be_nested_str_weak(hostname_eth),
- /* K18 */ be_const_int(3),
- /* K19 */ be_nested_str_weak(add_service),
- /* K20 */ be_nested_str_weak(_matter),
- /* K21 */ be_nested_str_weak(_tcp),
- /* K22 */ be_nested_str_weak(_I),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20adding_X20subtype_X3A_X20),
- /* K24 */ be_nested_str_weak(add_subtype),
- /* K25 */ be_nested_str_weak(wifi),
- /* K26 */ be_nested_str_weak(hostname_wifi),
- /* K27 */ be_nested_str_weak(MTR_X3A_X20Exception),
- /* K28 */ be_nested_str_weak(_X7C),
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(plugins),
+ /* K1 */ be_nested_str_weak(get_endpoints),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(find),
+ /* K4 */ be_nested_str_weak(push),
+ /* K5 */ be_nested_str_weak(stop_iteration),
}),
- be_str_weak(mdns_announce_op_discovery),
+ be_str_weak(get_active_endpoints),
&be_const_str_solidified,
- ( &(const binstruction[122]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0xA40E0200, // 0001 IMPORT R3 K1
- 0xA8020064, // 0002 EXBLK 0 #0068
- 0x8C100302, // 0003 GETMET R4 R1 K2
- 0x7C100200, // 0004 CALL R4 1
- 0x8C100903, // 0005 GETMET R4 R4 K3
- 0x7C100200, // 0006 CALL R4 1
- 0x8C100904, // 0007 GETMET R4 R4 K4
- 0x7C100200, // 0008 CALL R4 1
- 0x8C140305, // 0009 GETMET R5 R1 K5
- 0x7C140200, // 000A CALL R5 1
- 0x8C180B06, // 000B GETMET R6 R5 K6
+ ( &(const binstruction[38]) { /* code */
+ 0x60080012, // 0000 GETGBL R2 G18
+ 0x7C080000, // 0001 CALL R2 0
+ 0x600C0010, // 0002 GETGBL R3 G16
+ 0x88100100, // 0003 GETMBR R4 R0 K0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0xA802001B, // 0005 EXBLK 0 #0022
+ 0x5C100600, // 0006 MOVE R4 R3
+ 0x7C100000, // 0007 CALL R4 0
+ 0x8C140901, // 0008 GETMET R5 R4 K1
+ 0x7C140200, // 0009 CALL R5 1
+ 0x60180010, // 000A GETGBL R6 G16
+ 0x5C1C0A00, // 000B MOVE R7 R5
0x7C180200, // 000C CALL R6 1
- 0x00180D07, // 000D ADD R6 R6 K7
- 0x8C1C0906, // 000E GETMET R7 R4 K6
- 0x7C1C0200, // 000F CALL R7 1
- 0x00180C07, // 0010 ADD R6 R6 R7
- 0xB81E1000, // 0011 GETNGBL R7 K8
- 0x8C1C0F09, // 0012 GETMET R7 R7 K9
- 0x00261406, // 0013 ADD R9 K10 R6
- 0x5828000B, // 0014 LDCONST R10 K11
- 0x7C1C0600, // 0015 CALL R7 3
- 0xB81E1000, // 0016 GETNGBL R7 K8
- 0x8C1C0F0C, // 0017 GETMET R7 R7 K12
- 0x7C1C0200, // 0018 CALL R7 1
- 0x8C1C0F0D, // 0019 GETMET R7 R7 K13
- 0x5824000E, // 001A LDCONST R9 K14
- 0x7C1C0400, // 001B CALL R7 2
- 0x781E0020, // 001C JMPF R7 #003E
- 0xB81E1000, // 001D GETNGBL R7 K8
- 0x8C1C0F09, // 001E GETMET R7 R7 K9
- 0x8C24070F, // 001F GETMET R9 R3 K15
- 0x582C0010, // 0020 LDCONST R11 K16
- 0x5830000C, // 0021 LDCONST R12 K12
- 0x5C340C00, // 0022 MOVE R13 R6
- 0x88380111, // 0023 GETMBR R14 R0 K17
- 0x7C240A00, // 0024 CALL R9 5
- 0x58280012, // 0025 LDCONST R10 K18
- 0x7C1C0600, // 0026 CALL R7 3
- 0x8C1C0513, // 0027 GETMET R7 R2 K19
- 0x58240014, // 0028 LDCONST R9 K20
- 0x58280015, // 0029 LDCONST R10 K21
- 0x542E15A3, // 002A LDINT R11 5540
- 0x4C300000, // 002B LDNIL R12
- 0x5C340C00, // 002C MOVE R13 R6
- 0x88380111, // 002D GETMBR R14 R0 K17
- 0x7C1C0E00, // 002E CALL R7 7
- 0x8C1C0B06, // 002F GETMET R7 R5 K6
- 0x7C1C0200, // 0030 CALL R7 1
- 0x001E2C07, // 0031 ADD R7 K22 R7
- 0xB8221000, // 0032 GETNGBL R8 K8
- 0x8C201109, // 0033 GETMET R8 R8 K9
- 0x002A2E07, // 0034 ADD R10 K23 R7
- 0x582C0012, // 0035 LDCONST R11 K18
- 0x7C200600, // 0036 CALL R8 3
- 0x8C200518, // 0037 GETMET R8 R2 K24
- 0x58280014, // 0038 LDCONST R10 K20
- 0x582C0015, // 0039 LDCONST R11 K21
- 0x5C300C00, // 003A MOVE R12 R6
- 0x88340111, // 003B GETMBR R13 R0 K17
- 0x5C380E00, // 003C MOVE R14 R7
- 0x7C200C00, // 003D CALL R8 6
- 0xB81E1000, // 003E GETNGBL R7 K8
- 0x8C1C0F19, // 003F GETMET R7 R7 K25
- 0x7C1C0200, // 0040 CALL R7 1
- 0x8C1C0F0D, // 0041 GETMET R7 R7 K13
- 0x5824000E, // 0042 LDCONST R9 K14
- 0x7C1C0400, // 0043 CALL R7 2
- 0x781E0020, // 0044 JMPF R7 #0066
- 0xB81E1000, // 0045 GETNGBL R7 K8
- 0x8C1C0F09, // 0046 GETMET R7 R7 K9
- 0x8C24070F, // 0047 GETMET R9 R3 K15
- 0x582C0010, // 0048 LDCONST R11 K16
- 0x58300019, // 0049 LDCONST R12 K25
- 0x5C340C00, // 004A MOVE R13 R6
- 0x8838011A, // 004B GETMBR R14 R0 K26
- 0x7C240A00, // 004C CALL R9 5
- 0x58280012, // 004D LDCONST R10 K18
- 0x7C1C0600, // 004E CALL R7 3
- 0x8C1C0513, // 004F GETMET R7 R2 K19
- 0x58240014, // 0050 LDCONST R9 K20
- 0x58280015, // 0051 LDCONST R10 K21
- 0x542E15A3, // 0052 LDINT R11 5540
- 0x4C300000, // 0053 LDNIL R12
- 0x5C340C00, // 0054 MOVE R13 R6
- 0x8838011A, // 0055 GETMBR R14 R0 K26
- 0x7C1C0E00, // 0056 CALL R7 7
- 0x8C1C0B06, // 0057 GETMET R7 R5 K6
- 0x7C1C0200, // 0058 CALL R7 1
- 0x001E2C07, // 0059 ADD R7 K22 R7
- 0xB8221000, // 005A GETNGBL R8 K8
- 0x8C201109, // 005B GETMET R8 R8 K9
- 0x002A2E07, // 005C ADD R10 K23 R7
- 0x582C0012, // 005D LDCONST R11 K18
- 0x7C200600, // 005E CALL R8 3
- 0x8C200518, // 005F GETMET R8 R2 K24
- 0x58280014, // 0060 LDCONST R10 K20
- 0x582C0015, // 0061 LDCONST R11 K21
- 0x5C300C00, // 0062 MOVE R12 R6
- 0x8834011A, // 0063 GETMBR R13 R0 K26
- 0x5C380E00, // 0064 MOVE R14 R7
- 0x7C200C00, // 0065 CALL R8 6
- 0xA8040001, // 0066 EXBLK 1 1
- 0x70020010, // 0067 JMP #0079
- 0xAC100002, // 0068 CATCH R4 0 2
- 0x7002000D, // 0069 JMP #0078
- 0xB81A1000, // 006A GETNGBL R6 K8
- 0x8C180D09, // 006B GETMET R6 R6 K9
- 0x60200008, // 006C GETGBL R8 G8
- 0x5C240800, // 006D MOVE R9 R4
- 0x7C200200, // 006E CALL R8 1
- 0x00223608, // 006F ADD R8 K27 R8
- 0x0020111C, // 0070 ADD R8 R8 K28
- 0x60240008, // 0071 GETGBL R9 G8
- 0x5C280A00, // 0072 MOVE R10 R5
- 0x7C240200, // 0073 CALL R9 1
- 0x00201009, // 0074 ADD R8 R8 R9
- 0x5824000B, // 0075 LDCONST R9 K11
- 0x7C180600, // 0076 CALL R6 3
- 0x70020000, // 0077 JMP #0079
- 0xB0080000, // 0078 RAISE 2 R0 R0
- 0x80000000, // 0079 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_udp
-********************************************************************/
-be_local_closure(Matter_Device_start_udp, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 1]) {
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(msg_received),
- }),
- be_str_weak(_X3Clambda_X3E),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x680C0000, // 0000 GETUPV R3 U0
- 0x8C0C0700, // 0001 GETMET R3 R3 K0
- 0x5C140000, // 0002 MOVE R5 R0
- 0x5C180200, // 0003 MOVE R6 R1
- 0x5C1C0400, // 0004 MOVE R7 R2
- 0x7C0C0800, // 0005 CALL R3 4
- 0x80040600, // 0006 RET 1 R3
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
- /* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(MTR_X3A_X20starting_X20UDP_X20server_X20on_X20port_X3A_X20),
- /* K4 */ be_const_int(2),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(UDPServer),
- /* K7 */ be_nested_str_weak(),
- /* K8 */ be_nested_str_weak(start),
- }),
- be_str_weak(start_udp),
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x780A0000, // 0001 JMPF R2 #0003
- 0x80000400, // 0002 RET 0
- 0x4C080000, // 0003 LDNIL R2
- 0x1C080202, // 0004 EQ R2 R1 R2
- 0x780A0000, // 0005 JMPF R2 #0007
- 0x540615A3, // 0006 LDINT R1 5540
- 0xB80A0200, // 0007 GETNGBL R2 K1
- 0x8C080502, // 0008 GETMET R2 R2 K2
- 0x60100008, // 0009 GETGBL R4 G8
- 0x5C140200, // 000A MOVE R5 R1
- 0x7C100200, // 000B CALL R4 1
- 0x00120604, // 000C ADD R4 K3 R4
- 0x58140004, // 000D LDCONST R5 K4
- 0x7C080600, // 000E CALL R2 3
- 0xB80A0A00, // 000F GETNGBL R2 K5
- 0x8C080506, // 0010 GETMET R2 R2 K6
- 0x58100007, // 0011 LDCONST R4 K7
- 0x5C140200, // 0012 MOVE R5 R1
- 0x7C080600, // 0013 CALL R2 3
- 0x90020002, // 0014 SETMBR R0 K0 R2
- 0x88080100, // 0015 GETMBR R2 R0 K0
- 0x8C080508, // 0016 GETMET R2 R2 K8
- 0x84100000, // 0017 CLOSURE R4 P0
- 0x7C080400, // 0018 CALL R2 2
- 0xA0000000, // 0019 CLOSE R0
- 0x80000000, // 001A RET 0
+ 0xA802000F, // 000D EXBLK 0 #001E
+ 0x5C1C0C00, // 000E MOVE R7 R6
+ 0x7C1C0000, // 000F CALL R7 0
+ 0x78060002, // 0010 JMPF R1 #0014
+ 0x1C200F02, // 0011 EQ R8 R7 K2
+ 0x78220000, // 0012 JMPF R8 #0014
+ 0x7001FFF9, // 0013 JMP #000E
+ 0x8C200503, // 0014 GETMET R8 R2 K3
+ 0x5C280E00, // 0015 MOVE R10 R7
+ 0x7C200400, // 0016 CALL R8 2
+ 0x4C240000, // 0017 LDNIL R9
+ 0x1C201009, // 0018 EQ R8 R8 R9
+ 0x78220002, // 0019 JMPF R8 #001D
+ 0x8C200504, // 001A GETMET R8 R2 K4
+ 0x5C280E00, // 001B MOVE R10 R7
+ 0x7C200400, // 001C CALL R8 2
+ 0x7001FFEF, // 001D JMP #000E
+ 0x58180005, // 001E LDCONST R6 K5
+ 0xAC180200, // 001F CATCH R6 1 0
+ 0xB0080000, // 0020 RAISE 2 R0 R0
+ 0x7001FFE3, // 0021 JMP #0006
+ 0x580C0005, // 0022 LDCONST R3 K5
+ 0xAC0C0200, // 0023 CATCH R3 1 0
+ 0xB0080000, // 0024 RAISE 2 R0 R0
+ 0x80040400, // 0025 RET 1 R2
})
)
);
@@ -2589,60 +2707,63 @@ be_local_closure(Matter_Device_start_udp, /* name */
** Solidified class: Matter_Device
********************************************************************/
be_local_class(Matter_Device,
- 18,
+ 19,
NULL,
- be_nested_map(50,
+ be_nested_map(53,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(mdns_announce_op_discovery_all_sessions, -1), be_const_closure(Matter_Device_mdns_announce_op_discovery_all_sessions_closure) },
- { be_const_key_weak(salt, 31), be_const_var(14) },
- { be_const_key_weak(start_operational_dicovery, -1), be_const_closure(Matter_Device_start_operational_dicovery_closure) },
- { be_const_key_weak(w1, -1), be_const_var(16) },
- { be_const_key_weak(L, -1), be_const_var(17) },
- { be_const_key_weak(init, 42), be_const_closure(Matter_Device_init_closure) },
- { be_const_key_weak(compute_pbkdf, 12), be_const_closure(Matter_Device_compute_pbkdf_closure) },
- { be_const_key_weak(ui, 4), be_const_var(4) },
- { be_const_key_weak(UDP_PORT, -1), be_const_int(5540) },
- { be_const_key_weak(PASSCODE_DEFAULT, -1), be_const_int(20202021) },
- { be_const_key_weak(start_operational_dicovery_deferred, 43), be_const_closure(Matter_Device_start_operational_dicovery_deferred_closure) },
- { be_const_key_weak(productid, -1), be_const_var(10) },
+ { be_const_key_weak(discriminator, 16), be_const_var(11) },
+ { be_const_key_weak(w1, 37), be_const_var(17) },
{ be_const_key_weak(hostname_wifi, -1), be_const_var(7) },
- { be_const_key_weak(msg_send, -1), be_const_closure(Matter_Device_msg_send_closure) },
- { be_const_key_weak(finish_commissioning, -1), be_const_closure(Matter_Device_finish_commissioning_closure) },
- { be_const_key_weak(every_second, 27), be_const_closure(Matter_Device_every_second_closure) },
- { be_const_key_weak(commissioning_instance_wifi, -1), be_const_var(5) },
- { be_const_key_weak(stop, 29), be_const_closure(Matter_Device_stop_closure) },
- { be_const_key_weak(start_basic_commissioning, -1), be_const_closure(Matter_Device_start_basic_commissioning_closure) },
- { be_const_key_weak(load_param, -1), be_const_closure(Matter_Device_load_param_closure) },
- { be_const_key_weak(udp_server, -1), be_const_var(1) },
- { be_const_key_weak(plugins, -1), be_const_var(0) },
- { be_const_key_weak(FILENAME, 26), be_nested_str_weak(_matter_device_X2Ejson) },
- { be_const_key_weak(process_attribute_expansion, 30), be_const_closure(Matter_Device_process_attribute_expansion_closure) },
- { be_const_key_weak(PRODUCT_ID, -1), be_const_int(32768) },
- { be_const_key_weak(iterations, -1), be_const_var(13) },
- { be_const_key_weak(mdns_announce_op_discovery, 32), be_const_closure(Matter_Device_mdns_announce_op_discovery_closure) },
+ { be_const_key_weak(PASSCODE_DEFAULT, -1), be_const_int(20202021) },
+ { be_const_key_weak(udp_server, 28), be_const_var(1) },
+ { be_const_key_weak(msg_send, 40), be_const_closure(Matter_Device_msg_send_closure) },
+ { be_const_key_weak(mdns_announce_op_discovery_all_sessions, -1), be_const_closure(Matter_Device_mdns_announce_op_discovery_all_sessions_closure) },
{ be_const_key_weak(passcode, -1), be_const_var(12) },
- { be_const_key_weak(sessions, -1), be_const_var(3) },
- { be_const_key_weak(compute_qrcode_content, -1), be_const_closure(Matter_Device_compute_qrcode_content_closure) },
- { be_const_key_weak(packet_ack, -1), be_const_closure(Matter_Device_packet_ack_closure) },
- { be_const_key_weak(_start_mdns_announce, 36), be_const_closure(Matter_Device__start_mdns_announce_closure) },
- { be_const_key_weak(vendorid, 45), be_const_var(9) },
- { be_const_key_weak(discriminator, -1), be_const_var(11) },
- { be_const_key_weak(w0, -1), be_const_var(15) },
- { be_const_key_weak(start_commissioning_complete, -1), be_const_closure(Matter_Device_start_commissioning_complete_closure) },
- { be_const_key_weak(VENDOR_ID, -1), be_const_int(65521) },
- { be_const_key_weak(get_active_endpoints, 41), be_const_closure(Matter_Device_get_active_endpoints_closure) },
- { be_const_key_weak(msg_received, -1), be_const_closure(Matter_Device_msg_received_closure) },
- { be_const_key_weak(start_mdns_announce_hostnames, 40), be_const_closure(Matter_Device_start_mdns_announce_hostnames_closure) },
- { be_const_key_weak(message_handler, -1), be_const_var(2) },
- { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Device_invoke_request_closure) },
+ { be_const_key_weak(plugins, -1), be_const_var(0) },
+ { be_const_key_weak(invoke_request, 36), be_const_closure(Matter_Device_invoke_request_closure) },
+ { be_const_key_weak(packet_ack, 51), be_const_closure(Matter_Device_packet_ack_closure) },
+ { be_const_key_weak(salt, 29), be_const_var(15) },
+ { be_const_key_weak(start_udp, 31), be_const_closure(Matter_Device_start_udp_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Device_init_closure) },
+ { be_const_key_weak(load_param, -1), be_const_closure(Matter_Device_load_param_closure) },
+ { be_const_key_weak(mdns_announce_op_discovery, -1), be_const_closure(Matter_Device_mdns_announce_op_discovery_closure) },
{ be_const_key_weak(start_commissioning_complete_deferred, -1), be_const_closure(Matter_Device_start_commissioning_complete_deferred_closure) },
- { be_const_key_weak(compute_manual_pairing_code, -1), be_const_closure(Matter_Device_compute_manual_pairing_code_closure) },
- { be_const_key_weak(hostname_eth, -1), be_const_var(8) },
- { be_const_key_weak(commissioning_instance_eth, 46), be_const_var(6) },
- { be_const_key_weak(sort_distinct, -1), be_const_static_closure(Matter_Device_sort_distinct_closure) },
- { be_const_key_weak(start_udp, -1), be_const_closure(Matter_Device_start_udp_closure) },
- { be_const_key_weak(save_param, 8), be_const_closure(Matter_Device_save_param_closure) },
+ { be_const_key_weak(save_param, -1), be_const_closure(Matter_Device_save_param_closure) },
+ { be_const_key_weak(msg_received, 15), be_const_closure(Matter_Device_msg_received_closure) },
+ { be_const_key_weak(start_basic_commissioning, -1), be_const_closure(Matter_Device_start_basic_commissioning_closure) },
+ { be_const_key_weak(FILENAME, -1), be_nested_str_weak(_matter_device_X2Ejson) },
+ { be_const_key_weak(compute_pbkdf, -1), be_const_closure(Matter_Device_compute_pbkdf_closure) },
+ { be_const_key_weak(commissioning_instance_eth, -1), be_const_var(6) },
+ { be_const_key_weak(VENDOR_ID, -1), be_const_int(65521) },
+ { be_const_key_weak(hostname_eth, 41), be_const_var(8) },
+ { be_const_key_weak(start_mdns_announce_hostnames, -1), be_const_closure(Matter_Device_start_mdns_announce_hostnames_closure) },
{ be_const_key_weak(PBKDF_ITERATIONS, -1), be_const_int(1000) },
+ { be_const_key_weak(start_operational_dicovery, -1), be_const_closure(Matter_Device_start_operational_dicovery_closure) },
+ { be_const_key_weak(attribute_updated, 2), be_const_closure(Matter_Device_attribute_updated_closure) },
+ { be_const_key_weak(compute_manual_pairing_code, 38), be_const_closure(Matter_Device_compute_manual_pairing_code_closure) },
+ { be_const_key_weak(process_attribute_expansion, -1), be_const_closure(Matter_Device_process_attribute_expansion_closure) },
+ { be_const_key_weak(start_commissioning_complete, 22), be_const_closure(Matter_Device_start_commissioning_complete_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_Device_every_second_closure) },
+ { be_const_key_weak(sessions, -1), be_const_var(3) },
+ { be_const_key_weak(start_operational_dicovery_deferred, 27), be_const_closure(Matter_Device_start_operational_dicovery_deferred_closure) },
+ { be_const_key_weak(finish_commissioning, 5), be_const_closure(Matter_Device_finish_commissioning_closure) },
+ { be_const_key_weak(commissioning_instance_wifi, 45), be_const_var(5) },
+ { be_const_key_weak(message_handler, -1), be_const_var(2) },
+ { be_const_key_weak(PRODUCT_ID, 47), be_const_int(32768) },
+ { be_const_key_weak(ipv4only, 34), be_const_var(13) },
+ { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_Device_every_250ms_closure) },
+ { be_const_key_weak(iterations, 26), be_const_var(14) },
+ { be_const_key_weak(ui, -1), be_const_var(4) },
+ { be_const_key_weak(UDP_PORT, -1), be_const_int(5540) },
+ { be_const_key_weak(stop, -1), be_const_closure(Matter_Device_stop_closure) },
+ { be_const_key_weak(w0, -1), be_const_var(16) },
+ { be_const_key_weak(compute_qrcode_content, -1), be_const_closure(Matter_Device_compute_qrcode_content_closure) },
+ { be_const_key_weak(L, -1), be_const_var(18) },
+ { be_const_key_weak(vendorid, 14), be_const_var(9) },
+ { be_const_key_weak(sort_distinct, 8), be_const_static_closure(Matter_Device_sort_distinct_closure) },
+ { be_const_key_weak(productid, 6), be_const_var(10) },
+ { be_const_key_weak(_start_mdns_announce, -1), be_const_closure(Matter_Device__start_mdns_announce_closure) },
+ { be_const_key_weak(get_active_endpoints, -1), be_const_closure(Matter_Device_get_active_endpoints_closure) },
})),
be_str_weak(Matter_Device)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
index 75e7dbe16..cac81ef10 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
@@ -6,6 +6,651 @@
extern const bclass be_class_Matter_IM;
+/********************************************************************
+** Solidified function: process_timed_request
+********************************************************************/
+be_local_closure(Matter_IM_process_timed_request, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TimedRequestMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20TimedRequestMessage_X3D),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(format),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20TimedRequest_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K10 */ be_nested_str_weak(timeout),
+ /* K11 */ be_nested_str_weak(remote_ip),
+ /* K12 */ be_nested_str_weak(remote_port),
+ /* K13 */ be_const_int(2),
+ /* K14 */ be_nested_str_weak(send_status),
+ /* K15 */ be_nested_str_weak(SUCCESS),
+ }),
+ be_str_weak(process_timed_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0xB8160800, // 000F GETNGBL R5 K4
+ 0x8C140B05, // 0010 GETMET R5 R5 K5
+ 0x8C1C0708, // 0011 GETMET R7 R3 K8
+ 0x58240009, // 0012 LDCONST R9 K9
+ 0x8828090A, // 0013 GETMBR R10 R4 K10
+ 0x882C030B, // 0014 GETMBR R11 R1 K11
+ 0x8830030C, // 0015 GETMBR R12 R1 K12
+ 0x7C1C0A00, // 0016 CALL R7 5
+ 0x5820000D, // 0017 LDCONST R8 K13
+ 0x7C140600, // 0018 CALL R5 3
+ 0x8C14010E, // 0019 GETMET R5 R0 K14
+ 0x5C1C0200, // 001A MOVE R7 R1
+ 0xB8220200, // 001B GETNGBL R8 K1
+ 0x8820110F, // 001C GETMBR R8 R8 K15
+ 0x7C140600, // 001D CALL R5 3
+ 0x50140200, // 001E LDBOOL R5 1 0
+ 0x80040A00, // 001F RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_read_request
+********************************************************************/
+be_local_closure(Matter_IM_process_read_request, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(ReadRequestMessage),
+ /* K2 */ be_nested_str_weak(from_TLV),
+ /* K3 */ be_nested_str_weak(attributes_requests),
+ /* K4 */ be_nested_str_weak(_inner_process_read_request),
+ /* K5 */ be_nested_str_weak(session),
+ /* K6 */ be_nested_str_weak(send_report_data),
+ }),
+ be_str_weak(process_read_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[20]) { /* code */
+ 0xB80E0000, // 0000 GETNGBL R3 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0702, // 0003 GETMET R3 R3 K2
+ 0x5C140400, // 0004 MOVE R5 R2
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x88100703, // 0006 GETMBR R4 R3 K3
+ 0x4C140000, // 0007 LDNIL R5
+ 0x20100805, // 0008 NE R4 R4 R5
+ 0x78120007, // 0009 JMPF R4 #0012
+ 0x8C100104, // 000A GETMET R4 R0 K4
+ 0x88180305, // 000B GETMBR R6 R1 K5
+ 0x5C1C0600, // 000C MOVE R7 R3
+ 0x7C100600, // 000D CALL R4 3
+ 0x8C140106, // 000E GETMET R5 R0 K6
+ 0x5C1C0200, // 000F MOVE R7 R1
+ 0x5C200800, // 0010 MOVE R8 R4
+ 0x7C140600, // 0011 CALL R5 3
+ 0x50100200, // 0012 LDBOOL R4 1 0
+ 0x80040800, // 0013 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_subscribe_update
+********************************************************************/
+be_local_closure(Matter_IM_send_subscribe_update, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[25]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(ReadRequestMessage),
+ /* K4 */ be_nested_str_weak(fabric_filtered),
+ /* K5 */ be_nested_str_weak(attributes_requests),
+ /* K6 */ be_nested_str_weak(updates),
+ /* K7 */ be_nested_str_weak(AttributePathIB),
+ /* K8 */ be_nested_str_weak(endpoint),
+ /* K9 */ be_nested_str_weak(cluster),
+ /* K10 */ be_nested_str_weak(attribute),
+ /* K11 */ be_nested_str_weak(push),
+ /* K12 */ be_nested_str_weak(stop_iteration),
+ /* K13 */ be_nested_str_weak(tasmota),
+ /* K14 */ be_nested_str_weak(log),
+ /* K15 */ be_nested_str_weak(MTR_X3A_X20_X3CSub_ack_X20_X20_X20sub_id_X3D),
+ /* K16 */ be_nested_str_weak(subscription_id),
+ /* K17 */ be_const_int(2),
+ /* K18 */ be_nested_str_weak(_inner_process_read_request),
+ /* K19 */ be_nested_str_weak(suppress_response),
+ /* K20 */ be_const_int(0),
+ /* K21 */ be_nested_str_weak(send_queue),
+ /* K22 */ be_nested_str_weak(IM_ReportDataSubscribed),
+ /* K23 */ be_nested_str_weak(__message_handler),
+ /* K24 */ be_nested_str_weak(send_enqueued),
+ }),
+ be_str_weak(send_subscribe_update),
+ &be_const_str_solidified,
+ ( &(const binstruction[66]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0301, // 0001 GETMBR R3 R1 K1
+ 0xB8120400, // 0002 GETNGBL R4 K2
+ 0x8C100903, // 0003 GETMET R4 R4 K3
+ 0x7C100200, // 0004 CALL R4 1
+ 0x50140000, // 0005 LDBOOL R5 0 0
+ 0x90120805, // 0006 SETMBR R4 K4 R5
+ 0x60140012, // 0007 GETGBL R5 G18
+ 0x7C140000, // 0008 CALL R5 0
+ 0x90120A05, // 0009 SETMBR R4 K5 R5
+ 0x60140010, // 000A GETGBL R5 G16
+ 0x88180306, // 000B GETMBR R6 R1 K6
+ 0x7C140200, // 000C CALL R5 1
+ 0xA802000F, // 000D EXBLK 0 #001E
+ 0x5C180A00, // 000E MOVE R6 R5
+ 0x7C180000, // 000F CALL R6 0
+ 0xB81E0400, // 0010 GETNGBL R7 K2
+ 0x8C1C0F07, // 0011 GETMET R7 R7 K7
+ 0x7C1C0200, // 0012 CALL R7 1
+ 0x88200D08, // 0013 GETMBR R8 R6 K8
+ 0x901E1008, // 0014 SETMBR R7 K8 R8
+ 0x88200D09, // 0015 GETMBR R8 R6 K9
+ 0x901E1208, // 0016 SETMBR R7 K9 R8
+ 0x88200D0A, // 0017 GETMBR R8 R6 K10
+ 0x901E1408, // 0018 SETMBR R7 K10 R8
+ 0x88200905, // 0019 GETMBR R8 R4 K5
+ 0x8C20110B, // 001A GETMET R8 R8 K11
+ 0x5C280E00, // 001B MOVE R10 R7
+ 0x7C200400, // 001C CALL R8 2
+ 0x7001FFEF, // 001D JMP #000E
+ 0x5814000C, // 001E LDCONST R5 K12
+ 0xAC140200, // 001F CATCH R5 1 0
+ 0xB0080000, // 0020 RAISE 2 R0 R0
+ 0xB8161A00, // 0021 GETNGBL R5 K13
+ 0x8C140B0E, // 0022 GETMET R5 R5 K14
+ 0x601C0008, // 0023 GETGBL R7 G8
+ 0x88200310, // 0024 GETMBR R8 R1 K16
+ 0x7C1C0200, // 0025 CALL R7 1
+ 0x001E1E07, // 0026 ADD R7 K15 R7
+ 0x58200011, // 0027 LDCONST R8 K17
+ 0x7C140600, // 0028 CALL R5 3
+ 0x8C140112, // 0029 GETMET R5 R0 K18
+ 0x5C1C0600, // 002A MOVE R7 R3
+ 0x5C200800, // 002B MOVE R8 R4
+ 0x7C140600, // 002C CALL R5 3
+ 0x6018000C, // 002D GETGBL R6 G12
+ 0x881C0905, // 002E GETMBR R7 R4 K5
+ 0x7C180200, // 002F CALL R6 1
+ 0x1C180D14, // 0030 EQ R6 R6 K20
+ 0x90162606, // 0031 SETMBR R5 K19 R6
+ 0x88180310, // 0032 GETMBR R6 R1 K16
+ 0x90162006, // 0033 SETMBR R5 K16 R6
+ 0x88180115, // 0034 GETMBR R6 R0 K21
+ 0x8C180D0B, // 0035 GETMET R6 R6 K11
+ 0xB8220400, // 0036 GETNGBL R8 K2
+ 0x8C201116, // 0037 GETMET R8 R8 K22
+ 0x88280717, // 0038 GETMBR R10 R3 K23
+ 0x5C2C0600, // 0039 MOVE R11 R3
+ 0x5C300A00, // 003A MOVE R12 R5
+ 0x5C340200, // 003B MOVE R13 R1
+ 0x7C200A00, // 003C CALL R8 5
+ 0x7C180400, // 003D CALL R6 2
+ 0x8C180118, // 003E GETMET R6 R0 K24
+ 0x88200717, // 003F GETMBR R8 R3 K23
+ 0x7C180400, // 0040 CALL R6 2
+ 0x80000000, // 0041 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_write_response
+********************************************************************/
+be_local_closure(Matter_IM_send_write_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_WriteResponse),
+ }),
+ be_str_weak(send_write_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: subscribe_request
+********************************************************************/
+be_local_closure(Matter_IM_subscribe_request, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[18]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(SubscribeRequestMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(keep_subscriptions),
+ /* K5 */ be_nested_str_weak(subs),
+ /* K6 */ be_nested_str_weak(remove_by_session),
+ /* K7 */ be_nested_str_weak(session),
+ /* K8 */ be_nested_str_weak(tasmota),
+ /* K9 */ be_nested_str_weak(log),
+ /* K10 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeRequestMessage_X3D),
+ /* K11 */ be_const_int(3),
+ /* K12 */ be_nested_str_weak(new_subscription),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20_X3ESubscribe_X20sub_id_X3D),
+ /* K14 */ be_nested_str_weak(subscription_id),
+ /* K15 */ be_const_int(2),
+ /* K16 */ be_nested_str_weak(_inner_process_read_request),
+ /* K17 */ be_nested_str_weak(send_subscribe_response),
+ }),
+ be_str_weak(subscribe_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[47]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0x88140904, // 0007 GETMBR R5 R4 K4
+ 0x74160003, // 0008 JMPT R5 #000D
+ 0x88140105, // 0009 GETMBR R5 R0 K5
+ 0x8C140B06, // 000A GETMET R5 R5 K6
+ 0x881C0307, // 000B GETMBR R7 R1 K7
+ 0x7C140400, // 000C CALL R5 2
+ 0xB8161000, // 000D GETNGBL R5 K8
+ 0x8C140B09, // 000E GETMET R5 R5 K9
+ 0x601C0008, // 000F GETGBL R7 G8
+ 0x5C200800, // 0010 MOVE R8 R4
+ 0x7C1C0200, // 0011 CALL R7 1
+ 0x001E1407, // 0012 ADD R7 K10 R7
+ 0x5820000B, // 0013 LDCONST R8 K11
+ 0x7C140600, // 0014 CALL R5 3
+ 0x88140105, // 0015 GETMBR R5 R0 K5
+ 0x8C140B0C, // 0016 GETMET R5 R5 K12
+ 0x881C0307, // 0017 GETMBR R7 R1 K7
+ 0x5C200800, // 0018 MOVE R8 R4
+ 0x7C140600, // 0019 CALL R5 3
+ 0xB81A1000, // 001A GETNGBL R6 K8
+ 0x8C180D09, // 001B GETMET R6 R6 K9
+ 0x60200008, // 001C GETGBL R8 G8
+ 0x88240B0E, // 001D GETMBR R9 R5 K14
+ 0x7C200200, // 001E CALL R8 1
+ 0x00221A08, // 001F ADD R8 K13 R8
+ 0x5824000F, // 0020 LDCONST R9 K15
+ 0x7C180600, // 0021 CALL R6 3
+ 0x8C180110, // 0022 GETMET R6 R0 K16
+ 0x88200307, // 0023 GETMBR R8 R1 K7
+ 0x5C240800, // 0024 MOVE R9 R4
+ 0x7C180600, // 0025 CALL R6 3
+ 0x881C0B0E, // 0026 GETMBR R7 R5 K14
+ 0x901A1C07, // 0027 SETMBR R6 K14 R7
+ 0x8C1C0111, // 0028 GETMET R7 R0 K17
+ 0x5C240200, // 0029 MOVE R9 R1
+ 0x5C280C00, // 002A MOVE R10 R6
+ 0x5C2C0A00, // 002B MOVE R11 R5
+ 0x7C1C0800, // 002C CALL R7 4
+ 0x501C0200, // 002D LDBOOL R7 1 0
+ 0x80040E00, // 002E RET 1 R7
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_write_response
+********************************************************************/
+be_local_closure(Matter_IM_process_write_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(WriteResponseMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteResponseMessage_X3D),
+ /* K7 */ be_const_int(2),
+ }),
+ be_str_weak(process_write_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x50140000, // 000F LDBOOL R5 0 0
+ 0x80040A00, // 0010 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_incoming
+********************************************************************/
+be_local_closure(Matter_IM_process_incoming, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[27]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(log),
+ /* K2 */ be_nested_str_weak(MTR_X3A_X20received_X20IM_X20message_X20),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(inspect),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_nested_str_weak(TLV),
+ /* K7 */ be_nested_str_weak(parse),
+ /* K8 */ be_nested_str_weak(raw),
+ /* K9 */ be_nested_str_weak(app_payload_idx),
+ /* K10 */ be_nested_str_weak(MTR_X3A_X20IM_X20TLV_X3A_X20),
+ /* K11 */ be_nested_str_weak(findsubval),
+ /* K12 */ be_nested_str_weak(MTR_X3A_X20InteractionModelRevision_X3D),
+ /* K13 */ be_nested_str_weak(nil),
+ /* K14 */ be_nested_str_weak(opcode),
+ /* K15 */ be_const_int(1),
+ /* K16 */ be_nested_str_weak(process_status_response),
+ /* K17 */ be_const_int(2),
+ /* K18 */ be_nested_str_weak(process_read_request),
+ /* K19 */ be_nested_str_weak(subscribe_request),
+ /* K20 */ be_nested_str_weak(subscribe_response),
+ /* K21 */ be_nested_str_weak(report_data),
+ /* K22 */ be_nested_str_weak(process_write_request),
+ /* K23 */ be_nested_str_weak(process_write_response),
+ /* K24 */ be_nested_str_weak(process_invoke_request),
+ /* K25 */ be_nested_str_weak(process_invoke_response),
+ /* K26 */ be_nested_str_weak(process_timed_request),
+ }),
+ be_str_weak(process_incoming),
+ &be_const_str_solidified,
+ ( &(const binstruction[128]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0xB8120600, // 0002 GETNGBL R4 K3
+ 0x8C100904, // 0003 GETMET R4 R4 K4
+ 0x5C180200, // 0004 MOVE R6 R1
+ 0x7C100400, // 0005 CALL R4 2
+ 0x00120404, // 0006 ADD R4 K2 R4
+ 0x58140005, // 0007 LDCONST R5 K5
+ 0x7C080600, // 0008 CALL R2 3
+ 0xB80A0600, // 0009 GETNGBL R2 K3
+ 0x88080506, // 000A GETMBR R2 R2 K6
+ 0x8C080507, // 000B GETMET R2 R2 K7
+ 0x88100308, // 000C GETMBR R4 R1 K8
+ 0x88140309, // 000D GETMBR R5 R1 K9
+ 0x7C080600, // 000E CALL R2 3
+ 0xB80E0000, // 000F GETNGBL R3 K0
+ 0x8C0C0701, // 0010 GETMET R3 R3 K1
+ 0x60140008, // 0011 GETGBL R5 G8
+ 0x5C180400, // 0012 MOVE R6 R2
+ 0x7C140200, // 0013 CALL R5 1
+ 0x00161405, // 0014 ADD R5 K10 R5
+ 0x58180005, // 0015 LDCONST R6 K5
+ 0x7C0C0600, // 0016 CALL R3 3
+ 0x8C0C050B, // 0017 GETMET R3 R2 K11
+ 0x541600FE, // 0018 LDINT R5 255
+ 0x7C0C0400, // 0019 CALL R3 2
+ 0xB8120000, // 001A GETNGBL R4 K0
+ 0x8C100901, // 001B GETMET R4 R4 K1
+ 0x4C180000, // 001C LDNIL R6
+ 0x20180606, // 001D NE R6 R3 R6
+ 0x781A0003, // 001E JMPF R6 #0023
+ 0x60180008, // 001F GETGBL R6 G8
+ 0x5C1C0600, // 0020 MOVE R7 R3
+ 0x7C180200, // 0021 CALL R6 1
+ 0x70020000, // 0022 JMP #0024
+ 0x5818000D, // 0023 LDCONST R6 K13
+ 0x001A1806, // 0024 ADD R6 K12 R6
+ 0x541E0003, // 0025 LDINT R7 4
+ 0x7C100600, // 0026 CALL R4 3
+ 0x8810030E, // 0027 GETMBR R4 R1 K14
+ 0x1C14090F, // 0028 EQ R5 R4 K15
+ 0x78160005, // 0029 JMPF R5 #0030
+ 0x8C140110, // 002A GETMET R5 R0 K16
+ 0x5C1C0200, // 002B MOVE R7 R1
+ 0x5C200400, // 002C MOVE R8 R2
+ 0x7C140600, // 002D CALL R5 3
+ 0x80040A00, // 002E RET 1 R5
+ 0x7002004D, // 002F JMP #007E
+ 0x1C140911, // 0030 EQ R5 R4 K17
+ 0x78160005, // 0031 JMPF R5 #0038
+ 0x8C140112, // 0032 GETMET R5 R0 K18
+ 0x5C1C0200, // 0033 MOVE R7 R1
+ 0x5C200400, // 0034 MOVE R8 R2
+ 0x7C140600, // 0035 CALL R5 3
+ 0x80040A00, // 0036 RET 1 R5
+ 0x70020045, // 0037 JMP #007E
+ 0x1C140905, // 0038 EQ R5 R4 K5
+ 0x78160005, // 0039 JMPF R5 #0040
+ 0x8C140113, // 003A GETMET R5 R0 K19
+ 0x5C1C0200, // 003B MOVE R7 R1
+ 0x5C200400, // 003C MOVE R8 R2
+ 0x7C140600, // 003D CALL R5 3
+ 0x80040A00, // 003E RET 1 R5
+ 0x7002003D, // 003F JMP #007E
+ 0x54160003, // 0040 LDINT R5 4
+ 0x1C140805, // 0041 EQ R5 R4 R5
+ 0x78160005, // 0042 JMPF R5 #0049
+ 0x8C140114, // 0043 GETMET R5 R0 K20
+ 0x5C1C0200, // 0044 MOVE R7 R1
+ 0x5C200400, // 0045 MOVE R8 R2
+ 0x7C140600, // 0046 CALL R5 3
+ 0x80040A00, // 0047 RET 1 R5
+ 0x70020034, // 0048 JMP #007E
+ 0x54160004, // 0049 LDINT R5 5
+ 0x1C140805, // 004A EQ R5 R4 R5
+ 0x78160005, // 004B JMPF R5 #0052
+ 0x8C140115, // 004C GETMET R5 R0 K21
+ 0x5C1C0200, // 004D MOVE R7 R1
+ 0x5C200400, // 004E MOVE R8 R2
+ 0x7C140600, // 004F CALL R5 3
+ 0x80040A00, // 0050 RET 1 R5
+ 0x7002002B, // 0051 JMP #007E
+ 0x54160005, // 0052 LDINT R5 6
+ 0x1C140805, // 0053 EQ R5 R4 R5
+ 0x78160005, // 0054 JMPF R5 #005B
+ 0x8C140116, // 0055 GETMET R5 R0 K22
+ 0x5C1C0200, // 0056 MOVE R7 R1
+ 0x5C200400, // 0057 MOVE R8 R2
+ 0x7C140600, // 0058 CALL R5 3
+ 0x80040A00, // 0059 RET 1 R5
+ 0x70020022, // 005A JMP #007E
+ 0x54160006, // 005B LDINT R5 7
+ 0x1C140805, // 005C EQ R5 R4 R5
+ 0x78160005, // 005D JMPF R5 #0064
+ 0x8C140117, // 005E GETMET R5 R0 K23
+ 0x5C1C0200, // 005F MOVE R7 R1
+ 0x5C200400, // 0060 MOVE R8 R2
+ 0x7C140600, // 0061 CALL R5 3
+ 0x80040A00, // 0062 RET 1 R5
+ 0x70020019, // 0063 JMP #007E
+ 0x54160007, // 0064 LDINT R5 8
+ 0x1C140805, // 0065 EQ R5 R4 R5
+ 0x78160005, // 0066 JMPF R5 #006D
+ 0x8C140118, // 0067 GETMET R5 R0 K24
+ 0x5C1C0200, // 0068 MOVE R7 R1
+ 0x5C200400, // 0069 MOVE R8 R2
+ 0x7C140600, // 006A CALL R5 3
+ 0x80040A00, // 006B RET 1 R5
+ 0x70020010, // 006C JMP #007E
+ 0x54160008, // 006D LDINT R5 9
+ 0x1C140805, // 006E EQ R5 R4 R5
+ 0x78160005, // 006F JMPF R5 #0076
+ 0x8C140119, // 0070 GETMET R5 R0 K25
+ 0x5C1C0200, // 0071 MOVE R7 R1
+ 0x5C200400, // 0072 MOVE R8 R2
+ 0x7C140600, // 0073 CALL R5 3
+ 0x80040A00, // 0074 RET 1 R5
+ 0x70020007, // 0075 JMP #007E
+ 0x54160009, // 0076 LDINT R5 10
+ 0x1C140805, // 0077 EQ R5 R4 R5
+ 0x78160004, // 0078 JMPF R5 #007E
+ 0x8C14011A, // 0079 GETMET R5 R0 K26
+ 0x5C1C0200, // 007A MOVE R7 R1
+ 0x5C200400, // 007B MOVE R8 R2
+ 0x7C140600, // 007C CALL R5 3
+ 0x80040A00, // 007D RET 1 R5
+ 0x50140000, // 007E LDBOOL R5 0 0
+ 0x80040A00, // 007F RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_sendqueue_by_exchangeid
+********************************************************************/
+be_local_closure(Matter_IM_remove_sendqueue_by_exchangeid, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* 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_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(get_exchangeid),
+ /* K3 */ be_nested_str_weak(remove),
+ /* K4 */ be_const_int(1),
+ }),
+ be_str_weak(remove_sendqueue_by_exchangeid),
+ &be_const_str_solidified,
+ ( &(const binstruction[24]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0000, // 0002 JMPF R2 #0004
+ 0x80000400, // 0003 RET 0
+ 0x58080000, // 0004 LDCONST R2 K0
+ 0x600C000C, // 0005 GETGBL R3 G12
+ 0x88100101, // 0006 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0007 CALL R3 1
+ 0x140C0403, // 0008 LT R3 R2 R3
+ 0x780E000C, // 0009 JMPF R3 #0017
+ 0x880C0101, // 000A GETMBR R3 R0 K1
+ 0x940C0602, // 000B GETIDX R3 R3 R2
+ 0x8C0C0702, // 000C GETMET R3 R3 K2
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x1C0C0601, // 000E EQ R3 R3 R1
+ 0x780E0004, // 000F JMPF R3 #0015
+ 0x880C0101, // 0010 GETMBR R3 R0 K1
+ 0x8C0C0703, // 0011 GETMET R3 R3 K3
+ 0x5C140400, // 0012 MOVE R5 R2
+ 0x7C0C0400, // 0013 CALL R3 2
+ 0x70020000, // 0014 JMP #0016
+ 0x00080504, // 0015 ADD R2 R2 K4
+ 0x7001FFED, // 0016 JMP #0005
+ 0x80000000, // 0017 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: send_subscribe_response
********************************************************************/
@@ -45,360 +690,79 @@ be_local_closure(Matter_IM_send_subscribe_response, /* name */
/********************************************************************
-** Solidified function: process_write_request
+** Solidified function: process_status_response
********************************************************************/
-be_local_closure(Matter_IM_process_write_request, /* name */
+be_local_closure(Matter_IM_process_status_response, /* name */
be_nested_proto(
- 20, /* nstack */
+ 12, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 2]) {
- be_nested_proto(
- 19, /* nstack */
- 5, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 1),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[25]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(get_attribute_name),
- /* K3 */ be_nested_str_weak(cluster),
- /* K4 */ be_nested_str_weak(attribute),
- /* K5 */ be_nested_str_weak(_X20_X28),
- /* K6 */ be_nested_str_weak(_X29),
- /* K7 */ be_nested_str_weak(),
- /* K8 */ be_nested_str_weak(status),
- /* K9 */ be_nested_str_weak(UNSUPPORTED_WRITE),
- /* K10 */ be_nested_str_weak(write_attribute),
- /* K11 */ be_nested_str_weak(SUCCESS),
- /* K12 */ be_nested_str_weak(AttributeStatusIB),
- /* K13 */ be_nested_str_weak(path),
- /* K14 */ be_nested_str_weak(AttributePathIB),
- /* K15 */ be_nested_str_weak(StatusIB),
- /* K16 */ be_nested_str_weak(endpoint),
- /* K17 */ be_nested_str_weak(write_responses),
- /* K18 */ be_nested_str_weak(push),
- /* K19 */ be_nested_str_weak(tasmota),
- /* K20 */ be_nested_str_weak(log),
- /* K21 */ be_nested_str_weak(format),
- /* K22 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
- /* K23 */ be_const_int(2),
- /* K24 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20IGNORED),
- }),
- be_str_weak(write_single_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[96]) { /* code */
- 0xA4160000, // 0000 IMPORT R5 K0
- 0xB81A0200, // 0001 GETNGBL R6 K1
- 0x8C180D02, // 0002 GETMET R6 R6 K2
- 0x88200503, // 0003 GETMBR R8 R2 K3
- 0x88240504, // 0004 GETMBR R9 R2 K4
- 0x7C180600, // 0005 CALL R6 3
- 0x781A0002, // 0006 JMPF R6 #000A
- 0x001E0A06, // 0007 ADD R7 K5 R6
- 0x001C0F06, // 0008 ADD R7 R7 K6
- 0x70020000, // 0009 JMP #000B
- 0x581C0007, // 000A LDCONST R7 K7
- 0x5C180E00, // 000B MOVE R6 R7
- 0xB81E0200, // 000C GETNGBL R7 K1
- 0x881C0F09, // 000D GETMBR R7 R7 K9
- 0x900A1007, // 000E SETMBR R2 K8 R7
- 0x4C1C0000, // 000F LDNIL R7
- 0x201C0207, // 0010 NE R7 R1 R7
- 0x781E0005, // 0011 JMPF R7 #0018
- 0x8C1C030A, // 0012 GETMET R7 R1 K10
- 0x68240000, // 0013 GETUPV R9 U0
- 0x5C280400, // 0014 MOVE R10 R2
- 0x5C2C0600, // 0015 MOVE R11 R3
- 0x7C1C0800, // 0016 CALL R7 4
- 0x70020000, // 0017 JMP #0019
- 0x4C1C0000, // 0018 LDNIL R7
- 0x781E0002, // 0019 JMPF R7 #001D
- 0xB8220200, // 001A GETNGBL R8 K1
- 0x8820110B, // 001B GETMBR R8 R8 K11
- 0x900A1008, // 001C SETMBR R2 K8 R8
- 0x88200508, // 001D GETMBR R8 R2 K8
- 0x4C240000, // 001E LDNIL R9
- 0x20201009, // 001F NE R8 R8 R9
- 0x78220032, // 0020 JMPF R8 #0054
- 0x78120030, // 0021 JMPF R4 #0053
- 0xB8220200, // 0022 GETNGBL R8 K1
- 0x8C20110C, // 0023 GETMET R8 R8 K12
- 0x7C200200, // 0024 CALL R8 1
- 0xB8260200, // 0025 GETNGBL R9 K1
- 0x8C24130E, // 0026 GETMET R9 R9 K14
- 0x7C240200, // 0027 CALL R9 1
- 0x90221A09, // 0028 SETMBR R8 K13 R9
- 0xB8260200, // 0029 GETNGBL R9 K1
- 0x8C24130F, // 002A GETMET R9 R9 K15
- 0x7C240200, // 002B CALL R9 1
- 0x90221009, // 002C SETMBR R8 K8 R9
- 0x8824110D, // 002D GETMBR R9 R8 K13
- 0x88280510, // 002E GETMBR R10 R2 K16
- 0x9026200A, // 002F SETMBR R9 K16 R10
- 0x8824110D, // 0030 GETMBR R9 R8 K13
- 0x88280503, // 0031 GETMBR R10 R2 K3
- 0x9026060A, // 0032 SETMBR R9 K3 R10
- 0x8824110D, // 0033 GETMBR R9 R8 K13
- 0x88280504, // 0034 GETMBR R10 R2 K4
- 0x9026080A, // 0035 SETMBR R9 K4 R10
- 0x88241108, // 0036 GETMBR R9 R8 K8
- 0x88280508, // 0037 GETMBR R10 R2 K8
- 0x9026100A, // 0038 SETMBR R9 K8 R10
- 0x88240111, // 0039 GETMBR R9 R0 K17
- 0x8C241312, // 003A GETMET R9 R9 K18
- 0x5C2C1000, // 003B MOVE R11 R8
- 0x7C240400, // 003C CALL R9 2
- 0xB8262600, // 003D GETNGBL R9 K19
- 0x8C241314, // 003E GETMET R9 R9 K20
- 0x8C2C0B15, // 003F GETMET R11 R5 K21
- 0x58340016, // 0040 LDCONST R13 K22
- 0x60380008, // 0041 GETGBL R14 G8
- 0x5C3C0400, // 0042 MOVE R15 R2
- 0x7C380200, // 0043 CALL R14 1
- 0x5C3C0C00, // 0044 MOVE R15 R6
- 0x88400508, // 0045 GETMBR R16 R2 K8
- 0x88440508, // 0046 GETMBR R17 R2 K8
- 0xB84A0200, // 0047 GETNGBL R18 K1
- 0x8848250B, // 0048 GETMBR R18 R18 K11
- 0x1C442212, // 0049 EQ R17 R17 R18
- 0x78460001, // 004A JMPF R17 #004D
- 0x5844000B, // 004B LDCONST R17 K11
- 0x70020000, // 004C JMP #004E
- 0x58440007, // 004D LDCONST R17 K7
- 0x7C2C0C00, // 004E CALL R11 6
- 0x58300017, // 004F LDCONST R12 K23
- 0x7C240600, // 0050 CALL R9 3
- 0x50240200, // 0051 LDBOOL R9 1 0
- 0x80041200, // 0052 RET 1 R9
- 0x7002000A, // 0053 JMP #005F
- 0xB8222600, // 0054 GETNGBL R8 K19
- 0x8C201114, // 0055 GETMET R8 R8 K20
- 0x8C280B15, // 0056 GETMET R10 R5 K21
- 0x58300018, // 0057 LDCONST R12 K24
- 0x60340008, // 0058 GETGBL R13 G8
- 0x5C380400, // 0059 MOVE R14 R2
- 0x7C340200, // 005A CALL R13 1
- 0x5C380C00, // 005B MOVE R14 R6
- 0x7C280800, // 005C CALL R10 4
- 0x582C0017, // 005D LDCONST R11 K23
- 0x7C200600, // 005E CALL R8 3
- 0x80000000, // 005F RET 0
- })
- ),
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 3]) { /* upvals */
- be_local_const_upval(1, 7),
- be_local_const_upval(1, 9),
- be_local_const_upval(1, 13),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(_X3Clambda_X3E),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x680C0000, // 0000 GETUPV R3 U0
- 0x68100001, // 0001 GETUPV R4 U1
- 0x5C140000, // 0002 MOVE R5 R0
- 0x5C180200, // 0003 MOVE R6 R1
- 0x681C0002, // 0004 GETUPV R7 U2
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C0C0A00, // 0006 CALL R3 5
- 0x80040600, // 0007 RET 1 R3
- })
- ),
- }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[36]) { /* constants */
+ ( &(const bvalue[16]) { /* constants */
/* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(WriteRequestMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteRequestMessage_X3D),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(suppress_response),
- /* K9 */ be_nested_str_weak(device),
- /* K10 */ be_nested_str_weak(get_active_endpoints),
- /* K11 */ be_nested_str_weak(MTR_X3A_X20IM_X3Awrite_request_X20processing_X20start),
- /* K12 */ be_nested_str_weak(Path),
- /* K13 */ be_nested_str_weak(write_requests),
- /* K14 */ be_nested_str_weak(WriteResponseMessage),
- /* K15 */ be_nested_str_weak(write_responses),
- /* K16 */ be_nested_str_weak(path),
- /* K17 */ be_nested_str_weak(data),
- /* K18 */ be_nested_str_weak(endpoint),
- /* K19 */ be_nested_str_weak(cluster),
- /* K20 */ be_nested_str_weak(attribute),
- /* K21 */ be_nested_str_weak(status),
- /* K22 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
- /* K23 */ be_nested_str_weak(INVALID_ACTION),
- /* K24 */ be_nested_str_weak(get_attribute_name),
- /* K25 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20),
- /* K26 */ be_nested_str_weak(_X20_X28),
- /* K27 */ be_nested_str_weak(_X29),
- /* K28 */ be_nested_str_weak(),
- /* K29 */ be_const_int(2),
- /* K30 */ be_nested_str_weak(process_attribute_expansion),
- /* K31 */ be_nested_str_weak(stop_iteration),
- /* K32 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessage_X3D),
- /* K33 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessageTLV_X3D),
- /* K34 */ be_nested_str_weak(to_TLV),
- /* K35 */ be_nested_str_weak(send_write_response),
+ /* K1 */ be_nested_str_weak(findsubval),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
+ /* K4 */ be_nested_str_weak(exchange_id),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(SUCCESS),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(log),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus),
+ /* K10 */ be_const_int(2),
+ /* K11 */ be_nested_str_weak(ack_received),
+ /* K12 */ be_nested_str_weak(format),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_X20_X20_X20_X20ERROR_X20_X3D_X200x_X2502X),
+ /* K14 */ be_nested_str_weak(ack_error),
+ /* K15 */ be_nested_str_weak(remove_sendqueue_by_exchangeid),
}),
- be_str_weak(process_write_request),
+ be_str_weak(process_status_response),
&be_const_str_solidified,
- ( &(const binstruction[134]) { /* code */
+ ( &(const binstruction[40]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x88140908, // 000F GETMBR R5 R4 K8
- 0x88180109, // 0010 GETMBR R6 R0 K9
- 0x8C180D0A, // 0011 GETMET R6 R6 K10
- 0x7C180200, // 0012 CALL R6 1
- 0x841C0000, // 0013 CLOSURE R7 P0
- 0xB8220800, // 0014 GETNGBL R8 K4
- 0x8C201105, // 0015 GETMET R8 R8 K5
- 0x5828000B, // 0016 LDCONST R10 K11
- 0x542E0003, // 0017 LDINT R11 4
- 0x7C200600, // 0018 CALL R8 3
- 0xB8220200, // 0019 GETNGBL R8 K1
- 0x8C20110C, // 001A GETMET R8 R8 K12
- 0x7C200200, // 001B CALL R8 1
- 0x8824090D, // 001C GETMBR R9 R4 K13
- 0x4C280000, // 001D LDNIL R10
- 0x2024120A, // 001E NE R9 R9 R10
- 0x78260062, // 001F JMPF R9 #0083
- 0xB8260200, // 0020 GETNGBL R9 K1
- 0x8C24130E, // 0021 GETMET R9 R9 K14
- 0x7C240200, // 0022 CALL R9 1
- 0x60280012, // 0023 GETGBL R10 G18
- 0x7C280000, // 0024 CALL R10 0
- 0x90261E0A, // 0025 SETMBR R9 K15 R10
- 0x60280010, // 0026 GETGBL R10 G16
- 0x882C090D, // 0027 GETMBR R11 R4 K13
- 0x7C280200, // 0028 CALL R10 1
- 0xA802003D, // 0029 EXBLK 0 #0068
- 0x5C2C1400, // 002A MOVE R11 R10
- 0x7C2C0000, // 002B CALL R11 0
- 0x88301710, // 002C GETMBR R12 R11 K16
- 0x88341711, // 002D GETMBR R13 R11 K17
- 0x88381912, // 002E GETMBR R14 R12 K18
- 0x9022240E, // 002F SETMBR R8 K18 R14
- 0x88381913, // 0030 GETMBR R14 R12 K19
- 0x9022260E, // 0031 SETMBR R8 K19 R14
- 0x88381914, // 0032 GETMBR R14 R12 K20
- 0x9022280E, // 0033 SETMBR R8 K20 R14
- 0xB83A0200, // 0034 GETNGBL R14 K1
- 0x88381D16, // 0035 GETMBR R14 R14 K22
- 0x90222A0E, // 0036 SETMBR R8 K21 R14
- 0x88381113, // 0037 GETMBR R14 R8 K19
- 0x4C3C0000, // 0038 LDNIL R15
- 0x1C381C0F, // 0039 EQ R14 R14 R15
- 0x743A0003, // 003A JMPT R14 #003F
- 0x88381114, // 003B GETMBR R14 R8 K20
- 0x4C3C0000, // 003C LDNIL R15
- 0x1C381C0F, // 003D EQ R14 R14 R15
- 0x783A000A, // 003E JMPF R14 #004A
- 0xB83A0200, // 003F GETNGBL R14 K1
- 0x88381D17, // 0040 GETMBR R14 R14 K23
- 0x90222A0E, // 0041 SETMBR R8 K21 R14
- 0x5C380E00, // 0042 MOVE R14 R7
- 0x5C3C1200, // 0043 MOVE R15 R9
- 0x4C400000, // 0044 LDNIL R16
- 0x5C441000, // 0045 MOVE R17 R8
- 0x4C480000, // 0046 LDNIL R18
- 0x504C0200, // 0047 LDBOOL R19 1 0
- 0x7C380A00, // 0048 CALL R14 5
- 0x7001FFDF, // 0049 JMP #002A
- 0x88381112, // 004A GETMBR R14 R8 K18
- 0x4C3C0000, // 004B LDNIL R15
- 0x1C381C0F, // 004C EQ R14 R14 R15
- 0x783A0012, // 004D JMPF R14 #0061
- 0xB83A0200, // 004E GETNGBL R14 K1
- 0x8C381D18, // 004F GETMET R14 R14 K24
- 0x88401113, // 0050 GETMBR R16 R8 K19
- 0x88441114, // 0051 GETMBR R17 R8 K20
- 0x7C380600, // 0052 CALL R14 3
- 0xB83E0800, // 0053 GETNGBL R15 K4
- 0x8C3C1F05, // 0054 GETMET R15 R15 K5
- 0x60440008, // 0055 GETGBL R17 G8
- 0x5C481000, // 0056 MOVE R18 R8
- 0x7C440200, // 0057 CALL R17 1
- 0x00463211, // 0058 ADD R17 K25 R17
- 0x783A0002, // 0059 JMPF R14 #005D
- 0x004A340E, // 005A ADD R18 K26 R14
- 0x0048251B, // 005B ADD R18 R18 K27
- 0x70020000, // 005C JMP #005E
- 0x5848001C, // 005D LDCONST R18 K28
- 0x00442212, // 005E ADD R17 R17 R18
- 0x5848001D, // 005F LDCONST R18 K29
- 0x7C3C0600, // 0060 CALL R15 3
- 0x88380109, // 0061 GETMBR R14 R0 K9
- 0x8C381D1E, // 0062 GETMET R14 R14 K30
- 0x5C401000, // 0063 MOVE R16 R8
- 0x84440001, // 0064 CLOSURE R17 P1
- 0x7C380600, // 0065 CALL R14 3
- 0xA0280000, // 0066 CLOSE R10
- 0x7001FFC1, // 0067 JMP #002A
- 0x5828001F, // 0068 LDCONST R10 K31
- 0xAC280200, // 0069 CATCH R10 1 0
- 0xB0080000, // 006A RAISE 2 R0 R0
- 0xB82A0800, // 006B GETNGBL R10 K4
- 0x8C281505, // 006C GETMET R10 R10 K5
- 0x60300008, // 006D GETGBL R12 G8
- 0x5C341200, // 006E MOVE R13 R9
- 0x7C300200, // 006F CALL R12 1
- 0x0032400C, // 0070 ADD R12 K32 R12
- 0x54360003, // 0071 LDINT R13 4
- 0x7C280600, // 0072 CALL R10 3
- 0xB82A0800, // 0073 GETNGBL R10 K4
- 0x8C281505, // 0074 GETMET R10 R10 K5
- 0x60300008, // 0075 GETGBL R12 G8
- 0x8C341322, // 0076 GETMET R13 R9 K34
- 0x7C340200, // 0077 CALL R13 1
- 0x7C300200, // 0078 CALL R12 1
- 0x0032420C, // 0079 ADD R12 K33 R12
- 0x58340007, // 007A LDCONST R13 K7
- 0x7C280600, // 007B CALL R10 3
- 0x5C280A00, // 007C MOVE R10 R5
- 0x742A0003, // 007D JMPT R10 #0082
- 0x8C280123, // 007E GETMET R10 R0 K35
- 0x5C300200, // 007F MOVE R12 R1
- 0x5C341200, // 0080 MOVE R13 R9
- 0x7C280600, // 0081 CALL R10 3
- 0xA0240000, // 0082 CLOSE R9
- 0x50240200, // 0083 LDBOOL R9 1 0
- 0xA0000000, // 0084 CLOSE R0
- 0x80041200, // 0085 RET 1 R9
+ 0x8C100501, // 0001 GETMET R4 R2 K1
+ 0x58180002, // 0002 LDCONST R6 K2
+ 0x541E00FE, // 0003 LDINT R7 255
+ 0x7C100600, // 0004 CALL R4 3
+ 0x8C140103, // 0005 GETMET R5 R0 K3
+ 0x881C0304, // 0006 GETMBR R7 R1 K4
+ 0x7C140400, // 0007 CALL R5 2
+ 0xB81A0A00, // 0008 GETNGBL R6 K5
+ 0x88180D06, // 0009 GETMBR R6 R6 K6
+ 0x1C180806, // 000A EQ R6 R4 R6
+ 0x781A000A, // 000B JMPF R6 #0017
+ 0xB81A0E00, // 000C GETNGBL R6 K7
+ 0x8C180D08, // 000D GETMET R6 R6 K8
+ 0x58200009, // 000E LDCONST R8 K9
+ 0x5824000A, // 000F LDCONST R9 K10
+ 0x7C180600, // 0010 CALL R6 3
+ 0x78160003, // 0011 JMPF R5 #0016
+ 0x8C180B0B, // 0012 GETMET R6 R5 K11
+ 0x5C200200, // 0013 MOVE R8 R1
+ 0x7C180400, // 0014 CALL R6 2
+ 0x80040C00, // 0015 RET 1 R6
+ 0x7002000E, // 0016 JMP #0026
+ 0xB81A0E00, // 0017 GETNGBL R6 K7
+ 0x8C180D08, // 0018 GETMET R6 R6 K8
+ 0x8C20070C, // 0019 GETMET R8 R3 K12
+ 0x5828000D, // 001A LDCONST R10 K13
+ 0x5C2C0800, // 001B MOVE R11 R4
+ 0x7C200600, // 001C CALL R8 3
+ 0x5824000A, // 001D LDCONST R9 K10
+ 0x7C180600, // 001E CALL R6 3
+ 0x78160005, // 001F JMPF R5 #0026
+ 0x8C180B0E, // 0020 GETMET R6 R5 K14
+ 0x5C200200, // 0021 MOVE R8 R1
+ 0x7C180400, // 0022 CALL R6 2
+ 0x8C18010F, // 0023 GETMET R6 R0 K15
+ 0x88200304, // 0024 GETMBR R8 R1 K4
+ 0x7C180400, // 0025 CALL R6 2
+ 0x50180000, // 0026 LDBOOL R6 0 0
+ 0x80040C00, // 0027 RET 1 R6
})
)
);
@@ -625,7 +989,7 @@ be_local_closure(Matter_IM__inner_process_read_request, /* name */
0, /* varg */
1, /* has upvals */
( &(const bupvaldesc[ 2]) { /* upvals */
- be_local_const_upval(1, 4),
+ be_local_const_upval(1, 3),
be_local_const_upval(1, 6),
}),
0, /* has sup protos */
@@ -677,10 +1041,10 @@ be_local_closure(Matter_IM__inner_process_read_request, /* name */
be_str_weak(_inner_process_read_request),
&be_const_str_solidified,
( &(const binstruction[104]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0x7C0C0200, // 0002 CALL R3 1
- 0x84100000, // 0003 CLOSURE R4 P0
+ 0x840C0000, // 0000 CLOSURE R3 P0
+ 0x88100100, // 0001 GETMBR R4 R0 K0
+ 0x8C100901, // 0002 GETMET R4 R4 K1
+ 0x7C100200, // 0003 CALL R4 1
0xB8160400, // 0004 GETNGBL R5 K2
0x8C140B03, // 0005 GETMET R5 R5 K3
0x7C140200, // 0006 CALL R5 1
@@ -788,81 +1152,9 @@ be_local_closure(Matter_IM__inner_process_read_request, /* name */
/********************************************************************
-** Solidified function: process_timed_request
+** Solidified function: report_data
********************************************************************/
-be_local_closure(Matter_IM_process_timed_request, /* name */
- be_nested_proto(
- 13, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[16]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TimedRequestMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20TimedRequestMessage_X3D),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(format),
- /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20TimedRequest_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K10 */ be_nested_str_weak(timeout),
- /* K11 */ be_nested_str_weak(remote_ip),
- /* K12 */ be_nested_str_weak(remote_port),
- /* K13 */ be_const_int(2),
- /* K14 */ be_nested_str_weak(send_status),
- /* K15 */ be_nested_str_weak(SUCCESS),
- }),
- be_str_weak(process_timed_request),
- &be_const_str_solidified,
- ( &(const binstruction[32]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0xB8160800, // 000F GETNGBL R5 K4
- 0x8C140B05, // 0010 GETMET R5 R5 K5
- 0x8C1C0708, // 0011 GETMET R7 R3 K8
- 0x58240009, // 0012 LDCONST R9 K9
- 0x8828090A, // 0013 GETMBR R10 R4 K10
- 0x882C030B, // 0014 GETMBR R11 R1 K11
- 0x8830030C, // 0015 GETMBR R12 R1 K12
- 0x7C1C0A00, // 0016 CALL R7 5
- 0x5820000D, // 0017 LDCONST R8 K13
- 0x7C140600, // 0018 CALL R5 3
- 0x8C14010E, // 0019 GETMET R5 R0 K14
- 0x5C1C0200, // 001A MOVE R7 R1
- 0xB8220200, // 001B GETNGBL R8 K1
- 0x8820110F, // 001C GETMBR R8 R8 K15
- 0x7C140600, // 001D CALL R5 3
- 0x50140200, // 001E LDBOOL R5 1 0
- 0x80040A00, // 001F RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_write_response
-********************************************************************/
-be_local_closure(Matter_IM_process_write_response, /* name */
+be_local_closure(Matter_IM_report_data, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
@@ -875,14 +1167,14 @@ be_local_closure(Matter_IM_process_write_response, /* name */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(WriteResponseMessage),
+ /* K2 */ be_nested_str_weak(ReportDataMessage),
/* K3 */ be_nested_str_weak(from_TLV),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteResponseMessage_X3D),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20ReportDataMessage_X3D),
/* K7 */ be_const_int(2),
}),
- be_str_weak(process_write_response),
+ be_str_weak(report_data),
&be_const_str_solidified,
( &(const binstruction[17]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
@@ -908,334 +1200,6 @@ be_local_closure(Matter_IM_process_write_response, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: send_write_response
-********************************************************************/
-be_local_closure(Matter_IM_send_write_response, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_WriteResponse),
- }),
- be_str_weak(send_write_response),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_status
-********************************************************************/
-be_local_closure(Matter_IM_send_status, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_Status),
- }),
- be_str_weak(send_status),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: subscribe_response
-********************************************************************/
-be_local_closure(Matter_IM_subscribe_response, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(SubscribeResponseMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeResponsetMessage_X3D),
- /* K7 */ be_const_int(2),
- }),
- be_str_weak(subscribe_response),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_read_request
-********************************************************************/
-be_local_closure(Matter_IM_process_read_request, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(matter),
- /* K1 */ be_nested_str_weak(ReadRequestMessage),
- /* K2 */ be_nested_str_weak(from_TLV),
- /* K3 */ be_nested_str_weak(attributes_requests),
- /* K4 */ be_nested_str_weak(_inner_process_read_request),
- /* K5 */ be_nested_str_weak(send_report_data),
- }),
- be_str_weak(process_read_request),
- &be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
- 0xB80E0000, // 0000 GETNGBL R3 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C0702, // 0003 GETMET R3 R3 K2
- 0x5C140400, // 0004 MOVE R5 R2
- 0x7C0C0400, // 0005 CALL R3 2
- 0x88100703, // 0006 GETMBR R4 R3 K3
- 0x4C140000, // 0007 LDNIL R5
- 0x20100805, // 0008 NE R4 R4 R5
- 0x78120007, // 0009 JMPF R4 #0012
- 0x8C100104, // 000A GETMET R4 R0 K4
- 0x5C180200, // 000B MOVE R6 R1
- 0x5C1C0600, // 000C MOVE R7 R3
- 0x7C100600, // 000D CALL R4 3
- 0x8C140105, // 000E GETMET R5 R0 K5
- 0x5C1C0200, // 000F MOVE R7 R1
- 0x5C200800, // 0010 MOVE R8 R4
- 0x7C140600, // 0011 CALL R5 3
- 0x50100200, // 0012 LDBOOL R4 1 0
- 0x80040800, // 0013 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_report_data
-********************************************************************/
-be_local_closure(Matter_IM_send_report_data, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_ReportData),
- }),
- be_str_weak(send_report_data),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_IM_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* 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(device),
- /* K1 */ be_nested_str_weak(send_queue),
- /* K2 */ be_nested_str_weak(subs),
- /* K3 */ be_nested_str_weak(matter),
- /* K4 */ be_nested_str_weak(IM_Subscription_Shop),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x60080012, // 0001 GETGBL R2 G18
- 0x7C080000, // 0002 CALL R2 0
- 0x90020202, // 0003 SETMBR R0 K1 R2
- 0xB80A0600, // 0004 GETNGBL R2 K3
- 0x8C080504, // 0005 GETMET R2 R2 K4
- 0x5C100000, // 0006 MOVE R4 R0
- 0x7C080400, // 0007 CALL R2 2
- 0x90020402, // 0008 SETMBR R0 K2 R2
- 0x80000000, // 0009 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: subscribe_request
-********************************************************************/
-be_local_closure(Matter_IM_subscribe_request, /* name */
- be_nested_proto(
- 12, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[16]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(SubscribeRequestMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(keep_subscriptions),
- /* K5 */ be_nested_str_weak(subs),
- /* K6 */ be_nested_str_weak(remove_by_session),
- /* K7 */ be_nested_str_weak(session),
- /* K8 */ be_nested_str_weak(tasmota),
- /* K9 */ be_nested_str_weak(log),
- /* K10 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeRequestMessage_X3D),
- /* K11 */ be_const_int(3),
- /* K12 */ be_nested_str_weak(new_subscription),
- /* K13 */ be_nested_str_weak(_inner_process_read_request),
- /* K14 */ be_nested_str_weak(subscription_id),
- /* K15 */ be_nested_str_weak(send_subscribe_response),
- }),
- be_str_weak(subscribe_request),
- &be_const_str_solidified,
- ( &(const binstruction[39]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0x88140904, // 0007 GETMBR R5 R4 K4
- 0x74160003, // 0008 JMPT R5 #000D
- 0x88140105, // 0009 GETMBR R5 R0 K5
- 0x8C140B06, // 000A GETMET R5 R5 K6
- 0x881C0307, // 000B GETMBR R7 R1 K7
- 0x7C140400, // 000C CALL R5 2
- 0xB8161000, // 000D GETNGBL R5 K8
- 0x8C140B09, // 000E GETMET R5 R5 K9
- 0x601C0008, // 000F GETGBL R7 G8
- 0x5C200800, // 0010 MOVE R8 R4
- 0x7C1C0200, // 0011 CALL R7 1
- 0x001E1407, // 0012 ADD R7 K10 R7
- 0x5820000B, // 0013 LDCONST R8 K11
- 0x7C140600, // 0014 CALL R5 3
- 0x88140105, // 0015 GETMBR R5 R0 K5
- 0x8C140B0C, // 0016 GETMET R5 R5 K12
- 0x881C0307, // 0017 GETMBR R7 R1 K7
- 0x5C200800, // 0018 MOVE R8 R4
- 0x7C140600, // 0019 CALL R5 3
- 0x8C18010D, // 001A GETMET R6 R0 K13
- 0x5C200200, // 001B MOVE R8 R1
- 0x5C240800, // 001C MOVE R9 R4
- 0x7C180600, // 001D CALL R6 3
- 0x881C0B0E, // 001E GETMBR R7 R5 K14
- 0x901A1C07, // 001F SETMBR R6 K14 R7
- 0x8C1C010F, // 0020 GETMET R7 R0 K15
- 0x5C240200, // 0021 MOVE R9 R1
- 0x5C280C00, // 0022 MOVE R10 R6
- 0x5C2C0A00, // 0023 MOVE R11 R5
- 0x7C1C0800, // 0024 CALL R7 4
- 0x501C0200, // 0025 LDBOOL R7 1 0
- 0x80040E00, // 0026 RET 1 R7
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: send_enqueued
********************************************************************/
@@ -1291,6 +1255,721 @@ be_local_closure(Matter_IM_send_enqueued, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: process_invoke_response
+********************************************************************/
+be_local_closure(Matter_IM_process_invoke_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(InvokeResponseMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20InvokeResponseMessage_X3D),
+ /* K7 */ be_const_int(2),
+ }),
+ be_str_weak(process_invoke_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x50140000, // 000F LDBOOL R5 0 0
+ 0x80040A00, // 0010 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_write_request
+********************************************************************/
+be_local_closure(Matter_IM_process_write_request, /* name */
+ be_nested_proto(
+ 20, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 19, /* nstack */
+ 5, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 1),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[26]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(get_attribute_name),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(_X20_X28),
+ /* K6 */ be_nested_str_weak(_X29),
+ /* K7 */ be_nested_str_weak(),
+ /* K8 */ be_nested_str_weak(status),
+ /* K9 */ be_nested_str_weak(UNSUPPORTED_WRITE),
+ /* K10 */ be_nested_str_weak(write_attribute),
+ /* K11 */ be_nested_str_weak(session),
+ /* K12 */ be_nested_str_weak(SUCCESS),
+ /* K13 */ be_nested_str_weak(AttributeStatusIB),
+ /* K14 */ be_nested_str_weak(path),
+ /* K15 */ be_nested_str_weak(AttributePathIB),
+ /* K16 */ be_nested_str_weak(StatusIB),
+ /* K17 */ be_nested_str_weak(endpoint),
+ /* K18 */ be_nested_str_weak(write_responses),
+ /* K19 */ be_nested_str_weak(push),
+ /* K20 */ be_nested_str_weak(tasmota),
+ /* K21 */ be_nested_str_weak(log),
+ /* K22 */ be_nested_str_weak(format),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
+ /* K24 */ be_const_int(2),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20IGNORED),
+ }),
+ be_str_weak(write_single_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[97]) { /* code */
+ 0xA4160000, // 0000 IMPORT R5 K0
+ 0xB81A0200, // 0001 GETNGBL R6 K1
+ 0x8C180D02, // 0002 GETMET R6 R6 K2
+ 0x88200503, // 0003 GETMBR R8 R2 K3
+ 0x88240504, // 0004 GETMBR R9 R2 K4
+ 0x7C180600, // 0005 CALL R6 3
+ 0x781A0002, // 0006 JMPF R6 #000A
+ 0x001E0A06, // 0007 ADD R7 K5 R6
+ 0x001C0F06, // 0008 ADD R7 R7 K6
+ 0x70020000, // 0009 JMP #000B
+ 0x581C0007, // 000A LDCONST R7 K7
+ 0x5C180E00, // 000B MOVE R6 R7
+ 0xB81E0200, // 000C GETNGBL R7 K1
+ 0x881C0F09, // 000D GETMBR R7 R7 K9
+ 0x900A1007, // 000E SETMBR R2 K8 R7
+ 0x4C1C0000, // 000F LDNIL R7
+ 0x201C0207, // 0010 NE R7 R1 R7
+ 0x781E0006, // 0011 JMPF R7 #0019
+ 0x8C1C030A, // 0012 GETMET R7 R1 K10
+ 0x68240000, // 0013 GETUPV R9 U0
+ 0x8824130B, // 0014 GETMBR R9 R9 K11
+ 0x5C280400, // 0015 MOVE R10 R2
+ 0x5C2C0600, // 0016 MOVE R11 R3
+ 0x7C1C0800, // 0017 CALL R7 4
+ 0x70020000, // 0018 JMP #001A
+ 0x4C1C0000, // 0019 LDNIL R7
+ 0x781E0002, // 001A JMPF R7 #001E
+ 0xB8220200, // 001B GETNGBL R8 K1
+ 0x8820110C, // 001C GETMBR R8 R8 K12
+ 0x900A1008, // 001D SETMBR R2 K8 R8
+ 0x88200508, // 001E GETMBR R8 R2 K8
+ 0x4C240000, // 001F LDNIL R9
+ 0x20201009, // 0020 NE R8 R8 R9
+ 0x78220032, // 0021 JMPF R8 #0055
+ 0x78120030, // 0022 JMPF R4 #0054
+ 0xB8220200, // 0023 GETNGBL R8 K1
+ 0x8C20110D, // 0024 GETMET R8 R8 K13
+ 0x7C200200, // 0025 CALL R8 1
+ 0xB8260200, // 0026 GETNGBL R9 K1
+ 0x8C24130F, // 0027 GETMET R9 R9 K15
+ 0x7C240200, // 0028 CALL R9 1
+ 0x90221C09, // 0029 SETMBR R8 K14 R9
+ 0xB8260200, // 002A GETNGBL R9 K1
+ 0x8C241310, // 002B GETMET R9 R9 K16
+ 0x7C240200, // 002C CALL R9 1
+ 0x90221009, // 002D SETMBR R8 K8 R9
+ 0x8824110E, // 002E GETMBR R9 R8 K14
+ 0x88280511, // 002F GETMBR R10 R2 K17
+ 0x9026220A, // 0030 SETMBR R9 K17 R10
+ 0x8824110E, // 0031 GETMBR R9 R8 K14
+ 0x88280503, // 0032 GETMBR R10 R2 K3
+ 0x9026060A, // 0033 SETMBR R9 K3 R10
+ 0x8824110E, // 0034 GETMBR R9 R8 K14
+ 0x88280504, // 0035 GETMBR R10 R2 K4
+ 0x9026080A, // 0036 SETMBR R9 K4 R10
+ 0x88241108, // 0037 GETMBR R9 R8 K8
+ 0x88280508, // 0038 GETMBR R10 R2 K8
+ 0x9026100A, // 0039 SETMBR R9 K8 R10
+ 0x88240112, // 003A GETMBR R9 R0 K18
+ 0x8C241313, // 003B GETMET R9 R9 K19
+ 0x5C2C1000, // 003C MOVE R11 R8
+ 0x7C240400, // 003D CALL R9 2
+ 0xB8262800, // 003E GETNGBL R9 K20
+ 0x8C241315, // 003F GETMET R9 R9 K21
+ 0x8C2C0B16, // 0040 GETMET R11 R5 K22
+ 0x58340017, // 0041 LDCONST R13 K23
+ 0x60380008, // 0042 GETGBL R14 G8
+ 0x5C3C0400, // 0043 MOVE R15 R2
+ 0x7C380200, // 0044 CALL R14 1
+ 0x5C3C0C00, // 0045 MOVE R15 R6
+ 0x88400508, // 0046 GETMBR R16 R2 K8
+ 0x88440508, // 0047 GETMBR R17 R2 K8
+ 0xB84A0200, // 0048 GETNGBL R18 K1
+ 0x8848250C, // 0049 GETMBR R18 R18 K12
+ 0x1C442212, // 004A EQ R17 R17 R18
+ 0x78460001, // 004B JMPF R17 #004E
+ 0x5844000C, // 004C LDCONST R17 K12
+ 0x70020000, // 004D JMP #004F
+ 0x58440007, // 004E LDCONST R17 K7
+ 0x7C2C0C00, // 004F CALL R11 6
+ 0x58300018, // 0050 LDCONST R12 K24
+ 0x7C240600, // 0051 CALL R9 3
+ 0x50240200, // 0052 LDBOOL R9 1 0
+ 0x80041200, // 0053 RET 1 R9
+ 0x7002000A, // 0054 JMP #0060
+ 0xB8222800, // 0055 GETNGBL R8 K20
+ 0x8C201115, // 0056 GETMET R8 R8 K21
+ 0x8C280B16, // 0057 GETMET R10 R5 K22
+ 0x58300019, // 0058 LDCONST R12 K25
+ 0x60340008, // 0059 GETGBL R13 G8
+ 0x5C380400, // 005A MOVE R14 R2
+ 0x7C340200, // 005B CALL R13 1
+ 0x5C380C00, // 005C MOVE R14 R6
+ 0x7C280800, // 005D CALL R10 4
+ 0x582C0018, // 005E LDCONST R11 K24
+ 0x7C200600, // 005F CALL R8 3
+ 0x80000000, // 0060 RET 0
+ })
+ ),
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 3]) { /* upvals */
+ be_local_const_upval(1, 7),
+ be_local_const_upval(1, 9),
+ be_local_const_upval(1, 13),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x680C0000, // 0000 GETUPV R3 U0
+ 0x68100001, // 0001 GETUPV R4 U1
+ 0x5C140000, // 0002 MOVE R5 R0
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x681C0002, // 0004 GETUPV R7 U2
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C0C0A00, // 0006 CALL R3 5
+ 0x80040600, // 0007 RET 1 R3
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[36]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(WriteRequestMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteRequestMessage_X3D),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(suppress_response),
+ /* K9 */ be_nested_str_weak(device),
+ /* K10 */ be_nested_str_weak(get_active_endpoints),
+ /* K11 */ be_nested_str_weak(MTR_X3A_X20IM_X3Awrite_request_X20processing_X20start),
+ /* K12 */ be_nested_str_weak(Path),
+ /* K13 */ be_nested_str_weak(write_requests),
+ /* K14 */ be_nested_str_weak(WriteResponseMessage),
+ /* K15 */ be_nested_str_weak(write_responses),
+ /* K16 */ be_nested_str_weak(path),
+ /* K17 */ be_nested_str_weak(data),
+ /* K18 */ be_nested_str_weak(endpoint),
+ /* K19 */ be_nested_str_weak(cluster),
+ /* K20 */ be_nested_str_weak(attribute),
+ /* K21 */ be_nested_str_weak(status),
+ /* K22 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
+ /* K23 */ be_nested_str_weak(INVALID_ACTION),
+ /* K24 */ be_nested_str_weak(get_attribute_name),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20),
+ /* K26 */ be_nested_str_weak(_X20_X28),
+ /* K27 */ be_nested_str_weak(_X29),
+ /* K28 */ be_nested_str_weak(),
+ /* K29 */ be_const_int(2),
+ /* K30 */ be_nested_str_weak(process_attribute_expansion),
+ /* K31 */ be_nested_str_weak(stop_iteration),
+ /* K32 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessage_X3D),
+ /* K33 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessageTLV_X3D),
+ /* K34 */ be_nested_str_weak(to_TLV),
+ /* K35 */ be_nested_str_weak(send_write_response),
+ }),
+ be_str_weak(process_write_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[134]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x88140908, // 000F GETMBR R5 R4 K8
+ 0x88180109, // 0010 GETMBR R6 R0 K9
+ 0x8C180D0A, // 0011 GETMET R6 R6 K10
+ 0x7C180200, // 0012 CALL R6 1
+ 0x841C0000, // 0013 CLOSURE R7 P0
+ 0xB8220800, // 0014 GETNGBL R8 K4
+ 0x8C201105, // 0015 GETMET R8 R8 K5
+ 0x5828000B, // 0016 LDCONST R10 K11
+ 0x542E0003, // 0017 LDINT R11 4
+ 0x7C200600, // 0018 CALL R8 3
+ 0xB8220200, // 0019 GETNGBL R8 K1
+ 0x8C20110C, // 001A GETMET R8 R8 K12
+ 0x7C200200, // 001B CALL R8 1
+ 0x8824090D, // 001C GETMBR R9 R4 K13
+ 0x4C280000, // 001D LDNIL R10
+ 0x2024120A, // 001E NE R9 R9 R10
+ 0x78260062, // 001F JMPF R9 #0083
+ 0xB8260200, // 0020 GETNGBL R9 K1
+ 0x8C24130E, // 0021 GETMET R9 R9 K14
+ 0x7C240200, // 0022 CALL R9 1
+ 0x60280012, // 0023 GETGBL R10 G18
+ 0x7C280000, // 0024 CALL R10 0
+ 0x90261E0A, // 0025 SETMBR R9 K15 R10
+ 0x60280010, // 0026 GETGBL R10 G16
+ 0x882C090D, // 0027 GETMBR R11 R4 K13
+ 0x7C280200, // 0028 CALL R10 1
+ 0xA802003D, // 0029 EXBLK 0 #0068
+ 0x5C2C1400, // 002A MOVE R11 R10
+ 0x7C2C0000, // 002B CALL R11 0
+ 0x88301710, // 002C GETMBR R12 R11 K16
+ 0x88341711, // 002D GETMBR R13 R11 K17
+ 0x88381912, // 002E GETMBR R14 R12 K18
+ 0x9022240E, // 002F SETMBR R8 K18 R14
+ 0x88381913, // 0030 GETMBR R14 R12 K19
+ 0x9022260E, // 0031 SETMBR R8 K19 R14
+ 0x88381914, // 0032 GETMBR R14 R12 K20
+ 0x9022280E, // 0033 SETMBR R8 K20 R14
+ 0xB83A0200, // 0034 GETNGBL R14 K1
+ 0x88381D16, // 0035 GETMBR R14 R14 K22
+ 0x90222A0E, // 0036 SETMBR R8 K21 R14
+ 0x88381113, // 0037 GETMBR R14 R8 K19
+ 0x4C3C0000, // 0038 LDNIL R15
+ 0x1C381C0F, // 0039 EQ R14 R14 R15
+ 0x743A0003, // 003A JMPT R14 #003F
+ 0x88381114, // 003B GETMBR R14 R8 K20
+ 0x4C3C0000, // 003C LDNIL R15
+ 0x1C381C0F, // 003D EQ R14 R14 R15
+ 0x783A000A, // 003E JMPF R14 #004A
+ 0xB83A0200, // 003F GETNGBL R14 K1
+ 0x88381D17, // 0040 GETMBR R14 R14 K23
+ 0x90222A0E, // 0041 SETMBR R8 K21 R14
+ 0x5C380E00, // 0042 MOVE R14 R7
+ 0x5C3C1200, // 0043 MOVE R15 R9
+ 0x4C400000, // 0044 LDNIL R16
+ 0x5C441000, // 0045 MOVE R17 R8
+ 0x4C480000, // 0046 LDNIL R18
+ 0x504C0200, // 0047 LDBOOL R19 1 0
+ 0x7C380A00, // 0048 CALL R14 5
+ 0x7001FFDF, // 0049 JMP #002A
+ 0x88381112, // 004A GETMBR R14 R8 K18
+ 0x4C3C0000, // 004B LDNIL R15
+ 0x1C381C0F, // 004C EQ R14 R14 R15
+ 0x783A0012, // 004D JMPF R14 #0061
+ 0xB83A0200, // 004E GETNGBL R14 K1
+ 0x8C381D18, // 004F GETMET R14 R14 K24
+ 0x88401113, // 0050 GETMBR R16 R8 K19
+ 0x88441114, // 0051 GETMBR R17 R8 K20
+ 0x7C380600, // 0052 CALL R14 3
+ 0xB83E0800, // 0053 GETNGBL R15 K4
+ 0x8C3C1F05, // 0054 GETMET R15 R15 K5
+ 0x60440008, // 0055 GETGBL R17 G8
+ 0x5C481000, // 0056 MOVE R18 R8
+ 0x7C440200, // 0057 CALL R17 1
+ 0x00463211, // 0058 ADD R17 K25 R17
+ 0x783A0002, // 0059 JMPF R14 #005D
+ 0x004A340E, // 005A ADD R18 K26 R14
+ 0x0048251B, // 005B ADD R18 R18 K27
+ 0x70020000, // 005C JMP #005E
+ 0x5848001C, // 005D LDCONST R18 K28
+ 0x00442212, // 005E ADD R17 R17 R18
+ 0x5848001D, // 005F LDCONST R18 K29
+ 0x7C3C0600, // 0060 CALL R15 3
+ 0x88380109, // 0061 GETMBR R14 R0 K9
+ 0x8C381D1E, // 0062 GETMET R14 R14 K30
+ 0x5C401000, // 0063 MOVE R16 R8
+ 0x84440001, // 0064 CLOSURE R17 P1
+ 0x7C380600, // 0065 CALL R14 3
+ 0xA0280000, // 0066 CLOSE R10
+ 0x7001FFC1, // 0067 JMP #002A
+ 0x5828001F, // 0068 LDCONST R10 K31
+ 0xAC280200, // 0069 CATCH R10 1 0
+ 0xB0080000, // 006A RAISE 2 R0 R0
+ 0xB82A0800, // 006B GETNGBL R10 K4
+ 0x8C281505, // 006C GETMET R10 R10 K5
+ 0x60300008, // 006D GETGBL R12 G8
+ 0x5C341200, // 006E MOVE R13 R9
+ 0x7C300200, // 006F CALL R12 1
+ 0x0032400C, // 0070 ADD R12 K32 R12
+ 0x54360003, // 0071 LDINT R13 4
+ 0x7C280600, // 0072 CALL R10 3
+ 0xB82A0800, // 0073 GETNGBL R10 K4
+ 0x8C281505, // 0074 GETMET R10 R10 K5
+ 0x60300008, // 0075 GETGBL R12 G8
+ 0x8C341322, // 0076 GETMET R13 R9 K34
+ 0x7C340200, // 0077 CALL R13 1
+ 0x7C300200, // 0078 CALL R12 1
+ 0x0032420C, // 0079 ADD R12 K33 R12
+ 0x58340007, // 007A LDCONST R13 K7
+ 0x7C280600, // 007B CALL R10 3
+ 0x5C280A00, // 007C MOVE R10 R5
+ 0x742A0003, // 007D JMPT R10 #0082
+ 0x8C280123, // 007E GETMET R10 R0 K35
+ 0x5C300200, // 007F MOVE R12 R1
+ 0x5C341200, // 0080 MOVE R13 R9
+ 0x7C280600, // 0081 CALL R10 3
+ 0xA0240000, // 0082 CLOSE R9
+ 0x50240200, // 0083 LDBOOL R9 1 0
+ 0xA0000000, // 0084 CLOSE R0
+ 0x80041200, // 0085 RET 1 R9
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_sendqueue_by_exchangeid
+********************************************************************/
+be_local_closure(Matter_IM_find_sendqueue_by_exchangeid, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(get_exchangeid),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(find_sendqueue_by_exchangeid),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x4C080000, // 0003 LDNIL R2
+ 0x80040400, // 0004 RET 1 R2
+ 0x58080000, // 0005 LDCONST R2 K0
+ 0x600C000C, // 0006 GETGBL R3 G12
+ 0x88100101, // 0007 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0x140C0403, // 0009 LT R3 R2 R3
+ 0x780E0008, // 000A JMPF R3 #0014
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x940C0602, // 000C GETIDX R3 R3 R2
+ 0x8C100702, // 000D GETMET R4 R3 K2
+ 0x7C100200, // 000E CALL R4 1
+ 0x1C100801, // 000F EQ R4 R4 R1
+ 0x78120000, // 0010 JMPF R4 #0012
+ 0x80040600, // 0011 RET 1 R3
+ 0x00080503, // 0012 ADD R2 R2 K3
+ 0x7001FFF1, // 0013 JMP #0006
+ 0x4C0C0000, // 0014 LDNIL R3
+ 0x80040600, // 0015 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_status
+********************************************************************/
+be_local_closure(Matter_IM_send_status, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_Status),
+ }),
+ be_str_weak(send_status),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_report_data
+********************************************************************/
+be_local_closure(Matter_IM_send_report_data, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_ReportData),
+ }),
+ be_str_weak(send_report_data),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_IM_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: subscribe_response
+********************************************************************/
+be_local_closure(Matter_IM_subscribe_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(SubscribeResponseMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeResponsetMessage_X3D),
+ /* K7 */ be_const_int(2),
+ }),
+ be_str_weak(subscribe_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x50140000, // 000F LDBOOL R5 0 0
+ 0x80040A00, // 0010 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_invoke_response
+********************************************************************/
+be_local_closure(Matter_IM_send_invoke_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_InvokeResponse),
+ }),
+ be_str_weak(send_invoke_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* 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(device),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(subs),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(IM_Subscription_Shop),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x60080012, // 0001 GETGBL R2 G18
+ 0x7C080000, // 0002 CALL R2 0
+ 0x90020202, // 0003 SETMBR R0 K1 R2
+ 0xB80A0600, // 0004 GETNGBL R2 K3
+ 0x8C080504, // 0005 GETMET R2 R2 K4
+ 0x5C100000, // 0006 MOVE R4 R0
+ 0x7C080400, // 0007 CALL R2 2
+ 0x90020402, // 0008 SETMBR R0 K2 R2
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_250ms
+********************************************************************/
+be_local_closure(Matter_IM_every_250ms, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(subs),
+ /* K1 */ be_nested_str_weak(every_250ms),
+ }),
+ be_str_weak(every_250ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: process_invoke_request
********************************************************************/
@@ -1304,7 +1983,7 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[44]) { /* constants */
+ ( &(const bvalue[45]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(log),
@@ -1332,23 +2011,24 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
/* K24 */ be_const_int(2),
/* K25 */ be_nested_str_weak(device),
/* K26 */ be_nested_str_weak(invoke_request),
- /* K27 */ be_nested_str_weak(command_fields),
- /* K28 */ be_nested_str_weak(InvokeResponseIB),
- /* K29 */ be_nested_str_weak(CommandStatusIB),
- /* K30 */ be_nested_str_weak(CommandPathIB),
- /* K31 */ be_nested_str_weak(StatusIB),
- /* K32 */ be_nested_str_weak(SUCCESS),
- /* K33 */ be_nested_str_weak(push),
- /* K34 */ be_nested_str_weak(CommandDataIB),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X25s_X20_X25s),
- /* K36 */ be_nested_str_weak(stop_iteration),
- /* K37 */ be_nested_str_weak(MTR_X3A_X20invoke_responses_X3D),
- /* K38 */ be_const_int(0),
- /* K39 */ be_nested_str_weak(MTR_X3A_X20InvokeResponse_X3D),
- /* K40 */ be_nested_str_weak(MTR_X3A_X20InvokeResponseTLV_X3D),
- /* K41 */ be_nested_str_weak(to_TLV),
- /* K42 */ be_const_int(3),
- /* K43 */ be_nested_str_weak(send_invoke_response),
+ /* K27 */ be_nested_str_weak(session),
+ /* K28 */ be_nested_str_weak(command_fields),
+ /* K29 */ be_nested_str_weak(InvokeResponseIB),
+ /* K30 */ be_nested_str_weak(CommandStatusIB),
+ /* K31 */ be_nested_str_weak(CommandPathIB),
+ /* K32 */ be_nested_str_weak(StatusIB),
+ /* K33 */ be_nested_str_weak(SUCCESS),
+ /* K34 */ be_nested_str_weak(push),
+ /* K35 */ be_nested_str_weak(CommandDataIB),
+ /* K36 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X25s_X20_X25s),
+ /* K37 */ be_nested_str_weak(stop_iteration),
+ /* K38 */ be_nested_str_weak(MTR_X3A_X20invoke_responses_X3D),
+ /* K39 */ be_const_int(0),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20InvokeResponse_X3D),
+ /* K41 */ be_nested_str_weak(MTR_X3A_X20InvokeResponseTLV_X3D),
+ /* K42 */ be_nested_str_weak(to_TLV),
+ /* K43 */ be_const_int(3),
+ /* K44 */ be_nested_str_weak(send_invoke_response),
}),
be_str_weak(process_invoke_request),
&be_const_str_solidified,
@@ -1421,23 +2101,23 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x7C280600, // 0041 CALL R10 3
0x88280119, // 0042 GETMBR R10 R0 K25
0x8C28151A, // 0043 GETMET R10 R10 K26
- 0x5C300200, // 0044 MOVE R12 R1
- 0x8834111B, // 0045 GETMBR R13 R8 K27
+ 0x8830031B, // 0044 GETMBR R12 R1 K27
+ 0x8834111C, // 0045 GETMBR R13 R8 K28
0x5C380800, // 0046 MOVE R14 R4
0x7C280800, // 0047 CALL R10 4
0xB82E0800, // 0048 GETNGBL R11 K4
- 0x8C2C171C, // 0049 GETMET R11 R11 K28
+ 0x8C2C171D, // 0049 GETMET R11 R11 K29
0x7C2C0200, // 004A CALL R11 1
0x50300200, // 004B LDBOOL R12 1 0
0x1C30140C, // 004C EQ R12 R10 R12
0x78320023, // 004D JMPF R12 #0072
0xB8320800, // 004E GETNGBL R12 K4
- 0x8C30191D, // 004F GETMET R12 R12 K29
+ 0x8C30191E, // 004F GETMET R12 R12 K30
0x7C300200, // 0050 CALL R12 1
0x902E200C, // 0051 SETMBR R11 K16 R12
0x88301710, // 0052 GETMBR R12 R11 K16
0xB8360800, // 0053 GETNGBL R13 K4
- 0x8C341B1E, // 0054 GETMET R13 R13 K30
+ 0x8C341B1F, // 0054 GETMET R13 R13 K31
0x7C340200, // 0055 CALL R13 1
0x90321A0D, // 0056 SETMBR R12 K13 R13
0x88301710, // 0057 GETMBR R12 R11 K16
@@ -1454,16 +2134,16 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x90321E0D, // 0062 SETMBR R12 K15 R13
0x88301710, // 0063 GETMBR R12 R11 K16
0xB8360800, // 0064 GETNGBL R13 K4
- 0x8C341B1F, // 0065 GETMET R13 R13 K31
+ 0x8C341B20, // 0065 GETMET R13 R13 K32
0x7C340200, // 0066 CALL R13 1
0x9032200D, // 0067 SETMBR R12 K16 R13
0x88301710, // 0068 GETMBR R12 R11 K16
0x88301910, // 0069 GETMBR R12 R12 K16
0xB8360800, // 006A GETNGBL R13 K4
- 0x88341B20, // 006B GETMBR R13 R13 K32
+ 0x88341B21, // 006B GETMBR R13 R13 K33
0x9032200D, // 006C SETMBR R12 K16 R13
0x88300D0B, // 006D GETMBR R12 R6 K11
- 0x8C301921, // 006E GETMET R12 R12 K33
+ 0x8C301922, // 006E GETMET R12 R12 K34
0x5C381600, // 006F MOVE R14 R11
0x7C300400, // 0070 CALL R12 2
0x70020059, // 0071 JMP #00CC
@@ -1471,12 +2151,12 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x2030140C, // 0073 NE R12 R10 R12
0x7832002F, // 0074 JMPF R12 #00A5
0xB8320800, // 0075 GETNGBL R12 K4
- 0x8C301922, // 0076 GETMET R12 R12 K34
+ 0x8C301923, // 0076 GETMET R12 R12 K35
0x7C300200, // 0077 CALL R12 1
0x902E1E0C, // 0078 SETMBR R11 K15 R12
0x8830170F, // 0079 GETMBR R12 R11 K15
0xB8360800, // 007A GETNGBL R13 K4
- 0x8C341B1E, // 007B GETMET R13 R13 K30
+ 0x8C341B1F, // 007B GETMET R13 R13 K31
0x7C340200, // 007C CALL R13 1
0x90321A0D, // 007D SETMBR R12 K13 R13
0x8830170F, // 007E GETMBR R12 R11 K15
@@ -1492,9 +2172,9 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x8834090F, // 0088 GETMBR R13 R4 K15
0x90321E0D, // 0089 SETMBR R12 K15 R13
0x8830170F, // 008A GETMBR R12 R11 K15
- 0x9032360A, // 008B SETMBR R12 K27 R10
+ 0x9032380A, // 008B SETMBR R12 K28 R10
0x88300D0B, // 008C GETMBR R12 R6 K11
- 0x8C301921, // 008D GETMET R12 R12 K33
+ 0x8C301922, // 008D GETMET R12 R12 K34
0x5C381600, // 008E MOVE R14 R11
0x7C300400, // 008F CALL R12 2
0xB8320800, // 0090 GETNGBL R12 K4
@@ -1506,7 +2186,7 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0xB8320200, // 0096 GETNGBL R12 K1
0x8C301902, // 0097 GETMET R12 R12 K2
0x8C380713, // 0098 GETMET R14 R3 K19
- 0x58400023, // 0099 LDCONST R16 K35
+ 0x58400024, // 0099 LDCONST R16 K36
0x60440008, // 009A GETGBL R17 G8
0x5C480800, // 009B MOVE R18 R4
0x7C440200, // 009C CALL R17 1
@@ -1523,12 +2203,12 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x2030180D, // 00A7 NE R12 R12 R13
0x78320022, // 00A8 JMPF R12 #00CC
0xB8320800, // 00A9 GETNGBL R12 K4
- 0x8C30191D, // 00AA GETMET R12 R12 K29
+ 0x8C30191E, // 00AA GETMET R12 R12 K30
0x7C300200, // 00AB CALL R12 1
0x902E200C, // 00AC SETMBR R11 K16 R12
0x88301710, // 00AD GETMBR R12 R11 K16
0xB8360800, // 00AE GETNGBL R13 K4
- 0x8C341B1E, // 00AF GETMET R13 R13 K30
+ 0x8C341B1F, // 00AF GETMET R13 R13 K31
0x7C340200, // 00B0 CALL R13 1
0x90321A0D, // 00B1 SETMBR R12 K13 R13
0x88301710, // 00B2 GETMBR R12 R11 K16
@@ -1545,7 +2225,7 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x90321E0D, // 00BD SETMBR R12 K15 R13
0x88301710, // 00BE GETMBR R12 R11 K16
0xB8360800, // 00BF GETNGBL R13 K4
- 0x8C341B1F, // 00C0 GETMET R13 R13 K31
+ 0x8C341B20, // 00C0 GETMET R13 R13 K32
0x7C340200, // 00C1 CALL R13 1
0x9032200D, // 00C2 SETMBR R12 K16 R13
0x88301710, // 00C3 GETMBR R12 R11 K16
@@ -1553,12 +2233,12 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x88340910, // 00C5 GETMBR R13 R4 K16
0x9032200D, // 00C6 SETMBR R12 K16 R13
0x88300D0B, // 00C7 GETMBR R12 R6 K11
- 0x8C301921, // 00C8 GETMET R12 R12 K33
+ 0x8C301922, // 00C8 GETMET R12 R12 K34
0x5C381600, // 00C9 MOVE R14 R11
0x7C300400, // 00CA CALL R12 2
0x7001FFFF, // 00CB JMP #00CC
0x7001FF51, // 00CC JMP #001F
- 0x581C0024, // 00CD LDCONST R7 K36
+ 0x581C0025, // 00CD LDCONST R7 K37
0xAC1C0200, // 00CE CATCH R7 1 0
0xB0080000, // 00CF RAISE 2 R0 R0
0xB81E0200, // 00D0 GETNGBL R7 K1
@@ -1566,32 +2246,32 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x60240008, // 00D2 GETGBL R9 G8
0x88280D0B, // 00D3 GETMBR R10 R6 K11
0x7C240200, // 00D4 CALL R9 1
- 0x00264A09, // 00D5 ADD R9 K37 R9
+ 0x00264C09, // 00D5 ADD R9 K38 R9
0x542A0003, // 00D6 LDINT R10 4
0x7C1C0600, // 00D7 CALL R7 3
0x601C000C, // 00D8 GETGBL R7 G12
0x88200D0B, // 00D9 GETMBR R8 R6 K11
0x7C1C0200, // 00DA CALL R7 1
- 0x241C0F26, // 00DB GT R7 R7 K38
+ 0x241C0F27, // 00DB GT R7 R7 K39
0x781E0015, // 00DC JMPF R7 #00F3
0xB81E0200, // 00DD GETNGBL R7 K1
0x8C1C0F02, // 00DE GETMET R7 R7 K2
0x60240008, // 00DF GETGBL R9 G8
0x5C280C00, // 00E0 MOVE R10 R6
0x7C240200, // 00E1 CALL R9 1
- 0x00264E09, // 00E2 ADD R9 K39 R9
+ 0x00265009, // 00E2 ADD R9 K40 R9
0x542A0003, // 00E3 LDINT R10 4
0x7C1C0600, // 00E4 CALL R7 3
0xB81E0200, // 00E5 GETNGBL R7 K1
0x8C1C0F02, // 00E6 GETMET R7 R7 K2
0x60240008, // 00E7 GETGBL R9 G8
- 0x8C280D29, // 00E8 GETMET R10 R6 K41
+ 0x8C280D2A, // 00E8 GETMET R10 R6 K42
0x7C280200, // 00E9 CALL R10 1
0x7C240200, // 00EA CALL R9 1
- 0x00265009, // 00EB ADD R9 K40 R9
- 0x5828002A, // 00EC LDCONST R10 K42
+ 0x00265209, // 00EB ADD R9 K41 R9
+ 0x5828002B, // 00EC LDCONST R10 K43
0x7C1C0600, // 00ED CALL R7 3
- 0x8C1C012B, // 00EE GETMET R7 R0 K43
+ 0x8C1C012C, // 00EE GETMET R7 R0 K44
0x5C240200, // 00EF MOVE R9 R1
0x5C280C00, // 00F0 MOVE R10 R6
0x7C1C0600, // 00F1 CALL R7 3
@@ -1607,569 +2287,41 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: process_invoke_response
-********************************************************************/
-be_local_closure(Matter_IM_process_invoke_response, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(InvokeResponseMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20InvokeResponseMessage_X3D),
- /* K7 */ be_const_int(2),
- }),
- be_str_weak(process_invoke_response),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: find_sendqueue_by_exchangeid
-********************************************************************/
-be_local_closure(Matter_IM_find_sendqueue_by_exchangeid, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(send_queue),
- /* K2 */ be_nested_str_weak(get_exchangeid),
- /* K3 */ be_const_int(1),
- }),
- be_str_weak(find_sendqueue_by_exchangeid),
- &be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0001, // 0002 JMPF R2 #0005
- 0x4C080000, // 0003 LDNIL R2
- 0x80040400, // 0004 RET 1 R2
- 0x58080000, // 0005 LDCONST R2 K0
- 0x600C000C, // 0006 GETGBL R3 G12
- 0x88100101, // 0007 GETMBR R4 R0 K1
- 0x7C0C0200, // 0008 CALL R3 1
- 0x140C0403, // 0009 LT R3 R2 R3
- 0x780E0008, // 000A JMPF R3 #0014
- 0x880C0101, // 000B GETMBR R3 R0 K1
- 0x940C0602, // 000C GETIDX R3 R3 R2
- 0x8C100702, // 000D GETMET R4 R3 K2
- 0x7C100200, // 000E CALL R4 1
- 0x1C100801, // 000F EQ R4 R4 R1
- 0x78120000, // 0010 JMPF R4 #0012
- 0x80040600, // 0011 RET 1 R3
- 0x00080503, // 0012 ADD R2 R2 K3
- 0x7001FFF1, // 0013 JMP #0006
- 0x4C0C0000, // 0014 LDNIL R3
- 0x80040600, // 0015 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: report_data
-********************************************************************/
-be_local_closure(Matter_IM_report_data, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(ReportDataMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20ReportDataMessage_X3D),
- /* K7 */ be_const_int(2),
- }),
- be_str_weak(report_data),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_invoke_response
-********************************************************************/
-be_local_closure(Matter_IM_send_invoke_response, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_InvokeResponse),
- }),
- be_str_weak(send_invoke_response),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_status_response
-********************************************************************/
-be_local_closure(Matter_IM_process_status_response, /* name */
- be_nested_proto(
- 11, /* nstack */
- 3, /* 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(findsubval),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(matter),
- /* K4 */ be_nested_str_weak(SUCCESS),
- /* K5 */ be_nested_str_weak(tasmota),
- /* K6 */ be_nested_str_weak(log),
- /* K7 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus),
- /* K8 */ be_const_int(2),
- /* K9 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
- /* K10 */ be_nested_str_weak(exchange_id),
- /* K11 */ be_nested_str_weak(ack_received),
- /* K12 */ be_nested_str_weak(format),
- /* K13 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_X20_X20_X20_X20ERROR_X20_X3D_X200x_X2502X),
- }),
- be_str_weak(process_status_response),
- &be_const_str_solidified,
- ( &(const binstruction[34]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0x8C100501, // 0001 GETMET R4 R2 K1
- 0x58180002, // 0002 LDCONST R6 K2
- 0x541E00FE, // 0003 LDINT R7 255
- 0x7C100600, // 0004 CALL R4 3
- 0xB8160600, // 0005 GETNGBL R5 K3
- 0x88140B04, // 0006 GETMBR R5 R5 K4
- 0x1C140805, // 0007 EQ R5 R4 R5
- 0x7816000E, // 0008 JMPF R5 #0018
- 0xB8160A00, // 0009 GETNGBL R5 K5
- 0x8C140B06, // 000A GETMET R5 R5 K6
- 0x581C0007, // 000B LDCONST R7 K7
- 0x58200008, // 000C LDCONST R8 K8
- 0x7C140600, // 000D CALL R5 3
- 0x8C140109, // 000E GETMET R5 R0 K9
- 0x881C030A, // 000F GETMBR R7 R1 K10
- 0x7C140400, // 0010 CALL R5 2
- 0x78160004, // 0011 JMPF R5 #0017
- 0x8C180B0B, // 0012 GETMET R6 R5 K11
- 0x5C200200, // 0013 MOVE R8 R1
- 0x7C180400, // 0014 CALL R6 2
- 0x50180200, // 0015 LDBOOL R6 1 0
- 0x80040C00, // 0016 RET 1 R6
- 0x70020007, // 0017 JMP #0020
- 0xB8160A00, // 0018 GETNGBL R5 K5
- 0x8C140B06, // 0019 GETMET R5 R5 K6
- 0x8C1C070C, // 001A GETMET R7 R3 K12
- 0x5824000D, // 001B LDCONST R9 K13
- 0x5C280800, // 001C MOVE R10 R4
- 0x7C1C0600, // 001D CALL R7 3
- 0x58200008, // 001E LDCONST R8 K8
- 0x7C140600, // 001F CALL R5 3
- 0x50140000, // 0020 LDBOOL R5 0 0
- 0x80040A00, // 0021 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_subscribe_update
-********************************************************************/
-be_local_closure(Matter_IM_send_subscribe_update, /* name */
- be_nested_proto(
- 12, /* nstack */
- 2, /* 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(string),
- /* K1 */ be_nested_str_weak(session),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(ReportDataMessage),
- /* K4 */ be_nested_str_weak(subscription_id),
- /* K5 */ be_nested_str_weak(attribute_reports),
- /* K6 */ be_nested_str_weak(suppress_response),
- /* K7 */ be_nested_str_weak(send_queue),
- /* K8 */ be_nested_str_weak(push),
- /* K9 */ be_nested_str_weak(IM_ReportDataSubscribed),
- /* K10 */ be_nested_str_weak(device),
- /* K11 */ be_nested_str_weak(message_handler),
- /* K12 */ be_nested_str_weak(send_enqueued),
- }),
- be_str_weak(send_subscribe_update),
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0x880C0301, // 0001 GETMBR R3 R1 K1
- 0xB8120400, // 0002 GETNGBL R4 K2
- 0x8C100903, // 0003 GETMET R4 R4 K3
- 0x7C100200, // 0004 CALL R4 1
- 0x88140304, // 0005 GETMBR R5 R1 K4
- 0x90120805, // 0006 SETMBR R4 K4 R5
- 0x60140012, // 0007 GETGBL R5 G18
- 0x7C140000, // 0008 CALL R5 0
- 0x90120A05, // 0009 SETMBR R4 K5 R5
- 0x50140200, // 000A LDBOOL R5 1 0
- 0x90120C05, // 000B SETMBR R4 K6 R5
- 0x88140107, // 000C GETMBR R5 R0 K7
- 0x8C140B08, // 000D GETMET R5 R5 K8
- 0xB81E0400, // 000E GETNGBL R7 K2
- 0x8C1C0F09, // 000F GETMET R7 R7 K9
- 0x8824010A, // 0010 GETMBR R9 R0 K10
- 0x8824130B, // 0011 GETMBR R9 R9 K11
- 0x5C280600, // 0012 MOVE R10 R3
- 0x5C2C0800, // 0013 MOVE R11 R4
- 0x7C1C0800, // 0014 CALL R7 4
- 0x7C140400, // 0015 CALL R5 2
- 0x8C14010C, // 0016 GETMET R5 R0 K12
- 0x881C010A, // 0017 GETMBR R7 R0 K10
- 0x881C0F0B, // 0018 GETMBR R7 R7 K11
- 0x7C140400, // 0019 CALL R5 2
- 0x80000000, // 001A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_incoming
-********************************************************************/
-be_local_closure(Matter_IM_process_incoming, /* name */
- be_nested_proto(
- 9, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[27]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(log),
- /* K2 */ be_nested_str_weak(MTR_X3A_X20received_X20IM_X20message_X20),
- /* K3 */ be_nested_str_weak(matter),
- /* K4 */ be_nested_str_weak(inspect),
- /* K5 */ be_const_int(3),
- /* K6 */ be_nested_str_weak(TLV),
- /* K7 */ be_nested_str_weak(parse),
- /* K8 */ be_nested_str_weak(raw),
- /* K9 */ be_nested_str_weak(app_payload_idx),
- /* K10 */ be_nested_str_weak(MTR_X3A_X20IM_X20TLV_X3A_X20),
- /* K11 */ be_nested_str_weak(findsubval),
- /* K12 */ be_nested_str_weak(MTR_X3A_X20InteractionModelRevision_X3D),
- /* K13 */ be_nested_str_weak(nil),
- /* K14 */ be_nested_str_weak(opcode),
- /* K15 */ be_const_int(1),
- /* K16 */ be_nested_str_weak(process_status_response),
- /* K17 */ be_const_int(2),
- /* K18 */ be_nested_str_weak(process_read_request),
- /* K19 */ be_nested_str_weak(subscribe_request),
- /* K20 */ be_nested_str_weak(subscribe_response),
- /* K21 */ be_nested_str_weak(report_data),
- /* K22 */ be_nested_str_weak(process_write_request),
- /* K23 */ be_nested_str_weak(process_write_response),
- /* K24 */ be_nested_str_weak(process_invoke_request),
- /* K25 */ be_nested_str_weak(process_invoke_response),
- /* K26 */ be_nested_str_weak(process_timed_request),
- }),
- be_str_weak(process_incoming),
- &be_const_str_solidified,
- ( &(const binstruction[128]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0xB8120600, // 0002 GETNGBL R4 K3
- 0x8C100904, // 0003 GETMET R4 R4 K4
- 0x5C180200, // 0004 MOVE R6 R1
- 0x7C100400, // 0005 CALL R4 2
- 0x00120404, // 0006 ADD R4 K2 R4
- 0x58140005, // 0007 LDCONST R5 K5
- 0x7C080600, // 0008 CALL R2 3
- 0xB80A0600, // 0009 GETNGBL R2 K3
- 0x88080506, // 000A GETMBR R2 R2 K6
- 0x8C080507, // 000B GETMET R2 R2 K7
- 0x88100308, // 000C GETMBR R4 R1 K8
- 0x88140309, // 000D GETMBR R5 R1 K9
- 0x7C080600, // 000E CALL R2 3
- 0xB80E0000, // 000F GETNGBL R3 K0
- 0x8C0C0701, // 0010 GETMET R3 R3 K1
- 0x60140008, // 0011 GETGBL R5 G8
- 0x5C180400, // 0012 MOVE R6 R2
- 0x7C140200, // 0013 CALL R5 1
- 0x00161405, // 0014 ADD R5 K10 R5
- 0x58180005, // 0015 LDCONST R6 K5
- 0x7C0C0600, // 0016 CALL R3 3
- 0x8C0C050B, // 0017 GETMET R3 R2 K11
- 0x541600FE, // 0018 LDINT R5 255
- 0x7C0C0400, // 0019 CALL R3 2
- 0xB8120000, // 001A GETNGBL R4 K0
- 0x8C100901, // 001B GETMET R4 R4 K1
- 0x4C180000, // 001C LDNIL R6
- 0x20180606, // 001D NE R6 R3 R6
- 0x781A0003, // 001E JMPF R6 #0023
- 0x60180008, // 001F GETGBL R6 G8
- 0x5C1C0600, // 0020 MOVE R7 R3
- 0x7C180200, // 0021 CALL R6 1
- 0x70020000, // 0022 JMP #0024
- 0x5818000D, // 0023 LDCONST R6 K13
- 0x001A1806, // 0024 ADD R6 K12 R6
- 0x541E0003, // 0025 LDINT R7 4
- 0x7C100600, // 0026 CALL R4 3
- 0x8810030E, // 0027 GETMBR R4 R1 K14
- 0x1C14090F, // 0028 EQ R5 R4 K15
- 0x78160005, // 0029 JMPF R5 #0030
- 0x8C140110, // 002A GETMET R5 R0 K16
- 0x5C1C0200, // 002B MOVE R7 R1
- 0x5C200400, // 002C MOVE R8 R2
- 0x7C140600, // 002D CALL R5 3
- 0x80040A00, // 002E RET 1 R5
- 0x7002004D, // 002F JMP #007E
- 0x1C140911, // 0030 EQ R5 R4 K17
- 0x78160005, // 0031 JMPF R5 #0038
- 0x8C140112, // 0032 GETMET R5 R0 K18
- 0x5C1C0200, // 0033 MOVE R7 R1
- 0x5C200400, // 0034 MOVE R8 R2
- 0x7C140600, // 0035 CALL R5 3
- 0x80040A00, // 0036 RET 1 R5
- 0x70020045, // 0037 JMP #007E
- 0x1C140905, // 0038 EQ R5 R4 K5
- 0x78160005, // 0039 JMPF R5 #0040
- 0x8C140113, // 003A GETMET R5 R0 K19
- 0x5C1C0200, // 003B MOVE R7 R1
- 0x5C200400, // 003C MOVE R8 R2
- 0x7C140600, // 003D CALL R5 3
- 0x80040A00, // 003E RET 1 R5
- 0x7002003D, // 003F JMP #007E
- 0x54160003, // 0040 LDINT R5 4
- 0x1C140805, // 0041 EQ R5 R4 R5
- 0x78160005, // 0042 JMPF R5 #0049
- 0x8C140114, // 0043 GETMET R5 R0 K20
- 0x5C1C0200, // 0044 MOVE R7 R1
- 0x5C200400, // 0045 MOVE R8 R2
- 0x7C140600, // 0046 CALL R5 3
- 0x80040A00, // 0047 RET 1 R5
- 0x70020034, // 0048 JMP #007E
- 0x54160004, // 0049 LDINT R5 5
- 0x1C140805, // 004A EQ R5 R4 R5
- 0x78160005, // 004B JMPF R5 #0052
- 0x8C140115, // 004C GETMET R5 R0 K21
- 0x5C1C0200, // 004D MOVE R7 R1
- 0x5C200400, // 004E MOVE R8 R2
- 0x7C140600, // 004F CALL R5 3
- 0x80040A00, // 0050 RET 1 R5
- 0x7002002B, // 0051 JMP #007E
- 0x54160005, // 0052 LDINT R5 6
- 0x1C140805, // 0053 EQ R5 R4 R5
- 0x78160005, // 0054 JMPF R5 #005B
- 0x8C140116, // 0055 GETMET R5 R0 K22
- 0x5C1C0200, // 0056 MOVE R7 R1
- 0x5C200400, // 0057 MOVE R8 R2
- 0x7C140600, // 0058 CALL R5 3
- 0x80040A00, // 0059 RET 1 R5
- 0x70020022, // 005A JMP #007E
- 0x54160006, // 005B LDINT R5 7
- 0x1C140805, // 005C EQ R5 R4 R5
- 0x78160005, // 005D JMPF R5 #0064
- 0x8C140117, // 005E GETMET R5 R0 K23
- 0x5C1C0200, // 005F MOVE R7 R1
- 0x5C200400, // 0060 MOVE R8 R2
- 0x7C140600, // 0061 CALL R5 3
- 0x80040A00, // 0062 RET 1 R5
- 0x70020019, // 0063 JMP #007E
- 0x54160007, // 0064 LDINT R5 8
- 0x1C140805, // 0065 EQ R5 R4 R5
- 0x78160005, // 0066 JMPF R5 #006D
- 0x8C140118, // 0067 GETMET R5 R0 K24
- 0x5C1C0200, // 0068 MOVE R7 R1
- 0x5C200400, // 0069 MOVE R8 R2
- 0x7C140600, // 006A CALL R5 3
- 0x80040A00, // 006B RET 1 R5
- 0x70020010, // 006C JMP #007E
- 0x54160008, // 006D LDINT R5 9
- 0x1C140805, // 006E EQ R5 R4 R5
- 0x78160005, // 006F JMPF R5 #0076
- 0x8C140119, // 0070 GETMET R5 R0 K25
- 0x5C1C0200, // 0071 MOVE R7 R1
- 0x5C200400, // 0072 MOVE R8 R2
- 0x7C140600, // 0073 CALL R5 3
- 0x80040A00, // 0074 RET 1 R5
- 0x70020007, // 0075 JMP #007E
- 0x54160009, // 0076 LDINT R5 10
- 0x1C140805, // 0077 EQ R5 R4 R5
- 0x78160004, // 0078 JMPF R5 #007E
- 0x8C14011A, // 0079 GETMET R5 R0 K26
- 0x5C1C0200, // 007A MOVE R7 R1
- 0x5C200400, // 007B MOVE R8 R2
- 0x7C140600, // 007C CALL R5 3
- 0x80040A00, // 007D RET 1 R5
- 0x50140000, // 007E LDBOOL R5 0 0
- 0x80040A00, // 007F RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: every_second
-********************************************************************/
-be_local_closure(Matter_IM_every_second, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(subs),
- /* K1 */ be_nested_str_weak(every_second),
- }),
- be_str_weak(every_second),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x80000000, // 0003 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified class: Matter_IM
********************************************************************/
be_local_class(Matter_IM,
3,
NULL,
- be_nested_map(25,
+ be_nested_map(27,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(send_subscribe_response, -1), be_const_closure(Matter_IM_send_subscribe_response_closure) },
- { be_const_key_weak(process_write_request, -1), be_const_closure(Matter_IM_process_write_request_closure) },
- { be_const_key_weak(_inner_process_read_request, -1), be_const_closure(Matter_IM__inner_process_read_request_closure) },
- { be_const_key_weak(process_timed_request, 10), be_const_closure(Matter_IM_process_timed_request_closure) },
- { be_const_key_weak(process_write_response, -1), be_const_closure(Matter_IM_process_write_response_closure) },
- { be_const_key_weak(send_write_response, 12), be_const_closure(Matter_IM_send_write_response_closure) },
- { be_const_key_weak(send_status, 9), be_const_closure(Matter_IM_send_status_closure) },
- { be_const_key_weak(subscribe_response, -1), be_const_closure(Matter_IM_subscribe_response_closure) },
- { be_const_key_weak(every_second, -1), be_const_closure(Matter_IM_every_second_closure) },
- { be_const_key_weak(send_report_data, -1), be_const_closure(Matter_IM_send_report_data_closure) },
- { be_const_key_weak(send_subscribe_update, 23), be_const_closure(Matter_IM_send_subscribe_update_closure) },
- { be_const_key_weak(device, 21), be_const_var(0) },
+ { be_const_key_weak(process_timed_request, 1), be_const_closure(Matter_IM_process_timed_request_closure) },
+ { be_const_key_weak(process_invoke_request, 16), be_const_closure(Matter_IM_process_invoke_request_closure) },
+ { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_IM_every_250ms_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_IM_init_closure) },
- { be_const_key_weak(subscribe_request, -1), be_const_closure(Matter_IM_subscribe_request_closure) },
- { be_const_key_weak(send_enqueued, -1), be_const_closure(Matter_IM_send_enqueued_closure) },
- { be_const_key_weak(process_invoke_request, 8), be_const_closure(Matter_IM_process_invoke_request_closure) },
- { be_const_key_weak(process_invoke_response, -1), be_const_closure(Matter_IM_process_invoke_response_closure) },
- { be_const_key_weak(send_invoke_response, -1), be_const_closure(Matter_IM_send_invoke_response_closure) },
+ { be_const_key_weak(send_subscribe_update, -1), be_const_closure(Matter_IM_send_subscribe_update_closure) },
+ { be_const_key_weak(subs, 10), be_const_var(1) },
{ be_const_key_weak(report_data, -1), be_const_closure(Matter_IM_report_data_closure) },
- { be_const_key_weak(find_sendqueue_by_exchangeid, 17), be_const_closure(Matter_IM_find_sendqueue_by_exchangeid_closure) },
- { be_const_key_weak(process_status_response, -1), be_const_closure(Matter_IM_process_status_response_closure) },
- { be_const_key_weak(subs, -1), be_const_var(1) },
+ { be_const_key_weak(process_write_response, 19), be_const_closure(Matter_IM_process_write_response_closure) },
{ be_const_key_weak(process_incoming, -1), be_const_closure(Matter_IM_process_incoming_closure) },
- { be_const_key_weak(process_read_request, 7), be_const_closure(Matter_IM_process_read_request_closure) },
+ { be_const_key_weak(remove_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_remove_sendqueue_by_exchangeid_closure) },
+ { be_const_key_weak(process_invoke_response, 25), be_const_closure(Matter_IM_process_invoke_response_closure) },
+ { be_const_key_weak(process_status_response, 2), be_const_closure(Matter_IM_process_status_response_closure) },
+ { be_const_key_weak(_inner_process_read_request, -1), be_const_closure(Matter_IM__inner_process_read_request_closure) },
+ { be_const_key_weak(subscribe_request, 6), be_const_closure(Matter_IM_subscribe_request_closure) },
+ { be_const_key_weak(send_enqueued, -1), be_const_closure(Matter_IM_send_enqueued_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_IM_every_second_closure) },
+ { be_const_key_weak(process_write_request, -1), be_const_closure(Matter_IM_process_write_request_closure) },
{ be_const_key_weak(send_queue, -1), be_const_var(2) },
+ { be_const_key_weak(find_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_find_sendqueue_by_exchangeid_closure) },
+ { be_const_key_weak(send_status, -1), be_const_closure(Matter_IM_send_status_closure) },
+ { be_const_key_weak(send_report_data, -1), be_const_closure(Matter_IM_send_report_data_closure) },
+ { be_const_key_weak(process_read_request, 15), be_const_closure(Matter_IM_process_read_request_closure) },
+ { be_const_key_weak(subscribe_response, -1), be_const_closure(Matter_IM_subscribe_response_closure) },
+ { be_const_key_weak(send_invoke_response, -1), be_const_closure(Matter_IM_send_invoke_response_closure) },
+ { be_const_key_weak(device, 3), be_const_var(0) },
+ { be_const_key_weak(send_subscribe_response, 26), be_const_closure(Matter_IM_send_subscribe_response_closure) },
+ { be_const_key_weak(send_write_response, -1), be_const_closure(Matter_IM_send_write_response_closure) },
})),
be_str_weak(Matter_IM)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
index 6eec4ee7c..c9bd3a8fa 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
@@ -147,6 +147,136 @@ void be_load_Matter_Path_class(bvm *vm) {
extern const bclass be_class_Matter_IM_Message;
+/********************************************************************
+** Solidified function: ack_received
+********************************************************************/
+be_local_closure(Matter_IM_Message_ack_received, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* 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(resp),
+ /* K1 */ be_nested_str_weak(build_response),
+ /* K2 */ be_nested_str_weak(opcode),
+ /* K3 */ be_nested_str_weak(x_flag_r),
+ /* K4 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(ack_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0x78060007, // 0000 JMPF R1 #0009
+ 0x8C080301, // 0001 GETMET R2 R1 K1
+ 0x88100100, // 0002 GETMBR R4 R0 K0
+ 0x88100902, // 0003 GETMBR R4 R4 K2
+ 0x88140100, // 0004 GETMBR R5 R0 K0
+ 0x88140B03, // 0005 GETMBR R5 R5 K3
+ 0x88180100, // 0006 GETMBR R6 R0 K0
+ 0x7C080800, // 0007 CALL R2 4
+ 0x90020002, // 0008 SETMBR R0 K0 R2
+ 0x50080200, // 0009 LDBOOL R2 1 0
+ 0x90020802, // 000A SETMBR R0 K4 R2
+ 0x50080200, // 000B LDBOOL R2 1 0
+ 0x80040400, // 000C RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: ack_error
+********************************************************************/
+be_local_closure(Matter_IM_Message_ack_error, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* 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(ack_error),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_Message_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(build_response),
+ /* K2 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x8C100301, // 0000 GETMET R4 R1 K1
+ 0x5C180400, // 0001 MOVE R6 R2
+ 0x5C1C0600, // 0002 MOVE R7 R3
+ 0x7C100600, // 0003 CALL R4 3
+ 0x90020004, // 0004 SETMBR R0 K0 R4
+ 0x50100200, // 0005 LDBOOL R4 1 0
+ 0x90020404, // 0006 SETMBR R0 K2 R4
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_exchangeid
+********************************************************************/
+be_local_closure(Matter_IM_Message_get_exchangeid, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(exchange_id),
+ }),
+ be_str_weak(get_exchangeid),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: send
********************************************************************/
@@ -199,125 +329,22 @@ be_local_closure(Matter_IM_Message_send, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: ack_received
-********************************************************************/
-be_local_closure(Matter_IM_Message_ack_received, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* 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(resp),
- /* K1 */ be_nested_str_weak(build_response),
- /* K2 */ be_nested_str_weak(opcode),
- /* K3 */ be_nested_str_weak(x_flag_r),
- /* K4 */ be_nested_str_weak(ready),
- }),
- be_str_weak(ack_received),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x8C080301, // 0000 GETMET R2 R1 K1
- 0x88100100, // 0001 GETMBR R4 R0 K0
- 0x88100902, // 0002 GETMBR R4 R4 K2
- 0x88140100, // 0003 GETMBR R5 R0 K0
- 0x88140B03, // 0004 GETMBR R5 R5 K3
- 0x88180100, // 0005 GETMBR R6 R0 K0
- 0x7C080800, // 0006 CALL R2 4
- 0x90020002, // 0007 SETMBR R0 K0 R2
- 0x50080200, // 0008 LDBOOL R2 1 0
- 0x90020802, // 0009 SETMBR R0 K4 R2
- 0x80000000, // 000A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_exchangeid
-********************************************************************/
-be_local_closure(Matter_IM_Message_get_exchangeid, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(resp),
- /* K1 */ be_nested_str_weak(exchange_id),
- }),
- be_str_weak(get_exchangeid),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x88040301, // 0001 GETMBR R1 R1 K1
- 0x80040200, // 0002 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_IM_Message_init, /* name */
- be_nested_proto(
- 8, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(resp),
- /* K1 */ be_nested_str_weak(build_response),
- /* K2 */ be_nested_str_weak(ready),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x8C100301, // 0000 GETMET R4 R1 K1
- 0x5C180400, // 0001 MOVE R6 R2
- 0x5C1C0600, // 0002 MOVE R7 R3
- 0x7C100600, // 0003 CALL R4 3
- 0x90020004, // 0004 SETMBR R0 K0 R4
- 0x50100200, // 0005 LDBOOL R4 1 0
- 0x90020404, // 0006 SETMBR R0 K2 R4
- 0x80000000, // 0007 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified class: Matter_IM_Message
********************************************************************/
be_local_class(Matter_IM_Message,
3,
NULL,
- be_nested_map(7,
+ be_nested_map(8,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(resp, -1), be_const_var(0) },
- { be_const_key_weak(ready, 6), be_const_var(1) },
+ { be_const_key_weak(ack_received, 2), be_const_closure(Matter_IM_Message_ack_received_closure) },
{ be_const_key_weak(send, -1), be_const_closure(Matter_IM_Message_send_closure) },
- { be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_Message_ack_received_closure) },
{ be_const_key_weak(get_exchangeid, -1), be_const_closure(Matter_IM_Message_get_exchangeid_closure) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Message_init_closure) },
+ { be_const_key_weak(resp, 6), be_const_var(0) },
+ { be_const_key_weak(ready, -1), be_const_var(1) },
{ be_const_key_weak(data, -1), be_const_var(2) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Message_init_closure) },
+ { be_const_key_weak(ack_error, 1), be_const_closure(Matter_IM_Message_ack_error_closure) },
})),
be_str_weak(Matter_IM_Message)
);
@@ -796,19 +823,180 @@ void be_load_Matter_IM_ReportData_class(bvm *vm) {
extern const bclass be_class_Matter_IM_ReportDataSubscribed;
/********************************************************************
-** Solidified function: init
+** Solidified function: ack_error
********************************************************************/
-be_local_closure(Matter_IM_ReportDataSubscribed_init, /* name */
+be_local_closure(Matter_IM_ReportDataSubscribed_ack_error, /* name */
be_nested_proto(
- 10, /* nstack */
- 4, /* argc */
+ 4, /* nstack */
+ 2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[10]) { /* constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(sub),
+ /* K1 */ be_nested_str_weak(remove_self),
+ }),
+ be_str_weak(ack_error),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_send, /* name */
+ be_nested_proto(
+ 9, /* 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(data),
+ /* K1 */ be_nested_str_weak(attribute_reports),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(report_data_phase),
+ /* K4 */ be_nested_str_weak(send),
+ /* K5 */ be_nested_str_weak(resp),
+ /* K6 */ be_nested_str_weak(build_standalone_ack),
+ /* K7 */ be_nested_str_weak(encode),
+ /* K8 */ be_nested_str_weak(encrypt),
+ /* K9 */ be_nested_str_weak(send_response),
+ /* K10 */ be_nested_str_weak(raw),
+ /* K11 */ be_nested_str_weak(remote_ip),
+ /* K12 */ be_nested_str_weak(remote_port),
+ /* K13 */ be_nested_str_weak(message_counter),
+ }),
+ be_str_weak(send),
+ &be_const_str_solidified,
+ ( &(const binstruction[48]) { /* code */
+ 0x6008000C, // 0000 GETGBL R2 G12
+ 0x880C0100, // 0001 GETMBR R3 R0 K0
+ 0x880C0701, // 0002 GETMBR R3 R3 K1
+ 0x7C080200, // 0003 CALL R2 1
+ 0x24080502, // 0004 GT R2 R2 K2
+ 0x780A0020, // 0005 JMPF R2 #0027
+ 0x88080103, // 0006 GETMBR R2 R0 K3
+ 0x780A000E, // 0007 JMPF R2 #0017
+ 0x60080003, // 0008 GETGBL R2 G3
+ 0x5C0C0000, // 0009 MOVE R3 R0
+ 0x7C080200, // 000A CALL R2 1
+ 0x8C080504, // 000B GETMET R2 R2 K4
+ 0x5C100200, // 000C MOVE R4 R1
+ 0x7C080400, // 000D CALL R2 2
+ 0x5C0C0400, // 000E MOVE R3 R2
+ 0x740E0001, // 000F JMPT R3 #0012
+ 0x500C0000, // 0010 LDBOOL R3 0 0
+ 0x80040600, // 0011 RET 1 R3
+ 0x500C0000, // 0012 LDBOOL R3 0 0
+ 0x90020603, // 0013 SETMBR R0 K3 R3
+ 0x500C0000, // 0014 LDBOOL R3 0 0
+ 0x80040600, // 0015 RET 1 R3
+ 0x7002000E, // 0016 JMP #0026
+ 0x88080105, // 0017 GETMBR R2 R0 K5
+ 0x8C080506, // 0018 GETMET R2 R2 K6
+ 0x7C080200, // 0019 CALL R2 1
+ 0x8C0C0507, // 001A GETMET R3 R2 K7
+ 0x7C0C0200, // 001B CALL R3 1
+ 0x8C0C0508, // 001C GETMET R3 R2 K8
+ 0x7C0C0200, // 001D CALL R3 1
+ 0x8C0C0309, // 001E GETMET R3 R1 K9
+ 0x8814050A, // 001F GETMBR R5 R2 K10
+ 0x8818050B, // 0020 GETMBR R6 R2 K11
+ 0x881C050C, // 0021 GETMBR R7 R2 K12
+ 0x8820050D, // 0022 GETMBR R8 R2 K13
+ 0x7C0C0A00, // 0023 CALL R3 5
+ 0x500C0200, // 0024 LDBOOL R3 1 0
+ 0x80040600, // 0025 RET 1 R3
+ 0x70020007, // 0026 JMP #002F
+ 0x60080003, // 0027 GETGBL R2 G3
+ 0x5C0C0000, // 0028 MOVE R3 R0
+ 0x7C080200, // 0029 CALL R2 1
+ 0x8C080504, // 002A GETMET R2 R2 K4
+ 0x5C100200, // 002B MOVE R4 R1
+ 0x7C080400, // 002C CALL R2 2
+ 0x50080200, // 002D LDBOOL R2 1 0
+ 0x80040400, // 002E RET 1 R2
+ 0x80000000, // 002F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: ack_received
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_ack_received, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(report_data_phase),
+ /* K1 */ be_nested_str_weak(ack_received),
+ }),
+ be_str_weak(ack_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x780A0007, // 0001 JMPF R2 #000A
+ 0x60080003, // 0002 GETGBL R2 G3
+ 0x5C0C0000, // 0003 MOVE R3 R0
+ 0x7C080200, // 0004 CALL R2 1
+ 0x8C080501, // 0005 GETMET R2 R2 K1
+ 0x5C100200, // 0006 MOVE R4 R1
+ 0x7C080400, // 0007 CALL R2 2
+ 0x80040400, // 0008 RET 1 R2
+ 0x70020007, // 0009 JMP #0012
+ 0x60080003, // 000A GETGBL R2 G3
+ 0x5C0C0000, // 000B MOVE R3 R0
+ 0x7C080200, // 000C CALL R2 1
+ 0x8C080501, // 000D GETMET R2 R2 K1
+ 0x4C100000, // 000E LDNIL R4
+ 0x7C080400, // 000F CALL R2 2
+ 0x50080000, // 0010 LDBOOL R2 0 0
+ 0x80040400, // 0011 RET 1 R2
+ 0x80000000, // 0012 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_init, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[12]) { /* constants */
/* K0 */ be_nested_str_weak(resp),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(Frame),
@@ -819,29 +1007,34 @@ be_local_closure(Matter_IM_ReportDataSubscribed_init, /* name */
/* K7 */ be_nested_str_weak(tasmota),
/* K8 */ be_nested_str_weak(millis),
/* K9 */ be_nested_str_weak(MSG_TIMEOUT),
+ /* K10 */ be_nested_str_weak(sub),
+ /* K11 */ be_nested_str_weak(report_data_phase),
}),
be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[19]) { /* code */
- 0xB8120200, // 0000 GETNGBL R4 K1
- 0x88100902, // 0001 GETMBR R4 R4 K2
- 0x8C100903, // 0002 GETMET R4 R4 K3
- 0x5C180200, // 0003 MOVE R6 R1
- 0x5C1C0400, // 0004 MOVE R7 R2
- 0x54220004, // 0005 LDINT R8 5
- 0x50240200, // 0006 LDBOOL R9 1 0
- 0x7C100A00, // 0007 CALL R4 5
- 0x90020004, // 0008 SETMBR R0 K0 R4
+ ( &(const binstruction[22]) { /* code */
+ 0xB8160200, // 0000 GETNGBL R5 K1
+ 0x88140B02, // 0001 GETMBR R5 R5 K2
+ 0x8C140B03, // 0002 GETMET R5 R5 K3
+ 0x5C1C0200, // 0003 MOVE R7 R1
+ 0x5C200400, // 0004 MOVE R8 R2
+ 0x54260004, // 0005 LDINT R9 5
+ 0x50280200, // 0006 LDBOOL R10 1 0
+ 0x7C140A00, // 0007 CALL R5 5
+ 0x90020005, // 0008 SETMBR R0 K0 R5
0x90020803, // 0009 SETMBR R0 K4 R3
- 0x50100200, // 000A LDBOOL R4 1 0
- 0x90020A04, // 000B SETMBR R0 K5 R4
- 0xB8120E00, // 000C GETNGBL R4 K7
- 0x8C100908, // 000D GETMET R4 R4 K8
- 0x7C100200, // 000E CALL R4 1
- 0x88140109, // 000F GETMBR R5 R0 K9
- 0x00100805, // 0010 ADD R4 R4 R5
- 0x90020C04, // 0011 SETMBR R0 K6 R4
- 0x80000000, // 0012 RET 0
+ 0x50140200, // 000A LDBOOL R5 1 0
+ 0x90020A05, // 000B SETMBR R0 K5 R5
+ 0xB8160E00, // 000C GETNGBL R5 K7
+ 0x8C140B08, // 000D GETMET R5 R5 K8
+ 0x7C140200, // 000E CALL R5 1
+ 0x88180109, // 000F GETMBR R6 R0 K9
+ 0x00140A06, // 0010 ADD R5 R5 R6
+ 0x90020C05, // 0011 SETMBR R0 K6 R5
+ 0x90021404, // 0012 SETMBR R0 K10 R4
+ 0x50140200, // 0013 LDBOOL R5 1 0
+ 0x90021605, // 0014 SETMBR R0 K11 R5
+ 0x80000000, // 0015 RET 0
})
)
);
@@ -853,11 +1046,16 @@ be_local_closure(Matter_IM_ReportDataSubscribed_init, /* name */
********************************************************************/
extern const bclass be_class_Matter_IM_ReportData;
be_local_class(Matter_IM_ReportDataSubscribed,
- 0,
+ 2,
&be_class_Matter_IM_ReportData,
- be_nested_map(1,
+ be_nested_map(6,
( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(sub, 5), be_const_var(0) },
+ { be_const_key_weak(ack_error, 0), be_const_closure(Matter_IM_ReportDataSubscribed_ack_error_closure) },
+ { be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_ack_received_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_IM_ReportDataSubscribed_init_closure) },
+ { be_const_key_weak(report_data_phase, -1), be_const_var(1) },
+ { be_const_key_weak(send, -1), be_const_closure(Matter_IM_ReportDataSubscribed_send_closure) },
})),
be_str_weak(Matter_IM_ReportDataSubscribed)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
index cc1075706..e5ef2a06b 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
@@ -7,111 +7,30 @@
extern const bclass be_class_Matter_IM_Subscription;
/********************************************************************
-** Solidified function: init
+** Solidified function: remove_self
********************************************************************/
-be_local_closure(Matter_IM_Subscription_init, /* name */
+be_local_closure(Matter_IM_Subscription_remove_self, /* name */
be_nested_proto(
- 12, /* nstack */
- 4, /* argc */
+ 4, /* 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_nested_str_weak(subscription_id),
- /* K1 */ be_nested_str_weak(session),
- /* K2 */ be_nested_str_weak(min_interval_floor),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str_weak(min_interval),
- /* K5 */ be_nested_str_weak(max_interval_ceiling),
- /* K6 */ be_nested_str_weak(max_interval),
- /* K7 */ be_nested_str_weak(fabric_filtered),
- /* K8 */ be_nested_str_weak(path_list),
- /* K9 */ be_nested_str_weak(attributes_requests),
- /* K10 */ be_nested_str_weak(matter),
- /* K11 */ be_nested_str_weak(Path),
- /* K12 */ be_nested_str_weak(endpoint),
- /* K13 */ be_nested_str_weak(cluster),
- /* K14 */ be_nested_str_weak(attribute),
- /* K15 */ be_nested_str_weak(push),
- /* K16 */ be_nested_str_weak(stop_iteration),
- /* K17 */ be_nested_str_weak(updates),
- /* K18 */ be_nested_str_weak(clear_and_arm),
- /* K19 */ be_nested_str_weak(tasmota),
- /* K20 */ be_nested_str_weak(log),
- /* K21 */ be_nested_str_weak(MTR_X3A_X20new_X20subsctiption_X20),
- /* K22 */ be_nested_str_weak(inspect),
- /* K23 */ be_const_int(2),
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(subs),
+ /* K1 */ be_nested_str_weak(remove_sub),
}),
- be_str_weak(init),
+ be_str_weak(remove_self),
&be_const_str_solidified,
- ( &(const binstruction[64]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020202, // 0001 SETMBR R0 K1 R2
- 0x88100702, // 0002 GETMBR R4 R3 K2
- 0x14140903, // 0003 LT R5 R4 K3
- 0x78160000, // 0004 JMPF R5 #0006
- 0x58100003, // 0005 LDCONST R4 K3
- 0x5416003B, // 0006 LDINT R5 60
- 0x24140805, // 0007 GT R5 R4 R5
- 0x78160000, // 0008 JMPF R5 #000A
- 0x5412003B, // 0009 LDINT R4 60
- 0x90020804, // 000A SETMBR R0 K4 R4
- 0x88140705, // 000B GETMBR R5 R3 K5
- 0x541A003B, // 000C LDINT R6 60
- 0x14180A06, // 000D LT R6 R5 R6
- 0x781A0000, // 000E JMPF R6 #0010
- 0x5416003B, // 000F LDINT R5 60
- 0x541A0E0F, // 0010 LDINT R6 3600
- 0x24180A06, // 0011 GT R6 R5 R6
- 0x781A0000, // 0012 JMPF R6 #0014
- 0x54160E0F, // 0013 LDINT R5 3600
- 0x90020C05, // 0014 SETMBR R0 K6 R5
- 0x88180707, // 0015 GETMBR R6 R3 K7
- 0x90020E06, // 0016 SETMBR R0 K7 R6
- 0x60180012, // 0017 GETGBL R6 G18
- 0x7C180000, // 0018 CALL R6 0
- 0x90021006, // 0019 SETMBR R0 K8 R6
- 0x60180010, // 001A GETGBL R6 G16
- 0x881C0709, // 001B GETMBR R7 R3 K9
- 0x7C180200, // 001C CALL R6 1
- 0xA802000F, // 001D EXBLK 0 #002E
- 0x5C1C0C00, // 001E MOVE R7 R6
- 0x7C1C0000, // 001F CALL R7 0
- 0xB8221400, // 0020 GETNGBL R8 K10
- 0x8C20110B, // 0021 GETMET R8 R8 K11
- 0x7C200200, // 0022 CALL R8 1
- 0x88240F0C, // 0023 GETMBR R9 R7 K12
- 0x90221809, // 0024 SETMBR R8 K12 R9
- 0x88240F0D, // 0025 GETMBR R9 R7 K13
- 0x90221A09, // 0026 SETMBR R8 K13 R9
- 0x88240F0E, // 0027 GETMBR R9 R7 K14
- 0x90221C09, // 0028 SETMBR R8 K14 R9
- 0x88240108, // 0029 GETMBR R9 R0 K8
- 0x8C24130F, // 002A GETMET R9 R9 K15
- 0x5C2C1000, // 002B MOVE R11 R8
- 0x7C240400, // 002C CALL R9 2
- 0x7001FFEF, // 002D JMP #001E
- 0x58180010, // 002E LDCONST R6 K16
- 0xAC180200, // 002F CATCH R6 1 0
- 0xB0080000, // 0030 RAISE 2 R0 R0
- 0x60180012, // 0031 GETGBL R6 G18
- 0x7C180000, // 0032 CALL R6 0
- 0x90022206, // 0033 SETMBR R0 K17 R6
- 0x8C180112, // 0034 GETMET R6 R0 K18
- 0x7C180200, // 0035 CALL R6 1
- 0xB81A2600, // 0036 GETNGBL R6 K19
- 0x8C180D14, // 0037 GETMET R6 R6 K20
- 0xB8221400, // 0038 GETNGBL R8 K10
- 0x8C201116, // 0039 GETMET R8 R8 K22
- 0x5C280000, // 003A MOVE R10 R0
- 0x7C200400, // 003B CALL R8 2
- 0x00222A08, // 003C ADD R8 K21 R8
- 0x58240017, // 003D LDCONST R9 K23
- 0x7C180600, // 003E CALL R6 3
- 0x80000000, // 003F RET 0
+ ( &(const binstruction[ 5]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x80000000, // 0004 RET 0
})
)
);
@@ -119,70 +38,172 @@ be_local_closure(Matter_IM_Subscription_init, /* name */
/********************************************************************
-** Solidified function: attribute_updated
+** Solidified function: init
********************************************************************/
-be_local_closure(Matter_IM_Subscription_attribute_updated, /* name */
+be_local_closure(Matter_IM_Subscription_init, /* name */
be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
+ 13, /* nstack */
+ 5, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
+ ( &(const bvalue[25]) { /* constants */
+ /* K0 */ be_nested_str_weak(subs),
+ /* K1 */ be_nested_str_weak(subscription_id),
+ /* K2 */ be_nested_str_weak(session),
+ /* K3 */ be_nested_str_weak(min_interval_floor),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(min_interval),
+ /* K6 */ be_nested_str_weak(max_interval_ceiling),
+ /* K7 */ be_nested_str_weak(max_interval),
+ /* K8 */ be_nested_str_weak(fabric_filtered),
+ /* K9 */ be_nested_str_weak(path_list),
+ /* K10 */ be_nested_str_weak(attributes_requests),
+ /* K11 */ be_nested_str_weak(matter),
+ /* K12 */ be_nested_str_weak(Path),
+ /* K13 */ be_nested_str_weak(endpoint),
+ /* K14 */ be_nested_str_weak(cluster),
+ /* K15 */ be_nested_str_weak(attribute),
+ /* K16 */ be_nested_str_weak(push),
+ /* K17 */ be_nested_str_weak(stop_iteration),
+ /* K18 */ be_nested_str_weak(updates),
+ /* K19 */ be_nested_str_weak(clear_and_arm),
+ /* K20 */ be_nested_str_weak(tasmota),
+ /* K21 */ be_nested_str_weak(log),
+ /* K22 */ be_nested_str_weak(MTR_X3A_X20new_X20subsctiption_X20),
+ /* K23 */ be_nested_str_weak(inspect),
+ /* K24 */ be_const_int(3),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[65]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x90020202, // 0001 SETMBR R0 K1 R2
+ 0x90020403, // 0002 SETMBR R0 K2 R3
+ 0x88140903, // 0003 GETMBR R5 R4 K3
+ 0x14180B04, // 0004 LT R6 R5 K4
+ 0x781A0000, // 0005 JMPF R6 #0007
+ 0x58140004, // 0006 LDCONST R5 K4
+ 0x541A003B, // 0007 LDINT R6 60
+ 0x24180A06, // 0008 GT R6 R5 R6
+ 0x781A0000, // 0009 JMPF R6 #000B
+ 0x5416003B, // 000A LDINT R5 60
+ 0x90020A05, // 000B SETMBR R0 K5 R5
+ 0x88180906, // 000C GETMBR R6 R4 K6
+ 0x541E003B, // 000D LDINT R7 60
+ 0x141C0C07, // 000E LT R7 R6 R7
+ 0x781E0000, // 000F JMPF R7 #0011
+ 0x541A003B, // 0010 LDINT R6 60
+ 0x541E0E0F, // 0011 LDINT R7 3600
+ 0x241C0C07, // 0012 GT R7 R6 R7
+ 0x781E0000, // 0013 JMPF R7 #0015
+ 0x541A0E0F, // 0014 LDINT R6 3600
+ 0x90020E06, // 0015 SETMBR R0 K7 R6
+ 0x881C0908, // 0016 GETMBR R7 R4 K8
+ 0x90021007, // 0017 SETMBR R0 K8 R7
+ 0x601C0012, // 0018 GETGBL R7 G18
+ 0x7C1C0000, // 0019 CALL R7 0
+ 0x90021207, // 001A SETMBR R0 K9 R7
+ 0x601C0010, // 001B GETGBL R7 G16
+ 0x8820090A, // 001C GETMBR R8 R4 K10
+ 0x7C1C0200, // 001D CALL R7 1
+ 0xA802000F, // 001E EXBLK 0 #002F
+ 0x5C200E00, // 001F MOVE R8 R7
+ 0x7C200000, // 0020 CALL R8 0
+ 0xB8261600, // 0021 GETNGBL R9 K11
+ 0x8C24130C, // 0022 GETMET R9 R9 K12
+ 0x7C240200, // 0023 CALL R9 1
+ 0x8828110D, // 0024 GETMBR R10 R8 K13
+ 0x90261A0A, // 0025 SETMBR R9 K13 R10
+ 0x8828110E, // 0026 GETMBR R10 R8 K14
+ 0x90261C0A, // 0027 SETMBR R9 K14 R10
+ 0x8828110F, // 0028 GETMBR R10 R8 K15
+ 0x90261E0A, // 0029 SETMBR R9 K15 R10
+ 0x88280109, // 002A GETMBR R10 R0 K9
+ 0x8C281510, // 002B GETMET R10 R10 K16
+ 0x5C301200, // 002C MOVE R12 R9
+ 0x7C280400, // 002D CALL R10 2
+ 0x7001FFEF, // 002E JMP #001F
+ 0x581C0011, // 002F LDCONST R7 K17
+ 0xAC1C0200, // 0030 CATCH R7 1 0
+ 0xB0080000, // 0031 RAISE 2 R0 R0
+ 0x601C0012, // 0032 GETGBL R7 G18
+ 0x7C1C0000, // 0033 CALL R7 0
+ 0x90022407, // 0034 SETMBR R0 K18 R7
+ 0x8C1C0113, // 0035 GETMET R7 R0 K19
+ 0x7C1C0200, // 0036 CALL R7 1
+ 0xB81E2800, // 0037 GETNGBL R7 K20
+ 0x8C1C0F15, // 0038 GETMET R7 R7 K21
+ 0xB8261600, // 0039 GETNGBL R9 K11
+ 0x8C241317, // 003A GETMET R9 R9 K23
+ 0x5C2C0000, // 003B MOVE R11 R0
+ 0x7C240400, // 003C CALL R9 2
+ 0x00262C09, // 003D ADD R9 K22 R9
+ 0x58280018, // 003E LDCONST R10 K24
+ 0x7C1C0600, // 003F CALL R7 3
+ 0x80000000, // 0040 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _add_attribute_unique_path
+********************************************************************/
+be_local_closure(Matter_IM_Subscription__add_attribute_unique_path, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
/* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(path_list),
+ /* K1 */ be_nested_str_weak(updates),
/* K2 */ be_nested_str_weak(endpoint),
/* K3 */ be_nested_str_weak(cluster),
/* K4 */ be_nested_str_weak(attribute),
- /* K5 */ be_nested_str_weak(updates),
+ /* K5 */ be_const_int(1),
/* K6 */ be_nested_str_weak(push),
- /* K7 */ be_const_int(1),
}),
- be_str_weak(attribute_updated),
+ be_str_weak(_add_attribute_unique_path),
&be_const_str_solidified,
- ( &(const binstruction[39]) { /* code */
- 0x580C0000, // 0000 LDCONST R3 K0
- 0x6010000C, // 0001 GETGBL R4 G12
- 0x88140101, // 0002 GETMBR R5 R0 K1
- 0x7C100200, // 0003 CALL R4 1
- 0x14100604, // 0004 LT R4 R3 R4
- 0x7812001F, // 0005 JMPF R4 #0026
- 0x88100101, // 0006 GETMBR R4 R0 K1
- 0x94100803, // 0007 GETIDX R4 R4 R3
- 0x88140902, // 0008 GETMBR R5 R4 K2
- 0x4C180000, // 0009 LDNIL R6
- 0x1C140A06, // 000A EQ R5 R5 R6
- 0x74160003, // 000B JMPT R5 #0010
- 0x88140902, // 000C GETMBR R5 R4 K2
- 0x88180302, // 000D GETMBR R6 R1 K2
- 0x1C140A06, // 000E EQ R5 R5 R6
- 0x78160013, // 000F JMPF R5 #0024
- 0x88140903, // 0010 GETMBR R5 R4 K3
- 0x4C180000, // 0011 LDNIL R6
- 0x1C140A06, // 0012 EQ R5 R5 R6
- 0x74160003, // 0013 JMPT R5 #0018
- 0x88140903, // 0014 GETMBR R5 R4 K3
- 0x88180303, // 0015 GETMBR R6 R1 K3
- 0x1C140A06, // 0016 EQ R5 R5 R6
- 0x7816000B, // 0017 JMPF R5 #0024
- 0x88140904, // 0018 GETMBR R5 R4 K4
- 0x4C180000, // 0019 LDNIL R6
- 0x1C140A06, // 001A EQ R5 R5 R6
- 0x74160003, // 001B JMPT R5 #0020
- 0x88140904, // 001C GETMBR R5 R4 K4
- 0x88180304, // 001D GETMBR R6 R1 K4
- 0x1C140A06, // 001E EQ R5 R5 R6
- 0x78160003, // 001F JMPF R5 #0024
- 0x88140105, // 0020 GETMBR R5 R0 K5
- 0x8C140B06, // 0021 GETMET R5 R5 K6
- 0x5C1C0200, // 0022 MOVE R7 R1
- 0x7C140400, // 0023 CALL R5 2
- 0x000C0707, // 0024 ADD R3 R3 K7
- 0x7001FFDA, // 0025 JMP #0001
- 0x80000000, // 0026 RET 0
+ ( &(const binstruction[28]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E0010, // 0005 JMPF R3 #0017
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x88100702, // 0008 GETMBR R4 R3 K2
+ 0x88140302, // 0009 GETMBR R5 R1 K2
+ 0x1C100805, // 000A EQ R4 R4 R5
+ 0x78120008, // 000B JMPF R4 #0015
+ 0x88100703, // 000C GETMBR R4 R3 K3
+ 0x88140303, // 000D GETMBR R5 R1 K3
+ 0x1C100805, // 000E EQ R4 R4 R5
+ 0x78120004, // 000F JMPF R4 #0015
+ 0x88100704, // 0010 GETMBR R4 R3 K4
+ 0x88140304, // 0011 GETMBR R5 R1 K4
+ 0x1C100805, // 0012 EQ R4 R4 R5
+ 0x78120000, // 0013 JMPF R4 #0015
+ 0x80000800, // 0014 RET 0
+ 0x00080505, // 0015 ADD R2 R2 K5
+ 0x7001FFE9, // 0016 JMP #0001
+ 0x880C0101, // 0017 GETMBR R3 R0 K1
+ 0x8C0C0706, // 0018 GETMET R3 R3 K6
+ 0x5C140200, // 0019 MOVE R5 R1
+ 0x7C0C0400, // 001A CALL R3 2
+ 0x80000000, // 001B RET 0
})
)
);
@@ -202,32 +223,110 @@ be_local_closure(Matter_IM_Subscription_clear_and_arm, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
+ ( &(const bvalue[10]) { /* constants */
/* K0 */ be_nested_str_weak(updates),
/* K1 */ be_nested_str_weak(clear),
- /* K2 */ be_nested_str_weak(expiration),
- /* K3 */ be_nested_str_weak(tasmota),
- /* K4 */ be_nested_str_weak(millis),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(millis),
+ /* K4 */ be_nested_str_weak(expiration),
/* K5 */ be_nested_str_weak(max_interval),
/* K6 */ be_nested_str_weak(MAX_INTERVAL_MARGIN),
+ /* K7 */ be_nested_str_weak(not_before),
+ /* K8 */ be_nested_str_weak(min_interval),
+ /* K9 */ be_const_int(1),
}),
be_str_weak(clear_and_arm),
&be_const_str_solidified,
- ( &(const binstruction[14]) { /* code */
+ ( &(const binstruction[20]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
0x8C040301, // 0001 GETMET R1 R1 K1
0x7C040200, // 0002 CALL R1 1
- 0xB8060600, // 0003 GETNGBL R1 K3
- 0x8C040304, // 0004 GETMET R1 R1 K4
+ 0xB8060400, // 0003 GETNGBL R1 K2
+ 0x8C040303, // 0004 GETMET R1 R1 K3
0x7C040200, // 0005 CALL R1 1
0x88080105, // 0006 GETMBR R2 R0 K5
0x880C0106, // 0007 GETMBR R3 R0 K6
0x04080403, // 0008 SUB R2 R2 R3
0x540E03E7, // 0009 LDINT R3 1000
0x08080403, // 000A MUL R2 R2 R3
- 0x00040202, // 000B ADD R1 R1 R2
- 0x90020401, // 000C SETMBR R0 K2 R1
- 0x80000000, // 000D RET 0
+ 0x00080202, // 000B ADD R2 R1 R2
+ 0x90020802, // 000C SETMBR R0 K4 R2
+ 0x88080108, // 000D GETMBR R2 R0 K8
+ 0x540E03E7, // 000E LDINT R3 1000
+ 0x08080403, // 000F MUL R2 R2 R3
+ 0x00080202, // 0010 ADD R2 R1 R2
+ 0x04080509, // 0011 SUB R2 R2 K9
+ 0x90020E02, // 0012 SETMBR R0 K7 R2
+ 0x80000000, // 0013 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: attribute_updated_ctx
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_attribute_updated_ctx, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(path_list),
+ /* K2 */ be_nested_str_weak(endpoint),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(_add_attribute_unique_path),
+ /* K6 */ be_const_int(1),
+ }),
+ be_str_weak(attribute_updated_ctx),
+ &be_const_str_solidified,
+ ( &(const binstruction[38]) { /* code */
+ 0x580C0000, // 0000 LDCONST R3 K0
+ 0x6010000C, // 0001 GETGBL R4 G12
+ 0x88140101, // 0002 GETMBR R5 R0 K1
+ 0x7C100200, // 0003 CALL R4 1
+ 0x14100604, // 0004 LT R4 R3 R4
+ 0x7812001E, // 0005 JMPF R4 #0025
+ 0x88100101, // 0006 GETMBR R4 R0 K1
+ 0x94100803, // 0007 GETIDX R4 R4 R3
+ 0x88140902, // 0008 GETMBR R5 R4 K2
+ 0x4C180000, // 0009 LDNIL R6
+ 0x1C140A06, // 000A EQ R5 R5 R6
+ 0x74160003, // 000B JMPT R5 #0010
+ 0x88140902, // 000C GETMBR R5 R4 K2
+ 0x88180302, // 000D GETMBR R6 R1 K2
+ 0x1C140A06, // 000E EQ R5 R5 R6
+ 0x78160012, // 000F JMPF R5 #0023
+ 0x88140903, // 0010 GETMBR R5 R4 K3
+ 0x4C180000, // 0011 LDNIL R6
+ 0x1C140A06, // 0012 EQ R5 R5 R6
+ 0x74160003, // 0013 JMPT R5 #0018
+ 0x88140903, // 0014 GETMBR R5 R4 K3
+ 0x88180303, // 0015 GETMBR R6 R1 K3
+ 0x1C140A06, // 0016 EQ R5 R5 R6
+ 0x7816000A, // 0017 JMPF R5 #0023
+ 0x88140904, // 0018 GETMBR R5 R4 K4
+ 0x4C180000, // 0019 LDNIL R6
+ 0x1C140A06, // 001A EQ R5 R5 R6
+ 0x74160003, // 001B JMPT R5 #0020
+ 0x88140904, // 001C GETMBR R5 R4 K4
+ 0x88180304, // 001D GETMBR R6 R1 K4
+ 0x1C140A06, // 001E EQ R5 R5 R6
+ 0x78160002, // 001F JMPF R5 #0023
+ 0x8C140105, // 0020 GETMET R5 R0 K5
+ 0x5C1C0200, // 0021 MOVE R7 R1
+ 0x7C140400, // 0022 CALL R5 2
+ 0x000C0706, // 0023 ADD R3 R3 K6
+ 0x7001FFDB, // 0024 JMP #0001
+ 0x80000000, // 0025 RET 0
})
)
);
@@ -238,22 +337,26 @@ be_local_closure(Matter_IM_Subscription_clear_and_arm, /* name */
** Solidified class: Matter_IM_Subscription
********************************************************************/
be_local_class(Matter_IM_Subscription,
- 8,
+ 10,
NULL,
- be_nested_map(12,
+ be_nested_map(16,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(expiration, -1), be_const_var(6) },
- { be_const_key_weak(updates, 9), be_const_var(7) },
- { be_const_key_weak(fabric_filtered, -1), be_const_var(5) },
- { be_const_key_weak(max_interval, 10), be_const_var(4) },
- { be_const_key_weak(session, -1), be_const_var(1) },
- { be_const_key_weak(min_interval, -1), be_const_var(3) },
- { be_const_key_weak(MAX_INTERVAL_MARGIN, -1), be_const_int(10) },
- { be_const_key_weak(attribute_updated, 4), be_const_closure(Matter_IM_Subscription_attribute_updated_closure) },
- { be_const_key_weak(subscription_id, -1), be_const_var(0) },
- { be_const_key_weak(clear_and_arm, -1), be_const_closure(Matter_IM_Subscription_clear_and_arm_closure) },
- { be_const_key_weak(path_list, 11), be_const_var(2) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Subscription_init_closure) },
+ { be_const_key_weak(remove_self, -1), be_const_closure(Matter_IM_Subscription_remove_self_closure) },
+ { be_const_key_weak(min_interval, -1), be_const_var(4) },
+ { be_const_key_weak(subs, -1), be_const_var(0) },
+ { be_const_key_weak(init, 15), be_const_closure(Matter_IM_Subscription_init_closure) },
+ { be_const_key_weak(subscription_id, -1), be_const_var(1) },
+ { be_const_key_weak(updates, -1), be_const_var(9) },
+ { be_const_key_weak(MAX_INTERVAL_MARGIN, -1), be_const_int(5) },
+ { be_const_key_weak(session, 11), be_const_var(2) },
+ { be_const_key_weak(expiration, 14), be_const_var(8) },
+ { be_const_key_weak(fabric_filtered, -1), be_const_var(6) },
+ { be_const_key_weak(_add_attribute_unique_path, 9), be_const_closure(Matter_IM_Subscription__add_attribute_unique_path_closure) },
+ { be_const_key_weak(max_interval, -1), be_const_var(5) },
+ { be_const_key_weak(attribute_updated_ctx, -1), be_const_closure(Matter_IM_Subscription_attribute_updated_ctx_closure) },
+ { be_const_key_weak(clear_and_arm, 12), be_const_closure(Matter_IM_Subscription_clear_and_arm_closure) },
+ { be_const_key_weak(not_before, -1), be_const_var(7) },
+ { be_const_key_weak(path_list, -1), be_const_var(3) },
})),
be_str_weak(Matter_IM_Subscription)
);
@@ -267,12 +370,140 @@ void be_load_Matter_IM_Subscription_class(bvm *vm) {
extern const bclass be_class_Matter_IM_Subscription_Shop;
+/********************************************************************
+** Solidified function: get_by_id
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_get_by_id, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(subscription_id),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(get_by_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E0009, // 0005 JMPF R3 #0010
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x880C0702, // 0008 GETMBR R3 R3 K2
+ 0x1C0C0601, // 0009 EQ R3 R3 R1
+ 0x780E0002, // 000A JMPF R3 #000E
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x940C0602, // 000C GETIDX R3 R3 R2
+ 0x80040600, // 000D RET 1 R3
+ 0x00080503, // 000E ADD R2 R2 K3
+ 0x7001FFF0, // 000F JMP #0001
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_250ms
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_every_250ms, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(updates),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(time_reached),
+ /* K5 */ be_nested_str_weak(not_before),
+ /* K6 */ be_nested_str_weak(im),
+ /* K7 */ be_nested_str_weak(send_subscribe_update),
+ /* K8 */ be_nested_str_weak(clear_and_arm),
+ /* K9 */ be_const_int(1),
+ /* K10 */ be_nested_str_weak(expiration),
+ }),
+ be_str_weak(every_250ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[48]) { /* 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
+ 0x780A0013, // 0005 JMPF R2 #001A
+ 0x88080101, // 0006 GETMBR R2 R0 K1
+ 0x94080401, // 0007 GETIDX R2 R2 R1
+ 0x600C000C, // 0008 GETGBL R3 G12
+ 0x88100502, // 0009 GETMBR R4 R2 K2
+ 0x7C0C0200, // 000A CALL R3 1
+ 0x240C0700, // 000B GT R3 R3 K0
+ 0x780E000A, // 000C JMPF R3 #0018
+ 0xB80E0600, // 000D GETNGBL R3 K3
+ 0x8C0C0704, // 000E GETMET R3 R3 K4
+ 0x88140505, // 000F GETMBR R5 R2 K5
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x780E0005, // 0011 JMPF R3 #0018
+ 0x880C0106, // 0012 GETMBR R3 R0 K6
+ 0x8C0C0707, // 0013 GETMET R3 R3 K7
+ 0x5C140400, // 0014 MOVE R5 R2
+ 0x7C0C0400, // 0015 CALL R3 2
+ 0x8C0C0508, // 0016 GETMET R3 R2 K8
+ 0x7C0C0200, // 0017 CALL R3 1
+ 0x00040309, // 0018 ADD R1 R1 K9
+ 0x7001FFE6, // 0019 JMP #0001
+ 0x58040000, // 001A LDCONST R1 K0
+ 0x6008000C, // 001B GETGBL R2 G12
+ 0x880C0101, // 001C GETMBR R3 R0 K1
+ 0x7C080200, // 001D CALL R2 1
+ 0x14080202, // 001E LT R2 R1 R2
+ 0x780A000E, // 001F JMPF R2 #002F
+ 0x88080101, // 0020 GETMBR R2 R0 K1
+ 0x94080401, // 0021 GETIDX R2 R2 R1
+ 0xB80E0600, // 0022 GETNGBL R3 K3
+ 0x8C0C0704, // 0023 GETMET R3 R3 K4
+ 0x8814050A, // 0024 GETMBR R5 R2 K10
+ 0x7C0C0400, // 0025 CALL R3 2
+ 0x780E0005, // 0026 JMPF R3 #002D
+ 0x880C0106, // 0027 GETMBR R3 R0 K6
+ 0x8C0C0707, // 0028 GETMET R3 R3 K7
+ 0x5C140400, // 0029 MOVE R5 R2
+ 0x7C0C0400, // 002A CALL R3 2
+ 0x8C0C0508, // 002B GETMET R3 R2 K8
+ 0x7C0C0200, // 002C CALL R3 1
+ 0x00040309, // 002D ADD R1 R1 K9
+ 0x7001FFEB, // 002E JMP #001B
+ 0x80000000, // 002F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: new_subscription
********************************************************************/
be_local_closure(Matter_IM_Subscription_Shop_new_subscription, /* name */
be_nested_proto(
- 10, /* nstack */
+ 11, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@@ -294,7 +525,7 @@ be_local_closure(Matter_IM_Subscription_Shop_new_subscription, /* name */
}),
be_str_weak(new_subscription),
&be_const_str_solidified,
- ( &(const binstruction[32]) { /* code */
+ ( &(const binstruction[33]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0x8C100701, // 0001 GETMET R4 R3 K1
0x58180002, // 0002 LDCONST R6 K2
@@ -318,15 +549,16 @@ be_local_closure(Matter_IM_Subscription_Shop_new_subscription, /* name */
0x7001FFF2, // 0014 JMP #0008
0xB8160C00, // 0015 GETNGBL R5 K6
0x8C140B07, // 0016 GETMET R5 R5 K7
- 0x5C1C0800, // 0017 MOVE R7 R4
- 0x5C200200, // 0018 MOVE R8 R1
- 0x5C240400, // 0019 MOVE R9 R2
- 0x7C140800, // 001A CALL R5 4
- 0x88180108, // 001B GETMBR R6 R0 K8
- 0x8C180D09, // 001C GETMET R6 R6 K9
- 0x5C200A00, // 001D MOVE R8 R5
- 0x7C180400, // 001E CALL R6 2
- 0x80040A00, // 001F RET 1 R5
+ 0x5C1C0000, // 0017 MOVE R7 R0
+ 0x5C200800, // 0018 MOVE R8 R4
+ 0x5C240200, // 0019 MOVE R9 R1
+ 0x5C280400, // 001A MOVE R10 R2
+ 0x7C140A00, // 001B CALL R5 5
+ 0x88180108, // 001C GETMBR R6 R0 K8
+ 0x8C180D09, // 001D GETMET R6 R6 K9
+ 0x5C200A00, // 001E MOVE R8 R5
+ 0x7C180400, // 001F CALL R6 2
+ 0x80040A00, // 0020 RET 1 R5
})
)
);
@@ -334,54 +566,42 @@ be_local_closure(Matter_IM_Subscription_Shop_new_subscription, /* name */
/********************************************************************
-** Solidified function: every_second
+** Solidified function: attribute_updated_ctx
********************************************************************/
-be_local_closure(Matter_IM_Subscription_Shop_every_second, /* name */
+be_local_closure(Matter_IM_Subscription_Shop_attribute_updated_ctx, /* name */
be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
+ 8, /* nstack */
+ 3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
+ ( &(const bvalue[ 4]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(subs),
- /* K2 */ be_nested_str_weak(tasmota),
- /* K3 */ be_nested_str_weak(time_reached),
- /* K4 */ be_nested_str_weak(expiration),
- /* K5 */ be_nested_str_weak(im),
- /* K6 */ be_nested_str_weak(send_subscribe_update),
- /* K7 */ be_nested_str_weak(clear_and_arm),
- /* K8 */ be_const_int(1),
+ /* K2 */ be_nested_str_weak(attribute_updated_ctx),
+ /* K3 */ be_const_int(1),
}),
- be_str_weak(every_second),
+ be_str_weak(attribute_updated_ctx),
&be_const_str_solidified,
- ( &(const binstruction[22]) { /* 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
- 0x780A000E, // 0005 JMPF R2 #0015
- 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
- 0x780E0005, // 000C JMPF R3 #0013
- 0x880C0105, // 000D GETMBR R3 R0 K5
- 0x8C0C0706, // 000E GETMET R3 R3 K6
- 0x5C140400, // 000F MOVE R5 R2
- 0x7C0C0400, // 0010 CALL R3 2
- 0x8C0C0507, // 0011 GETMET R3 R2 K7
- 0x7C0C0200, // 0012 CALL R3 1
- 0x00040308, // 0013 ADD R1 R1 K8
- 0x7001FFEB, // 0014 JMP #0001
- 0x80000000, // 0015 RET 0
+ ( &(const binstruction[15]) { /* code */
+ 0x580C0000, // 0000 LDCONST R3 K0
+ 0x6010000C, // 0001 GETGBL R4 G12
+ 0x88140101, // 0002 GETMBR R5 R0 K1
+ 0x7C100200, // 0003 CALL R4 1
+ 0x14100604, // 0004 LT R4 R3 R4
+ 0x78120007, // 0005 JMPF R4 #000E
+ 0x88100101, // 0006 GETMBR R4 R0 K1
+ 0x94100803, // 0007 GETIDX R4 R4 R3
+ 0x8C100902, // 0008 GETMET R4 R4 K2
+ 0x5C180200, // 0009 MOVE R6 R1
+ 0x5C1C0400, // 000A MOVE R7 R2
+ 0x7C100600, // 000B CALL R4 3
+ 0x000C0703, // 000C ADD R3 R3 K3
+ 0x7001FFF2, // 000D JMP #0001
+ 0x80000000, // 000E RET 0
})
)
);
@@ -419,6 +639,52 @@ be_local_closure(Matter_IM_Subscription_Shop_init, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: remove_sub
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_remove_sub, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(remove),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(remove_sub),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E000A, // 0005 JMPF R3 #0011
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x1C0C0601, // 0008 EQ R3 R3 R1
+ 0x780E0004, // 0009 JMPF R3 #000F
+ 0x880C0101, // 000A GETMBR R3 R0 K1
+ 0x8C0C0702, // 000B GETMET R3 R3 K2
+ 0x5C140400, // 000C MOVE R5 R2
+ 0x7C0C0400, // 000D CALL R3 2
+ 0x70020000, // 000E JMP #0010
+ 0x00080503, // 000F ADD R2 R2 K3
+ 0x7001FFEF, // 0010 JMP #0001
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: remove_by_session
********************************************************************/
@@ -467,110 +733,23 @@ be_local_closure(Matter_IM_Subscription_Shop_remove_by_session, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: get_by_id
-********************************************************************/
-be_local_closure(Matter_IM_Subscription_Shop_get_by_id, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(subs),
- /* K2 */ be_nested_str_weak(subscription_id),
- /* K3 */ be_const_int(1),
- }),
- be_str_weak(get_by_id),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x58080000, // 0000 LDCONST R2 K0
- 0x600C000C, // 0001 GETGBL R3 G12
- 0x88100101, // 0002 GETMBR R4 R0 K1
- 0x7C0C0200, // 0003 CALL R3 1
- 0x140C0403, // 0004 LT R3 R2 R3
- 0x780E0009, // 0005 JMPF R3 #0010
- 0x880C0101, // 0006 GETMBR R3 R0 K1
- 0x940C0602, // 0007 GETIDX R3 R3 R2
- 0x880C0702, // 0008 GETMBR R3 R3 K2
- 0x1C0C0601, // 0009 EQ R3 R3 R1
- 0x780E0002, // 000A JMPF R3 #000E
- 0x880C0101, // 000B GETMBR R3 R0 K1
- 0x940C0602, // 000C GETIDX R3 R3 R2
- 0x80040600, // 000D RET 1 R3
- 0x00080503, // 000E ADD R2 R2 K3
- 0x7001FFF0, // 000F JMP #0001
- 0x80000000, // 0010 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: attribute_updated
-********************************************************************/
-be_local_closure(Matter_IM_Subscription_Shop_attribute_updated, /* name */
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(subs),
- /* K2 */ be_nested_str_weak(attribute_updated),
- /* K3 */ be_const_int(1),
- }),
- be_str_weak(attribute_updated),
- &be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x580C0000, // 0000 LDCONST R3 K0
- 0x6010000C, // 0001 GETGBL R4 G12
- 0x88140101, // 0002 GETMBR R5 R0 K1
- 0x7C100200, // 0003 CALL R4 1
- 0x14100604, // 0004 LT R4 R3 R4
- 0x78120007, // 0005 JMPF R4 #000E
- 0x88100101, // 0006 GETMBR R4 R0 K1
- 0x94100803, // 0007 GETIDX R4 R4 R3
- 0x8C100902, // 0008 GETMET R4 R4 K2
- 0x5C180200, // 0009 MOVE R6 R1
- 0x5C1C0400, // 000A MOVE R7 R2
- 0x7C100600, // 000B CALL R4 3
- 0x000C0703, // 000C ADD R3 R3 K3
- 0x7001FFF2, // 000D JMP #0001
- 0x80000000, // 000E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified class: Matter_IM_Subscription_Shop
********************************************************************/
be_local_class(Matter_IM_Subscription_Shop,
2,
NULL,
- be_nested_map(8,
+ be_nested_map(9,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(attribute_updated, -1), be_const_closure(Matter_IM_Subscription_Shop_attribute_updated_closure) },
- { be_const_key_weak(every_second, -1), be_const_closure(Matter_IM_Subscription_Shop_every_second_closure) },
- { be_const_key_weak(subs, -1), be_const_var(0) },
- { be_const_key_weak(init, 5), be_const_closure(Matter_IM_Subscription_Shop_init_closure) },
- { be_const_key_weak(remove_by_session, -1), be_const_closure(Matter_IM_Subscription_Shop_remove_by_session_closure) },
- { be_const_key_weak(im, 6), be_const_var(1) },
{ be_const_key_weak(get_by_id, -1), be_const_closure(Matter_IM_Subscription_Shop_get_by_id_closure) },
- { be_const_key_weak(new_subscription, 0), be_const_closure(Matter_IM_Subscription_Shop_new_subscription_closure) },
+ { be_const_key_weak(attribute_updated_ctx, -1), be_const_closure(Matter_IM_Subscription_Shop_attribute_updated_ctx_closure) },
+ { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_IM_Subscription_Shop_every_250ms_closure) },
+ { be_const_key_weak(remove_sub, 1), be_const_closure(Matter_IM_Subscription_Shop_remove_sub_closure) },
+ { be_const_key_weak(new_subscription, 3), be_const_closure(Matter_IM_Subscription_Shop_new_subscription_closure) },
+ { be_const_key_weak(subs, -1), be_const_var(0) },
+ { be_const_key_weak(im, 7), be_const_var(1) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Subscription_Shop_init_closure) },
+ { be_const_key_weak(remove_by_session, -1), be_const_closure(Matter_IM_Subscription_Shop_remove_by_session_closure) },
})),
be_str_weak(Matter_IM_Subscription_Shop)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
index d2b0f0b72..4b30a10ae 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
@@ -313,7 +313,7 @@ be_local_closure(Matter_Frame_build_standalone_ack, /* name */
}),
be_str_weak(build_standalone_ack),
&be_const_str_solidified,
- ( &(const binstruction[49]) { /* code */
+ ( &(const binstruction[54]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x60080006, // 0001 GETGBL R2 G6
0x5C0C0000, // 0002 MOVE R3 R0
@@ -341,28 +341,33 @@ be_local_closure(Matter_Frame_build_standalone_ack, /* name */
0x880C010A, // 0018 GETMBR R3 R0 K10
0x880C070F, // 0019 GETMBR R3 R3 K15
0x900A1C03, // 001A SETMBR R2 K14 R3
- 0x900A2109, // 001B SETMBR R2 K16 K9
- 0x540E000F, // 001C LDINT R3 16
- 0x900A2203, // 001D SETMBR R2 K17 R3
- 0x880C0112, // 001E GETMBR R3 R0 K18
- 0x900A2403, // 001F SETMBR R2 K18 R3
- 0x900A2709, // 0020 SETMBR R2 K19 K9
- 0x900A2906, // 0021 SETMBR R2 K20 K6
- 0x880C010B, // 0022 GETMBR R3 R0 K11
- 0x900A2A03, // 0023 SETMBR R2 K21 R3
- 0x900A2D06, // 0024 SETMBR R2 K22 K6
- 0xB80E2E00, // 0025 GETNGBL R3 K23
- 0x8C0C0718, // 0026 GETMET R3 R3 K24
- 0x8C140319, // 0027 GETMET R5 R1 K25
- 0x581C001A, // 0028 LDCONST R7 K26
- 0xB8223600, // 0029 GETNGBL R8 K27
- 0x8C20111C, // 002A GETMET R8 R8 K28
- 0x88280511, // 002B GETMBR R10 R2 K17
- 0x7C200400, // 002C CALL R8 2
- 0x7C140600, // 002D CALL R5 3
- 0x5818001D, // 002E LDCONST R6 K29
- 0x7C0C0600, // 002F CALL R3 3
- 0x80040400, // 0030 RET 1 R2
+ 0x880C0110, // 001B GETMBR R3 R0 K16
+ 0x780E0001, // 001C JMPF R3 #001F
+ 0x580C0009, // 001D LDCONST R3 K9
+ 0x70020000, // 001E JMP #0020
+ 0x580C0006, // 001F LDCONST R3 K6
+ 0x900A2003, // 0020 SETMBR R2 K16 R3
+ 0x540E000F, // 0021 LDINT R3 16
+ 0x900A2203, // 0022 SETMBR R2 K17 R3
+ 0x880C0112, // 0023 GETMBR R3 R0 K18
+ 0x900A2403, // 0024 SETMBR R2 K18 R3
+ 0x900A2709, // 0025 SETMBR R2 K19 K9
+ 0x900A2906, // 0026 SETMBR R2 K20 K6
+ 0x880C010B, // 0027 GETMBR R3 R0 K11
+ 0x900A2A03, // 0028 SETMBR R2 K21 R3
+ 0x900A2D06, // 0029 SETMBR R2 K22 K6
+ 0xB80E2E00, // 002A GETNGBL R3 K23
+ 0x8C0C0718, // 002B GETMET R3 R3 K24
+ 0x8C140319, // 002C GETMET R5 R1 K25
+ 0x581C001A, // 002D LDCONST R7 K26
+ 0xB8223600, // 002E GETNGBL R8 K27
+ 0x8C20111C, // 002F GETMET R8 R8 K28
+ 0x88280511, // 0030 GETMBR R10 R2 K17
+ 0x7C200400, // 0031 CALL R8 2
+ 0x7C140600, // 0032 CALL R5 3
+ 0x5818001D, // 0033 LDCONST R6 K29
+ 0x7C0C0600, // 0034 CALL R3 3
+ 0x80040400, // 0035 RET 1 R2
})
)
);
@@ -418,7 +423,7 @@ be_local_closure(Matter_Frame_build_response, /* name */
}),
be_str_weak(build_response),
&be_const_str_solidified,
- ( &(const binstruction[86]) { /* code */
+ ( &(const binstruction[91]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0x4C140000, // 0001 LDNIL R5
0x1C140605, // 0002 EQ R5 R3 R5
@@ -466,45 +471,50 @@ be_local_closure(Matter_Frame_build_response, /* name */
0x7C140200, // 002C CALL R5 1
0x900E1A05, // 002D SETMBR R3 K13 R5
0x900E1709, // 002E SETMBR R3 K11 K9
- 0x900E2309, // 002F SETMBR R3 K17 K9
- 0x900E2401, // 0030 SETMBR R3 K18 R1
- 0x88140113, // 0031 GETMBR R5 R0 K19
- 0x900E2605, // 0032 SETMBR R3 K19 R5
- 0x88140114, // 0033 GETMBR R5 R0 K20
- 0x900E2805, // 0034 SETMBR R3 K20 R5
- 0x88140115, // 0035 GETMBR R5 R0 K21
- 0x78160002, // 0036 JMPF R5 #003A
- 0x900E2D06, // 0037 SETMBR R3 K22 K6
- 0x8814010D, // 0038 GETMBR R5 R0 K13
- 0x900E2E05, // 0039 SETMBR R3 K23 R5
- 0x780A0001, // 003A JMPF R2 #003D
- 0x58140006, // 003B LDCONST R5 K6
- 0x70020000, // 003C JMP #003E
- 0x58140009, // 003D LDCONST R5 K9
- 0x900E2A05, // 003E SETMBR R3 K21 R5
- 0x8814070B, // 003F GETMBR R5 R3 K11
- 0x1C140B09, // 0040 EQ R5 R5 K9
- 0x78160012, // 0041 JMPF R5 #0055
- 0xB8163000, // 0042 GETNGBL R5 K24
- 0x8C140B19, // 0043 GETMET R5 R5 K25
- 0x881C0712, // 0044 GETMBR R7 R3 K18
- 0x7C140400, // 0045 CALL R5 2
- 0x5C180A00, // 0046 MOVE R6 R5
- 0x741A0004, // 0047 JMPT R6 #004D
- 0x8C18091A, // 0048 GETMET R6 R4 K26
- 0x5820001B, // 0049 LDCONST R8 K27
- 0x88240712, // 004A GETMBR R9 R3 K18
- 0x7C180600, // 004B CALL R6 3
- 0x5C140C00, // 004C MOVE R5 R6
- 0xB81A3800, // 004D GETNGBL R6 K28
- 0x8C180D1D, // 004E GETMET R6 R6 K29
- 0x8C20091A, // 004F GETMET R8 R4 K26
- 0x5828001E, // 0050 LDCONST R10 K30
- 0x5C2C0A00, // 0051 MOVE R11 R5
- 0x7C200600, // 0052 CALL R8 3
- 0x5824001F, // 0053 LDCONST R9 K31
- 0x7C180600, // 0054 CALL R6 3
- 0x80040600, // 0055 RET 1 R3
+ 0x88140111, // 002F GETMBR R5 R0 K17
+ 0x78160001, // 0030 JMPF R5 #0033
+ 0x58140009, // 0031 LDCONST R5 K9
+ 0x70020000, // 0032 JMP #0034
+ 0x58140006, // 0033 LDCONST R5 K6
+ 0x900E2205, // 0034 SETMBR R3 K17 R5
+ 0x900E2401, // 0035 SETMBR R3 K18 R1
+ 0x88140113, // 0036 GETMBR R5 R0 K19
+ 0x900E2605, // 0037 SETMBR R3 K19 R5
+ 0x88140114, // 0038 GETMBR R5 R0 K20
+ 0x900E2805, // 0039 SETMBR R3 K20 R5
+ 0x88140115, // 003A GETMBR R5 R0 K21
+ 0x78160002, // 003B JMPF R5 #003F
+ 0x900E2D06, // 003C SETMBR R3 K22 K6
+ 0x8814010D, // 003D GETMBR R5 R0 K13
+ 0x900E2E05, // 003E SETMBR R3 K23 R5
+ 0x780A0001, // 003F JMPF R2 #0042
+ 0x58140006, // 0040 LDCONST R5 K6
+ 0x70020000, // 0041 JMP #0043
+ 0x58140009, // 0042 LDCONST R5 K9
+ 0x900E2A05, // 0043 SETMBR R3 K21 R5
+ 0x8814070B, // 0044 GETMBR R5 R3 K11
+ 0x1C140B09, // 0045 EQ R5 R5 K9
+ 0x78160012, // 0046 JMPF R5 #005A
+ 0xB8163000, // 0047 GETNGBL R5 K24
+ 0x8C140B19, // 0048 GETMET R5 R5 K25
+ 0x881C0712, // 0049 GETMBR R7 R3 K18
+ 0x7C140400, // 004A CALL R5 2
+ 0x5C180A00, // 004B MOVE R6 R5
+ 0x741A0004, // 004C JMPT R6 #0052
+ 0x8C18091A, // 004D GETMET R6 R4 K26
+ 0x5820001B, // 004E LDCONST R8 K27
+ 0x88240712, // 004F GETMBR R9 R3 K18
+ 0x7C180600, // 0050 CALL R6 3
+ 0x5C140C00, // 0051 MOVE R5 R6
+ 0xB81A3800, // 0052 GETNGBL R6 K28
+ 0x8C180D1D, // 0053 GETMET R6 R6 K29
+ 0x8C20091A, // 0054 GETMET R8 R4 K26
+ 0x5828001E, // 0055 LDCONST R10 K30
+ 0x5C2C0A00, // 0056 MOVE R11 R5
+ 0x7C200600, // 0057 CALL R8 3
+ 0x5824001F, // 0058 LDCONST R9 K31
+ 0x7C180600, // 0059 CALL R6 3
+ 0x80040600, // 005A RET 1 R3
})
)
);
@@ -552,7 +562,7 @@ be_local_closure(Matter_Frame_initiate_response, /* name */
}),
be_str_weak(initiate_response),
&be_const_str_solidified,
- ( &(const binstruction[46]) { /* code */
+ ( &(const binstruction[48]) { /* code */
0x58140000, // 0000 LDCONST R5 K0
0xA41A0200, // 0001 IMPORT R6 K1
0x4C1C0000, // 0002 LDNIL R7
@@ -591,14 +601,16 @@ be_local_closure(Matter_Frame_initiate_response, /* name */
0x001C0F12, // 0023 ADD R7 R7 K18
0x90062807, // 0024 SETMBR R1 K20 R7
0x881C0314, // 0025 GETMBR R7 R1 K20
- 0x90122A07, // 0026 SETMBR R4 K21 R7
- 0x90122D12, // 0027 SETMBR R4 K22 K18
- 0x780E0001, // 0028 JMPF R3 #002B
- 0x581C0012, // 0029 LDCONST R7 K18
- 0x70020000, // 002A JMP #002C
- 0x581C0009, // 002B LDCONST R7 K9
- 0x90122E07, // 002C SETMBR R4 K23 R7
- 0x80040800, // 002D RET 1 R4
+ 0x5422FFFF, // 0026 LDINT R8 65536
+ 0x301C0E08, // 0027 OR R7 R7 R8
+ 0x90122A07, // 0028 SETMBR R4 K21 R7
+ 0x90122D12, // 0029 SETMBR R4 K22 K18
+ 0x780E0001, // 002A JMPF R3 #002D
+ 0x581C0012, // 002B LDCONST R7 K18
+ 0x70020000, // 002C JMP #002E
+ 0x581C0009, // 002D LDCONST R7 K9
+ 0x90122E07, // 002E SETMBR R4 K23 R7
+ 0x80040800, // 002F RET 1 R4
})
)
);
@@ -818,7 +830,7 @@ be_local_closure(Matter_Frame_encode, /* name */
}),
be_str_weak(encode),
&be_const_str_solidified,
- ( &(const binstruction[144]) { /* code */
+ ( &(const binstruction[146]) { /* code */
0x60080015, // 0000 GETGBL R2 G21
0x7C080000, // 0001 CALL R2 0
0x880C0100, // 0002 GETMBR R3 R0 K0
@@ -940,29 +952,31 @@ be_local_closure(Matter_Frame_encode, /* name */
0x7C0C0600, // 0076 CALL R3 3
0x8C0C0505, // 0077 GETMET R3 R2 K5
0x88140118, // 0078 GETMBR R5 R0 K24
- 0x58180008, // 0079 LDCONST R6 K8
- 0x7C0C0600, // 007A CALL R3 3
- 0x8C0C0505, // 007B GETMET R3 R2 K5
- 0x88140119, // 007C GETMBR R5 R0 K25
- 0x58180008, // 007D LDCONST R6 K8
- 0x7C0C0600, // 007E CALL R3 3
- 0x880C0115, // 007F GETMBR R3 R0 K21
- 0x780E0003, // 0080 JMPF R3 #0085
- 0x8C0C0505, // 0081 GETMET R3 R2 K5
- 0x8814011A, // 0082 GETMBR R5 R0 K26
- 0x541A0003, // 0083 LDINT R6 4
- 0x7C0C0600, // 0084 CALL R3 3
- 0x600C000C, // 0085 GETGBL R3 G12
- 0x5C100400, // 0086 MOVE R4 R2
- 0x7C0C0200, // 0087 CALL R3 1
- 0x90023603, // 0088 SETMBR R0 K27 R3
- 0x78060000, // 0089 JMPF R1 #008B
- 0x400C0401, // 008A CONNECT R3 R2 R1
- 0x8C0C011C, // 008B GETMET R3 R0 K28
- 0x5C140400, // 008C MOVE R5 R2
- 0x7C0C0400, // 008D CALL R3 2
- 0x90023A02, // 008E SETMBR R0 K29 R2
- 0x80040400, // 008F RET 1 R2
+ 0x541AFFFE, // 0079 LDINT R6 65535
+ 0x2C140A06, // 007A AND R5 R5 R6
+ 0x58180008, // 007B LDCONST R6 K8
+ 0x7C0C0600, // 007C CALL R3 3
+ 0x8C0C0505, // 007D GETMET R3 R2 K5
+ 0x88140119, // 007E GETMBR R5 R0 K25
+ 0x58180008, // 007F LDCONST R6 K8
+ 0x7C0C0600, // 0080 CALL R3 3
+ 0x880C0115, // 0081 GETMBR R3 R0 K21
+ 0x780E0003, // 0082 JMPF R3 #0087
+ 0x8C0C0505, // 0083 GETMET R3 R2 K5
+ 0x8814011A, // 0084 GETMBR R5 R0 K26
+ 0x541A0003, // 0085 LDINT R6 4
+ 0x7C0C0600, // 0086 CALL R3 3
+ 0x600C000C, // 0087 GETGBL R3 G12
+ 0x5C100400, // 0088 MOVE R4 R2
+ 0x7C0C0200, // 0089 CALL R3 1
+ 0x90023603, // 008A SETMBR R0 K27 R3
+ 0x78060000, // 008B JMPF R1 #008D
+ 0x400C0401, // 008C CONNECT R3 R2 R1
+ 0x8C0C011C, // 008D GETMET R3 R0 K28
+ 0x5C140400, // 008E MOVE R5 R2
+ 0x7C0C0400, // 008F CALL R3 2
+ 0x90023A02, // 0090 SETMBR R0 K29 R2
+ 0x80040400, // 0091 RET 1 R2
})
)
);
@@ -1005,7 +1019,7 @@ be_local_closure(Matter_Frame_decode_payload, /* name */
}),
be_str_weak(decode_payload),
&be_const_str_solidified,
- ( &(const binstruction[87]) { /* code */
+ ( &(const binstruction[93]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
0x88080101, // 0001 GETMBR R2 R0 K1
0x8C0C0503, // 0002 GETMET R3 R2 K3
@@ -1058,41 +1072,47 @@ be_local_closure(Matter_Frame_decode_payload, /* name */
0x5818000A, // 0031 LDCONST R6 K10
0x7C0C0600, // 0032 CALL R3 3
0x90021C03, // 0033 SETMBR R0 K14 R3
- 0x8C0C0503, // 0034 GETMET R3 R2 K3
- 0x54160003, // 0035 LDINT R5 4
- 0x00140205, // 0036 ADD R5 R1 R5
- 0x5818000A, // 0037 LDCONST R6 K10
- 0x7C0C0600, // 0038 CALL R3 3
- 0x90021E03, // 0039 SETMBR R0 K15 R3
- 0x540E0005, // 003A LDINT R3 6
- 0x00040203, // 003B ADD R1 R1 R3
- 0x880C0105, // 003C GETMBR R3 R0 K5
- 0x780E0005, // 003D JMPF R3 #0044
- 0x8C0C0503, // 003E GETMET R3 R2 K3
- 0x5C140200, // 003F MOVE R5 R1
- 0x5818000A, // 0040 LDCONST R6 K10
- 0x7C0C0600, // 0041 CALL R3 3
- 0x90022003, // 0042 SETMBR R0 K16 R3
- 0x0004030A, // 0043 ADD R1 R1 K10
- 0x880C010B, // 0044 GETMBR R3 R0 K11
- 0x780E0006, // 0045 JMPF R3 #004D
- 0x8C0C0503, // 0046 GETMET R3 R2 K3
- 0x5C140200, // 0047 MOVE R5 R1
- 0x541A0003, // 0048 LDINT R6 4
- 0x7C0C0600, // 0049 CALL R3 3
- 0x90022203, // 004A SETMBR R0 K17 R3
- 0x540E0003, // 004B LDINT R3 4
- 0x00040203, // 004C ADD R1 R1 R3
- 0x880C0107, // 004D GETMBR R3 R0 K7
- 0x780E0005, // 004E JMPF R3 #0055
- 0x8C0C0503, // 004F GETMET R3 R2 K3
- 0x5C140200, // 0050 MOVE R5 R1
- 0x5818000A, // 0051 LDCONST R6 K10
- 0x7C0C0600, // 0052 CALL R3 3
- 0x0010070A, // 0053 ADD R4 R3 K10
- 0x00040204, // 0054 ADD R1 R1 R4
- 0x90022401, // 0055 SETMBR R0 K18 R1
- 0x80040000, // 0056 RET 1 R0
+ 0x880C010C, // 0034 GETMBR R3 R0 K12
+ 0x740E0003, // 0035 JMPT R3 #003A
+ 0x880C010E, // 0036 GETMBR R3 R0 K14
+ 0x5412FFFF, // 0037 LDINT R4 65536
+ 0x300C0604, // 0038 OR R3 R3 R4
+ 0x90021C03, // 0039 SETMBR R0 K14 R3
+ 0x8C0C0503, // 003A GETMET R3 R2 K3
+ 0x54160003, // 003B LDINT R5 4
+ 0x00140205, // 003C ADD R5 R1 R5
+ 0x5818000A, // 003D LDCONST R6 K10
+ 0x7C0C0600, // 003E CALL R3 3
+ 0x90021E03, // 003F SETMBR R0 K15 R3
+ 0x540E0005, // 0040 LDINT R3 6
+ 0x00040203, // 0041 ADD R1 R1 R3
+ 0x880C0105, // 0042 GETMBR R3 R0 K5
+ 0x780E0005, // 0043 JMPF R3 #004A
+ 0x8C0C0503, // 0044 GETMET R3 R2 K3
+ 0x5C140200, // 0045 MOVE R5 R1
+ 0x5818000A, // 0046 LDCONST R6 K10
+ 0x7C0C0600, // 0047 CALL R3 3
+ 0x90022003, // 0048 SETMBR R0 K16 R3
+ 0x0004030A, // 0049 ADD R1 R1 K10
+ 0x880C010B, // 004A GETMBR R3 R0 K11
+ 0x780E0006, // 004B JMPF R3 #0053
+ 0x8C0C0503, // 004C GETMET R3 R2 K3
+ 0x5C140200, // 004D MOVE R5 R1
+ 0x541A0003, // 004E LDINT R6 4
+ 0x7C0C0600, // 004F CALL R3 3
+ 0x90022203, // 0050 SETMBR R0 K17 R3
+ 0x540E0003, // 0051 LDINT R3 4
+ 0x00040203, // 0052 ADD R1 R1 R3
+ 0x880C0107, // 0053 GETMBR R3 R0 K7
+ 0x780E0005, // 0054 JMPF R3 #005B
+ 0x8C0C0503, // 0055 GETMET R3 R2 K3
+ 0x5C140200, // 0056 MOVE R5 R1
+ 0x5818000A, // 0057 LDCONST R6 K10
+ 0x7C0C0600, // 0058 CALL R3 3
+ 0x0010070A, // 0059 ADD R4 R3 K10
+ 0x00040204, // 005A ADD R1 R1 R4
+ 0x90022401, // 005B SETMBR R0 K18 R1
+ 0x80040000, // 005C RET 1 R0
})
)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
index 34f73b98f..7b85f72b6 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
@@ -40,469 +40,6 @@ be_local_closure(Matter_MessageHandler_send_response, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: msg_received
-********************************************************************/
-be_local_closure(Matter_MessageHandler_msg_received, /* name */
- be_nested_proto(
- 18, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[69]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20raw_X3D),
- /* K4 */ be_nested_str_weak(tohex),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(Frame),
- /* K7 */ be_nested_str_weak(decode_header),
- /* K8 */ be_nested_str_weak(local_session_id),
- /* K9 */ be_const_int(0),
- /* K10 */ be_nested_str_weak(sec_sesstype),
- /* K11 */ be_nested_str_weak(device),
- /* K12 */ be_nested_str_weak(sessions),
- /* K13 */ be_nested_str_weak(find_session_source_id_unsecure),
- /* K14 */ be_nested_str_weak(source_node_id),
- /* K15 */ be_nested_str_weak(MTR_X3A_X20find_X20session_X20by_X20source_node_id_X20_X3D_X20),
- /* K16 */ be_nested_str_weak(session_id_X20_X3D_X20),
- /* K17 */ be_const_int(3),
- /* K18 */ be_nested_str_weak(__ip),
- /* K19 */ be_nested_str_weak(__port),
- /* K20 */ be_nested_str_weak(session),
- /* K21 */ be_nested_str_weak(counter_rcv),
- /* K22 */ be_nested_str_weak(validate),
- /* K23 */ be_nested_str_weak(message_counter),
- /* K24 */ be_nested_str_weak(format),
- /* K25 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20unencrypted_X20message_X20_X3D_X20_X25i_X20ref_X20_X3D_X20_X25i),
- /* K26 */ be_nested_str_weak(val),
- /* K27 */ be_nested_str_weak(decode_payload),
- /* K28 */ be_nested_str_weak(packet_ack),
- /* K29 */ be_nested_str_weak(ack_message_counter),
- /* K30 */ be_nested_str_weak(opcode),
- /* K31 */ be_nested_str_weak(get_opcode_name),
- /* K32 */ be_nested_str_weak(0x_X2502X),
- /* K33 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K34 */ be_const_int(2),
- /* K35 */ be_nested_str_weak(commissioning),
- /* K36 */ be_nested_str_weak(process_incoming),
- /* K37 */ be_nested_str_weak(MTR_X3A_X20decode_X20header_X3A_X20local_session_id_X3D_X25i_X20message_counter_X3D_X25i),
- /* K38 */ be_nested_str_weak(get_session_by_local_session_id),
- /* K39 */ be_nested_str_weak(MTR_X3A_X20unknown_X20local_session_id_X20),
- /* K40 */ be_nested_str_weak(MTR_X3A_X20frame_X3D),
- /* K41 */ be_nested_str_weak(inspect),
- /* K42 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20encrypted_X20message_X20_X3D_X20),
- /* K43 */ be_nested_str_weak(_X20counter_X3D),
- /* K44 */ be_nested_str_weak(decrypt),
- /* K45 */ be_nested_str_weak(raw),
- /* K46 */ be_nested_str_weak(payload_idx),
- /* K47 */ be_const_int(1),
- /* K48 */ be_nested_str_weak(MTR_X3A_X20idx_X3D_X25i_X20clear_X3D_X25s),
- /* K49 */ be_nested_str_weak(MTR_X3A_X20decrypted_X20message_X3A_X20protocol_id_X3A),
- /* K50 */ be_nested_str_weak(protocol_id),
- /* K51 */ be_nested_str_weak(_X20opcode_X3D),
- /* K52 */ be_nested_str_weak(_X20exchange_id_X3D),
- /* K53 */ be_nested_str_weak(exchange_id),
- /* K54 */ be_nested_str_weak(MTR_X3A_X20PROTOCOL_ID_SECURE_CHANNEL_X20),
- /* K55 */ be_nested_str_weak(im),
- /* K56 */ be_nested_str_weak(send_enqueued),
- /* K57 */ be_nested_str_weak(x_flag_r),
- /* K58 */ be_nested_str_weak(build_standalone_ack),
- /* K59 */ be_nested_str_weak(encode),
- /* K60 */ be_nested_str_weak(encrypt),
- /* K61 */ be_nested_str_weak(send_response),
- /* K62 */ be_nested_str_weak(remote_ip),
- /* K63 */ be_nested_str_weak(remote_port),
- /* K64 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
- /* K65 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
- /* K66 */ be_nested_str_weak(_X3B),
- /* K67 */ be_nested_str_weak(debug),
- /* K68 */ be_nested_str_weak(traceback),
- }),
- be_str_weak(msg_received),
- &be_const_str_solidified,
- ( &(const binstruction[313]) { /* code */
- 0xA4120000, // 0000 IMPORT R4 K0
- 0x50140000, // 0001 LDBOOL R5 0 0
- 0xA802011F, // 0002 EXBLK 0 #0123
- 0xB81A0200, // 0003 GETNGBL R6 K1
- 0x8C180D02, // 0004 GETMET R6 R6 K2
- 0x8C200304, // 0005 GETMET R8 R1 K4
- 0x7C200200, // 0006 CALL R8 1
- 0x00220608, // 0007 ADD R8 K3 R8
- 0x54260003, // 0008 LDINT R9 4
- 0x7C180600, // 0009 CALL R6 3
- 0xB81A0A00, // 000A GETNGBL R6 K5
- 0x8C180D06, // 000B GETMET R6 R6 K6
- 0x5C200000, // 000C MOVE R8 R0
- 0x5C240200, // 000D MOVE R9 R1
- 0x5C280400, // 000E MOVE R10 R2
- 0x5C2C0600, // 000F MOVE R11 R3
- 0x7C180A00, // 0010 CALL R6 5
- 0x8C1C0D07, // 0011 GETMET R7 R6 K7
- 0x7C1C0200, // 0012 CALL R7 1
- 0x5C200E00, // 0013 MOVE R8 R7
- 0x74220002, // 0014 JMPT R8 #0018
- 0x50200000, // 0015 LDBOOL R8 0 0
- 0xA8040001, // 0016 EXBLK 1 1
- 0x80041000, // 0017 RET 1 R8
- 0x88200D08, // 0018 GETMBR R8 R6 K8
- 0x1C201109, // 0019 EQ R8 R8 K9
- 0x7822005B, // 001A JMPF R8 #0077
- 0x88200D0A, // 001B GETMBR R8 R6 K10
- 0x1C201109, // 001C EQ R8 R8 K9
- 0x78220058, // 001D JMPF R8 #0077
- 0x8820010B, // 001E GETMBR R8 R0 K11
- 0x8820110C, // 001F GETMBR R8 R8 K12
- 0x8C20110D, // 0020 GETMET R8 R8 K13
- 0x88280D0E, // 0021 GETMBR R10 R6 K14
- 0x542E0059, // 0022 LDINT R11 90
- 0x7C200600, // 0023 CALL R8 3
- 0xB8260200, // 0024 GETNGBL R9 K1
- 0x8C241302, // 0025 GETMET R9 R9 K2
- 0x602C0008, // 0026 GETGBL R11 G8
- 0x88300D0E, // 0027 GETMBR R12 R6 K14
- 0x7C2C0200, // 0028 CALL R11 1
- 0x002E1E0B, // 0029 ADD R11 K15 R11
- 0x002C1710, // 002A ADD R11 R11 K16
- 0x60300008, // 002B GETGBL R12 G8
- 0x88341108, // 002C GETMBR R13 R8 K8
- 0x7C300200, // 002D CALL R12 1
- 0x002C160C, // 002E ADD R11 R11 R12
- 0x58300011, // 002F LDCONST R12 K17
- 0x7C240600, // 0030 CALL R9 3
- 0x780A0000, // 0031 JMPF R2 #0033
- 0x90222402, // 0032 SETMBR R8 K18 R2
- 0x780E0000, // 0033 JMPF R3 #0035
- 0x90222603, // 0034 SETMBR R8 K19 R3
- 0x901A2808, // 0035 SETMBR R6 K20 R8
- 0x88240115, // 0036 GETMBR R9 R0 K21
- 0x8C241316, // 0037 GETMET R9 R9 K22
- 0x882C0D17, // 0038 GETMBR R11 R6 K23
- 0x50300000, // 0039 LDBOOL R12 0 0
- 0x7C240600, // 003A CALL R9 3
- 0x7426000D, // 003B JMPT R9 #004A
- 0xB8260200, // 003C GETNGBL R9 K1
- 0x8C241302, // 003D GETMET R9 R9 K2
- 0x8C2C0918, // 003E GETMET R11 R4 K24
- 0x58340019, // 003F LDCONST R13 K25
- 0x88380D17, // 0040 GETMBR R14 R6 K23
- 0x883C0115, // 0041 GETMBR R15 R0 K21
- 0x8C3C1F1A, // 0042 GETMET R15 R15 K26
- 0x7C3C0200, // 0043 CALL R15 1
- 0x7C2C0800, // 0044 CALL R11 4
- 0x58300011, // 0045 LDCONST R12 K17
- 0x7C240600, // 0046 CALL R9 3
- 0x50240000, // 0047 LDBOOL R9 0 0
- 0xA8040001, // 0048 EXBLK 1 1
- 0x80041200, // 0049 RET 1 R9
- 0x8C240D1B, // 004A GETMET R9 R6 K27
- 0x7C240200, // 004B CALL R9 1
- 0x74260002, // 004C JMPT R9 #0050
- 0x50240000, // 004D LDBOOL R9 0 0
- 0xA8040001, // 004E EXBLK 1 1
- 0x80041200, // 004F RET 1 R9
- 0x8824010B, // 0050 GETMBR R9 R0 K11
- 0x8C24131C, // 0051 GETMET R9 R9 K28
- 0x882C0D1D, // 0052 GETMBR R11 R6 K29
- 0x7C240400, // 0053 CALL R9 2
- 0x88240D1E, // 0054 GETMBR R9 R6 K30
- 0x542A000F, // 0055 LDINT R10 16
- 0x2024120A, // 0056 NE R9 R9 R10
- 0x78260014, // 0057 JMPF R9 #006D
- 0xB8260A00, // 0058 GETNGBL R9 K5
- 0x8C24131F, // 0059 GETMET R9 R9 K31
- 0x882C0D1E, // 005A GETMBR R11 R6 K30
- 0x7C240400, // 005B CALL R9 2
- 0x5C281200, // 005C MOVE R10 R9
- 0x742A0004, // 005D JMPT R10 #0063
- 0x8C280918, // 005E GETMET R10 R4 K24
- 0x58300020, // 005F LDCONST R12 K32
- 0x88340D1E, // 0060 GETMBR R13 R6 K30
- 0x7C280600, // 0061 CALL R10 3
- 0x5C241400, // 0062 MOVE R9 R10
- 0xB82A0200, // 0063 GETNGBL R10 K1
- 0x8C281502, // 0064 GETMET R10 R10 K2
- 0x8C300918, // 0065 GETMET R12 R4 K24
- 0x58380021, // 0066 LDCONST R14 K33
- 0x5C3C1200, // 0067 MOVE R15 R9
- 0x5C400400, // 0068 MOVE R16 R2
- 0x5C440600, // 0069 MOVE R17 R3
- 0x7C300A00, // 006A CALL R12 5
- 0x58340022, // 006B LDCONST R13 K34
- 0x7C280600, // 006C CALL R10 3
- 0x88240123, // 006D GETMBR R9 R0 K35
- 0x8C241324, // 006E GETMET R9 R9 K36
- 0x5C2C0C00, // 006F MOVE R11 R6
- 0x5C300400, // 0070 MOVE R12 R2
- 0x5C340600, // 0071 MOVE R13 R3
- 0x7C240800, // 0072 CALL R9 4
- 0x50240200, // 0073 LDBOOL R9 1 0
- 0xA8040001, // 0074 EXBLK 1 1
- 0x80041200, // 0075 RET 1 R9
- 0x700200A7, // 0076 JMP #011F
- 0xB8220200, // 0077 GETNGBL R8 K1
- 0x8C201102, // 0078 GETMET R8 R8 K2
- 0x8C280918, // 0079 GETMET R10 R4 K24
- 0x58300025, // 007A LDCONST R12 K37
- 0x88340D08, // 007B GETMBR R13 R6 K8
- 0x88380D17, // 007C GETMBR R14 R6 K23
- 0x7C280800, // 007D CALL R10 4
- 0x582C0011, // 007E LDCONST R11 K17
- 0x7C200600, // 007F CALL R8 3
- 0x8820010B, // 0080 GETMBR R8 R0 K11
- 0x8820110C, // 0081 GETMBR R8 R8 K12
- 0x8C201126, // 0082 GETMET R8 R8 K38
- 0x88280D08, // 0083 GETMBR R10 R6 K8
- 0x7C200400, // 0084 CALL R8 2
- 0x4C240000, // 0085 LDNIL R9
- 0x1C241009, // 0086 EQ R9 R8 R9
- 0x78260013, // 0087 JMPF R9 #009C
- 0xB8260200, // 0088 GETNGBL R9 K1
- 0x8C241302, // 0089 GETMET R9 R9 K2
- 0x602C0008, // 008A GETGBL R11 G8
- 0x88300D08, // 008B GETMBR R12 R6 K8
- 0x7C2C0200, // 008C CALL R11 1
- 0x002E4E0B, // 008D ADD R11 K39 R11
- 0x58300011, // 008E LDCONST R12 K17
- 0x7C240600, // 008F CALL R9 3
- 0xB8260200, // 0090 GETNGBL R9 K1
- 0x8C241302, // 0091 GETMET R9 R9 K2
- 0xB82E0A00, // 0092 GETNGBL R11 K5
- 0x8C2C1729, // 0093 GETMET R11 R11 K41
- 0x5C340C00, // 0094 MOVE R13 R6
- 0x7C2C0400, // 0095 CALL R11 2
- 0x002E500B, // 0096 ADD R11 K40 R11
- 0x58300011, // 0097 LDCONST R12 K17
- 0x7C240600, // 0098 CALL R9 3
- 0x50240000, // 0099 LDBOOL R9 0 0
- 0xA8040001, // 009A EXBLK 1 1
- 0x80041200, // 009B RET 1 R9
- 0x780A0000, // 009C JMPF R2 #009E
- 0x90222402, // 009D SETMBR R8 K18 R2
- 0x780E0000, // 009E JMPF R3 #00A0
- 0x90222603, // 009F SETMBR R8 K19 R3
- 0x901A2808, // 00A0 SETMBR R6 K20 R8
- 0x88241115, // 00A1 GETMBR R9 R8 K21
- 0x8C241316, // 00A2 GETMET R9 R9 K22
- 0x882C0D17, // 00A3 GETMBR R11 R6 K23
- 0x50300200, // 00A4 LDBOOL R12 1 0
- 0x7C240600, // 00A5 CALL R9 3
- 0x74260011, // 00A6 JMPT R9 #00B9
- 0xB8260200, // 00A7 GETNGBL R9 K1
- 0x8C241302, // 00A8 GETMET R9 R9 K2
- 0x602C0008, // 00A9 GETGBL R11 G8
- 0x88300D17, // 00AA GETMBR R12 R6 K23
- 0x7C2C0200, // 00AB CALL R11 1
- 0x002E540B, // 00AC ADD R11 K42 R11
- 0x002C172B, // 00AD ADD R11 R11 K43
- 0x60300008, // 00AE GETGBL R12 G8
- 0x88341115, // 00AF GETMBR R13 R8 K21
- 0x8C341B1A, // 00B0 GETMET R13 R13 K26
- 0x7C340200, // 00B1 CALL R13 1
- 0x7C300200, // 00B2 CALL R12 1
- 0x002C160C, // 00B3 ADD R11 R11 R12
- 0x58300011, // 00B4 LDCONST R12 K17
- 0x7C240600, // 00B5 CALL R9 3
- 0x50240000, // 00B6 LDBOOL R9 0 0
- 0xA8040001, // 00B7 EXBLK 1 1
- 0x80041200, // 00B8 RET 1 R9
- 0x8C240D2C, // 00B9 GETMET R9 R6 K44
- 0x7C240200, // 00BA CALL R9 1
- 0x5C281200, // 00BB MOVE R10 R9
- 0x742A0002, // 00BC JMPT R10 #00C0
- 0x50280000, // 00BD LDBOOL R10 0 0
- 0xA8040001, // 00BE EXBLK 1 1
- 0x80041400, // 00BF RET 1 R10
- 0x88280D2E, // 00C0 GETMBR R10 R6 K46
- 0x0428152F, // 00C1 SUB R10 R10 K47
- 0x402A120A, // 00C2 CONNECT R10 K9 R10
- 0x882C0D2D, // 00C3 GETMBR R11 R6 K45
- 0x9428160A, // 00C4 GETIDX R10 R11 R10
- 0x901A5A0A, // 00C5 SETMBR R6 K45 R10
- 0x88280D2D, // 00C6 GETMBR R10 R6 K45
- 0x40281409, // 00C7 CONNECT R10 R10 R9
- 0xB82A0200, // 00C8 GETNGBL R10 K1
- 0x8C281502, // 00C9 GETMET R10 R10 K2
- 0x8C300918, // 00CA GETMET R12 R4 K24
- 0x58380030, // 00CB LDCONST R14 K48
- 0x883C0D2E, // 00CC GETMBR R15 R6 K46
- 0x88400D2D, // 00CD GETMBR R16 R6 K45
- 0x8C402104, // 00CE GETMET R16 R16 K4
- 0x7C400200, // 00CF CALL R16 1
- 0x7C300800, // 00D0 CALL R12 4
- 0x58340011, // 00D1 LDCONST R13 K17
- 0x7C280600, // 00D2 CALL R10 3
- 0x8C280D1B, // 00D3 GETMET R10 R6 K27
- 0x7C280200, // 00D4 CALL R10 1
- 0xB82A0200, // 00D5 GETNGBL R10 K1
- 0x8C281502, // 00D6 GETMET R10 R10 K2
- 0x60300008, // 00D7 GETGBL R12 G8
- 0x88340D32, // 00D8 GETMBR R13 R6 K50
- 0x7C300200, // 00D9 CALL R12 1
- 0x0032620C, // 00DA ADD R12 K49 R12
- 0x00301933, // 00DB ADD R12 R12 K51
- 0x60340008, // 00DC GETGBL R13 G8
- 0x88380D1E, // 00DD GETMBR R14 R6 K30
- 0x7C340200, // 00DE CALL R13 1
- 0x0030180D, // 00DF ADD R12 R12 R13
- 0x00301934, // 00E0 ADD R12 R12 K52
- 0x60340008, // 00E1 GETGBL R13 G8
- 0x88380D35, // 00E2 GETMBR R14 R6 K53
- 0x7C340200, // 00E3 CALL R13 1
- 0x0030180D, // 00E4 ADD R12 R12 R13
- 0x58340011, // 00E5 LDCONST R13 K17
- 0x7C280600, // 00E6 CALL R10 3
- 0x8828010B, // 00E7 GETMBR R10 R0 K11
- 0x8C28151C, // 00E8 GETMET R10 R10 K28
- 0x88300D1D, // 00E9 GETMBR R12 R6 K29
- 0x7C280400, // 00EA CALL R10 2
- 0x88280D32, // 00EB GETMBR R10 R6 K50
- 0x1C2C1509, // 00EC EQ R11 R10 K9
- 0x782E000A, // 00ED JMPF R11 #00F9
- 0xB82E0200, // 00EE GETNGBL R11 K1
- 0x8C2C1702, // 00EF GETMET R11 R11 K2
- 0xB8360A00, // 00F0 GETNGBL R13 K5
- 0x8C341B29, // 00F1 GETMET R13 R13 K41
- 0x5C3C0C00, // 00F2 MOVE R15 R6
- 0x7C340400, // 00F3 CALL R13 2
- 0x00366C0D, // 00F4 ADD R13 K54 R13
- 0x58380011, // 00F5 LDCONST R14 K17
- 0x7C2C0600, // 00F6 CALL R11 3
- 0x50140200, // 00F7 LDBOOL R5 1 0
- 0x70020025, // 00F8 JMP #011F
- 0x1C2C152F, // 00F9 EQ R11 R10 K47
- 0x782E001B, // 00FA JMPF R11 #0117
- 0x882C0137, // 00FB GETMBR R11 R0 K55
- 0x8C2C1724, // 00FC GETMET R11 R11 K36
- 0x5C340C00, // 00FD MOVE R13 R6
- 0x5C380400, // 00FE MOVE R14 R2
- 0x5C3C0600, // 00FF MOVE R15 R3
- 0x7C2C0800, // 0100 CALL R11 4
- 0x5C141600, // 0101 MOVE R5 R11
- 0x78160004, // 0102 JMPF R5 #0108
- 0x882C0137, // 0103 GETMBR R11 R0 K55
- 0x8C2C1738, // 0104 GETMET R11 R11 K56
- 0x5C340000, // 0105 MOVE R13 R0
- 0x7C2C0400, // 0106 CALL R11 2
- 0x7002000D, // 0107 JMP #0116
- 0x882C0D39, // 0108 GETMBR R11 R6 K57
- 0x782E000B, // 0109 JMPF R11 #0116
- 0x8C2C0D3A, // 010A GETMET R11 R6 K58
- 0x7C2C0200, // 010B CALL R11 1
- 0x8C30173B, // 010C GETMET R12 R11 K59
- 0x7C300200, // 010D CALL R12 1
- 0x8C30173C, // 010E GETMET R12 R11 K60
- 0x7C300200, // 010F CALL R12 1
- 0x8C30013D, // 0110 GETMET R12 R0 K61
- 0x8838172D, // 0111 GETMBR R14 R11 K45
- 0x883C173E, // 0112 GETMBR R15 R11 K62
- 0x8840173F, // 0113 GETMBR R16 R11 K63
- 0x88441717, // 0114 GETMBR R17 R11 K23
- 0x7C300A00, // 0115 CALL R12 5
- 0x70020007, // 0116 JMP #011F
- 0xB82E0200, // 0117 GETNGBL R11 K1
- 0x8C2C1702, // 0118 GETMET R11 R11 K2
- 0x60340008, // 0119 GETGBL R13 G8
- 0x5C381400, // 011A MOVE R14 R10
- 0x7C340200, // 011B CALL R13 1
- 0x0036800D, // 011C ADD R13 K64 R13
- 0x58380011, // 011D LDCONST R14 K17
- 0x7C2C0600, // 011E CALL R11 3
- 0xA8040001, // 011F EXBLK 1 1
- 0x80040A00, // 0120 RET 1 R5
- 0xA8040001, // 0121 EXBLK 1 1
- 0x70020014, // 0122 JMP #0138
- 0xAC180002, // 0123 CATCH R6 0 2
- 0x70020011, // 0124 JMP #0137
- 0xB8220200, // 0125 GETNGBL R8 K1
- 0x8C201102, // 0126 GETMET R8 R8 K2
- 0x60280008, // 0127 GETGBL R10 G8
- 0x5C2C0C00, // 0128 MOVE R11 R6
- 0x7C280200, // 0129 CALL R10 1
- 0x002A820A, // 012A ADD R10 K65 R10
- 0x00281542, // 012B ADD R10 R10 K66
- 0x602C0008, // 012C GETGBL R11 G8
- 0x5C300E00, // 012D MOVE R12 R7
- 0x7C2C0200, // 012E CALL R11 1
- 0x0028140B, // 012F ADD R10 R10 R11
- 0x7C200400, // 0130 CALL R8 2
- 0xA4228600, // 0131 IMPORT R8 K67
- 0x8C241144, // 0132 GETMET R9 R8 K68
- 0x7C240200, // 0133 CALL R9 1
- 0x50240000, // 0134 LDBOOL R9 0 0
- 0x80041200, // 0135 RET 1 R9
- 0x70020000, // 0136 JMP #0138
- 0xB0080000, // 0137 RAISE 2 R0 R0
- 0x80000000, // 0138 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_session
-********************************************************************/
-be_local_closure(Matter_MessageHandler_add_session, /* name */
- be_nested_proto(
- 15, /* nstack */
- 7, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[10]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(format),
- /* K4 */ be_nested_str_weak(MTR_X3A_X20add_session_X20local_session_id_X3D_X25i_X20initiator_session_id_X3D_X25i),
- /* K5 */ be_const_int(3),
- /* K6 */ be_nested_str_weak(device),
- /* K7 */ be_nested_str_weak(sessions),
- /* K8 */ be_nested_str_weak(create_session),
- /* K9 */ be_nested_str_weak(set_keys),
- }),
- be_str_weak(add_session),
- &be_const_str_solidified,
- ( &(const binstruction[23]) { /* code */
- 0xA41E0000, // 0000 IMPORT R7 K0
- 0xB8220200, // 0001 GETNGBL R8 K1
- 0x8C201102, // 0002 GETMET R8 R8 K2
- 0x8C280F03, // 0003 GETMET R10 R7 K3
- 0x58300004, // 0004 LDCONST R12 K4
- 0x5C340200, // 0005 MOVE R13 R1
- 0x5C380400, // 0006 MOVE R14 R2
- 0x7C280800, // 0007 CALL R10 4
- 0x582C0005, // 0008 LDCONST R11 K5
- 0x7C200600, // 0009 CALL R8 3
- 0x88200106, // 000A GETMBR R8 R0 K6
- 0x88201107, // 000B GETMBR R8 R8 K7
- 0x8C201108, // 000C GETMET R8 R8 K8
- 0x5C280200, // 000D MOVE R10 R1
- 0x5C2C0400, // 000E MOVE R11 R2
- 0x7C200600, // 000F CALL R8 3
- 0x8C241109, // 0010 GETMET R9 R8 K9
- 0x5C2C0600, // 0011 MOVE R11 R3
- 0x5C300800, // 0012 MOVE R12 R4
- 0x5C340A00, // 0013 MOVE R13 R5
- 0x5C380C00, // 0014 MOVE R14 R6
- 0x7C240A00, // 0015 CALL R9 5
- 0x80000000, // 0016 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: init
********************************************************************/
@@ -585,23 +122,522 @@ be_local_closure(Matter_MessageHandler_every_second, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: add_session
+********************************************************************/
+be_local_closure(Matter_MessageHandler_add_session, /* name */
+ be_nested_proto(
+ 15, /* nstack */
+ 7, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20add_session_X20local_session_id_X3D_X25i_X20initiator_session_id_X3D_X25i),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_nested_str_weak(device),
+ /* K7 */ be_nested_str_weak(sessions),
+ /* K8 */ be_nested_str_weak(create_session),
+ /* K9 */ be_nested_str_weak(set_keys),
+ }),
+ be_str_weak(add_session),
+ &be_const_str_solidified,
+ ( &(const binstruction[23]) { /* code */
+ 0xA41E0000, // 0000 IMPORT R7 K0
+ 0xB8220200, // 0001 GETNGBL R8 K1
+ 0x8C201102, // 0002 GETMET R8 R8 K2
+ 0x8C280F03, // 0003 GETMET R10 R7 K3
+ 0x58300004, // 0004 LDCONST R12 K4
+ 0x5C340200, // 0005 MOVE R13 R1
+ 0x5C380400, // 0006 MOVE R14 R2
+ 0x7C280800, // 0007 CALL R10 4
+ 0x582C0005, // 0008 LDCONST R11 K5
+ 0x7C200600, // 0009 CALL R8 3
+ 0x88200106, // 000A GETMBR R8 R0 K6
+ 0x88201107, // 000B GETMBR R8 R8 K7
+ 0x8C201108, // 000C GETMET R8 R8 K8
+ 0x5C280200, // 000D MOVE R10 R1
+ 0x5C2C0400, // 000E MOVE R11 R2
+ 0x7C200600, // 000F CALL R8 3
+ 0x8C241109, // 0010 GETMET R9 R8 K9
+ 0x5C2C0600, // 0011 MOVE R11 R3
+ 0x5C300800, // 0012 MOVE R12 R4
+ 0x5C340A00, // 0013 MOVE R13 R5
+ 0x5C380C00, // 0014 MOVE R14 R6
+ 0x7C240A00, // 0015 CALL R9 5
+ 0x80000000, // 0016 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: msg_received
+********************************************************************/
+be_local_closure(Matter_MessageHandler_msg_received, /* name */
+ be_nested_proto(
+ 18, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[70]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20raw_X3D),
+ /* K4 */ be_nested_str_weak(tohex),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(Frame),
+ /* K7 */ be_nested_str_weak(decode_header),
+ /* K8 */ be_nested_str_weak(local_session_id),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_nested_str_weak(sec_sesstype),
+ /* K11 */ be_nested_str_weak(device),
+ /* K12 */ be_nested_str_weak(sessions),
+ /* K13 */ be_nested_str_weak(find_session_source_id_unsecure),
+ /* K14 */ be_nested_str_weak(source_node_id),
+ /* K15 */ be_nested_str_weak(MTR_X3A_X20find_X20session_X20by_X20source_node_id_X20_X3D_X20),
+ /* K16 */ be_nested_str_weak(session_id_X20_X3D_X20),
+ /* K17 */ be_const_int(3),
+ /* K18 */ be_nested_str_weak(__ip),
+ /* K19 */ be_nested_str_weak(__port),
+ /* K20 */ be_nested_str_weak(__message_handler),
+ /* K21 */ be_nested_str_weak(session),
+ /* K22 */ be_nested_str_weak(counter_rcv),
+ /* K23 */ be_nested_str_weak(validate),
+ /* K24 */ be_nested_str_weak(message_counter),
+ /* K25 */ be_nested_str_weak(format),
+ /* K26 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20unencrypted_X20message_X20_X3D_X20_X25i_X20ref_X20_X3D_X20_X25i),
+ /* K27 */ be_nested_str_weak(val),
+ /* K28 */ be_nested_str_weak(decode_payload),
+ /* K29 */ be_nested_str_weak(packet_ack),
+ /* K30 */ be_nested_str_weak(ack_message_counter),
+ /* K31 */ be_nested_str_weak(opcode),
+ /* K32 */ be_nested_str_weak(get_opcode_name),
+ /* K33 */ be_nested_str_weak(0x_X2502X),
+ /* K34 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K35 */ be_const_int(2),
+ /* K36 */ be_nested_str_weak(commissioning),
+ /* K37 */ be_nested_str_weak(process_incoming),
+ /* K38 */ be_nested_str_weak(MTR_X3A_X20decode_X20header_X3A_X20local_session_id_X3D_X25i_X20message_counter_X3D_X25i),
+ /* K39 */ be_nested_str_weak(get_session_by_local_session_id),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20unknown_X20local_session_id_X20),
+ /* K41 */ be_nested_str_weak(MTR_X3A_X20frame_X3D),
+ /* K42 */ be_nested_str_weak(inspect),
+ /* K43 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20encrypted_X20message_X20_X3D_X20),
+ /* K44 */ be_nested_str_weak(_X20counter_X3D),
+ /* K45 */ be_nested_str_weak(decrypt),
+ /* K46 */ be_nested_str_weak(raw),
+ /* K47 */ be_nested_str_weak(payload_idx),
+ /* K48 */ be_const_int(1),
+ /* K49 */ be_nested_str_weak(MTR_X3A_X20idx_X3D_X25i_X20clear_X3D_X25s),
+ /* K50 */ be_nested_str_weak(MTR_X3A_X20decrypted_X20message_X3A_X20protocol_id_X3A),
+ /* K51 */ be_nested_str_weak(protocol_id),
+ /* K52 */ be_nested_str_weak(_X20opcode_X3D),
+ /* K53 */ be_nested_str_weak(_X20exchange_id_X3D),
+ /* K54 */ be_nested_str_weak(exchange_id),
+ /* K55 */ be_nested_str_weak(MTR_X3A_X20PROTOCOL_ID_SECURE_CHANNEL_X20),
+ /* K56 */ be_nested_str_weak(im),
+ /* K57 */ be_nested_str_weak(send_enqueued),
+ /* K58 */ be_nested_str_weak(x_flag_r),
+ /* K59 */ be_nested_str_weak(build_standalone_ack),
+ /* K60 */ be_nested_str_weak(encode),
+ /* K61 */ be_nested_str_weak(encrypt),
+ /* K62 */ be_nested_str_weak(send_response),
+ /* K63 */ be_nested_str_weak(remote_ip),
+ /* K64 */ be_nested_str_weak(remote_port),
+ /* K65 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
+ /* K66 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
+ /* K67 */ be_nested_str_weak(_X3B),
+ /* K68 */ be_nested_str_weak(debug),
+ /* K69 */ be_nested_str_weak(traceback),
+ }),
+ be_str_weak(msg_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[317]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0x50140000, // 0001 LDBOOL R5 0 0
+ 0xA8020123, // 0002 EXBLK 0 #0127
+ 0xB81A0200, // 0003 GETNGBL R6 K1
+ 0x8C180D02, // 0004 GETMET R6 R6 K2
+ 0x8C200304, // 0005 GETMET R8 R1 K4
+ 0x7C200200, // 0006 CALL R8 1
+ 0x00220608, // 0007 ADD R8 K3 R8
+ 0x54260003, // 0008 LDINT R9 4
+ 0x7C180600, // 0009 CALL R6 3
+ 0xB81A0A00, // 000A GETNGBL R6 K5
+ 0x8C180D06, // 000B GETMET R6 R6 K6
+ 0x5C200000, // 000C MOVE R8 R0
+ 0x5C240200, // 000D MOVE R9 R1
+ 0x5C280400, // 000E MOVE R10 R2
+ 0x5C2C0600, // 000F MOVE R11 R3
+ 0x7C180A00, // 0010 CALL R6 5
+ 0x8C1C0D07, // 0011 GETMET R7 R6 K7
+ 0x7C1C0200, // 0012 CALL R7 1
+ 0x5C200E00, // 0013 MOVE R8 R7
+ 0x74220002, // 0014 JMPT R8 #0018
+ 0x50200000, // 0015 LDBOOL R8 0 0
+ 0xA8040001, // 0016 EXBLK 1 1
+ 0x80041000, // 0017 RET 1 R8
+ 0x88200D08, // 0018 GETMBR R8 R6 K8
+ 0x1C201109, // 0019 EQ R8 R8 K9
+ 0x7822005C, // 001A JMPF R8 #0078
+ 0x88200D0A, // 001B GETMBR R8 R6 K10
+ 0x1C201109, // 001C EQ R8 R8 K9
+ 0x78220059, // 001D JMPF R8 #0078
+ 0x8820010B, // 001E GETMBR R8 R0 K11
+ 0x8820110C, // 001F GETMBR R8 R8 K12
+ 0x8C20110D, // 0020 GETMET R8 R8 K13
+ 0x88280D0E, // 0021 GETMBR R10 R6 K14
+ 0x542E0059, // 0022 LDINT R11 90
+ 0x7C200600, // 0023 CALL R8 3
+ 0xB8260200, // 0024 GETNGBL R9 K1
+ 0x8C241302, // 0025 GETMET R9 R9 K2
+ 0x602C0008, // 0026 GETGBL R11 G8
+ 0x88300D0E, // 0027 GETMBR R12 R6 K14
+ 0x7C2C0200, // 0028 CALL R11 1
+ 0x002E1E0B, // 0029 ADD R11 K15 R11
+ 0x002C1710, // 002A ADD R11 R11 K16
+ 0x60300008, // 002B GETGBL R12 G8
+ 0x88341108, // 002C GETMBR R13 R8 K8
+ 0x7C300200, // 002D CALL R12 1
+ 0x002C160C, // 002E ADD R11 R11 R12
+ 0x58300011, // 002F LDCONST R12 K17
+ 0x7C240600, // 0030 CALL R9 3
+ 0x780A0000, // 0031 JMPF R2 #0033
+ 0x90222402, // 0032 SETMBR R8 K18 R2
+ 0x780E0000, // 0033 JMPF R3 #0035
+ 0x90222603, // 0034 SETMBR R8 K19 R3
+ 0x90222800, // 0035 SETMBR R8 K20 R0
+ 0x901A2A08, // 0036 SETMBR R6 K21 R8
+ 0x88240116, // 0037 GETMBR R9 R0 K22
+ 0x8C241317, // 0038 GETMET R9 R9 K23
+ 0x882C0D18, // 0039 GETMBR R11 R6 K24
+ 0x50300000, // 003A LDBOOL R12 0 0
+ 0x7C240600, // 003B CALL R9 3
+ 0x7426000D, // 003C JMPT R9 #004B
+ 0xB8260200, // 003D GETNGBL R9 K1
+ 0x8C241302, // 003E GETMET R9 R9 K2
+ 0x8C2C0919, // 003F GETMET R11 R4 K25
+ 0x5834001A, // 0040 LDCONST R13 K26
+ 0x88380D18, // 0041 GETMBR R14 R6 K24
+ 0x883C0116, // 0042 GETMBR R15 R0 K22
+ 0x8C3C1F1B, // 0043 GETMET R15 R15 K27
+ 0x7C3C0200, // 0044 CALL R15 1
+ 0x7C2C0800, // 0045 CALL R11 4
+ 0x58300011, // 0046 LDCONST R12 K17
+ 0x7C240600, // 0047 CALL R9 3
+ 0x50240000, // 0048 LDBOOL R9 0 0
+ 0xA8040001, // 0049 EXBLK 1 1
+ 0x80041200, // 004A RET 1 R9
+ 0x8C240D1C, // 004B GETMET R9 R6 K28
+ 0x7C240200, // 004C CALL R9 1
+ 0x74260002, // 004D JMPT R9 #0051
+ 0x50240000, // 004E LDBOOL R9 0 0
+ 0xA8040001, // 004F EXBLK 1 1
+ 0x80041200, // 0050 RET 1 R9
+ 0x8824010B, // 0051 GETMBR R9 R0 K11
+ 0x8C24131D, // 0052 GETMET R9 R9 K29
+ 0x882C0D1E, // 0053 GETMBR R11 R6 K30
+ 0x7C240400, // 0054 CALL R9 2
+ 0x88240D1F, // 0055 GETMBR R9 R6 K31
+ 0x542A000F, // 0056 LDINT R10 16
+ 0x2024120A, // 0057 NE R9 R9 R10
+ 0x78260014, // 0058 JMPF R9 #006E
+ 0xB8260A00, // 0059 GETNGBL R9 K5
+ 0x8C241320, // 005A GETMET R9 R9 K32
+ 0x882C0D1F, // 005B GETMBR R11 R6 K31
+ 0x7C240400, // 005C CALL R9 2
+ 0x5C281200, // 005D MOVE R10 R9
+ 0x742A0004, // 005E JMPT R10 #0064
+ 0x8C280919, // 005F GETMET R10 R4 K25
+ 0x58300021, // 0060 LDCONST R12 K33
+ 0x88340D1F, // 0061 GETMBR R13 R6 K31
+ 0x7C280600, // 0062 CALL R10 3
+ 0x5C241400, // 0063 MOVE R9 R10
+ 0xB82A0200, // 0064 GETNGBL R10 K1
+ 0x8C281502, // 0065 GETMET R10 R10 K2
+ 0x8C300919, // 0066 GETMET R12 R4 K25
+ 0x58380022, // 0067 LDCONST R14 K34
+ 0x5C3C1200, // 0068 MOVE R15 R9
+ 0x5C400400, // 0069 MOVE R16 R2
+ 0x5C440600, // 006A MOVE R17 R3
+ 0x7C300A00, // 006B CALL R12 5
+ 0x58340023, // 006C LDCONST R13 K35
+ 0x7C280600, // 006D CALL R10 3
+ 0x88240124, // 006E GETMBR R9 R0 K36
+ 0x8C241325, // 006F GETMET R9 R9 K37
+ 0x5C2C0C00, // 0070 MOVE R11 R6
+ 0x5C300400, // 0071 MOVE R12 R2
+ 0x5C340600, // 0072 MOVE R13 R3
+ 0x7C240800, // 0073 CALL R9 4
+ 0x50240200, // 0074 LDBOOL R9 1 0
+ 0xA8040001, // 0075 EXBLK 1 1
+ 0x80041200, // 0076 RET 1 R9
+ 0x700200AA, // 0077 JMP #0123
+ 0xB8220200, // 0078 GETNGBL R8 K1
+ 0x8C201102, // 0079 GETMET R8 R8 K2
+ 0x8C280919, // 007A GETMET R10 R4 K25
+ 0x58300026, // 007B LDCONST R12 K38
+ 0x88340D08, // 007C GETMBR R13 R6 K8
+ 0x88380D18, // 007D GETMBR R14 R6 K24
+ 0x7C280800, // 007E CALL R10 4
+ 0x582C0011, // 007F LDCONST R11 K17
+ 0x7C200600, // 0080 CALL R8 3
+ 0x8820010B, // 0081 GETMBR R8 R0 K11
+ 0x8820110C, // 0082 GETMBR R8 R8 K12
+ 0x8C201127, // 0083 GETMET R8 R8 K39
+ 0x88280D08, // 0084 GETMBR R10 R6 K8
+ 0x7C200400, // 0085 CALL R8 2
+ 0x4C240000, // 0086 LDNIL R9
+ 0x1C241009, // 0087 EQ R9 R8 R9
+ 0x78260013, // 0088 JMPF R9 #009D
+ 0xB8260200, // 0089 GETNGBL R9 K1
+ 0x8C241302, // 008A GETMET R9 R9 K2
+ 0x602C0008, // 008B GETGBL R11 G8
+ 0x88300D08, // 008C GETMBR R12 R6 K8
+ 0x7C2C0200, // 008D CALL R11 1
+ 0x002E500B, // 008E ADD R11 K40 R11
+ 0x58300011, // 008F LDCONST R12 K17
+ 0x7C240600, // 0090 CALL R9 3
+ 0xB8260200, // 0091 GETNGBL R9 K1
+ 0x8C241302, // 0092 GETMET R9 R9 K2
+ 0xB82E0A00, // 0093 GETNGBL R11 K5
+ 0x8C2C172A, // 0094 GETMET R11 R11 K42
+ 0x5C340C00, // 0095 MOVE R13 R6
+ 0x7C2C0400, // 0096 CALL R11 2
+ 0x002E520B, // 0097 ADD R11 K41 R11
+ 0x58300011, // 0098 LDCONST R12 K17
+ 0x7C240600, // 0099 CALL R9 3
+ 0x50240000, // 009A LDBOOL R9 0 0
+ 0xA8040001, // 009B EXBLK 1 1
+ 0x80041200, // 009C RET 1 R9
+ 0x780A0000, // 009D JMPF R2 #009F
+ 0x90222402, // 009E SETMBR R8 K18 R2
+ 0x780E0000, // 009F JMPF R3 #00A1
+ 0x90222603, // 00A0 SETMBR R8 K19 R3
+ 0x90222800, // 00A1 SETMBR R8 K20 R0
+ 0x901A2A08, // 00A2 SETMBR R6 K21 R8
+ 0x88241116, // 00A3 GETMBR R9 R8 K22
+ 0x8C241317, // 00A4 GETMET R9 R9 K23
+ 0x882C0D18, // 00A5 GETMBR R11 R6 K24
+ 0x50300200, // 00A6 LDBOOL R12 1 0
+ 0x7C240600, // 00A7 CALL R9 3
+ 0x74260011, // 00A8 JMPT R9 #00BB
+ 0xB8260200, // 00A9 GETNGBL R9 K1
+ 0x8C241302, // 00AA GETMET R9 R9 K2
+ 0x602C0008, // 00AB GETGBL R11 G8
+ 0x88300D18, // 00AC GETMBR R12 R6 K24
+ 0x7C2C0200, // 00AD CALL R11 1
+ 0x002E560B, // 00AE ADD R11 K43 R11
+ 0x002C172C, // 00AF ADD R11 R11 K44
+ 0x60300008, // 00B0 GETGBL R12 G8
+ 0x88341116, // 00B1 GETMBR R13 R8 K22
+ 0x8C341B1B, // 00B2 GETMET R13 R13 K27
+ 0x7C340200, // 00B3 CALL R13 1
+ 0x7C300200, // 00B4 CALL R12 1
+ 0x002C160C, // 00B5 ADD R11 R11 R12
+ 0x58300011, // 00B6 LDCONST R12 K17
+ 0x7C240600, // 00B7 CALL R9 3
+ 0x50240000, // 00B8 LDBOOL R9 0 0
+ 0xA8040001, // 00B9 EXBLK 1 1
+ 0x80041200, // 00BA RET 1 R9
+ 0x8C240D2D, // 00BB GETMET R9 R6 K45
+ 0x7C240200, // 00BC CALL R9 1
+ 0x5C281200, // 00BD MOVE R10 R9
+ 0x742A0002, // 00BE JMPT R10 #00C2
+ 0x50280000, // 00BF LDBOOL R10 0 0
+ 0xA8040001, // 00C0 EXBLK 1 1
+ 0x80041400, // 00C1 RET 1 R10
+ 0x88280D2F, // 00C2 GETMBR R10 R6 K47
+ 0x04281530, // 00C3 SUB R10 R10 K48
+ 0x402A120A, // 00C4 CONNECT R10 K9 R10
+ 0x882C0D2E, // 00C5 GETMBR R11 R6 K46
+ 0x9428160A, // 00C6 GETIDX R10 R11 R10
+ 0x901A5C0A, // 00C7 SETMBR R6 K46 R10
+ 0x88280D2E, // 00C8 GETMBR R10 R6 K46
+ 0x40281409, // 00C9 CONNECT R10 R10 R9
+ 0xB82A0200, // 00CA GETNGBL R10 K1
+ 0x8C281502, // 00CB GETMET R10 R10 K2
+ 0x8C300919, // 00CC GETMET R12 R4 K25
+ 0x58380031, // 00CD LDCONST R14 K49
+ 0x883C0D2F, // 00CE GETMBR R15 R6 K47
+ 0x88400D2E, // 00CF GETMBR R16 R6 K46
+ 0x8C402104, // 00D0 GETMET R16 R16 K4
+ 0x7C400200, // 00D1 CALL R16 1
+ 0x7C300800, // 00D2 CALL R12 4
+ 0x58340011, // 00D3 LDCONST R13 K17
+ 0x7C280600, // 00D4 CALL R10 3
+ 0x8C280D1C, // 00D5 GETMET R10 R6 K28
+ 0x7C280200, // 00D6 CALL R10 1
+ 0xB82A0200, // 00D7 GETNGBL R10 K1
+ 0x8C281502, // 00D8 GETMET R10 R10 K2
+ 0x60300008, // 00D9 GETGBL R12 G8
+ 0x88340D33, // 00DA GETMBR R13 R6 K51
+ 0x7C300200, // 00DB CALL R12 1
+ 0x0032640C, // 00DC ADD R12 K50 R12
+ 0x00301934, // 00DD ADD R12 R12 K52
+ 0x60340008, // 00DE GETGBL R13 G8
+ 0x88380D1F, // 00DF GETMBR R14 R6 K31
+ 0x7C340200, // 00E0 CALL R13 1
+ 0x0030180D, // 00E1 ADD R12 R12 R13
+ 0x00301935, // 00E2 ADD R12 R12 K53
+ 0x60340008, // 00E3 GETGBL R13 G8
+ 0x88380D36, // 00E4 GETMBR R14 R6 K54
+ 0x543EFFFE, // 00E5 LDINT R15 65535
+ 0x2C381C0F, // 00E6 AND R14 R14 R15
+ 0x7C340200, // 00E7 CALL R13 1
+ 0x0030180D, // 00E8 ADD R12 R12 R13
+ 0x58340011, // 00E9 LDCONST R13 K17
+ 0x7C280600, // 00EA CALL R10 3
+ 0x8828010B, // 00EB GETMBR R10 R0 K11
+ 0x8C28151D, // 00EC GETMET R10 R10 K29
+ 0x88300D1E, // 00ED GETMBR R12 R6 K30
+ 0x7C280400, // 00EE CALL R10 2
+ 0x88280D33, // 00EF GETMBR R10 R6 K51
+ 0x1C2C1509, // 00F0 EQ R11 R10 K9
+ 0x782E000A, // 00F1 JMPF R11 #00FD
+ 0xB82E0200, // 00F2 GETNGBL R11 K1
+ 0x8C2C1702, // 00F3 GETMET R11 R11 K2
+ 0xB8360A00, // 00F4 GETNGBL R13 K5
+ 0x8C341B2A, // 00F5 GETMET R13 R13 K42
+ 0x5C3C0C00, // 00F6 MOVE R15 R6
+ 0x7C340400, // 00F7 CALL R13 2
+ 0x00366E0D, // 00F8 ADD R13 K55 R13
+ 0x58380011, // 00F9 LDCONST R14 K17
+ 0x7C2C0600, // 00FA CALL R11 3
+ 0x50140200, // 00FB LDBOOL R5 1 0
+ 0x70020025, // 00FC JMP #0123
+ 0x1C2C1530, // 00FD EQ R11 R10 K48
+ 0x782E001B, // 00FE JMPF R11 #011B
+ 0x882C0138, // 00FF GETMBR R11 R0 K56
+ 0x8C2C1725, // 0100 GETMET R11 R11 K37
+ 0x5C340C00, // 0101 MOVE R13 R6
+ 0x5C380400, // 0102 MOVE R14 R2
+ 0x5C3C0600, // 0103 MOVE R15 R3
+ 0x7C2C0800, // 0104 CALL R11 4
+ 0x5C141600, // 0105 MOVE R5 R11
+ 0x78160004, // 0106 JMPF R5 #010C
+ 0x882C0138, // 0107 GETMBR R11 R0 K56
+ 0x8C2C1739, // 0108 GETMET R11 R11 K57
+ 0x5C340000, // 0109 MOVE R13 R0
+ 0x7C2C0400, // 010A CALL R11 2
+ 0x7002000D, // 010B JMP #011A
+ 0x882C0D3A, // 010C GETMBR R11 R6 K58
+ 0x782E000B, // 010D JMPF R11 #011A
+ 0x8C2C0D3B, // 010E GETMET R11 R6 K59
+ 0x7C2C0200, // 010F CALL R11 1
+ 0x8C30173C, // 0110 GETMET R12 R11 K60
+ 0x7C300200, // 0111 CALL R12 1
+ 0x8C30173D, // 0112 GETMET R12 R11 K61
+ 0x7C300200, // 0113 CALL R12 1
+ 0x8C30013E, // 0114 GETMET R12 R0 K62
+ 0x8838172E, // 0115 GETMBR R14 R11 K46
+ 0x883C173F, // 0116 GETMBR R15 R11 K63
+ 0x88401740, // 0117 GETMBR R16 R11 K64
+ 0x88441718, // 0118 GETMBR R17 R11 K24
+ 0x7C300A00, // 0119 CALL R12 5
+ 0x70020007, // 011A JMP #0123
+ 0xB82E0200, // 011B GETNGBL R11 K1
+ 0x8C2C1702, // 011C GETMET R11 R11 K2
+ 0x60340008, // 011D GETGBL R13 G8
+ 0x5C381400, // 011E MOVE R14 R10
+ 0x7C340200, // 011F CALL R13 1
+ 0x0036820D, // 0120 ADD R13 K65 R13
+ 0x58380011, // 0121 LDCONST R14 K17
+ 0x7C2C0600, // 0122 CALL R11 3
+ 0xA8040001, // 0123 EXBLK 1 1
+ 0x80040A00, // 0124 RET 1 R5
+ 0xA8040001, // 0125 EXBLK 1 1
+ 0x70020014, // 0126 JMP #013C
+ 0xAC180002, // 0127 CATCH R6 0 2
+ 0x70020011, // 0128 JMP #013B
+ 0xB8220200, // 0129 GETNGBL R8 K1
+ 0x8C201102, // 012A GETMET R8 R8 K2
+ 0x60280008, // 012B GETGBL R10 G8
+ 0x5C2C0C00, // 012C MOVE R11 R6
+ 0x7C280200, // 012D CALL R10 1
+ 0x002A840A, // 012E ADD R10 K66 R10
+ 0x00281543, // 012F ADD R10 R10 K67
+ 0x602C0008, // 0130 GETGBL R11 G8
+ 0x5C300E00, // 0131 MOVE R12 R7
+ 0x7C2C0200, // 0132 CALL R11 1
+ 0x0028140B, // 0133 ADD R10 R10 R11
+ 0x7C200400, // 0134 CALL R8 2
+ 0xA4228800, // 0135 IMPORT R8 K68
+ 0x8C241145, // 0136 GETMET R9 R8 K69
+ 0x7C240200, // 0137 CALL R9 1
+ 0x50240000, // 0138 LDBOOL R9 0 0
+ 0x80041200, // 0139 RET 1 R9
+ 0x70020000, // 013A JMP #013C
+ 0xB0080000, // 013B RAISE 2 R0 R0
+ 0x80000000, // 013C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_250ms
+********************************************************************/
+be_local_closure(Matter_MessageHandler_every_250ms, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(im),
+ /* K1 */ be_nested_str_weak(every_250ms),
+ }),
+ be_str_weak(every_250ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified class: Matter_MessageHandler
********************************************************************/
be_local_class(Matter_MessageHandler,
4,
NULL,
- be_nested_map(9,
+ be_nested_map(10,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(every_second, -1), be_const_closure(Matter_MessageHandler_every_second_closure) },
- { be_const_key_weak(msg_received, -1), be_const_closure(Matter_MessageHandler_msg_received_closure) },
+ { be_const_key_weak(commissioning, 2), be_const_var(1) },
+ { be_const_key_weak(device, -1), be_const_var(0) },
+ { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_MessageHandler_every_250ms_closure) },
{ be_const_key_weak(counter_rcv, -1), be_const_var(3) },
- { be_const_key_weak(commissioning, 0), be_const_var(1) },
- { be_const_key_weak(device, 5), be_const_var(0) },
- { be_const_key_weak(init, 8), be_const_closure(Matter_MessageHandler_init_closure) },
- { be_const_key_weak(send_response, 4), be_const_closure(Matter_MessageHandler_send_response_closure) },
- { be_const_key_weak(add_session, 2), be_const_closure(Matter_MessageHandler_add_session_closure) },
- { be_const_key_weak(im, -1), be_const_var(2) },
+ { be_const_key_weak(add_session, -1), be_const_closure(Matter_MessageHandler_add_session_closure) },
+ { be_const_key_weak(init, 9), be_const_closure(Matter_MessageHandler_init_closure) },
+ { be_const_key_weak(im, 4), be_const_var(2) },
+ { be_const_key_weak(send_response, 6), be_const_closure(Matter_MessageHandler_send_response_closure) },
+ { be_const_key_weak(msg_received, -1), be_const_closure(Matter_MessageHandler_msg_received_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_MessageHandler_every_second_closure) },
})),
be_str_weak(Matter_MessageHandler)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h
index 93432fe41..fc8cae2c1 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h
@@ -7,12 +7,12 @@
extern const bclass be_class_Matter_Plugin;
/********************************************************************
-** Solidified function: read_event
+** Solidified function: read_attribute
********************************************************************/
-be_local_closure(Matter_Plugin_read_event, /* name */
+be_local_closure(Matter_Plugin_read_attribute, /* name */
be_nested_proto(
- 6, /* nstack */
- 5, /* argc */
+ 4, /* nstack */
+ 3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -20,11 +20,45 @@ be_local_closure(Matter_Plugin_read_event, /* name */
NULL, /* no sub protos */
0, /* has constants */
NULL, /* no const */
- be_str_weak(read_event),
+ be_str_weak(read_attribute),
&be_const_str_solidified,
( &(const binstruction[ 2]) { /* code */
- 0x4C140000, // 0000 LDNIL R5
- 0x80040A00, // 0001 RET 1 R5
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x80040600, // 0001 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: attribute_updated
+********************************************************************/
+be_local_closure(Matter_Plugin_attribute_updated, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(device),
+ /* K1 */ be_nested_str_weak(attribute_updated),
+ }),
+ be_str_weak(attribute_updated),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x88140100, // 0000 GETMBR R5 R0 K0
+ 0x8C140B01, // 0001 GETMET R5 R5 K1
+ 0x5C1C0200, // 0002 MOVE R7 R1
+ 0x5C200400, // 0003 MOVE R8 R2
+ 0x5C240600, // 0004 MOVE R9 R3
+ 0x5C280800, // 0005 MOVE R10 R4
+ 0x7C140A00, // 0006 CALL R5 5
+ 0x80000000, // 0007 RET 0
})
)
);
@@ -66,75 +100,24 @@ be_local_closure(Matter_Plugin_init, /* name */
/********************************************************************
-** Solidified function: has
+** Solidified function: subscribe_attribute
********************************************************************/
-be_local_closure(Matter_Plugin_has, /* name */
+be_local_closure(Matter_Plugin_subscribe_attribute, /* name */
be_nested_proto(
6, /* nstack */
- 3, /* argc */
+ 5, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(clusters),
- /* K1 */ be_nested_str_weak(contains),
- /* K2 */ be_nested_str_weak(endpoints),
- /* K3 */ be_nested_str_weak(find),
- }),
- be_str_weak(has),
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(subscribe_attribute),
&be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0x5C140200, // 0002 MOVE R5 R1
- 0x7C0C0400, // 0003 CALL R3 2
- 0x780E0006, // 0004 JMPF R3 #000C
- 0x880C0102, // 0005 GETMBR R3 R0 K2
- 0x8C0C0703, // 0006 GETMET R3 R3 K3
- 0x5C140400, // 0007 MOVE R5 R2
- 0x7C0C0400, // 0008 CALL R3 2
- 0x4C100000, // 0009 LDNIL R4
- 0x200C0604, // 000A NE R3 R3 R4
- 0x740E0000, // 000B JMPT R3 #000D
- 0x500C0001, // 000C LDBOOL R3 0 1
- 0x500C0200, // 000D LDBOOL R3 1 0
- 0x80040600, // 000E RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_attribute_list
-********************************************************************/
-be_local_closure(Matter_Plugin_get_attribute_list, /* name */
- be_nested_proto(
- 7, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(clusters),
- /* K1 */ be_nested_str_weak(find),
- /* K2 */ be_nested_str_weak(EMPTY_LIST),
- }),
- be_str_weak(get_attribute_list),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0x5C140400, // 0002 MOVE R5 R2
- 0x88180102, // 0003 GETMBR R6 R0 K2
- 0x7C0C0600, // 0004 CALL R3 3
- 0x80040600, // 0005 RET 1 R3
+ ( &(const binstruction[ 2]) { /* code */
+ 0x4C140000, // 0000 LDNIL R5
+ 0x80040A00, // 0001 RET 1 R5
})
)
);
@@ -187,81 +170,6 @@ be_local_closure(Matter_Plugin_get_cluster_list, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: invoke_request
-********************************************************************/
-be_local_closure(Matter_Plugin_invoke_request, /* name */
- be_nested_proto(
- 5, /* nstack */
- 4, /* 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(invoke_request),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x4C100000, // 0000 LDNIL R4
- 0x80040800, // 0001 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: read_attribute
-********************************************************************/
-be_local_closure(Matter_Plugin_read_attribute, /* name */
- be_nested_proto(
- 4, /* nstack */
- 3, /* 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(read_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x80040600, // 0001 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: subscribe_event
-********************************************************************/
-be_local_closure(Matter_Plugin_subscribe_event, /* name */
- be_nested_proto(
- 6, /* nstack */
- 5, /* 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(subscribe_event),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x4C140000, // 0000 LDNIL R5
- 0x80040A00, // 0001 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: get_cluster_map
********************************************************************/
@@ -289,6 +197,31 @@ be_local_closure(Matter_Plugin_get_cluster_map, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Plugin_invoke_request, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 4, /* 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(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x4C100000, // 0000 LDNIL R4
+ 0x80040800, // 0001 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: get_endpoints
********************************************************************/
@@ -316,6 +249,31 @@ be_local_closure(Matter_Plugin_get_endpoints, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: subscribe_event
+********************************************************************/
+be_local_closure(Matter_Plugin_subscribe_event, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 5, /* 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(subscribe_event),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x4C140000, // 0000 LDNIL R5
+ 0x80040A00, // 0001 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: write_attribute
********************************************************************/
@@ -341,6 +299,74 @@ be_local_closure(Matter_Plugin_write_attribute, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: has
+********************************************************************/
+be_local_closure(Matter_Plugin_has, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(clusters),
+ /* K1 */ be_nested_str_weak(contains),
+ /* K2 */ be_nested_str_weak(endpoints),
+ /* K3 */ be_nested_str_weak(find),
+ }),
+ be_str_weak(has),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0x780E0006, // 0004 JMPF R3 #000C
+ 0x880C0102, // 0005 GETMBR R3 R0 K2
+ 0x8C0C0703, // 0006 GETMET R3 R3 K3
+ 0x5C140400, // 0007 MOVE R5 R2
+ 0x7C0C0400, // 0008 CALL R3 2
+ 0x4C100000, // 0009 LDNIL R4
+ 0x200C0604, // 000A NE R3 R3 R4
+ 0x740E0000, // 000B JMPT R3 #000D
+ 0x500C0001, // 000C LDBOOL R3 0 1
+ 0x500C0200, // 000D LDBOOL R3 1 0
+ 0x80040600, // 000E RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: read_event
+********************************************************************/
+be_local_closure(Matter_Plugin_read_event, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 5, /* 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(read_event),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x4C140000, // 0000 LDNIL R5
+ 0x80040A00, // 0001 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: timed_request
********************************************************************/
@@ -367,24 +393,32 @@ be_local_closure(Matter_Plugin_timed_request, /* name */
/********************************************************************
-** Solidified function: subscribe_attribute
+** Solidified function: get_attribute_list
********************************************************************/
-be_local_closure(Matter_Plugin_subscribe_attribute, /* name */
+be_local_closure(Matter_Plugin_get_attribute_list, /* name */
be_nested_proto(
- 6, /* nstack */
- 5, /* argc */
+ 7, /* nstack */
+ 3, /* 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(subscribe_attribute),
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(clusters),
+ /* K1 */ be_nested_str_weak(find),
+ /* K2 */ be_nested_str_weak(EMPTY_LIST),
+ }),
+ be_str_weak(get_attribute_list),
&be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x4C140000, // 0000 LDNIL R5
- 0x80040A00, // 0001 RET 1 R5
+ ( &(const binstruction[ 6]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0x5C140400, // 0002 MOVE R5 R2
+ 0x88180102, // 0003 GETMBR R6 R0 K2
+ 0x7C0C0600, // 0004 CALL R3 3
+ 0x80040600, // 0005 RET 1 R3
})
)
);
@@ -397,32 +431,33 @@ be_local_closure(Matter_Plugin_subscribe_attribute, /* name */
be_local_class(Matter_Plugin,
3,
NULL,
- be_nested_map(18,
+ be_nested_map(19,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(read_event, -1), be_const_closure(Matter_Plugin_read_event_closure) },
- { be_const_key_weak(get_cluster_list, -1), be_const_closure(Matter_Plugin_get_cluster_list_closure) },
- { be_const_key_weak(endpoints, 1), be_const_var(1) },
- { be_const_key_weak(get_attribute_list, 9), be_const_closure(Matter_Plugin_get_attribute_list_closure) },
- { be_const_key_weak(device, -1), be_const_var(0) },
- { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_invoke_request_closure) },
{ be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_read_attribute_closure) },
- { be_const_key_weak(has, 13), be_const_closure(Matter_Plugin_has_closure) },
- { be_const_key_weak(subscribe_event, -1), be_const_closure(Matter_Plugin_subscribe_event_closure) },
- { be_const_key_weak(get_cluster_map, -1), be_const_closure(Matter_Plugin_get_cluster_map_closure) },
- { be_const_key_weak(clusters, -1), be_const_var(2) },
- { be_const_key_weak(EMPTY_MAP, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(0,
- ( (struct bmapnode*) &(const bmapnode[]) {
- })) ) } )) },
- { be_const_key_weak(get_endpoints, -1), be_const_closure(Matter_Plugin_get_endpoints_closure) },
- { be_const_key_weak(write_attribute, 2), be_const_closure(Matter_Plugin_write_attribute_closure) },
- { be_const_key_weak(timed_request, -1), be_const_closure(Matter_Plugin_timed_request_closure) },
- { be_const_key_weak(init, 4), be_const_closure(Matter_Plugin_init_closure) },
- { be_const_key_weak(subscribe_attribute, -1), be_const_closure(Matter_Plugin_subscribe_attribute_closure) },
{ be_const_key_weak(EMPTY_LIST, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(0,
( (struct bvalue*) &(const bvalue[]) {
})) ) } )) },
+ { be_const_key_weak(clusters, 9), be_const_var(2) },
+ { be_const_key_weak(get_endpoints, -1), be_const_closure(Matter_Plugin_get_endpoints_closure) },
+ { be_const_key_weak(subscribe_attribute, -1), be_const_closure(Matter_Plugin_subscribe_attribute_closure) },
+ { be_const_key_weak(get_cluster_list, 3), be_const_closure(Matter_Plugin_get_cluster_list_closure) },
+ { be_const_key_weak(timed_request, -1), be_const_closure(Matter_Plugin_timed_request_closure) },
+ { be_const_key_weak(EMPTY_MAP, 8), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(0,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ })) ) } )) },
+ { be_const_key_weak(subscribe_event, -1), be_const_closure(Matter_Plugin_subscribe_event_closure) },
+ { be_const_key_weak(endpoints, 18), be_const_var(1) },
+ { be_const_key_weak(invoke_request, 7), be_const_closure(Matter_Plugin_invoke_request_closure) },
+ { be_const_key_weak(write_attribute, -1), be_const_closure(Matter_Plugin_write_attribute_closure) },
+ { be_const_key_weak(attribute_updated, 14), be_const_closure(Matter_Plugin_attribute_updated_closure) },
+ { be_const_key_weak(init, 2), be_const_closure(Matter_Plugin_init_closure) },
+ { be_const_key_weak(has, -1), be_const_closure(Matter_Plugin_has_closure) },
+ { be_const_key_weak(device, -1), be_const_var(0) },
+ { be_const_key_weak(read_event, 6), be_const_closure(Matter_Plugin_read_event_closure) },
+ { be_const_key_weak(get_attribute_list, -1), be_const_closure(Matter_Plugin_get_attribute_list_closure) },
+ { be_const_key_weak(get_cluster_map, -1), be_const_closure(Matter_Plugin_get_cluster_map_closure) },
})),
be_str_weak(Matter_Plugin)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
index a21dbe805..7feacf75b 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
@@ -6,12 +6,45 @@
extern const bclass be_class_Matter_Plugin_OnOff;
+/********************************************************************
+** Solidified function: onoff_changed
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_onoff_changed, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(attribute_updated),
+ /* K1 */ be_nested_str_weak(endpoint),
+ /* K2 */ be_const_int(0),
+ }),
+ be_str_weak(onoff_changed),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x8C080100, // 0000 GETMET R2 R0 K0
+ 0x88100301, // 0001 GETMBR R4 R1 K1
+ 0x54160005, // 0002 LDINT R5 6
+ 0x58180002, // 0003 LDCONST R6 K2
+ 0x7C080800, // 0004 CALL R2 4
+ 0x80000000, // 0005 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: invoke_request
********************************************************************/
be_local_closure(Matter_Plugin_OnOff_invoke_request, /* name */
be_nested_proto(
- 14, /* nstack */
+ 13, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
@@ -24,88 +57,100 @@ be_local_closure(Matter_Plugin_OnOff_invoke_request, /* name */
/* K1 */ be_nested_str_weak(TLV),
/* K2 */ be_nested_str_weak(cluster),
/* K3 */ be_nested_str_weak(command),
- /* K4 */ be_nested_str_weak(session),
- /* K5 */ be_const_int(3),
- /* K6 */ be_const_int(0),
- /* K7 */ be_const_int(1),
- /* K8 */ be_nested_str_weak(Matter_TLV_struct),
- /* K9 */ be_nested_str_weak(add_TLV),
- /* K10 */ be_nested_str_weak(U2),
- /* K11 */ be_nested_str_weak(onoff),
+ /* K4 */ be_const_int(3),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K8 */ be_nested_str_weak(add_TLV),
+ /* K9 */ be_nested_str_weak(U2),
+ /* K10 */ be_nested_str_weak(onoff),
+ /* K11 */ be_nested_str_weak(onoff_changed),
/* K12 */ be_const_int(2),
}),
be_str_weak(invoke_request),
&be_const_str_solidified,
- ( &(const binstruction[69]) { /* code */
+ ( &(const binstruction[81]) { /* code */
0xB8120000, // 0000 GETNGBL R4 K0
0x88100901, // 0001 GETMBR R4 R4 K1
0x88140702, // 0002 GETMBR R5 R3 K2
0x88180703, // 0003 GETMBR R6 R3 K3
- 0x881C0304, // 0004 GETMBR R7 R1 K4
- 0x1C200B05, // 0005 EQ R8 R5 K5
- 0x78220016, // 0006 JMPF R8 #001E
- 0x1C200D06, // 0007 EQ R8 R6 K6
- 0x78220002, // 0008 JMPF R8 #000C
- 0x50200200, // 0009 LDBOOL R8 1 0
- 0x80041000, // 000A RET 1 R8
- 0x70020010, // 000B JMP #001D
- 0x1C200D07, // 000C EQ R8 R6 K7
- 0x78220009, // 000D JMPF R8 #0018
- 0x8C200908, // 000E GETMET R8 R4 K8
- 0x7C200200, // 000F CALL R8 1
- 0x8C241109, // 0010 GETMET R9 R8 K9
- 0x582C0006, // 0011 LDCONST R11 K6
- 0x8830090A, // 0012 GETMBR R12 R4 K10
- 0x58340006, // 0013 LDCONST R13 K6
- 0x7C240800, // 0014 CALL R9 4
- 0x900E0706, // 0015 SETMBR R3 K3 K6
- 0x80041000, // 0016 RET 1 R8
- 0x70020004, // 0017 JMP #001D
- 0x5422003F, // 0018 LDINT R8 64
- 0x1C200C08, // 0019 EQ R8 R6 R8
- 0x78220001, // 001A JMPF R8 #001D
- 0x50200200, // 001B LDBOOL R8 1 0
- 0x80041000, // 001C RET 1 R8
- 0x70020025, // 001D JMP #0044
- 0x54220003, // 001E LDINT R8 4
- 0x1C200A08, // 001F EQ R8 R5 R8
- 0x78220002, // 0020 JMPF R8 #0024
- 0x50200200, // 0021 LDBOOL R8 1 0
- 0x80041000, // 0022 RET 1 R8
- 0x7002001F, // 0023 JMP #0044
- 0x54220004, // 0024 LDINT R8 5
- 0x1C200A08, // 0025 EQ R8 R5 R8
- 0x78220002, // 0026 JMPF R8 #002A
- 0x50200200, // 0027 LDBOOL R8 1 0
- 0x80041000, // 0028 RET 1 R8
- 0x70020019, // 0029 JMP #0044
- 0x54220005, // 002A LDINT R8 6
- 0x1C200A08, // 002B EQ R8 R5 R8
- 0x78220016, // 002C JMPF R8 #0044
- 0x1C200D06, // 002D EQ R8 R6 K6
- 0x78220004, // 002E JMPF R8 #0034
- 0x50200000, // 002F LDBOOL R8 0 0
- 0x90021608, // 0030 SETMBR R0 K11 R8
- 0x50200200, // 0031 LDBOOL R8 1 0
- 0x80041000, // 0032 RET 1 R8
- 0x7002000F, // 0033 JMP #0044
- 0x1C200D07, // 0034 EQ R8 R6 K7
- 0x78220004, // 0035 JMPF R8 #003B
- 0x50200200, // 0036 LDBOOL R8 1 0
- 0x90021608, // 0037 SETMBR R0 K11 R8
- 0x50200200, // 0038 LDBOOL R8 1 0
- 0x80041000, // 0039 RET 1 R8
- 0x70020008, // 003A JMP #0044
- 0x1C200D0C, // 003B EQ R8 R6 K12
- 0x78220006, // 003C JMPF R8 #0044
- 0x8820010B, // 003D GETMBR R8 R0 K11
- 0x78220000, // 003E JMPF R8 #0040
- 0x50200001, // 003F LDBOOL R8 0 1
- 0x50200200, // 0040 LDBOOL R8 1 0
- 0x90021608, // 0041 SETMBR R0 K11 R8
- 0x50200200, // 0042 LDBOOL R8 1 0
- 0x80041000, // 0043 RET 1 R8
- 0x80000000, // 0044 RET 0
+ 0x1C1C0B04, // 0004 EQ R7 R5 K4
+ 0x781E0016, // 0005 JMPF R7 #001D
+ 0x1C1C0D05, // 0006 EQ R7 R6 K5
+ 0x781E0002, // 0007 JMPF R7 #000B
+ 0x501C0200, // 0008 LDBOOL R7 1 0
+ 0x80040E00, // 0009 RET 1 R7
+ 0x70020010, // 000A JMP #001C
+ 0x1C1C0D06, // 000B EQ R7 R6 K6
+ 0x781E0009, // 000C JMPF R7 #0017
+ 0x8C1C0907, // 000D GETMET R7 R4 K7
+ 0x7C1C0200, // 000E CALL R7 1
+ 0x8C200F08, // 000F GETMET R8 R7 K8
+ 0x58280005, // 0010 LDCONST R10 K5
+ 0x882C0909, // 0011 GETMBR R11 R4 K9
+ 0x58300005, // 0012 LDCONST R12 K5
+ 0x7C200800, // 0013 CALL R8 4
+ 0x900E0705, // 0014 SETMBR R3 K3 K5
+ 0x80040E00, // 0015 RET 1 R7
+ 0x70020004, // 0016 JMP #001C
+ 0x541E003F, // 0017 LDINT R7 64
+ 0x1C1C0C07, // 0018 EQ R7 R6 R7
+ 0x781E0001, // 0019 JMPF R7 #001C
+ 0x501C0200, // 001A LDBOOL R7 1 0
+ 0x80040E00, // 001B RET 1 R7
+ 0x70020032, // 001C JMP #0050
+ 0x541E0003, // 001D LDINT R7 4
+ 0x1C1C0A07, // 001E EQ R7 R5 R7
+ 0x781E0002, // 001F JMPF R7 #0023
+ 0x501C0200, // 0020 LDBOOL R7 1 0
+ 0x80040E00, // 0021 RET 1 R7
+ 0x7002002C, // 0022 JMP #0050
+ 0x541E0004, // 0023 LDINT R7 5
+ 0x1C1C0A07, // 0024 EQ R7 R5 R7
+ 0x781E0002, // 0025 JMPF R7 #0029
+ 0x501C0200, // 0026 LDBOOL R7 1 0
+ 0x80040E00, // 0027 RET 1 R7
+ 0x70020026, // 0028 JMP #0050
+ 0x541E0005, // 0029 LDINT R7 6
+ 0x1C1C0A07, // 002A EQ R7 R5 R7
+ 0x781E0023, // 002B JMPF R7 #0050
+ 0x1C1C0D05, // 002C EQ R7 R6 K5
+ 0x781E0009, // 002D JMPF R7 #0038
+ 0x881C010A, // 002E GETMBR R7 R0 K10
+ 0x781E0002, // 002F JMPF R7 #0033
+ 0x8C1C010B, // 0030 GETMET R7 R0 K11
+ 0x5C240600, // 0031 MOVE R9 R3
+ 0x7C1C0400, // 0032 CALL R7 2
+ 0x501C0000, // 0033 LDBOOL R7 0 0
+ 0x90021407, // 0034 SETMBR R0 K10 R7
+ 0x501C0200, // 0035 LDBOOL R7 1 0
+ 0x80040E00, // 0036 RET 1 R7
+ 0x70020017, // 0037 JMP #0050
+ 0x1C1C0D06, // 0038 EQ R7 R6 K6
+ 0x781E0009, // 0039 JMPF R7 #0044
+ 0x881C010A, // 003A GETMBR R7 R0 K10
+ 0x741E0002, // 003B JMPT R7 #003F
+ 0x8C1C010B, // 003C GETMET R7 R0 K11
+ 0x5C240600, // 003D MOVE R9 R3
+ 0x7C1C0400, // 003E CALL R7 2
+ 0x501C0200, // 003F LDBOOL R7 1 0
+ 0x90021407, // 0040 SETMBR R0 K10 R7
+ 0x501C0200, // 0041 LDBOOL R7 1 0
+ 0x80040E00, // 0042 RET 1 R7
+ 0x7002000B, // 0043 JMP #0050
+ 0x1C1C0D0C, // 0044 EQ R7 R6 K12
+ 0x781E0009, // 0045 JMPF R7 #0050
+ 0x8C1C010B, // 0046 GETMET R7 R0 K11
+ 0x5C240600, // 0047 MOVE R9 R3
+ 0x7C1C0400, // 0048 CALL R7 2
+ 0x881C010A, // 0049 GETMBR R7 R0 K10
+ 0x781E0000, // 004A JMPF R7 #004C
+ 0x501C0001, // 004B LDBOOL R7 0 1
+ 0x501C0200, // 004C LDBOOL R7 1 0
+ 0x90021407, // 004D SETMBR R0 K10 R7
+ 0x501C0200, // 004E LDBOOL R7 1 0
+ 0x80040E00, // 004F RET 1 R7
+ 0x80000000, // 0050 RET 0
})
)
);
@@ -320,17 +365,24 @@ extern const bclass be_class_Matter_Plugin;
be_local_class(Matter_Plugin_OnOff,
1,
&be_class_Matter_Plugin,
- be_nested_map(7,
+ be_nested_map(8,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(invoke_request, 1), be_const_closure(Matter_Plugin_OnOff_invoke_request_closure) },
- { be_const_key_weak(read_attribute, 4), be_const_closure(Matter_Plugin_OnOff_read_attribute_closure) },
+ { be_const_key_weak(read_attribute, 6), be_const_closure(Matter_Plugin_OnOff_read_attribute_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_OnOff_init_closure) },
- { be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ { be_const_key_weak(TYPES, 0), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(1,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(256),
})) ) } )) },
- { be_const_key_weak(CLUSTERS, 6), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ { be_const_key_weak(invoke_request, 1), be_const_closure(Matter_Plugin_OnOff_invoke_request_closure) },
+ { be_const_key_weak(onoff, -1), be_const_var(0) },
+ { be_const_key_weak(ENDPOINTS, 4), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(1,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(1),
+ })) ) } )) },
+ { be_const_key_weak(onoff_changed, 7), be_const_closure(Matter_Plugin_OnOff_onoff_changed_closure) },
+ { be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(5,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(5, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
@@ -368,12 +420,6 @@ be_local_class(Matter_Plugin_OnOff,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
})) ) } )) },
- })) ) } )) },
- { be_const_key_weak(onoff, 2), be_const_var(0) },
- { be_const_key_weak(ENDPOINTS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(1),
})) ) } )) },
})),
be_str_weak(Matter_Plugin_OnOff)
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
index ddf921c29..57afc789f 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
@@ -19,7 +19,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[82]) { /* constants */
+ ( &(const bvalue[81]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -28,84 +28,83 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
/* K5 */ be_const_int(0),
/* K6 */ be_nested_str_weak(create_TLV),
/* K7 */ be_nested_str_weak(U8),
- /* K8 */ be_nested_str_weak(session),
- /* K9 */ be_nested_str_weak(__breadcrumb),
- /* K10 */ be_const_int(1),
- /* K11 */ be_nested_str_weak(Matter_TLV_struct),
- /* K12 */ be_nested_str_weak(add_TLV),
- /* K13 */ be_nested_str_weak(U2),
- /* K14 */ be_const_int(2),
- /* K15 */ be_nested_str_weak(U1),
- /* K16 */ be_const_int(3),
- /* K17 */ be_nested_str_weak(BOOL),
- /* K18 */ be_nested_str_weak(Matter_TLV_array),
- /* K19 */ be_nested_str_weak(tasmota),
- /* K20 */ be_nested_str_weak(eth),
- /* K21 */ be_nested_str_weak(up),
- /* K22 */ be_nested_str_weak(add_struct),
- /* K23 */ be_nested_str_weak(UTF1),
- /* K24 */ be_nested_str_weak(ethernet),
- /* K25 */ be_nested_str_weak(NULL),
- /* K26 */ be_nested_str_weak(fromhex),
- /* K27 */ be_nested_str_weak(replace),
- /* K28 */ be_nested_str_weak(find),
- /* K29 */ be_nested_str_weak(mac),
- /* K30 */ be_nested_str_weak(),
- /* K31 */ be_nested_str_weak(_X3A),
- /* K32 */ be_nested_str_weak(B1),
- /* K33 */ be_nested_str_weak(add_array),
- /* K34 */ be_nested_str_weak(get_ip_bytes),
- /* K35 */ be_nested_str_weak(ip),
- /* K36 */ be_nested_str_weak(ip6local),
- /* K37 */ be_nested_str_weak(ip6),
- /* K38 */ be_nested_str_weak(wifi),
- /* K39 */ be_nested_str_weak(cmd),
- /* K40 */ be_nested_str_weak(Status_X201),
- /* K41 */ be_nested_str_weak(StatusPRM),
- /* K42 */ be_nested_str_weak(BootCount),
- /* K43 */ be_nested_str_weak(U4),
- /* K44 */ be_nested_str_weak(Status_X2011),
- /* K45 */ be_nested_str_weak(StatusSTS),
- /* K46 */ be_nested_str_weak(UptimeSec),
- /* K47 */ be_nested_str_weak(int64),
- /* K48 */ be_nested_str_weak(rtc),
- /* K49 */ be_nested_str_weak(utc),
- /* K50 */ be_const_int(1000000),
- /* K51 */ be_nested_str_weak(local),
- /* K52 */ be_nested_str_weak(device),
- /* K53 */ be_nested_str_weak(sessions),
- /* K54 */ be_nested_str_weak(sessions_active),
- /* K55 */ be_nested_str_weak(B2),
- /* K56 */ be_nested_str_weak(noc),
- /* K57 */ be_nested_str_weak(icac),
- /* K58 */ be_nested_str_weak(stop_iteration),
- /* K59 */ be_nested_str_weak(parse),
- /* K60 */ be_nested_str_weak(get_ca),
- /* K61 */ be_nested_str_weak(findsubval),
- /* K62 */ be_nested_str_weak(admin_vendor),
- /* K63 */ be_nested_str_weak(fabric),
- /* K64 */ be_nested_str_weak(deviceid),
- /* K65 */ be_nested_str_weak(fabric_label),
- /* K66 */ be_nested_str_weak(Tasmota),
- /* K67 */ be_nested_str_weak(vendorid),
- /* K68 */ be_nested_str_weak(DeviceName),
- /* K69 */ be_nested_str_weak(FriendlyName),
- /* K70 */ be_nested_str_weak(FriendlyName1),
- /* K71 */ be_nested_str_weak(XX),
- /* K72 */ be_nested_str_weak(Status_X202),
- /* K73 */ be_nested_str_weak(StatusFWR),
- /* K74 */ be_nested_str_weak(Hardware),
- /* K75 */ be_nested_str_weak(Version),
- /* K76 */ be_nested_str_weak(locale),
- /* K77 */ be_nested_str_weak(TYPES),
- /* K78 */ be_nested_str_weak(get_cluster_list),
- /* K79 */ be_nested_str_weak(get_active_endpoints),
- /* K80 */ be_nested_str_weak(status),
- /* K81 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
+ /* K8 */ be_nested_str_weak(__breadcrumb),
+ /* K9 */ be_const_int(1),
+ /* K10 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K11 */ be_nested_str_weak(add_TLV),
+ /* K12 */ be_nested_str_weak(U2),
+ /* K13 */ be_const_int(2),
+ /* K14 */ be_nested_str_weak(U1),
+ /* K15 */ be_const_int(3),
+ /* K16 */ be_nested_str_weak(BOOL),
+ /* K17 */ be_nested_str_weak(Matter_TLV_array),
+ /* K18 */ be_nested_str_weak(tasmota),
+ /* K19 */ be_nested_str_weak(eth),
+ /* K20 */ be_nested_str_weak(up),
+ /* K21 */ be_nested_str_weak(add_struct),
+ /* K22 */ be_nested_str_weak(UTF1),
+ /* K23 */ be_nested_str_weak(ethernet),
+ /* K24 */ be_nested_str_weak(NULL),
+ /* K25 */ be_nested_str_weak(fromhex),
+ /* K26 */ be_nested_str_weak(replace),
+ /* K27 */ be_nested_str_weak(find),
+ /* K28 */ be_nested_str_weak(mac),
+ /* K29 */ be_nested_str_weak(),
+ /* K30 */ be_nested_str_weak(_X3A),
+ /* K31 */ be_nested_str_weak(B1),
+ /* K32 */ be_nested_str_weak(add_array),
+ /* K33 */ be_nested_str_weak(get_ip_bytes),
+ /* K34 */ be_nested_str_weak(ip),
+ /* K35 */ be_nested_str_weak(ip6local),
+ /* K36 */ be_nested_str_weak(ip6),
+ /* K37 */ be_nested_str_weak(wifi),
+ /* K38 */ be_nested_str_weak(cmd),
+ /* K39 */ be_nested_str_weak(Status_X201),
+ /* K40 */ be_nested_str_weak(StatusPRM),
+ /* K41 */ be_nested_str_weak(BootCount),
+ /* K42 */ be_nested_str_weak(U4),
+ /* K43 */ be_nested_str_weak(Status_X2011),
+ /* K44 */ be_nested_str_weak(StatusSTS),
+ /* K45 */ be_nested_str_weak(UptimeSec),
+ /* K46 */ be_nested_str_weak(int64),
+ /* K47 */ be_nested_str_weak(rtc),
+ /* K48 */ be_nested_str_weak(utc),
+ /* K49 */ be_const_int(1000000),
+ /* K50 */ be_nested_str_weak(local),
+ /* K51 */ be_nested_str_weak(device),
+ /* K52 */ be_nested_str_weak(sessions),
+ /* K53 */ be_nested_str_weak(sessions_active),
+ /* K54 */ be_nested_str_weak(B2),
+ /* K55 */ be_nested_str_weak(noc),
+ /* K56 */ be_nested_str_weak(icac),
+ /* K57 */ be_nested_str_weak(stop_iteration),
+ /* K58 */ be_nested_str_weak(parse),
+ /* K59 */ be_nested_str_weak(get_ca),
+ /* K60 */ be_nested_str_weak(findsubval),
+ /* K61 */ be_nested_str_weak(admin_vendor),
+ /* K62 */ be_nested_str_weak(fabric),
+ /* K63 */ be_nested_str_weak(deviceid),
+ /* K64 */ be_nested_str_weak(fabric_label),
+ /* K65 */ be_nested_str_weak(Tasmota),
+ /* K66 */ be_nested_str_weak(vendorid),
+ /* K67 */ be_nested_str_weak(DeviceName),
+ /* K68 */ be_nested_str_weak(FriendlyName),
+ /* K69 */ be_nested_str_weak(FriendlyName1),
+ /* K70 */ be_nested_str_weak(XX),
+ /* K71 */ be_nested_str_weak(Status_X202),
+ /* K72 */ be_nested_str_weak(StatusFWR),
+ /* K73 */ be_nested_str_weak(Hardware),
+ /* K74 */ be_nested_str_weak(Version),
+ /* K75 */ be_nested_str_weak(locale),
+ /* K76 */ be_nested_str_weak(TYPES),
+ /* K77 */ be_nested_str_weak(get_cluster_list),
+ /* K78 */ be_nested_str_weak(get_active_endpoints),
+ /* K79 */ be_nested_str_weak(status),
+ /* K80 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
- ( &(const binstruction[809]) { /* code */
+ ( &(const binstruction[808]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x88100902, // 0002 GETMBR R4 R4 K2
@@ -113,808 +112,807 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x88180504, // 0004 GETMBR R6 R2 K4
0x541E002F, // 0005 LDINT R7 48
0x1C1C0A07, // 0006 EQ R7 R5 R7
- 0x781E0031, // 0007 JMPF R7 #003A
+ 0x781E0030, // 0007 JMPF R7 #0039
0x1C1C0D05, // 0008 EQ R7 R6 K5
- 0x781E0006, // 0009 JMPF R7 #0011
+ 0x781E0005, // 0009 JMPF R7 #0010
0x8C1C0906, // 000A GETMET R7 R4 K6
0x88240907, // 000B GETMBR R9 R4 K7
0x88280308, // 000C GETMBR R10 R1 K8
- 0x88281509, // 000D GETMBR R10 R10 K9
- 0x7C1C0600, // 000E CALL R7 3
- 0x80040E00, // 000F RET 1 R7
- 0x70020027, // 0010 JMP #0039
- 0x1C1C0D0A, // 0011 EQ R7 R6 K10
- 0x781E000D, // 0012 JMPF R7 #0021
- 0x8C1C090B, // 0013 GETMET R7 R4 K11
- 0x7C1C0200, // 0014 CALL R7 1
- 0x8C200F0C, // 0015 GETMET R8 R7 K12
- 0x58280005, // 0016 LDCONST R10 K5
- 0x882C090D, // 0017 GETMBR R11 R4 K13
- 0x5432003B, // 0018 LDINT R12 60
- 0x7C200800, // 0019 CALL R8 4
- 0x8C200F0C, // 001A GETMET R8 R7 K12
- 0x5828000A, // 001B LDCONST R10 K10
- 0x882C090D, // 001C GETMBR R11 R4 K13
- 0x54320383, // 001D LDINT R12 900
- 0x7C200800, // 001E CALL R8 4
- 0x80040E00, // 001F RET 1 R7
- 0x70020017, // 0020 JMP #0039
- 0x1C1C0D0E, // 0021 EQ R7 R6 K14
- 0x781E0005, // 0022 JMPF R7 #0029
- 0x8C1C0906, // 0023 GETMET R7 R4 K6
- 0x8824090F, // 0024 GETMBR R9 R4 K15
- 0x5828000E, // 0025 LDCONST R10 K14
- 0x7C1C0600, // 0026 CALL R7 3
- 0x80040E00, // 0027 RET 1 R7
- 0x7002000F, // 0028 JMP #0039
- 0x1C1C0D10, // 0029 EQ R7 R6 K16
- 0x781E0005, // 002A JMPF R7 #0031
- 0x8C1C0906, // 002B GETMET R7 R4 K6
- 0x8824090F, // 002C GETMBR R9 R4 K15
- 0x5828000E, // 002D LDCONST R10 K14
- 0x7C1C0600, // 002E CALL R7 3
- 0x80040E00, // 002F RET 1 R7
- 0x70020007, // 0030 JMP #0039
- 0x541E0003, // 0031 LDINT R7 4
- 0x1C1C0C07, // 0032 EQ R7 R6 R7
- 0x781E0004, // 0033 JMPF R7 #0039
- 0x8C1C0906, // 0034 GETMET R7 R4 K6
- 0x88240911, // 0035 GETMBR R9 R4 K17
- 0x50280000, // 0036 LDBOOL R10 0 0
- 0x7C1C0600, // 0037 CALL R7 3
- 0x80040E00, // 0038 RET 1 R7
- 0x700202ED, // 0039 JMP #0328
- 0x541E0031, // 003A LDINT R7 50
- 0x1C1C0A07, // 003B EQ R7 R5 R7
- 0x781E0000, // 003C JMPF R7 #003E
- 0x700202E9, // 003D JMP #0328
- 0x541E0032, // 003E LDINT R7 51
- 0x1C1C0A07, // 003F EQ R7 R5 R7
- 0x781E00DA, // 0040 JMPF R7 #011C
- 0x1C1C0D05, // 0041 EQ R7 R6 K5
- 0x781E00B5, // 0042 JMPF R7 #00F9
- 0x8C1C0912, // 0043 GETMET R7 R4 K18
- 0x7C1C0200, // 0044 CALL R7 1
- 0xB8222600, // 0045 GETNGBL R8 K19
- 0x8C201114, // 0046 GETMET R8 R8 K20
- 0x7C200200, // 0047 CALL R8 1
- 0x94241115, // 0048 GETIDX R9 R8 K21
- 0x78260053, // 0049 JMPF R9 #009E
- 0x8C240F16, // 004A GETMET R9 R7 K22
- 0x4C2C0000, // 004B LDNIL R11
- 0x7C240400, // 004C CALL R9 2
- 0x8C28130C, // 004D GETMET R10 R9 K12
- 0x58300005, // 004E LDCONST R12 K5
- 0x88340917, // 004F GETMBR R13 R4 K23
- 0x58380018, // 0050 LDCONST R14 K24
- 0x7C280800, // 0051 CALL R10 4
- 0x8C28130C, // 0052 GETMET R10 R9 K12
- 0x5830000A, // 0053 LDCONST R12 K10
- 0x88340911, // 0054 GETMBR R13 R4 K17
- 0x5838000A, // 0055 LDCONST R14 K10
- 0x7C280800, // 0056 CALL R10 4
- 0x8C28130C, // 0057 GETMET R10 R9 K12
- 0x5830000E, // 0058 LDCONST R12 K14
- 0x88340911, // 0059 GETMBR R13 R4 K17
- 0x5838000A, // 005A LDCONST R14 K10
- 0x7C280800, // 005B CALL R10 4
- 0x8C28130C, // 005C GETMET R10 R9 K12
- 0x58300010, // 005D LDCONST R12 K16
- 0x88340919, // 005E GETMBR R13 R4 K25
- 0x4C380000, // 005F LDNIL R14
- 0x7C280800, // 0060 CALL R10 4
- 0x60280015, // 0061 GETGBL R10 G21
- 0x7C280000, // 0062 CALL R10 0
- 0x8C28151A, // 0063 GETMET R10 R10 K26
- 0x8C30071B, // 0064 GETMET R12 R3 K27
- 0x8C38111C, // 0065 GETMET R14 R8 K28
- 0x5840001D, // 0066 LDCONST R16 K29
- 0x5844001E, // 0067 LDCONST R17 K30
- 0x7C380600, // 0068 CALL R14 3
- 0x583C001F, // 0069 LDCONST R15 K31
- 0x5840001E, // 006A LDCONST R16 K30
- 0x7C300800, // 006B CALL R12 4
- 0x7C280400, // 006C CALL R10 2
- 0x8C2C130C, // 006D GETMET R11 R9 K12
- 0x54360003, // 006E LDINT R13 4
- 0x88380920, // 006F GETMBR R14 R4 K32
- 0x5C3C1400, // 0070 MOVE R15 R10
- 0x7C2C0800, // 0071 CALL R11 4
- 0x8C2C1321, // 0072 GETMET R11 R9 K33
- 0x54360004, // 0073 LDINT R13 5
- 0x7C2C0400, // 0074 CALL R11 2
- 0x8C30170C, // 0075 GETMET R12 R11 K12
- 0x4C380000, // 0076 LDNIL R14
- 0x883C0920, // 0077 GETMBR R15 R4 K32
- 0xB8420200, // 0078 GETNGBL R16 K1
- 0x8C402122, // 0079 GETMET R16 R16 K34
- 0x8C48111C, // 007A GETMET R18 R8 K28
- 0x58500023, // 007B LDCONST R20 K35
- 0x5854001E, // 007C LDCONST R21 K30
- 0x7C480600, // 007D CALL R18 3
- 0x7C400400, // 007E CALL R16 2
- 0x7C300800, // 007F CALL R12 4
- 0x8C301321, // 0080 GETMET R12 R9 K33
- 0x543A0005, // 0081 LDINT R14 6
- 0x7C300400, // 0082 CALL R12 2
- 0x8C34190C, // 0083 GETMET R13 R12 K12
- 0x4C3C0000, // 0084 LDNIL R15
- 0x88400920, // 0085 GETMBR R16 R4 K32
- 0xB8460200, // 0086 GETNGBL R17 K1
- 0x8C442322, // 0087 GETMET R17 R17 K34
- 0x8C4C111C, // 0088 GETMET R19 R8 K28
- 0x58540024, // 0089 LDCONST R21 K36
- 0x5858001E, // 008A LDCONST R22 K30
- 0x7C4C0600, // 008B CALL R19 3
- 0x7C440400, // 008C CALL R17 2
- 0x7C340800, // 008D CALL R13 4
- 0x8C34190C, // 008E GETMET R13 R12 K12
- 0x4C3C0000, // 008F LDNIL R15
- 0x88400920, // 0090 GETMBR R16 R4 K32
- 0xB8460200, // 0091 GETNGBL R17 K1
- 0x8C442322, // 0092 GETMET R17 R17 K34
- 0x8C4C111C, // 0093 GETMET R19 R8 K28
- 0x58540025, // 0094 LDCONST R21 K37
- 0x5858001E, // 0095 LDCONST R22 K30
- 0x7C4C0600, // 0096 CALL R19 3
- 0x7C440400, // 0097 CALL R17 2
- 0x7C340800, // 0098 CALL R13 4
- 0x8C34130C, // 0099 GETMET R13 R9 K12
- 0x543E0006, // 009A LDINT R15 7
- 0x8840090F, // 009B GETMBR R16 R4 K15
- 0x5844000E, // 009C LDCONST R17 K14
- 0x7C340800, // 009D CALL R13 4
- 0xB8262600, // 009E GETNGBL R9 K19
- 0x8C241326, // 009F GETMET R9 R9 K38
- 0x7C240200, // 00A0 CALL R9 1
- 0x94281315, // 00A1 GETIDX R10 R9 K21
- 0x782A0053, // 00A2 JMPF R10 #00F7
- 0x8C280F16, // 00A3 GETMET R10 R7 K22
- 0x4C300000, // 00A4 LDNIL R12
- 0x7C280400, // 00A5 CALL R10 2
- 0x8C2C150C, // 00A6 GETMET R11 R10 K12
- 0x58340005, // 00A7 LDCONST R13 K5
- 0x88380917, // 00A8 GETMBR R14 R4 K23
- 0x583C0026, // 00A9 LDCONST R15 K38
- 0x7C2C0800, // 00AA CALL R11 4
- 0x8C2C150C, // 00AB GETMET R11 R10 K12
- 0x5834000A, // 00AC LDCONST R13 K10
- 0x88380911, // 00AD GETMBR R14 R4 K17
- 0x583C000A, // 00AE LDCONST R15 K10
- 0x7C2C0800, // 00AF CALL R11 4
- 0x8C2C150C, // 00B0 GETMET R11 R10 K12
- 0x5834000E, // 00B1 LDCONST R13 K14
- 0x88380911, // 00B2 GETMBR R14 R4 K17
- 0x583C000A, // 00B3 LDCONST R15 K10
- 0x7C2C0800, // 00B4 CALL R11 4
- 0x8C2C150C, // 00B5 GETMET R11 R10 K12
- 0x58340010, // 00B6 LDCONST R13 K16
- 0x88380919, // 00B7 GETMBR R14 R4 K25
- 0x4C3C0000, // 00B8 LDNIL R15
- 0x7C2C0800, // 00B9 CALL R11 4
- 0x602C0015, // 00BA GETGBL R11 G21
- 0x7C2C0000, // 00BB CALL R11 0
- 0x8C2C171A, // 00BC GETMET R11 R11 K26
- 0x8C34071B, // 00BD GETMET R13 R3 K27
- 0x8C3C131C, // 00BE GETMET R15 R9 K28
- 0x5844001D, // 00BF LDCONST R17 K29
- 0x5848001E, // 00C0 LDCONST R18 K30
- 0x7C3C0600, // 00C1 CALL R15 3
- 0x5840001F, // 00C2 LDCONST R16 K31
- 0x5844001E, // 00C3 LDCONST R17 K30
- 0x7C340800, // 00C4 CALL R13 4
- 0x7C2C0400, // 00C5 CALL R11 2
- 0x8C30150C, // 00C6 GETMET R12 R10 K12
- 0x543A0003, // 00C7 LDINT R14 4
- 0x883C0920, // 00C8 GETMBR R15 R4 K32
- 0x5C401600, // 00C9 MOVE R16 R11
- 0x7C300800, // 00CA CALL R12 4
- 0x8C301521, // 00CB GETMET R12 R10 K33
- 0x543A0004, // 00CC LDINT R14 5
- 0x7C300400, // 00CD CALL R12 2
- 0x8C34190C, // 00CE GETMET R13 R12 K12
- 0x4C3C0000, // 00CF LDNIL R15
- 0x88400920, // 00D0 GETMBR R16 R4 K32
- 0xB8460200, // 00D1 GETNGBL R17 K1
- 0x8C442322, // 00D2 GETMET R17 R17 K34
- 0x8C4C131C, // 00D3 GETMET R19 R9 K28
- 0x58540023, // 00D4 LDCONST R21 K35
- 0x5858001E, // 00D5 LDCONST R22 K30
- 0x7C4C0600, // 00D6 CALL R19 3
- 0x7C440400, // 00D7 CALL R17 2
- 0x7C340800, // 00D8 CALL R13 4
- 0x8C341521, // 00D9 GETMET R13 R10 K33
- 0x543E0005, // 00DA LDINT R15 6
- 0x7C340400, // 00DB CALL R13 2
- 0x8C381B0C, // 00DC GETMET R14 R13 K12
- 0x4C400000, // 00DD LDNIL R16
- 0x88440920, // 00DE GETMBR R17 R4 K32
- 0xB84A0200, // 00DF GETNGBL R18 K1
- 0x8C482522, // 00E0 GETMET R18 R18 K34
- 0x8C50131C, // 00E1 GETMET R20 R9 K28
- 0x58580024, // 00E2 LDCONST R22 K36
- 0x585C001E, // 00E3 LDCONST R23 K30
- 0x7C500600, // 00E4 CALL R20 3
- 0x7C480400, // 00E5 CALL R18 2
- 0x7C380800, // 00E6 CALL R14 4
- 0x8C381B0C, // 00E7 GETMET R14 R13 K12
- 0x4C400000, // 00E8 LDNIL R16
- 0x88440920, // 00E9 GETMBR R17 R4 K32
- 0xB84A0200, // 00EA GETNGBL R18 K1
- 0x8C482522, // 00EB GETMET R18 R18 K34
- 0x8C50131C, // 00EC GETMET R20 R9 K28
- 0x58580025, // 00ED LDCONST R22 K37
- 0x585C001E, // 00EE LDCONST R23 K30
- 0x7C500600, // 00EF CALL R20 3
- 0x7C480400, // 00F0 CALL R18 2
- 0x7C380800, // 00F1 CALL R14 4
- 0x8C38150C, // 00F2 GETMET R14 R10 K12
- 0x54420006, // 00F3 LDINT R16 7
- 0x8844090F, // 00F4 GETMBR R17 R4 K15
- 0x5848000A, // 00F5 LDCONST R18 K10
- 0x7C380800, // 00F6 CALL R14 4
- 0x80040E00, // 00F7 RET 1 R7
- 0x70020021, // 00F8 JMP #011B
- 0x1C1C0D0A, // 00F9 EQ R7 R6 K10
- 0x781E000A, // 00FA JMPF R7 #0106
- 0x8C1C0906, // 00FB GETMET R7 R4 K6
- 0x8824090D, // 00FC GETMBR R9 R4 K13
- 0xB82A2600, // 00FD GETNGBL R10 K19
- 0x8C281527, // 00FE GETMET R10 R10 K39
- 0x58300028, // 00FF LDCONST R12 K40
- 0x7C280400, // 0100 CALL R10 2
+ 0x7C1C0600, // 000D CALL R7 3
+ 0x80040E00, // 000E RET 1 R7
+ 0x70020027, // 000F JMP #0038
+ 0x1C1C0D09, // 0010 EQ R7 R6 K9
+ 0x781E000D, // 0011 JMPF R7 #0020
+ 0x8C1C090A, // 0012 GETMET R7 R4 K10
+ 0x7C1C0200, // 0013 CALL R7 1
+ 0x8C200F0B, // 0014 GETMET R8 R7 K11
+ 0x58280005, // 0015 LDCONST R10 K5
+ 0x882C090C, // 0016 GETMBR R11 R4 K12
+ 0x5432003B, // 0017 LDINT R12 60
+ 0x7C200800, // 0018 CALL R8 4
+ 0x8C200F0B, // 0019 GETMET R8 R7 K11
+ 0x58280009, // 001A LDCONST R10 K9
+ 0x882C090C, // 001B GETMBR R11 R4 K12
+ 0x54320383, // 001C LDINT R12 900
+ 0x7C200800, // 001D CALL R8 4
+ 0x80040E00, // 001E RET 1 R7
+ 0x70020017, // 001F JMP #0038
+ 0x1C1C0D0D, // 0020 EQ R7 R6 K13
+ 0x781E0005, // 0021 JMPF R7 #0028
+ 0x8C1C0906, // 0022 GETMET R7 R4 K6
+ 0x8824090E, // 0023 GETMBR R9 R4 K14
+ 0x5828000D, // 0024 LDCONST R10 K13
+ 0x7C1C0600, // 0025 CALL R7 3
+ 0x80040E00, // 0026 RET 1 R7
+ 0x7002000F, // 0027 JMP #0038
+ 0x1C1C0D0F, // 0028 EQ R7 R6 K15
+ 0x781E0005, // 0029 JMPF R7 #0030
+ 0x8C1C0906, // 002A GETMET R7 R4 K6
+ 0x8824090E, // 002B GETMBR R9 R4 K14
+ 0x5828000D, // 002C LDCONST R10 K13
+ 0x7C1C0600, // 002D CALL R7 3
+ 0x80040E00, // 002E RET 1 R7
+ 0x70020007, // 002F JMP #0038
+ 0x541E0003, // 0030 LDINT R7 4
+ 0x1C1C0C07, // 0031 EQ R7 R6 R7
+ 0x781E0004, // 0032 JMPF R7 #0038
+ 0x8C1C0906, // 0033 GETMET R7 R4 K6
+ 0x88240910, // 0034 GETMBR R9 R4 K16
+ 0x50280000, // 0035 LDBOOL R10 0 0
+ 0x7C1C0600, // 0036 CALL R7 3
+ 0x80040E00, // 0037 RET 1 R7
+ 0x700202ED, // 0038 JMP #0327
+ 0x541E0031, // 0039 LDINT R7 50
+ 0x1C1C0A07, // 003A EQ R7 R5 R7
+ 0x781E0000, // 003B JMPF R7 #003D
+ 0x700202E9, // 003C JMP #0327
+ 0x541E0032, // 003D LDINT R7 51
+ 0x1C1C0A07, // 003E EQ R7 R5 R7
+ 0x781E00DA, // 003F JMPF R7 #011B
+ 0x1C1C0D05, // 0040 EQ R7 R6 K5
+ 0x781E00B5, // 0041 JMPF R7 #00F8
+ 0x8C1C0911, // 0042 GETMET R7 R4 K17
+ 0x7C1C0200, // 0043 CALL R7 1
+ 0xB8222400, // 0044 GETNGBL R8 K18
+ 0x8C201113, // 0045 GETMET R8 R8 K19
+ 0x7C200200, // 0046 CALL R8 1
+ 0x94241114, // 0047 GETIDX R9 R8 K20
+ 0x78260053, // 0048 JMPF R9 #009D
+ 0x8C240F15, // 0049 GETMET R9 R7 K21
+ 0x4C2C0000, // 004A LDNIL R11
+ 0x7C240400, // 004B CALL R9 2
+ 0x8C28130B, // 004C GETMET R10 R9 K11
+ 0x58300005, // 004D LDCONST R12 K5
+ 0x88340916, // 004E GETMBR R13 R4 K22
+ 0x58380017, // 004F LDCONST R14 K23
+ 0x7C280800, // 0050 CALL R10 4
+ 0x8C28130B, // 0051 GETMET R10 R9 K11
+ 0x58300009, // 0052 LDCONST R12 K9
+ 0x88340910, // 0053 GETMBR R13 R4 K16
+ 0x58380009, // 0054 LDCONST R14 K9
+ 0x7C280800, // 0055 CALL R10 4
+ 0x8C28130B, // 0056 GETMET R10 R9 K11
+ 0x5830000D, // 0057 LDCONST R12 K13
+ 0x88340910, // 0058 GETMBR R13 R4 K16
+ 0x58380009, // 0059 LDCONST R14 K9
+ 0x7C280800, // 005A CALL R10 4
+ 0x8C28130B, // 005B GETMET R10 R9 K11
+ 0x5830000F, // 005C LDCONST R12 K15
+ 0x88340918, // 005D GETMBR R13 R4 K24
+ 0x4C380000, // 005E LDNIL R14
+ 0x7C280800, // 005F CALL R10 4
+ 0x60280015, // 0060 GETGBL R10 G21
+ 0x7C280000, // 0061 CALL R10 0
+ 0x8C281519, // 0062 GETMET R10 R10 K25
+ 0x8C30071A, // 0063 GETMET R12 R3 K26
+ 0x8C38111B, // 0064 GETMET R14 R8 K27
+ 0x5840001C, // 0065 LDCONST R16 K28
+ 0x5844001D, // 0066 LDCONST R17 K29
+ 0x7C380600, // 0067 CALL R14 3
+ 0x583C001E, // 0068 LDCONST R15 K30
+ 0x5840001D, // 0069 LDCONST R16 K29
+ 0x7C300800, // 006A CALL R12 4
+ 0x7C280400, // 006B CALL R10 2
+ 0x8C2C130B, // 006C GETMET R11 R9 K11
+ 0x54360003, // 006D LDINT R13 4
+ 0x8838091F, // 006E GETMBR R14 R4 K31
+ 0x5C3C1400, // 006F MOVE R15 R10
+ 0x7C2C0800, // 0070 CALL R11 4
+ 0x8C2C1320, // 0071 GETMET R11 R9 K32
+ 0x54360004, // 0072 LDINT R13 5
+ 0x7C2C0400, // 0073 CALL R11 2
+ 0x8C30170B, // 0074 GETMET R12 R11 K11
+ 0x4C380000, // 0075 LDNIL R14
+ 0x883C091F, // 0076 GETMBR R15 R4 K31
+ 0xB8420200, // 0077 GETNGBL R16 K1
+ 0x8C402121, // 0078 GETMET R16 R16 K33
+ 0x8C48111B, // 0079 GETMET R18 R8 K27
+ 0x58500022, // 007A LDCONST R20 K34
+ 0x5854001D, // 007B LDCONST R21 K29
+ 0x7C480600, // 007C CALL R18 3
+ 0x7C400400, // 007D CALL R16 2
+ 0x7C300800, // 007E CALL R12 4
+ 0x8C301320, // 007F GETMET R12 R9 K32
+ 0x543A0005, // 0080 LDINT R14 6
+ 0x7C300400, // 0081 CALL R12 2
+ 0x8C34190B, // 0082 GETMET R13 R12 K11
+ 0x4C3C0000, // 0083 LDNIL R15
+ 0x8840091F, // 0084 GETMBR R16 R4 K31
+ 0xB8460200, // 0085 GETNGBL R17 K1
+ 0x8C442321, // 0086 GETMET R17 R17 K33
+ 0x8C4C111B, // 0087 GETMET R19 R8 K27
+ 0x58540023, // 0088 LDCONST R21 K35
+ 0x5858001D, // 0089 LDCONST R22 K29
+ 0x7C4C0600, // 008A CALL R19 3
+ 0x7C440400, // 008B CALL R17 2
+ 0x7C340800, // 008C CALL R13 4
+ 0x8C34190B, // 008D GETMET R13 R12 K11
+ 0x4C3C0000, // 008E LDNIL R15
+ 0x8840091F, // 008F GETMBR R16 R4 K31
+ 0xB8460200, // 0090 GETNGBL R17 K1
+ 0x8C442321, // 0091 GETMET R17 R17 K33
+ 0x8C4C111B, // 0092 GETMET R19 R8 K27
+ 0x58540024, // 0093 LDCONST R21 K36
+ 0x5858001D, // 0094 LDCONST R22 K29
+ 0x7C4C0600, // 0095 CALL R19 3
+ 0x7C440400, // 0096 CALL R17 2
+ 0x7C340800, // 0097 CALL R13 4
+ 0x8C34130B, // 0098 GETMET R13 R9 K11
+ 0x543E0006, // 0099 LDINT R15 7
+ 0x8840090E, // 009A GETMBR R16 R4 K14
+ 0x5844000D, // 009B LDCONST R17 K13
+ 0x7C340800, // 009C CALL R13 4
+ 0xB8262400, // 009D GETNGBL R9 K18
+ 0x8C241325, // 009E GETMET R9 R9 K37
+ 0x7C240200, // 009F CALL R9 1
+ 0x94281314, // 00A0 GETIDX R10 R9 K20
+ 0x782A0053, // 00A1 JMPF R10 #00F6
+ 0x8C280F15, // 00A2 GETMET R10 R7 K21
+ 0x4C300000, // 00A3 LDNIL R12
+ 0x7C280400, // 00A4 CALL R10 2
+ 0x8C2C150B, // 00A5 GETMET R11 R10 K11
+ 0x58340005, // 00A6 LDCONST R13 K5
+ 0x88380916, // 00A7 GETMBR R14 R4 K22
+ 0x583C0025, // 00A8 LDCONST R15 K37
+ 0x7C2C0800, // 00A9 CALL R11 4
+ 0x8C2C150B, // 00AA GETMET R11 R10 K11
+ 0x58340009, // 00AB LDCONST R13 K9
+ 0x88380910, // 00AC GETMBR R14 R4 K16
+ 0x583C0009, // 00AD LDCONST R15 K9
+ 0x7C2C0800, // 00AE CALL R11 4
+ 0x8C2C150B, // 00AF GETMET R11 R10 K11
+ 0x5834000D, // 00B0 LDCONST R13 K13
+ 0x88380910, // 00B1 GETMBR R14 R4 K16
+ 0x583C0009, // 00B2 LDCONST R15 K9
+ 0x7C2C0800, // 00B3 CALL R11 4
+ 0x8C2C150B, // 00B4 GETMET R11 R10 K11
+ 0x5834000F, // 00B5 LDCONST R13 K15
+ 0x88380918, // 00B6 GETMBR R14 R4 K24
+ 0x4C3C0000, // 00B7 LDNIL R15
+ 0x7C2C0800, // 00B8 CALL R11 4
+ 0x602C0015, // 00B9 GETGBL R11 G21
+ 0x7C2C0000, // 00BA CALL R11 0
+ 0x8C2C1719, // 00BB GETMET R11 R11 K25
+ 0x8C34071A, // 00BC GETMET R13 R3 K26
+ 0x8C3C131B, // 00BD GETMET R15 R9 K27
+ 0x5844001C, // 00BE LDCONST R17 K28
+ 0x5848001D, // 00BF LDCONST R18 K29
+ 0x7C3C0600, // 00C0 CALL R15 3
+ 0x5840001E, // 00C1 LDCONST R16 K30
+ 0x5844001D, // 00C2 LDCONST R17 K29
+ 0x7C340800, // 00C3 CALL R13 4
+ 0x7C2C0400, // 00C4 CALL R11 2
+ 0x8C30150B, // 00C5 GETMET R12 R10 K11
+ 0x543A0003, // 00C6 LDINT R14 4
+ 0x883C091F, // 00C7 GETMBR R15 R4 K31
+ 0x5C401600, // 00C8 MOVE R16 R11
+ 0x7C300800, // 00C9 CALL R12 4
+ 0x8C301520, // 00CA GETMET R12 R10 K32
+ 0x543A0004, // 00CB LDINT R14 5
+ 0x7C300400, // 00CC CALL R12 2
+ 0x8C34190B, // 00CD GETMET R13 R12 K11
+ 0x4C3C0000, // 00CE LDNIL R15
+ 0x8840091F, // 00CF GETMBR R16 R4 K31
+ 0xB8460200, // 00D0 GETNGBL R17 K1
+ 0x8C442321, // 00D1 GETMET R17 R17 K33
+ 0x8C4C131B, // 00D2 GETMET R19 R9 K27
+ 0x58540022, // 00D3 LDCONST R21 K34
+ 0x5858001D, // 00D4 LDCONST R22 K29
+ 0x7C4C0600, // 00D5 CALL R19 3
+ 0x7C440400, // 00D6 CALL R17 2
+ 0x7C340800, // 00D7 CALL R13 4
+ 0x8C341520, // 00D8 GETMET R13 R10 K32
+ 0x543E0005, // 00D9 LDINT R15 6
+ 0x7C340400, // 00DA CALL R13 2
+ 0x8C381B0B, // 00DB GETMET R14 R13 K11
+ 0x4C400000, // 00DC LDNIL R16
+ 0x8844091F, // 00DD GETMBR R17 R4 K31
+ 0xB84A0200, // 00DE GETNGBL R18 K1
+ 0x8C482521, // 00DF GETMET R18 R18 K33
+ 0x8C50131B, // 00E0 GETMET R20 R9 K27
+ 0x58580023, // 00E1 LDCONST R22 K35
+ 0x585C001D, // 00E2 LDCONST R23 K29
+ 0x7C500600, // 00E3 CALL R20 3
+ 0x7C480400, // 00E4 CALL R18 2
+ 0x7C380800, // 00E5 CALL R14 4
+ 0x8C381B0B, // 00E6 GETMET R14 R13 K11
+ 0x4C400000, // 00E7 LDNIL R16
+ 0x8844091F, // 00E8 GETMBR R17 R4 K31
+ 0xB84A0200, // 00E9 GETNGBL R18 K1
+ 0x8C482521, // 00EA GETMET R18 R18 K33
+ 0x8C50131B, // 00EB GETMET R20 R9 K27
+ 0x58580024, // 00EC LDCONST R22 K36
+ 0x585C001D, // 00ED LDCONST R23 K29
+ 0x7C500600, // 00EE CALL R20 3
+ 0x7C480400, // 00EF CALL R18 2
+ 0x7C380800, // 00F0 CALL R14 4
+ 0x8C38150B, // 00F1 GETMET R14 R10 K11
+ 0x54420006, // 00F2 LDINT R16 7
+ 0x8844090E, // 00F3 GETMBR R17 R4 K14
+ 0x58480009, // 00F4 LDCONST R18 K9
+ 0x7C380800, // 00F5 CALL R14 4
+ 0x80040E00, // 00F6 RET 1 R7
+ 0x70020021, // 00F7 JMP #011A
+ 0x1C1C0D09, // 00F8 EQ R7 R6 K9
+ 0x781E000A, // 00F9 JMPF R7 #0105
+ 0x8C1C0906, // 00FA GETMET R7 R4 K6
+ 0x8824090C, // 00FB GETMBR R9 R4 K12
+ 0xB82A2400, // 00FC GETNGBL R10 K18
+ 0x8C281526, // 00FD GETMET R10 R10 K38
+ 0x58300027, // 00FE LDCONST R12 K39
+ 0x7C280400, // 00FF CALL R10 2
+ 0x94281528, // 0100 GETIDX R10 R10 K40
0x94281529, // 0101 GETIDX R10 R10 K41
- 0x9428152A, // 0102 GETIDX R10 R10 K42
- 0x7C1C0600, // 0103 CALL R7 3
- 0x80040E00, // 0104 RET 1 R7
- 0x70020014, // 0105 JMP #011B
- 0x1C1C0D0E, // 0106 EQ R7 R6 K14
- 0x781E000A, // 0107 JMPF R7 #0113
- 0x8C1C0906, // 0108 GETMET R7 R4 K6
- 0x8824092B, // 0109 GETMBR R9 R4 K43
- 0xB82A2600, // 010A GETNGBL R10 K19
- 0x8C281527, // 010B GETMET R10 R10 K39
- 0x5830002C, // 010C LDCONST R12 K44
- 0x7C280400, // 010D CALL R10 2
+ 0x7C1C0600, // 0102 CALL R7 3
+ 0x80040E00, // 0103 RET 1 R7
+ 0x70020014, // 0104 JMP #011A
+ 0x1C1C0D0D, // 0105 EQ R7 R6 K13
+ 0x781E000A, // 0106 JMPF R7 #0112
+ 0x8C1C0906, // 0107 GETMET R7 R4 K6
+ 0x8824092A, // 0108 GETMBR R9 R4 K42
+ 0xB82A2400, // 0109 GETNGBL R10 K18
+ 0x8C281526, // 010A GETMET R10 R10 K38
+ 0x5830002B, // 010B LDCONST R12 K43
+ 0x7C280400, // 010C CALL R10 2
+ 0x9428152C, // 010D GETIDX R10 R10 K44
0x9428152D, // 010E GETIDX R10 R10 K45
- 0x9428152E, // 010F GETIDX R10 R10 K46
- 0x7C1C0600, // 0110 CALL R7 3
- 0x80040E00, // 0111 RET 1 R7
- 0x70020007, // 0112 JMP #011B
- 0x541E0007, // 0113 LDINT R7 8
- 0x1C1C0C07, // 0114 EQ R7 R6 R7
- 0x781E0004, // 0115 JMPF R7 #011B
- 0x8C1C0906, // 0116 GETMET R7 R4 K6
- 0x88240911, // 0117 GETMBR R9 R4 K17
- 0x50280000, // 0118 LDBOOL R10 0 0
- 0x7C1C0600, // 0119 CALL R7 3
- 0x80040E00, // 011A RET 1 R7
- 0x7002020B, // 011B JMP #0328
- 0x541E0033, // 011C LDINT R7 52
- 0x1C1C0A07, // 011D EQ R7 R5 R7
- 0x781E0000, // 011E JMPF R7 #0120
- 0x70020207, // 011F JMP #0328
- 0x541E0037, // 0120 LDINT R7 56
- 0x1C1C0A07, // 0121 EQ R7 R5 R7
- 0x781E002C, // 0122 JMPF R7 #0150
- 0x1C1C0D05, // 0123 EQ R7 R6 K5
- 0x781E000F, // 0124 JMPF R7 #0135
- 0xB81E5E00, // 0125 GETNGBL R7 K47
- 0xB8222600, // 0126 GETNGBL R8 K19
- 0x8C201130, // 0127 GETMET R8 R8 K48
- 0x7C200200, // 0128 CALL R8 1
- 0x94201131, // 0129 GETIDX R8 R8 K49
- 0x7C1C0200, // 012A CALL R7 1
- 0xB8225E00, // 012B GETNGBL R8 K47
- 0x58240032, // 012C LDCONST R9 K50
- 0x7C200200, // 012D CALL R8 1
- 0x081C0E08, // 012E MUL R7 R7 R8
- 0x8C200906, // 012F GETMET R8 R4 K6
- 0x88280907, // 0130 GETMBR R10 R4 K7
- 0x5C2C0E00, // 0131 MOVE R11 R7
- 0x7C200600, // 0132 CALL R8 3
- 0x80041000, // 0133 RET 1 R8
- 0x70020019, // 0134 JMP #014F
- 0x1C1C0D0A, // 0135 EQ R7 R6 K10
- 0x781E0005, // 0136 JMPF R7 #013D
- 0x8C1C0906, // 0137 GETMET R7 R4 K6
- 0x8824090F, // 0138 GETMBR R9 R4 K15
- 0x58280010, // 0139 LDCONST R10 K16
- 0x7C1C0600, // 013A CALL R7 3
- 0x80040E00, // 013B RET 1 R7
- 0x70020011, // 013C JMP #014F
- 0x541E0006, // 013D LDINT R7 7
- 0x1C1C0C07, // 013E EQ R7 R6 R7
- 0x781E000E, // 013F JMPF R7 #014F
- 0xB81E5E00, // 0140 GETNGBL R7 K47
- 0xB8222600, // 0141 GETNGBL R8 K19
- 0x8C201130, // 0142 GETMET R8 R8 K48
- 0x7C200200, // 0143 CALL R8 1
- 0x94201133, // 0144 GETIDX R8 R8 K51
- 0x7C1C0200, // 0145 CALL R7 1
- 0xB8225E00, // 0146 GETNGBL R8 K47
- 0x58240032, // 0147 LDCONST R9 K50
- 0x7C200200, // 0148 CALL R8 1
- 0x081C0E08, // 0149 MUL R7 R7 R8
- 0x8C200906, // 014A GETMET R8 R4 K6
- 0x88280907, // 014B GETMBR R10 R4 K7
- 0x5C2C0E00, // 014C MOVE R11 R7
- 0x7C200600, // 014D CALL R8 3
- 0x80041000, // 014E RET 1 R8
- 0x700201D7, // 014F JMP #0328
- 0x541E003D, // 0150 LDINT R7 62
- 0x1C1C0A07, // 0151 EQ R7 R5 R7
- 0x781E0082, // 0152 JMPF R7 #01D6
- 0x1C1C0D05, // 0153 EQ R7 R6 K5
- 0x781E001D, // 0154 JMPF R7 #0173
- 0x8C1C0912, // 0155 GETMET R7 R4 K18
- 0x7C1C0200, // 0156 CALL R7 1
- 0x60200010, // 0157 GETGBL R8 G16
- 0x88240134, // 0158 GETMBR R9 R0 K52
- 0x88241335, // 0159 GETMBR R9 R9 K53
- 0x8C241336, // 015A GETMET R9 R9 K54
- 0x7C240200, // 015B CALL R9 1
- 0x7C200200, // 015C CALL R8 1
- 0xA802000F, // 015D EXBLK 0 #016E
- 0x5C241000, // 015E MOVE R9 R8
- 0x7C240000, // 015F CALL R9 0
- 0x8C280F16, // 0160 GETMET R10 R7 K22
- 0x4C300000, // 0161 LDNIL R12
- 0x7C280400, // 0162 CALL R10 2
- 0x8C2C150C, // 0163 GETMET R11 R10 K12
- 0x5834000A, // 0164 LDCONST R13 K10
- 0x88380937, // 0165 GETMBR R14 R4 K55
- 0x883C1338, // 0166 GETMBR R15 R9 K56
- 0x7C2C0800, // 0167 CALL R11 4
- 0x8C2C150C, // 0168 GETMET R11 R10 K12
- 0x5834000E, // 0169 LDCONST R13 K14
- 0x88380937, // 016A GETMBR R14 R4 K55
- 0x883C1339, // 016B GETMBR R15 R9 K57
- 0x7C2C0800, // 016C CALL R11 4
- 0x7001FFEF, // 016D JMP #015E
- 0x5820003A, // 016E LDCONST R8 K58
- 0xAC200200, // 016F CATCH R8 1 0
- 0xB0080000, // 0170 RAISE 2 R0 R0
- 0x80040E00, // 0171 RET 1 R7
- 0x70020061, // 0172 JMP #01D5
- 0x1C1C0D0A, // 0173 EQ R7 R6 K10
- 0x781E0032, // 0174 JMPF R7 #01A8
- 0x8C1C0912, // 0175 GETMET R7 R4 K18
- 0x7C1C0200, // 0176 CALL R7 1
- 0x60200010, // 0177 GETGBL R8 G16
- 0x88240134, // 0178 GETMBR R9 R0 K52
- 0x88241335, // 0179 GETMBR R9 R9 K53
- 0x8C241336, // 017A GETMET R9 R9 K54
- 0x7C240200, // 017B CALL R9 1
- 0x7C200200, // 017C CALL R8 1
- 0xA8020024, // 017D EXBLK 0 #01A3
- 0x5C241000, // 017E MOVE R9 R8
- 0x7C240000, // 017F CALL R9 0
- 0x8C28093B, // 0180 GETMET R10 R4 K59
- 0x8C30133C, // 0181 GETMET R12 R9 K60
- 0x7C300200, // 0182 CALL R12 1
- 0x7C280400, // 0183 CALL R10 2
- 0x8C2C0F16, // 0184 GETMET R11 R7 K22
- 0x4C340000, // 0185 LDNIL R13
- 0x7C2C0400, // 0186 CALL R11 2
- 0x8C30170C, // 0187 GETMET R12 R11 K12
- 0x5838000A, // 0188 LDCONST R14 K10
- 0x883C0937, // 0189 GETMBR R15 R4 K55
- 0x8C40153D, // 018A GETMET R16 R10 K61
- 0x544A0008, // 018B LDINT R18 9
- 0x7C400400, // 018C CALL R16 2
- 0x7C300800, // 018D CALL R12 4
- 0x8C30170C, // 018E GETMET R12 R11 K12
- 0x5838000E, // 018F LDCONST R14 K14
- 0x883C090D, // 0190 GETMBR R15 R4 K13
- 0x8840133E, // 0191 GETMBR R16 R9 K62
- 0x7C300800, // 0192 CALL R12 4
- 0x8C30170C, // 0193 GETMET R12 R11 K12
- 0x58380010, // 0194 LDCONST R14 K16
- 0x883C0907, // 0195 GETMBR R15 R4 K7
- 0x8840133F, // 0196 GETMBR R16 R9 K63
- 0x7C300800, // 0197 CALL R12 4
- 0x8C30170C, // 0198 GETMET R12 R11 K12
- 0x543A0003, // 0199 LDINT R14 4
- 0x883C0907, // 019A GETMBR R15 R4 K7
- 0x88401340, // 019B GETMBR R16 R9 K64
- 0x7C300800, // 019C CALL R12 4
- 0x8C30170C, // 019D GETMET R12 R11 K12
- 0x543A0004, // 019E LDINT R14 5
- 0x883C0917, // 019F GETMBR R15 R4 K23
- 0x88401341, // 01A0 GETMBR R16 R9 K65
- 0x7C300800, // 01A1 CALL R12 4
- 0x7001FFDA, // 01A2 JMP #017E
- 0x5820003A, // 01A3 LDCONST R8 K58
- 0xAC200200, // 01A4 CATCH R8 1 0
- 0xB0080000, // 01A5 RAISE 2 R0 R0
- 0x80040E00, // 01A6 RET 1 R7
- 0x7002002C, // 01A7 JMP #01D5
- 0x1C1C0D0E, // 01A8 EQ R7 R6 K14
- 0x781E0005, // 01A9 JMPF R7 #01B0
- 0x8C1C0906, // 01AA GETMET R7 R4 K6
- 0x8824090F, // 01AB GETMBR R9 R4 K15
- 0x542A0004, // 01AC LDINT R10 5
- 0x7C1C0600, // 01AD CALL R7 3
- 0x80040E00, // 01AE RET 1 R7
- 0x70020024, // 01AF JMP #01D5
- 0x1C1C0D10, // 01B0 EQ R7 R6 K16
- 0x781E000B, // 01B1 JMPF R7 #01BE
- 0x881C0134, // 01B2 GETMBR R7 R0 K52
- 0x881C0F35, // 01B3 GETMBR R7 R7 K53
- 0x8C1C0F36, // 01B4 GETMET R7 R7 K54
- 0x7C1C0200, // 01B5 CALL R7 1
- 0x8C200906, // 01B6 GETMET R8 R4 K6
- 0x8828090F, // 01B7 GETMBR R10 R4 K15
- 0x602C000C, // 01B8 GETGBL R11 G12
- 0x5C300E00, // 01B9 MOVE R12 R7
- 0x7C2C0200, // 01BA CALL R11 1
- 0x7C200600, // 01BB CALL R8 3
- 0x80041000, // 01BC RET 1 R8
- 0x70020016, // 01BD JMP #01D5
- 0x541E0003, // 01BE LDINT R7 4
- 0x1C1C0C07, // 01BF EQ R7 R6 R7
- 0x781E0000, // 01C0 JMPF R7 #01C2
- 0x70020012, // 01C1 JMP #01D5
- 0x541E0004, // 01C2 LDINT R7 5
- 0x1C1C0C07, // 01C3 EQ R7 R6 R7
- 0x781E000F, // 01C4 JMPF R7 #01D5
- 0x881C0134, // 01C5 GETMBR R7 R0 K52
- 0x881C0F35, // 01C6 GETMBR R7 R7 K53
- 0x8C1C0F36, // 01C7 GETMET R7 R7 K54
- 0x7C1C0200, // 01C8 CALL R7 1
- 0x8C200F1C, // 01C9 GETMET R8 R7 K28
- 0x88280308, // 01CA GETMBR R10 R1 K8
- 0x7C200400, // 01CB CALL R8 2
- 0x4C240000, // 01CC LDNIL R9
- 0x1C241009, // 01CD EQ R9 R8 R9
- 0x78260000, // 01CE JMPF R9 #01D0
- 0x58200005, // 01CF LDCONST R8 K5
- 0x8C240906, // 01D0 GETMET R9 R4 K6
- 0x882C090F, // 01D1 GETMBR R11 R4 K15
- 0x5C301000, // 01D2 MOVE R12 R8
- 0x7C240600, // 01D3 CALL R9 3
- 0x80041200, // 01D4 RET 1 R9
- 0x70020151, // 01D5 JMP #0328
- 0x541E003B, // 01D6 LDINT R7 60
- 0x1C1C0A07, // 01D7 EQ R7 R5 R7
- 0x781E0000, // 01D8 JMPF R7 #01DA
- 0x7002014D, // 01D9 JMP #0328
- 0x541E0027, // 01DA LDINT R7 40
- 0x1C1C0A07, // 01DB EQ R7 R5 R7
- 0x781E0080, // 01DC JMPF R7 #025E
- 0x1C1C0D05, // 01DD EQ R7 R6 K5
- 0x781E0005, // 01DE JMPF R7 #01E5
- 0x8C1C0906, // 01DF GETMET R7 R4 K6
- 0x8824090D, // 01E0 GETMBR R9 R4 K13
- 0x58280005, // 01E1 LDCONST R10 K5
- 0x7C1C0600, // 01E2 CALL R7 3
- 0x80040E00, // 01E3 RET 1 R7
- 0x70020077, // 01E4 JMP #025D
- 0x1C1C0D0A, // 01E5 EQ R7 R6 K10
- 0x781E0005, // 01E6 JMPF R7 #01ED
- 0x8C1C0906, // 01E7 GETMET R7 R4 K6
- 0x88240917, // 01E8 GETMBR R9 R4 K23
- 0x58280042, // 01E9 LDCONST R10 K66
- 0x7C1C0600, // 01EA CALL R7 3
- 0x80040E00, // 01EB RET 1 R7
- 0x7002006F, // 01EC JMP #025D
- 0x1C1C0D0E, // 01ED EQ R7 R6 K14
- 0x781E0006, // 01EE JMPF R7 #01F6
- 0x8C1C0906, // 01EF GETMET R7 R4 K6
- 0x8824090D, // 01F0 GETMBR R9 R4 K13
- 0x88280134, // 01F1 GETMBR R10 R0 K52
- 0x88281543, // 01F2 GETMBR R10 R10 K67
- 0x7C1C0600, // 01F3 CALL R7 3
- 0x80040E00, // 01F4 RET 1 R7
- 0x70020066, // 01F5 JMP #025D
- 0x1C1C0D10, // 01F6 EQ R7 R6 K16
- 0x781E0009, // 01F7 JMPF R7 #0202
- 0x8C1C0906, // 01F8 GETMET R7 R4 K6
- 0x88240917, // 01F9 GETMBR R9 R4 K23
- 0xB82A2600, // 01FA GETNGBL R10 K19
- 0x8C281527, // 01FB GETMET R10 R10 K39
- 0x58300044, // 01FC LDCONST R12 K68
- 0x7C280400, // 01FD CALL R10 2
- 0x94281544, // 01FE GETIDX R10 R10 K68
- 0x7C1C0600, // 01FF CALL R7 3
- 0x80040E00, // 0200 RET 1 R7
- 0x7002005A, // 0201 JMP #025D
- 0x541E0003, // 0202 LDINT R7 4
- 0x1C1C0C07, // 0203 EQ R7 R6 R7
- 0x781E0005, // 0204 JMPF R7 #020B
- 0x8C1C0906, // 0205 GETMET R7 R4 K6
- 0x8824090D, // 0206 GETMBR R9 R4 K13
- 0x542A7FFF, // 0207 LDINT R10 32768
- 0x7C1C0600, // 0208 CALL R7 3
- 0x80040E00, // 0209 RET 1 R7
- 0x70020051, // 020A JMP #025D
- 0x541E0004, // 020B LDINT R7 5
- 0x1C1C0C07, // 020C EQ R7 R6 R7
- 0x781E0009, // 020D JMPF R7 #0218
- 0x8C1C0906, // 020E GETMET R7 R4 K6
- 0x88240917, // 020F GETMBR R9 R4 K23
- 0xB82A2600, // 0210 GETNGBL R10 K19
- 0x8C281527, // 0211 GETMET R10 R10 K39
- 0x58300045, // 0212 LDCONST R12 K69
- 0x7C280400, // 0213 CALL R10 2
- 0x94281546, // 0214 GETIDX R10 R10 K70
- 0x7C1C0600, // 0215 CALL R7 3
- 0x80040E00, // 0216 RET 1 R7
- 0x70020044, // 0217 JMP #025D
- 0x541E0005, // 0218 LDINT R7 6
- 0x1C1C0C07, // 0219 EQ R7 R6 R7
- 0x781E0005, // 021A JMPF R7 #0221
- 0x8C1C0906, // 021B GETMET R7 R4 K6
- 0x88240917, // 021C GETMBR R9 R4 K23
- 0x58280047, // 021D LDCONST R10 K71
- 0x7C1C0600, // 021E CALL R7 3
- 0x80040E00, // 021F RET 1 R7
- 0x7002003B, // 0220 JMP #025D
- 0x541E0006, // 0221 LDINT R7 7
- 0x1C1C0C07, // 0222 EQ R7 R6 R7
- 0x781E0005, // 0223 JMPF R7 #022A
- 0x8C1C0906, // 0224 GETMET R7 R4 K6
- 0x8824090D, // 0225 GETMBR R9 R4 K13
- 0x58280005, // 0226 LDCONST R10 K5
- 0x7C1C0600, // 0227 CALL R7 3
- 0x80040E00, // 0228 RET 1 R7
- 0x70020032, // 0229 JMP #025D
- 0x541E0007, // 022A LDINT R7 8
- 0x1C1C0C07, // 022B EQ R7 R6 R7
- 0x781E000A, // 022C JMPF R7 #0238
- 0x8C1C0906, // 022D GETMET R7 R4 K6
- 0x88240917, // 022E GETMBR R9 R4 K23
- 0xB82A2600, // 022F GETNGBL R10 K19
- 0x8C281527, // 0230 GETMET R10 R10 K39
- 0x58300048, // 0231 LDCONST R12 K72
- 0x7C280400, // 0232 CALL R10 2
+ 0x7C1C0600, // 010F CALL R7 3
+ 0x80040E00, // 0110 RET 1 R7
+ 0x70020007, // 0111 JMP #011A
+ 0x541E0007, // 0112 LDINT R7 8
+ 0x1C1C0C07, // 0113 EQ R7 R6 R7
+ 0x781E0004, // 0114 JMPF R7 #011A
+ 0x8C1C0906, // 0115 GETMET R7 R4 K6
+ 0x88240910, // 0116 GETMBR R9 R4 K16
+ 0x50280000, // 0117 LDBOOL R10 0 0
+ 0x7C1C0600, // 0118 CALL R7 3
+ 0x80040E00, // 0119 RET 1 R7
+ 0x7002020B, // 011A JMP #0327
+ 0x541E0033, // 011B LDINT R7 52
+ 0x1C1C0A07, // 011C EQ R7 R5 R7
+ 0x781E0000, // 011D JMPF R7 #011F
+ 0x70020207, // 011E JMP #0327
+ 0x541E0037, // 011F LDINT R7 56
+ 0x1C1C0A07, // 0120 EQ R7 R5 R7
+ 0x781E002C, // 0121 JMPF R7 #014F
+ 0x1C1C0D05, // 0122 EQ R7 R6 K5
+ 0x781E000F, // 0123 JMPF R7 #0134
+ 0xB81E5C00, // 0124 GETNGBL R7 K46
+ 0xB8222400, // 0125 GETNGBL R8 K18
+ 0x8C20112F, // 0126 GETMET R8 R8 K47
+ 0x7C200200, // 0127 CALL R8 1
+ 0x94201130, // 0128 GETIDX R8 R8 K48
+ 0x7C1C0200, // 0129 CALL R7 1
+ 0xB8225C00, // 012A GETNGBL R8 K46
+ 0x58240031, // 012B LDCONST R9 K49
+ 0x7C200200, // 012C CALL R8 1
+ 0x081C0E08, // 012D MUL R7 R7 R8
+ 0x8C200906, // 012E GETMET R8 R4 K6
+ 0x88280907, // 012F GETMBR R10 R4 K7
+ 0x5C2C0E00, // 0130 MOVE R11 R7
+ 0x7C200600, // 0131 CALL R8 3
+ 0x80041000, // 0132 RET 1 R8
+ 0x70020019, // 0133 JMP #014E
+ 0x1C1C0D09, // 0134 EQ R7 R6 K9
+ 0x781E0005, // 0135 JMPF R7 #013C
+ 0x8C1C0906, // 0136 GETMET R7 R4 K6
+ 0x8824090E, // 0137 GETMBR R9 R4 K14
+ 0x5828000F, // 0138 LDCONST R10 K15
+ 0x7C1C0600, // 0139 CALL R7 3
+ 0x80040E00, // 013A RET 1 R7
+ 0x70020011, // 013B JMP #014E
+ 0x541E0006, // 013C LDINT R7 7
+ 0x1C1C0C07, // 013D EQ R7 R6 R7
+ 0x781E000E, // 013E JMPF R7 #014E
+ 0xB81E5C00, // 013F GETNGBL R7 K46
+ 0xB8222400, // 0140 GETNGBL R8 K18
+ 0x8C20112F, // 0141 GETMET R8 R8 K47
+ 0x7C200200, // 0142 CALL R8 1
+ 0x94201132, // 0143 GETIDX R8 R8 K50
+ 0x7C1C0200, // 0144 CALL R7 1
+ 0xB8225C00, // 0145 GETNGBL R8 K46
+ 0x58240031, // 0146 LDCONST R9 K49
+ 0x7C200200, // 0147 CALL R8 1
+ 0x081C0E08, // 0148 MUL R7 R7 R8
+ 0x8C200906, // 0149 GETMET R8 R4 K6
+ 0x88280907, // 014A GETMBR R10 R4 K7
+ 0x5C2C0E00, // 014B MOVE R11 R7
+ 0x7C200600, // 014C CALL R8 3
+ 0x80041000, // 014D RET 1 R8
+ 0x700201D7, // 014E JMP #0327
+ 0x541E003D, // 014F LDINT R7 62
+ 0x1C1C0A07, // 0150 EQ R7 R5 R7
+ 0x781E0082, // 0151 JMPF R7 #01D5
+ 0x1C1C0D05, // 0152 EQ R7 R6 K5
+ 0x781E001D, // 0153 JMPF R7 #0172
+ 0x8C1C0911, // 0154 GETMET R7 R4 K17
+ 0x7C1C0200, // 0155 CALL R7 1
+ 0x60200010, // 0156 GETGBL R8 G16
+ 0x88240133, // 0157 GETMBR R9 R0 K51
+ 0x88241334, // 0158 GETMBR R9 R9 K52
+ 0x8C241335, // 0159 GETMET R9 R9 K53
+ 0x7C240200, // 015A CALL R9 1
+ 0x7C200200, // 015B CALL R8 1
+ 0xA802000F, // 015C EXBLK 0 #016D
+ 0x5C241000, // 015D MOVE R9 R8
+ 0x7C240000, // 015E CALL R9 0
+ 0x8C280F15, // 015F GETMET R10 R7 K21
+ 0x4C300000, // 0160 LDNIL R12
+ 0x7C280400, // 0161 CALL R10 2
+ 0x8C2C150B, // 0162 GETMET R11 R10 K11
+ 0x58340009, // 0163 LDCONST R13 K9
+ 0x88380936, // 0164 GETMBR R14 R4 K54
+ 0x883C1337, // 0165 GETMBR R15 R9 K55
+ 0x7C2C0800, // 0166 CALL R11 4
+ 0x8C2C150B, // 0167 GETMET R11 R10 K11
+ 0x5834000D, // 0168 LDCONST R13 K13
+ 0x88380936, // 0169 GETMBR R14 R4 K54
+ 0x883C1338, // 016A GETMBR R15 R9 K56
+ 0x7C2C0800, // 016B CALL R11 4
+ 0x7001FFEF, // 016C JMP #015D
+ 0x58200039, // 016D LDCONST R8 K57
+ 0xAC200200, // 016E CATCH R8 1 0
+ 0xB0080000, // 016F RAISE 2 R0 R0
+ 0x80040E00, // 0170 RET 1 R7
+ 0x70020061, // 0171 JMP #01D4
+ 0x1C1C0D09, // 0172 EQ R7 R6 K9
+ 0x781E0032, // 0173 JMPF R7 #01A7
+ 0x8C1C0911, // 0174 GETMET R7 R4 K17
+ 0x7C1C0200, // 0175 CALL R7 1
+ 0x60200010, // 0176 GETGBL R8 G16
+ 0x88240133, // 0177 GETMBR R9 R0 K51
+ 0x88241334, // 0178 GETMBR R9 R9 K52
+ 0x8C241335, // 0179 GETMET R9 R9 K53
+ 0x7C240200, // 017A CALL R9 1
+ 0x7C200200, // 017B CALL R8 1
+ 0xA8020024, // 017C EXBLK 0 #01A2
+ 0x5C241000, // 017D MOVE R9 R8
+ 0x7C240000, // 017E CALL R9 0
+ 0x8C28093A, // 017F GETMET R10 R4 K58
+ 0x8C30133B, // 0180 GETMET R12 R9 K59
+ 0x7C300200, // 0181 CALL R12 1
+ 0x7C280400, // 0182 CALL R10 2
+ 0x8C2C0F15, // 0183 GETMET R11 R7 K21
+ 0x4C340000, // 0184 LDNIL R13
+ 0x7C2C0400, // 0185 CALL R11 2
+ 0x8C30170B, // 0186 GETMET R12 R11 K11
+ 0x58380009, // 0187 LDCONST R14 K9
+ 0x883C0936, // 0188 GETMBR R15 R4 K54
+ 0x8C40153C, // 0189 GETMET R16 R10 K60
+ 0x544A0008, // 018A LDINT R18 9
+ 0x7C400400, // 018B CALL R16 2
+ 0x7C300800, // 018C CALL R12 4
+ 0x8C30170B, // 018D GETMET R12 R11 K11
+ 0x5838000D, // 018E LDCONST R14 K13
+ 0x883C090C, // 018F GETMBR R15 R4 K12
+ 0x8840133D, // 0190 GETMBR R16 R9 K61
+ 0x7C300800, // 0191 CALL R12 4
+ 0x8C30170B, // 0192 GETMET R12 R11 K11
+ 0x5838000F, // 0193 LDCONST R14 K15
+ 0x883C0907, // 0194 GETMBR R15 R4 K7
+ 0x8840133E, // 0195 GETMBR R16 R9 K62
+ 0x7C300800, // 0196 CALL R12 4
+ 0x8C30170B, // 0197 GETMET R12 R11 K11
+ 0x543A0003, // 0198 LDINT R14 4
+ 0x883C0907, // 0199 GETMBR R15 R4 K7
+ 0x8840133F, // 019A GETMBR R16 R9 K63
+ 0x7C300800, // 019B CALL R12 4
+ 0x8C30170B, // 019C GETMET R12 R11 K11
+ 0x543A0004, // 019D LDINT R14 5
+ 0x883C0916, // 019E GETMBR R15 R4 K22
+ 0x88401340, // 019F GETMBR R16 R9 K64
+ 0x7C300800, // 01A0 CALL R12 4
+ 0x7001FFDA, // 01A1 JMP #017D
+ 0x58200039, // 01A2 LDCONST R8 K57
+ 0xAC200200, // 01A3 CATCH R8 1 0
+ 0xB0080000, // 01A4 RAISE 2 R0 R0
+ 0x80040E00, // 01A5 RET 1 R7
+ 0x7002002C, // 01A6 JMP #01D4
+ 0x1C1C0D0D, // 01A7 EQ R7 R6 K13
+ 0x781E0005, // 01A8 JMPF R7 #01AF
+ 0x8C1C0906, // 01A9 GETMET R7 R4 K6
+ 0x8824090E, // 01AA GETMBR R9 R4 K14
+ 0x542A0004, // 01AB LDINT R10 5
+ 0x7C1C0600, // 01AC CALL R7 3
+ 0x80040E00, // 01AD RET 1 R7
+ 0x70020024, // 01AE JMP #01D4
+ 0x1C1C0D0F, // 01AF EQ R7 R6 K15
+ 0x781E000B, // 01B0 JMPF R7 #01BD
+ 0x881C0133, // 01B1 GETMBR R7 R0 K51
+ 0x881C0F34, // 01B2 GETMBR R7 R7 K52
+ 0x8C1C0F35, // 01B3 GETMET R7 R7 K53
+ 0x7C1C0200, // 01B4 CALL R7 1
+ 0x8C200906, // 01B5 GETMET R8 R4 K6
+ 0x8828090E, // 01B6 GETMBR R10 R4 K14
+ 0x602C000C, // 01B7 GETGBL R11 G12
+ 0x5C300E00, // 01B8 MOVE R12 R7
+ 0x7C2C0200, // 01B9 CALL R11 1
+ 0x7C200600, // 01BA CALL R8 3
+ 0x80041000, // 01BB RET 1 R8
+ 0x70020016, // 01BC JMP #01D4
+ 0x541E0003, // 01BD LDINT R7 4
+ 0x1C1C0C07, // 01BE EQ R7 R6 R7
+ 0x781E0000, // 01BF JMPF R7 #01C1
+ 0x70020012, // 01C0 JMP #01D4
+ 0x541E0004, // 01C1 LDINT R7 5
+ 0x1C1C0C07, // 01C2 EQ R7 R6 R7
+ 0x781E000F, // 01C3 JMPF R7 #01D4
+ 0x881C0133, // 01C4 GETMBR R7 R0 K51
+ 0x881C0F34, // 01C5 GETMBR R7 R7 K52
+ 0x8C1C0F35, // 01C6 GETMET R7 R7 K53
+ 0x7C1C0200, // 01C7 CALL R7 1
+ 0x8C200F1B, // 01C8 GETMET R8 R7 K27
+ 0x5C280200, // 01C9 MOVE R10 R1
+ 0x7C200400, // 01CA CALL R8 2
+ 0x4C240000, // 01CB LDNIL R9
+ 0x1C241009, // 01CC EQ R9 R8 R9
+ 0x78260000, // 01CD JMPF R9 #01CF
+ 0x58200005, // 01CE LDCONST R8 K5
+ 0x8C240906, // 01CF GETMET R9 R4 K6
+ 0x882C090E, // 01D0 GETMBR R11 R4 K14
+ 0x5C301000, // 01D1 MOVE R12 R8
+ 0x7C240600, // 01D2 CALL R9 3
+ 0x80041200, // 01D3 RET 1 R9
+ 0x70020151, // 01D4 JMP #0327
+ 0x541E003B, // 01D5 LDINT R7 60
+ 0x1C1C0A07, // 01D6 EQ R7 R5 R7
+ 0x781E0000, // 01D7 JMPF R7 #01D9
+ 0x7002014D, // 01D8 JMP #0327
+ 0x541E0027, // 01D9 LDINT R7 40
+ 0x1C1C0A07, // 01DA EQ R7 R5 R7
+ 0x781E0080, // 01DB JMPF R7 #025D
+ 0x1C1C0D05, // 01DC EQ R7 R6 K5
+ 0x781E0005, // 01DD JMPF R7 #01E4
+ 0x8C1C0906, // 01DE GETMET R7 R4 K6
+ 0x8824090C, // 01DF GETMBR R9 R4 K12
+ 0x58280005, // 01E0 LDCONST R10 K5
+ 0x7C1C0600, // 01E1 CALL R7 3
+ 0x80040E00, // 01E2 RET 1 R7
+ 0x70020077, // 01E3 JMP #025C
+ 0x1C1C0D09, // 01E4 EQ R7 R6 K9
+ 0x781E0005, // 01E5 JMPF R7 #01EC
+ 0x8C1C0906, // 01E6 GETMET R7 R4 K6
+ 0x88240916, // 01E7 GETMBR R9 R4 K22
+ 0x58280041, // 01E8 LDCONST R10 K65
+ 0x7C1C0600, // 01E9 CALL R7 3
+ 0x80040E00, // 01EA RET 1 R7
+ 0x7002006F, // 01EB JMP #025C
+ 0x1C1C0D0D, // 01EC EQ R7 R6 K13
+ 0x781E0006, // 01ED JMPF R7 #01F5
+ 0x8C1C0906, // 01EE GETMET R7 R4 K6
+ 0x8824090C, // 01EF GETMBR R9 R4 K12
+ 0x88280133, // 01F0 GETMBR R10 R0 K51
+ 0x88281542, // 01F1 GETMBR R10 R10 K66
+ 0x7C1C0600, // 01F2 CALL R7 3
+ 0x80040E00, // 01F3 RET 1 R7
+ 0x70020066, // 01F4 JMP #025C
+ 0x1C1C0D0F, // 01F5 EQ R7 R6 K15
+ 0x781E0009, // 01F6 JMPF R7 #0201
+ 0x8C1C0906, // 01F7 GETMET R7 R4 K6
+ 0x88240916, // 01F8 GETMBR R9 R4 K22
+ 0xB82A2400, // 01F9 GETNGBL R10 K18
+ 0x8C281526, // 01FA GETMET R10 R10 K38
+ 0x58300043, // 01FB LDCONST R12 K67
+ 0x7C280400, // 01FC CALL R10 2
+ 0x94281543, // 01FD GETIDX R10 R10 K67
+ 0x7C1C0600, // 01FE CALL R7 3
+ 0x80040E00, // 01FF RET 1 R7
+ 0x7002005A, // 0200 JMP #025C
+ 0x541E0003, // 0201 LDINT R7 4
+ 0x1C1C0C07, // 0202 EQ R7 R6 R7
+ 0x781E0005, // 0203 JMPF R7 #020A
+ 0x8C1C0906, // 0204 GETMET R7 R4 K6
+ 0x8824090C, // 0205 GETMBR R9 R4 K12
+ 0x542A7FFF, // 0206 LDINT R10 32768
+ 0x7C1C0600, // 0207 CALL R7 3
+ 0x80040E00, // 0208 RET 1 R7
+ 0x70020051, // 0209 JMP #025C
+ 0x541E0004, // 020A LDINT R7 5
+ 0x1C1C0C07, // 020B EQ R7 R6 R7
+ 0x781E0009, // 020C JMPF R7 #0217
+ 0x8C1C0906, // 020D GETMET R7 R4 K6
+ 0x88240916, // 020E GETMBR R9 R4 K22
+ 0xB82A2400, // 020F GETNGBL R10 K18
+ 0x8C281526, // 0210 GETMET R10 R10 K38
+ 0x58300044, // 0211 LDCONST R12 K68
+ 0x7C280400, // 0212 CALL R10 2
+ 0x94281545, // 0213 GETIDX R10 R10 K69
+ 0x7C1C0600, // 0214 CALL R7 3
+ 0x80040E00, // 0215 RET 1 R7
+ 0x70020044, // 0216 JMP #025C
+ 0x541E0005, // 0217 LDINT R7 6
+ 0x1C1C0C07, // 0218 EQ R7 R6 R7
+ 0x781E0005, // 0219 JMPF R7 #0220
+ 0x8C1C0906, // 021A GETMET R7 R4 K6
+ 0x88240916, // 021B GETMBR R9 R4 K22
+ 0x58280046, // 021C LDCONST R10 K70
+ 0x7C1C0600, // 021D CALL R7 3
+ 0x80040E00, // 021E RET 1 R7
+ 0x7002003B, // 021F JMP #025C
+ 0x541E0006, // 0220 LDINT R7 7
+ 0x1C1C0C07, // 0221 EQ R7 R6 R7
+ 0x781E0005, // 0222 JMPF R7 #0229
+ 0x8C1C0906, // 0223 GETMET R7 R4 K6
+ 0x8824090C, // 0224 GETMBR R9 R4 K12
+ 0x58280005, // 0225 LDCONST R10 K5
+ 0x7C1C0600, // 0226 CALL R7 3
+ 0x80040E00, // 0227 RET 1 R7
+ 0x70020032, // 0228 JMP #025C
+ 0x541E0007, // 0229 LDINT R7 8
+ 0x1C1C0C07, // 022A EQ R7 R6 R7
+ 0x781E000A, // 022B JMPF R7 #0237
+ 0x8C1C0906, // 022C GETMET R7 R4 K6
+ 0x88240916, // 022D GETMBR R9 R4 K22
+ 0xB82A2400, // 022E GETNGBL R10 K18
+ 0x8C281526, // 022F GETMET R10 R10 K38
+ 0x58300047, // 0230 LDCONST R12 K71
+ 0x7C280400, // 0231 CALL R10 2
+ 0x94281548, // 0232 GETIDX R10 R10 K72
0x94281549, // 0233 GETIDX R10 R10 K73
- 0x9428154A, // 0234 GETIDX R10 R10 K74
- 0x7C1C0600, // 0235 CALL R7 3
- 0x80040E00, // 0236 RET 1 R7
- 0x70020024, // 0237 JMP #025D
- 0x541E0008, // 0238 LDINT R7 9
- 0x1C1C0C07, // 0239 EQ R7 R6 R7
- 0x781E0005, // 023A JMPF R7 #0241
- 0x8C1C0906, // 023B GETMET R7 R4 K6
- 0x8824090D, // 023C GETMBR R9 R4 K13
- 0x58280005, // 023D LDCONST R10 K5
- 0x7C1C0600, // 023E CALL R7 3
- 0x80040E00, // 023F RET 1 R7
- 0x7002001B, // 0240 JMP #025D
- 0x541E0009, // 0241 LDINT R7 10
- 0x1C1C0C07, // 0242 EQ R7 R6 R7
- 0x781E000A, // 0243 JMPF R7 #024F
- 0x8C1C0906, // 0244 GETMET R7 R4 K6
- 0x88240917, // 0245 GETMBR R9 R4 K23
- 0xB82A2600, // 0246 GETNGBL R10 K19
- 0x8C281527, // 0247 GETMET R10 R10 K39
- 0x58300048, // 0248 LDCONST R12 K72
- 0x7C280400, // 0249 CALL R10 2
- 0x94281549, // 024A GETIDX R10 R10 K73
- 0x9428154B, // 024B GETIDX R10 R10 K75
- 0x7C1C0600, // 024C CALL R7 3
- 0x80040E00, // 024D RET 1 R7
- 0x7002000D, // 024E JMP #025D
- 0x541E0011, // 024F LDINT R7 18
- 0x1C1C0C07, // 0250 EQ R7 R6 R7
- 0x781E000A, // 0251 JMPF R7 #025D
- 0x8C1C0906, // 0252 GETMET R7 R4 K6
- 0x88240917, // 0253 GETMBR R9 R4 K23
- 0xB82A2600, // 0254 GETNGBL R10 K19
- 0x8C281526, // 0255 GETMET R10 R10 K38
- 0x7C280200, // 0256 CALL R10 1
- 0x8C28151C, // 0257 GETMET R10 R10 K28
- 0x5830001D, // 0258 LDCONST R12 K29
- 0x5834001E, // 0259 LDCONST R13 K30
- 0x7C280600, // 025A CALL R10 3
- 0x7C1C0600, // 025B CALL R7 3
- 0x80040E00, // 025C RET 1 R7
- 0x700200C9, // 025D JMP #0328
- 0x541E003E, // 025E LDINT R7 63
- 0x1C1C0A07, // 025F EQ R7 R5 R7
- 0x781E0000, // 0260 JMPF R7 #0262
- 0x700200C5, // 0261 JMP #0328
- 0x541E0029, // 0262 LDINT R7 42
- 0x1C1C0A07, // 0263 EQ R7 R5 R7
- 0x781E001D, // 0264 JMPF R7 #0283
- 0x1C1C0D05, // 0265 EQ R7 R6 K5
- 0x781E0003, // 0266 JMPF R7 #026B
- 0x8C1C0912, // 0267 GETMET R7 R4 K18
- 0x7C1C0200, // 0268 CALL R7 1
- 0x80040E00, // 0269 RET 1 R7
- 0x70020016, // 026A JMP #0282
- 0x1C1C0D0A, // 026B EQ R7 R6 K10
- 0x781E0005, // 026C JMPF R7 #0273
- 0x8C1C0906, // 026D GETMET R7 R4 K6
- 0x88240911, // 026E GETMBR R9 R4 K17
- 0x58280005, // 026F LDCONST R10 K5
- 0x7C1C0600, // 0270 CALL R7 3
- 0x80040E00, // 0271 RET 1 R7
- 0x7002000E, // 0272 JMP #0282
- 0x1C1C0D0E, // 0273 EQ R7 R6 K14
- 0x781E0005, // 0274 JMPF R7 #027B
- 0x8C1C0906, // 0275 GETMET R7 R4 K6
- 0x8824090F, // 0276 GETMBR R9 R4 K15
- 0x5828000A, // 0277 LDCONST R10 K10
- 0x7C1C0600, // 0278 CALL R7 3
- 0x80040E00, // 0279 RET 1 R7
- 0x70020006, // 027A JMP #0282
- 0x1C1C0D10, // 027B EQ R7 R6 K16
- 0x781E0004, // 027C JMPF R7 #0282
- 0x8C1C0906, // 027D GETMET R7 R4 K6
- 0x88240919, // 027E GETMBR R9 R4 K25
- 0x4C280000, // 027F LDNIL R10
- 0x7C1C0600, // 0280 CALL R7 3
- 0x80040E00, // 0281 RET 1 R7
- 0x700200A4, // 0282 JMP #0328
- 0x541E002A, // 0283 LDINT R7 43
- 0x1C1C0A07, // 0284 EQ R7 R5 R7
- 0x781E0016, // 0285 JMPF R7 #029D
- 0x1C1C0D05, // 0286 EQ R7 R6 K5
- 0x781E0007, // 0287 JMPF R7 #0290
- 0x8C1C0906, // 0288 GETMET R7 R4 K6
- 0x88240917, // 0289 GETMBR R9 R4 K23
- 0xB82A2600, // 028A GETNGBL R10 K19
- 0x8C28154C, // 028B GETMET R10 R10 K76
- 0x7C280200, // 028C CALL R10 1
- 0x7C1C0600, // 028D CALL R7 3
- 0x80040E00, // 028E RET 1 R7
- 0x7002000B, // 028F JMP #029C
- 0x1C1C0D0A, // 0290 EQ R7 R6 K10
- 0x781E0009, // 0291 JMPF R7 #029C
- 0x8C1C0912, // 0292 GETMET R7 R4 K18
- 0x7C1C0200, // 0293 CALL R7 1
- 0x8C200F0C, // 0294 GETMET R8 R7 K12
- 0x4C280000, // 0295 LDNIL R10
- 0x882C0917, // 0296 GETMBR R11 R4 K23
- 0xB8322600, // 0297 GETNGBL R12 K19
- 0x8C30194C, // 0298 GETMET R12 R12 K76
- 0x7C300200, // 0299 CALL R12 1
- 0x7C200800, // 029A CALL R8 4
- 0x80040E00, // 029B RET 1 R7
- 0x7002008A, // 029C JMP #0328
- 0x541E002B, // 029D LDINT R7 44
- 0x1C1C0A07, // 029E EQ R7 R5 R7
- 0x781E001C, // 029F JMPF R7 #02BD
- 0x1C1C0D05, // 02A0 EQ R7 R6 K5
- 0x781E0005, // 02A1 JMPF R7 #02A8
- 0x8C1C0906, // 02A2 GETMET R7 R4 K6
- 0x8824090F, // 02A3 GETMBR R9 R4 K15
- 0x5828000A, // 02A4 LDCONST R10 K10
- 0x7C1C0600, // 02A5 CALL R7 3
- 0x80040E00, // 02A6 RET 1 R7
- 0x70020013, // 02A7 JMP #02BC
- 0x1C1C0D0A, // 02A8 EQ R7 R6 K10
- 0x781E0005, // 02A9 JMPF R7 #02B0
- 0x8C1C0906, // 02AA GETMET R7 R4 K6
- 0x8824090F, // 02AB GETMBR R9 R4 K15
- 0x542A0003, // 02AC LDINT R10 4
- 0x7C1C0600, // 02AD CALL R7 3
- 0x80040E00, // 02AE RET 1 R7
- 0x7002000B, // 02AF JMP #02BC
- 0x1C1C0D0E, // 02B0 EQ R7 R6 K14
- 0x781E0009, // 02B1 JMPF R7 #02BC
- 0x8C1C0912, // 02B2 GETMET R7 R4 K18
- 0x7C1C0200, // 02B3 CALL R7 1
- 0x8C200F0C, // 02B4 GETMET R8 R7 K12
- 0x4C280000, // 02B5 LDNIL R10
- 0x8C2C0906, // 02B6 GETMET R11 R4 K6
- 0x8834090F, // 02B7 GETMBR R13 R4 K15
- 0x543A0003, // 02B8 LDINT R14 4
- 0x7C2C0600, // 02B9 CALL R11 3
- 0x7C200600, // 02BA CALL R8 3
- 0x80040E00, // 02BB RET 1 R7
- 0x7002006A, // 02BC JMP #0328
- 0x541E0030, // 02BD LDINT R7 49
- 0x1C1C0A07, // 02BE EQ R7 R5 R7
- 0x781E0010, // 02BF JMPF R7 #02D1
- 0x1C1C0D10, // 02C0 EQ R7 R6 K16
- 0x781E0005, // 02C1 JMPF R7 #02C8
- 0x8C1C0906, // 02C2 GETMET R7 R4 K6
- 0x8824090F, // 02C3 GETMBR R9 R4 K15
- 0x542A001D, // 02C4 LDINT R10 30
- 0x7C1C0600, // 02C5 CALL R7 3
- 0x80040E00, // 02C6 RET 1 R7
- 0x70020007, // 02C7 JMP #02D0
- 0x541EFFFB, // 02C8 LDINT R7 65532
- 0x1C1C0C07, // 02C9 EQ R7 R6 R7
- 0x781E0004, // 02CA JMPF R7 #02D0
- 0x8C1C0906, // 02CB GETMET R7 R4 K6
- 0x8824092B, // 02CC GETMBR R9 R4 K43
- 0x58280005, // 02CD LDCONST R10 K5
- 0x7C1C0600, // 02CE CALL R7 3
- 0x80040E00, // 02CF RET 1 R7
- 0x70020056, // 02D0 JMP #0328
- 0x541E001C, // 02D1 LDINT R7 29
- 0x1C1C0A07, // 02D2 EQ R7 R5 R7
- 0x781E0050, // 02D3 JMPF R7 #0325
- 0x1C1C0D05, // 02D4 EQ R7 R6 K5
- 0x781E0019, // 02D5 JMPF R7 #02F0
- 0x8C1C0912, // 02D6 GETMET R7 R4 K18
- 0x7C1C0200, // 02D7 CALL R7 1
- 0x60200010, // 02D8 GETGBL R8 G16
- 0x8824014D, // 02D9 GETMBR R9 R0 K77
- 0x7C200200, // 02DA CALL R8 1
- 0xA802000E, // 02DB EXBLK 0 #02EB
- 0x5C241000, // 02DC MOVE R9 R8
- 0x7C240000, // 02DD CALL R9 0
- 0x8C280F16, // 02DE GETMET R10 R7 K22
- 0x7C280200, // 02DF CALL R10 1
- 0x8C2C150C, // 02E0 GETMET R11 R10 K12
- 0x58340005, // 02E1 LDCONST R13 K5
- 0x8838090D, // 02E2 GETMBR R14 R4 K13
- 0x5C3C1200, // 02E3 MOVE R15 R9
- 0x7C2C0800, // 02E4 CALL R11 4
- 0x8C2C150C, // 02E5 GETMET R11 R10 K12
- 0x5834000A, // 02E6 LDCONST R13 K10
- 0x8838090D, // 02E7 GETMBR R14 R4 K13
- 0x583C000A, // 02E8 LDCONST R15 K10
- 0x7C2C0800, // 02E9 CALL R11 4
- 0x7001FFF0, // 02EA JMP #02DC
- 0x5820003A, // 02EB LDCONST R8 K58
- 0xAC200200, // 02EC CATCH R8 1 0
- 0xB0080000, // 02ED RAISE 2 R0 R0
- 0x80040E00, // 02EE RET 1 R7
- 0x70020033, // 02EF JMP #0324
- 0x1C1C0D0A, // 02F0 EQ R7 R6 K10
- 0x781E0013, // 02F1 JMPF R7 #0306
- 0x8C1C0912, // 02F2 GETMET R7 R4 K18
- 0x7C1C0200, // 02F3 CALL R7 1
- 0x60200010, // 02F4 GETGBL R8 G16
- 0x8C24014E, // 02F5 GETMET R9 R0 K78
- 0x7C240200, // 02F6 CALL R9 1
- 0x7C200200, // 02F7 CALL R8 1
- 0xA8020007, // 02F8 EXBLK 0 #0301
- 0x5C241000, // 02F9 MOVE R9 R8
- 0x7C240000, // 02FA CALL R9 0
- 0x8C280F0C, // 02FB GETMET R10 R7 K12
- 0x4C300000, // 02FC LDNIL R12
- 0x8834092B, // 02FD GETMBR R13 R4 K43
- 0x5C381200, // 02FE MOVE R14 R9
- 0x7C280800, // 02FF CALL R10 4
- 0x7001FFF7, // 0300 JMP #02F9
- 0x5820003A, // 0301 LDCONST R8 K58
- 0xAC200200, // 0302 CATCH R8 1 0
- 0xB0080000, // 0303 RAISE 2 R0 R0
- 0x80040E00, // 0304 RET 1 R7
- 0x7002001D, // 0305 JMP #0324
- 0x1C1C0D0E, // 0306 EQ R7 R6 K14
- 0x781E0003, // 0307 JMPF R7 #030C
- 0x8C1C0912, // 0308 GETMET R7 R4 K18
- 0x7C1C0200, // 0309 CALL R7 1
- 0x80040E00, // 030A RET 1 R7
- 0x70020017, // 030B JMP #0324
- 0x1C1C0D10, // 030C EQ R7 R6 K16
- 0x781E0015, // 030D JMPF R7 #0324
- 0x881C0134, // 030E GETMBR R7 R0 K52
- 0x8C1C0F4F, // 030F GETMET R7 R7 K79
- 0x50240200, // 0310 LDBOOL R9 1 0
- 0x7C1C0400, // 0311 CALL R7 2
- 0x8C200912, // 0312 GETMET R8 R4 K18
- 0x7C200200, // 0313 CALL R8 1
- 0x60240010, // 0314 GETGBL R9 G16
- 0x5C280E00, // 0315 MOVE R10 R7
- 0x7C240200, // 0316 CALL R9 1
- 0xA8020007, // 0317 EXBLK 0 #0320
- 0x5C281200, // 0318 MOVE R10 R9
- 0x7C280000, // 0319 CALL R10 0
- 0x8C2C110C, // 031A GETMET R11 R8 K12
- 0x4C340000, // 031B LDNIL R13
- 0x8838090D, // 031C GETMBR R14 R4 K13
- 0x5C3C1400, // 031D MOVE R15 R10
- 0x7C2C0800, // 031E CALL R11 4
- 0x7001FFF7, // 031F JMP #0318
- 0x5824003A, // 0320 LDCONST R9 K58
- 0xAC240200, // 0321 CATCH R9 1 0
- 0xB0080000, // 0322 RAISE 2 R0 R0
- 0x80041000, // 0323 RET 1 R8
- 0x70020002, // 0324 JMP #0328
- 0xB81E0200, // 0325 GETNGBL R7 K1
- 0x881C0F51, // 0326 GETMBR R7 R7 K81
- 0x900AA007, // 0327 SETMBR R2 K80 R7
- 0x80000000, // 0328 RET 0
+ 0x7C1C0600, // 0234 CALL R7 3
+ 0x80040E00, // 0235 RET 1 R7
+ 0x70020024, // 0236 JMP #025C
+ 0x541E0008, // 0237 LDINT R7 9
+ 0x1C1C0C07, // 0238 EQ R7 R6 R7
+ 0x781E0005, // 0239 JMPF R7 #0240
+ 0x8C1C0906, // 023A GETMET R7 R4 K6
+ 0x8824090C, // 023B GETMBR R9 R4 K12
+ 0x58280005, // 023C LDCONST R10 K5
+ 0x7C1C0600, // 023D CALL R7 3
+ 0x80040E00, // 023E RET 1 R7
+ 0x7002001B, // 023F JMP #025C
+ 0x541E0009, // 0240 LDINT R7 10
+ 0x1C1C0C07, // 0241 EQ R7 R6 R7
+ 0x781E000A, // 0242 JMPF R7 #024E
+ 0x8C1C0906, // 0243 GETMET R7 R4 K6
+ 0x88240916, // 0244 GETMBR R9 R4 K22
+ 0xB82A2400, // 0245 GETNGBL R10 K18
+ 0x8C281526, // 0246 GETMET R10 R10 K38
+ 0x58300047, // 0247 LDCONST R12 K71
+ 0x7C280400, // 0248 CALL R10 2
+ 0x94281548, // 0249 GETIDX R10 R10 K72
+ 0x9428154A, // 024A GETIDX R10 R10 K74
+ 0x7C1C0600, // 024B CALL R7 3
+ 0x80040E00, // 024C RET 1 R7
+ 0x7002000D, // 024D JMP #025C
+ 0x541E0011, // 024E LDINT R7 18
+ 0x1C1C0C07, // 024F EQ R7 R6 R7
+ 0x781E000A, // 0250 JMPF R7 #025C
+ 0x8C1C0906, // 0251 GETMET R7 R4 K6
+ 0x88240916, // 0252 GETMBR R9 R4 K22
+ 0xB82A2400, // 0253 GETNGBL R10 K18
+ 0x8C281525, // 0254 GETMET R10 R10 K37
+ 0x7C280200, // 0255 CALL R10 1
+ 0x8C28151B, // 0256 GETMET R10 R10 K27
+ 0x5830001C, // 0257 LDCONST R12 K28
+ 0x5834001D, // 0258 LDCONST R13 K29
+ 0x7C280600, // 0259 CALL R10 3
+ 0x7C1C0600, // 025A CALL R7 3
+ 0x80040E00, // 025B RET 1 R7
+ 0x700200C9, // 025C JMP #0327
+ 0x541E003E, // 025D LDINT R7 63
+ 0x1C1C0A07, // 025E EQ R7 R5 R7
+ 0x781E0000, // 025F JMPF R7 #0261
+ 0x700200C5, // 0260 JMP #0327
+ 0x541E0029, // 0261 LDINT R7 42
+ 0x1C1C0A07, // 0262 EQ R7 R5 R7
+ 0x781E001D, // 0263 JMPF R7 #0282
+ 0x1C1C0D05, // 0264 EQ R7 R6 K5
+ 0x781E0003, // 0265 JMPF R7 #026A
+ 0x8C1C0911, // 0266 GETMET R7 R4 K17
+ 0x7C1C0200, // 0267 CALL R7 1
+ 0x80040E00, // 0268 RET 1 R7
+ 0x70020016, // 0269 JMP #0281
+ 0x1C1C0D09, // 026A EQ R7 R6 K9
+ 0x781E0005, // 026B JMPF R7 #0272
+ 0x8C1C0906, // 026C GETMET R7 R4 K6
+ 0x88240910, // 026D GETMBR R9 R4 K16
+ 0x58280005, // 026E LDCONST R10 K5
+ 0x7C1C0600, // 026F CALL R7 3
+ 0x80040E00, // 0270 RET 1 R7
+ 0x7002000E, // 0271 JMP #0281
+ 0x1C1C0D0D, // 0272 EQ R7 R6 K13
+ 0x781E0005, // 0273 JMPF R7 #027A
+ 0x8C1C0906, // 0274 GETMET R7 R4 K6
+ 0x8824090E, // 0275 GETMBR R9 R4 K14
+ 0x58280009, // 0276 LDCONST R10 K9
+ 0x7C1C0600, // 0277 CALL R7 3
+ 0x80040E00, // 0278 RET 1 R7
+ 0x70020006, // 0279 JMP #0281
+ 0x1C1C0D0F, // 027A EQ R7 R6 K15
+ 0x781E0004, // 027B JMPF R7 #0281
+ 0x8C1C0906, // 027C GETMET R7 R4 K6
+ 0x88240918, // 027D GETMBR R9 R4 K24
+ 0x4C280000, // 027E LDNIL R10
+ 0x7C1C0600, // 027F CALL R7 3
+ 0x80040E00, // 0280 RET 1 R7
+ 0x700200A4, // 0281 JMP #0327
+ 0x541E002A, // 0282 LDINT R7 43
+ 0x1C1C0A07, // 0283 EQ R7 R5 R7
+ 0x781E0016, // 0284 JMPF R7 #029C
+ 0x1C1C0D05, // 0285 EQ R7 R6 K5
+ 0x781E0007, // 0286 JMPF R7 #028F
+ 0x8C1C0906, // 0287 GETMET R7 R4 K6
+ 0x88240916, // 0288 GETMBR R9 R4 K22
+ 0xB82A2400, // 0289 GETNGBL R10 K18
+ 0x8C28154B, // 028A GETMET R10 R10 K75
+ 0x7C280200, // 028B CALL R10 1
+ 0x7C1C0600, // 028C CALL R7 3
+ 0x80040E00, // 028D RET 1 R7
+ 0x7002000B, // 028E JMP #029B
+ 0x1C1C0D09, // 028F EQ R7 R6 K9
+ 0x781E0009, // 0290 JMPF R7 #029B
+ 0x8C1C0911, // 0291 GETMET R7 R4 K17
+ 0x7C1C0200, // 0292 CALL R7 1
+ 0x8C200F0B, // 0293 GETMET R8 R7 K11
+ 0x4C280000, // 0294 LDNIL R10
+ 0x882C0916, // 0295 GETMBR R11 R4 K22
+ 0xB8322400, // 0296 GETNGBL R12 K18
+ 0x8C30194B, // 0297 GETMET R12 R12 K75
+ 0x7C300200, // 0298 CALL R12 1
+ 0x7C200800, // 0299 CALL R8 4
+ 0x80040E00, // 029A RET 1 R7
+ 0x7002008A, // 029B JMP #0327
+ 0x541E002B, // 029C LDINT R7 44
+ 0x1C1C0A07, // 029D EQ R7 R5 R7
+ 0x781E001C, // 029E JMPF R7 #02BC
+ 0x1C1C0D05, // 029F EQ R7 R6 K5
+ 0x781E0005, // 02A0 JMPF R7 #02A7
+ 0x8C1C0906, // 02A1 GETMET R7 R4 K6
+ 0x8824090E, // 02A2 GETMBR R9 R4 K14
+ 0x58280009, // 02A3 LDCONST R10 K9
+ 0x7C1C0600, // 02A4 CALL R7 3
+ 0x80040E00, // 02A5 RET 1 R7
+ 0x70020013, // 02A6 JMP #02BB
+ 0x1C1C0D09, // 02A7 EQ R7 R6 K9
+ 0x781E0005, // 02A8 JMPF R7 #02AF
+ 0x8C1C0906, // 02A9 GETMET R7 R4 K6
+ 0x8824090E, // 02AA GETMBR R9 R4 K14
+ 0x542A0003, // 02AB LDINT R10 4
+ 0x7C1C0600, // 02AC CALL R7 3
+ 0x80040E00, // 02AD RET 1 R7
+ 0x7002000B, // 02AE JMP #02BB
+ 0x1C1C0D0D, // 02AF EQ R7 R6 K13
+ 0x781E0009, // 02B0 JMPF R7 #02BB
+ 0x8C1C0911, // 02B1 GETMET R7 R4 K17
+ 0x7C1C0200, // 02B2 CALL R7 1
+ 0x8C200F0B, // 02B3 GETMET R8 R7 K11
+ 0x4C280000, // 02B4 LDNIL R10
+ 0x8C2C0906, // 02B5 GETMET R11 R4 K6
+ 0x8834090E, // 02B6 GETMBR R13 R4 K14
+ 0x543A0003, // 02B7 LDINT R14 4
+ 0x7C2C0600, // 02B8 CALL R11 3
+ 0x7C200600, // 02B9 CALL R8 3
+ 0x80040E00, // 02BA RET 1 R7
+ 0x7002006A, // 02BB JMP #0327
+ 0x541E0030, // 02BC LDINT R7 49
+ 0x1C1C0A07, // 02BD EQ R7 R5 R7
+ 0x781E0010, // 02BE JMPF R7 #02D0
+ 0x1C1C0D0F, // 02BF EQ R7 R6 K15
+ 0x781E0005, // 02C0 JMPF R7 #02C7
+ 0x8C1C0906, // 02C1 GETMET R7 R4 K6
+ 0x8824090E, // 02C2 GETMBR R9 R4 K14
+ 0x542A001D, // 02C3 LDINT R10 30
+ 0x7C1C0600, // 02C4 CALL R7 3
+ 0x80040E00, // 02C5 RET 1 R7
+ 0x70020007, // 02C6 JMP #02CF
+ 0x541EFFFB, // 02C7 LDINT R7 65532
+ 0x1C1C0C07, // 02C8 EQ R7 R6 R7
+ 0x781E0004, // 02C9 JMPF R7 #02CF
+ 0x8C1C0906, // 02CA GETMET R7 R4 K6
+ 0x8824092A, // 02CB GETMBR R9 R4 K42
+ 0x58280005, // 02CC LDCONST R10 K5
+ 0x7C1C0600, // 02CD CALL R7 3
+ 0x80040E00, // 02CE RET 1 R7
+ 0x70020056, // 02CF JMP #0327
+ 0x541E001C, // 02D0 LDINT R7 29
+ 0x1C1C0A07, // 02D1 EQ R7 R5 R7
+ 0x781E0050, // 02D2 JMPF R7 #0324
+ 0x1C1C0D05, // 02D3 EQ R7 R6 K5
+ 0x781E0019, // 02D4 JMPF R7 #02EF
+ 0x8C1C0911, // 02D5 GETMET R7 R4 K17
+ 0x7C1C0200, // 02D6 CALL R7 1
+ 0x60200010, // 02D7 GETGBL R8 G16
+ 0x8824014C, // 02D8 GETMBR R9 R0 K76
+ 0x7C200200, // 02D9 CALL R8 1
+ 0xA802000E, // 02DA EXBLK 0 #02EA
+ 0x5C241000, // 02DB MOVE R9 R8
+ 0x7C240000, // 02DC CALL R9 0
+ 0x8C280F15, // 02DD GETMET R10 R7 K21
+ 0x7C280200, // 02DE CALL R10 1
+ 0x8C2C150B, // 02DF GETMET R11 R10 K11
+ 0x58340005, // 02E0 LDCONST R13 K5
+ 0x8838090C, // 02E1 GETMBR R14 R4 K12
+ 0x5C3C1200, // 02E2 MOVE R15 R9
+ 0x7C2C0800, // 02E3 CALL R11 4
+ 0x8C2C150B, // 02E4 GETMET R11 R10 K11
+ 0x58340009, // 02E5 LDCONST R13 K9
+ 0x8838090C, // 02E6 GETMBR R14 R4 K12
+ 0x583C0009, // 02E7 LDCONST R15 K9
+ 0x7C2C0800, // 02E8 CALL R11 4
+ 0x7001FFF0, // 02E9 JMP #02DB
+ 0x58200039, // 02EA LDCONST R8 K57
+ 0xAC200200, // 02EB CATCH R8 1 0
+ 0xB0080000, // 02EC RAISE 2 R0 R0
+ 0x80040E00, // 02ED RET 1 R7
+ 0x70020033, // 02EE JMP #0323
+ 0x1C1C0D09, // 02EF EQ R7 R6 K9
+ 0x781E0013, // 02F0 JMPF R7 #0305
+ 0x8C1C0911, // 02F1 GETMET R7 R4 K17
+ 0x7C1C0200, // 02F2 CALL R7 1
+ 0x60200010, // 02F3 GETGBL R8 G16
+ 0x8C24014D, // 02F4 GETMET R9 R0 K77
+ 0x7C240200, // 02F5 CALL R9 1
+ 0x7C200200, // 02F6 CALL R8 1
+ 0xA8020007, // 02F7 EXBLK 0 #0300
+ 0x5C241000, // 02F8 MOVE R9 R8
+ 0x7C240000, // 02F9 CALL R9 0
+ 0x8C280F0B, // 02FA GETMET R10 R7 K11
+ 0x4C300000, // 02FB LDNIL R12
+ 0x8834092A, // 02FC GETMBR R13 R4 K42
+ 0x5C381200, // 02FD MOVE R14 R9
+ 0x7C280800, // 02FE CALL R10 4
+ 0x7001FFF7, // 02FF JMP #02F8
+ 0x58200039, // 0300 LDCONST R8 K57
+ 0xAC200200, // 0301 CATCH R8 1 0
+ 0xB0080000, // 0302 RAISE 2 R0 R0
+ 0x80040E00, // 0303 RET 1 R7
+ 0x7002001D, // 0304 JMP #0323
+ 0x1C1C0D0D, // 0305 EQ R7 R6 K13
+ 0x781E0003, // 0306 JMPF R7 #030B
+ 0x8C1C0911, // 0307 GETMET R7 R4 K17
+ 0x7C1C0200, // 0308 CALL R7 1
+ 0x80040E00, // 0309 RET 1 R7
+ 0x70020017, // 030A JMP #0323
+ 0x1C1C0D0F, // 030B EQ R7 R6 K15
+ 0x781E0015, // 030C JMPF R7 #0323
+ 0x881C0133, // 030D GETMBR R7 R0 K51
+ 0x8C1C0F4E, // 030E GETMET R7 R7 K78
+ 0x50240200, // 030F LDBOOL R9 1 0
+ 0x7C1C0400, // 0310 CALL R7 2
+ 0x8C200911, // 0311 GETMET R8 R4 K17
+ 0x7C200200, // 0312 CALL R8 1
+ 0x60240010, // 0313 GETGBL R9 G16
+ 0x5C280E00, // 0314 MOVE R10 R7
+ 0x7C240200, // 0315 CALL R9 1
+ 0xA8020007, // 0316 EXBLK 0 #031F
+ 0x5C281200, // 0317 MOVE R10 R9
+ 0x7C280000, // 0318 CALL R10 0
+ 0x8C2C110B, // 0319 GETMET R11 R8 K11
+ 0x4C340000, // 031A LDNIL R13
+ 0x8838090C, // 031B GETMBR R14 R4 K12
+ 0x5C3C1400, // 031C MOVE R15 R10
+ 0x7C2C0800, // 031D CALL R11 4
+ 0x7001FFF7, // 031E JMP #0317
+ 0x58240039, // 031F LDCONST R9 K57
+ 0xAC240200, // 0320 CATCH R9 1 0
+ 0xB0080000, // 0321 RAISE 2 R0 R0
+ 0x80041000, // 0322 RET 1 R8
+ 0x70020002, // 0323 JMP #0327
+ 0xB81E0200, // 0324 GETNGBL R7 K1
+ 0x881C0F50, // 0325 GETMBR R7 R7 K80
+ 0x900A9E07, // 0326 SETMBR R2 K79 R7
+ 0x80000000, // 0327 RET 0
})
)
);
@@ -926,7 +924,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
********************************************************************/
be_local_closure(Matter_Plugin_Root_write_attribute, /* name */
be_nested_proto(
- 11, /* nstack */
+ 13, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
@@ -934,7 +932,7 @@ be_local_closure(Matter_Plugin_Root_write_attribute, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[14]) { /* constants */
+ ( &(const bvalue[15]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -943,16 +941,17 @@ be_local_closure(Matter_Plugin_Root_write_attribute, /* name */
/* K5 */ be_const_int(0),
/* K6 */ be_nested_str_weak(int),
/* K7 */ be_nested_str_weak(int64),
- /* K8 */ be_nested_str_weak(session),
- /* K9 */ be_nested_str_weak(__breadcrumb),
- /* K10 */ be_nested_str_weak(status),
- /* K11 */ be_nested_str_weak(CONSTRAINT_ERROR),
- /* K12 */ be_const_int(1),
- /* K13 */ be_nested_str_weak(INVALID_ACTION),
+ /* K8 */ be_nested_str_weak(__breadcrumb),
+ /* K9 */ be_nested_str_weak(attribute_updated),
+ /* K10 */ be_nested_str_weak(endpoint),
+ /* K11 */ be_nested_str_weak(status),
+ /* K12 */ be_nested_str_weak(CONSTRAINT_ERROR),
+ /* K13 */ be_const_int(1),
+ /* K14 */ be_nested_str_weak(INVALID_ACTION),
}),
be_str_weak(write_attribute),
&be_const_str_solidified,
- ( &(const binstruction[98]) { /* code */
+ ( &(const binstruction[102]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0xB8160200, // 0001 GETNGBL R5 K1
0x88140B02, // 0002 GETMBR R5 R5 K2
@@ -960,9 +959,9 @@ be_local_closure(Matter_Plugin_Root_write_attribute, /* name */
0x881C0504, // 0004 GETMBR R7 R2 K4
0x5422002F, // 0005 LDINT R8 48
0x1C200C08, // 0006 EQ R8 R6 R8
- 0x78220016, // 0007 JMPF R8 #001F
+ 0x7822001A, // 0007 JMPF R8 #0023
0x1C200F05, // 0008 EQ R8 R7 K5
- 0x78220013, // 0009 JMPF R8 #001E
+ 0x78220017, // 0009 JMPF R8 #0022
0x60200004, // 000A GETGBL R8 G4
0x5C240600, // 000B MOVE R9 R3
0x7C200200, // 000C CALL R8 1
@@ -972,85 +971,89 @@ be_local_closure(Matter_Plugin_Root_write_attribute, /* name */
0x5C240600, // 0010 MOVE R9 R3
0xB82A0E00, // 0011 GETNGBL R10 K7
0x7C200400, // 0012 CALL R8 2
- 0x78220004, // 0013 JMPF R8 #0019
- 0x88200308, // 0014 GETMBR R8 R1 K8
- 0x90221203, // 0015 SETMBR R8 K9 R3
- 0x50200200, // 0016 LDBOOL R8 1 0
- 0x80041000, // 0017 RET 1 R8
- 0x70020004, // 0018 JMP #001E
- 0xB8220200, // 0019 GETNGBL R8 K1
- 0x8820110B, // 001A GETMBR R8 R8 K11
- 0x900A1408, // 001B SETMBR R2 K10 R8
- 0x50200000, // 001C LDBOOL R8 0 0
- 0x80041000, // 001D RET 1 R8
- 0x70020041, // 001E JMP #0061
- 0x5422001E, // 001F LDINT R8 31
- 0x1C200C08, // 0020 EQ R8 R6 R8
- 0x78220004, // 0021 JMPF R8 #0027
- 0x1C200F05, // 0022 EQ R8 R7 K5
- 0x78220001, // 0023 JMPF R8 #0026
- 0x50200200, // 0024 LDBOOL R8 1 0
- 0x80041000, // 0025 RET 1 R8
- 0x70020039, // 0026 JMP #0061
- 0x54220027, // 0027 LDINT R8 40
- 0x1C200C08, // 0028 EQ R8 R6 R8
- 0x7822000B, // 0029 JMPF R8 #0036
- 0x54220004, // 002A LDINT R8 5
- 0x1C200E08, // 002B EQ R8 R7 R8
- 0x78220002, // 002C JMPF R8 #0030
- 0x50200200, // 002D LDBOOL R8 1 0
- 0x80041000, // 002E RET 1 R8
- 0x70020004, // 002F JMP #0035
- 0x54220005, // 0030 LDINT R8 6
- 0x1C200E08, // 0031 EQ R8 R7 R8
- 0x78220001, // 0032 JMPF R8 #0035
- 0x50200200, // 0033 LDBOOL R8 1 0
- 0x80041000, // 0034 RET 1 R8
- 0x7002002A, // 0035 JMP #0061
- 0x54220029, // 0036 LDINT R8 42
- 0x1C200C08, // 0037 EQ R8 R6 R8
- 0x78220004, // 0038 JMPF R8 #003E
- 0x1C200F05, // 0039 EQ R8 R7 K5
- 0x78220001, // 003A JMPF R8 #003D
- 0x50200200, // 003B LDBOOL R8 1 0
- 0x80041000, // 003C RET 1 R8
- 0x70020022, // 003D JMP #0061
- 0x5422002A, // 003E LDINT R8 43
- 0x1C200C08, // 003F EQ R8 R6 R8
- 0x78220007, // 0040 JMPF R8 #0049
- 0x1C200F05, // 0041 EQ R8 R7 K5
- 0x78220004, // 0042 JMPF R8 #0048
- 0xB8220200, // 0043 GETNGBL R8 K1
- 0x8820110B, // 0044 GETMBR R8 R8 K11
- 0x900A1408, // 0045 SETMBR R2 K10 R8
- 0x50200000, // 0046 LDBOOL R8 0 0
- 0x80041000, // 0047 RET 1 R8
- 0x70020017, // 0048 JMP #0061
- 0x5422002B, // 0049 LDINT R8 44
- 0x1C200C08, // 004A EQ R8 R6 R8
- 0x78220009, // 004B JMPF R8 #0056
- 0x1C200F05, // 004C EQ R8 R7 K5
- 0x78220002, // 004D JMPF R8 #0051
- 0x50200200, // 004E LDBOOL R8 1 0
- 0x80041000, // 004F RET 1 R8
- 0x70020003, // 0050 JMP #0055
- 0x1C200F0C, // 0051 EQ R8 R7 K12
- 0x78220001, // 0052 JMPF R8 #0055
- 0x50200200, // 0053 LDBOOL R8 1 0
- 0x80041000, // 0054 RET 1 R8
- 0x7002000A, // 0055 JMP #0061
- 0x54220030, // 0056 LDINT R8 49
- 0x1C200C08, // 0057 EQ R8 R6 R8
- 0x78220007, // 0058 JMPF R8 #0061
- 0x54220003, // 0059 LDINT R8 4
- 0x1C200E08, // 005A EQ R8 R7 R8
- 0x78220004, // 005B JMPF R8 #0061
- 0xB8220200, // 005C GETNGBL R8 K1
- 0x8820110D, // 005D GETMBR R8 R8 K13
- 0x900A1408, // 005E SETMBR R2 K10 R8
- 0x50200000, // 005F LDBOOL R8 0 0
- 0x80041000, // 0060 RET 1 R8
- 0x80000000, // 0061 RET 0
+ 0x78220008, // 0013 JMPF R8 #001D
+ 0x90061003, // 0014 SETMBR R1 K8 R3
+ 0x8C200109, // 0015 GETMET R8 R0 K9
+ 0x8828050A, // 0016 GETMBR R10 R2 K10
+ 0x882C0503, // 0017 GETMBR R11 R2 K3
+ 0x88300504, // 0018 GETMBR R12 R2 K4
+ 0x7C200800, // 0019 CALL R8 4
+ 0x50200200, // 001A LDBOOL R8 1 0
+ 0x80041000, // 001B RET 1 R8
+ 0x70020004, // 001C JMP #0022
+ 0xB8220200, // 001D GETNGBL R8 K1
+ 0x8820110C, // 001E GETMBR R8 R8 K12
+ 0x900A1608, // 001F SETMBR R2 K11 R8
+ 0x50200000, // 0020 LDBOOL R8 0 0
+ 0x80041000, // 0021 RET 1 R8
+ 0x70020041, // 0022 JMP #0065
+ 0x5422001E, // 0023 LDINT R8 31
+ 0x1C200C08, // 0024 EQ R8 R6 R8
+ 0x78220004, // 0025 JMPF R8 #002B
+ 0x1C200F05, // 0026 EQ R8 R7 K5
+ 0x78220001, // 0027 JMPF R8 #002A
+ 0x50200200, // 0028 LDBOOL R8 1 0
+ 0x80041000, // 0029 RET 1 R8
+ 0x70020039, // 002A JMP #0065
+ 0x54220027, // 002B LDINT R8 40
+ 0x1C200C08, // 002C EQ R8 R6 R8
+ 0x7822000B, // 002D JMPF R8 #003A
+ 0x54220004, // 002E LDINT R8 5
+ 0x1C200E08, // 002F EQ R8 R7 R8
+ 0x78220002, // 0030 JMPF R8 #0034
+ 0x50200200, // 0031 LDBOOL R8 1 0
+ 0x80041000, // 0032 RET 1 R8
+ 0x70020004, // 0033 JMP #0039
+ 0x54220005, // 0034 LDINT R8 6
+ 0x1C200E08, // 0035 EQ R8 R7 R8
+ 0x78220001, // 0036 JMPF R8 #0039
+ 0x50200200, // 0037 LDBOOL R8 1 0
+ 0x80041000, // 0038 RET 1 R8
+ 0x7002002A, // 0039 JMP #0065
+ 0x54220029, // 003A LDINT R8 42
+ 0x1C200C08, // 003B EQ R8 R6 R8
+ 0x78220004, // 003C JMPF R8 #0042
+ 0x1C200F05, // 003D EQ R8 R7 K5
+ 0x78220001, // 003E JMPF R8 #0041
+ 0x50200200, // 003F LDBOOL R8 1 0
+ 0x80041000, // 0040 RET 1 R8
+ 0x70020022, // 0041 JMP #0065
+ 0x5422002A, // 0042 LDINT R8 43
+ 0x1C200C08, // 0043 EQ R8 R6 R8
+ 0x78220007, // 0044 JMPF R8 #004D
+ 0x1C200F05, // 0045 EQ R8 R7 K5
+ 0x78220004, // 0046 JMPF R8 #004C
+ 0xB8220200, // 0047 GETNGBL R8 K1
+ 0x8820110C, // 0048 GETMBR R8 R8 K12
+ 0x900A1608, // 0049 SETMBR R2 K11 R8
+ 0x50200000, // 004A LDBOOL R8 0 0
+ 0x80041000, // 004B RET 1 R8
+ 0x70020017, // 004C JMP #0065
+ 0x5422002B, // 004D LDINT R8 44
+ 0x1C200C08, // 004E EQ R8 R6 R8
+ 0x78220009, // 004F JMPF R8 #005A
+ 0x1C200F05, // 0050 EQ R8 R7 K5
+ 0x78220002, // 0051 JMPF R8 #0055
+ 0x50200200, // 0052 LDBOOL R8 1 0
+ 0x80041000, // 0053 RET 1 R8
+ 0x70020003, // 0054 JMP #0059
+ 0x1C200F0D, // 0055 EQ R8 R7 K13
+ 0x78220001, // 0056 JMPF R8 #0059
+ 0x50200200, // 0057 LDBOOL R8 1 0
+ 0x80041000, // 0058 RET 1 R8
+ 0x7002000A, // 0059 JMP #0065
+ 0x54220030, // 005A LDINT R8 49
+ 0x1C200C08, // 005B EQ R8 R6 R8
+ 0x78220007, // 005C JMPF R8 #0065
+ 0x54220003, // 005D LDINT R8 4
+ 0x1C200E08, // 005E EQ R8 R7 R8
+ 0x78220004, // 005F JMPF R8 #0065
+ 0xB8220200, // 0060 GETNGBL R8 K1
+ 0x8820110E, // 0061 GETMBR R8 R8 K14
+ 0x900A1608, // 0062 SETMBR R2 K11 R8
+ 0x50200000, // 0063 LDBOOL R8 0 0
+ 0x80041000, // 0064 RET 1 R8
+ 0x80000000, // 0065 RET 0
})
)
);
@@ -1102,7 +1105,7 @@ be_local_closure(Matter_Plugin_Root_init, /* name */
********************************************************************/
be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
be_nested_proto(
- 29, /* nstack */
+ 28, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1110,579 +1113,577 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[73]) { /* constants */
+ ( &(const bvalue[72]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
/* K3 */ be_nested_str_weak(cluster),
/* K4 */ be_nested_str_weak(command),
- /* K5 */ be_nested_str_weak(session),
- /* K6 */ be_const_int(0),
- /* K7 */ be_nested_str_weak(findsubval),
- /* K8 */ be_const_int(1),
- /* K9 */ be_nested_str_weak(__breadcrumb),
- /* K10 */ be_nested_str_weak(Matter_TLV_struct),
- /* K11 */ be_nested_str_weak(add_TLV),
- /* K12 */ be_nested_str_weak(U1),
- /* K13 */ be_nested_str_weak(UTF1),
- /* K14 */ be_nested_str_weak(),
- /* K15 */ be_const_int(2),
- /* K16 */ be_nested_str_weak(XX),
- /* K17 */ be_const_int(3),
- /* K18 */ be_nested_str_weak(set_no_expiration),
- /* K19 */ be_nested_str_weak(device),
- /* K20 */ be_nested_str_weak(start_commissioning_complete_deferred),
- /* K21 */ be_nested_str_weak(status),
- /* K22 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
- /* K23 */ be_nested_str_weak(B2),
- /* K24 */ be_nested_str_weak(DAC_Cert_FFF1_8000),
- /* K25 */ be_nested_str_weak(PAI_Cert_FFF1),
- /* K26 */ be_nested_str_weak(CD_FFF1_8000),
- /* K27 */ be_nested_str_weak(B1),
- /* K28 */ be_nested_str_weak(U4),
- /* K29 */ be_nested_str_weak(tasmota),
- /* K30 */ be_nested_str_weak(rtc),
- /* K31 */ be_nested_str_weak(utc),
- /* K32 */ be_nested_str_weak(encode),
- /* K33 */ be_nested_str_weak(get_ac),
- /* K34 */ be_nested_str_weak(log),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20attestation_tbs_X3D),
- /* K36 */ be_nested_str_weak(tohex),
- /* K37 */ be_nested_str_weak(EC_P256),
- /* K38 */ be_nested_str_weak(ecdsa_sign_sha256),
- /* K39 */ be_nested_str_weak(DAC_Priv_FFF1_8000),
- /* K40 */ be_nested_str_weak(gen_CSR),
- /* K41 */ be_nested_str_weak(MTR_X3A_X20nocsr_tbs_X3D),
- /* K42 */ be_nested_str_weak(set_ca),
- /* K43 */ be_nested_str_weak(MTR_X3A_X20received_X20ca_root_X3D),
- /* K44 */ be_nested_str_weak(SUCCESS),
- /* K45 */ be_nested_str_weak(get_ca),
- /* K46 */ be_nested_str_weak(MTR_X3A_X20Error_X3A_X20AdNOC_X20without_X20CA),
- /* K47 */ be_nested_str_weak(set_noc),
- /* K48 */ be_nested_str_weak(set_ipk_epoch_key),
- /* K49 */ be_nested_str_weak(admin_subject),
- /* K50 */ be_nested_str_weak(admin_vendor),
- /* K51 */ be_nested_str_weak(parse),
- /* K52 */ be_nested_str_weak(findsub),
- /* K53 */ be_nested_str_weak(MTR_X3A_X20Error_X3A_X20no_X20fabricid_X20nor_X20deviceid_X20in_X20NOC_X20certificate),
- /* K54 */ be_nested_str_weak(int),
- /* K55 */ be_nested_str_weak(int64),
- /* K56 */ be_nested_str_weak(tobytes),
- /* K57 */ be_const_int(2147483647),
- /* K58 */ be_nested_str_weak(fromstring),
- /* K59 */ be_nested_str_weak(CompressedFabric),
- /* K60 */ be_nested_str_weak(HKDF_SHA256),
- /* K61 */ be_nested_str_weak(copy),
- /* K62 */ be_nested_str_weak(reverse),
- /* K63 */ be_nested_str_weak(derive),
- /* K64 */ be_nested_str_weak(set_fabric_device),
- /* K65 */ be_nested_str_weak(start_operational_dicovery_deferred),
- /* K66 */ be_nested_str_weak(set_fabric_label),
- /* K67 */ be_nested_str_weak(sessions),
- /* K68 */ be_nested_str_weak(sessions_active),
- /* K69 */ be_nested_str_weak(MTR_X3A_X20removing_X20fabric_X20),
- /* K70 */ be_nested_str_weak(fabric),
- /* K71 */ be_nested_str_weak(remove_session),
- /* K72 */ be_nested_str_weak(save),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(findsubval),
+ /* K7 */ be_const_int(1),
+ /* K8 */ be_nested_str_weak(__breadcrumb),
+ /* K9 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K10 */ be_nested_str_weak(add_TLV),
+ /* K11 */ be_nested_str_weak(U1),
+ /* K12 */ be_nested_str_weak(UTF1),
+ /* K13 */ be_nested_str_weak(),
+ /* K14 */ be_const_int(2),
+ /* K15 */ be_nested_str_weak(XX),
+ /* K16 */ be_const_int(3),
+ /* K17 */ be_nested_str_weak(set_no_expiration),
+ /* K18 */ be_nested_str_weak(device),
+ /* K19 */ be_nested_str_weak(start_commissioning_complete_deferred),
+ /* K20 */ be_nested_str_weak(status),
+ /* K21 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
+ /* K22 */ be_nested_str_weak(B2),
+ /* K23 */ be_nested_str_weak(DAC_Cert_FFF1_8000),
+ /* K24 */ be_nested_str_weak(PAI_Cert_FFF1),
+ /* K25 */ be_nested_str_weak(CD_FFF1_8000),
+ /* K26 */ be_nested_str_weak(B1),
+ /* K27 */ be_nested_str_weak(U4),
+ /* K28 */ be_nested_str_weak(tasmota),
+ /* K29 */ be_nested_str_weak(rtc),
+ /* K30 */ be_nested_str_weak(utc),
+ /* K31 */ be_nested_str_weak(encode),
+ /* K32 */ be_nested_str_weak(get_ac),
+ /* K33 */ be_nested_str_weak(log),
+ /* K34 */ be_nested_str_weak(MTR_X3A_X20attestation_tbs_X3D),
+ /* K35 */ be_nested_str_weak(tohex),
+ /* K36 */ be_nested_str_weak(EC_P256),
+ /* K37 */ be_nested_str_weak(ecdsa_sign_sha256),
+ /* K38 */ be_nested_str_weak(DAC_Priv_FFF1_8000),
+ /* K39 */ be_nested_str_weak(gen_CSR),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20nocsr_tbs_X3D),
+ /* K41 */ be_nested_str_weak(set_ca),
+ /* K42 */ be_nested_str_weak(MTR_X3A_X20received_X20ca_root_X3D),
+ /* K43 */ be_nested_str_weak(SUCCESS),
+ /* K44 */ be_nested_str_weak(get_ca),
+ /* K45 */ be_nested_str_weak(MTR_X3A_X20Error_X3A_X20AdNOC_X20without_X20CA),
+ /* K46 */ be_nested_str_weak(set_noc),
+ /* K47 */ be_nested_str_weak(set_ipk_epoch_key),
+ /* K48 */ be_nested_str_weak(admin_subject),
+ /* K49 */ be_nested_str_weak(admin_vendor),
+ /* K50 */ be_nested_str_weak(parse),
+ /* K51 */ be_nested_str_weak(findsub),
+ /* K52 */ be_nested_str_weak(MTR_X3A_X20Error_X3A_X20no_X20fabricid_X20nor_X20deviceid_X20in_X20NOC_X20certificate),
+ /* K53 */ be_nested_str_weak(int),
+ /* K54 */ be_nested_str_weak(int64),
+ /* K55 */ be_nested_str_weak(tobytes),
+ /* K56 */ be_const_int(2147483647),
+ /* K57 */ be_nested_str_weak(fromstring),
+ /* K58 */ be_nested_str_weak(CompressedFabric),
+ /* K59 */ be_nested_str_weak(HKDF_SHA256),
+ /* K60 */ be_nested_str_weak(copy),
+ /* K61 */ be_nested_str_weak(reverse),
+ /* K62 */ be_nested_str_weak(derive),
+ /* K63 */ be_nested_str_weak(set_fabric_device),
+ /* K64 */ be_nested_str_weak(start_operational_dicovery_deferred),
+ /* K65 */ be_nested_str_weak(set_fabric_label),
+ /* K66 */ be_nested_str_weak(sessions),
+ /* K67 */ be_nested_str_weak(sessions_active),
+ /* K68 */ be_nested_str_weak(MTR_X3A_X20removing_X20fabric_X20),
+ /* K69 */ be_nested_str_weak(fabric),
+ /* K70 */ be_nested_str_weak(remove_session),
+ /* K71 */ be_nested_str_weak(save),
}),
be_str_weak(invoke_request),
&be_const_str_solidified,
- ( &(const binstruction[495]) { /* code */
+ ( &(const binstruction[494]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0xB8160200, // 0001 GETNGBL R5 K1
0x88140B02, // 0002 GETMBR R5 R5 K2
0x88180703, // 0003 GETMBR R6 R3 K3
0x881C0704, // 0004 GETMBR R7 R3 K4
- 0x88200305, // 0005 GETMBR R8 R1 K5
- 0x5426002F, // 0006 LDINT R9 48
- 0x1C240C09, // 0007 EQ R9 R6 R9
- 0x78260050, // 0008 JMPF R9 #005A
- 0x1C240F06, // 0009 EQ R9 R7 K6
- 0x78260017, // 000A JMPF R9 #0023
- 0x8C240507, // 000B GETMET R9 R2 K7
- 0x582C0006, // 000C LDCONST R11 K6
- 0x54320383, // 000D LDINT R12 900
- 0x7C240600, // 000E CALL R9 3
- 0x8C280507, // 000F GETMET R10 R2 K7
- 0x58300008, // 0010 LDCONST R12 K8
- 0x58340006, // 0011 LDCONST R13 K6
- 0x7C280600, // 0012 CALL R10 3
- 0x9022120A, // 0013 SETMBR R8 K9 R10
- 0x8C2C0B0A, // 0014 GETMET R11 R5 K10
- 0x7C2C0200, // 0015 CALL R11 1
- 0x8C30170B, // 0016 GETMET R12 R11 K11
- 0x58380006, // 0017 LDCONST R14 K6
- 0x883C0B0C, // 0018 GETMBR R15 R5 K12
- 0x58400006, // 0019 LDCONST R16 K6
- 0x7C300800, // 001A CALL R12 4
- 0x8C30170B, // 001B GETMET R12 R11 K11
- 0x58380008, // 001C LDCONST R14 K8
- 0x883C0B0D, // 001D GETMBR R15 R5 K13
- 0x5840000E, // 001E LDCONST R16 K14
- 0x7C300800, // 001F CALL R12 4
- 0x900E0908, // 0020 SETMBR R3 K4 K8
- 0x80041600, // 0021 RET 1 R11
- 0x70020035, // 0022 JMP #0059
- 0x1C240F0F, // 0023 EQ R9 R7 K15
- 0x7826001A, // 0024 JMPF R9 #0040
- 0x8C240507, // 0025 GETMET R9 R2 K7
- 0x582C0006, // 0026 LDCONST R11 K6
- 0x7C240400, // 0027 CALL R9 2
- 0x8C280507, // 0028 GETMET R10 R2 K7
- 0x58300008, // 0029 LDCONST R12 K8
- 0x58340010, // 002A LDCONST R13 K16
- 0x7C280600, // 002B CALL R10 3
- 0x8C2C0507, // 002C GETMET R11 R2 K7
- 0x5834000F, // 002D LDCONST R13 K15
- 0x58380006, // 002E LDCONST R14 K6
- 0x7C2C0600, // 002F CALL R11 3
- 0x9022120B, // 0030 SETMBR R8 K9 R11
- 0x8C300B0A, // 0031 GETMET R12 R5 K10
- 0x7C300200, // 0032 CALL R12 1
- 0x8C34190B, // 0033 GETMET R13 R12 K11
- 0x583C0006, // 0034 LDCONST R15 K6
- 0x88400B0C, // 0035 GETMBR R16 R5 K12
- 0x58440006, // 0036 LDCONST R17 K6
- 0x7C340800, // 0037 CALL R13 4
- 0x8C34190B, // 0038 GETMET R13 R12 K11
- 0x583C0008, // 0039 LDCONST R15 K8
- 0x88400B0D, // 003A GETMBR R16 R5 K13
- 0x5844000E, // 003B LDCONST R17 K14
- 0x7C340800, // 003C CALL R13 4
- 0x900E0911, // 003D SETMBR R3 K4 K17
- 0x80041800, // 003E RET 1 R12
- 0x70020018, // 003F JMP #0059
- 0x54260003, // 0040 LDINT R9 4
- 0x1C240E09, // 0041 EQ R9 R7 R9
- 0x78260015, // 0042 JMPF R9 #0059
- 0x90221306, // 0043 SETMBR R8 K9 K6
- 0x8C241112, // 0044 GETMET R9 R8 K18
- 0x7C240200, // 0045 CALL R9 1
- 0x8C240B0A, // 0046 GETMET R9 R5 K10
- 0x7C240200, // 0047 CALL R9 1
- 0x8C28130B, // 0048 GETMET R10 R9 K11
- 0x58300006, // 0049 LDCONST R12 K6
- 0x88340B0C, // 004A GETMBR R13 R5 K12
- 0x58380006, // 004B LDCONST R14 K6
- 0x7C280800, // 004C CALL R10 4
- 0x8C28130B, // 004D GETMET R10 R9 K11
- 0x58300008, // 004E LDCONST R12 K8
- 0x88340B0D, // 004F GETMBR R13 R5 K13
- 0x5838000E, // 0050 LDCONST R14 K14
- 0x7C280800, // 0051 CALL R10 4
- 0x542A0004, // 0052 LDINT R10 5
- 0x900E080A, // 0053 SETMBR R3 K4 R10
- 0x88280113, // 0054 GETMBR R10 R0 K19
- 0x8C281514, // 0055 GETMET R10 R10 K20
- 0x5C301000, // 0056 MOVE R12 R8
- 0x7C280400, // 0057 CALL R10 2
- 0x80041200, // 0058 RET 1 R9
- 0x70020193, // 0059 JMP #01EE
- 0x5426003D, // 005A LDINT R9 62
- 0x1C240C09, // 005B EQ R9 R6 R9
- 0x78260190, // 005C JMPF R9 #01EE
- 0x1C240F0F, // 005D EQ R9 R7 K15
- 0x7826001D, // 005E JMPF R9 #007D
- 0x8C240507, // 005F GETMET R9 R2 K7
- 0x582C0006, // 0060 LDCONST R11 K6
- 0x7C240400, // 0061 CALL R9 2
- 0x20281308, // 0062 NE R10 R9 K8
- 0x782A0006, // 0063 JMPF R10 #006B
- 0x2028130F, // 0064 NE R10 R9 K15
- 0x782A0004, // 0065 JMPF R10 #006B
- 0xB82A0200, // 0066 GETNGBL R10 K1
- 0x88281516, // 0067 GETMBR R10 R10 K22
- 0x900E2A0A, // 0068 SETMBR R3 K21 R10
- 0x4C280000, // 0069 LDNIL R10
- 0x80041400, // 006A RET 1 R10
- 0x8C280B0A, // 006B GETMET R10 R5 K10
- 0x7C280200, // 006C CALL R10 1
- 0x8C2C150B, // 006D GETMET R11 R10 K11
- 0x58340006, // 006E LDCONST R13 K6
- 0x88380B17, // 006F GETMBR R14 R5 K23
- 0x1C3C1308, // 0070 EQ R15 R9 K8
- 0x783E0003, // 0071 JMPF R15 #0076
- 0xB83E0200, // 0072 GETNGBL R15 K1
- 0x8C3C1F18, // 0073 GETMET R15 R15 K24
- 0x7C3C0200, // 0074 CALL R15 1
- 0x70020002, // 0075 JMP #0079
- 0xB83E0200, // 0076 GETNGBL R15 K1
- 0x8C3C1F19, // 0077 GETMET R15 R15 K25
- 0x7C3C0200, // 0078 CALL R15 1
- 0x7C2C0800, // 0079 CALL R11 4
- 0x900E0911, // 007A SETMBR R3 K4 K17
- 0x80041400, // 007B RET 1 R10
- 0x70020170, // 007C JMP #01EE
- 0x1C240F06, // 007D EQ R9 R7 K6
- 0x78260044, // 007E JMPF R9 #00C4
- 0x8C240507, // 007F GETMET R9 R2 K7
- 0x582C0006, // 0080 LDCONST R11 K6
- 0x7C240400, // 0081 CALL R9 2
- 0x6028000C, // 0082 GETGBL R10 G12
- 0x5C2C1200, // 0083 MOVE R11 R9
- 0x7C280200, // 0084 CALL R10 1
- 0x542E001F, // 0085 LDINT R11 32
- 0x2028140B, // 0086 NE R10 R10 R11
- 0x782A0001, // 0087 JMPF R10 #008A
- 0x4C280000, // 0088 LDNIL R10
- 0x80041400, // 0089 RET 1 R10
- 0x900E0908, // 008A SETMBR R3 K4 K8
- 0x8C280B0A, // 008B GETMET R10 R5 K10
- 0x7C280200, // 008C CALL R10 1
- 0x8C2C150B, // 008D GETMET R11 R10 K11
- 0x58340008, // 008E LDCONST R13 K8
- 0x88380B17, // 008F GETMBR R14 R5 K23
- 0xB83E0200, // 0090 GETNGBL R15 K1
- 0x8C3C1F1A, // 0091 GETMET R15 R15 K26
- 0x7C3C0200, // 0092 CALL R15 1
- 0x7C2C0800, // 0093 CALL R11 4
- 0x8C2C150B, // 0094 GETMET R11 R10 K11
- 0x5834000F, // 0095 LDCONST R13 K15
- 0x88380B1B, // 0096 GETMBR R14 R5 K27
- 0x5C3C1200, // 0097 MOVE R15 R9
- 0x7C2C0800, // 0098 CALL R11 4
- 0x8C2C150B, // 0099 GETMET R11 R10 K11
- 0x58340011, // 009A LDCONST R13 K17
- 0x88380B1C, // 009B GETMBR R14 R5 K28
- 0xB83E3A00, // 009C GETNGBL R15 K29
- 0x8C3C1F1E, // 009D GETMET R15 R15 K30
- 0x7C3C0200, // 009E CALL R15 1
- 0x943C1F1F, // 009F GETIDX R15 R15 K31
- 0x7C2C0800, // 00A0 CALL R11 4
- 0x8C2C1520, // 00A1 GETMET R11 R10 K32
- 0x7C2C0200, // 00A2 CALL R11 1
- 0x8C301121, // 00A3 GETMET R12 R8 K33
- 0x7C300200, // 00A4 CALL R12 1
- 0x0034160C, // 00A5 ADD R13 R11 R12
- 0xB83A3A00, // 00A6 GETNGBL R14 K29
- 0x8C381D22, // 00A7 GETMET R14 R14 K34
- 0x8C401B24, // 00A8 GETMET R16 R13 K36
- 0x7C400200, // 00A9 CALL R16 1
- 0x00424610, // 00AA ADD R16 K35 R16
- 0x58440011, // 00AB LDCONST R17 K17
- 0x7C380600, // 00AC CALL R14 3
- 0x8C380925, // 00AD GETMET R14 R4 K37
- 0x7C380200, // 00AE CALL R14 1
- 0x8C381D26, // 00AF GETMET R14 R14 K38
- 0xB8420200, // 00B0 GETNGBL R16 K1
- 0x8C402127, // 00B1 GETMET R16 R16 K39
- 0x7C400200, // 00B2 CALL R16 1
- 0x5C441A00, // 00B3 MOVE R17 R13
- 0x7C380600, // 00B4 CALL R14 3
- 0x8C3C0B0A, // 00B5 GETMET R15 R5 K10
- 0x7C3C0200, // 00B6 CALL R15 1
- 0x8C401F0B, // 00B7 GETMET R16 R15 K11
- 0x58480006, // 00B8 LDCONST R18 K6
- 0x884C0B17, // 00B9 GETMBR R19 R5 K23
- 0x5C501600, // 00BA MOVE R20 R11
- 0x7C400800, // 00BB CALL R16 4
- 0x8C401F0B, // 00BC GETMET R16 R15 K11
- 0x58480008, // 00BD LDCONST R18 K8
- 0x884C0B1B, // 00BE GETMBR R19 R5 K27
- 0x5C501C00, // 00BF MOVE R20 R14
- 0x7C400800, // 00C0 CALL R16 4
- 0x900E0908, // 00C1 SETMBR R3 K4 K8
- 0x80041E00, // 00C2 RET 1 R15
- 0x70020129, // 00C3 JMP #01EE
- 0x54260003, // 00C4 LDINT R9 4
- 0x1C240E09, // 00C5 EQ R9 R7 R9
- 0x78260040, // 00C6 JMPF R9 #0108
- 0x8C240507, // 00C7 GETMET R9 R2 K7
- 0x582C0006, // 00C8 LDCONST R11 K6
- 0x7C240400, // 00C9 CALL R9 2
- 0x6028000C, // 00CA GETGBL R10 G12
- 0x5C2C1200, // 00CB MOVE R11 R9
- 0x7C280200, // 00CC CALL R10 1
- 0x542E001F, // 00CD LDINT R11 32
- 0x2028140B, // 00CE NE R10 R10 R11
- 0x782A0001, // 00CF JMPF R10 #00D2
- 0x4C280000, // 00D0 LDNIL R10
- 0x80041400, // 00D1 RET 1 R10
- 0x8C280507, // 00D2 GETMET R10 R2 K7
- 0x58300008, // 00D3 LDCONST R12 K8
- 0x50340000, // 00D4 LDBOOL R13 0 0
- 0x7C280600, // 00D5 CALL R10 3
- 0x8C2C1128, // 00D6 GETMET R11 R8 K40
- 0x7C2C0200, // 00D7 CALL R11 1
- 0x8C300B0A, // 00D8 GETMET R12 R5 K10
- 0x7C300200, // 00D9 CALL R12 1
- 0x8C34190B, // 00DA GETMET R13 R12 K11
- 0x583C0008, // 00DB LDCONST R15 K8
- 0x88400B17, // 00DC GETMBR R16 R5 K23
- 0x5C441600, // 00DD MOVE R17 R11
- 0x7C340800, // 00DE CALL R13 4
- 0x8C34190B, // 00DF GETMET R13 R12 K11
- 0x583C000F, // 00E0 LDCONST R15 K15
- 0x88400B1B, // 00E1 GETMBR R16 R5 K27
- 0x5C441200, // 00E2 MOVE R17 R9
- 0x7C340800, // 00E3 CALL R13 4
- 0x8C341920, // 00E4 GETMET R13 R12 K32
- 0x7C340200, // 00E5 CALL R13 1
- 0x8C381121, // 00E6 GETMET R14 R8 K33
- 0x7C380200, // 00E7 CALL R14 1
- 0x00381A0E, // 00E8 ADD R14 R13 R14
- 0xB83E3A00, // 00E9 GETNGBL R15 K29
- 0x8C3C1F22, // 00EA GETMET R15 R15 K34
- 0x8C441D24, // 00EB GETMET R17 R14 K36
- 0x7C440200, // 00EC CALL R17 1
- 0x00465211, // 00ED ADD R17 K41 R17
- 0x58480011, // 00EE LDCONST R18 K17
- 0x7C3C0600, // 00EF CALL R15 3
- 0x8C3C0925, // 00F0 GETMET R15 R4 K37
- 0x7C3C0200, // 00F1 CALL R15 1
- 0x8C3C1F26, // 00F2 GETMET R15 R15 K38
- 0xB8460200, // 00F3 GETNGBL R17 K1
- 0x8C442327, // 00F4 GETMET R17 R17 K39
- 0x7C440200, // 00F5 CALL R17 1
- 0x5C481C00, // 00F6 MOVE R18 R14
- 0x7C3C0600, // 00F7 CALL R15 3
- 0x8C400B0A, // 00F8 GETMET R16 R5 K10
- 0x7C400200, // 00F9 CALL R16 1
- 0x8C44210B, // 00FA GETMET R17 R16 K11
- 0x584C0006, // 00FB LDCONST R19 K6
- 0x88500B17, // 00FC GETMBR R20 R5 K23
- 0x5C541A00, // 00FD MOVE R21 R13
- 0x7C440800, // 00FE CALL R17 4
- 0x8C44210B, // 00FF GETMET R17 R16 K11
- 0x584C0008, // 0100 LDCONST R19 K8
- 0x88500B1B, // 0101 GETMBR R20 R5 K27
- 0x5C541E00, // 0102 MOVE R21 R15
- 0x7C440800, // 0103 CALL R17 4
- 0x54460004, // 0104 LDINT R17 5
- 0x900E0811, // 0105 SETMBR R3 K4 R17
- 0x80042000, // 0106 RET 1 R16
- 0x700200E5, // 0107 JMP #01EE
- 0x5426000A, // 0108 LDINT R9 11
- 0x1C240E09, // 0109 EQ R9 R7 R9
- 0x78260012, // 010A JMPF R9 #011E
- 0x8C240507, // 010B GETMET R9 R2 K7
- 0x582C0006, // 010C LDCONST R11 K6
- 0x7C240400, // 010D CALL R9 2
- 0x8C28112A, // 010E GETMET R10 R8 K42
- 0x5C301200, // 010F MOVE R12 R9
- 0x7C280400, // 0110 CALL R10 2
- 0xB82A3A00, // 0111 GETNGBL R10 K29
- 0x8C281522, // 0112 GETMET R10 R10 K34
- 0x8C301324, // 0113 GETMET R12 R9 K36
- 0x7C300200, // 0114 CALL R12 1
- 0x0032560C, // 0115 ADD R12 K43 R12
- 0x58340011, // 0116 LDCONST R13 K17
- 0x7C280600, // 0117 CALL R10 3
- 0xB82A0200, // 0118 GETNGBL R10 K1
- 0x8828152C, // 0119 GETMBR R10 R10 K44
- 0x900E2A0A, // 011A SETMBR R3 K21 R10
- 0x4C280000, // 011B LDNIL R10
- 0x80041400, // 011C RET 1 R10
- 0x700200CF, // 011D JMP #01EE
- 0x54260005, // 011E LDINT R9 6
- 0x1C240E09, // 011F EQ R9 R7 R9
- 0x78260091, // 0120 JMPF R9 #01B3
- 0x8C240507, // 0121 GETMET R9 R2 K7
- 0x582C0006, // 0122 LDCONST R11 K6
- 0x7C240400, // 0123 CALL R9 2
- 0x8C280507, // 0124 GETMET R10 R2 K7
- 0x58300008, // 0125 LDCONST R12 K8
- 0x7C280400, // 0126 CALL R10 2
- 0x8C2C0507, // 0127 GETMET R11 R2 K7
- 0x5834000F, // 0128 LDCONST R13 K15
- 0x7C2C0400, // 0129 CALL R11 2
- 0x8C300507, // 012A GETMET R12 R2 K7
- 0x58380011, // 012B LDCONST R14 K17
- 0x7C300400, // 012C CALL R12 2
- 0x8C340507, // 012D GETMET R13 R2 K7
- 0x543E0003, // 012E LDINT R15 4
- 0x7C340400, // 012F CALL R13 2
- 0x8C38112D, // 0130 GETMET R14 R8 K45
- 0x7C380200, // 0131 CALL R14 1
- 0x4C3C0000, // 0132 LDNIL R15
- 0x1C381C0F, // 0133 EQ R14 R14 R15
- 0x783A0006, // 0134 JMPF R14 #013C
- 0xB83A3A00, // 0135 GETNGBL R14 K29
- 0x8C381D22, // 0136 GETMET R14 R14 K34
- 0x5840002E, // 0137 LDCONST R16 K46
- 0x5844000F, // 0138 LDCONST R17 K15
- 0x7C380600, // 0139 CALL R14 3
- 0x4C380000, // 013A LDNIL R14
- 0x80041C00, // 013B RET 1 R14
- 0x8C38112F, // 013C GETMET R14 R8 K47
+ 0x5422002F, // 0005 LDINT R8 48
+ 0x1C200C08, // 0006 EQ R8 R6 R8
+ 0x78220050, // 0007 JMPF R8 #0059
+ 0x1C200F05, // 0008 EQ R8 R7 K5
+ 0x78220017, // 0009 JMPF R8 #0022
+ 0x8C200506, // 000A GETMET R8 R2 K6
+ 0x58280005, // 000B LDCONST R10 K5
+ 0x542E0383, // 000C LDINT R11 900
+ 0x7C200600, // 000D CALL R8 3
+ 0x8C240506, // 000E GETMET R9 R2 K6
+ 0x582C0007, // 000F LDCONST R11 K7
+ 0x58300005, // 0010 LDCONST R12 K5
+ 0x7C240600, // 0011 CALL R9 3
+ 0x90061009, // 0012 SETMBR R1 K8 R9
+ 0x8C280B09, // 0013 GETMET R10 R5 K9
+ 0x7C280200, // 0014 CALL R10 1
+ 0x8C2C150A, // 0015 GETMET R11 R10 K10
+ 0x58340005, // 0016 LDCONST R13 K5
+ 0x88380B0B, // 0017 GETMBR R14 R5 K11
+ 0x583C0005, // 0018 LDCONST R15 K5
+ 0x7C2C0800, // 0019 CALL R11 4
+ 0x8C2C150A, // 001A GETMET R11 R10 K10
+ 0x58340007, // 001B LDCONST R13 K7
+ 0x88380B0C, // 001C GETMBR R14 R5 K12
+ 0x583C000D, // 001D LDCONST R15 K13
+ 0x7C2C0800, // 001E CALL R11 4
+ 0x900E0907, // 001F SETMBR R3 K4 K7
+ 0x80041400, // 0020 RET 1 R10
+ 0x70020035, // 0021 JMP #0058
+ 0x1C200F0E, // 0022 EQ R8 R7 K14
+ 0x7822001A, // 0023 JMPF R8 #003F
+ 0x8C200506, // 0024 GETMET R8 R2 K6
+ 0x58280005, // 0025 LDCONST R10 K5
+ 0x7C200400, // 0026 CALL R8 2
+ 0x8C240506, // 0027 GETMET R9 R2 K6
+ 0x582C0007, // 0028 LDCONST R11 K7
+ 0x5830000F, // 0029 LDCONST R12 K15
+ 0x7C240600, // 002A CALL R9 3
+ 0x8C280506, // 002B GETMET R10 R2 K6
+ 0x5830000E, // 002C LDCONST R12 K14
+ 0x58340005, // 002D LDCONST R13 K5
+ 0x7C280600, // 002E CALL R10 3
+ 0x9006100A, // 002F SETMBR R1 K8 R10
+ 0x8C2C0B09, // 0030 GETMET R11 R5 K9
+ 0x7C2C0200, // 0031 CALL R11 1
+ 0x8C30170A, // 0032 GETMET R12 R11 K10
+ 0x58380005, // 0033 LDCONST R14 K5
+ 0x883C0B0B, // 0034 GETMBR R15 R5 K11
+ 0x58400005, // 0035 LDCONST R16 K5
+ 0x7C300800, // 0036 CALL R12 4
+ 0x8C30170A, // 0037 GETMET R12 R11 K10
+ 0x58380007, // 0038 LDCONST R14 K7
+ 0x883C0B0C, // 0039 GETMBR R15 R5 K12
+ 0x5840000D, // 003A LDCONST R16 K13
+ 0x7C300800, // 003B CALL R12 4
+ 0x900E0910, // 003C SETMBR R3 K4 K16
+ 0x80041600, // 003D RET 1 R11
+ 0x70020018, // 003E JMP #0058
+ 0x54220003, // 003F LDINT R8 4
+ 0x1C200E08, // 0040 EQ R8 R7 R8
+ 0x78220015, // 0041 JMPF R8 #0058
+ 0x90061105, // 0042 SETMBR R1 K8 K5
+ 0x8C200311, // 0043 GETMET R8 R1 K17
+ 0x7C200200, // 0044 CALL R8 1
+ 0x8C200B09, // 0045 GETMET R8 R5 K9
+ 0x7C200200, // 0046 CALL R8 1
+ 0x8C24110A, // 0047 GETMET R9 R8 K10
+ 0x582C0005, // 0048 LDCONST R11 K5
+ 0x88300B0B, // 0049 GETMBR R12 R5 K11
+ 0x58340005, // 004A LDCONST R13 K5
+ 0x7C240800, // 004B CALL R9 4
+ 0x8C24110A, // 004C GETMET R9 R8 K10
+ 0x582C0007, // 004D LDCONST R11 K7
+ 0x88300B0C, // 004E GETMBR R12 R5 K12
+ 0x5834000D, // 004F LDCONST R13 K13
+ 0x7C240800, // 0050 CALL R9 4
+ 0x54260004, // 0051 LDINT R9 5
+ 0x900E0809, // 0052 SETMBR R3 K4 R9
+ 0x88240112, // 0053 GETMBR R9 R0 K18
+ 0x8C241313, // 0054 GETMET R9 R9 K19
+ 0x5C2C0200, // 0055 MOVE R11 R1
+ 0x7C240400, // 0056 CALL R9 2
+ 0x80041000, // 0057 RET 1 R8
+ 0x70020193, // 0058 JMP #01ED
+ 0x5422003D, // 0059 LDINT R8 62
+ 0x1C200C08, // 005A EQ R8 R6 R8
+ 0x78220190, // 005B JMPF R8 #01ED
+ 0x1C200F0E, // 005C EQ R8 R7 K14
+ 0x7822001D, // 005D JMPF R8 #007C
+ 0x8C200506, // 005E GETMET R8 R2 K6
+ 0x58280005, // 005F LDCONST R10 K5
+ 0x7C200400, // 0060 CALL R8 2
+ 0x20241107, // 0061 NE R9 R8 K7
+ 0x78260006, // 0062 JMPF R9 #006A
+ 0x2024110E, // 0063 NE R9 R8 K14
+ 0x78260004, // 0064 JMPF R9 #006A
+ 0xB8260200, // 0065 GETNGBL R9 K1
+ 0x88241315, // 0066 GETMBR R9 R9 K21
+ 0x900E2809, // 0067 SETMBR R3 K20 R9
+ 0x4C240000, // 0068 LDNIL R9
+ 0x80041200, // 0069 RET 1 R9
+ 0x8C240B09, // 006A GETMET R9 R5 K9
+ 0x7C240200, // 006B CALL R9 1
+ 0x8C28130A, // 006C GETMET R10 R9 K10
+ 0x58300005, // 006D LDCONST R12 K5
+ 0x88340B16, // 006E GETMBR R13 R5 K22
+ 0x1C381107, // 006F EQ R14 R8 K7
+ 0x783A0003, // 0070 JMPF R14 #0075
+ 0xB83A0200, // 0071 GETNGBL R14 K1
+ 0x8C381D17, // 0072 GETMET R14 R14 K23
+ 0x7C380200, // 0073 CALL R14 1
+ 0x70020002, // 0074 JMP #0078
+ 0xB83A0200, // 0075 GETNGBL R14 K1
+ 0x8C381D18, // 0076 GETMET R14 R14 K24
+ 0x7C380200, // 0077 CALL R14 1
+ 0x7C280800, // 0078 CALL R10 4
+ 0x900E0910, // 0079 SETMBR R3 K4 K16
+ 0x80041200, // 007A RET 1 R9
+ 0x70020170, // 007B JMP #01ED
+ 0x1C200F05, // 007C EQ R8 R7 K5
+ 0x78220044, // 007D JMPF R8 #00C3
+ 0x8C200506, // 007E GETMET R8 R2 K6
+ 0x58280005, // 007F LDCONST R10 K5
+ 0x7C200400, // 0080 CALL R8 2
+ 0x6024000C, // 0081 GETGBL R9 G12
+ 0x5C281000, // 0082 MOVE R10 R8
+ 0x7C240200, // 0083 CALL R9 1
+ 0x542A001F, // 0084 LDINT R10 32
+ 0x2024120A, // 0085 NE R9 R9 R10
+ 0x78260001, // 0086 JMPF R9 #0089
+ 0x4C240000, // 0087 LDNIL R9
+ 0x80041200, // 0088 RET 1 R9
+ 0x900E0907, // 0089 SETMBR R3 K4 K7
+ 0x8C240B09, // 008A GETMET R9 R5 K9
+ 0x7C240200, // 008B CALL R9 1
+ 0x8C28130A, // 008C GETMET R10 R9 K10
+ 0x58300007, // 008D LDCONST R12 K7
+ 0x88340B16, // 008E GETMBR R13 R5 K22
+ 0xB83A0200, // 008F GETNGBL R14 K1
+ 0x8C381D19, // 0090 GETMET R14 R14 K25
+ 0x7C380200, // 0091 CALL R14 1
+ 0x7C280800, // 0092 CALL R10 4
+ 0x8C28130A, // 0093 GETMET R10 R9 K10
+ 0x5830000E, // 0094 LDCONST R12 K14
+ 0x88340B1A, // 0095 GETMBR R13 R5 K26
+ 0x5C381000, // 0096 MOVE R14 R8
+ 0x7C280800, // 0097 CALL R10 4
+ 0x8C28130A, // 0098 GETMET R10 R9 K10
+ 0x58300010, // 0099 LDCONST R12 K16
+ 0x88340B1B, // 009A GETMBR R13 R5 K27
+ 0xB83A3800, // 009B GETNGBL R14 K28
+ 0x8C381D1D, // 009C GETMET R14 R14 K29
+ 0x7C380200, // 009D CALL R14 1
+ 0x94381D1E, // 009E GETIDX R14 R14 K30
+ 0x7C280800, // 009F CALL R10 4
+ 0x8C28131F, // 00A0 GETMET R10 R9 K31
+ 0x7C280200, // 00A1 CALL R10 1
+ 0x8C2C0320, // 00A2 GETMET R11 R1 K32
+ 0x7C2C0200, // 00A3 CALL R11 1
+ 0x0030140B, // 00A4 ADD R12 R10 R11
+ 0xB8363800, // 00A5 GETNGBL R13 K28
+ 0x8C341B21, // 00A6 GETMET R13 R13 K33
+ 0x8C3C1923, // 00A7 GETMET R15 R12 K35
+ 0x7C3C0200, // 00A8 CALL R15 1
+ 0x003E440F, // 00A9 ADD R15 K34 R15
+ 0x58400010, // 00AA LDCONST R16 K16
+ 0x7C340600, // 00AB CALL R13 3
+ 0x8C340924, // 00AC GETMET R13 R4 K36
+ 0x7C340200, // 00AD CALL R13 1
+ 0x8C341B25, // 00AE GETMET R13 R13 K37
+ 0xB83E0200, // 00AF GETNGBL R15 K1
+ 0x8C3C1F26, // 00B0 GETMET R15 R15 K38
+ 0x7C3C0200, // 00B1 CALL R15 1
+ 0x5C401800, // 00B2 MOVE R16 R12
+ 0x7C340600, // 00B3 CALL R13 3
+ 0x8C380B09, // 00B4 GETMET R14 R5 K9
+ 0x7C380200, // 00B5 CALL R14 1
+ 0x8C3C1D0A, // 00B6 GETMET R15 R14 K10
+ 0x58440005, // 00B7 LDCONST R17 K5
+ 0x88480B16, // 00B8 GETMBR R18 R5 K22
+ 0x5C4C1400, // 00B9 MOVE R19 R10
+ 0x7C3C0800, // 00BA CALL R15 4
+ 0x8C3C1D0A, // 00BB GETMET R15 R14 K10
+ 0x58440007, // 00BC LDCONST R17 K7
+ 0x88480B1A, // 00BD GETMBR R18 R5 K26
+ 0x5C4C1A00, // 00BE MOVE R19 R13
+ 0x7C3C0800, // 00BF CALL R15 4
+ 0x900E0907, // 00C0 SETMBR R3 K4 K7
+ 0x80041C00, // 00C1 RET 1 R14
+ 0x70020129, // 00C2 JMP #01ED
+ 0x54220003, // 00C3 LDINT R8 4
+ 0x1C200E08, // 00C4 EQ R8 R7 R8
+ 0x78220040, // 00C5 JMPF R8 #0107
+ 0x8C200506, // 00C6 GETMET R8 R2 K6
+ 0x58280005, // 00C7 LDCONST R10 K5
+ 0x7C200400, // 00C8 CALL R8 2
+ 0x6024000C, // 00C9 GETGBL R9 G12
+ 0x5C281000, // 00CA MOVE R10 R8
+ 0x7C240200, // 00CB CALL R9 1
+ 0x542A001F, // 00CC LDINT R10 32
+ 0x2024120A, // 00CD NE R9 R9 R10
+ 0x78260001, // 00CE JMPF R9 #00D1
+ 0x4C240000, // 00CF LDNIL R9
+ 0x80041200, // 00D0 RET 1 R9
+ 0x8C240506, // 00D1 GETMET R9 R2 K6
+ 0x582C0007, // 00D2 LDCONST R11 K7
+ 0x50300000, // 00D3 LDBOOL R12 0 0
+ 0x7C240600, // 00D4 CALL R9 3
+ 0x8C280327, // 00D5 GETMET R10 R1 K39
+ 0x7C280200, // 00D6 CALL R10 1
+ 0x8C2C0B09, // 00D7 GETMET R11 R5 K9
+ 0x7C2C0200, // 00D8 CALL R11 1
+ 0x8C30170A, // 00D9 GETMET R12 R11 K10
+ 0x58380007, // 00DA LDCONST R14 K7
+ 0x883C0B16, // 00DB GETMBR R15 R5 K22
+ 0x5C401400, // 00DC MOVE R16 R10
+ 0x7C300800, // 00DD CALL R12 4
+ 0x8C30170A, // 00DE GETMET R12 R11 K10
+ 0x5838000E, // 00DF LDCONST R14 K14
+ 0x883C0B1A, // 00E0 GETMBR R15 R5 K26
+ 0x5C401000, // 00E1 MOVE R16 R8
+ 0x7C300800, // 00E2 CALL R12 4
+ 0x8C30171F, // 00E3 GETMET R12 R11 K31
+ 0x7C300200, // 00E4 CALL R12 1
+ 0x8C340320, // 00E5 GETMET R13 R1 K32
+ 0x7C340200, // 00E6 CALL R13 1
+ 0x0034180D, // 00E7 ADD R13 R12 R13
+ 0xB83A3800, // 00E8 GETNGBL R14 K28
+ 0x8C381D21, // 00E9 GETMET R14 R14 K33
+ 0x8C401B23, // 00EA GETMET R16 R13 K35
+ 0x7C400200, // 00EB CALL R16 1
+ 0x00425010, // 00EC ADD R16 K40 R16
+ 0x58440010, // 00ED LDCONST R17 K16
+ 0x7C380600, // 00EE CALL R14 3
+ 0x8C380924, // 00EF GETMET R14 R4 K36
+ 0x7C380200, // 00F0 CALL R14 1
+ 0x8C381D25, // 00F1 GETMET R14 R14 K37
+ 0xB8420200, // 00F2 GETNGBL R16 K1
+ 0x8C402126, // 00F3 GETMET R16 R16 K38
+ 0x7C400200, // 00F4 CALL R16 1
+ 0x5C441A00, // 00F5 MOVE R17 R13
+ 0x7C380600, // 00F6 CALL R14 3
+ 0x8C3C0B09, // 00F7 GETMET R15 R5 K9
+ 0x7C3C0200, // 00F8 CALL R15 1
+ 0x8C401F0A, // 00F9 GETMET R16 R15 K10
+ 0x58480005, // 00FA LDCONST R18 K5
+ 0x884C0B16, // 00FB GETMBR R19 R5 K22
+ 0x5C501800, // 00FC MOVE R20 R12
+ 0x7C400800, // 00FD CALL R16 4
+ 0x8C401F0A, // 00FE GETMET R16 R15 K10
+ 0x58480007, // 00FF LDCONST R18 K7
+ 0x884C0B1A, // 0100 GETMBR R19 R5 K26
+ 0x5C501C00, // 0101 MOVE R20 R14
+ 0x7C400800, // 0102 CALL R16 4
+ 0x54420004, // 0103 LDINT R16 5
+ 0x900E0810, // 0104 SETMBR R3 K4 R16
+ 0x80041E00, // 0105 RET 1 R15
+ 0x700200E5, // 0106 JMP #01ED
+ 0x5422000A, // 0107 LDINT R8 11
+ 0x1C200E08, // 0108 EQ R8 R7 R8
+ 0x78220012, // 0109 JMPF R8 #011D
+ 0x8C200506, // 010A GETMET R8 R2 K6
+ 0x58280005, // 010B LDCONST R10 K5
+ 0x7C200400, // 010C CALL R8 2
+ 0x8C240329, // 010D GETMET R9 R1 K41
+ 0x5C2C1000, // 010E MOVE R11 R8
+ 0x7C240400, // 010F CALL R9 2
+ 0xB8263800, // 0110 GETNGBL R9 K28
+ 0x8C241321, // 0111 GETMET R9 R9 K33
+ 0x8C2C1123, // 0112 GETMET R11 R8 K35
+ 0x7C2C0200, // 0113 CALL R11 1
+ 0x002E540B, // 0114 ADD R11 K42 R11
+ 0x58300010, // 0115 LDCONST R12 K16
+ 0x7C240600, // 0116 CALL R9 3
+ 0xB8260200, // 0117 GETNGBL R9 K1
+ 0x8824132B, // 0118 GETMBR R9 R9 K43
+ 0x900E2809, // 0119 SETMBR R3 K20 R9
+ 0x4C240000, // 011A LDNIL R9
+ 0x80041200, // 011B RET 1 R9
+ 0x700200CF, // 011C JMP #01ED
+ 0x54220005, // 011D LDINT R8 6
+ 0x1C200E08, // 011E EQ R8 R7 R8
+ 0x78220091, // 011F JMPF R8 #01B2
+ 0x8C200506, // 0120 GETMET R8 R2 K6
+ 0x58280005, // 0121 LDCONST R10 K5
+ 0x7C200400, // 0122 CALL R8 2
+ 0x8C240506, // 0123 GETMET R9 R2 K6
+ 0x582C0007, // 0124 LDCONST R11 K7
+ 0x7C240400, // 0125 CALL R9 2
+ 0x8C280506, // 0126 GETMET R10 R2 K6
+ 0x5830000E, // 0127 LDCONST R12 K14
+ 0x7C280400, // 0128 CALL R10 2
+ 0x8C2C0506, // 0129 GETMET R11 R2 K6
+ 0x58340010, // 012A LDCONST R13 K16
+ 0x7C2C0400, // 012B CALL R11 2
+ 0x8C300506, // 012C GETMET R12 R2 K6
+ 0x543A0003, // 012D LDINT R14 4
+ 0x7C300400, // 012E CALL R12 2
+ 0x8C34032C, // 012F GETMET R13 R1 K44
+ 0x7C340200, // 0130 CALL R13 1
+ 0x4C380000, // 0131 LDNIL R14
+ 0x1C341A0E, // 0132 EQ R13 R13 R14
+ 0x78360006, // 0133 JMPF R13 #013B
+ 0xB8363800, // 0134 GETNGBL R13 K28
+ 0x8C341B21, // 0135 GETMET R13 R13 K33
+ 0x583C002D, // 0136 LDCONST R15 K45
+ 0x5840000E, // 0137 LDCONST R16 K14
+ 0x7C340600, // 0138 CALL R13 3
+ 0x4C340000, // 0139 LDNIL R13
+ 0x80041A00, // 013A RET 1 R13
+ 0x8C34032E, // 013B GETMET R13 R1 K46
+ 0x5C3C1000, // 013C MOVE R15 R8
0x5C401200, // 013D MOVE R16 R9
- 0x5C441400, // 013E MOVE R17 R10
- 0x7C380600, // 013F CALL R14 3
- 0x8C381130, // 0140 GETMET R14 R8 K48
- 0x5C401600, // 0141 MOVE R16 R11
- 0x7C380400, // 0142 CALL R14 2
- 0x9022620C, // 0143 SETMBR R8 K49 R12
- 0x9022640D, // 0144 SETMBR R8 K50 R13
- 0xB83A0200, // 0145 GETNGBL R14 K1
- 0x88381D02, // 0146 GETMBR R14 R14 K2
- 0x8C381D33, // 0147 GETMET R14 R14 K51
- 0x5C401200, // 0148 MOVE R16 R9
- 0x7C380400, // 0149 CALL R14 2
- 0x8C3C1D34, // 014A GETMET R15 R14 K52
- 0x54460005, // 014B LDINT R17 6
- 0x7C3C0400, // 014C CALL R15 2
- 0x8C401F07, // 014D GETMET R16 R15 K7
- 0x544A0014, // 014E LDINT R18 21
- 0x7C400400, // 014F CALL R16 2
- 0x8C441F07, // 0150 GETMET R17 R15 K7
- 0x544E0010, // 0151 LDINT R19 17
- 0x7C440400, // 0152 CALL R17 2
- 0x5C482000, // 0153 MOVE R18 R16
- 0x784A0001, // 0154 JMPF R18 #0157
- 0x5C482200, // 0155 MOVE R18 R17
- 0x744A0006, // 0156 JMPT R18 #015E
- 0xB84A3A00, // 0157 GETNGBL R18 K29
- 0x8C482522, // 0158 GETMET R18 R18 K34
- 0x58500035, // 0159 LDCONST R20 K53
- 0x5854000F, // 015A LDCONST R21 K15
- 0x7C480600, // 015B CALL R18 3
- 0x50480000, // 015C LDBOOL R18 0 0
- 0x80042400, // 015D RET 1 R18
- 0x60480004, // 015E GETGBL R18 G4
- 0x5C4C2000, // 015F MOVE R19 R16
- 0x7C480200, // 0160 CALL R18 1
- 0x1C482536, // 0161 EQ R18 R18 K54
- 0x784A0006, // 0162 JMPF R18 #016A
- 0xB84A6E00, // 0163 GETNGBL R18 K55
- 0x5C4C2000, // 0164 MOVE R19 R16
- 0x7C480200, // 0165 CALL R18 1
- 0x8C482538, // 0166 GETMET R18 R18 K56
- 0x7C480200, // 0167 CALL R18 1
- 0x5C402400, // 0168 MOVE R16 R18
- 0x70020002, // 0169 JMP #016D
- 0x8C482138, // 016A GETMET R18 R16 K56
- 0x7C480200, // 016B CALL R18 1
- 0x5C402400, // 016C MOVE R16 R18
- 0x60480004, // 016D GETGBL R18 G4
- 0x5C4C2200, // 016E MOVE R19 R17
- 0x7C480200, // 016F CALL R18 1
- 0x1C482536, // 0170 EQ R18 R18 K54
- 0x784A0006, // 0171 JMPF R18 #0179
- 0xB84A6E00, // 0172 GETNGBL R18 K55
- 0x5C4C2200, // 0173 MOVE R19 R17
- 0x7C480200, // 0174 CALL R18 1
- 0x8C482538, // 0175 GETMET R18 R18 K56
- 0x7C480200, // 0176 CALL R18 1
- 0x5C442400, // 0177 MOVE R17 R18
- 0x70020002, // 0178 JMP #017C
- 0x8C482338, // 0179 GETMET R18 R17 K56
- 0x7C480200, // 017A CALL R18 1
- 0x5C442400, // 017B MOVE R17 R18
- 0xB84A0200, // 017C GETNGBL R18 K1
- 0x88482502, // 017D GETMBR R18 R18 K2
- 0x8C482533, // 017E GETMET R18 R18 K51
- 0x8C50112D, // 017F GETMET R20 R8 K45
- 0x7C500200, // 0180 CALL R20 1
- 0x7C480400, // 0181 CALL R18 2
- 0x8C482507, // 0182 GETMET R18 R18 K7
- 0x54520008, // 0183 LDINT R20 9
- 0x7C480400, // 0184 CALL R18 2
- 0x404E1139, // 0185 CONNECT R19 K8 K57
- 0x94482413, // 0186 GETIDX R18 R18 R19
- 0x60500015, // 0187 GETGBL R20 G21
- 0x7C500000, // 0188 CALL R20 0
- 0x8C50293A, // 0189 GETMET R20 R20 K58
- 0x5858003B, // 018A LDCONST R22 K59
- 0x7C500400, // 018B CALL R20 2
- 0x5C4C2800, // 018C MOVE R19 R20
- 0x8C50093C, // 018D GETMET R20 R4 K60
- 0x7C500200, // 018E CALL R20 1
- 0x8C54213D, // 018F GETMET R21 R16 K61
- 0x7C540200, // 0190 CALL R21 1
- 0x8C542B3E, // 0191 GETMET R21 R21 K62
- 0x7C540200, // 0192 CALL R21 1
- 0x8C58293F, // 0193 GETMET R22 R20 K63
- 0x5C602400, // 0194 MOVE R24 R18
- 0x5C642A00, // 0195 MOVE R25 R21
- 0x5C682600, // 0196 MOVE R26 R19
- 0x546E0007, // 0197 LDINT R27 8
- 0x7C580A00, // 0198 CALL R22 5
- 0x8C5C1140, // 0199 GETMET R23 R8 K64
+ 0x7C340600, // 013E CALL R13 3
+ 0x8C34032F, // 013F GETMET R13 R1 K47
+ 0x5C3C1400, // 0140 MOVE R15 R10
+ 0x7C340400, // 0141 CALL R13 2
+ 0x9006600B, // 0142 SETMBR R1 K48 R11
+ 0x9006620C, // 0143 SETMBR R1 K49 R12
+ 0xB8360200, // 0144 GETNGBL R13 K1
+ 0x88341B02, // 0145 GETMBR R13 R13 K2
+ 0x8C341B32, // 0146 GETMET R13 R13 K50
+ 0x5C3C1000, // 0147 MOVE R15 R8
+ 0x7C340400, // 0148 CALL R13 2
+ 0x8C381B33, // 0149 GETMET R14 R13 K51
+ 0x54420005, // 014A LDINT R16 6
+ 0x7C380400, // 014B CALL R14 2
+ 0x8C3C1D06, // 014C GETMET R15 R14 K6
+ 0x54460014, // 014D LDINT R17 21
+ 0x7C3C0400, // 014E CALL R15 2
+ 0x8C401D06, // 014F GETMET R16 R14 K6
+ 0x544A0010, // 0150 LDINT R18 17
+ 0x7C400400, // 0151 CALL R16 2
+ 0x5C441E00, // 0152 MOVE R17 R15
+ 0x78460001, // 0153 JMPF R17 #0156
+ 0x5C442000, // 0154 MOVE R17 R16
+ 0x74460006, // 0155 JMPT R17 #015D
+ 0xB8463800, // 0156 GETNGBL R17 K28
+ 0x8C442321, // 0157 GETMET R17 R17 K33
+ 0x584C0034, // 0158 LDCONST R19 K52
+ 0x5850000E, // 0159 LDCONST R20 K14
+ 0x7C440600, // 015A CALL R17 3
+ 0x50440000, // 015B LDBOOL R17 0 0
+ 0x80042200, // 015C RET 1 R17
+ 0x60440004, // 015D GETGBL R17 G4
+ 0x5C481E00, // 015E MOVE R18 R15
+ 0x7C440200, // 015F CALL R17 1
+ 0x1C442335, // 0160 EQ R17 R17 K53
+ 0x78460006, // 0161 JMPF R17 #0169
+ 0xB8466C00, // 0162 GETNGBL R17 K54
+ 0x5C481E00, // 0163 MOVE R18 R15
+ 0x7C440200, // 0164 CALL R17 1
+ 0x8C442337, // 0165 GETMET R17 R17 K55
+ 0x7C440200, // 0166 CALL R17 1
+ 0x5C3C2200, // 0167 MOVE R15 R17
+ 0x70020002, // 0168 JMP #016C
+ 0x8C441F37, // 0169 GETMET R17 R15 K55
+ 0x7C440200, // 016A CALL R17 1
+ 0x5C3C2200, // 016B MOVE R15 R17
+ 0x60440004, // 016C GETGBL R17 G4
+ 0x5C482000, // 016D MOVE R18 R16
+ 0x7C440200, // 016E CALL R17 1
+ 0x1C442335, // 016F EQ R17 R17 K53
+ 0x78460006, // 0170 JMPF R17 #0178
+ 0xB8466C00, // 0171 GETNGBL R17 K54
+ 0x5C482000, // 0172 MOVE R18 R16
+ 0x7C440200, // 0173 CALL R17 1
+ 0x8C442337, // 0174 GETMET R17 R17 K55
+ 0x7C440200, // 0175 CALL R17 1
+ 0x5C402200, // 0176 MOVE R16 R17
+ 0x70020002, // 0177 JMP #017B
+ 0x8C442137, // 0178 GETMET R17 R16 K55
+ 0x7C440200, // 0179 CALL R17 1
+ 0x5C402200, // 017A MOVE R16 R17
+ 0xB8460200, // 017B GETNGBL R17 K1
+ 0x88442302, // 017C GETMBR R17 R17 K2
+ 0x8C442332, // 017D GETMET R17 R17 K50
+ 0x8C4C032C, // 017E GETMET R19 R1 K44
+ 0x7C4C0200, // 017F CALL R19 1
+ 0x7C440400, // 0180 CALL R17 2
+ 0x8C442306, // 0181 GETMET R17 R17 K6
+ 0x544E0008, // 0182 LDINT R19 9
+ 0x7C440400, // 0183 CALL R17 2
+ 0x404A0F38, // 0184 CONNECT R18 K7 K56
+ 0x94442212, // 0185 GETIDX R17 R17 R18
+ 0x604C0015, // 0186 GETGBL R19 G21
+ 0x7C4C0000, // 0187 CALL R19 0
+ 0x8C4C2739, // 0188 GETMET R19 R19 K57
+ 0x5854003A, // 0189 LDCONST R21 K58
+ 0x7C4C0400, // 018A CALL R19 2
+ 0x5C482600, // 018B MOVE R18 R19
+ 0x8C4C093B, // 018C GETMET R19 R4 K59
+ 0x7C4C0200, // 018D CALL R19 1
+ 0x8C501F3C, // 018E GETMET R20 R15 K60
+ 0x7C500200, // 018F CALL R20 1
+ 0x8C50293D, // 0190 GETMET R20 R20 K61
+ 0x7C500200, // 0191 CALL R20 1
+ 0x8C54273E, // 0192 GETMET R21 R19 K62
+ 0x5C5C2200, // 0193 MOVE R23 R17
+ 0x5C602800, // 0194 MOVE R24 R20
+ 0x5C642400, // 0195 MOVE R25 R18
+ 0x546A0007, // 0196 LDINT R26 8
+ 0x7C540A00, // 0197 CALL R21 5
+ 0x8C58033F, // 0198 GETMET R22 R1 K63
+ 0x5C601E00, // 0199 MOVE R24 R15
0x5C642000, // 019A MOVE R25 R16
- 0x5C682200, // 019B MOVE R26 R17
- 0x5C6C2C00, // 019C MOVE R27 R22
- 0x7C5C0800, // 019D CALL R23 4
- 0x885C0113, // 019E GETMBR R23 R0 K19
- 0x8C5C2F41, // 019F GETMET R23 R23 K65
- 0x5C641000, // 01A0 MOVE R25 R8
- 0x7C5C0400, // 01A1 CALL R23 2
- 0x8C5C0B0A, // 01A2 GETMET R23 R5 K10
- 0x7C5C0200, // 01A3 CALL R23 1
- 0x8C602F0B, // 01A4 GETMET R24 R23 K11
- 0x58680006, // 01A5 LDCONST R26 K6
- 0x886C0B0C, // 01A6 GETMBR R27 R5 K12
- 0xB8720200, // 01A7 GETNGBL R28 K1
- 0x8870392C, // 01A8 GETMBR R28 R28 K44
- 0x7C600800, // 01A9 CALL R24 4
- 0x8C602F0B, // 01AA GETMET R24 R23 K11
- 0x58680008, // 01AB LDCONST R26 K8
- 0x886C0B0C, // 01AC GETMBR R27 R5 K12
- 0x58700008, // 01AD LDCONST R28 K8
- 0x7C600800, // 01AE CALL R24 4
- 0x54620007, // 01AF LDINT R24 8
- 0x900E0818, // 01B0 SETMBR R3 K4 R24
- 0x80042E00, // 01B1 RET 1 R23
- 0x7002003A, // 01B2 JMP #01EE
- 0x54260008, // 01B3 LDINT R9 9
- 0x1C240E09, // 01B4 EQ R9 R7 R9
- 0x7826000B, // 01B5 JMPF R9 #01C2
- 0x8C240507, // 01B6 GETMET R9 R2 K7
- 0x582C0006, // 01B7 LDCONST R11 K6
- 0x7C240400, // 01B8 CALL R9 2
- 0x8C281142, // 01B9 GETMET R10 R8 K66
- 0x5C301200, // 01BA MOVE R12 R9
- 0x7C280400, // 01BB CALL R10 2
- 0xB82A0200, // 01BC GETNGBL R10 K1
- 0x8828152C, // 01BD GETMBR R10 R10 K44
- 0x900E2A0A, // 01BE SETMBR R3 K21 R10
- 0x4C280000, // 01BF LDNIL R10
- 0x80041400, // 01C0 RET 1 R10
- 0x7002002B, // 01C1 JMP #01EE
- 0x54260009, // 01C2 LDINT R9 10
- 0x1C240E09, // 01C3 EQ R9 R7 R9
- 0x78260028, // 01C4 JMPF R9 #01EE
- 0x8C240507, // 01C5 GETMET R9 R2 K7
- 0x582C0006, // 01C6 LDCONST R11 K6
- 0x7C240400, // 01C7 CALL R9 2
- 0x88280113, // 01C8 GETMBR R10 R0 K19
- 0x88281543, // 01C9 GETMBR R10 R10 K67
- 0x8C281544, // 01CA GETMET R10 R10 K68
- 0x7C280200, // 01CB CALL R10 1
- 0x282C1308, // 01CC GE R11 R9 K8
- 0x782E001A, // 01CD JMPF R11 #01E9
- 0x602C000C, // 01CE GETGBL R11 G12
- 0x5C301400, // 01CF MOVE R12 R10
- 0x7C2C0200, // 01D0 CALL R11 1
- 0x182C120B, // 01D1 LE R11 R9 R11
- 0x782E0015, // 01D2 JMPF R11 #01E9
- 0x042C1308, // 01D3 SUB R11 R9 K8
- 0x942C140B, // 01D4 GETIDX R11 R10 R11
- 0xB8323A00, // 01D5 GETNGBL R12 K29
- 0x8C301922, // 01D6 GETMET R12 R12 K34
- 0x88381146, // 01D7 GETMBR R14 R8 K70
- 0x8C381D3D, // 01D8 GETMET R14 R14 K61
- 0x7C380200, // 01D9 CALL R14 1
- 0x8C381D3E, // 01DA GETMET R14 R14 K62
- 0x7C380200, // 01DB CALL R14 1
- 0x8C381D24, // 01DC GETMET R14 R14 K36
- 0x7C380200, // 01DD CALL R14 1
- 0x003A8A0E, // 01DE ADD R14 K69 R14
- 0x7C300400, // 01DF CALL R12 2
- 0x88300113, // 01E0 GETMBR R12 R0 K19
- 0x88301943, // 01E1 GETMBR R12 R12 K67
- 0x8C301947, // 01E2 GETMET R12 R12 K71
- 0x7C300200, // 01E3 CALL R12 1
- 0x88300113, // 01E4 GETMBR R12 R0 K19
- 0x88301943, // 01E5 GETMBR R12 R12 K67
- 0x8C301948, // 01E6 GETMET R12 R12 K72
- 0x7C300200, // 01E7 CALL R12 1
- 0x7001FFFF, // 01E8 JMP #01E9
- 0xB82E0200, // 01E9 GETNGBL R11 K1
- 0x882C172C, // 01EA GETMBR R11 R11 K44
- 0x900E2A0B, // 01EB SETMBR R3 K21 R11
- 0x4C2C0000, // 01EC LDNIL R11
- 0x80041600, // 01ED RET 1 R11
- 0x80000000, // 01EE RET 0
+ 0x5C682A00, // 019B MOVE R26 R21
+ 0x7C580800, // 019C CALL R22 4
+ 0x88580112, // 019D GETMBR R22 R0 K18
+ 0x8C582D40, // 019E GETMET R22 R22 K64
+ 0x5C600200, // 019F MOVE R24 R1
+ 0x7C580400, // 01A0 CALL R22 2
+ 0x8C580B09, // 01A1 GETMET R22 R5 K9
+ 0x7C580200, // 01A2 CALL R22 1
+ 0x8C5C2D0A, // 01A3 GETMET R23 R22 K10
+ 0x58640005, // 01A4 LDCONST R25 K5
+ 0x88680B0B, // 01A5 GETMBR R26 R5 K11
+ 0xB86E0200, // 01A6 GETNGBL R27 K1
+ 0x886C372B, // 01A7 GETMBR R27 R27 K43
+ 0x7C5C0800, // 01A8 CALL R23 4
+ 0x8C5C2D0A, // 01A9 GETMET R23 R22 K10
+ 0x58640007, // 01AA LDCONST R25 K7
+ 0x88680B0B, // 01AB GETMBR R26 R5 K11
+ 0x586C0007, // 01AC LDCONST R27 K7
+ 0x7C5C0800, // 01AD CALL R23 4
+ 0x545E0007, // 01AE LDINT R23 8
+ 0x900E0817, // 01AF SETMBR R3 K4 R23
+ 0x80042C00, // 01B0 RET 1 R22
+ 0x7002003A, // 01B1 JMP #01ED
+ 0x54220008, // 01B2 LDINT R8 9
+ 0x1C200E08, // 01B3 EQ R8 R7 R8
+ 0x7822000B, // 01B4 JMPF R8 #01C1
+ 0x8C200506, // 01B5 GETMET R8 R2 K6
+ 0x58280005, // 01B6 LDCONST R10 K5
+ 0x7C200400, // 01B7 CALL R8 2
+ 0x8C240341, // 01B8 GETMET R9 R1 K65
+ 0x5C2C1000, // 01B9 MOVE R11 R8
+ 0x7C240400, // 01BA CALL R9 2
+ 0xB8260200, // 01BB GETNGBL R9 K1
+ 0x8824132B, // 01BC GETMBR R9 R9 K43
+ 0x900E2809, // 01BD SETMBR R3 K20 R9
+ 0x4C240000, // 01BE LDNIL R9
+ 0x80041200, // 01BF RET 1 R9
+ 0x7002002B, // 01C0 JMP #01ED
+ 0x54220009, // 01C1 LDINT R8 10
+ 0x1C200E08, // 01C2 EQ R8 R7 R8
+ 0x78220028, // 01C3 JMPF R8 #01ED
+ 0x8C200506, // 01C4 GETMET R8 R2 K6
+ 0x58280005, // 01C5 LDCONST R10 K5
+ 0x7C200400, // 01C6 CALL R8 2
+ 0x88240112, // 01C7 GETMBR R9 R0 K18
+ 0x88241342, // 01C8 GETMBR R9 R9 K66
+ 0x8C241343, // 01C9 GETMET R9 R9 K67
+ 0x7C240200, // 01CA CALL R9 1
+ 0x28281107, // 01CB GE R10 R8 K7
+ 0x782A001A, // 01CC JMPF R10 #01E8
+ 0x6028000C, // 01CD GETGBL R10 G12
+ 0x5C2C1200, // 01CE MOVE R11 R9
+ 0x7C280200, // 01CF CALL R10 1
+ 0x1828100A, // 01D0 LE R10 R8 R10
+ 0x782A0015, // 01D1 JMPF R10 #01E8
+ 0x04281107, // 01D2 SUB R10 R8 K7
+ 0x9428120A, // 01D3 GETIDX R10 R9 R10
+ 0xB82E3800, // 01D4 GETNGBL R11 K28
+ 0x8C2C1721, // 01D5 GETMET R11 R11 K33
+ 0x88340345, // 01D6 GETMBR R13 R1 K69
+ 0x8C341B3C, // 01D7 GETMET R13 R13 K60
+ 0x7C340200, // 01D8 CALL R13 1
+ 0x8C341B3D, // 01D9 GETMET R13 R13 K61
+ 0x7C340200, // 01DA CALL R13 1
+ 0x8C341B23, // 01DB GETMET R13 R13 K35
+ 0x7C340200, // 01DC CALL R13 1
+ 0x0036880D, // 01DD ADD R13 K68 R13
+ 0x7C2C0400, // 01DE CALL R11 2
+ 0x882C0112, // 01DF GETMBR R11 R0 K18
+ 0x882C1742, // 01E0 GETMBR R11 R11 K66
+ 0x8C2C1746, // 01E1 GETMET R11 R11 K70
+ 0x7C2C0200, // 01E2 CALL R11 1
+ 0x882C0112, // 01E3 GETMBR R11 R0 K18
+ 0x882C1742, // 01E4 GETMBR R11 R11 K66
+ 0x8C2C1747, // 01E5 GETMET R11 R11 K71
+ 0x7C2C0200, // 01E6 CALL R11 1
+ 0x7001FFFF, // 01E7 JMP #01E8
+ 0xB82A0200, // 01E8 GETNGBL R10 K1
+ 0x8828152B, // 01E9 GETMBR R10 R10 K43
+ 0x900E280A, // 01EA SETMBR R3 K20 R10
+ 0x4C280000, // 01EB LDNIL R10
+ 0x80041400, // 01EC RET 1 R10
+ 0x80000000, // 01ED RET 0
})
)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
index 6c610d038..cc24c595e 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
@@ -7,32 +7,40 @@
extern const bclass be_class_Matter_Session;
/********************************************************************
-** Solidified function: set_fabric_label
+** Solidified function: get_ca_pub
********************************************************************/
-be_local_closure(Matter_Session_set_fabric_label, /* name */
+be_local_closure(Matter_Session_get_ca_pub, /* name */
be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
+ 5, /* nstack */
+ 1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(fabric_label),
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(root_ca_certificate),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(parse),
+ /* K4 */ be_nested_str_weak(findsubval),
}),
- be_str_weak(set_fabric_label),
+ be_str_weak(get_ca_pub),
&be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x60080004, // 0000 GETGBL R2 G4
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x1C080500, // 0003 EQ R2 R2 K0
- 0x780A0000, // 0004 JMPF R2 #0006
- 0x90020201, // 0005 SETMBR R0 K1 R1
- 0x80000000, // 0006 RET 0
+ ( &(const binstruction[12]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x78060008, // 0001 JMPF R1 #000B
+ 0xB8060200, // 0002 GETNGBL R1 K1
+ 0x88040302, // 0003 GETMBR R1 R1 K2
+ 0x8C040303, // 0004 GETMET R1 R1 K3
+ 0x880C0100, // 0005 GETMBR R3 R0 K0
+ 0x7C040400, // 0006 CALL R1 2
+ 0x8C080304, // 0007 GETMET R2 R1 K4
+ 0x54120008, // 0008 LDINT R4 9
+ 0x7C080400, // 0009 CALL R2 2
+ 0x80040400, // 000A RET 1 R2
+ 0x80000000, // 000B RET 0
})
)
);
@@ -40,9 +48,9 @@ be_local_closure(Matter_Session_set_fabric_label, /* name */
/********************************************************************
-** Solidified function: set_no_expiration
+** Solidified function: get_noc
********************************************************************/
-be_local_closure(Matter_Session_set_no_expiration, /* name */
+be_local_closure(Matter_Session_get_noc, /* name */
be_nested_proto(
2, /* nstack */
1, /* argc */
@@ -53,14 +61,123 @@ be_local_closure(Matter_Session_set_no_expiration, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(expiration),
+ /* K0 */ be_nested_str_weak(noc),
}),
- be_str_weak(set_no_expiration),
+ be_str_weak(get_noc),
&be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x4C040000, // 0000 LDNIL R1
- 0x90020001, // 0001 SETMBR R0 K0 R1
- 0x80000000, // 0002 RET 0
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_i2r_privacy
+********************************************************************/
+be_local_closure(Matter_Session_get_i2r_privacy, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(_i2r_privacy),
+ /* K1 */ be_nested_str_weak(crypto),
+ /* K2 */ be_nested_str_weak(HKDF_SHA256),
+ /* K3 */ be_nested_str_weak(derive),
+ /* K4 */ be_nested_str_weak(get_i2r),
+ /* K5 */ be_nested_str_weak(fromstring),
+ /* K6 */ be_nested_str_weak(PrivacyKey),
+ }),
+ be_str_weak(get_i2r_privacy),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x4C080000, // 0001 LDNIL R2
+ 0x1C040202, // 0002 EQ R1 R1 R2
+ 0x7806000F, // 0003 JMPF R1 #0014
+ 0xA4060200, // 0004 IMPORT R1 K1
+ 0x8C080302, // 0005 GETMET R2 R1 K2
+ 0x7C080200, // 0006 CALL R2 1
+ 0x8C080503, // 0007 GETMET R2 R2 K3
+ 0x8C100104, // 0008 GETMET R4 R0 K4
+ 0x7C100200, // 0009 CALL R4 1
+ 0x60140015, // 000A GETGBL R5 G21
+ 0x7C140000, // 000B CALL R5 0
+ 0x60180015, // 000C GETGBL R6 G21
+ 0x7C180000, // 000D CALL R6 0
+ 0x8C180D05, // 000E GETMET R6 R6 K5
+ 0x58200006, // 000F LDCONST R8 K6
+ 0x7C180400, // 0010 CALL R6 2
+ 0x541E000F, // 0011 LDINT R7 16
+ 0x7C080A00, // 0012 CALL R2 5
+ 0x90020002, // 0013 SETMBR R0 K0 R2
+ 0x88040100, // 0014 GETMBR R1 R0 K0
+ 0x80040200, // 0015 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_ipk_epoch_key
+********************************************************************/
+be_local_closure(Matter_Session_set_ipk_epoch_key, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(ipk_epoch_key),
+ }),
+ be_str_weak(set_ipk_epoch_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_persist
+********************************************************************/
+be_local_closure(Matter_Session_set_persist, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(_persist),
+ }),
+ be_str_weak(set_persist),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080017, // 0000 GETGBL R2 G23
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x90020002, // 0003 SETMBR R0 K0 R2
+ 0x80000000, // 0004 RET 0
})
)
);
@@ -95,11 +212,11 @@ be_local_closure(Matter_Session_set_mode, /* name */
/********************************************************************
-** Solidified function: set_expire_time
+** Solidified function: set_ca
********************************************************************/
-be_local_closure(Matter_Session_set_expire_time, /* name */
+be_local_closure(Matter_Session_set_ca, /* name */
be_nested_proto(
- 4, /* nstack */
+ 2, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -108,70 +225,13 @@ be_local_closure(Matter_Session_set_expire_time, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(expiration),
+ /* K0 */ be_nested_str_weak(root_ca_certificate),
}),
- be_str_weak(set_expire_time),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x60080009, // 0000 GETGBL R2 G9
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x90020002, // 0003 SETMBR R0 K0 R2
- 0x80000000, // 0004 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_i2r
-********************************************************************/
-be_local_closure(Matter_Session_get_i2r, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(i2rkey),
- }),
- be_str_weak(get_i2r),
+ be_str_weak(set_ca),
&be_const_str_solidified,
( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ipk_epoch_key
-********************************************************************/
-be_local_closure(Matter_Session_get_ipk_epoch_key, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(ipk_epoch_key),
- }),
- be_str_weak(get_ipk_epoch_key),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
})
)
);
@@ -222,97 +282,159 @@ be_local_closure(Matter_Session_set_expire_in_seconds, /* name */
/********************************************************************
-** Solidified function: set_ipk_epoch_key
+** Solidified function: fromjson
********************************************************************/
-be_local_closure(Matter_Session_set_ipk_epoch_key, /* name */
+be_local_closure(Matter_Session_fromjson, /* name */
be_nested_proto(
- 2, /* nstack */
+ 16, /* nstack */
2, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[19]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_Session),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(introspect),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(Session),
+ /* K5 */ be_nested_str_weak(keys),
+ /* K6 */ be_nested_str_weak(counter_rcv),
+ /* K7 */ be_nested_str_weak(reset),
+ /* K8 */ be_nested_str_weak(counter_snd),
+ /* K9 */ be_nested_str_weak(find),
+ /* K10 */ be_nested_str_weak(0x),
+ /* K11 */ be_const_int(0),
+ /* K12 */ be_nested_str_weak(set),
+ /* K13 */ be_nested_str_weak(fromhex),
+ /* K14 */ be_const_int(2),
+ /* K15 */ be_const_int(2147483647),
+ /* K16 */ be_nested_str_weak(_X24_X24),
+ /* K17 */ be_nested_str_weak(fromb64),
+ /* K18 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(fromjson),
+ &be_const_str_solidified,
+ ( &(const binstruction[88]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0xA4120400, // 0002 IMPORT R4 K2
+ 0xB8160600, // 0003 GETNGBL R5 K3
+ 0x8C140B04, // 0004 GETMET R5 R5 K4
+ 0x5C1C0000, // 0005 MOVE R7 R0
+ 0x7C140400, // 0006 CALL R5 2
+ 0x60180010, // 0007 GETGBL R6 G16
+ 0x8C1C0305, // 0008 GETMET R7 R1 K5
+ 0x7C1C0200, // 0009 CALL R7 1
+ 0x7C180200, // 000A CALL R6 1
+ 0xA8020047, // 000B EXBLK 0 #0054
+ 0x5C1C0C00, // 000C MOVE R7 R6
+ 0x7C1C0000, // 000D CALL R7 0
+ 0x94200207, // 000E GETIDX R8 R1 R7
+ 0x1C240F06, // 000F EQ R9 R7 K6
+ 0x78260006, // 0010 JMPF R9 #0018
+ 0x88240B06, // 0011 GETMBR R9 R5 K6
+ 0x8C241307, // 0012 GETMET R9 R9 K7
+ 0x602C0009, // 0013 GETGBL R11 G9
+ 0x5C301000, // 0014 MOVE R12 R8
+ 0x7C2C0200, // 0015 CALL R11 1
+ 0x7C240400, // 0016 CALL R9 2
+ 0x7002003A, // 0017 JMP #0053
+ 0x1C240F08, // 0018 EQ R9 R7 K8
+ 0x78260006, // 0019 JMPF R9 #0021
+ 0x88240B08, // 001A GETMBR R9 R5 K8
+ 0x8C241307, // 001B GETMET R9 R9 K7
+ 0x602C0009, // 001C GETGBL R11 G9
+ 0x5C301000, // 001D MOVE R12 R8
+ 0x7C2C0200, // 001E CALL R11 1
+ 0x7C240400, // 001F CALL R9 2
+ 0x70020031, // 0020 JMP #0053
+ 0x60240004, // 0021 GETGBL R9 G4
+ 0x5C281000, // 0022 MOVE R10 R8
+ 0x7C240200, // 0023 CALL R9 1
+ 0x1C241301, // 0024 EQ R9 R9 K1
+ 0x78260027, // 0025 JMPF R9 #004E
+ 0x8C240709, // 0026 GETMET R9 R3 K9
+ 0x5C2C1000, // 0027 MOVE R11 R8
+ 0x5830000A, // 0028 LDCONST R12 K10
+ 0x7C240600, // 0029 CALL R9 3
+ 0x1C24130B, // 002A EQ R9 R9 K11
+ 0x7826000A, // 002B JMPF R9 #0037
+ 0x8C24090C, // 002C GETMET R9 R4 K12
+ 0x5C2C0A00, // 002D MOVE R11 R5
+ 0x5C300E00, // 002E MOVE R12 R7
+ 0x60340015, // 002F GETGBL R13 G21
+ 0x7C340000, // 0030 CALL R13 0
+ 0x8C341B0D, // 0031 GETMET R13 R13 K13
+ 0x403E1D0F, // 0032 CONNECT R15 K14 K15
+ 0x943C100F, // 0033 GETIDX R15 R8 R15
+ 0x7C340400, // 0034 CALL R13 2
+ 0x7C240800, // 0035 CALL R9 4
+ 0x70020015, // 0036 JMP #004D
+ 0x8C240709, // 0037 GETMET R9 R3 K9
+ 0x5C2C1000, // 0038 MOVE R11 R8
+ 0x58300010, // 0039 LDCONST R12 K16
+ 0x7C240600, // 003A CALL R9 3
+ 0x1C24130B, // 003B EQ R9 R9 K11
+ 0x7826000A, // 003C JMPF R9 #0048
+ 0x8C24090C, // 003D GETMET R9 R4 K12
+ 0x5C2C0A00, // 003E MOVE R11 R5
+ 0x5C300E00, // 003F MOVE R12 R7
+ 0x60340015, // 0040 GETGBL R13 G21
+ 0x7C340000, // 0041 CALL R13 0
+ 0x8C341B11, // 0042 GETMET R13 R13 K17
+ 0x403E1D0F, // 0043 CONNECT R15 K14 K15
+ 0x943C100F, // 0044 GETIDX R15 R8 R15
+ 0x7C340400, // 0045 CALL R13 2
+ 0x7C240800, // 0046 CALL R9 4
+ 0x70020004, // 0047 JMP #004D
+ 0x8C24090C, // 0048 GETMET R9 R4 K12
+ 0x5C2C0A00, // 0049 MOVE R11 R5
+ 0x5C300E00, // 004A MOVE R12 R7
+ 0x5C341000, // 004B MOVE R13 R8
+ 0x7C240800, // 004C CALL R9 4
+ 0x70020004, // 004D JMP #0053
+ 0x8C24090C, // 004E GETMET R9 R4 K12
+ 0x5C2C0A00, // 004F MOVE R11 R5
+ 0x5C300E00, // 0050 MOVE R12 R7
+ 0x5C341000, // 0051 MOVE R13 R8
+ 0x7C240800, // 0052 CALL R9 4
+ 0x7001FFB7, // 0053 JMP #000C
+ 0x58180012, // 0054 LDCONST R6 K18
+ 0xAC180200, // 0055 CATCH R6 1 0
+ 0xB0080000, // 0056 RAISE 2 R0 R0
+ 0x80040A00, // 0057 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_noc
+********************************************************************/
+be_local_closure(Matter_Session_set_noc, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(ipk_epoch_key),
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(noc),
+ /* K1 */ be_nested_str_weak(icac),
}),
- be_str_weak(set_ipk_epoch_key),
+ be_str_weak(set_noc),
&be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
+ ( &(const binstruction[ 3]) { /* code */
0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_deviceid
-********************************************************************/
-be_local_closure(Matter_Session_get_deviceid, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(deviceid),
- }),
- be_str_weak(get_deviceid),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: has_expired
-********************************************************************/
-be_local_closure(Matter_Session_has_expired, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(rtc),
- /* K2 */ be_nested_str_weak(utc),
- /* K3 */ be_nested_str_weak(expiration),
- }),
- be_str_weak(has_expired),
- &be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0003, // 0002 JMPF R2 #0007
- 0xB80A0000, // 0003 GETNGBL R2 K0
- 0x8C080501, // 0004 GETMET R2 R2 K1
- 0x7C080200, // 0005 CALL R2 1
- 0x94040502, // 0006 GETIDX R1 R2 K2
- 0x88080103, // 0007 GETMBR R2 R0 K3
- 0x4C0C0000, // 0008 LDNIL R3
- 0x20080403, // 0009 NE R2 R2 R3
- 0x780A0002, // 000A JMPF R2 #000E
- 0x88080103, // 000B GETMBR R2 R0 K3
- 0x28080202, // 000C GE R2 R1 R2
- 0x80040400, // 000D RET 1 R2
- 0x50080000, // 000E LDBOOL R2 0 0
- 0x80040400, // 000F RET 1 R2
+ 0x90020202, // 0001 SETMBR R0 K1 R2
+ 0x80000000, // 0002 RET 0
})
)
);
@@ -346,69 +468,6 @@ be_local_closure(Matter_Session_get_r2i, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: get_fabric
-********************************************************************/
-be_local_closure(Matter_Session_get_fabric, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(fabric),
- }),
- be_str_weak(get_fabric),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_keys
-********************************************************************/
-be_local_closure(Matter_Session_set_keys, /* name */
- be_nested_proto(
- 6, /* nstack */
- 5, /* 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(i2rkey),
- /* K1 */ be_nested_str_weak(_i2r_privacy),
- /* K2 */ be_nested_str_weak(r2ikey),
- /* K3 */ be_nested_str_weak(attestation_challenge),
- /* K4 */ be_nested_str_weak(session_timestamp),
- }),
- be_str_weak(set_keys),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x4C140000, // 0001 LDNIL R5
- 0x90020205, // 0002 SETMBR R0 K1 R5
- 0x90020402, // 0003 SETMBR R0 K2 R2
- 0x90020603, // 0004 SETMBR R0 K3 R3
- 0x90020804, // 0005 SETMBR R0 K4 R4
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: tojson
********************************************************************/
@@ -555,327 +614,6 @@ be_local_closure(Matter_Session_tojson, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: get_ipk_group_key
-********************************************************************/
-be_local_closure(Matter_Session_get_ipk_group_key, /* name */
- be_nested_proto(
- 10, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(ipk_epoch_key),
- /* K1 */ be_nested_str_weak(fabric_compressed),
- /* K2 */ be_nested_str_weak(crypto),
- /* K3 */ be_nested_str_weak(HKDF_SHA256),
- /* K4 */ be_nested_str_weak(fromstring),
- /* K5 */ be_nested_str_weak(__GROUP_KEY),
- /* K6 */ be_nested_str_weak(derive),
- }),
- be_str_weak(get_ipk_group_key),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x4C080000, // 0001 LDNIL R2
- 0x1C040202, // 0002 EQ R1 R1 R2
- 0x74060003, // 0003 JMPT R1 #0008
- 0x88040101, // 0004 GETMBR R1 R0 K1
- 0x4C080000, // 0005 LDNIL R2
- 0x1C040202, // 0006 EQ R1 R1 R2
- 0x78060001, // 0007 JMPF R1 #000A
- 0x4C040000, // 0008 LDNIL R1
- 0x80040200, // 0009 RET 1 R1
- 0xA4060400, // 000A IMPORT R1 K2
- 0x8C080303, // 000B GETMET R2 R1 K3
- 0x7C080200, // 000C CALL R2 1
- 0x600C0015, // 000D GETGBL R3 G21
- 0x7C0C0000, // 000E CALL R3 0
- 0x8C0C0704, // 000F GETMET R3 R3 K4
- 0x88140105, // 0010 GETMBR R5 R0 K5
- 0x7C0C0400, // 0011 CALL R3 2
- 0x8C100506, // 0012 GETMET R4 R2 K6
- 0x88180100, // 0013 GETMBR R6 R0 K0
- 0x881C0101, // 0014 GETMBR R7 R0 K1
- 0x5C200600, // 0015 MOVE R8 R3
- 0x5426000F, // 0016 LDINT R9 16
- 0x7C100A00, // 0017 CALL R4 5
- 0x80040800, // 0018 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ca_pub
-********************************************************************/
-be_local_closure(Matter_Session_get_ca_pub, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* 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(root_ca_certificate),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TLV),
- /* K3 */ be_nested_str_weak(parse),
- /* K4 */ be_nested_str_weak(findsubval),
- }),
- be_str_weak(get_ca_pub),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x78060008, // 0001 JMPF R1 #000B
- 0xB8060200, // 0002 GETNGBL R1 K1
- 0x88040302, // 0003 GETMBR R1 R1 K2
- 0x8C040303, // 0004 GETMET R1 R1 K3
- 0x880C0100, // 0005 GETMBR R3 R0 K0
- 0x7C040400, // 0006 CALL R1 2
- 0x8C080304, // 0007 GETMET R2 R1 K4
- 0x54120008, // 0008 LDINT R4 9
- 0x7C080400, // 0009 CALL R2 2
- 0x80040400, // 000A RET 1 R2
- 0x80000000, // 000B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: fromjson
-********************************************************************/
-be_local_closure(Matter_Session_fromjson, /* name */
- be_nested_proto(
- 16, /* nstack */
- 2, /* argc */
- 4, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[19]) { /* constants */
- /* K0 */ be_const_class(be_class_Matter_Session),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(introspect),
- /* K3 */ be_nested_str_weak(matter),
- /* K4 */ be_nested_str_weak(Session),
- /* K5 */ be_nested_str_weak(keys),
- /* K6 */ be_nested_str_weak(counter_rcv),
- /* K7 */ be_nested_str_weak(reset),
- /* K8 */ be_nested_str_weak(counter_snd),
- /* K9 */ be_nested_str_weak(find),
- /* K10 */ be_nested_str_weak(0x),
- /* K11 */ be_const_int(0),
- /* K12 */ be_nested_str_weak(set),
- /* K13 */ be_nested_str_weak(fromhex),
- /* K14 */ be_const_int(2),
- /* K15 */ be_const_int(2147483647),
- /* K16 */ be_nested_str_weak(_X24_X24),
- /* K17 */ be_nested_str_weak(fromb64),
- /* K18 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(fromjson),
- &be_const_str_solidified,
- ( &(const binstruction[88]) { /* code */
- 0x58080000, // 0000 LDCONST R2 K0
- 0xA40E0200, // 0001 IMPORT R3 K1
- 0xA4120400, // 0002 IMPORT R4 K2
- 0xB8160600, // 0003 GETNGBL R5 K3
- 0x8C140B04, // 0004 GETMET R5 R5 K4
- 0x5C1C0000, // 0005 MOVE R7 R0
- 0x7C140400, // 0006 CALL R5 2
- 0x60180010, // 0007 GETGBL R6 G16
- 0x8C1C0305, // 0008 GETMET R7 R1 K5
- 0x7C1C0200, // 0009 CALL R7 1
- 0x7C180200, // 000A CALL R6 1
- 0xA8020047, // 000B EXBLK 0 #0054
- 0x5C1C0C00, // 000C MOVE R7 R6
- 0x7C1C0000, // 000D CALL R7 0
- 0x94200207, // 000E GETIDX R8 R1 R7
- 0x1C240F06, // 000F EQ R9 R7 K6
- 0x78260006, // 0010 JMPF R9 #0018
- 0x88240B06, // 0011 GETMBR R9 R5 K6
- 0x8C241307, // 0012 GETMET R9 R9 K7
- 0x602C0009, // 0013 GETGBL R11 G9
- 0x5C301000, // 0014 MOVE R12 R8
- 0x7C2C0200, // 0015 CALL R11 1
- 0x7C240400, // 0016 CALL R9 2
- 0x7002003A, // 0017 JMP #0053
- 0x1C240F08, // 0018 EQ R9 R7 K8
- 0x78260006, // 0019 JMPF R9 #0021
- 0x88240B08, // 001A GETMBR R9 R5 K8
- 0x8C241307, // 001B GETMET R9 R9 K7
- 0x602C0009, // 001C GETGBL R11 G9
- 0x5C301000, // 001D MOVE R12 R8
- 0x7C2C0200, // 001E CALL R11 1
- 0x7C240400, // 001F CALL R9 2
- 0x70020031, // 0020 JMP #0053
- 0x60240004, // 0021 GETGBL R9 G4
- 0x5C281000, // 0022 MOVE R10 R8
- 0x7C240200, // 0023 CALL R9 1
- 0x1C241301, // 0024 EQ R9 R9 K1
- 0x78260027, // 0025 JMPF R9 #004E
- 0x8C240709, // 0026 GETMET R9 R3 K9
- 0x5C2C1000, // 0027 MOVE R11 R8
- 0x5830000A, // 0028 LDCONST R12 K10
- 0x7C240600, // 0029 CALL R9 3
- 0x1C24130B, // 002A EQ R9 R9 K11
- 0x7826000A, // 002B JMPF R9 #0037
- 0x8C24090C, // 002C GETMET R9 R4 K12
- 0x5C2C0A00, // 002D MOVE R11 R5
- 0x5C300E00, // 002E MOVE R12 R7
- 0x60340015, // 002F GETGBL R13 G21
- 0x7C340000, // 0030 CALL R13 0
- 0x8C341B0D, // 0031 GETMET R13 R13 K13
- 0x403E1D0F, // 0032 CONNECT R15 K14 K15
- 0x943C100F, // 0033 GETIDX R15 R8 R15
- 0x7C340400, // 0034 CALL R13 2
- 0x7C240800, // 0035 CALL R9 4
- 0x70020015, // 0036 JMP #004D
- 0x8C240709, // 0037 GETMET R9 R3 K9
- 0x5C2C1000, // 0038 MOVE R11 R8
- 0x58300010, // 0039 LDCONST R12 K16
- 0x7C240600, // 003A CALL R9 3
- 0x1C24130B, // 003B EQ R9 R9 K11
- 0x7826000A, // 003C JMPF R9 #0048
- 0x8C24090C, // 003D GETMET R9 R4 K12
- 0x5C2C0A00, // 003E MOVE R11 R5
- 0x5C300E00, // 003F MOVE R12 R7
- 0x60340015, // 0040 GETGBL R13 G21
- 0x7C340000, // 0041 CALL R13 0
- 0x8C341B11, // 0042 GETMET R13 R13 K17
- 0x403E1D0F, // 0043 CONNECT R15 K14 K15
- 0x943C100F, // 0044 GETIDX R15 R8 R15
- 0x7C340400, // 0045 CALL R13 2
- 0x7C240800, // 0046 CALL R9 4
- 0x70020004, // 0047 JMP #004D
- 0x8C24090C, // 0048 GETMET R9 R4 K12
- 0x5C2C0A00, // 0049 MOVE R11 R5
- 0x5C300E00, // 004A MOVE R12 R7
- 0x5C341000, // 004B MOVE R13 R8
- 0x7C240800, // 004C CALL R9 4
- 0x70020004, // 004D JMP #0053
- 0x8C24090C, // 004E GETMET R9 R4 K12
- 0x5C2C0A00, // 004F MOVE R11 R5
- 0x5C300E00, // 0050 MOVE R12 R7
- 0x5C341000, // 0051 MOVE R13 R8
- 0x7C240800, // 0052 CALL R9 4
- 0x7001FFB7, // 0053 JMP #000C
- 0x58180012, // 0054 LDCONST R6 K18
- 0xAC180200, // 0055 CATCH R6 1 0
- 0xB0080000, // 0056 RAISE 2 R0 R0
- 0x80040A00, // 0057 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_ca
-********************************************************************/
-be_local_closure(Matter_Session_set_ca, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(root_ca_certificate),
- }),
- be_str_weak(set_ca),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_pk
-********************************************************************/
-be_local_closure(Matter_Session_get_pk, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(no_private_key),
- /* K1 */ be_nested_str_weak(crypto),
- /* K2 */ be_nested_str_weak(random),
- }),
- be_str_weak(get_pk),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x74060004, // 0001 JMPT R1 #0007
- 0xA4060200, // 0002 IMPORT R1 K1
- 0x8C080302, // 0003 GETMET R2 R1 K2
- 0x5412001F, // 0004 LDINT R4 32
- 0x7C080400, // 0005 CALL R2 2
- 0x90020002, // 0006 SETMBR R0 K0 R2
- 0x88040100, // 0007 GETMBR R1 R0 K0
- 0x80040200, // 0008 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_persist
-********************************************************************/
-be_local_closure(Matter_Session_set_persist, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(_persist),
- }),
- be_str_weak(set_persist),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x60080017, // 0000 GETGBL R2 G23
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x90020002, // 0003 SETMBR R0 K0 R2
- 0x80000000, // 0004 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: close
********************************************************************/
@@ -983,6 +721,117 @@ be_local_closure(Matter_Session_close, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: has_expired
+********************************************************************/
+be_local_closure(Matter_Session_has_expired, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(rtc),
+ /* K2 */ be_nested_str_weak(utc),
+ /* K3 */ be_nested_str_weak(expiration),
+ }),
+ be_str_weak(has_expired),
+ &be_const_str_solidified,
+ ( &(const binstruction[16]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0003, // 0002 JMPF R2 #0007
+ 0xB80A0000, // 0003 GETNGBL R2 K0
+ 0x8C080501, // 0004 GETMET R2 R2 K1
+ 0x7C080200, // 0005 CALL R2 1
+ 0x94040502, // 0006 GETIDX R1 R2 K2
+ 0x88080103, // 0007 GETMBR R2 R0 K3
+ 0x4C0C0000, // 0008 LDNIL R3
+ 0x20080403, // 0009 NE R2 R2 R3
+ 0x780A0002, // 000A JMPF R2 #000E
+ 0x88080103, // 000B GETMBR R2 R0 K3
+ 0x28080202, // 000C GE R2 R1 R2
+ 0x80040400, // 000D RET 1 R2
+ 0x50080000, // 000E LDBOOL R2 0 0
+ 0x80040400, // 000F RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_fabric_device
+********************************************************************/
+be_local_closure(Matter_Session_set_fabric_device, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 4, /* 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(fabric),
+ /* K1 */ be_nested_str_weak(deviceid),
+ /* K2 */ be_nested_str_weak(fabric_compressed),
+ /* K3 */ be_nested_str_weak(__store),
+ /* K4 */ be_nested_str_weak(remove_redundant_session),
+ }),
+ be_str_weak(set_fabric_device),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x90020202, // 0001 SETMBR R0 K1 R2
+ 0x90020403, // 0002 SETMBR R0 K2 R3
+ 0x88100103, // 0003 GETMBR R4 R0 K3
+ 0x8C100904, // 0004 GETMET R4 R4 K4
+ 0x5C180000, // 0005 MOVE R6 R0
+ 0x7C100400, // 0006 CALL R4 2
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_expire_time
+********************************************************************/
+be_local_closure(Matter_Session_set_expire_time, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(expiration),
+ }),
+ be_str_weak(set_expire_time),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080009, // 0000 GETGBL R2 G9
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x90020002, // 0003 SETMBR R0 K0 R2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: gen_CSR
********************************************************************/
@@ -1093,12 +942,66 @@ be_local_closure(Matter_Session_gen_CSR, /* name */
/********************************************************************
-** Solidified function: set_noc
+** Solidified function: get_fabric
********************************************************************/
-be_local_closure(Matter_Session_set_noc, /* name */
+be_local_closure(Matter_Session_get_fabric, /* name */
be_nested_proto(
- 3, /* nstack */
- 3, /* argc */
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(fabric),
+ }),
+ be_str_weak(get_fabric),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_fabric_compressed
+********************************************************************/
+be_local_closure(Matter_Session_get_fabric_compressed, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(fabric_compressed),
+ }),
+ be_str_weak(get_fabric_compressed),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_fabric_label
+********************************************************************/
+be_local_closure(Matter_Session_set_fabric_label, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -1106,14 +1009,46 @@ be_local_closure(Matter_Session_set_noc, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(noc),
- /* K1 */ be_nested_str_weak(icac),
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(fabric_label),
}),
- be_str_weak(set_noc),
+ be_str_weak(set_fabric_label),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x60080004, // 0000 GETGBL R2 G4
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x1C080500, // 0003 EQ R2 R2 K0
+ 0x780A0000, // 0004 JMPF R2 #0006
+ 0x90020201, // 0005 SETMBR R0 K1 R1
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_no_expiration
+********************************************************************/
+be_local_closure(Matter_Session_set_no_expiration, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(expiration),
+ }),
+ be_str_weak(set_no_expiration),
&be_const_str_solidified,
( &(const binstruction[ 3]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020202, // 0001 SETMBR R0 K1 R2
+ 0x4C040000, // 0000 LDNIL R1
+ 0x90020001, // 0001 SETMBR R0 K0 R1
0x80000000, // 0002 RET 0
})
)
@@ -1121,60 +1056,6 @@ be_local_closure(Matter_Session_set_noc, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: get_noc
-********************************************************************/
-be_local_closure(Matter_Session_get_noc, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(noc),
- }),
- be_str_weak(get_noc),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ac
-********************************************************************/
-be_local_closure(Matter_Session_get_ac, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(attestation_challenge),
- }),
- be_str_weak(get_ac),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: init
********************************************************************/
@@ -1247,6 +1128,245 @@ be_local_closure(Matter_Session_init, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: save
+********************************************************************/
+be_local_closure(Matter_Session_save, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(__store),
+ /* K1 */ be_nested_str_weak(save),
+ }),
+ be_str_weak(save),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_keys
+********************************************************************/
+be_local_closure(Matter_Session_set_keys, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 5, /* 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(i2rkey),
+ /* K1 */ be_nested_str_weak(_i2r_privacy),
+ /* K2 */ be_nested_str_weak(r2ikey),
+ /* K3 */ be_nested_str_weak(attestation_challenge),
+ /* K4 */ be_nested_str_weak(session_timestamp),
+ }),
+ be_str_weak(set_keys),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x4C140000, // 0001 LDNIL R5
+ 0x90020205, // 0002 SETMBR R0 K1 R5
+ 0x90020402, // 0003 SETMBR R0 K2 R2
+ 0x90020603, // 0004 SETMBR R0 K3 R3
+ 0x90020804, // 0005 SETMBR R0 K4 R4
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ac
+********************************************************************/
+be_local_closure(Matter_Session_get_ac, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(attestation_challenge),
+ }),
+ be_str_weak(get_ac),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ipk_group_key
+********************************************************************/
+be_local_closure(Matter_Session_get_ipk_group_key, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(ipk_epoch_key),
+ /* K1 */ be_nested_str_weak(fabric_compressed),
+ /* K2 */ be_nested_str_weak(crypto),
+ /* K3 */ be_nested_str_weak(HKDF_SHA256),
+ /* K4 */ be_nested_str_weak(fromstring),
+ /* K5 */ be_nested_str_weak(__GROUP_KEY),
+ /* K6 */ be_nested_str_weak(derive),
+ }),
+ be_str_weak(get_ipk_group_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x4C080000, // 0001 LDNIL R2
+ 0x1C040202, // 0002 EQ R1 R1 R2
+ 0x74060003, // 0003 JMPT R1 #0008
+ 0x88040101, // 0004 GETMBR R1 R0 K1
+ 0x4C080000, // 0005 LDNIL R2
+ 0x1C040202, // 0006 EQ R1 R1 R2
+ 0x78060001, // 0007 JMPF R1 #000A
+ 0x4C040000, // 0008 LDNIL R1
+ 0x80040200, // 0009 RET 1 R1
+ 0xA4060400, // 000A IMPORT R1 K2
+ 0x8C080303, // 000B GETMET R2 R1 K3
+ 0x7C080200, // 000C CALL R2 1
+ 0x600C0015, // 000D GETGBL R3 G21
+ 0x7C0C0000, // 000E CALL R3 0
+ 0x8C0C0704, // 000F GETMET R3 R3 K4
+ 0x88140105, // 0010 GETMBR R5 R0 K5
+ 0x7C0C0400, // 0011 CALL R3 2
+ 0x8C100506, // 0012 GETMET R4 R2 K6
+ 0x88180100, // 0013 GETMBR R6 R0 K0
+ 0x881C0101, // 0014 GETMBR R7 R0 K1
+ 0x5C200600, // 0015 MOVE R8 R3
+ 0x5426000F, // 0016 LDINT R9 16
+ 0x7C100A00, // 0017 CALL R4 5
+ 0x80040800, // 0018 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ipk_epoch_key
+********************************************************************/
+be_local_closure(Matter_Session_get_ipk_epoch_key, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(ipk_epoch_key),
+ }),
+ be_str_weak(get_ipk_epoch_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_pk
+********************************************************************/
+be_local_closure(Matter_Session_get_pk, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(no_private_key),
+ /* K1 */ be_nested_str_weak(crypto),
+ /* K2 */ be_nested_str_weak(random),
+ }),
+ be_str_weak(get_pk),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x74060004, // 0001 JMPT R1 #0007
+ 0xA4060200, // 0002 IMPORT R1 K1
+ 0x8C080302, // 0003 GETMET R2 R1 K2
+ 0x5412001F, // 0004 LDINT R4 32
+ 0x7C080400, // 0005 CALL R2 2
+ 0x90020002, // 0006 SETMBR R0 K0 R2
+ 0x88040100, // 0007 GETMBR R1 R0 K0
+ 0x80040200, // 0008 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_i2r
+********************************************************************/
+be_local_closure(Matter_Session_get_i2r, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(i2rkey),
+ }),
+ be_str_weak(get_i2r),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: get_icac
********************************************************************/
@@ -1301,96 +1421,6 @@ be_local_closure(Matter_Session_get_mode, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: set_fabric_device
-********************************************************************/
-be_local_closure(Matter_Session_set_fabric_device, /* name */
- be_nested_proto(
- 7, /* nstack */
- 4, /* 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(fabric),
- /* K1 */ be_nested_str_weak(deviceid),
- /* K2 */ be_nested_str_weak(fabric_compressed),
- /* K3 */ be_nested_str_weak(__store),
- /* K4 */ be_nested_str_weak(remove_redundant_session),
- }),
- be_str_weak(set_fabric_device),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020202, // 0001 SETMBR R0 K1 R2
- 0x90020403, // 0002 SETMBR R0 K2 R3
- 0x88100103, // 0003 GETMBR R4 R0 K3
- 0x8C100904, // 0004 GETMET R4 R4 K4
- 0x5C180000, // 0005 MOVE R6 R0
- 0x7C100400, // 0006 CALL R4 2
- 0x80000000, // 0007 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_i2r_privacy
-********************************************************************/
-be_local_closure(Matter_Session_get_i2r_privacy, /* name */
- be_nested_proto(
- 9, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(_i2r_privacy),
- /* K1 */ be_nested_str_weak(crypto),
- /* K2 */ be_nested_str_weak(HKDF_SHA256),
- /* K3 */ be_nested_str_weak(derive),
- /* K4 */ be_nested_str_weak(get_i2r),
- /* K5 */ be_nested_str_weak(fromstring),
- /* K6 */ be_nested_str_weak(PrivacyKey),
- }),
- be_str_weak(get_i2r_privacy),
- &be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x4C080000, // 0001 LDNIL R2
- 0x1C040202, // 0002 EQ R1 R1 R2
- 0x7806000F, // 0003 JMPF R1 #0014
- 0xA4060200, // 0004 IMPORT R1 K1
- 0x8C080302, // 0005 GETMET R2 R1 K2
- 0x7C080200, // 0006 CALL R2 1
- 0x8C080503, // 0007 GETMET R2 R2 K3
- 0x8C100104, // 0008 GETMET R4 R0 K4
- 0x7C100200, // 0009 CALL R4 1
- 0x60140015, // 000A GETGBL R5 G21
- 0x7C140000, // 000B CALL R5 0
- 0x60180015, // 000C GETGBL R6 G21
- 0x7C180000, // 000D CALL R6 0
- 0x8C180D05, // 000E GETMET R6 R6 K5
- 0x58200006, // 000F LDCONST R8 K6
- 0x7C180400, // 0010 CALL R6 2
- 0x541E000F, // 0011 LDINT R7 16
- 0x7C080A00, // 0012 CALL R2 5
- 0x90020002, // 0013 SETMBR R0 K0 R2
- 0x88040100, // 0014 GETMBR R1 R0 K0
- 0x80040200, // 0015 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: get_ca
********************************************************************/
@@ -1419,39 +1449,9 @@ be_local_closure(Matter_Session_get_ca, /* name */
/********************************************************************
-** Solidified function: save
+** Solidified function: get_deviceid
********************************************************************/
-be_local_closure(Matter_Session_save, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(__store),
- /* K1 */ be_nested_str_weak(save),
- }),
- be_str_weak(save),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x80000000, // 0003 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_fabric_compressed
-********************************************************************/
-be_local_closure(Matter_Session_get_fabric_compressed, /* name */
+be_local_closure(Matter_Session_get_deviceid, /* name */
be_nested_proto(
2, /* nstack */
1, /* argc */
@@ -1462,9 +1462,9 @@ be_local_closure(Matter_Session_get_fabric_compressed, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(fabric_compressed),
+ /* K0 */ be_nested_str_weak(deviceid),
}),
- be_str_weak(get_fabric_compressed),
+ be_str_weak(get_deviceid),
&be_const_str_solidified,
( &(const binstruction[ 2]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
@@ -1479,85 +1479,86 @@ be_local_closure(Matter_Session_get_fabric_compressed, /* name */
** Solidified class: Matter_Session
********************************************************************/
be_local_class(Matter_Session,
- 39,
+ 40,
NULL,
- be_nested_map(75,
+ be_nested_map(76,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(peer_node_id, -1), be_const_var(19) },
- { be_const_key_weak(fabric_label, -1), be_const_var(31) },
- { be_const_key_weak(set_fabric_label, 1), be_const_closure(Matter_Session_set_fabric_label_closure) },
- { be_const_key_weak(get_r2i, -1), be_const_closure(Matter_Session_get_r2i_closure) },
- { be_const_key_weak(get_ca, 61), be_const_closure(Matter_Session_get_ca_closure) },
- { be_const_key_weak(set_mode, -1), be_const_closure(Matter_Session_set_mode_closure) },
- { be_const_key_weak(set_expire_time, -1), be_const_closure(Matter_Session_set_expire_time_closure) },
- { be_const_key_weak(get_i2r, -1), be_const_closure(Matter_Session_get_i2r_closure) },
- { be_const_key_weak(__CASE, -1), be_const_int(2) },
- { be_const_key_weak(get_ipk_epoch_key, -1), be_const_closure(Matter_Session_get_ipk_epoch_key_closure) },
- { be_const_key_weak(_future_local_session_id, -1), be_const_var(7) },
- { be_const_key_weak(set_expire_in_seconds, 13), be_const_closure(Matter_Session_set_expire_in_seconds_closure) },
- { be_const_key_weak(admin_vendor, -1), be_const_var(33) },
- { be_const_key_weak(fromjson, -1), be_const_static_closure(Matter_Session_fromjson_closure) },
- { be_const_key_weak(set_ca, -1), be_const_closure(Matter_Session_set_ca_closure) },
- { be_const_key_weak(expiration, -1), be_const_var(37) },
- { be_const_key_weak(get_deviceid, 63), be_const_closure(Matter_Session_get_deviceid_closure) },
- { be_const_key_weak(has_expired, -1), be_const_closure(Matter_Session_has_expired_closure) },
- { be_const_key_weak(i2rkey, -1), be_const_var(15) },
- { be_const_key_weak(get_pk, -1), be_const_closure(Matter_Session_get_pk_closure) },
- { be_const_key_weak(get_fabric, -1), be_const_closure(Matter_Session_get_fabric_closure) },
- { be_const_key_weak(admin_subject, 34), be_const_var(32) },
- { be_const_key_weak(noc, -1), be_const_var(23) },
- { be_const_key_weak(get_ipk_group_key, -1), be_const_closure(Matter_Session_get_ipk_group_key_closure) },
+ { be_const_key_weak(get_deviceid, -1), be_const_closure(Matter_Session_get_deviceid_closure) },
+ { be_const_key_weak(_counter_insecure_rcv, -1), be_const_var(14) },
+ { be_const_key_weak(deviceid, -1), be_const_var(31) },
+ { be_const_key_weak(_Msg2, -1), be_const_var(36) },
{ be_const_key_weak(get_ca_pub, -1), be_const_closure(Matter_Session_get_ca_pub_closure) },
- { be_const_key_weak(ipk_epoch_key, 14), be_const_var(25) },
- { be_const_key_weak(tojson, 54), be_const_closure(Matter_Session_tojson_closure) },
- { be_const_key_weak(_i2r_privacy, 66), be_const_var(17) },
- { be_const_key_weak(get_icac, 39), be_const_closure(Matter_Session_get_icac_closure) },
- { be_const_key_weak(init, 35), be_const_closure(Matter_Session_init_closure) },
- { be_const_key_weak(shared_secret, 29), be_const_var(27) },
- { be_const_key_weak(set_persist, -1), be_const_closure(Matter_Session_set_persist_closure) },
- { be_const_key_weak(resumption_id, -1), be_const_var(26) },
- { be_const_key_weak(r2ikey, 38), be_const_var(16) },
- { be_const_key_weak(__breadcrumb, 60), be_const_var(20) },
- { be_const_key_weak(local_session_id, 19), be_const_var(2) },
- { be_const_key_weak(__GROUP_KEY, 22), be_nested_str_weak(GroupKey_X20v1_X2E0) },
- { be_const_key_weak(deviceid, -1), be_const_var(30) },
- { be_const_key_weak(source_node_id, -1), be_const_var(5) },
- { be_const_key_weak(attestation_challenge, 25), be_const_var(18) },
- { be_const_key_weak(no_private_key, 62), be_const_var(21) },
- { be_const_key_weak(_future_initiator_session_id, 4), be_const_var(6) },
- { be_const_key_weak(fabric, -1), be_const_var(28) },
- { be_const_key_weak(counter_rcv, -1), be_const_var(8) },
- { be_const_key_weak(__ip, -1), be_const_var(11) },
- { be_const_key_weak(_counter_insecure_rcv, -1), be_const_var(13) },
- { be_const_key_weak(gen_CSR, 59), be_const_closure(Matter_Session_gen_CSR_closure) },
- { be_const_key_weak(__port, 33), be_const_var(12) },
- { be_const_key_weak(mode, 28), be_const_var(1) },
- { be_const_key_weak(session_timestamp, 42), be_const_var(4) },
- { be_const_key_weak(__store, -1), be_const_var(0) },
- { be_const_key_weak(icac, -1), be_const_var(24) },
- { be_const_key_weak(counter_snd, -1), be_const_var(9) },
- { be_const_key_weak(_counter_insecure_snd, -1), be_const_var(14) },
- { be_const_key_weak(_Msg1, 12), be_const_var(34) },
- { be_const_key_weak(set_ipk_epoch_key, 44), be_const_closure(Matter_Session_set_ipk_epoch_key_closure) },
- { be_const_key_weak(get_noc, -1), be_const_closure(Matter_Session_get_noc_closure) },
- { be_const_key_weak(_Msg2, -1), be_const_var(35) },
- { be_const_key_weak(get_ac, -1), be_const_closure(Matter_Session_get_ac_closure) },
- { be_const_key_weak(set_noc, -1), be_const_closure(Matter_Session_set_noc_closure) },
- { be_const_key_weak(_chunked_attr_reports, 27), be_const_var(38) },
- { be_const_key_weak(_persist, -1), be_const_var(36) },
- { be_const_key_weak(__exchange_id, -1), be_const_var(10) },
- { be_const_key_weak(__PASE, -1), be_const_int(1) },
- { be_const_key_weak(get_mode, -1), be_const_closure(Matter_Session_get_mode_closure) },
- { be_const_key_weak(fabric_compressed, -1), be_const_var(29) },
- { be_const_key_weak(close, 71), be_const_closure(Matter_Session_close_closure) },
- { be_const_key_weak(root_ca_certificate, -1), be_const_var(22) },
+ { be_const_key_weak(__ip, 7), be_const_var(11) },
+ { be_const_key_weak(_i2r_privacy, -1), be_const_var(18) },
+ { be_const_key_weak(__exchange_id, 26), be_const_var(10) },
+ { be_const_key_weak(session_timestamp, -1), be_const_var(4) },
{ be_const_key_weak(set_fabric_device, -1), be_const_closure(Matter_Session_set_fabric_device_closure) },
- { be_const_key_weak(initiator_session_id, -1), be_const_var(3) },
- { be_const_key_weak(get_i2r_privacy, -1), be_const_closure(Matter_Session_get_i2r_privacy_closure) },
- { be_const_key_weak(set_keys, 3), be_const_closure(Matter_Session_set_keys_closure) },
- { be_const_key_weak(save, -1), be_const_closure(Matter_Session_save_closure) },
+ { be_const_key_weak(set_expire_time, -1), be_const_closure(Matter_Session_set_expire_time_closure) },
+ { be_const_key_weak(admin_vendor, 69), be_const_var(34) },
+ { be_const_key_weak(r2ikey, 13), be_const_var(17) },
+ { be_const_key_weak(get_mode, -1), be_const_closure(Matter_Session_get_mode_closure) },
+ { be_const_key_weak(_Msg1, -1), be_const_var(35) },
+ { be_const_key_weak(set_mode, 66), be_const_closure(Matter_Session_set_mode_closure) },
+ { be_const_key_weak(set_persist, 75), be_const_closure(Matter_Session_set_persist_closure) },
+ { be_const_key_weak(set_expire_in_seconds, 10), be_const_closure(Matter_Session_set_expire_in_seconds_closure) },
+ { be_const_key_weak(mode, 33), be_const_var(1) },
+ { be_const_key_weak(fromjson, -1), be_const_static_closure(Matter_Session_fromjson_closure) },
+ { be_const_key_weak(__port, 54), be_const_var(12) },
+ { be_const_key_weak(get_icac, -1), be_const_closure(Matter_Session_get_icac_closure) },
+ { be_const_key_weak(__GROUP_KEY, -1), be_nested_str_weak(GroupKey_X20v1_X2E0) },
+ { be_const_key_weak(noc, 12), be_const_var(24) },
+ { be_const_key_weak(expiration, -1), be_const_var(38) },
+ { be_const_key_weak(gen_CSR, -1), be_const_closure(Matter_Session_gen_CSR_closure) },
+ { be_const_key_weak(__breadcrumb, -1), be_const_var(21) },
+ { be_const_key_weak(__CASE, -1), be_const_int(2) },
+ { be_const_key_weak(__PASE, -1), be_const_int(1) },
+ { be_const_key_weak(has_expired, 39), be_const_closure(Matter_Session_has_expired_closure) },
+ { be_const_key_weak(_chunked_attr_reports, -1), be_const_var(39) },
+ { be_const_key_weak(local_session_id, -1), be_const_var(2) },
+ { be_const_key_weak(set_ipk_epoch_key, 70), be_const_closure(Matter_Session_set_ipk_epoch_key_closure) },
+ { be_const_key_weak(get_ipk_group_key, -1), be_const_closure(Matter_Session_get_ipk_group_key_closure) },
+ { be_const_key_weak(tojson, 46), be_const_closure(Matter_Session_tojson_closure) },
+ { be_const_key_weak(_counter_insecure_snd, -1), be_const_var(15) },
+ { be_const_key_weak(_future_initiator_session_id, -1), be_const_var(6) },
+ { be_const_key_weak(fabric_label, -1), be_const_var(32) },
+ { be_const_key_weak(no_private_key, -1), be_const_var(22) },
+ { be_const_key_weak(set_no_expiration, -1), be_const_closure(Matter_Session_set_no_expiration_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Session_init_closure) },
+ { be_const_key_weak(get_fabric, -1), be_const_closure(Matter_Session_get_fabric_closure) },
+ { be_const_key_weak(peer_node_id, -1), be_const_var(20) },
{ be_const_key_weak(get_fabric_compressed, -1), be_const_closure(Matter_Session_get_fabric_compressed_closure) },
- { be_const_key_weak(set_no_expiration, 0), be_const_closure(Matter_Session_set_no_expiration_closure) },
+ { be_const_key_weak(fabric_compressed, 28), be_const_var(30) },
+ { be_const_key_weak(save, 62), be_const_closure(Matter_Session_save_closure) },
+ { be_const_key_weak(_future_local_session_id, 25), be_const_var(7) },
+ { be_const_key_weak(counter_snd, -1), be_const_var(9) },
+ { be_const_key_weak(set_keys, -1), be_const_closure(Matter_Session_set_keys_closure) },
+ { be_const_key_weak(__message_handler, -1), be_const_var(13) },
+ { be_const_key_weak(attestation_challenge, -1), be_const_var(19) },
+ { be_const_key_weak(counter_rcv, 40), be_const_var(8) },
+ { be_const_key_weak(get_i2r_privacy, 45), be_const_closure(Matter_Session_get_i2r_privacy_closure) },
+ { be_const_key_weak(resumption_id, 57), be_const_var(27) },
+ { be_const_key_weak(set_noc, -1), be_const_closure(Matter_Session_set_noc_closure) },
+ { be_const_key_weak(get_r2i, 50), be_const_closure(Matter_Session_get_r2i_closure) },
+ { be_const_key_weak(__store, 48), be_const_var(0) },
+ { be_const_key_weak(shared_secret, 31), be_const_var(28) },
+ { be_const_key_weak(_persist, -1), be_const_var(37) },
+ { be_const_key_weak(initiator_session_id, 0), be_const_var(3) },
+ { be_const_key_weak(get_ac, -1), be_const_closure(Matter_Session_get_ac_closure) },
+ { be_const_key_weak(icac, 35), be_const_var(25) },
+ { be_const_key_weak(set_fabric_label, 30), be_const_closure(Matter_Session_set_fabric_label_closure) },
+ { be_const_key_weak(ipk_epoch_key, -1), be_const_var(26) },
+ { be_const_key_weak(get_ipk_epoch_key, -1), be_const_closure(Matter_Session_get_ipk_epoch_key_closure) },
+ { be_const_key_weak(get_pk, -1), be_const_closure(Matter_Session_get_pk_closure) },
+ { be_const_key_weak(admin_subject, -1), be_const_var(33) },
+ { be_const_key_weak(get_i2r, -1), be_const_closure(Matter_Session_get_i2r_closure) },
+ { be_const_key_weak(get_noc, 21), be_const_closure(Matter_Session_get_noc_closure) },
+ { be_const_key_weak(i2rkey, 73), be_const_var(16) },
+ { be_const_key_weak(fabric, 9), be_const_var(29) },
+ { be_const_key_weak(source_node_id, -1), be_const_var(5) },
+ { be_const_key_weak(get_ca, -1), be_const_closure(Matter_Session_get_ca_closure) },
+ { be_const_key_weak(close, -1), be_const_closure(Matter_Session_close_closure) },
+ { be_const_key_weak(root_ca_certificate, 5), be_const_var(23) },
+ { be_const_key_weak(set_ca, -1), be_const_closure(Matter_Session_set_ca_closure) },
})),
be_str_weak(Matter_Session)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
index 7e6dd5547..5ec1ec361 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
@@ -11,7 +11,7 @@ extern const bclass be_class_Matter_UDPPacket_sent;
********************************************************************/
be_local_closure(Matter_UDPPacket_sent_init, /* name */
be_nested_proto(
- 7, /* nstack */
+ 9, /* nstack */
5, /* argc */
2, /* varg */
0, /* has upvals */
@@ -25,28 +25,114 @@ be_local_closure(Matter_UDPPacket_sent_init, /* name */
/* K2 */ be_nested_str_weak(port),
/* K3 */ be_nested_str_weak(msg_id),
/* K4 */ be_nested_str_weak(retries),
- /* K5 */ be_nested_str_weak(RETRIES),
+ /* K5 */ be_const_int(0),
/* K6 */ be_nested_str_weak(next_try),
/* K7 */ be_nested_str_weak(tasmota),
/* K8 */ be_nested_str_weak(millis),
- /* K9 */ be_nested_str_weak(RETRY_MS),
+ /* K9 */ be_nested_str_weak(backoff_time),
}),
be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
+ ( &(const binstruction[14]) { /* 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
- 0x88140105, // 0004 GETMBR R5 R0 K5
- 0x90020805, // 0005 SETMBR R0 K4 R5
- 0xB8160E00, // 0006 GETNGBL R5 K7
- 0x8C140B08, // 0007 GETMET R5 R5 K8
+ 0x90020905, // 0004 SETMBR R0 K4 K5
+ 0xB8160E00, // 0005 GETNGBL R5 K7
+ 0x8C140B08, // 0006 GETMET R5 R5 K8
+ 0x7C140200, // 0007 CALL R5 1
+ 0x8C180109, // 0008 GETMET R6 R0 K9
+ 0x88200104, // 0009 GETMBR R8 R0 K4
+ 0x7C180400, // 000A CALL R6 2
+ 0x00140A06, // 000B ADD R5 R5 R6
+ 0x90020C05, // 000C SETMBR R0 K6 R5
+ 0x80000000, // 000D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: backoff_time
+********************************************************************/
+be_local_closure(Matter_UDPPacket_sent_backoff_time, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_const_int(1),
+ /* K1 */ be_const_int(0),
+ }),
+ be_str_weak(power_int),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x240C0301, // 0001 GT R3 R1 K1
+ 0x780E0002, // 0002 JMPF R3 #0006
+ 0x08080400, // 0003 MUL R2 R2 R0
+ 0x04040300, // 0004 SUB R1 R1 K0
+ 0x7001FFFA, // 0005 JMP #0001
+ 0x80040400, // 0006 RET 1 R2
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(math),
+ /* K1 */ be_nested_str_weak(rand),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_const_int(1),
+ /* K4 */ be_const_real_hex(0x3FCCCCCD),
+ /* K5 */ be_const_real_hex(0x3F800000),
+ /* K6 */ be_const_real_hex(0x3E800000),
+ }),
+ be_str_weak(backoff_time),
+ &be_const_str_solidified,
+ ( &(const binstruction[28]) { /* code */
+ 0x84080000, // 0000 CLOSURE R2 P0
+ 0xA40E0000, // 0001 IMPORT R3 K0
+ 0x5412012B, // 0002 LDINT R4 300
+ 0x6014000A, // 0003 GETGBL R5 G10
+ 0x8C180701, // 0004 GETMET R6 R3 K1
+ 0x7C180200, // 0005 CALL R6 1
+ 0x541E00FE, // 0006 LDINT R7 255
+ 0x2C180C07, // 0007 AND R6 R6 R7
0x7C140200, // 0008 CALL R5 1
- 0x88180109, // 0009 GETMBR R6 R0 K9
- 0x00140A06, // 000A ADD R5 R5 R6
- 0x90020C05, // 000B SETMBR R0 K6 R5
- 0x80000000, // 000C RET 0
+ 0x541A00FE, // 0009 LDINT R6 255
+ 0x0C140A06, // 000A DIV R5 R5 R6
+ 0x24180302, // 000B GT R6 R1 K2
+ 0x781A0001, // 000C JMPF R6 #000F
+ 0x04180303, // 000D SUB R6 R1 K3
+ 0x70020000, // 000E JMP #0010
+ 0x58180002, // 000F LDCONST R6 K2
+ 0x5C1C0400, // 0010 MOVE R7 R2
+ 0x58200004, // 0011 LDCONST R8 K4
+ 0x5C240C00, // 0012 MOVE R9 R6
+ 0x7C1C0400, // 0013 CALL R7 2
+ 0x081C0807, // 0014 MUL R7 R4 R7
+ 0x08200B06, // 0015 MUL R8 R5 K6
+ 0x00220A08, // 0016 ADD R8 K5 R8
+ 0x081C0E08, // 0017 MUL R7 R7 R8
+ 0x60200009, // 0018 GETGBL R8 G9
+ 0x5C240E00, // 0019 MOVE R9 R7
+ 0x7C200200, // 001A CALL R8 1
+ 0x80041000, // 001B RET 1 R8
})
)
);
@@ -131,18 +217,17 @@ be_local_closure(Matter_UDPPacket_sent_send, /* name */
be_local_class(Matter_UDPPacket_sent,
6,
NULL,
- be_nested_map(10,
+ be_nested_map(9,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(RETRY_MS, 7), be_const_int(500) },
- { be_const_key_weak(raw, 4), be_const_var(0) },
- { be_const_key_weak(next_try, 9), be_const_var(5) },
- { be_const_key_weak(retries, -1), be_const_var(4) },
- { be_const_key_weak(send, 6), be_const_closure(Matter_UDPPacket_sent_send_closure) },
+ { be_const_key_weak(send, 7), be_const_closure(Matter_UDPPacket_sent_send_closure) },
+ { be_const_key_weak(msg_id, -1), be_const_var(3) },
+ { be_const_key_weak(retries, 8), be_const_var(4) },
+ { be_const_key_weak(backoff_time, -1), be_const_closure(Matter_UDPPacket_sent_backoff_time_closure) },
+ { be_const_key_weak(next_try, 0), be_const_var(5) },
+ { be_const_key_weak(raw, 3), be_const_var(0) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_UDPPacket_sent_init_closure) },
- { be_const_key_weak(RETRIES, -1), be_const_int(4) },
{ be_const_key_weak(port, -1), be_const_var(2) },
{ be_const_key_weak(addr, -1), be_const_var(1) },
- { be_const_key_weak(msg_id, -1), be_const_var(3) },
})),
be_str_weak(Matter_UDPPacket_sent)
);
@@ -156,6 +241,62 @@ void be_load_Matter_UDPPacket_sent_class(bvm *vm) {
extern const bclass be_class_Matter_UDPServer;
+/********************************************************************
+** Solidified function: start
+********************************************************************/
+be_local_closure(Matter_UDPServer_start, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(listening),
+ /* K1 */ be_nested_str_weak(udp_socket),
+ /* K2 */ be_nested_str_weak(udp),
+ /* K3 */ be_nested_str_weak(begin),
+ /* K4 */ be_nested_str_weak(address),
+ /* K5 */ be_nested_str_weak(port),
+ /* K6 */ be_nested_str_weak(network_error),
+ /* K7 */ be_nested_str_weak(could_X20not_X20open_X20UDP_X20server),
+ /* K8 */ be_nested_str_weak(dispatch_cb),
+ /* K9 */ be_nested_str_weak(tasmota),
+ /* K10 */ be_nested_str_weak(add_driver),
+ }),
+ be_str_weak(start),
+ &be_const_str_solidified,
+ ( &(const binstruction[21]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x740A0011, // 0001 JMPT R2 #0014
+ 0xB80A0400, // 0002 GETNGBL R2 K2
+ 0x7C080000, // 0003 CALL R2 0
+ 0x90020202, // 0004 SETMBR R0 K1 R2
+ 0x88080101, // 0005 GETMBR R2 R0 K1
+ 0x8C080503, // 0006 GETMET R2 R2 K3
+ 0x88100104, // 0007 GETMBR R4 R0 K4
+ 0x88140105, // 0008 GETMBR R5 R0 K5
+ 0x7C080600, // 0009 CALL R2 3
+ 0x5C0C0400, // 000A MOVE R3 R2
+ 0x740E0000, // 000B JMPT R3 #000D
+ 0xB0060D07, // 000C RAISE 1 K6 K7
+ 0x500C0200, // 000D LDBOOL R3 1 0
+ 0x90020003, // 000E SETMBR R0 K0 R3
+ 0x90021001, // 000F SETMBR R0 K8 R1
+ 0xB80E1200, // 0010 GETNGBL R3 K9
+ 0x8C0C070A, // 0011 GETMET R3 R3 K10
+ 0x5C140000, // 0012 MOVE R5 R0
+ 0x7C0C0400, // 0013 CALL R3 2
+ 0x80000000, // 0014 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: init
********************************************************************/
@@ -202,35 +343,11 @@ be_local_closure(Matter_UDPServer_init, /* name */
/********************************************************************
-** Solidified function: every_second
+** Solidified function: resend_packets
********************************************************************/
-be_local_closure(Matter_UDPServer_every_second, /* name */
+be_local_closure(Matter_UDPServer_resend_packets, /* 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
-********************************************************************/
-be_local_closure(Matter_UDPServer_stop, /* name */
- be_nested_proto(
- 4, /* nstack */
+ 11, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -238,28 +355,143 @@ be_local_closure(Matter_UDPServer_stop, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(listening),
- /* K1 */ be_nested_str_weak(udp_socket),
- /* K2 */ be_nested_str_weak(stop),
- /* K3 */ be_nested_str_weak(tasmota),
- /* K4 */ be_nested_str_weak(remove_driver),
+ ( &(const bvalue[23]) { /* constants */
+ /* K0 */ be_nested_str_weak(packets_sent),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(time_reached),
+ /* K3 */ be_nested_str_weak(next_try),
+ /* K4 */ be_nested_str_weak(retries),
+ /* K5 */ be_nested_str_weak(RETRIES),
+ /* K6 */ be_nested_str_weak(log),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20resending_X20packet_X20id_X3D),
+ /* K8 */ be_nested_str_weak(msg_id),
+ /* K9 */ be_const_int(3),
+ /* K10 */ be_nested_str_weak(send),
+ /* K11 */ be_nested_str_weak(udp_socket),
+ /* 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_X20target_X20unreachable_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
+ /* K19 */ be_nested_str_weak(addr),
+ /* K20 */ be_nested_str_weak(port),
+ /* K21 */ be_const_int(2),
+ /* K22 */ be_nested_str_weak(stop_iteration),
}),
- be_str_weak(stop),
+ be_str_weak(resend_packets),
&be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x78060008, // 0001 JMPF R1 #000B
- 0x88040101, // 0002 GETMBR R1 R0 K1
- 0x8C040302, // 0003 GETMET R1 R1 K2
- 0x7C040200, // 0004 CALL R1 1
- 0x50040000, // 0005 LDBOOL R1 0 0
- 0x90020001, // 0006 SETMBR R0 K0 R1
- 0xB8060600, // 0007 GETNGBL R1 K3
- 0x8C040304, // 0008 GETMET R1 R1 K4
- 0x5C0C0000, // 0009 MOVE R3 R0
- 0x7C040400, // 000A CALL R1 2
- 0x80000000, // 000B RET 0
+ ( &(const binstruction[57]) { /* code */
+ 0x60040010, // 0000 GETGBL R1 G16
+ 0x88080100, // 0001 GETMBR R2 R0 K0
+ 0x7C040200, // 0002 CALL R1 1
+ 0xA8020030, // 0003 EXBLK 0 #0035
+ 0x5C080200, // 0004 MOVE R2 R1
+ 0x7C080000, // 0005 CALL R2 0
+ 0xB80E0200, // 0006 GETNGBL R3 K1
+ 0x8C0C0702, // 0007 GETMET R3 R3 K2
+ 0x88140503, // 0008 GETMBR R5 R2 K3
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x780E0028, // 000A JMPF R3 #0034
+ 0x880C0504, // 000B GETMBR R3 R2 K4
+ 0x88100105, // 000C GETMBR R4 R0 K5
+ 0x180C0604, // 000D LE R3 R3 R4
+ 0x780E0016, // 000E JMPF R3 #0026
+ 0xB80E0200, // 000F GETNGBL R3 K1
+ 0x8C0C0706, // 0010 GETMET R3 R3 K6
+ 0x60140008, // 0011 GETGBL R5 G8
+ 0x88180508, // 0012 GETMBR R6 R2 K8
+ 0x7C140200, // 0013 CALL R5 1
+ 0x00160E05, // 0014 ADD R5 K7 R5
+ 0x58180009, // 0015 LDCONST R6 K9
+ 0x7C0C0600, // 0016 CALL R3 3
+ 0x8C0C050A, // 0017 GETMET R3 R2 K10
+ 0x8814010B, // 0018 GETMBR R5 R0 K11
+ 0x7C0C0400, // 0019 CALL R3 2
+ 0xB80E0200, // 001A GETNGBL R3 K1
+ 0x8C0C070C, // 001B GETMET R3 R3 K12
+ 0x7C0C0200, // 001C CALL R3 1
+ 0x8C10050D, // 001D GETMET R4 R2 K13
+ 0x88180504, // 001E GETMBR R6 R2 K4
+ 0x7C100400, // 001F CALL R4 2
+ 0x000C0604, // 0020 ADD R3 R3 R4
+ 0x900A0603, // 0021 SETMBR R2 K3 R3
+ 0x880C0504, // 0022 GETMBR R3 R2 K4
+ 0x000C070E, // 0023 ADD R3 R3 K14
+ 0x900A0803, // 0024 SETMBR R2 K4 R3
+ 0x7002000D, // 0025 JMP #0034
+ 0xA40E1E00, // 0026 IMPORT R3 K15
+ 0x88100100, // 0027 GETMBR R4 R0 K0
+ 0x8C100910, // 0028 GETMET R4 R4 K16
+ 0x88180508, // 0029 GETMBR R6 R2 K8
+ 0x7C100400, // 002A CALL R4 2
+ 0xB8120200, // 002B GETNGBL R4 K1
+ 0x8C100906, // 002C GETMET R4 R4 K6
+ 0x8C180711, // 002D GETMET R6 R3 K17
+ 0x58200012, // 002E LDCONST R8 K18
+ 0x88240513, // 002F GETMBR R9 R2 K19
+ 0x88280514, // 0030 GETMBR R10 R2 K20
+ 0x7C180800, // 0031 CALL R6 4
+ 0x581C0015, // 0032 LDCONST R7 K21
+ 0x7C100600, // 0033 CALL R4 3
+ 0x7001FFCE, // 0034 JMP #0004
+ 0x58040016, // 0035 LDCONST R1 K22
+ 0xAC040200, // 0036 CATCH R1 1 0
+ 0xB0080000, // 0037 RAISE 2 R0 R0
+ 0x80000000, // 0038 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: packet_ack
+********************************************************************/
+be_local_closure(Matter_UDPServer_packet_ack, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(packets_sent),
+ /* K1 */ be_nested_str_weak(contains),
+ /* K2 */ be_nested_str_weak(remove),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(log),
+ /* K5 */ be_nested_str_weak(MTR_X3A_X20removed_X20packet_X20from_X20sending_X20list_X20id_X3D),
+ }),
+ be_str_weak(packet_ack),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0000, // 0002 JMPF R2 #0004
+ 0x80000400, // 0003 RET 0
+ 0x88080100, // 0004 GETMBR R2 R0 K0
+ 0x8C080501, // 0005 GETMET R2 R2 K1
+ 0x5C100200, // 0006 MOVE R4 R1
+ 0x7C080400, // 0007 CALL R2 2
+ 0x780A000B, // 0008 JMPF R2 #0015
+ 0x88080100, // 0009 GETMBR R2 R0 K0
+ 0x8C080502, // 000A GETMET R2 R2 K2
+ 0x5C100200, // 000B MOVE R4 R1
+ 0x7C080400, // 000C CALL R2 2
+ 0xB80A0600, // 000D GETNGBL R2 K3
+ 0x8C080504, // 000E GETMET R2 R2 K4
+ 0x60100008, // 000F GETGBL R4 G8
+ 0x5C140200, // 0010 MOVE R5 R1
+ 0x7C100200, // 0011 CALL R4 1
+ 0x00120A04, // 0012 ADD R4 K5 R4
+ 0x54160003, // 0013 LDINT R5 4
+ 0x7C080600, // 0014 CALL R2 3
+ 0x80000000, // 0015 RET 0
})
)
);
@@ -352,99 +584,23 @@ be_local_closure(Matter_UDPServer_every_50ms, /* name */
/********************************************************************
-** Solidified function: resend_packets
+** Solidified function: every_second
********************************************************************/
-be_local_closure(Matter_UDPServer_resend_packets, /* name */
+be_local_closure(Matter_UDPServer_every_second, /* name */
be_nested_proto(
- 11, /* nstack */
+ 1, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[22]) { /* constants */
- /* K0 */ be_nested_str_weak(packets_sent),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(time_reached),
- /* K3 */ be_nested_str_weak(next_try),
- /* K4 */ be_nested_str_weak(log),
- /* K5 */ be_nested_str_weak(MTR_X3A_X20resending_X20packet_X20id_X3D),
- /* K6 */ be_nested_str_weak(msg_id),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(send),
- /* K9 */ be_nested_str_weak(udp_socket),
- /* K10 */ be_nested_str_weak(retries),
- /* K11 */ be_const_int(1),
- /* K12 */ be_const_int(0),
- /* K13 */ be_nested_str_weak(string),
- /* K14 */ be_nested_str_weak(remove),
- /* K15 */ be_nested_str_weak(format),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20non_X2Dacked_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
- /* K17 */ be_nested_str_weak(addr),
- /* K18 */ be_nested_str_weak(port),
- /* K19 */ be_nested_str_weak(millis),
- /* K20 */ be_nested_str_weak(RETRY_MS),
- /* K21 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(resend_packets),
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(every_second),
&be_const_str_solidified,
- ( &(const binstruction[54]) { /* code */
- 0x60040010, // 0000 GETGBL R1 G16
- 0x88080100, // 0001 GETMBR R2 R0 K0
- 0x7C040200, // 0002 CALL R1 1
- 0xA802002D, // 0003 EXBLK 0 #0032
- 0x5C080200, // 0004 MOVE R2 R1
- 0x7C080000, // 0005 CALL R2 0
- 0xB80E0200, // 0006 GETNGBL R3 K1
- 0x8C0C0702, // 0007 GETMET R3 R3 K2
- 0x88140503, // 0008 GETMBR R5 R2 K3
- 0x7C0C0400, // 0009 CALL R3 2
- 0x780E0025, // 000A JMPF R3 #0031
- 0xB80E0200, // 000B GETNGBL R3 K1
- 0x8C0C0704, // 000C GETMET R3 R3 K4
- 0x60140008, // 000D GETGBL R5 G8
- 0x88180506, // 000E GETMBR R6 R2 K6
- 0x7C140200, // 000F CALL R5 1
- 0x00160A05, // 0010 ADD R5 K5 R5
- 0x58180007, // 0011 LDCONST R6 K7
- 0x7C0C0600, // 0012 CALL R3 3
- 0x8C0C0508, // 0013 GETMET R3 R2 K8
- 0x88140109, // 0014 GETMBR R5 R0 K9
- 0x7C0C0400, // 0015 CALL R3 2
- 0x880C050A, // 0016 GETMBR R3 R2 K10
- 0x040C070B, // 0017 SUB R3 R3 K11
- 0x900A1403, // 0018 SETMBR R2 K10 R3
- 0x880C050A, // 0019 GETMBR R3 R2 K10
- 0x180C070C, // 001A LE R3 R3 K12
- 0x780E000E, // 001B JMPF R3 #002B
- 0xA40E1A00, // 001C IMPORT R3 K13
- 0x88100100, // 001D GETMBR R4 R0 K0
- 0x8C10090E, // 001E GETMET R4 R4 K14
- 0x88180506, // 001F GETMBR R6 R2 K6
- 0x7C100400, // 0020 CALL R4 2
- 0xB8120200, // 0021 GETNGBL R4 K1
- 0x8C100904, // 0022 GETMET R4 R4 K4
- 0x8C18070F, // 0023 GETMET R6 R3 K15
- 0x58200010, // 0024 LDCONST R8 K16
- 0x88240511, // 0025 GETMBR R9 R2 K17
- 0x88280512, // 0026 GETMBR R10 R2 K18
- 0x7C180800, // 0027 CALL R6 4
- 0x581C0007, // 0028 LDCONST R7 K7
- 0x7C100600, // 0029 CALL R4 3
- 0x70020005, // 002A JMP #0031
- 0xB80E0200, // 002B GETNGBL R3 K1
- 0x8C0C0713, // 002C GETMET R3 R3 K19
- 0x7C0C0200, // 002D CALL R3 1
- 0x88100514, // 002E GETMBR R4 R2 K20
- 0x000C0604, // 002F ADD R3 R3 R4
- 0x900A0603, // 0030 SETMBR R2 K3 R3
- 0x7001FFD1, // 0031 JMP #0004
- 0x58040015, // 0032 LDCONST R1 K21
- 0xAC040200, // 0033 CATCH R1 1 0
- 0xB0080000, // 0034 RAISE 2 R0 R0
- 0x80000000, // 0035 RET 0
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
})
)
);
@@ -452,55 +608,40 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
/********************************************************************
-** Solidified function: start
+** Solidified function: stop
********************************************************************/
-be_local_closure(Matter_UDPServer_start, /* name */
+be_local_closure(Matter_UDPServer_stop, /* name */
be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
+ 4, /* nstack */
+ 1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[11]) { /* constants */
+ ( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_str_weak(listening),
/* K1 */ be_nested_str_weak(udp_socket),
- /* K2 */ be_nested_str_weak(udp),
- /* K3 */ be_nested_str_weak(begin),
- /* K4 */ be_nested_str_weak(address),
- /* K5 */ be_nested_str_weak(port),
- /* K6 */ be_nested_str_weak(network_error),
- /* K7 */ be_nested_str_weak(could_X20not_X20open_X20UDP_X20server),
- /* K8 */ be_nested_str_weak(dispatch_cb),
- /* K9 */ be_nested_str_weak(tasmota),
- /* K10 */ be_nested_str_weak(add_driver),
+ /* K2 */ be_nested_str_weak(stop),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(remove_driver),
}),
- be_str_weak(start),
+ be_str_weak(stop),
&be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x740A0011, // 0001 JMPT R2 #0014
- 0xB80A0400, // 0002 GETNGBL R2 K2
- 0x7C080000, // 0003 CALL R2 0
- 0x90020202, // 0004 SETMBR R0 K1 R2
- 0x88080101, // 0005 GETMBR R2 R0 K1
- 0x8C080503, // 0006 GETMET R2 R2 K3
- 0x88100104, // 0007 GETMBR R4 R0 K4
- 0x88140105, // 0008 GETMBR R5 R0 K5
- 0x7C080600, // 0009 CALL R2 3
- 0x5C0C0400, // 000A MOVE R3 R2
- 0x740E0000, // 000B JMPT R3 #000D
- 0xB0060D07, // 000C RAISE 1 K6 K7
- 0x500C0200, // 000D LDBOOL R3 1 0
- 0x90020003, // 000E SETMBR R0 K0 R3
- 0x90021001, // 000F SETMBR R0 K8 R1
- 0xB80E1200, // 0010 GETNGBL R3 K9
- 0x8C0C070A, // 0011 GETMET R3 R3 K10
- 0x5C140000, // 0012 MOVE R5 R0
- 0x7C0C0400, // 0013 CALL R3 2
- 0x80000000, // 0014 RET 0
+ ( &(const binstruction[12]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x78060008, // 0001 JMPF R1 #000B
+ 0x88040101, // 0002 GETMBR R1 R0 K1
+ 0x8C040302, // 0003 GETMET R1 R1 K2
+ 0x7C040200, // 0004 CALL R1 1
+ 0x50040000, // 0005 LDBOOL R1 0 0
+ 0x90020001, // 0006 SETMBR R0 K0 R1
+ 0xB8060600, // 0007 GETNGBL R1 K3
+ 0x8C040304, // 0008 GETMET R1 R1 K4
+ 0x5C0C0000, // 0009 MOVE R3 R0
+ 0x7C040400, // 000A CALL R1 2
+ 0x80000000, // 000B RET 0
})
)
);
@@ -550,81 +691,30 @@ be_local_closure(Matter_UDPServer_send_response, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: packet_ack
-********************************************************************/
-be_local_closure(Matter_UDPServer_packet_ack, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(packets_sent),
- /* K1 */ be_nested_str_weak(contains),
- /* K2 */ be_nested_str_weak(remove),
- /* K3 */ be_nested_str_weak(tasmota),
- /* K4 */ be_nested_str_weak(log),
- /* K5 */ be_nested_str_weak(MTR_X3A_X20removed_X20packet_X20from_X20sending_X20list_X20id_X3D),
- }),
- be_str_weak(packet_ack),
- &be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0000, // 0002 JMPF R2 #0004
- 0x80000400, // 0003 RET 0
- 0x88080100, // 0004 GETMBR R2 R0 K0
- 0x8C080501, // 0005 GETMET R2 R2 K1
- 0x5C100200, // 0006 MOVE R4 R1
- 0x7C080400, // 0007 CALL R2 2
- 0x780A000B, // 0008 JMPF R2 #0015
- 0x88080100, // 0009 GETMBR R2 R0 K0
- 0x8C080502, // 000A GETMET R2 R2 K2
- 0x5C100200, // 000B MOVE R4 R1
- 0x7C080400, // 000C CALL R2 2
- 0xB80A0600, // 000D GETNGBL R2 K3
- 0x8C080504, // 000E GETMET R2 R2 K4
- 0x60100008, // 000F GETGBL R4 G8
- 0x5C140200, // 0010 MOVE R5 R1
- 0x7C100200, // 0011 CALL R4 1
- 0x00120A04, // 0012 ADD R4 K5 R4
- 0x54160003, // 0013 LDINT R5 4
- 0x7C080600, // 0014 CALL R2 3
- 0x80000000, // 0015 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified class: Matter_UDPServer
********************************************************************/
be_local_class(Matter_UDPServer,
6,
NULL,
- be_nested_map(15,
+ be_nested_map(16,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(init, 1), be_const_closure(Matter_UDPServer_init_closure) },
- { be_const_key_weak(every_second, -1), be_const_closure(Matter_UDPServer_every_second_closure) },
- { be_const_key_weak(stop, -1), be_const_closure(Matter_UDPServer_stop_closure) },
- { be_const_key_weak(udp_socket, -1), be_const_var(3) },
- { be_const_key_weak(address, -1), be_const_var(0) },
- { be_const_key_weak(dispatch_cb, -1), be_const_var(4) },
- { be_const_key_weak(packet_ack, 7), be_const_closure(Matter_UDPServer_packet_ack_closure) },
- { be_const_key_weak(MAX_PACKETS_READ, 13), be_const_int(4) },
- { be_const_key_weak(every_50ms, 6), be_const_closure(Matter_UDPServer_every_50ms_closure) },
- { be_const_key_weak(listening, -1), be_const_var(2) },
- { be_const_key_weak(port, -1), be_const_var(1) },
- { be_const_key_weak(start, -1), be_const_closure(Matter_UDPServer_start_closure) },
+ { be_const_key_weak(MAX_PACKETS_READ, 14), be_const_int(4) },
{ be_const_key_weak(send_response, -1), be_const_closure(Matter_UDPServer_send_response_closure) },
+ { be_const_key_weak(stop, -1), be_const_closure(Matter_UDPServer_stop_closure) },
+ { be_const_key_weak(init, 12), be_const_closure(Matter_UDPServer_init_closure) },
{ be_const_key_weak(resend_packets, -1), be_const_closure(Matter_UDPServer_resend_packets_closure) },
- { be_const_key_weak(packets_sent, -1), be_const_var(5) },
+ { be_const_key_weak(RETRIES, 2), be_const_int(4) },
+ { be_const_key_weak(port, -1), be_const_var(1) },
+ { be_const_key_weak(packet_ack, -1), be_const_closure(Matter_UDPServer_packet_ack_closure) },
+ { be_const_key_weak(every_50ms, -1), be_const_closure(Matter_UDPServer_every_50ms_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_UDPServer_every_second_closure) },
+ { be_const_key_weak(listening, -1), be_const_var(2) },
+ { be_const_key_weak(dispatch_cb, -1), be_const_var(4) },
+ { be_const_key_weak(address, -1), be_const_var(0) },
+ { be_const_key_weak(packets_sent, 11), be_const_var(5) },
+ { be_const_key_weak(udp_socket, -1), be_const_var(3) },
+ { be_const_key_weak(start, 1), be_const_closure(Matter_UDPServer_start_closure) },
})),
be_str_weak(Matter_UDPServer)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UI.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UI.h
index 0eaee343f..23c1bce7c 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UI.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UI.h
@@ -19,7 +19,7 @@ be_local_closure(Matter_UI_show_commissioning_info, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[24]) { /* constants */
+ ( &(const bvalue[28]) { /* constants */
/* K0 */ be_nested_str_weak(webserver),
/* K1 */ be_nested_str_weak(string),
/* K2 */ be_nested_str_weak(content_send),
@@ -42,12 +42,16 @@ be_local_closure(Matter_UI_show_commissioning_info, /* name */
/* K19 */ be_nested_str_weak(_X3Cp_X3EDistinguish_X20id_X3A_X3C_X2Fp_X3E),
/* K20 */ be_nested_str_weak(_X3Cinput_X20type_X3D_X27number_X27_X20min_X3D_X270_X27_X20max_X3D_X272047_X27_X20name_X3D_X27discriminator_X27_X20value_X3D_X27_X25i_X27_X3E),
/* K21 */ be_nested_str_weak(discriminator),
- /* K22 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3Cbutton_X20name_X3D_X27passcode_X27_X20class_X3D_X27button_X20bgrn_X27_X3EChange_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E),
- /* K23 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K22 */ be_nested_str_weak(_X3Cp_X3E_X3Cinput_X20type_X3D_X27checkbox_X27_X20name_X3D_X27ipv4_X27_X25s_X3EIPv4_X20only_X3C_X2Fp_X3E),
+ /* K23 */ be_nested_str_weak(ipv4only),
+ /* K24 */ be_nested_str_weak(_X20checked),
+ /* K25 */ be_nested_str_weak(),
+ /* K26 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3Cbutton_X20name_X3D_X27passcode_X27_X20class_X3D_X27button_X20bgrn_X27_X3EChange_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E),
+ /* K27 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
}),
be_str_weak(show_commissioning_info),
&be_const_str_solidified,
- ( &(const binstruction[70]) { /* code */
+ ( &(const binstruction[81]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0xA40A0200, // 0001 IMPORT R2 K1
0x8C0C0302, // 0002 GETMET R3 R1 K2
@@ -112,12 +116,23 @@ be_local_closure(Matter_UI_show_commissioning_info, /* name */
0x7C1C0600, // 003D CALL R7 3
0x7C140400, // 003E CALL R5 2
0x8C140302, // 003F GETMET R5 R1 K2
- 0x581C0016, // 0040 LDCONST R7 K22
- 0x7C140400, // 0041 CALL R5 2
- 0x8C140302, // 0042 GETMET R5 R1 K2
- 0x581C0017, // 0043 LDCONST R7 K23
- 0x7C140400, // 0044 CALL R5 2
- 0x80000000, // 0045 RET 0
+ 0x8C1C0506, // 0040 GETMET R7 R2 K6
+ 0x58240016, // 0041 LDCONST R9 K22
+ 0x88280104, // 0042 GETMBR R10 R0 K4
+ 0x88281517, // 0043 GETMBR R10 R10 K23
+ 0x782A0001, // 0044 JMPF R10 #0047
+ 0x58280018, // 0045 LDCONST R10 K24
+ 0x70020000, // 0046 JMP #0048
+ 0x58280019, // 0047 LDCONST R10 K25
+ 0x7C1C0600, // 0048 CALL R7 3
+ 0x7C140400, // 0049 CALL R5 2
+ 0x8C140302, // 004A GETMET R5 R1 K2
+ 0x581C001A, // 004B LDCONST R7 K26
+ 0x7C140400, // 004C CALL R5 2
+ 0x8C140302, // 004D GETMET R5 R1 K2
+ 0x581C001B, // 004E LDCONST R7 K27
+ 0x7C140400, // 004F CALL R5 2
+ 0x80000000, // 0050 RET 0
})
)
);
@@ -518,7 +533,7 @@ be_local_closure(Matter_UI_page_part_ctl, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[40]) { /* constants */
+ ( &(const bvalue[43]) { /* constants */
/* K0 */ be_nested_str_weak(webserver),
/* K1 */ be_nested_str_weak(check_privileged_access),
/* K2 */ be_nested_str_weak(string),
@@ -530,39 +545,42 @@ be_local_closure(Matter_UI_page_part_ctl, /* name */
/* K8 */ be_nested_str_weak(discriminator),
/* K9 */ be_nested_str_weak(device),
/* K10 */ be_nested_str_weak(arg),
- /* K11 */ be_nested_str_weak(save_param),
- /* K12 */ be_nested_str_weak(redirect),
- /* K13 */ be_nested_str_weak(_X2F_X3Frst_X3D),
- /* K14 */ be_nested_str_weak(enable),
- /* K15 */ be_nested_str_weak(tasmota),
- /* K16 */ be_nested_str_weak(cmd),
- /* K17 */ be_nested_str_weak(SetOption),
- /* K18 */ be_nested_str_weak(matter),
- /* K19 */ be_nested_str_weak(MATTER_OPTION),
- /* K20 */ be_nested_str_weak(_X201),
- /* K21 */ be_nested_str_weak(disable),
- /* K22 */ be_nested_str_weak(_X200),
- /* K23 */ be_nested_str_weak(del_session),
- /* K24 */ be_nested_str_weak(sessions),
- /* K25 */ be_nested_str_weak(get_session_by_local_session_id),
- /* K26 */ be_nested_str_weak(remove_session),
- /* K27 */ be_nested_str_weak(save),
- /* K28 */ be_nested_str_weak(log),
- /* K29 */ be_nested_str_weak(format),
- /* K30 */ be_nested_str_weak(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s),
- /* K31 */ be_const_int(2),
- /* K32 */ be_nested_str_weak(content_start),
- /* K33 */ be_nested_str_weak(Parameter_X20error),
- /* K34 */ be_nested_str_weak(content_send_style),
- /* K35 */ be_nested_str_weak(content_send),
- /* K36 */ be_nested_str_weak(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E),
- /* K37 */ be_nested_str_weak(content_button),
- /* K38 */ be_nested_str_weak(BUTTON_MANAGEMENT),
- /* K39 */ be_nested_str_weak(content_stop),
+ /* K11 */ be_nested_str_weak(ipv4only),
+ /* K12 */ be_nested_str_weak(ipv4),
+ /* K13 */ be_nested_str_weak(on),
+ /* K14 */ be_nested_str_weak(save_param),
+ /* K15 */ be_nested_str_weak(redirect),
+ /* K16 */ be_nested_str_weak(_X2F_X3Frst_X3D),
+ /* K17 */ be_nested_str_weak(enable),
+ /* K18 */ be_nested_str_weak(tasmota),
+ /* K19 */ be_nested_str_weak(cmd),
+ /* K20 */ be_nested_str_weak(SetOption),
+ /* K21 */ be_nested_str_weak(matter),
+ /* K22 */ be_nested_str_weak(MATTER_OPTION),
+ /* K23 */ be_nested_str_weak(_X201),
+ /* K24 */ be_nested_str_weak(disable),
+ /* K25 */ be_nested_str_weak(_X200),
+ /* K26 */ be_nested_str_weak(del_session),
+ /* K27 */ be_nested_str_weak(sessions),
+ /* K28 */ be_nested_str_weak(get_session_by_local_session_id),
+ /* K29 */ be_nested_str_weak(remove_session),
+ /* K30 */ be_nested_str_weak(save),
+ /* K31 */ be_nested_str_weak(log),
+ /* K32 */ be_nested_str_weak(format),
+ /* K33 */ be_nested_str_weak(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s),
+ /* K34 */ be_const_int(2),
+ /* K35 */ be_nested_str_weak(content_start),
+ /* K36 */ be_nested_str_weak(Parameter_X20error),
+ /* K37 */ be_nested_str_weak(content_send_style),
+ /* K38 */ be_nested_str_weak(content_send),
+ /* K39 */ be_nested_str_weak(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E),
+ /* K40 */ be_nested_str_weak(content_button),
+ /* K41 */ be_nested_str_weak(BUTTON_MANAGEMENT),
+ /* K42 */ be_nested_str_weak(content_stop),
}),
be_str_weak(page_part_ctl),
&be_const_str_solidified,
- ( &(const binstruction[144]) { /* code */
+ ( &(const binstruction[150]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x8C080301, // 0001 GETMET R2 R1 K1
0x7C080200, // 0002 CALL R2 1
@@ -574,7 +592,7 @@ be_local_closure(Matter_UI_page_part_ctl, /* name */
0xA4120800, // 0008 IMPORT R4 K4
0x8C140705, // 0009 GETMET R5 R3 K5
0x7C140200, // 000A CALL R5 1
- 0xA8020064, // 000B EXBLK 0 #0071
+ 0xA802006A, // 000B EXBLK 0 #0077
0x8C180306, // 000C GETMET R6 R1 K6
0x58200007, // 000D LDCONST R8 K7
0x7C180400, // 000E CALL R6 2
@@ -582,7 +600,7 @@ be_local_closure(Matter_UI_page_part_ctl, /* name */
0x8C180306, // 0010 GETMET R6 R1 K6
0x58200008, // 0011 LDCONST R8 K8
0x7C180400, // 0012 CALL R6 2
- 0x781A001C, // 0013 JMPF R6 #0031
+ 0x781A0022, // 0013 JMPF R6 #0037
0x8C180306, // 0014 GETMET R6 R1 K6
0x58200007, // 0015 LDCONST R8 K7
0x7C180400, // 0016 CALL R6 2
@@ -606,107 +624,113 @@ be_local_closure(Matter_UI_page_part_ctl, /* name */
0x7C1C0200, // 0028 CALL R7 1
0x901A1007, // 0029 SETMBR R6 K8 R7
0x88180109, // 002A GETMBR R6 R0 K9
- 0x8C180D0B, // 002B GETMET R6 R6 K11
- 0x7C180200, // 002C CALL R6 1
- 0x8C18030C, // 002D GETMET R6 R1 K12
- 0x5820000D, // 002E LDCONST R8 K13
- 0x7C180400, // 002F CALL R6 2
- 0x7002003D, // 0030 JMP #006F
- 0x8C180306, // 0031 GETMET R6 R1 K6
- 0x5820000E, // 0032 LDCONST R8 K14
- 0x7C180400, // 0033 CALL R6 2
- 0x781A000C, // 0034 JMPF R6 #0042
- 0xB81A1E00, // 0035 GETNGBL R6 K15
- 0x8C180D10, // 0036 GETMET R6 R6 K16
- 0x60200008, // 0037 GETGBL R8 G8
- 0xB8262400, // 0038 GETNGBL R9 K18
- 0x88241313, // 0039 GETMBR R9 R9 K19
- 0x7C200200, // 003A CALL R8 1
- 0x00222208, // 003B ADD R8 K17 R8
- 0x00201114, // 003C ADD R8 R8 K20
- 0x7C180400, // 003D CALL R6 2
- 0x8C18030C, // 003E GETMET R6 R1 K12
- 0x5820000D, // 003F LDCONST R8 K13
- 0x7C180400, // 0040 CALL R6 2
- 0x7002002C, // 0041 JMP #006F
- 0x8C180306, // 0042 GETMET R6 R1 K6
- 0x58200015, // 0043 LDCONST R8 K21
- 0x7C180400, // 0044 CALL R6 2
- 0x781A000C, // 0045 JMPF R6 #0053
- 0xB81A1E00, // 0046 GETNGBL R6 K15
- 0x8C180D10, // 0047 GETMET R6 R6 K16
- 0x60200008, // 0048 GETGBL R8 G8
- 0xB8262400, // 0049 GETNGBL R9 K18
- 0x88241313, // 004A GETMBR R9 R9 K19
- 0x7C200200, // 004B CALL R8 1
- 0x00222208, // 004C ADD R8 K17 R8
- 0x00201116, // 004D ADD R8 R8 K22
- 0x7C180400, // 004E CALL R6 2
- 0x8C18030C, // 004F GETMET R6 R1 K12
- 0x5820000D, // 0050 LDCONST R8 K13
- 0x7C180400, // 0051 CALL R6 2
- 0x7002001B, // 0052 JMP #006F
- 0x8C180306, // 0053 GETMET R6 R1 K6
- 0x58200017, // 0054 LDCONST R8 K23
- 0x7C180400, // 0055 CALL R6 2
- 0x781A0017, // 0056 JMPF R6 #006F
- 0x88180109, // 0057 GETMBR R6 R0 K9
- 0x88180D18, // 0058 GETMBR R6 R6 K24
- 0x8C180D19, // 0059 GETMET R6 R6 K25
- 0x60200009, // 005A GETGBL R8 G9
- 0x8C24030A, // 005B GETMET R9 R1 K10
- 0x582C0017, // 005C LDCONST R11 K23
- 0x7C240400, // 005D CALL R9 2
- 0x7C200200, // 005E CALL R8 1
- 0x7C180400, // 005F CALL R6 2
- 0x4C1C0000, // 0060 LDNIL R7
- 0x201C0C07, // 0061 NE R7 R6 R7
- 0x781E0008, // 0062 JMPF R7 #006C
- 0x881C0109, // 0063 GETMBR R7 R0 K9
- 0x881C0F18, // 0064 GETMBR R7 R7 K24
- 0x8C1C0F1A, // 0065 GETMET R7 R7 K26
- 0x5C240C00, // 0066 MOVE R9 R6
- 0x7C1C0400, // 0067 CALL R7 2
- 0x881C0109, // 0068 GETMBR R7 R0 K9
- 0x881C0F18, // 0069 GETMBR R7 R7 K24
- 0x8C1C0F1B, // 006A GETMET R7 R7 K27
- 0x7C1C0200, // 006B CALL R7 1
- 0x8C1C030C, // 006C GETMET R7 R1 K12
- 0x5824000D, // 006D LDCONST R9 K13
- 0x7C1C0400, // 006E CALL R7 2
- 0xA8040001, // 006F EXBLK 1 1
- 0x7002001D, // 0070 JMP #008F
- 0xAC180002, // 0071 CATCH R6 0 2
- 0x7002001A, // 0072 JMP #008E
- 0xB8221E00, // 0073 GETNGBL R8 K15
- 0x8C20111C, // 0074 GETMET R8 R8 K28
- 0x8C28051D, // 0075 GETMET R10 R2 K29
- 0x5830001E, // 0076 LDCONST R12 K30
- 0x5C340C00, // 0077 MOVE R13 R6
- 0x5C380E00, // 0078 MOVE R14 R7
- 0x7C280800, // 0079 CALL R10 4
- 0x582C001F, // 007A LDCONST R11 K31
- 0x7C200600, // 007B CALL R8 3
- 0x8C200320, // 007C GETMET R8 R1 K32
- 0x58280021, // 007D LDCONST R10 K33
- 0x7C200400, // 007E CALL R8 2
- 0x8C200322, // 007F GETMET R8 R1 K34
- 0x7C200200, // 0080 CALL R8 1
- 0x8C200323, // 0081 GETMET R8 R1 K35
- 0x8C28051D, // 0082 GETMET R10 R2 K29
- 0x58300024, // 0083 LDCONST R12 K36
- 0x5C340C00, // 0084 MOVE R13 R6
- 0x5C380E00, // 0085 MOVE R14 R7
- 0x7C280800, // 0086 CALL R10 4
- 0x7C200400, // 0087 CALL R8 2
- 0x8C200325, // 0088 GETMET R8 R1 K37
- 0x88280326, // 0089 GETMBR R10 R1 K38
- 0x7C200400, // 008A CALL R8 2
- 0x8C200327, // 008B GETMET R8 R1 K39
- 0x7C200200, // 008C CALL R8 1
- 0x70020000, // 008D JMP #008F
- 0xB0080000, // 008E RAISE 2 R0 R0
- 0x80000000, // 008F RET 0
+ 0x8C1C030A, // 002B GETMET R7 R1 K10
+ 0x5824000C, // 002C LDCONST R9 K12
+ 0x7C1C0400, // 002D CALL R7 2
+ 0x1C1C0F0D, // 002E EQ R7 R7 K13
+ 0x901A1607, // 002F SETMBR R6 K11 R7
+ 0x88180109, // 0030 GETMBR R6 R0 K9
+ 0x8C180D0E, // 0031 GETMET R6 R6 K14
+ 0x7C180200, // 0032 CALL R6 1
+ 0x8C18030F, // 0033 GETMET R6 R1 K15
+ 0x58200010, // 0034 LDCONST R8 K16
+ 0x7C180400, // 0035 CALL R6 2
+ 0x7002003D, // 0036 JMP #0075
+ 0x8C180306, // 0037 GETMET R6 R1 K6
+ 0x58200011, // 0038 LDCONST R8 K17
+ 0x7C180400, // 0039 CALL R6 2
+ 0x781A000C, // 003A JMPF R6 #0048
+ 0xB81A2400, // 003B GETNGBL R6 K18
+ 0x8C180D13, // 003C GETMET R6 R6 K19
+ 0x60200008, // 003D GETGBL R8 G8
+ 0xB8262A00, // 003E GETNGBL R9 K21
+ 0x88241316, // 003F GETMBR R9 R9 K22
+ 0x7C200200, // 0040 CALL R8 1
+ 0x00222808, // 0041 ADD R8 K20 R8
+ 0x00201117, // 0042 ADD R8 R8 K23
+ 0x7C180400, // 0043 CALL R6 2
+ 0x8C18030F, // 0044 GETMET R6 R1 K15
+ 0x58200010, // 0045 LDCONST R8 K16
+ 0x7C180400, // 0046 CALL R6 2
+ 0x7002002C, // 0047 JMP #0075
+ 0x8C180306, // 0048 GETMET R6 R1 K6
+ 0x58200018, // 0049 LDCONST R8 K24
+ 0x7C180400, // 004A CALL R6 2
+ 0x781A000C, // 004B JMPF R6 #0059
+ 0xB81A2400, // 004C GETNGBL R6 K18
+ 0x8C180D13, // 004D GETMET R6 R6 K19
+ 0x60200008, // 004E GETGBL R8 G8
+ 0xB8262A00, // 004F GETNGBL R9 K21
+ 0x88241316, // 0050 GETMBR R9 R9 K22
+ 0x7C200200, // 0051 CALL R8 1
+ 0x00222808, // 0052 ADD R8 K20 R8
+ 0x00201119, // 0053 ADD R8 R8 K25
+ 0x7C180400, // 0054 CALL R6 2
+ 0x8C18030F, // 0055 GETMET R6 R1 K15
+ 0x58200010, // 0056 LDCONST R8 K16
+ 0x7C180400, // 0057 CALL R6 2
+ 0x7002001B, // 0058 JMP #0075
+ 0x8C180306, // 0059 GETMET R6 R1 K6
+ 0x5820001A, // 005A LDCONST R8 K26
+ 0x7C180400, // 005B CALL R6 2
+ 0x781A0017, // 005C JMPF R6 #0075
+ 0x88180109, // 005D GETMBR R6 R0 K9
+ 0x88180D1B, // 005E GETMBR R6 R6 K27
+ 0x8C180D1C, // 005F GETMET R6 R6 K28
+ 0x60200009, // 0060 GETGBL R8 G9
+ 0x8C24030A, // 0061 GETMET R9 R1 K10
+ 0x582C001A, // 0062 LDCONST R11 K26
+ 0x7C240400, // 0063 CALL R9 2
+ 0x7C200200, // 0064 CALL R8 1
+ 0x7C180400, // 0065 CALL R6 2
+ 0x4C1C0000, // 0066 LDNIL R7
+ 0x201C0C07, // 0067 NE R7 R6 R7
+ 0x781E0008, // 0068 JMPF R7 #0072
+ 0x881C0109, // 0069 GETMBR R7 R0 K9
+ 0x881C0F1B, // 006A GETMBR R7 R7 K27
+ 0x8C1C0F1D, // 006B GETMET R7 R7 K29
+ 0x5C240C00, // 006C MOVE R9 R6
+ 0x7C1C0400, // 006D CALL R7 2
+ 0x881C0109, // 006E GETMBR R7 R0 K9
+ 0x881C0F1B, // 006F GETMBR R7 R7 K27
+ 0x8C1C0F1E, // 0070 GETMET R7 R7 K30
+ 0x7C1C0200, // 0071 CALL R7 1
+ 0x8C1C030F, // 0072 GETMET R7 R1 K15
+ 0x58240010, // 0073 LDCONST R9 K16
+ 0x7C1C0400, // 0074 CALL R7 2
+ 0xA8040001, // 0075 EXBLK 1 1
+ 0x7002001D, // 0076 JMP #0095
+ 0xAC180002, // 0077 CATCH R6 0 2
+ 0x7002001A, // 0078 JMP #0094
+ 0xB8222400, // 0079 GETNGBL R8 K18
+ 0x8C20111F, // 007A GETMET R8 R8 K31
+ 0x8C280520, // 007B GETMET R10 R2 K32
+ 0x58300021, // 007C LDCONST R12 K33
+ 0x5C340C00, // 007D MOVE R13 R6
+ 0x5C380E00, // 007E MOVE R14 R7
+ 0x7C280800, // 007F CALL R10 4
+ 0x582C0022, // 0080 LDCONST R11 K34
+ 0x7C200600, // 0081 CALL R8 3
+ 0x8C200323, // 0082 GETMET R8 R1 K35
+ 0x58280024, // 0083 LDCONST R10 K36
+ 0x7C200400, // 0084 CALL R8 2
+ 0x8C200325, // 0085 GETMET R8 R1 K37
+ 0x7C200200, // 0086 CALL R8 1
+ 0x8C200326, // 0087 GETMET R8 R1 K38
+ 0x8C280520, // 0088 GETMET R10 R2 K32
+ 0x58300027, // 0089 LDCONST R12 K39
+ 0x5C340C00, // 008A MOVE R13 R6
+ 0x5C380E00, // 008B MOVE R14 R7
+ 0x7C280800, // 008C CALL R10 4
+ 0x7C200400, // 008D CALL R8 2
+ 0x8C200328, // 008E GETMET R8 R1 K40
+ 0x88280329, // 008F GETMBR R10 R1 K41
+ 0x7C200400, // 0090 CALL R8 2
+ 0x8C20032A, // 0091 GETMET R8 R1 K42
+ 0x7C200200, // 0092 CALL R8 1
+ 0x70020000, // 0093 JMP #0095
+ 0xB0080000, // 0094 RAISE 2 R0 R0
+ 0x80000000, // 0095 RET 0
})
)
);
From 8a15f0426f244b17272100ad1e9e92dbced79ea2 Mon Sep 17 00:00:00 2001
From: s-hadinger <49731213+s-hadinger@users.noreply.github.com>
Date: Tue, 21 Feb 2023 23:02:13 +0100
Subject: [PATCH 028/227] Matter support subscription removal (#18018)
---
.../berry_matter/src/embedded/Matter_IM.be | 26 +-
.../src/embedded/Matter_IM_Message.be | 37 +-
.../src/embedded/Matter_IM_Subscription.be | 1 +
.../src/embedded/Matter_Message.be | 2 +-
.../src/embedded/Matter_MessageHandler.be | 15 +-
.../src/embedded/Matter_UDPServer.be | 2 +-
.../src/solidify/solidified_Matter_IM.h | 1869 +++++++++--------
.../solidify/solidified_Matter_IM_Message.h | 327 +--
.../solidified_Matter_IM_Subscription.h | 29 +-
.../src/solidify/solidified_Matter_Message.h | 5 +-
.../solidified_Matter_MessageHandler.h | 456 ++--
.../solidify/solidified_Matter_UDPServer.h | 29 +-
12 files changed, 1494 insertions(+), 1304 deletions(-)
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
index f0c0e0599..8b223d86a 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
@@ -73,6 +73,20 @@ class Matter_IM
return false
end
+ #############################################################
+ # check whether the ack received is of interest to any
+ # current exchange
+ #
+ # return `true` if handled
+ def process_incoming_ack(msg)
+ # check if there is an exchange_id interested in receiving this
+ var message = self.find_sendqueue_by_exchangeid(msg.exchange_id)
+ if message
+ return message.ack_received(msg) # dispatch to IM_Message
+ end
+ return false
+ end
+
#############################################################
# send enqueued responses
#
@@ -139,13 +153,13 @@ class Matter_IM
if status == matter.SUCCESS
tasmota.log("MTR: >Status_OK", 2) # don't show 'SUCCESS' to not overflow logs with non-information
if message
- return message.ack_received(msg) # re-arm the sending of next packets for the same exchange
+ return message.status_ok_received(msg) # re-arm the sending of next packets for the same exchange
end
else
# error
tasmota.log(string.format("MTR: >Status ERROR = 0x%02X", status), 2)
if message
- message.ack_error(msg)
+ message.status_error_received(msg)
self.remove_sendqueue_by_exchangeid(msg.exchange_id)
end
end
@@ -242,7 +256,7 @@ class Matter_IM
)
end
- tasmota.log("MTR: ReportDataMessage=" + str(ret), 4)
+ tasmota.log("MTR: ReportDataMessage=" + str(ret), 3)
tasmota.log("MTR: ReportDataMessageTLV=" + str(ret.to_TLV()), 3)
return ret
@@ -540,7 +554,11 @@ class Matter_IM
fake_read.attributes_requests.push(p1)
end
- tasmota.log("MTR: 0)
@@ -248,18 +254,28 @@ class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
self.report_data_phase = true
end
+ # ack received, confirm the heartbeat
+ def ack_received(msg)
+ if !self.report_data_phase
+ # if ack is received while all data is sent, means that it finished without error
+ return true # proceed to calling send()
+ else
+ return false # do nothing
+ end
+ end
+
# we received an ACK error, remove subscription
- def ack_error(msg)
+ def status_error_received(msg)
self.sub.remove_self()
end
# ack received for previous message, proceed to next (if any)
# return true if we manage the ack ourselves, false if it needs to be done upper
- def ack_received(msg)
+ def status_ok_received(msg)
if self.report_data_phase
- return super(self).ack_received(msg)
+ return super(self).status_ok_received(msg)
else
- super(self).ack_received(nil)
+ super(self).status_ok_received(nil)
return false # let the caller to the ack
end
end
@@ -285,8 +301,13 @@ class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
else
# simple heartbeat ReportData
- super(self).send(responder)
- return true # don't expect any response
+ if self.report_data_phase
+ super(self).send(responder)
+ self.report_data_phase = false
+ return false # don't expect any response
+ else
+ return true # we're done, remove message
+ end
end
end
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be
index 29b8cced4..f44f232e1 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be
@@ -81,6 +81,7 @@ class Matter_IM_Subscription
# remove self from subs list
def remove_self()
+ tasmota.log("MTR: Remove_Sub sub_id=" + str(self.subscription_id))
self.subs.remove_sub(self)
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Message.be b/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
index 2d1378bc3..a71b2090d 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
@@ -465,7 +465,7 @@ class Matter_Frame
var r = matter.Frame(self.message_handler, raw)
r.decode_header()
r.decode_payload()
- tasmota.log("MTR: sending decode: " + matter.inspect(r), 4)
+ tasmota.log("MTR: sending decode: " + matter.inspect(r), 3)
end
end
matter.Frame = Matter_Frame
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be b/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
index 830166737..d8efb7c95 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
@@ -80,7 +80,7 @@ class Matter_MessageHandler
if !op_name op_name = string.format("0x%02X", frame.opcode) end
tasmota.log(string.format("MTR: >Received %s from [%s]:%i", op_name, addr, port), 2)
end
- self.commissioning.process_incoming(frame, addr, port)
+ self.commissioning.process_incoming(frame)
return true
else
#############################################################
@@ -112,7 +112,7 @@ class Matter_MessageHandler
frame.raw .. cleartext # add cleartext
# continue decoding
- tasmota.log(string.format("MTR: idx=%i clear=%s", frame.payload_idx, frame.raw.tohex()), 3)
+ tasmota.log(string.format("MTR: idx=%i clear=%s", frame.payload_idx, frame.raw.tohex()), 4)
frame.decode_payload()
tasmota.log("MTR: decrypted message: protocol_id:"+str(frame.protocol_id)+" opcode="+str(frame.opcode)+" exchange_id="+str(frame.exchange_id & 0xFFFF), 3)
@@ -123,12 +123,16 @@ class Matter_MessageHandler
if protocol_id == 0x0000 # PROTOCOL_ID_SECURE_CHANNEL
# it should not be encrypted
tasmota.log("MTR: PROTOCOL_ID_SECURE_CHANNEL " + matter.inspect(frame), 3)
- # if frame.opcode == 0x10
- # end
+ if frame.opcode == 0x10 # MRPStandaloneAcknowledgement
+ ret = self.im.process_incoming_ack(frame)
+ if ret
+ self.im.send_enqueued(self)
+ end
+ end
ret = true
elif protocol_id == 0x0001 # PROTOCOL_ID_INTERACTION_MODEL
# dispatch to IM Protocol Messages
- ret = self.im.process_incoming(frame, addr, port)
+ ret = self.im.process_incoming(frame)
# if `ret` is true, we have something to send
if ret
self.im.send_enqueued(self)
@@ -139,6 +143,7 @@ class Matter_MessageHandler
resp.encrypt()
self.send_response(resp.raw, resp.remote_ip, resp.remote_port, resp.message_counter)
end
+ ret = true
# -- PROTOCOL_ID_BDX is used for file transfer between devices, not used in Tasmota
# elif protocol_id == 0x0002 # PROTOCOL_ID_BDX -- BDX not handled at all in Tasmota
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be b/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
index 2e7d71160..da324f0fa 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
@@ -167,7 +167,7 @@ class Matter_UDPServer
else
import string
self.packets_sent.remove(packet.msg_id)
- tasmota.log(string.format("MTR: target unreachable '[%s]:%i'", packet.addr, packet.port), 2)
+ tasmota.log(string.format("MTR: target unreachable '[%s]:%i' msg_id=%i", packet.addr, packet.port, packet.msg_id), 2)
end
end
end
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
index cac81ef10..5d2af812a 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
@@ -79,9 +79,89 @@ be_local_closure(Matter_IM_process_timed_request, /* name */
/********************************************************************
-** Solidified function: process_read_request
+** Solidified function: process_status_response
********************************************************************/
-be_local_closure(Matter_IM_process_read_request, /* name */
+be_local_closure(Matter_IM_process_status_response, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(findsubval),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
+ /* K4 */ be_nested_str_weak(exchange_id),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(SUCCESS),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(log),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_OK),
+ /* K10 */ be_const_int(2),
+ /* K11 */ be_nested_str_weak(status_ok_received),
+ /* K12 */ be_nested_str_weak(format),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_X20_X20_X20_X20ERROR_X20_X3D_X200x_X2502X),
+ /* K14 */ be_nested_str_weak(status_error_received),
+ /* K15 */ be_nested_str_weak(remove_sendqueue_by_exchangeid),
+ }),
+ be_str_weak(process_status_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[40]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0x8C100501, // 0001 GETMET R4 R2 K1
+ 0x58180002, // 0002 LDCONST R6 K2
+ 0x541E00FE, // 0003 LDINT R7 255
+ 0x7C100600, // 0004 CALL R4 3
+ 0x8C140103, // 0005 GETMET R5 R0 K3
+ 0x881C0304, // 0006 GETMBR R7 R1 K4
+ 0x7C140400, // 0007 CALL R5 2
+ 0xB81A0A00, // 0008 GETNGBL R6 K5
+ 0x88180D06, // 0009 GETMBR R6 R6 K6
+ 0x1C180806, // 000A EQ R6 R4 R6
+ 0x781A000A, // 000B JMPF R6 #0017
+ 0xB81A0E00, // 000C GETNGBL R6 K7
+ 0x8C180D08, // 000D GETMET R6 R6 K8
+ 0x58200009, // 000E LDCONST R8 K9
+ 0x5824000A, // 000F LDCONST R9 K10
+ 0x7C180600, // 0010 CALL R6 3
+ 0x78160003, // 0011 JMPF R5 #0016
+ 0x8C180B0B, // 0012 GETMET R6 R5 K11
+ 0x5C200200, // 0013 MOVE R8 R1
+ 0x7C180400, // 0014 CALL R6 2
+ 0x80040C00, // 0015 RET 1 R6
+ 0x7002000E, // 0016 JMP #0026
+ 0xB81A0E00, // 0017 GETNGBL R6 K7
+ 0x8C180D08, // 0018 GETMET R6 R6 K8
+ 0x8C20070C, // 0019 GETMET R8 R3 K12
+ 0x5828000D, // 001A LDCONST R10 K13
+ 0x5C2C0800, // 001B MOVE R11 R4
+ 0x7C200600, // 001C CALL R8 3
+ 0x5824000A, // 001D LDCONST R9 K10
+ 0x7C180600, // 001E CALL R6 3
+ 0x78160005, // 001F JMPF R5 #0026
+ 0x8C180B0E, // 0020 GETMET R6 R5 K14
+ 0x5C200200, // 0021 MOVE R8 R1
+ 0x7C180400, // 0022 CALL R6 2
+ 0x8C18010F, // 0023 GETMET R6 R0 K15
+ 0x88200304, // 0024 GETMBR R8 R1 K4
+ 0x7C180400, // 0025 CALL R6 2
+ 0x50180000, // 0026 LDBOOL R6 0 0
+ 0x80040C00, // 0027 RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_write_response
+********************************************************************/
+be_local_closure(Matter_IM_process_write_response, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
@@ -91,38 +171,36 @@ be_local_closure(Matter_IM_process_read_request, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(matter),
- /* K1 */ be_nested_str_weak(ReadRequestMessage),
- /* K2 */ be_nested_str_weak(from_TLV),
- /* K3 */ be_nested_str_weak(attributes_requests),
- /* K4 */ be_nested_str_weak(_inner_process_read_request),
- /* K5 */ be_nested_str_weak(session),
- /* K6 */ be_nested_str_weak(send_report_data),
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(WriteResponseMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteResponseMessage_X3D),
+ /* K7 */ be_const_int(2),
}),
- be_str_weak(process_read_request),
+ be_str_weak(process_write_response),
&be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
- 0xB80E0000, // 0000 GETNGBL R3 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C0702, // 0003 GETMET R3 R3 K2
- 0x5C140400, // 0004 MOVE R5 R2
- 0x7C0C0400, // 0005 CALL R3 2
- 0x88100703, // 0006 GETMBR R4 R3 K3
- 0x4C140000, // 0007 LDNIL R5
- 0x20100805, // 0008 NE R4 R4 R5
- 0x78120007, // 0009 JMPF R4 #0012
- 0x8C100104, // 000A GETMET R4 R0 K4
- 0x88180305, // 000B GETMBR R6 R1 K5
- 0x5C1C0600, // 000C MOVE R7 R3
- 0x7C100600, // 000D CALL R4 3
- 0x8C140106, // 000E GETMET R5 R0 K6
- 0x5C1C0200, // 000F MOVE R7 R1
- 0x5C200800, // 0010 MOVE R8 R4
- 0x7C140600, // 0011 CALL R5 3
- 0x50100200, // 0012 LDBOOL R4 1 0
- 0x80040800, // 0013 RET 1 R4
+ ( &(const binstruction[17]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x50140000, // 000F LDBOOL R5 0 0
+ 0x80040A00, // 0010 RET 1 R5
})
)
);
@@ -130,11 +208,328 @@ be_local_closure(Matter_IM_process_read_request, /* name */
/********************************************************************
-** Solidified function: send_subscribe_update
+** Solidified function: process_invoke_request
********************************************************************/
-be_local_closure(Matter_IM_send_subscribe_update, /* name */
+be_local_closure(Matter_IM_process_invoke_request, /* name */
be_nested_proto(
- 14, /* nstack */
+ 19, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[45]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(MTR_X3A_X20IM_X3Ainvoke_request_X20processing_X20start),
+ /* K4 */ be_nested_str_weak(matter),
+ /* K5 */ be_nested_str_weak(Path),
+ /* K6 */ be_nested_str_weak(InvokeRequestMessage),
+ /* K7 */ be_nested_str_weak(from_TLV),
+ /* K8 */ be_nested_str_weak(invoke_requests),
+ /* K9 */ be_nested_str_weak(InvokeResponseMessage),
+ /* K10 */ be_nested_str_weak(suppress_response),
+ /* K11 */ be_nested_str_weak(invoke_responses),
+ /* K12 */ be_nested_str_weak(endpoint),
+ /* K13 */ be_nested_str_weak(command_path),
+ /* K14 */ be_nested_str_weak(cluster),
+ /* K15 */ be_nested_str_weak(command),
+ /* K16 */ be_nested_str_weak(status),
+ /* K17 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
+ /* K18 */ be_nested_str_weak(get_command_name),
+ /* K19 */ be_nested_str_weak(format),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X25s_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K21 */ be_nested_str_weak(),
+ /* K22 */ be_nested_str_weak(remote_ip),
+ /* K23 */ be_nested_str_weak(remote_port),
+ /* K24 */ be_const_int(2),
+ /* K25 */ be_nested_str_weak(device),
+ /* K26 */ be_nested_str_weak(invoke_request),
+ /* K27 */ be_nested_str_weak(session),
+ /* K28 */ be_nested_str_weak(command_fields),
+ /* K29 */ be_nested_str_weak(InvokeResponseIB),
+ /* K30 */ be_nested_str_weak(CommandStatusIB),
+ /* K31 */ be_nested_str_weak(CommandPathIB),
+ /* K32 */ be_nested_str_weak(StatusIB),
+ /* K33 */ be_nested_str_weak(SUCCESS),
+ /* K34 */ be_nested_str_weak(push),
+ /* K35 */ be_nested_str_weak(CommandDataIB),
+ /* K36 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X25s_X20_X25s),
+ /* K37 */ be_nested_str_weak(stop_iteration),
+ /* K38 */ be_nested_str_weak(MTR_X3A_X20invoke_responses_X3D),
+ /* K39 */ be_const_int(0),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20InvokeResponse_X3D),
+ /* K41 */ be_nested_str_weak(MTR_X3A_X20InvokeResponseTLV_X3D),
+ /* K42 */ be_nested_str_weak(to_TLV),
+ /* K43 */ be_const_int(3),
+ /* K44 */ be_nested_str_weak(send_invoke_response),
+ }),
+ be_str_weak(process_invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[248]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x58180003, // 0003 LDCONST R6 K3
+ 0x541E0003, // 0004 LDINT R7 4
+ 0x7C100600, // 0005 CALL R4 3
+ 0xB8120800, // 0006 GETNGBL R4 K4
+ 0x8C100905, // 0007 GETMET R4 R4 K5
+ 0x7C100200, // 0008 CALL R4 1
+ 0xB8160800, // 0009 GETNGBL R5 K4
+ 0x8C140B06, // 000A GETMET R5 R5 K6
+ 0x7C140200, // 000B CALL R5 1
+ 0x8C140B07, // 000C GETMET R5 R5 K7
+ 0x5C1C0400, // 000D MOVE R7 R2
+ 0x7C140400, // 000E CALL R5 2
+ 0x88180B08, // 000F GETMBR R6 R5 K8
+ 0x4C1C0000, // 0010 LDNIL R7
+ 0x20180C07, // 0011 NE R6 R6 R7
+ 0x781A00E3, // 0012 JMPF R6 #00F7
+ 0xB81A0800, // 0013 GETNGBL R6 K4
+ 0x8C180D09, // 0014 GETMET R6 R6 K9
+ 0x7C180200, // 0015 CALL R6 1
+ 0x501C0000, // 0016 LDBOOL R7 0 0
+ 0x901A1407, // 0017 SETMBR R6 K10 R7
+ 0x601C0012, // 0018 GETGBL R7 G18
+ 0x7C1C0000, // 0019 CALL R7 0
+ 0x901A1607, // 001A SETMBR R6 K11 R7
+ 0x601C0010, // 001B GETGBL R7 G16
+ 0x88200B08, // 001C GETMBR R8 R5 K8
+ 0x7C1C0200, // 001D CALL R7 1
+ 0xA80200AD, // 001E EXBLK 0 #00CD
+ 0x5C200E00, // 001F MOVE R8 R7
+ 0x7C200000, // 0020 CALL R8 0
+ 0x8824110D, // 0021 GETMBR R9 R8 K13
+ 0x8824130C, // 0022 GETMBR R9 R9 K12
+ 0x90121809, // 0023 SETMBR R4 K12 R9
+ 0x8824110D, // 0024 GETMBR R9 R8 K13
+ 0x8824130E, // 0025 GETMBR R9 R9 K14
+ 0x90121C09, // 0026 SETMBR R4 K14 R9
+ 0x8824110D, // 0027 GETMBR R9 R8 K13
+ 0x8824130F, // 0028 GETMBR R9 R9 K15
+ 0x90121E09, // 0029 SETMBR R4 K15 R9
+ 0xB8260800, // 002A GETNGBL R9 K4
+ 0x88241311, // 002B GETMBR R9 R9 K17
+ 0x90122009, // 002C SETMBR R4 K16 R9
+ 0xB8260800, // 002D GETNGBL R9 K4
+ 0x8C241312, // 002E GETMET R9 R9 K18
+ 0x882C090E, // 002F GETMBR R11 R4 K14
+ 0x8830090F, // 0030 GETMBR R12 R4 K15
+ 0x7C240600, // 0031 CALL R9 3
+ 0xB82A0200, // 0032 GETNGBL R10 K1
+ 0x8C281502, // 0033 GETMET R10 R10 K2
+ 0x8C300713, // 0034 GETMET R12 R3 K19
+ 0x58380014, // 0035 LDCONST R14 K20
+ 0x603C0008, // 0036 GETGBL R15 G8
+ 0x5C400800, // 0037 MOVE R16 R4
+ 0x7C3C0200, // 0038 CALL R15 1
+ 0x78260001, // 0039 JMPF R9 #003C
+ 0x5C401200, // 003A MOVE R16 R9
+ 0x70020000, // 003B JMP #003D
+ 0x58400015, // 003C LDCONST R16 K21
+ 0x88440316, // 003D GETMBR R17 R1 K22
+ 0x88480317, // 003E GETMBR R18 R1 K23
+ 0x7C300C00, // 003F CALL R12 6
+ 0x58340018, // 0040 LDCONST R13 K24
+ 0x7C280600, // 0041 CALL R10 3
+ 0x88280119, // 0042 GETMBR R10 R0 K25
+ 0x8C28151A, // 0043 GETMET R10 R10 K26
+ 0x8830031B, // 0044 GETMBR R12 R1 K27
+ 0x8834111C, // 0045 GETMBR R13 R8 K28
+ 0x5C380800, // 0046 MOVE R14 R4
+ 0x7C280800, // 0047 CALL R10 4
+ 0xB82E0800, // 0048 GETNGBL R11 K4
+ 0x8C2C171D, // 0049 GETMET R11 R11 K29
+ 0x7C2C0200, // 004A CALL R11 1
+ 0x50300200, // 004B LDBOOL R12 1 0
+ 0x1C30140C, // 004C EQ R12 R10 R12
+ 0x78320023, // 004D JMPF R12 #0072
+ 0xB8320800, // 004E GETNGBL R12 K4
+ 0x8C30191E, // 004F GETMET R12 R12 K30
+ 0x7C300200, // 0050 CALL R12 1
+ 0x902E200C, // 0051 SETMBR R11 K16 R12
+ 0x88301710, // 0052 GETMBR R12 R11 K16
+ 0xB8360800, // 0053 GETNGBL R13 K4
+ 0x8C341B1F, // 0054 GETMET R13 R13 K31
+ 0x7C340200, // 0055 CALL R13 1
+ 0x90321A0D, // 0056 SETMBR R12 K13 R13
+ 0x88301710, // 0057 GETMBR R12 R11 K16
+ 0x8830190D, // 0058 GETMBR R12 R12 K13
+ 0x8834090C, // 0059 GETMBR R13 R4 K12
+ 0x9032180D, // 005A SETMBR R12 K12 R13
+ 0x88301710, // 005B GETMBR R12 R11 K16
+ 0x8830190D, // 005C GETMBR R12 R12 K13
+ 0x8834090E, // 005D GETMBR R13 R4 K14
+ 0x90321C0D, // 005E SETMBR R12 K14 R13
+ 0x88301710, // 005F GETMBR R12 R11 K16
+ 0x8830190D, // 0060 GETMBR R12 R12 K13
+ 0x8834090F, // 0061 GETMBR R13 R4 K15
+ 0x90321E0D, // 0062 SETMBR R12 K15 R13
+ 0x88301710, // 0063 GETMBR R12 R11 K16
+ 0xB8360800, // 0064 GETNGBL R13 K4
+ 0x8C341B20, // 0065 GETMET R13 R13 K32
+ 0x7C340200, // 0066 CALL R13 1
+ 0x9032200D, // 0067 SETMBR R12 K16 R13
+ 0x88301710, // 0068 GETMBR R12 R11 K16
+ 0x88301910, // 0069 GETMBR R12 R12 K16
+ 0xB8360800, // 006A GETNGBL R13 K4
+ 0x88341B21, // 006B GETMBR R13 R13 K33
+ 0x9032200D, // 006C SETMBR R12 K16 R13
+ 0x88300D0B, // 006D GETMBR R12 R6 K11
+ 0x8C301922, // 006E GETMET R12 R12 K34
+ 0x5C381600, // 006F MOVE R14 R11
+ 0x7C300400, // 0070 CALL R12 2
+ 0x70020059, // 0071 JMP #00CC
+ 0x4C300000, // 0072 LDNIL R12
+ 0x2030140C, // 0073 NE R12 R10 R12
+ 0x7832002F, // 0074 JMPF R12 #00A5
+ 0xB8320800, // 0075 GETNGBL R12 K4
+ 0x8C301923, // 0076 GETMET R12 R12 K35
+ 0x7C300200, // 0077 CALL R12 1
+ 0x902E1E0C, // 0078 SETMBR R11 K15 R12
+ 0x8830170F, // 0079 GETMBR R12 R11 K15
+ 0xB8360800, // 007A GETNGBL R13 K4
+ 0x8C341B1F, // 007B GETMET R13 R13 K31
+ 0x7C340200, // 007C CALL R13 1
+ 0x90321A0D, // 007D SETMBR R12 K13 R13
+ 0x8830170F, // 007E GETMBR R12 R11 K15
+ 0x8830190D, // 007F GETMBR R12 R12 K13
+ 0x8834090C, // 0080 GETMBR R13 R4 K12
+ 0x9032180D, // 0081 SETMBR R12 K12 R13
+ 0x8830170F, // 0082 GETMBR R12 R11 K15
+ 0x8830190D, // 0083 GETMBR R12 R12 K13
+ 0x8834090E, // 0084 GETMBR R13 R4 K14
+ 0x90321C0D, // 0085 SETMBR R12 K14 R13
+ 0x8830170F, // 0086 GETMBR R12 R11 K15
+ 0x8830190D, // 0087 GETMBR R12 R12 K13
+ 0x8834090F, // 0088 GETMBR R13 R4 K15
+ 0x90321E0D, // 0089 SETMBR R12 K15 R13
+ 0x8830170F, // 008A GETMBR R12 R11 K15
+ 0x9032380A, // 008B SETMBR R12 K28 R10
+ 0x88300D0B, // 008C GETMBR R12 R6 K11
+ 0x8C301922, // 008D GETMET R12 R12 K34
+ 0x5C381600, // 008E MOVE R14 R11
+ 0x7C300400, // 008F CALL R12 2
+ 0xB8320800, // 0090 GETNGBL R12 K4
+ 0x8C301912, // 0091 GETMET R12 R12 K18
+ 0x8838090E, // 0092 GETMBR R14 R4 K14
+ 0x883C090F, // 0093 GETMBR R15 R4 K15
+ 0x7C300600, // 0094 CALL R12 3
+ 0x5C241800, // 0095 MOVE R9 R12
+ 0xB8320200, // 0096 GETNGBL R12 K1
+ 0x8C301902, // 0097 GETMET R12 R12 K2
+ 0x8C380713, // 0098 GETMET R14 R3 K19
+ 0x58400024, // 0099 LDCONST R16 K36
+ 0x60440008, // 009A GETGBL R17 G8
+ 0x5C480800, // 009B MOVE R18 R4
+ 0x7C440200, // 009C CALL R17 1
+ 0x78260001, // 009D JMPF R9 #00A0
+ 0x5C481200, // 009E MOVE R18 R9
+ 0x70020000, // 009F JMP #00A1
+ 0x58480015, // 00A0 LDCONST R18 K21
+ 0x7C380800, // 00A1 CALL R14 4
+ 0x583C0018, // 00A2 LDCONST R15 K24
+ 0x7C300600, // 00A3 CALL R12 3
+ 0x70020026, // 00A4 JMP #00CC
+ 0x88300910, // 00A5 GETMBR R12 R4 K16
+ 0x4C340000, // 00A6 LDNIL R13
+ 0x2030180D, // 00A7 NE R12 R12 R13
+ 0x78320022, // 00A8 JMPF R12 #00CC
+ 0xB8320800, // 00A9 GETNGBL R12 K4
+ 0x8C30191E, // 00AA GETMET R12 R12 K30
+ 0x7C300200, // 00AB CALL R12 1
+ 0x902E200C, // 00AC SETMBR R11 K16 R12
+ 0x88301710, // 00AD GETMBR R12 R11 K16
+ 0xB8360800, // 00AE GETNGBL R13 K4
+ 0x8C341B1F, // 00AF GETMET R13 R13 K31
+ 0x7C340200, // 00B0 CALL R13 1
+ 0x90321A0D, // 00B1 SETMBR R12 K13 R13
+ 0x88301710, // 00B2 GETMBR R12 R11 K16
+ 0x8830190D, // 00B3 GETMBR R12 R12 K13
+ 0x8834090C, // 00B4 GETMBR R13 R4 K12
+ 0x9032180D, // 00B5 SETMBR R12 K12 R13
+ 0x88301710, // 00B6 GETMBR R12 R11 K16
+ 0x8830190D, // 00B7 GETMBR R12 R12 K13
+ 0x8834090E, // 00B8 GETMBR R13 R4 K14
+ 0x90321C0D, // 00B9 SETMBR R12 K14 R13
+ 0x88301710, // 00BA GETMBR R12 R11 K16
+ 0x8830190D, // 00BB GETMBR R12 R12 K13
+ 0x8834090F, // 00BC GETMBR R13 R4 K15
+ 0x90321E0D, // 00BD SETMBR R12 K15 R13
+ 0x88301710, // 00BE GETMBR R12 R11 K16
+ 0xB8360800, // 00BF GETNGBL R13 K4
+ 0x8C341B20, // 00C0 GETMET R13 R13 K32
+ 0x7C340200, // 00C1 CALL R13 1
+ 0x9032200D, // 00C2 SETMBR R12 K16 R13
+ 0x88301710, // 00C3 GETMBR R12 R11 K16
+ 0x88301910, // 00C4 GETMBR R12 R12 K16
+ 0x88340910, // 00C5 GETMBR R13 R4 K16
+ 0x9032200D, // 00C6 SETMBR R12 K16 R13
+ 0x88300D0B, // 00C7 GETMBR R12 R6 K11
+ 0x8C301922, // 00C8 GETMET R12 R12 K34
+ 0x5C381600, // 00C9 MOVE R14 R11
+ 0x7C300400, // 00CA CALL R12 2
+ 0x7001FFFF, // 00CB JMP #00CC
+ 0x7001FF51, // 00CC JMP #001F
+ 0x581C0025, // 00CD LDCONST R7 K37
+ 0xAC1C0200, // 00CE CATCH R7 1 0
+ 0xB0080000, // 00CF RAISE 2 R0 R0
+ 0xB81E0200, // 00D0 GETNGBL R7 K1
+ 0x8C1C0F02, // 00D1 GETMET R7 R7 K2
+ 0x60240008, // 00D2 GETGBL R9 G8
+ 0x88280D0B, // 00D3 GETMBR R10 R6 K11
+ 0x7C240200, // 00D4 CALL R9 1
+ 0x00264C09, // 00D5 ADD R9 K38 R9
+ 0x542A0003, // 00D6 LDINT R10 4
+ 0x7C1C0600, // 00D7 CALL R7 3
+ 0x601C000C, // 00D8 GETGBL R7 G12
+ 0x88200D0B, // 00D9 GETMBR R8 R6 K11
+ 0x7C1C0200, // 00DA CALL R7 1
+ 0x241C0F27, // 00DB GT R7 R7 K39
+ 0x781E0015, // 00DC JMPF R7 #00F3
+ 0xB81E0200, // 00DD GETNGBL R7 K1
+ 0x8C1C0F02, // 00DE GETMET R7 R7 K2
+ 0x60240008, // 00DF GETGBL R9 G8
+ 0x5C280C00, // 00E0 MOVE R10 R6
+ 0x7C240200, // 00E1 CALL R9 1
+ 0x00265009, // 00E2 ADD R9 K40 R9
+ 0x542A0003, // 00E3 LDINT R10 4
+ 0x7C1C0600, // 00E4 CALL R7 3
+ 0xB81E0200, // 00E5 GETNGBL R7 K1
+ 0x8C1C0F02, // 00E6 GETMET R7 R7 K2
+ 0x60240008, // 00E7 GETGBL R9 G8
+ 0x8C280D2A, // 00E8 GETMET R10 R6 K42
+ 0x7C280200, // 00E9 CALL R10 1
+ 0x7C240200, // 00EA CALL R9 1
+ 0x00265209, // 00EB ADD R9 K41 R9
+ 0x5828002B, // 00EC LDCONST R10 K43
+ 0x7C1C0600, // 00ED CALL R7 3
+ 0x8C1C012C, // 00EE GETMET R7 R0 K44
+ 0x5C240200, // 00EF MOVE R9 R1
+ 0x5C280C00, // 00F0 MOVE R10 R6
+ 0x7C1C0600, // 00F1 CALL R7 3
+ 0x70020001, // 00F2 JMP #00F5
+ 0x501C0000, // 00F3 LDBOOL R7 0 0
+ 0x80040E00, // 00F4 RET 1 R7
+ 0x501C0200, // 00F5 LDBOOL R7 1 0
+ 0x80040E00, // 00F6 RET 1 R7
+ 0x80000000, // 00F7 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_sendqueue_by_exchangeid
+********************************************************************/
+be_local_closure(Matter_IM_remove_sendqueue_by_exchangeid, /* name */
+ be_nested_proto(
+ 6, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -142,102 +537,40 @@ be_local_closure(Matter_IM_send_subscribe_update, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[25]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(session),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(ReadRequestMessage),
- /* K4 */ be_nested_str_weak(fabric_filtered),
- /* K5 */ be_nested_str_weak(attributes_requests),
- /* K6 */ be_nested_str_weak(updates),
- /* K7 */ be_nested_str_weak(AttributePathIB),
- /* K8 */ be_nested_str_weak(endpoint),
- /* K9 */ be_nested_str_weak(cluster),
- /* K10 */ be_nested_str_weak(attribute),
- /* K11 */ be_nested_str_weak(push),
- /* K12 */ be_nested_str_weak(stop_iteration),
- /* K13 */ be_nested_str_weak(tasmota),
- /* K14 */ be_nested_str_weak(log),
- /* K15 */ be_nested_str_weak(MTR_X3A_X20_X3CSub_ack_X20_X20_X20sub_id_X3D),
- /* K16 */ be_nested_str_weak(subscription_id),
- /* K17 */ be_const_int(2),
- /* K18 */ be_nested_str_weak(_inner_process_read_request),
- /* K19 */ be_nested_str_weak(suppress_response),
- /* K20 */ be_const_int(0),
- /* K21 */ be_nested_str_weak(send_queue),
- /* K22 */ be_nested_str_weak(IM_ReportDataSubscribed),
- /* K23 */ be_nested_str_weak(__message_handler),
- /* K24 */ be_nested_str_weak(send_enqueued),
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(get_exchangeid),
+ /* K3 */ be_nested_str_weak(remove),
+ /* K4 */ be_const_int(1),
}),
- be_str_weak(send_subscribe_update),
+ be_str_weak(remove_sendqueue_by_exchangeid),
&be_const_str_solidified,
- ( &(const binstruction[66]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0x880C0301, // 0001 GETMBR R3 R1 K1
- 0xB8120400, // 0002 GETNGBL R4 K2
- 0x8C100903, // 0003 GETMET R4 R4 K3
- 0x7C100200, // 0004 CALL R4 1
- 0x50140000, // 0005 LDBOOL R5 0 0
- 0x90120805, // 0006 SETMBR R4 K4 R5
- 0x60140012, // 0007 GETGBL R5 G18
- 0x7C140000, // 0008 CALL R5 0
- 0x90120A05, // 0009 SETMBR R4 K5 R5
- 0x60140010, // 000A GETGBL R5 G16
- 0x88180306, // 000B GETMBR R6 R1 K6
- 0x7C140200, // 000C CALL R5 1
- 0xA802000F, // 000D EXBLK 0 #001E
- 0x5C180A00, // 000E MOVE R6 R5
- 0x7C180000, // 000F CALL R6 0
- 0xB81E0400, // 0010 GETNGBL R7 K2
- 0x8C1C0F07, // 0011 GETMET R7 R7 K7
- 0x7C1C0200, // 0012 CALL R7 1
- 0x88200D08, // 0013 GETMBR R8 R6 K8
- 0x901E1008, // 0014 SETMBR R7 K8 R8
- 0x88200D09, // 0015 GETMBR R8 R6 K9
- 0x901E1208, // 0016 SETMBR R7 K9 R8
- 0x88200D0A, // 0017 GETMBR R8 R6 K10
- 0x901E1408, // 0018 SETMBR R7 K10 R8
- 0x88200905, // 0019 GETMBR R8 R4 K5
- 0x8C20110B, // 001A GETMET R8 R8 K11
- 0x5C280E00, // 001B MOVE R10 R7
- 0x7C200400, // 001C CALL R8 2
- 0x7001FFEF, // 001D JMP #000E
- 0x5814000C, // 001E LDCONST R5 K12
- 0xAC140200, // 001F CATCH R5 1 0
- 0xB0080000, // 0020 RAISE 2 R0 R0
- 0xB8161A00, // 0021 GETNGBL R5 K13
- 0x8C140B0E, // 0022 GETMET R5 R5 K14
- 0x601C0008, // 0023 GETGBL R7 G8
- 0x88200310, // 0024 GETMBR R8 R1 K16
- 0x7C1C0200, // 0025 CALL R7 1
- 0x001E1E07, // 0026 ADD R7 K15 R7
- 0x58200011, // 0027 LDCONST R8 K17
- 0x7C140600, // 0028 CALL R5 3
- 0x8C140112, // 0029 GETMET R5 R0 K18
- 0x5C1C0600, // 002A MOVE R7 R3
- 0x5C200800, // 002B MOVE R8 R4
- 0x7C140600, // 002C CALL R5 3
- 0x6018000C, // 002D GETGBL R6 G12
- 0x881C0905, // 002E GETMBR R7 R4 K5
- 0x7C180200, // 002F CALL R6 1
- 0x1C180D14, // 0030 EQ R6 R6 K20
- 0x90162606, // 0031 SETMBR R5 K19 R6
- 0x88180310, // 0032 GETMBR R6 R1 K16
- 0x90162006, // 0033 SETMBR R5 K16 R6
- 0x88180115, // 0034 GETMBR R6 R0 K21
- 0x8C180D0B, // 0035 GETMET R6 R6 K11
- 0xB8220400, // 0036 GETNGBL R8 K2
- 0x8C201116, // 0037 GETMET R8 R8 K22
- 0x88280717, // 0038 GETMBR R10 R3 K23
- 0x5C2C0600, // 0039 MOVE R11 R3
- 0x5C300A00, // 003A MOVE R12 R5
- 0x5C340200, // 003B MOVE R13 R1
- 0x7C200A00, // 003C CALL R8 5
- 0x7C180400, // 003D CALL R6 2
- 0x8C180118, // 003E GETMET R6 R0 K24
- 0x88200717, // 003F GETMBR R8 R3 K23
- 0x7C180400, // 0040 CALL R6 2
- 0x80000000, // 0041 RET 0
+ ( &(const binstruction[24]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0000, // 0002 JMPF R2 #0004
+ 0x80000400, // 0003 RET 0
+ 0x58080000, // 0004 LDCONST R2 K0
+ 0x600C000C, // 0005 GETGBL R3 G12
+ 0x88100101, // 0006 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0007 CALL R3 1
+ 0x140C0403, // 0008 LT R3 R2 R3
+ 0x780E000C, // 0009 JMPF R3 #0017
+ 0x880C0101, // 000A GETMBR R3 R0 K1
+ 0x940C0602, // 000B GETIDX R3 R3 R2
+ 0x8C0C0702, // 000C GETMET R3 R3 K2
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x1C0C0601, // 000E EQ R3 R3 R1
+ 0x780E0004, // 000F JMPF R3 #0015
+ 0x880C0101, // 0010 GETMBR R3 R0 K1
+ 0x8C0C0703, // 0011 GETMET R3 R3 K3
+ 0x5C140400, // 0012 MOVE R5 R2
+ 0x7C0C0400, // 0013 CALL R3 2
+ 0x70020000, // 0014 JMP #0016
+ 0x00080504, // 0015 ADD R2 R2 K4
+ 0x7001FFED, // 0016 JMP #0005
+ 0x80000000, // 0017 RET 0
})
)
);
@@ -281,6 +614,36 @@ be_local_closure(Matter_IM_send_write_response, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: every_250ms
+********************************************************************/
+be_local_closure(Matter_IM_every_250ms, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(subs),
+ /* K1 */ be_nested_str_weak(every_250ms),
+ }),
+ be_str_weak(every_250ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: subscribe_request
********************************************************************/
@@ -370,55 +733,6 @@ be_local_closure(Matter_IM_subscribe_request, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: process_write_response
-********************************************************************/
-be_local_closure(Matter_IM_process_write_response, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(WriteResponseMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteResponseMessage_X3D),
- /* K7 */ be_const_int(2),
- }),
- be_str_weak(process_write_response),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: process_incoming
********************************************************************/
@@ -599,11 +913,11 @@ be_local_closure(Matter_IM_process_incoming, /* name */
/********************************************************************
-** Solidified function: remove_sendqueue_by_exchangeid
+** Solidified function: init
********************************************************************/
-be_local_closure(Matter_IM_remove_sendqueue_by_exchangeid, /* name */
+be_local_closure(Matter_IM_init, /* name */
be_nested_proto(
- 6, /* nstack */
+ 5, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -612,76 +926,24 @@ be_local_closure(Matter_IM_remove_sendqueue_by_exchangeid, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_const_int(0),
+ /* K0 */ be_nested_str_weak(device),
/* K1 */ be_nested_str_weak(send_queue),
- /* K2 */ be_nested_str_weak(get_exchangeid),
- /* K3 */ be_nested_str_weak(remove),
- /* K4 */ be_const_int(1),
+ /* K2 */ be_nested_str_weak(subs),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(IM_Subscription_Shop),
}),
- be_str_weak(remove_sendqueue_by_exchangeid),
- &be_const_str_solidified,
- ( &(const binstruction[24]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0000, // 0002 JMPF R2 #0004
- 0x80000400, // 0003 RET 0
- 0x58080000, // 0004 LDCONST R2 K0
- 0x600C000C, // 0005 GETGBL R3 G12
- 0x88100101, // 0006 GETMBR R4 R0 K1
- 0x7C0C0200, // 0007 CALL R3 1
- 0x140C0403, // 0008 LT R3 R2 R3
- 0x780E000C, // 0009 JMPF R3 #0017
- 0x880C0101, // 000A GETMBR R3 R0 K1
- 0x940C0602, // 000B GETIDX R3 R3 R2
- 0x8C0C0702, // 000C GETMET R3 R3 K2
- 0x7C0C0200, // 000D CALL R3 1
- 0x1C0C0601, // 000E EQ R3 R3 R1
- 0x780E0004, // 000F JMPF R3 #0015
- 0x880C0101, // 0010 GETMBR R3 R0 K1
- 0x8C0C0703, // 0011 GETMET R3 R3 K3
- 0x5C140400, // 0012 MOVE R5 R2
- 0x7C0C0400, // 0013 CALL R3 2
- 0x70020000, // 0014 JMP #0016
- 0x00080504, // 0015 ADD R2 R2 K4
- 0x7001FFED, // 0016 JMP #0005
- 0x80000000, // 0017 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_subscribe_response
-********************************************************************/
-be_local_closure(Matter_IM_send_subscribe_response, /* name */
- be_nested_proto(
- 11, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_SubscribeResponse),
- }),
- be_str_weak(send_subscribe_response),
+ be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[10]) { /* code */
- 0x88100100, // 0000 GETMBR R4 R0 K0
- 0x8C100901, // 0001 GETMET R4 R4 K1
- 0xB81A0400, // 0002 GETNGBL R6 K2
- 0x8C180D03, // 0003 GETMET R6 R6 K3
- 0x5C200200, // 0004 MOVE R8 R1
- 0x5C240400, // 0005 MOVE R9 R2
- 0x5C280600, // 0006 MOVE R10 R3
- 0x7C180800, // 0007 CALL R6 4
- 0x7C100400, // 0008 CALL R4 2
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x60080012, // 0001 GETGBL R2 G18
+ 0x7C080000, // 0002 CALL R2 0
+ 0x90020202, // 0003 SETMBR R0 K1 R2
+ 0xB80A0600, // 0004 GETNGBL R2 K3
+ 0x8C080504, // 0005 GETMET R2 R2 K4
+ 0x5C100000, // 0006 MOVE R4 R0
+ 0x7C080400, // 0007 CALL R2 2
+ 0x90020402, // 0008 SETMBR R0 K2 R2
0x80000000, // 0009 RET 0
})
)
@@ -690,11 +952,11 @@ be_local_closure(Matter_IM_send_subscribe_response, /* name */
/********************************************************************
-** Solidified function: process_status_response
+** Solidified function: report_data
********************************************************************/
-be_local_closure(Matter_IM_process_status_response, /* name */
+be_local_closure(Matter_IM_report_data, /* name */
be_nested_proto(
- 12, /* nstack */
+ 9, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@@ -702,67 +964,36 @@ be_local_closure(Matter_IM_process_status_response, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[16]) { /* constants */
+ ( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(findsubval),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
- /* K4 */ be_nested_str_weak(exchange_id),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(SUCCESS),
- /* K7 */ be_nested_str_weak(tasmota),
- /* K8 */ be_nested_str_weak(log),
- /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus),
- /* K10 */ be_const_int(2),
- /* K11 */ be_nested_str_weak(ack_received),
- /* K12 */ be_nested_str_weak(format),
- /* K13 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_X20_X20_X20_X20ERROR_X20_X3D_X200x_X2502X),
- /* K14 */ be_nested_str_weak(ack_error),
- /* K15 */ be_nested_str_weak(remove_sendqueue_by_exchangeid),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(ReportDataMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20ReportDataMessage_X3D),
+ /* K7 */ be_const_int(2),
}),
- be_str_weak(process_status_response),
+ be_str_weak(report_data),
&be_const_str_solidified,
- ( &(const binstruction[40]) { /* code */
+ ( &(const binstruction[17]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
- 0x8C100501, // 0001 GETMET R4 R2 K1
- 0x58180002, // 0002 LDCONST R6 K2
- 0x541E00FE, // 0003 LDINT R7 255
- 0x7C100600, // 0004 CALL R4 3
- 0x8C140103, // 0005 GETMET R5 R0 K3
- 0x881C0304, // 0006 GETMBR R7 R1 K4
- 0x7C140400, // 0007 CALL R5 2
- 0xB81A0A00, // 0008 GETNGBL R6 K5
- 0x88180D06, // 0009 GETMBR R6 R6 K6
- 0x1C180806, // 000A EQ R6 R4 R6
- 0x781A000A, // 000B JMPF R6 #0017
- 0xB81A0E00, // 000C GETNGBL R6 K7
- 0x8C180D08, // 000D GETMET R6 R6 K8
- 0x58200009, // 000E LDCONST R8 K9
- 0x5824000A, // 000F LDCONST R9 K10
- 0x7C180600, // 0010 CALL R6 3
- 0x78160003, // 0011 JMPF R5 #0016
- 0x8C180B0B, // 0012 GETMET R6 R5 K11
- 0x5C200200, // 0013 MOVE R8 R1
- 0x7C180400, // 0014 CALL R6 2
- 0x80040C00, // 0015 RET 1 R6
- 0x7002000E, // 0016 JMP #0026
- 0xB81A0E00, // 0017 GETNGBL R6 K7
- 0x8C180D08, // 0018 GETMET R6 R6 K8
- 0x8C20070C, // 0019 GETMET R8 R3 K12
- 0x5828000D, // 001A LDCONST R10 K13
- 0x5C2C0800, // 001B MOVE R11 R4
- 0x7C200600, // 001C CALL R8 3
- 0x5824000A, // 001D LDCONST R9 K10
- 0x7C180600, // 001E CALL R6 3
- 0x78160005, // 001F JMPF R5 #0026
- 0x8C180B0E, // 0020 GETMET R6 R5 K14
- 0x5C200200, // 0021 MOVE R8 R1
- 0x7C180400, // 0022 CALL R6 2
- 0x8C18010F, // 0023 GETMET R6 R0 K15
- 0x88200304, // 0024 GETMBR R8 R1 K4
- 0x7C180400, // 0025 CALL R6 2
- 0x50180000, // 0026 LDBOOL R6 0 0
- 0x80040C00, // 0027 RET 1 R6
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x50140000, // 000F LDBOOL R5 0 0
+ 0x80040A00, // 0010 RET 1 R5
})
)
);
@@ -1034,9 +1265,9 @@ be_local_closure(Matter_IM__inner_process_read_request, /* name */
/* K20 */ be_nested_str_weak(process_attribute_expansion),
/* K21 */ be_nested_str_weak(stop_iteration),
/* K22 */ be_nested_str_weak(MTR_X3A_X20ReportDataMessage_X3D),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20ReportDataMessageTLV_X3D),
- /* K24 */ be_nested_str_weak(to_TLV),
- /* K25 */ be_const_int(3),
+ /* K23 */ be_const_int(3),
+ /* K24 */ be_nested_str_weak(MTR_X3A_X20ReportDataMessageTLV_X3D),
+ /* K25 */ be_nested_str_weak(to_TLV),
}),
be_str_weak(_inner_process_read_request),
&be_const_str_solidified,
@@ -1132,16 +1363,16 @@ be_local_closure(Matter_IM__inner_process_read_request, /* name */
0x5C280C00, // 0058 MOVE R10 R6
0x7C240200, // 0059 CALL R9 1
0x00262C09, // 005A ADD R9 K22 R9
- 0x542A0003, // 005B LDINT R10 4
+ 0x58280017, // 005B LDCONST R10 K23
0x7C1C0600, // 005C CALL R7 3
0xB81E1A00, // 005D GETNGBL R7 K13
0x8C1C0F0E, // 005E GETMET R7 R7 K14
0x60240008, // 005F GETGBL R9 G8
- 0x8C280D18, // 0060 GETMET R10 R6 K24
+ 0x8C280D19, // 0060 GETMET R10 R6 K25
0x7C280200, // 0061 CALL R10 1
0x7C240200, // 0062 CALL R9 1
- 0x00262E09, // 0063 ADD R9 K23 R9
- 0x58280019, // 0064 LDCONST R10 K25
+ 0x00263009, // 0063 ADD R9 K24 R9
+ 0x58280017, // 0064 LDCONST R10 K23
0x7C1C0600, // 0065 CALL R7 3
0xA0000000, // 0066 CLOSE R0
0x80040C00, // 0067 RET 1 R6
@@ -1151,55 +1382,6 @@ be_local_closure(Matter_IM__inner_process_read_request, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: report_data
-********************************************************************/
-be_local_closure(Matter_IM_report_data, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(ReportDataMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20ReportDataMessage_X3D),
- /* K7 */ be_const_int(2),
- }),
- be_str_weak(report_data),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: send_enqueued
********************************************************************/
@@ -1256,9 +1438,9 @@ be_local_closure(Matter_IM_send_enqueued, /* name */
/********************************************************************
-** Solidified function: process_invoke_response
+** Solidified function: send_invoke_response
********************************************************************/
-be_local_closure(Matter_IM_process_invoke_response, /* name */
+be_local_closure(Matter_IM_send_invoke_response, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
@@ -1268,36 +1450,252 @@ be_local_closure(Matter_IM_process_invoke_response, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(InvokeResponseMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20InvokeResponseMessage_X3D),
- /* K7 */ be_const_int(2),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_InvokeResponse),
}),
- be_str_weak(process_invoke_response),
+ be_str_weak(send_invoke_response),
&be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_subscribe_update
+********************************************************************/
+be_local_closure(Matter_IM_send_subscribe_update, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[26]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(ReadRequestMessage),
+ /* K4 */ be_nested_str_weak(fabric_filtered),
+ /* K5 */ be_nested_str_weak(attributes_requests),
+ /* K6 */ be_nested_str_weak(updates),
+ /* K7 */ be_nested_str_weak(AttributePathIB),
+ /* K8 */ be_nested_str_weak(endpoint),
+ /* K9 */ be_nested_str_weak(cluster),
+ /* K10 */ be_nested_str_weak(attribute),
+ /* K11 */ be_nested_str_weak(push),
+ /* K12 */ be_nested_str_weak(stop_iteration),
+ /* K13 */ be_const_int(0),
+ /* K14 */ be_nested_str_weak(tasmota),
+ /* K15 */ be_nested_str_weak(log),
+ /* K16 */ be_nested_str_weak(MTR_X3A_X20_X3CSub_data_X20_X20sub_id_X3D),
+ /* K17 */ be_nested_str_weak(subscription_id),
+ /* K18 */ be_const_int(2),
+ /* K19 */ be_nested_str_weak(MTR_X3A_X20_X3CSub_alive_X20sub_id_X3D),
+ /* K20 */ be_nested_str_weak(_inner_process_read_request),
+ /* K21 */ be_nested_str_weak(suppress_response),
+ /* K22 */ be_nested_str_weak(send_queue),
+ /* K23 */ be_nested_str_weak(IM_ReportDataSubscribed),
+ /* K24 */ be_nested_str_weak(__message_handler),
+ /* K25 */ be_nested_str_weak(send_enqueued),
+ }),
+ be_str_weak(send_subscribe_update),
+ &be_const_str_solidified,
+ ( &(const binstruction[80]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0301, // 0001 GETMBR R3 R1 K1
+ 0xB8120400, // 0002 GETNGBL R4 K2
+ 0x8C100903, // 0003 GETMET R4 R4 K3
+ 0x7C100200, // 0004 CALL R4 1
+ 0x50140000, // 0005 LDBOOL R5 0 0
+ 0x90120805, // 0006 SETMBR R4 K4 R5
+ 0x60140012, // 0007 GETGBL R5 G18
+ 0x7C140000, // 0008 CALL R5 0
+ 0x90120A05, // 0009 SETMBR R4 K5 R5
+ 0x60140010, // 000A GETGBL R5 G16
+ 0x88180306, // 000B GETMBR R6 R1 K6
+ 0x7C140200, // 000C CALL R5 1
+ 0xA802000F, // 000D EXBLK 0 #001E
+ 0x5C180A00, // 000E MOVE R6 R5
+ 0x7C180000, // 000F CALL R6 0
+ 0xB81E0400, // 0010 GETNGBL R7 K2
+ 0x8C1C0F07, // 0011 GETMET R7 R7 K7
+ 0x7C1C0200, // 0012 CALL R7 1
+ 0x88200D08, // 0013 GETMBR R8 R6 K8
+ 0x901E1008, // 0014 SETMBR R7 K8 R8
+ 0x88200D09, // 0015 GETMBR R8 R6 K9
+ 0x901E1208, // 0016 SETMBR R7 K9 R8
+ 0x88200D0A, // 0017 GETMBR R8 R6 K10
+ 0x901E1408, // 0018 SETMBR R7 K10 R8
+ 0x88200905, // 0019 GETMBR R8 R4 K5
+ 0x8C20110B, // 001A GETMET R8 R8 K11
+ 0x5C280E00, // 001B MOVE R10 R7
+ 0x7C200400, // 001C CALL R8 2
+ 0x7001FFEF, // 001D JMP #000E
+ 0x5814000C, // 001E LDCONST R5 K12
+ 0xAC140200, // 001F CATCH R5 1 0
+ 0xB0080000, // 0020 RAISE 2 R0 R0
+ 0x6014000C, // 0021 GETGBL R5 G12
+ 0x88180905, // 0022 GETMBR R6 R4 K5
+ 0x7C140200, // 0023 CALL R5 1
+ 0x24140B0D, // 0024 GT R5 R5 K13
+ 0x78160008, // 0025 JMPF R5 #002F
+ 0xB8161C00, // 0026 GETNGBL R5 K14
+ 0x8C140B0F, // 0027 GETMET R5 R5 K15
+ 0x601C0008, // 0028 GETGBL R7 G8
+ 0x88200311, // 0029 GETMBR R8 R1 K17
+ 0x7C1C0200, // 002A CALL R7 1
+ 0x001E2007, // 002B ADD R7 K16 R7
+ 0x58200012, // 002C LDCONST R8 K18
+ 0x7C140600, // 002D CALL R5 3
+ 0x70020007, // 002E JMP #0037
+ 0xB8161C00, // 002F GETNGBL R5 K14
+ 0x8C140B0F, // 0030 GETMET R5 R5 K15
+ 0x601C0008, // 0031 GETGBL R7 G8
+ 0x88200311, // 0032 GETMBR R8 R1 K17
+ 0x7C1C0200, // 0033 CALL R7 1
+ 0x001E2607, // 0034 ADD R7 K19 R7
+ 0x58200012, // 0035 LDCONST R8 K18
+ 0x7C140600, // 0036 CALL R5 3
+ 0x8C140114, // 0037 GETMET R5 R0 K20
+ 0x5C1C0600, // 0038 MOVE R7 R3
+ 0x5C200800, // 0039 MOVE R8 R4
+ 0x7C140600, // 003A CALL R5 3
+ 0x6018000C, // 003B GETGBL R6 G12
+ 0x881C0905, // 003C GETMBR R7 R4 K5
+ 0x7C180200, // 003D CALL R6 1
+ 0x1C180D0D, // 003E EQ R6 R6 K13
+ 0x90162A06, // 003F SETMBR R5 K21 R6
+ 0x88180311, // 0040 GETMBR R6 R1 K17
+ 0x90162206, // 0041 SETMBR R5 K17 R6
+ 0x88180116, // 0042 GETMBR R6 R0 K22
+ 0x8C180D0B, // 0043 GETMET R6 R6 K11
+ 0xB8220400, // 0044 GETNGBL R8 K2
+ 0x8C201117, // 0045 GETMET R8 R8 K23
+ 0x88280718, // 0046 GETMBR R10 R3 K24
+ 0x5C2C0600, // 0047 MOVE R11 R3
+ 0x5C300A00, // 0048 MOVE R12 R5
+ 0x5C340200, // 0049 MOVE R13 R1
+ 0x7C200A00, // 004A CALL R8 5
+ 0x7C180400, // 004B CALL R6 2
+ 0x8C180119, // 004C GETMET R6 R0 K25
+ 0x88200718, // 004D GETMBR R8 R3 K24
+ 0x7C180400, // 004E CALL R6 2
+ 0x80000000, // 004F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_IM_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_status
+********************************************************************/
+be_local_closure(Matter_IM_send_status, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_Status),
+ }),
+ be_str_weak(send_status),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_report_data
+********************************************************************/
+be_local_closure(Matter_IM_send_report_data, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_ReportData),
+ }),
+ be_str_weak(send_report_data),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
})
)
);
@@ -1668,9 +2066,9 @@ be_local_closure(Matter_IM_process_write_request, /* name */
/********************************************************************
-** Solidified function: find_sendqueue_by_exchangeid
+** Solidified function: process_incoming_ack
********************************************************************/
-be_local_closure(Matter_IM_find_sendqueue_by_exchangeid, /* name */
+be_local_closure(Matter_IM_process_incoming_ack, /* name */
be_nested_proto(
6, /* nstack */
2, /* argc */
@@ -1680,37 +2078,24 @@ be_local_closure(Matter_IM_find_sendqueue_by_exchangeid, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(send_queue),
- /* K2 */ be_nested_str_weak(get_exchangeid),
- /* K3 */ be_const_int(1),
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
+ /* K1 */ be_nested_str_weak(exchange_id),
+ /* K2 */ be_nested_str_weak(ack_received),
}),
- be_str_weak(find_sendqueue_by_exchangeid),
+ be_str_weak(process_incoming_ack),
&be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0001, // 0002 JMPF R2 #0005
- 0x4C080000, // 0003 LDNIL R2
- 0x80040400, // 0004 RET 1 R2
- 0x58080000, // 0005 LDCONST R2 K0
- 0x600C000C, // 0006 GETGBL R3 G12
- 0x88100101, // 0007 GETMBR R4 R0 K1
- 0x7C0C0200, // 0008 CALL R3 1
- 0x140C0403, // 0009 LT R3 R2 R3
- 0x780E0008, // 000A JMPF R3 #0014
- 0x880C0101, // 000B GETMBR R3 R0 K1
- 0x940C0602, // 000C GETIDX R3 R3 R2
- 0x8C100702, // 000D GETMET R4 R3 K2
- 0x7C100200, // 000E CALL R4 1
- 0x1C100801, // 000F EQ R4 R4 R1
- 0x78120000, // 0010 JMPF R4 #0012
- 0x80040600, // 0011 RET 1 R3
- 0x00080503, // 0012 ADD R2 R2 K3
- 0x7001FFF1, // 0013 JMP #0006
- 0x4C0C0000, // 0014 LDNIL R3
- 0x80040600, // 0015 RET 1 R3
+ ( &(const binstruction[10]) { /* code */
+ 0x8C080100, // 0000 GETMET R2 R0 K0
+ 0x88100301, // 0001 GETMBR R4 R1 K1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x780A0003, // 0003 JMPF R2 #0008
+ 0x8C0C0502, // 0004 GETMET R3 R2 K2
+ 0x5C140200, // 0005 MOVE R5 R1
+ 0x7C0C0400, // 0006 CALL R3 2
+ 0x80040600, // 0007 RET 1 R3
+ 0x500C0000, // 0008 LDBOOL R3 0 0
+ 0x80040600, // 0009 RET 1 R3
})
)
);
@@ -1718,12 +2103,12 @@ be_local_closure(Matter_IM_find_sendqueue_by_exchangeid, /* name */
/********************************************************************
-** Solidified function: send_status
+** Solidified function: send_subscribe_response
********************************************************************/
-be_local_closure(Matter_IM_send_status, /* name */
+be_local_closure(Matter_IM_send_subscribe_response, /* name */
be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
+ 11, /* nstack */
+ 4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -1734,81 +2119,21 @@ be_local_closure(Matter_IM_send_status, /* name */
/* K0 */ be_nested_str_weak(send_queue),
/* K1 */ be_nested_str_weak(push),
/* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_Status),
+ /* K3 */ be_nested_str_weak(IM_SubscribeResponse),
}),
- be_str_weak(send_status),
+ be_str_weak(send_subscribe_response),
&be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_report_data
-********************************************************************/
-be_local_closure(Matter_IM_send_report_data, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_ReportData),
- }),
- be_str_weak(send_report_data),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: every_second
-********************************************************************/
-be_local_closure(Matter_IM_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
+ ( &(const binstruction[10]) { /* code */
+ 0x88100100, // 0000 GETMBR R4 R0 K0
+ 0x8C100901, // 0001 GETMET R4 R4 K1
+ 0xB81A0400, // 0002 GETNGBL R6 K2
+ 0x8C180D03, // 0003 GETMET R6 R6 K3
+ 0x5C200200, // 0004 MOVE R8 R1
+ 0x5C240400, // 0005 MOVE R9 R2
+ 0x5C280600, // 0006 MOVE R10 R3
+ 0x7C180800, // 0007 CALL R6 4
+ 0x7C100400, // 0008 CALL R4 2
+ 0x80000000, // 0009 RET 0
})
)
);
@@ -1865,9 +2190,59 @@ be_local_closure(Matter_IM_subscribe_response, /* name */
/********************************************************************
-** Solidified function: send_invoke_response
+** Solidified function: find_sendqueue_by_exchangeid
********************************************************************/
-be_local_closure(Matter_IM_send_invoke_response, /* name */
+be_local_closure(Matter_IM_find_sendqueue_by_exchangeid, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(get_exchangeid),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(find_sendqueue_by_exchangeid),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x4C080000, // 0003 LDNIL R2
+ 0x80040400, // 0004 RET 1 R2
+ 0x58080000, // 0005 LDCONST R2 K0
+ 0x600C000C, // 0006 GETGBL R3 G12
+ 0x88100101, // 0007 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0x140C0403, // 0009 LT R3 R2 R3
+ 0x780E0008, // 000A JMPF R3 #0014
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x940C0602, // 000C GETIDX R3 R3 R2
+ 0x8C100702, // 000D GETMET R4 R3 K2
+ 0x7C100200, // 000E CALL R4 1
+ 0x1C100801, // 000F EQ R4 R4 R1
+ 0x78120000, // 0010 JMPF R4 #0012
+ 0x80040600, // 0011 RET 1 R3
+ 0x00080503, // 0012 ADD R2 R2 K3
+ 0x7001FFF1, // 0013 JMP #0006
+ 0x4C0C0000, // 0014 LDNIL R3
+ 0x80040600, // 0015 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_read_request
+********************************************************************/
+be_local_closure(Matter_IM_process_read_request, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
@@ -1877,24 +2252,38 @@ be_local_closure(Matter_IM_send_invoke_response, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_InvokeResponse),
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(ReadRequestMessage),
+ /* K2 */ be_nested_str_weak(from_TLV),
+ /* K3 */ be_nested_str_weak(attributes_requests),
+ /* K4 */ be_nested_str_weak(_inner_process_read_request),
+ /* K5 */ be_nested_str_weak(session),
+ /* K6 */ be_nested_str_weak(send_report_data),
}),
- be_str_weak(send_invoke_response),
+ be_str_weak(process_read_request),
&be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
+ ( &(const binstruction[20]) { /* code */
+ 0xB80E0000, // 0000 GETNGBL R3 K0
0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0702, // 0003 GETMET R3 R3 K2
+ 0x5C140400, // 0004 MOVE R5 R2
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x88100703, // 0006 GETMBR R4 R3 K3
+ 0x4C140000, // 0007 LDNIL R5
+ 0x20100805, // 0008 NE R4 R4 R5
+ 0x78120007, // 0009 JMPF R4 #0012
+ 0x8C100104, // 000A GETMET R4 R0 K4
+ 0x88180305, // 000B GETMBR R6 R1 K5
+ 0x5C1C0600, // 000C MOVE R7 R3
+ 0x7C100600, // 000D CALL R4 3
+ 0x8C140106, // 000E GETMET R5 R0 K6
+ 0x5C1C0200, // 000F MOVE R7 R1
+ 0x5C200800, // 0010 MOVE R8 R4
+ 0x7C140600, // 0011 CALL R5 3
+ 0x50100200, // 0012 LDBOOL R4 1 0
+ 0x80040800, // 0013 RET 1 R4
})
)
);
@@ -1902,80 +2291,11 @@ be_local_closure(Matter_IM_send_invoke_response, /* name */
/********************************************************************
-** Solidified function: init
+** Solidified function: process_invoke_response
********************************************************************/
-be_local_closure(Matter_IM_init, /* name */
+be_local_closure(Matter_IM_process_invoke_response, /* name */
be_nested_proto(
- 5, /* nstack */
- 2, /* 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(device),
- /* K1 */ be_nested_str_weak(send_queue),
- /* K2 */ be_nested_str_weak(subs),
- /* K3 */ be_nested_str_weak(matter),
- /* K4 */ be_nested_str_weak(IM_Subscription_Shop),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x60080012, // 0001 GETGBL R2 G18
- 0x7C080000, // 0002 CALL R2 0
- 0x90020202, // 0003 SETMBR R0 K1 R2
- 0xB80A0600, // 0004 GETNGBL R2 K3
- 0x8C080504, // 0005 GETMET R2 R2 K4
- 0x5C100000, // 0006 MOVE R4 R0
- 0x7C080400, // 0007 CALL R2 2
- 0x90020402, // 0008 SETMBR R0 K2 R2
- 0x80000000, // 0009 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: every_250ms
-********************************************************************/
-be_local_closure(Matter_IM_every_250ms, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(subs),
- /* K1 */ be_nested_str_weak(every_250ms),
- }),
- be_str_weak(every_250ms),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x80000000, // 0003 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_invoke_request
-********************************************************************/
-be_local_closure(Matter_IM_process_invoke_request, /* name */
- be_nested_proto(
- 19, /* nstack */
+ 9, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1983,304 +2303,36 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[45]) { /* constants */
+ ( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(MTR_X3A_X20IM_X3Ainvoke_request_X20processing_X20start),
- /* K4 */ be_nested_str_weak(matter),
- /* K5 */ be_nested_str_weak(Path),
- /* K6 */ be_nested_str_weak(InvokeRequestMessage),
- /* K7 */ be_nested_str_weak(from_TLV),
- /* K8 */ be_nested_str_weak(invoke_requests),
- /* K9 */ be_nested_str_weak(InvokeResponseMessage),
- /* K10 */ be_nested_str_weak(suppress_response),
- /* K11 */ be_nested_str_weak(invoke_responses),
- /* K12 */ be_nested_str_weak(endpoint),
- /* K13 */ be_nested_str_weak(command_path),
- /* K14 */ be_nested_str_weak(cluster),
- /* K15 */ be_nested_str_weak(command),
- /* K16 */ be_nested_str_weak(status),
- /* K17 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
- /* K18 */ be_nested_str_weak(get_command_name),
- /* K19 */ be_nested_str_weak(format),
- /* K20 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X25s_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K21 */ be_nested_str_weak(),
- /* K22 */ be_nested_str_weak(remote_ip),
- /* K23 */ be_nested_str_weak(remote_port),
- /* K24 */ be_const_int(2),
- /* K25 */ be_nested_str_weak(device),
- /* K26 */ be_nested_str_weak(invoke_request),
- /* K27 */ be_nested_str_weak(session),
- /* K28 */ be_nested_str_weak(command_fields),
- /* K29 */ be_nested_str_weak(InvokeResponseIB),
- /* K30 */ be_nested_str_weak(CommandStatusIB),
- /* K31 */ be_nested_str_weak(CommandPathIB),
- /* K32 */ be_nested_str_weak(StatusIB),
- /* K33 */ be_nested_str_weak(SUCCESS),
- /* K34 */ be_nested_str_weak(push),
- /* K35 */ be_nested_str_weak(CommandDataIB),
- /* K36 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X25s_X20_X25s),
- /* K37 */ be_nested_str_weak(stop_iteration),
- /* K38 */ be_nested_str_weak(MTR_X3A_X20invoke_responses_X3D),
- /* K39 */ be_const_int(0),
- /* K40 */ be_nested_str_weak(MTR_X3A_X20InvokeResponse_X3D),
- /* K41 */ be_nested_str_weak(MTR_X3A_X20InvokeResponseTLV_X3D),
- /* K42 */ be_nested_str_weak(to_TLV),
- /* K43 */ be_const_int(3),
- /* K44 */ be_nested_str_weak(send_invoke_response),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(InvokeResponseMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20InvokeResponseMessage_X3D),
+ /* K7 */ be_const_int(2),
}),
- be_str_weak(process_invoke_request),
+ be_str_weak(process_invoke_response),
&be_const_str_solidified,
- ( &(const binstruction[248]) { /* code */
+ ( &(const binstruction[17]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x8C100902, // 0002 GETMET R4 R4 K2
- 0x58180003, // 0003 LDCONST R6 K3
- 0x541E0003, // 0004 LDINT R7 4
- 0x7C100600, // 0005 CALL R4 3
- 0xB8120800, // 0006 GETNGBL R4 K4
- 0x8C100905, // 0007 GETMET R4 R4 K5
- 0x7C100200, // 0008 CALL R4 1
- 0xB8160800, // 0009 GETNGBL R5 K4
- 0x8C140B06, // 000A GETMET R5 R5 K6
- 0x7C140200, // 000B CALL R5 1
- 0x8C140B07, // 000C GETMET R5 R5 K7
- 0x5C1C0400, // 000D MOVE R7 R2
- 0x7C140400, // 000E CALL R5 2
- 0x88180B08, // 000F GETMBR R6 R5 K8
- 0x4C1C0000, // 0010 LDNIL R7
- 0x20180C07, // 0011 NE R6 R6 R7
- 0x781A00E3, // 0012 JMPF R6 #00F7
- 0xB81A0800, // 0013 GETNGBL R6 K4
- 0x8C180D09, // 0014 GETMET R6 R6 K9
- 0x7C180200, // 0015 CALL R6 1
- 0x501C0000, // 0016 LDBOOL R7 0 0
- 0x901A1407, // 0017 SETMBR R6 K10 R7
- 0x601C0012, // 0018 GETGBL R7 G18
- 0x7C1C0000, // 0019 CALL R7 0
- 0x901A1607, // 001A SETMBR R6 K11 R7
- 0x601C0010, // 001B GETGBL R7 G16
- 0x88200B08, // 001C GETMBR R8 R5 K8
- 0x7C1C0200, // 001D CALL R7 1
- 0xA80200AD, // 001E EXBLK 0 #00CD
- 0x5C200E00, // 001F MOVE R8 R7
- 0x7C200000, // 0020 CALL R8 0
- 0x8824110D, // 0021 GETMBR R9 R8 K13
- 0x8824130C, // 0022 GETMBR R9 R9 K12
- 0x90121809, // 0023 SETMBR R4 K12 R9
- 0x8824110D, // 0024 GETMBR R9 R8 K13
- 0x8824130E, // 0025 GETMBR R9 R9 K14
- 0x90121C09, // 0026 SETMBR R4 K14 R9
- 0x8824110D, // 0027 GETMBR R9 R8 K13
- 0x8824130F, // 0028 GETMBR R9 R9 K15
- 0x90121E09, // 0029 SETMBR R4 K15 R9
- 0xB8260800, // 002A GETNGBL R9 K4
- 0x88241311, // 002B GETMBR R9 R9 K17
- 0x90122009, // 002C SETMBR R4 K16 R9
- 0xB8260800, // 002D GETNGBL R9 K4
- 0x8C241312, // 002E GETMET R9 R9 K18
- 0x882C090E, // 002F GETMBR R11 R4 K14
- 0x8830090F, // 0030 GETMBR R12 R4 K15
- 0x7C240600, // 0031 CALL R9 3
- 0xB82A0200, // 0032 GETNGBL R10 K1
- 0x8C281502, // 0033 GETMET R10 R10 K2
- 0x8C300713, // 0034 GETMET R12 R3 K19
- 0x58380014, // 0035 LDCONST R14 K20
- 0x603C0008, // 0036 GETGBL R15 G8
- 0x5C400800, // 0037 MOVE R16 R4
- 0x7C3C0200, // 0038 CALL R15 1
- 0x78260001, // 0039 JMPF R9 #003C
- 0x5C401200, // 003A MOVE R16 R9
- 0x70020000, // 003B JMP #003D
- 0x58400015, // 003C LDCONST R16 K21
- 0x88440316, // 003D GETMBR R17 R1 K22
- 0x88480317, // 003E GETMBR R18 R1 K23
- 0x7C300C00, // 003F CALL R12 6
- 0x58340018, // 0040 LDCONST R13 K24
- 0x7C280600, // 0041 CALL R10 3
- 0x88280119, // 0042 GETMBR R10 R0 K25
- 0x8C28151A, // 0043 GETMET R10 R10 K26
- 0x8830031B, // 0044 GETMBR R12 R1 K27
- 0x8834111C, // 0045 GETMBR R13 R8 K28
- 0x5C380800, // 0046 MOVE R14 R4
- 0x7C280800, // 0047 CALL R10 4
- 0xB82E0800, // 0048 GETNGBL R11 K4
- 0x8C2C171D, // 0049 GETMET R11 R11 K29
- 0x7C2C0200, // 004A CALL R11 1
- 0x50300200, // 004B LDBOOL R12 1 0
- 0x1C30140C, // 004C EQ R12 R10 R12
- 0x78320023, // 004D JMPF R12 #0072
- 0xB8320800, // 004E GETNGBL R12 K4
- 0x8C30191E, // 004F GETMET R12 R12 K30
- 0x7C300200, // 0050 CALL R12 1
- 0x902E200C, // 0051 SETMBR R11 K16 R12
- 0x88301710, // 0052 GETMBR R12 R11 K16
- 0xB8360800, // 0053 GETNGBL R13 K4
- 0x8C341B1F, // 0054 GETMET R13 R13 K31
- 0x7C340200, // 0055 CALL R13 1
- 0x90321A0D, // 0056 SETMBR R12 K13 R13
- 0x88301710, // 0057 GETMBR R12 R11 K16
- 0x8830190D, // 0058 GETMBR R12 R12 K13
- 0x8834090C, // 0059 GETMBR R13 R4 K12
- 0x9032180D, // 005A SETMBR R12 K12 R13
- 0x88301710, // 005B GETMBR R12 R11 K16
- 0x8830190D, // 005C GETMBR R12 R12 K13
- 0x8834090E, // 005D GETMBR R13 R4 K14
- 0x90321C0D, // 005E SETMBR R12 K14 R13
- 0x88301710, // 005F GETMBR R12 R11 K16
- 0x8830190D, // 0060 GETMBR R12 R12 K13
- 0x8834090F, // 0061 GETMBR R13 R4 K15
- 0x90321E0D, // 0062 SETMBR R12 K15 R13
- 0x88301710, // 0063 GETMBR R12 R11 K16
- 0xB8360800, // 0064 GETNGBL R13 K4
- 0x8C341B20, // 0065 GETMET R13 R13 K32
- 0x7C340200, // 0066 CALL R13 1
- 0x9032200D, // 0067 SETMBR R12 K16 R13
- 0x88301710, // 0068 GETMBR R12 R11 K16
- 0x88301910, // 0069 GETMBR R12 R12 K16
- 0xB8360800, // 006A GETNGBL R13 K4
- 0x88341B21, // 006B GETMBR R13 R13 K33
- 0x9032200D, // 006C SETMBR R12 K16 R13
- 0x88300D0B, // 006D GETMBR R12 R6 K11
- 0x8C301922, // 006E GETMET R12 R12 K34
- 0x5C381600, // 006F MOVE R14 R11
- 0x7C300400, // 0070 CALL R12 2
- 0x70020059, // 0071 JMP #00CC
- 0x4C300000, // 0072 LDNIL R12
- 0x2030140C, // 0073 NE R12 R10 R12
- 0x7832002F, // 0074 JMPF R12 #00A5
- 0xB8320800, // 0075 GETNGBL R12 K4
- 0x8C301923, // 0076 GETMET R12 R12 K35
- 0x7C300200, // 0077 CALL R12 1
- 0x902E1E0C, // 0078 SETMBR R11 K15 R12
- 0x8830170F, // 0079 GETMBR R12 R11 K15
- 0xB8360800, // 007A GETNGBL R13 K4
- 0x8C341B1F, // 007B GETMET R13 R13 K31
- 0x7C340200, // 007C CALL R13 1
- 0x90321A0D, // 007D SETMBR R12 K13 R13
- 0x8830170F, // 007E GETMBR R12 R11 K15
- 0x8830190D, // 007F GETMBR R12 R12 K13
- 0x8834090C, // 0080 GETMBR R13 R4 K12
- 0x9032180D, // 0081 SETMBR R12 K12 R13
- 0x8830170F, // 0082 GETMBR R12 R11 K15
- 0x8830190D, // 0083 GETMBR R12 R12 K13
- 0x8834090E, // 0084 GETMBR R13 R4 K14
- 0x90321C0D, // 0085 SETMBR R12 K14 R13
- 0x8830170F, // 0086 GETMBR R12 R11 K15
- 0x8830190D, // 0087 GETMBR R12 R12 K13
- 0x8834090F, // 0088 GETMBR R13 R4 K15
- 0x90321E0D, // 0089 SETMBR R12 K15 R13
- 0x8830170F, // 008A GETMBR R12 R11 K15
- 0x9032380A, // 008B SETMBR R12 K28 R10
- 0x88300D0B, // 008C GETMBR R12 R6 K11
- 0x8C301922, // 008D GETMET R12 R12 K34
- 0x5C381600, // 008E MOVE R14 R11
- 0x7C300400, // 008F CALL R12 2
- 0xB8320800, // 0090 GETNGBL R12 K4
- 0x8C301912, // 0091 GETMET R12 R12 K18
- 0x8838090E, // 0092 GETMBR R14 R4 K14
- 0x883C090F, // 0093 GETMBR R15 R4 K15
- 0x7C300600, // 0094 CALL R12 3
- 0x5C241800, // 0095 MOVE R9 R12
- 0xB8320200, // 0096 GETNGBL R12 K1
- 0x8C301902, // 0097 GETMET R12 R12 K2
- 0x8C380713, // 0098 GETMET R14 R3 K19
- 0x58400024, // 0099 LDCONST R16 K36
- 0x60440008, // 009A GETGBL R17 G8
- 0x5C480800, // 009B MOVE R18 R4
- 0x7C440200, // 009C CALL R17 1
- 0x78260001, // 009D JMPF R9 #00A0
- 0x5C481200, // 009E MOVE R18 R9
- 0x70020000, // 009F JMP #00A1
- 0x58480015, // 00A0 LDCONST R18 K21
- 0x7C380800, // 00A1 CALL R14 4
- 0x583C0018, // 00A2 LDCONST R15 K24
- 0x7C300600, // 00A3 CALL R12 3
- 0x70020026, // 00A4 JMP #00CC
- 0x88300910, // 00A5 GETMBR R12 R4 K16
- 0x4C340000, // 00A6 LDNIL R13
- 0x2030180D, // 00A7 NE R12 R12 R13
- 0x78320022, // 00A8 JMPF R12 #00CC
- 0xB8320800, // 00A9 GETNGBL R12 K4
- 0x8C30191E, // 00AA GETMET R12 R12 K30
- 0x7C300200, // 00AB CALL R12 1
- 0x902E200C, // 00AC SETMBR R11 K16 R12
- 0x88301710, // 00AD GETMBR R12 R11 K16
- 0xB8360800, // 00AE GETNGBL R13 K4
- 0x8C341B1F, // 00AF GETMET R13 R13 K31
- 0x7C340200, // 00B0 CALL R13 1
- 0x90321A0D, // 00B1 SETMBR R12 K13 R13
- 0x88301710, // 00B2 GETMBR R12 R11 K16
- 0x8830190D, // 00B3 GETMBR R12 R12 K13
- 0x8834090C, // 00B4 GETMBR R13 R4 K12
- 0x9032180D, // 00B5 SETMBR R12 K12 R13
- 0x88301710, // 00B6 GETMBR R12 R11 K16
- 0x8830190D, // 00B7 GETMBR R12 R12 K13
- 0x8834090E, // 00B8 GETMBR R13 R4 K14
- 0x90321C0D, // 00B9 SETMBR R12 K14 R13
- 0x88301710, // 00BA GETMBR R12 R11 K16
- 0x8830190D, // 00BB GETMBR R12 R12 K13
- 0x8834090F, // 00BC GETMBR R13 R4 K15
- 0x90321E0D, // 00BD SETMBR R12 K15 R13
- 0x88301710, // 00BE GETMBR R12 R11 K16
- 0xB8360800, // 00BF GETNGBL R13 K4
- 0x8C341B20, // 00C0 GETMET R13 R13 K32
- 0x7C340200, // 00C1 CALL R13 1
- 0x9032200D, // 00C2 SETMBR R12 K16 R13
- 0x88301710, // 00C3 GETMBR R12 R11 K16
- 0x88301910, // 00C4 GETMBR R12 R12 K16
- 0x88340910, // 00C5 GETMBR R13 R4 K16
- 0x9032200D, // 00C6 SETMBR R12 K16 R13
- 0x88300D0B, // 00C7 GETMBR R12 R6 K11
- 0x8C301922, // 00C8 GETMET R12 R12 K34
- 0x5C381600, // 00C9 MOVE R14 R11
- 0x7C300400, // 00CA CALL R12 2
- 0x7001FFFF, // 00CB JMP #00CC
- 0x7001FF51, // 00CC JMP #001F
- 0x581C0025, // 00CD LDCONST R7 K37
- 0xAC1C0200, // 00CE CATCH R7 1 0
- 0xB0080000, // 00CF RAISE 2 R0 R0
- 0xB81E0200, // 00D0 GETNGBL R7 K1
- 0x8C1C0F02, // 00D1 GETMET R7 R7 K2
- 0x60240008, // 00D2 GETGBL R9 G8
- 0x88280D0B, // 00D3 GETMBR R10 R6 K11
- 0x7C240200, // 00D4 CALL R9 1
- 0x00264C09, // 00D5 ADD R9 K38 R9
- 0x542A0003, // 00D6 LDINT R10 4
- 0x7C1C0600, // 00D7 CALL R7 3
- 0x601C000C, // 00D8 GETGBL R7 G12
- 0x88200D0B, // 00D9 GETMBR R8 R6 K11
- 0x7C1C0200, // 00DA CALL R7 1
- 0x241C0F27, // 00DB GT R7 R7 K39
- 0x781E0015, // 00DC JMPF R7 #00F3
- 0xB81E0200, // 00DD GETNGBL R7 K1
- 0x8C1C0F02, // 00DE GETMET R7 R7 K2
- 0x60240008, // 00DF GETGBL R9 G8
- 0x5C280C00, // 00E0 MOVE R10 R6
- 0x7C240200, // 00E1 CALL R9 1
- 0x00265009, // 00E2 ADD R9 K40 R9
- 0x542A0003, // 00E3 LDINT R10 4
- 0x7C1C0600, // 00E4 CALL R7 3
- 0xB81E0200, // 00E5 GETNGBL R7 K1
- 0x8C1C0F02, // 00E6 GETMET R7 R7 K2
- 0x60240008, // 00E7 GETGBL R9 G8
- 0x8C280D2A, // 00E8 GETMET R10 R6 K42
- 0x7C280200, // 00E9 CALL R10 1
- 0x7C240200, // 00EA CALL R9 1
- 0x00265209, // 00EB ADD R9 K41 R9
- 0x5828002B, // 00EC LDCONST R10 K43
- 0x7C1C0600, // 00ED CALL R7 3
- 0x8C1C012C, // 00EE GETMET R7 R0 K44
- 0x5C240200, // 00EF MOVE R9 R1
- 0x5C280C00, // 00F0 MOVE R10 R6
- 0x7C1C0600, // 00F1 CALL R7 3
- 0x70020001, // 00F2 JMP #00F5
- 0x501C0000, // 00F3 LDBOOL R7 0 0
- 0x80040E00, // 00F4 RET 1 R7
- 0x501C0200, // 00F5 LDBOOL R7 1 0
- 0x80040E00, // 00F6 RET 1 R7
- 0x80000000, // 00F7 RET 0
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x50140000, // 000F LDBOOL R5 0 0
+ 0x80040A00, // 0010 RET 1 R5
})
)
);
@@ -2293,35 +2345,36 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
be_local_class(Matter_IM,
3,
NULL,
- be_nested_map(27,
+ be_nested_map(28,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(process_timed_request, 1), be_const_closure(Matter_IM_process_timed_request_closure) },
- { be_const_key_weak(process_invoke_request, 16), be_const_closure(Matter_IM_process_invoke_request_closure) },
- { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_IM_every_250ms_closure) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_IM_init_closure) },
- { be_const_key_weak(send_subscribe_update, -1), be_const_closure(Matter_IM_send_subscribe_update_closure) },
- { be_const_key_weak(subs, 10), be_const_var(1) },
- { be_const_key_weak(report_data, -1), be_const_closure(Matter_IM_report_data_closure) },
- { be_const_key_weak(process_write_response, 19), be_const_closure(Matter_IM_process_write_response_closure) },
- { be_const_key_weak(process_incoming, -1), be_const_closure(Matter_IM_process_incoming_closure) },
- { be_const_key_weak(remove_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_remove_sendqueue_by_exchangeid_closure) },
- { be_const_key_weak(process_invoke_response, 25), be_const_closure(Matter_IM_process_invoke_response_closure) },
- { be_const_key_weak(process_status_response, 2), be_const_closure(Matter_IM_process_status_response_closure) },
- { be_const_key_weak(_inner_process_read_request, -1), be_const_closure(Matter_IM__inner_process_read_request_closure) },
- { be_const_key_weak(subscribe_request, 6), be_const_closure(Matter_IM_subscribe_request_closure) },
- { be_const_key_weak(send_enqueued, -1), be_const_closure(Matter_IM_send_enqueued_closure) },
- { be_const_key_weak(every_second, -1), be_const_closure(Matter_IM_every_second_closure) },
- { be_const_key_weak(process_write_request, -1), be_const_closure(Matter_IM_process_write_request_closure) },
+ { be_const_key_weak(process_timed_request, -1), be_const_closure(Matter_IM_process_timed_request_closure) },
+ { be_const_key_weak(process_status_response, -1), be_const_closure(Matter_IM_process_status_response_closure) },
+ { be_const_key_weak(process_invoke_response, -1), be_const_closure(Matter_IM_process_invoke_response_closure) },
{ be_const_key_weak(send_queue, -1), be_const_var(2) },
- { be_const_key_weak(find_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_find_sendqueue_by_exchangeid_closure) },
- { be_const_key_weak(send_status, -1), be_const_closure(Matter_IM_send_status_closure) },
- { be_const_key_weak(send_report_data, -1), be_const_closure(Matter_IM_send_report_data_closure) },
- { be_const_key_weak(process_read_request, 15), be_const_closure(Matter_IM_process_read_request_closure) },
- { be_const_key_weak(subscribe_response, -1), be_const_closure(Matter_IM_subscribe_response_closure) },
- { be_const_key_weak(send_invoke_response, -1), be_const_closure(Matter_IM_send_invoke_response_closure) },
- { be_const_key_weak(device, 3), be_const_var(0) },
- { be_const_key_weak(send_subscribe_response, 26), be_const_closure(Matter_IM_send_subscribe_response_closure) },
+ { be_const_key_weak(process_write_response, -1), be_const_closure(Matter_IM_process_write_response_closure) },
+ { be_const_key_weak(process_invoke_request, 9), be_const_closure(Matter_IM_process_invoke_request_closure) },
+ { be_const_key_weak(remove_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_remove_sendqueue_by_exchangeid_closure) },
{ be_const_key_weak(send_write_response, -1), be_const_closure(Matter_IM_send_write_response_closure) },
+ { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_IM_every_250ms_closure) },
+ { be_const_key_weak(subscribe_request, -1), be_const_closure(Matter_IM_subscribe_request_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_init_closure) },
+ { be_const_key_weak(find_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_find_sendqueue_by_exchangeid_closure) },
+ { be_const_key_weak(report_data, -1), be_const_closure(Matter_IM_report_data_closure) },
+ { be_const_key_weak(send_report_data, 24), be_const_closure(Matter_IM_send_report_data_closure) },
+ { be_const_key_weak(send_enqueued, -1), be_const_closure(Matter_IM_send_enqueued_closure) },
+ { be_const_key_weak(send_subscribe_response, -1), be_const_closure(Matter_IM_send_subscribe_response_closure) },
+ { be_const_key_weak(send_subscribe_update, -1), be_const_closure(Matter_IM_send_subscribe_update_closure) },
+ { be_const_key_weak(every_second, 11), be_const_closure(Matter_IM_every_second_closure) },
+ { be_const_key_weak(send_status, -1), be_const_closure(Matter_IM_send_status_closure) },
+ { be_const_key_weak(process_incoming, 13), be_const_closure(Matter_IM_process_incoming_closure) },
+ { be_const_key_weak(process_write_request, -1), be_const_closure(Matter_IM_process_write_request_closure) },
+ { be_const_key_weak(process_incoming_ack, -1), be_const_closure(Matter_IM_process_incoming_ack_closure) },
+ { be_const_key_weak(send_invoke_response, 15), be_const_closure(Matter_IM_send_invoke_response_closure) },
+ { be_const_key_weak(subscribe_response, -1), be_const_closure(Matter_IM_subscribe_response_closure) },
+ { be_const_key_weak(_inner_process_read_request, 10), be_const_closure(Matter_IM__inner_process_read_request_closure) },
+ { be_const_key_weak(process_read_request, -1), be_const_closure(Matter_IM_process_read_request_closure) },
+ { be_const_key_weak(subs, -1), be_const_var(1) },
+ { be_const_key_weak(device, 2), be_const_var(0) },
})),
be_str_weak(Matter_IM)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
index c9bd3a8fa..b7b9dedb1 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
@@ -148,9 +148,9 @@ void be_load_Matter_Path_class(bvm *vm) {
extern const bclass be_class_Matter_IM_Message;
/********************************************************************
-** Solidified function: ack_received
+** Solidified function: status_ok_received
********************************************************************/
-be_local_closure(Matter_IM_Message_ack_received, /* name */
+be_local_closure(Matter_IM_Message_status_ok_received, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
@@ -167,7 +167,7 @@ be_local_closure(Matter_IM_Message_ack_received, /* name */
/* K3 */ be_nested_str_weak(x_flag_r),
/* K4 */ be_nested_str_weak(ready),
}),
- be_str_weak(ack_received),
+ be_str_weak(status_ok_received),
&be_const_str_solidified,
( &(const binstruction[13]) { /* code */
0x78060007, // 0000 JMPF R1 #0009
@@ -189,65 +189,6 @@ be_local_closure(Matter_IM_Message_ack_received, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: ack_error
-********************************************************************/
-be_local_closure(Matter_IM_Message_ack_error, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* 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(ack_error),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_IM_Message_init, /* name */
- be_nested_proto(
- 8, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(resp),
- /* K1 */ be_nested_str_weak(build_response),
- /* K2 */ be_nested_str_weak(ready),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x8C100301, // 0000 GETMET R4 R1 K1
- 0x5C180400, // 0001 MOVE R6 R2
- 0x5C1C0600, // 0002 MOVE R7 R3
- 0x7C100600, // 0003 CALL R4 3
- 0x90020004, // 0004 SETMBR R0 K0 R4
- 0x50100200, // 0005 LDBOOL R4 1 0
- 0x90020404, // 0006 SETMBR R0 K2 R4
- 0x80000000, // 0007 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: get_exchangeid
********************************************************************/
@@ -329,22 +270,107 @@ be_local_closure(Matter_IM_Message_send, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_Message_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(build_response),
+ /* K2 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x8C100301, // 0000 GETMET R4 R1 K1
+ 0x5C180400, // 0001 MOVE R6 R2
+ 0x5C1C0600, // 0002 MOVE R7 R3
+ 0x7C100600, // 0003 CALL R4 3
+ 0x90020004, // 0004 SETMBR R0 K0 R4
+ 0x50100200, // 0005 LDBOOL R4 1 0
+ 0x90020404, // 0006 SETMBR R0 K2 R4
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_error_received
+********************************************************************/
+be_local_closure(Matter_IM_Message_status_error_received, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* 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(status_error_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: ack_received
+********************************************************************/
+be_local_closure(Matter_IM_Message_ack_received, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 2, /* 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(ack_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x50080000, // 0000 LDBOOL R2 0 0
+ 0x80040400, // 0001 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified class: Matter_IM_Message
********************************************************************/
be_local_class(Matter_IM_Message,
3,
NULL,
- be_nested_map(8,
+ be_nested_map(9,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(ack_received, 2), be_const_closure(Matter_IM_Message_ack_received_closure) },
- { be_const_key_weak(send, -1), be_const_closure(Matter_IM_Message_send_closure) },
- { be_const_key_weak(get_exchangeid, -1), be_const_closure(Matter_IM_Message_get_exchangeid_closure) },
- { be_const_key_weak(resp, 6), be_const_var(0) },
- { be_const_key_weak(ready, -1), be_const_var(1) },
{ be_const_key_weak(data, -1), be_const_var(2) },
+ { be_const_key_weak(get_exchangeid, -1), be_const_closure(Matter_IM_Message_get_exchangeid_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_IM_Message_init_closure) },
- { be_const_key_weak(ack_error, 1), be_const_closure(Matter_IM_Message_ack_error_closure) },
+ { be_const_key_weak(resp, -1), be_const_var(0) },
+ { be_const_key_weak(send, 0), be_const_closure(Matter_IM_Message_send_closure) },
+ { be_const_key_weak(ready, 2), be_const_var(1) },
+ { be_const_key_weak(status_ok_received, 5), be_const_closure(Matter_IM_Message_status_ok_received_closure) },
+ { be_const_key_weak(status_error_received, -1), be_const_closure(Matter_IM_Message_status_error_received_closure) },
+ { be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_Message_ack_received_closure) },
})),
be_str_weak(Matter_IM_Message)
);
@@ -580,10 +606,10 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
/* K11 */ be_nested_str_weak(log),
/* K12 */ be_nested_str_weak(format),
/* K13 */ be_nested_str_weak(MTR_X3A_X20elements_X3D_X25i_X20msg_sz_X3D_X25i_X20total_X3D_X25i),
- /* K14 */ be_const_int(3),
- /* K15 */ be_const_int(2147483647),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20next_chunk_X20exch_X3D_X25i),
- /* K17 */ be_nested_str_weak(get_exchangeid),
+ /* K14 */ be_const_int(2147483647),
+ /* K15 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20next_chunk_X20exch_X3D_X25i),
+ /* K16 */ be_nested_str_weak(get_exchangeid),
+ /* K17 */ be_const_int(3),
/* K18 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X20first_chunk_X20exch_X3D_X25i),
/* K19 */ be_nested_str_weak(MTR_X3A_X20sending_X20TLV),
/* K20 */ be_nested_str_weak(encode),
@@ -653,9 +679,9 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0x88400905, // 0031 GETMBR R16 R4 K5
0x7C3C0200, // 0032 CALL R15 1
0x7C280A00, // 0033 CALL R10 5
- 0x582C000E, // 0034 LDCONST R11 K14
+ 0x542E0003, // 0034 LDINT R11 4
0x7C200600, // 0035 CALL R8 3
- 0x40200F0F, // 0036 CONNECT R8 R7 K15
+ 0x40200F0E, // 0036 CONNECT R8 R7 K14
0x88240905, // 0037 GETMBR R9 R4 K5
0x94201208, // 0038 GETIDX R8 R9 R8
0x04280F08, // 0039 SUB R10 R7 K8
@@ -672,11 +698,11 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0xB82A1400, // 0044 GETNGBL R10 K10
0x8C28150B, // 0045 GETMET R10 R10 K11
0x8C30050C, // 0046 GETMET R12 R2 K12
- 0x58380010, // 0047 LDCONST R14 K16
- 0x8C3C0111, // 0048 GETMET R15 R0 K17
+ 0x5838000F, // 0047 LDCONST R14 K15
+ 0x8C3C0110, // 0048 GETMET R15 R0 K16
0x7C3C0200, // 0049 CALL R15 1
0x7C300600, // 004A CALL R12 3
- 0x5834000E, // 004B LDCONST R13 K14
+ 0x58340011, // 004B LDCONST R13 K17
0x7C280600, // 004C CALL R10 3
0x88240903, // 004D GETMBR R9 R4 K3
0x78260012, // 004E JMPF R9 #0062
@@ -686,10 +712,10 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0x8C24130B, // 0052 GETMET R9 R9 K11
0x8C2C050C, // 0053 GETMET R11 R2 K12
0x58340012, // 0054 LDCONST R13 K18
- 0x8C380111, // 0055 GETMET R14 R0 K17
+ 0x8C380110, // 0055 GETMET R14 R0 K16
0x7C380200, // 0056 CALL R14 1
0x7C2C0600, // 0057 CALL R11 3
- 0x5830000E, // 0058 LDCONST R12 K14
+ 0x58300011, // 0058 LDCONST R12 K17
0x7C240600, // 0059 CALL R9 3
0xB8261400, // 005A GETNGBL R9 K10
0x8C24130B, // 005B GETMET R9 R9 K11
@@ -697,7 +723,7 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0x5C300800, // 005D MOVE R12 R4
0x7C2C0200, // 005E CALL R11 1
0x002E260B, // 005F ADD R11 K19 R11
- 0x5830000E, // 0060 LDCONST R12 K14
+ 0x58300011, // 0060 LDCONST R12 K17
0x7C240600, // 0061 CALL R9 3
0x8C240714, // 0062 GETMET R9 R3 K20
0x882C0102, // 0063 GETMBR R11 R0 K2
@@ -726,7 +752,7 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0x5C300800, // 007A MOVE R12 R4
0x7C2C0200, // 007B CALL R11 1
0x002E360B, // 007C ADD R11 K27 R11
- 0x5830000E, // 007D LDCONST R12 K14
+ 0x58300011, // 007D LDCONST R12 K17
0x7C240600, // 007E CALL R9 3
0xB8261400, // 007F GETNGBL R9 K10
0x8C24131D, // 0080 GETMET R9 R9 K29
@@ -822,36 +848,6 @@ void be_load_Matter_IM_ReportData_class(bvm *vm) {
extern const bclass be_class_Matter_IM_ReportDataSubscribed;
-/********************************************************************
-** Solidified function: ack_error
-********************************************************************/
-be_local_closure(Matter_IM_ReportDataSubscribed_ack_error, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(sub),
- /* K1 */ be_nested_str_weak(remove_self),
- }),
- be_str_weak(ack_error),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x7C080200, // 0002 CALL R2 1
- 0x80000000, // 0003 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: send
********************************************************************/
@@ -883,7 +879,7 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send, /* name */
}),
be_str_weak(send),
&be_const_str_solidified,
- ( &(const binstruction[48]) { /* code */
+ ( &(const binstruction[55]) { /* code */
0x6008000C, // 0000 GETGBL R2 G12
0x880C0100, // 0001 GETMBR R3 R0 K0
0x880C0701, // 0002 GETMBR R3 R3 K1
@@ -922,16 +918,53 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send, /* name */
0x7C0C0A00, // 0023 CALL R3 5
0x500C0200, // 0024 LDBOOL R3 1 0
0x80040600, // 0025 RET 1 R3
- 0x70020007, // 0026 JMP #002F
- 0x60080003, // 0027 GETGBL R2 G3
- 0x5C0C0000, // 0028 MOVE R3 R0
- 0x7C080200, // 0029 CALL R2 1
- 0x8C080504, // 002A GETMET R2 R2 K4
- 0x5C100200, // 002B MOVE R4 R1
- 0x7C080400, // 002C CALL R2 2
- 0x50080200, // 002D LDBOOL R2 1 0
- 0x80040400, // 002E RET 1 R2
- 0x80000000, // 002F RET 0
+ 0x7002000E, // 0026 JMP #0036
+ 0x88080103, // 0027 GETMBR R2 R0 K3
+ 0x780A000A, // 0028 JMPF R2 #0034
+ 0x60080003, // 0029 GETGBL R2 G3
+ 0x5C0C0000, // 002A MOVE R3 R0
+ 0x7C080200, // 002B CALL R2 1
+ 0x8C080504, // 002C GETMET R2 R2 K4
+ 0x5C100200, // 002D MOVE R4 R1
+ 0x7C080400, // 002E CALL R2 2
+ 0x50080000, // 002F LDBOOL R2 0 0
+ 0x90020602, // 0030 SETMBR R0 K3 R2
+ 0x50080000, // 0031 LDBOOL R2 0 0
+ 0x80040400, // 0032 RET 1 R2
+ 0x70020001, // 0033 JMP #0036
+ 0x50080200, // 0034 LDBOOL R2 1 0
+ 0x80040400, // 0035 RET 1 R2
+ 0x80000000, // 0036 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_error_received
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_status_error_received, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(sub),
+ /* K1 */ be_nested_str_weak(remove_self),
+ }),
+ be_str_weak(status_error_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x80000000, // 0003 RET 0
})
)
);
@@ -942,6 +975,39 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send, /* name */
** Solidified function: ack_received
********************************************************************/
be_local_closure(Matter_IM_ReportDataSubscribed_ack_received, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(report_data_phase),
+ }),
+ be_str_weak(ack_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x740A0002, // 0001 JMPT R2 #0005
+ 0x50080200, // 0002 LDBOOL R2 1 0
+ 0x80040400, // 0003 RET 1 R2
+ 0x70020001, // 0004 JMP #0007
+ 0x50080000, // 0005 LDBOOL R2 0 0
+ 0x80040400, // 0006 RET 1 R2
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_ok_received
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_status_ok_received, /* name */
be_nested_proto(
5, /* nstack */
2, /* argc */
@@ -953,9 +1019,9 @@ be_local_closure(Matter_IM_ReportDataSubscribed_ack_received, /* name */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(report_data_phase),
- /* K1 */ be_nested_str_weak(ack_received),
+ /* K1 */ be_nested_str_weak(status_ok_received),
}),
- be_str_weak(ack_received),
+ be_str_weak(status_ok_received),
&be_const_str_solidified,
( &(const binstruction[19]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
@@ -1048,14 +1114,15 @@ extern const bclass be_class_Matter_IM_ReportData;
be_local_class(Matter_IM_ReportDataSubscribed,
2,
&be_class_Matter_IM_ReportData,
- be_nested_map(6,
+ be_nested_map(7,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(sub, 5), be_const_var(0) },
- { be_const_key_weak(ack_error, 0), be_const_closure(Matter_IM_ReportDataSubscribed_ack_error_closure) },
+ { be_const_key_weak(init, 1), be_const_closure(Matter_IM_ReportDataSubscribed_init_closure) },
+ { be_const_key_weak(status_ok_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_status_ok_received_closure) },
+ { be_const_key_weak(send, 4), be_const_closure(Matter_IM_ReportDataSubscribed_send_closure) },
{ be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_ack_received_closure) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_IM_ReportDataSubscribed_init_closure) },
+ { be_const_key_weak(sub, 6), be_const_var(0) },
+ { be_const_key_weak(status_error_received, 0), be_const_closure(Matter_IM_ReportDataSubscribed_status_error_received_closure) },
{ be_const_key_weak(report_data_phase, -1), be_const_var(1) },
- { be_const_key_weak(send, -1), be_const_closure(Matter_IM_ReportDataSubscribed_send_closure) },
})),
be_str_weak(Matter_IM_ReportDataSubscribed)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
index e5ef2a06b..2acbdcf9d 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
@@ -11,7 +11,7 @@ extern const bclass be_class_Matter_IM_Subscription;
********************************************************************/
be_local_closure(Matter_IM_Subscription_remove_self, /* name */
be_nested_proto(
- 4, /* nstack */
+ 5, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -19,18 +19,29 @@ be_local_closure(Matter_IM_Subscription_remove_self, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(subs),
- /* K1 */ be_nested_str_weak(remove_sub),
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(log),
+ /* K2 */ be_nested_str_weak(MTR_X3A_X20Remove_Sub_X20sub_id_X3D),
+ /* K3 */ be_nested_str_weak(subscription_id),
+ /* K4 */ be_nested_str_weak(subs),
+ /* K5 */ be_nested_str_weak(remove_sub),
}),
be_str_weak(remove_self),
&be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
+ ( &(const binstruction[12]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
0x8C040301, // 0001 GETMET R1 R1 K1
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C040400, // 0003 CALL R1 2
- 0x80000000, // 0004 RET 0
+ 0x600C0008, // 0002 GETGBL R3 G8
+ 0x88100103, // 0003 GETMBR R4 R0 K3
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x000E0403, // 0005 ADD R3 K2 R3
+ 0x7C040400, // 0006 CALL R1 2
+ 0x88040104, // 0007 GETMBR R1 R0 K4
+ 0x8C040305, // 0008 GETMET R1 R1 K5
+ 0x5C0C0000, // 0009 MOVE R3 R0
+ 0x7C040400, // 000A CALL R1 2
+ 0x80000000, // 000B RET 0
})
)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
index 4b30a10ae..7fe36ec26 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
@@ -227,7 +227,7 @@ be_local_closure(Matter_Frame_debug, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
+ ( &(const bvalue[10]) { /* constants */
/* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(Frame),
/* K2 */ be_nested_str_weak(message_handler),
@@ -237,6 +237,7 @@ be_local_closure(Matter_Frame_debug, /* name */
/* K6 */ be_nested_str_weak(log),
/* K7 */ be_nested_str_weak(MTR_X3A_X20sending_X20decode_X3A_X20),
/* K8 */ be_nested_str_weak(inspect),
+ /* K9 */ be_const_int(3),
}),
be_str_weak(debug),
&be_const_str_solidified,
@@ -257,7 +258,7 @@ be_local_closure(Matter_Frame_debug, /* name */
0x5C1C0400, // 000D MOVE R7 R2
0x7C140400, // 000E CALL R5 2
0x00160E05, // 000F ADD R5 K7 R5
- 0x541A0003, // 0010 LDINT R6 4
+ 0x58180009, // 0010 LDCONST R6 K9
0x7C0C0600, // 0011 CALL R3 3
0x80000000, // 0012 RET 0
})
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
index 7b85f72b6..ce740e9b9 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
@@ -192,7 +192,7 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[70]) { /* constants */
+ ( &(const bvalue[71]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(log),
@@ -250,26 +250,27 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
/* K54 */ be_nested_str_weak(exchange_id),
/* K55 */ be_nested_str_weak(MTR_X3A_X20PROTOCOL_ID_SECURE_CHANNEL_X20),
/* K56 */ be_nested_str_weak(im),
- /* K57 */ be_nested_str_weak(send_enqueued),
- /* K58 */ be_nested_str_weak(x_flag_r),
- /* K59 */ be_nested_str_weak(build_standalone_ack),
- /* K60 */ be_nested_str_weak(encode),
- /* K61 */ be_nested_str_weak(encrypt),
- /* K62 */ be_nested_str_weak(send_response),
- /* K63 */ be_nested_str_weak(remote_ip),
- /* K64 */ be_nested_str_weak(remote_port),
- /* K65 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
- /* K66 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
- /* K67 */ be_nested_str_weak(_X3B),
- /* K68 */ be_nested_str_weak(debug),
- /* K69 */ be_nested_str_weak(traceback),
+ /* K57 */ be_nested_str_weak(process_incoming_ack),
+ /* K58 */ be_nested_str_weak(send_enqueued),
+ /* K59 */ be_nested_str_weak(x_flag_r),
+ /* K60 */ be_nested_str_weak(build_standalone_ack),
+ /* K61 */ be_nested_str_weak(encode),
+ /* K62 */ be_nested_str_weak(encrypt),
+ /* K63 */ be_nested_str_weak(send_response),
+ /* K64 */ be_nested_str_weak(remote_ip),
+ /* K65 */ be_nested_str_weak(remote_port),
+ /* K66 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
+ /* K67 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
+ /* K68 */ be_nested_str_weak(_X3B),
+ /* K69 */ be_nested_str_weak(debug),
+ /* K70 */ be_nested_str_weak(traceback),
}),
be_str_weak(msg_received),
&be_const_str_solidified,
- ( &(const binstruction[317]) { /* code */
+ ( &(const binstruction[328]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0x50140000, // 0001 LDBOOL R5 0 0
- 0xA8020123, // 0002 EXBLK 0 #0127
+ 0xA802012E, // 0002 EXBLK 0 #0132
0xB81A0200, // 0003 GETNGBL R6 K1
0x8C180D02, // 0004 GETMET R6 R6 K2
0x8C200304, // 0005 GETMET R8 R1 K4
@@ -293,10 +294,10 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x80041000, // 0017 RET 1 R8
0x88200D08, // 0018 GETMBR R8 R6 K8
0x1C201109, // 0019 EQ R8 R8 K9
- 0x7822005C, // 001A JMPF R8 #0078
+ 0x7822005A, // 001A JMPF R8 #0076
0x88200D0A, // 001B GETMBR R8 R6 K10
0x1C201109, // 001C EQ R8 R8 K9
- 0x78220059, // 001D JMPF R8 #0078
+ 0x78220057, // 001D JMPF R8 #0076
0x8820010B, // 001E GETMBR R8 R0 K11
0x8820110C, // 001F GETMBR R8 R8 K12
0x8C20110D, // 0020 GETMET R8 R8 K13
@@ -380,210 +381,221 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x88240124, // 006E GETMBR R9 R0 K36
0x8C241325, // 006F GETMET R9 R9 K37
0x5C2C0C00, // 0070 MOVE R11 R6
- 0x5C300400, // 0071 MOVE R12 R2
- 0x5C340600, // 0072 MOVE R13 R3
- 0x7C240800, // 0073 CALL R9 4
- 0x50240200, // 0074 LDBOOL R9 1 0
- 0xA8040001, // 0075 EXBLK 1 1
- 0x80041200, // 0076 RET 1 R9
- 0x700200AA, // 0077 JMP #0123
- 0xB8220200, // 0078 GETNGBL R8 K1
- 0x8C201102, // 0079 GETMET R8 R8 K2
- 0x8C280919, // 007A GETMET R10 R4 K25
- 0x58300026, // 007B LDCONST R12 K38
- 0x88340D08, // 007C GETMBR R13 R6 K8
- 0x88380D18, // 007D GETMBR R14 R6 K24
- 0x7C280800, // 007E CALL R10 4
- 0x582C0011, // 007F LDCONST R11 K17
- 0x7C200600, // 0080 CALL R8 3
- 0x8820010B, // 0081 GETMBR R8 R0 K11
- 0x8820110C, // 0082 GETMBR R8 R8 K12
- 0x8C201127, // 0083 GETMET R8 R8 K39
- 0x88280D08, // 0084 GETMBR R10 R6 K8
- 0x7C200400, // 0085 CALL R8 2
- 0x4C240000, // 0086 LDNIL R9
- 0x1C241009, // 0087 EQ R9 R8 R9
- 0x78260013, // 0088 JMPF R9 #009D
- 0xB8260200, // 0089 GETNGBL R9 K1
- 0x8C241302, // 008A GETMET R9 R9 K2
- 0x602C0008, // 008B GETGBL R11 G8
- 0x88300D08, // 008C GETMBR R12 R6 K8
- 0x7C2C0200, // 008D CALL R11 1
- 0x002E500B, // 008E ADD R11 K40 R11
- 0x58300011, // 008F LDCONST R12 K17
- 0x7C240600, // 0090 CALL R9 3
- 0xB8260200, // 0091 GETNGBL R9 K1
- 0x8C241302, // 0092 GETMET R9 R9 K2
- 0xB82E0A00, // 0093 GETNGBL R11 K5
- 0x8C2C172A, // 0094 GETMET R11 R11 K42
- 0x5C340C00, // 0095 MOVE R13 R6
- 0x7C2C0400, // 0096 CALL R11 2
- 0x002E520B, // 0097 ADD R11 K41 R11
- 0x58300011, // 0098 LDCONST R12 K17
- 0x7C240600, // 0099 CALL R9 3
- 0x50240000, // 009A LDBOOL R9 0 0
- 0xA8040001, // 009B EXBLK 1 1
- 0x80041200, // 009C RET 1 R9
- 0x780A0000, // 009D JMPF R2 #009F
- 0x90222402, // 009E SETMBR R8 K18 R2
- 0x780E0000, // 009F JMPF R3 #00A1
- 0x90222603, // 00A0 SETMBR R8 K19 R3
- 0x90222800, // 00A1 SETMBR R8 K20 R0
- 0x901A2A08, // 00A2 SETMBR R6 K21 R8
- 0x88241116, // 00A3 GETMBR R9 R8 K22
- 0x8C241317, // 00A4 GETMET R9 R9 K23
- 0x882C0D18, // 00A5 GETMBR R11 R6 K24
- 0x50300200, // 00A6 LDBOOL R12 1 0
- 0x7C240600, // 00A7 CALL R9 3
- 0x74260011, // 00A8 JMPT R9 #00BB
- 0xB8260200, // 00A9 GETNGBL R9 K1
- 0x8C241302, // 00AA GETMET R9 R9 K2
- 0x602C0008, // 00AB GETGBL R11 G8
- 0x88300D18, // 00AC GETMBR R12 R6 K24
- 0x7C2C0200, // 00AD CALL R11 1
- 0x002E560B, // 00AE ADD R11 K43 R11
- 0x002C172C, // 00AF ADD R11 R11 K44
- 0x60300008, // 00B0 GETGBL R12 G8
- 0x88341116, // 00B1 GETMBR R13 R8 K22
- 0x8C341B1B, // 00B2 GETMET R13 R13 K27
- 0x7C340200, // 00B3 CALL R13 1
- 0x7C300200, // 00B4 CALL R12 1
- 0x002C160C, // 00B5 ADD R11 R11 R12
- 0x58300011, // 00B6 LDCONST R12 K17
- 0x7C240600, // 00B7 CALL R9 3
- 0x50240000, // 00B8 LDBOOL R9 0 0
- 0xA8040001, // 00B9 EXBLK 1 1
- 0x80041200, // 00BA RET 1 R9
- 0x8C240D2D, // 00BB GETMET R9 R6 K45
- 0x7C240200, // 00BC CALL R9 1
- 0x5C281200, // 00BD MOVE R10 R9
- 0x742A0002, // 00BE JMPT R10 #00C2
- 0x50280000, // 00BF LDBOOL R10 0 0
- 0xA8040001, // 00C0 EXBLK 1 1
- 0x80041400, // 00C1 RET 1 R10
- 0x88280D2F, // 00C2 GETMBR R10 R6 K47
- 0x04281530, // 00C3 SUB R10 R10 K48
- 0x402A120A, // 00C4 CONNECT R10 K9 R10
- 0x882C0D2E, // 00C5 GETMBR R11 R6 K46
- 0x9428160A, // 00C6 GETIDX R10 R11 R10
- 0x901A5C0A, // 00C7 SETMBR R6 K46 R10
- 0x88280D2E, // 00C8 GETMBR R10 R6 K46
- 0x40281409, // 00C9 CONNECT R10 R10 R9
- 0xB82A0200, // 00CA GETNGBL R10 K1
- 0x8C281502, // 00CB GETMET R10 R10 K2
- 0x8C300919, // 00CC GETMET R12 R4 K25
- 0x58380031, // 00CD LDCONST R14 K49
- 0x883C0D2F, // 00CE GETMBR R15 R6 K47
- 0x88400D2E, // 00CF GETMBR R16 R6 K46
- 0x8C402104, // 00D0 GETMET R16 R16 K4
- 0x7C400200, // 00D1 CALL R16 1
- 0x7C300800, // 00D2 CALL R12 4
- 0x58340011, // 00D3 LDCONST R13 K17
- 0x7C280600, // 00D4 CALL R10 3
- 0x8C280D1C, // 00D5 GETMET R10 R6 K28
- 0x7C280200, // 00D6 CALL R10 1
- 0xB82A0200, // 00D7 GETNGBL R10 K1
- 0x8C281502, // 00D8 GETMET R10 R10 K2
- 0x60300008, // 00D9 GETGBL R12 G8
- 0x88340D33, // 00DA GETMBR R13 R6 K51
- 0x7C300200, // 00DB CALL R12 1
- 0x0032640C, // 00DC ADD R12 K50 R12
- 0x00301934, // 00DD ADD R12 R12 K52
- 0x60340008, // 00DE GETGBL R13 G8
- 0x88380D1F, // 00DF GETMBR R14 R6 K31
- 0x7C340200, // 00E0 CALL R13 1
- 0x0030180D, // 00E1 ADD R12 R12 R13
- 0x00301935, // 00E2 ADD R12 R12 K53
- 0x60340008, // 00E3 GETGBL R13 G8
- 0x88380D36, // 00E4 GETMBR R14 R6 K54
- 0x543EFFFE, // 00E5 LDINT R15 65535
- 0x2C381C0F, // 00E6 AND R14 R14 R15
- 0x7C340200, // 00E7 CALL R13 1
- 0x0030180D, // 00E8 ADD R12 R12 R13
- 0x58340011, // 00E9 LDCONST R13 K17
- 0x7C280600, // 00EA CALL R10 3
- 0x8828010B, // 00EB GETMBR R10 R0 K11
- 0x8C28151D, // 00EC GETMET R10 R10 K29
- 0x88300D1E, // 00ED GETMBR R12 R6 K30
- 0x7C280400, // 00EE CALL R10 2
- 0x88280D33, // 00EF GETMBR R10 R6 K51
- 0x1C2C1509, // 00F0 EQ R11 R10 K9
- 0x782E000A, // 00F1 JMPF R11 #00FD
- 0xB82E0200, // 00F2 GETNGBL R11 K1
- 0x8C2C1702, // 00F3 GETMET R11 R11 K2
- 0xB8360A00, // 00F4 GETNGBL R13 K5
- 0x8C341B2A, // 00F5 GETMET R13 R13 K42
- 0x5C3C0C00, // 00F6 MOVE R15 R6
- 0x7C340400, // 00F7 CALL R13 2
- 0x00366E0D, // 00F8 ADD R13 K55 R13
- 0x58380011, // 00F9 LDCONST R14 K17
- 0x7C2C0600, // 00FA CALL R11 3
- 0x50140200, // 00FB LDBOOL R5 1 0
- 0x70020025, // 00FC JMP #0123
- 0x1C2C1530, // 00FD EQ R11 R10 K48
- 0x782E001B, // 00FE JMPF R11 #011B
- 0x882C0138, // 00FF GETMBR R11 R0 K56
- 0x8C2C1725, // 0100 GETMET R11 R11 K37
- 0x5C340C00, // 0101 MOVE R13 R6
- 0x5C380400, // 0102 MOVE R14 R2
- 0x5C3C0600, // 0103 MOVE R15 R3
- 0x7C2C0800, // 0104 CALL R11 4
- 0x5C141600, // 0105 MOVE R5 R11
- 0x78160004, // 0106 JMPF R5 #010C
- 0x882C0138, // 0107 GETMBR R11 R0 K56
- 0x8C2C1739, // 0108 GETMET R11 R11 K57
- 0x5C340000, // 0109 MOVE R13 R0
- 0x7C2C0400, // 010A CALL R11 2
- 0x7002000D, // 010B JMP #011A
- 0x882C0D3A, // 010C GETMBR R11 R6 K58
- 0x782E000B, // 010D JMPF R11 #011A
- 0x8C2C0D3B, // 010E GETMET R11 R6 K59
- 0x7C2C0200, // 010F CALL R11 1
- 0x8C30173C, // 0110 GETMET R12 R11 K60
- 0x7C300200, // 0111 CALL R12 1
- 0x8C30173D, // 0112 GETMET R12 R11 K61
- 0x7C300200, // 0113 CALL R12 1
- 0x8C30013E, // 0114 GETMET R12 R0 K62
- 0x8838172E, // 0115 GETMBR R14 R11 K46
- 0x883C173F, // 0116 GETMBR R15 R11 K63
- 0x88401740, // 0117 GETMBR R16 R11 K64
- 0x88441718, // 0118 GETMBR R17 R11 K24
- 0x7C300A00, // 0119 CALL R12 5
- 0x70020007, // 011A JMP #0123
- 0xB82E0200, // 011B GETNGBL R11 K1
- 0x8C2C1702, // 011C GETMET R11 R11 K2
- 0x60340008, // 011D GETGBL R13 G8
- 0x5C381400, // 011E MOVE R14 R10
- 0x7C340200, // 011F CALL R13 1
- 0x0036820D, // 0120 ADD R13 K65 R13
- 0x58380011, // 0121 LDCONST R14 K17
- 0x7C2C0600, // 0122 CALL R11 3
- 0xA8040001, // 0123 EXBLK 1 1
- 0x80040A00, // 0124 RET 1 R5
- 0xA8040001, // 0125 EXBLK 1 1
- 0x70020014, // 0126 JMP #013C
- 0xAC180002, // 0127 CATCH R6 0 2
- 0x70020011, // 0128 JMP #013B
- 0xB8220200, // 0129 GETNGBL R8 K1
- 0x8C201102, // 012A GETMET R8 R8 K2
- 0x60280008, // 012B GETGBL R10 G8
- 0x5C2C0C00, // 012C MOVE R11 R6
- 0x7C280200, // 012D CALL R10 1
- 0x002A840A, // 012E ADD R10 K66 R10
- 0x00281543, // 012F ADD R10 R10 K67
- 0x602C0008, // 0130 GETGBL R11 G8
- 0x5C300E00, // 0131 MOVE R12 R7
- 0x7C2C0200, // 0132 CALL R11 1
- 0x0028140B, // 0133 ADD R10 R10 R11
- 0x7C200400, // 0134 CALL R8 2
- 0xA4228800, // 0135 IMPORT R8 K68
- 0x8C241145, // 0136 GETMET R9 R8 K69
- 0x7C240200, // 0137 CALL R9 1
- 0x50240000, // 0138 LDBOOL R9 0 0
- 0x80041200, // 0139 RET 1 R9
- 0x70020000, // 013A JMP #013C
- 0xB0080000, // 013B RAISE 2 R0 R0
- 0x80000000, // 013C RET 0
+ 0x7C240400, // 0071 CALL R9 2
+ 0x50240200, // 0072 LDBOOL R9 1 0
+ 0xA8040001, // 0073 EXBLK 1 1
+ 0x80041200, // 0074 RET 1 R9
+ 0x700200B7, // 0075 JMP #012E
+ 0xB8220200, // 0076 GETNGBL R8 K1
+ 0x8C201102, // 0077 GETMET R8 R8 K2
+ 0x8C280919, // 0078 GETMET R10 R4 K25
+ 0x58300026, // 0079 LDCONST R12 K38
+ 0x88340D08, // 007A GETMBR R13 R6 K8
+ 0x88380D18, // 007B GETMBR R14 R6 K24
+ 0x7C280800, // 007C CALL R10 4
+ 0x582C0011, // 007D LDCONST R11 K17
+ 0x7C200600, // 007E CALL R8 3
+ 0x8820010B, // 007F GETMBR R8 R0 K11
+ 0x8820110C, // 0080 GETMBR R8 R8 K12
+ 0x8C201127, // 0081 GETMET R8 R8 K39
+ 0x88280D08, // 0082 GETMBR R10 R6 K8
+ 0x7C200400, // 0083 CALL R8 2
+ 0x4C240000, // 0084 LDNIL R9
+ 0x1C241009, // 0085 EQ R9 R8 R9
+ 0x78260013, // 0086 JMPF R9 #009B
+ 0xB8260200, // 0087 GETNGBL R9 K1
+ 0x8C241302, // 0088 GETMET R9 R9 K2
+ 0x602C0008, // 0089 GETGBL R11 G8
+ 0x88300D08, // 008A GETMBR R12 R6 K8
+ 0x7C2C0200, // 008B CALL R11 1
+ 0x002E500B, // 008C ADD R11 K40 R11
+ 0x58300011, // 008D LDCONST R12 K17
+ 0x7C240600, // 008E CALL R9 3
+ 0xB8260200, // 008F GETNGBL R9 K1
+ 0x8C241302, // 0090 GETMET R9 R9 K2
+ 0xB82E0A00, // 0091 GETNGBL R11 K5
+ 0x8C2C172A, // 0092 GETMET R11 R11 K42
+ 0x5C340C00, // 0093 MOVE R13 R6
+ 0x7C2C0400, // 0094 CALL R11 2
+ 0x002E520B, // 0095 ADD R11 K41 R11
+ 0x58300011, // 0096 LDCONST R12 K17
+ 0x7C240600, // 0097 CALL R9 3
+ 0x50240000, // 0098 LDBOOL R9 0 0
+ 0xA8040001, // 0099 EXBLK 1 1
+ 0x80041200, // 009A RET 1 R9
+ 0x780A0000, // 009B JMPF R2 #009D
+ 0x90222402, // 009C SETMBR R8 K18 R2
+ 0x780E0000, // 009D JMPF R3 #009F
+ 0x90222603, // 009E SETMBR R8 K19 R3
+ 0x90222800, // 009F SETMBR R8 K20 R0
+ 0x901A2A08, // 00A0 SETMBR R6 K21 R8
+ 0x88241116, // 00A1 GETMBR R9 R8 K22
+ 0x8C241317, // 00A2 GETMET R9 R9 K23
+ 0x882C0D18, // 00A3 GETMBR R11 R6 K24
+ 0x50300200, // 00A4 LDBOOL R12 1 0
+ 0x7C240600, // 00A5 CALL R9 3
+ 0x74260011, // 00A6 JMPT R9 #00B9
+ 0xB8260200, // 00A7 GETNGBL R9 K1
+ 0x8C241302, // 00A8 GETMET R9 R9 K2
+ 0x602C0008, // 00A9 GETGBL R11 G8
+ 0x88300D18, // 00AA GETMBR R12 R6 K24
+ 0x7C2C0200, // 00AB CALL R11 1
+ 0x002E560B, // 00AC ADD R11 K43 R11
+ 0x002C172C, // 00AD ADD R11 R11 K44
+ 0x60300008, // 00AE GETGBL R12 G8
+ 0x88341116, // 00AF GETMBR R13 R8 K22
+ 0x8C341B1B, // 00B0 GETMET R13 R13 K27
+ 0x7C340200, // 00B1 CALL R13 1
+ 0x7C300200, // 00B2 CALL R12 1
+ 0x002C160C, // 00B3 ADD R11 R11 R12
+ 0x58300011, // 00B4 LDCONST R12 K17
+ 0x7C240600, // 00B5 CALL R9 3
+ 0x50240000, // 00B6 LDBOOL R9 0 0
+ 0xA8040001, // 00B7 EXBLK 1 1
+ 0x80041200, // 00B8 RET 1 R9
+ 0x8C240D2D, // 00B9 GETMET R9 R6 K45
+ 0x7C240200, // 00BA CALL R9 1
+ 0x5C281200, // 00BB MOVE R10 R9
+ 0x742A0002, // 00BC JMPT R10 #00C0
+ 0x50280000, // 00BD LDBOOL R10 0 0
+ 0xA8040001, // 00BE EXBLK 1 1
+ 0x80041400, // 00BF RET 1 R10
+ 0x88280D2F, // 00C0 GETMBR R10 R6 K47
+ 0x04281530, // 00C1 SUB R10 R10 K48
+ 0x402A120A, // 00C2 CONNECT R10 K9 R10
+ 0x882C0D2E, // 00C3 GETMBR R11 R6 K46
+ 0x9428160A, // 00C4 GETIDX R10 R11 R10
+ 0x901A5C0A, // 00C5 SETMBR R6 K46 R10
+ 0x88280D2E, // 00C6 GETMBR R10 R6 K46
+ 0x40281409, // 00C7 CONNECT R10 R10 R9
+ 0xB82A0200, // 00C8 GETNGBL R10 K1
+ 0x8C281502, // 00C9 GETMET R10 R10 K2
+ 0x8C300919, // 00CA GETMET R12 R4 K25
+ 0x58380031, // 00CB LDCONST R14 K49
+ 0x883C0D2F, // 00CC GETMBR R15 R6 K47
+ 0x88400D2E, // 00CD GETMBR R16 R6 K46
+ 0x8C402104, // 00CE GETMET R16 R16 K4
+ 0x7C400200, // 00CF CALL R16 1
+ 0x7C300800, // 00D0 CALL R12 4
+ 0x54360003, // 00D1 LDINT R13 4
+ 0x7C280600, // 00D2 CALL R10 3
+ 0x8C280D1C, // 00D3 GETMET R10 R6 K28
+ 0x7C280200, // 00D4 CALL R10 1
+ 0xB82A0200, // 00D5 GETNGBL R10 K1
+ 0x8C281502, // 00D6 GETMET R10 R10 K2
+ 0x60300008, // 00D7 GETGBL R12 G8
+ 0x88340D33, // 00D8 GETMBR R13 R6 K51
+ 0x7C300200, // 00D9 CALL R12 1
+ 0x0032640C, // 00DA ADD R12 K50 R12
+ 0x00301934, // 00DB ADD R12 R12 K52
+ 0x60340008, // 00DC GETGBL R13 G8
+ 0x88380D1F, // 00DD GETMBR R14 R6 K31
+ 0x7C340200, // 00DE CALL R13 1
+ 0x0030180D, // 00DF ADD R12 R12 R13
+ 0x00301935, // 00E0 ADD R12 R12 K53
+ 0x60340008, // 00E1 GETGBL R13 G8
+ 0x88380D36, // 00E2 GETMBR R14 R6 K54
+ 0x543EFFFE, // 00E3 LDINT R15 65535
+ 0x2C381C0F, // 00E4 AND R14 R14 R15
+ 0x7C340200, // 00E5 CALL R13 1
+ 0x0030180D, // 00E6 ADD R12 R12 R13
+ 0x58340011, // 00E7 LDCONST R13 K17
+ 0x7C280600, // 00E8 CALL R10 3
+ 0x8828010B, // 00E9 GETMBR R10 R0 K11
+ 0x8C28151D, // 00EA GETMET R10 R10 K29
+ 0x88300D1E, // 00EB GETMBR R12 R6 K30
+ 0x7C280400, // 00EC CALL R10 2
+ 0x88280D33, // 00ED GETMBR R10 R6 K51
+ 0x1C2C1509, // 00EE EQ R11 R10 K9
+ 0x782E0018, // 00EF JMPF R11 #0109
+ 0xB82E0200, // 00F0 GETNGBL R11 K1
+ 0x8C2C1702, // 00F1 GETMET R11 R11 K2
+ 0xB8360A00, // 00F2 GETNGBL R13 K5
+ 0x8C341B2A, // 00F3 GETMET R13 R13 K42
+ 0x5C3C0C00, // 00F4 MOVE R15 R6
+ 0x7C340400, // 00F5 CALL R13 2
+ 0x00366E0D, // 00F6 ADD R13 K55 R13
+ 0x58380011, // 00F7 LDCONST R14 K17
+ 0x7C2C0600, // 00F8 CALL R11 3
+ 0x882C0D1F, // 00F9 GETMBR R11 R6 K31
+ 0x5432000F, // 00FA LDINT R12 16
+ 0x1C2C160C, // 00FB EQ R11 R11 R12
+ 0x782E0009, // 00FC JMPF R11 #0107
+ 0x882C0138, // 00FD GETMBR R11 R0 K56
+ 0x8C2C1739, // 00FE GETMET R11 R11 K57
+ 0x5C340C00, // 00FF MOVE R13 R6
+ 0x7C2C0400, // 0100 CALL R11 2
+ 0x5C141600, // 0101 MOVE R5 R11
+ 0x78160003, // 0102 JMPF R5 #0107
+ 0x882C0138, // 0103 GETMBR R11 R0 K56
+ 0x8C2C173A, // 0104 GETMET R11 R11 K58
+ 0x5C340000, // 0105 MOVE R13 R0
+ 0x7C2C0400, // 0106 CALL R11 2
+ 0x50140200, // 0107 LDBOOL R5 1 0
+ 0x70020024, // 0108 JMP #012E
+ 0x1C2C1530, // 0109 EQ R11 R10 K48
+ 0x782E001A, // 010A JMPF R11 #0126
+ 0x882C0138, // 010B GETMBR R11 R0 K56
+ 0x8C2C1725, // 010C GETMET R11 R11 K37
+ 0x5C340C00, // 010D MOVE R13 R6
+ 0x7C2C0400, // 010E CALL R11 2
+ 0x5C141600, // 010F MOVE R5 R11
+ 0x78160004, // 0110 JMPF R5 #0116
+ 0x882C0138, // 0111 GETMBR R11 R0 K56
+ 0x8C2C173A, // 0112 GETMET R11 R11 K58
+ 0x5C340000, // 0113 MOVE R13 R0
+ 0x7C2C0400, // 0114 CALL R11 2
+ 0x7002000D, // 0115 JMP #0124
+ 0x882C0D3B, // 0116 GETMBR R11 R6 K59
+ 0x782E000B, // 0117 JMPF R11 #0124
+ 0x8C2C0D3C, // 0118 GETMET R11 R6 K60
+ 0x7C2C0200, // 0119 CALL R11 1
+ 0x8C30173D, // 011A GETMET R12 R11 K61
+ 0x7C300200, // 011B CALL R12 1
+ 0x8C30173E, // 011C GETMET R12 R11 K62
+ 0x7C300200, // 011D CALL R12 1
+ 0x8C30013F, // 011E GETMET R12 R0 K63
+ 0x8838172E, // 011F GETMBR R14 R11 K46
+ 0x883C1740, // 0120 GETMBR R15 R11 K64
+ 0x88401741, // 0121 GETMBR R16 R11 K65
+ 0x88441718, // 0122 GETMBR R17 R11 K24
+ 0x7C300A00, // 0123 CALL R12 5
+ 0x50140200, // 0124 LDBOOL R5 1 0
+ 0x70020007, // 0125 JMP #012E
+ 0xB82E0200, // 0126 GETNGBL R11 K1
+ 0x8C2C1702, // 0127 GETMET R11 R11 K2
+ 0x60340008, // 0128 GETGBL R13 G8
+ 0x5C381400, // 0129 MOVE R14 R10
+ 0x7C340200, // 012A CALL R13 1
+ 0x0036840D, // 012B ADD R13 K66 R13
+ 0x58380011, // 012C LDCONST R14 K17
+ 0x7C2C0600, // 012D CALL R11 3
+ 0xA8040001, // 012E EXBLK 1 1
+ 0x80040A00, // 012F RET 1 R5
+ 0xA8040001, // 0130 EXBLK 1 1
+ 0x70020014, // 0131 JMP #0147
+ 0xAC180002, // 0132 CATCH R6 0 2
+ 0x70020011, // 0133 JMP #0146
+ 0xB8220200, // 0134 GETNGBL R8 K1
+ 0x8C201102, // 0135 GETMET R8 R8 K2
+ 0x60280008, // 0136 GETGBL R10 G8
+ 0x5C2C0C00, // 0137 MOVE R11 R6
+ 0x7C280200, // 0138 CALL R10 1
+ 0x002A860A, // 0139 ADD R10 K67 R10
+ 0x00281544, // 013A ADD R10 R10 K68
+ 0x602C0008, // 013B GETGBL R11 G8
+ 0x5C300E00, // 013C MOVE R12 R7
+ 0x7C2C0200, // 013D CALL R11 1
+ 0x0028140B, // 013E ADD R10 R10 R11
+ 0x7C200400, // 013F CALL R8 2
+ 0xA4228A00, // 0140 IMPORT R8 K69
+ 0x8C241146, // 0141 GETMET R9 R8 K70
+ 0x7C240200, // 0142 CALL R9 1
+ 0x50240000, // 0143 LDBOOL R9 0 0
+ 0x80041200, // 0144 RET 1 R9
+ 0x70020000, // 0145 JMP #0147
+ 0xB0080000, // 0146 RAISE 2 R0 R0
+ 0x80000000, // 0147 RET 0
})
)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
index 5ec1ec361..9bf85ea64 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
@@ -347,7 +347,7 @@ be_local_closure(Matter_UDPServer_init, /* name */
********************************************************************/
be_local_closure(Matter_UDPServer_resend_packets, /* name */
be_nested_proto(
- 11, /* nstack */
+ 12, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -374,7 +374,7 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
/* 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_X20target_X20unreachable_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
+ /* K18 */ be_nested_str_weak(MTR_X3A_X20target_X20unreachable_X20_X27_X5B_X25s_X5D_X3A_X25i_X27_X20msg_id_X3D_X25i),
/* K19 */ be_nested_str_weak(addr),
/* K20 */ be_nested_str_weak(port),
/* K21 */ be_const_int(2),
@@ -382,18 +382,18 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
}),
be_str_weak(resend_packets),
&be_const_str_solidified,
- ( &(const binstruction[57]) { /* code */
+ ( &(const binstruction[58]) { /* code */
0x60040010, // 0000 GETGBL R1 G16
0x88080100, // 0001 GETMBR R2 R0 K0
0x7C040200, // 0002 CALL R1 1
- 0xA8020030, // 0003 EXBLK 0 #0035
+ 0xA8020031, // 0003 EXBLK 0 #0036
0x5C080200, // 0004 MOVE R2 R1
0x7C080000, // 0005 CALL R2 0
0xB80E0200, // 0006 GETNGBL R3 K1
0x8C0C0702, // 0007 GETMET R3 R3 K2
0x88140503, // 0008 GETMBR R5 R2 K3
0x7C0C0400, // 0009 CALL R3 2
- 0x780E0028, // 000A JMPF R3 #0034
+ 0x780E0029, // 000A JMPF R3 #0035
0x880C0504, // 000B GETMBR R3 R2 K4
0x88100105, // 000C GETMBR R4 R0 K5
0x180C0604, // 000D LE R3 R3 R4
@@ -420,7 +420,7 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
0x880C0504, // 0022 GETMBR R3 R2 K4
0x000C070E, // 0023 ADD R3 R3 K14
0x900A0803, // 0024 SETMBR R2 K4 R3
- 0x7002000D, // 0025 JMP #0034
+ 0x7002000E, // 0025 JMP #0035
0xA40E1E00, // 0026 IMPORT R3 K15
0x88100100, // 0027 GETMBR R4 R0 K0
0x8C100910, // 0028 GETMET R4 R4 K16
@@ -432,14 +432,15 @@ be_local_closure(Matter_UDPServer_resend_packets, /* name */
0x58200012, // 002E LDCONST R8 K18
0x88240513, // 002F GETMBR R9 R2 K19
0x88280514, // 0030 GETMBR R10 R2 K20
- 0x7C180800, // 0031 CALL R6 4
- 0x581C0015, // 0032 LDCONST R7 K21
- 0x7C100600, // 0033 CALL R4 3
- 0x7001FFCE, // 0034 JMP #0004
- 0x58040016, // 0035 LDCONST R1 K22
- 0xAC040200, // 0036 CATCH R1 1 0
- 0xB0080000, // 0037 RAISE 2 R0 R0
- 0x80000000, // 0038 RET 0
+ 0x882C0508, // 0031 GETMBR R11 R2 K8
+ 0x7C180A00, // 0032 CALL R6 5
+ 0x581C0015, // 0033 LDCONST R7 K21
+ 0x7C100600, // 0034 CALL R4 3
+ 0x7001FFCD, // 0035 JMP #0004
+ 0x58040016, // 0036 LDCONST R1 K22
+ 0xAC040200, // 0037 CATCH R1 1 0
+ 0xB0080000, // 0038 RAISE 2 R0 R0
+ 0x80000000, // 0039 RET 0
})
)
);
From 9561098e3abeb8faf7c48aab07b0c4328447fba6 Mon Sep 17 00:00:00 2001
From: s-hadinger <49731213+s-hadinger@users.noreply.github.com>
Date: Tue, 21 Feb 2023 23:27:13 +0100
Subject: [PATCH 029/227] Matter support multi-fabric (#18019)
---
.../src/embedded/Matter_Session.be | 1 +
.../src/solidify/solidified_Matter_Session.h | 119 +++++++++---------
2 files changed, 62 insertions(+), 58 deletions(-)
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Session.be b/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
index 4fbe82e6a..76f722410 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
@@ -596,6 +596,7 @@ class Matter_Session_Store
for v:j # iterate on values
var session = matter.Session.fromjson(self, v)
+ session._persist = true
if session != nil
self.add_session(session)
end
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
index cc24c595e..475888601 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
@@ -2259,7 +2259,7 @@ be_local_closure(Matter_Session_Store_load, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[22]) { /* constants */
+ ( &(const bvalue[23]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(sessions),
/* K2 */ be_nested_str_weak(FILENAME),
@@ -2272,22 +2272,23 @@ be_local_closure(Matter_Session_Store_load, /* name */
/* K9 */ be_nested_str_weak(matter),
/* K10 */ be_nested_str_weak(Session),
/* K11 */ be_nested_str_weak(fromjson),
- /* K12 */ be_nested_str_weak(add_session),
- /* K13 */ be_nested_str_weak(stop_iteration),
- /* K14 */ be_nested_str_weak(log),
- /* K15 */ be_nested_str_weak(format),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20Loaded_X20_X25i_X20session_X28s_X29),
- /* K17 */ be_const_int(2),
- /* K18 */ be_nested_str_weak(io_error),
- /* K19 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Aload_X20Exception_X3A),
- /* K20 */ be_nested_str_weak(_X7C),
- /* K21 */ be_nested_str_weak(remove_expired),
+ /* K12 */ be_nested_str_weak(_persist),
+ /* K13 */ be_nested_str_weak(add_session),
+ /* K14 */ be_nested_str_weak(stop_iteration),
+ /* K15 */ be_nested_str_weak(log),
+ /* K16 */ be_nested_str_weak(format),
+ /* K17 */ be_nested_str_weak(MTR_X3A_X20Loaded_X20_X25i_X20session_X28s_X29),
+ /* K18 */ be_const_int(2),
+ /* K19 */ be_nested_str_weak(io_error),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Aload_X20Exception_X3A),
+ /* K21 */ be_nested_str_weak(_X7C),
+ /* K22 */ be_nested_str_weak(remove_expired),
}),
be_str_weak(load),
&be_const_str_solidified,
- ( &(const binstruction[76]) { /* code */
+ ( &(const binstruction[78]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
- 0xA8020033, // 0001 EXBLK 0 #0036
+ 0xA8020035, // 0001 EXBLK 0 #0038
0x60080012, // 0002 GETGBL R2 G18
0x7C080000, // 0003 CALL R2 0
0x90020202, // 0004 SETMBR R0 K1 R2
@@ -2309,7 +2310,7 @@ be_local_closure(Matter_Session_Store_load, /* name */
0x60180010, // 0014 GETGBL R6 G16
0x5C1C0A00, // 0015 MOVE R7 R5
0x7C180200, // 0016 CALL R6 1
- 0xA802000E, // 0017 EXBLK 0 #0027
+ 0xA8020010, // 0017 EXBLK 0 #0029
0x5C1C0C00, // 0018 MOVE R7 R6
0x7C1C0000, // 0019 CALL R7 0
0xB8221200, // 001A GETNGBL R8 K9
@@ -2318,50 +2319,52 @@ be_local_closure(Matter_Session_Store_load, /* name */
0x5C280000, // 001D MOVE R10 R0
0x5C2C0E00, // 001E MOVE R11 R7
0x7C200600, // 001F CALL R8 3
- 0x4C240000, // 0020 LDNIL R9
- 0x20241009, // 0021 NE R9 R8 R9
- 0x78260002, // 0022 JMPF R9 #0026
- 0x8C24010C, // 0023 GETMET R9 R0 K12
- 0x5C2C1000, // 0024 MOVE R11 R8
- 0x7C240400, // 0025 CALL R9 2
- 0x7001FFF0, // 0026 JMP #0018
- 0x5818000D, // 0027 LDCONST R6 K13
- 0xAC180200, // 0028 CATCH R6 1 0
- 0xB0080000, // 0029 RAISE 2 R0 R0
- 0xB81A0E00, // 002A GETNGBL R6 K7
- 0x8C180D0E, // 002B GETMET R6 R6 K14
- 0x8C20030F, // 002C GETMET R8 R1 K15
- 0x58280010, // 002D LDCONST R10 K16
- 0x602C000C, // 002E GETGBL R11 G12
- 0x88300101, // 002F GETMBR R12 R0 K1
- 0x7C2C0200, // 0030 CALL R11 1
- 0x7C200600, // 0031 CALL R8 3
- 0x58240011, // 0032 LDCONST R9 K17
- 0x7C180600, // 0033 CALL R6 3
- 0xA8040001, // 0034 EXBLK 1 1
- 0x70020012, // 0035 JMP #0049
- 0xAC080002, // 0036 CATCH R2 0 2
- 0x7002000F, // 0037 JMP #0048
- 0x20100512, // 0038 NE R4 R2 K18
- 0x7812000C, // 0039 JMPF R4 #0047
- 0xB8120E00, // 003A GETNGBL R4 K7
- 0x8C10090E, // 003B GETMET R4 R4 K14
- 0x60180008, // 003C GETGBL R6 G8
- 0x5C1C0400, // 003D MOVE R7 R2
- 0x7C180200, // 003E CALL R6 1
- 0x001A2606, // 003F ADD R6 K19 R6
- 0x00180D14, // 0040 ADD R6 R6 K20
- 0x601C0008, // 0041 GETGBL R7 G8
- 0x5C200600, // 0042 MOVE R8 R3
- 0x7C1C0200, // 0043 CALL R7 1
- 0x00180C07, // 0044 ADD R6 R6 R7
- 0x581C0011, // 0045 LDCONST R7 K17
- 0x7C100600, // 0046 CALL R4 3
- 0x70020000, // 0047 JMP #0049
- 0xB0080000, // 0048 RAISE 2 R0 R0
- 0x8C080115, // 0049 GETMET R2 R0 K21
- 0x7C080200, // 004A CALL R2 1
- 0x80000000, // 004B RET 0
+ 0x50240200, // 0020 LDBOOL R9 1 0
+ 0x90221809, // 0021 SETMBR R8 K12 R9
+ 0x4C240000, // 0022 LDNIL R9
+ 0x20241009, // 0023 NE R9 R8 R9
+ 0x78260002, // 0024 JMPF R9 #0028
+ 0x8C24010D, // 0025 GETMET R9 R0 K13
+ 0x5C2C1000, // 0026 MOVE R11 R8
+ 0x7C240400, // 0027 CALL R9 2
+ 0x7001FFEE, // 0028 JMP #0018
+ 0x5818000E, // 0029 LDCONST R6 K14
+ 0xAC180200, // 002A CATCH R6 1 0
+ 0xB0080000, // 002B RAISE 2 R0 R0
+ 0xB81A0E00, // 002C GETNGBL R6 K7
+ 0x8C180D0F, // 002D GETMET R6 R6 K15
+ 0x8C200310, // 002E GETMET R8 R1 K16
+ 0x58280011, // 002F LDCONST R10 K17
+ 0x602C000C, // 0030 GETGBL R11 G12
+ 0x88300101, // 0031 GETMBR R12 R0 K1
+ 0x7C2C0200, // 0032 CALL R11 1
+ 0x7C200600, // 0033 CALL R8 3
+ 0x58240012, // 0034 LDCONST R9 K18
+ 0x7C180600, // 0035 CALL R6 3
+ 0xA8040001, // 0036 EXBLK 1 1
+ 0x70020012, // 0037 JMP #004B
+ 0xAC080002, // 0038 CATCH R2 0 2
+ 0x7002000F, // 0039 JMP #004A
+ 0x20100513, // 003A NE R4 R2 K19
+ 0x7812000C, // 003B JMPF R4 #0049
+ 0xB8120E00, // 003C GETNGBL R4 K7
+ 0x8C10090F, // 003D GETMET R4 R4 K15
+ 0x60180008, // 003E GETGBL R6 G8
+ 0x5C1C0400, // 003F MOVE R7 R2
+ 0x7C180200, // 0040 CALL R6 1
+ 0x001A2806, // 0041 ADD R6 K20 R6
+ 0x00180D15, // 0042 ADD R6 R6 K21
+ 0x601C0008, // 0043 GETGBL R7 G8
+ 0x5C200600, // 0044 MOVE R8 R3
+ 0x7C1C0200, // 0045 CALL R7 1
+ 0x00180C07, // 0046 ADD R6 R6 R7
+ 0x581C0012, // 0047 LDCONST R7 K18
+ 0x7C100600, // 0048 CALL R4 3
+ 0x70020000, // 0049 JMP #004B
+ 0xB0080000, // 004A RAISE 2 R0 R0
+ 0x8C080116, // 004B GETMET R2 R0 K22
+ 0x7C080200, // 004C CALL R2 1
+ 0x80000000, // 004D RET 0
})
)
);
From dca1b5bcff335257fc0bb9f9cb9ddc31cc792d60 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 22 Feb 2023 10:30:47 +0100
Subject: [PATCH 030/227] Refactor ADE7953 for ESP8266
---
CHANGELOG.md | 2 ++
tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino | 10 ++++++++++
2 files changed, 12 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0966b3fbc..45902db78 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,8 @@ All notable changes to this project will be documented in this file.
## [12.4.0.1]
### Added
- Matter read/write and commands (#18000)
+- Matter subscriptions (#18017, #18018)
+- Matter multi-fabric (#18019)
### Breaking Changed
diff --git a/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino b/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino
index 78fb0fcc0..2f2c75795 100644
--- a/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino
+++ b/tasmota/tasmota_xnrg_energy/xnrg_07_ade7953.ino
@@ -525,6 +525,7 @@ void Ade7953GetData(void) {
if (Energy->power_on) { // Powered on
+#ifdef USE_ESP32_SPI
float correction = 1.0f;
if (Ade7953.use_spi) { // SPI
uint32_t time = millis();
@@ -536,6 +537,7 @@ void Ade7953GetData(void) {
}
Ade7953.last_update = time;
}
+#endif // USE_ESP32_SPI
float divider;
for (uint32_t channel = 0; channel < Energy->phase_count; channel++) {
@@ -571,11 +573,13 @@ void Ade7953GetData(void) {
divider = (Ade7953.calib_data[channel][ADE7953_CAL_VAGAIN] != ADE7953_GAIN_DEFAULT) ? ADE7953_LSB_PER_WATTSECOND : power_calibration;
Energy->apparent_power[channel] = (float)apparent_power[channel] / divider;
+#ifdef USE_ESP32_SPI
if (Ade7953.use_spi) { // SPI
Energy->active_power[channel] /= correction;
Energy->reactive_power[channel] /= correction;
Energy->apparent_power[channel] /= correction;
}
+#endif // USE_ESP32_SPI
if (0 == Energy->active_power[channel]) {
Energy->current[channel] = 0;
@@ -856,6 +860,7 @@ bool Xnrg07(uint32_t function) {
bool result = false;
switch (function) {
+#ifdef USE_ESP32_SPI
case FUNC_ENERGY_EVERY_SECOND: // Use energy interrupt timer (fails on SPI)
if (!Ade7953.use_spi) { // No SPI
Ade7953EnergyEverySecond();
@@ -866,6 +871,11 @@ bool Xnrg07(uint32_t function) {
Ade7953EnergyEverySecond();
}
break;
+#else // ESP8266
+ case FUNC_ENERGY_EVERY_SECOND: // Use energy interrupt timer
+ Ade7953EnergyEverySecond();
+ break;
+#endif // USE_ESP32_SPI
case FUNC_COMMAND:
result = Ade7953Command();
break;
From 8ea8d34d178e96d2d5edc7e1277362762d60d48b Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Wed, 22 Feb 2023 12:05:04 +0100
Subject: [PATCH 031/227] Make setting of `CODE_IMAGE_STR` in Platformio
possible (#18011)
* OTA_URL safeguard
* make override possible
---
tasmota/include/tasmota.h | 6 ---
tasmota/include/tasmota_configurations.h | 48 ++++++++++++-------
.../include/tasmota_configurations_ESP32.h | 34 ++++++++-----
3 files changed, 54 insertions(+), 34 deletions(-)
diff --git a/tasmota/include/tasmota.h b/tasmota/include/tasmota.h
index 40a8a3050..ec68438ba 100644
--- a/tasmota/include/tasmota.h
+++ b/tasmota/include/tasmota.h
@@ -27,12 +27,6 @@
#define XFUNC_PTR_IN_ROM // Enable for keeping tables in ROM (PROGMEM) which seem to have access issues on some flash types
#define MQTT_DATA_STRING // Use heap instead of fixed memory for TasmotaGlobal.mqtt_data
-/*********************************************************************************************\
- * Default image
-\*********************************************************************************************/
-
-#define CODE_IMAGE_STR "tasmota"
-
/*********************************************************************************************\
* Power Type
\*********************************************************************************************/
diff --git a/tasmota/include/tasmota_configurations.h b/tasmota/include/tasmota_configurations.h
index c8beda51b..819e35f84 100644
--- a/tasmota/include/tasmota_configurations.h
+++ b/tasmota/include/tasmota_configurations.h
@@ -27,8 +27,9 @@
#ifdef FIRMWARE_SENSORS
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "sensors"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "sensors"
+#endif
#undef USE_DISCOVERY // Disable mDNS (+8k code or +23.5k code with core 2_5_x, +0.3k mem)
@@ -254,8 +255,9 @@
#ifdef FIRMWARE_KNX_NO_EMULATION
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "knx"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "knx"
+#endif
#ifndef USE_KNX
#define USE_KNX // Enable KNX IP Protocol Support (+23k code, +3k3 mem)
@@ -280,8 +282,9 @@
#ifdef FIRMWARE_DISPLAYS
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "display"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "display"
+#endif
#undef USE_EMULATION // Disable Belkin WeMo and Hue Bridge emulation for Alexa (-16k code, -2k mem)
#undef USE_EMULATION_HUE // Disable Hue Bridge emulation for Alexa (+14k code, +2k mem common)
@@ -366,8 +369,9 @@
#ifdef FIRMWARE_IR
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "ir"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "ir"
+#endif
#undef USE_EMULATION
#undef USE_EMULATION_HUE // Disable Hue emulation - only for lights and relays
@@ -501,8 +505,9 @@
#ifdef FIRMWARE_ZBBRIDGE // *******************************************************************
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "zbbridge"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "zbbridge"
+#endif
#undef MODULE
#define MODULE SONOFF_ZB_BRIDGE // [Module] Select default module from tasmota_template.h
@@ -664,8 +669,9 @@
#ifdef FIRMWARE_LITE
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "lite"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "lite"
+#endif
#undef APP_SLEEP
#define APP_SLEEP 1 // Default to sleep = 1 for FIRMWARE_LITE
@@ -818,8 +824,9 @@
#ifndef FIRMWARE_MINICUSTOM
#ifdef FIRMWARE_MINIMAL
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "minimal"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "minimal"
+#endif
#define FIRMWARE_MINIMAL_ONLY
@@ -953,8 +960,9 @@
#ifdef FIRMWARE_MINICUSTOM
#define FIRMWARE_MINIMAL
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "mini-custom"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "mini-custom"
+#endif
#undef FIRMWARE_LITE // Disable tasmota-lite with no sensors
#undef FIRMWARE_SENSORS // Disable tasmota-sensors with useful sensors enabled
@@ -1093,4 +1101,12 @@
#define USE_TLS // flag indicates we need to include TLS code
#endif // USE_MQTT_TLS
+/*********************************************************************************************\
+ * Default image
+\*********************************************************************************************/
+
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "tasmota"
+#endif
+
#endif // _TASMOTA_CONFIGURATIONS_H_
diff --git a/tasmota/include/tasmota_configurations_ESP32.h b/tasmota/include/tasmota_configurations_ESP32.h
index 69de06a24..e6ba3e188 100644
--- a/tasmota/include/tasmota_configurations_ESP32.h
+++ b/tasmota/include/tasmota_configurations_ESP32.h
@@ -31,8 +31,9 @@
#ifdef FIRMWARE_SAFEBOOT
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "safeboot"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "safeboot"
+#endif
#undef FIRMWARE_LITE // Disable tasmota-lite with no sensors
#undef FIRMWARE_SENSORS // Disable tasmota-sensors with useful sensors enabled
@@ -194,8 +195,9 @@
#ifdef FIRMWARE_WEBCAM
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "webcam"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "webcam"
+#endif
#define USE_WEBCAM
#define ENABLE_RTSPSERVER
@@ -238,8 +240,9 @@
#ifdef FIRMWARE_BLUETOOTH
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "bluetooth"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "bluetooth"
+#endif
#undef MODULE
#define MODULE WEMOS // [Module] Select default module from tasmota_template.h
@@ -275,8 +278,9 @@
#ifdef FIRMWARE_LVGL
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "lvgl-haspmota"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "lvgl-haspmota"
+#endif
#undef MODULE
#define MODULE WEMOS // [Module] Select default module from tasmota_template.h
@@ -472,8 +476,9 @@
#ifdef FIRMWARE_ZBBRDGPRO
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "zbbrdgpro"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "zbbrdgpro"
+#endif
#undef MODULE
#define MODULE WEMOS // [Module] Select default module from tasmota_template.h
@@ -522,8 +527,9 @@
#ifdef FIRMWARE_NSPANEL
-#undef CODE_IMAGE_STR
-#define CODE_IMAGE_STR "nspanel"
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "nspanel"
+#endif
#undef MODULE
#define MODULE WEMOS // [Module] Select default module from tasmota_template.h
@@ -541,6 +547,10 @@
#ifdef FIRMWARE_TASMOTA32
+#ifndef CODE_IMAGE_STR
+ #define CODE_IMAGE_STR "tasmota32"
+#endif
+
#define USE_INFLUXDB // Enable influxdb support (+5k code)
#define USE_ENHANCED_GUI_WIFI_SCAN
From 6a6d7a15214cf848c9275afea5d049fcb7acd8d9 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Wed, 22 Feb 2023 12:42:12 +0100
Subject: [PATCH 032/227] add specific firmware image names (#18021)
* add image names
* rm duplicate define
---
platformio_tasmota_env.ini | 11 ++++++++---
platformio_tasmota_env32.ini | 15 ++++++++++-----
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/platformio_tasmota_env.ini b/platformio_tasmota_env.ini
index 7912f7214..b6357670a 100644
--- a/platformio_tasmota_env.ini
+++ b/platformio_tasmota_env.ini
@@ -36,8 +36,9 @@ build_flags = ${env.build_flags} -DOTA_URL='"http://ota.tasmota.com/
[env:tasmota-4M]
board = esp8266_4M2M
-build_flags = ${env.build_flags} -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-4M.bin.gz"'
-
+build_flags = ${env.build_flags}
+ -DCODE_IMAGE_STR='"tasmota-4M"'
+ -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-4M.bin.gz"'
[env:tasmota-minimal]
build_flags = ${env.build_flags} -DFIRMWARE_MINIMAL -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-minimal.bin.gz"'
@@ -69,7 +70,11 @@ board = esp8266_zbbridge
lib_extra_dirs = lib/lib_basic, lib/lib_ssl, lib/lib_div
[env:tasmota-zigbee]
-build_flags = ${env.build_flags} -DUSE_ZIGBEE -DUSE_CCLOADER -DUSE_UFILESYS -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-zigbee.bin.gz"'
+build_flags = ${env.build_flags}
+ -DUSE_ZIGBEE
+ -DUSE_CCLOADER
+ -DCODE_IMAGE_STR='"zigbee"'
+ -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota-zigbee.bin.gz"'
board = esp8266_4M2M
board_build.f_cpu = 160000000L
diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini
index a408338d4..75ca2cb78 100644
--- a/platformio_tasmota_env32.ini
+++ b/platformio_tasmota_env32.ini
@@ -62,17 +62,20 @@ extends = env:tasmota32_base
board = esp32-fix
board_build.f_cpu = 240000000L
build_flags = ${env:tasmota32_base.build_flags}
- -DFIRMWARE_WEBCAM -DCAMERA_MODEL_AI_THINKER
+ -DFIRMWARE_WEBCAM
+ -DCAMERA_MODEL_AI_THINKER
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-webcam.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
[env:tasmota32-odroidgo]
extends = env:tasmota32-lvgl
+board = esp32-fix
board_build.f_cpu = 240000000L
build_flags = ${env:tasmota32_base.build_flags}
- -DFIRMWARE_TASMOTA32 -DARDUINO_ODROID_ESP32
+ -DFIRMWARE_TASMOTA32
+ -DARDUINO_ODROID_ESP32
+ -DCODE_IMAGE_STR='"odroid"'
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-lvgl.bin"'
-board = esp32-fix
[env:tasmota32-core2]
extends = env:tasmota32-lvgl
@@ -83,6 +86,7 @@ build_flags = ${env:tasmota32-lvgl.build_flags}
-DUSE_I2S_SAY_TIME
-DUSE_I2S_WEBRADIO
-DUSE_SENDMAIL
+ -DCODE_IMAGE_STR='"core2"'
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-lvgl.bin"'
lib_extra_dirs = lib/libesp32, lib/libesp32_lvgl, lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div, lib/lib_ssl, lib/lib_display, lib/lib_audio
@@ -121,6 +125,7 @@ extends = env:tasmota32_base
board = esp32_solo1
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_TASMOTA32
+ -DCODE_IMAGE_STR='"solo1"'
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32solo1.bin"'
[env:tasmota32solo1-safeboot]
@@ -153,9 +158,9 @@ lib_extra_dirs = lib/lib_basic, lib/lib_ssl, lib/libesp32
[env:tasmota32-nspanel]
extends = env:tasmota32_base
build_flags = ${env:tasmota32_base.build_flags}
- -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-nspanel.bin"'
-DFIRMWARE_NSPANEL
-DFRAMEWORK_ARDUINO_ITEAD
+ -DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32-nspanel.bin"'
[env:tasmota32c3-safeboot]
extends = env:tasmota32_base
@@ -193,9 +198,9 @@ lib_ignore =
extends = env:tasmota32c3-safeboot
board = esp32c3cdc
build_flags = ${env:tasmota32_base.build_flags}
+ -fno-lto
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c3cdc-safeboot.bin"'
- -fno-lto
[env:tasmota32c3cdc]
extends = env:tasmota32c3
From e80d053aa0bfb12ce1d4d6a2884be6c886d3669d Mon Sep 17 00:00:00 2001
From: s-hadinger <49731213+s-hadinger@users.noreply.github.com>
Date: Thu, 23 Feb 2023 09:38:58 +0100
Subject: [PATCH 033/227] Matter finish subscription (#18027)
---
.../src/embedded/Matter_Device.be | 19 +-
.../berry_matter/src/embedded/Matter_IM.be | 23 +-
.../src/embedded/Matter_IM_Message.be | 27 +-
.../src/embedded/Matter_Plugin_OnOff.be | 44 +-
.../src/embedded/Matter_Plugin_Root.be | 21 +-
.../src/solidify/solidified_Matter_Device.h | 249 +-
.../src/solidify/solidified_Matter_IM.h | 2979 +++++++++--------
.../solidify/solidified_Matter_IM_Message.h | 744 ++--
.../solidify/solidified_Matter_Plugin_OnOff.h | 355 +-
.../solidify/solidified_Matter_Plugin_Root.h | 316 +-
10 files changed, 2574 insertions(+), 2203 deletions(-)
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Device.be b/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
index f32e6d1d7..79c35541d 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
@@ -117,6 +117,7 @@ class Matter_Device
# iterations is set to 1000 which is large enough
def compute_pbkdf(passcode_int)
import crypto
+ import string
self.salt = crypto.random(16) # bytes("5350414B453250204B65792053616C74")
var passcode = bytes().add(passcode_int, 4)
@@ -128,13 +129,17 @@ class Matter_Device
self.w1 = crypto.EC_P256().mod(w1s)
self.L = crypto.EC_P256().public_key(self.w1)
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: salt = " + self.salt.tohex(), 3)
- tasmota.log("MTR: passcode = " + passcode.tohex(), 3)
- tasmota.log("MTR: w0 = " + self.w0.tohex(), 3)
- tasmota.log("MTR: w1 = " + self.w1.tohex(), 3)
- tasmota.log("MTR: L = " + self.L.tohex(), 3)
- tasmota.log("MTR: ******************************", 3)
+ tasmota.log("MTR: ******************************", 4)
+ tasmota.log("MTR: salt = " + self.salt.tohex(), 4)
+ tasmota.log("MTR: passcode_hex = " + passcode.tohex(), 4)
+ tasmota.log("MTR: w0 = " + self.w0.tohex(), 4)
+ tasmota.log("MTR: w1 = " + self.w1.tohex(), 4)
+ tasmota.log("MTR: L = " + self.L.tohex(), 4)
+ tasmota.log("MTR: ******************************", 4)
+
+ # show Manual pairing code in logs
+ var pairing_code = self.compute_manual_pairing_code()
+ tasmota.log(string.format("MTR: Manual pairing code: %s-%s-%s", pairing_code[0..3], pairing_code[4..6], pairing_code[7..]), 2)
end
#############################################################
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
index 8b223d86a..a7f1bfd99 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
@@ -140,6 +140,23 @@ class Matter_IM
end
end
+ #############################################################
+ # Remove any queued message that expired
+ #
+ def expire_sendqueue()
+ var idx = 0
+ while idx < size(self.send_queue)
+ var message = self.send_queue[idx]
+ if tasmota.time_reached(message.expiration)
+ message.reached_timeout()
+ self.send_queue.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ return nil
+ end
+
#############################################################
# process IM 0x01 Status Response
#
@@ -328,7 +345,7 @@ class Matter_IM
tasmota.log(string.format("MTR: >Received %s %s from [%s]:%i", str(ctx), cmd_name ? cmd_name : "", msg.remote_ip, msg.remote_port), 2)
var res = self.device.invoke_request(msg.session, q.command_fields, ctx)
var a1 = matter.InvokeResponseIB()
- if res == true # special case, just respond ok
+ if res == true || ctx.status == matter.SUCCESS # special case, just respond ok
a1.status = matter.CommandStatusIB()
a1.status.command_path = matter.CommandPathIB()
a1.status.command_path.endpoint = ctx.endpoint
@@ -337,6 +354,7 @@ class Matter_IM
a1.status.status = matter.StatusIB()
a1.status.status.status = matter.SUCCESS
ret.invoke_responses.push(a1)
+ tasmota.log("MTR: 0
ret.attribute_reports = next_elemnts
tasmota.log("MTR: to_be_sent_later TLV" + str(ret), 3)
- self.expiration = tasmota.millis() + self.MSG_TIMEOUT # give more time
return false # keep alive
else
return true # finished, remove
@@ -254,11 +259,17 @@ class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
self.report_data_phase = true
end
+ def reached_timeout()
+ self.sub.remove_self()
+ end
+
# ack received, confirm the heartbeat
def ack_received(msg)
+ super(self).ack_received(msg)
if !self.report_data_phase
# if ack is received while all data is sent, means that it finished without error
- return true # proceed to calling send()
+ self.ready = true
+ return true # proceed to calling send() which removes the message
else
return false # do nothing
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
index 5677c06ac..db37f5e67 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
@@ -27,13 +27,13 @@ class Matter_Plugin end
class Matter_Plugin_OnOff : Matter_Plugin
static var ENDPOINTS = [ 1 ]
static var CLUSTERS = {
- 0x001D: [0,1,2,3], # Descriptor Cluster 9.5 p.453
- 0x0003: [0,1], # Identify 1.2 p.16
- 0x0004: [0], # Groups 1.3 p.21
- 0x0005: [0,1,2,3,4,5], # Scenes 1.4 p.30 - no writable
- 0x0006: [0,0xFFFC] # On/Off 1.5 p.48
+ 0x001D: [0,1,2,3,0xFFFC,0xFFFD], # Descriptor Cluster 9.5 p.453
+ 0x0003: [0,1,0xFFFC,0xFFFD], # Identify 1.2 p.16
+ 0x0004: [0,0xFFFC,0xFFFD], # Groups 1.3 p.21
+ 0x0005: [0,1,2,3,4,5,0xFFFC,0xFFFD], # Scenes 1.4 p.30 - no writable
+ 0x0006: [0,0xFFFC,0xFFFD] # On/Off 1.5 p.48
}
- static var TYPES = [ 0x0100 ] # On/Off Light
+ static var TYPES = { 0x010A: 2 } # On/Off Light
var onoff # fake status for now # TODO
@@ -59,10 +59,10 @@ class Matter_Plugin_OnOff : Matter_Plugin
if attribute == 0x0000 # ---------- DeviceTypeList / list[DeviceTypeStruct] ----------
var dtl = TLV.Matter_TLV_array()
- for dt: self.TYPES
+ for dt: self.TYPES.keys()
var d1 = dtl.add_struct()
d1.add_TLV(0, TLV.U2, dt) # DeviceType
- d1.add_TLV(1, TLV.U2, 1) # Revision
+ d1.add_TLV(1, TLV.U2, self.TYPES[dt]) # Revision
end
return dtl
elif attribute == 0x0001 # ---------- ServerList / list[cluster-id] ----------
@@ -78,6 +78,10 @@ class Matter_Plugin_OnOff : Matter_Plugin
elif attribute == 0x0003 # ---------- PartsList / list[endpoint-no]----------
var pl = TLV.Matter_TLV_array()
return pl
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 1) # 0 = no Level Control for Lighting
end
# ====================================================================================================
@@ -86,6 +90,28 @@ class Matter_Plugin_OnOff : Matter_Plugin
return TLV.create_TLV(TLV.U2, 0) # no identification in progress
elif attribute == 0x0001 # ---------- IdentifyType / enum8 ----------
return TLV.create_TLV(TLV.U1, 0) # IdentifyType = 0x00 None
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0004 # ========== Groups 1.3 p.21 ==========
+ if attribute == 0x0000 # ---------- ----------
+ return nil # TODO
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0005 # ========== Scenes 1.4 p.30 - no writable ==========
+ if attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
end
# ====================================================================================================
@@ -94,6 +120,8 @@ class Matter_Plugin_OnOff : Matter_Plugin
return TLV.create_TLV(TLV.BOOL, self.onoff)
elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
end
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
index 2f641189a..5dd27e2f4 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
@@ -30,7 +30,7 @@ class Matter_Plugin_Root : Matter_Plugin
0x001D: [0,1,2,3], # Descriptor Cluster 9.5 p.453
0x001F: [0,2,3,4], # Access Control Cluster, p.461
0x0028: [0,1,2,3,4,5,6,7,8,9,0x12],# Basic Information Cluster cluster 11.1 p.565
- 0x002A: [0,1,2,3], # OTA Software Update Requestor Cluster Definition 11.19.7 p.762
+ # 0x002A: [0,1,2,3], # OTA Software Update Requestor Cluster Definition 11.19.7 p.762
0x002B: [0,1], # Localization Configuration Cluster 11.3 p.580
0x002C: [0,1,2], # Time Format Localization Cluster 11.4 p.581
0x0030: [0,1,2,3,4], # GeneralCommissioning cluster 11.9 p.627
@@ -43,7 +43,7 @@ class Matter_Plugin_Root : Matter_Plugin
0x003E: [0,1,2,3,4,5], # Node Operational Credentials Cluster 11.17 p.704
0x003F: [] # Group Key Management Cluster 11.2 p.572
}
- static var TYPES = [ 0x0016 ] # On/Off Light
+ static var TYPES = { 0x0016: 1 } # On/Off Light
#############################################################
# Constructor
@@ -181,8 +181,8 @@ class Matter_Plugin_Root : Matter_Plugin
elif attribute == 0x0005 # ---------- Current FabricIndex / u1 ----------
var sessions_active = self.device.sessions.sessions_active()
var fabric_index = sessions_active.find(session)
- if fabric_index == nil fabric_index = 0 end
- return TLV.create_TLV(TLV.U1, fabric_index) # number of active sessions
+ if fabric_index == nil fabric_index = -1 end
+ return TLV.create_TLV(TLV.U1, fabric_index + 1) # number of active sessions
end
# ====================================================================================================
@@ -211,7 +211,7 @@ class Matter_Plugin_Root : Matter_Plugin
elif attribute == 0x0008 # ---------- HardwareVersionString / string ----------
return TLV.create_TLV(TLV.UTF1, tasmota.cmd("Status 2")['StatusFWR']['Hardware'])
elif attribute == 0x0009 # ---------- SoftwareVersion / u32 ----------
- return TLV.create_TLV(TLV.U2, 0)
+ return TLV.create_TLV(TLV.U2, 1)
elif attribute == 0x000A # ---------- SoftwareVersionString / string ----------
return TLV.create_TLV(TLV.UTF1, tasmota.cmd("Status 2")['StatusFWR']['Version'])
elif attribute == 0x0012 # ---------- UniqueID / string 32 max ----------
@@ -271,10 +271,10 @@ class Matter_Plugin_Root : Matter_Plugin
elif cluster == 0x001D # ========== Descriptor Cluster 9.5 p.453 ==========
if attribute == 0x0000 # ---------- DeviceTypeList / list[DeviceTypeStruct] ----------
var dtl = TLV.Matter_TLV_array()
- for dt: self.TYPES
+ for dt: self.TYPES.keys()
var d1 = dtl.add_struct()
d1.add_TLV(0, TLV.U2, dt) # DeviceType
- d1.add_TLV(1, TLV.U2, 1) # Revision
+ d1.add_TLV(1, TLV.U2, self.TYPES[dt]) # Revision
end
return dtl
elif attribute == 0x0001 # ---------- ServerList / list[cluster-id] ----------
@@ -508,6 +508,13 @@ class Matter_Plugin_Root : Matter_Plugin
return nil # trigger a standalone ack
end
+
+ # ====================================================================================================
+ elif cluster == 0x002A # ========== OTA Software Update Requestor Cluster Definition 11.19.7 p.762 ==========
+
+ if command == 0x0000 # ---------- DefaultOTAProviders ----------
+ return true # OK
+ end
end
end
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
index 51f6129fd..25646e8fe 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
@@ -1161,7 +1161,7 @@ be_local_closure(Matter_Device_start_basic_commissioning, /* name */
********************************************************************/
be_local_closure(Matter_Device_compute_pbkdf, /* name */
be_nested_proto(
- 11, /* nstack */
+ 17, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1169,129 +1169,154 @@ be_local_closure(Matter_Device_compute_pbkdf, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[24]) { /* constants */
+ ( &(const bvalue[30]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(salt),
- /* K2 */ be_nested_str_weak(random),
- /* K3 */ be_nested_str_weak(add),
- /* K4 */ be_nested_str_weak(PBKDF2_HMAC_SHA256),
- /* K5 */ be_nested_str_weak(derive),
- /* K6 */ be_nested_str_weak(iterations),
- /* K7 */ be_const_int(0),
- /* K8 */ be_nested_str_weak(w0),
- /* K9 */ be_nested_str_weak(EC_P256),
- /* K10 */ be_nested_str_weak(mod),
- /* K11 */ be_nested_str_weak(w1),
- /* K12 */ be_nested_str_weak(L),
- /* K13 */ be_nested_str_weak(public_key),
- /* K14 */ be_nested_str_weak(tasmota),
- /* K15 */ be_nested_str_weak(log),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K17 */ be_const_int(3),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(salt),
+ /* K3 */ be_nested_str_weak(random),
+ /* K4 */ be_nested_str_weak(add),
+ /* K5 */ be_nested_str_weak(PBKDF2_HMAC_SHA256),
+ /* K6 */ be_nested_str_weak(derive),
+ /* K7 */ be_nested_str_weak(iterations),
+ /* K8 */ be_const_int(0),
+ /* K9 */ be_nested_str_weak(w0),
+ /* K10 */ be_nested_str_weak(EC_P256),
+ /* K11 */ be_nested_str_weak(mod),
+ /* K12 */ be_nested_str_weak(w1),
+ /* K13 */ be_nested_str_weak(L),
+ /* K14 */ be_nested_str_weak(public_key),
+ /* K15 */ be_nested_str_weak(tasmota),
+ /* K16 */ be_nested_str_weak(log),
+ /* K17 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
/* K18 */ be_nested_str_weak(MTR_X3A_X20salt_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K19 */ be_nested_str_weak(tohex),
- /* K20 */ be_nested_str_weak(MTR_X3A_X20passcode_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20passcode_hex_X20_X20_X3D_X20),
/* K21 */ be_nested_str_weak(MTR_X3A_X20w0_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K22 */ be_nested_str_weak(MTR_X3A_X20w1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K23 */ be_nested_str_weak(MTR_X3A_X20L_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K24 */ be_nested_str_weak(compute_manual_pairing_code),
+ /* K25 */ be_nested_str_weak(format),
+ /* K26 */ be_nested_str_weak(MTR_X3A_X20Manual_X20pairing_X20code_X3A_X20_X25s_X2D_X25s_X2D_X25s),
+ /* K27 */ be_const_int(3),
+ /* K28 */ be_const_int(2147483647),
+ /* K29 */ be_const_int(2),
}),
be_str_weak(compute_pbkdf),
&be_const_str_solidified,
- ( &(const binstruction[94]) { /* code */
+ ( &(const binstruction[113]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
- 0x8C0C0502, // 0001 GETMET R3 R2 K2
- 0x5416000F, // 0002 LDINT R5 16
- 0x7C0C0400, // 0003 CALL R3 2
- 0x90020203, // 0004 SETMBR R0 K1 R3
- 0x600C0015, // 0005 GETGBL R3 G21
- 0x7C0C0000, // 0006 CALL R3 0
- 0x8C0C0703, // 0007 GETMET R3 R3 K3
- 0x5C140200, // 0008 MOVE R5 R1
- 0x541A0003, // 0009 LDINT R6 4
- 0x7C0C0600, // 000A CALL R3 3
- 0x8C100504, // 000B GETMET R4 R2 K4
- 0x7C100200, // 000C CALL R4 1
- 0x8C100905, // 000D GETMET R4 R4 K5
- 0x5C180600, // 000E MOVE R6 R3
- 0x881C0101, // 000F GETMBR R7 R0 K1
- 0x88200106, // 0010 GETMBR R8 R0 K6
- 0x5426004F, // 0011 LDINT R9 80
- 0x7C100A00, // 0012 CALL R4 5
- 0x54160026, // 0013 LDINT R5 39
- 0x40160E05, // 0014 CONNECT R5 K7 R5
- 0x94140805, // 0015 GETIDX R5 R4 R5
- 0x541A0027, // 0016 LDINT R6 40
- 0x541E004E, // 0017 LDINT R7 79
- 0x40180C07, // 0018 CONNECT R6 R6 R7
- 0x94180806, // 0019 GETIDX R6 R4 R6
- 0x8C1C0509, // 001A GETMET R7 R2 K9
- 0x7C1C0200, // 001B CALL R7 1
- 0x8C1C0F0A, // 001C GETMET R7 R7 K10
- 0x5C240A00, // 001D MOVE R9 R5
- 0x7C1C0400, // 001E CALL R7 2
- 0x90021007, // 001F SETMBR R0 K8 R7
- 0x8C1C0509, // 0020 GETMET R7 R2 K9
- 0x7C1C0200, // 0021 CALL R7 1
- 0x8C1C0F0A, // 0022 GETMET R7 R7 K10
- 0x5C240C00, // 0023 MOVE R9 R6
- 0x7C1C0400, // 0024 CALL R7 2
- 0x90021607, // 0025 SETMBR R0 K11 R7
- 0x8C1C0509, // 0026 GETMET R7 R2 K9
- 0x7C1C0200, // 0027 CALL R7 1
- 0x8C1C0F0D, // 0028 GETMET R7 R7 K13
- 0x8824010B, // 0029 GETMBR R9 R0 K11
- 0x7C1C0400, // 002A CALL R7 2
- 0x90021807, // 002B SETMBR R0 K12 R7
- 0xB81E1C00, // 002C GETNGBL R7 K14
- 0x8C1C0F0F, // 002D GETMET R7 R7 K15
- 0x58240010, // 002E LDCONST R9 K16
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0x8C100503, // 0002 GETMET R4 R2 K3
+ 0x541A000F, // 0003 LDINT R6 16
+ 0x7C100400, // 0004 CALL R4 2
+ 0x90020404, // 0005 SETMBR R0 K2 R4
+ 0x60100015, // 0006 GETGBL R4 G21
+ 0x7C100000, // 0007 CALL R4 0
+ 0x8C100904, // 0008 GETMET R4 R4 K4
+ 0x5C180200, // 0009 MOVE R6 R1
+ 0x541E0003, // 000A LDINT R7 4
+ 0x7C100600, // 000B CALL R4 3
+ 0x8C140505, // 000C GETMET R5 R2 K5
+ 0x7C140200, // 000D CALL R5 1
+ 0x8C140B06, // 000E GETMET R5 R5 K6
+ 0x5C1C0800, // 000F MOVE R7 R4
+ 0x88200102, // 0010 GETMBR R8 R0 K2
+ 0x88240107, // 0011 GETMBR R9 R0 K7
+ 0x542A004F, // 0012 LDINT R10 80
+ 0x7C140A00, // 0013 CALL R5 5
+ 0x541A0026, // 0014 LDINT R6 39
+ 0x401A1006, // 0015 CONNECT R6 K8 R6
+ 0x94180A06, // 0016 GETIDX R6 R5 R6
+ 0x541E0027, // 0017 LDINT R7 40
+ 0x5422004E, // 0018 LDINT R8 79
+ 0x401C0E08, // 0019 CONNECT R7 R7 R8
+ 0x941C0A07, // 001A GETIDX R7 R5 R7
+ 0x8C20050A, // 001B GETMET R8 R2 K10
+ 0x7C200200, // 001C CALL R8 1
+ 0x8C20110B, // 001D GETMET R8 R8 K11
+ 0x5C280C00, // 001E MOVE R10 R6
+ 0x7C200400, // 001F CALL R8 2
+ 0x90021208, // 0020 SETMBR R0 K9 R8
+ 0x8C20050A, // 0021 GETMET R8 R2 K10
+ 0x7C200200, // 0022 CALL R8 1
+ 0x8C20110B, // 0023 GETMET R8 R8 K11
+ 0x5C280E00, // 0024 MOVE R10 R7
+ 0x7C200400, // 0025 CALL R8 2
+ 0x90021808, // 0026 SETMBR R0 K12 R8
+ 0x8C20050A, // 0027 GETMET R8 R2 K10
+ 0x7C200200, // 0028 CALL R8 1
+ 0x8C20110E, // 0029 GETMET R8 R8 K14
+ 0x8828010C, // 002A GETMBR R10 R0 K12
+ 0x7C200400, // 002B CALL R8 2
+ 0x90021A08, // 002C SETMBR R0 K13 R8
+ 0xB8221E00, // 002D GETNGBL R8 K15
+ 0x8C201110, // 002E GETMET R8 R8 K16
0x58280011, // 002F LDCONST R10 K17
- 0x7C1C0600, // 0030 CALL R7 3
- 0xB81E1C00, // 0031 GETNGBL R7 K14
- 0x8C1C0F0F, // 0032 GETMET R7 R7 K15
- 0x88240101, // 0033 GETMBR R9 R0 K1
- 0x8C241313, // 0034 GETMET R9 R9 K19
- 0x7C240200, // 0035 CALL R9 1
- 0x00262409, // 0036 ADD R9 K18 R9
- 0x58280011, // 0037 LDCONST R10 K17
- 0x7C1C0600, // 0038 CALL R7 3
- 0xB81E1C00, // 0039 GETNGBL R7 K14
- 0x8C1C0F0F, // 003A GETMET R7 R7 K15
- 0x8C240713, // 003B GETMET R9 R3 K19
- 0x7C240200, // 003C CALL R9 1
- 0x00262809, // 003D ADD R9 K20 R9
- 0x58280011, // 003E LDCONST R10 K17
- 0x7C1C0600, // 003F CALL R7 3
- 0xB81E1C00, // 0040 GETNGBL R7 K14
- 0x8C1C0F0F, // 0041 GETMET R7 R7 K15
- 0x88240108, // 0042 GETMBR R9 R0 K8
- 0x8C241313, // 0043 GETMET R9 R9 K19
- 0x7C240200, // 0044 CALL R9 1
- 0x00262A09, // 0045 ADD R9 K21 R9
- 0x58280011, // 0046 LDCONST R10 K17
- 0x7C1C0600, // 0047 CALL R7 3
- 0xB81E1C00, // 0048 GETNGBL R7 K14
- 0x8C1C0F0F, // 0049 GETMET R7 R7 K15
- 0x8824010B, // 004A GETMBR R9 R0 K11
- 0x8C241313, // 004B GETMET R9 R9 K19
- 0x7C240200, // 004C CALL R9 1
- 0x00262C09, // 004D ADD R9 K22 R9
- 0x58280011, // 004E LDCONST R10 K17
- 0x7C1C0600, // 004F CALL R7 3
- 0xB81E1C00, // 0050 GETNGBL R7 K14
- 0x8C1C0F0F, // 0051 GETMET R7 R7 K15
- 0x8824010C, // 0052 GETMBR R9 R0 K12
- 0x8C241313, // 0053 GETMET R9 R9 K19
- 0x7C240200, // 0054 CALL R9 1
- 0x00262E09, // 0055 ADD R9 K23 R9
- 0x58280011, // 0056 LDCONST R10 K17
- 0x7C1C0600, // 0057 CALL R7 3
- 0xB81E1C00, // 0058 GETNGBL R7 K14
- 0x8C1C0F0F, // 0059 GETMET R7 R7 K15
- 0x58240010, // 005A LDCONST R9 K16
+ 0x542E0003, // 0030 LDINT R11 4
+ 0x7C200600, // 0031 CALL R8 3
+ 0xB8221E00, // 0032 GETNGBL R8 K15
+ 0x8C201110, // 0033 GETMET R8 R8 K16
+ 0x88280102, // 0034 GETMBR R10 R0 K2
+ 0x8C281513, // 0035 GETMET R10 R10 K19
+ 0x7C280200, // 0036 CALL R10 1
+ 0x002A240A, // 0037 ADD R10 K18 R10
+ 0x542E0003, // 0038 LDINT R11 4
+ 0x7C200600, // 0039 CALL R8 3
+ 0xB8221E00, // 003A GETNGBL R8 K15
+ 0x8C201110, // 003B GETMET R8 R8 K16
+ 0x8C280913, // 003C GETMET R10 R4 K19
+ 0x7C280200, // 003D CALL R10 1
+ 0x002A280A, // 003E ADD R10 K20 R10
+ 0x542E0003, // 003F LDINT R11 4
+ 0x7C200600, // 0040 CALL R8 3
+ 0xB8221E00, // 0041 GETNGBL R8 K15
+ 0x8C201110, // 0042 GETMET R8 R8 K16
+ 0x88280109, // 0043 GETMBR R10 R0 K9
+ 0x8C281513, // 0044 GETMET R10 R10 K19
+ 0x7C280200, // 0045 CALL R10 1
+ 0x002A2A0A, // 0046 ADD R10 K21 R10
+ 0x542E0003, // 0047 LDINT R11 4
+ 0x7C200600, // 0048 CALL R8 3
+ 0xB8221E00, // 0049 GETNGBL R8 K15
+ 0x8C201110, // 004A GETMET R8 R8 K16
+ 0x8828010C, // 004B GETMBR R10 R0 K12
+ 0x8C281513, // 004C GETMET R10 R10 K19
+ 0x7C280200, // 004D CALL R10 1
+ 0x002A2C0A, // 004E ADD R10 K22 R10
+ 0x542E0003, // 004F LDINT R11 4
+ 0x7C200600, // 0050 CALL R8 3
+ 0xB8221E00, // 0051 GETNGBL R8 K15
+ 0x8C201110, // 0052 GETMET R8 R8 K16
+ 0x8828010D, // 0053 GETMBR R10 R0 K13
+ 0x8C281513, // 0054 GETMET R10 R10 K19
+ 0x7C280200, // 0055 CALL R10 1
+ 0x002A2E0A, // 0056 ADD R10 K23 R10
+ 0x542E0003, // 0057 LDINT R11 4
+ 0x7C200600, // 0058 CALL R8 3
+ 0xB8221E00, // 0059 GETNGBL R8 K15
+ 0x8C201110, // 005A GETMET R8 R8 K16
0x58280011, // 005B LDCONST R10 K17
- 0x7C1C0600, // 005C CALL R7 3
- 0x80000000, // 005D RET 0
+ 0x542E0003, // 005C LDINT R11 4
+ 0x7C200600, // 005D CALL R8 3
+ 0x8C200118, // 005E GETMET R8 R0 K24
+ 0x7C200200, // 005F CALL R8 1
+ 0xB8261E00, // 0060 GETNGBL R9 K15
+ 0x8C241310, // 0061 GETMET R9 R9 K16
+ 0x8C2C0719, // 0062 GETMET R11 R3 K25
+ 0x5834001A, // 0063 LDCONST R13 K26
+ 0x403A111B, // 0064 CONNECT R14 K8 K27
+ 0x9438100E, // 0065 GETIDX R14 R8 R14
+ 0x543E0003, // 0066 LDINT R15 4
+ 0x54420005, // 0067 LDINT R16 6
+ 0x403C1E10, // 0068 CONNECT R15 R15 R16
+ 0x943C100F, // 0069 GETIDX R15 R8 R15
+ 0x54420006, // 006A LDINT R16 7
+ 0x4040211C, // 006B CONNECT R16 R16 K28
+ 0x94401010, // 006C GETIDX R16 R8 R16
+ 0x7C2C0A00, // 006D CALL R11 5
+ 0x5830001D, // 006E LDCONST R12 K29
+ 0x7C240600, // 006F CALL R9 3
+ 0x80000000, // 0070 RET 0
})
)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
index 5d2af812a..9bb56e254 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
@@ -7,71 +7,55 @@
extern const bclass be_class_Matter_IM;
/********************************************************************
-** Solidified function: process_timed_request
+** Solidified function: expire_sendqueue
********************************************************************/
-be_local_closure(Matter_IM_process_timed_request, /* name */
+be_local_closure(Matter_IM_expire_sendqueue, /* name */
be_nested_proto(
- 13, /* nstack */
- 3, /* argc */
+ 6, /* nstack */
+ 1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[16]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TimedRequestMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20TimedRequestMessage_X3D),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(format),
- /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20TimedRequest_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K10 */ be_nested_str_weak(timeout),
- /* K11 */ be_nested_str_weak(remote_ip),
- /* K12 */ be_nested_str_weak(remote_port),
- /* K13 */ be_const_int(2),
- /* K14 */ be_nested_str_weak(send_status),
- /* K15 */ be_nested_str_weak(SUCCESS),
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(time_reached),
+ /* K4 */ be_nested_str_weak(expiration),
+ /* K5 */ be_nested_str_weak(reached_timeout),
+ /* K6 */ be_nested_str_weak(remove),
+ /* K7 */ be_const_int(1),
}),
- be_str_weak(process_timed_request),
+ be_str_weak(expire_sendqueue),
&be_const_str_solidified,
- ( &(const binstruction[32]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0xB8160800, // 000F GETNGBL R5 K4
- 0x8C140B05, // 0010 GETMET R5 R5 K5
- 0x8C1C0708, // 0011 GETMET R7 R3 K8
- 0x58240009, // 0012 LDCONST R9 K9
- 0x8828090A, // 0013 GETMBR R10 R4 K10
- 0x882C030B, // 0014 GETMBR R11 R1 K11
- 0x8830030C, // 0015 GETMBR R12 R1 K12
- 0x7C1C0A00, // 0016 CALL R7 5
- 0x5820000D, // 0017 LDCONST R8 K13
- 0x7C140600, // 0018 CALL R5 3
- 0x8C14010E, // 0019 GETMET R5 R0 K14
- 0x5C1C0200, // 001A MOVE R7 R1
- 0xB8220200, // 001B GETNGBL R8 K1
- 0x8820110F, // 001C GETMBR R8 R8 K15
- 0x7C140600, // 001D CALL R5 3
- 0x50140200, // 001E LDBOOL R5 1 0
- 0x80040A00, // 001F RET 1 R5
+ ( &(const binstruction[24]) { /* 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
+ 0x780A000F, // 0005 JMPF R2 #0016
+ 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
+ 0x780E0006, // 000C JMPF R3 #0014
+ 0x8C0C0505, // 000D GETMET R3 R2 K5
+ 0x7C0C0200, // 000E CALL R3 1
+ 0x880C0101, // 000F GETMBR R3 R0 K1
+ 0x8C0C0706, // 0010 GETMET R3 R3 K6
+ 0x5C140200, // 0011 MOVE R5 R1
+ 0x7C0C0400, // 0012 CALL R3 2
+ 0x70020000, // 0013 JMP #0015
+ 0x00040307, // 0014 ADD R1 R1 K7
+ 0x7001FFEA, // 0015 JMP #0001
+ 0x4C080000, // 0016 LDNIL R2
+ 0x80040400, // 0017 RET 1 R2
})
)
);
@@ -79,89 +63,9 @@ be_local_closure(Matter_IM_process_timed_request, /* name */
/********************************************************************
-** Solidified function: process_status_response
+** Solidified function: report_data
********************************************************************/
-be_local_closure(Matter_IM_process_status_response, /* name */
- be_nested_proto(
- 12, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[16]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(findsubval),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
- /* K4 */ be_nested_str_weak(exchange_id),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(SUCCESS),
- /* K7 */ be_nested_str_weak(tasmota),
- /* K8 */ be_nested_str_weak(log),
- /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_OK),
- /* K10 */ be_const_int(2),
- /* K11 */ be_nested_str_weak(status_ok_received),
- /* K12 */ be_nested_str_weak(format),
- /* K13 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_X20_X20_X20_X20ERROR_X20_X3D_X200x_X2502X),
- /* K14 */ be_nested_str_weak(status_error_received),
- /* K15 */ be_nested_str_weak(remove_sendqueue_by_exchangeid),
- }),
- be_str_weak(process_status_response),
- &be_const_str_solidified,
- ( &(const binstruction[40]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0x8C100501, // 0001 GETMET R4 R2 K1
- 0x58180002, // 0002 LDCONST R6 K2
- 0x541E00FE, // 0003 LDINT R7 255
- 0x7C100600, // 0004 CALL R4 3
- 0x8C140103, // 0005 GETMET R5 R0 K3
- 0x881C0304, // 0006 GETMBR R7 R1 K4
- 0x7C140400, // 0007 CALL R5 2
- 0xB81A0A00, // 0008 GETNGBL R6 K5
- 0x88180D06, // 0009 GETMBR R6 R6 K6
- 0x1C180806, // 000A EQ R6 R4 R6
- 0x781A000A, // 000B JMPF R6 #0017
- 0xB81A0E00, // 000C GETNGBL R6 K7
- 0x8C180D08, // 000D GETMET R6 R6 K8
- 0x58200009, // 000E LDCONST R8 K9
- 0x5824000A, // 000F LDCONST R9 K10
- 0x7C180600, // 0010 CALL R6 3
- 0x78160003, // 0011 JMPF R5 #0016
- 0x8C180B0B, // 0012 GETMET R6 R5 K11
- 0x5C200200, // 0013 MOVE R8 R1
- 0x7C180400, // 0014 CALL R6 2
- 0x80040C00, // 0015 RET 1 R6
- 0x7002000E, // 0016 JMP #0026
- 0xB81A0E00, // 0017 GETNGBL R6 K7
- 0x8C180D08, // 0018 GETMET R6 R6 K8
- 0x8C20070C, // 0019 GETMET R8 R3 K12
- 0x5828000D, // 001A LDCONST R10 K13
- 0x5C2C0800, // 001B MOVE R11 R4
- 0x7C200600, // 001C CALL R8 3
- 0x5824000A, // 001D LDCONST R9 K10
- 0x7C180600, // 001E CALL R6 3
- 0x78160005, // 001F JMPF R5 #0026
- 0x8C180B0E, // 0020 GETMET R6 R5 K14
- 0x5C200200, // 0021 MOVE R8 R1
- 0x7C180400, // 0022 CALL R6 2
- 0x8C18010F, // 0023 GETMET R6 R0 K15
- 0x88200304, // 0024 GETMBR R8 R1 K4
- 0x7C180400, // 0025 CALL R6 2
- 0x50180000, // 0026 LDBOOL R6 0 0
- 0x80040C00, // 0027 RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_write_response
-********************************************************************/
-be_local_closure(Matter_IM_process_write_response, /* name */
+be_local_closure(Matter_IM_report_data, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
@@ -174,14 +78,14 @@ be_local_closure(Matter_IM_process_write_response, /* name */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(WriteResponseMessage),
+ /* K2 */ be_nested_str_weak(ReportDataMessage),
/* K3 */ be_nested_str_weak(from_TLV),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteResponseMessage_X3D),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20ReportDataMessage_X3D),
/* K7 */ be_const_int(2),
}),
- be_str_weak(process_write_response),
+ be_str_weak(report_data),
&be_const_str_solidified,
( &(const binstruction[17]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
@@ -208,436 +112,362 @@ be_local_closure(Matter_IM_process_write_response, /* name */
/********************************************************************
-** Solidified function: process_invoke_request
+** Solidified function: process_write_request
********************************************************************/
-be_local_closure(Matter_IM_process_invoke_request, /* name */
+be_local_closure(Matter_IM_process_write_request, /* name */
be_nested_proto(
- 19, /* nstack */
+ 20, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[45]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(MTR_X3A_X20IM_X3Ainvoke_request_X20processing_X20start),
- /* K4 */ be_nested_str_weak(matter),
- /* K5 */ be_nested_str_weak(Path),
- /* K6 */ be_nested_str_weak(InvokeRequestMessage),
- /* K7 */ be_nested_str_weak(from_TLV),
- /* K8 */ be_nested_str_weak(invoke_requests),
- /* K9 */ be_nested_str_weak(InvokeResponseMessage),
- /* K10 */ be_nested_str_weak(suppress_response),
- /* K11 */ be_nested_str_weak(invoke_responses),
- /* K12 */ be_nested_str_weak(endpoint),
- /* K13 */ be_nested_str_weak(command_path),
- /* K14 */ be_nested_str_weak(cluster),
- /* K15 */ be_nested_str_weak(command),
- /* K16 */ be_nested_str_weak(status),
- /* K17 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
- /* K18 */ be_nested_str_weak(get_command_name),
- /* K19 */ be_nested_str_weak(format),
- /* K20 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X25s_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K21 */ be_nested_str_weak(),
- /* K22 */ be_nested_str_weak(remote_ip),
- /* K23 */ be_nested_str_weak(remote_port),
- /* K24 */ be_const_int(2),
- /* K25 */ be_nested_str_weak(device),
- /* K26 */ be_nested_str_weak(invoke_request),
- /* K27 */ be_nested_str_weak(session),
- /* K28 */ be_nested_str_weak(command_fields),
- /* K29 */ be_nested_str_weak(InvokeResponseIB),
- /* K30 */ be_nested_str_weak(CommandStatusIB),
- /* K31 */ be_nested_str_weak(CommandPathIB),
- /* K32 */ be_nested_str_weak(StatusIB),
- /* K33 */ be_nested_str_weak(SUCCESS),
- /* K34 */ be_nested_str_weak(push),
- /* K35 */ be_nested_str_weak(CommandDataIB),
- /* K36 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X25s_X20_X25s),
- /* K37 */ be_nested_str_weak(stop_iteration),
- /* K38 */ be_nested_str_weak(MTR_X3A_X20invoke_responses_X3D),
- /* K39 */ be_const_int(0),
- /* K40 */ be_nested_str_weak(MTR_X3A_X20InvokeResponse_X3D),
- /* K41 */ be_nested_str_weak(MTR_X3A_X20InvokeResponseTLV_X3D),
- /* K42 */ be_nested_str_weak(to_TLV),
- /* K43 */ be_const_int(3),
- /* K44 */ be_nested_str_weak(send_invoke_response),
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 19, /* nstack */
+ 5, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 1),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[26]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(get_attribute_name),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(_X20_X28),
+ /* K6 */ be_nested_str_weak(_X29),
+ /* K7 */ be_nested_str_weak(),
+ /* K8 */ be_nested_str_weak(status),
+ /* K9 */ be_nested_str_weak(UNSUPPORTED_WRITE),
+ /* K10 */ be_nested_str_weak(write_attribute),
+ /* K11 */ be_nested_str_weak(session),
+ /* K12 */ be_nested_str_weak(SUCCESS),
+ /* K13 */ be_nested_str_weak(AttributeStatusIB),
+ /* K14 */ be_nested_str_weak(path),
+ /* K15 */ be_nested_str_weak(AttributePathIB),
+ /* K16 */ be_nested_str_weak(StatusIB),
+ /* K17 */ be_nested_str_weak(endpoint),
+ /* K18 */ be_nested_str_weak(write_responses),
+ /* K19 */ be_nested_str_weak(push),
+ /* K20 */ be_nested_str_weak(tasmota),
+ /* K21 */ be_nested_str_weak(log),
+ /* K22 */ be_nested_str_weak(format),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
+ /* K24 */ be_const_int(2),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20IGNORED),
+ }),
+ be_str_weak(write_single_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[97]) { /* code */
+ 0xA4160000, // 0000 IMPORT R5 K0
+ 0xB81A0200, // 0001 GETNGBL R6 K1
+ 0x8C180D02, // 0002 GETMET R6 R6 K2
+ 0x88200503, // 0003 GETMBR R8 R2 K3
+ 0x88240504, // 0004 GETMBR R9 R2 K4
+ 0x7C180600, // 0005 CALL R6 3
+ 0x781A0002, // 0006 JMPF R6 #000A
+ 0x001E0A06, // 0007 ADD R7 K5 R6
+ 0x001C0F06, // 0008 ADD R7 R7 K6
+ 0x70020000, // 0009 JMP #000B
+ 0x581C0007, // 000A LDCONST R7 K7
+ 0x5C180E00, // 000B MOVE R6 R7
+ 0xB81E0200, // 000C GETNGBL R7 K1
+ 0x881C0F09, // 000D GETMBR R7 R7 K9
+ 0x900A1007, // 000E SETMBR R2 K8 R7
+ 0x4C1C0000, // 000F LDNIL R7
+ 0x201C0207, // 0010 NE R7 R1 R7
+ 0x781E0006, // 0011 JMPF R7 #0019
+ 0x8C1C030A, // 0012 GETMET R7 R1 K10
+ 0x68240000, // 0013 GETUPV R9 U0
+ 0x8824130B, // 0014 GETMBR R9 R9 K11
+ 0x5C280400, // 0015 MOVE R10 R2
+ 0x5C2C0600, // 0016 MOVE R11 R3
+ 0x7C1C0800, // 0017 CALL R7 4
+ 0x70020000, // 0018 JMP #001A
+ 0x4C1C0000, // 0019 LDNIL R7
+ 0x781E0002, // 001A JMPF R7 #001E
+ 0xB8220200, // 001B GETNGBL R8 K1
+ 0x8820110C, // 001C GETMBR R8 R8 K12
+ 0x900A1008, // 001D SETMBR R2 K8 R8
+ 0x88200508, // 001E GETMBR R8 R2 K8
+ 0x4C240000, // 001F LDNIL R9
+ 0x20201009, // 0020 NE R8 R8 R9
+ 0x78220032, // 0021 JMPF R8 #0055
+ 0x78120030, // 0022 JMPF R4 #0054
+ 0xB8220200, // 0023 GETNGBL R8 K1
+ 0x8C20110D, // 0024 GETMET R8 R8 K13
+ 0x7C200200, // 0025 CALL R8 1
+ 0xB8260200, // 0026 GETNGBL R9 K1
+ 0x8C24130F, // 0027 GETMET R9 R9 K15
+ 0x7C240200, // 0028 CALL R9 1
+ 0x90221C09, // 0029 SETMBR R8 K14 R9
+ 0xB8260200, // 002A GETNGBL R9 K1
+ 0x8C241310, // 002B GETMET R9 R9 K16
+ 0x7C240200, // 002C CALL R9 1
+ 0x90221009, // 002D SETMBR R8 K8 R9
+ 0x8824110E, // 002E GETMBR R9 R8 K14
+ 0x88280511, // 002F GETMBR R10 R2 K17
+ 0x9026220A, // 0030 SETMBR R9 K17 R10
+ 0x8824110E, // 0031 GETMBR R9 R8 K14
+ 0x88280503, // 0032 GETMBR R10 R2 K3
+ 0x9026060A, // 0033 SETMBR R9 K3 R10
+ 0x8824110E, // 0034 GETMBR R9 R8 K14
+ 0x88280504, // 0035 GETMBR R10 R2 K4
+ 0x9026080A, // 0036 SETMBR R9 K4 R10
+ 0x88241108, // 0037 GETMBR R9 R8 K8
+ 0x88280508, // 0038 GETMBR R10 R2 K8
+ 0x9026100A, // 0039 SETMBR R9 K8 R10
+ 0x88240112, // 003A GETMBR R9 R0 K18
+ 0x8C241313, // 003B GETMET R9 R9 K19
+ 0x5C2C1000, // 003C MOVE R11 R8
+ 0x7C240400, // 003D CALL R9 2
+ 0xB8262800, // 003E GETNGBL R9 K20
+ 0x8C241315, // 003F GETMET R9 R9 K21
+ 0x8C2C0B16, // 0040 GETMET R11 R5 K22
+ 0x58340017, // 0041 LDCONST R13 K23
+ 0x60380008, // 0042 GETGBL R14 G8
+ 0x5C3C0400, // 0043 MOVE R15 R2
+ 0x7C380200, // 0044 CALL R14 1
+ 0x5C3C0C00, // 0045 MOVE R15 R6
+ 0x88400508, // 0046 GETMBR R16 R2 K8
+ 0x88440508, // 0047 GETMBR R17 R2 K8
+ 0xB84A0200, // 0048 GETNGBL R18 K1
+ 0x8848250C, // 0049 GETMBR R18 R18 K12
+ 0x1C442212, // 004A EQ R17 R17 R18
+ 0x78460001, // 004B JMPF R17 #004E
+ 0x5844000C, // 004C LDCONST R17 K12
+ 0x70020000, // 004D JMP #004F
+ 0x58440007, // 004E LDCONST R17 K7
+ 0x7C2C0C00, // 004F CALL R11 6
+ 0x58300018, // 0050 LDCONST R12 K24
+ 0x7C240600, // 0051 CALL R9 3
+ 0x50240200, // 0052 LDBOOL R9 1 0
+ 0x80041200, // 0053 RET 1 R9
+ 0x7002000A, // 0054 JMP #0060
+ 0xB8222800, // 0055 GETNGBL R8 K20
+ 0x8C201115, // 0056 GETMET R8 R8 K21
+ 0x8C280B16, // 0057 GETMET R10 R5 K22
+ 0x58300019, // 0058 LDCONST R12 K25
+ 0x60340008, // 0059 GETGBL R13 G8
+ 0x5C380400, // 005A MOVE R14 R2
+ 0x7C340200, // 005B CALL R13 1
+ 0x5C380C00, // 005C MOVE R14 R6
+ 0x7C280800, // 005D CALL R10 4
+ 0x582C0018, // 005E LDCONST R11 K24
+ 0x7C200600, // 005F CALL R8 3
+ 0x80000000, // 0060 RET 0
+ })
+ ),
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 3]) { /* upvals */
+ be_local_const_upval(1, 7),
+ be_local_const_upval(1, 9),
+ be_local_const_upval(1, 13),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x680C0000, // 0000 GETUPV R3 U0
+ 0x68100001, // 0001 GETUPV R4 U1
+ 0x5C140000, // 0002 MOVE R5 R0
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x681C0002, // 0004 GETUPV R7 U2
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C0C0A00, // 0006 CALL R3 5
+ 0x80040600, // 0007 RET 1 R3
+ })
+ ),
}),
- be_str_weak(process_invoke_request),
+ 1, /* has constants */
+ ( &(const bvalue[36]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(WriteRequestMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteRequestMessage_X3D),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(suppress_response),
+ /* K9 */ be_nested_str_weak(device),
+ /* K10 */ be_nested_str_weak(get_active_endpoints),
+ /* K11 */ be_nested_str_weak(MTR_X3A_X20IM_X3Awrite_request_X20processing_X20start),
+ /* K12 */ be_nested_str_weak(Path),
+ /* K13 */ be_nested_str_weak(write_requests),
+ /* K14 */ be_nested_str_weak(WriteResponseMessage),
+ /* K15 */ be_nested_str_weak(write_responses),
+ /* K16 */ be_nested_str_weak(path),
+ /* K17 */ be_nested_str_weak(data),
+ /* K18 */ be_nested_str_weak(endpoint),
+ /* K19 */ be_nested_str_weak(cluster),
+ /* K20 */ be_nested_str_weak(attribute),
+ /* K21 */ be_nested_str_weak(status),
+ /* K22 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
+ /* K23 */ be_nested_str_weak(INVALID_ACTION),
+ /* K24 */ be_nested_str_weak(get_attribute_name),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20),
+ /* K26 */ be_nested_str_weak(_X20_X28),
+ /* K27 */ be_nested_str_weak(_X29),
+ /* K28 */ be_nested_str_weak(),
+ /* K29 */ be_const_int(2),
+ /* K30 */ be_nested_str_weak(process_attribute_expansion),
+ /* K31 */ be_nested_str_weak(stop_iteration),
+ /* K32 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessage_X3D),
+ /* K33 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessageTLV_X3D),
+ /* K34 */ be_nested_str_weak(to_TLV),
+ /* K35 */ be_nested_str_weak(send_write_response),
+ }),
+ be_str_weak(process_write_request),
&be_const_str_solidified,
- ( &(const binstruction[248]) { /* code */
+ ( &(const binstruction[134]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x8C100902, // 0002 GETMET R4 R4 K2
- 0x58180003, // 0003 LDCONST R6 K3
- 0x541E0003, // 0004 LDINT R7 4
- 0x7C100600, // 0005 CALL R4 3
- 0xB8120800, // 0006 GETNGBL R4 K4
- 0x8C100905, // 0007 GETMET R4 R4 K5
- 0x7C100200, // 0008 CALL R4 1
- 0xB8160800, // 0009 GETNGBL R5 K4
- 0x8C140B06, // 000A GETMET R5 R5 K6
- 0x7C140200, // 000B CALL R5 1
- 0x8C140B07, // 000C GETMET R5 R5 K7
- 0x5C1C0400, // 000D MOVE R7 R2
- 0x7C140400, // 000E CALL R5 2
- 0x88180B08, // 000F GETMBR R6 R5 K8
- 0x4C1C0000, // 0010 LDNIL R7
- 0x20180C07, // 0011 NE R6 R6 R7
- 0x781A00E3, // 0012 JMPF R6 #00F7
- 0xB81A0800, // 0013 GETNGBL R6 K4
- 0x8C180D09, // 0014 GETMET R6 R6 K9
- 0x7C180200, // 0015 CALL R6 1
- 0x501C0000, // 0016 LDBOOL R7 0 0
- 0x901A1407, // 0017 SETMBR R6 K10 R7
- 0x601C0012, // 0018 GETGBL R7 G18
- 0x7C1C0000, // 0019 CALL R7 0
- 0x901A1607, // 001A SETMBR R6 K11 R7
- 0x601C0010, // 001B GETGBL R7 G16
- 0x88200B08, // 001C GETMBR R8 R5 K8
- 0x7C1C0200, // 001D CALL R7 1
- 0xA80200AD, // 001E EXBLK 0 #00CD
- 0x5C200E00, // 001F MOVE R8 R7
- 0x7C200000, // 0020 CALL R8 0
- 0x8824110D, // 0021 GETMBR R9 R8 K13
- 0x8824130C, // 0022 GETMBR R9 R9 K12
- 0x90121809, // 0023 SETMBR R4 K12 R9
- 0x8824110D, // 0024 GETMBR R9 R8 K13
- 0x8824130E, // 0025 GETMBR R9 R9 K14
- 0x90121C09, // 0026 SETMBR R4 K14 R9
- 0x8824110D, // 0027 GETMBR R9 R8 K13
- 0x8824130F, // 0028 GETMBR R9 R9 K15
- 0x90121E09, // 0029 SETMBR R4 K15 R9
- 0xB8260800, // 002A GETNGBL R9 K4
- 0x88241311, // 002B GETMBR R9 R9 K17
- 0x90122009, // 002C SETMBR R4 K16 R9
- 0xB8260800, // 002D GETNGBL R9 K4
- 0x8C241312, // 002E GETMET R9 R9 K18
- 0x882C090E, // 002F GETMBR R11 R4 K14
- 0x8830090F, // 0030 GETMBR R12 R4 K15
- 0x7C240600, // 0031 CALL R9 3
- 0xB82A0200, // 0032 GETNGBL R10 K1
- 0x8C281502, // 0033 GETMET R10 R10 K2
- 0x8C300713, // 0034 GETMET R12 R3 K19
- 0x58380014, // 0035 LDCONST R14 K20
- 0x603C0008, // 0036 GETGBL R15 G8
- 0x5C400800, // 0037 MOVE R16 R4
- 0x7C3C0200, // 0038 CALL R15 1
- 0x78260001, // 0039 JMPF R9 #003C
- 0x5C401200, // 003A MOVE R16 R9
- 0x70020000, // 003B JMP #003D
- 0x58400015, // 003C LDCONST R16 K21
- 0x88440316, // 003D GETMBR R17 R1 K22
- 0x88480317, // 003E GETMBR R18 R1 K23
- 0x7C300C00, // 003F CALL R12 6
- 0x58340018, // 0040 LDCONST R13 K24
- 0x7C280600, // 0041 CALL R10 3
- 0x88280119, // 0042 GETMBR R10 R0 K25
- 0x8C28151A, // 0043 GETMET R10 R10 K26
- 0x8830031B, // 0044 GETMBR R12 R1 K27
- 0x8834111C, // 0045 GETMBR R13 R8 K28
- 0x5C380800, // 0046 MOVE R14 R4
- 0x7C280800, // 0047 CALL R10 4
- 0xB82E0800, // 0048 GETNGBL R11 K4
- 0x8C2C171D, // 0049 GETMET R11 R11 K29
- 0x7C2C0200, // 004A CALL R11 1
- 0x50300200, // 004B LDBOOL R12 1 0
- 0x1C30140C, // 004C EQ R12 R10 R12
- 0x78320023, // 004D JMPF R12 #0072
- 0xB8320800, // 004E GETNGBL R12 K4
- 0x8C30191E, // 004F GETMET R12 R12 K30
- 0x7C300200, // 0050 CALL R12 1
- 0x902E200C, // 0051 SETMBR R11 K16 R12
- 0x88301710, // 0052 GETMBR R12 R11 K16
- 0xB8360800, // 0053 GETNGBL R13 K4
- 0x8C341B1F, // 0054 GETMET R13 R13 K31
- 0x7C340200, // 0055 CALL R13 1
- 0x90321A0D, // 0056 SETMBR R12 K13 R13
- 0x88301710, // 0057 GETMBR R12 R11 K16
- 0x8830190D, // 0058 GETMBR R12 R12 K13
- 0x8834090C, // 0059 GETMBR R13 R4 K12
- 0x9032180D, // 005A SETMBR R12 K12 R13
- 0x88301710, // 005B GETMBR R12 R11 K16
- 0x8830190D, // 005C GETMBR R12 R12 K13
- 0x8834090E, // 005D GETMBR R13 R4 K14
- 0x90321C0D, // 005E SETMBR R12 K14 R13
- 0x88301710, // 005F GETMBR R12 R11 K16
- 0x8830190D, // 0060 GETMBR R12 R12 K13
- 0x8834090F, // 0061 GETMBR R13 R4 K15
- 0x90321E0D, // 0062 SETMBR R12 K15 R13
- 0x88301710, // 0063 GETMBR R12 R11 K16
- 0xB8360800, // 0064 GETNGBL R13 K4
- 0x8C341B20, // 0065 GETMET R13 R13 K32
- 0x7C340200, // 0066 CALL R13 1
- 0x9032200D, // 0067 SETMBR R12 K16 R13
- 0x88301710, // 0068 GETMBR R12 R11 K16
- 0x88301910, // 0069 GETMBR R12 R12 K16
- 0xB8360800, // 006A GETNGBL R13 K4
- 0x88341B21, // 006B GETMBR R13 R13 K33
- 0x9032200D, // 006C SETMBR R12 K16 R13
- 0x88300D0B, // 006D GETMBR R12 R6 K11
- 0x8C301922, // 006E GETMET R12 R12 K34
- 0x5C381600, // 006F MOVE R14 R11
- 0x7C300400, // 0070 CALL R12 2
- 0x70020059, // 0071 JMP #00CC
- 0x4C300000, // 0072 LDNIL R12
- 0x2030140C, // 0073 NE R12 R10 R12
- 0x7832002F, // 0074 JMPF R12 #00A5
- 0xB8320800, // 0075 GETNGBL R12 K4
- 0x8C301923, // 0076 GETMET R12 R12 K35
- 0x7C300200, // 0077 CALL R12 1
- 0x902E1E0C, // 0078 SETMBR R11 K15 R12
- 0x8830170F, // 0079 GETMBR R12 R11 K15
- 0xB8360800, // 007A GETNGBL R13 K4
- 0x8C341B1F, // 007B GETMET R13 R13 K31
- 0x7C340200, // 007C CALL R13 1
- 0x90321A0D, // 007D SETMBR R12 K13 R13
- 0x8830170F, // 007E GETMBR R12 R11 K15
- 0x8830190D, // 007F GETMBR R12 R12 K13
- 0x8834090C, // 0080 GETMBR R13 R4 K12
- 0x9032180D, // 0081 SETMBR R12 K12 R13
- 0x8830170F, // 0082 GETMBR R12 R11 K15
- 0x8830190D, // 0083 GETMBR R12 R12 K13
- 0x8834090E, // 0084 GETMBR R13 R4 K14
- 0x90321C0D, // 0085 SETMBR R12 K14 R13
- 0x8830170F, // 0086 GETMBR R12 R11 K15
- 0x8830190D, // 0087 GETMBR R12 R12 K13
- 0x8834090F, // 0088 GETMBR R13 R4 K15
- 0x90321E0D, // 0089 SETMBR R12 K15 R13
- 0x8830170F, // 008A GETMBR R12 R11 K15
- 0x9032380A, // 008B SETMBR R12 K28 R10
- 0x88300D0B, // 008C GETMBR R12 R6 K11
- 0x8C301922, // 008D GETMET R12 R12 K34
- 0x5C381600, // 008E MOVE R14 R11
- 0x7C300400, // 008F CALL R12 2
- 0xB8320800, // 0090 GETNGBL R12 K4
- 0x8C301912, // 0091 GETMET R12 R12 K18
- 0x8838090E, // 0092 GETMBR R14 R4 K14
- 0x883C090F, // 0093 GETMBR R15 R4 K15
- 0x7C300600, // 0094 CALL R12 3
- 0x5C241800, // 0095 MOVE R9 R12
- 0xB8320200, // 0096 GETNGBL R12 K1
- 0x8C301902, // 0097 GETMET R12 R12 K2
- 0x8C380713, // 0098 GETMET R14 R3 K19
- 0x58400024, // 0099 LDCONST R16 K36
- 0x60440008, // 009A GETGBL R17 G8
- 0x5C480800, // 009B MOVE R18 R4
- 0x7C440200, // 009C CALL R17 1
- 0x78260001, // 009D JMPF R9 #00A0
- 0x5C481200, // 009E MOVE R18 R9
- 0x70020000, // 009F JMP #00A1
- 0x58480015, // 00A0 LDCONST R18 K21
- 0x7C380800, // 00A1 CALL R14 4
- 0x583C0018, // 00A2 LDCONST R15 K24
- 0x7C300600, // 00A3 CALL R12 3
- 0x70020026, // 00A4 JMP #00CC
- 0x88300910, // 00A5 GETMBR R12 R4 K16
- 0x4C340000, // 00A6 LDNIL R13
- 0x2030180D, // 00A7 NE R12 R12 R13
- 0x78320022, // 00A8 JMPF R12 #00CC
- 0xB8320800, // 00A9 GETNGBL R12 K4
- 0x8C30191E, // 00AA GETMET R12 R12 K30
- 0x7C300200, // 00AB CALL R12 1
- 0x902E200C, // 00AC SETMBR R11 K16 R12
- 0x88301710, // 00AD GETMBR R12 R11 K16
- 0xB8360800, // 00AE GETNGBL R13 K4
- 0x8C341B1F, // 00AF GETMET R13 R13 K31
- 0x7C340200, // 00B0 CALL R13 1
- 0x90321A0D, // 00B1 SETMBR R12 K13 R13
- 0x88301710, // 00B2 GETMBR R12 R11 K16
- 0x8830190D, // 00B3 GETMBR R12 R12 K13
- 0x8834090C, // 00B4 GETMBR R13 R4 K12
- 0x9032180D, // 00B5 SETMBR R12 K12 R13
- 0x88301710, // 00B6 GETMBR R12 R11 K16
- 0x8830190D, // 00B7 GETMBR R12 R12 K13
- 0x8834090E, // 00B8 GETMBR R13 R4 K14
- 0x90321C0D, // 00B9 SETMBR R12 K14 R13
- 0x88301710, // 00BA GETMBR R12 R11 K16
- 0x8830190D, // 00BB GETMBR R12 R12 K13
- 0x8834090F, // 00BC GETMBR R13 R4 K15
- 0x90321E0D, // 00BD SETMBR R12 K15 R13
- 0x88301710, // 00BE GETMBR R12 R11 K16
- 0xB8360800, // 00BF GETNGBL R13 K4
- 0x8C341B20, // 00C0 GETMET R13 R13 K32
- 0x7C340200, // 00C1 CALL R13 1
- 0x9032200D, // 00C2 SETMBR R12 K16 R13
- 0x88301710, // 00C3 GETMBR R12 R11 K16
- 0x88301910, // 00C4 GETMBR R12 R12 K16
- 0x88340910, // 00C5 GETMBR R13 R4 K16
- 0x9032200D, // 00C6 SETMBR R12 K16 R13
- 0x88300D0B, // 00C7 GETMBR R12 R6 K11
- 0x8C301922, // 00C8 GETMET R12 R12 K34
- 0x5C381600, // 00C9 MOVE R14 R11
- 0x7C300400, // 00CA CALL R12 2
- 0x7001FFFF, // 00CB JMP #00CC
- 0x7001FF51, // 00CC JMP #001F
- 0x581C0025, // 00CD LDCONST R7 K37
- 0xAC1C0200, // 00CE CATCH R7 1 0
- 0xB0080000, // 00CF RAISE 2 R0 R0
- 0xB81E0200, // 00D0 GETNGBL R7 K1
- 0x8C1C0F02, // 00D1 GETMET R7 R7 K2
- 0x60240008, // 00D2 GETGBL R9 G8
- 0x88280D0B, // 00D3 GETMBR R10 R6 K11
- 0x7C240200, // 00D4 CALL R9 1
- 0x00264C09, // 00D5 ADD R9 K38 R9
- 0x542A0003, // 00D6 LDINT R10 4
- 0x7C1C0600, // 00D7 CALL R7 3
- 0x601C000C, // 00D8 GETGBL R7 G12
- 0x88200D0B, // 00D9 GETMBR R8 R6 K11
- 0x7C1C0200, // 00DA CALL R7 1
- 0x241C0F27, // 00DB GT R7 R7 K39
- 0x781E0015, // 00DC JMPF R7 #00F3
- 0xB81E0200, // 00DD GETNGBL R7 K1
- 0x8C1C0F02, // 00DE GETMET R7 R7 K2
- 0x60240008, // 00DF GETGBL R9 G8
- 0x5C280C00, // 00E0 MOVE R10 R6
- 0x7C240200, // 00E1 CALL R9 1
- 0x00265009, // 00E2 ADD R9 K40 R9
- 0x542A0003, // 00E3 LDINT R10 4
- 0x7C1C0600, // 00E4 CALL R7 3
- 0xB81E0200, // 00E5 GETNGBL R7 K1
- 0x8C1C0F02, // 00E6 GETMET R7 R7 K2
- 0x60240008, // 00E7 GETGBL R9 G8
- 0x8C280D2A, // 00E8 GETMET R10 R6 K42
- 0x7C280200, // 00E9 CALL R10 1
- 0x7C240200, // 00EA CALL R9 1
- 0x00265209, // 00EB ADD R9 K41 R9
- 0x5828002B, // 00EC LDCONST R10 K43
- 0x7C1C0600, // 00ED CALL R7 3
- 0x8C1C012C, // 00EE GETMET R7 R0 K44
- 0x5C240200, // 00EF MOVE R9 R1
- 0x5C280C00, // 00F0 MOVE R10 R6
- 0x7C1C0600, // 00F1 CALL R7 3
- 0x70020001, // 00F2 JMP #00F5
- 0x501C0000, // 00F3 LDBOOL R7 0 0
- 0x80040E00, // 00F4 RET 1 R7
- 0x501C0200, // 00F5 LDBOOL R7 1 0
- 0x80040E00, // 00F6 RET 1 R7
- 0x80000000, // 00F7 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: remove_sendqueue_by_exchangeid
-********************************************************************/
-be_local_closure(Matter_IM_remove_sendqueue_by_exchangeid, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* 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_const_int(0),
- /* K1 */ be_nested_str_weak(send_queue),
- /* K2 */ be_nested_str_weak(get_exchangeid),
- /* K3 */ be_nested_str_weak(remove),
- /* K4 */ be_const_int(1),
- }),
- be_str_weak(remove_sendqueue_by_exchangeid),
- &be_const_str_solidified,
- ( &(const binstruction[24]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0000, // 0002 JMPF R2 #0004
- 0x80000400, // 0003 RET 0
- 0x58080000, // 0004 LDCONST R2 K0
- 0x600C000C, // 0005 GETGBL R3 G12
- 0x88100101, // 0006 GETMBR R4 R0 K1
- 0x7C0C0200, // 0007 CALL R3 1
- 0x140C0403, // 0008 LT R3 R2 R3
- 0x780E000C, // 0009 JMPF R3 #0017
- 0x880C0101, // 000A GETMBR R3 R0 K1
- 0x940C0602, // 000B GETIDX R3 R3 R2
- 0x8C0C0702, // 000C GETMET R3 R3 K2
- 0x7C0C0200, // 000D CALL R3 1
- 0x1C0C0601, // 000E EQ R3 R3 R1
- 0x780E0004, // 000F JMPF R3 #0015
- 0x880C0101, // 0010 GETMBR R3 R0 K1
- 0x8C0C0703, // 0011 GETMET R3 R3 K3
- 0x5C140400, // 0012 MOVE R5 R2
- 0x7C0C0400, // 0013 CALL R3 2
- 0x70020000, // 0014 JMP #0016
- 0x00080504, // 0015 ADD R2 R2 K4
- 0x7001FFED, // 0016 JMP #0005
- 0x80000000, // 0017 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_write_response
-********************************************************************/
-be_local_closure(Matter_IM_send_write_response, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_WriteResponse),
- }),
- be_str_weak(send_write_response),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: every_250ms
-********************************************************************/
-be_local_closure(Matter_IM_every_250ms, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(subs),
- /* K1 */ be_nested_str_weak(every_250ms),
- }),
- be_str_weak(every_250ms),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x80000000, // 0003 RET 0
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x88140908, // 000F GETMBR R5 R4 K8
+ 0x88180109, // 0010 GETMBR R6 R0 K9
+ 0x8C180D0A, // 0011 GETMET R6 R6 K10
+ 0x7C180200, // 0012 CALL R6 1
+ 0x841C0000, // 0013 CLOSURE R7 P0
+ 0xB8220800, // 0014 GETNGBL R8 K4
+ 0x8C201105, // 0015 GETMET R8 R8 K5
+ 0x5828000B, // 0016 LDCONST R10 K11
+ 0x542E0003, // 0017 LDINT R11 4
+ 0x7C200600, // 0018 CALL R8 3
+ 0xB8220200, // 0019 GETNGBL R8 K1
+ 0x8C20110C, // 001A GETMET R8 R8 K12
+ 0x7C200200, // 001B CALL R8 1
+ 0x8824090D, // 001C GETMBR R9 R4 K13
+ 0x4C280000, // 001D LDNIL R10
+ 0x2024120A, // 001E NE R9 R9 R10
+ 0x78260062, // 001F JMPF R9 #0083
+ 0xB8260200, // 0020 GETNGBL R9 K1
+ 0x8C24130E, // 0021 GETMET R9 R9 K14
+ 0x7C240200, // 0022 CALL R9 1
+ 0x60280012, // 0023 GETGBL R10 G18
+ 0x7C280000, // 0024 CALL R10 0
+ 0x90261E0A, // 0025 SETMBR R9 K15 R10
+ 0x60280010, // 0026 GETGBL R10 G16
+ 0x882C090D, // 0027 GETMBR R11 R4 K13
+ 0x7C280200, // 0028 CALL R10 1
+ 0xA802003D, // 0029 EXBLK 0 #0068
+ 0x5C2C1400, // 002A MOVE R11 R10
+ 0x7C2C0000, // 002B CALL R11 0
+ 0x88301710, // 002C GETMBR R12 R11 K16
+ 0x88341711, // 002D GETMBR R13 R11 K17
+ 0x88381912, // 002E GETMBR R14 R12 K18
+ 0x9022240E, // 002F SETMBR R8 K18 R14
+ 0x88381913, // 0030 GETMBR R14 R12 K19
+ 0x9022260E, // 0031 SETMBR R8 K19 R14
+ 0x88381914, // 0032 GETMBR R14 R12 K20
+ 0x9022280E, // 0033 SETMBR R8 K20 R14
+ 0xB83A0200, // 0034 GETNGBL R14 K1
+ 0x88381D16, // 0035 GETMBR R14 R14 K22
+ 0x90222A0E, // 0036 SETMBR R8 K21 R14
+ 0x88381113, // 0037 GETMBR R14 R8 K19
+ 0x4C3C0000, // 0038 LDNIL R15
+ 0x1C381C0F, // 0039 EQ R14 R14 R15
+ 0x743A0003, // 003A JMPT R14 #003F
+ 0x88381114, // 003B GETMBR R14 R8 K20
+ 0x4C3C0000, // 003C LDNIL R15
+ 0x1C381C0F, // 003D EQ R14 R14 R15
+ 0x783A000A, // 003E JMPF R14 #004A
+ 0xB83A0200, // 003F GETNGBL R14 K1
+ 0x88381D17, // 0040 GETMBR R14 R14 K23
+ 0x90222A0E, // 0041 SETMBR R8 K21 R14
+ 0x5C380E00, // 0042 MOVE R14 R7
+ 0x5C3C1200, // 0043 MOVE R15 R9
+ 0x4C400000, // 0044 LDNIL R16
+ 0x5C441000, // 0045 MOVE R17 R8
+ 0x4C480000, // 0046 LDNIL R18
+ 0x504C0200, // 0047 LDBOOL R19 1 0
+ 0x7C380A00, // 0048 CALL R14 5
+ 0x7001FFDF, // 0049 JMP #002A
+ 0x88381112, // 004A GETMBR R14 R8 K18
+ 0x4C3C0000, // 004B LDNIL R15
+ 0x1C381C0F, // 004C EQ R14 R14 R15
+ 0x783A0012, // 004D JMPF R14 #0061
+ 0xB83A0200, // 004E GETNGBL R14 K1
+ 0x8C381D18, // 004F GETMET R14 R14 K24
+ 0x88401113, // 0050 GETMBR R16 R8 K19
+ 0x88441114, // 0051 GETMBR R17 R8 K20
+ 0x7C380600, // 0052 CALL R14 3
+ 0xB83E0800, // 0053 GETNGBL R15 K4
+ 0x8C3C1F05, // 0054 GETMET R15 R15 K5
+ 0x60440008, // 0055 GETGBL R17 G8
+ 0x5C481000, // 0056 MOVE R18 R8
+ 0x7C440200, // 0057 CALL R17 1
+ 0x00463211, // 0058 ADD R17 K25 R17
+ 0x783A0002, // 0059 JMPF R14 #005D
+ 0x004A340E, // 005A ADD R18 K26 R14
+ 0x0048251B, // 005B ADD R18 R18 K27
+ 0x70020000, // 005C JMP #005E
+ 0x5848001C, // 005D LDCONST R18 K28
+ 0x00442212, // 005E ADD R17 R17 R18
+ 0x5848001D, // 005F LDCONST R18 K29
+ 0x7C3C0600, // 0060 CALL R15 3
+ 0x88380109, // 0061 GETMBR R14 R0 K9
+ 0x8C381D1E, // 0062 GETMET R14 R14 K30
+ 0x5C401000, // 0063 MOVE R16 R8
+ 0x84440001, // 0064 CLOSURE R17 P1
+ 0x7C380600, // 0065 CALL R14 3
+ 0xA0280000, // 0066 CLOSE R10
+ 0x7001FFC1, // 0067 JMP #002A
+ 0x5828001F, // 0068 LDCONST R10 K31
+ 0xAC280200, // 0069 CATCH R10 1 0
+ 0xB0080000, // 006A RAISE 2 R0 R0
+ 0xB82A0800, // 006B GETNGBL R10 K4
+ 0x8C281505, // 006C GETMET R10 R10 K5
+ 0x60300008, // 006D GETGBL R12 G8
+ 0x5C341200, // 006E MOVE R13 R9
+ 0x7C300200, // 006F CALL R12 1
+ 0x0032400C, // 0070 ADD R12 K32 R12
+ 0x54360003, // 0071 LDINT R13 4
+ 0x7C280600, // 0072 CALL R10 3
+ 0xB82A0800, // 0073 GETNGBL R10 K4
+ 0x8C281505, // 0074 GETMET R10 R10 K5
+ 0x60300008, // 0075 GETGBL R12 G8
+ 0x8C341322, // 0076 GETMET R13 R9 K34
+ 0x7C340200, // 0077 CALL R13 1
+ 0x7C300200, // 0078 CALL R12 1
+ 0x0032420C, // 0079 ADD R12 K33 R12
+ 0x58340007, // 007A LDCONST R13 K7
+ 0x7C280600, // 007B CALL R10 3
+ 0x5C280A00, // 007C MOVE R10 R5
+ 0x742A0003, // 007D JMPT R10 #0082
+ 0x8C280123, // 007E GETMET R10 R0 K35
+ 0x5C300200, // 007F MOVE R12 R1
+ 0x5C341200, // 0080 MOVE R13 R9
+ 0x7C280600, // 0081 CALL R10 3
+ 0xA0240000, // 0082 CLOSE R9
+ 0x50240200, // 0083 LDBOOL R9 1 0
+ 0xA0000000, // 0084 CLOSE R0
+ 0x80041200, // 0085 RET 1 R9
})
)
);
@@ -733,6 +563,241 @@ be_local_closure(Matter_IM_subscribe_request, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: send_invoke_response
+********************************************************************/
+be_local_closure(Matter_IM_send_invoke_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_InvokeResponse),
+ }),
+ be_str_weak(send_invoke_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_status_response
+********************************************************************/
+be_local_closure(Matter_IM_process_status_response, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(findsubval),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
+ /* K4 */ be_nested_str_weak(exchange_id),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(SUCCESS),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(log),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_OK),
+ /* K10 */ be_const_int(2),
+ /* K11 */ be_nested_str_weak(status_ok_received),
+ /* K12 */ be_nested_str_weak(format),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_X20_X20_X20_X20ERROR_X20_X3D_X200x_X2502X),
+ /* K14 */ be_nested_str_weak(status_error_received),
+ /* K15 */ be_nested_str_weak(remove_sendqueue_by_exchangeid),
+ }),
+ be_str_weak(process_status_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[40]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0x8C100501, // 0001 GETMET R4 R2 K1
+ 0x58180002, // 0002 LDCONST R6 K2
+ 0x541E00FE, // 0003 LDINT R7 255
+ 0x7C100600, // 0004 CALL R4 3
+ 0x8C140103, // 0005 GETMET R5 R0 K3
+ 0x881C0304, // 0006 GETMBR R7 R1 K4
+ 0x7C140400, // 0007 CALL R5 2
+ 0xB81A0A00, // 0008 GETNGBL R6 K5
+ 0x88180D06, // 0009 GETMBR R6 R6 K6
+ 0x1C180806, // 000A EQ R6 R4 R6
+ 0x781A000A, // 000B JMPF R6 #0017
+ 0xB81A0E00, // 000C GETNGBL R6 K7
+ 0x8C180D08, // 000D GETMET R6 R6 K8
+ 0x58200009, // 000E LDCONST R8 K9
+ 0x5824000A, // 000F LDCONST R9 K10
+ 0x7C180600, // 0010 CALL R6 3
+ 0x78160003, // 0011 JMPF R5 #0016
+ 0x8C180B0B, // 0012 GETMET R6 R5 K11
+ 0x5C200200, // 0013 MOVE R8 R1
+ 0x7C180400, // 0014 CALL R6 2
+ 0x80040C00, // 0015 RET 1 R6
+ 0x7002000E, // 0016 JMP #0026
+ 0xB81A0E00, // 0017 GETNGBL R6 K7
+ 0x8C180D08, // 0018 GETMET R6 R6 K8
+ 0x8C20070C, // 0019 GETMET R8 R3 K12
+ 0x5828000D, // 001A LDCONST R10 K13
+ 0x5C2C0800, // 001B MOVE R11 R4
+ 0x7C200600, // 001C CALL R8 3
+ 0x5824000A, // 001D LDCONST R9 K10
+ 0x7C180600, // 001E CALL R6 3
+ 0x78160005, // 001F JMPF R5 #0026
+ 0x8C180B0E, // 0020 GETMET R6 R5 K14
+ 0x5C200200, // 0021 MOVE R8 R1
+ 0x7C180400, // 0022 CALL R6 2
+ 0x8C18010F, // 0023 GETMET R6 R0 K15
+ 0x88200304, // 0024 GETMBR R8 R1 K4
+ 0x7C180400, // 0025 CALL R6 2
+ 0x50180000, // 0026 LDBOOL R6 0 0
+ 0x80040C00, // 0027 RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_read_request
+********************************************************************/
+be_local_closure(Matter_IM_process_read_request, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(ReadRequestMessage),
+ /* K2 */ be_nested_str_weak(from_TLV),
+ /* K3 */ be_nested_str_weak(attributes_requests),
+ /* K4 */ be_nested_str_weak(_inner_process_read_request),
+ /* K5 */ be_nested_str_weak(session),
+ /* K6 */ be_nested_str_weak(send_report_data),
+ }),
+ be_str_weak(process_read_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[20]) { /* code */
+ 0xB80E0000, // 0000 GETNGBL R3 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0702, // 0003 GETMET R3 R3 K2
+ 0x5C140400, // 0004 MOVE R5 R2
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x88100703, // 0006 GETMBR R4 R3 K3
+ 0x4C140000, // 0007 LDNIL R5
+ 0x20100805, // 0008 NE R4 R4 R5
+ 0x78120007, // 0009 JMPF R4 #0012
+ 0x8C100104, // 000A GETMET R4 R0 K4
+ 0x88180305, // 000B GETMBR R6 R1 K5
+ 0x5C1C0600, // 000C MOVE R7 R3
+ 0x7C100600, // 000D CALL R4 3
+ 0x8C140106, // 000E GETMET R5 R0 K6
+ 0x5C1C0200, // 000F MOVE R7 R1
+ 0x5C200800, // 0010 MOVE R8 R4
+ 0x7C140600, // 0011 CALL R5 3
+ 0x50100200, // 0012 LDBOOL R4 1 0
+ 0x80040800, // 0013 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_write_response
+********************************************************************/
+be_local_closure(Matter_IM_send_write_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_WriteResponse),
+ }),
+ be_str_weak(send_write_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_250ms
+********************************************************************/
+be_local_closure(Matter_IM_every_250ms, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(subs),
+ /* K1 */ be_nested_str_weak(every_250ms),
+ }),
+ be_str_weak(every_250ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: process_incoming
********************************************************************/
@@ -912,6 +977,628 @@ be_local_closure(Matter_IM_process_incoming, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: send_subscribe_update
+********************************************************************/
+be_local_closure(Matter_IM_send_subscribe_update, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[26]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(ReadRequestMessage),
+ /* K4 */ be_nested_str_weak(fabric_filtered),
+ /* K5 */ be_nested_str_weak(attributes_requests),
+ /* K6 */ be_nested_str_weak(updates),
+ /* K7 */ be_nested_str_weak(AttributePathIB),
+ /* K8 */ be_nested_str_weak(endpoint),
+ /* K9 */ be_nested_str_weak(cluster),
+ /* K10 */ be_nested_str_weak(attribute),
+ /* K11 */ be_nested_str_weak(push),
+ /* K12 */ be_nested_str_weak(stop_iteration),
+ /* K13 */ be_const_int(0),
+ /* K14 */ be_nested_str_weak(tasmota),
+ /* K15 */ be_nested_str_weak(log),
+ /* K16 */ be_nested_str_weak(MTR_X3A_X20_X3CSub_data_X20_X20sub_id_X3D),
+ /* K17 */ be_nested_str_weak(subscription_id),
+ /* K18 */ be_const_int(2),
+ /* K19 */ be_nested_str_weak(MTR_X3A_X20_X3CSub_alive_X20sub_id_X3D),
+ /* K20 */ be_nested_str_weak(_inner_process_read_request),
+ /* K21 */ be_nested_str_weak(suppress_response),
+ /* K22 */ be_nested_str_weak(send_queue),
+ /* K23 */ be_nested_str_weak(IM_ReportDataSubscribed),
+ /* K24 */ be_nested_str_weak(__message_handler),
+ /* K25 */ be_nested_str_weak(send_enqueued),
+ }),
+ be_str_weak(send_subscribe_update),
+ &be_const_str_solidified,
+ ( &(const binstruction[80]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0301, // 0001 GETMBR R3 R1 K1
+ 0xB8120400, // 0002 GETNGBL R4 K2
+ 0x8C100903, // 0003 GETMET R4 R4 K3
+ 0x7C100200, // 0004 CALL R4 1
+ 0x50140000, // 0005 LDBOOL R5 0 0
+ 0x90120805, // 0006 SETMBR R4 K4 R5
+ 0x60140012, // 0007 GETGBL R5 G18
+ 0x7C140000, // 0008 CALL R5 0
+ 0x90120A05, // 0009 SETMBR R4 K5 R5
+ 0x60140010, // 000A GETGBL R5 G16
+ 0x88180306, // 000B GETMBR R6 R1 K6
+ 0x7C140200, // 000C CALL R5 1
+ 0xA802000F, // 000D EXBLK 0 #001E
+ 0x5C180A00, // 000E MOVE R6 R5
+ 0x7C180000, // 000F CALL R6 0
+ 0xB81E0400, // 0010 GETNGBL R7 K2
+ 0x8C1C0F07, // 0011 GETMET R7 R7 K7
+ 0x7C1C0200, // 0012 CALL R7 1
+ 0x88200D08, // 0013 GETMBR R8 R6 K8
+ 0x901E1008, // 0014 SETMBR R7 K8 R8
+ 0x88200D09, // 0015 GETMBR R8 R6 K9
+ 0x901E1208, // 0016 SETMBR R7 K9 R8
+ 0x88200D0A, // 0017 GETMBR R8 R6 K10
+ 0x901E1408, // 0018 SETMBR R7 K10 R8
+ 0x88200905, // 0019 GETMBR R8 R4 K5
+ 0x8C20110B, // 001A GETMET R8 R8 K11
+ 0x5C280E00, // 001B MOVE R10 R7
+ 0x7C200400, // 001C CALL R8 2
+ 0x7001FFEF, // 001D JMP #000E
+ 0x5814000C, // 001E LDCONST R5 K12
+ 0xAC140200, // 001F CATCH R5 1 0
+ 0xB0080000, // 0020 RAISE 2 R0 R0
+ 0x6014000C, // 0021 GETGBL R5 G12
+ 0x88180905, // 0022 GETMBR R6 R4 K5
+ 0x7C140200, // 0023 CALL R5 1
+ 0x24140B0D, // 0024 GT R5 R5 K13
+ 0x78160008, // 0025 JMPF R5 #002F
+ 0xB8161C00, // 0026 GETNGBL R5 K14
+ 0x8C140B0F, // 0027 GETMET R5 R5 K15
+ 0x601C0008, // 0028 GETGBL R7 G8
+ 0x88200311, // 0029 GETMBR R8 R1 K17
+ 0x7C1C0200, // 002A CALL R7 1
+ 0x001E2007, // 002B ADD R7 K16 R7
+ 0x58200012, // 002C LDCONST R8 K18
+ 0x7C140600, // 002D CALL R5 3
+ 0x70020007, // 002E JMP #0037
+ 0xB8161C00, // 002F GETNGBL R5 K14
+ 0x8C140B0F, // 0030 GETMET R5 R5 K15
+ 0x601C0008, // 0031 GETGBL R7 G8
+ 0x88200311, // 0032 GETMBR R8 R1 K17
+ 0x7C1C0200, // 0033 CALL R7 1
+ 0x001E2607, // 0034 ADD R7 K19 R7
+ 0x58200012, // 0035 LDCONST R8 K18
+ 0x7C140600, // 0036 CALL R5 3
+ 0x8C140114, // 0037 GETMET R5 R0 K20
+ 0x5C1C0600, // 0038 MOVE R7 R3
+ 0x5C200800, // 0039 MOVE R8 R4
+ 0x7C140600, // 003A CALL R5 3
+ 0x6018000C, // 003B GETGBL R6 G12
+ 0x881C0905, // 003C GETMBR R7 R4 K5
+ 0x7C180200, // 003D CALL R6 1
+ 0x1C180D0D, // 003E EQ R6 R6 K13
+ 0x90162A06, // 003F SETMBR R5 K21 R6
+ 0x88180311, // 0040 GETMBR R6 R1 K17
+ 0x90162206, // 0041 SETMBR R5 K17 R6
+ 0x88180116, // 0042 GETMBR R6 R0 K22
+ 0x8C180D0B, // 0043 GETMET R6 R6 K11
+ 0xB8220400, // 0044 GETNGBL R8 K2
+ 0x8C201117, // 0045 GETMET R8 R8 K23
+ 0x88280718, // 0046 GETMBR R10 R3 K24
+ 0x5C2C0600, // 0047 MOVE R11 R3
+ 0x5C300A00, // 0048 MOVE R12 R5
+ 0x5C340200, // 0049 MOVE R13 R1
+ 0x7C200A00, // 004A CALL R8 5
+ 0x7C180400, // 004B CALL R6 2
+ 0x8C180119, // 004C GETMET R6 R0 K25
+ 0x88200718, // 004D GETMBR R8 R3 K24
+ 0x7C180400, // 004E CALL R6 2
+ 0x80000000, // 004F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_incoming_ack
+********************************************************************/
+be_local_closure(Matter_IM_process_incoming_ack, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
+ /* K1 */ be_nested_str_weak(exchange_id),
+ /* K2 */ be_nested_str_weak(ack_received),
+ }),
+ be_str_weak(process_incoming_ack),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x8C080100, // 0000 GETMET R2 R0 K0
+ 0x88100301, // 0001 GETMBR R4 R1 K1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x780A0003, // 0003 JMPF R2 #0008
+ 0x8C0C0502, // 0004 GETMET R3 R2 K2
+ 0x5C140200, // 0005 MOVE R5 R1
+ 0x7C0C0400, // 0006 CALL R3 2
+ 0x80040600, // 0007 RET 1 R3
+ 0x500C0000, // 0008 LDBOOL R3 0 0
+ 0x80040600, // 0009 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_subscribe_response
+********************************************************************/
+be_local_closure(Matter_IM_send_subscribe_response, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_SubscribeResponse),
+ }),
+ be_str_weak(send_subscribe_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x88100100, // 0000 GETMBR R4 R0 K0
+ 0x8C100901, // 0001 GETMET R4 R4 K1
+ 0xB81A0400, // 0002 GETNGBL R6 K2
+ 0x8C180D03, // 0003 GETMET R6 R6 K3
+ 0x5C200200, // 0004 MOVE R8 R1
+ 0x5C240400, // 0005 MOVE R9 R2
+ 0x5C280600, // 0006 MOVE R10 R3
+ 0x7C180800, // 0007 CALL R6 4
+ 0x7C100400, // 0008 CALL R4 2
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_status
+********************************************************************/
+be_local_closure(Matter_IM_send_status, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_Status),
+ }),
+ be_str_weak(send_status),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_invoke_request
+********************************************************************/
+be_local_closure(Matter_IM_process_invoke_request, /* name */
+ be_nested_proto(
+ 19, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[48]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(MTR_X3A_X20IM_X3Ainvoke_request_X20processing_X20start),
+ /* K4 */ be_nested_str_weak(matter),
+ /* K5 */ be_nested_str_weak(Path),
+ /* K6 */ be_nested_str_weak(InvokeRequestMessage),
+ /* K7 */ be_nested_str_weak(from_TLV),
+ /* K8 */ be_nested_str_weak(invoke_requests),
+ /* K9 */ be_nested_str_weak(InvokeResponseMessage),
+ /* K10 */ be_nested_str_weak(suppress_response),
+ /* K11 */ be_nested_str_weak(invoke_responses),
+ /* K12 */ be_nested_str_weak(endpoint),
+ /* K13 */ be_nested_str_weak(command_path),
+ /* K14 */ be_nested_str_weak(cluster),
+ /* K15 */ be_nested_str_weak(command),
+ /* K16 */ be_nested_str_weak(status),
+ /* K17 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
+ /* K18 */ be_nested_str_weak(get_command_name),
+ /* K19 */ be_nested_str_weak(format),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X25s_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K21 */ be_nested_str_weak(),
+ /* K22 */ be_nested_str_weak(remote_ip),
+ /* K23 */ be_nested_str_weak(remote_port),
+ /* K24 */ be_const_int(2),
+ /* K25 */ be_nested_str_weak(device),
+ /* K26 */ be_nested_str_weak(invoke_request),
+ /* K27 */ be_nested_str_weak(session),
+ /* K28 */ be_nested_str_weak(command_fields),
+ /* K29 */ be_nested_str_weak(InvokeResponseIB),
+ /* K30 */ be_nested_str_weak(SUCCESS),
+ /* K31 */ be_nested_str_weak(CommandStatusIB),
+ /* K32 */ be_nested_str_weak(CommandPathIB),
+ /* K33 */ be_nested_str_weak(StatusIB),
+ /* K34 */ be_nested_str_weak(push),
+ /* K35 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20OK),
+ /* K36 */ be_nested_str_weak(CommandDataIB),
+ /* K37 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X25s_X20_X25s),
+ /* K38 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20Status_X3D0x_X2502X),
+ /* K39 */ be_nested_str_weak(MTR_X3A_X20_Ignore),
+ /* K40 */ be_nested_str_weak(stop_iteration),
+ /* K41 */ be_nested_str_weak(MTR_X3A_X20invoke_responses_X3D),
+ /* K42 */ be_const_int(0),
+ /* K43 */ be_nested_str_weak(MTR_X3A_X20InvokeResponse_X3D),
+ /* K44 */ be_nested_str_weak(MTR_X3A_X20InvokeResponseTLV_X3D),
+ /* K45 */ be_nested_str_weak(to_TLV),
+ /* K46 */ be_const_int(3),
+ /* K47 */ be_nested_str_weak(send_invoke_response),
+ }),
+ be_str_weak(process_invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[271]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x58180003, // 0003 LDCONST R6 K3
+ 0x541E0003, // 0004 LDINT R7 4
+ 0x7C100600, // 0005 CALL R4 3
+ 0xB8120800, // 0006 GETNGBL R4 K4
+ 0x8C100905, // 0007 GETMET R4 R4 K5
+ 0x7C100200, // 0008 CALL R4 1
+ 0xB8160800, // 0009 GETNGBL R5 K4
+ 0x8C140B06, // 000A GETMET R5 R5 K6
+ 0x7C140200, // 000B CALL R5 1
+ 0x8C140B07, // 000C GETMET R5 R5 K7
+ 0x5C1C0400, // 000D MOVE R7 R2
+ 0x7C140400, // 000E CALL R5 2
+ 0x88180B08, // 000F GETMBR R6 R5 K8
+ 0x4C1C0000, // 0010 LDNIL R7
+ 0x20180C07, // 0011 NE R6 R6 R7
+ 0x781A00FA, // 0012 JMPF R6 #010E
+ 0xB81A0800, // 0013 GETNGBL R6 K4
+ 0x8C180D09, // 0014 GETMET R6 R6 K9
+ 0x7C180200, // 0015 CALL R6 1
+ 0x501C0000, // 0016 LDBOOL R7 0 0
+ 0x901A1407, // 0017 SETMBR R6 K10 R7
+ 0x601C0012, // 0018 GETGBL R7 G18
+ 0x7C1C0000, // 0019 CALL R7 0
+ 0x901A1607, // 001A SETMBR R6 K11 R7
+ 0x601C0010, // 001B GETGBL R7 G16
+ 0x88200B08, // 001C GETMBR R8 R5 K8
+ 0x7C1C0200, // 001D CALL R7 1
+ 0xA80200C4, // 001E EXBLK 0 #00E4
+ 0x5C200E00, // 001F MOVE R8 R7
+ 0x7C200000, // 0020 CALL R8 0
+ 0x8824110D, // 0021 GETMBR R9 R8 K13
+ 0x8824130C, // 0022 GETMBR R9 R9 K12
+ 0x90121809, // 0023 SETMBR R4 K12 R9
+ 0x8824110D, // 0024 GETMBR R9 R8 K13
+ 0x8824130E, // 0025 GETMBR R9 R9 K14
+ 0x90121C09, // 0026 SETMBR R4 K14 R9
+ 0x8824110D, // 0027 GETMBR R9 R8 K13
+ 0x8824130F, // 0028 GETMBR R9 R9 K15
+ 0x90121E09, // 0029 SETMBR R4 K15 R9
+ 0xB8260800, // 002A GETNGBL R9 K4
+ 0x88241311, // 002B GETMBR R9 R9 K17
+ 0x90122009, // 002C SETMBR R4 K16 R9
+ 0xB8260800, // 002D GETNGBL R9 K4
+ 0x8C241312, // 002E GETMET R9 R9 K18
+ 0x882C090E, // 002F GETMBR R11 R4 K14
+ 0x8830090F, // 0030 GETMBR R12 R4 K15
+ 0x7C240600, // 0031 CALL R9 3
+ 0xB82A0200, // 0032 GETNGBL R10 K1
+ 0x8C281502, // 0033 GETMET R10 R10 K2
+ 0x8C300713, // 0034 GETMET R12 R3 K19
+ 0x58380014, // 0035 LDCONST R14 K20
+ 0x603C0008, // 0036 GETGBL R15 G8
+ 0x5C400800, // 0037 MOVE R16 R4
+ 0x7C3C0200, // 0038 CALL R15 1
+ 0x78260001, // 0039 JMPF R9 #003C
+ 0x5C401200, // 003A MOVE R16 R9
+ 0x70020000, // 003B JMP #003D
+ 0x58400015, // 003C LDCONST R16 K21
+ 0x88440316, // 003D GETMBR R17 R1 K22
+ 0x88480317, // 003E GETMBR R18 R1 K23
+ 0x7C300C00, // 003F CALL R12 6
+ 0x58340018, // 0040 LDCONST R13 K24
+ 0x7C280600, // 0041 CALL R10 3
+ 0x88280119, // 0042 GETMBR R10 R0 K25
+ 0x8C28151A, // 0043 GETMET R10 R10 K26
+ 0x8830031B, // 0044 GETMBR R12 R1 K27
+ 0x8834111C, // 0045 GETMBR R13 R8 K28
+ 0x5C380800, // 0046 MOVE R14 R4
+ 0x7C280800, // 0047 CALL R10 4
+ 0xB82E0800, // 0048 GETNGBL R11 K4
+ 0x8C2C171D, // 0049 GETMET R11 R11 K29
+ 0x7C2C0200, // 004A CALL R11 1
+ 0x50300200, // 004B LDBOOL R12 1 0
+ 0x1C30140C, // 004C EQ R12 R10 R12
+ 0x74320004, // 004D JMPT R12 #0053
+ 0x88300910, // 004E GETMBR R12 R4 K16
+ 0xB8360800, // 004F GETNGBL R13 K4
+ 0x88341B1E, // 0050 GETMBR R13 R13 K30
+ 0x1C30180D, // 0051 EQ R12 R12 R13
+ 0x78320028, // 0052 JMPF R12 #007C
+ 0xB8320800, // 0053 GETNGBL R12 K4
+ 0x8C30191F, // 0054 GETMET R12 R12 K31
+ 0x7C300200, // 0055 CALL R12 1
+ 0x902E200C, // 0056 SETMBR R11 K16 R12
+ 0x88301710, // 0057 GETMBR R12 R11 K16
+ 0xB8360800, // 0058 GETNGBL R13 K4
+ 0x8C341B20, // 0059 GETMET R13 R13 K32
+ 0x7C340200, // 005A CALL R13 1
+ 0x90321A0D, // 005B SETMBR R12 K13 R13
+ 0x88301710, // 005C GETMBR R12 R11 K16
+ 0x8830190D, // 005D GETMBR R12 R12 K13
+ 0x8834090C, // 005E GETMBR R13 R4 K12
+ 0x9032180D, // 005F SETMBR R12 K12 R13
+ 0x88301710, // 0060 GETMBR R12 R11 K16
+ 0x8830190D, // 0061 GETMBR R12 R12 K13
+ 0x8834090E, // 0062 GETMBR R13 R4 K14
+ 0x90321C0D, // 0063 SETMBR R12 K14 R13
+ 0x88301710, // 0064 GETMBR R12 R11 K16
+ 0x8830190D, // 0065 GETMBR R12 R12 K13
+ 0x8834090F, // 0066 GETMBR R13 R4 K15
+ 0x90321E0D, // 0067 SETMBR R12 K15 R13
+ 0x88301710, // 0068 GETMBR R12 R11 K16
+ 0xB8360800, // 0069 GETNGBL R13 K4
+ 0x8C341B21, // 006A GETMET R13 R13 K33
+ 0x7C340200, // 006B CALL R13 1
+ 0x9032200D, // 006C SETMBR R12 K16 R13
+ 0x88301710, // 006D GETMBR R12 R11 K16
+ 0x88301910, // 006E GETMBR R12 R12 K16
+ 0xB8360800, // 006F GETNGBL R13 K4
+ 0x88341B1E, // 0070 GETMBR R13 R13 K30
+ 0x9032200D, // 0071 SETMBR R12 K16 R13
+ 0x88300D0B, // 0072 GETMBR R12 R6 K11
+ 0x8C301922, // 0073 GETMET R12 R12 K34
+ 0x5C381600, // 0074 MOVE R14 R11
+ 0x7C300400, // 0075 CALL R12 2
+ 0xB8320200, // 0076 GETNGBL R12 K1
+ 0x8C301902, // 0077 GETMET R12 R12 K2
+ 0x58380023, // 0078 LDCONST R14 K35
+ 0x583C0018, // 0079 LDCONST R15 K24
+ 0x7C300600, // 007A CALL R12 3
+ 0x70020066, // 007B JMP #00E3
+ 0x4C300000, // 007C LDNIL R12
+ 0x2030140C, // 007D NE R12 R10 R12
+ 0x7832002F, // 007E JMPF R12 #00AF
+ 0xB8320800, // 007F GETNGBL R12 K4
+ 0x8C301924, // 0080 GETMET R12 R12 K36
+ 0x7C300200, // 0081 CALL R12 1
+ 0x902E1E0C, // 0082 SETMBR R11 K15 R12
+ 0x8830170F, // 0083 GETMBR R12 R11 K15
+ 0xB8360800, // 0084 GETNGBL R13 K4
+ 0x8C341B20, // 0085 GETMET R13 R13 K32
+ 0x7C340200, // 0086 CALL R13 1
+ 0x90321A0D, // 0087 SETMBR R12 K13 R13
+ 0x8830170F, // 0088 GETMBR R12 R11 K15
+ 0x8830190D, // 0089 GETMBR R12 R12 K13
+ 0x8834090C, // 008A GETMBR R13 R4 K12
+ 0x9032180D, // 008B SETMBR R12 K12 R13
+ 0x8830170F, // 008C GETMBR R12 R11 K15
+ 0x8830190D, // 008D GETMBR R12 R12 K13
+ 0x8834090E, // 008E GETMBR R13 R4 K14
+ 0x90321C0D, // 008F SETMBR R12 K14 R13
+ 0x8830170F, // 0090 GETMBR R12 R11 K15
+ 0x8830190D, // 0091 GETMBR R12 R12 K13
+ 0x8834090F, // 0092 GETMBR R13 R4 K15
+ 0x90321E0D, // 0093 SETMBR R12 K15 R13
+ 0x8830170F, // 0094 GETMBR R12 R11 K15
+ 0x9032380A, // 0095 SETMBR R12 K28 R10
+ 0x88300D0B, // 0096 GETMBR R12 R6 K11
+ 0x8C301922, // 0097 GETMET R12 R12 K34
+ 0x5C381600, // 0098 MOVE R14 R11
+ 0x7C300400, // 0099 CALL R12 2
+ 0xB8320800, // 009A GETNGBL R12 K4
+ 0x8C301912, // 009B GETMET R12 R12 K18
+ 0x8838090E, // 009C GETMBR R14 R4 K14
+ 0x883C090F, // 009D GETMBR R15 R4 K15
+ 0x7C300600, // 009E CALL R12 3
+ 0x5C241800, // 009F MOVE R9 R12
+ 0xB8320200, // 00A0 GETNGBL R12 K1
+ 0x8C301902, // 00A1 GETMET R12 R12 K2
+ 0x8C380713, // 00A2 GETMET R14 R3 K19
+ 0x58400025, // 00A3 LDCONST R16 K37
+ 0x60440008, // 00A4 GETGBL R17 G8
+ 0x5C480800, // 00A5 MOVE R18 R4
+ 0x7C440200, // 00A6 CALL R17 1
+ 0x78260001, // 00A7 JMPF R9 #00AA
+ 0x5C481200, // 00A8 MOVE R18 R9
+ 0x70020000, // 00A9 JMP #00AB
+ 0x58480015, // 00AA LDCONST R18 K21
+ 0x7C380800, // 00AB CALL R14 4
+ 0x583C0018, // 00AC LDCONST R15 K24
+ 0x7C300600, // 00AD CALL R12 3
+ 0x70020033, // 00AE JMP #00E3
+ 0x88300910, // 00AF GETMBR R12 R4 K16
+ 0x4C340000, // 00B0 LDNIL R13
+ 0x2030180D, // 00B1 NE R12 R12 R13
+ 0x7832002A, // 00B2 JMPF R12 #00DE
+ 0xB8320800, // 00B3 GETNGBL R12 K4
+ 0x8C30191F, // 00B4 GETMET R12 R12 K31
+ 0x7C300200, // 00B5 CALL R12 1
+ 0x902E200C, // 00B6 SETMBR R11 K16 R12
+ 0x88301710, // 00B7 GETMBR R12 R11 K16
+ 0xB8360800, // 00B8 GETNGBL R13 K4
+ 0x8C341B20, // 00B9 GETMET R13 R13 K32
+ 0x7C340200, // 00BA CALL R13 1
+ 0x90321A0D, // 00BB SETMBR R12 K13 R13
+ 0x88301710, // 00BC GETMBR R12 R11 K16
+ 0x8830190D, // 00BD GETMBR R12 R12 K13
+ 0x8834090C, // 00BE GETMBR R13 R4 K12
+ 0x9032180D, // 00BF SETMBR R12 K12 R13
+ 0x88301710, // 00C0 GETMBR R12 R11 K16
+ 0x8830190D, // 00C1 GETMBR R12 R12 K13
+ 0x8834090E, // 00C2 GETMBR R13 R4 K14
+ 0x90321C0D, // 00C3 SETMBR R12 K14 R13
+ 0x88301710, // 00C4 GETMBR R12 R11 K16
+ 0x8830190D, // 00C5 GETMBR R12 R12 K13
+ 0x8834090F, // 00C6 GETMBR R13 R4 K15
+ 0x90321E0D, // 00C7 SETMBR R12 K15 R13
+ 0x88301710, // 00C8 GETMBR R12 R11 K16
+ 0xB8360800, // 00C9 GETNGBL R13 K4
+ 0x8C341B21, // 00CA GETMET R13 R13 K33
+ 0x7C340200, // 00CB CALL R13 1
+ 0x9032200D, // 00CC SETMBR R12 K16 R13
+ 0x88301710, // 00CD GETMBR R12 R11 K16
+ 0x88301910, // 00CE GETMBR R12 R12 K16
+ 0x88340910, // 00CF GETMBR R13 R4 K16
+ 0x9032200D, // 00D0 SETMBR R12 K16 R13
+ 0x88300D0B, // 00D1 GETMBR R12 R6 K11
+ 0x8C301922, // 00D2 GETMET R12 R12 K34
+ 0x5C381600, // 00D3 MOVE R14 R11
+ 0x7C300400, // 00D4 CALL R12 2
+ 0xB8320200, // 00D5 GETNGBL R12 K1
+ 0x8C301902, // 00D6 GETMET R12 R12 K2
+ 0x8C380713, // 00D7 GETMET R14 R3 K19
+ 0x58400026, // 00D8 LDCONST R16 K38
+ 0x88440910, // 00D9 GETMBR R17 R4 K16
+ 0x7C380600, // 00DA CALL R14 3
+ 0x583C0018, // 00DB LDCONST R15 K24
+ 0x7C300600, // 00DC CALL R12 3
+ 0x70020004, // 00DD JMP #00E3
+ 0xB8320200, // 00DE GETNGBL R12 K1
+ 0x8C301902, // 00DF GETMET R12 R12 K2
+ 0x58380027, // 00E0 LDCONST R14 K39
+ 0x583C0018, // 00E1 LDCONST R15 K24
+ 0x7C300600, // 00E2 CALL R12 3
+ 0x7001FF3A, // 00E3 JMP #001F
+ 0x581C0028, // 00E4 LDCONST R7 K40
+ 0xAC1C0200, // 00E5 CATCH R7 1 0
+ 0xB0080000, // 00E6 RAISE 2 R0 R0
+ 0xB81E0200, // 00E7 GETNGBL R7 K1
+ 0x8C1C0F02, // 00E8 GETMET R7 R7 K2
+ 0x60240008, // 00E9 GETGBL R9 G8
+ 0x88280D0B, // 00EA GETMBR R10 R6 K11
+ 0x7C240200, // 00EB CALL R9 1
+ 0x00265209, // 00EC ADD R9 K41 R9
+ 0x542A0003, // 00ED LDINT R10 4
+ 0x7C1C0600, // 00EE CALL R7 3
+ 0x601C000C, // 00EF GETGBL R7 G12
+ 0x88200D0B, // 00F0 GETMBR R8 R6 K11
+ 0x7C1C0200, // 00F1 CALL R7 1
+ 0x241C0F2A, // 00F2 GT R7 R7 K42
+ 0x781E0015, // 00F3 JMPF R7 #010A
+ 0xB81E0200, // 00F4 GETNGBL R7 K1
+ 0x8C1C0F02, // 00F5 GETMET R7 R7 K2
+ 0x60240008, // 00F6 GETGBL R9 G8
+ 0x5C280C00, // 00F7 MOVE R10 R6
+ 0x7C240200, // 00F8 CALL R9 1
+ 0x00265609, // 00F9 ADD R9 K43 R9
+ 0x542A0003, // 00FA LDINT R10 4
+ 0x7C1C0600, // 00FB CALL R7 3
+ 0xB81E0200, // 00FC GETNGBL R7 K1
+ 0x8C1C0F02, // 00FD GETMET R7 R7 K2
+ 0x60240008, // 00FE GETGBL R9 G8
+ 0x8C280D2D, // 00FF GETMET R10 R6 K45
+ 0x7C280200, // 0100 CALL R10 1
+ 0x7C240200, // 0101 CALL R9 1
+ 0x00265809, // 0102 ADD R9 K44 R9
+ 0x5828002E, // 0103 LDCONST R10 K46
+ 0x7C1C0600, // 0104 CALL R7 3
+ 0x8C1C012F, // 0105 GETMET R7 R0 K47
+ 0x5C240200, // 0106 MOVE R9 R1
+ 0x5C280C00, // 0107 MOVE R10 R6
+ 0x7C1C0600, // 0108 CALL R7 3
+ 0x70020001, // 0109 JMP #010C
+ 0x501C0000, // 010A LDBOOL R7 0 0
+ 0x80040E00, // 010B RET 1 R7
+ 0x501C0200, // 010C LDBOOL R7 1 0
+ 0x80040E00, // 010D RET 1 R7
+ 0x80000000, // 010E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_report_data
+********************************************************************/
+be_local_closure(Matter_IM_send_report_data, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_ReportData),
+ }),
+ be_str_weak(send_report_data),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: init
********************************************************************/
@@ -952,9 +1639,9 @@ be_local_closure(Matter_IM_init, /* name */
/********************************************************************
-** Solidified function: report_data
+** Solidified function: process_write_response
********************************************************************/
-be_local_closure(Matter_IM_report_data, /* name */
+be_local_closure(Matter_IM_process_write_response, /* name */
be_nested_proto(
9, /* nstack */
3, /* argc */
@@ -967,14 +1654,63 @@ be_local_closure(Matter_IM_report_data, /* name */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(ReportDataMessage),
+ /* K2 */ be_nested_str_weak(WriteResponseMessage),
/* K3 */ be_nested_str_weak(from_TLV),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20ReportDataMessage_X3D),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteResponseMessage_X3D),
/* K7 */ be_const_int(2),
}),
- be_str_weak(report_data),
+ be_str_weak(process_write_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x50140000, // 000F LDBOOL R5 0 0
+ 0x80040A00, // 0010 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: subscribe_response
+********************************************************************/
+be_local_closure(Matter_IM_subscribe_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(SubscribeResponseMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeResponsetMessage_X3D),
+ /* K7 */ be_const_int(2),
+ }),
+ be_str_weak(subscribe_response),
&be_const_str_solidified,
( &(const binstruction[17]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
@@ -1382,813 +2118,6 @@ be_local_closure(Matter_IM__inner_process_read_request, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: send_enqueued
-********************************************************************/
-be_local_closure(Matter_IM_send_enqueued, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(send_queue),
- /* K2 */ be_nested_str_weak(ready),
- /* K3 */ be_nested_str_weak(send),
- /* K4 */ be_nested_str_weak(remove),
- /* K5 */ be_const_int(1),
- }),
- be_str_weak(send_enqueued),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x58080000, // 0000 LDCONST R2 K0
- 0x600C000C, // 0001 GETGBL R3 G12
- 0x88100101, // 0002 GETMBR R4 R0 K1
- 0x7C0C0200, // 0003 CALL R3 1
- 0x140C0403, // 0004 LT R3 R2 R3
- 0x780E0011, // 0005 JMPF R3 #0018
- 0x880C0101, // 0006 GETMBR R3 R0 K1
- 0x940C0602, // 0007 GETIDX R3 R3 R2
- 0x88100702, // 0008 GETMBR R4 R3 K2
- 0x7812000B, // 0009 JMPF R4 #0016
- 0x8C100703, // 000A GETMET R4 R3 K3
- 0x5C180200, // 000B MOVE R6 R1
- 0x7C100400, // 000C CALL R4 2
- 0x78120005, // 000D JMPF R4 #0014
- 0x88140101, // 000E GETMBR R5 R0 K1
- 0x8C140B04, // 000F GETMET R5 R5 K4
- 0x5C1C0400, // 0010 MOVE R7 R2
- 0x7C140400, // 0011 CALL R5 2
- 0x04080505, // 0012 SUB R2 R2 K5
- 0x70020001, // 0013 JMP #0016
- 0x50140000, // 0014 LDBOOL R5 0 0
- 0x900E0405, // 0015 SETMBR R3 K2 R5
- 0x00080505, // 0016 ADD R2 R2 K5
- 0x7001FFE8, // 0017 JMP #0001
- 0x80000000, // 0018 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_invoke_response
-********************************************************************/
-be_local_closure(Matter_IM_send_invoke_response, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_InvokeResponse),
- }),
- be_str_weak(send_invoke_response),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_subscribe_update
-********************************************************************/
-be_local_closure(Matter_IM_send_subscribe_update, /* name */
- be_nested_proto(
- 14, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[26]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(session),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(ReadRequestMessage),
- /* K4 */ be_nested_str_weak(fabric_filtered),
- /* K5 */ be_nested_str_weak(attributes_requests),
- /* K6 */ be_nested_str_weak(updates),
- /* K7 */ be_nested_str_weak(AttributePathIB),
- /* K8 */ be_nested_str_weak(endpoint),
- /* K9 */ be_nested_str_weak(cluster),
- /* K10 */ be_nested_str_weak(attribute),
- /* K11 */ be_nested_str_weak(push),
- /* K12 */ be_nested_str_weak(stop_iteration),
- /* K13 */ be_const_int(0),
- /* K14 */ be_nested_str_weak(tasmota),
- /* K15 */ be_nested_str_weak(log),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20_X3CSub_data_X20_X20sub_id_X3D),
- /* K17 */ be_nested_str_weak(subscription_id),
- /* K18 */ be_const_int(2),
- /* K19 */ be_nested_str_weak(MTR_X3A_X20_X3CSub_alive_X20sub_id_X3D),
- /* K20 */ be_nested_str_weak(_inner_process_read_request),
- /* K21 */ be_nested_str_weak(suppress_response),
- /* K22 */ be_nested_str_weak(send_queue),
- /* K23 */ be_nested_str_weak(IM_ReportDataSubscribed),
- /* K24 */ be_nested_str_weak(__message_handler),
- /* K25 */ be_nested_str_weak(send_enqueued),
- }),
- be_str_weak(send_subscribe_update),
- &be_const_str_solidified,
- ( &(const binstruction[80]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0x880C0301, // 0001 GETMBR R3 R1 K1
- 0xB8120400, // 0002 GETNGBL R4 K2
- 0x8C100903, // 0003 GETMET R4 R4 K3
- 0x7C100200, // 0004 CALL R4 1
- 0x50140000, // 0005 LDBOOL R5 0 0
- 0x90120805, // 0006 SETMBR R4 K4 R5
- 0x60140012, // 0007 GETGBL R5 G18
- 0x7C140000, // 0008 CALL R5 0
- 0x90120A05, // 0009 SETMBR R4 K5 R5
- 0x60140010, // 000A GETGBL R5 G16
- 0x88180306, // 000B GETMBR R6 R1 K6
- 0x7C140200, // 000C CALL R5 1
- 0xA802000F, // 000D EXBLK 0 #001E
- 0x5C180A00, // 000E MOVE R6 R5
- 0x7C180000, // 000F CALL R6 0
- 0xB81E0400, // 0010 GETNGBL R7 K2
- 0x8C1C0F07, // 0011 GETMET R7 R7 K7
- 0x7C1C0200, // 0012 CALL R7 1
- 0x88200D08, // 0013 GETMBR R8 R6 K8
- 0x901E1008, // 0014 SETMBR R7 K8 R8
- 0x88200D09, // 0015 GETMBR R8 R6 K9
- 0x901E1208, // 0016 SETMBR R7 K9 R8
- 0x88200D0A, // 0017 GETMBR R8 R6 K10
- 0x901E1408, // 0018 SETMBR R7 K10 R8
- 0x88200905, // 0019 GETMBR R8 R4 K5
- 0x8C20110B, // 001A GETMET R8 R8 K11
- 0x5C280E00, // 001B MOVE R10 R7
- 0x7C200400, // 001C CALL R8 2
- 0x7001FFEF, // 001D JMP #000E
- 0x5814000C, // 001E LDCONST R5 K12
- 0xAC140200, // 001F CATCH R5 1 0
- 0xB0080000, // 0020 RAISE 2 R0 R0
- 0x6014000C, // 0021 GETGBL R5 G12
- 0x88180905, // 0022 GETMBR R6 R4 K5
- 0x7C140200, // 0023 CALL R5 1
- 0x24140B0D, // 0024 GT R5 R5 K13
- 0x78160008, // 0025 JMPF R5 #002F
- 0xB8161C00, // 0026 GETNGBL R5 K14
- 0x8C140B0F, // 0027 GETMET R5 R5 K15
- 0x601C0008, // 0028 GETGBL R7 G8
- 0x88200311, // 0029 GETMBR R8 R1 K17
- 0x7C1C0200, // 002A CALL R7 1
- 0x001E2007, // 002B ADD R7 K16 R7
- 0x58200012, // 002C LDCONST R8 K18
- 0x7C140600, // 002D CALL R5 3
- 0x70020007, // 002E JMP #0037
- 0xB8161C00, // 002F GETNGBL R5 K14
- 0x8C140B0F, // 0030 GETMET R5 R5 K15
- 0x601C0008, // 0031 GETGBL R7 G8
- 0x88200311, // 0032 GETMBR R8 R1 K17
- 0x7C1C0200, // 0033 CALL R7 1
- 0x001E2607, // 0034 ADD R7 K19 R7
- 0x58200012, // 0035 LDCONST R8 K18
- 0x7C140600, // 0036 CALL R5 3
- 0x8C140114, // 0037 GETMET R5 R0 K20
- 0x5C1C0600, // 0038 MOVE R7 R3
- 0x5C200800, // 0039 MOVE R8 R4
- 0x7C140600, // 003A CALL R5 3
- 0x6018000C, // 003B GETGBL R6 G12
- 0x881C0905, // 003C GETMBR R7 R4 K5
- 0x7C180200, // 003D CALL R6 1
- 0x1C180D0D, // 003E EQ R6 R6 K13
- 0x90162A06, // 003F SETMBR R5 K21 R6
- 0x88180311, // 0040 GETMBR R6 R1 K17
- 0x90162206, // 0041 SETMBR R5 K17 R6
- 0x88180116, // 0042 GETMBR R6 R0 K22
- 0x8C180D0B, // 0043 GETMET R6 R6 K11
- 0xB8220400, // 0044 GETNGBL R8 K2
- 0x8C201117, // 0045 GETMET R8 R8 K23
- 0x88280718, // 0046 GETMBR R10 R3 K24
- 0x5C2C0600, // 0047 MOVE R11 R3
- 0x5C300A00, // 0048 MOVE R12 R5
- 0x5C340200, // 0049 MOVE R13 R1
- 0x7C200A00, // 004A CALL R8 5
- 0x7C180400, // 004B CALL R6 2
- 0x8C180119, // 004C GETMET R6 R0 K25
- 0x88200718, // 004D GETMBR R8 R3 K24
- 0x7C180400, // 004E CALL R6 2
- 0x80000000, // 004F RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: every_second
-********************************************************************/
-be_local_closure(Matter_IM_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_status
-********************************************************************/
-be_local_closure(Matter_IM_send_status, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_Status),
- }),
- be_str_weak(send_status),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_report_data
-********************************************************************/
-be_local_closure(Matter_IM_send_report_data, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_ReportData),
- }),
- be_str_weak(send_report_data),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0xB8160400, // 0002 GETNGBL R5 K2
- 0x8C140B03, // 0003 GETMET R5 R5 K3
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C140600, // 0006 CALL R5 3
- 0x7C0C0400, // 0007 CALL R3 2
- 0x80000000, // 0008 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_write_request
-********************************************************************/
-be_local_closure(Matter_IM_process_write_request, /* name */
- be_nested_proto(
- 20, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 2]) {
- be_nested_proto(
- 19, /* nstack */
- 5, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 1),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[26]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(get_attribute_name),
- /* K3 */ be_nested_str_weak(cluster),
- /* K4 */ be_nested_str_weak(attribute),
- /* K5 */ be_nested_str_weak(_X20_X28),
- /* K6 */ be_nested_str_weak(_X29),
- /* K7 */ be_nested_str_weak(),
- /* K8 */ be_nested_str_weak(status),
- /* K9 */ be_nested_str_weak(UNSUPPORTED_WRITE),
- /* K10 */ be_nested_str_weak(write_attribute),
- /* K11 */ be_nested_str_weak(session),
- /* K12 */ be_nested_str_weak(SUCCESS),
- /* K13 */ be_nested_str_weak(AttributeStatusIB),
- /* K14 */ be_nested_str_weak(path),
- /* K15 */ be_nested_str_weak(AttributePathIB),
- /* K16 */ be_nested_str_weak(StatusIB),
- /* K17 */ be_nested_str_weak(endpoint),
- /* K18 */ be_nested_str_weak(write_responses),
- /* K19 */ be_nested_str_weak(push),
- /* K20 */ be_nested_str_weak(tasmota),
- /* K21 */ be_nested_str_weak(log),
- /* K22 */ be_nested_str_weak(format),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
- /* K24 */ be_const_int(2),
- /* K25 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20IGNORED),
- }),
- be_str_weak(write_single_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[97]) { /* code */
- 0xA4160000, // 0000 IMPORT R5 K0
- 0xB81A0200, // 0001 GETNGBL R6 K1
- 0x8C180D02, // 0002 GETMET R6 R6 K2
- 0x88200503, // 0003 GETMBR R8 R2 K3
- 0x88240504, // 0004 GETMBR R9 R2 K4
- 0x7C180600, // 0005 CALL R6 3
- 0x781A0002, // 0006 JMPF R6 #000A
- 0x001E0A06, // 0007 ADD R7 K5 R6
- 0x001C0F06, // 0008 ADD R7 R7 K6
- 0x70020000, // 0009 JMP #000B
- 0x581C0007, // 000A LDCONST R7 K7
- 0x5C180E00, // 000B MOVE R6 R7
- 0xB81E0200, // 000C GETNGBL R7 K1
- 0x881C0F09, // 000D GETMBR R7 R7 K9
- 0x900A1007, // 000E SETMBR R2 K8 R7
- 0x4C1C0000, // 000F LDNIL R7
- 0x201C0207, // 0010 NE R7 R1 R7
- 0x781E0006, // 0011 JMPF R7 #0019
- 0x8C1C030A, // 0012 GETMET R7 R1 K10
- 0x68240000, // 0013 GETUPV R9 U0
- 0x8824130B, // 0014 GETMBR R9 R9 K11
- 0x5C280400, // 0015 MOVE R10 R2
- 0x5C2C0600, // 0016 MOVE R11 R3
- 0x7C1C0800, // 0017 CALL R7 4
- 0x70020000, // 0018 JMP #001A
- 0x4C1C0000, // 0019 LDNIL R7
- 0x781E0002, // 001A JMPF R7 #001E
- 0xB8220200, // 001B GETNGBL R8 K1
- 0x8820110C, // 001C GETMBR R8 R8 K12
- 0x900A1008, // 001D SETMBR R2 K8 R8
- 0x88200508, // 001E GETMBR R8 R2 K8
- 0x4C240000, // 001F LDNIL R9
- 0x20201009, // 0020 NE R8 R8 R9
- 0x78220032, // 0021 JMPF R8 #0055
- 0x78120030, // 0022 JMPF R4 #0054
- 0xB8220200, // 0023 GETNGBL R8 K1
- 0x8C20110D, // 0024 GETMET R8 R8 K13
- 0x7C200200, // 0025 CALL R8 1
- 0xB8260200, // 0026 GETNGBL R9 K1
- 0x8C24130F, // 0027 GETMET R9 R9 K15
- 0x7C240200, // 0028 CALL R9 1
- 0x90221C09, // 0029 SETMBR R8 K14 R9
- 0xB8260200, // 002A GETNGBL R9 K1
- 0x8C241310, // 002B GETMET R9 R9 K16
- 0x7C240200, // 002C CALL R9 1
- 0x90221009, // 002D SETMBR R8 K8 R9
- 0x8824110E, // 002E GETMBR R9 R8 K14
- 0x88280511, // 002F GETMBR R10 R2 K17
- 0x9026220A, // 0030 SETMBR R9 K17 R10
- 0x8824110E, // 0031 GETMBR R9 R8 K14
- 0x88280503, // 0032 GETMBR R10 R2 K3
- 0x9026060A, // 0033 SETMBR R9 K3 R10
- 0x8824110E, // 0034 GETMBR R9 R8 K14
- 0x88280504, // 0035 GETMBR R10 R2 K4
- 0x9026080A, // 0036 SETMBR R9 K4 R10
- 0x88241108, // 0037 GETMBR R9 R8 K8
- 0x88280508, // 0038 GETMBR R10 R2 K8
- 0x9026100A, // 0039 SETMBR R9 K8 R10
- 0x88240112, // 003A GETMBR R9 R0 K18
- 0x8C241313, // 003B GETMET R9 R9 K19
- 0x5C2C1000, // 003C MOVE R11 R8
- 0x7C240400, // 003D CALL R9 2
- 0xB8262800, // 003E GETNGBL R9 K20
- 0x8C241315, // 003F GETMET R9 R9 K21
- 0x8C2C0B16, // 0040 GETMET R11 R5 K22
- 0x58340017, // 0041 LDCONST R13 K23
- 0x60380008, // 0042 GETGBL R14 G8
- 0x5C3C0400, // 0043 MOVE R15 R2
- 0x7C380200, // 0044 CALL R14 1
- 0x5C3C0C00, // 0045 MOVE R15 R6
- 0x88400508, // 0046 GETMBR R16 R2 K8
- 0x88440508, // 0047 GETMBR R17 R2 K8
- 0xB84A0200, // 0048 GETNGBL R18 K1
- 0x8848250C, // 0049 GETMBR R18 R18 K12
- 0x1C442212, // 004A EQ R17 R17 R18
- 0x78460001, // 004B JMPF R17 #004E
- 0x5844000C, // 004C LDCONST R17 K12
- 0x70020000, // 004D JMP #004F
- 0x58440007, // 004E LDCONST R17 K7
- 0x7C2C0C00, // 004F CALL R11 6
- 0x58300018, // 0050 LDCONST R12 K24
- 0x7C240600, // 0051 CALL R9 3
- 0x50240200, // 0052 LDBOOL R9 1 0
- 0x80041200, // 0053 RET 1 R9
- 0x7002000A, // 0054 JMP #0060
- 0xB8222800, // 0055 GETNGBL R8 K20
- 0x8C201115, // 0056 GETMET R8 R8 K21
- 0x8C280B16, // 0057 GETMET R10 R5 K22
- 0x58300019, // 0058 LDCONST R12 K25
- 0x60340008, // 0059 GETGBL R13 G8
- 0x5C380400, // 005A MOVE R14 R2
- 0x7C340200, // 005B CALL R13 1
- 0x5C380C00, // 005C MOVE R14 R6
- 0x7C280800, // 005D CALL R10 4
- 0x582C0018, // 005E LDCONST R11 K24
- 0x7C200600, // 005F CALL R8 3
- 0x80000000, // 0060 RET 0
- })
- ),
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 3]) { /* upvals */
- be_local_const_upval(1, 7),
- be_local_const_upval(1, 9),
- be_local_const_upval(1, 13),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(_X3Clambda_X3E),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x680C0000, // 0000 GETUPV R3 U0
- 0x68100001, // 0001 GETUPV R4 U1
- 0x5C140000, // 0002 MOVE R5 R0
- 0x5C180200, // 0003 MOVE R6 R1
- 0x681C0002, // 0004 GETUPV R7 U2
- 0x5C200400, // 0005 MOVE R8 R2
- 0x7C0C0A00, // 0006 CALL R3 5
- 0x80040600, // 0007 RET 1 R3
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[36]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(WriteRequestMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteRequestMessage_X3D),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(suppress_response),
- /* K9 */ be_nested_str_weak(device),
- /* K10 */ be_nested_str_weak(get_active_endpoints),
- /* K11 */ be_nested_str_weak(MTR_X3A_X20IM_X3Awrite_request_X20processing_X20start),
- /* K12 */ be_nested_str_weak(Path),
- /* K13 */ be_nested_str_weak(write_requests),
- /* K14 */ be_nested_str_weak(WriteResponseMessage),
- /* K15 */ be_nested_str_weak(write_responses),
- /* K16 */ be_nested_str_weak(path),
- /* K17 */ be_nested_str_weak(data),
- /* K18 */ be_nested_str_weak(endpoint),
- /* K19 */ be_nested_str_weak(cluster),
- /* K20 */ be_nested_str_weak(attribute),
- /* K21 */ be_nested_str_weak(status),
- /* K22 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
- /* K23 */ be_nested_str_weak(INVALID_ACTION),
- /* K24 */ be_nested_str_weak(get_attribute_name),
- /* K25 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20),
- /* K26 */ be_nested_str_weak(_X20_X28),
- /* K27 */ be_nested_str_weak(_X29),
- /* K28 */ be_nested_str_weak(),
- /* K29 */ be_const_int(2),
- /* K30 */ be_nested_str_weak(process_attribute_expansion),
- /* K31 */ be_nested_str_weak(stop_iteration),
- /* K32 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessage_X3D),
- /* K33 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessageTLV_X3D),
- /* K34 */ be_nested_str_weak(to_TLV),
- /* K35 */ be_nested_str_weak(send_write_response),
- }),
- be_str_weak(process_write_request),
- &be_const_str_solidified,
- ( &(const binstruction[134]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x88140908, // 000F GETMBR R5 R4 K8
- 0x88180109, // 0010 GETMBR R6 R0 K9
- 0x8C180D0A, // 0011 GETMET R6 R6 K10
- 0x7C180200, // 0012 CALL R6 1
- 0x841C0000, // 0013 CLOSURE R7 P0
- 0xB8220800, // 0014 GETNGBL R8 K4
- 0x8C201105, // 0015 GETMET R8 R8 K5
- 0x5828000B, // 0016 LDCONST R10 K11
- 0x542E0003, // 0017 LDINT R11 4
- 0x7C200600, // 0018 CALL R8 3
- 0xB8220200, // 0019 GETNGBL R8 K1
- 0x8C20110C, // 001A GETMET R8 R8 K12
- 0x7C200200, // 001B CALL R8 1
- 0x8824090D, // 001C GETMBR R9 R4 K13
- 0x4C280000, // 001D LDNIL R10
- 0x2024120A, // 001E NE R9 R9 R10
- 0x78260062, // 001F JMPF R9 #0083
- 0xB8260200, // 0020 GETNGBL R9 K1
- 0x8C24130E, // 0021 GETMET R9 R9 K14
- 0x7C240200, // 0022 CALL R9 1
- 0x60280012, // 0023 GETGBL R10 G18
- 0x7C280000, // 0024 CALL R10 0
- 0x90261E0A, // 0025 SETMBR R9 K15 R10
- 0x60280010, // 0026 GETGBL R10 G16
- 0x882C090D, // 0027 GETMBR R11 R4 K13
- 0x7C280200, // 0028 CALL R10 1
- 0xA802003D, // 0029 EXBLK 0 #0068
- 0x5C2C1400, // 002A MOVE R11 R10
- 0x7C2C0000, // 002B CALL R11 0
- 0x88301710, // 002C GETMBR R12 R11 K16
- 0x88341711, // 002D GETMBR R13 R11 K17
- 0x88381912, // 002E GETMBR R14 R12 K18
- 0x9022240E, // 002F SETMBR R8 K18 R14
- 0x88381913, // 0030 GETMBR R14 R12 K19
- 0x9022260E, // 0031 SETMBR R8 K19 R14
- 0x88381914, // 0032 GETMBR R14 R12 K20
- 0x9022280E, // 0033 SETMBR R8 K20 R14
- 0xB83A0200, // 0034 GETNGBL R14 K1
- 0x88381D16, // 0035 GETMBR R14 R14 K22
- 0x90222A0E, // 0036 SETMBR R8 K21 R14
- 0x88381113, // 0037 GETMBR R14 R8 K19
- 0x4C3C0000, // 0038 LDNIL R15
- 0x1C381C0F, // 0039 EQ R14 R14 R15
- 0x743A0003, // 003A JMPT R14 #003F
- 0x88381114, // 003B GETMBR R14 R8 K20
- 0x4C3C0000, // 003C LDNIL R15
- 0x1C381C0F, // 003D EQ R14 R14 R15
- 0x783A000A, // 003E JMPF R14 #004A
- 0xB83A0200, // 003F GETNGBL R14 K1
- 0x88381D17, // 0040 GETMBR R14 R14 K23
- 0x90222A0E, // 0041 SETMBR R8 K21 R14
- 0x5C380E00, // 0042 MOVE R14 R7
- 0x5C3C1200, // 0043 MOVE R15 R9
- 0x4C400000, // 0044 LDNIL R16
- 0x5C441000, // 0045 MOVE R17 R8
- 0x4C480000, // 0046 LDNIL R18
- 0x504C0200, // 0047 LDBOOL R19 1 0
- 0x7C380A00, // 0048 CALL R14 5
- 0x7001FFDF, // 0049 JMP #002A
- 0x88381112, // 004A GETMBR R14 R8 K18
- 0x4C3C0000, // 004B LDNIL R15
- 0x1C381C0F, // 004C EQ R14 R14 R15
- 0x783A0012, // 004D JMPF R14 #0061
- 0xB83A0200, // 004E GETNGBL R14 K1
- 0x8C381D18, // 004F GETMET R14 R14 K24
- 0x88401113, // 0050 GETMBR R16 R8 K19
- 0x88441114, // 0051 GETMBR R17 R8 K20
- 0x7C380600, // 0052 CALL R14 3
- 0xB83E0800, // 0053 GETNGBL R15 K4
- 0x8C3C1F05, // 0054 GETMET R15 R15 K5
- 0x60440008, // 0055 GETGBL R17 G8
- 0x5C481000, // 0056 MOVE R18 R8
- 0x7C440200, // 0057 CALL R17 1
- 0x00463211, // 0058 ADD R17 K25 R17
- 0x783A0002, // 0059 JMPF R14 #005D
- 0x004A340E, // 005A ADD R18 K26 R14
- 0x0048251B, // 005B ADD R18 R18 K27
- 0x70020000, // 005C JMP #005E
- 0x5848001C, // 005D LDCONST R18 K28
- 0x00442212, // 005E ADD R17 R17 R18
- 0x5848001D, // 005F LDCONST R18 K29
- 0x7C3C0600, // 0060 CALL R15 3
- 0x88380109, // 0061 GETMBR R14 R0 K9
- 0x8C381D1E, // 0062 GETMET R14 R14 K30
- 0x5C401000, // 0063 MOVE R16 R8
- 0x84440001, // 0064 CLOSURE R17 P1
- 0x7C380600, // 0065 CALL R14 3
- 0xA0280000, // 0066 CLOSE R10
- 0x7001FFC1, // 0067 JMP #002A
- 0x5828001F, // 0068 LDCONST R10 K31
- 0xAC280200, // 0069 CATCH R10 1 0
- 0xB0080000, // 006A RAISE 2 R0 R0
- 0xB82A0800, // 006B GETNGBL R10 K4
- 0x8C281505, // 006C GETMET R10 R10 K5
- 0x60300008, // 006D GETGBL R12 G8
- 0x5C341200, // 006E MOVE R13 R9
- 0x7C300200, // 006F CALL R12 1
- 0x0032400C, // 0070 ADD R12 K32 R12
- 0x54360003, // 0071 LDINT R13 4
- 0x7C280600, // 0072 CALL R10 3
- 0xB82A0800, // 0073 GETNGBL R10 K4
- 0x8C281505, // 0074 GETMET R10 R10 K5
- 0x60300008, // 0075 GETGBL R12 G8
- 0x8C341322, // 0076 GETMET R13 R9 K34
- 0x7C340200, // 0077 CALL R13 1
- 0x7C300200, // 0078 CALL R12 1
- 0x0032420C, // 0079 ADD R12 K33 R12
- 0x58340007, // 007A LDCONST R13 K7
- 0x7C280600, // 007B CALL R10 3
- 0x5C280A00, // 007C MOVE R10 R5
- 0x742A0003, // 007D JMPT R10 #0082
- 0x8C280123, // 007E GETMET R10 R0 K35
- 0x5C300200, // 007F MOVE R12 R1
- 0x5C341200, // 0080 MOVE R13 R9
- 0x7C280600, // 0081 CALL R10 3
- 0xA0240000, // 0082 CLOSE R9
- 0x50240200, // 0083 LDBOOL R9 1 0
- 0xA0000000, // 0084 CLOSE R0
- 0x80041200, // 0085 RET 1 R9
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_incoming_ack
-********************************************************************/
-be_local_closure(Matter_IM_process_incoming_ack, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
- /* K1 */ be_nested_str_weak(exchange_id),
- /* K2 */ be_nested_str_weak(ack_received),
- }),
- be_str_weak(process_incoming_ack),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x8C080100, // 0000 GETMET R2 R0 K0
- 0x88100301, // 0001 GETMBR R4 R1 K1
- 0x7C080400, // 0002 CALL R2 2
- 0x780A0003, // 0003 JMPF R2 #0008
- 0x8C0C0502, // 0004 GETMET R3 R2 K2
- 0x5C140200, // 0005 MOVE R5 R1
- 0x7C0C0400, // 0006 CALL R3 2
- 0x80040600, // 0007 RET 1 R3
- 0x500C0000, // 0008 LDBOOL R3 0 0
- 0x80040600, // 0009 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send_subscribe_response
-********************************************************************/
-be_local_closure(Matter_IM_send_subscribe_response, /* name */
- be_nested_proto(
- 11, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(send_queue),
- /* K1 */ be_nested_str_weak(push),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(IM_SubscribeResponse),
- }),
- be_str_weak(send_subscribe_response),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x88100100, // 0000 GETMBR R4 R0 K0
- 0x8C100901, // 0001 GETMET R4 R4 K1
- 0xB81A0400, // 0002 GETNGBL R6 K2
- 0x8C180D03, // 0003 GETMET R6 R6 K3
- 0x5C200200, // 0004 MOVE R8 R1
- 0x5C240400, // 0005 MOVE R9 R2
- 0x5C280600, // 0006 MOVE R10 R3
- 0x7C180800, // 0007 CALL R6 4
- 0x7C100400, // 0008 CALL R4 2
- 0x80000000, // 0009 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: subscribe_response
-********************************************************************/
-be_local_closure(Matter_IM_subscribe_response, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(SubscribeResponseMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeResponsetMessage_X3D),
- /* K7 */ be_const_int(2),
- }),
- be_str_weak(subscribe_response),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: find_sendqueue_by_exchangeid
********************************************************************/
@@ -2239,57 +2168,6 @@ be_local_closure(Matter_IM_find_sendqueue_by_exchangeid, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: process_read_request
-********************************************************************/
-be_local_closure(Matter_IM_process_read_request, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(matter),
- /* K1 */ be_nested_str_weak(ReadRequestMessage),
- /* K2 */ be_nested_str_weak(from_TLV),
- /* K3 */ be_nested_str_weak(attributes_requests),
- /* K4 */ be_nested_str_weak(_inner_process_read_request),
- /* K5 */ be_nested_str_weak(session),
- /* K6 */ be_nested_str_weak(send_report_data),
- }),
- be_str_weak(process_read_request),
- &be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
- 0xB80E0000, // 0000 GETNGBL R3 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C0702, // 0003 GETMET R3 R3 K2
- 0x5C140400, // 0004 MOVE R5 R2
- 0x7C0C0400, // 0005 CALL R3 2
- 0x88100703, // 0006 GETMBR R4 R3 K3
- 0x4C140000, // 0007 LDNIL R5
- 0x20100805, // 0008 NE R4 R4 R5
- 0x78120007, // 0009 JMPF R4 #0012
- 0x8C100104, // 000A GETMET R4 R0 K4
- 0x88180305, // 000B GETMBR R6 R1 K5
- 0x5C1C0600, // 000C MOVE R7 R3
- 0x7C100600, // 000D CALL R4 3
- 0x8C140106, // 000E GETMET R5 R0 K6
- 0x5C1C0200, // 000F MOVE R7 R1
- 0x5C200800, // 0010 MOVE R8 R4
- 0x7C140600, // 0011 CALL R5 3
- 0x50100200, // 0012 LDBOOL R4 1 0
- 0x80040800, // 0013 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: process_invoke_response
********************************************************************/
@@ -2339,42 +2217,251 @@ be_local_closure(Matter_IM_process_invoke_response, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: send_enqueued
+********************************************************************/
+be_local_closure(Matter_IM_send_enqueued, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(ready),
+ /* K3 */ be_nested_str_weak(send),
+ /* K4 */ be_nested_str_weak(remove),
+ /* K5 */ be_const_int(1),
+ }),
+ be_str_weak(send_enqueued),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E0011, // 0005 JMPF R3 #0018
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x88100702, // 0008 GETMBR R4 R3 K2
+ 0x7812000B, // 0009 JMPF R4 #0016
+ 0x8C100703, // 000A GETMET R4 R3 K3
+ 0x5C180200, // 000B MOVE R6 R1
+ 0x7C100400, // 000C CALL R4 2
+ 0x78120005, // 000D JMPF R4 #0014
+ 0x88140101, // 000E GETMBR R5 R0 K1
+ 0x8C140B04, // 000F GETMET R5 R5 K4
+ 0x5C1C0400, // 0010 MOVE R7 R2
+ 0x7C140400, // 0011 CALL R5 2
+ 0x04080505, // 0012 SUB R2 R2 K5
+ 0x70020001, // 0013 JMP #0016
+ 0x50140000, // 0014 LDBOOL R5 0 0
+ 0x900E0405, // 0015 SETMBR R3 K2 R5
+ 0x00080505, // 0016 ADD R2 R2 K5
+ 0x7001FFE8, // 0017 JMP #0001
+ 0x80000000, // 0018 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_timed_request
+********************************************************************/
+be_local_closure(Matter_IM_process_timed_request, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TimedRequestMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20TimedRequestMessage_X3D),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(format),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20TimedRequest_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K10 */ be_nested_str_weak(timeout),
+ /* K11 */ be_nested_str_weak(remote_ip),
+ /* K12 */ be_nested_str_weak(remote_port),
+ /* K13 */ be_const_int(2),
+ /* K14 */ be_nested_str_weak(send_status),
+ /* K15 */ be_nested_str_weak(SUCCESS),
+ }),
+ be_str_weak(process_timed_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0xB8160800, // 000F GETNGBL R5 K4
+ 0x8C140B05, // 0010 GETMET R5 R5 K5
+ 0x8C1C0708, // 0011 GETMET R7 R3 K8
+ 0x58240009, // 0012 LDCONST R9 K9
+ 0x8828090A, // 0013 GETMBR R10 R4 K10
+ 0x882C030B, // 0014 GETMBR R11 R1 K11
+ 0x8830030C, // 0015 GETMBR R12 R1 K12
+ 0x7C1C0A00, // 0016 CALL R7 5
+ 0x5820000D, // 0017 LDCONST R8 K13
+ 0x7C140600, // 0018 CALL R5 3
+ 0x8C14010E, // 0019 GETMET R5 R0 K14
+ 0x5C1C0200, // 001A MOVE R7 R1
+ 0xB8220200, // 001B GETNGBL R8 K1
+ 0x8820110F, // 001C GETMBR R8 R8 K15
+ 0x7C140600, // 001D CALL R5 3
+ 0x50140200, // 001E LDBOOL R5 1 0
+ 0x80040A00, // 001F RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_IM_every_second, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(expire_sendqueue),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_sendqueue_by_exchangeid
+********************************************************************/
+be_local_closure(Matter_IM_remove_sendqueue_by_exchangeid, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* 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_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(get_exchangeid),
+ /* K3 */ be_nested_str_weak(remove),
+ /* K4 */ be_const_int(1),
+ }),
+ be_str_weak(remove_sendqueue_by_exchangeid),
+ &be_const_str_solidified,
+ ( &(const binstruction[24]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0000, // 0002 JMPF R2 #0004
+ 0x80000400, // 0003 RET 0
+ 0x58080000, // 0004 LDCONST R2 K0
+ 0x600C000C, // 0005 GETGBL R3 G12
+ 0x88100101, // 0006 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0007 CALL R3 1
+ 0x140C0403, // 0008 LT R3 R2 R3
+ 0x780E000C, // 0009 JMPF R3 #0017
+ 0x880C0101, // 000A GETMBR R3 R0 K1
+ 0x940C0602, // 000B GETIDX R3 R3 R2
+ 0x8C0C0702, // 000C GETMET R3 R3 K2
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x1C0C0601, // 000E EQ R3 R3 R1
+ 0x780E0004, // 000F JMPF R3 #0015
+ 0x880C0101, // 0010 GETMBR R3 R0 K1
+ 0x8C0C0703, // 0011 GETMET R3 R3 K3
+ 0x5C140400, // 0012 MOVE R5 R2
+ 0x7C0C0400, // 0013 CALL R3 2
+ 0x70020000, // 0014 JMP #0016
+ 0x00080504, // 0015 ADD R2 R2 K4
+ 0x7001FFED, // 0016 JMP #0005
+ 0x80000000, // 0017 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified class: Matter_IM
********************************************************************/
be_local_class(Matter_IM,
3,
NULL,
- be_nested_map(28,
+ be_nested_map(29,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(process_timed_request, -1), be_const_closure(Matter_IM_process_timed_request_closure) },
- { be_const_key_weak(process_status_response, -1), be_const_closure(Matter_IM_process_status_response_closure) },
- { be_const_key_weak(process_invoke_response, -1), be_const_closure(Matter_IM_process_invoke_response_closure) },
+ { be_const_key_weak(expire_sendqueue, -1), be_const_closure(Matter_IM_expire_sendqueue_closure) },
+ { be_const_key_weak(device, -1), be_const_var(0) },
{ be_const_key_weak(send_queue, -1), be_const_var(2) },
- { be_const_key_weak(process_write_response, -1), be_const_closure(Matter_IM_process_write_response_closure) },
- { be_const_key_weak(process_invoke_request, 9), be_const_closure(Matter_IM_process_invoke_request_closure) },
- { be_const_key_weak(remove_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_remove_sendqueue_by_exchangeid_closure) },
- { be_const_key_weak(send_write_response, -1), be_const_closure(Matter_IM_send_write_response_closure) },
- { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_IM_every_250ms_closure) },
- { be_const_key_weak(subscribe_request, -1), be_const_closure(Matter_IM_subscribe_request_closure) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_IM_init_closure) },
- { be_const_key_weak(find_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_find_sendqueue_by_exchangeid_closure) },
{ be_const_key_weak(report_data, -1), be_const_closure(Matter_IM_report_data_closure) },
- { be_const_key_weak(send_report_data, 24), be_const_closure(Matter_IM_send_report_data_closure) },
- { be_const_key_weak(send_enqueued, -1), be_const_closure(Matter_IM_send_enqueued_closure) },
- { be_const_key_weak(send_subscribe_response, -1), be_const_closure(Matter_IM_send_subscribe_response_closure) },
- { be_const_key_weak(send_subscribe_update, -1), be_const_closure(Matter_IM_send_subscribe_update_closure) },
- { be_const_key_weak(every_second, 11), be_const_closure(Matter_IM_every_second_closure) },
{ be_const_key_weak(send_status, -1), be_const_closure(Matter_IM_send_status_closure) },
- { be_const_key_weak(process_incoming, 13), be_const_closure(Matter_IM_process_incoming_closure) },
- { be_const_key_weak(process_write_request, -1), be_const_closure(Matter_IM_process_write_request_closure) },
- { be_const_key_weak(process_incoming_ack, -1), be_const_closure(Matter_IM_process_incoming_ack_closure) },
- { be_const_key_weak(send_invoke_response, 15), be_const_closure(Matter_IM_send_invoke_response_closure) },
- { be_const_key_weak(subscribe_response, -1), be_const_closure(Matter_IM_subscribe_response_closure) },
- { be_const_key_weak(_inner_process_read_request, 10), be_const_closure(Matter_IM__inner_process_read_request_closure) },
+ { be_const_key_weak(subscribe_request, 23), be_const_closure(Matter_IM_subscribe_request_closure) },
+ { be_const_key_weak(send_invoke_response, -1), be_const_closure(Matter_IM_send_invoke_response_closure) },
+ { be_const_key_weak(process_status_response, -1), be_const_closure(Matter_IM_process_status_response_closure) },
{ be_const_key_weak(process_read_request, -1), be_const_closure(Matter_IM_process_read_request_closure) },
{ be_const_key_weak(subs, -1), be_const_var(1) },
- { be_const_key_weak(device, 2), be_const_var(0) },
+ { be_const_key_weak(every_250ms, 25), be_const_closure(Matter_IM_every_250ms_closure) },
+ { be_const_key_weak(process_incoming, -1), be_const_closure(Matter_IM_process_incoming_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_IM_every_second_closure) },
+ { be_const_key_weak(process_invoke_request, -1), be_const_closure(Matter_IM_process_invoke_request_closure) },
+ { be_const_key_weak(send_subscribe_response, -1), be_const_closure(Matter_IM_send_subscribe_response_closure) },
+ { be_const_key_weak(process_incoming_ack, 4), be_const_closure(Matter_IM_process_incoming_ack_closure) },
+ { be_const_key_weak(send_write_response, 13), be_const_closure(Matter_IM_send_write_response_closure) },
+ { be_const_key_weak(send_enqueued, 18), be_const_closure(Matter_IM_send_enqueued_closure) },
+ { be_const_key_weak(process_invoke_response, -1), be_const_closure(Matter_IM_process_invoke_response_closure) },
+ { be_const_key_weak(find_sendqueue_by_exchangeid, 22), be_const_closure(Matter_IM_find_sendqueue_by_exchangeid_closure) },
+ { be_const_key_weak(send_subscribe_update, 19), be_const_closure(Matter_IM_send_subscribe_update_closure) },
+ { be_const_key_weak(send_report_data, -1), be_const_closure(Matter_IM_send_report_data_closure) },
+ { be_const_key_weak(subscribe_response, 21), be_const_closure(Matter_IM_subscribe_response_closure) },
+ { be_const_key_weak(process_write_response, -1), be_const_closure(Matter_IM_process_write_response_closure) },
+ { be_const_key_weak(process_write_request, 17), be_const_closure(Matter_IM_process_write_request_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_init_closure) },
+ { be_const_key_weak(_inner_process_read_request, 12), be_const_closure(Matter_IM__inner_process_read_request_closure) },
+ { be_const_key_weak(process_timed_request, 9), be_const_closure(Matter_IM_process_timed_request_closure) },
+ { be_const_key_weak(remove_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_remove_sendqueue_by_exchangeid_closure) },
})),
be_str_weak(Matter_IM)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
index b7b9dedb1..18cb0891c 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
@@ -148,41 +148,47 @@ void be_load_Matter_Path_class(bvm *vm) {
extern const bclass be_class_Matter_IM_Message;
/********************************************************************
-** Solidified function: status_ok_received
+** Solidified function: status_error_received
********************************************************************/
-be_local_closure(Matter_IM_Message_status_ok_received, /* name */
+be_local_closure(Matter_IM_Message_status_error_received, /* name */
be_nested_proto(
- 7, /* nstack */
+ 2, /* nstack */
2, /* 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(resp),
- /* K1 */ be_nested_str_weak(build_response),
- /* K2 */ be_nested_str_weak(opcode),
- /* K3 */ be_nested_str_weak(x_flag_r),
- /* K4 */ be_nested_str_weak(ready),
- }),
- be_str_weak(status_ok_received),
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(status_error_received),
&be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
- 0x78060007, // 0000 JMPF R1 #0009
- 0x8C080301, // 0001 GETMET R2 R1 K1
- 0x88100100, // 0002 GETMBR R4 R0 K0
- 0x88100902, // 0003 GETMBR R4 R4 K2
- 0x88140100, // 0004 GETMBR R5 R0 K0
- 0x88140B03, // 0005 GETMBR R5 R5 K3
- 0x88180100, // 0006 GETMBR R6 R0 K0
- 0x7C080800, // 0007 CALL R2 4
- 0x90020002, // 0008 SETMBR R0 K0 R2
- 0x50080200, // 0009 LDBOOL R2 1 0
- 0x90020802, // 000A SETMBR R0 K4 R2
- 0x50080200, // 000B LDBOOL R2 1 0
- 0x80040400, // 000C RET 1 R2
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: reached_timeout
+********************************************************************/
+be_local_closure(Matter_IM_Message_reached_timeout, /* 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(reached_timeout),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
})
)
);
@@ -270,6 +276,94 @@ be_local_closure(Matter_IM_Message_send, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: ack_received
+********************************************************************/
+be_local_closure(Matter_IM_Message_ack_received, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(expiration),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(millis),
+ /* K3 */ be_nested_str_weak(MSG_TIMEOUT),
+ }),
+ be_str_weak(ack_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB80A0200, // 0000 GETNGBL R2 K1
+ 0x8C080502, // 0001 GETMET R2 R2 K2
+ 0x7C080200, // 0002 CALL R2 1
+ 0x880C0103, // 0003 GETMBR R3 R0 K3
+ 0x00080403, // 0004 ADD R2 R2 R3
+ 0x90020002, // 0005 SETMBR R0 K0 R2
+ 0x50080000, // 0006 LDBOOL R2 0 0
+ 0x80040400, // 0007 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_ok_received
+********************************************************************/
+be_local_closure(Matter_IM_Message_status_ok_received, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(expiration),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(millis),
+ /* K3 */ be_nested_str_weak(MSG_TIMEOUT),
+ /* K4 */ be_nested_str_weak(resp),
+ /* K5 */ be_nested_str_weak(build_response),
+ /* K6 */ be_nested_str_weak(opcode),
+ /* K7 */ be_nested_str_weak(x_flag_r),
+ /* K8 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(status_ok_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0xB80A0200, // 0000 GETNGBL R2 K1
+ 0x8C080502, // 0001 GETMET R2 R2 K2
+ 0x7C080200, // 0002 CALL R2 1
+ 0x880C0103, // 0003 GETMBR R3 R0 K3
+ 0x00080403, // 0004 ADD R2 R2 R3
+ 0x90020002, // 0005 SETMBR R0 K0 R2
+ 0x78060007, // 0006 JMPF R1 #000F
+ 0x8C080305, // 0007 GETMET R2 R1 K5
+ 0x88100104, // 0008 GETMBR R4 R0 K4
+ 0x88100906, // 0009 GETMBR R4 R4 K6
+ 0x88140104, // 000A GETMBR R5 R0 K4
+ 0x88140B07, // 000B GETMBR R5 R5 K7
+ 0x88180104, // 000C GETMBR R6 R0 K4
+ 0x7C080800, // 000D CALL R2 4
+ 0x90020802, // 000E SETMBR R0 K4 R2
+ 0x50080200, // 000F LDBOOL R2 1 0
+ 0x90021002, // 0010 SETMBR R0 K8 R2
+ 0x50080200, // 0011 LDBOOL R2 1 0
+ 0x80040400, // 0012 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: init
********************************************************************/
@@ -283,14 +377,18 @@ be_local_closure(Matter_IM_Message_init, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
+ ( &(const bvalue[ 7]) { /* constants */
/* K0 */ be_nested_str_weak(resp),
/* K1 */ be_nested_str_weak(build_response),
/* K2 */ be_nested_str_weak(ready),
+ /* K3 */ be_nested_str_weak(expiration),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(millis),
+ /* K6 */ be_nested_str_weak(MSG_TIMEOUT),
}),
be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
+ ( &(const binstruction[14]) { /* code */
0x8C100301, // 0000 GETMET R4 R1 K1
0x5C180400, // 0001 MOVE R6 R2
0x5C1C0600, // 0002 MOVE R7 R3
@@ -298,56 +396,13 @@ be_local_closure(Matter_IM_Message_init, /* name */
0x90020004, // 0004 SETMBR R0 K0 R4
0x50100200, // 0005 LDBOOL R4 1 0
0x90020404, // 0006 SETMBR R0 K2 R4
- 0x80000000, // 0007 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: status_error_received
-********************************************************************/
-be_local_closure(Matter_IM_Message_status_error_received, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* 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(status_error_received),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: ack_received
-********************************************************************/
-be_local_closure(Matter_IM_Message_ack_received, /* name */
- be_nested_proto(
- 3, /* nstack */
- 2, /* 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(ack_received),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x50080000, // 0000 LDBOOL R2 0 0
- 0x80040400, // 0001 RET 1 R2
+ 0xB8120800, // 0007 GETNGBL R4 K4
+ 0x8C100905, // 0008 GETMET R4 R4 K5
+ 0x7C100200, // 0009 CALL R4 1
+ 0x88140106, // 000A GETMBR R5 R0 K6
+ 0x00100805, // 000B ADD R4 R4 R5
+ 0x90020604, // 000C SETMBR R0 K3 R4
+ 0x80000000, // 000D RET 0
})
)
);
@@ -358,19 +413,22 @@ be_local_closure(Matter_IM_Message_ack_received, /* name */
** Solidified class: Matter_IM_Message
********************************************************************/
be_local_class(Matter_IM_Message,
- 3,
+ 4,
NULL,
- be_nested_map(9,
+ be_nested_map(12,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(data, -1), be_const_var(2) },
- { be_const_key_weak(get_exchangeid, -1), be_const_closure(Matter_IM_Message_get_exchangeid_closure) },
+ { be_const_key_weak(expiration, 9), be_const_var(0) },
+ { be_const_key_weak(data, -1), be_const_var(3) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_IM_Message_init_closure) },
- { be_const_key_weak(resp, -1), be_const_var(0) },
- { be_const_key_weak(send, 0), be_const_closure(Matter_IM_Message_send_closure) },
- { be_const_key_weak(ready, 2), be_const_var(1) },
- { be_const_key_weak(status_ok_received, 5), be_const_closure(Matter_IM_Message_status_ok_received_closure) },
- { be_const_key_weak(status_error_received, -1), be_const_closure(Matter_IM_Message_status_error_received_closure) },
+ { be_const_key_weak(resp, 2), be_const_var(1) },
+ { be_const_key_weak(status_error_received, 6), be_const_closure(Matter_IM_Message_status_error_received_closure) },
+ { be_const_key_weak(reached_timeout, -1), be_const_closure(Matter_IM_Message_reached_timeout_closure) },
+ { be_const_key_weak(get_exchangeid, -1), be_const_closure(Matter_IM_Message_get_exchangeid_closure) },
+ { be_const_key_weak(send, -1), be_const_closure(Matter_IM_Message_send_closure) },
{ be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_Message_ack_received_closure) },
+ { be_const_key_weak(status_ok_received, 11), be_const_closure(Matter_IM_Message_status_ok_received_closure) },
+ { be_const_key_weak(MSG_TIMEOUT, -1), be_const_int(10000) },
+ { be_const_key_weak(ready, -1), be_const_var(2) },
})),
be_str_weak(Matter_IM_Message)
);
@@ -578,6 +636,45 @@ void be_load_Matter_IM_WriteResponse_class(bvm *vm) {
extern const bclass be_class_Matter_IM_ReportData;
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_ReportData_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(data),
+ /* K2 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x541A0004, // 0005 LDINT R6 5
+ 0x501C0200, // 0006 LDBOOL R7 1 0
+ 0x7C0C0800, // 0007 CALL R3 4
+ 0x90020202, // 0008 SETMBR R0 K1 R2
+ 0x500C0200, // 0009 LDBOOL R3 1 0
+ 0x90020403, // 000A SETMBR R0 K2 R3
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: send
********************************************************************/
@@ -591,7 +688,7 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[31]) { /* constants */
+ ( &(const bvalue[28]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(resp),
/* K2 */ be_nested_str_weak(data),
@@ -620,13 +717,10 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
/* K25 */ be_nested_str_weak(remote_port),
/* K26 */ be_nested_str_weak(message_counter),
/* K27 */ be_nested_str_weak(MTR_X3A_X20to_be_sent_later_X20TLV),
- /* K28 */ be_nested_str_weak(expiration),
- /* K29 */ be_nested_str_weak(millis),
- /* K30 */ be_nested_str_weak(MSG_TIMEOUT),
}),
be_str_weak(send),
&be_const_str_solidified,
- ( &(const binstruction[139]) { /* code */
+ ( &(const binstruction[133]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x880C0101, // 0001 GETMBR R3 R0 K1
0x88100102, // 0002 GETMBR R4 R0 K2
@@ -744,7 +838,7 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0x5C281000, // 0072 MOVE R10 R8
0x7C240200, // 0073 CALL R9 1
0x24241304, // 0074 GT R9 R9 K4
- 0x78260011, // 0075 JMPF R9 #0088
+ 0x7826000B, // 0075 JMPF R9 #0082
0x90120A08, // 0076 SETMBR R4 K5 R8
0xB8261400, // 0077 GETNGBL R9 K10
0x8C24130B, // 0078 GETMET R9 R9 K11
@@ -754,67 +848,12 @@ be_local_closure(Matter_IM_ReportData_send, /* name */
0x002E360B, // 007C ADD R11 K27 R11
0x58300011, // 007D LDCONST R12 K17
0x7C240600, // 007E CALL R9 3
- 0xB8261400, // 007F GETNGBL R9 K10
- 0x8C24131D, // 0080 GETMET R9 R9 K29
- 0x7C240200, // 0081 CALL R9 1
- 0x8828011E, // 0082 GETMBR R10 R0 K30
- 0x0024120A, // 0083 ADD R9 R9 R10
- 0x90023809, // 0084 SETMBR R0 K28 R9
- 0x50240000, // 0085 LDBOOL R9 0 0
- 0x80041200, // 0086 RET 1 R9
- 0x70020001, // 0087 JMP #008A
- 0x50240200, // 0088 LDBOOL R9 1 0
- 0x80041200, // 0089 RET 1 R9
- 0x80000000, // 008A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_IM_ReportData_init, /* name */
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(init),
- /* K1 */ be_nested_str_weak(data),
- /* K2 */ be_nested_str_weak(ready),
- /* K3 */ be_nested_str_weak(expiration),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(millis),
- /* K6 */ be_nested_str_weak(MSG_TIMEOUT),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x600C0003, // 0000 GETGBL R3 G3
- 0x5C100000, // 0001 MOVE R4 R0
- 0x7C0C0200, // 0002 CALL R3 1
- 0x8C0C0700, // 0003 GETMET R3 R3 K0
- 0x5C140200, // 0004 MOVE R5 R1
- 0x541A0004, // 0005 LDINT R6 5
- 0x501C0200, // 0006 LDBOOL R7 1 0
- 0x7C0C0800, // 0007 CALL R3 4
- 0x90020202, // 0008 SETMBR R0 K1 R2
- 0x500C0200, // 0009 LDBOOL R3 1 0
- 0x90020403, // 000A SETMBR R0 K2 R3
- 0xB80E0800, // 000B GETNGBL R3 K4
- 0x8C0C0705, // 000C GETMET R3 R3 K5
- 0x7C0C0200, // 000D CALL R3 1
- 0x88100106, // 000E GETMBR R4 R0 K6
- 0x000C0604, // 000F ADD R3 R3 R4
- 0x90020603, // 0010 SETMBR R0 K3 R3
- 0x80000000, // 0011 RET 0
+ 0x50240000, // 007F LDBOOL R9 0 0
+ 0x80041200, // 0080 RET 1 R9
+ 0x70020001, // 0081 JMP #0084
+ 0x50240200, // 0082 LDBOOL R9 1 0
+ 0x80041200, // 0083 RET 1 R9
+ 0x80000000, // 0084 RET 0
})
)
);
@@ -826,15 +865,13 @@ be_local_closure(Matter_IM_ReportData_init, /* name */
********************************************************************/
extern const bclass be_class_Matter_IM_Message;
be_local_class(Matter_IM_ReportData,
- 1,
+ 0,
&be_class_Matter_IM_Message,
- be_nested_map(5,
+ be_nested_map(3,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(expiration, 2), be_const_var(0) },
- { be_const_key_weak(send, -1), be_const_closure(Matter_IM_ReportData_send_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_IM_ReportData_init_closure) },
- { be_const_key_weak(MAX_MESSAGE, 4), be_const_int(1200) },
- { be_const_key_weak(MSG_TIMEOUT, -1), be_const_int(10000) },
+ { be_const_key_weak(send, -1), be_const_closure(Matter_IM_ReportData_send_closure) },
+ { be_const_key_weak(MAX_MESSAGE, -1), be_const_int(1200) },
})),
be_str_weak(Matter_IM_ReportData)
);
@@ -848,6 +885,212 @@ void be_load_Matter_IM_ReportData_class(bvm *vm) {
extern const bclass be_class_Matter_IM_ReportDataSubscribed;
+/********************************************************************
+** Solidified function: ack_received
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_ack_received, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(ack_received),
+ /* K1 */ be_nested_str_weak(report_data_phase),
+ /* K2 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(ack_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[16]) { /* code */
+ 0x60080003, // 0000 GETGBL R2 G3
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080500, // 0003 GETMET R2 R2 K0
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x88080101, // 0006 GETMBR R2 R0 K1
+ 0x740A0004, // 0007 JMPT R2 #000D
+ 0x50080200, // 0008 LDBOOL R2 1 0
+ 0x90020402, // 0009 SETMBR R0 K2 R2
+ 0x50080200, // 000A LDBOOL R2 1 0
+ 0x80040400, // 000B RET 1 R2
+ 0x70020001, // 000C JMP #000F
+ 0x50080000, // 000D LDBOOL R2 0 0
+ 0x80040400, // 000E RET 1 R2
+ 0x80000000, // 000F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_ok_received
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_status_ok_received, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(report_data_phase),
+ /* K1 */ be_nested_str_weak(status_ok_received),
+ }),
+ be_str_weak(status_ok_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x780A0007, // 0001 JMPF R2 #000A
+ 0x60080003, // 0002 GETGBL R2 G3
+ 0x5C0C0000, // 0003 MOVE R3 R0
+ 0x7C080200, // 0004 CALL R2 1
+ 0x8C080501, // 0005 GETMET R2 R2 K1
+ 0x5C100200, // 0006 MOVE R4 R1
+ 0x7C080400, // 0007 CALL R2 2
+ 0x80040400, // 0008 RET 1 R2
+ 0x70020007, // 0009 JMP #0012
+ 0x60080003, // 000A GETGBL R2 G3
+ 0x5C0C0000, // 000B MOVE R3 R0
+ 0x7C080200, // 000C CALL R2 1
+ 0x8C080501, // 000D GETMET R2 R2 K1
+ 0x4C100000, // 000E LDNIL R4
+ 0x7C080400, // 000F CALL R2 2
+ 0x50080000, // 0010 LDBOOL R2 0 0
+ 0x80040400, // 0011 RET 1 R2
+ 0x80000000, // 0012 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: reached_timeout
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_reached_timeout, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(sub),
+ /* K1 */ be_nested_str_weak(remove_self),
+ }),
+ be_str_weak(reached_timeout),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_init, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[12]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(Frame),
+ /* K3 */ be_nested_str_weak(initiate_response),
+ /* K4 */ be_nested_str_weak(data),
+ /* K5 */ be_nested_str_weak(ready),
+ /* K6 */ be_nested_str_weak(expiration),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(millis),
+ /* K9 */ be_nested_str_weak(MSG_TIMEOUT),
+ /* K10 */ be_nested_str_weak(sub),
+ /* K11 */ be_nested_str_weak(report_data_phase),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0xB8160200, // 0000 GETNGBL R5 K1
+ 0x88140B02, // 0001 GETMBR R5 R5 K2
+ 0x8C140B03, // 0002 GETMET R5 R5 K3
+ 0x5C1C0200, // 0003 MOVE R7 R1
+ 0x5C200400, // 0004 MOVE R8 R2
+ 0x54260004, // 0005 LDINT R9 5
+ 0x50280200, // 0006 LDBOOL R10 1 0
+ 0x7C140A00, // 0007 CALL R5 5
+ 0x90020005, // 0008 SETMBR R0 K0 R5
+ 0x90020803, // 0009 SETMBR R0 K4 R3
+ 0x50140200, // 000A LDBOOL R5 1 0
+ 0x90020A05, // 000B SETMBR R0 K5 R5
+ 0xB8160E00, // 000C GETNGBL R5 K7
+ 0x8C140B08, // 000D GETMET R5 R5 K8
+ 0x7C140200, // 000E CALL R5 1
+ 0x88180109, // 000F GETMBR R6 R0 K9
+ 0x00140A06, // 0010 ADD R5 R5 R6
+ 0x90020C05, // 0011 SETMBR R0 K6 R5
+ 0x90021404, // 0012 SETMBR R0 K10 R4
+ 0x50140200, // 0013 LDBOOL R5 1 0
+ 0x90021605, // 0014 SETMBR R0 K11 R5
+ 0x80000000, // 0015 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_error_received
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_status_error_received, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(sub),
+ /* K1 */ be_nested_str_weak(remove_self),
+ }),
+ be_str_weak(status_error_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: send
********************************************************************/
@@ -941,172 +1184,6 @@ be_local_closure(Matter_IM_ReportDataSubscribed_send, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: status_error_received
-********************************************************************/
-be_local_closure(Matter_IM_ReportDataSubscribed_status_error_received, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(sub),
- /* K1 */ be_nested_str_weak(remove_self),
- }),
- be_str_weak(status_error_received),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x7C080200, // 0002 CALL R2 1
- 0x80000000, // 0003 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: ack_received
-********************************************************************/
-be_local_closure(Matter_IM_ReportDataSubscribed_ack_received, /* name */
- be_nested_proto(
- 3, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(report_data_phase),
- }),
- be_str_weak(ack_received),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x740A0002, // 0001 JMPT R2 #0005
- 0x50080200, // 0002 LDBOOL R2 1 0
- 0x80040400, // 0003 RET 1 R2
- 0x70020001, // 0004 JMP #0007
- 0x50080000, // 0005 LDBOOL R2 0 0
- 0x80040400, // 0006 RET 1 R2
- 0x80000000, // 0007 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: status_ok_received
-********************************************************************/
-be_local_closure(Matter_IM_ReportDataSubscribed_status_ok_received, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(report_data_phase),
- /* K1 */ be_nested_str_weak(status_ok_received),
- }),
- be_str_weak(status_ok_received),
- &be_const_str_solidified,
- ( &(const binstruction[19]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x780A0007, // 0001 JMPF R2 #000A
- 0x60080003, // 0002 GETGBL R2 G3
- 0x5C0C0000, // 0003 MOVE R3 R0
- 0x7C080200, // 0004 CALL R2 1
- 0x8C080501, // 0005 GETMET R2 R2 K1
- 0x5C100200, // 0006 MOVE R4 R1
- 0x7C080400, // 0007 CALL R2 2
- 0x80040400, // 0008 RET 1 R2
- 0x70020007, // 0009 JMP #0012
- 0x60080003, // 000A GETGBL R2 G3
- 0x5C0C0000, // 000B MOVE R3 R0
- 0x7C080200, // 000C CALL R2 1
- 0x8C080501, // 000D GETMET R2 R2 K1
- 0x4C100000, // 000E LDNIL R4
- 0x7C080400, // 000F CALL R2 2
- 0x50080000, // 0010 LDBOOL R2 0 0
- 0x80040400, // 0011 RET 1 R2
- 0x80000000, // 0012 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_IM_ReportDataSubscribed_init, /* name */
- be_nested_proto(
- 11, /* nstack */
- 5, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[12]) { /* constants */
- /* K0 */ be_nested_str_weak(resp),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(Frame),
- /* K3 */ be_nested_str_weak(initiate_response),
- /* K4 */ be_nested_str_weak(data),
- /* K5 */ be_nested_str_weak(ready),
- /* K6 */ be_nested_str_weak(expiration),
- /* K7 */ be_nested_str_weak(tasmota),
- /* K8 */ be_nested_str_weak(millis),
- /* K9 */ be_nested_str_weak(MSG_TIMEOUT),
- /* K10 */ be_nested_str_weak(sub),
- /* K11 */ be_nested_str_weak(report_data_phase),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0xB8160200, // 0000 GETNGBL R5 K1
- 0x88140B02, // 0001 GETMBR R5 R5 K2
- 0x8C140B03, // 0002 GETMET R5 R5 K3
- 0x5C1C0200, // 0003 MOVE R7 R1
- 0x5C200400, // 0004 MOVE R8 R2
- 0x54260004, // 0005 LDINT R9 5
- 0x50280200, // 0006 LDBOOL R10 1 0
- 0x7C140A00, // 0007 CALL R5 5
- 0x90020005, // 0008 SETMBR R0 K0 R5
- 0x90020803, // 0009 SETMBR R0 K4 R3
- 0x50140200, // 000A LDBOOL R5 1 0
- 0x90020A05, // 000B SETMBR R0 K5 R5
- 0xB8160E00, // 000C GETNGBL R5 K7
- 0x8C140B08, // 000D GETMET R5 R5 K8
- 0x7C140200, // 000E CALL R5 1
- 0x88180109, // 000F GETMBR R6 R0 K9
- 0x00140A06, // 0010 ADD R5 R5 R6
- 0x90020C05, // 0011 SETMBR R0 K6 R5
- 0x90021404, // 0012 SETMBR R0 K10 R4
- 0x50140200, // 0013 LDBOOL R5 1 0
- 0x90021605, // 0014 SETMBR R0 K11 R5
- 0x80000000, // 0015 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified class: Matter_IM_ReportDataSubscribed
********************************************************************/
@@ -1114,15 +1191,16 @@ extern const bclass be_class_Matter_IM_ReportData;
be_local_class(Matter_IM_ReportDataSubscribed,
2,
&be_class_Matter_IM_ReportData,
- be_nested_map(7,
+ be_nested_map(8,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(init, 1), be_const_closure(Matter_IM_ReportDataSubscribed_init_closure) },
+ { be_const_key_weak(ack_received, 1), be_const_closure(Matter_IM_ReportDataSubscribed_ack_received_closure) },
{ be_const_key_weak(status_ok_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_status_ok_received_closure) },
- { be_const_key_weak(send, 4), be_const_closure(Matter_IM_ReportDataSubscribed_send_closure) },
- { be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_ack_received_closure) },
- { be_const_key_weak(sub, 6), be_const_var(0) },
- { be_const_key_weak(status_error_received, 0), be_const_closure(Matter_IM_ReportDataSubscribed_status_error_received_closure) },
- { be_const_key_weak(report_data_phase, -1), be_const_var(1) },
+ { be_const_key_weak(status_error_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_status_error_received_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_ReportDataSubscribed_init_closure) },
+ { be_const_key_weak(report_data_phase, 2), be_const_var(1) },
+ { be_const_key_weak(reached_timeout, 6), be_const_closure(Matter_IM_ReportDataSubscribed_reached_timeout_closure) },
+ { be_const_key_weak(sub, -1), be_const_var(0) },
+ { be_const_key_weak(send, -1), be_const_closure(Matter_IM_ReportDataSubscribed_send_closure) },
})),
be_str_weak(Matter_IM_ReportDataSubscribed)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
index 7feacf75b..fd15e66a9 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
@@ -213,7 +213,7 @@ be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[21]) { /* constants */
+ ( &(const bvalue[22]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -222,23 +222,24 @@ be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
/* K5 */ be_const_int(0),
/* K6 */ be_nested_str_weak(Matter_TLV_array),
/* K7 */ be_nested_str_weak(TYPES),
- /* K8 */ be_nested_str_weak(add_struct),
- /* K9 */ be_nested_str_weak(add_TLV),
- /* K10 */ be_nested_str_weak(U2),
- /* K11 */ be_const_int(1),
- /* K12 */ be_nested_str_weak(stop_iteration),
- /* K13 */ be_nested_str_weak(get_cluster_list),
- /* K14 */ be_nested_str_weak(U4),
- /* K15 */ be_const_int(2),
- /* K16 */ be_const_int(3),
- /* K17 */ be_nested_str_weak(create_TLV),
- /* K18 */ be_nested_str_weak(U1),
- /* K19 */ be_nested_str_weak(BOOL),
- /* K20 */ be_nested_str_weak(onoff),
+ /* K8 */ be_nested_str_weak(keys),
+ /* K9 */ be_nested_str_weak(add_struct),
+ /* K10 */ be_nested_str_weak(add_TLV),
+ /* K11 */ be_nested_str_weak(U2),
+ /* K12 */ be_const_int(1),
+ /* K13 */ be_nested_str_weak(stop_iteration),
+ /* K14 */ be_nested_str_weak(get_cluster_list),
+ /* K15 */ be_nested_str_weak(U4),
+ /* K16 */ be_const_int(2),
+ /* K17 */ be_const_int(3),
+ /* K18 */ be_nested_str_weak(create_TLV),
+ /* K19 */ be_nested_str_weak(U1),
+ /* K20 */ be_nested_str_weak(BOOL),
+ /* K21 */ be_nested_str_weak(onoff),
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
- ( &(const binstruction[113]) { /* code */
+ ( &(const binstruction[208]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x88100902, // 0002 GETMBR R4 R4 K2
@@ -246,112 +247,207 @@ be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
0x88180504, // 0004 GETMBR R6 R2 K4
0x541E001C, // 0005 LDINT R7 29
0x1C1C0A07, // 0006 EQ R7 R5 R7
- 0x781E0042, // 0007 JMPF R7 #004B
+ 0x781E0057, // 0007 JMPF R7 #0060
0x1C1C0D05, // 0008 EQ R7 R6 K5
- 0x781E0019, // 0009 JMPF R7 #0024
+ 0x781E001C, // 0009 JMPF R7 #0027
0x8C1C0906, // 000A GETMET R7 R4 K6
0x7C1C0200, // 000B CALL R7 1
0x60200010, // 000C GETGBL R8 G16
0x88240107, // 000D GETMBR R9 R0 K7
- 0x7C200200, // 000E CALL R8 1
- 0xA802000E, // 000F EXBLK 0 #001F
- 0x5C241000, // 0010 MOVE R9 R8
- 0x7C240000, // 0011 CALL R9 0
- 0x8C280F08, // 0012 GETMET R10 R7 K8
- 0x7C280200, // 0013 CALL R10 1
- 0x8C2C1509, // 0014 GETMET R11 R10 K9
- 0x58340005, // 0015 LDCONST R13 K5
- 0x8838090A, // 0016 GETMBR R14 R4 K10
- 0x5C3C1200, // 0017 MOVE R15 R9
- 0x7C2C0800, // 0018 CALL R11 4
- 0x8C2C1509, // 0019 GETMET R11 R10 K9
- 0x5834000B, // 001A LDCONST R13 K11
- 0x8838090A, // 001B GETMBR R14 R4 K10
- 0x583C000B, // 001C LDCONST R15 K11
- 0x7C2C0800, // 001D CALL R11 4
- 0x7001FFF0, // 001E JMP #0010
- 0x5820000C, // 001F LDCONST R8 K12
- 0xAC200200, // 0020 CATCH R8 1 0
- 0xB0080000, // 0021 RAISE 2 R0 R0
- 0x80040E00, // 0022 RET 1 R7
- 0x70020025, // 0023 JMP #004A
- 0x1C1C0D0B, // 0024 EQ R7 R6 K11
- 0x781E0013, // 0025 JMPF R7 #003A
- 0x8C1C0906, // 0026 GETMET R7 R4 K6
- 0x7C1C0200, // 0027 CALL R7 1
- 0x60200010, // 0028 GETGBL R8 G16
- 0x8C24010D, // 0029 GETMET R9 R0 K13
- 0x7C240200, // 002A CALL R9 1
- 0x7C200200, // 002B CALL R8 1
- 0xA8020007, // 002C EXBLK 0 #0035
- 0x5C241000, // 002D MOVE R9 R8
- 0x7C240000, // 002E CALL R9 0
- 0x8C280F09, // 002F GETMET R10 R7 K9
- 0x4C300000, // 0030 LDNIL R12
- 0x8834090E, // 0031 GETMBR R13 R4 K14
- 0x5C381200, // 0032 MOVE R14 R9
- 0x7C280800, // 0033 CALL R10 4
- 0x7001FFF7, // 0034 JMP #002D
- 0x5820000C, // 0035 LDCONST R8 K12
- 0xAC200200, // 0036 CATCH R8 1 0
- 0xB0080000, // 0037 RAISE 2 R0 R0
- 0x80040E00, // 0038 RET 1 R7
- 0x7002000F, // 0039 JMP #004A
- 0x1C1C0D0F, // 003A EQ R7 R6 K15
- 0x781E0008, // 003B JMPF R7 #0045
- 0x8C1C0906, // 003C GETMET R7 R4 K6
- 0x7C1C0200, // 003D CALL R7 1
- 0x8C200F09, // 003E GETMET R8 R7 K9
- 0x4C280000, // 003F LDNIL R10
- 0x882C090A, // 0040 GETMBR R11 R4 K10
- 0x54320005, // 0041 LDINT R12 6
- 0x7C200800, // 0042 CALL R8 4
- 0x80040E00, // 0043 RET 1 R7
- 0x70020004, // 0044 JMP #004A
- 0x1C1C0D10, // 0045 EQ R7 R6 K16
- 0x781E0002, // 0046 JMPF R7 #004A
- 0x8C1C0906, // 0047 GETMET R7 R4 K6
- 0x7C1C0200, // 0048 CALL R7 1
- 0x80040E00, // 0049 RET 1 R7
- 0x70020024, // 004A JMP #0070
- 0x1C1C0B10, // 004B EQ R7 R5 K16
- 0x781E000F, // 004C JMPF R7 #005D
- 0x1C1C0D05, // 004D EQ R7 R6 K5
- 0x781E0005, // 004E JMPF R7 #0055
- 0x8C1C0911, // 004F GETMET R7 R4 K17
- 0x8824090A, // 0050 GETMBR R9 R4 K10
- 0x58280005, // 0051 LDCONST R10 K5
- 0x7C1C0600, // 0052 CALL R7 3
- 0x80040E00, // 0053 RET 1 R7
- 0x70020006, // 0054 JMP #005C
- 0x1C1C0D0B, // 0055 EQ R7 R6 K11
- 0x781E0004, // 0056 JMPF R7 #005C
- 0x8C1C0911, // 0057 GETMET R7 R4 K17
- 0x88240912, // 0058 GETMBR R9 R4 K18
- 0x58280005, // 0059 LDCONST R10 K5
- 0x7C1C0600, // 005A CALL R7 3
- 0x80040E00, // 005B RET 1 R7
- 0x70020012, // 005C JMP #0070
- 0x541E0005, // 005D LDINT R7 6
- 0x1C1C0A07, // 005E EQ R7 R5 R7
- 0x781E000F, // 005F JMPF R7 #0070
- 0x1C1C0D05, // 0060 EQ R7 R6 K5
- 0x781E0005, // 0061 JMPF R7 #0068
- 0x8C1C0911, // 0062 GETMET R7 R4 K17
- 0x88240913, // 0063 GETMBR R9 R4 K19
- 0x88280114, // 0064 GETMBR R10 R0 K20
- 0x7C1C0600, // 0065 CALL R7 3
- 0x80040E00, // 0066 RET 1 R7
- 0x70020007, // 0067 JMP #0070
- 0x541EFFFB, // 0068 LDINT R7 65532
- 0x1C1C0C07, // 0069 EQ R7 R6 R7
- 0x781E0004, // 006A JMPF R7 #0070
- 0x8C1C0911, // 006B GETMET R7 R4 K17
- 0x8824090E, // 006C GETMBR R9 R4 K14
- 0x58280005, // 006D LDCONST R10 K5
- 0x7C1C0600, // 006E CALL R7 3
- 0x80040E00, // 006F RET 1 R7
- 0x80000000, // 0070 RET 0
+ 0x8C241308, // 000E GETMET R9 R9 K8
+ 0x7C240200, // 000F CALL R9 1
+ 0x7C200200, // 0010 CALL R8 1
+ 0xA802000F, // 0011 EXBLK 0 #0022
+ 0x5C241000, // 0012 MOVE R9 R8
+ 0x7C240000, // 0013 CALL R9 0
+ 0x8C280F09, // 0014 GETMET R10 R7 K9
+ 0x7C280200, // 0015 CALL R10 1
+ 0x8C2C150A, // 0016 GETMET R11 R10 K10
+ 0x58340005, // 0017 LDCONST R13 K5
+ 0x8838090B, // 0018 GETMBR R14 R4 K11
+ 0x5C3C1200, // 0019 MOVE R15 R9
+ 0x7C2C0800, // 001A CALL R11 4
+ 0x8C2C150A, // 001B GETMET R11 R10 K10
+ 0x5834000C, // 001C LDCONST R13 K12
+ 0x8838090B, // 001D GETMBR R14 R4 K11
+ 0x883C0107, // 001E GETMBR R15 R0 K7
+ 0x943C1E09, // 001F GETIDX R15 R15 R9
+ 0x7C2C0800, // 0020 CALL R11 4
+ 0x7001FFEF, // 0021 JMP #0012
+ 0x5820000D, // 0022 LDCONST R8 K13
+ 0xAC200200, // 0023 CATCH R8 1 0
+ 0xB0080000, // 0024 RAISE 2 R0 R0
+ 0x80040E00, // 0025 RET 1 R7
+ 0x70020037, // 0026 JMP #005F
+ 0x1C1C0D0C, // 0027 EQ R7 R6 K12
+ 0x781E0013, // 0028 JMPF R7 #003D
+ 0x8C1C0906, // 0029 GETMET R7 R4 K6
+ 0x7C1C0200, // 002A CALL R7 1
+ 0x60200010, // 002B GETGBL R8 G16
+ 0x8C24010E, // 002C GETMET R9 R0 K14
+ 0x7C240200, // 002D CALL R9 1
+ 0x7C200200, // 002E CALL R8 1
+ 0xA8020007, // 002F EXBLK 0 #0038
+ 0x5C241000, // 0030 MOVE R9 R8
+ 0x7C240000, // 0031 CALL R9 0
+ 0x8C280F0A, // 0032 GETMET R10 R7 K10
+ 0x4C300000, // 0033 LDNIL R12
+ 0x8834090F, // 0034 GETMBR R13 R4 K15
+ 0x5C381200, // 0035 MOVE R14 R9
+ 0x7C280800, // 0036 CALL R10 4
+ 0x7001FFF7, // 0037 JMP #0030
+ 0x5820000D, // 0038 LDCONST R8 K13
+ 0xAC200200, // 0039 CATCH R8 1 0
+ 0xB0080000, // 003A RAISE 2 R0 R0
+ 0x80040E00, // 003B RET 1 R7
+ 0x70020021, // 003C JMP #005F
+ 0x1C1C0D10, // 003D EQ R7 R6 K16
+ 0x781E0008, // 003E JMPF R7 #0048
+ 0x8C1C0906, // 003F GETMET R7 R4 K6
+ 0x7C1C0200, // 0040 CALL R7 1
+ 0x8C200F0A, // 0041 GETMET R8 R7 K10
+ 0x4C280000, // 0042 LDNIL R10
+ 0x882C090B, // 0043 GETMBR R11 R4 K11
+ 0x54320005, // 0044 LDINT R12 6
+ 0x7C200800, // 0045 CALL R8 4
+ 0x80040E00, // 0046 RET 1 R7
+ 0x70020016, // 0047 JMP #005F
+ 0x1C1C0D11, // 0048 EQ R7 R6 K17
+ 0x781E0003, // 0049 JMPF R7 #004E
+ 0x8C1C0906, // 004A GETMET R7 R4 K6
+ 0x7C1C0200, // 004B CALL R7 1
+ 0x80040E00, // 004C RET 1 R7
+ 0x70020010, // 004D JMP #005F
+ 0x541EFFFB, // 004E LDINT R7 65532
+ 0x1C1C0C07, // 004F EQ R7 R6 R7
+ 0x781E0005, // 0050 JMPF R7 #0057
+ 0x8C1C0912, // 0051 GETMET R7 R4 K18
+ 0x8824090F, // 0052 GETMBR R9 R4 K15
+ 0x58280005, // 0053 LDCONST R10 K5
+ 0x7C1C0600, // 0054 CALL R7 3
+ 0x80040E00, // 0055 RET 1 R7
+ 0x70020007, // 0056 JMP #005F
+ 0x541EFFFC, // 0057 LDINT R7 65533
+ 0x1C1C0C07, // 0058 EQ R7 R6 R7
+ 0x781E0004, // 0059 JMPF R7 #005F
+ 0x8C1C0912, // 005A GETMET R7 R4 K18
+ 0x8824090F, // 005B GETMBR R9 R4 K15
+ 0x5828000C, // 005C LDCONST R10 K12
+ 0x7C1C0600, // 005D CALL R7 3
+ 0x80040E00, // 005E RET 1 R7
+ 0x7002006E, // 005F JMP #00CF
+ 0x1C1C0B11, // 0060 EQ R7 R5 K17
+ 0x781E0021, // 0061 JMPF R7 #0084
+ 0x1C1C0D05, // 0062 EQ R7 R6 K5
+ 0x781E0005, // 0063 JMPF R7 #006A
+ 0x8C1C0912, // 0064 GETMET R7 R4 K18
+ 0x8824090B, // 0065 GETMBR R9 R4 K11
+ 0x58280005, // 0066 LDCONST R10 K5
+ 0x7C1C0600, // 0067 CALL R7 3
+ 0x80040E00, // 0068 RET 1 R7
+ 0x70020018, // 0069 JMP #0083
+ 0x1C1C0D0C, // 006A EQ R7 R6 K12
+ 0x781E0005, // 006B JMPF R7 #0072
+ 0x8C1C0912, // 006C GETMET R7 R4 K18
+ 0x88240913, // 006D GETMBR R9 R4 K19
+ 0x58280005, // 006E LDCONST R10 K5
+ 0x7C1C0600, // 006F CALL R7 3
+ 0x80040E00, // 0070 RET 1 R7
+ 0x70020010, // 0071 JMP #0083
+ 0x541EFFFB, // 0072 LDINT R7 65532
+ 0x1C1C0C07, // 0073 EQ R7 R6 R7
+ 0x781E0005, // 0074 JMPF R7 #007B
+ 0x8C1C0912, // 0075 GETMET R7 R4 K18
+ 0x8824090F, // 0076 GETMBR R9 R4 K15
+ 0x58280005, // 0077 LDCONST R10 K5
+ 0x7C1C0600, // 0078 CALL R7 3
+ 0x80040E00, // 0079 RET 1 R7
+ 0x70020007, // 007A JMP #0083
+ 0x541EFFFC, // 007B LDINT R7 65533
+ 0x1C1C0C07, // 007C EQ R7 R6 R7
+ 0x781E0004, // 007D JMPF R7 #0083
+ 0x8C1C0912, // 007E GETMET R7 R4 K18
+ 0x8824090F, // 007F GETMBR R9 R4 K15
+ 0x542A0003, // 0080 LDINT R10 4
+ 0x7C1C0600, // 0081 CALL R7 3
+ 0x80040E00, // 0082 RET 1 R7
+ 0x7002004A, // 0083 JMP #00CF
+ 0x541E0003, // 0084 LDINT R7 4
+ 0x1C1C0A07, // 0085 EQ R7 R5 R7
+ 0x781E0016, // 0086 JMPF R7 #009E
+ 0x1C1C0D05, // 0087 EQ R7 R6 K5
+ 0x781E0002, // 0088 JMPF R7 #008C
+ 0x4C1C0000, // 0089 LDNIL R7
+ 0x80040E00, // 008A RET 1 R7
+ 0x70020010, // 008B JMP #009D
+ 0x541EFFFB, // 008C LDINT R7 65532
+ 0x1C1C0C07, // 008D EQ R7 R6 R7
+ 0x781E0005, // 008E JMPF R7 #0095
+ 0x8C1C0912, // 008F GETMET R7 R4 K18
+ 0x8824090F, // 0090 GETMBR R9 R4 K15
+ 0x58280005, // 0091 LDCONST R10 K5
+ 0x7C1C0600, // 0092 CALL R7 3
+ 0x80040E00, // 0093 RET 1 R7
+ 0x70020007, // 0094 JMP #009D
+ 0x541EFFFC, // 0095 LDINT R7 65533
+ 0x1C1C0C07, // 0096 EQ R7 R6 R7
+ 0x781E0004, // 0097 JMPF R7 #009D
+ 0x8C1C0912, // 0098 GETMET R7 R4 K18
+ 0x8824090F, // 0099 GETMBR R9 R4 K15
+ 0x542A0003, // 009A LDINT R10 4
+ 0x7C1C0600, // 009B CALL R7 3
+ 0x80040E00, // 009C RET 1 R7
+ 0x70020030, // 009D JMP #00CF
+ 0x541E0004, // 009E LDINT R7 5
+ 0x1C1C0A07, // 009F EQ R7 R5 R7
+ 0x781E0011, // 00A0 JMPF R7 #00B3
+ 0x541EFFFB, // 00A1 LDINT R7 65532
+ 0x1C1C0C07, // 00A2 EQ R7 R6 R7
+ 0x781E0005, // 00A3 JMPF R7 #00AA
+ 0x8C1C0912, // 00A4 GETMET R7 R4 K18
+ 0x8824090F, // 00A5 GETMBR R9 R4 K15
+ 0x58280005, // 00A6 LDCONST R10 K5
+ 0x7C1C0600, // 00A7 CALL R7 3
+ 0x80040E00, // 00A8 RET 1 R7
+ 0x70020007, // 00A9 JMP #00B2
+ 0x541EFFFC, // 00AA LDINT R7 65533
+ 0x1C1C0C07, // 00AB EQ R7 R6 R7
+ 0x781E0004, // 00AC JMPF R7 #00B2
+ 0x8C1C0912, // 00AD GETMET R7 R4 K18
+ 0x8824090F, // 00AE GETMBR R9 R4 K15
+ 0x542A0003, // 00AF LDINT R10 4
+ 0x7C1C0600, // 00B0 CALL R7 3
+ 0x80040E00, // 00B1 RET 1 R7
+ 0x7002001B, // 00B2 JMP #00CF
+ 0x541E0005, // 00B3 LDINT R7 6
+ 0x1C1C0A07, // 00B4 EQ R7 R5 R7
+ 0x781E0018, // 00B5 JMPF R7 #00CF
+ 0x1C1C0D05, // 00B6 EQ R7 R6 K5
+ 0x781E0005, // 00B7 JMPF R7 #00BE
+ 0x8C1C0912, // 00B8 GETMET R7 R4 K18
+ 0x88240914, // 00B9 GETMBR R9 R4 K20
+ 0x88280115, // 00BA GETMBR R10 R0 K21
+ 0x7C1C0600, // 00BB CALL R7 3
+ 0x80040E00, // 00BC RET 1 R7
+ 0x70020010, // 00BD JMP #00CF
+ 0x541EFFFB, // 00BE LDINT R7 65532
+ 0x1C1C0C07, // 00BF EQ R7 R6 R7
+ 0x781E0005, // 00C0 JMPF R7 #00C7
+ 0x8C1C0912, // 00C1 GETMET R7 R4 K18
+ 0x8824090F, // 00C2 GETMBR R9 R4 K15
+ 0x58280005, // 00C3 LDCONST R10 K5
+ 0x7C1C0600, // 00C4 CALL R7 3
+ 0x80040E00, // 00C5 RET 1 R7
+ 0x70020007, // 00C6 JMP #00CF
+ 0x541EFFFC, // 00C7 LDINT R7 65533
+ 0x1C1C0C07, // 00C8 EQ R7 R6 R7
+ 0x781E0004, // 00C9 JMPF R7 #00CF
+ 0x8C1C0912, // 00CA GETMET R7 R4 K18
+ 0x8824090F, // 00CB GETMBR R9 R4 K15
+ 0x542A0003, // 00CC LDINT R10 4
+ 0x7C1C0600, // 00CD CALL R7 3
+ 0x80040E00, // 00CE RET 1 R7
+ 0x80000000, // 00CF RET 0
})
)
);
@@ -369,10 +465,10 @@ be_local_class(Matter_Plugin_OnOff,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(read_attribute, 6), be_const_closure(Matter_Plugin_OnOff_read_attribute_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_OnOff_init_closure) },
- { be_const_key_weak(TYPES, 0), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(256),
+ { be_const_key_weak(TYPES, 0), 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(266, -1), be_const_int(2) },
})) ) } )) },
{ be_const_key_weak(invoke_request, 1), be_const_closure(Matter_Plugin_OnOff_invoke_request_closure) },
{ be_const_key_weak(onoff, -1), be_const_var(0) },
@@ -386,7 +482,7 @@ be_local_class(Matter_Plugin_OnOff,
be_const_map( * be_nested_map(5,
( (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(6,
+ be_const_list( * be_nested_list(8,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
@@ -394,31 +490,40 @@ be_local_class(Matter_Plugin_OnOff,
be_const_int(3),
be_const_int(4),
be_const_int(5),
+ be_const_int(65532),
+ be_const_int(65533),
})) ) } )) },
{ be_const_key_int(6, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(2,
+ be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
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(4,
+ be_const_list( * be_nested_list(6,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
+ be_const_int(65532),
+ be_const_int(65533),
})) ) } )) },
{ be_const_key_int(3, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(2,
+ be_const_list( * be_nested_list(4,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
+ be_const_int(65532),
+ be_const_int(65533),
})) ) } )) },
{ be_const_key_int(4, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
+ be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
+ be_const_int(65532),
+ be_const_int(65533),
})) ) } )) },
})) ) } )) },
})),
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
index 57afc789f..0447a8dea 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
@@ -19,7 +19,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[81]) { /* constants */
+ ( &(const bvalue[82]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -97,14 +97,15 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
/* K74 */ be_nested_str_weak(Version),
/* K75 */ be_nested_str_weak(locale),
/* K76 */ be_nested_str_weak(TYPES),
- /* K77 */ be_nested_str_weak(get_cluster_list),
- /* K78 */ be_nested_str_weak(get_active_endpoints),
- /* K79 */ be_nested_str_weak(status),
- /* K80 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
+ /* K77 */ be_nested_str_weak(keys),
+ /* K78 */ be_nested_str_weak(get_cluster_list),
+ /* K79 */ be_nested_str_weak(get_active_endpoints),
+ /* K80 */ be_nested_str_weak(status),
+ /* K81 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
- ( &(const binstruction[808]) { /* code */
+ ( &(const binstruction[811]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x88100902, // 0002 GETMBR R4 R4 K2
@@ -161,11 +162,11 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x50280000, // 0035 LDBOOL R10 0 0
0x7C1C0600, // 0036 CALL R7 3
0x80040E00, // 0037 RET 1 R7
- 0x700202ED, // 0038 JMP #0327
+ 0x700202F0, // 0038 JMP #032A
0x541E0031, // 0039 LDINT R7 50
0x1C1C0A07, // 003A EQ R7 R5 R7
0x781E0000, // 003B JMPF R7 #003D
- 0x700202E9, // 003C JMP #0327
+ 0x700202EC, // 003C JMP #032A
0x541E0032, // 003D LDINT R7 51
0x1C1C0A07, // 003E EQ R7 R5 R7
0x781E00DA, // 003F JMPF R7 #011B
@@ -387,11 +388,11 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x50280000, // 0117 LDBOOL R10 0 0
0x7C1C0600, // 0118 CALL R7 3
0x80040E00, // 0119 RET 1 R7
- 0x7002020B, // 011A JMP #0327
+ 0x7002020E, // 011A JMP #032A
0x541E0033, // 011B LDINT R7 52
0x1C1C0A07, // 011C EQ R7 R5 R7
0x781E0000, // 011D JMPF R7 #011F
- 0x70020207, // 011E JMP #0327
+ 0x7002020A, // 011E JMP #032A
0x541E0037, // 011F LDINT R7 56
0x1C1C0A07, // 0120 EQ R7 R5 R7
0x781E002C, // 0121 JMPF R7 #014F
@@ -439,7 +440,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x5C2C0E00, // 014B MOVE R11 R7
0x7C200600, // 014C CALL R8 3
0x80041000, // 014D RET 1 R8
- 0x700201D7, // 014E JMP #0327
+ 0x700201DA, // 014E JMP #032A
0x541E003D, // 014F LDINT R7 62
0x1C1C0A07, // 0150 EQ R7 R5 R7
0x781E0082, // 0151 JMPF R7 #01D5
@@ -567,17 +568,17 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x4C240000, // 01CB LDNIL R9
0x1C241009, // 01CC EQ R9 R8 R9
0x78260000, // 01CD JMPF R9 #01CF
- 0x58200005, // 01CE LDCONST R8 K5
+ 0x5421FFFE, // 01CE LDINT R8 -1
0x8C240906, // 01CF GETMET R9 R4 K6
0x882C090E, // 01D0 GETMBR R11 R4 K14
- 0x5C301000, // 01D1 MOVE R12 R8
+ 0x00301109, // 01D1 ADD R12 R8 K9
0x7C240600, // 01D2 CALL R9 3
0x80041200, // 01D3 RET 1 R9
- 0x70020151, // 01D4 JMP #0327
+ 0x70020154, // 01D4 JMP #032A
0x541E003B, // 01D5 LDINT R7 60
0x1C1C0A07, // 01D6 EQ R7 R5 R7
0x781E0000, // 01D7 JMPF R7 #01D9
- 0x7002014D, // 01D8 JMP #0327
+ 0x70020150, // 01D8 JMP #032A
0x541E0027, // 01D9 LDINT R7 40
0x1C1C0A07, // 01DA EQ R7 R5 R7
0x781E0080, // 01DB JMPF R7 #025D
@@ -677,7 +678,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x781E0005, // 0239 JMPF R7 #0240
0x8C1C0906, // 023A GETMET R7 R4 K6
0x8824090C, // 023B GETMBR R9 R4 K12
- 0x58280005, // 023C LDCONST R10 K5
+ 0x58280009, // 023C LDCONST R10 K9
0x7C1C0600, // 023D CALL R7 3
0x80040E00, // 023E RET 1 R7
0x7002001B, // 023F JMP #025C
@@ -709,11 +710,11 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x7C280600, // 0259 CALL R10 3
0x7C1C0600, // 025A CALL R7 3
0x80040E00, // 025B RET 1 R7
- 0x700200C9, // 025C JMP #0327
+ 0x700200CC, // 025C JMP #032A
0x541E003E, // 025D LDINT R7 63
0x1C1C0A07, // 025E EQ R7 R5 R7
0x781E0000, // 025F JMPF R7 #0261
- 0x700200C5, // 0260 JMP #0327
+ 0x700200C8, // 0260 JMP #032A
0x541E0029, // 0261 LDINT R7 42
0x1C1C0A07, // 0262 EQ R7 R5 R7
0x781E001D, // 0263 JMPF R7 #0282
@@ -746,7 +747,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x4C280000, // 027E LDNIL R10
0x7C1C0600, // 027F CALL R7 3
0x80040E00, // 0280 RET 1 R7
- 0x700200A4, // 0281 JMP #0327
+ 0x700200A7, // 0281 JMP #032A
0x541E002A, // 0282 LDINT R7 43
0x1C1C0A07, // 0283 EQ R7 R5 R7
0x781E0016, // 0284 JMPF R7 #029C
@@ -772,7 +773,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x7C300200, // 0298 CALL R12 1
0x7C200800, // 0299 CALL R8 4
0x80040E00, // 029A RET 1 R7
- 0x7002008A, // 029B JMP #0327
+ 0x7002008D, // 029B JMP #032A
0x541E002B, // 029C LDINT R7 44
0x1C1C0A07, // 029D EQ R7 R5 R7
0x781E001C, // 029E JMPF R7 #02BC
@@ -804,7 +805,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x7C2C0600, // 02B8 CALL R11 3
0x7C200600, // 02B9 CALL R8 3
0x80040E00, // 02BA RET 1 R7
- 0x7002006A, // 02BB JMP #0327
+ 0x7002006D, // 02BB JMP #032A
0x541E0030, // 02BC LDINT R7 49
0x1C1C0A07, // 02BD EQ R7 R5 R7
0x781E0010, // 02BE JMPF R7 #02D0
@@ -824,95 +825,98 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x58280005, // 02CC LDCONST R10 K5
0x7C1C0600, // 02CD CALL R7 3
0x80040E00, // 02CE RET 1 R7
- 0x70020056, // 02CF JMP #0327
+ 0x70020059, // 02CF JMP #032A
0x541E001C, // 02D0 LDINT R7 29
0x1C1C0A07, // 02D1 EQ R7 R5 R7
- 0x781E0050, // 02D2 JMPF R7 #0324
+ 0x781E0053, // 02D2 JMPF R7 #0327
0x1C1C0D05, // 02D3 EQ R7 R6 K5
- 0x781E0019, // 02D4 JMPF R7 #02EF
+ 0x781E001C, // 02D4 JMPF R7 #02F2
0x8C1C0911, // 02D5 GETMET R7 R4 K17
0x7C1C0200, // 02D6 CALL R7 1
0x60200010, // 02D7 GETGBL R8 G16
0x8824014C, // 02D8 GETMBR R9 R0 K76
- 0x7C200200, // 02D9 CALL R8 1
- 0xA802000E, // 02DA EXBLK 0 #02EA
- 0x5C241000, // 02DB MOVE R9 R8
- 0x7C240000, // 02DC CALL R9 0
- 0x8C280F15, // 02DD GETMET R10 R7 K21
- 0x7C280200, // 02DE CALL R10 1
- 0x8C2C150B, // 02DF GETMET R11 R10 K11
- 0x58340005, // 02E0 LDCONST R13 K5
- 0x8838090C, // 02E1 GETMBR R14 R4 K12
- 0x5C3C1200, // 02E2 MOVE R15 R9
- 0x7C2C0800, // 02E3 CALL R11 4
- 0x8C2C150B, // 02E4 GETMET R11 R10 K11
- 0x58340009, // 02E5 LDCONST R13 K9
- 0x8838090C, // 02E6 GETMBR R14 R4 K12
- 0x583C0009, // 02E7 LDCONST R15 K9
- 0x7C2C0800, // 02E8 CALL R11 4
- 0x7001FFF0, // 02E9 JMP #02DB
- 0x58200039, // 02EA LDCONST R8 K57
- 0xAC200200, // 02EB CATCH R8 1 0
- 0xB0080000, // 02EC RAISE 2 R0 R0
- 0x80040E00, // 02ED RET 1 R7
- 0x70020033, // 02EE JMP #0323
- 0x1C1C0D09, // 02EF EQ R7 R6 K9
- 0x781E0013, // 02F0 JMPF R7 #0305
- 0x8C1C0911, // 02F1 GETMET R7 R4 K17
- 0x7C1C0200, // 02F2 CALL R7 1
- 0x60200010, // 02F3 GETGBL R8 G16
- 0x8C24014D, // 02F4 GETMET R9 R0 K77
- 0x7C240200, // 02F5 CALL R9 1
- 0x7C200200, // 02F6 CALL R8 1
- 0xA8020007, // 02F7 EXBLK 0 #0300
- 0x5C241000, // 02F8 MOVE R9 R8
- 0x7C240000, // 02F9 CALL R9 0
- 0x8C280F0B, // 02FA GETMET R10 R7 K11
- 0x4C300000, // 02FB LDNIL R12
- 0x8834092A, // 02FC GETMBR R13 R4 K42
- 0x5C381200, // 02FD MOVE R14 R9
- 0x7C280800, // 02FE CALL R10 4
- 0x7001FFF7, // 02FF JMP #02F8
- 0x58200039, // 0300 LDCONST R8 K57
- 0xAC200200, // 0301 CATCH R8 1 0
- 0xB0080000, // 0302 RAISE 2 R0 R0
- 0x80040E00, // 0303 RET 1 R7
- 0x7002001D, // 0304 JMP #0323
- 0x1C1C0D0D, // 0305 EQ R7 R6 K13
- 0x781E0003, // 0306 JMPF R7 #030B
- 0x8C1C0911, // 0307 GETMET R7 R4 K17
- 0x7C1C0200, // 0308 CALL R7 1
- 0x80040E00, // 0309 RET 1 R7
- 0x70020017, // 030A JMP #0323
- 0x1C1C0D0F, // 030B EQ R7 R6 K15
- 0x781E0015, // 030C JMPF R7 #0323
- 0x881C0133, // 030D GETMBR R7 R0 K51
- 0x8C1C0F4E, // 030E GETMET R7 R7 K78
- 0x50240200, // 030F LDBOOL R9 1 0
- 0x7C1C0400, // 0310 CALL R7 2
- 0x8C200911, // 0311 GETMET R8 R4 K17
- 0x7C200200, // 0312 CALL R8 1
- 0x60240010, // 0313 GETGBL R9 G16
- 0x5C280E00, // 0314 MOVE R10 R7
- 0x7C240200, // 0315 CALL R9 1
- 0xA8020007, // 0316 EXBLK 0 #031F
- 0x5C281200, // 0317 MOVE R10 R9
- 0x7C280000, // 0318 CALL R10 0
- 0x8C2C110B, // 0319 GETMET R11 R8 K11
- 0x4C340000, // 031A LDNIL R13
- 0x8838090C, // 031B GETMBR R14 R4 K12
- 0x5C3C1400, // 031C MOVE R15 R10
- 0x7C2C0800, // 031D CALL R11 4
- 0x7001FFF7, // 031E JMP #0317
- 0x58240039, // 031F LDCONST R9 K57
- 0xAC240200, // 0320 CATCH R9 1 0
- 0xB0080000, // 0321 RAISE 2 R0 R0
- 0x80041000, // 0322 RET 1 R8
- 0x70020002, // 0323 JMP #0327
- 0xB81E0200, // 0324 GETNGBL R7 K1
- 0x881C0F50, // 0325 GETMBR R7 R7 K80
- 0x900A9E07, // 0326 SETMBR R2 K79 R7
- 0x80000000, // 0327 RET 0
+ 0x8C24134D, // 02D9 GETMET R9 R9 K77
+ 0x7C240200, // 02DA CALL R9 1
+ 0x7C200200, // 02DB CALL R8 1
+ 0xA802000F, // 02DC EXBLK 0 #02ED
+ 0x5C241000, // 02DD MOVE R9 R8
+ 0x7C240000, // 02DE CALL R9 0
+ 0x8C280F15, // 02DF GETMET R10 R7 K21
+ 0x7C280200, // 02E0 CALL R10 1
+ 0x8C2C150B, // 02E1 GETMET R11 R10 K11
+ 0x58340005, // 02E2 LDCONST R13 K5
+ 0x8838090C, // 02E3 GETMBR R14 R4 K12
+ 0x5C3C1200, // 02E4 MOVE R15 R9
+ 0x7C2C0800, // 02E5 CALL R11 4
+ 0x8C2C150B, // 02E6 GETMET R11 R10 K11
+ 0x58340009, // 02E7 LDCONST R13 K9
+ 0x8838090C, // 02E8 GETMBR R14 R4 K12
+ 0x883C014C, // 02E9 GETMBR R15 R0 K76
+ 0x943C1E09, // 02EA GETIDX R15 R15 R9
+ 0x7C2C0800, // 02EB CALL R11 4
+ 0x7001FFEF, // 02EC JMP #02DD
+ 0x58200039, // 02ED LDCONST R8 K57
+ 0xAC200200, // 02EE CATCH R8 1 0
+ 0xB0080000, // 02EF RAISE 2 R0 R0
+ 0x80040E00, // 02F0 RET 1 R7
+ 0x70020033, // 02F1 JMP #0326
+ 0x1C1C0D09, // 02F2 EQ R7 R6 K9
+ 0x781E0013, // 02F3 JMPF R7 #0308
+ 0x8C1C0911, // 02F4 GETMET R7 R4 K17
+ 0x7C1C0200, // 02F5 CALL R7 1
+ 0x60200010, // 02F6 GETGBL R8 G16
+ 0x8C24014E, // 02F7 GETMET R9 R0 K78
+ 0x7C240200, // 02F8 CALL R9 1
+ 0x7C200200, // 02F9 CALL R8 1
+ 0xA8020007, // 02FA EXBLK 0 #0303
+ 0x5C241000, // 02FB MOVE R9 R8
+ 0x7C240000, // 02FC CALL R9 0
+ 0x8C280F0B, // 02FD GETMET R10 R7 K11
+ 0x4C300000, // 02FE LDNIL R12
+ 0x8834092A, // 02FF GETMBR R13 R4 K42
+ 0x5C381200, // 0300 MOVE R14 R9
+ 0x7C280800, // 0301 CALL R10 4
+ 0x7001FFF7, // 0302 JMP #02FB
+ 0x58200039, // 0303 LDCONST R8 K57
+ 0xAC200200, // 0304 CATCH R8 1 0
+ 0xB0080000, // 0305 RAISE 2 R0 R0
+ 0x80040E00, // 0306 RET 1 R7
+ 0x7002001D, // 0307 JMP #0326
+ 0x1C1C0D0D, // 0308 EQ R7 R6 K13
+ 0x781E0003, // 0309 JMPF R7 #030E
+ 0x8C1C0911, // 030A GETMET R7 R4 K17
+ 0x7C1C0200, // 030B CALL R7 1
+ 0x80040E00, // 030C RET 1 R7
+ 0x70020017, // 030D JMP #0326
+ 0x1C1C0D0F, // 030E EQ R7 R6 K15
+ 0x781E0015, // 030F JMPF R7 #0326
+ 0x881C0133, // 0310 GETMBR R7 R0 K51
+ 0x8C1C0F4F, // 0311 GETMET R7 R7 K79
+ 0x50240200, // 0312 LDBOOL R9 1 0
+ 0x7C1C0400, // 0313 CALL R7 2
+ 0x8C200911, // 0314 GETMET R8 R4 K17
+ 0x7C200200, // 0315 CALL R8 1
+ 0x60240010, // 0316 GETGBL R9 G16
+ 0x5C280E00, // 0317 MOVE R10 R7
+ 0x7C240200, // 0318 CALL R9 1
+ 0xA8020007, // 0319 EXBLK 0 #0322
+ 0x5C281200, // 031A MOVE R10 R9
+ 0x7C280000, // 031B CALL R10 0
+ 0x8C2C110B, // 031C GETMET R11 R8 K11
+ 0x4C340000, // 031D LDNIL R13
+ 0x8838090C, // 031E GETMBR R14 R4 K12
+ 0x5C3C1400, // 031F MOVE R15 R10
+ 0x7C2C0800, // 0320 CALL R11 4
+ 0x7001FFF7, // 0321 JMP #031A
+ 0x58240039, // 0322 LDCONST R9 K57
+ 0xAC240200, // 0323 CATCH R9 1 0
+ 0xB0080000, // 0324 RAISE 2 R0 R0
+ 0x80041000, // 0325 RET 1 R8
+ 0x70020002, // 0326 JMP #032A
+ 0xB81E0200, // 0327 GETNGBL R7 K1
+ 0x881C0F51, // 0328 GETMBR R7 R7 K81
+ 0x900AA007, // 0329 SETMBR R2 K80 R7
+ 0x80000000, // 032A RET 0
})
)
);
@@ -1189,7 +1193,7 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
}),
be_str_weak(invoke_request),
&be_const_str_solidified,
- ( &(const binstruction[494]) { /* code */
+ ( &(const binstruction[502]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0xB8160200, // 0001 GETNGBL R5 K1
0x88140B02, // 0002 GETMBR R5 R5 K2
@@ -1278,10 +1282,10 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
0x5C2C0200, // 0055 MOVE R11 R1
0x7C240400, // 0056 CALL R9 2
0x80041000, // 0057 RET 1 R8
- 0x70020193, // 0058 JMP #01ED
+ 0x7002019B, // 0058 JMP #01F5
0x5422003D, // 0059 LDINT R8 62
0x1C200C08, // 005A EQ R8 R6 R8
- 0x78220190, // 005B JMPF R8 #01ED
+ 0x78220191, // 005B JMPF R8 #01EE
0x1C200F0E, // 005C EQ R8 R7 K14
0x7822001D, // 005D JMPF R8 #007C
0x8C200506, // 005E GETMET R8 R2 K6
@@ -1683,7 +1687,15 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
0x900E280A, // 01EA SETMBR R3 K20 R10
0x4C280000, // 01EB LDNIL R10
0x80041400, // 01EC RET 1 R10
- 0x80000000, // 01ED RET 0
+ 0x70020006, // 01ED JMP #01F5
+ 0x54220029, // 01EE LDINT R8 42
+ 0x1C200C08, // 01EF EQ R8 R6 R8
+ 0x78220003, // 01F0 JMPF R8 #01F5
+ 0x1C200F05, // 01F1 EQ R8 R7 K5
+ 0x78220001, // 01F2 JMPF R8 #01F5
+ 0x50200200, // 01F3 LDBOOL R8 1 0
+ 0x80041000, // 01F4 RET 1 R8
+ 0x80000000, // 01F5 RET 0
})
)
);
@@ -1702,11 +1714,29 @@ be_local_class(Matter_Plugin_Root,
{ be_const_key_weak(read_attribute, 1), be_const_closure(Matter_Plugin_Root_read_attribute_closure) },
{ be_const_key_weak(invoke_request, 2), be_const_closure(Matter_Plugin_Root_invoke_request_closure) },
{ be_const_key_weak(CLUSTERS, 6), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(15,
+ be_const_map( * be_nested_map(14,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_int(60, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
+ { be_const_key_int(56, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(7),
+ })) ) } )) },
+ { be_const_key_int(29, 5), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(4,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(3),
+ })) ) } )) },
+ { be_const_key_int(44, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
})) ) } )) },
{ be_const_key_int(31, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(4,
@@ -1716,17 +1746,17 @@ be_local_class(Matter_Plugin_Root,
be_const_int(3),
be_const_int(4),
})) ) } )) },
- { be_const_key_int(62, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(6,
+ { be_const_key_int(60, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(0,
+ ( (struct bvalue*) &(const bvalue[]) {
+ })) ) } )) },
+ { be_const_key_int(43, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(2,
( (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_key_int(48, 9), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ { be_const_key_int(48, 11), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(5,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
@@ -1735,12 +1765,9 @@ be_local_class(Matter_Plugin_Root,
be_const_int(3),
be_const_int(4),
})) ) } )) },
- { be_const_key_int(49, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(3,
+ { be_const_key_int(63, 13), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(0,
( (struct bvalue*) &(const bvalue[]) {
- be_const_int(3),
- be_const_int(4),
- be_const_int(65532),
})) ) } )) },
{ be_const_key_int(50, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(0,
@@ -1758,17 +1785,15 @@ be_local_class(Matter_Plugin_Root,
be_const_list( * be_nested_list(0,
( (struct bvalue*) &(const bvalue[]) {
})) ) } )) },
- { be_const_key_int(29, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(4,
+ { be_const_key_int(62, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(6,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
- })) ) } )) },
- { be_const_key_int(63, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(4),
+ be_const_int(5),
})) ) } )) },
{ be_const_key_int(40, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(11,
@@ -1785,39 +1810,18 @@ be_local_class(Matter_Plugin_Root,
be_const_int(9),
be_const_int(18),
})) ) } )) },
- { be_const_key_int(56, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ { be_const_key_int(49, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(7),
- })) ) } )) },
- { be_const_key_int(42, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(4,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
be_const_int(3),
- })) ) } )) },
- { be_const_key_int(43, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(2,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- })) ) } )) },
- { be_const_key_int(44, 8), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(3,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
+ be_const_int(4),
+ be_const_int(65532),
})) ) } )) },
})) ) } )) },
- { be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(22),
+ { 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(22, -1), be_const_int(1) },
})) ) } )) },
{ be_const_key_weak(write_attribute, -1), be_const_closure(Matter_Plugin_Root_write_attribute_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Root_init_closure) },
From faa41ea2301946c8b7fa30cb10b979f8124c4c6a Mon Sep 17 00:00:00 2001
From: s-hadinger <49731213+s-hadinger@users.noreply.github.com>
Date: Thu, 23 Feb 2023 21:48:11 +0100
Subject: [PATCH 034/227] Matter adjustments (#18036)
---
.../src/embedded/Matter_Commissioning.be | 3 +-
.../src/embedded/Matter_MessageHandler.be | 2 +-
.../src/embedded/Matter_Plugin_OnOff.be | 36 +-
.../src/embedded/Matter_Plugin_Root.be | 9 +-
.../solidified_Matter_Commissioning.h | 1244 +++++++++--------
.../solidified_Matter_MessageHandler.h | 4 +-
.../solidify/solidified_Matter_Plugin_OnOff.h | 157 ++-
.../solidify/solidified_Matter_Plugin_Root.h | 476 ++++---
8 files changed, 1054 insertions(+), 877 deletions(-)
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be b/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be
index 4dfddced7..e5915023b 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be
@@ -103,6 +103,7 @@ class Matter_Commisioning_Context
# record the initiator_session_id
self.future_initiator_session_id = pbkdfparamreq.initiator_session_id
self.future_local_session_id = self.device.sessions.gen_local_session_id()
+ tasmota.log("MTR: Loc_session=" + str(self.future_local_session_id))
# prepare response
var pbkdfparamresp = matter.PBKDFParamResponse()
@@ -297,7 +298,7 @@ class Matter_Commisioning_Context
session._future_initiator_session_id = sigma1.initiator_session_id # update initiator_session_id
session._future_local_session_id = self.device.sessions.gen_local_session_id()
self.future_local_session_id = session._future_local_session_id
-
+ tasmota.log("MTR: Loc_session=" + str(self.future_local_session_id))
# Check that it's a resumption
if is_resumption && session.shared_secret != nil
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be b/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
index d8efb7c95..b10596445 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
@@ -89,7 +89,7 @@ class Matter_MessageHandler
var session = self.device.sessions.get_session_by_local_session_id(frame.local_session_id)
if session == nil
- tasmota.log("MTR: unknown local_session_id "+str(frame.local_session_id), 3)
+ tasmota.log("MTR: unknown local_session_id="+str(frame.local_session_id), 2)
tasmota.log("MTR: frame="+matter.inspect(frame), 3)
return false
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
index db37f5e67..1bac296c3 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
@@ -31,7 +31,8 @@ class Matter_Plugin_OnOff : Matter_Plugin
0x0003: [0,1,0xFFFC,0xFFFD], # Identify 1.2 p.16
0x0004: [0,0xFFFC,0xFFFD], # Groups 1.3 p.21
0x0005: [0,1,2,3,4,5,0xFFFC,0xFFFD], # Scenes 1.4 p.30 - no writable
- 0x0006: [0,0xFFFC,0xFFFD] # On/Off 1.5 p.48
+ 0x0006: [0,0xFFFC,0xFFFD], # On/Off 1.5 p.48
+ 0x0008: [0,15,17,0xFFFC,0xFFFD] # Level Control 1.6 p.57
}
static var TYPES = { 0x010A: 2 } # On/Off Light
@@ -124,6 +125,20 @@ class Matter_Plugin_OnOff : Matter_Plugin
return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
end
+ # ====================================================================================================
+ elif cluster == 0x0008 # ========== Level Control 1.6 p.57 ==========
+ if attribute == 0x0000 # ---------- CurrentLevel / u1 ----------
+ return TLV.create_TLV(TLV.U1, 0x88)
+ elif attribute == 0x000F # ---------- Options / map8 ----------
+ return TLV.create_TLV(TLV.U1, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0x0010 # ---------- OnLevel / u1 ----------
+ return TLV.create_TLV(TLV.U1, 1) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
+ end
+
end
# no match found, return that the attribute is unsupported end
end
@@ -179,6 +194,25 @@ class Matter_Plugin_OnOff : Matter_Plugin
self.onoff = !self.onoff
return true
end
+ # ====================================================================================================
+ elif cluster == 0x0008 # ========== Level Control 1.6 p.57 ==========
+ if command == 0x0000 # ---------- MoveToLevel ----------
+ return true
+ elif command == 0x0001 # ---------- Move ----------
+ return true
+ elif command == 0x0002 # ---------- Step ----------
+ return true
+ elif command == 0x0003 # ---------- Stop ----------
+ return true
+ elif command == 0x0004 # ---------- MoveToLevelWithOnOff ----------
+ return true
+ elif command == 0x0005 # ---------- MoveWithOnOff ----------
+ return true
+ elif command == 0x0006 # ---------- StepWithOnOff ----------
+ return true
+ elif command == 0x0007 # ---------- StopWithOnOff ----------
+ return true
+ end
end
end
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
index 5dd27e2f4..a2efa33c8 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
@@ -29,7 +29,7 @@ class Matter_Plugin_Root : Matter_Plugin
static var CLUSTERS = {
0x001D: [0,1,2,3], # Descriptor Cluster 9.5 p.453
0x001F: [0,2,3,4], # Access Control Cluster, p.461
- 0x0028: [0,1,2,3,4,5,6,7,8,9,0x12],# Basic Information Cluster cluster 11.1 p.565
+ 0x0028: [0,1,2,3,4,5,6,7,8,9,0x12,0x13],# Basic Information Cluster cluster 11.1 p.565
# 0x002A: [0,1,2,3], # OTA Software Update Requestor Cluster Definition 11.19.7 p.762
0x002B: [0,1], # Localization Configuration Cluster 11.3 p.580
0x002C: [0,1,2], # Time Format Localization Cluster 11.4 p.581
@@ -43,7 +43,7 @@ class Matter_Plugin_Root : Matter_Plugin
0x003E: [0,1,2,3,4,5], # Node Operational Credentials Cluster 11.17 p.704
0x003F: [] # Group Key Management Cluster 11.2 p.572
}
- static var TYPES = { 0x0016: 1 } # On/Off Light
+ static var TYPES = { 0x0016: 1 } # Root node
#############################################################
# Constructor
@@ -216,6 +216,11 @@ class Matter_Plugin_Root : Matter_Plugin
return TLV.create_TLV(TLV.UTF1, tasmota.cmd("Status 2")['StatusFWR']['Version'])
elif attribute == 0x0012 # ---------- UniqueID / string 32 max ----------
return TLV.create_TLV(TLV.UTF1, tasmota.wifi().find("mac", ""))
+ elif attribute == 0x0013 # ---------- CapabilityMinima / CapabilityMinimaStruct ----------
+ var cps = TLV.Matter_TLV_struct()
+ cps.add_TLV(0, TLV.U2, 3) # CaseSessionsPerFabric = 3
+ cps.add_TLV(1, TLV.U2, 3) # SubscriptionsPerFabric = 5
+ return cps
end
# ====================================================================================================
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h
index 17d55b2a0..df79d9084 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h
@@ -19,7 +19,7 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[47]) { /* constants */
+ ( &(const bvalue[48]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(opcode),
/* K2 */ be_nested_str_weak(local_session_id),
@@ -45,32 +45,33 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
/* K22 */ be_nested_str_weak(device),
/* K23 */ be_nested_str_weak(sessions),
/* K24 */ be_nested_str_weak(gen_local_session_id),
- /* K25 */ be_nested_str_weak(PBKDFParamResponse),
- /* K26 */ be_nested_str_weak(initiatorRandom),
- /* K27 */ be_nested_str_weak(responderRandom),
- /* K28 */ be_nested_str_weak(random),
- /* K29 */ be_nested_str_weak(responderSessionId),
- /* K30 */ be_nested_str_weak(pbkdf_parameters_salt),
- /* K31 */ be_nested_str_weak(salt),
- /* K32 */ be_nested_str_weak(pbkdf_parameters_iterations),
- /* K33 */ be_nested_str_weak(iterations),
- /* K34 */ be_nested_str_weak(tasmota),
- /* K35 */ be_nested_str_weak(log),
- /* K36 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_X3A_X20),
- /* K37 */ be_nested_str_weak(inspect),
- /* K38 */ be_nested_str_weak(encode),
- /* K39 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_raw_X3A_X20),
- /* K40 */ be_nested_str_weak(tohex),
- /* K41 */ be_nested_str_weak(build_response),
- /* K42 */ be_nested_str_weak(responder),
- /* K43 */ be_nested_str_weak(send_response),
- /* K44 */ be_nested_str_weak(remote_ip),
- /* K45 */ be_nested_str_weak(remote_port),
- /* K46 */ be_nested_str_weak(message_counter),
+ /* K25 */ be_nested_str_weak(tasmota),
+ /* K26 */ be_nested_str_weak(log),
+ /* K27 */ be_nested_str_weak(MTR_X3A_X20Loc_session_X3D),
+ /* K28 */ be_nested_str_weak(PBKDFParamResponse),
+ /* K29 */ be_nested_str_weak(initiatorRandom),
+ /* K30 */ be_nested_str_weak(responderRandom),
+ /* K31 */ be_nested_str_weak(random),
+ /* K32 */ be_nested_str_weak(responderSessionId),
+ /* K33 */ be_nested_str_weak(pbkdf_parameters_salt),
+ /* K34 */ be_nested_str_weak(salt),
+ /* K35 */ be_nested_str_weak(pbkdf_parameters_iterations),
+ /* K36 */ be_nested_str_weak(iterations),
+ /* K37 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_X3A_X20),
+ /* K38 */ be_nested_str_weak(inspect),
+ /* K39 */ be_nested_str_weak(encode),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_raw_X3A_X20),
+ /* K41 */ be_nested_str_weak(tohex),
+ /* K42 */ be_nested_str_weak(build_response),
+ /* K43 */ be_nested_str_weak(responder),
+ /* K44 */ be_nested_str_weak(send_response),
+ /* K45 */ be_nested_str_weak(remote_ip),
+ /* K46 */ be_nested_str_weak(remote_port),
+ /* K47 */ be_nested_str_weak(message_counter),
}),
be_str_weak(parse_PBKDFParamRequest),
&be_const_str_solidified,
- ( &(const binstruction[94]) { /* code */
+ ( &(const binstruction[101]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x880C0301, // 0001 GETMBR R3 R1 K1
0x5412001F, // 0002 LDINT R4 32
@@ -112,59 +113,66 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
0x8C100918, // 0026 GETMET R4 R4 K24
0x7C100200, // 0027 CALL R4 1
0x90022A04, // 0028 SETMBR R0 K21 R4
- 0xB8120E00, // 0029 GETNGBL R4 K7
- 0x8C100919, // 002A GETMET R4 R4 K25
- 0x7C100200, // 002B CALL R4 1
- 0x8814071A, // 002C GETMBR R5 R3 K26
- 0x90123405, // 002D SETMBR R4 K26 R5
- 0x8C14051C, // 002E GETMET R5 R2 K28
- 0x541E001F, // 002F LDINT R7 32
- 0x7C140400, // 0030 CALL R5 2
- 0x90123605, // 0031 SETMBR R4 K27 R5
- 0x88140115, // 0032 GETMBR R5 R0 K21
- 0x90123A05, // 0033 SETMBR R4 K29 R5
- 0x88140116, // 0034 GETMBR R5 R0 K22
- 0x88140B1F, // 0035 GETMBR R5 R5 K31
- 0x90123C05, // 0036 SETMBR R4 K30 R5
- 0x88140116, // 0037 GETMBR R5 R0 K22
- 0x88140B21, // 0038 GETMBR R5 R5 K33
- 0x90124005, // 0039 SETMBR R4 K32 R5
- 0xB8164400, // 003A GETNGBL R5 K34
- 0x8C140B23, // 003B GETMET R5 R5 K35
- 0x601C0008, // 003C GETGBL R7 G8
- 0xB8220E00, // 003D GETNGBL R8 K7
- 0x8C201125, // 003E GETMET R8 R8 K37
- 0x5C280800, // 003F MOVE R10 R4
- 0x7C200400, // 0040 CALL R8 2
- 0x7C1C0200, // 0041 CALL R7 1
- 0x001E4807, // 0042 ADD R7 K36 R7
- 0x54220003, // 0043 LDINT R8 4
- 0x7C140600, // 0044 CALL R5 3
- 0x8C140926, // 0045 GETMET R5 R4 K38
- 0x7C140200, // 0046 CALL R5 1
- 0xB81A4400, // 0047 GETNGBL R6 K34
- 0x8C180D23, // 0048 GETMET R6 R6 K35
- 0x8C200B28, // 0049 GETMET R8 R5 K40
- 0x7C200200, // 004A CALL R8 1
- 0x00224E08, // 004B ADD R8 K39 R8
- 0x54260003, // 004C LDINT R9 4
- 0x7C180600, // 004D CALL R6 3
- 0x90023205, // 004E SETMBR R0 K25 R5
- 0x8C180329, // 004F GETMET R6 R1 K41
- 0x54220020, // 0050 LDINT R8 33
- 0x50240200, // 0051 LDBOOL R9 1 0
- 0x7C180600, // 0052 CALL R6 3
- 0x8C1C0D26, // 0053 GETMET R7 R6 K38
- 0x5C240A00, // 0054 MOVE R9 R5
- 0x7C1C0400, // 0055 CALL R7 2
- 0x8820012A, // 0056 GETMBR R8 R0 K42
- 0x8C20112B, // 0057 GETMET R8 R8 K43
- 0x5C280E00, // 0058 MOVE R10 R7
- 0x882C032C, // 0059 GETMBR R11 R1 K44
- 0x8830032D, // 005A GETMBR R12 R1 K45
- 0x88340D2E, // 005B GETMBR R13 R6 K46
- 0x7C200A00, // 005C CALL R8 5
- 0x80000000, // 005D RET 0
+ 0xB8123200, // 0029 GETNGBL R4 K25
+ 0x8C10091A, // 002A GETMET R4 R4 K26
+ 0x60180008, // 002B GETGBL R6 G8
+ 0x881C0115, // 002C GETMBR R7 R0 K21
+ 0x7C180200, // 002D CALL R6 1
+ 0x001A3606, // 002E ADD R6 K27 R6
+ 0x7C100400, // 002F CALL R4 2
+ 0xB8120E00, // 0030 GETNGBL R4 K7
+ 0x8C10091C, // 0031 GETMET R4 R4 K28
+ 0x7C100200, // 0032 CALL R4 1
+ 0x8814071D, // 0033 GETMBR R5 R3 K29
+ 0x90123A05, // 0034 SETMBR R4 K29 R5
+ 0x8C14051F, // 0035 GETMET R5 R2 K31
+ 0x541E001F, // 0036 LDINT R7 32
+ 0x7C140400, // 0037 CALL R5 2
+ 0x90123C05, // 0038 SETMBR R4 K30 R5
+ 0x88140115, // 0039 GETMBR R5 R0 K21
+ 0x90124005, // 003A SETMBR R4 K32 R5
+ 0x88140116, // 003B GETMBR R5 R0 K22
+ 0x88140B22, // 003C GETMBR R5 R5 K34
+ 0x90124205, // 003D SETMBR R4 K33 R5
+ 0x88140116, // 003E GETMBR R5 R0 K22
+ 0x88140B24, // 003F GETMBR R5 R5 K36
+ 0x90124605, // 0040 SETMBR R4 K35 R5
+ 0xB8163200, // 0041 GETNGBL R5 K25
+ 0x8C140B1A, // 0042 GETMET R5 R5 K26
+ 0x601C0008, // 0043 GETGBL R7 G8
+ 0xB8220E00, // 0044 GETNGBL R8 K7
+ 0x8C201126, // 0045 GETMET R8 R8 K38
+ 0x5C280800, // 0046 MOVE R10 R4
+ 0x7C200400, // 0047 CALL R8 2
+ 0x7C1C0200, // 0048 CALL R7 1
+ 0x001E4A07, // 0049 ADD R7 K37 R7
+ 0x54220003, // 004A LDINT R8 4
+ 0x7C140600, // 004B CALL R5 3
+ 0x8C140927, // 004C GETMET R5 R4 K39
+ 0x7C140200, // 004D CALL R5 1
+ 0xB81A3200, // 004E GETNGBL R6 K25
+ 0x8C180D1A, // 004F GETMET R6 R6 K26
+ 0x8C200B29, // 0050 GETMET R8 R5 K41
+ 0x7C200200, // 0051 CALL R8 1
+ 0x00225008, // 0052 ADD R8 K40 R8
+ 0x54260003, // 0053 LDINT R9 4
+ 0x7C180600, // 0054 CALL R6 3
+ 0x90023805, // 0055 SETMBR R0 K28 R5
+ 0x8C18032A, // 0056 GETMET R6 R1 K42
+ 0x54220020, // 0057 LDINT R8 33
+ 0x50240200, // 0058 LDBOOL R9 1 0
+ 0x7C180600, // 0059 CALL R6 3
+ 0x8C1C0D27, // 005A GETMET R7 R6 K39
+ 0x5C240A00, // 005B MOVE R9 R5
+ 0x7C1C0400, // 005C CALL R7 2
+ 0x8820012B, // 005D GETMBR R8 R0 K43
+ 0x8C20112C, // 005E GETMET R8 R8 K44
+ 0x5C280E00, // 005F MOVE R10 R7
+ 0x882C032D, // 0060 GETMBR R11 R1 K45
+ 0x8830032E, // 0061 GETMBR R12 R1 K46
+ 0x88340D2F, // 0062 GETMBR R13 R6 K47
+ 0x7C200A00, // 0063 CALL R8 5
+ 0x80000000, // 0064 RET 0
})
)
);
@@ -1348,7 +1356,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[118]) { /* constants */
+ ( &(const bvalue[119]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(opcode),
/* K2 */ be_nested_str_weak(local_session_id),
@@ -1384,93 +1392,94 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
/* K32 */ be_nested_str_weak(_future_local_session_id),
/* K33 */ be_nested_str_weak(gen_local_session_id),
/* K34 */ be_nested_str_weak(future_local_session_id),
- /* K35 */ be_nested_str_weak(shared_secret),
- /* K36 */ be_nested_str_weak(fromstring),
- /* K37 */ be_nested_str_weak(Sigma1_Resume),
- /* K38 */ be_nested_str_weak(HKDF_SHA256),
- /* K39 */ be_nested_str_weak(derive),
- /* K40 */ be_nested_str_weak(NCASE_SigmaR1),
- /* K41 */ be_const_int(2147483647),
- /* K42 */ be_nested_str_weak(AES_CCM),
- /* K43 */ be_nested_str_weak(decrypt),
- /* K44 */ be_nested_str_weak(tag),
- /* K45 */ be_nested_str_weak(tasmota),
- /* K46 */ be_nested_str_weak(log),
- /* K47 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K48 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s1rk_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K49 */ be_nested_str_weak(tohex),
- /* K50 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K51 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20Resume1MICPayload_X20_X3D_X20),
- /* K52 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20decrypted_tag_X20_X20_X20_X20_X20_X3D_X20),
- /* K53 */ be_nested_str_weak(resumption_id),
- /* K54 */ be_nested_str_weak(random),
- /* K55 */ be_nested_str_weak(Sigma2_Resume),
- /* K56 */ be_nested_str_weak(NCASE_SigmaR2),
- /* K57 */ be_nested_str_weak(Sigma2Resume),
- /* K58 */ be_nested_str_weak(responderSessionID),
- /* K59 */ be_nested_str_weak(sigma2ResumeMIC),
- /* K60 */ be_nested_str_weak(SessionResumptionKeys),
- /* K61 */ be_nested_str_weak(rtc),
- /* K62 */ be_nested_str_weak(utc),
- /* K63 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K64 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K65 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K66 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K67 */ be_nested_str_weak(encode),
- /* K68 */ be_nested_str_weak(_Msg1),
- /* K69 */ be_nested_str_weak(MTR_X3A_X20sigma2resume_raw_X3A_X20),
- /* K70 */ be_nested_str_weak(build_response),
- /* K71 */ be_nested_str_weak(responder),
- /* K72 */ be_nested_str_weak(send_response),
- /* K73 */ be_nested_str_weak(remote_ip),
- /* K74 */ be_nested_str_weak(remote_port),
- /* K75 */ be_nested_str_weak(message_counter),
- /* K76 */ be_nested_str_weak(set_keys),
- /* K77 */ be_nested_str_weak(set_persist),
- /* K78 */ be_nested_str_weak(set_no_expiration),
- /* K79 */ be_nested_str_weak(save),
- /* K80 */ be_nested_str_weak(ResponderEph_priv),
- /* K81 */ be_nested_str_weak(ResponderEph_pub),
- /* K82 */ be_nested_str_weak(EC_P256),
- /* K83 */ be_nested_str_weak(public_key),
- /* K84 */ be_nested_str_weak(shared_key),
- /* K85 */ be_nested_str_weak(TLV),
- /* K86 */ be_nested_str_weak(Matter_TLV_struct),
- /* K87 */ be_nested_str_weak(add_TLV),
- /* K88 */ be_const_int(1),
- /* K89 */ be_nested_str_weak(B2),
- /* K90 */ be_nested_str_weak(get_noc),
- /* K91 */ be_const_int(2),
- /* K92 */ be_nested_str_weak(get_icac),
- /* K93 */ be_const_int(3),
- /* K94 */ be_nested_str_weak(ecdsa_sign_sha256),
- /* K95 */ be_nested_str_weak(get_pk),
- /* K96 */ be_nested_str_weak(Msg1),
- /* K97 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20MSG1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K98 */ be_nested_str_weak(SHA256),
- /* K99 */ be_nested_str_weak(update),
- /* K100 */ be_nested_str_weak(out),
- /* K101 */ be_nested_str_weak(S2K_Info),
- /* K102 */ be_nested_str_weak(get_ipk_group_key),
- /* K103 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20SharedSecret_X20_X20_X3D_X20),
- /* K104 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K105 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K106 */ be_nested_str_weak(TBEData2_Nonce),
- /* K107 */ be_nested_str_weak(encrypt),
- /* K108 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Enc_X20_X20_X20_X3D_X20),
- /* K109 */ be_nested_str_weak(Sigma2),
- /* K110 */ be_nested_str_weak(responderRandom),
- /* K111 */ be_nested_str_weak(responderSessionId),
- /* K112 */ be_nested_str_weak(responderEphPubKey),
- /* K113 */ be_nested_str_weak(encrypted2),
- /* K114 */ be_nested_str_weak(MTR_X3A_X20sigma2_X3A_X20),
- /* K115 */ be_nested_str_weak(inspect),
- /* K116 */ be_nested_str_weak(_Msg2),
- /* K117 */ be_nested_str_weak(MTR_X3A_X20sigma2_raw_X3A_X20),
+ /* K35 */ be_nested_str_weak(tasmota),
+ /* K36 */ be_nested_str_weak(log),
+ /* K37 */ be_nested_str_weak(MTR_X3A_X20Loc_session_X3D),
+ /* K38 */ be_nested_str_weak(shared_secret),
+ /* K39 */ be_nested_str_weak(fromstring),
+ /* K40 */ be_nested_str_weak(Sigma1_Resume),
+ /* K41 */ be_nested_str_weak(HKDF_SHA256),
+ /* K42 */ be_nested_str_weak(derive),
+ /* K43 */ be_nested_str_weak(NCASE_SigmaR1),
+ /* K44 */ be_const_int(2147483647),
+ /* K45 */ be_nested_str_weak(AES_CCM),
+ /* K46 */ be_nested_str_weak(decrypt),
+ /* K47 */ be_nested_str_weak(tag),
+ /* K48 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K49 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s1rk_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K50 */ be_nested_str_weak(tohex),
+ /* K51 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K52 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20Resume1MICPayload_X20_X3D_X20),
+ /* K53 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20decrypted_tag_X20_X20_X20_X20_X20_X3D_X20),
+ /* K54 */ be_nested_str_weak(resumption_id),
+ /* K55 */ be_nested_str_weak(random),
+ /* K56 */ be_nested_str_weak(Sigma2_Resume),
+ /* K57 */ be_nested_str_weak(NCASE_SigmaR2),
+ /* K58 */ be_nested_str_weak(Sigma2Resume),
+ /* K59 */ be_nested_str_weak(responderSessionID),
+ /* K60 */ be_nested_str_weak(sigma2ResumeMIC),
+ /* K61 */ be_nested_str_weak(SessionResumptionKeys),
+ /* K62 */ be_nested_str_weak(rtc),
+ /* K63 */ be_nested_str_weak(utc),
+ /* K64 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K65 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
+ /* K66 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
+ /* K67 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K68 */ be_nested_str_weak(encode),
+ /* K69 */ be_nested_str_weak(_Msg1),
+ /* K70 */ be_nested_str_weak(MTR_X3A_X20sigma2resume_raw_X3A_X20),
+ /* K71 */ be_nested_str_weak(build_response),
+ /* K72 */ be_nested_str_weak(responder),
+ /* K73 */ be_nested_str_weak(send_response),
+ /* K74 */ be_nested_str_weak(remote_ip),
+ /* K75 */ be_nested_str_weak(remote_port),
+ /* K76 */ be_nested_str_weak(message_counter),
+ /* K77 */ be_nested_str_weak(set_keys),
+ /* K78 */ be_nested_str_weak(set_persist),
+ /* K79 */ be_nested_str_weak(set_no_expiration),
+ /* K80 */ be_nested_str_weak(save),
+ /* K81 */ be_nested_str_weak(ResponderEph_priv),
+ /* K82 */ be_nested_str_weak(ResponderEph_pub),
+ /* K83 */ be_nested_str_weak(EC_P256),
+ /* K84 */ be_nested_str_weak(public_key),
+ /* K85 */ be_nested_str_weak(shared_key),
+ /* K86 */ be_nested_str_weak(TLV),
+ /* K87 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K88 */ be_nested_str_weak(add_TLV),
+ /* K89 */ be_const_int(1),
+ /* K90 */ be_nested_str_weak(B2),
+ /* K91 */ be_nested_str_weak(get_noc),
+ /* K92 */ be_const_int(2),
+ /* K93 */ be_nested_str_weak(get_icac),
+ /* K94 */ be_const_int(3),
+ /* K95 */ be_nested_str_weak(ecdsa_sign_sha256),
+ /* K96 */ be_nested_str_weak(get_pk),
+ /* K97 */ be_nested_str_weak(Msg1),
+ /* K98 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20MSG1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K99 */ be_nested_str_weak(SHA256),
+ /* K100 */ be_nested_str_weak(update),
+ /* K101 */ be_nested_str_weak(out),
+ /* K102 */ be_nested_str_weak(S2K_Info),
+ /* K103 */ be_nested_str_weak(get_ipk_group_key),
+ /* K104 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20SharedSecret_X20_X20_X3D_X20),
+ /* K105 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K106 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K107 */ be_nested_str_weak(TBEData2_Nonce),
+ /* K108 */ be_nested_str_weak(encrypt),
+ /* K109 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Enc_X20_X20_X20_X3D_X20),
+ /* K110 */ be_nested_str_weak(Sigma2),
+ /* K111 */ be_nested_str_weak(responderRandom),
+ /* K112 */ be_nested_str_weak(responderSessionId),
+ /* K113 */ be_nested_str_weak(responderEphPubKey),
+ /* K114 */ be_nested_str_weak(encrypted2),
+ /* K115 */ be_nested_str_weak(MTR_X3A_X20sigma2_X3A_X20),
+ /* K116 */ be_nested_str_weak(inspect),
+ /* K117 */ be_nested_str_weak(_Msg2),
+ /* K118 */ be_nested_str_weak(MTR_X3A_X20sigma2_raw_X3A_X20),
}),
be_str_weak(parse_Sigma1),
&be_const_str_solidified,
- ( &(const binstruction[562]) { /* code */
+ ( &(const binstruction[569]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x880C0301, // 0001 GETMBR R3 R1 K1
0x5412002F, // 0002 LDINT R4 48
@@ -1544,495 +1553,502 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0x90164006, // 0046 SETMBR R5 K32 R6
0x88180B20, // 0047 GETMBR R6 R5 K32
0x90024406, // 0048 SETMBR R0 K34 R6
- 0x781200EC, // 0049 JMPF R4 #0137
- 0x88180B23, // 004A GETMBR R6 R5 K35
- 0x4C1C0000, // 004B LDNIL R7
- 0x20180C07, // 004C NE R6 R6 R7
- 0x781A00E8, // 004D JMPF R6 #0137
- 0x88180715, // 004E GETMBR R6 R3 K21
- 0x881C070E, // 004F GETMBR R7 R3 K14
- 0x00180C07, // 0050 ADD R6 R6 R7
- 0x601C0015, // 0051 GETGBL R7 G21
- 0x7C1C0000, // 0052 CALL R7 0
- 0x8C1C0F24, // 0053 GETMET R7 R7 K36
- 0x58240025, // 0054 LDCONST R9 K37
- 0x7C1C0400, // 0055 CALL R7 2
- 0x8C200526, // 0056 GETMET R8 R2 K38
- 0x7C200200, // 0057 CALL R8 1
- 0x8C201127, // 0058 GETMET R8 R8 K39
- 0x88280B23, // 0059 GETMBR R10 R5 K35
- 0x5C2C0C00, // 005A MOVE R11 R6
- 0x5C300E00, // 005B MOVE R12 R7
- 0x5436000F, // 005C LDINT R13 16
- 0x7C200A00, // 005D CALL R8 5
- 0x60240015, // 005E GETGBL R9 G21
- 0x7C240000, // 005F CALL R9 0
- 0x8C241324, // 0060 GETMET R9 R9 K36
- 0x582C0028, // 0061 LDCONST R11 K40
- 0x7C240400, // 0062 CALL R9 2
- 0x5429FFEE, // 0063 LDINT R10 -17
- 0x402A060A, // 0064 CONNECT R10 K3 R10
- 0x882C070F, // 0065 GETMBR R11 R3 K15
- 0x9428160A, // 0066 GETIDX R10 R11 R10
- 0x5431FFEF, // 0067 LDINT R12 -16
- 0x40301929, // 0068 CONNECT R12 R12 K41
- 0x8834070F, // 0069 GETMBR R13 R3 K15
- 0x942C1A0C, // 006A GETIDX R11 R13 R12
- 0x8C38052A, // 006B GETMET R14 R2 K42
- 0x5C401000, // 006C MOVE R16 R8
- 0x5C441200, // 006D MOVE R17 R9
- 0x60480015, // 006E GETGBL R18 G21
- 0x7C480000, // 006F CALL R18 0
- 0x604C000C, // 0070 GETGBL R19 G12
- 0x5C501400, // 0071 MOVE R20 R10
- 0x7C4C0200, // 0072 CALL R19 1
- 0x5452000F, // 0073 LDINT R20 16
- 0x7C380C00, // 0074 CALL R14 6
- 0x5C301C00, // 0075 MOVE R12 R14
- 0x8C38192B, // 0076 GETMET R14 R12 K43
- 0x5C401400, // 0077 MOVE R16 R10
- 0x7C380400, // 0078 CALL R14 2
- 0x5C341C00, // 0079 MOVE R13 R14
- 0x8C38192C, // 007A GETMET R14 R12 K44
- 0x7C380200, // 007B CALL R14 1
- 0xB83E5A00, // 007C GETNGBL R15 K45
- 0x8C3C1F2E, // 007D GETMET R15 R15 K46
- 0x5844002F, // 007E LDCONST R17 K47
- 0x544A0003, // 007F LDINT R18 4
- 0x7C3C0600, // 0080 CALL R15 3
- 0xB83E5A00, // 0081 GETNGBL R15 K45
- 0x8C3C1F2E, // 0082 GETMET R15 R15 K46
- 0x8C441131, // 0083 GETMET R17 R8 K49
- 0x7C440200, // 0084 CALL R17 1
- 0x00466011, // 0085 ADD R17 K48 R17
+ 0xB81A4600, // 0049 GETNGBL R6 K35
+ 0x8C180D24, // 004A GETMET R6 R6 K36
+ 0x60200008, // 004B GETGBL R8 G8
+ 0x88240122, // 004C GETMBR R9 R0 K34
+ 0x7C200200, // 004D CALL R8 1
+ 0x00224A08, // 004E ADD R8 K37 R8
+ 0x7C180400, // 004F CALL R6 2
+ 0x781200EC, // 0050 JMPF R4 #013E
+ 0x88180B26, // 0051 GETMBR R6 R5 K38
+ 0x4C1C0000, // 0052 LDNIL R7
+ 0x20180C07, // 0053 NE R6 R6 R7
+ 0x781A00E8, // 0054 JMPF R6 #013E
+ 0x88180715, // 0055 GETMBR R6 R3 K21
+ 0x881C070E, // 0056 GETMBR R7 R3 K14
+ 0x00180C07, // 0057 ADD R6 R6 R7
+ 0x601C0015, // 0058 GETGBL R7 G21
+ 0x7C1C0000, // 0059 CALL R7 0
+ 0x8C1C0F27, // 005A GETMET R7 R7 K39
+ 0x58240028, // 005B LDCONST R9 K40
+ 0x7C1C0400, // 005C CALL R7 2
+ 0x8C200529, // 005D GETMET R8 R2 K41
+ 0x7C200200, // 005E CALL R8 1
+ 0x8C20112A, // 005F GETMET R8 R8 K42
+ 0x88280B26, // 0060 GETMBR R10 R5 K38
+ 0x5C2C0C00, // 0061 MOVE R11 R6
+ 0x5C300E00, // 0062 MOVE R12 R7
+ 0x5436000F, // 0063 LDINT R13 16
+ 0x7C200A00, // 0064 CALL R8 5
+ 0x60240015, // 0065 GETGBL R9 G21
+ 0x7C240000, // 0066 CALL R9 0
+ 0x8C241327, // 0067 GETMET R9 R9 K39
+ 0x582C002B, // 0068 LDCONST R11 K43
+ 0x7C240400, // 0069 CALL R9 2
+ 0x5429FFEE, // 006A LDINT R10 -17
+ 0x402A060A, // 006B CONNECT R10 K3 R10
+ 0x882C070F, // 006C GETMBR R11 R3 K15
+ 0x9428160A, // 006D GETIDX R10 R11 R10
+ 0x5431FFEF, // 006E LDINT R12 -16
+ 0x4030192C, // 006F CONNECT R12 R12 K44
+ 0x8834070F, // 0070 GETMBR R13 R3 K15
+ 0x942C1A0C, // 0071 GETIDX R11 R13 R12
+ 0x8C38052D, // 0072 GETMET R14 R2 K45
+ 0x5C401000, // 0073 MOVE R16 R8
+ 0x5C441200, // 0074 MOVE R17 R9
+ 0x60480015, // 0075 GETGBL R18 G21
+ 0x7C480000, // 0076 CALL R18 0
+ 0x604C000C, // 0077 GETGBL R19 G12
+ 0x5C501400, // 0078 MOVE R20 R10
+ 0x7C4C0200, // 0079 CALL R19 1
+ 0x5452000F, // 007A LDINT R20 16
+ 0x7C380C00, // 007B CALL R14 6
+ 0x5C301C00, // 007C MOVE R12 R14
+ 0x8C38192E, // 007D GETMET R14 R12 K46
+ 0x5C401400, // 007E MOVE R16 R10
+ 0x7C380400, // 007F CALL R14 2
+ 0x5C341C00, // 0080 MOVE R13 R14
+ 0x8C38192F, // 0081 GETMET R14 R12 K47
+ 0x7C380200, // 0082 CALL R14 1
+ 0xB83E4600, // 0083 GETNGBL R15 K35
+ 0x8C3C1F24, // 0084 GETMET R15 R15 K36
+ 0x58440030, // 0085 LDCONST R17 K48
0x544A0003, // 0086 LDINT R18 4
0x7C3C0600, // 0087 CALL R15 3
- 0xB83E5A00, // 0088 GETNGBL R15 K45
- 0x8C3C1F2E, // 0089 GETMET R15 R15 K46
- 0x8C441731, // 008A GETMET R17 R11 K49
+ 0xB83E4600, // 0088 GETNGBL R15 K35
+ 0x8C3C1F24, // 0089 GETMET R15 R15 K36
+ 0x8C441132, // 008A GETMET R17 R8 K50
0x7C440200, // 008B CALL R17 1
- 0x00466411, // 008C ADD R17 K50 R17
+ 0x00466211, // 008C ADD R17 K49 R17
0x544A0003, // 008D LDINT R18 4
0x7C3C0600, // 008E CALL R15 3
- 0xB83E5A00, // 008F GETNGBL R15 K45
- 0x8C3C1F2E, // 0090 GETMET R15 R15 K46
- 0x8C441B31, // 0091 GETMET R17 R13 K49
+ 0xB83E4600, // 008F GETNGBL R15 K35
+ 0x8C3C1F24, // 0090 GETMET R15 R15 K36
+ 0x8C441732, // 0091 GETMET R17 R11 K50
0x7C440200, // 0092 CALL R17 1
0x00466611, // 0093 ADD R17 K51 R17
0x544A0003, // 0094 LDINT R18 4
0x7C3C0600, // 0095 CALL R15 3
- 0xB83E5A00, // 0096 GETNGBL R15 K45
- 0x8C3C1F2E, // 0097 GETMET R15 R15 K46
- 0x8C441D31, // 0098 GETMET R17 R14 K49
+ 0xB83E4600, // 0096 GETNGBL R15 K35
+ 0x8C3C1F24, // 0097 GETMET R15 R15 K36
+ 0x8C441B32, // 0098 GETMET R17 R13 K50
0x7C440200, // 0099 CALL R17 1
0x00466811, // 009A ADD R17 K52 R17
0x544A0003, // 009B LDINT R18 4
0x7C3C0600, // 009C CALL R15 3
- 0xB83E5A00, // 009D GETNGBL R15 K45
- 0x8C3C1F2E, // 009E GETMET R15 R15 K46
- 0x5844002F, // 009F LDCONST R17 K47
- 0x544A0003, // 00A0 LDINT R18 4
- 0x7C3C0600, // 00A1 CALL R15 3
- 0x1C3C160E, // 00A2 EQ R15 R11 R14
- 0x783E0090, // 00A3 JMPF R15 #0135
- 0x8C3C0536, // 00A4 GETMET R15 R2 K54
- 0x5446000F, // 00A5 LDINT R17 16
- 0x7C3C0400, // 00A6 CALL R15 2
- 0x90166A0F, // 00A7 SETMBR R5 K53 R15
- 0x603C0015, // 00A8 GETGBL R15 G21
- 0x7C3C0000, // 00A9 CALL R15 0
- 0x8C3C1F24, // 00AA GETMET R15 R15 K36
- 0x58440037, // 00AB LDCONST R17 K55
- 0x7C3C0400, // 00AC CALL R15 2
- 0x88400B35, // 00AD GETMBR R16 R5 K53
- 0x003C1E10, // 00AE ADD R15 R15 R16
- 0x88400715, // 00AF GETMBR R16 R3 K21
- 0x8844070E, // 00B0 GETMBR R17 R3 K14
- 0x00402011, // 00B1 ADD R16 R16 R17
- 0x8C440526, // 00B2 GETMET R17 R2 K38
- 0x7C440200, // 00B3 CALL R17 1
- 0x8C442327, // 00B4 GETMET R17 R17 K39
- 0x884C0B23, // 00B5 GETMBR R19 R5 K35
- 0x5C502000, // 00B6 MOVE R20 R16
- 0x5C541E00, // 00B7 MOVE R21 R15
- 0x545A000F, // 00B8 LDINT R22 16
- 0x7C440A00, // 00B9 CALL R17 5
- 0x8C48052A, // 00BA GETMET R18 R2 K42
- 0x5C502200, // 00BB MOVE R20 R17
- 0x60540015, // 00BC GETGBL R21 G21
- 0x7C540000, // 00BD CALL R21 0
- 0x8C542B24, // 00BE GETMET R21 R21 K36
- 0x585C0038, // 00BF LDCONST R23 K56
- 0x7C540400, // 00C0 CALL R21 2
- 0x60580015, // 00C1 GETGBL R22 G21
- 0x7C580000, // 00C2 CALL R22 0
- 0x585C0003, // 00C3 LDCONST R23 K3
- 0x5462000F, // 00C4 LDINT R24 16
- 0x7C480C00, // 00C5 CALL R18 6
- 0x8C4C252C, // 00C6 GETMET R19 R18 K44
- 0x7C4C0200, // 00C7 CALL R19 1
- 0xB8520E00, // 00C8 GETNGBL R20 K7
- 0x8C502939, // 00C9 GETMET R20 R20 K57
- 0x7C500200, // 00CA CALL R20 1
- 0x88540B35, // 00CB GETMBR R21 R5 K53
- 0x90521C15, // 00CC SETMBR R20 K14 R21
- 0x88540B20, // 00CD GETMBR R21 R5 K32
- 0x90527415, // 00CE SETMBR R20 K58 R21
- 0x90527613, // 00CF SETMBR R20 K59 R19
- 0x8C540526, // 00D0 GETMET R21 R2 K38
- 0x7C540200, // 00D1 CALL R21 1
- 0x8C542B27, // 00D2 GETMET R21 R21 K39
- 0x885C0B23, // 00D3 GETMBR R23 R5 K35
- 0x88600715, // 00D4 GETMBR R24 R3 K21
- 0x8864070E, // 00D5 GETMBR R25 R3 K14
- 0x00603019, // 00D6 ADD R24 R24 R25
- 0x60640015, // 00D7 GETGBL R25 G21
- 0x7C640000, // 00D8 CALL R25 0
- 0x8C643324, // 00D9 GETMET R25 R25 K36
- 0x586C003C, // 00DA LDCONST R27 K60
- 0x7C640400, // 00DB CALL R25 2
- 0x546A002F, // 00DC LDINT R26 48
- 0x7C540A00, // 00DD CALL R21 5
- 0x545A000E, // 00DE LDINT R22 15
- 0x405A0616, // 00DF CONNECT R22 K3 R22
- 0x94582A16, // 00E0 GETIDX R22 R21 R22
- 0x545E000F, // 00E1 LDINT R23 16
- 0x5462001E, // 00E2 LDINT R24 31
- 0x405C2E18, // 00E3 CONNECT R23 R23 R24
- 0x945C2A17, // 00E4 GETIDX R23 R21 R23
- 0x5462001F, // 00E5 LDINT R24 32
- 0x5466002E, // 00E6 LDINT R25 47
- 0x40603019, // 00E7 CONNECT R24 R24 R25
- 0x94602A18, // 00E8 GETIDX R24 R21 R24
- 0xB8665A00, // 00E9 GETNGBL R25 K45
- 0x8C64333D, // 00EA GETMET R25 R25 K61
- 0x7C640200, // 00EB CALL R25 1
- 0x9464333E, // 00EC GETIDX R25 R25 K62
- 0xB86A5A00, // 00ED GETNGBL R26 K45
- 0x8C68352E, // 00EE GETMET R26 R26 K46
- 0x5870003F, // 00EF LDCONST R28 K63
- 0x54760003, // 00F0 LDINT R29 4
- 0x7C680600, // 00F1 CALL R26 3
- 0xB86A5A00, // 00F2 GETNGBL R26 K45
- 0x8C68352E, // 00F3 GETMET R26 R26 K46
- 0x8C702D31, // 00F4 GETMET R28 R22 K49
- 0x7C700200, // 00F5 CALL R28 1
- 0x0072801C, // 00F6 ADD R28 K64 R28
+ 0xB83E4600, // 009D GETNGBL R15 K35
+ 0x8C3C1F24, // 009E GETMET R15 R15 K36
+ 0x8C441D32, // 009F GETMET R17 R14 K50
+ 0x7C440200, // 00A0 CALL R17 1
+ 0x00466A11, // 00A1 ADD R17 K53 R17
+ 0x544A0003, // 00A2 LDINT R18 4
+ 0x7C3C0600, // 00A3 CALL R15 3
+ 0xB83E4600, // 00A4 GETNGBL R15 K35
+ 0x8C3C1F24, // 00A5 GETMET R15 R15 K36
+ 0x58440030, // 00A6 LDCONST R17 K48
+ 0x544A0003, // 00A7 LDINT R18 4
+ 0x7C3C0600, // 00A8 CALL R15 3
+ 0x1C3C160E, // 00A9 EQ R15 R11 R14
+ 0x783E0090, // 00AA JMPF R15 #013C
+ 0x8C3C0537, // 00AB GETMET R15 R2 K55
+ 0x5446000F, // 00AC LDINT R17 16
+ 0x7C3C0400, // 00AD CALL R15 2
+ 0x90166C0F, // 00AE SETMBR R5 K54 R15
+ 0x603C0015, // 00AF GETGBL R15 G21
+ 0x7C3C0000, // 00B0 CALL R15 0
+ 0x8C3C1F27, // 00B1 GETMET R15 R15 K39
+ 0x58440038, // 00B2 LDCONST R17 K56
+ 0x7C3C0400, // 00B3 CALL R15 2
+ 0x88400B36, // 00B4 GETMBR R16 R5 K54
+ 0x003C1E10, // 00B5 ADD R15 R15 R16
+ 0x88400715, // 00B6 GETMBR R16 R3 K21
+ 0x8844070E, // 00B7 GETMBR R17 R3 K14
+ 0x00402011, // 00B8 ADD R16 R16 R17
+ 0x8C440529, // 00B9 GETMET R17 R2 K41
+ 0x7C440200, // 00BA CALL R17 1
+ 0x8C44232A, // 00BB GETMET R17 R17 K42
+ 0x884C0B26, // 00BC GETMBR R19 R5 K38
+ 0x5C502000, // 00BD MOVE R20 R16
+ 0x5C541E00, // 00BE MOVE R21 R15
+ 0x545A000F, // 00BF LDINT R22 16
+ 0x7C440A00, // 00C0 CALL R17 5
+ 0x8C48052D, // 00C1 GETMET R18 R2 K45
+ 0x5C502200, // 00C2 MOVE R20 R17
+ 0x60540015, // 00C3 GETGBL R21 G21
+ 0x7C540000, // 00C4 CALL R21 0
+ 0x8C542B27, // 00C5 GETMET R21 R21 K39
+ 0x585C0039, // 00C6 LDCONST R23 K57
+ 0x7C540400, // 00C7 CALL R21 2
+ 0x60580015, // 00C8 GETGBL R22 G21
+ 0x7C580000, // 00C9 CALL R22 0
+ 0x585C0003, // 00CA LDCONST R23 K3
+ 0x5462000F, // 00CB LDINT R24 16
+ 0x7C480C00, // 00CC CALL R18 6
+ 0x8C4C252F, // 00CD GETMET R19 R18 K47
+ 0x7C4C0200, // 00CE CALL R19 1
+ 0xB8520E00, // 00CF GETNGBL R20 K7
+ 0x8C50293A, // 00D0 GETMET R20 R20 K58
+ 0x7C500200, // 00D1 CALL R20 1
+ 0x88540B36, // 00D2 GETMBR R21 R5 K54
+ 0x90521C15, // 00D3 SETMBR R20 K14 R21
+ 0x88540B20, // 00D4 GETMBR R21 R5 K32
+ 0x90527615, // 00D5 SETMBR R20 K59 R21
+ 0x90527813, // 00D6 SETMBR R20 K60 R19
+ 0x8C540529, // 00D7 GETMET R21 R2 K41
+ 0x7C540200, // 00D8 CALL R21 1
+ 0x8C542B2A, // 00D9 GETMET R21 R21 K42
+ 0x885C0B26, // 00DA GETMBR R23 R5 K38
+ 0x88600715, // 00DB GETMBR R24 R3 K21
+ 0x8864070E, // 00DC GETMBR R25 R3 K14
+ 0x00603019, // 00DD ADD R24 R24 R25
+ 0x60640015, // 00DE GETGBL R25 G21
+ 0x7C640000, // 00DF CALL R25 0
+ 0x8C643327, // 00E0 GETMET R25 R25 K39
+ 0x586C003D, // 00E1 LDCONST R27 K61
+ 0x7C640400, // 00E2 CALL R25 2
+ 0x546A002F, // 00E3 LDINT R26 48
+ 0x7C540A00, // 00E4 CALL R21 5
+ 0x545A000E, // 00E5 LDINT R22 15
+ 0x405A0616, // 00E6 CONNECT R22 K3 R22
+ 0x94582A16, // 00E7 GETIDX R22 R21 R22
+ 0x545E000F, // 00E8 LDINT R23 16
+ 0x5462001E, // 00E9 LDINT R24 31
+ 0x405C2E18, // 00EA CONNECT R23 R23 R24
+ 0x945C2A17, // 00EB GETIDX R23 R21 R23
+ 0x5462001F, // 00EC LDINT R24 32
+ 0x5466002E, // 00ED LDINT R25 47
+ 0x40603019, // 00EE CONNECT R24 R24 R25
+ 0x94602A18, // 00EF GETIDX R24 R21 R24
+ 0xB8664600, // 00F0 GETNGBL R25 K35
+ 0x8C64333E, // 00F1 GETMET R25 R25 K62
+ 0x7C640200, // 00F2 CALL R25 1
+ 0x9464333F, // 00F3 GETIDX R25 R25 K63
+ 0xB86A4600, // 00F4 GETNGBL R26 K35
+ 0x8C683524, // 00F5 GETMET R26 R26 K36
+ 0x58700040, // 00F6 LDCONST R28 K64
0x54760003, // 00F7 LDINT R29 4
0x7C680600, // 00F8 CALL R26 3
- 0xB86A5A00, // 00F9 GETNGBL R26 K45
- 0x8C68352E, // 00FA GETMET R26 R26 K46
- 0x8C702F31, // 00FB GETMET R28 R23 K49
+ 0xB86A4600, // 00F9 GETNGBL R26 K35
+ 0x8C683524, // 00FA GETMET R26 R26 K36
+ 0x8C702D32, // 00FB GETMET R28 R22 K50
0x7C700200, // 00FC CALL R28 1
0x0072821C, // 00FD ADD R28 K65 R28
0x54760003, // 00FE LDINT R29 4
0x7C680600, // 00FF CALL R26 3
- 0xB86A5A00, // 0100 GETNGBL R26 K45
- 0x8C68352E, // 0101 GETMET R26 R26 K46
- 0x8C703131, // 0102 GETMET R28 R24 K49
+ 0xB86A4600, // 0100 GETNGBL R26 K35
+ 0x8C683524, // 0101 GETMET R26 R26 K36
+ 0x8C702F32, // 0102 GETMET R28 R23 K50
0x7C700200, // 0103 CALL R28 1
0x0072841C, // 0104 ADD R28 K66 R28
0x54760003, // 0105 LDINT R29 4
0x7C680600, // 0106 CALL R26 3
- 0xB86A5A00, // 0107 GETNGBL R26 K45
- 0x8C68352E, // 0108 GETMET R26 R26 K46
- 0x5870003F, // 0109 LDCONST R28 K63
- 0x54760003, // 010A LDINT R29 4
- 0x7C680600, // 010B CALL R26 3
- 0x8C682943, // 010C GETMET R26 R20 K67
- 0x7C680200, // 010D CALL R26 1
- 0x4C6C0000, // 010E LDNIL R27
- 0x9016881B, // 010F SETMBR R5 K68 R27
- 0xB86E5A00, // 0110 GETNGBL R27 K45
- 0x8C6C372E, // 0111 GETMET R27 R27 K46
- 0x8C743531, // 0112 GETMET R29 R26 K49
- 0x7C740200, // 0113 CALL R29 1
- 0x00768A1D, // 0114 ADD R29 K69 R29
- 0x547A0003, // 0115 LDINT R30 4
- 0x7C6C0600, // 0116 CALL R27 3
- 0x8C6C0346, // 0117 GETMET R27 R1 K70
- 0x54760032, // 0118 LDINT R29 51
- 0x50780200, // 0119 LDBOOL R30 1 0
- 0x7C6C0600, // 011A CALL R27 3
- 0x8C703743, // 011B GETMET R28 R27 K67
- 0x5C783400, // 011C MOVE R30 R26
- 0x7C700400, // 011D CALL R28 2
- 0x88740147, // 011E GETMBR R29 R0 K71
- 0x8C743B48, // 011F GETMET R29 R29 K72
- 0x5C7C3800, // 0120 MOVE R31 R28
- 0x88800349, // 0121 GETMBR R32 R1 K73
- 0x8884034A, // 0122 GETMBR R33 R1 K74
- 0x8888374B, // 0123 GETMBR R34 R27 K75
- 0x7C740A00, // 0124 CALL R29 5
- 0x8C740B4C, // 0125 GETMET R29 R5 K76
- 0x5C7C2C00, // 0126 MOVE R31 R22
- 0x5C802E00, // 0127 MOVE R32 R23
- 0x5C843000, // 0128 MOVE R33 R24
- 0x5C883200, // 0129 MOVE R34 R25
- 0x7C740A00, // 012A CALL R29 5
- 0x8C740B4D, // 012B GETMET R29 R5 K77
- 0x507C0200, // 012C LDBOOL R31 1 0
- 0x7C740400, // 012D CALL R29 2
- 0x8C740B4E, // 012E GETMET R29 R5 K78
- 0x7C740200, // 012F CALL R29 1
- 0x8C740B4F, // 0130 GETMET R29 R5 K79
- 0x7C740200, // 0131 CALL R29 1
- 0x50740200, // 0132 LDBOOL R29 1 0
- 0x80043A00, // 0133 RET 1 R29
- 0x70020001, // 0134 JMP #0137
- 0x4C3C0000, // 0135 LDNIL R15
- 0x900E1C0F, // 0136 SETMBR R3 K14 R15
- 0x8818070E, // 0137 GETMBR R6 R3 K14
- 0x4C1C0000, // 0138 LDNIL R7
- 0x1C180C07, // 0139 EQ R6 R6 R7
- 0x741A0003, // 013A JMPT R6 #013F
- 0x8818070F, // 013B GETMBR R6 R3 K15
- 0x4C1C0000, // 013C LDNIL R7
- 0x1C180C07, // 013D EQ R6 R6 R7
- 0x781A00F0, // 013E JMPF R6 #0230
- 0x8C180536, // 013F GETMET R6 R2 K54
- 0x5422000F, // 0140 LDINT R8 16
- 0x7C180400, // 0141 CALL R6 2
- 0x90166A06, // 0142 SETMBR R5 K53 R6
- 0x8C180536, // 0143 GETMET R6 R2 K54
- 0x5422001F, // 0144 LDINT R8 32
- 0x7C180400, // 0145 CALL R6 2
- 0x9002A006, // 0146 SETMBR R0 K80 R6
- 0x8C180552, // 0147 GETMET R6 R2 K82
- 0x7C180200, // 0148 CALL R6 1
- 0x8C180D53, // 0149 GETMET R6 R6 K83
- 0x88200150, // 014A GETMBR R8 R0 K80
- 0x7C180400, // 014B CALL R6 2
- 0x9002A206, // 014C SETMBR R0 K81 R6
- 0x8C180536, // 014D GETMET R6 R2 K54
- 0x5422001F, // 014E LDINT R8 32
- 0x7C180400, // 014F CALL R6 2
- 0x8C1C0552, // 0150 GETMET R7 R2 K82
- 0x7C1C0200, // 0151 CALL R7 1
- 0x8C1C0F54, // 0152 GETMET R7 R7 K84
- 0x88240150, // 0153 GETMBR R9 R0 K80
- 0x8828070D, // 0154 GETMBR R10 R3 K13
- 0x7C1C0600, // 0155 CALL R7 3
- 0x90164607, // 0156 SETMBR R5 K35 R7
- 0xB81E0E00, // 0157 GETNGBL R7 K7
- 0x881C0F55, // 0158 GETMBR R7 R7 K85
- 0x8C1C0F56, // 0159 GETMET R7 R7 K86
- 0x7C1C0200, // 015A CALL R7 1
- 0x8C200F57, // 015B GETMET R8 R7 K87
- 0x58280058, // 015C LDCONST R10 K88
- 0xB82E0E00, // 015D GETNGBL R11 K7
- 0x882C1755, // 015E GETMBR R11 R11 K85
- 0x882C1759, // 015F GETMBR R11 R11 K89
- 0x8C300B5A, // 0160 GETMET R12 R5 K90
- 0x7C300200, // 0161 CALL R12 1
- 0x7C200800, // 0162 CALL R8 4
- 0x8C200F57, // 0163 GETMET R8 R7 K87
- 0x5828005B, // 0164 LDCONST R10 K91
- 0xB82E0E00, // 0165 GETNGBL R11 K7
- 0x882C1755, // 0166 GETMBR R11 R11 K85
- 0x882C1759, // 0167 GETMBR R11 R11 K89
- 0x8C300B5C, // 0168 GETMET R12 R5 K92
- 0x7C300200, // 0169 CALL R12 1
- 0x7C200800, // 016A CALL R8 4
- 0x8C200F57, // 016B GETMET R8 R7 K87
- 0x5828005D, // 016C LDCONST R10 K93
- 0xB82E0E00, // 016D GETNGBL R11 K7
- 0x882C1755, // 016E GETMBR R11 R11 K85
- 0x882C1759, // 016F GETMBR R11 R11 K89
- 0x88300151, // 0170 GETMBR R12 R0 K81
+ 0xB86A4600, // 0107 GETNGBL R26 K35
+ 0x8C683524, // 0108 GETMET R26 R26 K36
+ 0x8C703132, // 0109 GETMET R28 R24 K50
+ 0x7C700200, // 010A CALL R28 1
+ 0x0072861C, // 010B ADD R28 K67 R28
+ 0x54760003, // 010C LDINT R29 4
+ 0x7C680600, // 010D CALL R26 3
+ 0xB86A4600, // 010E GETNGBL R26 K35
+ 0x8C683524, // 010F GETMET R26 R26 K36
+ 0x58700040, // 0110 LDCONST R28 K64
+ 0x54760003, // 0111 LDINT R29 4
+ 0x7C680600, // 0112 CALL R26 3
+ 0x8C682944, // 0113 GETMET R26 R20 K68
+ 0x7C680200, // 0114 CALL R26 1
+ 0x4C6C0000, // 0115 LDNIL R27
+ 0x90168A1B, // 0116 SETMBR R5 K69 R27
+ 0xB86E4600, // 0117 GETNGBL R27 K35
+ 0x8C6C3724, // 0118 GETMET R27 R27 K36
+ 0x8C743532, // 0119 GETMET R29 R26 K50
+ 0x7C740200, // 011A CALL R29 1
+ 0x00768C1D, // 011B ADD R29 K70 R29
+ 0x547A0003, // 011C LDINT R30 4
+ 0x7C6C0600, // 011D CALL R27 3
+ 0x8C6C0347, // 011E GETMET R27 R1 K71
+ 0x54760032, // 011F LDINT R29 51
+ 0x50780200, // 0120 LDBOOL R30 1 0
+ 0x7C6C0600, // 0121 CALL R27 3
+ 0x8C703744, // 0122 GETMET R28 R27 K68
+ 0x5C783400, // 0123 MOVE R30 R26
+ 0x7C700400, // 0124 CALL R28 2
+ 0x88740148, // 0125 GETMBR R29 R0 K72
+ 0x8C743B49, // 0126 GETMET R29 R29 K73
+ 0x5C7C3800, // 0127 MOVE R31 R28
+ 0x8880034A, // 0128 GETMBR R32 R1 K74
+ 0x8884034B, // 0129 GETMBR R33 R1 K75
+ 0x8888374C, // 012A GETMBR R34 R27 K76
+ 0x7C740A00, // 012B CALL R29 5
+ 0x8C740B4D, // 012C GETMET R29 R5 K77
+ 0x5C7C2C00, // 012D MOVE R31 R22
+ 0x5C802E00, // 012E MOVE R32 R23
+ 0x5C843000, // 012F MOVE R33 R24
+ 0x5C883200, // 0130 MOVE R34 R25
+ 0x7C740A00, // 0131 CALL R29 5
+ 0x8C740B4E, // 0132 GETMET R29 R5 K78
+ 0x507C0200, // 0133 LDBOOL R31 1 0
+ 0x7C740400, // 0134 CALL R29 2
+ 0x8C740B4F, // 0135 GETMET R29 R5 K79
+ 0x7C740200, // 0136 CALL R29 1
+ 0x8C740B50, // 0137 GETMET R29 R5 K80
+ 0x7C740200, // 0138 CALL R29 1
+ 0x50740200, // 0139 LDBOOL R29 1 0
+ 0x80043A00, // 013A RET 1 R29
+ 0x70020001, // 013B JMP #013E
+ 0x4C3C0000, // 013C LDNIL R15
+ 0x900E1C0F, // 013D SETMBR R3 K14 R15
+ 0x8818070E, // 013E GETMBR R6 R3 K14
+ 0x4C1C0000, // 013F LDNIL R7
+ 0x1C180C07, // 0140 EQ R6 R6 R7
+ 0x741A0003, // 0141 JMPT R6 #0146
+ 0x8818070F, // 0142 GETMBR R6 R3 K15
+ 0x4C1C0000, // 0143 LDNIL R7
+ 0x1C180C07, // 0144 EQ R6 R6 R7
+ 0x781A00F0, // 0145 JMPF R6 #0237
+ 0x8C180537, // 0146 GETMET R6 R2 K55
+ 0x5422000F, // 0147 LDINT R8 16
+ 0x7C180400, // 0148 CALL R6 2
+ 0x90166C06, // 0149 SETMBR R5 K54 R6
+ 0x8C180537, // 014A GETMET R6 R2 K55
+ 0x5422001F, // 014B LDINT R8 32
+ 0x7C180400, // 014C CALL R6 2
+ 0x9002A206, // 014D SETMBR R0 K81 R6
+ 0x8C180553, // 014E GETMET R6 R2 K83
+ 0x7C180200, // 014F CALL R6 1
+ 0x8C180D54, // 0150 GETMET R6 R6 K84
+ 0x88200151, // 0151 GETMBR R8 R0 K81
+ 0x7C180400, // 0152 CALL R6 2
+ 0x9002A406, // 0153 SETMBR R0 K82 R6
+ 0x8C180537, // 0154 GETMET R6 R2 K55
+ 0x5422001F, // 0155 LDINT R8 32
+ 0x7C180400, // 0156 CALL R6 2
+ 0x8C1C0553, // 0157 GETMET R7 R2 K83
+ 0x7C1C0200, // 0158 CALL R7 1
+ 0x8C1C0F55, // 0159 GETMET R7 R7 K85
+ 0x88240151, // 015A GETMBR R9 R0 K81
+ 0x8828070D, // 015B GETMBR R10 R3 K13
+ 0x7C1C0600, // 015C CALL R7 3
+ 0x90164C07, // 015D SETMBR R5 K38 R7
+ 0xB81E0E00, // 015E GETNGBL R7 K7
+ 0x881C0F56, // 015F GETMBR R7 R7 K86
+ 0x8C1C0F57, // 0160 GETMET R7 R7 K87
+ 0x7C1C0200, // 0161 CALL R7 1
+ 0x8C200F58, // 0162 GETMET R8 R7 K88
+ 0x58280059, // 0163 LDCONST R10 K89
+ 0xB82E0E00, // 0164 GETNGBL R11 K7
+ 0x882C1756, // 0165 GETMBR R11 R11 K86
+ 0x882C175A, // 0166 GETMBR R11 R11 K90
+ 0x8C300B5B, // 0167 GETMET R12 R5 K91
+ 0x7C300200, // 0168 CALL R12 1
+ 0x7C200800, // 0169 CALL R8 4
+ 0x8C200F58, // 016A GETMET R8 R7 K88
+ 0x5828005C, // 016B LDCONST R10 K92
+ 0xB82E0E00, // 016C GETNGBL R11 K7
+ 0x882C1756, // 016D GETMBR R11 R11 K86
+ 0x882C175A, // 016E GETMBR R11 R11 K90
+ 0x8C300B5D, // 016F GETMET R12 R5 K93
+ 0x7C300200, // 0170 CALL R12 1
0x7C200800, // 0171 CALL R8 4
- 0x8C200F57, // 0172 GETMET R8 R7 K87
- 0x542A0003, // 0173 LDINT R10 4
+ 0x8C200F58, // 0172 GETMET R8 R7 K88
+ 0x5828005E, // 0173 LDCONST R10 K94
0xB82E0E00, // 0174 GETNGBL R11 K7
- 0x882C1755, // 0175 GETMBR R11 R11 K85
- 0x882C1759, // 0176 GETMBR R11 R11 K89
- 0x8830070D, // 0177 GETMBR R12 R3 K13
+ 0x882C1756, // 0175 GETMBR R11 R11 K86
+ 0x882C175A, // 0176 GETMBR R11 R11 K90
+ 0x88300152, // 0177 GETMBR R12 R0 K82
0x7C200800, // 0178 CALL R8 4
- 0x8C200552, // 0179 GETMET R8 R2 K82
- 0x7C200200, // 017A CALL R8 1
- 0x8C20115E, // 017B GETMET R8 R8 K94
- 0x8C280B5F, // 017C GETMET R10 R5 K95
- 0x7C280200, // 017D CALL R10 1
- 0x8C2C0F43, // 017E GETMET R11 R7 K67
- 0x7C2C0200, // 017F CALL R11 1
- 0x7C200600, // 0180 CALL R8 3
- 0xB8260E00, // 0181 GETNGBL R9 K7
- 0x88241355, // 0182 GETMBR R9 R9 K85
- 0x8C241356, // 0183 GETMET R9 R9 K86
- 0x7C240200, // 0184 CALL R9 1
- 0x8C281357, // 0185 GETMET R10 R9 K87
- 0x58300058, // 0186 LDCONST R12 K88
- 0xB8360E00, // 0187 GETNGBL R13 K7
- 0x88341B55, // 0188 GETMBR R13 R13 K85
- 0x88341B59, // 0189 GETMBR R13 R13 K89
- 0x8C380B5A, // 018A GETMET R14 R5 K90
- 0x7C380200, // 018B CALL R14 1
- 0x7C280800, // 018C CALL R10 4
- 0x8C281357, // 018D GETMET R10 R9 K87
- 0x5830005B, // 018E LDCONST R12 K91
- 0xB8360E00, // 018F GETNGBL R13 K7
- 0x88341B55, // 0190 GETMBR R13 R13 K85
- 0x88341B59, // 0191 GETMBR R13 R13 K89
- 0x8C380B5C, // 0192 GETMET R14 R5 K92
- 0x7C380200, // 0193 CALL R14 1
- 0x7C280800, // 0194 CALL R10 4
- 0x8C281357, // 0195 GETMET R10 R9 K87
- 0x5830005D, // 0196 LDCONST R12 K93
- 0xB8360E00, // 0197 GETNGBL R13 K7
- 0x88341B55, // 0198 GETMBR R13 R13 K85
- 0x88341B59, // 0199 GETMBR R13 R13 K89
- 0x5C381000, // 019A MOVE R14 R8
+ 0x8C200F58, // 0179 GETMET R8 R7 K88
+ 0x542A0003, // 017A LDINT R10 4
+ 0xB82E0E00, // 017B GETNGBL R11 K7
+ 0x882C1756, // 017C GETMBR R11 R11 K86
+ 0x882C175A, // 017D GETMBR R11 R11 K90
+ 0x8830070D, // 017E GETMBR R12 R3 K13
+ 0x7C200800, // 017F CALL R8 4
+ 0x8C200553, // 0180 GETMET R8 R2 K83
+ 0x7C200200, // 0181 CALL R8 1
+ 0x8C20115F, // 0182 GETMET R8 R8 K95
+ 0x8C280B60, // 0183 GETMET R10 R5 K96
+ 0x7C280200, // 0184 CALL R10 1
+ 0x8C2C0F44, // 0185 GETMET R11 R7 K68
+ 0x7C2C0200, // 0186 CALL R11 1
+ 0x7C200600, // 0187 CALL R8 3
+ 0xB8260E00, // 0188 GETNGBL R9 K7
+ 0x88241356, // 0189 GETMBR R9 R9 K86
+ 0x8C241357, // 018A GETMET R9 R9 K87
+ 0x7C240200, // 018B CALL R9 1
+ 0x8C281358, // 018C GETMET R10 R9 K88
+ 0x58300059, // 018D LDCONST R12 K89
+ 0xB8360E00, // 018E GETNGBL R13 K7
+ 0x88341B56, // 018F GETMBR R13 R13 K86
+ 0x88341B5A, // 0190 GETMBR R13 R13 K90
+ 0x8C380B5B, // 0191 GETMET R14 R5 K91
+ 0x7C380200, // 0192 CALL R14 1
+ 0x7C280800, // 0193 CALL R10 4
+ 0x8C281358, // 0194 GETMET R10 R9 K88
+ 0x5830005C, // 0195 LDCONST R12 K92
+ 0xB8360E00, // 0196 GETNGBL R13 K7
+ 0x88341B56, // 0197 GETMBR R13 R13 K86
+ 0x88341B5A, // 0198 GETMBR R13 R13 K90
+ 0x8C380B5D, // 0199 GETMET R14 R5 K93
+ 0x7C380200, // 019A CALL R14 1
0x7C280800, // 019B CALL R10 4
- 0x8C281357, // 019C GETMET R10 R9 K87
- 0x54320003, // 019D LDINT R12 4
+ 0x8C281358, // 019C GETMET R10 R9 K88
+ 0x5830005E, // 019D LDCONST R12 K94
0xB8360E00, // 019E GETNGBL R13 K7
- 0x88341B55, // 019F GETMBR R13 R13 K85
- 0x88341B59, // 01A0 GETMBR R13 R13 K89
- 0x88380B35, // 01A1 GETMBR R14 R5 K53
+ 0x88341B56, // 019F GETMBR R13 R13 K86
+ 0x88341B5A, // 01A0 GETMBR R13 R13 K90
+ 0x5C381000, // 01A1 MOVE R14 R8
0x7C280800, // 01A2 CALL R10 4
- 0xB82A5A00, // 01A3 GETNGBL R10 K45
- 0x8C28152E, // 01A4 GETMET R10 R10 K46
- 0x5830002F, // 01A5 LDCONST R12 K47
- 0x54360003, // 01A6 LDINT R13 4
- 0x7C280600, // 01A7 CALL R10 3
- 0x88280760, // 01A8 GETMBR R10 R3 K96
- 0x9016880A, // 01A9 SETMBR R5 K68 R10
- 0xB82A5A00, // 01AA GETNGBL R10 K45
- 0x8C28152E, // 01AB GETMET R10 R10 K46
- 0x88300B44, // 01AC GETMBR R12 R5 K68
- 0x8C301931, // 01AD GETMET R12 R12 K49
- 0x7C300200, // 01AE CALL R12 1
- 0x0032C20C, // 01AF ADD R12 K97 R12
- 0x54360003, // 01B0 LDINT R13 4
- 0x7C280600, // 01B1 CALL R10 3
- 0x8C280562, // 01B2 GETMET R10 R2 K98
- 0x7C280200, // 01B3 CALL R10 1
- 0x8C281563, // 01B4 GETMET R10 R10 K99
- 0x88300B44, // 01B5 GETMBR R12 R5 K68
- 0x7C280400, // 01B6 CALL R10 2
- 0x8C281564, // 01B7 GETMET R10 R10 K100
- 0x7C280200, // 01B8 CALL R10 1
- 0x602C0015, // 01B9 GETGBL R11 G21
- 0x7C2C0000, // 01BA CALL R11 0
- 0x8C2C1724, // 01BB GETMET R11 R11 K36
- 0x88340165, // 01BC GETMBR R13 R0 K101
- 0x7C2C0400, // 01BD CALL R11 2
- 0x8C300B66, // 01BE GETMET R12 R5 K102
- 0x7C300200, // 01BF CALL R12 1
- 0x00301806, // 01C0 ADD R12 R12 R6
- 0x88340151, // 01C1 GETMBR R13 R0 K81
- 0x0030180D, // 01C2 ADD R12 R12 R13
- 0x0030180A, // 01C3 ADD R12 R12 R10
- 0x8C340526, // 01C4 GETMET R13 R2 K38
- 0x7C340200, // 01C5 CALL R13 1
- 0x8C341B27, // 01C6 GETMET R13 R13 K39
- 0x883C0B23, // 01C7 GETMBR R15 R5 K35
- 0x5C401800, // 01C8 MOVE R16 R12
- 0x5C441600, // 01C9 MOVE R17 R11
- 0x544A000F, // 01CA LDINT R18 16
- 0x7C340A00, // 01CB CALL R13 5
- 0xB83A5A00, // 01CC GETNGBL R14 K45
- 0x8C381D2E, // 01CD GETMET R14 R14 K46
- 0x88400B23, // 01CE GETMBR R16 R5 K35
- 0x8C402131, // 01CF GETMET R16 R16 K49
- 0x7C400200, // 01D0 CALL R16 1
- 0x0042CE10, // 01D1 ADD R16 K103 R16
- 0x54460003, // 01D2 LDINT R17 4
- 0x7C380600, // 01D3 CALL R14 3
- 0xB83A5A00, // 01D4 GETNGBL R14 K45
- 0x8C381D2E, // 01D5 GETMET R14 R14 K46
- 0x8C401931, // 01D6 GETMET R16 R12 K49
+ 0x8C281358, // 01A3 GETMET R10 R9 K88
+ 0x54320003, // 01A4 LDINT R12 4
+ 0xB8360E00, // 01A5 GETNGBL R13 K7
+ 0x88341B56, // 01A6 GETMBR R13 R13 K86
+ 0x88341B5A, // 01A7 GETMBR R13 R13 K90
+ 0x88380B36, // 01A8 GETMBR R14 R5 K54
+ 0x7C280800, // 01A9 CALL R10 4
+ 0xB82A4600, // 01AA GETNGBL R10 K35
+ 0x8C281524, // 01AB GETMET R10 R10 K36
+ 0x58300030, // 01AC LDCONST R12 K48
+ 0x54360003, // 01AD LDINT R13 4
+ 0x7C280600, // 01AE CALL R10 3
+ 0x88280761, // 01AF GETMBR R10 R3 K97
+ 0x90168A0A, // 01B0 SETMBR R5 K69 R10
+ 0xB82A4600, // 01B1 GETNGBL R10 K35
+ 0x8C281524, // 01B2 GETMET R10 R10 K36
+ 0x88300B45, // 01B3 GETMBR R12 R5 K69
+ 0x8C301932, // 01B4 GETMET R12 R12 K50
+ 0x7C300200, // 01B5 CALL R12 1
+ 0x0032C40C, // 01B6 ADD R12 K98 R12
+ 0x54360003, // 01B7 LDINT R13 4
+ 0x7C280600, // 01B8 CALL R10 3
+ 0x8C280563, // 01B9 GETMET R10 R2 K99
+ 0x7C280200, // 01BA CALL R10 1
+ 0x8C281564, // 01BB GETMET R10 R10 K100
+ 0x88300B45, // 01BC GETMBR R12 R5 K69
+ 0x7C280400, // 01BD CALL R10 2
+ 0x8C281565, // 01BE GETMET R10 R10 K101
+ 0x7C280200, // 01BF CALL R10 1
+ 0x602C0015, // 01C0 GETGBL R11 G21
+ 0x7C2C0000, // 01C1 CALL R11 0
+ 0x8C2C1727, // 01C2 GETMET R11 R11 K39
+ 0x88340166, // 01C3 GETMBR R13 R0 K102
+ 0x7C2C0400, // 01C4 CALL R11 2
+ 0x8C300B67, // 01C5 GETMET R12 R5 K103
+ 0x7C300200, // 01C6 CALL R12 1
+ 0x00301806, // 01C7 ADD R12 R12 R6
+ 0x88340152, // 01C8 GETMBR R13 R0 K82
+ 0x0030180D, // 01C9 ADD R12 R12 R13
+ 0x0030180A, // 01CA ADD R12 R12 R10
+ 0x8C340529, // 01CB GETMET R13 R2 K41
+ 0x7C340200, // 01CC CALL R13 1
+ 0x8C341B2A, // 01CD GETMET R13 R13 K42
+ 0x883C0B26, // 01CE GETMBR R15 R5 K38
+ 0x5C401800, // 01CF MOVE R16 R12
+ 0x5C441600, // 01D0 MOVE R17 R11
+ 0x544A000F, // 01D1 LDINT R18 16
+ 0x7C340A00, // 01D2 CALL R13 5
+ 0xB83A4600, // 01D3 GETNGBL R14 K35
+ 0x8C381D24, // 01D4 GETMET R14 R14 K36
+ 0x88400B26, // 01D5 GETMBR R16 R5 K38
+ 0x8C402132, // 01D6 GETMET R16 R16 K50
0x7C400200, // 01D7 CALL R16 1
0x0042D010, // 01D8 ADD R16 K104 R16
0x54460003, // 01D9 LDINT R17 4
0x7C380600, // 01DA CALL R14 3
- 0xB83A5A00, // 01DB GETNGBL R14 K45
- 0x8C381D2E, // 01DC GETMET R14 R14 K46
- 0x8C401B31, // 01DD GETMET R16 R13 K49
+ 0xB83A4600, // 01DB GETNGBL R14 K35
+ 0x8C381D24, // 01DC GETMET R14 R14 K36
+ 0x8C401932, // 01DD GETMET R16 R12 K50
0x7C400200, // 01DE CALL R16 1
0x0042D210, // 01DF ADD R16 K105 R16
0x54460003, // 01E0 LDINT R17 4
0x7C380600, // 01E1 CALL R14 3
- 0x8C381343, // 01E2 GETMET R14 R9 K67
- 0x7C380200, // 01E3 CALL R14 1
- 0x8C3C052A, // 01E4 GETMET R15 R2 K42
- 0x5C441A00, // 01E5 MOVE R17 R13
- 0x60480015, // 01E6 GETGBL R18 G21
- 0x7C480000, // 01E7 CALL R18 0
- 0x8C482524, // 01E8 GETMET R18 R18 K36
- 0x8850016A, // 01E9 GETMBR R20 R0 K106
- 0x7C480400, // 01EA CALL R18 2
- 0x604C0015, // 01EB GETGBL R19 G21
- 0x7C4C0000, // 01EC CALL R19 0
- 0x6050000C, // 01ED GETGBL R20 G12
- 0x5C541C00, // 01EE MOVE R21 R14
- 0x7C500200, // 01EF CALL R20 1
- 0x5456000F, // 01F0 LDINT R21 16
- 0x7C3C0C00, // 01F1 CALL R15 6
- 0x8C401F6B, // 01F2 GETMET R16 R15 K107
- 0x5C481C00, // 01F3 MOVE R18 R14
- 0x7C400400, // 01F4 CALL R16 2
- 0x8C441F2C, // 01F5 GETMET R17 R15 K44
- 0x7C440200, // 01F6 CALL R17 1
- 0x00402011, // 01F7 ADD R16 R16 R17
- 0xB8465A00, // 01F8 GETNGBL R17 K45
- 0x8C44232E, // 01F9 GETMET R17 R17 K46
- 0x8C4C2131, // 01FA GETMET R19 R16 K49
- 0x7C4C0200, // 01FB CALL R19 1
- 0x004ED813, // 01FC ADD R19 K108 R19
- 0x54520003, // 01FD LDINT R20 4
- 0x7C440600, // 01FE CALL R17 3
- 0xB8465A00, // 01FF GETNGBL R17 K45
- 0x8C44232E, // 0200 GETMET R17 R17 K46
- 0x584C002F, // 0201 LDCONST R19 K47
- 0x54520003, // 0202 LDINT R20 4
- 0x7C440600, // 0203 CALL R17 3
- 0xB8460E00, // 0204 GETNGBL R17 K7
- 0x8C44236D, // 0205 GETMET R17 R17 K109
- 0x7C440200, // 0206 CALL R17 1
- 0x9046DC06, // 0207 SETMBR R17 K110 R6
- 0x88480122, // 0208 GETMBR R18 R0 K34
- 0x9046DE12, // 0209 SETMBR R17 K111 R18
- 0x88480151, // 020A GETMBR R18 R0 K81
- 0x9046E012, // 020B SETMBR R17 K112 R18
- 0x9046E210, // 020C SETMBR R17 K113 R16
- 0xB84A5A00, // 020D GETNGBL R18 K45
- 0x8C48252E, // 020E GETMET R18 R18 K46
- 0xB8520E00, // 020F GETNGBL R20 K7
- 0x8C502973, // 0210 GETMET R20 R20 K115
- 0x5C582200, // 0211 MOVE R22 R17
- 0x7C500400, // 0212 CALL R20 2
- 0x0052E414, // 0213 ADD R20 K114 R20
- 0x54560003, // 0214 LDINT R21 4
- 0x7C480600, // 0215 CALL R18 3
- 0x8C482343, // 0216 GETMET R18 R17 K67
- 0x7C480200, // 0217 CALL R18 1
- 0x9016E812, // 0218 SETMBR R5 K116 R18
- 0xB84E5A00, // 0219 GETNGBL R19 K45
- 0x8C4C272E, // 021A GETMET R19 R19 K46
- 0x8C542531, // 021B GETMET R21 R18 K49
- 0x7C540200, // 021C CALL R21 1
- 0x0056EA15, // 021D ADD R21 K117 R21
- 0x545A0003, // 021E LDINT R22 4
- 0x7C4C0600, // 021F CALL R19 3
- 0x8C4C0346, // 0220 GETMET R19 R1 K70
- 0x54560030, // 0221 LDINT R21 49
- 0x50580200, // 0222 LDBOOL R22 1 0
- 0x7C4C0600, // 0223 CALL R19 3
- 0x8C502743, // 0224 GETMET R20 R19 K67
- 0x5C582400, // 0225 MOVE R22 R18
- 0x7C500400, // 0226 CALL R20 2
- 0x88540147, // 0227 GETMBR R21 R0 K71
- 0x8C542B48, // 0228 GETMET R21 R21 K72
- 0x5C5C2800, // 0229 MOVE R23 R20
- 0x88600349, // 022A GETMBR R24 R1 K73
- 0x8864034A, // 022B GETMBR R25 R1 K74
- 0x8868274B, // 022C GETMBR R26 R19 K75
- 0x7C540A00, // 022D CALL R21 5
- 0x50540200, // 022E LDBOOL R21 1 0
- 0x80042A00, // 022F RET 1 R21
- 0x50180200, // 0230 LDBOOL R6 1 0
- 0x80040C00, // 0231 RET 1 R6
+ 0xB83A4600, // 01E2 GETNGBL R14 K35
+ 0x8C381D24, // 01E3 GETMET R14 R14 K36
+ 0x8C401B32, // 01E4 GETMET R16 R13 K50
+ 0x7C400200, // 01E5 CALL R16 1
+ 0x0042D410, // 01E6 ADD R16 K106 R16
+ 0x54460003, // 01E7 LDINT R17 4
+ 0x7C380600, // 01E8 CALL R14 3
+ 0x8C381344, // 01E9 GETMET R14 R9 K68
+ 0x7C380200, // 01EA CALL R14 1
+ 0x8C3C052D, // 01EB GETMET R15 R2 K45
+ 0x5C441A00, // 01EC MOVE R17 R13
+ 0x60480015, // 01ED GETGBL R18 G21
+ 0x7C480000, // 01EE CALL R18 0
+ 0x8C482527, // 01EF GETMET R18 R18 K39
+ 0x8850016B, // 01F0 GETMBR R20 R0 K107
+ 0x7C480400, // 01F1 CALL R18 2
+ 0x604C0015, // 01F2 GETGBL R19 G21
+ 0x7C4C0000, // 01F3 CALL R19 0
+ 0x6050000C, // 01F4 GETGBL R20 G12
+ 0x5C541C00, // 01F5 MOVE R21 R14
+ 0x7C500200, // 01F6 CALL R20 1
+ 0x5456000F, // 01F7 LDINT R21 16
+ 0x7C3C0C00, // 01F8 CALL R15 6
+ 0x8C401F6C, // 01F9 GETMET R16 R15 K108
+ 0x5C481C00, // 01FA MOVE R18 R14
+ 0x7C400400, // 01FB CALL R16 2
+ 0x8C441F2F, // 01FC GETMET R17 R15 K47
+ 0x7C440200, // 01FD CALL R17 1
+ 0x00402011, // 01FE ADD R16 R16 R17
+ 0xB8464600, // 01FF GETNGBL R17 K35
+ 0x8C442324, // 0200 GETMET R17 R17 K36
+ 0x8C4C2132, // 0201 GETMET R19 R16 K50
+ 0x7C4C0200, // 0202 CALL R19 1
+ 0x004EDA13, // 0203 ADD R19 K109 R19
+ 0x54520003, // 0204 LDINT R20 4
+ 0x7C440600, // 0205 CALL R17 3
+ 0xB8464600, // 0206 GETNGBL R17 K35
+ 0x8C442324, // 0207 GETMET R17 R17 K36
+ 0x584C0030, // 0208 LDCONST R19 K48
+ 0x54520003, // 0209 LDINT R20 4
+ 0x7C440600, // 020A CALL R17 3
+ 0xB8460E00, // 020B GETNGBL R17 K7
+ 0x8C44236E, // 020C GETMET R17 R17 K110
+ 0x7C440200, // 020D CALL R17 1
+ 0x9046DE06, // 020E SETMBR R17 K111 R6
+ 0x88480122, // 020F GETMBR R18 R0 K34
+ 0x9046E012, // 0210 SETMBR R17 K112 R18
+ 0x88480152, // 0211 GETMBR R18 R0 K82
+ 0x9046E212, // 0212 SETMBR R17 K113 R18
+ 0x9046E410, // 0213 SETMBR R17 K114 R16
+ 0xB84A4600, // 0214 GETNGBL R18 K35
+ 0x8C482524, // 0215 GETMET R18 R18 K36
+ 0xB8520E00, // 0216 GETNGBL R20 K7
+ 0x8C502974, // 0217 GETMET R20 R20 K116
+ 0x5C582200, // 0218 MOVE R22 R17
+ 0x7C500400, // 0219 CALL R20 2
+ 0x0052E614, // 021A ADD R20 K115 R20
+ 0x54560003, // 021B LDINT R21 4
+ 0x7C480600, // 021C CALL R18 3
+ 0x8C482344, // 021D GETMET R18 R17 K68
+ 0x7C480200, // 021E CALL R18 1
+ 0x9016EA12, // 021F SETMBR R5 K117 R18
+ 0xB84E4600, // 0220 GETNGBL R19 K35
+ 0x8C4C2724, // 0221 GETMET R19 R19 K36
+ 0x8C542532, // 0222 GETMET R21 R18 K50
+ 0x7C540200, // 0223 CALL R21 1
+ 0x0056EC15, // 0224 ADD R21 K118 R21
+ 0x545A0003, // 0225 LDINT R22 4
+ 0x7C4C0600, // 0226 CALL R19 3
+ 0x8C4C0347, // 0227 GETMET R19 R1 K71
+ 0x54560030, // 0228 LDINT R21 49
+ 0x50580200, // 0229 LDBOOL R22 1 0
+ 0x7C4C0600, // 022A CALL R19 3
+ 0x8C502744, // 022B GETMET R20 R19 K68
+ 0x5C582400, // 022C MOVE R22 R18
+ 0x7C500400, // 022D CALL R20 2
+ 0x88540148, // 022E GETMBR R21 R0 K72
+ 0x8C542B49, // 022F GETMET R21 R21 K73
+ 0x5C5C2800, // 0230 MOVE R23 R20
+ 0x8860034A, // 0231 GETMBR R24 R1 K74
+ 0x8864034B, // 0232 GETMBR R25 R1 K75
+ 0x8868274C, // 0233 GETMBR R26 R19 K76
+ 0x7C540A00, // 0234 CALL R21 5
+ 0x50540200, // 0235 LDBOOL R21 1 0
+ 0x80042A00, // 0236 RET 1 R21
+ 0x50180200, // 0237 LDBOOL R6 1 0
+ 0x80040C00, // 0238 RET 1 R6
})
)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
index ce740e9b9..d40e8c5fd 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
@@ -233,7 +233,7 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
/* K37 */ be_nested_str_weak(process_incoming),
/* K38 */ be_nested_str_weak(MTR_X3A_X20decode_X20header_X3A_X20local_session_id_X3D_X25i_X20message_counter_X3D_X25i),
/* K39 */ be_nested_str_weak(get_session_by_local_session_id),
- /* K40 */ be_nested_str_weak(MTR_X3A_X20unknown_X20local_session_id_X20),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20unknown_X20local_session_id_X3D),
/* K41 */ be_nested_str_weak(MTR_X3A_X20frame_X3D),
/* K42 */ be_nested_str_weak(inspect),
/* K43 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20encrypted_X20message_X20_X3D_X20),
@@ -409,7 +409,7 @@ be_local_closure(Matter_MessageHandler_msg_received, /* name */
0x88300D08, // 008A GETMBR R12 R6 K8
0x7C2C0200, // 008B CALL R11 1
0x002E500B, // 008C ADD R11 K40 R11
- 0x58300011, // 008D LDCONST R12 K17
+ 0x58300023, // 008D LDCONST R12 K35
0x7C240600, // 008E CALL R9 3
0xB8260200, // 008F GETNGBL R9 K1
0x8C241302, // 0090 GETMET R9 R9 K2
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
index fd15e66a9..70eb83576 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
@@ -69,7 +69,7 @@ be_local_closure(Matter_Plugin_OnOff_invoke_request, /* name */
}),
be_str_weak(invoke_request),
&be_const_str_solidified,
- ( &(const binstruction[81]) { /* code */
+ ( &(const binstruction[128]) { /* code */
0xB8120000, // 0000 GETNGBL R4 K0
0x88100901, // 0001 GETMBR R4 R4 K1
0x88140702, // 0002 GETMBR R5 R3 K2
@@ -98,22 +98,22 @@ be_local_closure(Matter_Plugin_OnOff_invoke_request, /* name */
0x781E0001, // 0019 JMPF R7 #001C
0x501C0200, // 001A LDBOOL R7 1 0
0x80040E00, // 001B RET 1 R7
- 0x70020032, // 001C JMP #0050
+ 0x70020061, // 001C JMP #007F
0x541E0003, // 001D LDINT R7 4
0x1C1C0A07, // 001E EQ R7 R5 R7
0x781E0002, // 001F JMPF R7 #0023
0x501C0200, // 0020 LDBOOL R7 1 0
0x80040E00, // 0021 RET 1 R7
- 0x7002002C, // 0022 JMP #0050
+ 0x7002005B, // 0022 JMP #007F
0x541E0004, // 0023 LDINT R7 5
0x1C1C0A07, // 0024 EQ R7 R5 R7
0x781E0002, // 0025 JMPF R7 #0029
0x501C0200, // 0026 LDBOOL R7 1 0
0x80040E00, // 0027 RET 1 R7
- 0x70020026, // 0028 JMP #0050
+ 0x70020055, // 0028 JMP #007F
0x541E0005, // 0029 LDINT R7 6
0x1C1C0A07, // 002A EQ R7 R5 R7
- 0x781E0023, // 002B JMPF R7 #0050
+ 0x781E0024, // 002B JMPF R7 #0051
0x1C1C0D05, // 002C EQ R7 R6 K5
0x781E0009, // 002D JMPF R7 #0038
0x881C010A, // 002E GETMBR R7 R0 K10
@@ -150,7 +150,54 @@ be_local_closure(Matter_Plugin_OnOff_invoke_request, /* name */
0x90021407, // 004D SETMBR R0 K10 R7
0x501C0200, // 004E LDBOOL R7 1 0
0x80040E00, // 004F RET 1 R7
- 0x80000000, // 0050 RET 0
+ 0x7002002D, // 0050 JMP #007F
+ 0x541E0007, // 0051 LDINT R7 8
+ 0x1C1C0A07, // 0052 EQ R7 R5 R7
+ 0x781E002A, // 0053 JMPF R7 #007F
+ 0x1C1C0D05, // 0054 EQ R7 R6 K5
+ 0x781E0002, // 0055 JMPF R7 #0059
+ 0x501C0200, // 0056 LDBOOL R7 1 0
+ 0x80040E00, // 0057 RET 1 R7
+ 0x70020025, // 0058 JMP #007F
+ 0x1C1C0D06, // 0059 EQ R7 R6 K6
+ 0x781E0002, // 005A JMPF R7 #005E
+ 0x501C0200, // 005B LDBOOL R7 1 0
+ 0x80040E00, // 005C RET 1 R7
+ 0x70020020, // 005D JMP #007F
+ 0x1C1C0D0C, // 005E EQ R7 R6 K12
+ 0x781E0002, // 005F JMPF R7 #0063
+ 0x501C0200, // 0060 LDBOOL R7 1 0
+ 0x80040E00, // 0061 RET 1 R7
+ 0x7002001B, // 0062 JMP #007F
+ 0x1C1C0D04, // 0063 EQ R7 R6 K4
+ 0x781E0002, // 0064 JMPF R7 #0068
+ 0x501C0200, // 0065 LDBOOL R7 1 0
+ 0x80040E00, // 0066 RET 1 R7
+ 0x70020016, // 0067 JMP #007F
+ 0x541E0003, // 0068 LDINT R7 4
+ 0x1C1C0C07, // 0069 EQ R7 R6 R7
+ 0x781E0002, // 006A JMPF R7 #006E
+ 0x501C0200, // 006B LDBOOL R7 1 0
+ 0x80040E00, // 006C RET 1 R7
+ 0x70020010, // 006D JMP #007F
+ 0x541E0004, // 006E LDINT R7 5
+ 0x1C1C0C07, // 006F EQ R7 R6 R7
+ 0x781E0002, // 0070 JMPF R7 #0074
+ 0x501C0200, // 0071 LDBOOL R7 1 0
+ 0x80040E00, // 0072 RET 1 R7
+ 0x7002000A, // 0073 JMP #007F
+ 0x541E0005, // 0074 LDINT R7 6
+ 0x1C1C0C07, // 0075 EQ R7 R6 R7
+ 0x781E0002, // 0076 JMPF R7 #007A
+ 0x501C0200, // 0077 LDBOOL R7 1 0
+ 0x80040E00, // 0078 RET 1 R7
+ 0x70020004, // 0079 JMP #007F
+ 0x541E0006, // 007A LDINT R7 7
+ 0x1C1C0C07, // 007B EQ R7 R6 R7
+ 0x781E0001, // 007C JMPF R7 #007F
+ 0x501C0200, // 007D LDBOOL R7 1 0
+ 0x80040E00, // 007E RET 1 R7
+ 0x80000000, // 007F RET 0
})
)
);
@@ -239,7 +286,7 @@ be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
- ( &(const binstruction[208]) { /* code */
+ ( &(const binstruction[255]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x88100902, // 0002 GETMBR R4 R4 K2
@@ -335,7 +382,7 @@ be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
0x5828000C, // 005C LDCONST R10 K12
0x7C1C0600, // 005D CALL R7 3
0x80040E00, // 005E RET 1 R7
- 0x7002006E, // 005F JMP #00CF
+ 0x7002009D, // 005F JMP #00FE
0x1C1C0B11, // 0060 EQ R7 R5 K17
0x781E0021, // 0061 JMPF R7 #0084
0x1C1C0D05, // 0062 EQ R7 R6 K5
@@ -371,7 +418,7 @@ be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
0x542A0003, // 0080 LDINT R10 4
0x7C1C0600, // 0081 CALL R7 3
0x80040E00, // 0082 RET 1 R7
- 0x7002004A, // 0083 JMP #00CF
+ 0x70020079, // 0083 JMP #00FE
0x541E0003, // 0084 LDINT R7 4
0x1C1C0A07, // 0085 EQ R7 R5 R7
0x781E0016, // 0086 JMPF R7 #009E
@@ -397,7 +444,7 @@ be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
0x542A0003, // 009A LDINT R10 4
0x7C1C0600, // 009B CALL R7 3
0x80040E00, // 009C RET 1 R7
- 0x70020030, // 009D JMP #00CF
+ 0x7002005F, // 009D JMP #00FE
0x541E0004, // 009E LDINT R7 5
0x1C1C0A07, // 009F EQ R7 R5 R7
0x781E0011, // 00A0 JMPF R7 #00B3
@@ -418,10 +465,10 @@ be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
0x542A0003, // 00AF LDINT R10 4
0x7C1C0600, // 00B0 CALL R7 3
0x80040E00, // 00B1 RET 1 R7
- 0x7002001B, // 00B2 JMP #00CF
+ 0x7002004A, // 00B2 JMP #00FE
0x541E0005, // 00B3 LDINT R7 6
0x1C1C0A07, // 00B4 EQ R7 R5 R7
- 0x781E0018, // 00B5 JMPF R7 #00CF
+ 0x781E0019, // 00B5 JMPF R7 #00D0
0x1C1C0D05, // 00B6 EQ R7 R6 K5
0x781E0005, // 00B7 JMPF R7 #00BE
0x8C1C0912, // 00B8 GETMET R7 R4 K18
@@ -447,7 +494,54 @@ be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
0x542A0003, // 00CC LDINT R10 4
0x7C1C0600, // 00CD CALL R7 3
0x80040E00, // 00CE RET 1 R7
- 0x80000000, // 00CF RET 0
+ 0x7002002D, // 00CF JMP #00FE
+ 0x541E0007, // 00D0 LDINT R7 8
+ 0x1C1C0A07, // 00D1 EQ R7 R5 R7
+ 0x781E002A, // 00D2 JMPF R7 #00FE
+ 0x1C1C0D05, // 00D3 EQ R7 R6 K5
+ 0x781E0005, // 00D4 JMPF R7 #00DB
+ 0x8C1C0912, // 00D5 GETMET R7 R4 K18
+ 0x88240913, // 00D6 GETMBR R9 R4 K19
+ 0x542A0087, // 00D7 LDINT R10 136
+ 0x7C1C0600, // 00D8 CALL R7 3
+ 0x80040E00, // 00D9 RET 1 R7
+ 0x70020022, // 00DA JMP #00FE
+ 0x541E000E, // 00DB LDINT R7 15
+ 0x1C1C0C07, // 00DC EQ R7 R6 R7
+ 0x781E0005, // 00DD JMPF R7 #00E4
+ 0x8C1C0912, // 00DE GETMET R7 R4 K18
+ 0x88240913, // 00DF GETMBR R9 R4 K19
+ 0x58280005, // 00E0 LDCONST R10 K5
+ 0x7C1C0600, // 00E1 CALL R7 3
+ 0x80040E00, // 00E2 RET 1 R7
+ 0x70020019, // 00E3 JMP #00FE
+ 0x541E000F, // 00E4 LDINT R7 16
+ 0x1C1C0C07, // 00E5 EQ R7 R6 R7
+ 0x781E0005, // 00E6 JMPF R7 #00ED
+ 0x8C1C0912, // 00E7 GETMET R7 R4 K18
+ 0x88240913, // 00E8 GETMBR R9 R4 K19
+ 0x5828000C, // 00E9 LDCONST R10 K12
+ 0x7C1C0600, // 00EA CALL R7 3
+ 0x80040E00, // 00EB RET 1 R7
+ 0x70020010, // 00EC JMP #00FE
+ 0x541EFFFB, // 00ED LDINT R7 65532
+ 0x1C1C0C07, // 00EE EQ R7 R6 R7
+ 0x781E0005, // 00EF JMPF R7 #00F6
+ 0x8C1C0912, // 00F0 GETMET R7 R4 K18
+ 0x8824090F, // 00F1 GETMBR R9 R4 K15
+ 0x58280005, // 00F2 LDCONST R10 K5
+ 0x7C1C0600, // 00F3 CALL R7 3
+ 0x80040E00, // 00F4 RET 1 R7
+ 0x70020007, // 00F5 JMP #00FE
+ 0x541EFFFC, // 00F6 LDINT R7 65533
+ 0x1C1C0C07, // 00F7 EQ R7 R6 R7
+ 0x781E0004, // 00F8 JMPF R7 #00FE
+ 0x8C1C0912, // 00F9 GETMET R7 R4 K18
+ 0x8824090F, // 00FA GETMBR R9 R4 K15
+ 0x542A0003, // 00FB LDINT R10 4
+ 0x7C1C0600, // 00FC CALL R7 3
+ 0x80040E00, // 00FD RET 1 R7
+ 0x80000000, // 00FE RET 0
})
)
);
@@ -479,20 +573,8 @@ be_local_class(Matter_Plugin_OnOff,
})) ) } )) },
{ be_const_key_weak(onoff_changed, 7), be_const_closure(Matter_Plugin_OnOff_onoff_changed_closure) },
{ be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(5,
+ 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(8,
- ( (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(65532),
- be_const_int(65533),
- })) ) } )) },
{ be_const_key_int(6, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
@@ -509,6 +591,15 @@ be_local_class(Matter_Plugin_OnOff,
be_const_int(3),
be_const_int(65532),
be_const_int(65533),
+ })) ) } )) },
+ { be_const_key_int(8, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(5,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(15),
+ be_const_int(17),
+ be_const_int(65532),
+ be_const_int(65533),
})) ) } )) },
{ be_const_key_int(3, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(4,
@@ -518,12 +609,24 @@ be_local_class(Matter_Plugin_OnOff,
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
- { be_const_key_int(4, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ { be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65532),
be_const_int(65533),
+ })) ) } )) },
+ { be_const_key_int(5, 1), 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(2),
+ be_const_int(3),
+ be_const_int(4),
+ be_const_int(5),
+ be_const_int(65532),
+ be_const_int(65533),
})) ) } )) },
})) ) } )) },
})),
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
index 0447a8dea..e8ede2cdb 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
@@ -105,7 +105,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
- ( &(const binstruction[811]) { /* code */
+ ( &(const binstruction[828]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x88100902, // 0002 GETMBR R4 R4 K2
@@ -162,11 +162,11 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x50280000, // 0035 LDBOOL R10 0 0
0x7C1C0600, // 0036 CALL R7 3
0x80040E00, // 0037 RET 1 R7
- 0x700202F0, // 0038 JMP #032A
+ 0x70020301, // 0038 JMP #033B
0x541E0031, // 0039 LDINT R7 50
0x1C1C0A07, // 003A EQ R7 R5 R7
0x781E0000, // 003B JMPF R7 #003D
- 0x700202EC, // 003C JMP #032A
+ 0x700202FD, // 003C JMP #033B
0x541E0032, // 003D LDINT R7 51
0x1C1C0A07, // 003E EQ R7 R5 R7
0x781E00DA, // 003F JMPF R7 #011B
@@ -388,11 +388,11 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x50280000, // 0117 LDBOOL R10 0 0
0x7C1C0600, // 0118 CALL R7 3
0x80040E00, // 0119 RET 1 R7
- 0x7002020E, // 011A JMP #032A
+ 0x7002021F, // 011A JMP #033B
0x541E0033, // 011B LDINT R7 52
0x1C1C0A07, // 011C EQ R7 R5 R7
0x781E0000, // 011D JMPF R7 #011F
- 0x7002020A, // 011E JMP #032A
+ 0x7002021B, // 011E JMP #033B
0x541E0037, // 011F LDINT R7 56
0x1C1C0A07, // 0120 EQ R7 R5 R7
0x781E002C, // 0121 JMPF R7 #014F
@@ -440,7 +440,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x5C2C0E00, // 014B MOVE R11 R7
0x7C200600, // 014C CALL R8 3
0x80041000, // 014D RET 1 R8
- 0x700201DA, // 014E JMP #032A
+ 0x700201EB, // 014E JMP #033B
0x541E003D, // 014F LDINT R7 62
0x1C1C0A07, // 0150 EQ R7 R5 R7
0x781E0082, // 0151 JMPF R7 #01D5
@@ -574,14 +574,14 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x00301109, // 01D1 ADD R12 R8 K9
0x7C240600, // 01D2 CALL R9 3
0x80041200, // 01D3 RET 1 R9
- 0x70020154, // 01D4 JMP #032A
+ 0x70020165, // 01D4 JMP #033B
0x541E003B, // 01D5 LDINT R7 60
0x1C1C0A07, // 01D6 EQ R7 R5 R7
0x781E0000, // 01D7 JMPF R7 #01D9
- 0x70020150, // 01D8 JMP #032A
+ 0x70020161, // 01D8 JMP #033B
0x541E0027, // 01D9 LDINT R7 40
0x1C1C0A07, // 01DA EQ R7 R5 R7
- 0x781E0080, // 01DB JMPF R7 #025D
+ 0x781E0091, // 01DB JMPF R7 #026E
0x1C1C0D05, // 01DC EQ R7 R6 K5
0x781E0005, // 01DD JMPF R7 #01E4
0x8C1C0906, // 01DE GETMET R7 R4 K6
@@ -589,7 +589,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x58280005, // 01E0 LDCONST R10 K5
0x7C1C0600, // 01E1 CALL R7 3
0x80040E00, // 01E2 RET 1 R7
- 0x70020077, // 01E3 JMP #025C
+ 0x70020088, // 01E3 JMP #026D
0x1C1C0D09, // 01E4 EQ R7 R6 K9
0x781E0005, // 01E5 JMPF R7 #01EC
0x8C1C0906, // 01E6 GETMET R7 R4 K6
@@ -597,7 +597,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x58280041, // 01E8 LDCONST R10 K65
0x7C1C0600, // 01E9 CALL R7 3
0x80040E00, // 01EA RET 1 R7
- 0x7002006F, // 01EB JMP #025C
+ 0x70020080, // 01EB JMP #026D
0x1C1C0D0D, // 01EC EQ R7 R6 K13
0x781E0006, // 01ED JMPF R7 #01F5
0x8C1C0906, // 01EE GETMET R7 R4 K6
@@ -606,7 +606,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x88281542, // 01F1 GETMBR R10 R10 K66
0x7C1C0600, // 01F2 CALL R7 3
0x80040E00, // 01F3 RET 1 R7
- 0x70020066, // 01F4 JMP #025C
+ 0x70020077, // 01F4 JMP #026D
0x1C1C0D0F, // 01F5 EQ R7 R6 K15
0x781E0009, // 01F6 JMPF R7 #0201
0x8C1C0906, // 01F7 GETMET R7 R4 K6
@@ -618,7 +618,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x94281543, // 01FD GETIDX R10 R10 K67
0x7C1C0600, // 01FE CALL R7 3
0x80040E00, // 01FF RET 1 R7
- 0x7002005A, // 0200 JMP #025C
+ 0x7002006B, // 0200 JMP #026D
0x541E0003, // 0201 LDINT R7 4
0x1C1C0C07, // 0202 EQ R7 R6 R7
0x781E0005, // 0203 JMPF R7 #020A
@@ -627,7 +627,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x542A7FFF, // 0206 LDINT R10 32768
0x7C1C0600, // 0207 CALL R7 3
0x80040E00, // 0208 RET 1 R7
- 0x70020051, // 0209 JMP #025C
+ 0x70020062, // 0209 JMP #026D
0x541E0004, // 020A LDINT R7 5
0x1C1C0C07, // 020B EQ R7 R6 R7
0x781E0009, // 020C JMPF R7 #0217
@@ -640,7 +640,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x94281545, // 0213 GETIDX R10 R10 K69
0x7C1C0600, // 0214 CALL R7 3
0x80040E00, // 0215 RET 1 R7
- 0x70020044, // 0216 JMP #025C
+ 0x70020055, // 0216 JMP #026D
0x541E0005, // 0217 LDINT R7 6
0x1C1C0C07, // 0218 EQ R7 R6 R7
0x781E0005, // 0219 JMPF R7 #0220
@@ -649,7 +649,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x58280046, // 021C LDCONST R10 K70
0x7C1C0600, // 021D CALL R7 3
0x80040E00, // 021E RET 1 R7
- 0x7002003B, // 021F JMP #025C
+ 0x7002004C, // 021F JMP #026D
0x541E0006, // 0220 LDINT R7 7
0x1C1C0C07, // 0221 EQ R7 R6 R7
0x781E0005, // 0222 JMPF R7 #0229
@@ -658,7 +658,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x58280005, // 0225 LDCONST R10 K5
0x7C1C0600, // 0226 CALL R7 3
0x80040E00, // 0227 RET 1 R7
- 0x70020032, // 0228 JMP #025C
+ 0x70020043, // 0228 JMP #026D
0x541E0007, // 0229 LDINT R7 8
0x1C1C0C07, // 022A EQ R7 R6 R7
0x781E000A, // 022B JMPF R7 #0237
@@ -672,7 +672,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x94281549, // 0233 GETIDX R10 R10 K73
0x7C1C0600, // 0234 CALL R7 3
0x80040E00, // 0235 RET 1 R7
- 0x70020024, // 0236 JMP #025C
+ 0x70020035, // 0236 JMP #026D
0x541E0008, // 0237 LDINT R7 9
0x1C1C0C07, // 0238 EQ R7 R6 R7
0x781E0005, // 0239 JMPF R7 #0240
@@ -681,7 +681,7 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x58280009, // 023C LDCONST R10 K9
0x7C1C0600, // 023D CALL R7 3
0x80040E00, // 023E RET 1 R7
- 0x7002001B, // 023F JMP #025C
+ 0x7002002C, // 023F JMP #026D
0x541E0009, // 0240 LDINT R7 10
0x1C1C0C07, // 0241 EQ R7 R6 R7
0x781E000A, // 0242 JMPF R7 #024E
@@ -695,10 +695,10 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x9428154A, // 024A GETIDX R10 R10 K74
0x7C1C0600, // 024B CALL R7 3
0x80040E00, // 024C RET 1 R7
- 0x7002000D, // 024D JMP #025C
+ 0x7002001E, // 024D JMP #026D
0x541E0011, // 024E LDINT R7 18
0x1C1C0C07, // 024F EQ R7 R6 R7
- 0x781E000A, // 0250 JMPF R7 #025C
+ 0x781E000B, // 0250 JMPF R7 #025D
0x8C1C0906, // 0251 GETMET R7 R4 K6
0x88240916, // 0252 GETMBR R9 R4 K22
0xB82A2400, // 0253 GETNGBL R10 K18
@@ -710,213 +710,230 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
0x7C280600, // 0259 CALL R10 3
0x7C1C0600, // 025A CALL R7 3
0x80040E00, // 025B RET 1 R7
- 0x700200CC, // 025C JMP #032A
- 0x541E003E, // 025D LDINT R7 63
- 0x1C1C0A07, // 025E EQ R7 R5 R7
- 0x781E0000, // 025F JMPF R7 #0261
- 0x700200C8, // 0260 JMP #032A
- 0x541E0029, // 0261 LDINT R7 42
- 0x1C1C0A07, // 0262 EQ R7 R5 R7
- 0x781E001D, // 0263 JMPF R7 #0282
- 0x1C1C0D05, // 0264 EQ R7 R6 K5
- 0x781E0003, // 0265 JMPF R7 #026A
- 0x8C1C0911, // 0266 GETMET R7 R4 K17
- 0x7C1C0200, // 0267 CALL R7 1
- 0x80040E00, // 0268 RET 1 R7
- 0x70020016, // 0269 JMP #0281
- 0x1C1C0D09, // 026A EQ R7 R6 K9
- 0x781E0005, // 026B JMPF R7 #0272
- 0x8C1C0906, // 026C GETMET R7 R4 K6
- 0x88240910, // 026D GETMBR R9 R4 K16
- 0x58280005, // 026E LDCONST R10 K5
- 0x7C1C0600, // 026F CALL R7 3
- 0x80040E00, // 0270 RET 1 R7
- 0x7002000E, // 0271 JMP #0281
- 0x1C1C0D0D, // 0272 EQ R7 R6 K13
- 0x781E0005, // 0273 JMPF R7 #027A
- 0x8C1C0906, // 0274 GETMET R7 R4 K6
- 0x8824090E, // 0275 GETMBR R9 R4 K14
- 0x58280009, // 0276 LDCONST R10 K9
- 0x7C1C0600, // 0277 CALL R7 3
- 0x80040E00, // 0278 RET 1 R7
- 0x70020006, // 0279 JMP #0281
- 0x1C1C0D0F, // 027A EQ R7 R6 K15
- 0x781E0004, // 027B JMPF R7 #0281
- 0x8C1C0906, // 027C GETMET R7 R4 K6
- 0x88240918, // 027D GETMBR R9 R4 K24
- 0x4C280000, // 027E LDNIL R10
- 0x7C1C0600, // 027F CALL R7 3
- 0x80040E00, // 0280 RET 1 R7
- 0x700200A7, // 0281 JMP #032A
- 0x541E002A, // 0282 LDINT R7 43
- 0x1C1C0A07, // 0283 EQ R7 R5 R7
- 0x781E0016, // 0284 JMPF R7 #029C
- 0x1C1C0D05, // 0285 EQ R7 R6 K5
- 0x781E0007, // 0286 JMPF R7 #028F
- 0x8C1C0906, // 0287 GETMET R7 R4 K6
- 0x88240916, // 0288 GETMBR R9 R4 K22
- 0xB82A2400, // 0289 GETNGBL R10 K18
- 0x8C28154B, // 028A GETMET R10 R10 K75
- 0x7C280200, // 028B CALL R10 1
- 0x7C1C0600, // 028C CALL R7 3
- 0x80040E00, // 028D RET 1 R7
- 0x7002000B, // 028E JMP #029B
- 0x1C1C0D09, // 028F EQ R7 R6 K9
- 0x781E0009, // 0290 JMPF R7 #029B
- 0x8C1C0911, // 0291 GETMET R7 R4 K17
- 0x7C1C0200, // 0292 CALL R7 1
- 0x8C200F0B, // 0293 GETMET R8 R7 K11
- 0x4C280000, // 0294 LDNIL R10
- 0x882C0916, // 0295 GETMBR R11 R4 K22
- 0xB8322400, // 0296 GETNGBL R12 K18
- 0x8C30194B, // 0297 GETMET R12 R12 K75
- 0x7C300200, // 0298 CALL R12 1
- 0x7C200800, // 0299 CALL R8 4
- 0x80040E00, // 029A RET 1 R7
- 0x7002008D, // 029B JMP #032A
- 0x541E002B, // 029C LDINT R7 44
- 0x1C1C0A07, // 029D EQ R7 R5 R7
- 0x781E001C, // 029E JMPF R7 #02BC
- 0x1C1C0D05, // 029F EQ R7 R6 K5
- 0x781E0005, // 02A0 JMPF R7 #02A7
- 0x8C1C0906, // 02A1 GETMET R7 R4 K6
- 0x8824090E, // 02A2 GETMBR R9 R4 K14
- 0x58280009, // 02A3 LDCONST R10 K9
- 0x7C1C0600, // 02A4 CALL R7 3
- 0x80040E00, // 02A5 RET 1 R7
- 0x70020013, // 02A6 JMP #02BB
- 0x1C1C0D09, // 02A7 EQ R7 R6 K9
- 0x781E0005, // 02A8 JMPF R7 #02AF
- 0x8C1C0906, // 02A9 GETMET R7 R4 K6
- 0x8824090E, // 02AA GETMBR R9 R4 K14
- 0x542A0003, // 02AB LDINT R10 4
- 0x7C1C0600, // 02AC CALL R7 3
- 0x80040E00, // 02AD RET 1 R7
- 0x7002000B, // 02AE JMP #02BB
- 0x1C1C0D0D, // 02AF EQ R7 R6 K13
- 0x781E0009, // 02B0 JMPF R7 #02BB
- 0x8C1C0911, // 02B1 GETMET R7 R4 K17
- 0x7C1C0200, // 02B2 CALL R7 1
- 0x8C200F0B, // 02B3 GETMET R8 R7 K11
- 0x4C280000, // 02B4 LDNIL R10
- 0x8C2C0906, // 02B5 GETMET R11 R4 K6
- 0x8834090E, // 02B6 GETMBR R13 R4 K14
- 0x543A0003, // 02B7 LDINT R14 4
- 0x7C2C0600, // 02B8 CALL R11 3
- 0x7C200600, // 02B9 CALL R8 3
- 0x80040E00, // 02BA RET 1 R7
- 0x7002006D, // 02BB JMP #032A
- 0x541E0030, // 02BC LDINT R7 49
- 0x1C1C0A07, // 02BD EQ R7 R5 R7
- 0x781E0010, // 02BE JMPF R7 #02D0
- 0x1C1C0D0F, // 02BF EQ R7 R6 K15
- 0x781E0005, // 02C0 JMPF R7 #02C7
- 0x8C1C0906, // 02C1 GETMET R7 R4 K6
- 0x8824090E, // 02C2 GETMBR R9 R4 K14
- 0x542A001D, // 02C3 LDINT R10 30
- 0x7C1C0600, // 02C4 CALL R7 3
- 0x80040E00, // 02C5 RET 1 R7
- 0x70020007, // 02C6 JMP #02CF
- 0x541EFFFB, // 02C7 LDINT R7 65532
- 0x1C1C0C07, // 02C8 EQ R7 R6 R7
- 0x781E0004, // 02C9 JMPF R7 #02CF
- 0x8C1C0906, // 02CA GETMET R7 R4 K6
- 0x8824092A, // 02CB GETMBR R9 R4 K42
- 0x58280005, // 02CC LDCONST R10 K5
- 0x7C1C0600, // 02CD CALL R7 3
- 0x80040E00, // 02CE RET 1 R7
- 0x70020059, // 02CF JMP #032A
- 0x541E001C, // 02D0 LDINT R7 29
- 0x1C1C0A07, // 02D1 EQ R7 R5 R7
- 0x781E0053, // 02D2 JMPF R7 #0327
- 0x1C1C0D05, // 02D3 EQ R7 R6 K5
- 0x781E001C, // 02D4 JMPF R7 #02F2
- 0x8C1C0911, // 02D5 GETMET R7 R4 K17
- 0x7C1C0200, // 02D6 CALL R7 1
- 0x60200010, // 02D7 GETGBL R8 G16
- 0x8824014C, // 02D8 GETMBR R9 R0 K76
- 0x8C24134D, // 02D9 GETMET R9 R9 K77
- 0x7C240200, // 02DA CALL R9 1
- 0x7C200200, // 02DB CALL R8 1
- 0xA802000F, // 02DC EXBLK 0 #02ED
- 0x5C241000, // 02DD MOVE R9 R8
- 0x7C240000, // 02DE CALL R9 0
- 0x8C280F15, // 02DF GETMET R10 R7 K21
- 0x7C280200, // 02E0 CALL R10 1
- 0x8C2C150B, // 02E1 GETMET R11 R10 K11
- 0x58340005, // 02E2 LDCONST R13 K5
- 0x8838090C, // 02E3 GETMBR R14 R4 K12
- 0x5C3C1200, // 02E4 MOVE R15 R9
- 0x7C2C0800, // 02E5 CALL R11 4
- 0x8C2C150B, // 02E6 GETMET R11 R10 K11
- 0x58340009, // 02E7 LDCONST R13 K9
- 0x8838090C, // 02E8 GETMBR R14 R4 K12
- 0x883C014C, // 02E9 GETMBR R15 R0 K76
- 0x943C1E09, // 02EA GETIDX R15 R15 R9
- 0x7C2C0800, // 02EB CALL R11 4
- 0x7001FFEF, // 02EC JMP #02DD
- 0x58200039, // 02ED LDCONST R8 K57
- 0xAC200200, // 02EE CATCH R8 1 0
- 0xB0080000, // 02EF RAISE 2 R0 R0
- 0x80040E00, // 02F0 RET 1 R7
- 0x70020033, // 02F1 JMP #0326
- 0x1C1C0D09, // 02F2 EQ R7 R6 K9
- 0x781E0013, // 02F3 JMPF R7 #0308
- 0x8C1C0911, // 02F4 GETMET R7 R4 K17
- 0x7C1C0200, // 02F5 CALL R7 1
- 0x60200010, // 02F6 GETGBL R8 G16
- 0x8C24014E, // 02F7 GETMET R9 R0 K78
- 0x7C240200, // 02F8 CALL R9 1
- 0x7C200200, // 02F9 CALL R8 1
- 0xA8020007, // 02FA EXBLK 0 #0303
- 0x5C241000, // 02FB MOVE R9 R8
- 0x7C240000, // 02FC CALL R9 0
- 0x8C280F0B, // 02FD GETMET R10 R7 K11
- 0x4C300000, // 02FE LDNIL R12
- 0x8834092A, // 02FF GETMBR R13 R4 K42
- 0x5C381200, // 0300 MOVE R14 R9
- 0x7C280800, // 0301 CALL R10 4
- 0x7001FFF7, // 0302 JMP #02FB
- 0x58200039, // 0303 LDCONST R8 K57
- 0xAC200200, // 0304 CATCH R8 1 0
- 0xB0080000, // 0305 RAISE 2 R0 R0
- 0x80040E00, // 0306 RET 1 R7
- 0x7002001D, // 0307 JMP #0326
- 0x1C1C0D0D, // 0308 EQ R7 R6 K13
- 0x781E0003, // 0309 JMPF R7 #030E
- 0x8C1C0911, // 030A GETMET R7 R4 K17
- 0x7C1C0200, // 030B CALL R7 1
- 0x80040E00, // 030C RET 1 R7
- 0x70020017, // 030D JMP #0326
- 0x1C1C0D0F, // 030E EQ R7 R6 K15
- 0x781E0015, // 030F JMPF R7 #0326
- 0x881C0133, // 0310 GETMBR R7 R0 K51
- 0x8C1C0F4F, // 0311 GETMET R7 R7 K79
- 0x50240200, // 0312 LDBOOL R9 1 0
- 0x7C1C0400, // 0313 CALL R7 2
- 0x8C200911, // 0314 GETMET R8 R4 K17
- 0x7C200200, // 0315 CALL R8 1
- 0x60240010, // 0316 GETGBL R9 G16
- 0x5C280E00, // 0317 MOVE R10 R7
- 0x7C240200, // 0318 CALL R9 1
- 0xA8020007, // 0319 EXBLK 0 #0322
- 0x5C281200, // 031A MOVE R10 R9
- 0x7C280000, // 031B CALL R10 0
- 0x8C2C110B, // 031C GETMET R11 R8 K11
- 0x4C340000, // 031D LDNIL R13
- 0x8838090C, // 031E GETMBR R14 R4 K12
- 0x5C3C1400, // 031F MOVE R15 R10
- 0x7C2C0800, // 0320 CALL R11 4
- 0x7001FFF7, // 0321 JMP #031A
- 0x58240039, // 0322 LDCONST R9 K57
- 0xAC240200, // 0323 CATCH R9 1 0
- 0xB0080000, // 0324 RAISE 2 R0 R0
- 0x80041000, // 0325 RET 1 R8
- 0x70020002, // 0326 JMP #032A
- 0xB81E0200, // 0327 GETNGBL R7 K1
- 0x881C0F51, // 0328 GETMBR R7 R7 K81
- 0x900AA007, // 0329 SETMBR R2 K80 R7
- 0x80000000, // 032A RET 0
+ 0x7002000F, // 025C JMP #026D
+ 0x541E0012, // 025D LDINT R7 19
+ 0x1C1C0C07, // 025E EQ R7 R6 R7
+ 0x781E000C, // 025F JMPF R7 #026D
+ 0x8C1C090A, // 0260 GETMET R7 R4 K10
+ 0x7C1C0200, // 0261 CALL R7 1
+ 0x8C200F0B, // 0262 GETMET R8 R7 K11
+ 0x58280005, // 0263 LDCONST R10 K5
+ 0x882C090C, // 0264 GETMBR R11 R4 K12
+ 0x5830000F, // 0265 LDCONST R12 K15
+ 0x7C200800, // 0266 CALL R8 4
+ 0x8C200F0B, // 0267 GETMET R8 R7 K11
+ 0x58280009, // 0268 LDCONST R10 K9
+ 0x882C090C, // 0269 GETMBR R11 R4 K12
+ 0x5830000F, // 026A LDCONST R12 K15
+ 0x7C200800, // 026B CALL R8 4
+ 0x80040E00, // 026C RET 1 R7
+ 0x700200CC, // 026D JMP #033B
+ 0x541E003E, // 026E LDINT R7 63
+ 0x1C1C0A07, // 026F EQ R7 R5 R7
+ 0x781E0000, // 0270 JMPF R7 #0272
+ 0x700200C8, // 0271 JMP #033B
+ 0x541E0029, // 0272 LDINT R7 42
+ 0x1C1C0A07, // 0273 EQ R7 R5 R7
+ 0x781E001D, // 0274 JMPF R7 #0293
+ 0x1C1C0D05, // 0275 EQ R7 R6 K5
+ 0x781E0003, // 0276 JMPF R7 #027B
+ 0x8C1C0911, // 0277 GETMET R7 R4 K17
+ 0x7C1C0200, // 0278 CALL R7 1
+ 0x80040E00, // 0279 RET 1 R7
+ 0x70020016, // 027A JMP #0292
+ 0x1C1C0D09, // 027B EQ R7 R6 K9
+ 0x781E0005, // 027C JMPF R7 #0283
+ 0x8C1C0906, // 027D GETMET R7 R4 K6
+ 0x88240910, // 027E GETMBR R9 R4 K16
+ 0x58280005, // 027F LDCONST R10 K5
+ 0x7C1C0600, // 0280 CALL R7 3
+ 0x80040E00, // 0281 RET 1 R7
+ 0x7002000E, // 0282 JMP #0292
+ 0x1C1C0D0D, // 0283 EQ R7 R6 K13
+ 0x781E0005, // 0284 JMPF R7 #028B
+ 0x8C1C0906, // 0285 GETMET R7 R4 K6
+ 0x8824090E, // 0286 GETMBR R9 R4 K14
+ 0x58280009, // 0287 LDCONST R10 K9
+ 0x7C1C0600, // 0288 CALL R7 3
+ 0x80040E00, // 0289 RET 1 R7
+ 0x70020006, // 028A JMP #0292
+ 0x1C1C0D0F, // 028B EQ R7 R6 K15
+ 0x781E0004, // 028C JMPF R7 #0292
+ 0x8C1C0906, // 028D GETMET R7 R4 K6
+ 0x88240918, // 028E GETMBR R9 R4 K24
+ 0x4C280000, // 028F LDNIL R10
+ 0x7C1C0600, // 0290 CALL R7 3
+ 0x80040E00, // 0291 RET 1 R7
+ 0x700200A7, // 0292 JMP #033B
+ 0x541E002A, // 0293 LDINT R7 43
+ 0x1C1C0A07, // 0294 EQ R7 R5 R7
+ 0x781E0016, // 0295 JMPF R7 #02AD
+ 0x1C1C0D05, // 0296 EQ R7 R6 K5
+ 0x781E0007, // 0297 JMPF R7 #02A0
+ 0x8C1C0906, // 0298 GETMET R7 R4 K6
+ 0x88240916, // 0299 GETMBR R9 R4 K22
+ 0xB82A2400, // 029A GETNGBL R10 K18
+ 0x8C28154B, // 029B GETMET R10 R10 K75
+ 0x7C280200, // 029C CALL R10 1
+ 0x7C1C0600, // 029D CALL R7 3
+ 0x80040E00, // 029E RET 1 R7
+ 0x7002000B, // 029F JMP #02AC
+ 0x1C1C0D09, // 02A0 EQ R7 R6 K9
+ 0x781E0009, // 02A1 JMPF R7 #02AC
+ 0x8C1C0911, // 02A2 GETMET R7 R4 K17
+ 0x7C1C0200, // 02A3 CALL R7 1
+ 0x8C200F0B, // 02A4 GETMET R8 R7 K11
+ 0x4C280000, // 02A5 LDNIL R10
+ 0x882C0916, // 02A6 GETMBR R11 R4 K22
+ 0xB8322400, // 02A7 GETNGBL R12 K18
+ 0x8C30194B, // 02A8 GETMET R12 R12 K75
+ 0x7C300200, // 02A9 CALL R12 1
+ 0x7C200800, // 02AA CALL R8 4
+ 0x80040E00, // 02AB RET 1 R7
+ 0x7002008D, // 02AC JMP #033B
+ 0x541E002B, // 02AD LDINT R7 44
+ 0x1C1C0A07, // 02AE EQ R7 R5 R7
+ 0x781E001C, // 02AF JMPF R7 #02CD
+ 0x1C1C0D05, // 02B0 EQ R7 R6 K5
+ 0x781E0005, // 02B1 JMPF R7 #02B8
+ 0x8C1C0906, // 02B2 GETMET R7 R4 K6
+ 0x8824090E, // 02B3 GETMBR R9 R4 K14
+ 0x58280009, // 02B4 LDCONST R10 K9
+ 0x7C1C0600, // 02B5 CALL R7 3
+ 0x80040E00, // 02B6 RET 1 R7
+ 0x70020013, // 02B7 JMP #02CC
+ 0x1C1C0D09, // 02B8 EQ R7 R6 K9
+ 0x781E0005, // 02B9 JMPF R7 #02C0
+ 0x8C1C0906, // 02BA GETMET R7 R4 K6
+ 0x8824090E, // 02BB GETMBR R9 R4 K14
+ 0x542A0003, // 02BC LDINT R10 4
+ 0x7C1C0600, // 02BD CALL R7 3
+ 0x80040E00, // 02BE RET 1 R7
+ 0x7002000B, // 02BF JMP #02CC
+ 0x1C1C0D0D, // 02C0 EQ R7 R6 K13
+ 0x781E0009, // 02C1 JMPF R7 #02CC
+ 0x8C1C0911, // 02C2 GETMET R7 R4 K17
+ 0x7C1C0200, // 02C3 CALL R7 1
+ 0x8C200F0B, // 02C4 GETMET R8 R7 K11
+ 0x4C280000, // 02C5 LDNIL R10
+ 0x8C2C0906, // 02C6 GETMET R11 R4 K6
+ 0x8834090E, // 02C7 GETMBR R13 R4 K14
+ 0x543A0003, // 02C8 LDINT R14 4
+ 0x7C2C0600, // 02C9 CALL R11 3
+ 0x7C200600, // 02CA CALL R8 3
+ 0x80040E00, // 02CB RET 1 R7
+ 0x7002006D, // 02CC JMP #033B
+ 0x541E0030, // 02CD LDINT R7 49
+ 0x1C1C0A07, // 02CE EQ R7 R5 R7
+ 0x781E0010, // 02CF JMPF R7 #02E1
+ 0x1C1C0D0F, // 02D0 EQ R7 R6 K15
+ 0x781E0005, // 02D1 JMPF R7 #02D8
+ 0x8C1C0906, // 02D2 GETMET R7 R4 K6
+ 0x8824090E, // 02D3 GETMBR R9 R4 K14
+ 0x542A001D, // 02D4 LDINT R10 30
+ 0x7C1C0600, // 02D5 CALL R7 3
+ 0x80040E00, // 02D6 RET 1 R7
+ 0x70020007, // 02D7 JMP #02E0
+ 0x541EFFFB, // 02D8 LDINT R7 65532
+ 0x1C1C0C07, // 02D9 EQ R7 R6 R7
+ 0x781E0004, // 02DA JMPF R7 #02E0
+ 0x8C1C0906, // 02DB GETMET R7 R4 K6
+ 0x8824092A, // 02DC GETMBR R9 R4 K42
+ 0x58280005, // 02DD LDCONST R10 K5
+ 0x7C1C0600, // 02DE CALL R7 3
+ 0x80040E00, // 02DF RET 1 R7
+ 0x70020059, // 02E0 JMP #033B
+ 0x541E001C, // 02E1 LDINT R7 29
+ 0x1C1C0A07, // 02E2 EQ R7 R5 R7
+ 0x781E0053, // 02E3 JMPF R7 #0338
+ 0x1C1C0D05, // 02E4 EQ R7 R6 K5
+ 0x781E001C, // 02E5 JMPF R7 #0303
+ 0x8C1C0911, // 02E6 GETMET R7 R4 K17
+ 0x7C1C0200, // 02E7 CALL R7 1
+ 0x60200010, // 02E8 GETGBL R8 G16
+ 0x8824014C, // 02E9 GETMBR R9 R0 K76
+ 0x8C24134D, // 02EA GETMET R9 R9 K77
+ 0x7C240200, // 02EB CALL R9 1
+ 0x7C200200, // 02EC CALL R8 1
+ 0xA802000F, // 02ED EXBLK 0 #02FE
+ 0x5C241000, // 02EE MOVE R9 R8
+ 0x7C240000, // 02EF CALL R9 0
+ 0x8C280F15, // 02F0 GETMET R10 R7 K21
+ 0x7C280200, // 02F1 CALL R10 1
+ 0x8C2C150B, // 02F2 GETMET R11 R10 K11
+ 0x58340005, // 02F3 LDCONST R13 K5
+ 0x8838090C, // 02F4 GETMBR R14 R4 K12
+ 0x5C3C1200, // 02F5 MOVE R15 R9
+ 0x7C2C0800, // 02F6 CALL R11 4
+ 0x8C2C150B, // 02F7 GETMET R11 R10 K11
+ 0x58340009, // 02F8 LDCONST R13 K9
+ 0x8838090C, // 02F9 GETMBR R14 R4 K12
+ 0x883C014C, // 02FA GETMBR R15 R0 K76
+ 0x943C1E09, // 02FB GETIDX R15 R15 R9
+ 0x7C2C0800, // 02FC CALL R11 4
+ 0x7001FFEF, // 02FD JMP #02EE
+ 0x58200039, // 02FE LDCONST R8 K57
+ 0xAC200200, // 02FF CATCH R8 1 0
+ 0xB0080000, // 0300 RAISE 2 R0 R0
+ 0x80040E00, // 0301 RET 1 R7
+ 0x70020033, // 0302 JMP #0337
+ 0x1C1C0D09, // 0303 EQ R7 R6 K9
+ 0x781E0013, // 0304 JMPF R7 #0319
+ 0x8C1C0911, // 0305 GETMET R7 R4 K17
+ 0x7C1C0200, // 0306 CALL R7 1
+ 0x60200010, // 0307 GETGBL R8 G16
+ 0x8C24014E, // 0308 GETMET R9 R0 K78
+ 0x7C240200, // 0309 CALL R9 1
+ 0x7C200200, // 030A CALL R8 1
+ 0xA8020007, // 030B EXBLK 0 #0314
+ 0x5C241000, // 030C MOVE R9 R8
+ 0x7C240000, // 030D CALL R9 0
+ 0x8C280F0B, // 030E GETMET R10 R7 K11
+ 0x4C300000, // 030F LDNIL R12
+ 0x8834092A, // 0310 GETMBR R13 R4 K42
+ 0x5C381200, // 0311 MOVE R14 R9
+ 0x7C280800, // 0312 CALL R10 4
+ 0x7001FFF7, // 0313 JMP #030C
+ 0x58200039, // 0314 LDCONST R8 K57
+ 0xAC200200, // 0315 CATCH R8 1 0
+ 0xB0080000, // 0316 RAISE 2 R0 R0
+ 0x80040E00, // 0317 RET 1 R7
+ 0x7002001D, // 0318 JMP #0337
+ 0x1C1C0D0D, // 0319 EQ R7 R6 K13
+ 0x781E0003, // 031A JMPF R7 #031F
+ 0x8C1C0911, // 031B GETMET R7 R4 K17
+ 0x7C1C0200, // 031C CALL R7 1
+ 0x80040E00, // 031D RET 1 R7
+ 0x70020017, // 031E JMP #0337
+ 0x1C1C0D0F, // 031F EQ R7 R6 K15
+ 0x781E0015, // 0320 JMPF R7 #0337
+ 0x881C0133, // 0321 GETMBR R7 R0 K51
+ 0x8C1C0F4F, // 0322 GETMET R7 R7 K79
+ 0x50240200, // 0323 LDBOOL R9 1 0
+ 0x7C1C0400, // 0324 CALL R7 2
+ 0x8C200911, // 0325 GETMET R8 R4 K17
+ 0x7C200200, // 0326 CALL R8 1
+ 0x60240010, // 0327 GETGBL R9 G16
+ 0x5C280E00, // 0328 MOVE R10 R7
+ 0x7C240200, // 0329 CALL R9 1
+ 0xA8020007, // 032A EXBLK 0 #0333
+ 0x5C281200, // 032B MOVE R10 R9
+ 0x7C280000, // 032C CALL R10 0
+ 0x8C2C110B, // 032D GETMET R11 R8 K11
+ 0x4C340000, // 032E LDNIL R13
+ 0x8838090C, // 032F GETMBR R14 R4 K12
+ 0x5C3C1400, // 0330 MOVE R15 R10
+ 0x7C2C0800, // 0331 CALL R11 4
+ 0x7001FFF7, // 0332 JMP #032B
+ 0x58240039, // 0333 LDCONST R9 K57
+ 0xAC240200, // 0334 CATCH R9 1 0
+ 0xB0080000, // 0335 RAISE 2 R0 R0
+ 0x80041000, // 0336 RET 1 R8
+ 0x70020002, // 0337 JMP #033B
+ 0xB81E0200, // 0338 GETNGBL R7 K1
+ 0x881C0F51, // 0339 GETMBR R7 R7 K81
+ 0x900AA007, // 033A SETMBR R2 K80 R7
+ 0x80000000, // 033B RET 0
})
)
);
@@ -1796,7 +1813,7 @@ be_local_class(Matter_Plugin_Root,
be_const_int(5),
})) ) } )) },
{ be_const_key_int(40, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(11,
+ be_const_list( * be_nested_list(12,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
@@ -1809,6 +1826,7 @@ be_local_class(Matter_Plugin_Root,
be_const_int(8),
be_const_int(9),
be_const_int(18),
+ be_const_int(19),
})) ) } )) },
{ be_const_key_int(49, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
From 29ae903f67dfd4a735ae23ded8017815ce7dcbba Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 24 Feb 2023 16:15:02 +0100
Subject: [PATCH 035/227] Fixed EnergyTotal divided twice
Fixed EnergyTotal divided twice during minimal upgrade step regression from v12.3.1.3 (#18024)
---
CHANGELOG.md | 1 +
RELEASENOTES.md | 1 +
tasmota/tasmota_support/settings.ino | 8 ++++++--
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 45902db78..86c2b5e93 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -22,6 +22,7 @@ All notable changes to this project will be documented in this file.
- Undocumented support for non-sequential buttons and switches (#17967)
- SR04 driver single pin ultrasonic sensor detection (#17966)
- IR panasonic protocol regression from v12.0.2.4 (#18013)
+- EnergyTotal divided twice during minimal upgrade step regression from v12.3.1.3 (#18024)
### Removed
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index dd039ce1d..399d5a158 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -125,3 +125,4 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- Energytotals cannot be set to negative values [#17965](https://github.com/arendst/Tasmota/issues/17965)
- SR04 driver single pin ultrasonic sensor detection [#17966](https://github.com/arendst/Tasmota/issues/17966)
- IR panasonic protocol regression from v12.0.2.4 [#18013](https://github.com/arendst/Tasmota/issues/18013)
+- EnergyTotal divided twice during minimal upgrade step regression from v12.3.1.3 [#18024](https://github.com/arendst/Tasmota/issues/18024)
diff --git a/tasmota/tasmota_support/settings.ino b/tasmota/tasmota_support/settings.ino
index 06a322e5d..f53abb684 100644
--- a/tasmota/tasmota_support/settings.ino
+++ b/tasmota/tasmota_support/settings.ino
@@ -1616,17 +1616,21 @@ void SettingsDelta(void) {
}
if (Settings->version < 0x0C030103) { // 12.3.1.3
for (uint32_t i = 0; i < 3; i++) {
- RtcSettings.energy_kWhtotal_ph[i] /= 100;
Settings->energy_kWhtotal_ph[i] /= 100;
- RtcSettings.energy_kWhexport_ph[i] /= 100;
Settings->energy_kWhexport_ph[i] /= 100;
+#ifndef FIRMWARE_MINIMAL
+ RtcSettings.energy_kWhtotal_ph[i] /= 100;
+ RtcSettings.energy_kWhexport_ph[i] /= 100;
+#endif
}
+#ifndef FIRMWARE_MINIMAL
RtcSettings.energy_usage.usage1_kWhtotal /= 100;
RtcSettings.energy_usage.usage2_kWhtotal /= 100;
RtcSettings.energy_usage.return1_kWhtotal /= 100;
RtcSettings.energy_usage.return2_kWhtotal /= 100;
RtcSettings.energy_usage.last_return_kWhtotal /= 100;
RtcSettings.energy_usage.last_usage_kWhtotal /= 100;
+#endif
}
Settings->version = VERSION;
From c752610bb7a3525d2f4a0cf11185dd6ee68a8177 Mon Sep 17 00:00:00 2001
From: gemu
Date: Sat, 25 Feb 2023 09:58:33 +0100
Subject: [PATCH 036/227] modbus tcp, uart select (#18038)
---
tasmota/tasmota_xsns_sensor/xsns_53_sml.ino | 382 ++++++++++++++------
1 file changed, 275 insertions(+), 107 deletions(-)
diff --git a/tasmota/tasmota_xsns_sensor/xsns_53_sml.ino b/tasmota/tasmota_xsns_sensor/xsns_53_sml.ino
index 0df0973f7..c7629a52f 100755
--- a/tasmota/tasmota_xsns_sensor/xsns_53_sml.ino
+++ b/tasmota/tasmota_xsns_sensor/xsns_53_sml.ino
@@ -32,7 +32,6 @@
//#define DEBUG_CNT_LED1 2
//#define DEBUG_CNT_LED1 2
-
#include
@@ -81,6 +80,16 @@
#define USE_SML_DECRYPT
#endif
+#ifndef NO_USE_SML_TCP
+// modbus over TCP
+#define USE_SML_TCP
+#endif
+
+#ifndef NO_SML_OBIS_LINE
+// obis in line mode
+#define SML_OBIS_LINE
+#endif
+
// median filter eliminates outliers, but uses much RAM and CPU cycles
// 672 bytes extra RAM with SML_MAX_VARS = 16
// default compile on, but must be enabled by descriptor flag 16
@@ -132,6 +141,10 @@ needs USE_SML_AUTHKEY
synchronisation timout in milliseconds, after no serial data within this
time serial pointer is reset to zero
+7:
+on esp32 the uart index may be set, normally it is allocated from 2 down to 0 automatically
+thus you can combine serial SML with serial script , berry or serial drivers.
+
*/
//#define MODBUS_DEBUG
@@ -409,7 +422,8 @@ struct METER_DESC {
uint8_t so_bpos1;
uint8_t so_fcode2;
uint8_t so_bpos2;
-#endif
+#endif // USE_SML_SPECOPT
+
#ifdef ESP32
#ifndef USE_ESP32_SW_SERIAL
HardwareSerial *meter_ss;
@@ -417,10 +431,12 @@ struct METER_DESC {
SML_ESP32_SERIAL *meter_ss;
#endif
#endif // ESP32
+
// software serial pointers
#ifdef ESP8266
TasmotaSerial *meter_ss;
#endif // ESP8266
+
#ifdef USE_SML_DECRYPT
bool use_crypt = false;
uint8_t last_iob;
@@ -428,11 +444,26 @@ struct METER_DESC {
Han_Parser *hp;
#ifdef USE_SML_AUTHKEY
uint8_t auth[SML_CRYPT_SIZE];
+#endif // USE_SML_AUTHKEY
+#endif // USE_SML_DECRYPT
+
+#ifdef USE_SML_TCP
+ IPAddress ip_addr;
+#ifdef TCP_CLIENT_SECURE
+ WiFiClientSecure *client;
+#else
+ WiFiClient *client;
+#endif
+
+#ifdef ESP32
+ int8_t uart_index;
#endif
#endif
};
+#define TCP_MODE_FLG 0x7f
+
struct METER_DESC meter_desc[MAX_METERS];
@@ -573,22 +604,37 @@ double sml_median(struct SML_MEDIAN_FILTER* mf, double in) {
uint16_t Serial_available() {
uint8_t num = sml_globs.dump2log & 7;
if (num < 1 || num > sml_globs.meters_used) num = 1;
- if (!meter_desc[num - 1].meter_ss) return 0;
- return meter_desc[num - 1].meter_ss->available();
+ num--;
+ if (meter_desc[num].srcpin != TCP_MODE_FLG) {
+ if (!meter_desc[num].meter_ss) return 0;
+ return meter_desc[num].meter_ss->available();
+ } else {
+ return meter_desc[num].client->available();
+ }
}
uint8_t Serial_read() {
uint8_t num = sml_globs.dump2log & 7;
if (num < 1 || num > sml_globs.meters_used) num = 1;
- if (!meter_desc[num - 1].meter_ss) return 0;
- return meter_desc[num - 1].meter_ss->read();
+ num--;
+ if (meter_desc[num].srcpin != TCP_MODE_FLG) {
+ if (!meter_desc[num].meter_ss) return 0;
+ return meter_desc[num].meter_ss->read();
+ } else {
+ return meter_desc[num].client->read();
+ }
}
uint8_t Serial_peek() {
uint8_t num = sml_globs.dump2log & 7;
if (num < 1 || num > sml_globs.meters_used) num = 1;
- if (!meter_desc[num - 1].meter_ss) return 0;
- return meter_desc[num - 1].meter_ss->peek();
+ num--;
+ if (meter_desc[num].srcpin != TCP_MODE_FLG) {
+ if (!meter_desc[num].meter_ss) return 0;
+ return meter_desc[num].meter_ss->peek();
+ } else {
+ return meter_desc[num].client->peek();
+ }
}
void sml_dump_start(char c) {
@@ -599,7 +645,7 @@ void sml_dump_start(char c) {
#define SML_EBUS_SKIP_SYNC_DUMPS
-uint8_t *hdlc_decode(struct METER_DESC *mp, uint16_t *size);
+
void dump2log(void) {
int16_t index = 0, hcnt = 0;
@@ -1206,7 +1252,13 @@ void sml_shift_in(uint32_t meters, uint32_t shard) {
mp->sbuff[count] = mp->sbuff[count + 1];
}
}
- uint8_t iob = (uint8_t)mp->meter_ss->read();
+
+ uint8_t iob;
+ if (mp->srcpin != TCP_MODE_FLG) {
+ iob = (uint8_t)mp->meter_ss->read();
+ } else {
+ iob = (uint8_t)mp->client->read();
+ }
switch (mp->type) {
case 'o':
@@ -1289,6 +1341,20 @@ void sml_shift_in(uint32_t meters, uint32_t shard) {
if (mp->spos >= mp->sbsiz) {
mp->spos = 0;
}
+ if (mp->srcpin == TCP_MODE_FLG) {
+ // tcp read
+ if (mp->spos >= 6) {
+ uint8_t tlen = (mp->sbuff[4] << 8) | mp->sbuff[5];
+ if (mp->spos == 6 + tlen) {
+ mp->spos = 0;
+ SML_Decode(meters);
+ mp->client->flush();
+ //Hexdump(mp->sbuff + 6, 10);
+ }
+ }
+ break;
+ }
+
if (mp->spos >= 3) {
uint32_t mlen = mp->sbuff[2] + 5;
if (mlen > mp->sbsiz) mlen = mp->sbsiz;
@@ -1369,23 +1435,24 @@ void SML_Poll(void) {
uint32_t meters;
for (meters = 0; meters < sml_globs.meters_used; meters++) {
- if (sml_globs.mp[meters].type != 'c') {
- // poll for serial input
- if (!meter_desc[meters].meter_ss) continue;
- if (sml_globs.ser_act_LED_pin != 255 && (sml_globs.ser_act_meter_num == 0 || sml_globs.ser_act_meter_num - 1 == meters)) {
- digitalWrite(sml_globs.ser_act_LED_pin, meter_desc[meters].meter_ss->available() && !digitalRead(sml_globs.ser_act_LED_pin)); // Invert LED, if queue is continuously full
+ struct METER_DESC *mp = &meter_desc[meters];
+ if (mp->type != 'c') {
+ if (mp->srcpin != TCP_MODE_FLG) {
+ if (!mp->meter_ss) continue;
+ // poll for serial input
+ if (sml_globs.ser_act_LED_pin != 255 && (sml_globs.ser_act_meter_num == 0 || sml_globs.ser_act_meter_num - 1 == meters)) {
+ digitalWrite(sml_globs.ser_act_LED_pin, mp->meter_ss->available() && !digitalRead(sml_globs.ser_act_LED_pin)); // Invert LED, if queue is continuously full
+ }
+ while (mp->meter_ss->available()) {
+ sml_shift_in(meters, 0);
+ }
+ } else {
+#ifdef USE_SML_TCP
+ while (mp->client->available()){
+ sml_shift_in(meters, 0);
+ }
+#endif
}
- while (meter_desc[meters].meter_ss->available()) {
- sml_shift_in(meters, 0);
- }
-/*
- if (meter_desc[meters].meter_ss->available()) {
- sml_count++;
- uint8_t iob = meter_desc[meters].meter_ss->read();
- if (sml_count<5 || sml_count > 100) {
- AddLog(LOG_LEVEL_INFO, PSTR(">> %02x - %d"),iob,sml_count);
- }
- }*/
}
}
}
@@ -1656,6 +1723,11 @@ void SML_Decode(uint8_t index) {
double ebus_dval = 99;
double mbus_dval = 99;
while (*mp != '@') {
+ if (found == 0) {
+ // skip rest of decoder part
+ mp++;
+ continue;
+ }
if (sml_globs.mp[mindex].type == 'o' || sml_globs.mp[mindex].type == 'c') {
if (*mp++ != *cp++) {
found=0;
@@ -2545,12 +2617,18 @@ struct METER_DESC *mp = &meter_desc[mnum];
mp->auth[cnt / 2] = (sml_hexnibble(cp[cnt]) << 4) | sml_hexnibble(cp[cnt + 1]);
}
break;
+#endif // USE_SML_AUTHKEY
+#endif // USE_SML_DECRYPT
case '6':
cp += 2;
mp->tout_ms = strtol(cp, &cp, 10);
+ break;
+ case '7':
+ cp += 2;
+#ifdef ESP32
+ mp->uart_index = strtol(cp, &cp, 10);
+#endif // ESP32
break;
-#endif
-#endif
}
return cp;
}
@@ -2630,6 +2708,10 @@ void reset_sml_vars(uint16_t maxmeters) {
mp->lastms = millis();
mp->tout_ms = SML_STIMEOUT;
+#ifdef ESP32
+ mp->uart_index = -1;
+#endif
+
#ifdef USE_SML_DECRYPT
if (mp->use_crypt) {
if (mp->hp) {
@@ -2707,8 +2789,13 @@ void SML_Init(void) {
uint32_t mlen;
uint16_t memory = 0;
+#ifdef ESP32
+ uint32_t uart_index = SOC_UART_NUM - 1;
+#endif
+
sml_globs.sml_send_blocks = 0;
lp = glob_script_mem.section_ptr;
+ struct METER_DESC *mmp;
while (lp) {
if (!section) {
if (*lp == '>' && *(lp + 1) == 'M') {
@@ -2741,93 +2828,115 @@ void SML_Init(void) {
goto next_line;
}
index--;
- srcpin = strtol(lp, &lp, 10);
- if (Gpio_used(abs(srcpin))) {
- AddLog(LOG_LEVEL_INFO, PSTR("SML: Error: Duplicate GPIO %d defined. Not usable for RX in meter number %d"), abs(srcpin), index + 1);
+ mmp = &meter_desc[index];
+ if (*lp == '[') {
+ // sign TCP mode
+ srcpin = TCP_MODE_FLG;
+ lp++;
+ char str[32];
+ uint8_t cnt;
+ for (cnt = 0; cnt < sizeof(str) - 1; cnt++) {
+ if (!*lp || *lp == '\n' || *lp == ']') {
+ break;
+ }
+ str[cnt] = *lp++;
+ }
+ str[cnt] = 0;
+ lp++;
+#ifdef USE_SML_TCP
+ mmp->ip_addr.fromString(str);
+#endif
+ } else {
+ srcpin = strtol(lp, &lp, 10);
+ if (Gpio_used(abs(srcpin))) {
+ AddLog(LOG_LEVEL_INFO, PSTR("SML: Error: Duplicate GPIO %d defined. Not usable for RX in meter number %d"), abs(srcpin), index + 1);
dddef_exit:
- if (sml_globs.script_meter) free(sml_globs.script_meter);
- sml_globs.script_meter = 0;
- return;
+ if (sml_globs.script_meter) free(sml_globs.script_meter);
+ sml_globs.script_meter = 0;
+ return;
+ }
}
- meter_desc[index].srcpin = srcpin;
+ mmp->srcpin = srcpin;
if (*lp != ',') goto next_line;
lp++;
- meter_desc[index].type = *lp;
+ mmp->type = *lp;
lp++;
if (*lp != ',') {
switch (*lp) {
case 'N':
lp++;
- meter_desc[index].sopt = 0x10 | (*lp & 3);
+ mmp->sopt = 0x10 | (*lp & 3);
lp++;
break;
case 'E':
lp++;
- meter_desc[index].sopt = 0x20 | (*lp & 3);
+ mmp->sopt = 0x20 | (*lp & 3);
lp++;
break;
case 'O':
lp++;
- meter_desc[index].sopt = 0x30 | (*lp & 3);
+ mmp->sopt = 0x30 | (*lp & 3);
lp++;
break;
default:
- meter_desc[index].sopt = *lp&7;
+ mmp->sopt = *lp&7;
lp++;
}
} else {
- meter_desc[index].sopt = 0;
+ mmp->sopt = 0;
}
lp++;
- meter_desc[index].flag = strtol(lp, &lp, 10);
+ mmp->flag = strtol(lp, &lp, 10);
if (*lp != ',') goto next_line;
lp++;
- meter_desc[index].params = strtol(lp, &lp, 10);
+ mmp->params = strtol(lp, &lp, 10);
if (*lp != ',') goto next_line;
lp++;
- meter_desc[index].prefix[7] = 0;
+ mmp->prefix[7] = 0;
for (uint32_t cnt = 0; cnt < 8; cnt++) {
if (*lp == SCRIPT_EOL || *lp == ',') {
- meter_desc[index].prefix[cnt] = 0;
+ mmp->prefix[cnt] = 0;
break;
}
- meter_desc[index].prefix[cnt] = *lp++;
+ mmp->prefix[cnt] = *lp++;
}
if (*lp == ',') {
lp++;
// get TRX pin
- meter_desc[index].trxpin = strtol(lp, &lp, 10);
- if (Gpio_used(meter_desc[index].trxpin)) {
- AddLog(LOG_LEVEL_INFO, PSTR("SML: Error: Duplicate GPIO %d defined. Not usable for TX in meter number %d"), meter_desc[index].trxpin, index + 1);
- goto dddef_exit;
+ mmp->trxpin = strtol(lp, &lp, 10);
+ if (mmp->srcpin != TCP_MODE_FLG) {
+ if (Gpio_used(mmp->trxpin)) {
+ AddLog(LOG_LEVEL_INFO, PSTR("SML: Error: Duplicate GPIO %d defined. Not usable for TX in meter number %d"), meter_desc[index].trxpin, index + 1);
+ goto dddef_exit;
+ }
}
// optional transmit enable pin
if (*lp == '(') {
lp++;
if (*lp == 'i') {
lp++;
- meter_desc[index].trx_en.trxenpol = 1;
+ mmp->trx_en.trxenpol = 1;
} else {
- meter_desc[index].trx_en.trxenpol = 0;
+ mmp->trx_en.trxenpol = 0;
}
- meter_desc[index].trx_en.trxenpin = strtol(lp, &lp, 10);
+ mmp->trx_en.trxenpin = strtol(lp, &lp, 10);
if (*lp != ')') {
goto dddef_exit;
}
lp++;
- if (Gpio_used(meter_desc[index].trx_en.trxenpin)) {
+ if (Gpio_used(mmp->trx_en.trxenpin)) {
AddLog(LOG_LEVEL_INFO, PSTR("SML: Error: Duplicate GPIO %d defined. Not usable for TX enable in meter number %d"), meter_desc[index].trx_en.trxenpin, index + 1);
goto dddef_exit;
}
- meter_desc[index].trx_en.trxen = 1;
- pinMode(meter_desc[index].trx_en.trxenpin, OUTPUT);
- digitalWrite(meter_desc[index].trx_en.trxenpin, meter_desc[index].trx_en.trxenpol);
+ mmp->trx_en.trxen = 1;
+ pinMode(mmp->trx_en.trxenpin, OUTPUT);
+ digitalWrite(mmp->trx_en.trxenpin, mmp->trx_en.trxenpol);
} else {
- meter_desc[index].trx_en.trxen = 0;
+ mmp->trx_en.trxen = 0;
}
if (*lp != ',') goto next_line;
lp++;
- meter_desc[index].tsecs = strtol(lp, &lp, 10);
+ mmp->tsecs = strtol(lp, &lp, 10);
if (*lp == ',') {
lp++;
// look ahead
@@ -2851,9 +2960,9 @@ dddef_exit:
txlen++;
}
if (txlen) {
- meter_desc[index].txmem = (char*)calloc(txlen + 2, 1);
+ mmp->txmem = (char*)calloc(txlen + 2, 1);
memory += txlen + 2;
- if (meter_desc[index].txmem) {
+ if (mmp->txmem) {
// now copy send blocks
char *txp = lp;
uint16_t tind = 0;
@@ -2861,14 +2970,14 @@ dddef_exit:
if (*txp == SCRIPT_EOL) {
txp++;
} else {
- meter_desc[index].txmem[tind] = *txp++;
+ mmp->txmem[tind] = *txp++;
tind++;
}
}
}
//AddLog(LOG_LEVEL_INFO, PSTR(">>> %s - %d"), meter_desc[index].txmem, txlen);
- meter_desc[index].index = 0;
- meter_desc[index].max_index = tx_entries;
+ mmp->index = 0;
+ mmp->max_index = tx_entries;
sml_globs.sml_send_blocks++;
lp += txlen;
}
@@ -2948,28 +3057,27 @@ next_line:
RtcSettings.pulse_counter[i] = Settings->pulse_counter[i];
sml_counters[i].sml_cnt_last_ts = millis();
}
-#ifdef ESP32
- uint32_t uart_index = SOC_UART_NUM - 1;
-#endif
+
sml_counter_pinstate = 0;
for (uint8_t meters = 0; meters < sml_globs.meters_used; meters++) {
- if (sml_globs.mp[meters].type == 'c') {
- if (sml_globs.mp[meters].flag & 2) {
+ METER_DESC *mp = &meter_desc[meters];
+ if (mp->type == 'c') {
+ if (mp->flag & 2) {
} else {
// counters, set to input with pullup
- if (sml_globs.mp[meters].flag & 1) {
- pinMode(sml_globs.mp[meters].srcpin, INPUT_PULLUP);
+ if (mp->flag & 1) {
+ pinMode(mp->srcpin, INPUT_PULLUP);
} else {
- pinMode(sml_globs.mp[meters].srcpin, INPUT);
+ pinMode(mp->srcpin, INPUT);
}
// check for irq mode
- if (sml_globs.mp[meters].params <= 0) {
+ if (mp->params <= 0) {
// init irq mode
sml_counters[cindex].sml_cnt_old_state = meters;
sml_counters[cindex].sml_debounce = -sml_globs.mp[meters].params;
- attachInterruptArg(sml_globs.mp[meters].srcpin, SML_CounterIsr, &sml_cnt_index[cindex], CHANGE);
- if (digitalRead(sml_globs.mp[meters].srcpin) > 0) {
+ attachInterruptArg(mp->srcpin, SML_CounterIsr, &sml_cnt_index[cindex], CHANGE);
+ if (digitalRead(mp->srcpin) > 0) {
sml_counter_pinstate |= (1 << cindex);
}
sml_counters[cindex].sml_counter_ltime = millis();
@@ -2981,86 +3089,108 @@ next_line:
}
} else {
// serial input, init
+ if (mp->srcpin == TCP_MODE_FLG) {
+#ifdef USE_SML_TCP
+ // tcp mode
+#ifdef TCP_CLIENT_SECURE
+ mp->client = new WiFiClientSecure;
+ //client(new BearSSL::WiFiClientSecure_light(1024,1024)) {
+ mp->client->setInsecure();
+#else
+ mp->client = new WiFiClient;
+#endif
+ int32_t err = mp->client->connect(mp->ip_addr, mp->params);
+ if (!err) {
+ AddLog(LOG_LEVEL_INFO, PSTR("SML: could not connect TCP to %s:%d"),mp->ip_addr.toString().c_str(), mp->params);
+ }
+#endif
+ } else {
+ // serial mode
#ifdef ESP8266
#ifdef SPECIAL_SS
- char type = sml_globs.mp[meters].type;
+ char type = mp->type;
if (type == 'm' || type == 'M' || type == 'k' || type == 'p' || type == 'R' || type == 'v') {
- meter_desc[meters].meter_ss = new TasmotaSerial(sml_globs.mp[meters].srcpin,sml_globs.mp[meters].trxpin, 1, 0, meter_desc[meters].sibsiz);
+ mp->meter_ss = new TasmotaSerial(mp->srcpin, mp->trxpin, 1, 0, mp->sibsiz);
} else {
- meter_desc[meters].meter_ss = new TasmotaSerial(sml_globs.mp[meters].srcpin,sml_globs.mp[meters].trxpin, 1, 1, meter_desc[meters].sibsiz);
+ mp->meter_ss = new TasmotaSerial(mp->srcpin, mp->trxpin, 1, 1, mp->sibsiz);
}
#else
- meter_desc[meters].meter_ss = new TasmotaSerial(sml_globs.mp[meters].srcpin,sml_globs.mp[meters].trxpin, 1, 0, meter_desc[meters].sibsiz);
+ mp->meter_ss = new TasmotaSerial(mp->srcpin, mp->trxpin, 1, 0, mp->sibsiz);
#endif // SPECIAL_SS
#endif // ESP8266
#ifdef ESP32
// use hardware serial
+ if (mp->uart_index >= 0) {
+ uart_index = mp->uart_index;
+ }
+ AddLog(LOG_LEVEL_INFO, PSTR("SML: uart used: %d"),uart_index);
#ifdef USE_ESP32_SW_SERIAL
- meter_desc[meters].meter_ss = new SML_ESP32_SERIAL(uart_index);
- if (sml_globs.mp[meters].srcpin >= 0) {
+ mp->meter_ss = new SML_ESP32_SERIAL(uart_index);
+ if (mp->srcpin >= 0) {
if (uart_index == 0) { ClaimSerial(); }
uart_index--;
if (uart_index < 0) uart_index = 0;
}
#else
- meter_desc[meters].meter_ss = new HardwareSerial(uart_index);
+ mp->meter_ss = new HardwareSerial(uart_index);
if (uart_index == 0) { ClaimSerial(); }
uart_index--;
if (uart_index < 0) uart_index = 0;
- meter_desc[meters].meter_ss->setRxBufferSize(meter_desc[meters].sibsiz);
+ mp->meter_ss->setRxBufferSize(mp->sibsiz);
#endif // USE_ESP32_SW_SERIAL
#endif // ESP32
SerialConfig smode = SERIAL_8N1;
- if (sml_globs.mp[meters].sopt & 0xf0) {
+ if (mp->sopt & 0xf0) {
// new serial config
- switch (sml_globs.mp[meters].sopt >> 4) {
+ switch (mp->sopt >> 4) {
case 1:
- if ((sml_globs.mp[meters].sopt & 1) == 1) smode = SERIAL_8N1;
+ if ((mp->sopt & 1) == 1) smode = SERIAL_8N1;
else smode = SERIAL_8N2;
break;
case 2:
- if ((sml_globs.mp[meters].sopt & 1) == 1) smode = SERIAL_8E1;
+ if ((mp->sopt & 1) == 1) smode = SERIAL_8E1;
else smode = SERIAL_8E2;
break;
case 3:
- if ((sml_globs.mp[meters].sopt & 1) == 1) smode = SERIAL_8O1;
+ if ((mp->sopt & 1) == 1) smode = SERIAL_8O1;
else smode = SERIAL_8O2;
break;
}
} else {
// deprecated serial config
- if (sml_globs.mp[meters].sopt == 2) {
+ if (mp->sopt == 2) {
smode = SERIAL_8N2;
}
- if (sml_globs.mp[meters].type=='M') {
+ if (mp->type=='M') {
smode = SERIAL_8E1;
- if (sml_globs.mp[meters].sopt == 2) {
+ if (mp->sopt == 2) {
smode = SERIAL_8E2;
}
}
}
#ifdef ESP8266
- if (meter_desc[meters].meter_ss->begin(sml_globs.mp[meters].params)) {
- meter_desc[meters].meter_ss->flush();
+ if (mp->meter_ss->begin(mp->params)) {
+ mp->meter_ss->flush();
}
- if (meter_desc[meters].meter_ss->hardwareSerial()) {
- Serial.begin(sml_globs.mp[meters].params, smode);
+ if (mp->meter_ss->hardwareSerial()) {
+ Serial.begin(mp->params, smode);
ClaimSerial();
//Serial.setRxBufferSize(512);
}
#endif // ESP8266
#ifdef ESP32
- meter_desc[meters].meter_ss->begin(sml_globs.mp[meters].params, smode, sml_globs.mp[meters].srcpin, sml_globs.mp[meters].trxpin);
+ mp->meter_ss->begin(mp->params, smode, mp->srcpin, mp->trxpin);
#ifdef USE_ESP32_SW_SERIAL
- meter_desc[meters].meter_ss->setRxBufferSize(meter_desc[meters].sibsiz);
+ mp->meter_ss->setRxBufferSize(mp->sibsiz);
#endif
#endif // ESP32
+ }
}
}
@@ -3439,8 +3569,43 @@ uint8_t sml_hexnibble(char chr) {
return rVal;
}
+typedef struct {
+ uint16_t T_ID;
+ uint16_t P_ID;
+ uint16_t SIZE;
+ uint8_t U_ID;
+ uint8_t payload[8];
+ } MODBUS_TCP_HEADER;
+
+uint16_t sml_swap(uint16_t in) {
+ return (in << 8) || in >> 8;
+}
+
+// send modbus TCP frame with payload
+// given ip addr and port in baudrate
+void sml_tcp_send(uint32_t meter, uint8_t *sbuff, uint16_t slen) {
+MODBUS_TCP_HEADER tcph;
+
+tcph.T_ID = sml_swap(0x1234);
+tcph.P_ID = 0;
+tcph.SIZE = sml_swap(6);
+tcph.U_ID = *sbuff;
+
+sbuff++;
+for (uint8_t cnt = 0; cnt < slen - 3; cnt++) {
+ tcph.payload[cnt] = *sbuff++;
+}
+
+#ifdef USE_SML_TCP
+ // AddLog(LOG_LEVEL_INFO, PSTR("slen >> %d "),slen);
+ if (meter_desc[meter].client->connected()) {
+ meter_desc[meter].client->write((uint8_t*)&tcph, 7 + slen - 3);
+ }
+#endif
+}
+
// send sequence every N Seconds
-void SML_Send_Seq(uint32_t meter,char *seq) {
+void SML_Send_Seq(uint32_t meter, char *seq) {
uint8_t sbuff[48];
uint8_t *ucp = sbuff, slen = 0;
char *cp = seq;
@@ -3517,16 +3682,19 @@ void SML_Send_Seq(uint32_t meter,char *seq) {
slen += 6;
}
- if (meter_desc[meter].trx_en.trxen) {
- digitalWrite(meter_desc[meter].trx_en.trxenpin, meter_desc[meter].trx_en.trxenpol ^ 1);
- }
- meter_desc[meter].meter_ss->flush();
- meter_desc[meter].meter_ss->write(sbuff, slen);
-
- if (meter_desc[meter].trx_en.trxen) {
- // must wait for all data sent
+ if (meter_desc[meter].srcpin == TCP_MODE_FLG) {
+ sml_tcp_send(meter, sbuff, slen);
+ } else {
+ if (meter_desc[meter].trx_en.trxen) {
+ digitalWrite(meter_desc[meter].trx_en.trxenpin, meter_desc[meter].trx_en.trxenpol ^ 1);
+ }
meter_desc[meter].meter_ss->flush();
- digitalWrite(meter_desc[meter].trx_en.trxenpin, meter_desc[meter].trx_en.trxenpol);
+ meter_desc[meter].meter_ss->write(sbuff, slen);
+ if (meter_desc[meter].trx_en.trxen) {
+ // must wait for all data sent
+ meter_desc[meter].meter_ss->flush();
+ digitalWrite(meter_desc[meter].trx_en.trxenpin, meter_desc[meter].trx_en.trxenpol);
+ }
}
if (sml_globs.dump2log) {
From 0aaa616881b3927b7327550073ce2bdf28ed0a77 Mon Sep 17 00:00:00 2001
From: gemu
Date: Sat, 25 Feb 2023 09:58:47 +0100
Subject: [PATCH 037/227] support for double and intergers (#18039)
---
.../tasmota_xdrv_driver/xdrv_10_scripter.ino | 920 +++++++++++-------
1 file changed, 593 insertions(+), 327 deletions(-)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_10_scripter.ino b/tasmota/tasmota_xdrv_driver/xdrv_10_scripter.ino
index 76bf4f07b..626443567 100755
--- a/tasmota/tasmota_xdrv_driver/xdrv_10_scripter.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_10_scripter.ino
@@ -43,7 +43,13 @@ keywords if then else endif, or, and are better readable for beginners (others m
#define XDRV_10 10
-const uint8_t SCRIPT_VERS[2] = {5, 0};
+#ifndef TS_FLOAT
+#define TS_FLOAT float
+#endif
+
+// float = 4, double = 8 bytes
+
+const uint8_t SCRIPT_VERS[2] = {5, 1};
#define SCRIPT_DEBUG 0
@@ -76,17 +82,19 @@ const uint8_t SCRIPT_VERS[2] = {5, 0};
#endif
#define MAX_SCRIPT_CMDBUFFER 4096
+#define SPI_FLASH_2SEC_SIZE SPI_FLASH_SEC_SIZE*2
#define SCRIPT_EOL '\n'
#define SCRIPT_FLOAT_PRECISION 2
#define PMEM_SIZE sizeof(Settings->script_pram)
-#define SCRIPT_MAXPERM (PMEM_SIZE)-4/sizeof(float)
+#define SCRIPT_MAXPERM (PMEM_SIZE)-4/sizeof(TS_FLOAT)
#define MAX_SCRIPT_SIZE MAX_RULE_SIZE*MAX_RULE_SETS
#ifndef MAX_SARRAY_NUM
#define MAX_SARRAY_NUM 32
#endif
+int32_t fast_mux(uint32_t flag, uint32_t time, TS_FLOAT *buf, uint32_t len);
void Draw_jpeg(uint8_t *mem, uint16_t jpgsize, uint16_t xp, uint16_t yp, uint8_t scale);
uint32_t EncodeLightId(uint8_t relay_id);
uint32_t DecodeLightId(uint32_t hue_id);
@@ -117,8 +125,12 @@ char *Get_esc_char(char *cp, char *esc_chr);
#pragma message "script 24c256 file option used"
#else
-#if EEP_SCRIPT_SIZE==SPECIAL_EEPMODE_SIZE
+#if EEP_SCRIPT_SIZE==SPECIAL_EEPMODE_SIZE || EEP_SCRIPT_SIZE==SPI_FLASH_2SEC_SIZE
+#if EEP_SCRIPT_SIZE==SPI_FLASH_2SEC_SIZE
+#pragma message "internal special flash script buffer used"
+#else
#pragma message "internal compressed eeprom script buffer used"
+#endif
#else
#error "unsupported eeprom option used"
#endif
@@ -203,23 +215,33 @@ extern uint8_t sml_options;
uint32_t eeprom_block;
-// these support only one 4 k block below EEPROM this steals 4k of application area
+// these support only one 4 k block below EEPROM (eeprom @0x402FB000) this steals 4k of application area
uint32_t alt_eeprom_init(uint32_t size) {
//EEPROM.begin(size);
//eeprom_block = (uint32_t)&_EEPROM_start - 0x40200000 - SPI_FLASH_SEC_SIZE;
+#if EEP_SCRIPT_SIZE==SPI_FLASH_2SEC_SIZE
+ eeprom_block = SPEC_SCRIPT_FLASH - SPI_FLASH_SEC_SIZE;
+ //eeprom_block = SPEC_SCRIPT_FLASH;
+#else
eeprom_block = SPEC_SCRIPT_FLASH;
+#endif
return 1;
}
void alt_eeprom_writeBytes(uint32_t adr, uint32_t len, uint8_t *buf) {
uint32_t *lwp = (uint32_t*)buf;
+#if EEP_SCRIPT_SIZE==SPI_FLASH_2SEC_SIZE
+ ESP.flashEraseSector(eeprom_block / SPI_FLASH_SEC_SIZE);
+ ESP.flashEraseSector((eeprom_block + SPI_FLASH_SEC_SIZE) / SPI_FLASH_SEC_SIZE);
+#else
ESP.flashEraseSector(eeprom_block / SPI_FLASH_SEC_SIZE);
- ESP.flashWrite(eeprom_block , lwp, SPI_FLASH_SEC_SIZE);
+#endif
+ ESP.flashWrite(eeprom_block , lwp, len);
}
void alt_eeprom_readBytes(uint32_t adr, uint32_t len, uint8_t *buf) {
uint32_t *lwp = (uint32_t*)buf;
- ESP.flashRead(eeprom_block , lwp, SPI_FLASH_SEC_SIZE);
+ ESP.flashRead(eeprom_block, lwp, len);
}
#endif // EEP_SCRIPT_SIZE
@@ -293,11 +315,7 @@ extern VButton *buttons[MAX_TOUCH_BUTTONS];
#endif
typedef union {
-#if defined(USE_SCRIPT_GLOBVARS) || defined(USE_HOMEKIT)
uint16_t data;
-#else
- uint8_t data;
-#endif
struct {
uint8_t is_string : 1; // string or number
uint8_t is_permanent : 1;
@@ -307,12 +325,9 @@ typedef union {
uint8_t settable : 1;
uint8_t is_filter : 1;
uint8_t constant : 1;
-#ifdef USE_SCRIPT_GLOBVARS
uint8_t global : 1;
-#endif
-#ifdef USE_SCRIPT_GLOBVARS
uint8_t hchanged : 1;
-#endif
+ uint8_t integer : 1;
};
} SCRIPT_TYPE;
@@ -329,8 +344,8 @@ struct M_FILT {
uint8_t numvals;
uint8_t index;
#endif // LARGE_ARRAYS
- float maccu;
- float rbuff[1];
+ TS_FLOAT maccu;
+ TS_FLOAT rbuff[1];
};
@@ -426,8 +441,8 @@ struct SCRIPT_SPI {
#define SFS_MAX 4
// global memory
struct SCRIPT_MEM {
- float *fvars; // number var pointer
- float *s_fvars; // shadow var pointer
+ TS_FLOAT *fvars; // number var pointer
+ TS_FLOAT *s_fvars; // shadow var pointer
struct T_INDEX *type; // type and index pointer
struct M_FILT *mfilt;
char *glob_vnp; // var name pointer
@@ -484,7 +499,7 @@ struct SCRIPT_MEM {
uint32_t script_lastmillis;
bool event_handeled = false;
#ifdef USE_BUTTON_EVENT
- int8_t script_button[MAX_KEYS_SET];
+ int8_t script_button[MAX_KEYS];
#endif //USE_BUTTON_EVENT
#ifdef USE_HOMEKIT
@@ -494,7 +509,7 @@ struct SCRIPT_MEM {
#ifdef USE_SCRIPT_SERIAL
TasmotaSerial *sp;
#endif
- float retval;
+ TS_FLOAT retval;
char *retstr;
#ifdef USE_SCRIPT_SPI
struct SCRIPT_SPI spi;
@@ -511,12 +526,16 @@ struct SCRIPT_MEM {
uint8_t tasm_cmd_activ = 0;
+void flt2char(TS_FLOAT num, char *nbuff);
-void flt2char(float num, char *nbuff) {
+void flt2char(TS_FLOAT num, char *nbuff) {
dtostrfd(num, glob_script_mem.script_dprec, nbuff);
}
+
+void f2char(TS_FLOAT num, uint32_t dprec, uint32_t lzeros, char *nbuff, char dsep);
+
// convert float to char with leading zeros
-void f2char(float num, uint32_t dprec, uint32_t lzeros, char *nbuff, char dsep) {
+void f2char(TS_FLOAT num, uint32_t dprec, uint32_t lzeros, char *nbuff, char dsep) {
dtostrfd(num, dprec, nbuff);
if (lzeros > 1) {
// check leading zeros
@@ -548,9 +567,10 @@ void f2char(float num, uint32_t dprec, uint32_t lzeros, char *nbuff, char dsep)
}
}
-
+uint32_t match_vars(char *dvnam, TS_FLOAT **fp, char **sp, uint32_t *ind);
+uint32_t script_sspi_trans(int32_t cs_index, TS_FLOAT *array, uint32_t len, uint32_t size);
char *scripter_sub(char *lp, uint8_t fromscriptcmd);
-char *GetNumericArgument(char *lp,uint8_t lastop,float *fp, struct GVARS *gv);
+char *GetNumericArgument(char *lp,uint8_t lastop,TS_FLOAT *fp, struct GVARS *gv);
char *GetStringArgument(char *lp,uint8_t lastop,char *cp, struct GVARS *gv);
char *ForceStringVar(char *lp,char *dstr);
void send_download(void);
@@ -559,20 +579,20 @@ uint8_t UfsReject(char *name);
void fread_str_fp(File *fp, char *sp, uint16_t slen, uint16_t flg);
int32_t script_copy_file(File *source, File *dest, uint32_t sf_from, uint32_t sf_to, uint32_t flag, WiFiClient *client);
int32_t opt_fext(File *fp, char *ts_from, char *ts_to, uint32_t flg);
-int32_t extract_from_file(File *fp, char *ts_from, char *ts_to, int8_t coffs, float **a_ptr, uint16_t *a_len, uint8_t numa, int16_t accum);
+int32_t extract_from_file(File *fp, char *ts_from, char *ts_to, int8_t coffs, TS_FLOAT **a_ptr, uint16_t *a_len, uint8_t numa, int16_t accum);
#endif
-char *eval_sub(char *lp, float *fvar, char *rstr);
+char *eval_sub(char *lp, TS_FLOAT *fvar, char *rstr);
void ScriptEverySecond(void) {
if (bitRead(Settings->rule_enabled, 0)) {
struct T_INDEX *vtp = glob_script_mem.type;
- float delta = (millis() - glob_script_mem.script_lastmillis) / 1000.0;
+ TS_FLOAT delta = (millis() - glob_script_mem.script_lastmillis) / 1000.0;
glob_script_mem.script_lastmillis = millis();
for (uint8_t count=0; count0) {
// decrement
*fp -= delta;
@@ -581,7 +601,7 @@ void ScriptEverySecond(void) {
}
if (vtp[count].bits.is_autoinc) {
// increments timers
- float *fp = &glob_script_mem.fvars[vtp[count].index];
+ TS_FLOAT *fp = &glob_script_mem.fvars[vtp[count].index];
if (*fp>=0) {
*fp += delta;
}
@@ -618,7 +638,39 @@ void SetChanged(uint32_t index) {
#define SCRIPT_SKIP_SPACES while (*lp==' ' || *lp=='\t') lp++;
#define SCRIPT_SKIP_EOL while (*lp == SCRIPT_EOL) lp++;
-float *Get_MFAddr(uint8_t index, uint16_t *len, uint16_t *ipos);
+TS_FLOAT *Get_MFAddr(uint8_t index, uint16_t *len, uint16_t *ipos);
+
+uint32_t Script_Find_Vars(char *sp) {
+ uint16_t numvars = 0;
+ uint16_t svars = 0;
+ while (*sp) {
+ if (*sp == '\n' || *sp == '\r') {
+ sp++;
+ while (*sp == '=') {
+ sp++;
+ }
+ if (*sp == '#' || *sp == '>') {
+ break;
+ }
+ char *cp = strchr(sp, '=');
+ if (cp) {
+ cp++;
+ while (*cp == ' ') {
+ cp++;
+ }
+ if (*cp == '"') {
+ svars += 1;
+ } else if (isdigit(*cp)) {
+ numvars += 1;
+ }
+ sp = cp;
+ }
+ }
+ sp++;
+ }
+ return (svars << 16) | numvars;
+}
+
// allocates all variables and presets them
int16_t Init_Scripter(void) {
@@ -628,38 +680,43 @@ char *script;
script = glob_script_mem.script_ram;
if (!*script) return -999;
+ uint32_t xvars = Script_Find_Vars(script + 1);
+ uint16_t maxnvars = xvars & 0xffff;
+ if (maxnvars < 1) {
+ maxnvars = 1;
+ }
+ uint16_t maxsvars = xvars >> 16;
+ if (maxsvars < 1) {
+ maxsvars = 1;
+ }
+ uint16_t maxvars = maxsvars + maxnvars;
+ //AddLog(LOG_LEVEL_INFO, PSTR("Script: svar = %d, nvars = %d"), maxsvars, maxnvars);
+
// scan lines for >DEF
uint16_t lines = 0;
uint16_t nvars = 0;
uint16_t svars = 0;
uint16_t vars = 0;
char *lp = script;
- uint16_t imemsize = (MAXVARS*10) + 4;
+ uint16_t imemsize = (maxvars * 10) + 4;
uint8_t *imemptr = (uint8_t*)calloc(imemsize, 1);
if (!imemptr) {
return -7;
}
- //ClaimSerial();
- //SetSerialBaudrate(115200);
- //Serial.printf("size %d\n",imemsize);
- //Serial.printf("stack %d\n",GetStack()); // 2848
- // 2896
- //char vnames[MAXVARS*10];
char *vnames = (char*)imemptr;
- char *vnp[MAXVARS];
- float fvalues[MAXVARS];
- struct T_INDEX vtypes[MAXVARS];
-
+ char *vnp[maxvars];
+ TS_FLOAT fvalues[maxvars];
+ struct T_INDEX vtypes[maxvars];
//char strings[MAXSVARS*SCRIPT_MAXSSIZE];
//char *strings_p = strings;
- char *strings_op = (char*)calloc(MAXSVARS*SCRIPT_MAXSSIZE, 1);
+ char *strings_op = (char*)calloc(maxsvars * SCRIPT_MAXSSIZE, 1);
char *strings_p = strings_op;
if (!strings_op) {
free(imemptr);
- return -7;
+ return -8;
}
/*
@@ -674,9 +731,9 @@ char *script;
imemp = (imemp & 0xfffc) + 4;
Serial.printf(">2 %x\n",imemp);
- float fvalues[MAXVARS];
- //float *fvalues = (float*)imemp;
- imemp += (sizeof(float*)*MAXVARS);
+ TS_FLOAT fvalues[MAXVARS];
+ //TS_FLOAT *fvalues = (TS_FLOAT*)imemp;
+ imemp += (sizeof(TS_FLOAT*)*MAXVARS);
imemp = (imemp & 0xfffc) + 4;
Serial.printf(">3 %x\n",imemp);
@@ -687,7 +744,7 @@ char *script;
char *vnames_p = vnames;
char **vnp_p = vnp;
- char *snp[MAXSVARS];
+ char *snp[maxsvars];
struct M_FILT mfilt[MAXFILT];
@@ -705,12 +762,12 @@ char *script;
// skip leading spaces
SCRIPT_SKIP_SPACES
// skip empty line
- if (*lp=='\n' || *lp=='\r') goto next_line;
+ if (*lp == '\n' || *lp == '\r') goto next_line;
// skip comment
- if (*lp==';') goto next_line;
+ if (*lp == ';') goto next_line;
if (init) {
// init section
- if (*lp=='>' || !*lp) {
+ if (*lp == '>' || !*lp) {
init = 0;
break;
}
@@ -718,22 +775,22 @@ char *script;
if (op) {
vtypes[vars].bits.data = 0;
// found variable definition
- if (*lp=='p' && *(lp+1)==':') {
+ if (*lp == 'p' && *(lp + 1) == ':') {
lp += 2;
- if (numpermMAXFILT) {
+ if (numflt > MAXFILT) {
if (imemptr) free(imemptr);
if (strings_op) free(strings_op);
return -6;
@@ -773,6 +836,7 @@ char *script;
} else {
vtypes[vars].bits.is_filter = 0;
}
+
*vnp_p++ = vnames_p;
while (lp < op) {
*vnames_p++ = *lp++;
@@ -780,19 +844,30 @@ char *script;
*vnames_p++ = 0;
// init variable
op++;
- if (*op!='"') {
- float fv;
- if (*op=='0' && *(op+1)=='x') {
+ while (*op == ' ') {
+ op++;
+ }
+ if (*op != '"') {
+ TS_FLOAT fv;
+ if (*op == '0' && *(op + 1) == 'x') {
op += 2;
- fv=strtol(op, &op, 16);
+ if (vtypes[vars].bits.integer) {
+ *(uint32_t*)&fv = strtoll(op, &op, 16);
+ } else {
+ fv = strtol(op, &op, 16);
+ }
} else {
- fv=CharToFloat(op);
+ if (vtypes[vars].bits.integer) {
+ *(int32_t*)&fv = strtol(op, &op, 10);
+ } else {
+ fv=CharToFloat(op);
+ }
}
fvalues[nvars] = fv;
vtypes[vars].bits.is_string = 0;
if (!vtypes[vars].bits.is_filter) vtypes[vars].index = nvars;
nvars++;
- if (nvars>MAXNVARS) {
+ if (nvars > maxnvars) {
if (imemptr) free(imemptr);
if (strings_op) free(strings_op);
return -1;
@@ -809,8 +884,8 @@ char *script;
// limit array size
flen = MAX_ARRAY_SIZE;
}
- mfilt[numflt-1].numvals &= OR_FILT_MASK;
- mfilt[numflt-1].numvals |= flen & AND_FILT_MASK;
+ mfilt[numflt - 1].numvals &= OR_FILT_MASK;
+ mfilt[numflt - 1].numvals |= flen & AND_FILT_MASK;
}
}
@@ -829,14 +904,14 @@ char *script;
vtypes[vars].bits.is_string = 1;
vtypes[vars].index = svars;
svars++;
- if (svars>MAXSVARS) {
+ if (svars > maxsvars) {
if (imemptr) free(imemptr);
if (strings_op) free(strings_op);
return -2;
}
}
vars++;
- if (vars>MAXVARS) {
+ if (vars > maxvars) {
if (imemptr) free(imemptr);
if (strings_op) free(strings_op);
return -3;
@@ -847,8 +922,8 @@ char *script;
lp += 2;
SCRIPT_SKIP_SPACES
if (isdigit(*lp)) {
- uint8_t ssize = atoi(lp)+1;
- if (ssize<10 || ssize>SCRIPT_MAXSSIZE) ssize=SCRIPT_MAXSSIZE;
+ uint8_t ssize = atoi(lp) + 1;
+ if (ssize < 10 || ssize > SCRIPT_MAXSSIZE) ssize = SCRIPT_MAXSSIZE;
glob_script_mem.max_ssize = ssize;
}
init = 1;
@@ -862,15 +937,15 @@ char *script;
}
uint16_t fsize = 0;
- for (count=0; countnumvals = mfilt[count].numvals;
- mp += sizeof(struct M_FILT) + ((mfilt[count].numvals & AND_FILT_MASK) - 1) * sizeof(float);
+ mp += sizeof(struct M_FILT) + ((mfilt[count].numvals & AND_FILT_MASK) - 1) * sizeof(TS_FLOAT);
}
glob_script_mem.numvars = vars;
@@ -1008,19 +1083,22 @@ char *script;
#if SCRIPT_DEBUG>2
struct T_INDEX *dvtp = glob_script_mem.type;
- for (uint8_t count = 0; count", 2)) {
lp += 2;
char *cp=strchr(lp, '=');
if (cp) {
char vnam[32];
for (uint32_t count = 0; countindex;
return mflp->rbuff;
}
- mp += sizeof(struct M_FILT) + ((mflp->numvals & AND_FILT_MASK) - 1) * sizeof(float);
+ mp += sizeof(struct M_FILT) + ((mflp->numvals & AND_FILT_MASK) - 1) * sizeof(TS_FLOAT);
}
return 0;
}
-char *isvar(char *lp, uint8_t *vtype, struct T_INDEX *tind, float *fp, char *sp, struct GVARS *gv);
+char *isvar(char *lp, uint8_t *vtype, struct T_INDEX *tind, TS_FLOAT *fp, char *sp, struct GVARS *gv);
+char *get_array_by_name(char *lp, TS_FLOAT **fp, uint16_t *alen, uint16_t *ipos);
-char *get_array_by_name(char *lp, float **fp, uint16_t *alen, uint16_t *ipos) {
+char *get_array_by_name(char *lp, TS_FLOAT **fp, uint16_t *alen, uint16_t *ipos) {
struct T_INDEX ind;
uint8_t vtype;
while (*lp == ' ') lp++;
@@ -1314,15 +1397,15 @@ char *get_array_by_name(char *lp, float **fp, uint16_t *alen, uint16_t *ipos) {
if (vtype & STYPE) return 0;
uint16_t index = glob_script_mem.type[ind.index].index;
if (glob_script_mem.type[ind.index].bits.is_filter) {
- float *fa = Get_MFAddr(index, alen, ipos);
+ TS_FLOAT *fa = Get_MFAddr(index, alen, ipos);
*fp = fa;
return lp;
}
*fp = 0;
return lp;
}
-
-float *get_array_by_name(char *name, uint16_t *alen) {
+TS_FLOAT *get_array_by_name(char *name, uint16_t *alen);
+TS_FLOAT *get_array_by_name(char *name, uint16_t *alen) {
struct T_INDEX ind;
uint8_t vtype;
isvar(name, &vtype, &ind, 0, 0, 0);
@@ -1331,13 +1414,13 @@ float *get_array_by_name(char *name, uint16_t *alen) {
uint16_t index = glob_script_mem.type[ind.index].index;
if (glob_script_mem.type[ind.index].bits.is_filter) {
- float *fa = Get_MFAddr(index, alen, 0);
+ TS_FLOAT *fa = Get_MFAddr(index, alen, 0);
return fa;
}
return 0;
}
-
-float Get_MFVal(uint8_t index, int16_t bind) {
+TS_FLOAT Get_MFVal(uint8_t index, int16_t bind);
+TS_FLOAT Get_MFVal(uint8_t index, int16_t bind) {
uint8_t *mp = (uint8_t*)glob_script_mem.mfilt;
for (uint8_t count = 0; count < MAXFILT; count++) {
struct M_FILT *mflp = (struct M_FILT*)mp;
@@ -1350,7 +1433,7 @@ float Get_MFVal(uint8_t index, int16_t bind) {
return maxind;
}
if (bind == -2) {
- float summ = 0;
+ TS_FLOAT summ = 0;
for (uint32_t cnt = 0; cnt < maxind; cnt++) {
summ += mflp->rbuff[cnt];
}
@@ -1359,12 +1442,12 @@ float Get_MFVal(uint8_t index, int16_t bind) {
if (bind < -2 || bind > maxind ) bind = 1;
return mflp->rbuff[bind - 1];
}
- mp += sizeof(struct M_FILT) + ((mflp->numvals & AND_FILT_MASK) - 1) * sizeof(float);
+ mp += sizeof(struct M_FILT) + ((mflp->numvals & AND_FILT_MASK) - 1) * sizeof(TS_FLOAT);
}
return 0;
}
-
-void Set_MFVal(uint8_t index, uint16_t bind, float val) {
+void Set_MFVal(uint8_t index, uint16_t bind, TS_FLOAT val);
+void Set_MFVal(uint8_t index, uint16_t bind, TS_FLOAT val) {
uint8_t *mp = (uint8_t*)glob_script_mem.mfilt;
for (uint8_t count = 0; count < MAXFILT; count++) {
struct M_FILT *mflp = (struct M_FILT*)mp;
@@ -1385,12 +1468,12 @@ void Set_MFVal(uint8_t index, uint16_t bind, float val) {
}
return;
}
- mp += sizeof(struct M_FILT) + ((mflp->numvals & AND_FILT_MASK) - 1) * sizeof(float);
+ mp += sizeof(struct M_FILT) + ((mflp->numvals & AND_FILT_MASK) - 1) * sizeof(TS_FLOAT);
}
}
-
-float Get_MFilter(uint8_t index) {
+TS_FLOAT Get_MFilter(uint8_t index);
+TS_FLOAT Get_MFilter(uint8_t index) {
uint8_t *mp = (uint8_t*)glob_script_mem.mfilt;
for (uint8_t count = 0; count < MAXFILT; count++) {
struct M_FILT *mflp = (struct M_FILT*)mp;
@@ -1403,12 +1486,12 @@ float Get_MFilter(uint8_t index) {
return median_array(mflp->rbuff, mflp->numvals);
}
}
- mp += sizeof(struct M_FILT) + ((mflp->numvals & AND_FILT_MASK) - 1) * sizeof(float);
+ mp += sizeof(struct M_FILT) + ((mflp->numvals & AND_FILT_MASK) - 1) * sizeof(TS_FLOAT);
}
return 0;
}
-
-void Set_MFilter(uint8_t index, float invar) {
+void Set_MFilter(uint8_t index, TS_FLOAT invar);
+void Set_MFilter(uint8_t index, TS_FLOAT invar) {
uint8_t *mp = (uint8_t*)glob_script_mem.mfilt;
for (uint8_t count = 0; countnumvals & AND_FILT_MASK) - 1) * sizeof(float);
+ mp += sizeof(struct M_FILT) + ((mflp->numvals & AND_FILT_MASK) - 1) * sizeof(TS_FLOAT);
}
}
@@ -1436,11 +1519,11 @@ void Set_MFilter(uint8_t index, float invar) {
#define MEDIAN_FILTER_NUM 2
struct MEDIAN_FILTER {
-float buffer[MEDIAN_SIZE];
+TS_FLOAT buffer[MEDIAN_SIZE];
int8_t index;
} script_mf[MEDIAN_FILTER_NUM];
-
-float DoMedian5(uint8_t index, float in) {
+TS_FLOAT DoMedian5(uint8_t index, TS_FLOAT in);
+TS_FLOAT DoMedian5(uint8_t index, TS_FLOAT in) {
if (index >= MEDIAN_FILTER_NUM) index = 0;
@@ -1673,10 +1756,10 @@ int32_t opt_fext(File *fp, char *ts_from, char *ts_to, uint32_t flg) {
fread_str_fp(fp, tsf, sizeof(tsf), 0);
uint32_t tssiz = tstamp2l(tsf) - ltsf;
uint32_t tspos = tstamp2l(ts_from) - ltsf;
- float perc = (float)tspos / (float)tssiz * 0.8;
+ TS_FLOAT perc = (TS_FLOAT)tspos / (TS_FLOAT)tssiz * 0.8;
if (perc < 0) perc = 0;
if (perc > 1) perc = 1;
- float fsize = fp->size();
+ TS_FLOAT fsize = fp->size();
uint32_t spos = perc * fsize;
//AddLog(LOG_LEVEL_INFO,PSTR(">>> 1 %d, %d"), (uint32_t)perc, spos);
fp->seek(spos, SeekSet);
@@ -1695,7 +1778,7 @@ int32_t opt_fext(File *fp, char *ts_from, char *ts_to, uint32_t flg) {
// assume 1. entry is timestamp, others are tab delimited values until LF
// file reference, from timestamp, to timestampm, column offset, array pointers, array lenght, number of arrays
-int32_t extract_from_file(File *fp, char *ts_from, char *ts_to, int8_t coffs, float **a_ptr, uint16_t *a_len, uint8_t numa, int16_t accum) {
+int32_t extract_from_file(File *fp, char *ts_from, char *ts_to, int8_t coffs, TS_FLOAT **a_ptr, uint16_t *a_len, uint8_t numa, int16_t accum) {
char rstr[32];
uint8_t sindex = 0;
@@ -1770,8 +1853,8 @@ int32_t extract_from_file(File *fp, char *ts_from, char *ts_to, int8_t coffs, f
//AddLog(LOG_LEVEL_INFO, PSTR("from: %d to: %d"),tsfrom, tsto);
uint16_t lines = 0;
uint16_t rlines = 0;
- float summs[numa];
- float lastv[numa];
+ TS_FLOAT summs[numa];
+ TS_FLOAT lastv[numa];
uint16_t accnt[numa];
uint8_t mflg[numa];
uint32_t lastpos = 0;
@@ -1831,7 +1914,7 @@ int32_t extract_from_file(File *fp, char *ts_from, char *ts_to, int8_t coffs, f
uint8_t curpos = colpos - coffs;
if (colpos >= coffs && curpos < numa) {
if (a_len[curpos]) {
- float fval = CharToFloat(rstr);
+ TS_FLOAT fval = CharToFloat(rstr);
uint8_t flg = 1;
if ((mflg[curpos] & 1) == 1) {
// absolute values, build diffs
@@ -1841,7 +1924,7 @@ int32_t extract_from_file(File *fp, char *ts_from, char *ts_to, int8_t coffs, f
flg = 0;
} else {
if (!(mflg[curpos] & 2)) {
- float tmp = fval;
+ TS_FLOAT tmp = fval;
fval -= lastv[curpos];
// must be positive value
#ifndef EXTRACT_DIFF_NOCHK
@@ -1890,6 +1973,7 @@ int32_t extract_from_file(File *fp, char *ts_from, char *ts_to, int8_t coffs, f
#endif // USE_FEXTRACT
#endif // USE_UFILESYS
+
uint32_t script_bcd(uint8_t sel, uint32_t val) {
uint32_t res = 0;
if (sel) {
@@ -1924,18 +2008,19 @@ uint8_t script_hexnibble(char chr) {
return rVal;
}
+
#ifdef USE_LIGHT
uint32_t HSVToRGB(uint16_t hue, uint8_t saturation, uint8_t value) {
-float r = 0, g = 0, b = 0;
+TS_FLOAT r = 0, g = 0, b = 0;
struct HSV {
- float H;
- float S;
- float V;
+ TS_FLOAT H;
+ TS_FLOAT S;
+ TS_FLOAT V;
} hsv;
hsv.H = hue;
-hsv.S = (float)saturation / 100.0;
-hsv.V = (float)value / 100.0;
+hsv.S = (TS_FLOAT)saturation / 100.0;
+hsv.V = (TS_FLOAT)value / 100.0;
if (hsv.S == 0) {
r = hsv.V;
@@ -1943,7 +2028,7 @@ if (hsv.S == 0) {
b = hsv.V;
} else {
int i;
- float f, p, q, t;
+ TS_FLOAT f, p, q, t;
if (hsv.H == 360)
hsv.H = 0;
@@ -2169,16 +2254,16 @@ uint32_t MeasurePulseTime(int32_t in) {
#endif // USE_ANGLE_FUNC
#ifdef USE_SCRIPT_GLOBVARS
-uint32_t match_vars(char *dvnam, float **fp, char **sp, uint32_t *ind) {
+uint32_t match_vars(char *dvnam, TS_FLOAT **fp, char **sp, uint32_t *ind) {
uint16_t olen = strlen(dvnam);
struct T_INDEX *vtp = glob_script_mem.type;
- for (uint32_t count = 0; count ff=nothing found, fe=constant number,fd = constant string else bit 7 => 80 = string, 0 = number
// no flash strings here for performance reasons!!!
-char *isvar(char *lp, uint8_t *vtype, struct T_INDEX *tind, float *fp, char *sp, struct GVARS *gv) {
- uint16_t count,len = 0;
+char *isvar(char *lp, uint8_t *vtype, struct T_INDEX *tind, TS_FLOAT *fp, char *sp, struct GVARS *gv);
+char *isvar(char *lp, uint8_t *vtype, struct T_INDEX *tind, TS_FLOAT *fp, char *sp, struct GVARS *gv) {
+ uint16_t count, len = 0;
uint8_t nres = 0;
char vname[64];
- float fvar = 0;
+ TS_FLOAT fvar = 0;
tind->index = 0;
tind->bits.data = 0;
//Serial.printf("Stack 2: %d\n",GetStack());
- if (isdigit(*lp) || (*lp == '-' && isdigit(*(lp+1))) || *lp == '.') {
+
+ if ( (*lp == '#') && (*(lp + 1) == '-' || isdigit(*(lp + 1))) ) {
+ // 32 bit integer
+ lp++;
+ if (fp) {
+ if (*lp == '0' && *(lp + 1) == 'x') {
+ lp += 2;
+ *(uint32_t*)fp = strtoll(lp, &lp, 16);
+ } else {
+ *(int32_t*)fp = strtoll(lp, &lp, 10);
+ }
+ }
+ tind->bits.constant = 1;
+ tind->bits.is_string = 0;
+ tind->bits.integer = 1;
+ *vtype = NUM_RES;
+ return lp;
+ }
+
+ if (isdigit(*lp) || (*lp == '-' && isdigit(*(lp + 1))) || *lp == '.') {
// isnumber
if (fp) {
if (*lp == '0' && *(lp + 1) == 'x') {
lp += 2;
- *fp = strtol(lp, &lp, 16);
+ *fp = strtoll(lp, &lp, 16);
} else {
*fp = CharToFloat(lp);
if (*lp == '-') lp++;
@@ -2399,11 +2504,11 @@ char *isvar(char *lp, uint8_t *vtype, struct T_INDEX *tind, float *fp, char *sp,
uint8_t slen = strlen(cp);
if (slen == olen && *cp == dvnam[0]) {
if (!strncmp(cp, dvnam, olen)) {
- uint8_t index = vtp[count].index;
+ uint16_t index = vtp[count].index;
*tind = vtp[count];
tind->index = count; // overwrite with global var index
if (vtp[count].bits.is_string == 0) {
- *vtype = NTYPE | index;
+ *vtype = NTYPE; // | index;
if (vtp[count].bits.is_filter) {
if (ja) {
lp += olen + 1;
@@ -2422,7 +2527,7 @@ char *isvar(char *lp, uint8_t *vtype, struct T_INDEX *tind, float *fp, char *sp,
if (nres) fvar = -fvar;
if (fp) *fp = fvar;
} else {
- *vtype = STYPE|index;
+ *vtype = STYPE; //|index;
if (sp) strlcpy(sp, glob_script_mem.glob_snp + (index * glob_script_mem.max_ssize), SCRIPT_MAXSSIZE);
}
return lp + len;
@@ -2441,7 +2546,7 @@ char *isvar(char *lp, uint8_t *vtype, struct T_INDEX *tind, float *fp, char *sp,
// epoch offset missing in this version
char str_value[SCRIPT_MAXSSIZE];
str_value[0]=0;
- float fv;
+ TS_FLOAT fv;
uint32_t res = JsonParsePath(gv->jo, vname, '#', &fv, str_value, sizeof(str_value));
if (!res) {
goto chknext;
@@ -2484,7 +2589,7 @@ nexit:
*ja = 0;
ja++;
// fetch array index
- float fvar;
+ TS_FLOAT fvar;
GetNumericArgument(ja, OPER_EQU, &fvar, 0);
aindex = fvar;
if (aindex<1 || aindex>6) aindex = 1;
@@ -2607,7 +2712,7 @@ chknext:
if (!strncmp(lp, "adc(", 4)) {
lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar, gv);
while (*lp==' ') lp++;
- float pin = 1;
+ TS_FLOAT pin = 1;
if (*lp!=')') {
lp = GetNumericArgument(lp, OPER_EQU, &pin, gv);
#ifdef CONFIG_IDF_TARGET_ESP32S3
@@ -2630,7 +2735,7 @@ chknext:
#ifndef USE_ADC_VCC
fvar = AdcRead(17, fvar);
#else
- fvar = (float)ESP.getVcc() / 1000.0;
+ fvar = (TS_FLOAT)ESP.getVcc() / 1000.0;
#endif // USE_ADC_VCC
#endif // ESP32
len = 0;
@@ -2642,17 +2747,17 @@ chknext:
SCRIPT_SKIP_SPACES
uint16_t alend;
fvar = -1;
- float *fpd;
+ TS_FLOAT *fpd;
lp = get_array_by_name(lp, &fpd, &alend, 0);
SCRIPT_SKIP_SPACES
uint16_t alens;
- float *fps;
+ TS_FLOAT *fps;
lp = get_array_by_name(lp, &fps, &alens, 0);
SCRIPT_SKIP_SPACES
if (alens < alend) {
alend = alens;
}
- memcpy(fpd, fps, alend * sizeof(float));
+ memcpy(fpd, fps, alend * sizeof(TS_FLOAT));
fvar = alend;
goto nfuncexit;
}
@@ -2660,7 +2765,7 @@ chknext:
if (!strncmp(lp, "af(", 3)) {
// array to float
uint16_t alend;
- float *fpd;
+ TS_FLOAT *fpd;
lp = get_array_by_name(lp + 3, &fpd, &alend, 0);
SCRIPT_SKIP_SPACES
if (*lp != ')') {
@@ -2678,7 +2783,7 @@ chknext:
fbytes[1] = *fpd++;
fbytes[2] = *fpd++;
fbytes[3] = *fpd++;
- fpd = (float*)fbytes;
+ fpd = (TS_FLOAT*)fbytes;
fvar = *fpd;
} else {
fvar = 0;
@@ -2731,7 +2836,7 @@ chknext:
// tasmota button state
lp = GetNumericArgument(lp + 3, OPER_EQU, &fvar, gv);
uint32_t index = fvar;
- if (index<1 || index>MAX_KEYS_SET) index = 1;
+ if (index<1 || index>MAX_KEYS) index = 1;
fvar = glob_script_mem.script_button[index - 1];
glob_script_mem.script_button[index - 1] |= 0x80;
goto nfuncexit;
@@ -2745,6 +2850,18 @@ chknext:
fvar = script_bcd(sel, fvar);
goto nfuncexit;
}
+
+#ifdef USE_FLASH_BDIR
+ if (!strncmp(lp, "bdir(", 5)) {
+ lp = GetNumericArgument(lp + 5, OPER_EQU, &fvar, gv);
+ char str[SCRIPT_MAXSSIZE];
+ if (fvar > 1) {
+ lp = GetStringArgument(lp, OPER_EQU, str, 0);
+ }
+ fvar = flash_bindir(fvar, str);
+ goto nfuncexit;
+ }
+#endif // USE_FLASH_BDIR
break;
case 'c':
if (!strncmp(lp, "chg[", 4)) {
@@ -2770,7 +2887,7 @@ chknext:
if (!strncmp(lp, "c2ps(", 5)) {
lp = GetNumericArgument(lp + 5, OPER_EQU, &fvar, gv);
while (*lp==' ') lp++;
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp, OPER_EQU, &fvar1, gv);
fvar = Core2SetAxpPin(fvar, fvar1);
goto nfuncexit;
@@ -2781,18 +2898,18 @@ chknext:
if (!strncmp(lp, "ct(", 3)) {
lp = GetNumericArgument(lp + 3, OPER_EQU, &fvar, gv);
while (*lp==' ') lp++;
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp, OPER_EQU, &fvar1, gv);
while (*lp==' ') lp++;
- float fvar2;
+ TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
SCRIPT_SKIP_SPACES
- float prio = STASK_PRIO;
+ TS_FLOAT prio = STASK_PRIO;
if (*lp!=')') {
lp = GetNumericArgument(lp, OPER_EQU, &prio, gv);
}
SCRIPT_SKIP_SPACES
- float stack = STASK_STACK;
+ TS_FLOAT stack = STASK_STACK;
if (*lp!=')') {
lp = GetNumericArgument(lp, OPER_EQU, &stack, gv);
}
@@ -2836,7 +2953,7 @@ chknext:
extern void W8960_SetGain(uint8_t sel, uint16_t value);
if (!strncmp(lp, "codec(", 6)) {
- float sel;
+ TS_FLOAT sel;
lp = GetNumericArgument(lp + 6, OPER_EQU, &sel, gv);
lp = GetNumericArgument(lp, OPER_EQU, &fvar, gv);
W8960_SetGain(sel, fvar);
@@ -2848,7 +2965,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
#ifdef USE_UFILESYS
if (!strncmp(lp, "cpf(", 4)) {
// copy file with offsets sfd, sfstart, sfstop, df
- float sfd, sf_from, sf_to, dfd;
+ TS_FLOAT sfd, sf_from, sf_to, dfd;
lp = GetNumericArgument(lp + 4, OPER_EQU, &sfd, 0);
lp = GetNumericArgument(lp, OPER_EQU, &sf_from, 0);
lp = GetNumericArgument(lp, OPER_EQU, &sf_to, 0);
@@ -3245,13 +3362,13 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
if (!strncmp(lp, "fwp(", 4)) {
lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar, gv);
while (*lp == ' ') lp++;
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp, OPER_EQU, &fvar1, gv);
uint8_t ind = fvar1;
if (ind >= SFS_MAX) ind = SFS_MAX - 1;
if (glob_script_mem.file_flags[ind].is_open) {
uint8_t *buff;
- float maxps = WcGetPicstore(-1, 0);
+ TS_FLOAT maxps = WcGetPicstore(-1, 0);
if (fvar < 1 || fvar > maxps) fvar = 1;
uint32_t len = WcGetPicstore(fvar - 1, &buff);
if (len) {
@@ -3275,7 +3392,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
File ef = ufsp->open(str, FS_FILE_READ);
if (ef) {
uint16_t fsiz = ef.size();
- if (fsiz<2048) {
+ if (fsiz < 2048) {
char *script = (char*)special_malloc(fsiz + 16);
if (script) {
memset(script, 0, fsiz + 16);
@@ -3373,7 +3490,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
int16_t accum = fvar;
uint16_t a_len[MAX_EXT_ARRAYS];
- float *a_ptr[MAX_EXT_ARRAYS];
+ TS_FLOAT *a_ptr[MAX_EXT_ARRAYS];
uint8_t index = 0;
while (index < MAX_EXT_ARRAYS) {
@@ -3416,7 +3533,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
#endif // USE_FEXTRACT
if (!strncmp(lp, "fwa(", 4)) {
uint16_t alen;
- float *fa;
+ TS_FLOAT *fa;
lp = get_array_by_name(lp + 4, &fa, &alen, 0);
if (!fa) {
fvar = 0;
@@ -3457,7 +3574,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
}
if (!strncmp(lp, "fra(", 4)) {
uint16_t alen;
- float *fa;
+ TS_FLOAT *fa;
lp = get_array_by_name(lp + 4, &fa, &alen, 0);
if (!fa) {
fvar = 0;
@@ -3626,6 +3743,20 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
goto nfuncexit;
}
#endif //SCRIPT_GET_HTTPS_JP
+
+ if (!strncmp(lp, "gi(", 3)) {
+ lp += 3;
+ if (!strncmp(lp, "epoch", 5)) {
+ lp += 5;
+ *(uint32_t*)&fvar = UtcTime();
+ } else if (*lp == '0' && *(lp + 1) == 'x') {
+ lp += 2;
+ *(uint32_t*)&fvar = strtoll(lp, &lp, 16);
+ } else {
+ *(int32_t*)&fvar = strtol(lp, &lp, 10);
+ }
+ goto nfuncexit;
+ }
break;
case 'h':
if (!strncmp(vname, "hours", 5)) {
@@ -3636,9 +3767,19 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
fvar = ESP_getFreeHeap();
goto exit;
}
+ if (!strncmp(lp, "hni(", 4)) {
+ lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar, gv);
+ uint8_t iob = *(uint32_t*)&fvar;
+ lp++;
+ len = 0;
+ if (sp) {
+ sprintf(sp, "%02x", iob);
+ }
+ goto strexit;
+ }
if (!strncmp(lp, "hn(", 3)) {
lp = GetNumericArgument(lp + 3, OPER_EQU, &fvar, gv);
- if (fvar<0 || fvar>255) fvar = 0;
+ if (fvar < 0 || fvar > 255) fvar = 0;
lp++;
len = 0;
if (sp) {
@@ -3646,6 +3787,15 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
}
goto strexit;
}
+ if (!strncmp(lp, "hxi(", 4)) {
+ lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar, gv);
+ lp++;
+ len = 0;
+ if (sp) {
+ sprintf(sp, "%08x", *(uint32_t*)&fvar);
+ }
+ goto strexit;
+ }
if (!strncmp(lp, "hx(", 3)) {
lp = GetNumericArgument(lp + 3, OPER_EQU, &fvar, gv);
lp++;
@@ -3672,7 +3822,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
uint8_t rflg = 0;
if (*lp == 'r') {
rflg = 1;
- ucp += sizeof(float);
+ ucp += sizeof(TS_FLOAT);
lp++;
}
char substr[3];
@@ -3706,12 +3856,12 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
if (fvar < 0 || fvar > 360) fvar = 0;
SCRIPT_SKIP_SPACES
// arg2
- float fvar2;
+ TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
if (fvar2 < 0 || fvar2 > 100) fvar2 = 0;
SCRIPT_SKIP_SPACES
// arg3
- float fvar3;
+ TS_FLOAT fvar3;
lp = GetNumericArgument(lp, OPER_EQU, &fvar3, gv);
if (fvar3 < 0 || fvar3 > 100) fvar3 = 0;
@@ -3829,7 +3979,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
lp = GetNumericArgument(lp + 1, OPER_EQU, &fvar, gv);
SCRIPT_SKIP_SPACES
// arg2
- float fvar2;
+ TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
fvar = script_i2c(9 + bytes, fvar, fvar2);
goto nfuncexit;
@@ -3852,10 +4002,10 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
#ifdef ESP32
#ifdef USE_I2S_AUDIO
if (!strncmp(lp, "i2sw(", 5)) {
- float port;
+ TS_FLOAT port;
lp = GetNumericArgument(lp + 5, OPER_EQU, &port, gv);
uint16_t alen = 0;
- float *fa = 0;
+ TS_FLOAT *fa = 0;
lp = get_array_by_name(lp, &fa, &alen, 0);
if (!fa) {
fvar = -1;
@@ -3890,7 +4040,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
// start streaming
char url[SCRIPT_MAXSSIZE];
lp = GetStringArgument(lp, OPER_EQU, url, 0);
- float xp, yp, scale ;
+ TS_FLOAT xp, yp, scale ;
lp = GetNumericArgument(lp, OPER_EQU, &xp, 0);
lp = GetNumericArgument(lp, OPER_EQU, &yp, 0);
lp = GetNumericArgument(lp, OPER_EQU, &scale, 0);
@@ -3911,7 +4061,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
#ifdef USE_KNX
case 'k':
if (!strncmp(lp, "knx(", 4)) {
- float type;
+ TS_FLOAT type;
lp = GetNumericArgument(lp + 4, OPER_EQU, &type, gv);
lp = GetNumericArgument(lp, OPER_EQU, &fvar, gv);
SCRIPT_SKIP_SPACES
@@ -3953,11 +4103,11 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
break;
case 'm':
if (!strncmp(lp, "med(", 4)) {
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar1, gv);
SCRIPT_SKIP_SPACES
// arg2
- float fvar2;
+ TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
fvar = DoMedian5(fvar1, fvar2);
goto nfuncexit;
@@ -4004,13 +4154,13 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
goto exit;
}
if (!strncmp(lp, "mp(", 3)) {
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp + 3, OPER_EQU, &fvar1, gv);
SCRIPT_SKIP_SPACES
while (*lp != ')') {
char *opp = lp;
lp++;
- float fvar2;
+ TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
SCRIPT_SKIP_SPACES
fvar = fvar1;
@@ -4018,7 +4168,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
(*opp == '>' && fvar1 > fvar2) ||
(*opp == '=' && fvar1 == fvar2)) {
if (*lp !='<' && *lp != '>' && *lp != '=' && *lp != ')' && *lp != SCRIPT_EOL) {
- float fvar3;
+ TS_FLOAT fvar3;
lp = GetNumericArgument(lp, OPER_EQU, &fvar3, gv);
SCRIPT_SKIP_SPACES
fvar = fvar3;
@@ -4034,10 +4184,10 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
}
#ifdef USE_MORITZ
if (!strncmp(lp, "mo(", 3)) {
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp + 3, OPER_EQU, &fvar1, gv);
SCRIPT_SKIP_SPACES
- float fvar2;
+ TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
SCRIPT_SKIP_SPACES
char rbuff[64];
@@ -4055,13 +4205,13 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
// start
lp = GetNumericArgument(lp, OPER_EQU, &fvar, gv);
uint16_t alen;
- float *fa;
+ TS_FLOAT *fa;
lp = get_array_by_name(lp, &fa, &alen, 0);
if (!fa) {
fvar = -1;
goto nfuncexit;
}
- float falen;
+ TS_FLOAT falen;
lp = GetNumericArgument(lp, OPER_EQU, &falen, gv);
if (falen > alen) {
falen = alen;
@@ -4073,7 +4223,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
} else if (fvar == 2) {
// set array
uint16_t alen;
- float *fa;
+ TS_FLOAT *fa;
lp = get_array_by_name(lp, &fa, &alen, 0);
if (!fa) {
fvar = -1;
@@ -4157,11 +4307,11 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
}
if (!strncmp(lp, "pow(", 4)) {
// arg1
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar1, gv);
SCRIPT_SKIP_SPACES
// arg2
- float fvar2;
+ TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
fvar = FastPrecisePowf(fvar1, fvar2);
goto nfuncexit;
@@ -4208,7 +4358,7 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
}
if (!strncmp(lp, "rma(", 4)) {
uint16_t alen;
- float *array;
+ TS_FLOAT *array;
lp = get_array_by_name(lp + 4, &array, &alen, 0);
char str[SCRIPT_MAXSSIZE];
lp = GetStringArgument(lp, OPER_EQU, str, 0);
@@ -4310,10 +4460,10 @@ extern void W8960_SetGain(uint8_t sel, uint16_t value);
char str[SCRIPT_MAXSSIZE];
lp = GetStringArgument(lp + 3, OPER_EQU, str, 0);
SCRIPT_SKIP_SPACES
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp, OPER_EQU, &fvar1, gv);
SCRIPT_SKIP_SPACES
- float fvar2;
+ TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
lp++;
len = 0;
@@ -4508,14 +4658,14 @@ extern char *SML_GetSVal(uint32_t index);
goto strexit;
}
if (!strncmp(lp, "sml(", 4)) {
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar1, gv);
SCRIPT_SKIP_SPACES
- float fvar2;
+ TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
SCRIPT_SKIP_SPACES
if (fvar2 == 0) {
- float fvar3;
+ TS_FLOAT fvar3;
lp = GetNumericArgument(lp, OPER_EQU, &fvar3, gv);
fvar = SML_SetBaud(fvar1, fvar3);
} else if (fvar2 == 1) {
@@ -4573,7 +4723,7 @@ extern char *SML_GetSVal(uint32_t index);
#ifdef USE_SCRIPT_SERIAL
if (!strncmp(lp, "so(", 3)) {
- float rxpin, txpin, br;
+ TS_FLOAT rxpin, txpin, br;
lp = GetNumericArgument(lp + 3, OPER_EQU, &rxpin, gv);
SCRIPT_SKIP_SPACES
lp = GetNumericArgument(lp, OPER_EQU, &txpin, gv);
@@ -4593,7 +4743,7 @@ extern char *SML_GetSVal(uint32_t index);
}
SCRIPT_SKIP_SPACES
// check for rec buffer
- float rxbsiz = 128;
+ TS_FLOAT rxbsiz = 128;
if (*lp != ')') {
lp = GetNumericArgument(lp, OPER_EQU, &rxbsiz, gv);
}
@@ -4613,7 +4763,11 @@ extern char *SML_GetSVal(uint32_t index);
//setRxBufferSize(TMSBSIZ);
Settings->serial_config = sconfig;
- AddLog(LOG_LEVEL_INFO, PSTR("Serial port set to %s %d bit/s at rx=%d tx=%d rbu=%d"), GetSerialConfig().c_str(), (uint32_t)br, (uint32_t)rxpin, (uint32_t)txpin, (uint32_t)rxbsiz);
+ uint8_t uart = 0;
+#ifdef ESP32
+ uart = glob_script_mem.sp->getUart();
+#endif
+ AddLog(LOG_LEVEL_INFO, PSTR("Serial port set to %s %d bit/s at rx=%d tx=%d rbu=%d uart=%d"), GetSerialConfig().c_str(), (uint32_t)br, (uint32_t)rxpin, (uint32_t)txpin, (uint32_t)rxbsiz, uart);
Settings->serial_config = savc;
if (rxpin == 3 and txpin == 1) ClaimSerial();
@@ -4715,19 +4869,19 @@ extern char *SML_GetSVal(uint32_t index);
fvar = -1;
uint8_t modbus_buffer[64];
uint16_t alen;
- float *array;
+ TS_FLOAT *array;
lp = get_array_by_name(lp + 4, &array, &alen, 0);
SCRIPT_SKIP_SPACES
if (!array) {
goto exit;
}
- float len;
+ TS_FLOAT len;
lp = GetNumericArgument(lp, OPER_EQU, &len, 0);
SCRIPT_SKIP_SPACES
if (len > alen) len = alen;
if (len < 1) len = 1;
if (*lp != ')') {
- float opt;
+ TS_FLOAT opt;
lp = GetNumericArgument(lp, OPER_EQU, &opt, 0);
SCRIPT_SKIP_SPACES
uint16_t opts = opt;
@@ -4804,13 +4958,13 @@ extern char *SML_GetSVal(uint32_t index);
fvar = -1;
if (glob_script_mem.sp) {
uint16_t alen;
- float *array = 0;
+ TS_FLOAT *array = 0;
lp = get_array_by_name(lp + 4, &array, &alen, 0);
SCRIPT_SKIP_SPACES
if (!array) {
goto exit;
}
- float opts = -1;
+ TS_FLOAT opts = -1;
if (*lp != ')') {
lp = GetNumericArgument(lp, OPER_EQU, &opts, 0);
SCRIPT_SKIP_SPACES
@@ -4860,19 +5014,19 @@ extern char *SML_GetSVal(uint32_t index);
if (!strncmp(lp, "smw(", 4)) {
fvar = -1;
if (glob_script_mem.sp) {
- float addr;
+ TS_FLOAT addr;
lp = GetNumericArgument(lp + 4, OPER_EQU, &addr, 0);
SCRIPT_SKIP_SPACES
- float mode;
+ TS_FLOAT mode;
lp = GetNumericArgument(lp, OPER_EQU, &mode, 0);
SCRIPT_SKIP_SPACES
uint16_t alend;
- float *fpd;
+ TS_FLOAT *fpd;
lp = get_array_by_name(lp, &fpd, &alend, 0);
SCRIPT_SKIP_SPACES
- float nvals;
+ TS_FLOAT nvals;
lp = GetNumericArgument(lp, OPER_EQU, &nvals, 0);
SCRIPT_SKIP_SPACES
@@ -4896,7 +5050,7 @@ extern char *SML_GetSVal(uint32_t index);
mb_index++;
for (uint16_t cnt = 0; cnt < nvals; cnt++) {
- float fpval = *fpd++;
+ TS_FLOAT fpval = *fpd++;
uint32_t ui32 = fpval;
uint32_t uval, *uvp;
uvp = &uval;
@@ -5044,12 +5198,12 @@ extern char *SML_GetSVal(uint32_t index);
lp = GetNumericArgument(lp , OPER_EQU, &fvar, 0);
int8_t index = fvar - 1;
- float *fpd = 0;
+ TS_FLOAT *fpd = 0;
uint16_t alend;
lp = get_array_by_name(lp, &fpd, &alend, 0);
// len
- float len = alend;
+ TS_FLOAT len = alend;
lp = GetNumericArgument(lp , OPER_EQU, &len, 0);
if (len > alend) {
len = alend;
@@ -5271,7 +5425,7 @@ extern char *SML_GetSVal(uint32_t index);
if (!strncmp(lp, "udp(", 4)) {
char url[SCRIPT_MAXSSIZE];
lp = GetStringArgument(lp + 4, OPER_EQU, url, 0);
- float port;
+ TS_FLOAT port;
lp = GetNumericArgument(lp, OPER_EQU, &port, gv);
char payload[SCRIPT_MAXSSIZE];
lp = GetStringArgument(lp, OPER_EQU, payload, 0);
@@ -5283,24 +5437,24 @@ extern char *SML_GetSVal(uint32_t index);
case 'w':
#if defined(ESP32) && defined(USE_WEBCAM)
if (!strncmp(lp, "wc(", 3)) {
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp + 3, OPER_EQU, &fvar1, gv);
SCRIPT_SKIP_SPACES
switch ((uint32)fvar1) {
case 0:
- { float fvar2;
+ { TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
fvar = WcSetup(fvar2);
}
break;
case 1:
- { float fvar2;
+ { TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
fvar = WcGetFrame(fvar2);
}
break;
case 2:
- { float fvar2,fvar3;
+ { TS_FLOAT fvar2,fvar3;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
SCRIPT_SKIP_SPACES
lp = GetNumericArgument(lp, OPER_EQU, &fvar3, gv);
@@ -5314,13 +5468,13 @@ extern char *SML_GetSVal(uint32_t index);
fvar = WcGetHeight();
break;
case 5:
- { float fvar2;
+ { TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
fvar = WcSetStreamserver(fvar2);
}
break;
case 6:
- { float fvar2;
+ { TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
fvar = WcSetMotionDetect(fvar2);
}
@@ -5328,7 +5482,7 @@ extern char *SML_GetSVal(uint32_t index);
/*
#ifdef USE_FACE_DETECT
case 7:
- { float fvar2;
+ { TS_FLOAT fvar2;
lp = GetNumericArgument(lp, OPER_EQU, &fvar2, gv);
fvar = WcSetFaceDetect(fvar2);
}
@@ -5639,14 +5793,15 @@ char *GetStringArgument(char *lp, uint8_t lastop, char *cp, struct GVARS *gv) {
}
return lp;
}
-
-char *GetNumericArgument(char *lp, uint8_t lastop, float *fp, struct GVARS *gv) {
+char *GetNumericArgument(char *lp, uint8_t lastop, TS_FLOAT *fp, struct GVARS *gv);
+char *GetNumericArgument(char *lp, uint8_t lastop, TS_FLOAT *fp, struct GVARS *gv) {
uint8_t operand = 0;
-float fvar1,fvar;
+TS_FLOAT fvar1,fvar;
char *slp;
uint8_t vtype;
while (*lp == ' ') { lp++; } // skip leading spaces
struct T_INDEX ind;
+ ind.bits.integer = 0;
while (1) {
// get 1. value
if (*lp=='(') {
@@ -5656,12 +5811,52 @@ struct T_INDEX ind;
//if (*lp==')') lp++;
} else {
lp = isvar(lp, &vtype, &ind, &fvar1, 0, gv);
- if ((vtype!=NUM_RES) && (vtype&STYPE)) {
+ if ((vtype != NUM_RES) && (vtype & STYPE)) {
// string type
glob_script_mem.glob_error = 1;
}
}
- switch (lastop) {
+ if (ind.bits.integer) {
+ switch (lastop) {
+ case OPER_EQU:
+ fvar = fvar1;
+ break;
+ case OPER_PLS:
+ *(int32_t*)&fvar += *(int32_t*)&fvar1;
+ break;
+ case OPER_MIN:
+ *(int32_t*)&fvar -= *(int32_t*)&fvar1;
+ break;
+ case OPER_MUL:
+ *(int32_t*)&fvar *= *(int32_t*)&fvar1;
+ break;
+ case OPER_DIV:
+ *(int32_t*)&fvar /= *(int32_t*)&fvar1;
+ break;
+ case OPER_PERC:
+ *(int32_t*)&fvar %= *(int32_t*)&fvar1;
+ break;
+ case OPER_XOR:
+ *(uint32_t*)&fvar ^= *(uint32_t*)&fvar1;
+ break;
+ case OPER_AND:
+ *(uint32_t*)&fvar &= *(uint32_t*)&fvar1;
+ break;
+ case OPER_OR:
+ *(uint32_t*)&fvar |= *(uint32_t*)&fvar1;
+ break;
+ case OPER_SHL:
+ *(uint32_t*)&fvar <<= *(uint32_t*)&fvar1;
+ break;
+ case OPER_SHR:
+ *(uint32_t*)&fvar >>= *(uint32_t*)&fvar1;
+ break;
+ default:
+ break;
+
+ }
+ } else {
+ switch (lastop) {
case OPER_EQU:
fvar = fvar1;
break;
@@ -5698,6 +5893,7 @@ struct T_INDEX ind;
default:
break;
+ }
}
slp = lp;
lp = getop(lp, &operand);
@@ -5725,7 +5921,7 @@ struct T_INDEX ind;
char *ForceStringVar(char *lp, char *dstr) {
- float fvar;
+ TS_FLOAT fvar;
char *slp = lp;
glob_script_mem.glob_error = 0;
lp = GetStringArgument(lp, OPER_EQU, dstr, 0);
@@ -5739,7 +5935,11 @@ char *ForceStringVar(char *lp, char *dstr) {
}
#ifdef USE_HOMEKIT
+
+int32_t UpdVar(char *vname, float *fvar, uint32_t mode);
+
extern "C" {
+
uint32_t Ext_UpdVar(char *vname, float *fvar, uint32_t mode) {
return UpdVar(vname, fvar, mode);
}
@@ -5779,7 +5979,7 @@ int32_t UpdVar(char *vname, float *fvar, uint32_t mode) {
return 1;
break;
case 'b':
- *fvar = ButtonLastState(index - 1);
+ *fvar = Button.last_state[index - 1];
return 1;
break;
}
@@ -5787,7 +5987,7 @@ int32_t UpdVar(char *vname, float *fvar, uint32_t mode) {
}
struct T_INDEX ind;
uint8_t vtype;
- float res = *fvar;
+ TS_FLOAT res = *fvar;
isvar(vname, &vtype, &ind, fvar, 0, 0);
if (vtype != VAR_NV) {
// found variable as result
@@ -5839,7 +6039,7 @@ void Replace_Cmd_Vars(char *srcbuf, uint32_t srcsize, char *dstbuf, uint32_t dst
uint8_t dprec = glob_script_mem.script_dprec;
char dsep = glob_script_mem.script_sepc;
uint8_t lzero = glob_script_mem.script_lzero;
- float fvar;
+ TS_FLOAT fvar;
cp = srcbuf;
struct T_INDEX ind;
char string[SCRIPT_MAXSSIZE];
@@ -5884,11 +6084,15 @@ void Replace_Cmd_Vars(char *srcbuf, uint32_t srcsize, char *dstbuf, uint32_t dst
cp += 2;
} else {
cp = isvar(cp, &vtype, &ind, &fvar, string, 0);
- if (vtype!=VAR_NV) {
+ if (vtype != VAR_NV) {
// found variable as result
- if (vtype==NUM_RES || (vtype&STYPE)==0) {
+ if (vtype == NUM_RES || (vtype & STYPE) == 0) {
// numeric result
- f2char(fvar, dprec, lzero, string, dsep);
+ if (ind.bits.integer) {
+ dtostrfd(*(int32_t*)&fvar, 0, string);
+ } else {
+ f2char(fvar, dprec, lzero, string, dsep);
+ }
} else {
// string result
}
@@ -5978,7 +6182,7 @@ void toSLog(const char *str) {
}
char *Evaluate_expression(char *lp, uint8_t and_or, uint8_t *result, struct GVARS *gv) {
- float fvar,*dfvar,fvar1;
+ TS_FLOAT fvar,*dfvar,fvar1;
uint8_t numeric;
struct T_INDEX ind;
uint8_t vtype = 0,lastop;
@@ -6166,8 +6370,8 @@ void esp_pwm(int32_t value, uint32 freq, uint32_t channel) {
}
#endif // ESP32
}
-
-char *eval_sub(char *lp, float *fvar, char *rstr) {
+char *eval_sub(char *lp, TS_FLOAT *fvar, char *rstr);
+char *eval_sub(char *lp, TS_FLOAT *fvar, char *rstr) {
scripter_sub(lp - 1, 0);
while (1) {
if (*lp == ')') {
@@ -6275,7 +6479,7 @@ int16_t Run_script_sub(const char *type, int8_t tlen, struct GVARS *gv) {
int8_t loopdepth = -1;
char *lp_next[SCRIPT_LOOP_NEST];
char *cv_ptr[SCRIPT_LOOP_NEST];
- float *cv_count[SCRIPT_LOOP_NEST], cv_max[SCRIPT_LOOP_NEST], cv_inc[SCRIPT_LOOP_NEST];
+ TS_FLOAT *cv_count[SCRIPT_LOOP_NEST], cv_max[SCRIPT_LOOP_NEST], cv_inc[SCRIPT_LOOP_NEST];
int16_t globaindex, saindex;
struct T_INDEX ind;
uint8_t operand, lastop, numeric = 1, if_state[IF_NEST], if_exe[IF_NEST], if_result[IF_NEST], and_or, ifstck = 0;
@@ -6283,9 +6487,9 @@ int16_t Run_script_sub(const char *type, int8_t tlen, struct GVARS *gv) {
if_result[ifstck] = 0;
if_exe[ifstck] = 1;
char cmpstr[SCRIPT_MAXSSIZE];
- float *dfvar;
+ TS_FLOAT *dfvar;
- float fvar = 0, fvar1, sysvar, swvar;
+ TS_FLOAT fvar = 0, fvar1, sysvar, swvar;
uint8_t section = 0, sysv_type = 0, swflg = 0;
char *lp;
@@ -6497,7 +6701,7 @@ getnext:
} else if (!strncmp(lp, "case", 4) && swflg>0) {
lp += 4;
SCRIPT_SKIP_SPACES
- float cvar;
+ TS_FLOAT cvar;
if (!(swflg & 0x80)) {
lp = GetNumericArgument(lp, OPER_EQU, &cvar, 0);
if (swvar != cvar) {
@@ -6679,7 +6883,7 @@ getnext:
// numeric result
if (glob_script_mem.type[ind.index].bits.is_filter) {
uint16_t len = 0;
- float *fa = Get_MFAddr(index, &len, 0);
+ TS_FLOAT *fa = Get_MFAddr(index, &len, 0);
//Serial.printf(">> 2 %d\n",(uint32_t)*fa);
if (fa && len) ws2812_set_array(fa, len, fvar);
}
@@ -6693,7 +6897,7 @@ getnext:
else if (!strncmp(lp, "beep(", 5)) {
lp = GetNumericArgument(lp + 5, OPER_EQU, &fvar, 0);
SCRIPT_SKIP_SPACES
- float fvar1;
+ TS_FLOAT fvar1;
lp = GetNumericArgument(lp, OPER_EQU, &fvar1, 0);
esp32_beep(fvar, fvar1);
lp++;
@@ -6723,7 +6927,7 @@ getnext:
}
lp = GetNumericArgument(lp, OPER_EQU, &fvar, 0);
SCRIPT_SKIP_SPACES
- float fvar1=4000;
+ TS_FLOAT fvar1 = 4000;
if (*lp != ')') {
lp = GetNumericArgument(lp, OPER_EQU, &fvar1, 0);
}
@@ -6922,7 +7126,51 @@ getnext:
#ifdef SCRIPT_LM_SUB
}
#endif
- switch (lastop) {
+ if (ind.bits.integer) {
+ switch (lastop) {
+ case OPER_EQU:
+ if (glob_script_mem.var_not_found) {
+ if (!gv || !gv->jo) toLogEOL("var not found: ",lp);
+ goto next_line;
+ }
+ *dfvar = fvar;
+ break;
+ case OPER_PLSEQU:
+ *(int32_t*)dfvar += *(int32_t*)&fvar;
+ break;
+ case OPER_MINEQU:
+ *(int32_t*)dfvar -= *(int32_t*)&fvar;
+ break;
+ case OPER_MULEQU:
+ *(int32_t*)dfvar *= *(int32_t*)&fvar;
+ break;
+ case OPER_DIVEQU:
+ *(int32_t*)dfvar /= *(int32_t*)&fvar;
+ break;
+ case OPER_PERCEQU:
+ *(int32_t*)dfvar %= *(int32_t*)&fvar;
+ break;
+ case OPER_ANDEQU:
+ *(uint32_t*)dfvar &= *(int32_t*)&fvar;
+ break;
+ case OPER_OREQU:
+ *(uint32_t*)dfvar |= *(int32_t*)&fvar;
+ break;
+ case OPER_XOREQU:
+ *(uint32_t*)dfvar ^= *(int32_t*)&fvar;
+ break;
+ case OPER_SHLEQU:
+ *(uint32_t*)dfvar <<= *(int32_t*)&fvar;
+ break;
+ case OPER_SHREQU:
+ *(uint32_t*)dfvar >>= *(int32_t*)&fvar;
+ break;
+ default:
+ // error
+ break;
+ }
+ } else {
+ switch (lastop) {
case OPER_EQU:
if (glob_script_mem.var_not_found) {
if (!gv || !gv->jo) toLogEOL("var not found: ",lp);
@@ -6963,7 +7211,9 @@ getnext:
default:
// error
break;
+ }
}
+
// var was changed
if (globvindex >= 0) SetChanged(globvindex);
#ifdef USE_SCRIPT_GLOBVARS
@@ -7114,7 +7364,7 @@ getnext:
lp += tlen;
do {
if (*ctype == nxttok && *lp == nxttok) {
- float fparam;
+ TS_FLOAT fparam;
numeric = 1;
glob_script_mem.glob_error = 0;
argptr = GetNumericArgument((char*)ctype + 1, OPER_EQU, &fparam, 0);
@@ -7187,7 +7437,7 @@ getnext:
#ifdef USE_SCRIPT_SPI
// transfer 1-3 bytes
-uint32_t script_sspi_trans(int32_t cs_index, float *array, uint32_t len, uint32_t size) {
+uint32_t script_sspi_trans(int32_t cs_index, TS_FLOAT *array, uint32_t len, uint32_t size) {
uint32_t out = 0;
if (cs_index >= 0) {
cs_index &= 3;
@@ -7289,8 +7539,8 @@ void ScripterEvery100ms(void) {
// should report overflow later
void Scripter_save_pvars(void) {
int16_t mlen = 0;
- float *fp = (float*)glob_script_mem.script_pram;
- mlen+=sizeof(float);
+ TS_FLOAT *fp = (TS_FLOAT*)glob_script_mem.script_pram;
+ mlen+=sizeof(TS_FLOAT);
struct T_INDEX *vtp = glob_script_mem.type;
for (uint8_t count = 0; countglob_script_mem.script_pram_size) {
vtp[count].bits.is_permanent = 0;
return;
@@ -7308,7 +7558,7 @@ void Scripter_save_pvars(void) {
*fp++ = *fa++;
}
} else {
- mlen += sizeof(float);
+ mlen += sizeof(TS_FLOAT);
if (mlen>glob_script_mem.script_pram_size) {
vtp[count].bits.is_permanent = 0;
return;
@@ -7657,9 +7907,12 @@ void SaveScript(void) {
#ifdef EEP_SCRIPT_SIZE
// here we handle EEPROM modes
if (glob_script_mem.FLAGS.eeprom == true) {
- if (EEP_SCRIPT_SIZE != SPECIAL_EEPMODE_SIZE) {
+ if (EEP_SCRIPT_SIZE < SPECIAL_EEPMODE_SIZE) {
EEP_WRITE(0, EEP_SCRIPT_SIZE, glob_script_mem.script_ram);
} else {
+#if EEP_SCRIPT_SIZE==SPI_FLASH_2SEC_SIZE
+ alt_eeprom_writeBytes(0, SPI_FLASH_2SEC_SIZE, (uint8_t*)glob_script_mem.script_ram);
+#else
uint8_t *ucs;
ucs = (uint8_t*)calloc(SPI_FLASH_SEC_SIZE + 4, 1);
if (ucs) {
@@ -7668,6 +7921,7 @@ void SaveScript(void) {
}
free(ucs);
}
+#endif
}
}
#else
@@ -7734,10 +7988,15 @@ void SaveScriptEnd(void) {
#endif //USE_SCRIPT_GLOBVARS
if (glob_script_mem.script_mem) {
+ // script was restarted
+ Run_Scripter1(">R\n", 3, 0);
Scripter_save_pvars();
free(glob_script_mem.script_mem);
glob_script_mem.script_mem = 0;
glob_script_mem.script_mem_size = 0;
+ #ifdef USE_SCRIPT_SERIAL
+ Script_Close_Serial();
+#endif
}
if (bitRead(Settings->rule_enabled, 0)) {
@@ -7748,10 +8007,6 @@ void SaveScriptEnd(void) {
return;
}
-#ifdef USE_SCRIPT_SERIAL
- Script_Close_Serial();
-#endif
-
set_callbacks();
Run_Scripter1(">B\n", 3, 0);
@@ -7764,15 +8019,6 @@ void SaveScriptEnd(void) {
}
}
-
-
-void set_callbacks() {
- if (Run_Scripter1(">F", -2, 0) == 99) {glob_script_mem.fast_script = glob_script_mem.section_ptr + 2;} else {glob_script_mem.fast_script = 0;}
- if (Run_Scripter1(">E", -2, 0) == 99) {glob_script_mem.event_script = glob_script_mem.section_ptr + 2;} else {glob_script_mem.event_script = 0;}
- if (Run_Scripter1(">C", -2, 0) == 99) {glob_script_mem.html_script = glob_script_mem.section_ptr + 2;} else {glob_script_mem.html_script = 0;}
- if (Run_Scripter1(">T", -2, 0) == 99) {glob_script_mem.teleperiod = glob_script_mem.section_ptr + 2;} else {glob_script_mem.teleperiod = 0;}
-}
-
void set_wpages(char *id, uint16_t index) {
uint16_t idlen = strlen(id);
uint16_t idl2 = idlen;
@@ -7802,6 +8048,12 @@ void script_set_web_pages(void) {
#endif // USE_WEBSERVER
+void set_callbacks() {
+ if (Run_Scripter1(">F", -2, 0) == 99) {glob_script_mem.fast_script = glob_script_mem.section_ptr + 2;} else {glob_script_mem.fast_script = 0;}
+ if (Run_Scripter1(">E", -2, 0) == 99) {glob_script_mem.event_script = glob_script_mem.section_ptr + 2;} else {glob_script_mem.event_script = 0;}
+ if (Run_Scripter1(">C", -2, 0) == 99) {glob_script_mem.html_script = glob_script_mem.section_ptr + 2;} else {glob_script_mem.html_script = 0;}
+ if (Run_Scripter1(">T", -2, 0) == 99) {glob_script_mem.teleperiod = glob_script_mem.section_ptr + 2;} else {glob_script_mem.teleperiod = 0;}
+}
#if defined(USE_SCRIPT_HUE) && defined(USE_WEBSERVER) && defined(USE_EMULATION) && defined(USE_EMULATION_HUE) && defined(USE_LIGHT)
#define HUE_DEV_MVNUM 5
@@ -7980,7 +8232,7 @@ void Script_HueStatus(String *response, uint16_t hue_devs) {
light_status += ",";
}
- float temp;
+ TS_FLOAT temp;
switch (hue_script[hue_devs].type) {
case 'C':
response->replace("{type}","Color Ligh"); // alexa ok
@@ -8093,9 +8345,9 @@ void Script_Check_Hue(String *response) {
vname[cnt] = *cp++;
}
isvar(vname, &vtype, &ind, 0, 0, 0);
- if (vtype!=VAR_NV) {
+ if (vtype != VAR_NV) {
// found variable as result
- if (vtype==NUM_RES || (vtype&STYPE)==0) {
+ if (vtype == NUM_RES || (vtype & STYPE) == 0) {
hue_script[hue_devs].vindex[vindex] = ind.index;
hue_script[hue_devs].index[vindex] = glob_script_mem.type[ind.index].index+1;
} else {
@@ -8204,7 +8456,7 @@ void Script_Handle_Hue(String path) {
JsonParserToken hue_xy = root[PSTR("xy")];
if (hue_xy) { // Saturation of the light. 254 is the most saturated (colored) and 0 is the least saturated (white).
- float x, y;
+ TS_FLOAT x, y;
JsonParserArray arr_xy = JsonParserArray(hue_xy);
JsonParserToken tok_x = arr_xy[0];
JsonParserToken tok_y = arr_xy[1];
@@ -8490,17 +8742,17 @@ bool ScriptCommand(void) {
char *lp = XdrvMailbox.data;
lp++;
while (*lp==' ') lp++;
- float fvar;
+ TS_FLOAT fvar;
char str[SCRIPT_MAXSSIZE];
glob_script_mem.glob_error = 0;
- float *fpd = 0;
+ TS_FLOAT *fpd = 0;
uint16_t alend;
char *cp = get_array_by_name(lp, &fpd, &alend, 0);
if (fpd && cp && (!strchr(lp, '[')) ) {
// is array
Response_P(PSTR("{\"script\":{\"%s\":["), lp);
for (uint16_t cnt = 0; cnt < alend; cnt++) {
- float tvar = *fpd++;
+ TS_FLOAT tvar = *fpd++;
ext_snprintf_P(str, sizeof(str), PSTR("%*_f"), -glob_script_mem.script_dprec, &tvar);
if (cnt) {
ResponseAppend_P(PSTR(",%s"), str);
@@ -9333,7 +9585,7 @@ void Script_Check_HTML_Setvars(void) {
struct T_INDEX ind;
uint8_t vtype;
isvar(vname, &vtype, &ind, 0, 0, 0);
- if (vtype!=NUM_RES && vtype&STYPE) {
+ if (vtype != NUM_RES && vtype & STYPE) {
// string type must insert quotes
uint8_t tlen = strlen(cp1);
memmove(cp1 + 1, cp1, tlen);
@@ -9467,8 +9719,8 @@ const char SCRIPT_MSG_GTE1[] PROGMEM = "'%s'";
#define MAX_GARRAY 4
#endif
-
-char *gc_get_arrays(char *lp, float **arrays, uint8_t *ranum, uint16_t *rentries, uint16_t *ipos) {
+char *gc_get_arrays(char *lp, TS_FLOAT **arrays, uint8_t *ranum, uint16_t *rentries, uint16_t *ipos);
+char *gc_get_arrays(char *lp, TS_FLOAT **arrays, uint8_t *ranum, uint16_t *rentries, uint16_t *ipos) {
struct T_INDEX ind;
uint8_t vtype;
uint16 entries = 0;
@@ -9478,18 +9730,18 @@ uint16_t cipos = 0;
while (anum < MAX_GARRAY) {
if (*lp == ')' || *lp == 0) break;
char *lp1 = lp;
- float sysvar;
+ TS_FLOAT sysvar;
lp = isvar(lp, &vtype, &ind, &sysvar, 0, 0);
if (vtype != VAR_NV) {
SCRIPT_SKIP_SPACES
uint8_t index = glob_script_mem.type[ind.index].index;
- if ((vtype&STYPE) == 0) {
+ if ((vtype & STYPE) == 0) {
// numeric result
//Serial.printf("numeric %d - %d \n",ind.index,index);
if (glob_script_mem.type[ind.index].bits.is_filter) {
//Serial.printf("numeric array\n");
uint16_t len = 0;
- float *fa = Get_MFAddr(index, &len, &cipos);
+ TS_FLOAT *fa = Get_MFAddr(index, &len, &cipos);
//Serial.printf(">> 2 %d\n",len);
if (fa && len >= entries) {
if (!entries) {
@@ -9595,9 +9847,9 @@ char gs_ctype;
#endif
void ScriptWebShow(char mc, uint8_t page) {
- float cv_max = 0;
- float cv_inc = 0;
- float *cv_count = 0;
+ TS_FLOAT cv_max = 0;
+ TS_FLOAT cv_inc = 0;
+ TS_FLOAT *cv_count = 0;
char *cv_ptr;
//uint8_t web_script;
@@ -9639,7 +9891,7 @@ void ScriptWebShow(char mc, uint8_t page) {
struct T_INDEX ind;
uint8_t vtype;
lp = isvar(lp + 5, &vtype, &ind, 0, 0, 0);
- if ((vtype != VAR_NV) && (vtype&STYPE) == 0) {
+ if ((vtype != VAR_NV) && (vtype & STYPE) == 0) {
uint16_t index = glob_script_mem.type[ind.index].index;
cv_count = &glob_script_mem.fvars[index];
SCRIPT_SKIP_SPACES
@@ -9744,7 +9996,7 @@ const char *gc_str;
if (!strncmp(lin, "so(", 3)) {
// set options
- float var;
+ TS_FLOAT var;
lin = GetNumericArgument(lin + 3, OPER_EQU, &var, 0);
specopt = var;
return lin;
@@ -9775,14 +10027,14 @@ const char *gc_str;
if (!strncmp(lin, "sl(", 3)) {
// insert slider sl(min max var left mid right)
char *lp = lin;
- float min;
+ TS_FLOAT min;
lp = GetNumericArgument(lp + 3, OPER_EQU, &min, 0);
SCRIPT_SKIP_SPACES
// arg2
- float max;
+ TS_FLOAT max;
lp = GetNumericArgument(lp, OPER_EQU, &max, 0);
SCRIPT_SKIP_SPACES
- float val;
+ TS_FLOAT val;
char *slp = lp;
lp = GetNumericArgument(lp, OPER_EQU, &val, 0);
SCRIPT_SKIP_SPACES
@@ -9806,7 +10058,7 @@ const char *gc_str;
} else if (!strncmp(lin, "ck(", 3)) {
char *lp = lin + 3;
char *slp = lp;
- float val;
+ TS_FLOAT val;
lp = GetNumericArgument(lp, OPER_EQU, &val, 0);
SCRIPT_SKIP_SPACES
@@ -9832,7 +10084,7 @@ const char *gc_str;
// pull down
char *lp = lin + 3;
char *slp = lp;
- float val;
+ TS_FLOAT val;
lp = GetNumericArgument(lp, OPER_EQU, &val, 0);
SCRIPT_SKIP_SPACES
@@ -9846,7 +10098,7 @@ const char *gc_str;
glob_script_mem.glob_error = 0;
uint16_t tsiz = 200;
- float fvar;
+ TS_FLOAT fvar;
char *slp1 = lp;
lp = GetNumericArgument(lp, OPER_EQU, &fvar, 0);
if (!glob_script_mem.glob_error) {
@@ -9915,7 +10167,7 @@ const char *gc_str;
if (optflg) WSContentSend_P(SCRIPT_MSG_BUT_START_TBL);
else WSContentSend_P(SCRIPT_MSG_BUT_START);
for (uint32_t cnt = 0; cnt < bcnt; cnt++) {
- float val;
+ TS_FLOAT val;
char *slp = lp;
lp = GetNumericArgument(lp, OPER_EQU, &val, 0);
SCRIPT_SKIP_SPACES
@@ -9957,7 +10209,7 @@ const char *gc_str;
} else if (!strncmp(lin, "tm(", 3)) {
// time only HH:MM
- float val;
+ TS_FLOAT val;
char *lp = lin + 3;
char *slp = lp;
lp = GetNumericArgument(lp, OPER_EQU, &val, 0);
@@ -9970,7 +10222,7 @@ const char *gc_str;
SCRIPT_SKIP_SPACES
uint16_t tsiz = 70;
if (*lp != ')') {
- float fvar;
+ TS_FLOAT fvar;
lp = GetNumericArgument(lp, OPER_EQU, &fvar, 0);
tsiz = fvar;
}
@@ -10001,7 +10253,7 @@ const char *gc_str;
uint16_t tsiz = 200;
if (*lp != ')') {
glob_script_mem.glob_error = 0;
- float fvar;
+ TS_FLOAT fvar;
char *slp1 = lp;
lp = GetNumericArgument(lp, OPER_EQU, &fvar, 0);
SCRIPT_SKIP_SPACES
@@ -10041,16 +10293,16 @@ const char *gc_str;
} else if (!strncmp(lin, "nm(", 3)) {
char *lp = lin;
- float min;
+ TS_FLOAT min;
lp = GetNumericArgument(lp + 3, OPER_EQU, &min, 0);
SCRIPT_SKIP_SPACES
- float max;
+ TS_FLOAT max;
lp = GetNumericArgument(lp, OPER_EQU, &max, 0);
SCRIPT_SKIP_SPACES
- float step;
+ TS_FLOAT step;
lp = GetNumericArgument(lp, OPER_EQU, &step, 0);
SCRIPT_SKIP_SPACES
- float val;
+ TS_FLOAT val;
char *slp = lp;
lp = GetNumericArgument(lp, OPER_EQU, &val, 0);
SCRIPT_SKIP_SPACES
@@ -10063,7 +10315,7 @@ const char *gc_str;
uint16_t tsiz = 200;
uint8_t dprec = 1;
if (*lp != ')') {
- float val;
+ TS_FLOAT val;
lp = GetNumericArgument(lp, OPER_EQU, &val, 0);
SCRIPT_SKIP_SPACES
tsiz = val;
@@ -10117,14 +10369,14 @@ exgc:
strncpy(valstr, lin, len);
valstr[len] = 0;
WSContentSend_P(PSTR("%s"), valstr);
- float *fpd = 0;
+ TS_FLOAT *fpd = 0;
uint16_t alend;
uint16_t ipos;
lp = get_array_by_name(cp + 5, &fpd, &alend, &ipos);
SCRIPT_SKIP_SPACES
if (*lp != ')') {
// limit array lenght
- float val;
+ TS_FLOAT val;
lp = GetNumericArgument(lp, OPER_EQU, &val, 0);
if (val > alend) {
val = alend;
@@ -10240,14 +10492,14 @@ exgc:
SCRIPT_SKIP_SPACES
//Serial.printf("type %d\n",ctype);
- float max_entries = 0;
+ TS_FLOAT max_entries = 0;
struct T_INDEX ind;
uint8_t vtype;
char *slp = lp;
lp = isvar(lp, &vtype, &ind, &max_entries, 0, 0);
if (vtype != VAR_NV) {
- if ((vtype&STYPE) == 0) {
+ if ((vtype & STYPE) == 0) {
// numeric result
if (!ind.bits.constant && glob_script_mem.type[ind.index].bits.is_filter) {
// is 1. array
@@ -10258,7 +10510,7 @@ exgc:
}
SCRIPT_SKIP_SPACES
- float *arrays[MAX_GARRAY];
+ TS_FLOAT *arrays[MAX_GARRAY];
uint8_t anum = 0;
uint16_t entries = 0;
uint16_t ipos = 0;
@@ -10297,7 +10549,7 @@ exgc:
for (uint32_t ind = 0; ind < anum; ind++) {
char lbl[16];
- float *fp = arrays[ind];
+ TS_FLOAT *fp = arrays[ind];
GetTextIndexed(lbl, sizeof(lbl), ind, label);
char lbl2[16];
if (lab2[0]) {
@@ -10399,7 +10651,7 @@ exgc:
WSContentSend_P("['");
char lbl[16];
if (todflg >= 0) {
- uint16_t mins = (float)(todflg % divflg) * (float)((float)60 / (float)divflg);
+ uint16_t mins = (TS_FLOAT)(todflg % divflg) * (TS_FLOAT)((TS_FLOAT)60 / (TS_FLOAT)divflg);
if (hmflg) {
sprintf(lbl, "%d:%02d", todflg / divflg, mins);
} else {
@@ -10428,8 +10680,8 @@ exgc:
WSContentSend_P("',");
for (uint32_t ind = 0; ind < anum; ind++) {
char acbuff[32];
- float *fp = arrays[ind];
- float fval;
+ TS_FLOAT *fp = arrays[ind];
+ TS_FLOAT fval;
if (asflg) {
fval = fp[aind];
} else {
@@ -10469,10 +10721,10 @@ exgc:
if (y2f) {
// 2 y axes variant
SCRIPT_SKIP_SPACES
- float max1;
+ TS_FLOAT max1;
lp = GetNumericArgument(lp, OPER_EQU, &max1, 0);
SCRIPT_SKIP_SPACES
- float max2;
+ TS_FLOAT max2;
lp = GetNumericArgument(lp, OPER_EQU, &max2, 0);
SCRIPT_SKIP_SPACES
char maxstr1[16];
@@ -10485,10 +10737,10 @@ exgc:
SCRIPT_SKIP_SPACES
if (gs_ctype != 'g') {
if (*lp != ')') {
- float max1;
+ TS_FLOAT max1;
lp = GetNumericArgument(lp, OPER_EQU, &max1, 0);
SCRIPT_SKIP_SPACES
- float max2;
+ TS_FLOAT max2;
lp = GetNumericArgument(lp, OPER_EQU, &max2, 0);
SCRIPT_SKIP_SPACES
char maxstr1[16];
@@ -10502,17 +10754,17 @@ exgc:
}
if (gs_ctype == 'g') {
- float yellowFrom;
+ TS_FLOAT yellowFrom;
lp = GetNumericArgument(lp, OPER_EQU, &yellowFrom, 0);
SCRIPT_SKIP_SPACES
- float redFrom;
+ TS_FLOAT redFrom;
lp = GetNumericArgument(lp, OPER_EQU, &redFrom, 0);
SCRIPT_SKIP_SPACES
- float maxValue;
+ TS_FLOAT maxValue;
lp = GetNumericArgument(lp, OPER_EQU, &maxValue, 0);
SCRIPT_SKIP_SPACES
- float redTo = maxValue;
- float yellowTo = redFrom;
+ TS_FLOAT redTo = maxValue;
+ TS_FLOAT yellowTo = redFrom;
snprintf_P(options, sizeof(options), SCRIPT_MSG_GAUGEOPT, (uint32_t)maxValue, (uint32_t)redFrom, (uint32_t)redTo,
(uint32_t)yellowFrom, (uint32_t)yellowTo);
}
@@ -10690,7 +10942,7 @@ void IRAM_ATTR fast_mux_irq() {
/* uint8_t pin nr, 0x40 = value, 0x80 = next
*/
-int32_t fast_mux(uint32_t flag, uint32_t time, float *buf, uint32_t len) {
+int32_t fast_mux(uint32_t flag, uint32_t time, TS_FLOAT *buf, uint32_t len) {
int32_t retval;
if (!flag) {
if (len > MUX_SIZE) {
@@ -11220,7 +11472,7 @@ int32_t lvgl_test(char **lpp, int32_t p) {
char *lp = *lpp;
lv_obj_t *obj;
lv_obj_t *label;
- float xp, yp, xs, ys, min, max;
+ TS_FLOAT xp, yp, xs, ys, min, max;
lv_meter_scale_t * scale;
lv_meter_indicator_t * indic;
char str[SCRIPT_MAXSSIZE];
@@ -11627,7 +11879,7 @@ bool Xdrv10(uint32_t function)
if (EEP_INIT(EEP_SCRIPT_SIZE)) {
// found 32kb eeprom,
char *script;
- if (EEP_SCRIPT_SIZE != SPECIAL_EEPMODE_SIZE) {
+#if EEP_SCRIPT_SIZE0) glob_script_mem.script_ram[len_decompressed] = 0;
if (ucs) free(ucs);
-
- }
+#endif // EEP_SCRIPT_SIZE==SPI_FLASH_2SEC_SIZE
+#endif // EEP_SCRIPT_SIZErules[0];
@@ -11688,7 +11952,7 @@ bool Xdrv10(uint32_t function)
bitWrite(Settings->rule_once, 7, 1);
#ifdef USE_BUTTON_EVENT
- for (uint32_t cnt = 0; cnt < MAX_KEYS_SET; cnt++) {
+ for (uint32_t cnt = 0; cnt < MAX_KEYS; cnt++) {
glob_script_mem.script_button[cnt] = -1;
}
#endif //USE_BUTTON_EVENT
@@ -11724,7 +11988,9 @@ bool Xdrv10(uint32_t function)
if (bitRead(Settings->rule_enabled, 0)) {
set_callbacks();
Run_Scripter1(">B\n", 3, 0);
+#ifdef USE_WEBSERVER
script_set_web_pages();
+#endif
#if defined(USE_SCRIPT_HUE) && defined(USE_WEBSERVER) && defined(USE_EMULATION) && defined(USE_EMULATION_HUE) && defined(USE_LIGHT)
Script_Check_Hue(0);
#endif //USE_SCRIPT_HUE
From 1b5c4768d1c39dfd0637c835d2530503d27a2254 Mon Sep 17 00:00:00 2001
From: Charles
Date: Sat, 25 Feb 2023 15:56:33 +0100
Subject: [PATCH 038/227] Libteleinfo update to V1.1.5 (#18050)
* Updated to V1.1.5
* Updated to V.1.1.5
Added new End Of Transmission code from Standard Mode
Check back checksum before returning stored values (corruption checks)
Added error counters stats
Removed dirty linked list align #pragma for ESP target
---
lib/lib_div/LibTeleinfo/README.md | 46 ++++++----
lib/lib_div/LibTeleinfo/library.json | 2 +-
lib/lib_div/LibTeleinfo/library.properties | 2 +-
lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp | 98 +++++++++++++++------
lib/lib_div/LibTeleinfo/src/LibTeleinfo.h | 23 ++---
5 files changed, 116 insertions(+), 55 deletions(-)
diff --git a/lib/lib_div/LibTeleinfo/README.md b/lib/lib_div/LibTeleinfo/README.md
index 11a90ac2b..a83d34569 100644
--- a/lib/lib_div/LibTeleinfo/README.md
+++ b/lib/lib_div/LibTeleinfo/README.md
@@ -1,14 +1,12 @@
-Teleinfo (Aka TIC) Universal Library
-====================================
+# Teleinfo (Aka TIC) Universal Library
This is a generic Teleinfo French Meter Measure Library, it can be used on Arduino like device and also such as Spark Core, Particle, ESP8266, Raspberry PI or anywhere you can do Cpp code ...
-You can see Teleinformation official french datasheet [there][1]
+You can see Teleinformation official french datasheet [there][1] and this one is for [Linky][3].
-Since this is really dedicated to French energy measuring system, I will continue in French
+Since this is really dedicated to French energy measuring system, I will continue in French.
-Installation
-============
+# Installation
Copier le contenu de ce dossier (download zip) dans le dossier libraries de votre environnement Arduino Vous devriez avoir maintenant quelque chose comme `your_sketchbook_folder/libraries/LibTeleinfo` et ce dossier doit contentir les fichiers .cpp et .h ainsi que le sous dossier `examples`.
@@ -17,14 +15,12 @@ Pour trouver votre dossier de sketchbook, dans l'environnement IDE, allez dans F
allez voir ce [tutorial][2] sur les librairies Arduino si beoin.
-Documentation
-=============
+# Documentation
J'ai écrit un article [dédié][10] sur cette librairie, vous pouvez aussi voir les [catégories][6] associées à la téléinfo sur mon [blog][7].
Pour les commentaires et le support vous pouvez allez sur le [forum][8] dédié ou dans la [communauté][9]
-Sketch d'exemples
-=================
+# Sketch d'exemples
- [Arduino_Softserial_Etiquette][3] Affiche des informations de téléinformation reçue étiquette par étiquette
- [Arduino_Softserial_Blink][11] Affiche des informations de téléinformation reçue trame par trame avec clignotement LED court/long si les données ont été modifiés
@@ -32,23 +28,32 @@ Sketch d'exemples
- [Raspberry_JSON][12] Retourne les informations de téléinformation au format JSON sur stdout.
- [Wifinfo][5] ESP8266, ESP32 Wifi Teleinformation, Web + Rest + bonus, version en cours de développement, à venir mais un article [dédié][13] est déjà présent sur mon blog
- [ESP32][14] ESP32 Basic test pour WifInfo32 nouveau nom Denky :-)
+- [ESP32_Passthru][14] ESP32 PassThru Basic test pour Denky D4, affiche les données et les stats de la téléinfo dans la console série
+- [ESP8266_DataChanged][15] ESP8266 Surveille et affiche les données changées entre 2 trames, clignote la LED RGB en fonction
+- [Teleinfo_DenkyD4][16] ESP32 Denky D4 Basic test et stats pour le nouveau Denky D4 basé sur l'ESP32-Pico-V3-02
+- [Teleinfo_Stats][18] ESP32 Programme de test et statistiques pour la qualité de réception
+
+# Pourquoi
-Pourquoi
-========
- J'utilise la téléinfo dans plusieurs de mes programmes et j'en avais marre de devoir faire des copier/coller de code constament, j'ai donc décidé de faire une librairie commune que j'utilise sans me poser de question
-License
-=======
+# License
+
Cette oeuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.
Si vous êtes une entreprise et que vous souhaitez participer car vous utilisez cette librairie dans du hardware (box, automate, ...), vous pouvez toujours m'envoyer un exemplaire de votre fabrication, c'est toujours sympa de voir ce qui est fait avec ce code ;-)
-Divers
-======
+# Addon
+
+Ajout des compteurs d'erreurs, et du traitement du caracteres EOT d'interruption de trames
+
+# Divers
+
Vous pouvez aller voir les nouveautés et autres projets sur [blog][7]
-[1]: http://www.erdf.fr/sites/default/files/ERDF-NOI-CPT_02E.pdf
+[1]: https://www.enedis.fr/sites/default/files/Enedis-NOI-CPT_02E.pdf
[2]: http://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-libraries
+[3]: https://www.enedis.fr/sites/default/files/Enedis-NOI-CPT_54E.pdf
[6]: https://hallard.me/category/tinfo/
[7]: https://hallard.me
[8]: https://community.hallard.me/category/7
@@ -59,7 +64,12 @@ Vous pouvez aller voir les nouveautés et autres projets sur [blog][7]
[4]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Arduino_Softserial_JSON/Arduino_Softserial_JSON.ino
[5]: https://github.com/hallard/LibTeleinfo/tree/master/examples/Wifinfo/Wifinfo.ino
[11]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Arduino_Softserial/Arduino_Softserial_Blink.ino
-[12]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Raspberry_JSON/Raspberry_JSON.ino
+[12]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Raspberry_JSON/raspjson.cpp
[13]: https://hallard.me/wifiinfo/
[14]: https://github.com/hallard/LibTeleinfo/blob/master/examples/ESP32/ESP32.ino
+[15]: https://github.com/hallard/LibTeleinfo/blob/master/examples/ESP8266_DataChanged/ESP8266_DataChanged.ino
+[16]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Teleinfo_DenkyD4/Teleinfo_DenkyD4.ino
+[17]: https://github.com/hallard/LibTeleinfo/blob/master/examples/ESP32_Passthru/ESP32_Passthru.ino
+[18]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Teleinfo_Stats/Teleinfo_Stats.ino
+
diff --git a/lib/lib_div/LibTeleinfo/library.json b/lib/lib_div/LibTeleinfo/library.json
index ea6932a9b..84593d3a6 100644
--- a/lib/lib_div/LibTeleinfo/library.json
+++ b/lib/lib_div/LibTeleinfo/library.json
@@ -1,6 +1,6 @@
{
"name": "LibTeleinfo",
- "version": "1.1.3",
+ "version": "1.1.5",
"keywords": "teleinfo, french, meter, power, erdf, linky, tic",
"description": "Decoder for Teleinfo (aka TIC) from French smart power meters",
"repository":
diff --git a/lib/lib_div/LibTeleinfo/library.properties b/lib/lib_div/LibTeleinfo/library.properties
index ad488ca08..562d96c62 100644
--- a/lib/lib_div/LibTeleinfo/library.properties
+++ b/lib/lib_div/LibTeleinfo/library.properties
@@ -1,5 +1,5 @@
name=LibTeleinfo
-version=1.1.3
+version=1.1.5
author=Charles-Henri Hallard
maintainer=Charles-Henri Hallard
sentence=Decoder for Teleinfo (aka TIC) from French smart power meters
diff --git a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
index cdaa8aa9e..de9d3ef21 100644
--- a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
+++ b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
@@ -50,6 +50,8 @@ TInfo::TInfo()
_fn_data = NULL;
_fn_new_frame = NULL;
_fn_updated_frame = NULL;
+
+ clearStats();
}
/* ======================================================================
@@ -78,6 +80,22 @@ void TInfo::init(_Mode_e mode)
}
}
+/* ======================================================================
+Function: clearStats
+Purpose : clear stats counters
+Input : -
+Output : -
+Comments: -
+====================================================================== */
+void TInfo::clearStats()
+{
+ // reset Frame counters stats
+ _checksumerror =0;
+ _framesizeerror=0;
+ _frameformaterror=0;
+ _frameinterrupted=0;
+}
+
/* ======================================================================
Function: attachADPS
Purpose : attach a callback when we detected a ADPS on any phase
@@ -226,6 +244,7 @@ ValueList * TInfo::valueAdd(char * name, char * value, uint8_t checksum, uint8_t
ValueList *parNode = NULL ;
uint32_t ts = 0;
+ // Time stamped field?
if (horodate && *horodate) {
ts = horodate2Timestamp(horodate);
}
@@ -256,8 +275,8 @@ ValueList * TInfo::valueAdd(char * name, char * value, uint8_t checksum, uint8_t
if (strlen(me->value) >= lgvalue ) {
// Copy it
strlcpy(me->value, value , lgvalue + 1 );
- me->checksum = checksum ;
-
+ // store checksum for future check without horodate
+ me->checksum = ts ? calcChecksum(name,value) : checksum ;
// That's all
return (me);
} else {
@@ -279,19 +298,12 @@ ValueList * TInfo::valueAdd(char * name, char * value, uint8_t checksum, uint8_t
// Our linked list structure sizeof(ValueList)
// + Name + '\0'
// + Value + '\0'
- size_t size ;
- #if defined (ESP8266) || defined (ESP32)
- lgname = ESP_allocAlign(lgname+1); // Align name buffer
- lgvalue = ESP_allocAlign(lgvalue+1); // Align value buffer
- // Align the whole structure
- size = ESP_allocAlign( sizeof(ValueList) + lgname + lgvalue ) ;
- #else
- size = sizeof(ValueList) + lgname + 1 + lgvalue + 1 ;
- #endif
+ size_t size = sizeof(ValueList) + lgname + 1 + lgvalue + 1 ;
// Create new node with size to store strings
- if ((newNode = (ValueList *) malloc(size) ) == NULL)
+ if ((newNode = (ValueList *) malloc(size) ) == NULL) {
return ( (ValueList *) NULL );
+ }
// get our buffer Safe
memset(newNode, 0, size);
@@ -456,10 +468,13 @@ char * TInfo::valueGet(char * name, char * value)
if (lgname==strlen(me->name) && strcmp(me->name, name)==0) {
// this one has a value ?
if (me->value) {
- // copy to dest buffer
- uint8_t lgvalue = strlen(me->value);
- strlcpy(value, me->value , lgvalue + 1 );
- return ( value );
+ // Check back checksum
+ if (me->checksum == calcChecksum(me->name, me->value)) {
+ // copy to dest buffer
+ uint8_t lgvalue = strlen(me->value);
+ strlcpy(value, me->value , lgvalue + 1 );
+ return ( value );
+ }
}
}
}
@@ -494,10 +509,13 @@ char * TInfo::valueGet_P(const char * name, char * value)
if (lgname==strlen(me->name) && strcmp_P(me->name, name)==0) {
// this one has a value ?
if (me->value) {
- // copy to dest buffer
- uint8_t lgvalue = strlen(me->value);
- strlcpy(value, me->value , lgvalue + 1 );
- return ( value );
+ // Check back checksum
+ if (me->checksum == calcChecksum(me->name, me->value)) {
+ // copy to dest buffer
+ uint8_t lgvalue = strlen(me->value);
+ strlcpy(value, me->value , lgvalue + 1 );
+ return ( value );
+ }
}
}
}
@@ -529,6 +547,7 @@ uint8_t TInfo::valuesDump(void)
// Get our linked list
ValueList * me = &_valueslist;
uint8_t index = 0;
+ uint8_t checksum=0;
// Got one ?
if (me) {
@@ -541,7 +560,7 @@ uint8_t TInfo::valuesDump(void)
TI_Debug(index) ;
TI_Debug(F(") ")) ;
- if (me->name) {
+ if (me->name ) {
TI_Debug(me->name) ;
} else {
TI_Debug(F("NULL")) ;
@@ -555,9 +574,17 @@ uint8_t TInfo::valuesDump(void)
TI_Debug(F("NULL")) ;
}
+ if (me->name && me->value && *me->name && *me->value) {
+ checksum = calcChecksum(me->name, me->value);
+ }
+
TI_Debug(F(" '")) ;
TI_Debug(me->checksum) ;
- TI_Debug(F("' "));
+ if (me->checksum != checksum ) {
+ TI_Debug(F("'!Err "));
+ } else {
+ TI_Debug(F("' "));
+ }
// Flags management
if ( me->flags) {
@@ -798,6 +825,7 @@ ValueList * TInfo::checkLine(char * pline)
// 2 Label + Space + 1 etiquette + space + checksum + \r
if ( len < 7 || len >= TINFO_BUFSIZE) {
//AddLog(3, PSTR("LibTeleinfo: Error len < 7 || len >= TINFO_BUFSIZE"));
+ _framesizeerror++;
return NULL;
}
@@ -904,9 +932,15 @@ ValueList * TInfo::checkLine(char * pline)
}
else
{
- AddLog(1, PSTR("LibTeleinfo::checkLine Err checksum 0x%02X != 0x%02X"), calc_checksum, checksum);
+ _checksumerror++;
+ AddLog(1, PSTR("LibTeleinfo::checkLine Err checksum 0x%02X != 0x%02X (total errors=%d)"), calc_checksum, checksum, _checksumerror);
}
}
+ }
+ else
+ {
+ _frameformaterror++;
+ AddLog(1, PSTR("LibTeleinfo::checkLine frame format error, total=%d"), _frameformaterror);
}
}
// Next char
@@ -948,7 +982,17 @@ _State_e TInfo::process(char c)
_state = TINFO_WAIT_ETX;
}
break;
-
+
+ // frame interruption
+ case TINFO_EOT:
+ //AddLog(3, PSTR("LibTeleinfo: case TINFO_EOT >>>>>>>>>>>>>>>>>>"));
+ // discard incomplete frame
+ // Clear buffer, begin to store in it
+ clearBuffer();
+ _frameinterrupted++;
+ _state = TINFO_WAIT_STX;
+ break;
+
// End of transmission ?
case TINFO_ETX:
//AddLog(3, PSTR("LibTeleinfo: case TINFO_ETX >>>>>>>>>>>>>>>>>>"));
@@ -1002,8 +1046,12 @@ _State_e TInfo::process(char c)
// Are we ready to process ?
if (_state == TINFO_READY) {
// Store data recceived (we'll need it)
- if ( _recv_idx < TINFO_BUFSIZE)
+ if ( _recv_idx < TINFO_BUFSIZE) {
_recv_buff[_recv_idx++]=c;
+ } else {
+ // group is too big (some ETX missing)
+ _framesizeerror++;
+ }
// clear the end of buffer (paranoia inside)
memset(&_recv_buff[_recv_idx], 0, TINFO_BUFSIZE-_recv_idx);
diff --git a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h
index 3c947b5ca..8ac4ad034 100644
--- a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h
+++ b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h
@@ -74,14 +74,6 @@ void AddLog(uint32_t loglevel, PGM_P formatP, ...);
#define TI_Debugflush {}
#endif
-// For 4 bytes Aligment boundaries
-#if defined (ESP8266) || defined (ESP32)
-#define ESP_allocAlign(size) ((size + 3) & ~((size_t) 3))
-#endif
-
-#pragma pack(push) // push current alignment to stack
-#pragma pack(1) // set alignment to 1 byte boundary
-
// Linked list structure containing all values received
typedef struct _ValueList ValueList;
struct _ValueList
@@ -94,8 +86,6 @@ struct _ValueList
char * value; // value
};
-#pragma pack(pop)
-
// Library state machine
enum _Mode_e {
TINFO_MODE_HISTORIQUE, // Legacy mode (1200)
@@ -125,6 +115,7 @@ enum _State_e {
// Teleinfo start and end of frame characters
#define TINFO_STX 0x02
#define TINFO_ETX 0x03
+#define TINFO_EOT 0x04 // frame interrupt (End Of Transmission)
#define TINFO_HT 0x09
#define TINFO_SGR '\n' // start of group
#define TINFO_EGR '\r' // End of group
@@ -151,7 +142,12 @@ class TInfo
char * valueGet_P(const char * name, char * value);
int labelCount();
boolean listDelete();
+ void clearStats();
unsigned char calcChecksum(char *etiquette, char *valeur, char *horodate=NULL) ;
+ uint32_t getChecksumErrorCount() { return _checksumerror; };
+ uint32_t getFrameSizeErrorCount() { return _framesizeerror; };
+ uint32_t getFrameFormatErrorCount() { return _frameformaterror; };
+ uint32_t getFrameInterruptedCount() { return _frameinterrupted; };
private:
void clearBuffer();
@@ -169,6 +165,13 @@ class TInfo
char _separator;
uint8_t _recv_idx; // index in receive buffer
boolean _frame_updated; // Data on the frame has been updated
+
+ // Frame counters stats
+ uint32_t _checksumerror;
+ uint32_t _framesizeerror;
+ uint32_t _frameformaterror;
+ uint32_t _frameinterrupted;
+
void (*_fn_ADPS)(uint8_t phase, char * label);
void (*_fn_data)(ValueList * valueslist, uint8_t state);
void (*_fn_new_frame)(ValueList * valueslist);
From e927e3307ef1625d0e913c57967e9fec4e395db0 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 25 Feb 2023 16:44:04 +0100
Subject: [PATCH 039/227] Add DevicesPresent limit check
- Increase supported relays and buttons to 32
---
tasmota/include/tasmota.h | 4 +-
tasmota/tasmota_support/support.ino | 16 ++
tasmota/tasmota_xdrv_driver/xdrv_04_light.ino | 6 +-
.../tasmota_xdrv_driver/xdrv_13_display.ino | 4 +-
.../xdrv_16_tuyamcu_v1.ino | 4 +-
.../xdrv_16_tuyamcu_v2.ino | 4 +-
.../xdrv_18_armtronix_dimmers.ino | 2 +-
.../xdrv_19_ps16dz_dimmer.ino | 2 +-
.../tasmota_xdrv_driver/xdrv_28_pcf8574.ino | 9 +-
.../xdrv_30_exs_dimmer.ino | 2 +-
.../xdrv_35_pwm_dimmer.ino | 2 +-
.../tasmota_xdrv_driver/xdrv_37_sonoff_d1.ino | 2 +-
.../tasmota_xdrv_driver/xdrv_44_miel_hvac.ino | 3 +-
.../xdrv_45_shelly_dimmer.ino | 2 +-
.../xdrv_53_projector_ctrl.ino | 3 +-
.../tasmota_xdrv_driver/xdrv_60_shift595.ino | 3 +-
.../tasmota_xdrv_driver/xdrv_66_tm1638.ino | 2 +-
.../xdrv_86_esp32_sonoff_spm.ino | 2 +-
.../xdrv_88_esp32_shelly_pro.ino | 2 +-
.../xdrv_88_esp32_shelly_pro_v1.ino | 177 ++++++++++++++++++
.../xdrv_90_esp32_dingtian_relay.ino | 5 +-
21 files changed, 225 insertions(+), 31 deletions(-)
create mode 100644 tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro_v1.ino
diff --git a/tasmota/include/tasmota.h b/tasmota/include/tasmota.h
index ec68438ba..19d098a26 100644
--- a/tasmota/include/tasmota.h
+++ b/tasmota/include/tasmota.h
@@ -52,8 +52,8 @@ const uint8_t MAX_INTERLOCKS = 14; // Max number of interlock groups (u
const uint8_t MAX_SWITCHES = 28; // Max number of switches selectable on GPIO
const uint8_t MAX_KEYS = 28; // Max number of keys or buttons selectable on GPIO
#endif // ESP32
-const uint8_t MAX_RELAYS_SET = 28; // Max number of relays
-const uint8_t MAX_KEYS_SET = 28; // Max number of keys
+const uint8_t MAX_RELAYS_SET = 32; // Max number of relays
+const uint8_t MAX_KEYS_SET = 32; // Max number of keys
// Changes to the following MAX_ defines will impact settings layout
const uint8_t MAX_INTERLOCKS_SET = 14; // Max number of interlock groups (MAX_RELAYS_SET / 2)
diff --git a/tasmota/tasmota_support/support.ino b/tasmota/tasmota_support/support.ino
index 7c8c90f5e..d39d2b8bb 100755
--- a/tasmota/tasmota_support/support.ino
+++ b/tasmota/tasmota_support/support.ino
@@ -757,6 +757,22 @@ bool NewerVersion(char* version_str) {
return (version > VERSION);
}
+int32_t UpdateDevicesPresent(int32_t change) {
+ int32_t difference = 0;
+ int32_t devices_present = TasmotaGlobal.devices_present; // Between 0 and 32
+ devices_present += change;
+ if (devices_present < 0) { // Support down to 0
+ difference = devices_present;
+ devices_present = 0;
+ }
+ else if (devices_present >= POWER_SIZE) { // Support up to uint32_t as bitmask
+ difference = devices_present - POWER_SIZE;
+ devices_present = POWER_SIZE;
+ }
+ TasmotaGlobal.devices_present = devices_present;
+ return difference;
+}
+
char* GetPowerDevice(char* dest, uint32_t idx, size_t size, uint32_t option)
{
strncpy_P(dest, S_RSLT_POWER, size); // POWER
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_04_light.ino b/tasmota/tasmota_xdrv_driver/xdrv_04_light.ino
index bbad6d364..c8d728b7d 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_04_light.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_04_light.ino
@@ -1116,17 +1116,17 @@ bool LightModuleInit(void)
#endif // USE_PWM_DIMMER
if (TasmotaGlobal.light_type > LT_BASIC) {
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
}
// post-process for lights
uint32_t pwm_channels = (TasmotaGlobal.light_type & 7) > LST_MAX ? LST_MAX : (TasmotaGlobal.light_type & 7);
if (Settings->flag3.pwm_multi_channels) { // SetOption68 - Enable multi-channels PWM instead of Color PWM
if (0 == pwm_channels) { pwm_channels = 1; }
- TasmotaGlobal.devices_present += pwm_channels - 1; // add the pwm channels controls at the end
+ UpdateDevicesPresent(pwm_channels - 1); // add the pwm channels controls at the end
} else if ((Settings->param[P_RGB_REMAP] & 128) && (LST_RGBW <= pwm_channels)) { // SetOption37
// if RGBW or RGBCW, and SetOption37 >= 128, we manage RGB and W separately, hence adding a device
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
} else {
#ifdef USE_LIGHT_VIRTUAL_CT
initCTRange(pwm_channels);
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_13_display.ino b/tasmota/tasmota_xdrv_driver/xdrv_13_display.ino
index bbd9802aa..f55947bce 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_13_display.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_13_display.ino
@@ -1875,10 +1875,10 @@ void DisplayInitDriver(void) {
for (uint8_t count = 0; count < NUM_GRAPHS; count++) { graph[count] = 0; }
#endif
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
if (!PinUsed(GPIO_BACKLIGHT)) {
if (TasmotaGlobal.light_type && (4 == Settings->display_model)) {
- TasmotaGlobal.devices_present--; // Assume PWM channel is used for backlight
+ UpdateDevicesPresent(-1); // Assume PWM channel is used for backlight
}
}
disp_device = TasmotaGlobal.devices_present;
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v1.ino b/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v1.ino
index bd316122e..3ad56d84a 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v1.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v1.ino
@@ -1181,13 +1181,13 @@ bool TuyaModuleSelected(void) {
if ((Settings->tuya_fnid_map[i].fnid >= TUYA_MCU_FUNC_REL1 && Settings->tuya_fnid_map[i].fnid <= TUYA_MCU_FUNC_REL8 ) ||
(Settings->tuya_fnid_map[i].fnid >= TUYA_MCU_FUNC_REL1_INV && Settings->tuya_fnid_map[i].fnid <= TUYA_MCU_FUNC_REL8_INV )) {
relaySet = true;
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
}
}
if (!relaySet && TuyaGetDpId(TUYA_MCU_FUNC_DUMMY) == 0) { //by default the first relay is created automatically the dummy let remove it if not needed
TuyaAddMcuFunc(TUYA_MCU_FUNC_REL1, 1);
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
SettingsSaveAll();
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v2.ino b/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v2.ino
index 6c3eb15d5..24370ef8c 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v2.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v2.ino
@@ -1981,13 +1981,13 @@ bool TuyaModuleSelected(void) {
if ((Settings->tuya_fnid_map[i].fnid >= TUYA_MCU_FUNC_REL1 && Settings->tuya_fnid_map[i].fnid <= TUYA_MCU_FUNC_REL8 ) ||
(Settings->tuya_fnid_map[i].fnid >= TUYA_MCU_FUNC_REL1_INV && Settings->tuya_fnid_map[i].fnid <= TUYA_MCU_FUNC_REL8_INV )) {
relaySet = true;
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
}
}
if (!relaySet && TuyaGetDpId(TUYA_MCU_FUNC_DUMMY) == 0) { //by default the first relay is created automatically the dummy let remove it if not needed
TuyaAddMcuFunc(TUYA_MCU_FUNC_REL1, 1);
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
SettingsSaveAll();
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_18_armtronix_dimmers.ino b/tasmota/tasmota_xdrv_driver/xdrv_18_armtronix_dimmers.ino
index 674ee9b3c..e070e5d82 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_18_armtronix_dimmers.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_18_armtronix_dimmers.ino
@@ -86,7 +86,7 @@ void ArmtronixRequestState(void)
bool ArmtronixModuleSelected(void)
{
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
TasmotaGlobal.light_type = LT_SERIAL2;
return true;
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_19_ps16dz_dimmer.ino b/tasmota/tasmota_xdrv_driver/xdrv_19_ps16dz_dimmer.ino
index d23058b39..69d0a69c0 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_19_ps16dz_dimmer.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_19_ps16dz_dimmer.ino
@@ -196,7 +196,7 @@ void PS16DZInit(void)
bool PS16DZModuleSelected(void)
{
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
TasmotaGlobal.light_type = LT_SERIAL1;
return true;
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574.ino b/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574.ino
index 891e07f44..a889fe3aa 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574.ino
@@ -148,7 +148,8 @@ void Pcf8574Init(void)
for (uint32_t i = 0; i < sizeof(Pcf8574.pin); i++) {
Pcf8574.pin[i] = 99;
}
- TasmotaGlobal.devices_present = TasmotaGlobal.devices_present - Pcf8574.max_connected_ports; // reset no of devices to avoid duplicate ports on duplicate init.
+ UpdateDevicesPresent(-Pcf8574.max_connected_ports); // reset no of devices to avoid duplicate ports on duplicate init.
+
Pcf8574.max_connected_ports = 0; // reset no of devices to avoid duplicate ports on duplicate init.
for (uint32_t idx = 0; idx < Pcf8574.max_devices; idx++) { // suport up to 8 boards PCF8574
uint8_t gpio = Pcf8574Read(idx);
@@ -173,7 +174,7 @@ void Pcf8574Init(void)
bitWrite(Settings->power, TasmotaGlobal.devices_present, power_state);
}
//else AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: DON'T set power from chip state"));
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
Pcf8574.max_connected_ports++;
}
}
@@ -314,7 +315,7 @@ void Pcf8574SaveSettings(void)
count++;
}
if (count <= TasmotaGlobal.devices_present) {
- TasmotaGlobal.devices_present = TasmotaGlobal.devices_present - count;
+ UpdateDevicesPresent(-count);
}
for (byte i = 0; i < 8; i++) {
snprintf_P(stemp, sizeof(stemp), PSTR("i2cs%d"), i+8*idx);
@@ -322,7 +323,7 @@ void Pcf8574SaveSettings(void)
byte _value = (!strlen(tmp)) ? 0 : atoi(tmp);
if (_value) {
Settings->pcf8574_config[idx] = Settings->pcf8574_config[idx] | 1 << i;
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
Pcf8574.max_connected_ports++;
} else {
Settings->pcf8574_config[idx] = Settings->pcf8574_config[idx] & ~(1 << i );
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_30_exs_dimmer.ino b/tasmota/tasmota_xdrv_driver/xdrv_30_exs_dimmer.ino
index 597f3b9e6..7579072b3 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_30_exs_dimmer.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_30_exs_dimmer.ino
@@ -354,7 +354,7 @@ bool ExsModuleSelected(void)
Settings->flag3.pwm_multi_channels = 1; // SetOption68 - Enable multi-channels PWM instead of Color PWM
SetSeriallog(LOG_LEVEL_NONE);
- TasmotaGlobal.devices_present = +2;
+ UpdateDevicesPresent(2);
TasmotaGlobal.light_type = LT_SERIAL2;
return true;
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_35_pwm_dimmer.ino b/tasmota/tasmota_xdrv_driver/xdrv_35_pwm_dimmer.ino
index 5ce566548..76e9e7bca 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_35_pwm_dimmer.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_35_pwm_dimmer.ino
@@ -137,7 +137,7 @@ void PWMModulePreInit(void)
first_device_group_is_local = false;
// Back out the changes made in the light module under the assumtion we have a relay or PWM.
- TasmotaGlobal.devices_present--;
+ UpdateDevicesPresent(-1);
TasmotaGlobal.light_type = 0;
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_37_sonoff_d1.ino b/tasmota/tasmota_xdrv_driver/xdrv_37_sonoff_d1.ino
index fde6dc1c9..a727b6080 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_37_sonoff_d1.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_37_sonoff_d1.ino
@@ -163,7 +163,7 @@ bool SonoffD1ModuleSelected(void)
{
SetSerial(9600, TS_SERIAL_8N1);
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
TasmotaGlobal.light_type = LT_SERIAL1;
return true;
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_44_miel_hvac.ino b/tasmota/tasmota_xdrv_driver/xdrv_44_miel_hvac.ino
index 65ab1ecdd..acdd3fa6a 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_44_miel_hvac.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_44_miel_hvac.ino
@@ -1085,7 +1085,8 @@ miel_hvac_pre_init(void)
SetSerial(baudrate, TS_SERIAL_8E1);
}
- sc->sc_device = TasmotaGlobal.devices_present++; /* claim a POWER device slot */
+ UpdateDevicesPresent(1); /* claim a POWER device slot */
+ sc->sc_device = TasmotaGlobal.devices_present;
miel_hvac_sc = sc;
return;
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_45_shelly_dimmer.ino b/tasmota/tasmota_xdrv_driver/xdrv_45_shelly_dimmer.ino
index 0ed553765..42ba5df0b 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_45_shelly_dimmer.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_45_shelly_dimmer.ino
@@ -725,7 +725,7 @@ bool ShdSerialInput(void)
bool ShdModuleSelected(void) {
if (PinUsed(GPIO_SHELLY_DIMMER_BOOT0) && PinUsed(GPIO_SHELLY_DIMMER_RST_INV)) {
- TasmotaGlobal.devices_present++;
+ UpdateDevicesPresent(1);
TasmotaGlobal.light_type = LT_SERIAL1;
Shd.present = true;
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_53_projector_ctrl.ino b/tasmota/tasmota_xdrv_driver/xdrv_53_projector_ctrl.ino
index dc31523df..999f6a738 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_53_projector_ctrl.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_53_projector_ctrl.ino
@@ -123,7 +123,8 @@ projector_ctrl_pre_init(void)
SetSerial(baudrate, TS_SERIAL_8N1);
}
- sc->sc_device = ++(TasmotaGlobal.devices_present); /* claim a POWER device slot */
+ UpdateDevicesPresent(1); /* claim a POWER device slot */
+ sc->sc_device = TasmotaGlobal.devices_present;
AddLog(LOG_LEVEL_INFO, PSTR(PROJECTOR_CTRL_LOGNAME ": new RELAY%d, polling serial for Projector status"), sc->sc_device);
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_60_shift595.ino b/tasmota/tasmota_xdrv_driver/xdrv_60_shift595.ino
index d18410afb..f477fc8ff 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_60_shift595.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_60_shift595.ino
@@ -58,7 +58,8 @@ void Shift595Init(void) {
Shift595->first = TasmotaGlobal.devices_present;
Shift595->outputs = Settings->shift595_device_count * 8;
- TasmotaGlobal.devices_present += Shift595->outputs;
+ UpdateDevicesPresent(Shift595->outputs);
+
Shift595->connected = true;
AddLog(LOG_LEVEL_DEBUG, PSTR("595: Controlling relays POWER%d to POWER%d"), Shift595->first + 1, Shift595->first + Shift595->outputs);
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_66_tm1638.ino b/tasmota/tasmota_xdrv_driver/xdrv_66_tm1638.ino
index f693de10e..4065b212c 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_66_tm1638.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_66_tm1638.ino
@@ -164,7 +164,7 @@ void TmInit(void) {
digitalWrite(Tm1638.strobe_pin, HIGH);
Tm1638.led_offset = TasmotaGlobal.devices_present;
- TasmotaGlobal.devices_present += TM1638_MAX_LEDS;
+ UpdateDevicesPresent(TM1638_MAX_LEDS);
Tm1638.key_offset = -1;
Tm1638.detected = true;
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_86_esp32_sonoff_spm.ino b/tasmota/tasmota_xdrv_driver/xdrv_86_esp32_sonoff_spm.ino
index 058f83813..3a222f91f 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_86_esp32_sonoff_spm.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_86_esp32_sonoff_spm.ino
@@ -1195,7 +1195,7 @@ void SSPMHandleReceivedData(void) {
TasmotaGlobal.power |= current_state;
Sspm->old_power = TasmotaGlobal.power;
- TasmotaGlobal.devices_present += 4;
+ UpdateDevicesPresent(4);
}
SSPMSendGetOps(Sspm->module_selected -1);
break;
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
index 16dd8db3e..05ca7aa3f 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
@@ -372,7 +372,7 @@ void ShellyProPreInit(void) {
}
if (SPro.detected) {
- TasmotaGlobal.devices_present += SPro.detected;
+ UpdateDevicesPresent(SPro.detected); // Shelly Pro 1
SPro.pin_register_cs = Pin(GPIO_SPI_CS);
digitalWrite(SPro.pin_register_cs, (4 == SPro.detected) ? 1 : 0); // Prep 74HC595 rclk
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro_v1.ino b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro_v1.ino
new file mode 100644
index 000000000..6af3d65b7
--- /dev/null
+++ b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro_v1.ino
@@ -0,0 +1,177 @@
+/*
+ xdrv_88_shelly_pro.ino - Shelly pro family support for Tasmota
+
+ Copyright (C) 2022 Theo Arends
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifdef ESP32
+#ifdef USE_SPI
+#ifdef USE_SHELLY_PRO_V1
+/*********************************************************************************************\
+ * Shelly Pro support
+ *
+ * {"NAME":"Shelly Pro 1","GPIO":[0,1,0,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,4736,0,160,0],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,10000,10000,3350"}
+ * {"NAME":"Shelly Pro 1PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3459,0,0,32,4736,0,160,0],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,10000,10000,3350"}
+ * {"NAME":"Shelly Pro 2","GPIO":[0,1,0,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,10000,10000,3350;AdcParam2 2,10000,10000,3350"}
+ * {"NAME":"Shelly Pro 2PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,9569,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3460,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,10000,10000,3350;AdcParam2 2,10000,10000,3350"}
+ *
+ * Shelly Pro uses SPI to control one 74HC595 for relays/leds and one ADE7953 (1PM) or two ADE7953 (2PM) for energy monitoring
+\*********************************************************************************************/
+
+#define XDRV_88 88
+
+struct SPro {
+ uint32_t last_update;
+ uint8_t pin_shift595_rclk;
+ uint8_t ledlink;
+ uint8_t power;
+ bool detected;
+} SPro;
+
+void ShellyProUpdate(void) {
+ // Shelly Pro 595 register
+ // bit 0 = relay/led 1
+ // bit 1 = relay/led 2
+ // bit 2 = wifi led blue
+ // bit 3 = wifi led green
+ // bit 4 = wifi led red
+ // bit 5 - 7 = nc
+ // OE is connected to Gnd with 470 ohm resistor R62 AND a capacitor C81 to 3V3
+ // - this inhibits output of signals (also relay state) during power on for a few seconds
+ uint8_t val = SPro.power | SPro.ledlink;
+ SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
+ SPI.transfer(val); // Write 74HC595 shift register
+ SPI.endTransaction();
+// delayMicroseconds(2); // Wait for SPI clock to stop
+ digitalWrite(SPro.pin_shift595_rclk, 1); // Latch data
+ delayMicroseconds(1); // Shelly 10mS
+ digitalWrite(SPro.pin_shift595_rclk, 0);
+}
+
+void ShellyProPreInit(void) {
+ if ((SPI_MOSI_MISO == TasmotaGlobal.spi_enabled) &&
+ PinUsed(GPIO_SPI_CS) &&
+ TasmotaGlobal.gpio_optiona.shelly_pro) { // Option_A7
+
+ if (PinUsed(GPIO_SWT1) || PinUsed(GPIO_KEY1)) {
+ UpdateDevicesPresent(1); // Shelly Pro 1
+
+ if (PinUsed(GPIO_SWT1, 1) || PinUsed(GPIO_KEY1, 1)) {
+ UpdateDevicesPresent(1); // Shelly Pro 2
+ }
+
+ SPro.pin_shift595_rclk = Pin(GPIO_SPI_CS);
+ digitalWrite(SPro.pin_shift595_rclk, 0);
+ pinMode(SPro.pin_shift595_rclk, OUTPUT);
+ // Does nothing if SPI is already initiated (by ADE7953) so no harm done
+ SPI.begin(Pin(GPIO_SPI_CLK), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_MOSI), -1);
+
+ SPro.ledlink = 0x18; // Blue led on - set by first call ShellyProPower()
+ SPro.detected = true;
+ }
+ }
+}
+
+void ShellyProInit(void) {
+ int pin_lan_reset = 5; // GPIO5 = LAN8720 nRST
+// delay(30); // (t-purstd) This pin must be brought low for a minimum of 25 mS after power on
+ digitalWrite(pin_lan_reset, 0);
+ pinMode(pin_lan_reset, OUTPUT);
+ delay(1); // (t-rstia) This pin must be brought low for a minimum of 100 uS
+ digitalWrite(pin_lan_reset, 1);
+
+ AddLog(LOG_LEVEL_INFO, PSTR("HDW: Shelly Pro %d%s initialized"),
+ TasmotaGlobal.devices_present, (PinUsed(GPIO_ADE7953_CS))?"PM":"");
+}
+
+void ShellyProPower(void) {
+ SPro.power = XdrvMailbox.index &3;
+ ShellyProUpdate();
+}
+
+void ShellyProUpdateLedLink(uint32_t ledlink) {
+ if (ledlink != SPro.ledlink) {
+ SPro.ledlink = ledlink;
+ ShellyProUpdate();
+ }
+}
+
+void ShellyProLedLink(void) {
+ /*
+ bit 2 = blue, 3 = green, 4 = red
+ Shelly Pro documentation
+ - Blue light indicator will be on if in AP mode.
+ - Red light indicator will be on if in STA mode and not connected to a Wi-Fi network.
+ - Yellow light indicator will be on if in STA mode and connected to a Wi-Fi network.
+ - Green light indicator will be on if in STA mode and connected to a Wi-Fi network and to the Shelly Cloud.
+ - The light indicator will be flashing Red/Blue if OTA update is in progress.
+ Tasmota behaviour
+ - Blue light indicator will blink if no wifi or mqtt.
+ - Green light indicator will be on if in STA mode and connected to a Wi-Fi network.
+ */
+ SPro.last_update = TasmotaGlobal.uptime;
+ uint32_t ledlink = 0x1C; // All leds off
+ if (XdrvMailbox.index) {
+ ledlink &= 0xFB; // Blue blinks if wifi/mqtt lost
+ }
+ else if (!TasmotaGlobal.global_state.wifi_down) {
+ ledlink &= 0xF7; // Green On
+ }
+
+ ShellyProUpdateLedLink(ledlink);
+}
+
+void ShellyProLedLinkWifiOff(void) {
+ /*
+ bit 2 = blue, 3 = green, 4 = red
+ - Green light indicator will be on if in STA mode and connected to a Wi-Fi network.
+ */
+ if (SPro.last_update +1 < TasmotaGlobal.uptime) {
+ ShellyProUpdateLedLink((TasmotaGlobal.global_state.wifi_down) ? 0x1C : 0x14); // Green off if wifi OFF
+ }
+}
+
+/*********************************************************************************************\
+ * Interface
+\*********************************************************************************************/
+
+bool Xdrv88(uint32_t function) {
+ bool result = false;
+
+ if (FUNC_PRE_INIT == function) {
+ ShellyProPreInit();
+ } else if (SPro.detected) {
+ switch (function) {
+ case FUNC_EVERY_SECOND:
+ ShellyProLedLinkWifiOff();
+ break;
+ case FUNC_SET_POWER:
+ ShellyProPower();
+ break;
+ case FUNC_LED_LINK:
+ ShellyProLedLink();
+ break;
+ case FUNC_INIT:
+ ShellyProInit();
+ break;
+ }
+ }
+ return result;
+}
+
+#endif // USE_SHELLY_PRO
+#endif // USE_SPI
+#endif // ESP32
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_90_esp32_dingtian_relay.ino b/tasmota/tasmota_xdrv_driver/xdrv_90_esp32_dingtian_relay.ino
index 459775dba..6e4e9005f 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_90_esp32_dingtian_relay.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_90_esp32_dingtian_relay.ino
@@ -98,10 +98,7 @@ void DingtianInit(void) {
DINGTIAN_SET_OUTPUT(Dingtian->pin_rck, 0);
Dingtian->first = TasmotaGlobal.devices_present;
- TasmotaGlobal.devices_present += Dingtian->count;
- if (TasmotaGlobal.devices_present > POWER_SIZE) {
- TasmotaGlobal.devices_present = POWER_SIZE;
- }
+ UpdateDevicesPresent(Dingtian->count);
AddLog(LOG_LEVEL_DEBUG, PSTR("DNGT: Dingtian relays: POWER%d to POWER%d"), Dingtian->first + 1, TasmotaGlobal.devices_present);
}
}
From 27de8b5c3eec544277c0d766d618563df7578fa9 Mon Sep 17 00:00:00 2001
From: Charles
Date: Sat, 25 Feb 2023 17:27:10 +0100
Subject: [PATCH 040/227] added teleinfo config show_stats parameter (#18051)
---
tasmota/include/tasmota_types.h | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/tasmota/include/tasmota_types.h b/tasmota/include/tasmota_types.h
index 757a9f2bd..edf1e7166 100644
--- a/tasmota/include/tasmota_types.h
+++ b/tasmota/include/tasmota_types.h
@@ -453,7 +453,10 @@ typedef union {
uint32_t raw_send : 1; // Enable sending also real time raw data over MQTT
uint32_t raw_limit : 1; // Limit raw data to minimal relevant fields (the ones moving quickly)
uint32_t mode_standard : 1; // Set Linky Standard Mode (9600 bps stream) else legacy (1200 bps)
- uint32_t spare4_1 : 4; // Keep some spares for future uses
+ uint32_t show_stats : 1; // Display frames stats informations on WEB interface
+ uint32_t spare1_1 : 1; // Keep some spares for future uses
+ uint32_t spare1_2 : 1; // Keep some spares for future uses
+ uint32_t spare1_3 : 1; // Keep some spares for future uses
uint32_t spare8_1 : 8; // Keep some spares for future uses
uint32_t spare8_2 : 8; // Keep some spares for future uses
};
From 1545f02fb30c3bfbbead20fee28525a48babd41e Mon Sep 17 00:00:00 2001
From: Charles
Date: Sat, 25 Feb 2023 17:39:33 +0100
Subject: [PATCH 041/227] Teleinfo, add stats and more checksum controls
(#18052)
* added teleinfo config show_stats parameter
* Added new command and more checksum test
---
.../tasmota_xnrg_energy/xnrg_15_teleinfo.ino | 117 ++++++++++++------
1 file changed, 77 insertions(+), 40 deletions(-)
diff --git a/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino b/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino
index c25025197..fb2502ebc 100644
--- a/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino
+++ b/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino
@@ -48,7 +48,7 @@
const char TELEINFO_COMMAND_SETTINGS[] PROGMEM = "TIC: Settings Mode:%s, RX:%s, EN:%s, Raw:%s, Skip:%d, Limit:%d";
#define MAX_TINFO_COMMAND_NAME 16+1 // Change this if one of the following kTInfo_Commands is higher then 16 char
-const char kTInfo_Commands[] PROGMEM = "historique|standard|noraw|full|changed|skip|limit";
+const char kTInfo_Commands[] PROGMEM = "historique|standard|noraw|full|changed|skip|limit|stats";
enum TInfoCommands { // commands for Console
CMND_TELEINFO_HISTORIQUE=0, // Set Legacy mode
@@ -57,7 +57,8 @@ enum TInfoCommands { // commands for Console
CMND_TELEINFO_RAW_FULL, // Enable all RAW frame send
CMND_TELEINFO_RAW_CHANGE, // Enable only changed values RAW frame send
CMND_TELEINFO_SKIP, // Set number of frame to skip when raw mode is enabled
- CMND_TELEINFO_LIMIT // Limit RAW frame to values subject to fast change (Power, Current, ...), TBD
+ CMND_TELEINFO_LIMIT, // Limit RAW frame to values subject to fast change (Power, Current, ...), TBD
+ CMND_TELEINFO_STATS // Show / clear / Enable TIC reception errors stats
};
@@ -155,6 +156,7 @@ PROGMEM
=
"|PJOURF+1"
"|MSG1"
+ "|PPOINTE"
"|"
;
@@ -527,53 +529,60 @@ bool ResponseAppendTInfo(char sep, bool all)
if (me->name && me->value && *me->name && *me->value) {
- // Does this label blacklisted ?
- if (!isBlacklistedLabel(me->name)) {
+ // Check back checksum in case of any memory corruption
+ if (me->checksum==tinfo.calcChecksum(me->name, me->value))) {
- // Add values only if we want all data or if data has changed
- if (all || ( Settings->teleinfo.raw_report_changed && (me->flags & (TINFO_FLAGS_UPDATED | TINFO_FLAGS_ADDED | TINFO_FLAGS_ALERT) ) ) ) {
+ // Does this label blacklisted ?
+ if (!isBlacklistedLabel(me->name)) {
- isNumber = true;
- hasValue = true;
- p = me->value;
+ // Add values only if we want all data or if data has changed
+ if (all || ( Settings->teleinfo.raw_report_changed && (me->flags & (TINFO_FLAGS_UPDATED | TINFO_FLAGS_ADDED | TINFO_FLAGS_ALERT) ) ) ) {
- // Specific treatment serial number don't convert to number later
- if (strcmp(me->name, "ADCO")==0 || strcmp(me->name, "ADSC")==0) {
- isNumber = false;
- } else {
- // check if value is number
- while (*p && isNumber) {
- if ( *p < '0' || *p > '9' ) {
- isNumber = false;
- }
- p++;
- }
- }
+ isNumber = true;
+ hasValue = true;
+ p = me->value;
- // Avoid unneeded space
- if (sep == ' ') {
- ResponseAppend_P( PSTR("\"%s\":"), me->name );
- } else {
- ResponseAppend_P( PSTR("%c\"%s\":"), sep, me->name );
- }
-
- if (!isNumber) {
- // Some values contains space
- if (strcmp(me->name, "NGTF")==0 || strcmp(me->name, "LTARF")==0 || strcmp(me->name, "MSG1")==0) {
- char trimmed_value[strlen(me->value)+1];
- strcpy(trimmed_value, me->value);
- ResponseAppend_P( PSTR("\"%s\""), Trim(trimmed_value) );
+ // Specific treatment serial number don't convert to number later
+ if (strcmp(me->name, "ADCO")==0 || strcmp(me->name, "ADSC")==0) {
+ isNumber = false;
} else {
- ResponseAppend_P( PSTR("\"%s\""), me->value );
+ // check if value is number
+ while (*p && isNumber) {
+ if ( *p < '0' || *p > '9' ) {
+ isNumber = false;
+ }
+ p++;
+ }
}
- } else {
- ResponseAppend_P( PSTR("%ld"), atol(me->value));
- }
+ // Avoid unneeded space
+ if (sep == ' ') {
+ ResponseAppend_P( PSTR("\"%s\":"), me->name );
+ } else {
+ ResponseAppend_P( PSTR("%c\"%s\":"), sep, me->name );
+ }
- // Now JSON separator is needed
- sep =',';
+ if (!isNumber) {
+ // Some values contains space
+ if (strcmp(me->name, "NGTF")==0 || strcmp(me->name, "LTARF")==0 || strcmp(me->name, "MSG1")==0) {
+ char trimmed_value[strlen(me->value)+1];
+ strcpy(trimmed_value, me->value);
+ ResponseAppend_P( PSTR("\"%s\""), Trim(trimmed_value) );
+ } else {
+ ResponseAppend_P( PSTR("\"%s\""), me->value );
+ }
+
+ } else {
+ ResponseAppend_P( PSTR("%ld"), atol(me->value));
+ }
+
+ // Now JSON separator is needed
+ sep =',';
+ }
}
+
+ } else {
+ AddLog(LOG_LEVEL_WARNING, PSTR("TIC: bad checksum for %s"), me->name);
}
}
}
@@ -897,6 +906,34 @@ bool TInfoCmd(void) {
}
break;
+ case CMND_TELEINFO_STATS: {
+ char stats_name[MAX_TINFO_COMMAND_NAME];
+ // Get the raw name
+ GetTextIndexed(statsname, MAX_TINFO_COMMAND_NAME, command_code, kTInfo_Commands);
+ int l = strlen(stats_name);
+ // At least "EnergyConfig Stats" plus one space and one (or more) digit
+ // so "EnergyConfig Stats" or "EnergyConfig Stats 0"
+ if ( pValue ) {
+ int value = atoi(pValue);
+ if (value==0 || value==1) {
+ Settings->teleinfo.show_stats = value ;
+ AddLog(LOG_LEVEL_INFO, PSTR("TIC: Show stats=%d"), value);
+ } else if (value == 2) {
+ tinfo.clearstats();
+ AddLog(LOG_LEVEL_INFO, PSTR("TIC: Stats cleared"));
+ } else {
+ AddLog(LOG_LEVEL_INFO, PSTR("TIC: bad Stats param '%d'"), value);
+ }
+ }
+ // Show stats
+ AddLog(LOG_LEVEL_INFO, PSTR("TIC: Frame error CheckSum:%d Size:%d Format:%d Interrupt:%d"),
+ tinfo.getChecksumErrorCount(),
+ tinfo.getFrameSizeErrorCount(),
+ tinfo.getFrameFormatErrorCount(),
+ tinfo.getFrameInterruptedCount() );
+ }
+ break;
+
default:
AddLog(LOG_LEVEL_INFO, PSTR("TIC: bad cmd param '%s'"), pParam);
break;
From 30504f090c4746130859193c219ff458f7e9d048 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Sat, 25 Feb 2023 17:55:07 +0100
Subject: [PATCH 042/227] update changelogs
---
CHANGELOG.md | 2 ++
RELEASENOTES.md | 2 ++
2 files changed, 4 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 86c2b5e93..a30fe8116 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,8 @@ All notable changes to this project will be documented in this file.
- ADC Range oversample from 2 to 32 (#17975)
- ESP32 Framework (Core) from v2.0.6 to v2.0.7
- Move #define OTA_URL from user_config.h to board files for better inital support (#18008)
+- Increase number of (virtual)relays and (virtual)buttons to 32
+- LibTeleinfo from v1.1.3 to v1.1.5 (#18050)
### Fixed
- SEN5X floats and units (#17961)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 399d5a158..7313af172 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -117,6 +117,8 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
### Changed
- ESP32 Framework (Core) from v2.0.6 to v2.0.7
+- LibTeleinfo from v1.1.3 to v1.1.5 [#18050](https://github.com/arendst/Tasmota/issues/18050)
+- Increase number of (virtual)relays and (virtual)buttons to 32
- ADC Range oversample from 2 to 32 [#17975](https://github.com/arendst/Tasmota/issues/17975)
- Move #define OTA_URL from user_config.h to board files for better inital support [#18008](https://github.com/arendst/Tasmota/issues/18008)
From 66271ca0dd5a93e713cc62492f8fa1da41d6ee20 Mon Sep 17 00:00:00 2001
From: Xavier MULLER <33861984+localhost61@users.noreply.github.com>
Date: Sun, 26 Feb 2023 08:47:31 +0100
Subject: [PATCH 043/227] Update French localization (#18053)
---
tasmota/language/fr_FR.h | 465 ++++++++++++++++++++-------------------
1 file changed, 233 insertions(+), 232 deletions(-)
diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h
index 28b32668e..852da5b38 100644
--- a/tasmota/language/fr_FR.h
+++ b/tasmota/language/fr_FR.h
@@ -25,10 +25,10 @@
* Due to memory constraints only UTF-8 is supported.
* To save code space keep text as short as possible.
* Time and Date provided by SDK can not be localized (yet).
- * Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
+ * Use online command StateText to translate OFF, ON, TOGGLE and HOLD.
* Use online command Prefix to translate cmnd, stat and tele.
*
- * Updated until v9.5.0.9
+ * Updated until v12.4.0
\*********************************************************************/
#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@@ -57,9 +57,9 @@
#define D_AS "comme"
#define D_AUTO "AUTO"
#define D_BATT "Batt" // Short for Battery
-#define D_BLINK "Blink"
+#define D_BLINK "Blink" // Not better in french
#define D_BLINKOFF "BlinkOff"
-#define D_BOOT_COUNT "Nombre de boot"
+#define D_BOOT_COUNT "Nb. de boot"
#define D_BRIGHTLIGHT "Luminosité"
#define D_BSSID "BSSId"
#define D_BUTTON "Bouton"
@@ -75,22 +75,22 @@
#define D_CORS_DOMAIN "Domaine CORS"
#define D_COUNT "Compte"
#define D_COUNTER "Compteur"
-#define D_CT_POWER "CT Power"
+#define D_CT_POWER "Puissance CT"
#define D_CURRENT "Courant" // As in Voltage and Current
-#define D_CURRENT_NEUTRAL "Current Neutral"
+#define D_CURRENT_NEUTRAL "Courant neutre"
#define D_DATA "Donnée"
#define D_DARKLIGHT "Sombre"
#define D_DEBUG "Debug"
#define D_DEWPOINT "Point de rosée"
#define D_DISABLED "Désactivé"
-#define D_MOVING_DISTANCE "Moving Distance"
-#define D_STATIC_DISTANCE "Static Distance"
-#define D_DETECT_DISTANCE "Detect Distance"
+#define D_MOVING_DISTANCE "Distance mobile"
+#define D_STATIC_DISTANCE "Distance fixe"
+#define D_DETECT_DISTANCE "Distance détectée"
#define D_DISTANCE "Distance"
#define D_DNS_SERVER "Serveur DNS"
#define D_DO "Oxygène dissout"
#define D_DONE "Terminé"
-#define D_DST_TIME "DST"
+#define D_DST_TIME "DST" // Daylight Saving Time
#define D_EC "EC"
#define D_ECO2 "eCO₂"
#define D_EMULATION "Émulation"
@@ -105,7 +105,7 @@
#define D_FILE "Fichier"
#define D_FLOW_RATE "Débit"
#define D_FRAGMENTATION "frag." // Lower case abbreviated version of fragmentation used in "memory fragmentation"
-#define D_FRAME_RATE "Frame rate"
+#define D_FRAME_RATE "Fréq. image"
#define D_FREE_MEMORY "Mémoire libre"
#define D_PSR_MAX_MEMORY "Mémoire PS-RAM"
#define D_PSR_FREE_MEMORY "Mémoire PS-RAM libre"
@@ -114,18 +114,18 @@
#define D_GATEWAY "Passerelle"
#define D_GROUP "Groupe"
#define D_HOST "Hôte"
-#define D_HALL_EFFECT "Hall Effect"
+#define D_HALL_EFFECT "Effet Hall"
#define D_HOSTNAME "Nom d'Hôte"
#define D_HUMIDITY "Humidité"
#define D_ILLUMINANCE "Éclairement"
-#define D_IMMEDIATE "immédiat" // Button immediate
+#define D_IMMEDIATE "immédiat" // Button immediate
#define D_INDEX "Index"
#define D_INFO "Info"
#define D_INFRARED "Infra-rouge"
#define D_INITIALIZED "Initialisé"
#define D_IP_ADDRESS "Adresse IP"
#define D_LIGHT "Lumière"
-#define D_LWT "LWT"
+#define D_LWT "LWT" // MQTT Last Will and Testament
#define D_LQI "LQI" // ZigBee Link Quality Index
#define D_MODULE "Module"
#define D_MOISTURE "Humidité"
@@ -139,10 +139,10 @@
#define D_OK "Ok"
#define D_ON "Marche"
#define D_ONLINE "Connecté"
-#define D_ORP "ORP"
+#define D_ORP "Redox" // Oxidation Reduction Potential
#define D_PASSWORD "Mot de passe"
#define D_PH "pH"
-#define D_MQ "MQ"
+#define D_MQ "MQ" // MQ series Gas sensor
#define D_PARTITION "Partition" // As in flash and firmware partition
#define D_PORT "Port"
#define D_POWER_FACTOR "Fact de puiss"
@@ -162,12 +162,12 @@
#define D_RESTARTING "Redémarre"
#define D_RESTART_REASON "Raison du redémarrage"
#define D_RESTORE "restaurer"
-#define D_RETAINED "persistant" // MQTT
+#define D_RETAINED "persistant" // MQTT
#define D_RULE "Règle"
#define D_SAVE "Enregistrer"
#define D_SENSOR "Capteur"
#define D_SSID "SSID"
-#define D_START "Lancer" // "Lancer la mise à jour"
+#define D_START "Lancer" // "Lancer la mise à jour"
#define D_STD_TIME "STD"
#define D_STOP "Stop"
#define D_SUBNET_MASK "Masque sous-réseau"
@@ -179,17 +179,17 @@
#define D_TEMPERATURE "Température"
#define D_TO "à"
#define D_TOGGLE "Inverser"
-#define D_TOPIC "Topic" // Keep MQTT keyword
+#define D_TOPIC "Topic" // Keep MQTT keyword
#define D_TOTAL_USAGE "Eau totale"
#define D_TRANSMIT "Transmettre"
#define D_TRUE "Vrai"
-#define D_TVOC "TVOC"
+#define D_TVOC "TVOC" // not used ???
#define D_UPGRADE "la mise à jour" // "Lancer la mise à jour"
-#define D_UPLOAD "Upload" // Not better in french
+#define D_UPLOAD "Upload" // Not better in french
#define D_UPTIME "Durée d'activité"
-#define D_USED "used"
+#define D_USED "utilisé"
#define D_USER "Utilisateur"
-#define D_UTC_TIME "UTC"
+#define D_UTC_TIME "UTC" // Coordinated Universal Time
#define D_UV_INDEX "Indice UV"
#define D_UV_INDEX_1 "Faible"
#define D_UV_INDEX_2 "Modéré"
@@ -206,27 +206,27 @@
#define D_WEIGHT "Poids"
#define D_WARMLIGHT "Chaud"
#define D_WEB_SERVER "Serveur web"
-#define D_SOC "State of Charge"
-#define D_SOH "State of Health"
+#define D_SOC "État de la Charge"
+#define D_SOH "État de Santé"
// tasmota.ino
-#define D_WARNING_MINIMAL_VERSION "ATTENTION Cette version ne supporte pas les réglages persistants"
+#define D_WARNING_MINIMAL_VERSION "ATTENTION Cette version ne gère pas les réglages persistants"
#define D_LEVEL_10 "niveau 1-0"
#define D_LEVEL_01 "niveau 0-1"
#define D_SERIAL_LOGGING_DISABLED "Journalisation série désactivée"
#define D_SYSLOG_LOGGING_REENABLED "Jounalisation SysLog réactivée"
#define D_SET_BAUDRATE_TO "Définir le débit à"
-#define D_RECEIVED_TOPIC "Topic reçu" // Terme MQTT
+#define D_RECEIVED_TOPIC "Topic reçu" // Terme MQTT
#define D_DATA_SIZE "Taille données"
#define D_ANALOG_INPUT "Analogique"
// support.ino
-#define D_OSWATCH "osWatch"
+#define D_OSWATCH "osWatch" // Indicateurs
#define D_BLOCKED_LOOP "Boucle bloquée"
#define D_WPS_FAILED_WITH_STATUS "WPSconfig ÉCHOUÉ avec status"
#define D_ACTIVE_FOR_3_MINUTES "actif pour 3 minutes"
-#define D_FAILED_TO_START "Échec de démarrage"
+#define D_FAILED_TO_START "Échec du démarrage"
#define D_PATCH_ISSUE_2186 "Correctif 2186"
#define D_CONNECTING_TO_AP "Connexion à l'AP"
#define D_IN_MODE "en mode"
@@ -263,13 +263,13 @@
#define D_RESTART_IN "Redémarrage dans"
#define D_SECONDS "secondes"
#define D_DEVICE_WILL_RESTART "Le module va redémarrer dans quelques secondes"
-#define D_BUTTON_TOGGLE "on/off"
+#define D_BUTTON_TOGGLE "on/off" // Not better in french
#define D_CONFIGURATION "Configuration"
#define D_INFORMATION "Informations"
#define D_FIRMWARE_UPGRADE "Mise à jour du Firmware"
#define D_MANAGEMENT "Consoles"
#define D_CONSOLE "Console"
-#define D_CONFIRM_RESTART "Confirmer redémarrage"
+#define D_CONFIRM_RESTART "Confirmer le redémarrage"
#define D_CONFIGURE_MODULE "Configuration du Module"
#define D_CONFIGURE_WIFI "Configuration WiFi"
@@ -285,8 +285,8 @@
#define D_MODULE_PARAMETERS "Paramètres module"
#define D_MODULE_TYPE "Type de module"
-#define D_PULLUP_ENABLE "Inter. sans pull-up"
-#define D_ADC "ADC"
+#define D_PULLUP_ENABLE "Bouton/Inter. sans pull-up"
+#define D_ADC "ADC" // Analog Input pin
#define D_GPIO "GPIO"
#define D_SERIAL_IN "Entrée série"
#define D_SERIAL_OUT "Sortie série"
@@ -302,19 +302,19 @@
#define D_WEP "WEP"
#define D_WPA_PSK "WPA PSK"
#define D_WPA2_PSK "WPA2 PSK"
-#define D_AP1_SSID "WiFi Network"
-#define D_AP1_SSID_HELP "Type or Select your WiFi Network"
-#define D_AP2_SSID "WiFi Network 2"
-#define D_AP2_SSID_HELP "Type your Alternative WiFi Network"
+#define D_AP1_SSID "Réseau WiFi"
+#define D_AP1_SSID_HELP "Saisissez ou Choisissez votre réseau WiFi"
+#define D_AP2_SSID "Réseau WiFi 2"
+#define D_AP2_SSID_HELP "Entrez un réseau WiFi de secours"
#define D_AP_PASSWORD "Mot de passe"
-#define D_AP_PASSWORD_HELP "Enter your WiFi Password"
-#define D_SELECT_YOUR_WIFI_NETWORK "Select your WiFi Network"
-#define D_SHOW_MORE_WIFI_NETWORKS "Scan for all WiFi Networks"
-#define D_SHOW_MORE_OPTIONS "More Options"
-#define D_CHECK_CREDENTIALS "Please, check your credentials"
-#define D_SUCCESSFUL_WIFI_CONNECTION "Successful WiFi Connection"
-#define D_NOW_YOU_CAN_CLOSE_THIS_WINDOW "Now you can close this window"
-#define D_REDIRECTING_TO_NEW_IP "Redirecting to new device's IP address"
+#define D_AP_PASSWORD_HELP "Entrez votre mot de passe WiFi"
+#define D_SELECT_YOUR_WIFI_NETWORK "Choisissez votre réseau WiFi"
+#define D_SHOW_MORE_WIFI_NETWORKS "Scanner les réseaux WiFi"
+#define D_SHOW_MORE_OPTIONS "Plus d'Options"
+#define D_CHECK_CREDENTIALS "Veuillez vérifier vos identifiants"
+#define D_SUCCESSFUL_WIFI_CONNECTION "Connexion WiFi réussie"
+#define D_NOW_YOU_CAN_CLOSE_THIS_WINDOW "Vous pouvez fermer cette fenêtre"
+#define D_REDIRECTING_TO_NEW_IP "Redirection vers l'adresse IP d'un autre appareil"
#define D_MQTT_PARAMETERS "Paramètres MQTT"
#define D_CLIENT "Client"
@@ -367,10 +367,10 @@
#define D_MQTT_TOPIC "Topic MQTT"
#define D_MQTT_GROUP_TOPIC "Groupe topic MQTT"
#define D_MQTT_FULL_TOPIC "Topic complet MQTT"
-#define D_MQTT_NO_RETAIN "MQTT No Retain"
+#define D_MQTT_NO_RETAIN "MQTT No Retain" // Keep MQTT keyword
#define D_MDNS_DISCOVERY "Découverte mDNS"
#define D_MDNS_ADVERTISE "Annonce mDNS"
-#define D_ESP_CHIP_ID "ESP Chip Id"
+#define D_ESP_CHIP_ID "ESP Chip Id" // Not better in french
#define D_FLASH_CHIP_ID "Flash Chip Id"
#define D_FLASH_CHIP_SIZE "Taille flash"
#define D_FREE_PROGRAM_SPACE "Espace programme libre"
@@ -379,7 +379,7 @@
#define D_OTA_URL "URL OTA"
#define D_START_UPGRADE "Lancer la mise à jour"
#define D_UPGRADE_BY_FILE_UPLOAD "Mise à jour par téléchargement fichier"
-#define D_UPLOAD_FACTORY "Switching to safeboot partition"
+#define D_UPLOAD_FACTORY "Lancement de la partition Safeboot"
#define D_UPLOAD_STARTED "Téléchargement lancé"
#define D_UPGRADE_STARTED "Mise à jour lancée"
#define D_UPLOAD_DONE "Téléchargement terminé"
@@ -498,12 +498,12 @@
#define D_ZIGBEE_GENERATE_KEY "création d'une clé réseau ZigBee aléatoire"
#define D_ZIGBEE_UNKNOWN_DEVICE "Module inconnu"
#define D_ZIGBEE_UNKNOWN_ATTRIBUTE "Attribut inconnu"
-#define D_ZIGBEE_UNKNOWN_ENDPOINT "Unknown endpoint"
+#define D_ZIGBEE_UNKNOWN_ENDPOINT "Endpoint inconnu"
#define D_ZIGBEE_INVALID_PARAM "Paramètre invalide"
#define D_ZIGBEE_MISSING_PARAM "Paramètres manquants"
#define D_ZIGBEE_UNKNWON_ATTRIBUTE "Nom d'attribut inconnu (ignoré): %s"
#define D_ZIGBEE_TOO_MANY_CLUSTERS "Pas plus d'un Id de Cluster par commande"
-#define D_ZIGBEE_CONFLICTING_ENDPOINTS "Conflicting destination endpoints"
+#define D_ZIGBEE_CONFLICTING_ENDPOINTS "Conflit de Endpoint destinataires"
#define D_ZIGBEE_WRONG_DELIMITER "Mauvais délimiteur dans le contenu du message"
#define D_ZIGBEE_UNRECOGNIZED_COMMAND "Commande ZigBee inconnue: %s"
#define D_ZIGBEE_TOO_MANY_COMMANDS "Une seule commande autorisée (%d)"
@@ -638,20 +638,20 @@
#define D_SENSOR_SI7021 "SI7021"
#define D_SENSOR_MS01 "MS01"
#define D_SENSOR_DS18X20 "DS18x20"
-#define D_SENSOR_I2C_SCL "I2C SCL"
-#define D_SENSOR_I2C_SDA "I2C SDA"
-#define D_SENSOR_I2S_MCLK "I2S MCLK"
-#define D_SENSOR_I2S_BCLK "I2S BCLK"
-#define D_SENSOR_I2S_WS_IN "I2S BCLK IN"
+#define D_SENSOR_I2C_SCL "I2C SCl"
+#define D_SENSOR_I2C_SDA "I2C SDa"
+#define D_SENSOR_I2S_MCLK "I2S MClk"
+#define D_SENSOR_I2S_BCLK "I2S BClk"
+#define D_SENSOR_I2S_WS_IN "I2S BClk In"
#define D_SENSOR_I2S_WS "I2S WS"
-#define D_SENSOR_I2S_BCLK_IN "I2S WS IN"
-#define D_SENSOR_I2S_DIN "I2S DIN"
-#define D_SENSOR_I2S_DOUT "I2S DOUT"
+#define D_SENSOR_I2S_BCLK_IN "I2S WS In"
+#define D_SENSOR_I2S_DIN "I2S DIn"
+#define D_SENSOR_I2S_DOUT "I2S DOut"
#define D_SENSOR_WS2812 "WS2812"
#define D_SENSOR_DFR562 "MP3 Player"
#define D_SENSOR_DFR562_BUSY "MP3 Busy"
-#define D_SENSOR_IRSEND "IR TX"
-#define D_SENSOR_SWITCH "Inter" // Suffix "1"
+#define D_SENSOR_IRSEND "IR Tx"
+#define D_SENSOR_SWITCH "Inter" // Suffix "1"
#define D_SENSOR_BUTTON "Bouton" // Suffix "1"
#define D_SENSOR_RELAY "Relais" // Suffix "1i"
#define D_SENSOR_LED "LED" // Suffix "1i"
@@ -660,181 +660,181 @@
#define D_SENSOR_COUNTER "Compteur" // Suffix "1"
#define D_SENSOR_INTERRUPT "Interrupt"
#define D_SENSOR_INPUT "Input"
-#define D_SENSOR_IRRECV "IR RX"
-#define D_SENSOR_MHZ_RX "MHZ RX"
-#define D_SENSOR_MHZ_TX "MHZ TX"
-#define D_SENSOR_PZEM004_RX "PZEM004 RX"
-#define D_SENSOR_PZEM016_RX "PZEM016 RX"
-#define D_SENSOR_PZEM017_RX "PZEM017 RX"
-#define D_SENSOR_PZEM0XX_TX "PZEM0XX TX"
-#define D_SENSOR_SAIR_RX "SAir RX"
-#define D_SENSOR_SAIR_TX "SAir TX"
+#define D_SENSOR_IRRECV "IR Rx"
+#define D_SENSOR_MHZ_RX "MHZ Rx"
+#define D_SENSOR_MHZ_TX "MHZ Tx"
+#define D_SENSOR_PZEM004_RX "PZEM004 Rx"
+#define D_SENSOR_PZEM016_RX "PZEM016 Rx"
+#define D_SENSOR_PZEM017_RX "PZEM017 Rx"
+#define D_SENSOR_PZEM0XX_TX "PZEM0XX Tx"
+#define D_SENSOR_SAIR_RX "SAir Rx"
+#define D_SENSOR_SAIR_TX "SAir Tx"
#define D_SENSOR_SPI_CS "SPI CS"
#define D_SENSOR_SPI_DC "SPI DC"
#define D_SENSOR_SPI_MISO "SPI MISO"
#define D_SENSOR_SPI_MOSI "SPI MOSI"
-#define D_SENSOR_SPI_CLK "SPI CLK"
-#define D_SENSOR_SDIO_CMD "SDIO CMD"
-#define D_SENSOR_SDIO_CLK "SDIO CLK"
+#define D_SENSOR_SPI_CLK "SPI Clk"
+#define D_SENSOR_SDIO_CMD "SDIO Cmd"
+#define D_SENSOR_SDIO_CLK "SDIO Clk"
#define D_SENSOR_SDIO_D0 "SDIO D0"
#define D_SENSOR_SDIO_D1 "SDIO D1"
#define D_SENSOR_SDIO_D2 "SDIO D2"
#define D_SENSOR_SDIO_D3 "SDIO D3"
-#define D_SENSOR_BACKLIGHT "RétroÉcl"
-#define D_SENSOR_PMS5003_TX "PMS5003 TX"
-#define D_SENSOR_PMS5003_RX "PMS5003 RX"
-#define D_SENSOR_SDS0X1_RX "SDS0X1 RX"
-#define D_SENSOR_SDS0X1_TX "SDS0X1 TX"
-#define D_SENSOR_HPMA_RX "HPMA RX"
-#define D_SENSOR_HPMA_TX "HPMA TX"
-#define D_SENSOR_SBR_RX "SerBr RX"
-#define D_SENSOR_SBR_TX "SerBr TX"
+#define D_SENSOR_BACKLIGHT "RétroÉcl"
+#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
+#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
+#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
+#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
+#define D_SENSOR_HPMA_RX "HPMA Rx"
+#define D_SENSOR_HPMA_TX "HPMA Tx"
+#define D_SENSOR_SBR_RX "SerBr Rx"
+#define D_SENSOR_SBR_TX "SerBr Tx"
#define D_SENSOR_MBR_TX "ModBr Tx"
#define D_SENSOR_MBR_RX "ModBr Rx"
#define D_SENSOR_MBR_TX_ENA "ModBr Tx Ena"
-#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
-#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
-#define D_SENSOR_NRG_MBS_TX "NrgMbs Tx"
-#define D_SENSOR_NRG_MBS_RX "NrgMbs Rx"
-#define D_SENSOR_NRG_MBS_TX_ENA "NrgMbs Tx Ena"
-#define D_SENSOR_SDM72_TX "SDM72 TX"
-#define D_SENSOR_SDM72_RX "SDM72 RX"
-#define D_SENSOR_SDM120_TX "SDMx20 TX"
-#define D_SENSOR_SDM120_RX "SDMx20 RX"
-#define D_SENSOR_SDM230_TX "SDM230 TX"
-#define D_SENSOR_SDM230_RX "SDM230 RX"
-#define D_SENSOR_SDM630_TX "SDM630 TX"
-#define D_SENSOR_SDM630_RX "SDM630 RX"
-#define D_SENSOR_WE517_TX "WE517 TX"
-#define D_SENSOR_WE517_RX "WE517 RX"
+#define D_SENSOR_SR04_TRIG "SR04 Tri/Tx"
+#define D_SENSOR_SR04_ECHO "SR04 Ech/Rx"
+#define D_SENSOR_NRG_MBS_TX "NrgMbus Tx"
+#define D_SENSOR_NRG_MBS_RX "NrgMbus Rx"
+#define D_SENSOR_NRG_MBS_TX_ENA "NrgMbus Tx Ena"
+#define D_SENSOR_SDM72_TX "SDM72 Tx"
+#define D_SENSOR_SDM72_RX "SDM72 Rx"
+#define D_SENSOR_SDM120_TX "SDMx20 Tx"
+#define D_SENSOR_SDM120_RX "SDMx20 Rx"
+#define D_SENSOR_SDM230_TX "SDM230 Tx"
+#define D_SENSOR_SDM230_RX "SDM230 Rx"
+#define D_SENSOR_SDM630_TX "SDM630 Tx"
+#define D_SENSOR_SDM630_RX "SDM630 Rx"
+#define D_SENSOR_WE517_TX "WE517 Tx"
+#define D_SENSOR_WE517_RX "WE517 Rx"
#define D_SENSOR_LD2410_TX "LD2410 Tx"
#define D_SENSOR_LD2410_RX "LD2410 Rx"
#define D_GPIO_TM1621_CS "TM1621 CS"
-#define D_GPIO_TM1621_WR "TM1621 WR"
-#define D_GPIO_TM1621_RD "TM1621 RD"
-#define D_GPIO_TM1621_DAT "TM1621 DAT"
-#define D_SENSOR_TM1637_CLK "TM1637 CLK"
+#define D_GPIO_TM1621_WR "TM1621 Wr"
+#define D_GPIO_TM1621_RD "TM1621 Rd"
+#define D_GPIO_TM1621_DAT "TM1621 Dat"
+#define D_SENSOR_TM1637_CLK "TM1637 Clk"
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
-#define D_SENSOR_TM1638_CLK "TM1638 CLK"
+#define D_SENSOR_TM1638_CLK "TM1638 Clk"
#define D_SENSOR_TM1638_DIO "TM1638 DIO"
-#define D_SENSOR_TM1638_STB "TM1638 STB"
-#define D_SENSOR_MAX7219_DIN "MAX7219 DIN"
+#define D_SENSOR_TM1638_STB "TM1638 Stb"
+#define D_SENSOR_MAX7219_DIN "MAX7219 Din"
#define D_SENSOR_MAX7219_CS "MAX7219 CS"
-#define D_SENSOR_MAX7219_CLK "MAX7219 CLK"
-#define D_SENSOR_HX711_SCK "HX711 SCK"
-#define D_SENSOR_HX711_DAT "HX711 DAT"
+#define D_SENSOR_MAX7219_CLK "MAX7219 Clk"
+#define D_SENSOR_HX711_SCK "HX711 SCk"
+#define D_SENSOR_HX711_DAT "HX711 Dat"
#define D_SENSOR_FTC532 "FTC532"
-#define D_SENSOR_BS814_CLK "BS814 CLK"
-#define D_SENSOR_BS814_DAT "BS814 DAT"
+#define D_SENSOR_BS814_CLK "BS814 Clk"
+#define D_SENSOR_BS814_DAT "BS814 Dat"
#define D_SENSOR_TX2X_TX "TX2x"
-#define D_SENSOR_RFSEND "RF TX"
-#define D_SENSOR_RFRECV "RF RX"
-#define D_SENSOR_TUYA_TX "Tuya TX"
-#define D_SENSOR_TUYA_RX "Tuya RX"
-#define D_SENSOR_MGC3130_XFER "MGC3130 XFR"
-#define D_SENSOR_MGC3130_RESET "MGC3130 RST"
+#define D_SENSOR_RFSEND "RF Tx"
+#define D_SENSOR_RFRECV "RF Rx"
+#define D_SENSOR_TUYA_TX "Tuya Tx"
+#define D_SENSOR_TUYA_RX "Tuya Rx"
+#define D_SENSOR_MGC3130_XFER "MGC3130 Xfr"
+#define D_SENSOR_MGC3130_RESET "MGC3130 Rst"
#define D_SENSOR_SSPI_MISO "SSPI MISO"
#define D_SENSOR_SSPI_MOSI "SSPI MOSI"
-#define D_SENSOR_SSPI_SCLK "SSPI SCLK"
+#define D_SENSOR_SSPI_SCLK "SSPI SClk"
#define D_SENSOR_SSPI_CS "SSPI CS"
#define D_SENSOR_SSPI_DC "SSPI DC"
-#define D_SENSOR_RF_SENSOR "RF Sensor"
-#define D_SENSOR_AZ_RX "AZ RX"
-#define D_SENSOR_AZ_TX "AZ TX"
+#define D_SENSOR_RF_SENSOR "Capteur RF"
+#define D_SENSOR_AZ_RX "AZ Rx"
+#define D_SENSOR_AZ_TX "AZ Tx"
#define D_SENSOR_MAX31855_CS "MX31855 CS"
-#define D_SENSOR_MAX31855_CLK "MX31855 CLK"
+#define D_SENSOR_MAX31855_CLK "MX31855 Clk"
#define D_SENSOR_MAX31855_DO "MX31855 DO"
#define D_SENSOR_MAX31865_CS "MX31865 CS"
-#define D_SENSOR_NRG_SEL "HLWBL SEL" // Suffix "i"
+#define D_SENSOR_NRG_SEL "HLWBL Sel" // Suffix "i"
#define D_SENSOR_NRG_CF1 "HLWBL CF1"
#define D_SENSOR_HLW_CF "HLW8012 CF"
#define D_SENSOR_HJL_CF "BL0937 CF"
-#define D_SENSOR_MCP39F5_TX "MCP39F5 TX"
-#define D_SENSOR_MCP39F5_RX "MCP39F5 RX"
-#define D_SENSOR_MCP39F5_RST "MCP39F5 RST"
-#define D_SENSOR_CSE7761_TX "CSE7761 TX"
-#define D_SENSOR_CSE7761_RX "CSE7761 RX"
-#define D_SENSOR_CSE7766_TX "CSE7766 TX"
+#define D_SENSOR_MCP39F5_TX "MCP39F5 Tx"
+#define D_SENSOR_MCP39F5_RX "MCP39F5 Rx"
+#define D_SENSOR_MCP39F5_RST "MCP39F5 Rst"
+#define D_SENSOR_CSE7761_TX "CSE7761 Tx"
+#define D_SENSOR_CSE7761_RX "CSE7761 Rx"
+#define D_SENSOR_CSE7766_TX "CSE7766 Tx"
#define D_SENSOR_CSE7766_RX "CSE7766 Rx"
#define D_SENSOR_BL0939_RX "BL0939 Rx"
#define D_SENSOR_BL0942_RX "BL0942 Rx"
-#define D_SENSOR_HM330X_SET "HM330X SET"
-#define D_SENSOR_PN532_TX "PN532 TX"
-#define D_SENSOR_PN532_RX "PN532 RX"
-#define D_SENSOR_SM16716_CLK "SM16716 CLK"
-#define D_SENSOR_SM16716_DAT "SM16716 DAT"
-#define D_SENSOR_SM16716_POWER "SM16716 PWR"
-#define D_SENSOR_P9813_CLK "P9813 CLK"
-#define D_SENSOR_P9813_DAT "P9813 DAT"
+#define D_SENSOR_HM330X_SET "HM330X Set"
+#define D_SENSOR_PN532_TX "PN532 Tx"
+#define D_SENSOR_PN532_RX "PN532 Rx"
+#define D_SENSOR_SM16716_CLK "SM16716 Clk"
+#define D_SENSOR_SM16716_DAT "SM16716 Dat"
+#define D_SENSOR_SM16716_POWER "SM16716 Pwr"
+#define D_SENSOR_P9813_CLK "P9813 Clk"
+#define D_SENSOR_P9813_DAT "P9813 Dat"
#define D_SENSOR_MY92X1_DI "MY92x1 DI"
-#define D_SENSOR_MY92X1_DCKI "MY92x1 DCKI"
+#define D_SENSOR_MY92X1_DCKI "MY92x1 DCkI"
#define D_SENSOR_ARIRFRCV "ALux IrRcv"
#define D_SENSOR_ARIRFSEL "ALux IrSel"
-#define D_SENSOR_TXD "Série TX"
-#define D_SENSOR_RXD "Série RX"
+#define D_SENSOR_TXD "Série Tx"
+#define D_SENSOR_RXD "Série Rx"
#define D_SENSOR_ROTARY "Rotary" // Suffix "1A"
-#define D_SENSOR_HRE_CLOCK "HRE CLK"
-#define D_SENSOR_HRE_DATA "HRE DAT"
-#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ"
-#define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ"
-#define D_SENSOR_ADE7953_RST "ADE7953 RST"
+#define D_SENSOR_HRE_CLOCK "HRE Clk"
+#define D_SENSOR_HRE_DATA "HRE Dat"
+#define D_SENSOR_ADE7880_IRQ "ADE7880 IRq"
+#define D_SENSOR_ADE7953_IRQ "ADE7953 IRq"
+#define D_SENSOR_ADE7953_RST "ADE7953 Rst"
#define D_SENSOR_ADE7953_CS "ADE7953 CS"
#define D_SENSOR_BUZZER "Buzzer"
#define D_SENSOR_DISP_RESET "Display Rst"
-#define D_SENSOR_ZIGBEE_TXD "ZigBee TX"
-#define D_SENSOR_ZIGBEE_RXD "ZigBee RX"
-#define D_SENSOR_ZIGBEE_RST "ZigBee RST"
-#define D_SENSOR_SOLAXX1_TX "SolaxX1 TX"
-#define D_SENSOR_SOLAXX1_RX "SolaxX1 RX"
+#define D_SENSOR_ZIGBEE_TXD "ZigBee Tx"
+#define D_SENSOR_ZIGBEE_RXD "ZigBee Rx"
+#define D_SENSOR_ZIGBEE_RST "ZigBee Rst"
+#define D_SENSOR_SOLAXX1_TX "SolaxX1 Tx"
+#define D_SENSOR_SOLAXX1_RX "SolaxX1 Rx"
#define D_SENSOR_SOLAXX1_RTS "SolaxX1 RTS"
-#define D_SENSOR_IBEACON_TX "iBeacon TX"
-#define D_SENSOR_IBEACON_RX "iBeacon RX"
-#define D_SENSOR_RDM6300_RX "RDM6300 RX"
+#define D_SENSOR_IBEACON_TX "iBeacon Tx"
+#define D_SENSOR_IBEACON_RX "iBeacon Rx"
+#define D_SENSOR_RDM6300_RX "RDM6300 Rx"
#define D_SENSOR_CC1101_CS "CC1101 CS"
-#define D_SENSOR_A4988_DIR "A4988 DIR"
-#define D_SENSOR_A4988_STP "A4988 STP"
-#define D_SENSOR_A4988_ENA "A4988 ENA"
+#define D_SENSOR_A4988_DIR "A4988 Dir"
+#define D_SENSOR_A4988_STP "A4988 Stp"
+#define D_SENSOR_A4988_ENA "A4988 Ena"
#define D_SENSOR_A4988_MS1 "A4988 MS1"
#define D_SENSOR_OUTPUT_HI "Sortie Hi"
#define D_SENSOR_OUTPUT_LO "Sortie Lo"
-#define D_SENSOR_AS608_TX "AS608 TX"
-#define D_SENSOR_AS608_RX "AS608 RX"
-#define D_SENSOR_DDS2382_TX "DDS238-2 TX"
-#define D_SENSOR_DDS2382_RX "DDS238-2 RX"
-#define D_SENSOR_DDSU666_TX "DDSU666 TX"
-#define D_SENSOR_DDSU666_RX "DDSU666 RX"
-#define D_SENSOR_SM2135_CLK "SM2135 CLK"
-#define D_SENSOR_SM2135_DAT "SM2135 DAT"
-#define D_SENSOR_SM2335_CLK "SM2335 CLK"
-#define D_SENSOR_SM2335_DAT "SM2335 DAT"
+#define D_SENSOR_AS608_TX "AS608 Tx"
+#define D_SENSOR_AS608_RX "AS608 Rx"
+#define D_SENSOR_DDS2382_TX "DDS238-2 Tx"
+#define D_SENSOR_DDS2382_RX "DDS238-2 Rx"
+#define D_SENSOR_DDSU666_TX "DDSU666 Tx"
+#define D_SENSOR_DDSU666_RX "DDSU666 Rx"
+#define D_SENSOR_SM2135_CLK "SM2135 Clk"
+#define D_SENSOR_SM2135_DAT "SM2135 Dat"
+#define D_SENSOR_SM2335_CLK "SM2335 Clk"
+#define D_SENSOR_SM2335_DAT "SM2335 Dat"
#define D_SENSOR_BP1658CJ_CLK "BP1658CJ Clk"
#define D_SENSOR_BP1658CJ_DAT "BP1658CJ Dat"
-#define D_SENSOR_BP5758D_CLK "BP5758D Clk"
-#define D_SENSOR_BP5758D_DAT "BP5758D Dat"
+#define D_SENSOR_BP5758D_CLK "BP5758D Clk"
+#define D_SENSOR_BP5758D_DAT "BP5758D Dat"
#define D_SENSOR_DEEPSLEEP "Hibernation"
#define D_SENSOR_EXS_ENABLE "EXS Enable"
-#define D_SENSOR_CLIENT_TX "Esclave TX"
-#define D_SENSOR_CLIENT_RX "Esclave RX"
-#define D_SENSOR_CLIENT_RESET "Esclave RST"
-#define D_SENSOR_GPS_RX "GPS RX"
-#define D_SENSOR_GPS_TX "GPS TX"
-#define D_SENSOR_HM10_RX "HM10 RX"
-#define D_SENSOR_HM10_TX "HM10 TX"
-#define D_SENSOR_LE01MR_RX "LE-01MR RX"
-#define D_SENSOR_LE01MR_TX "LE-01MR TX"
-#define D_SENSOR_BL0940_RX "BL0940 RX"
+#define D_SENSOR_CLIENT_TX "Esclave Tx"
+#define D_SENSOR_CLIENT_RX "Esclave Rx"
+#define D_SENSOR_CLIENT_RESET "Esclave RST"
+#define D_SENSOR_GPS_RX "GPS Rx"
+#define D_SENSOR_GPS_TX "GPS Tx"
+#define D_SENSOR_HM10_RX "HM10 Rx"
+#define D_SENSOR_HM10_TX "HM10 Tx"
+#define D_SENSOR_LE01MR_RX "LE-01MR Rx"
+#define D_SENSOR_LE01MR_TX "LE-01MR Tx"
+#define D_SENSOR_BL0940_RX "BL0940 Rx"
#define D_SENSOR_CC1101_GDO0 "CC1101 GDO0"
#define D_SENSOR_CC1101_GDO2 "CC1101 GDO2"
-#define D_SENSOR_HRXL_RX "HRXL RX"
-#define D_SENSOR_DYP_RX "DYP RX"
-#define D_SENSOR_ELECTRIQ_MOODL "MOODL TX"
+#define D_SENSOR_HRXL_RX "HRXL Rx"
+#define D_SENSOR_DYP_RX "DYP Rx"
+#define D_SENSOR_ELECTRIQ_MOODL "MOODL Tx"
#define D_SENSOR_AS3935 "AS3935"
#define D_SENSOR_WINDMETER_SPEED "Anémomètre"
-#define D_SENSOR_TELEINFO_RX "TInfo RX"
+#define D_SENSOR_TELEINFO_RX "TInfo Rx"
#define D_SENSOR_TELEINFO_ENABLE "TInfo En"
#define D_SENSOR_LMT01_PULSE "LMT01 Impulsion"
#define D_SENSOR_ADC_INPUT "ADC Entrée"
-#define D_SENSOR_ADC_TEMP "ADC Temp"
+#define D_SENSOR_ADC_TEMP "ADC Temp."
#define D_SENSOR_ADC_LIGHT "ADC Lumière"
#define D_SENSOR_ADC_BUTTON "ADC Bouton"
#define D_SENSOR_ADC_RANGE "ADC Distance"
@@ -842,31 +842,31 @@
#define D_SENSOR_ADC_JOYSTICK "ADC Manette"
#define D_SENSOR_ADC_PH "ADC pH"
#define D_SENSOR_ADC_MQ "ADC MQ"
-#define D_GPIO_WEBCAM_PWDN "CAM_PWDN"
-#define D_GPIO_WEBCAM_RESET "CAM_RESET"
-#define D_GPIO_WEBCAM_XCLK "CAM_XCLK"
+#define D_GPIO_WEBCAM_PWDN "CAM_PwDn"
+#define D_GPIO_WEBCAM_RESET "CAM_Reset"
+#define D_GPIO_WEBCAM_XCLK "CAM_XClk"
#define D_GPIO_WEBCAM_SIOD "CAM_SIOD"
#define D_GPIO_WEBCAM_SIOC "CAM_SIOC"
-#define D_GPIO_WEBCAM_DATA "CAM_DATA"
-#define D_GPIO_WEBCAM_VSYNC "CAM_VSYNC"
-#define D_GPIO_WEBCAM_HREF "CAM_HREF"
-#define D_GPIO_WEBCAM_PCLK "CAM_PCLK"
-#define D_GPIO_WEBCAM_PSCLK "CAM_PSCLK"
+#define D_GPIO_WEBCAM_DATA "CAM_Data"
+#define D_GPIO_WEBCAM_VSYNC "CAM_VSync"
+#define D_GPIO_WEBCAM_HREF "CAM_HRef"
+#define D_GPIO_WEBCAM_PCLK "CAM_PClk"
+#define D_GPIO_WEBCAM_PSCLK "CAM_PSClk"
#define D_GPIO_WEBCAM_HSD "CAM_HSD"
#define D_GPIO_WEBCAM_PSRCS "CAM_PSRCS"
-#define D_SENSOR_ETH_PHY_POWER "ETH POWER"
+#define D_SENSOR_ETH_PHY_POWER "ETH Pwr"
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
-#define D_SENSOR_TCP_TXD "TCP TX"
-#define D_SENSOR_TCP_RXD "TCP RX"
-#define D_SENSOR_IEM3000_TX "iEM3000 TX"
-#define D_SENSOR_IEM3000_RX "iEM3000 RX"
-#define D_SENSOR_MIEL_HVAC_TX "MiEl HVAC TX"
-#define D_SENSOR_MIEL_HVAC_RX "MiEl HVAC RX"
-#define D_SENSOR_PROJECTOR_CTRL_TX "DLP TX"
-#define D_SENSOR_PROJECTOR_CTRL_RX "DLP RX"
-#define D_SENSOR_SHELLY_DIMMER_BOOT0 "SHD Boot 0"
-#define D_SENSOR_SHELLY_DIMMER_RST_INV "SHD Reset"
+#define D_SENSOR_TCP_TXD "TCP Tx"
+#define D_SENSOR_TCP_RXD "TCP Rx"
+#define D_SENSOR_IEM3000_TX "iEM3000 Tx"
+#define D_SENSOR_IEM3000_RX "iEM3000 Rx"
+#define D_SENSOR_MIEL_HVAC_TX "MiEl HVAC Tx"
+#define D_SENSOR_MIEL_HVAC_RX "MiEl HVAC Rx"
+#define D_SENSOR_PROJECTOR_CTRL_TX "DLP Tx"
+#define D_SENSOR_PROJECTOR_CTRL_RX "DLP Rx"
+#define D_SENSOR_SHELLY_DIMMER_BOOT0 "SHD Boot0"
+#define D_SENSOR_SHELLY_DIMMER_RST_INV "SHD Rst"
#define D_SENSOR_RC522_RST "RC522 Rst"
#define D_SENSOR_RC522_CS "RC522 CS"
#define D_SENSOR_NRF24_CS "NRF24 CS"
@@ -887,35 +887,35 @@
#define D_SENSOR_SDCARD_CS "CarteSD CS"
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
-#define D_SENSOR_NEOPOOL_TX "NeoPool TX"
-#define D_SENSOR_NEOPOOL_RX "NeoPool RX"
-#define D_SENSOR_VL53LXX_XSHUT "VL53LXX XSHUT"
-#define D_SENSOR_TFMINIPLUS_TX "TFmini+ TX"
-#define D_SENSOR_TFMINIPLUS_RX "TFmini+ RX"
+#define D_SENSOR_NEOPOOL_TX "NeoPool Tx"
+#define D_SENSOR_NEOPOOL_RX "NeoPool Rx"
+#define D_SENSOR_VL53LXX_XSHUT "VL53LXX XShut"
+#define D_SENSOR_TFMINIPLUS_TX "TFmini+ Tx"
+#define D_SENSOR_TFMINIPLUS_RX "TFmini+ Rx"
#define D_SENSOR_ZEROCROSS "ZC Pulse"
-#define D_SENSOR_HALLEFFECT "HallEffect"
+#define D_SENSOR_HALLEFFECT "Effet Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
-#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
-#define D_SENSOR_BL6523_TX "BL6523 Tx"
-#define D_SENSOR_BL6523_RX "BL6523 Rx"
+#define D_SENSOR_VINDRIKTNING_RX "Vindriktning"
+#define D_SENSOR_BL6523_TX "BL6523 Tx"
+#define D_SENSOR_BL6523_RX "BL6523 Rx"
#define D_SENSOR_HEARTBEAT "Heartbeat"
#define D_SENSOR_RESET "Reset"
-#define D_GPIO_SHIFT595_SRCLK "74x595 SRCLK"
-#define D_GPIO_SHIFT595_RCLK "74x595 RCLK"
+#define D_GPIO_SHIFT595_SRCLK "74x595 SRClk"
+#define D_GPIO_SHIFT595_RCLK "74x595 RClk"
#define D_GPIO_SHIFT595_OE "74x595 OE"
-#define D_GPIO_SHIFT595_SER "74x595 SER"
-#define D_GPIO_DINGTIAN_CLK "Dingtian CLK"
+#define D_GPIO_SHIFT595_SER "74x595 Ser"
+#define D_GPIO_DINGTIAN_CLK "Dingtian Clk"
#define D_GPIO_DINGTIAN_SDI "Dingtian SDI"
#define D_GPIO_DINGTIAN_Q7 "Dingtian Q7"
#define D_GPIO_DINGTIAN_PL "Dingtian PL"
-#define D_GPIO_DINGTIAN_RCK "Dingtian RCK"
-#define D_SENSOR_CM11_TX "CM110x TX"
-#define D_SENSOR_CM11_RX "CM110x RX"
-#define D_SENSOR_FLOWRATEMETER "Flowrate"
+#define D_GPIO_DINGTIAN_RCK "Dingtian RCk"
+#define D_SENSOR_CM11_TX "CM110x Tx"
+#define D_SENSOR_CM11_RX "CM110x Rx"
+#define D_SENSOR_FLOWRATEMETER "Débit"
#define D_SENSOR_ME007_TRIG "ME007 Tri"
#define D_SENSOR_ME007_RX "ME007 Rx"
#define D_SENSOR_TUYAMCUBR_TX "TuyaMCUBr Tx"
@@ -924,6 +924,7 @@
#define D_SENSOR_BIOPDU_PZEM016_RX "BioPDU PZEM016 Rx"
#define D_SENSOR_BIOPDU_BIT "BioPDU Bit"
+
// Units
#define D_UNIT_AMPERE "A"
#define D_UNIT_CELSIUS "C"
@@ -934,7 +935,7 @@
#define D_UNIT_HERTZ "Hz"
#define D_UNIT_HOUR "h"
#define D_UNIT_GALLONS "gal"
-#define D_UNIT_GALLONS_PER_MIN "gal/mn"
+#define D_UNIT_GALLONS_PER_MIN "gal/min"
#define D_UNIT_INCH_MERCURY "inHg"
#define D_UNIT_INCREMENTS "inc"
#define D_UNIT_KELVIN "K"
@@ -944,7 +945,7 @@
#define D_UNIT_KILOOHM "kΩ"
#define D_UNIT_KILOWATTHOUR "kWh"
#define D_UNIT_LITERS "L"
-#define D_UNIT_LITERS_PER_MIN "L/m"
+#define D_UNIT_LITERS_PER_MIN "L/min"
#define D_UNIT_LUX "lx"
#define D_UNIT_MICROGRAM_PER_CUBIC_METER "µg/m³"
#define D_UNIT_MICROMETER "µm"
@@ -976,9 +977,9 @@
#define D_UNIT_CUBICMETER_PER_HOUR "m³/h"
#define D_UNIT_CUBIC_METER "m³"
-#define D_NEW_ADDRESS "Positionner l'adresse à"
-#define D_OUT_OF_RANGE "Hors limites"
-#define D_SENSOR_DETECTED "détecté"
+#define D_NEW_ADDRESS "Positionner l'adresse à"
+#define D_OUT_OF_RANGE "Hors limites"
+#define D_SENSOR_DETECTED "détecté"
//SDM220, SDM120, SDM72, LE01MR, SDM230
#define D_EXPORT_POWER "Puissance fournie"
@@ -1008,9 +1009,9 @@
#define D_SOLAX_MODE_1 "En test"
#define D_SOLAX_MODE_2 "En marche"
#define D_SOLAX_MODE_3 "Défault"
-#define D_SOLAX_MODE_4 "Permanent Failure" // to be translated
-#define D_SOLAX_MODE_5 "Software Update" // to be translated
-#define D_SOLAX_MODE_6 "Selftest" // to be translated
+#define D_SOLAX_MODE_4 "Défaut permanent"
+#define D_SOLAX_MODE_5 "MàJ logicielle"
+#define D_SOLAX_MODE_6 "Autotest"
#define D_SOLAX_ERROR_0 "Aucun code d'erreur"
#define D_SOLAX_ERROR_1 "Défaut Perte de réseau"
#define D_SOLAX_ERROR_2 "Défaut Tension réseau"
@@ -1117,9 +1118,9 @@
#define D_FP_UNKNOWNERROR "Erreur" // Any other error
// xsns_96_flowratemeter.ino
-#define D_FLOWRATEMETER_NAME "Flowrate"
-#define D_FLOWRATEMETER_AMOUNT_TODAY "Amount Today"
-#define D_FLOWRATEMETER_DURATION_TODAY "Duration Today"
+#define D_FLOWRATEMETER_NAME "Débit"
+#define D_FLOWRATEMETER_AMOUNT_TODAY "Quantité aujourd'hui"
+#define D_FLOWRATEMETER_DURATION_TODAY "Durée aujourd'hui"
// xsns_83_neopool.ino
#define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names
@@ -1155,7 +1156,7 @@
#define D_NEOPOOL_RELAY_LIGHT "Lumière"
#define D_NEOPOOL_RELAY_PH_ACID "Pompe acide"
#define D_NEOPOOL_RELAY_PH_BASE "Pompe base"
-#define D_NEOPOOL_RELAY_RX "Pompe RedOx"
+#define D_NEOPOOL_RELAY_RX "Pompe Redox"
#define D_NEOPOOL_RELAY_CL "Pompe Chlore"
#define D_NEOPOOL_RELAY_CD "Conductivité"
#define D_NEOPOOL_RELAY_HEATING "Chauffage"
@@ -1164,7 +1165,7 @@
#define D_NEOPOOL_RELAY_AUX "Aux"
#define D_NEOPOOL_TIME "Durée"
#define D_NEOPOOL_FILT_MODE "Filtration mode"
-#define D_NEOPOOL_CELL_RUNTIME "Cell runtime"
+#define D_NEOPOOL_CELL_RUNTIME "Utilisation cellule"
#define D_NEOPOOL_POLARIZATION "Pol" // Sensor status
#define D_NEOPOOL_PR_OFF "PrOff"
#define D_NEOPOOL_SETPOINT_OK "OK"
@@ -1172,9 +1173,9 @@
#define D_NEOPOOL_SHOCK "Choc chlore"
#define D_NEOPOOL_STATUS_ON "ON"
#define D_NEOPOOL_STATUS_OFF "OFF"
-#define D_NEOPOOL_STATUS_WAIT "WAIT"
-#define D_NEOPOOL_STATUS_TANK "TANK"
-#define D_NEOPOOL_STATUS_FLOW "Flow"
+#define D_NEOPOOL_STATUS_WAIT "Attente"
+#define D_NEOPOOL_STATUS_TANK "Réservoir"
+#define D_NEOPOOL_STATUS_FLOW "Flux"
#define D_NEOPOOL_LOW "Bas"
#define D_NEOPOOL_FLOW1 "FL1"
#define D_NEOPOOL_FLOW2 "FL2"
From 1bfa110e73fa7268573ce183d8fb27a8ea04d8f8 Mon Sep 17 00:00:00 2001
From: Charles
Date: Sun, 26 Feb 2023 20:52:49 +0100
Subject: [PATCH 044/227] fix compilation error with TELEINFO enabled (#18058)
---
tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino b/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino
index fb2502ebc..4ac031c59 100644
--- a/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino
+++ b/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino
@@ -530,7 +530,7 @@ bool ResponseAppendTInfo(char sep, bool all)
if (me->name && me->value && *me->name && *me->value) {
// Check back checksum in case of any memory corruption
- if (me->checksum==tinfo.calcChecksum(me->name, me->value))) {
+ if (me->checksum==tinfo.calcChecksum(me->name, me->value)) {
// Does this label blacklisted ?
if (!isBlacklistedLabel(me->name)) {
@@ -582,7 +582,7 @@ bool ResponseAppendTInfo(char sep, bool all)
}
} else {
- AddLog(LOG_LEVEL_WARNING, PSTR("TIC: bad checksum for %s"), me->name);
+ AddLog(LOG_LEVEL_INFO, PSTR("TIC: bad checksum for %s"), me->name);
}
}
}
@@ -909,8 +909,8 @@ bool TInfoCmd(void) {
case CMND_TELEINFO_STATS: {
char stats_name[MAX_TINFO_COMMAND_NAME];
// Get the raw name
- GetTextIndexed(statsname, MAX_TINFO_COMMAND_NAME, command_code, kTInfo_Commands);
- int l = strlen(stats_name);
+ GetTextIndexed(stats_name, MAX_TINFO_COMMAND_NAME, command_code, kTInfo_Commands);
+ int l = strlen(stats_name);
// At least "EnergyConfig Stats" plus one space and one (or more) digit
// so "EnergyConfig Stats" or "EnergyConfig Stats 0"
if ( pValue ) {
@@ -919,7 +919,7 @@ bool TInfoCmd(void) {
Settings->teleinfo.show_stats = value ;
AddLog(LOG_LEVEL_INFO, PSTR("TIC: Show stats=%d"), value);
} else if (value == 2) {
- tinfo.clearstats();
+ tinfo.clearStats();
AddLog(LOG_LEVEL_INFO, PSTR("TIC: Stats cleared"));
} else {
AddLog(LOG_LEVEL_INFO, PSTR("TIC: bad Stats param '%d'"), value);
From f574273bf972aaa70478084a6d1eedfb1b7ac552 Mon Sep 17 00:00:00 2001
From: Charles
Date: Mon, 27 Feb 2023 08:20:59 +0100
Subject: [PATCH 045/227] display teleinfo stats on WEB UI (#18059)
---
tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino b/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino
index 4ac031c59..6f6baf9bb 100644
--- a/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino
+++ b/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino
@@ -45,7 +45,7 @@
// Json Command
//const char S_JSON_TELEINFO_COMMAND_STRING[] PROGMEM = "{\"" D_NAME_TELEINFO "\":{\"%s\":%s}}";
//const char S_JSON_TELEINFO_COMMAND_NVALUE[] PROGMEM = "{\"" D_NAME_TELEINFO "\":{\"%s\":%d}}";
-const char TELEINFO_COMMAND_SETTINGS[] PROGMEM = "TIC: Settings Mode:%s, RX:%s, EN:%s, Raw:%s, Skip:%d, Limit:%d";
+const char TELEINFO_COMMAND_SETTINGS[] PROGMEM = "TIC: Settings Mode:%s, RX:%s, EN:%s, Raw:%s, Skip:%d, Limit:%d, Stats:%d";
#define MAX_TINFO_COMMAND_NAME 16+1 // Change this if one of the following kTInfo_Commands is higher then 16 char
const char kTInfo_Commands[] PROGMEM = "historique|standard|noraw|full|changed|skip|limit|stats";
@@ -199,6 +199,10 @@ const char HTTP_ENERGY_LOAD_BAR[] PROGMEM = ""
"%d%%
"
" ";
+const char HTTP_ENERGY_STATS_TELEINFO[] PROGMEM = "{s}Bad Checksum{m}%d{e}"
+ "{s}Wrong Size{m}%d{e}"
+ "{s}Bad Format{m}%d{e}"
+ "{s}Interruption{m}%d{e}" ;
#endif // USE_WEBSERVER
@@ -799,7 +803,7 @@ bool TInfoCmd(void) {
sprintf_P(en_pin, PSTR("GPIO%d"), Pin(GPIO_TELEINFO_ENABLE));
}
- AddLog(LOG_LEVEL_INFO, TELEINFO_COMMAND_SETTINGS, mode_name, rx_pin, en_pin, raw_name, Settings->teleinfo.raw_skip, Settings->teleinfo.raw_limit);
+ AddLog(LOG_LEVEL_INFO, TELEINFO_COMMAND_SETTINGS, mode_name, rx_pin, en_pin, raw_name, Settings->teleinfo.raw_skip, Settings->teleinfo.raw_limit, Settings->teleinfo.show_stats);
serviced = true;
@@ -910,7 +914,7 @@ bool TInfoCmd(void) {
char stats_name[MAX_TINFO_COMMAND_NAME];
// Get the raw name
GetTextIndexed(stats_name, MAX_TINFO_COMMAND_NAME, command_code, kTInfo_Commands);
- int l = strlen(stats_name);
+ int l = strlen(stats_name);
// At least "EnergyConfig Stats" plus one space and one (or more) digit
// so "EnergyConfig Stats" or "EnergyConfig Stats 0"
if ( pValue ) {
@@ -1271,6 +1275,11 @@ void TInfoShow(bool json)
WSContentSend_P(HTTP_ENERGY_ID_TELEINFO, serialNumber);
}
+ if (Settings->teleinfo.show_stats) {
+ WSContentSend_P(HTTP_ENERGY_STATS_TELEINFO, tinfo.getChecksumErrorCount(), tinfo.getFrameSizeErrorCount()
+ , tinfo.getFrameFormatErrorCount(), tinfo.getFrameInterruptedCount());
+ }
+
#endif // USE_WEBSERVER
}
}
From a97f0349d89b75a6f5336e4aa583c516ea684237 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Mon, 27 Feb 2023 09:28:28 +0100
Subject: [PATCH 046/227] Add I2CDriver output to status 4
---
tasmota/tasmota_support/support_command.ino | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tasmota/tasmota_support/support_command.ino b/tasmota/tasmota_support/support_command.ino
index 9bdf91b37..2186f9311 100644
--- a/tasmota/tasmota_support/support_command.ino
+++ b/tasmota/tasmota_support/support_command.ino
@@ -794,6 +794,8 @@ void CmndStatus(void)
XsnsDriverState();
ResponseAppend_P(PSTR(",\"Sensors\":"));
XsnsSensorState(0);
+ ResponseAppend_P(PSTR(",\"" D_CMND_I2CDRIVER "\":"));
+ I2cDriverState();
ResponseJsonEndEnd();
CmndStatusResponse(4);
}
From 635afa36ded8378e217a298414a771b062d7b53b Mon Sep 17 00:00:00 2001
From: Barbudor
Date: Mon, 27 Feb 2023 15:39:52 +0100
Subject: [PATCH 047/227] i2cdriverstate in status only when use_i2c (#18067)
---
tasmota/tasmota_support/support_command.ino | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tasmota/tasmota_support/support_command.ino b/tasmota/tasmota_support/support_command.ino
index 2186f9311..8215ab71c 100644
--- a/tasmota/tasmota_support/support_command.ino
+++ b/tasmota/tasmota_support/support_command.ino
@@ -794,8 +794,10 @@ void CmndStatus(void)
XsnsDriverState();
ResponseAppend_P(PSTR(",\"Sensors\":"));
XsnsSensorState(0);
+#ifdef USE_I2C
ResponseAppend_P(PSTR(",\"" D_CMND_I2CDRIVER "\":"));
I2cDriverState();
+#endif
ResponseJsonEndEnd();
CmndStatusResponse(4);
}
From 39fd0cb0c405a3f9a70a890d9629cb60eef569dc Mon Sep 17 00:00:00 2001
From: Barbudor
Date: Mon, 27 Feb 2023 16:33:31 +0100
Subject: [PATCH 048/227] add lt and gt signs is missing (#18064)
---
.../tasmota_xdrv_driver/xdrv_01_1_webserver_mail.ino | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_01_1_webserver_mail.ino b/tasmota/tasmota_xdrv_driver/xdrv_01_1_webserver_mail.ino
index 42bb029a4..8cb24b774 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_01_1_webserver_mail.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_01_1_webserver_mail.ino
@@ -22,10 +22,12 @@
* #define EMAIL_SERVER "smtp.gmail.com"
* #define EMAIL_PORT 465
*
+ * Note : starting with this update, it is not required anymore to include emails in < > as they will
+ * be automatically added if needed
* if email body consist of a single * and scripter is present
* and a section >m is found, the lines in this section (until #) are sent as email body
- *
- * Some mail servers do not accept the IP address in the HELO (or EHLO) message but only a fully qualified
+ *
+ * Some mail servers do not accept the IP address in the HELO (or EHLO) message but only a fully qualified
* domain name (FQDN). To overcome this, use the following define to override this behavior and enter the desired FQDN
* #define EMAIL_USER_DOMAIN "googlemail.com"
*
@@ -111,7 +113,7 @@ String SendEmail::readClient() {
return r;
}
-bool SendEmail::send(const String& from, const String& to, const String& subject, const char *msg) {
+bool SendEmail::send(const String& _from, const String& _to, const String& subject, const char *msg) {
if (!host.length()) { return false; }
client->setTimeout(timeout);
@@ -129,6 +131,10 @@ bool SendEmail::send(const String& from, const String& to, const String& subject
return false;
}
+ String from, to;
+ from = ('<' == *_from.c_str()) ? _from : ("<" + _from + ">");
+ to = ('<' == *_to.c_str()) ? _to : ("<" + _to +">");
+
String buffer = readClient();
#ifdef DEBUG_EMAIL_PORT
MailReadAddLogBuffer(&buffer);
From cadab815effc0f64eccf95d4dd7c5fcf856fe234 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Mon, 27 Feb 2023 17:15:19 +0100
Subject: [PATCH 049/227] pio script to set env `PARTITIONS_TABLE_CSV` (#18065)
---
pio-tools/set_partition_table_esp32.py | 22 +++++++++++++++++++
pio-tools/set_partition_table_esp8266.py | 28 ++++++++++++++++++++++++
platformio.ini | 12 +++++-----
platformio_tasmota32.ini | 3 ++-
platformio_tasmota_env.ini | 2 ++
5 files changed, 61 insertions(+), 6 deletions(-)
create mode 100644 pio-tools/set_partition_table_esp32.py
create mode 100644 pio-tools/set_partition_table_esp8266.py
diff --git a/pio-tools/set_partition_table_esp32.py b/pio-tools/set_partition_table_esp32.py
new file mode 100644
index 000000000..e123d40ec
--- /dev/null
+++ b/pio-tools/set_partition_table_esp32.py
@@ -0,0 +1,22 @@
+#
+# The scipt sets the missing "PARTITIONS_TABLE_CSV" when using the command `pio run -t nobuild`
+# Adopted from https://github.com/platformio/platform-espressif32/issues/861#issuecomment-1241871437
+# Possible now to upload the firmware or the filesystem with (when builded already!):
+#
+# `pio run -t nobuild -t upload` and `pio run -t nobuild -t uploadfs`
+#
+
+Import("env")
+
+import os
+from SCons.Script import COMMAND_LINE_TARGETS
+
+board_config = env.BoardConfig()
+
+if "nobuild" in COMMAND_LINE_TARGETS:
+ env.Replace(
+ PARTITIONS_TABLE_CSV=os.path.join(
+ board_config.get("build.partitions"),
+ )
+ )
+# print("Set PARTITIONS_TABLE_CSV to: ", os.path.join(board_config.get("build.partitions")))
diff --git a/pio-tools/set_partition_table_esp8266.py b/pio-tools/set_partition_table_esp8266.py
new file mode 100644
index 000000000..a74c6cec7
--- /dev/null
+++ b/pio-tools/set_partition_table_esp8266.py
@@ -0,0 +1,28 @@
+#
+# The scipt sets the missing "LDSCRIPT_PATH" when using the command `pio run -t nobuild`
+# Adopted from https://github.com/platformio/platform-espressif32/issues/861#issuecomment-1241871437
+# Possible now to upload the firmware or the filesystem with (when builded already!):
+#
+# `pio run -t nobuild -t upload` and `pio run -t nobuild -t uploadfs`
+#
+
+Import("env")
+
+import os
+from SCons.Script import COMMAND_LINE_TARGETS
+
+board_config = env.BoardConfig()
+framework_dir = env.PioPlatform().get_package_dir("framework-arduinoespressif8266")
+assert os.path.isdir(framework_dir)
+
+if "nobuild" in COMMAND_LINE_TARGETS:
+ env.Replace(
+ LDSCRIPT_PATH=os.path.join(
+ framework_dir,
+ "tools",
+ "sdk",
+ "ld",
+ board_config.get("build.arduino.ldscript"),
+ )
+ )
+# print("Set LDSCRIPT_PATH to: ", os.path.join(framework_dir,"tools","sdk","ld",board_config.get("build.arduino.ldscript")))
diff --git a/platformio.ini b/platformio.ini
index 611ffbb11..0805bf840 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -65,11 +65,11 @@ lib_extra_dirs =
[scripts_defaults]
extra_scripts = pre:pio-tools/pre_source_dir.py
- pio-tools/strip-floats.py
- pio-tools/name-firmware.py
- pio-tools/gzip-firmware.py
- pio-tools/override_copy.py
- pio-tools/download_fs.py
+ pre:pio-tools/strip-floats.py
+ post:pio-tools/name-firmware.py
+ post:pio-tools/gzip-firmware.py
+ post:pio-tools/override_copy.py
+ post:pio-tools/download_fs.py
[esp_defaults]
extra_scripts = ${scripts_defaults.extra_scripts}
@@ -92,6 +92,8 @@ build_flags = -DCORE_DEBUG_LEVEL=0
; *********************************************************************
[esp82xx_defaults]
+extra_scripts = ${esp_defaults.extra_scripts}
+ pre:pio-tools/set_partition_table_esp8266.py
build_flags = ${esp_defaults.build_flags}
-DNDEBUG
-DFP_IN_IROM
diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini
index 1d2c2f2db..c475bd1f1 100644
--- a/platformio_tasmota32.ini
+++ b/platformio_tasmota32.ini
@@ -37,7 +37,8 @@ build_flags = ${esp_defaults.build_flags}
-Wl,--wrap=_Z11analogWritehi ; `analogWrite(unsigned char, int)` use the Tasmota version of analogWrite for deeper integration and phase control
-Wl,--wrap=ledcReadFreq ; `uint32_t ledcReadFreq(uint8_t chan)`
extra_scripts = pre:pio-tools/add_c_flags.py
- pio-tools/gen-berry-structures.py
+ pre:pio-tools/gen-berry-structures.py
+ pre:pio-tools/set_partition_table_esp32.py
post:pio-tools/post_esp32.py
${esp_defaults.extra_scripts}
diff --git a/platformio_tasmota_env.ini b/platformio_tasmota_env.ini
index b6357670a..270046bcb 100644
--- a/platformio_tasmota_env.ini
+++ b/platformio_tasmota_env.ini
@@ -29,6 +29,8 @@ lib_ignore =
Hash
; Disable next if you want to use ArduinoOTA in Tasmota (default disabled)
ArduinoOTA
+; Add files to Filesystem for all env (global). Remove no files entry and add add a line with the file to include
+custom_files_upload = no_files
[env:tasmota]
From 5cdd9791f4300607ae9a39d6f0e62a07b3ac77d6 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 28 Feb 2023 10:17:30 +0100
Subject: [PATCH 050/227] Fix invalid apparent and reactive power
---
tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino | 6 ++++++
tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino | 6 ++++++
2 files changed, 12 insertions(+)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino b/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino
index 408451297..5de2c90af 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino
@@ -1189,6 +1189,9 @@ void EnergyShow(bool json) {
if (isnan(apparent_power[i])) {
apparent_power[i] = Energy->voltage[i] * Energy->current[i];
}
+ else if (0 == Energy->current[i]) {
+ apparent_power[i] = 0;
+ }
if (apparent_power[i] < Energy->active_power[i]) { // Should be impossible
Energy->active_power[i] = apparent_power[i];
}
@@ -1216,6 +1219,9 @@ void EnergyShow(bool json) {
reactive_power[i] = (float)(SqrtInt((uint32_t)(power_diff)));
}
}
+ else if (0 == Energy->current[i]) {
+ reactive_power[i] = 0;
+ }
}
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino b/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino
index ddc7bb3ec..b64571ef5 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino
@@ -1419,6 +1419,9 @@ void EnergyShow(bool json) {
if (isnan(apparent_power[i])) {
apparent_power[i] = Energy->voltage[i] * Energy->current[i];
}
+ else if (0 == Energy->current[i]) {
+ apparent_power[i] = 0;
+ }
if (apparent_power[i] < Energy->active_power[i]) { // Should be impossible
Energy->active_power[i] = apparent_power[i];
}
@@ -1446,6 +1449,9 @@ void EnergyShow(bool json) {
reactive_power[i] = (float)(SqrtInt((uint32_t)(power_diff)));
}
}
+ else if (0 == Energy->current[i]) {
+ reactive_power[i] = 0;
+ }
}
}
From deeed56610c46c66782274fd14051f1da60e2597 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Tue, 28 Feb 2023 12:15:19 +0100
Subject: [PATCH 051/227] Refactor `set_partition_table.py` (#18072)
---
pio-tools/set_partition_table.py | 40 ++++++++++++++++++++++++
pio-tools/set_partition_table_esp32.py | 22 -------------
pio-tools/set_partition_table_esp8266.py | 28 -----------------
platformio.ini | 8 ++---
platformio_tasmota32.ini | 1 -
platformio_tasmota_env.ini | 5 ++-
6 files changed, 44 insertions(+), 60 deletions(-)
create mode 100644 pio-tools/set_partition_table.py
delete mode 100644 pio-tools/set_partition_table_esp32.py
delete mode 100644 pio-tools/set_partition_table_esp8266.py
diff --git a/pio-tools/set_partition_table.py b/pio-tools/set_partition_table.py
new file mode 100644
index 000000000..7287c73ee
--- /dev/null
+++ b/pio-tools/set_partition_table.py
@@ -0,0 +1,40 @@
+#
+# The scipt sets the missing "LDSCRIPT_PATH" when using the command `pio run -t nobuild`
+# Adopted from https://github.com/platformio/platform-espressif32/issues/861#issuecomment-1241871437
+# Possible now to upload the firmware or the filesystem with (when builded already!):
+#
+# `pio run -t nobuild -t upload` and `pio run -t nobuild -t uploadfs`
+#
+
+Import("env")
+
+import os
+from SCons.Script import COMMAND_LINE_TARGETS
+
+board_config = env.BoardConfig()
+
+if "nobuild" in COMMAND_LINE_TARGETS:
+ if env["PIOPLATFORM"] != "espressif32":
+ framework_dir = env.PioPlatform().get_package_dir("framework-arduinoespressif8266")
+ assert os.path.isdir(framework_dir)
+ env.Replace(
+ LDSCRIPT_PATH=os.path.join(
+ framework_dir,
+ "tools",
+ "sdk",
+ "ld",
+ board_config.get("build.arduino.ldscript"),
+ )
+ )
+# print("Set LDSCRIPT_PATH to: ", os.path.join(framework_dir,"tools","sdk","ld",board_config.get("build.arduino.ldscript")))
+
+#
+# For ESP32 sets the missing "PARTITIONS_TABLE_CSV" when using the command `pio run -t nobuild`
+#
+ else:
+ env.Replace(
+ PARTITIONS_TABLE_CSV=os.path.join(
+ board_config.get("build.partitions"),
+ )
+ )
+# print("Set PARTITIONS_TABLE_CSV to: ", os.path.join(board_config.get("build.partitions")))
diff --git a/pio-tools/set_partition_table_esp32.py b/pio-tools/set_partition_table_esp32.py
deleted file mode 100644
index e123d40ec..000000000
--- a/pio-tools/set_partition_table_esp32.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# The scipt sets the missing "PARTITIONS_TABLE_CSV" when using the command `pio run -t nobuild`
-# Adopted from https://github.com/platformio/platform-espressif32/issues/861#issuecomment-1241871437
-# Possible now to upload the firmware or the filesystem with (when builded already!):
-#
-# `pio run -t nobuild -t upload` and `pio run -t nobuild -t uploadfs`
-#
-
-Import("env")
-
-import os
-from SCons.Script import COMMAND_LINE_TARGETS
-
-board_config = env.BoardConfig()
-
-if "nobuild" in COMMAND_LINE_TARGETS:
- env.Replace(
- PARTITIONS_TABLE_CSV=os.path.join(
- board_config.get("build.partitions"),
- )
- )
-# print("Set PARTITIONS_TABLE_CSV to: ", os.path.join(board_config.get("build.partitions")))
diff --git a/pio-tools/set_partition_table_esp8266.py b/pio-tools/set_partition_table_esp8266.py
deleted file mode 100644
index a74c6cec7..000000000
--- a/pio-tools/set_partition_table_esp8266.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# The scipt sets the missing "LDSCRIPT_PATH" when using the command `pio run -t nobuild`
-# Adopted from https://github.com/platformio/platform-espressif32/issues/861#issuecomment-1241871437
-# Possible now to upload the firmware or the filesystem with (when builded already!):
-#
-# `pio run -t nobuild -t upload` and `pio run -t nobuild -t uploadfs`
-#
-
-Import("env")
-
-import os
-from SCons.Script import COMMAND_LINE_TARGETS
-
-board_config = env.BoardConfig()
-framework_dir = env.PioPlatform().get_package_dir("framework-arduinoespressif8266")
-assert os.path.isdir(framework_dir)
-
-if "nobuild" in COMMAND_LINE_TARGETS:
- env.Replace(
- LDSCRIPT_PATH=os.path.join(
- framework_dir,
- "tools",
- "sdk",
- "ld",
- board_config.get("build.arduino.ldscript"),
- )
- )
-# print("Set LDSCRIPT_PATH to: ", os.path.join(framework_dir,"tools","sdk","ld",board_config.get("build.arduino.ldscript")))
diff --git a/platformio.ini b/platformio.ini
index 0805bf840..8810d8ad5 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -63,16 +63,14 @@ lib_extra_dirs =
; Uncomment and specify a folder where to place the firmware file(s) (default set to folder build_output)
;bin_dir = /tmp/bin_files/
-[scripts_defaults]
+[esp_defaults]
extra_scripts = pre:pio-tools/pre_source_dir.py
pre:pio-tools/strip-floats.py
+ pre:pio-tools/set_partition_table.py
post:pio-tools/name-firmware.py
post:pio-tools/gzip-firmware.py
post:pio-tools/override_copy.py
post:pio-tools/download_fs.py
-
-[esp_defaults]
-extra_scripts = ${scripts_defaults.extra_scripts}
; *** remove undesired all warnings
build_unflags = -Wall
; -mtarget-align
@@ -92,8 +90,6 @@ build_flags = -DCORE_DEBUG_LEVEL=0
; *********************************************************************
[esp82xx_defaults]
-extra_scripts = ${esp_defaults.extra_scripts}
- pre:pio-tools/set_partition_table_esp8266.py
build_flags = ${esp_defaults.build_flags}
-DNDEBUG
-DFP_IN_IROM
diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini
index c475bd1f1..ce3551e6e 100644
--- a/platformio_tasmota32.ini
+++ b/platformio_tasmota32.ini
@@ -38,7 +38,6 @@ build_flags = ${esp_defaults.build_flags}
-Wl,--wrap=ledcReadFreq ; `uint32_t ledcReadFreq(uint8_t chan)`
extra_scripts = pre:pio-tools/add_c_flags.py
pre:pio-tools/gen-berry-structures.py
- pre:pio-tools/set_partition_table_esp32.py
post:pio-tools/post_esp32.py
${esp_defaults.extra_scripts}
diff --git a/platformio_tasmota_env.ini b/platformio_tasmota_env.ini
index 270046bcb..944c4e7ff 100644
--- a/platformio_tasmota_env.ini
+++ b/platformio_tasmota_env.ini
@@ -5,10 +5,10 @@ framework = ${common.framework}
board = ${common.board}
board_build.filesystem = ${common.board_build.filesystem}
build_unflags = ${common.build_unflags}
-build_flags = ${common.build_flags}
+build_flags = ${esp82xx_defaults.build_flags}
monitor_speed = ${common.monitor_speed}
upload_resetmethod = ${common.upload_resetmethod}
-extra_scripts = ${common.extra_scripts}
+extra_scripts = ${esp_defaults.extra_scripts}
lib_ldf_mode = ${common.lib_ldf_mode}
lib_compat_mode = ${common.lib_compat_mode}
lib_extra_dirs = ${common.lib_extra_dirs}
@@ -32,7 +32,6 @@ lib_ignore =
; Add files to Filesystem for all env (global). Remove no files entry and add add a line with the file to include
custom_files_upload = no_files
-
[env:tasmota]
build_flags = ${env.build_flags} -DOTA_URL='"http://ota.tasmota.com/tasmota/release/tasmota.bin.gz"'
From 10cc10742f7fdc36846a0aa14f420a22c522730e Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Tue, 28 Feb 2023 17:54:43 +0100
Subject: [PATCH 052/227] Extent virtual switch/button/relay support
Extent virtual switch/button/relay support using MCP23017. Can be used along side of current MCP23017 sensor driver,
---
I2CDEVICES.md | 1 +
.../tasmota_xdrv_driver/xdrv_67_mcp230xx.ino | 702 ++++++++++++++++++
2 files changed, 703 insertions(+)
create mode 100644 tasmota/tasmota_xdrv_driver/xdrv_67_mcp230xx.ino
diff --git a/I2CDEVICES.md b/I2CDEVICES.md
index 86090c403..346c4273f 100644
--- a/I2CDEVICES.md
+++ b/I2CDEVICES.md
@@ -112,3 +112,4 @@ Index | Define | Driver | Device | Address(es) | Description
74 | USE_DISPLAY_TM1650 | xdsp_20 | TM1650 | 0x24 - 0x27, 0x34 - 0x37 | Four-digit seven-segment LED controller
75 | USE_PCA9632 | xdrv_64 | PCA9632 | 0x60 | 4-channel 4-bit pwm driver
76 | USE_SEN5X | xsns_103 | SEN5X | 0x69 | Gas (VOC/NOx index) and air quality (PPM <1,<2.5,<4,<10)
+ 77 | USE_MCP23XXX_DRV | xdrv_67 | MCP23x17 | 0x20 - 0x26 | 16-bit I/O expander as virtual button/switch/relay
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp230xx.ino b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp230xx.ino
new file mode 100644
index 000000000..2717a933c
--- /dev/null
+++ b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp230xx.ino
@@ -0,0 +1,702 @@
+/*
+ xdrv_67_mcp230xx.ino - MCP23008/MCP23017 GPIO Expander support for Tasmota
+
+ SPDX-FileCopyrightText: 2023 Theo Arends
+
+ SPDX-License-Identifier: GPL-3.0-only
+*/
+
+#ifdef USE_I2C
+//#if defined(USE_I2C) || defined(USE_SPI)
+#ifdef USE_MCP23XXX_DRV
+/*********************************************************************************************\
+ * MCP23008/17 - I2C GPIO Expander to be used as virtual button/switch/relay only
+ *
+ * Docs at https://www.microchip.com/wwwproducts/en/MCP23008
+ * https://www.microchip.com/wwwproducts/en/MCP23017
+ *
+ * I2C Address: 0x20 - 0x26 (0x27 is not supported)
+ *
+ * The goal of the driver is to provide a sequential list of pins configured like Tasmota template
+ * and handle any input and output as configured GPIOs.
+ *
+ * Restrictions:
+ * - Only MCP23017 (=I2C)
+ * - Max support for 28 switches (input), 32 buttons (input), 32 relays (output)
+ *
+ * Supported template fields:
+ * NAME - Template name
+ * ADDR - Sequential list of I2C addresses
+ * GPIO - Sequential list of pin 1 and up with configured GPIO function
+ * Function Code Description
+ * -------------- -------- ----------------------------------------
+ * None 0 Not used
+ * Button1..32 32..63 Button to Gnd with internal pullup
+ * Button_n1..32 64..95 Button to Gnd without internal pullup
+ * Button_i1..32 96..127 Button inverted to Vcc with internal pullup
+ * Button_in1..32 128..159 Button inverted to Vcc without internal pullup
+ * Switch1..28 160..187 Switch to Gnd with internal pullup
+ * Switch_n1..28 192..219 Switch to Gnd without internal pullup
+ * Relay1..28 224..255 Relay
+ * Relay_i1..28 256..287 Relay inverted
+ *
+ * Prepare a template to be loaded either by:
+ * - a rule like: rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
+ * - a script like: -y{"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
+ * - file called mcp23x.dat with contents: {"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
+ *
+ * Inverted relays and buttons Ri8 Ri7 Ri6 Ri5 Ri4 Ri3 Ri2 Ri1 B1 B2 B3 B4 B5 B6 B7 B8
+ * {"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
+ *
+ * Inverted relays and buttons Ri1 Ri2 Ri3 Ri4 Ri5 Ri6 Ri7 Ri8 B1 B2 B3 B4 B5 B6 B7 B8
+ * {"NAME":"MCP23017 A=Ri1-8, B=B1-8","ADDR":32,"GPIO":[256,257,258,259,260,261,262,263,32,33,34,35,36,37,38,39]}
+ *
+ * Relays and buttons R1 R2 R3 R4 R5 R6 R7 R8 B1 B2 B3 B4 B5 B6 B7 B8
+ * {"NAME":"MCP23017 A=R1-8, B=B1-8","ADDR":32,"GPIO":[224,225,226,227,228,229,230,231,32,33,34,35,36,37,38,39]}
+ *
+ * Buttons and relays B1 B2 B3 B4 B5 B6 B7 B8 R1 R2 R3 R4 R5 R6 R7 R8
+ * {"NAME":"MCP23017 A=B1-8, B=R1-8","ADDR":32,"GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231]}
+ *
+ * Buttons, relays, buttons and relays B1 B2 B3 B4 B5 B6 B7 B8 R1 R2 R3 R4 R5 R6 R7 R8 B9 B10B11B12B13B14B15B16R9 R10 R11 R12 R13 R14 R15 R16
+ * {"NAME":"MCP23017 A=B1-8, B=R1-8, C=B9-16, D=R9-16","ADDR":[32,33],"GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231,40,41,42,43,44,45,46,47,232,233,234,235,236,237,238,239]}
+ *
+ * {"NAME":"MCP23017 A=R1-8, B=B1-8, C=R9-16, D=B9-16","ADDR":[32,33],"GPIO":[224,225,226,227,228,229,230,231,32,33,34,35,36,37,38,39,232,233,234,235,236,237,238,239,40,41,42,43,44,45,46,47]}
+ *
+ * 32 relays R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 R30 R31 R32
+ * {"NAME":"MCP23017 A=Ri1-8, B=Ri9-16, C=Ri17-24, D=Ri25-32","ADDR":[32,33],"GPIO":[256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287]}
+ * {"NAME":"MCP23017 A=R1-8, B=R9-16, C=R17-24, D=R25-32","ADDR":[32,33],"GPIO":[224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
+ *
+\*********************************************************************************************/
+
+#define XDRV_67 67
+#define XI2C_77 77 // See I2CDEVICES.md
+
+#define MCP23XXX_ADDR_START 0x20 // 32
+#define MCP23XXX_ADDR_END 0x26 // 38
+
+#define MCP23XXX_MAX_DEVICES 6
+
+/*********************************************************************************************\
+ * MCP23017 support
+\*********************************************************************************************/
+
+enum MCP23S08GPIORegisters {
+ MCP23X08_IODIR = 0x00,
+ MCP23X08_IPOL = 0x01,
+ MCP23X08_GPINTEN = 0x02,
+ MCP23X08_DEFVAL = 0x03,
+ MCP23X08_INTCON = 0x04,
+ MCP23X08_IOCON = 0x05,
+ MCP23X08_GPPU = 0x06,
+ MCP23X08_INTF = 0x07,
+ MCP23X08_INTCAP = 0x08,
+ MCP23X08_GPIO = 0x09,
+ MCP23X08_OLAT = 0x0A,
+};
+
+enum MCP23X17GPIORegisters {
+ // A side
+ MCP23X17_IODIRA = 0x00,
+ MCP23X17_IPOLA = 0x02,
+ MCP23X17_GPINTENA = 0x04,
+ MCP23X17_DEFVALA = 0x06,
+ MCP23X17_INTCONA = 0x08,
+ MCP23X17_IOCONA = 0x0A,
+ MCP23X17_GPPUA = 0x0C,
+ MCP23X17_INTFA = 0x0E,
+ MCP23X17_INTCAPA = 0x10,
+ MCP23X17_GPIOA = 0x12,
+ MCP23X17_OLATA = 0x14,
+ // B side
+ MCP23X17_IODIRB = 0x01,
+ MCP23X17_IPOLB = 0x03,
+ MCP23X17_GPINTENB = 0x05,
+ MCP23X17_DEFVALB = 0x07,
+ MCP23X17_INTCONB = 0x09,
+ MCP23X17_IOCONB = 0x0B,
+ MCP23X17_GPPUB = 0x0D,
+ MCP23X17_INTFB = 0x0F,
+ MCP23X17_INTCAPB = 0x11,
+ MCP23X17_GPIOB = 0x13,
+ MCP23X17_OLATB = 0x15,
+};
+
+enum MCP23XInterruptMode { MCP23XXX_NO_INTERRUPT, MCP23XXX_CHANGE, MCP23XXX_RISING, MCP23XXX_FALLING };
+
+enum MCP23XInterfaces { MCP23X_I2C, MCP23X_SPI };
+
+typedef struct {
+ uint8_t olata;
+ uint8_t olatb;
+ uint8_t address;
+ uint8_t interface;
+ uint8_t pins; // 8 (MCP23008) or 16 (MCP23017 / MCP23S17)
+ uint8_t type; // 1 (MCP23008) or 2 (MCP23017) or 3 (MCP23S17)
+ int8_t pin_cs;
+} tMcp23xDevice;
+
+struct MCP230 {
+ tMcp23xDevice device[MCP23XXX_MAX_DEVICES];
+ uint32_t relay_inverted;
+ uint32_t button_inverted;
+ uint8_t chip;
+ uint8_t max_devices;
+ uint8_t max_pins;
+ uint8_t relay_max;
+ uint8_t relay_offset;
+ uint8_t button_max;
+ uint8_t switch_max;
+ int8_t button_offset;
+ int8_t switch_offset;
+} Mcp23x;
+
+uint16_t *Mcp23x_gpio_pin = nullptr;
+
+/*********************************************************************************************\
+ * MCP23x17 - SPI and I2C
+\*********************************************************************************************/
+
+void MCP23xDumpRegs(void) {
+ uint8_t data[22];
+ for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
+ I2cReadBuffer(Mcp23x.device[Mcp23x.chip].address, 0, data, 22);
+ AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Address %d, Regs %22_H"), Mcp23x.device[Mcp23x.chip].address, data);
+ }
+}
+
+/*
+#ifdef USE_SPI
+void MCP23xEnable(void) {
+ SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
+ digitalWrite(Mcp23x.device[Mcp23x.chip].pin_cs, 0);
+}
+
+void MCP23xDisable(void) {
+ SPI.endTransaction();
+ digitalWrite(Mcp23x.device[Mcp23x.chip].pin_cs, 1);
+}
+#endif
+*/
+uint32_t MCP23xRead16(uint8_t reg) {
+ // Read 16-bit registers: (regb << 8) | rega
+ uint32_t value = 0;
+/*
+#ifdef USE_SPI
+ if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
+ MCP23xEnable();
+ SPI.transfer(Mcp23x.device[Mcp23x.chip].address | 1);
+ SPI.transfer(reg);
+ value = SPI.transfer(0xFF); // RegA
+ value |= (SPI.transfer(0xFF) << 8); // RegB
+ MCP23xDisable();
+ }
+#endif
+*/
+#ifdef USE_I2C
+ if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
+ value = I2cRead16LE(Mcp23x.device[Mcp23x.chip].address, reg);
+ }
+#endif
+ return value;
+}
+
+uint32_t MCP23xRead(uint8_t reg) {
+ uint32_t value = 0;
+/*
+#ifdef USE_SPI
+ if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
+ MCP23xEnable();
+ SPI.transfer(Mcp23x.device[Mcp23x.chip].address | 1);
+ SPI.transfer(reg);
+ value = SPI.transfer(0xFF);
+ MCP23xDisable();
+ }
+#endif
+*/
+#ifdef USE_I2C
+ if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
+ value = I2cRead8(Mcp23x.device[Mcp23x.chip].address, reg);
+ }
+#endif
+ return value;
+}
+
+bool MCP23xValidRead(uint8_t reg, uint8_t *data) {
+/*
+#ifdef USE_SPI
+ if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
+ MCP23xEnable();
+ SPI.transfer(Mcp23x.device[Mcp23x.chip].address | 1);
+ SPI.transfer(reg);
+ *data = SPI.transfer(0xFF);
+ MCP23xDisable();
+ return true;
+ }
+#endif
+*/
+ if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
+ return I2cValidRead8(data, Mcp23x.device[Mcp23x.chip].address, reg);
+ }
+ return false;
+}
+
+void MCP23xWrite(uint8_t reg, uint8_t value) {
+/*
+#ifdef USE_SPI
+ if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
+ MCP23xEnable();
+ SPI.transfer(Mcp23x.device[Mcp23x.chip].address);
+ SPI.transfer(reg);
+ SPI.transfer(value);
+ MCP23xDisable();
+ }
+#endif
+*/
+#ifdef USE_I2C
+ if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
+ I2cWrite8(Mcp23x.device[Mcp23x.chip].address, reg, value);
+ }
+#endif
+}
+
+/*********************************************************************************************/
+
+void MCP23xUpdate(uint8_t pin, bool pin_value, uint8_t reg_addr) {
+ // pin = 0 - 15
+ uint8_t bit = pin % 8;
+ uint8_t reg_value = 0;
+ if (reg_addr == MCP23X17_OLATA) {
+ reg_value = Mcp23x.device[Mcp23x.chip].olata;
+ } else if (reg_addr == MCP23X17_OLATB) {
+ reg_value = Mcp23x.device[Mcp23x.chip].olatb;
+ } else {
+ reg_value = MCP23xRead(reg_addr);
+ }
+ if (pin_value) {
+ reg_value |= 1 << bit;
+ } else {
+ reg_value &= ~(1 << bit);
+ }
+ MCP23xWrite(reg_addr, reg_value);
+ if (reg_addr == MCP23X17_OLATA) {
+ Mcp23x.device[Mcp23x.chip].olata = reg_value;
+ } else if (reg_addr == MCP23X17_OLATB) {
+ Mcp23x.device[Mcp23x.chip].olatb = reg_value;
+ }
+}
+
+/*********************************************************************************************/
+
+void MCP23xPinMode(uint8_t pin, uint8_t flags) {
+ // pin 0 - 31
+ Mcp23x.chip = pin / 16;
+ pin = pin % 16;
+ uint8_t iodir = pin < 8 ? MCP23X17_IODIRA : MCP23X17_IODIRB;
+ uint8_t gppu = pin < 8 ? MCP23X17_GPPUA : MCP23X17_GPPUB;
+ switch (flags) {
+ case INPUT:
+ MCP23xUpdate(pin, true, iodir);
+ MCP23xUpdate(pin, false, gppu);
+ break;
+ case INPUT_PULLUP:
+ MCP23xUpdate(pin, true, iodir);
+ MCP23xUpdate(pin, true, gppu);
+ break;
+ case OUTPUT:
+ MCP23xUpdate(pin, false, iodir);
+ break;
+ }
+}
+
+void MCP23xPinInterruptMode(uint8_t pin, uint8_t interrupt_mode) {
+ // pin 0 - 31
+ Mcp23x.chip = pin / 16;
+ pin = pin % 16;
+ uint8_t gpinten = pin < 8 ? MCP23X17_GPINTENA : MCP23X17_GPINTENB;
+ uint8_t intcon = pin < 8 ? MCP23X17_INTCONA : MCP23X17_INTCONB;
+ uint8_t defval = pin < 8 ? MCP23X17_DEFVALA : MCP23X17_DEFVALB;
+ switch (interrupt_mode) {
+ case MCP23XXX_CHANGE:
+ MCP23xUpdate(pin, true, gpinten);
+ MCP23xUpdate(pin, false, intcon);
+ break;
+ case MCP23XXX_RISING:
+ MCP23xUpdate(pin, true, gpinten);
+ MCP23xUpdate(pin, true, intcon);
+ MCP23xUpdate(pin, true, defval);
+ break;
+ case MCP23XXX_FALLING:
+ MCP23xUpdate(pin, true, gpinten);
+ MCP23xUpdate(pin, true, intcon);
+ MCP23xUpdate(pin, false, defval);
+ break;
+ case MCP23XXX_NO_INTERRUPT:
+ MCP23xUpdate(pin, false, gpinten);
+ break;
+ }
+}
+
+bool MCP23xDigitalRead(uint8_t pin) {
+ // pin 0 - 31
+ Mcp23x.chip = pin / 16;
+ pin = pin % 16;
+ uint8_t bit = pin % 8;
+ uint8_t reg_addr = pin < 8 ? MCP23X17_GPIOA : MCP23X17_GPIOB;
+ uint8_t value = MCP23xRead(reg_addr);
+ return value & (1 << bit);
+}
+
+void MCP23xDigitalWrite(uint8_t pin, bool value) {
+ // pin 0 - 31
+ Mcp23x.chip = pin / 16;
+ pin = pin % 16;
+ uint8_t reg_addr = pin < 8 ? MCP23X17_OLATA : MCP23X17_OLATB;
+ MCP23xUpdate(pin, value, reg_addr);
+}
+
+/*********************************************************************************************\
+ * Tasmota
+\*********************************************************************************************/
+
+int IRAM_ATTR MCP23xPin(uint32_t gpio, uint32_t index = 0);
+int IRAM_ATTR MCP23xPin(uint32_t gpio, uint32_t index) {
+ uint16_t real_gpio = gpio << 5;
+ uint16_t mask = 0xFFE0;
+ if (index < GPIO_ANY) {
+ real_gpio += index;
+ mask = 0xFFFF;
+ }
+ for (uint32_t i = 0; i < Mcp23x.max_pins; i++) {
+ if ((Mcp23x_gpio_pin[i] & mask) == real_gpio) {
+ return i; // Pin number configured for gpio
+ }
+ }
+ return -1; // No pin used for gpio
+}
+
+bool MCP23xPinUsed(uint32_t gpio, uint32_t index = 0);
+bool MCP23xPinUsed(uint32_t gpio, uint32_t index) {
+ return (MCP23xPin(gpio, index) >= 0);
+}
+
+uint32_t MCP23xGetPin(uint32_t lpin) {
+ if (lpin < Mcp23x.max_pins) {
+ return Mcp23x_gpio_pin[lpin];
+ } else {
+ return GPIO_NONE;
+ }
+}
+
+/*********************************************************************************************/
+
+String MCP23xTemplateLoadFile(void) {
+ String mcptmplt = "";
+#ifdef USE_UFILESYS
+ mcptmplt = TfsLoadString("/mcp23x.dat");
+#endif // USE_UFILESYS
+#ifdef USE_RULES
+ if (!mcptmplt.length()) {
+ mcptmplt = RuleLoadFile("MCP23X.DAT");
+ }
+#endif // USE_RULES
+#ifdef USE_SCRIPT
+ if (!mcptmplt.length()) {
+ mcptmplt = ScriptLoadSection(">y");
+ }
+#endif // USE_SCRIPT
+ return mcptmplt;
+}
+
+bool MCP23xLoadTemplate(void) {
+ String mcptmplt = MCP23xTemplateLoadFile();
+ uint32_t len = mcptmplt.length() +1;
+ if (len < 7) { return false; } // No McpTmplt found
+
+ JsonParser parser((char*)mcptmplt.c_str());
+ JsonParserObject root = parser.getRootObject();
+ if (!root) { return false; }
+
+ // rule3 on file#mcp23x.dat do {"NAME":"MCP23017","ADDR":32,"GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231]} endon
+ // rule3 on file#mcp23x.dat do {"NAME":"MCP23017","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
+ // rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":[32,33],"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
+ // rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8, C=Ri16-9, D=B9-16","ADDR":[32,33],"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39,271,270,269,268,267,266,265,264,40,41,42,43,44,45,46,47]} endon
+
+ // {"NAME":"MCP23017","ADDR":32,"GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231]}
+ // {"NAME":"MCP23017","ADDR":[32,33],"GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231,40,41,42,43,44,45,46,47,232,233,234,235,236,237,238,239]}
+ JsonParserToken val = root[PSTR(D_JSON_NAME)];
+ if (val) {
+ AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Template %s"), val.getStr());
+ }
+/*
+ JsonParserArray arr = root[PSTR("ADDR")];
+ if (arr) {
+ uint32_t i;
+ for (i = 0; i < Mcp23x.max_devices; i++) {
+ JsonParserToken val = arr[i];
+ if (!val) { break; }
+
+ uint8_t address = val.getUInt();
+ uint32_t j;
+ for (j = 0; j < Mcp23x.max_devices; j++) {
+ if (address == Mcp23x.device[Mcp23x.max_devices].address) {
+ j = 0;
+ break;
+ }
+ }
+ if (j) { return false; } // Requested I2C address not present
+
+ }
+ } else {
+ val = root[PSTR("ADDR")];
+
+ }
+*/
+ JsonParserArray arr = root[PSTR(D_JSON_GPIO)];
+ if (arr) {
+ uint32_t pin = 0;
+ for (pin; pin < Mcp23x.max_pins; pin++) { // Max number of detected chip pins
+ JsonParserToken val = arr[pin];
+ if (!val) { break; }
+ uint16_t mpin = val.getUInt();
+ if (mpin) { // Above GPIO_NONE
+ if ((mpin >= AGPIO(GPIO_SWT1)) && (mpin < (AGPIO(GPIO_SWT1) + MAX_SWITCHES_SET))) {
+ Mcp23x.switch_max++;
+ MCP23xPinMode(pin, INPUT_PULLUP);
+// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ }
+ else if ((mpin >= AGPIO(GPIO_SWT1_NP)) && (mpin < (AGPIO(GPIO_SWT1_NP) + MAX_SWITCHES_SET))) {
+ mpin -= (AGPIO(GPIO_SWT1_NP) - AGPIO(GPIO_SWT1));
+ Mcp23x.switch_max++;
+ MCP23xPinMode(pin, INPUT);
+// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ }
+ else if ((mpin >= AGPIO(GPIO_KEY1)) && (mpin < (AGPIO(GPIO_KEY1) + MAX_KEYS_SET))) {
+ Mcp23x.button_max++;
+ MCP23xPinMode(pin, INPUT_PULLUP);
+// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ }
+ else if ((mpin >= AGPIO(GPIO_KEY1_NP)) && (mpin < (AGPIO(GPIO_KEY1_NP) + MAX_KEYS_SET))) {
+ mpin -= (AGPIO(GPIO_KEY1_NP) - AGPIO(GPIO_KEY1));
+ Mcp23x.button_max++;
+ MCP23xPinMode(pin, INPUT);
+// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ }
+ else if ((mpin >= AGPIO(GPIO_KEY1_INV)) && (mpin < (AGPIO(GPIO_KEY1_INV) + MAX_KEYS_SET))) {
+ bitSet(Mcp23x.button_inverted, mpin - AGPIO(GPIO_KEY1_INV));
+ mpin -= (AGPIO(GPIO_KEY1_INV) - AGPIO(GPIO_KEY1));
+ Mcp23x.button_max++;
+ MCP23xPinMode(pin, INPUT_PULLUP);
+// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ }
+ else if ((mpin >= AGPIO(GPIO_KEY1_INV_NP)) && (mpin < (AGPIO(GPIO_KEY1_INV_NP) + MAX_KEYS_SET))) {
+ bitSet(Mcp23x.button_inverted, mpin - AGPIO(GPIO_KEY1_INV_NP));
+ mpin -= (AGPIO(GPIO_KEY1_INV_NP) - AGPIO(GPIO_KEY1));
+ Mcp23x.button_max++;
+ MCP23xPinMode(pin, INPUT);
+// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ }
+ else if ((mpin >= AGPIO(GPIO_REL1)) && (mpin < (AGPIO(GPIO_REL1) + MAX_RELAYS_SET))) {
+ Mcp23x.relay_max++;
+ MCP23xPinMode(pin, OUTPUT);
+ }
+ else if ((mpin >= AGPIO(GPIO_REL1_INV)) && (mpin < (AGPIO(GPIO_REL1_INV) + MAX_RELAYS_SET))) {
+ bitSet(Mcp23x.relay_inverted, mpin - AGPIO(GPIO_REL1_INV));
+ mpin -= (AGPIO(GPIO_REL1_INV) - AGPIO(GPIO_REL1));
+ Mcp23x.relay_max++;
+ MCP23xPinMode(pin, OUTPUT);
+ }
+ else { mpin = 0; }
+ Mcp23x_gpio_pin[pin] = mpin;
+ }
+ if ((Mcp23x.switch_max >= MAX_SWITCHES_SET) ||
+ (Mcp23x.button_max >= MAX_KEYS_SET) ||
+ (Mcp23x.relay_max >= MAX_RELAYS_SET)) {
+ AddLog(LOG_LEVEL_INFO, PSTR("MCP: Max reached (S%d/B%d/R%d)"), Mcp23x.switch_max, Mcp23x.button_max, Mcp23x.relay_max);
+ break;
+ }
+ }
+ Mcp23x.max_pins = pin; // Max number of configured pins
+ }
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Pins %d, Mcp23x_gpio_pin %*_V"), Mcp23x.max_pins, Mcp23x.max_pins, (uint8_t*)Mcp23x_gpio_pin);
+
+ return true;
+}
+
+uint32_t MCP23xTemplateGpio(void) {
+ String mcptmplt = MCP23xTemplateLoadFile();
+ uint32_t len = mcptmplt.length() +1;
+ if (len < 7) { return 0; } // No McpTmplt found
+
+ JsonParser parser((char*)mcptmplt.c_str());
+ JsonParserObject root = parser.getRootObject();
+ if (!root) { return 0; }
+
+ JsonParserArray arr = root[PSTR(D_JSON_GPIO)];
+ if (arr.isArray()) {
+ return arr.size(); // Number of requested pins
+ }
+ return 0;
+}
+
+void MCP23xModuleInit(void) {
+ int32_t pins_needed = MCP23xTemplateGpio();
+ if (!pins_needed) {
+ AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Invalid template"));
+ return;
+ }
+
+ uint8_t mcp23xxx_address = MCP23XXX_ADDR_START;
+ while ((Mcp23x.max_devices < MCP23XXX_MAX_DEVICES) && (mcp23xxx_address < MCP23XXX_ADDR_END)) {
+ Mcp23x.chip = Mcp23x.max_devices;
+ if (I2cSetDevice(mcp23xxx_address)) {
+ Mcp23x.device[Mcp23x.chip].interface = MCP23X_I2C;
+ Mcp23x.device[Mcp23x.chip].address = mcp23xxx_address;
+
+ MCP23xWrite(MCP23X08_IOCON, 0x80); // Attempt to set bank mode - this will only work on MCP23017, so its the best way to detect the different chips 23008 vs 23017
+ uint8_t buffer;
+ if (MCP23xValidRead(MCP23X08_IOCON, &buffer)) {
+ if (0x00 == buffer) {
+/*
+ I2cSetActiveFound(mcp23xxx_address, "MCP23008");
+ Mcp23x.device[Mcp23x.chip].type = 1;
+ Mcp23x.device[Mcp23x.chip].pins = 8;
+ Mcp23x.max_devices++;
+*/
+ }
+ else if (0x80 == buffer) {
+ I2cSetActiveFound(mcp23xxx_address, "MCP23017");
+ Mcp23x.device[Mcp23x.chip].type = 2;
+ Mcp23x.device[Mcp23x.chip].pins = 16;
+ MCP23xWrite(MCP23X08_IOCON, 0x00); // Reset bank mode to 0 (MCP23X17_GPINTENB)
+ MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
+ Mcp23x.device[Mcp23x.chip].olata = MCP23xRead(MCP23X17_OLATA);
+ Mcp23x.device[Mcp23x.chip].olatb = MCP23xRead(MCP23X17_OLATB);
+ Mcp23x.max_devices++;
+ }
+ Mcp23x.max_pins += Mcp23x.device[Mcp23x.chip].pins;
+ pins_needed -= Mcp23x.device[Mcp23x.chip].pins;
+ }
+ }
+ if (pins_needed) {
+ mcp23xxx_address++;
+ } else {
+ mcp23xxx_address = MCP23XXX_ADDR_END;
+ }
+ }
+ if (!Mcp23x.max_devices) { return; }
+
+ Mcp23x_gpio_pin = (uint16_t*)calloc(Mcp23x.max_pins, 2);
+ if (!Mcp23x_gpio_pin) { return; }
+
+ if (!MCP23xLoadTemplate()) {
+ AddLog(LOG_LEVEL_INFO, PSTR("MCP: No valid template found")); // Too many GPIO's
+ Mcp23x.max_devices = 0;
+ return;
+ }
+
+ Mcp23x.relay_offset = TasmotaGlobal.devices_present;
+ Mcp23x.relay_max -= UpdateDevicesPresent(Mcp23x.relay_max);
+
+ Mcp23x.button_offset = -1;
+ Mcp23x.switch_offset = -1;
+}
+
+void MCP23xServiceInput(void) {
+ // I found no way to receive interrupts in a consistent manner; noise received at undefined moments - unstable usage
+ // This works with no interrupt
+ uint32_t pin_offset = 0;
+ for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
+ uint32_t gpio = MCP23xRead16(MCP23X17_GPIOA); // Read gpio
+
+// AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("MCP: Chip %d, State %04X"), Mcp23x.chip, gpio);
+
+ uint32_t mask = 1;
+ for (uint32_t pin = 0; pin < Mcp23x.device[Mcp23x.chip].pins; pin++) {
+ uint32_t state = ((gpio & mask) != 0);
+ uint32_t lpin = MCP23xGetPin(pin_offset + pin); // 0 for None, 32 for KEY1, 160 for SWT1, 224 for REL1
+ uint32_t index = lpin & 0x001F; // Max 32 buttons or switches
+ lpin = BGPIO(lpin); // UserSelectablePins number
+ if (GPIO_KEY1 == lpin) {
+ ButtonSetVirtualPinState(Mcp23x.button_offset + index, (state != bitRead(Mcp23x.button_inverted, index)));
+ }
+ else if (GPIO_SWT1 == lpin) {
+ SwitchSetVirtualPinState(Mcp23x.switch_offset + index, state);
+ }
+ mask <<= 1;
+ }
+ pin_offset += Mcp23x.device[Mcp23x.chip].pins;
+ }
+}
+
+void MCP23xPower(void) {
+ power_t rpower = XdrvMailbox.index >> Mcp23x.relay_offset;
+ for (uint32_t index = 0; index < Mcp23x.relay_max; index++) {
+ power_t state = rpower &1;
+ if (MCP23xPinUsed(GPIO_REL1, index)) {
+ uint32_t pin = MCP23xPin(GPIO_REL1, index) & 0x3F; // Fix possible overflow over 63 gpios
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Power pin %d, state %d(%d)"), pin, state, bitRead(Mcp23x.relay_inverted, index));
+
+ MCP23xDigitalWrite(pin, bitRead(Mcp23x.relay_inverted, index) ? !state : state);
+ }
+ rpower >>= 1; // Select next power
+ }
+}
+
+bool MCP23xAddButton(void) {
+ // XdrvMailbox.index = button/switch index
+ if (Mcp23x.button_offset < 0) { Mcp23x.button_offset = XdrvMailbox.index; }
+ uint32_t index = XdrvMailbox.index - Mcp23x.button_offset;
+ if (index >= Mcp23x.button_max) { return false; }
+ XdrvMailbox.index = (MCP23xDigitalRead(MCP23xPin(GPIO_KEY1, index)) != bitRead(Mcp23x.button_inverted, index));
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: AddButton index %d, state %d"), index, XdrvMailbox.index);
+
+ return true;
+}
+
+bool MCP23xAddSwitch(void) {
+ // XdrvMailbox.index = button/switch index
+ if (Mcp23x.switch_offset < 0) { Mcp23x.switch_offset = XdrvMailbox.index; }
+ uint32_t index = XdrvMailbox.index - Mcp23x.switch_offset;
+ if (index >= Mcp23x.switch_max) { return false; }
+ XdrvMailbox.index = MCP23xDigitalRead(MCP23xPin(GPIO_SWT1, index));
+ return true;
+}
+
+/*********************************************************************************************\
+ * Interface
+\*********************************************************************************************/
+
+bool Xdrv67(uint32_t function) {
+// if (!I2cEnabled(XI2C_77) && (SPI_MOSI_MISO != TasmotaGlobal.spi_enabled)) { return false; }
+ if (!I2cEnabled(XI2C_77)) { return false; }
+
+ bool result = false;
+
+ if (FUNC_MODULE_INIT == function) {
+ MCP23xModuleInit();
+ } else if (Mcp23x.max_devices) {
+ switch (function) {
+ case FUNC_EVERY_100_MSECOND:
+ if (Mcp23x.button_max || Mcp23x.switch_max) {
+ MCP23xServiceInput();
+ }
+ break;
+ case FUNC_SET_POWER:
+ MCP23xPower();
+ break;
+ case FUNC_ADD_BUTTON:
+ result = MCP23xAddButton();
+ break;
+ case FUNC_ADD_SWITCH:
+ result = MCP23xAddSwitch();
+ break;
+ }
+ }
+ return result;
+}
+
+#endif // USE_MCP23XXX_DRV
+#endif // USE_I2C or USE_ESP_SPI
From 873567a999534ee7015b87d736e0877d2c23f99a Mon Sep 17 00:00:00 2001
From: Charles
Date: Wed, 1 Mar 2023 09:01:27 +0100
Subject: [PATCH 053/227] fix some errors (#18077)
fix some checksum errors in standard mode
fix format error counting for DATE field
---
lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
index de9d3ef21..7bec941b8 100644
--- a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
+++ b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
@@ -247,6 +247,8 @@ ValueList * TInfo::valueAdd(char * name, char * value, uint8_t checksum, uint8_t
// Time stamped field?
if (horodate && *horodate) {
ts = horodate2Timestamp(horodate);
+ // We don't check horodate (not used) on storage so re calculate checksum without this one
+ checksum = calcChecksum(name,value) ;
}
// Loop thru the node
@@ -275,8 +277,7 @@ ValueList * TInfo::valueAdd(char * name, char * value, uint8_t checksum, uint8_t
if (strlen(me->value) >= lgvalue ) {
// Copy it
strlcpy(me->value, value , lgvalue + 1 );
- // store checksum for future check without horodate
- me->checksum = ts ? calcChecksum(name,value) : checksum ;
+ me->checksum = checksum ;
// That's all
return (me);
} else {
@@ -939,8 +940,11 @@ ValueList * TInfo::checkLine(char * pline)
}
else
{
- _frameformaterror++;
- AddLog(1, PSTR("LibTeleinfo::checkLine frame format error, total=%d"), _frameformaterror);
+ // Specific field not formated has others, don't set as an error
+ if ( strcmp(ptok, "DATE") ) {
+ _frameformaterror++;
+ AddLog(1, PSTR("LibTeleinfo::checkLine frame format error total=%d"), _frameformaterror);
+ }
}
}
// Next char
From 9f308368540c01dbcc235b118cb1b1785d8e479b Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 1 Mar 2023 10:12:47 +0100
Subject: [PATCH 054/227] Add support for multiple MCP23017 as
switch/button/relay
---
CHANGELOG.md | 1 +
tasmota/include/tasmota_template.h | 9 ++++++---
tasmota/language/af_AF.h | 1 +
tasmota/language/bg_BG.h | 1 +
tasmota/language/ca_AD.h | 1 +
tasmota/language/cs_CZ.h | 1 +
tasmota/language/de_DE.h | 1 +
tasmota/language/el_GR.h | 1 +
tasmota/language/en_GB.h | 1 +
tasmota/language/es_ES.h | 1 +
tasmota/language/fr_FR.h | 1 +
tasmota/language/fy_NL.h | 1 +
tasmota/language/he_HE.h | 1 +
tasmota/language/hu_HU.h | 1 +
tasmota/language/it_IT.h | 1 +
tasmota/language/ko_KO.h | 1 +
tasmota/language/nl_NL.h | 1 +
tasmota/language/pl_PL.h | 1 +
tasmota/language/pt_BR.h | 1 +
tasmota/language/pt_PT.h | 1 +
tasmota/language/ro_RO.h | 1 +
tasmota/language/ru_RU.h | 1 +
tasmota/language/sk_SK.h | 1 +
tasmota/language/sv_SE.h | 1 +
tasmota/language/tr_TR.h | 1 +
tasmota/language/uk_UA.h | 1 +
tasmota/language/vi_VN.h | 1 +
tasmota/language/zh_CN.h | 1 +
tasmota/language/zh_TW.h | 1 +
tasmota/tasmota_support/support_features.ino | 4 +++-
.../{xdrv_67_mcp230xx.ino => xdrv_67_mcp23xxx.ino} | 2 +-
tools/decode-status.py | 4 ++--
32 files changed, 40 insertions(+), 7 deletions(-)
rename tasmota/tasmota_xdrv_driver/{xdrv_67_mcp230xx.ino => xdrv_67_mcp23xxx.ino} (99%)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a30fe8116..e294dba68 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file.
- Matter read/write and commands (#18000)
- Matter subscriptions (#18017, #18018)
- Matter multi-fabric (#18019)
+- Support for multiple MCP23017 as switch/button/relay
### Breaking Changed
diff --git a/tasmota/include/tasmota_template.h b/tasmota/include/tasmota_template.h
index aa1f982bf..ce1da3845 100644
--- a/tasmota/include/tasmota_template.h
+++ b/tasmota/include/tasmota_template.h
@@ -206,7 +206,7 @@ enum UserSelectablePins {
GPIO_ME007_TRIG, GPIO_ME007_RX, // ME007 Serial/Trigger interface
GPIO_TUYAMCUBR_TX, GPIO_TUYAMCUBR_RX, // TuyaMCU Bridge
GPIO_BIOPDU_PZEM0XX_TX, GPIO_BIOPDU_PZEM016_RX, GPIO_BIOPDU_BIT, // Biomine BioPDU 625x12
- GPIO_MCP23XXX_INT, // MCP23xxx INT
+ GPIO_MCP23XXX_INT, GPIO_MCP23SXX_CS, // MCP23xxx Int and SPI Chip select
GPIO_SENSOR_END };
// Error as warning to rethink GPIO usage with max 2045
@@ -460,7 +460,7 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_ME007_TRIG "|" D_SENSOR_ME007_RX "|"
D_SENSOR_TUYAMCUBR_TX "|" D_SENSOR_TUYAMCUBR_RX "|"
D_SENSOR_BIOPDU_PZEM0XX_TX "|" D_SENSOR_BIOPDU_PZEM016_RX "|" D_SENSOR_BIOPDU_BIT "|"
- D_SENSOR_MCP23XXX_INT "|"
+ D_SENSOR_MCP23XXX_INT "|" D_SENSOR_MCP23SXX_CS "|"
;
const char kSensorNamesFixed[] PROGMEM =
@@ -468,7 +468,7 @@ const char kSensorNamesFixed[] PROGMEM =
// Max number of GPIOs
#define MAX_MAX31865S 6
-#define MAX_MCP23XXX 4
+#define MAX_MCP23XXX 6
#define MAX_FLOWRATEMETER 2
#define MAX_A4988_MSS 3
#define MAX_WEBCAM_DATA 8
@@ -590,6 +590,9 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#if defined(USE_MCP2515) || defined(USE_CANSNIFFER)
AGPIO(GPIO_MCP2515_CS),
#endif // USE_MCP2515
+#ifdef USE_MCP23XXX_DRV
+ AGPIO(GPIO_MCP23SXX_CS) + MAX_MCP23XXX,
+#endif // USE_MCP23XXX_DRV
#endif // USE_SPI
#if defined(USE_SDCARD) && defined(ESP32)
diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h
index 771d82841..0f5570444 100644
--- a/tasmota/language/af_AF.h
+++ b/tasmota/language/af_AF.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h
index 742aa1f7b..608d08c19 100644
--- a/tasmota/language/bg_BG.h
+++ b/tasmota/language/bg_BG.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h
index 5321a8133..dd67e976e 100644
--- a/tasmota/language/ca_AD.h
+++ b/tasmota/language/ca_AD.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h
index 844d213c5..ae31b8d00 100644
--- a/tasmota/language/cs_CZ.h
+++ b/tasmota/language/cs_CZ.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h
index ece2fcdc1..41685e005 100644
--- a/tasmota/language/de_DE.h
+++ b/tasmota/language/de_DE.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h
index bd2449aaf..e282c1237 100644
--- a/tasmota/language/el_GR.h
+++ b/tasmota/language/el_GR.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h
index 12af992c7..5422de1e7 100644
--- a/tasmota/language/en_GB.h
+++ b/tasmota/language/en_GB.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h
index 313a21120..829e24a65 100644
--- a/tasmota/language/es_ES.h
+++ b/tasmota/language/es_ES.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h
index 852da5b38..72e20c65d 100644
--- a/tasmota/language/fr_FR.h
+++ b/tasmota/language/fr_FR.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "Effet Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h
index 52afc029d..2a15fb8f0 100644
--- a/tasmota/language/fy_NL.h
+++ b/tasmota/language/fy_NL.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h
index e1ee3fc63..7fb3b2406 100644
--- a/tasmota/language/he_HE.h
+++ b/tasmota/language/he_HE.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h
index 702bed300..00f76e44f 100644
--- a/tasmota/language/hu_HU.h
+++ b/tasmota/language/hu_HU.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h
index f6d511e63..6c7661298 100644
--- a/tasmota/language/it_IT.h
+++ b/tasmota/language/it_IT.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "Effetto hall"
#define D_SENSOR_EPD_DATA "EPD - Dati"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx - Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx - CS"
#define D_SENSOR_MCP2515_CS "MCP2515 - CS"
#define D_SENSOR_HRG15_RX "HRG15 - RX"
#define D_SENSOR_HRG15_TX "HRG15 - TX"
diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h
index 4774242e7..7f06bedc5 100644
--- a/tasmota/language/ko_KO.h
+++ b/tasmota/language/ko_KO.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h
index 161d5ee14..be5ef613c 100644
--- a/tasmota/language/nl_NL.h
+++ b/tasmota/language/nl_NL.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h
index 37ced0ef5..d64808a38 100644
--- a/tasmota/language/pl_PL.h
+++ b/tasmota/language/pl_PL.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "Efekt Halla"
#define D_SENSOR_EPD_DATA "EPD Dane"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h
index 13520019a..97dc980c0 100644
--- a/tasmota/language/pt_BR.h
+++ b/tasmota/language/pt_BR.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "Efeito Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h
index a7b967fcf..b77686997 100644
--- a/tasmota/language/pt_PT.h
+++ b/tasmota/language/pt_PT.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "Efeito Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h
index 5b73135e6..f210b5c68 100644
--- a/tasmota/language/ro_RO.h
+++ b/tasmota/language/ro_RO.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h
index e4a3b62bb..75dfe0002 100644
--- a/tasmota/language/ru_RU.h
+++ b/tasmota/language/ru_RU.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h
index b825a793b..b97fddb6a 100644
--- a/tasmota/language/sk_SK.h
+++ b/tasmota/language/sk_SK.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h
index 61adf33c3..d40650bd5 100644
--- a/tasmota/language/sv_SE.h
+++ b/tasmota/language/sv_SE.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h
index 924b1dc27..e74f6c144 100644
--- a/tasmota/language/tr_TR.h
+++ b/tasmota/language/tr_TR.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h
index 6ff362dc2..e06801fc1 100644
--- a/tasmota/language/uk_UA.h
+++ b/tasmota/language/uk_UA.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h
index 57b6738d8..b0a9ac266 100644
--- a/tasmota/language/vi_VN.h
+++ b/tasmota/language/vi_VN.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h
index 8c6f60420..d1d5918b1 100644
--- a/tasmota/language/zh_CN.h
+++ b/tasmota/language/zh_CN.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h
index cf2ac7d68..6078ee069 100644
--- a/tasmota/language/zh_TW.h
+++ b/tasmota/language/zh_TW.h
@@ -896,6 +896,7 @@
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
+#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
diff --git a/tasmota/tasmota_support/support_features.ino b/tasmota/tasmota_support/support_features.ino
index 72ba87771..e1f5759b2 100644
--- a/tasmota/tasmota_support/support_features.ino
+++ b/tasmota/tasmota_support/support_features.ino
@@ -876,7 +876,9 @@ void ResponseAppendFeatures(void)
#if defined(USE_ENERGY_SENSOR) && defined(USE_BIOPDU)
feature9 |= 0x00010000; // xnrg_24_biopdu.ino
#endif
-// feature9 |= 0x00020000;
+#if (defined(USE_I2C) || defined(USE_SPI)) && defined(USE_MCP23XXX_DRV)
+ feature9 |= 0x00020000; // xdrv_67_mcp23xxx.ino
+#endif
// feature9 |= 0x00040000;
// feature9 |= 0x00080000;
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp230xx.ino b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
similarity index 99%
rename from tasmota/tasmota_xdrv_driver/xdrv_67_mcp230xx.ino
rename to tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
index 2717a933c..5a2a263ac 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp230xx.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
@@ -1,5 +1,5 @@
/*
- xdrv_67_mcp230xx.ino - MCP23008/MCP23017 GPIO Expander support for Tasmota
+ xdrv_67_mcp23xxx.ino - MCP23008/MCP23017/MCP23S17 GPIO Expander support for Tasmota
SPDX-FileCopyrightText: 2023 Theo Arends
diff --git a/tools/decode-status.py b/tools/decode-status.py
index 65c5c9a5f..7d6751dd5 100755
--- a/tools/decode-status.py
+++ b/tools/decode-status.py
@@ -293,7 +293,7 @@ a_features = [[
"USE_MODBUS_ENERGY","USE_SHELLY_PRO","USE_DALI","USE_BP1658CJ",
"USE_DINGTIAN_RELAY","USE_HMC5883L","USE_LD2410","USE_ME007",
"USE_DISPLAY_TM1650","USE_PCA9632","USE_TUYAMCUBR","USE_SEN5X",
- "USE_BIOPDU","","","",
+ "USE_BIOPDU","USE_MCP23XXX_DRV","","",
"","","","",
"","","","",
"","","",""
@@ -324,7 +324,7 @@ else:
obj = json.load(fp)
def StartDecode():
- print ("\n*** decode-status.py v12.3.1.6 by Theo Arends and Jacek Ziolkowski ***")
+ print ("\n*** decode-status.py v12.4.0.1 by Theo Arends and Jacek Ziolkowski ***")
# print("Decoding\n{}".format(obj))
From 63408f3a7d607e850875f223b63f1827f90b473d Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 1 Mar 2023 10:58:02 +0100
Subject: [PATCH 055/227] Add NTP time request from gateway (#17984)
---
CHANGELOG.md | 1 +
RELEASENOTES.md | 2 ++
tasmota/tasmota_support/support_wifi.ino | 29 ++++++++++++------------
3 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e294dba68..9e0eeaeeb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ All notable changes to this project will be documented in this file.
- Matter subscriptions (#18017, #18018)
- Matter multi-fabric (#18019)
- Support for multiple MCP23017 as switch/button/relay
+- NTP time request from gateway (#17984)
### Breaking Changed
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 7313af172..d25d6ba87 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -112,6 +112,8 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
## Changelog v12.4.0.1
### Added
+- Support for multiple MCP23017 as switch/button/relay
+- NTP time request from gateway [#17984](https://github.com/arendst/Tasmota/issues/17984)
### Breaking Changed
diff --git a/tasmota/tasmota_support/support_wifi.ino b/tasmota/tasmota_support/support_wifi.ino
index fe5b8fb0e..084d55bb5 100644
--- a/tasmota/tasmota_support/support_wifi.ino
+++ b/tasmota/tasmota_support/support_wifi.ino
@@ -461,35 +461,35 @@ void WifiSetState(uint8_t state)
/*****************************************************************************************************\
* IP detection revised for full IPv4 / IPv6 support
- *
+ *
* In general, each interface (Wifi/Eth) can have 1x IPv4 and
* 2x IPv6 (Global routable address and Link-Local starting witn fe80:...)
- *
+ *
* We always use an IPv4 address if one is assigned, and revert to
* IPv6 only on networks that are v6 only.
* Ethernet calls can be safely used even if the USE_ETHERNET is not enabled
- *
+ *
* New APIs:
* - general form is:
* `bool XXXGetIPYYY(IPAddress*)` returns `true` if the address exists and copies the address
* if the pointer is non-null.
* `bool XXXHasIPYYY()` same as above but only returns `true` or `false`
* `String XXXGetIPYYYStr()` returns the IP as a `String` or empty `String` if none
- *
+ *
* `XXX` can be `Wifi` or `Eth`
* `YYY` can be `` for any address, `v6` for IPv6 global address or `v6LinkLocal` for Link-local
- *
+ *
* - Legacy `Wifi.localIP()` and `ETH.localIP()` always return IPv4 and nothing on IPv6 only networks
*
* - v4/v6:
* `WifiGetIP`, `WifiGetIPStr`, `WifiHasIP`: get preferred v4/v6 address for Wifi
* `EthernetGetIP`, `EthernetGetIPStr`, `EthernetHasIP`: get preferred v4/v6 for Ethernet
- *
+ *
* - Main IP to be used dual stack v4/v6
* `hasIP`, `IPGetListeningAddress`, `IPGetListeningAddressStr`: any IP to listen to for Web Server
* IPv4 is always preferred, and Eth is preferred over Wifi.
* `IPForUrl`: converts v4/v6 to use in URL, enclosing v6 in []
- *
+ *
* - v6 only:
* `WifiGetIPv6`, `WifiGetIPv6Str`, `WifiHasIPv6`
* `WifiGetIPv6LinkLocal`, `WifiGetIPv6LinkLocalStr`
@@ -499,7 +499,7 @@ void WifiSetState(uint8_t state)
* - v4 only:
* `WifiGetIPv4`, `WifiGetIPv4Str`, `WifiHasIPv4`
* `EthernetGetIPv4`, `EthernetGetIPv4Str`, `EthernetHasIPv4`
- *
+ *
* - DNS reporting actual values used (not the Settings):
* `DNSGetIP(n)`, `DNSGetIPStr(n)` with n=`0`/`1` (same dns for Wifi and Eth)
\*****************************************************************************************************/
@@ -648,7 +648,7 @@ String DNSGetIPStr(uint32_t idx)
return DNSGetIP(&ip, idx) ? ip.toString() : String(F("0.0.0.0"));
}
-//
+//
#include "lwip/dns.h"
void WifiDumpAddressesIPv6(void)
{
@@ -1254,13 +1254,14 @@ uint64_t WifiGetNtp(void) {
IPAddress time_server_ip;
- char fallback_ntp_server[16];
- snprintf_P(fallback_ntp_server, sizeof(fallback_ntp_server), PSTR("%d.pool.ntp.org"), random(0,3));
+ char fallback_ntp_server[2][32];
+ ext_snprintf_P(fallback_ntp_server[0], sizeof(fallback_ntp_server[0]), PSTR("%_I"), Settings->ipv4_address[1]); // #17984
+ ext_snprintf_P(fallback_ntp_server[1], sizeof(fallback_ntp_server[1]), PSTR("%d.pool.ntp.org"), random(0,3));
char* ntp_server;
- for (uint32_t i = 0; i <= MAX_NTP_SERVERS; i++) {
- if (ntp_server_id > MAX_NTP_SERVERS) { ntp_server_id = 0; }
- ntp_server = (ntp_server_id < MAX_NTP_SERVERS) ? SettingsText(SET_NTPSERVER1 + ntp_server_id) : fallback_ntp_server;
+ for (uint32_t i = 0; i < MAX_NTP_SERVERS +2; i++) {
+ if (ntp_server_id >= MAX_NTP_SERVERS +2) { ntp_server_id = 0; }
+ ntp_server = (ntp_server_id < MAX_NTP_SERVERS) ? SettingsText(SET_NTPSERVER1 + ntp_server_id) : fallback_ntp_server[ntp_server_id - MAX_NTP_SERVERS];
if (strlen(ntp_server)) {
break;
}
From 159d1ae3126153f7dacef26a05880e147c84857a Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 1 Mar 2023 16:52:34 +0100
Subject: [PATCH 056/227] Breaking change Shelly Pro 4PM
- Add support for multiple MCP23017/MCP23S17 as switch/button/relay
- Breaking change Shelly Pro 4PM using standard MCP23xxx driver
---
CHANGELOG.md | 3 +-
RELEASENOTES.md | 3 +-
.../include/tasmota_configurations_ESP32.h | 2 +
.../tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino | 158 ++++--
.../xdrv_88_esp32_shelly_pro.ino | 279 +---------
.../xdrv_88_esp32_shelly_pro_v2.ino | 521 ++++++++++++++++++
6 files changed, 642 insertions(+), 324 deletions(-)
create mode 100644 tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro_v2.ino
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9e0eeaeeb..b5aab9494 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,10 +8,11 @@ All notable changes to this project will be documented in this file.
- Matter read/write and commands (#18000)
- Matter subscriptions (#18017, #18018)
- Matter multi-fabric (#18019)
-- Support for multiple MCP23017 as switch/button/relay
+- Support for multiple MCP23017/MCP23S17 as switch/button/relay
- NTP time request from gateway (#17984)
### Breaking Changed
+- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
### Changed
- ADC Range oversample from 2 to 32 (#17975)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index d25d6ba87..a2abd76b2 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -112,10 +112,11 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
## Changelog v12.4.0.1
### Added
-- Support for multiple MCP23017 as switch/button/relay
+- Support for multiple MCP23017/MCP23S17 as switch/button/relay
- NTP time request from gateway [#17984](https://github.com/arendst/Tasmota/issues/17984)
### Breaking Changed
+- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
### Changed
- ESP32 Framework (Core) from v2.0.6 to v2.0.7
diff --git a/tasmota/include/tasmota_configurations_ESP32.h b/tasmota/include/tasmota_configurations_ESP32.h
index e6ba3e188..c351f1f01 100644
--- a/tasmota/include/tasmota_configurations_ESP32.h
+++ b/tasmota/include/tasmota_configurations_ESP32.h
@@ -353,6 +353,7 @@
#define USE_ENERGY_SENSOR // Add energy to support Shelly Pro 4PM display (+38k code)
#define USE_ADE7953
+#define USE_MCP23XXX_DRV
#define USE_SHELLY_PRO
@@ -664,6 +665,7 @@
//#define USE_RC522 // Add support for MFRC522 13.56Mhz Rfid reader (+6k code)
//#define USE_MCP2515 // Add support for can bus using MCP2515 (+7k code)
//#define USE_CANSNIFFER // Add support for can bus sniffer using MCP2515 (+5k code)
+#define USE_MCP23XXX_DRV
#define USE_SHELLY_PRO // Add support for Shelly Pro
#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
index 5a2a263ac..a120ae5bf 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
@@ -6,8 +6,7 @@
SPDX-License-Identifier: GPL-3.0-only
*/
-#ifdef USE_I2C
-//#if defined(USE_I2C) || defined(USE_SPI)
+#if defined(USE_I2C) || defined(USE_SPI)
#ifdef USE_MCP23XXX_DRV
/*********************************************************************************************\
* MCP23008/17 - I2C GPIO Expander to be used as virtual button/switch/relay only
@@ -17,11 +16,11 @@
*
* I2C Address: 0x20 - 0x26 (0x27 is not supported)
*
- * The goal of the driver is to provide a sequential list of pins configured like Tasmota template
+ * The goal of the driver is to provide a sequential list of pins configured as Tasmota template
* and handle any input and output as configured GPIOs.
*
* Restrictions:
- * - Only MCP23017 (=I2C)
+ * - Supports MCP23017 (=I2C) and MCP23S17 (=SPI)
* - Max support for 28 switches (input), 32 buttons (input), 32 relays (output)
*
* Supported template fields:
@@ -45,6 +44,9 @@
* - a script like: -y{"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
* - file called mcp23x.dat with contents: {"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
*
+ * S3 S2 B2 B3 B1 S1 R1 R4 R2 R3 S4
+ * {"NAME":"MCP23S17 Shelly Pro 4PM","GPIO":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]}
+ *
* Inverted relays and buttons Ri8 Ri7 Ri6 Ri5 Ri4 Ri3 Ri2 Ri1 B1 B2 B3 B4 B5 B6 B7 B8
* {"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
*
@@ -156,15 +158,6 @@ uint16_t *Mcp23x_gpio_pin = nullptr;
* MCP23x17 - SPI and I2C
\*********************************************************************************************/
-void MCP23xDumpRegs(void) {
- uint8_t data[22];
- for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
- I2cReadBuffer(Mcp23x.device[Mcp23x.chip].address, 0, data, 22);
- AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Address %d, Regs %22_H"), Mcp23x.device[Mcp23x.chip].address, data);
- }
-}
-
-/*
#ifdef USE_SPI
void MCP23xEnable(void) {
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
@@ -176,11 +169,33 @@ void MCP23xDisable(void) {
digitalWrite(Mcp23x.device[Mcp23x.chip].pin_cs, 1);
}
#endif
-*/
+
+void MCP23xDumpRegs(void) {
+ uint8_t data[22];
+ for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
+#ifdef USE_SPI
+ if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
+ MCP23xEnable();
+ SPI.transfer(Mcp23x.device[Mcp23x.chip].address | 1);
+ SPI.transfer(0);
+ for (uint32_t i = 0; i < sizeof(data); i++) {
+ data[i] = SPI.transfer(0xFF);
+ }
+ MCP23xDisable();
+ }
+#endif
+#ifdef USE_I2C
+ if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
+ I2cReadBuffer(Mcp23x.device[Mcp23x.chip].address, 0, data, sizeof(data));
+ }
+#endif
+ AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Intf %d, Address %02X, Regs %*_H"), Mcp23x.device[Mcp23x.chip].interface, Mcp23x.device[Mcp23x.chip].address, sizeof(data), data);
+ }
+}
+
uint32_t MCP23xRead16(uint8_t reg) {
// Read 16-bit registers: (regb << 8) | rega
uint32_t value = 0;
-/*
#ifdef USE_SPI
if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
MCP23xEnable();
@@ -191,7 +206,6 @@ uint32_t MCP23xRead16(uint8_t reg) {
MCP23xDisable();
}
#endif
-*/
#ifdef USE_I2C
if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
value = I2cRead16LE(Mcp23x.device[Mcp23x.chip].address, reg);
@@ -202,7 +216,6 @@ uint32_t MCP23xRead16(uint8_t reg) {
uint32_t MCP23xRead(uint8_t reg) {
uint32_t value = 0;
-/*
#ifdef USE_SPI
if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
MCP23xEnable();
@@ -212,7 +225,6 @@ uint32_t MCP23xRead(uint8_t reg) {
MCP23xDisable();
}
#endif
-*/
#ifdef USE_I2C
if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
value = I2cRead8(Mcp23x.device[Mcp23x.chip].address, reg);
@@ -222,7 +234,6 @@ uint32_t MCP23xRead(uint8_t reg) {
}
bool MCP23xValidRead(uint8_t reg, uint8_t *data) {
-/*
#ifdef USE_SPI
if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
MCP23xEnable();
@@ -233,15 +244,15 @@ bool MCP23xValidRead(uint8_t reg, uint8_t *data) {
return true;
}
#endif
-*/
+#ifdef USE_I2C
if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
return I2cValidRead8(data, Mcp23x.device[Mcp23x.chip].address, reg);
}
return false;
+#endif
}
void MCP23xWrite(uint8_t reg, uint8_t value) {
-/*
#ifdef USE_SPI
if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
MCP23xEnable();
@@ -251,7 +262,6 @@ void MCP23xWrite(uint8_t reg, uint8_t value) {
MCP23xDisable();
}
#endif
-*/
#ifdef USE_I2C
if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
I2cWrite8(Mcp23x.device[Mcp23x.chip].address, reg, value);
@@ -546,44 +556,71 @@ void MCP23xModuleInit(void) {
return;
}
- uint8_t mcp23xxx_address = MCP23XXX_ADDR_START;
- while ((Mcp23x.max_devices < MCP23XXX_MAX_DEVICES) && (mcp23xxx_address < MCP23XXX_ADDR_END)) {
- Mcp23x.chip = Mcp23x.max_devices;
- if (I2cSetDevice(mcp23xxx_address)) {
- Mcp23x.device[Mcp23x.chip].interface = MCP23X_I2C;
- Mcp23x.device[Mcp23x.chip].address = mcp23xxx_address;
+#ifdef USE_SPI
+ if ((SPI_MOSI_MISO == TasmotaGlobal.spi_enabled) && PinUsed(GPIO_MCP23SXX_CS, GPIO_ANY)) {
+ SPI.begin(Pin(GPIO_SPI_CLK), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_MOSI), -1);
+ while ((Mcp23x.max_devices < MCP23XXX_MAX_DEVICES) && PinUsed(GPIO_MCP23SXX_CS, Mcp23x.max_devices)) {
+ Mcp23x.device[Mcp23x.chip].pin_cs = Pin(GPIO_MCP23SXX_CS, Mcp23x.max_devices);
+ digitalWrite(Mcp23x.device[Mcp23x.chip].pin_cs, 1);
+ pinMode(Mcp23x.device[Mcp23x.chip].pin_cs, OUTPUT);
+ Mcp23x.device[Mcp23x.chip].interface = MCP23X_SPI;
+ Mcp23x.device[Mcp23x.chip].address = MCP23XXX_ADDR_START << 1;
+ AddLog(LOG_LEVEL_INFO, PSTR("SPI: MCP23S17 found"));
+ Mcp23x.device[Mcp23x.chip].type = 3;
+ Mcp23x.device[Mcp23x.chip].pins = 16;
+ MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
+ Mcp23x.device[Mcp23x.chip].olata = MCP23xRead(MCP23X17_OLATA);
+ Mcp23x.device[Mcp23x.chip].olatb = MCP23xRead(MCP23X17_OLATB);
+ Mcp23x.max_devices++;
- MCP23xWrite(MCP23X08_IOCON, 0x80); // Attempt to set bank mode - this will only work on MCP23017, so its the best way to detect the different chips 23008 vs 23017
- uint8_t buffer;
- if (MCP23xValidRead(MCP23X08_IOCON, &buffer)) {
- if (0x00 == buffer) {
-/*
- I2cSetActiveFound(mcp23xxx_address, "MCP23008");
- Mcp23x.device[Mcp23x.chip].type = 1;
- Mcp23x.device[Mcp23x.chip].pins = 8;
- Mcp23x.max_devices++;
-*/
+ Mcp23x.max_pins += Mcp23x.device[Mcp23x.chip].pins;
+ pins_needed -= Mcp23x.device[Mcp23x.chip].pins;
+ if (!pins_needed) { break; }
+ }
+ } else {
+#endif // USE_SPI
+ uint8_t mcp23xxx_address = MCP23XXX_ADDR_START;
+ while ((Mcp23x.max_devices < MCP23XXX_MAX_DEVICES) && (mcp23xxx_address < MCP23XXX_ADDR_END)) {
+ Mcp23x.chip = Mcp23x.max_devices;
+ if (I2cSetDevice(mcp23xxx_address)) {
+ Mcp23x.device[Mcp23x.chip].interface = MCP23X_I2C;
+ Mcp23x.device[Mcp23x.chip].address = mcp23xxx_address;
+
+ MCP23xWrite(MCP23X08_IOCON, 0x80); // Attempt to set bank mode - this will only work on MCP23017, so its the best way to detect the different chips 23008 vs 23017
+ uint8_t buffer;
+ if (MCP23xValidRead(MCP23X08_IOCON, &buffer)) {
+ if (0x00 == buffer) {
+ /*
+ I2cSetActiveFound(mcp23xxx_address, "MCP23008");
+ Mcp23x.device[Mcp23x.chip].type = 1;
+ Mcp23x.device[Mcp23x.chip].pins = 8;
+ Mcp23x.max_devices++;
+ */
+ }
+ else if (0x80 == buffer) {
+ I2cSetActiveFound(mcp23xxx_address, "MCP23017");
+ Mcp23x.device[Mcp23x.chip].type = 2;
+ Mcp23x.device[Mcp23x.chip].pins = 16;
+ MCP23xWrite(MCP23X08_IOCON, 0x00); // Reset bank mode to 0 (MCP23X17_GPINTENB)
+ MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
+ Mcp23x.device[Mcp23x.chip].olata = MCP23xRead(MCP23X17_OLATA);
+ Mcp23x.device[Mcp23x.chip].olatb = MCP23xRead(MCP23X17_OLATB);
+ Mcp23x.max_devices++;
+ }
+ Mcp23x.max_pins += Mcp23x.device[Mcp23x.chip].pins;
+ pins_needed -= Mcp23x.device[Mcp23x.chip].pins;
}
- else if (0x80 == buffer) {
- I2cSetActiveFound(mcp23xxx_address, "MCP23017");
- Mcp23x.device[Mcp23x.chip].type = 2;
- Mcp23x.device[Mcp23x.chip].pins = 16;
- MCP23xWrite(MCP23X08_IOCON, 0x00); // Reset bank mode to 0 (MCP23X17_GPINTENB)
- MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
- Mcp23x.device[Mcp23x.chip].olata = MCP23xRead(MCP23X17_OLATA);
- Mcp23x.device[Mcp23x.chip].olatb = MCP23xRead(MCP23X17_OLATB);
- Mcp23x.max_devices++;
- }
- Mcp23x.max_pins += Mcp23x.device[Mcp23x.chip].pins;
- pins_needed -= Mcp23x.device[Mcp23x.chip].pins;
+ }
+ if (pins_needed) {
+ mcp23xxx_address++;
+ } else {
+ mcp23xxx_address = MCP23XXX_ADDR_END;
}
}
- if (pins_needed) {
- mcp23xxx_address++;
- } else {
- mcp23xxx_address = MCP23XXX_ADDR_END;
- }
+#ifdef USE_SPI
}
+#endif // USE_SPI
+
if (!Mcp23x.max_devices) { return; }
Mcp23x_gpio_pin = (uint16_t*)calloc(Mcp23x.max_pins, 2);
@@ -670,8 +707,15 @@ bool MCP23xAddSwitch(void) {
\*********************************************************************************************/
bool Xdrv67(uint32_t function) {
-// if (!I2cEnabled(XI2C_77) && (SPI_MOSI_MISO != TasmotaGlobal.spi_enabled)) { return false; }
- if (!I2cEnabled(XI2C_77)) { return false; }
+ bool spi_enabled = false;
+ bool i2c_enabled = false;
+#ifdef USE_SPI
+ spi_enabled = (SPI_MOSI_MISO == TasmotaGlobal.spi_enabled);
+#endif // USE_SPI
+#ifdef USE_I2C
+ i2c_enabled = I2cEnabled(XI2C_77);
+#endif // USE_I2C
+ if (!spi_enabled && !i2c_enabled) { return false; }
bool result = false;
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
index 05ca7aa3f..94241e23d 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
@@ -19,6 +19,7 @@
#ifdef ESP32
#ifdef USE_SPI
+#ifdef USE_MCP23XXX_DRV
#ifdef USE_SHELLY_PRO
/*********************************************************************************************\
* Shelly Pro support
@@ -27,7 +28,7 @@
* {"NAME":"Shelly Pro 1PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3459,0,0,32,4736,0,160,0],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350"}
* {"NAME":"Shelly Pro 2","GPIO":[0,1,0,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
* {"NAME":"Shelly Pro 2PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,9569,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3460,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
- * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,768,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,0,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350"}
+ * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,10272,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,0,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;rule3 on file#mcp23x.dat do {\"NAME\":\"MCP23S17 Shelly Pro 4PM\",\"GPIO\":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]} endon"}
*
* Shelly Pro 1/2 uses SPI to control one 74HC595 for relays/leds and one ADE7953 (1PM) or two ADE7953 (2PM) for energy monitoring
* Shelly Pro 4 uses an SPI to control one MCP23S17 for buttons/switches/relays/leds and two ADE7953 for energy monitoring and a second SPI for the display
@@ -37,9 +38,6 @@
#define XDRV_88 88
#define SHELLY_PRO_PIN_LAN8720_RESET 5
-#define SHELLY_PRO_4_PIN_SPI_CS 16
-#define SHELLY_PRO_4_PIN_MCP23S17_INT 35
-#define SHELLY_PRO_4_MCP23S17_ADDRESS 0x40
struct SPro {
uint32_t last_update;
@@ -47,146 +45,16 @@ struct SPro {
int8_t switch_offset;
int8_t button_offset;
uint8_t pin_register_cs;
- uint8_t pin_mcp23s17_int;
uint8_t ledlink;
uint8_t power;
bool init_done;
uint8_t detected;
} SPro;
-/*********************************************************************************************\
- * Shelly Pro MCP23S17 support
-\*********************************************************************************************/
-
-enum SP4MCP23X17GPIORegisters {
- // A side
- SP4_MCP23S17_IODIRA = 0x00,
- SP4_MCP23S17_IPOLA = 0x02,
- SP4_MCP23S17_GPINTENA = 0x04,
- SP4_MCP23S17_DEFVALA = 0x06,
- SP4_MCP23S17_INTCONA = 0x08,
- SP4_MCP23S17_IOCONA = 0x0A,
- SP4_MCP23S17_GPPUA = 0x0C,
- SP4_MCP23S17_INTFA = 0x0E,
- SP4_MCP23S17_INTCAPA = 0x10,
- SP4_MCP23S17_GPIOA = 0x12,
- SP4_MCP23S17_OLATA = 0x14,
- // B side
- SP4_MCP23S17_IODIRB = 0x01,
- SP4_MCP23S17_IPOLB = 0x03,
- SP4_MCP23S17_GPINTENB = 0x05,
- SP4_MCP23S17_DEFVALB = 0x07,
- SP4_MCP23S17_INTCONB = 0x09,
- SP4_MCP23S17_IOCONB = 0x0B,
- SP4_MCP23S17_GPPUB = 0x0D,
- SP4_MCP23S17_INTFB = 0x0F,
- SP4_MCP23S17_INTCAPB = 0x11,
- SP4_MCP23S17_GPIOB = 0x13,
- SP4_MCP23S17_OLATB = 0x15,
-};
-
-uint8_t sp4_mcp23s17_olata = 0;
-uint8_t sp4_mcp23s17_olatb = 0;
-
-bool sp4_spi_busy;
-
-void SP4Mcp23S17Enable(void) {
- sp4_spi_busy = true;
- SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
- digitalWrite(SPro.pin_register_cs, 0);
-}
-
-void SP4Mcp23S17Disable(void) {
- SPI.endTransaction();
- digitalWrite(SPro.pin_register_cs, 1);
- sp4_spi_busy = false;
-}
-
-uint32_t SP4Mcp23S17Read16(uint8_t reg) {
- // Read 16-bit registers: (regb << 8) | rega
- SP4Mcp23S17Enable();
- SPI.transfer(SHELLY_PRO_4_MCP23S17_ADDRESS | 1);
- SPI.transfer(reg);
- uint32_t value = SPI.transfer(0xFF); // RegA
- value |= (SPI.transfer(0xFF) << 8); // RegB
- SP4Mcp23S17Disable();
- return value;
-}
-
-uint32_t SP4Mcp23S17Read(uint8_t reg) {
- SP4Mcp23S17Enable();
- SPI.transfer(SHELLY_PRO_4_MCP23S17_ADDRESS | 1);
- SPI.transfer(reg);
- uint32_t value = SPI.transfer(0xFF);
- SP4Mcp23S17Disable();
- return value;
-}
-
-void SP4Mcp23S17Write(uint8_t reg, uint8_t value) {
- SP4Mcp23S17Enable();
- SPI.transfer(SHELLY_PRO_4_MCP23S17_ADDRESS);
- SPI.transfer(reg);
- SPI.transfer(value);
- SP4Mcp23S17Disable();
-}
-
-void SP4Mcp23S17Update(uint8_t pin, bool pin_value, uint8_t reg_addr) {
- uint8_t bit = pin % 8;
- uint8_t reg_value = 0;
- if (reg_addr == SP4_MCP23S17_OLATA) {
- reg_value = sp4_mcp23s17_olata;
- } else if (reg_addr == SP4_MCP23S17_OLATB) {
- reg_value = sp4_mcp23s17_olatb;
- } else {
- reg_value = SP4Mcp23S17Read(reg_addr);
- }
- if (pin_value) {
- reg_value |= 1 << bit;
- } else {
- reg_value &= ~(1 << bit);
- }
- SP4Mcp23S17Write(reg_addr, reg_value);
- if (reg_addr == SP4_MCP23S17_OLATA) {
- sp4_mcp23s17_olata = reg_value;
- } else if (reg_addr == SP4_MCP23S17_OLATB) {
- sp4_mcp23s17_olatb = reg_value;
- }
-}
-
-void SP4Mcp23S17PinMode(uint8_t pin, uint8_t flags) {
- uint8_t iodir = pin < 8 ? SP4_MCP23S17_IODIRA : SP4_MCP23S17_IODIRB;
- uint8_t gppu = pin < 8 ? SP4_MCP23S17_GPPUA : SP4_MCP23S17_GPPUB;
- if (flags == INPUT) {
- SP4Mcp23S17Update(pin, true, iodir);
- SP4Mcp23S17Update(pin, false, gppu);
- } else if (flags == (INPUT | PULLUP)) {
- SP4Mcp23S17Update(pin, true, iodir);
- SP4Mcp23S17Update(pin, true, gppu);
- } else if (flags == OUTPUT) {
- SP4Mcp23S17Update(pin, false, iodir);
- }
-}
-
-bool SP4Mcp23S17DigitalRead(uint8_t pin) {
- uint8_t bit = pin % 8;
- uint8_t reg_addr = pin < 8 ? SP4_MCP23S17_GPIOA : SP4_MCP23S17_GPIOB;
- uint8_t value = SP4Mcp23S17Read(reg_addr);
- return value & (1 << bit);
-}
-
-void SP4Mcp23S17DigitalWrite(uint8_t pin, bool value) {
- uint8_t reg_addr = pin < 8 ? SP4_MCP23S17_OLATA : SP4_MCP23S17_OLATB;
- SP4Mcp23S17Update(pin, value, reg_addr);
-}
-
/*********************************************************************************************\
* Shelly Pro 4
\*********************************************************************************************/
-const uint8_t sp4_relay_pin[] = { 8, 13, 14, 12 };
-const uint8_t sp4_switch_pin[] = { 6, 1, 0, 15 };
-const uint8_t sp4_button_pin[] = { 5, 2, 3 };
-
void ShellyPro4Init(void) {
/*
Shelly Pro 4PM MCP23S17 registers
@@ -207,97 +75,13 @@ void ShellyPro4Init(void) {
bit 14 = output - Relay O3
bit 15 = input, inverted - Switch4
*/
- SP4Mcp23S17Write(SP4_MCP23S17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
- SP4Mcp23S17Write(SP4_MCP23S17_GPINTENA, 0x6F); // Enable interrupt on change
- SP4Mcp23S17Write(SP4_MCP23S17_GPINTENB, 0x80); // Enable interrupt on change
-
- // Read current output register state
- sp4_mcp23s17_olata = SP4Mcp23S17Read(SP4_MCP23S17_OLATA);
- sp4_mcp23s17_olatb = SP4Mcp23S17Read(SP4_MCP23S17_OLATB);
-
- SP4Mcp23S17PinMode(4, OUTPUT); // Reset display, ADE7943
- SP4Mcp23S17DigitalWrite(4, 1);
-
- for (uint32_t i = 0; i < 3; i++) {
- SP4Mcp23S17PinMode(sp4_button_pin[i], INPUT); // Button Up, Down, OK (RC with 10k to 3V3 and button shorting C)
- }
- SPro.button_offset = -1;
-
- for (uint32_t i = 0; i < 4; i++) {
- SP4Mcp23S17PinMode(sp4_switch_pin[i], INPUT); // Switch1..4
- SP4Mcp23S17PinMode(sp4_relay_pin[i], OUTPUT); // Relay O1..O4
- }
- SPro.switch_offset = -1;
-
- // Read current input register state
- SPro.input_state = SP4Mcp23S17Read16(SP4_MCP23S17_GPIOA) & 0x806F; // Read gpio and clear interrupt
- attachInterrupt(SPro.pin_mcp23s17_int, ShellyProUpdateIsr, CHANGE);
}
void ShellyPro4Reset(void) {
- SP4Mcp23S17DigitalWrite(4, 0); // Reset pin display, ADE7953
+ MCP23xPinMode(4, OUTPUT);
+ MCP23xDigitalWrite(4, 0); // Reset pin display, ADE7953
delay(1); // To initiate a hardware reset, this pin must be brought low for a minimum of 10 μs.
- SP4Mcp23S17DigitalWrite(4, 1);
-}
-
-bool ShellyProAddButton(void) {
- if (SPro.detected != 4) { return false; } // Only support Shelly Pro 4
- if (SPro.button_offset < 0) { SPro.button_offset = XdrvMailbox.index; }
- uint32_t index = XdrvMailbox.index - SPro.button_offset;
- if (index > 2) { return false; } // Support three buttons
-/*
- uint32_t state = bitRead(SPro.input_state, sp4_button_pin[index]); // 1 on power on and restart
- AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: Button default state %d"), state);
- XdrvMailbox.index = state;
-*/
- XdrvMailbox.index = 1; // 1 on power on and restart
- return true;
-}
-
-bool ShellyProAddSwitch(void) {
- if (SPro.detected != 4) { return false; } // Only support Shelly Pro 4
- if (SPro.switch_offset < 0) { SPro.switch_offset = XdrvMailbox.index; }
- uint32_t index = XdrvMailbox.index - SPro.switch_offset;
- if (index > 3) { return false; } // Support four switches
-/*
- uint32_t state = bitRead(SPro.input_state, sp4_switch_pin[index]); // 0 on power on and restart
- AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: Switch default state %d"), state);
- XdrvMailbox.index = state;
-*/
- XdrvMailbox.index = 0; // 0 on power on and restart
- return true;
-}
-
-void ShellyProUpdateIsr(void) {
- /*
- The goal if this function is to minimize SPI and SetVirtualPinState calls
- */
- uint32_t input_state = SP4Mcp23S17Read16(SP4_MCP23S17_INTCAPA); // Read intcap and clear interrupt
- input_state &= 0x806F; // Only test input bits
-
-// AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Input from %04X to %04X"), SPro.input_state, input_state);
-
- if (TasmotaGlobal.uptime < 3) { return; } // Flush interrupt for 3 seconds after poweron
-
- uint32_t mask = 1;
- for (uint32_t j = 0; j < 16; j++) {
- if ((input_state & mask) != (SPro.input_state & mask)) {
- uint32_t state = (input_state >> j) &1;
-
-// AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Change pin %d to %d"), j, state);
-
- for (uint32_t i = 0; i < 4; i++) {
- if (j == sp4_switch_pin[i]) {
- SwitchSetVirtualPinState(SPro.switch_offset +i, state);
- }
- else if ((i < 3) && (j == sp4_button_pin[i])) {
- ButtonSetVirtualPinState(SPro.button_offset +i, state);
- }
- }
- }
- mask <<= 1;
- }
- SPro.input_state = input_state;
+ MCP23xDigitalWrite(4, 1);
}
bool ShellyProButton(void) {
@@ -357,7 +141,7 @@ void ShellyProUpdate(void) {
void ShellyProPreInit(void) {
if ((SPI_MOSI_MISO == TasmotaGlobal.spi_enabled) &&
- PinUsed(GPIO_SPI_CS) && // 74HC595 rclk / MCP23S17
+ (PinUsed(GPIO_SPI_CS) || PinUsed(GPIO_MCP23SXX_CS)) && // 74HC595 rclk / MCP23S17
TasmotaGlobal.gpio_optiona.shelly_pro) { // Option_A7
if (PinUsed(GPIO_SWT1) || PinUsed(GPIO_KEY1)) {
@@ -365,26 +149,16 @@ void ShellyProPreInit(void) {
if (PinUsed(GPIO_SWT1, 1) || PinUsed(GPIO_KEY1, 1)) {
SPro.detected = 2; // Shelly Pro 2
}
- SPro.ledlink = 0x18; // Blue led on - set by first call ShellyProPower() - Shelly 1/2
- }
- if (SHELLY_PRO_4_PIN_SPI_CS == Pin(GPIO_SPI_CS)) {
- SPro.detected = 4; // Shelly Pro 4PM (No SWT or KEY)
- }
-
- if (SPro.detected) {
- UpdateDevicesPresent(SPro.detected); // Shelly Pro 1
-
+ UpdateDevicesPresent(SPro.detected); // Shelly Pro 1/2
SPro.pin_register_cs = Pin(GPIO_SPI_CS);
- digitalWrite(SPro.pin_register_cs, (4 == SPro.detected) ? 1 : 0); // Prep 74HC595 rclk
+ digitalWrite(SPro.pin_register_cs, 0); // Prep 74HC595 rclk
pinMode(SPro.pin_register_cs, OUTPUT);
+ SPro.ledlink = 0x18; // Blue led on - set by first call ShellyProPower() - Shelly 1/2
// Does nothing if SPI is already initiated (by ADE7953) so no harm done
SPI.begin(Pin(GPIO_SPI_CLK), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_MOSI), -1);
-
- if (4 == SPro.detected) {
- SPro.pin_mcp23s17_int = SHELLY_PRO_4_PIN_MCP23S17_INT; // GPIO35 = MCP23S17 common interrupt
- pinMode(SPro.pin_mcp23s17_int, INPUT);
- ShellyPro4Init(); // Init MCP23S17
- }
+ }
+ if (PinUsed(GPIO_MCP23SXX_CS)) {
+ SPro.detected = 4; // Shelly Pro 4PM (No SWT or KEY)
}
}
}
@@ -407,26 +181,6 @@ void ShellyProPower(void) {
if (SPro.detected != 4) {
SPro.power = XdrvMailbox.index &3;
ShellyProUpdate();
- } else {
-
-// AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Set Power 0x%08X"), XdrvMailbox.index);
-
- power_t rpower = XdrvMailbox.index;
-/*
- for (uint32_t i = 0; i < 4; i++) {
- power_t state = rpower &1;
- SP4Mcp23S17DigitalWrite(sp4_relay_pin[i], state); // 4 SPI writes
- rpower >>= 1; // Select next power
- }
-*/
- for (uint32_t i = 0; i < 4; i++) {
- power_t state = rpower &1;
- uint32_t bit = sp4_relay_pin[i] -8; // Adjust by 8 bits
- bitWrite(sp4_mcp23s17_olatb, bit, state);
- rpower >>= 1; // Select next power
- }
- SP4Mcp23S17Write(SP4_MCP23S17_OLATB, sp4_mcp23s17_olatb); // 1 SPI write
-
}
}
@@ -484,7 +238,7 @@ void ShellyProLedLinkWifiOff(void) {
bool Xdrv88(uint32_t function) {
bool result = false;
- if (FUNC_MODULE_INIT == function) {
+ if (FUNC_PRE_INIT == function) {
ShellyProPreInit();
} else if (SPro.detected) {
switch (function) {
@@ -502,12 +256,6 @@ bool Xdrv88(uint32_t function) {
case FUNC_INIT:
ShellyProInit();
break;
- case FUNC_ADD_BUTTON:
- result = ShellyProAddButton();
- break;
- case FUNC_ADD_SWITCH:
- result = ShellyProAddSwitch();
- break;
case FUNC_LED_LINK:
ShellyProLedLink();
break;
@@ -517,5 +265,6 @@ bool Xdrv88(uint32_t function) {
}
#endif // USE_SHELLY_PRO
+#endif // USE_MCP23XXX_DRV
#endif // USE_SPI
#endif // ESP32
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro_v2.ino b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro_v2.ino
new file mode 100644
index 000000000..d9f7dd4a0
--- /dev/null
+++ b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro_v2.ino
@@ -0,0 +1,521 @@
+/*
+ xdrv_88_esp32_shelly_pro.ino - Shelly pro family support for Tasmota
+
+ Copyright (C) 2022 Theo Arends
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifdef ESP32
+#ifdef USE_SPI
+#ifdef USE_SHELLY_PRO_V2
+/*********************************************************************************************\
+ * Shelly Pro support
+ *
+ * {"NAME":"Shelly Pro 1","GPIO":[0,1,0,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,4736,0,160,0],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350"}
+ * {"NAME":"Shelly Pro 1PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3459,0,0,32,4736,0,160,0],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350"}
+ * {"NAME":"Shelly Pro 2","GPIO":[0,1,0,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
+ * {"NAME":"Shelly Pro 2PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,9569,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3460,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
+ * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,768,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,0,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350"}
+ *
+ * Shelly Pro 1/2 uses SPI to control one 74HC595 for relays/leds and one ADE7953 (1PM) or two ADE7953 (2PM) for energy monitoring
+ * Shelly Pro 4 uses an SPI to control one MCP23S17 for buttons/switches/relays/leds and two ADE7953 for energy monitoring and a second SPI for the display
+ * To use display enable defines USE_DISPLAY, USE_UNIVERSAL_DISPLAY and SHOW_SPLASH. Load file ST7735S_Pro4PM_display.ini as display.ini
+\*********************************************************************************************/
+
+#define XDRV_88 88
+
+#define SHELLY_PRO_PIN_LAN8720_RESET 5
+#define SHELLY_PRO_4_PIN_SPI_CS 16
+#define SHELLY_PRO_4_PIN_MCP23S17_INT 35
+#define SHELLY_PRO_4_MCP23S17_ADDRESS 0x40
+
+struct SPro {
+ uint32_t last_update;
+ uint16_t input_state;
+ int8_t switch_offset;
+ int8_t button_offset;
+ uint8_t pin_register_cs;
+ uint8_t pin_mcp23s17_int;
+ uint8_t ledlink;
+ uint8_t power;
+ bool init_done;
+ uint8_t detected;
+} SPro;
+
+/*********************************************************************************************\
+ * Shelly Pro MCP23S17 support
+\*********************************************************************************************/
+
+enum SP4MCP23X17GPIORegisters {
+ // A side
+ SP4_MCP23S17_IODIRA = 0x00,
+ SP4_MCP23S17_IPOLA = 0x02,
+ SP4_MCP23S17_GPINTENA = 0x04,
+ SP4_MCP23S17_DEFVALA = 0x06,
+ SP4_MCP23S17_INTCONA = 0x08,
+ SP4_MCP23S17_IOCONA = 0x0A,
+ SP4_MCP23S17_GPPUA = 0x0C,
+ SP4_MCP23S17_INTFA = 0x0E,
+ SP4_MCP23S17_INTCAPA = 0x10,
+ SP4_MCP23S17_GPIOA = 0x12,
+ SP4_MCP23S17_OLATA = 0x14,
+ // B side
+ SP4_MCP23S17_IODIRB = 0x01,
+ SP4_MCP23S17_IPOLB = 0x03,
+ SP4_MCP23S17_GPINTENB = 0x05,
+ SP4_MCP23S17_DEFVALB = 0x07,
+ SP4_MCP23S17_INTCONB = 0x09,
+ SP4_MCP23S17_IOCONB = 0x0B,
+ SP4_MCP23S17_GPPUB = 0x0D,
+ SP4_MCP23S17_INTFB = 0x0F,
+ SP4_MCP23S17_INTCAPB = 0x11,
+ SP4_MCP23S17_GPIOB = 0x13,
+ SP4_MCP23S17_OLATB = 0x15,
+};
+
+uint8_t sp4_mcp23s17_olata = 0;
+uint8_t sp4_mcp23s17_olatb = 0;
+
+bool sp4_spi_busy;
+
+void SP4Mcp23S17Enable(void) {
+ sp4_spi_busy = true;
+ SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
+ digitalWrite(SPro.pin_register_cs, 0);
+}
+
+void SP4Mcp23S17Disable(void) {
+ SPI.endTransaction();
+ digitalWrite(SPro.pin_register_cs, 1);
+ sp4_spi_busy = false;
+}
+
+uint32_t SP4Mcp23S17Read16(uint8_t reg) {
+ // Read 16-bit registers: (regb << 8) | rega
+ SP4Mcp23S17Enable();
+ SPI.transfer(SHELLY_PRO_4_MCP23S17_ADDRESS | 1);
+ SPI.transfer(reg);
+ uint32_t value = SPI.transfer(0xFF); // RegA
+ value |= (SPI.transfer(0xFF) << 8); // RegB
+ SP4Mcp23S17Disable();
+ return value;
+}
+
+uint32_t SP4Mcp23S17Read(uint8_t reg) {
+ SP4Mcp23S17Enable();
+ SPI.transfer(SHELLY_PRO_4_MCP23S17_ADDRESS | 1);
+ SPI.transfer(reg);
+ uint32_t value = SPI.transfer(0xFF);
+ SP4Mcp23S17Disable();
+ return value;
+}
+
+void SP4Mcp23S17Write(uint8_t reg, uint8_t value) {
+ SP4Mcp23S17Enable();
+ SPI.transfer(SHELLY_PRO_4_MCP23S17_ADDRESS);
+ SPI.transfer(reg);
+ SPI.transfer(value);
+ SP4Mcp23S17Disable();
+}
+
+void SP4Mcp23S17Update(uint8_t pin, bool pin_value, uint8_t reg_addr) {
+ uint8_t bit = pin % 8;
+ uint8_t reg_value = 0;
+ if (reg_addr == SP4_MCP23S17_OLATA) {
+ reg_value = sp4_mcp23s17_olata;
+ } else if (reg_addr == SP4_MCP23S17_OLATB) {
+ reg_value = sp4_mcp23s17_olatb;
+ } else {
+ reg_value = SP4Mcp23S17Read(reg_addr);
+ }
+ if (pin_value) {
+ reg_value |= 1 << bit;
+ } else {
+ reg_value &= ~(1 << bit);
+ }
+ SP4Mcp23S17Write(reg_addr, reg_value);
+ if (reg_addr == SP4_MCP23S17_OLATA) {
+ sp4_mcp23s17_olata = reg_value;
+ } else if (reg_addr == SP4_MCP23S17_OLATB) {
+ sp4_mcp23s17_olatb = reg_value;
+ }
+}
+
+void SP4Mcp23S17PinMode(uint8_t pin, uint8_t flags) {
+ uint8_t iodir = pin < 8 ? SP4_MCP23S17_IODIRA : SP4_MCP23S17_IODIRB;
+ uint8_t gppu = pin < 8 ? SP4_MCP23S17_GPPUA : SP4_MCP23S17_GPPUB;
+ if (flags == INPUT) {
+ SP4Mcp23S17Update(pin, true, iodir);
+ SP4Mcp23S17Update(pin, false, gppu);
+ } else if (flags == (INPUT | PULLUP)) {
+ SP4Mcp23S17Update(pin, true, iodir);
+ SP4Mcp23S17Update(pin, true, gppu);
+ } else if (flags == OUTPUT) {
+ SP4Mcp23S17Update(pin, false, iodir);
+ }
+}
+
+bool SP4Mcp23S17DigitalRead(uint8_t pin) {
+ uint8_t bit = pin % 8;
+ uint8_t reg_addr = pin < 8 ? SP4_MCP23S17_GPIOA : SP4_MCP23S17_GPIOB;
+ uint8_t value = SP4Mcp23S17Read(reg_addr);
+ return value & (1 << bit);
+}
+
+void SP4Mcp23S17DigitalWrite(uint8_t pin, bool value) {
+ uint8_t reg_addr = pin < 8 ? SP4_MCP23S17_OLATA : SP4_MCP23S17_OLATB;
+ SP4Mcp23S17Update(pin, value, reg_addr);
+}
+
+/*********************************************************************************************\
+ * Shelly Pro 4
+\*********************************************************************************************/
+
+const uint8_t sp4_relay_pin[] = { 8, 13, 14, 12 };
+const uint8_t sp4_switch_pin[] = { 6, 1, 0, 15 };
+const uint8_t sp4_button_pin[] = { 5, 2, 3 };
+
+void ShellyPro4Init(void) {
+ /*
+ Shelly Pro 4PM MCP23S17 registers
+ bit 0 = input, inverted - Switch3
+ bit 1 = input, inverted - Switch2
+ bit 2 = input - Button Down
+ bit 3 = input - Button OK
+ bit 4 = output - Reset, display, ADE7953
+ bit 5 = input - Button Up
+ bit 6 = input, inverted - Switch1
+ bit 7
+ bit 8 = output - Relay O1
+ bit 9
+ bit 10
+ bit 11
+ bit 12 = output - Relay O4
+ bit 13 = output - Relay O2
+ bit 14 = output - Relay O3
+ bit 15 = input, inverted - Switch4
+ */
+ SP4Mcp23S17Write(SP4_MCP23S17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
+ SP4Mcp23S17Write(SP4_MCP23S17_GPINTENA, 0x6F); // Enable interrupt on change
+ SP4Mcp23S17Write(SP4_MCP23S17_GPINTENB, 0x80); // Enable interrupt on change
+
+ // Read current output register state
+ sp4_mcp23s17_olata = SP4Mcp23S17Read(SP4_MCP23S17_OLATA);
+ sp4_mcp23s17_olatb = SP4Mcp23S17Read(SP4_MCP23S17_OLATB);
+
+ SP4Mcp23S17PinMode(4, OUTPUT); // Reset display, ADE7943
+ SP4Mcp23S17DigitalWrite(4, 1);
+
+ for (uint32_t i = 0; i < 3; i++) {
+ SP4Mcp23S17PinMode(sp4_button_pin[i], INPUT); // Button Up, Down, OK (RC with 10k to 3V3 and button shorting C)
+ }
+ SPro.button_offset = -1;
+
+ for (uint32_t i = 0; i < 4; i++) {
+ SP4Mcp23S17PinMode(sp4_switch_pin[i], INPUT); // Switch1..4
+ SP4Mcp23S17PinMode(sp4_relay_pin[i], OUTPUT); // Relay O1..O4
+ }
+ SPro.switch_offset = -1;
+
+ // Read current input register state
+ SPro.input_state = SP4Mcp23S17Read16(SP4_MCP23S17_GPIOA) & 0x806F; // Read gpio and clear interrupt
+ attachInterrupt(SPro.pin_mcp23s17_int, ShellyProUpdateIsr, CHANGE);
+}
+
+void ShellyPro4Reset(void) {
+ SP4Mcp23S17DigitalWrite(4, 0); // Reset pin display, ADE7953
+ delay(1); // To initiate a hardware reset, this pin must be brought low for a minimum of 10 μs.
+ SP4Mcp23S17DigitalWrite(4, 1);
+}
+
+bool ShellyProAddButton(void) {
+ if (SPro.detected != 4) { return false; } // Only support Shelly Pro 4
+ if (SPro.button_offset < 0) { SPro.button_offset = XdrvMailbox.index; }
+ uint32_t index = XdrvMailbox.index - SPro.button_offset;
+ if (index > 2) { return false; } // Support three buttons
+/*
+ uint32_t state = bitRead(SPro.input_state, sp4_button_pin[index]); // 1 on power on and restart
+ AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: Button default state %d"), state);
+ XdrvMailbox.index = state;
+*/
+ XdrvMailbox.index = 1; // 1 on power on and restart
+ return true;
+}
+
+bool ShellyProAddSwitch(void) {
+ if (SPro.detected != 4) { return false; } // Only support Shelly Pro 4
+ if (SPro.switch_offset < 0) { SPro.switch_offset = XdrvMailbox.index; }
+ uint32_t index = XdrvMailbox.index - SPro.switch_offset;
+ if (index > 3) { return false; } // Support four switches
+/*
+ uint32_t state = bitRead(SPro.input_state, sp4_switch_pin[index]); // 0 on power on and restart
+ AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: Switch default state %d"), state);
+ XdrvMailbox.index = state;
+*/
+ XdrvMailbox.index = 0; // 0 on power on and restart
+ return true;
+}
+
+void ShellyProUpdateIsr(void) {
+ /*
+ The goal if this function is to minimize SPI and SetVirtualPinState calls
+ */
+ uint32_t input_state = SP4Mcp23S17Read16(SP4_MCP23S17_INTCAPA); // Read intcap and clear interrupt
+ input_state &= 0x806F; // Only test input bits
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Input from %04X to %04X"), SPro.input_state, input_state);
+
+ if (TasmotaGlobal.uptime < 3) { return; } // Flush interrupt for 3 seconds after poweron
+
+ uint32_t mask = 1;
+ for (uint32_t j = 0; j < 16; j++) {
+ if ((input_state & mask) != (SPro.input_state & mask)) {
+ uint32_t state = (input_state >> j) &1;
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Change pin %d to %d"), j, state);
+
+ for (uint32_t i = 0; i < 4; i++) {
+ if (j == sp4_switch_pin[i]) {
+ SwitchSetVirtualPinState(SPro.switch_offset +i, state);
+ }
+ else if ((i < 3) && (j == sp4_button_pin[i])) {
+ ButtonSetVirtualPinState(SPro.button_offset +i, state);
+ }
+ }
+ }
+ mask <<= 1;
+ }
+ SPro.input_state = input_state;
+}
+
+bool ShellyProButton(void) {
+ if (SPro.detected != 4) { return false; } // Only support Shelly Pro 4
+
+ uint32_t button_index = XdrvMailbox.index - SPro.button_offset;
+ if (button_index > 2) { return false; } // Only support Up, Down, Ok
+
+ uint32_t button = XdrvMailbox.payload;
+ uint32_t last_state = XdrvMailbox.command_code;
+ if ((PRESSED == button) && (NOT_PRESSED == last_state)) { // Button pressed
+
+ AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Button %d pressed"), button_index +1);
+
+ // Do something with the Up,Down,Ok button
+ switch (button_index) {
+ case 0: // Up
+ break;
+ case 1: // Down
+ break;
+ case 2: // Ok
+ break;
+ }
+ }
+ return true; // Disable further button processing
+}
+
+/*********************************************************************************************\
+ * Shelly Pro 1/2
+\*********************************************************************************************/
+
+void ShellyProUpdate(void) {
+ /*
+ Shelly Pro 1/2/PM 74HC595 register
+ bit 0 = relay/led 1
+ bit 1 = relay/led 2
+ bit 2 = wifi led blue
+ bit 3 = wifi led green
+ bit 4 = wifi led red
+ bit 5 - 7 = nc
+ OE is connected to Gnd with 470 ohm resistor R62 AND a capacitor C81 to 3V3
+ - this inhibits output of signals (also relay state) during power on for a few seconds
+ */
+ uint8_t val = SPro.power | SPro.ledlink;
+ SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
+ SPI.transfer(val); // Write 74HC595 shift register
+ SPI.endTransaction();
+// delayMicroseconds(2); // Wait for SPI clock to stop
+ digitalWrite(SPro.pin_register_cs, 1); // Latch data
+ delayMicroseconds(1); // Shelly 10mS
+ digitalWrite(SPro.pin_register_cs, 0);
+}
+
+/*********************************************************************************************\
+ * Shelly Pro
+\*********************************************************************************************/
+
+void ShellyProPreInit(void) {
+ if ((SPI_MOSI_MISO == TasmotaGlobal.spi_enabled) &&
+ PinUsed(GPIO_SPI_CS) && // 74HC595 rclk / MCP23S17
+ TasmotaGlobal.gpio_optiona.shelly_pro) { // Option_A7
+
+ if (PinUsed(GPIO_SWT1) || PinUsed(GPIO_KEY1)) {
+ SPro.detected = 1; // Shelly Pro 1
+ if (PinUsed(GPIO_SWT1, 1) || PinUsed(GPIO_KEY1, 1)) {
+ SPro.detected = 2; // Shelly Pro 2
+ }
+ SPro.ledlink = 0x18; // Blue led on - set by first call ShellyProPower() - Shelly 1/2
+ }
+ if (SHELLY_PRO_4_PIN_SPI_CS == Pin(GPIO_SPI_CS)) {
+ SPro.detected = 4; // Shelly Pro 4PM (No SWT or KEY)
+ }
+
+ if (SPro.detected) {
+ UpdateDevicesPresent(SPro.detected); // Shelly Pro 1
+
+ SPro.pin_register_cs = Pin(GPIO_SPI_CS);
+ digitalWrite(SPro.pin_register_cs, (4 == SPro.detected) ? 1 : 0); // Prep 74HC595 rclk
+ pinMode(SPro.pin_register_cs, OUTPUT);
+ // Does nothing if SPI is already initiated (by ADE7953) so no harm done
+ SPI.begin(Pin(GPIO_SPI_CLK), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_MOSI), -1);
+
+ if (4 == SPro.detected) {
+ SPro.pin_mcp23s17_int = SHELLY_PRO_4_PIN_MCP23S17_INT; // GPIO35 = MCP23S17 common interrupt
+ pinMode(SPro.pin_mcp23s17_int, INPUT);
+ ShellyPro4Init(); // Init MCP23S17
+ }
+ }
+ }
+}
+
+void ShellyProInit(void) {
+ int pin_lan_reset = SHELLY_PRO_PIN_LAN8720_RESET; // GPIO5 = LAN8720 nRST
+// delay(30); // (t-purstd) This pin must be brought low for a minimum of 25 mS after power on
+ digitalWrite(pin_lan_reset, 0);
+ pinMode(pin_lan_reset, OUTPUT);
+ delay(1); // (t-rstia) This pin must be brought low for a minimum of 100 uS
+ digitalWrite(pin_lan_reset, 1);
+
+ AddLog(LOG_LEVEL_INFO, PSTR("HDW: Shelly Pro %d%s initialized"),
+ SPro.detected, (PinUsed(GPIO_ADE7953_CS))?"PM":"");
+
+ SPro.init_done = true;
+}
+
+void ShellyProPower(void) {
+ if (SPro.detected != 4) {
+ SPro.power = XdrvMailbox.index &3;
+ ShellyProUpdate();
+ } else {
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Set Power 0x%08X"), XdrvMailbox.index);
+
+ power_t rpower = XdrvMailbox.index;
+/*
+ for (uint32_t i = 0; i < 4; i++) {
+ power_t state = rpower &1;
+ SP4Mcp23S17DigitalWrite(sp4_relay_pin[i], state); // 4 SPI writes
+ rpower >>= 1; // Select next power
+ }
+*/
+ for (uint32_t i = 0; i < 4; i++) {
+ power_t state = rpower &1;
+ uint32_t bit = sp4_relay_pin[i] -8; // Adjust by 8 bits
+ bitWrite(sp4_mcp23s17_olatb, bit, state);
+ rpower >>= 1; // Select next power
+ }
+ SP4Mcp23S17Write(SP4_MCP23S17_OLATB, sp4_mcp23s17_olatb); // 1 SPI write
+
+ }
+}
+
+void ShellyProUpdateLedLink(uint32_t ledlink) {
+ if (ledlink != SPro.ledlink) {
+ SPro.ledlink = ledlink;
+ ShellyProUpdate();
+ }
+}
+
+void ShellyProLedLink(void) {
+ if (!SPro.init_done) { return; } // Block write before first power update
+ if (SPro.detected != 4) {
+ /*
+ bit 2 = blue, 3 = green, 4 = red
+ Shelly Pro documentation
+ - Blue light indicator will be on if in AP mode.
+ - Red light indicator will be on if in STA mode and not connected to a Wi-Fi network.
+ - Yellow light indicator will be on if in STA mode and connected to a Wi-Fi network.
+ - Green light indicator will be on if in STA mode and connected to a Wi-Fi network and to the Shelly Cloud.
+ - The light indicator will be flashing Red/Blue if OTA update is in progress.
+ Tasmota behaviour
+ - Blue light indicator will blink if no wifi or mqtt.
+ - Green light indicator will be on if in STA mode and connected to a Wi-Fi network.
+ */
+ SPro.last_update = TasmotaGlobal.uptime;
+ uint32_t ledlink = 0x1C; // All leds off
+ if (XdrvMailbox.index) {
+ ledlink &= 0xFB; // Blue blinks if wifi/mqtt lost
+ }
+ else if (!TasmotaGlobal.global_state.wifi_down) {
+ ledlink &= 0xF7; // Green On
+ }
+ ShellyProUpdateLedLink(ledlink);
+ }
+}
+
+void ShellyProLedLinkWifiOff(void) {
+ if (!SPro.init_done) { return; }
+ if (SPro.detected != 4) {
+ /*
+ bit 2 = blue, 3 = green, 4 = red
+ - Green light indicator will be on if in STA mode and connected to a Wi-Fi network.
+ */
+ if (SPro.last_update +1 < TasmotaGlobal.uptime) {
+ ShellyProUpdateLedLink((TasmotaGlobal.global_state.wifi_down) ? 0x1C : 0x14); // Green off if wifi OFF
+ }
+ }
+}
+
+/*********************************************************************************************\
+ * Interface
+\*********************************************************************************************/
+
+bool Xdrv88(uint32_t function) {
+ bool result = false;
+
+ if (FUNC_MODULE_INIT == function) {
+ ShellyProPreInit();
+ } else if (SPro.detected) {
+ switch (function) {
+/*
+ case FUNC_BUTTON_PRESSED:
+ result = ShellyProButton();
+ break;
+*/
+ case FUNC_EVERY_SECOND:
+ ShellyProLedLinkWifiOff();
+ break;
+ case FUNC_SET_POWER:
+ ShellyProPower();
+ break;
+ case FUNC_INIT:
+ ShellyProInit();
+ break;
+ case FUNC_ADD_BUTTON:
+ result = ShellyProAddButton();
+ break;
+ case FUNC_ADD_SWITCH:
+ result = ShellyProAddSwitch();
+ break;
+ case FUNC_LED_LINK:
+ ShellyProLedLink();
+ break;
+ }
+ }
+ return result;
+}
+
+#endif // USE_SHELLY_PRO
+#endif // USE_SPI
+#endif // ESP32
From dcc46cb4d5328fa13406a5d4433292847379ea9c Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 1 Mar 2023 17:09:51 +0100
Subject: [PATCH 057/227] Bump version v12.4.0.2
---
CHANGELOG.md | 19 +++++++++++++------
RELEASENOTES.md | 2 +-
tasmota/include/tasmota_version.h | 2 +-
3 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b5aab9494..1ee82d8c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,19 @@ All notable changes to this project will be documented in this file.
## [Unreleased] - Development
-## [12.4.0.1]
+## [12.4.0.2]
+### Added
+
+### Breaking Changed
+- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
+
+### Changed
+
+### Fixed
+
+### Removed
+
+## [12.4.0.1] 20230301
### Added
- Matter read/write and commands (#18000)
- Matter subscriptions (#18017, #18018)
@@ -11,9 +23,6 @@ All notable changes to this project will be documented in this file.
- Support for multiple MCP23017/MCP23S17 as switch/button/relay
- NTP time request from gateway (#17984)
-### Breaking Changed
-- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
-
### Changed
- ADC Range oversample from 2 to 32 (#17975)
- ESP32 Framework (Core) from v2.0.6 to v2.0.7
@@ -29,8 +38,6 @@ All notable changes to this project will be documented in this file.
- IR panasonic protocol regression from v12.0.2.4 (#18013)
- EnergyTotal divided twice during minimal upgrade step regression from v12.3.1.3 (#18024)
-### Removed
-
## [Released]
## [12.4.0] 20230216
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index a2abd76b2..feb22e9f0 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -110,7 +110,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
[Complete list](BUILDS.md) of available feature and sensors.
-## Changelog v12.4.0.1
+## Changelog v12.4.0.2
### Added
- Support for multiple MCP23017/MCP23S17 as switch/button/relay
- NTP time request from gateway [#17984](https://github.com/arendst/Tasmota/issues/17984)
diff --git a/tasmota/include/tasmota_version.h b/tasmota/include/tasmota_version.h
index 33b7659ec..6b644b6fa 100644
--- a/tasmota/include/tasmota_version.h
+++ b/tasmota/include/tasmota_version.h
@@ -20,6 +20,6 @@
#ifndef _TASMOTA_VERSION_H_
#define _TASMOTA_VERSION_H_
-const uint32_t VERSION = 0x0C040001; // 12.4.0.1
+const uint32_t VERSION = 0x0C040002; // 12.4.0.2
#endif // _TASMOTA_VERSION_H_
From 3cd8839b6d8ed3ad7a7b8e35de93334dea5523a0 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Wed, 1 Mar 2023 17:59:22 +0100
Subject: [PATCH 058/227] Fix ESP8266 compilation
---
tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
index a120ae5bf..d8f55b69d 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
@@ -558,7 +558,12 @@ void MCP23xModuleInit(void) {
#ifdef USE_SPI
if ((SPI_MOSI_MISO == TasmotaGlobal.spi_enabled) && PinUsed(GPIO_MCP23SXX_CS, GPIO_ANY)) {
+#ifdef ESP8266
+ SPI.begin();
+#endif
+#ifdef ESP32
SPI.begin(Pin(GPIO_SPI_CLK), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_MOSI), -1);
+#endif
while ((Mcp23x.max_devices < MCP23XXX_MAX_DEVICES) && PinUsed(GPIO_MCP23SXX_CS, Mcp23x.max_devices)) {
Mcp23x.device[Mcp23x.chip].pin_cs = Pin(GPIO_MCP23SXX_CS, Mcp23x.max_devices);
digitalWrite(Mcp23x.device[Mcp23x.chip].pin_cs, 1);
From a72bbbe30aecdd57af18efa7ef7af93cf53ff8d6 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Thu, 2 Mar 2023 11:24:54 +0100
Subject: [PATCH 059/227] Add interrupt control to MCP23xxx driver
- Add interrupt control to MCP23xxx driver
- Enable ADE7880 in tasmota32.bin
---
tasmota/include/tasmota_configurations.h | 1 +
.../include/tasmota_configurations_ESP32.h | 11 +-
tasmota/my_user_config.h | 1 +
.../tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino | 157 +++++++++---------
.../xdrv_88_esp32_shelly_pro.ino | 2 +-
.../tasmota_xnrg_energy/xnrg_23_ade7880.ino | 18 +-
6 files changed, 102 insertions(+), 88 deletions(-)
diff --git a/tasmota/include/tasmota_configurations.h b/tasmota/include/tasmota_configurations.h
index 819e35f84..afb47a585 100644
--- a/tasmota/include/tasmota_configurations.h
+++ b/tasmota/include/tasmota_configurations.h
@@ -104,6 +104,7 @@
#define USE_LM75AD // [I2cDriver20] Enable LM75AD sensor (I2C addresses 0x48 - 0x4F) (+0k5 code)
//#define USE_APDS9960 // [I2cDriver21] Enable APDS9960 Proximity Sensor (I2C address 0x39). Disables SHT and VEML6070 (+4k7 code)
//#define USE_MCP230xx // [I2cDriver22] Enable MCP23008/MCP23017 - Must define I2C Address in #define USE_MCP230xx_ADDR below - range 0x20 - 0x27 (+4k7 code)
+//#define USE_MCP23XXX_DRV // [I2cDriver77] Enable MCP23xxx support as virtual switch/button/relay (+3k(I2C)/+5k(SPI) code)
//#define USE_PCA9685 // [I2cDriver1] Enable PCA9685 I2C HW PWM Driver - Must define I2C Address in #define USE_PCA9685_ADDR below - range 0x40 - 0x47 (+1k4 code)
//#define USE_MPR121 // [I2cDriver23] Enable MPR121 controller (I2C addresses 0x5A, 0x5B, 0x5C and 0x5D) in input mode for touch buttons (+1k3 code)
#define USE_CCS811 // [I2cDriver24] Enable CCS811 sensor (I2C address 0x5A) (+2k2 code)
diff --git a/tasmota/include/tasmota_configurations_ESP32.h b/tasmota/include/tasmota_configurations_ESP32.h
index c351f1f01..85558086d 100644
--- a/tasmota/include/tasmota_configurations_ESP32.h
+++ b/tasmota/include/tasmota_configurations_ESP32.h
@@ -350,13 +350,9 @@
#define USE_DS18x20 // Add support for DS18x20 sensors with id sort, single scan and read retry (+1k3 code)
-
#define USE_ENERGY_SENSOR // Add energy to support Shelly Pro 4PM display (+38k code)
-#define USE_ADE7953
-#define USE_MCP23XXX_DRV
#define USE_SHELLY_PRO
-
#define USE_I2C // I2C using library wire (+10k code, 0k2 mem, 124 iram)
#undef USE_MLX90614
@@ -382,6 +378,7 @@
//#define USE_LM75AD // [I2cDriver20] Enable LM75AD sensor (I2C addresses 0x48 - 0x4F) (+0k5 code)
//#define USE_APDS9960 // [I2cDriver21] Enable APDS9960 Proximity Sensor (I2C address 0x39). Disables SHT and VEML6070 (+4k7 code)
//#define USE_MCP230xx // [I2cDriver22] Enable MCP23008/MCP23017 - Must define I2C Address in #define USE_MCP230xx_ADDR below - range 0x20 - 0x27 (+4k7 code)
+#define USE_MCP23XXX_DRV // [I2cDriver77] Enable MCP23xxx support as virtual switch/button/relay (+3k(I2C)/+5k(SPI) code)
//#define USE_PCA9685 // [I2cDriver1] Enable PCA9685 I2C HW PWM Driver - Must define I2C Address in #define USE_PCA9685_ADDR below - range 0x40 - 0x47 (+1k4 code)
//#define USE_MPR121 // [I2cDriver23] Enable MPR121 controller (I2C addresses 0x5A, 0x5B, 0x5C and 0x5D) in input mode for touch buttons (+1k3 code)
//#define USE_CCS811 // [I2cDriver24] Enable CCS811 sensor (I2C address 0x5A) (+2k2 code)
@@ -392,7 +389,7 @@
//#define USE_SCD30 // [I2cDriver29] Enable Sensiron SCd30 CO2 sensor (I2C address 0x61) (+3k3 code)
//#define USE_SCD40 // [I2cDriver62] Enable Sensiron SCd40 CO2 sensor (I2C address 0x62) (+3k3 code)
//#define USE_SPS30 // [I2cDriver30] Enable Sensiron SPS30 particle sensor (I2C address 0x69) (+1.7 code)
-//#define USE_ADE7953 // [I2cDriver7] Enable ADE7953 Energy monitor as used on Shelly 2.5 (I2C address 0x38) (+1k5)
+#define USE_ADE7953 // [I2cDriver7] Enable ADE7953 Energy monitor as used on Shelly 2.5 (I2C address 0x38) (+1k5)
//#define USE_VL53L0X // [I2cDriver31] Enable VL53L0x time of flight sensor (I2C address 0x29) (+4k code)
//#define USE_VL53L1X // [I2cDriver54] Enable VL53L1X time of flight sensor (I2C address 0x29) using Pololu VL53L1X library (+2k9 code)
//#define USE_TOF10120 // [I2cDriver57] Enable TOF10120 time of flight sensor (I2C address 0x52) (+0k6 code)
@@ -606,6 +603,7 @@
#define USE_LM75AD // [I2cDriver20] Enable LM75AD sensor (I2C addresses 0x48 - 0x4F) (+0k5 code)
//#define USE_APDS9960 // [I2cDriver21] Enable APDS9960 Proximity Sensor (I2C address 0x39). Disables SHT and VEML6070 (+4k7 code)
//#define USE_MCP230xx // [I2cDriver22] Enable MCP23008/MCP23017 - Must define I2C Address in #define USE_MCP230xx_ADDR below - range 0x20 - 0x27 (+4k7 code)
+#define USE_MCP23XXX_DRV // [I2cDriver77] Enable MCP23xxx support as virtual switch/button/relay (+3k(I2C)/+5k(SPI) code)
//#define USE_PCA9685 // [I2cDriver1] Enable PCA9685 I2C HW PWM Driver - Must define I2C Address in #define USE_PCA9685_ADDR below - range 0x40 - 0x47 (+1k4 code)
//#define USE_MPR121 // [I2cDriver23] Enable MPR121 controller (I2C addresses 0x5A, 0x5B, 0x5C and 0x5D) in input mode for touch buttons (+1k3 code)
//#define USE_CCS811 // [I2cDriver24] Enable CCS811 sensor (I2C address 0x5A) (+2k2 code)
@@ -617,6 +615,7 @@
#define USE_SCD30 // [I2cDriver29] Enable Sensiron SCd30 CO2 sensor (I2C address 0x61) (+3k3 code)
#define USE_SCD40 // [I2cDriver62] Enable Sensiron SCd40 CO2 sensor (I2C address 0x62) (+3k5 code)
//#define USE_SPS30 // [I2cDriver30] Enable Sensiron SPS30 particle sensor (I2C address 0x69) (+1.7 code)
+#define USE_ADE7880 // [I2cDriver65] Enable ADE7880 Energy monitor as used on Shelly 3EM (I2C address 0x38) (+3k8)
#define USE_ADE7953 // [I2cDriver7] Enable ADE7953 Energy monitor as used on Shelly 2.5 (I2C address 0x38) (+1k5)
#define USE_VL53L0X // [I2cDriver31] Enable VL53L0x time of flight sensor (I2C address 0x29) (+4k code)
//#define USE_VL53L1X // [I2cDriver54] Enable VL53L1X time of flight sensor (I2C address 0x29) using Pololu VL53L1X library (+2k9 code)
@@ -665,7 +664,7 @@
//#define USE_RC522 // Add support for MFRC522 13.56Mhz Rfid reader (+6k code)
//#define USE_MCP2515 // Add support for can bus using MCP2515 (+7k code)
//#define USE_CANSNIFFER // Add support for can bus sniffer using MCP2515 (+5k code)
-#define USE_MCP23XXX_DRV
+#define USE_MCP23XXX_DRV // [I2cDriver77] Enable MCP23xxx support as virtual switch/button/relay (+3k(I2C)/+5k(SPI) code)
#define USE_SHELLY_PRO // Add support for Shelly Pro
#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index d2f6cd513..128827898 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -613,6 +613,7 @@
// #define USE_MCP230xx_ADDR 0x20 // Enable MCP23008/MCP23017 I2C Address to use (Must be within range 0x20 through 0x26 - set according to your wired setup)
// #define USE_MCP230xx_OUTPUT // Enable MCP23008/MCP23017 OUTPUT support through sensor29 commands (+2k2 code)
// #define USE_MCP230xx_DISPLAYOUTPUT // Enable MCP23008/MCP23017 to display state of OUTPUT pins on Web UI (+0k2 code)
+// #define USE_MCP23XXX_DRV // [I2cDriver77] Enable MCP23xxx support as virtual switch/button/relay (+3k(I2C)/+5k(SPI) code)
// #define USE_PCA9685 // [I2cDriver1] Enable PCA9685 I2C HW PWM Driver - Must define I2C Address in #define USE_PCA9685_ADDR below - range 0x40 - 0x47 (+1k4 code)
// #define USE_PCA9685_ADDR 0x40 // Enable PCA9685 I2C Address to use (Must be within range 0x40 through 0x47 - set according to your wired setup)
// #define USE_PCA9685_FREQ 50 // Define default PWM frequency in Hz to be used (must be within 24 to 1526) - If other value is used, it will rever to 50Hz
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
index d8f55b69d..5ceb734ca 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
@@ -9,7 +9,7 @@
#if defined(USE_I2C) || defined(USE_SPI)
#ifdef USE_MCP23XXX_DRV
/*********************************************************************************************\
- * MCP23008/17 - I2C GPIO Expander to be used as virtual button/switch/relay only
+ * MCP23008/17 (I2C) and MCP23S17 (SPI) GPIO Expander to be used as virtual button/switch/relay only
*
* Docs at https://www.microchip.com/wwwproducts/en/MCP23008
* https://www.microchip.com/wwwproducts/en/MCP23017
@@ -21,52 +21,52 @@
*
* Restrictions:
* - Supports MCP23017 (=I2C) and MCP23S17 (=SPI)
+ * - Uses incremental I2C addresses / SPI Chip select until template pin count reached
* - Max support for 28 switches (input), 32 buttons (input), 32 relays (output)
*
* Supported template fields:
* NAME - Template name
- * ADDR - Sequential list of I2C addresses
* GPIO - Sequential list of pin 1 and up with configured GPIO function
- * Function Code Description
- * -------------- -------- ----------------------------------------
- * None 0 Not used
- * Button1..32 32..63 Button to Gnd with internal pullup
- * Button_n1..32 64..95 Button to Gnd without internal pullup
- * Button_i1..32 96..127 Button inverted to Vcc with internal pullup
- * Button_in1..32 128..159 Button inverted to Vcc without internal pullup
- * Switch1..28 160..187 Switch to Gnd with internal pullup
- * Switch_n1..28 192..219 Switch to Gnd without internal pullup
- * Relay1..28 224..255 Relay
- * Relay_i1..28 256..287 Relay inverted
+ * Function Code Description
+ * ------------------- -------- ----------------------------------------
+ * None 0 Not used
+ * Button1..32 B 32..63 Button to Gnd with internal pullup
+ * Button_n1..32 Bn 64..95 Button to Gnd without internal pullup
+ * Button_i1..32 Bi 96..127 Button inverted to Vcc with internal pullup
+ * Button_in1..32 Bin 128..159 Button inverted to Vcc without internal pullup
+ * Switch1..28 S 160..187 Switch to Gnd with internal pullup
+ * Switch_n1..28 Sn 192..219 Switch to Gnd without internal pullup
+ * Relay1..28 R 224..255 Relay
+ * Relay_i1..28 Ri 256..287 Relay inverted
*
* Prepare a template to be loaded either by:
- * - a rule like: rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
- * - a script like: -y{"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
- * - file called mcp23x.dat with contents: {"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
+ * - a rule like: rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
+ * - a script like: -y{"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
+ * - file called mcp23x.dat with contents: {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
*
* S3 S2 B2 B3 B1 S1 R1 R4 R2 R3 S4
* {"NAME":"MCP23S17 Shelly Pro 4PM","GPIO":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]}
*
- * Inverted relays and buttons Ri8 Ri7 Ri6 Ri5 Ri4 Ri3 Ri2 Ri1 B1 B2 B3 B4 B5 B6 B7 B8
- * {"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
+ * Inverted relays and buttons Ri8 Ri7 Ri6 Ri5 Ri4 Ri3 Ri2 Ri1 B1 B2 B3 B4 B5 B6 B7 B8
+ * {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
*
- * Inverted relays and buttons Ri1 Ri2 Ri3 Ri4 Ri5 Ri6 Ri7 Ri8 B1 B2 B3 B4 B5 B6 B7 B8
- * {"NAME":"MCP23017 A=Ri1-8, B=B1-8","ADDR":32,"GPIO":[256,257,258,259,260,261,262,263,32,33,34,35,36,37,38,39]}
+ * Inverted relays and buttons Ri1 Ri2 Ri3 Ri4 Ri5 Ri6 Ri7 Ri8 B1 B2 B3 B4 B5 B6 B7 B8
+ * {"NAME":"MCP23017 A=Ri1-8, B=B1-8","GPIO":[256,257,258,259,260,261,262,263,32,33,34,35,36,37,38,39]}
*
- * Relays and buttons R1 R2 R3 R4 R5 R6 R7 R8 B1 B2 B3 B4 B5 B6 B7 B8
- * {"NAME":"MCP23017 A=R1-8, B=B1-8","ADDR":32,"GPIO":[224,225,226,227,228,229,230,231,32,33,34,35,36,37,38,39]}
+ * Relays and buttons R1 R2 R3 R4 R5 R6 R7 R8 B1 B2 B3 B4 B5 B6 B7 B8
+ * {"NAME":"MCP23017 A=R1-8, B=B1-8","GPIO":[224,225,226,227,228,229,230,231,32,33,34,35,36,37,38,39]}
*
- * Buttons and relays B1 B2 B3 B4 B5 B6 B7 B8 R1 R2 R3 R4 R5 R6 R7 R8
- * {"NAME":"MCP23017 A=B1-8, B=R1-8","ADDR":32,"GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231]}
+ * Buttons and relays B1 B2 B3 B4 B5 B6 B7 B8 R1 R2 R3 R4 R5 R6 R7 R8
+ * {"NAME":"MCP23017 A=B1-8, B=R1-8","GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231]}
*
- * Buttons, relays, buttons and relays B1 B2 B3 B4 B5 B6 B7 B8 R1 R2 R3 R4 R5 R6 R7 R8 B9 B10B11B12B13B14B15B16R9 R10 R11 R12 R13 R14 R15 R16
- * {"NAME":"MCP23017 A=B1-8, B=R1-8, C=B9-16, D=R9-16","ADDR":[32,33],"GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231,40,41,42,43,44,45,46,47,232,233,234,235,236,237,238,239]}
+ * Buttons, relays, buttons and relays B1 B2 B3 B4 B5 B6 B7 B8 R1 R2 R3 R4 R5 R6 R7 R8 B9 B10B11B12B13B14B15B16R9 R10 R11 R12 R13 R14 R15 R16
+ * {"NAME":"MCP23017 A=B1-8, B=R1-8, C=B9-16, D=R9-16","GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231,40,41,42,43,44,45,46,47,232,233,234,235,236,237,238,239]}
*
- * {"NAME":"MCP23017 A=R1-8, B=B1-8, C=R9-16, D=B9-16","ADDR":[32,33],"GPIO":[224,225,226,227,228,229,230,231,32,33,34,35,36,37,38,39,232,233,234,235,236,237,238,239,40,41,42,43,44,45,46,47]}
+ * {"NAME":"MCP23017 A=R1-8, B=B1-8, C=R9-16, D=B9-16","GPIO":[224,225,226,227,228,229,230,231,32,33,34,35,36,37,38,39,232,233,234,235,236,237,238,239,40,41,42,43,44,45,46,47]}
*
- * 32 relays R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 R30 R31 R32
- * {"NAME":"MCP23017 A=Ri1-8, B=Ri9-16, C=Ri17-24, D=Ri25-32","ADDR":[32,33],"GPIO":[256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287]}
- * {"NAME":"MCP23017 A=R1-8, B=R9-16, C=R17-24, D=R25-32","ADDR":[32,33],"GPIO":[224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
+ * 32 relays R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 R30 R31 R32
+ * {"NAME":"MCP23017 A=Ri1-8, B=Ri9-16, C=Ri17-24, D=Ri25-32","GPIO":[256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287]}
+ * {"NAME":"MCP23017 A=R1-8, B=R9-16, C=R17-24, D=R25-32","GPIO":[224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
*
\*********************************************************************************************/
@@ -135,6 +135,7 @@ typedef struct {
uint8_t pins; // 8 (MCP23008) or 16 (MCP23017 / MCP23S17)
uint8_t type; // 1 (MCP23008) or 2 (MCP23017) or 3 (MCP23S17)
int8_t pin_cs;
+ int8_t pin_int;
} tMcp23xDevice;
struct MCP230 {
@@ -150,6 +151,7 @@ struct MCP230 {
uint8_t switch_max;
int8_t button_offset;
int8_t switch_offset;
+ bool interrupt;
} Mcp23x;
uint16_t *Mcp23x_gpio_pin = nullptr;
@@ -417,6 +419,13 @@ String MCP23xTemplateLoadFile(void) {
return mcptmplt;
}
+void MCP23xSetPinModes(uint8_t pin, uint8_t flags) {
+ MCP23xPinMode(pin, flags);
+ if (Mcp23x.device[Mcp23x.chip].pin_int > -1) { // Mcp23x.chip is updated by call to MCP23xPinMode
+ MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ }
+}
+
bool MCP23xLoadTemplate(void) {
String mcptmplt = MCP23xTemplateLoadFile();
uint32_t len = mcptmplt.length() +1;
@@ -426,41 +435,17 @@ bool MCP23xLoadTemplate(void) {
JsonParserObject root = parser.getRootObject();
if (!root) { return false; }
- // rule3 on file#mcp23x.dat do {"NAME":"MCP23017","ADDR":32,"GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231]} endon
- // rule3 on file#mcp23x.dat do {"NAME":"MCP23017","ADDR":32,"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
- // rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8","ADDR":[32,33],"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
- // rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8, C=Ri16-9, D=B9-16","ADDR":[32,33],"GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39,271,270,269,268,267,266,265,264,40,41,42,43,44,45,46,47]} endon
+ // rule3 on file#mcp23x.dat do {"NAME":"MCP23017","GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231]} endon
+ // rule3 on file#mcp23x.dat do {"NAME":"MCP23017","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
+ // rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
+ // rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8, C=Ri16-9, D=B9-16","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39,271,270,269,268,267,266,265,264,40,41,42,43,44,45,46,47]} endon
- // {"NAME":"MCP23017","ADDR":32,"GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231]}
- // {"NAME":"MCP23017","ADDR":[32,33],"GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231,40,41,42,43,44,45,46,47,232,233,234,235,236,237,238,239]}
+ // {"NAME":"MCP23017","GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231]}
+ // {"NAME":"MCP23017","GPIO":[32,33,34,35,36,37,38,39,224,225,226,227,228,229,230,231,40,41,42,43,44,45,46,47,232,233,234,235,236,237,238,239]}
JsonParserToken val = root[PSTR(D_JSON_NAME)];
if (val) {
AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Template %s"), val.getStr());
}
-/*
- JsonParserArray arr = root[PSTR("ADDR")];
- if (arr) {
- uint32_t i;
- for (i = 0; i < Mcp23x.max_devices; i++) {
- JsonParserToken val = arr[i];
- if (!val) { break; }
-
- uint8_t address = val.getUInt();
- uint32_t j;
- for (j = 0; j < Mcp23x.max_devices; j++) {
- if (address == Mcp23x.device[Mcp23x.max_devices].address) {
- j = 0;
- break;
- }
- }
- if (j) { return false; } // Requested I2C address not present
-
- }
- } else {
- val = root[PSTR("ADDR")];
-
- }
-*/
JsonParserArray arr = root[PSTR(D_JSON_GPIO)];
if (arr) {
uint32_t pin = 0;
@@ -471,39 +456,33 @@ bool MCP23xLoadTemplate(void) {
if (mpin) { // Above GPIO_NONE
if ((mpin >= AGPIO(GPIO_SWT1)) && (mpin < (AGPIO(GPIO_SWT1) + MAX_SWITCHES_SET))) {
Mcp23x.switch_max++;
- MCP23xPinMode(pin, INPUT_PULLUP);
-// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ MCP23xSetPinModes(pin, INPUT_PULLUP);
}
else if ((mpin >= AGPIO(GPIO_SWT1_NP)) && (mpin < (AGPIO(GPIO_SWT1_NP) + MAX_SWITCHES_SET))) {
mpin -= (AGPIO(GPIO_SWT1_NP) - AGPIO(GPIO_SWT1));
Mcp23x.switch_max++;
- MCP23xPinMode(pin, INPUT);
-// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ MCP23xSetPinModes(pin, INPUT);
}
else if ((mpin >= AGPIO(GPIO_KEY1)) && (mpin < (AGPIO(GPIO_KEY1) + MAX_KEYS_SET))) {
Mcp23x.button_max++;
- MCP23xPinMode(pin, INPUT_PULLUP);
-// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ MCP23xSetPinModes(pin, INPUT_PULLUP);
}
else if ((mpin >= AGPIO(GPIO_KEY1_NP)) && (mpin < (AGPIO(GPIO_KEY1_NP) + MAX_KEYS_SET))) {
mpin -= (AGPIO(GPIO_KEY1_NP) - AGPIO(GPIO_KEY1));
Mcp23x.button_max++;
- MCP23xPinMode(pin, INPUT);
-// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ MCP23xSetPinModes(pin, INPUT);
}
else if ((mpin >= AGPIO(GPIO_KEY1_INV)) && (mpin < (AGPIO(GPIO_KEY1_INV) + MAX_KEYS_SET))) {
bitSet(Mcp23x.button_inverted, mpin - AGPIO(GPIO_KEY1_INV));
mpin -= (AGPIO(GPIO_KEY1_INV) - AGPIO(GPIO_KEY1));
Mcp23x.button_max++;
- MCP23xPinMode(pin, INPUT_PULLUP);
-// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ MCP23xSetPinModes(pin, INPUT_PULLUP);
}
else if ((mpin >= AGPIO(GPIO_KEY1_INV_NP)) && (mpin < (AGPIO(GPIO_KEY1_INV_NP) + MAX_KEYS_SET))) {
bitSet(Mcp23x.button_inverted, mpin - AGPIO(GPIO_KEY1_INV_NP));
mpin -= (AGPIO(GPIO_KEY1_INV_NP) - AGPIO(GPIO_KEY1));
Mcp23x.button_max++;
- MCP23xPinMode(pin, INPUT);
-// MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ MCP23xSetPinModes(pin, INPUT);
}
else if ((mpin >= AGPIO(GPIO_REL1)) && (mpin < (AGPIO(GPIO_REL1) + MAX_RELAYS_SET))) {
Mcp23x.relay_max++;
@@ -565,12 +544,14 @@ void MCP23xModuleInit(void) {
SPI.begin(Pin(GPIO_SPI_CLK), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_MOSI), -1);
#endif
while ((Mcp23x.max_devices < MCP23XXX_MAX_DEVICES) && PinUsed(GPIO_MCP23SXX_CS, Mcp23x.max_devices)) {
+ Mcp23x.chip = Mcp23x.max_devices;
+ Mcp23x.device[Mcp23x.chip].pin_int = (PinUsed(GPIO_MCP23XXX_INT, Mcp23x.chip)) ? Pin(GPIO_MCP23XXX_INT, Mcp23x.chip) : -1;
Mcp23x.device[Mcp23x.chip].pin_cs = Pin(GPIO_MCP23SXX_CS, Mcp23x.max_devices);
digitalWrite(Mcp23x.device[Mcp23x.chip].pin_cs, 1);
pinMode(Mcp23x.device[Mcp23x.chip].pin_cs, OUTPUT);
Mcp23x.device[Mcp23x.chip].interface = MCP23X_SPI;
Mcp23x.device[Mcp23x.chip].address = MCP23XXX_ADDR_START << 1;
- AddLog(LOG_LEVEL_INFO, PSTR("SPI: MCP23S17 found"));
+ AddLog(LOG_LEVEL_INFO, PSTR("SPI: MCP23S17 found at CS%d"), Mcp23x.chip +1);
Mcp23x.device[Mcp23x.chip].type = 3;
Mcp23x.device[Mcp23x.chip].pins = 16;
MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
@@ -584,10 +565,12 @@ void MCP23xModuleInit(void) {
}
} else {
#endif // USE_SPI
+#ifdef USE_I2C
uint8_t mcp23xxx_address = MCP23XXX_ADDR_START;
while ((Mcp23x.max_devices < MCP23XXX_MAX_DEVICES) && (mcp23xxx_address < MCP23XXX_ADDR_END)) {
Mcp23x.chip = Mcp23x.max_devices;
if (I2cSetDevice(mcp23xxx_address)) {
+ Mcp23x.device[Mcp23x.chip].pin_int = (PinUsed(GPIO_MCP23XXX_INT, Mcp23x.chip)) ? Pin(GPIO_MCP23XXX_INT, Mcp23x.chip) : -1;
Mcp23x.device[Mcp23x.chip].interface = MCP23X_I2C;
Mcp23x.device[Mcp23x.chip].address = mcp23xxx_address;
@@ -622,6 +605,7 @@ void MCP23xModuleInit(void) {
mcp23xxx_address = MCP23XXX_ADDR_END;
}
}
+#endif // USE_I2C
#ifdef USE_SPI
}
#endif // USE_SPI
@@ -645,7 +629,8 @@ void MCP23xModuleInit(void) {
}
void MCP23xServiceInput(void) {
- // I found no way to receive interrupts in a consistent manner; noise received at undefined moments - unstable usage
+ // I found no reliable way to receive interrupts; noise received at undefined moments - unstable usage
+ Mcp23x.interrupt = 0;
// This works with no interrupt
uint32_t pin_offset = 0;
for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
@@ -671,6 +656,21 @@ void MCP23xServiceInput(void) {
}
}
+void IRAM_ATTR MCP23xInputIsr(void) {
+ Mcp23x.interrupt = 1;
+}
+
+void MCP23xInit(void) {
+ if (Mcp23x.button_max || Mcp23x.switch_max) {
+ for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
+ if (Mcp23x.device[Mcp23x.chip].pin_int > -1) {
+ uint32_t gpio = MCP23xRead16(MCP23X17_GPIOA); // Clear interrupt
+ attachInterrupt(Mcp23x.device[Mcp23x.chip].pin_int, MCP23xInputIsr, CHANGE);
+ }
+ }
+ }
+}
+
void MCP23xPower(void) {
power_t rpower = XdrvMailbox.index >> Mcp23x.relay_offset;
for (uint32_t index = 0; index < Mcp23x.relay_max; index++) {
@@ -728,6 +728,12 @@ bool Xdrv67(uint32_t function) {
MCP23xModuleInit();
} else if (Mcp23x.max_devices) {
switch (function) {
+ case FUNC_LOOP:
+ case FUNC_SLEEP_LOOP:
+ if (!Mcp23x.interrupt) { return false; }
+ AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("MCP: Interrupt"));
+ MCP23xServiceInput();
+ break;
case FUNC_EVERY_100_MSECOND:
if (Mcp23x.button_max || Mcp23x.switch_max) {
MCP23xServiceInput();
@@ -736,6 +742,9 @@ bool Xdrv67(uint32_t function) {
case FUNC_SET_POWER:
MCP23xPower();
break;
+ case FUNC_INIT:
+ MCP23xInit();
+ break;
case FUNC_ADD_BUTTON:
result = MCP23xAddButton();
break;
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
index 94241e23d..1eb01f7a6 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
@@ -28,7 +28,7 @@
* {"NAME":"Shelly Pro 1PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3459,0,0,32,4736,0,160,0],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350"}
* {"NAME":"Shelly Pro 2","GPIO":[0,1,0,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
* {"NAME":"Shelly Pro 2PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,9569,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3460,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
- * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,10272,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,0,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;rule3 on file#mcp23x.dat do {\"NAME\":\"MCP23S17 Shelly Pro 4PM\",\"GPIO\":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]} endon"}
+ * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,10272,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,10240,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;rule3 on file#mcp23x.dat do {\"NAME\":\"MCP23S17 Shelly Pro 4PM\",\"GPIO\":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]} endon"}
*
* Shelly Pro 1/2 uses SPI to control one 74HC595 for relays/leds and one ADE7953 (1PM) or two ADE7953 (2PM) for energy monitoring
* Shelly Pro 4 uses an SPI to control one MCP23S17 for buttons/switches/relays/leds and two ADE7953 for energy monitoring and a second SPI for the display
diff --git a/tasmota/tasmota_xnrg_energy/xnrg_23_ade7880.ino b/tasmota/tasmota_xnrg_energy/xnrg_23_ade7880.ino
index d4799833f..0a6cdac0a 100644
--- a/tasmota/tasmota_xnrg_energy/xnrg_23_ade7880.ino
+++ b/tasmota/tasmota_xnrg_energy/xnrg_23_ade7880.ino
@@ -444,13 +444,17 @@ bool Ade7880SetCalibrate(void) {
uint32_t start = millis();
#endif // ADE7880_PROFILING
- int reset = Pin(GPIO_RESET);
- if (-1 == reset) { reset = 16; } // Reset pin ADE7880 in Shelly 3EM
- pinMode(reset, OUTPUT);
- digitalWrite(reset, 0);
- delay(1);
- digitalWrite(reset, 1);
- pinMode(reset, INPUT);
+ int pin_reset = Pin(GPIO_RESET);
+#ifdef ESP8266
+ if (-1 == pin_reset) { pin_reset = 16; } // Reset pin ADE7880 in Shelly 3EM
+#endif
+ if (pin_reset >= 0) {
+ pinMode(pin_reset, OUTPUT);
+ digitalWrite(pin_reset, 0);
+ delay(1);
+ digitalWrite(pin_reset, 1);
+ pinMode(pin_reset, INPUT);
+ }
Ade7880.cycle_count = 2; // Skip first two cycles
From fe46f4d654c0eb7bedc65546dd79990e8a229d5f Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Thu, 2 Mar 2023 20:57:17 +0100
Subject: [PATCH 060/227] Try to workaround `extra_scripts` issues
---
platformio.ini | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/platformio.ini b/platformio.ini
index 8810d8ad5..90a7be63d 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -63,14 +63,17 @@ lib_extra_dirs =
; Uncomment and specify a folder where to place the firmware file(s) (default set to folder build_output)
;bin_dir = /tmp/bin_files/
-[esp_defaults]
+[scripts_defaults]
extra_scripts = pre:pio-tools/pre_source_dir.py
- pre:pio-tools/strip-floats.py
- pre:pio-tools/set_partition_table.py
- post:pio-tools/name-firmware.py
- post:pio-tools/gzip-firmware.py
- post:pio-tools/override_copy.py
- post:pio-tools/download_fs.py
+ pio-tools/strip-floats.py
+ pio-tools/set_partition_table.py
+ pio-tools/name-firmware.py
+ pio-tools/gzip-firmware.py
+ pio-tools/override_copy.py
+ pio-tools/download_fs.py
+
+[esp_defaults]
+extra_scripts = ${scripts_defaults.extra_scripts}
; *** remove undesired all warnings
build_unflags = -Wall
; -mtarget-align
From eb625559462b7d60f4e9f0481a1e7e978ad6e06c Mon Sep 17 00:00:00 2001
From: Charles
Date: Fri, 3 Mar 2023 08:42:12 +0100
Subject: [PATCH 061/227] Added valid char check, not only use checksum
(#18094)
---
lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp | 44 +++++++++++++++++----
1 file changed, 37 insertions(+), 7 deletions(-)
diff --git a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
index 7bec941b8..869fb1256 100644
--- a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
+++ b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
@@ -691,22 +691,51 @@ LF etiquette HT donnee HT Chk CR
====================================================================== */
unsigned char TInfo::calcChecksum(char *etiquette, char *valeur, char * horodate)
{
+ char c;
uint8_t sum = (_mode == TINFO_MODE_HISTORIQUE) ? _separator : (2 * _separator); // Somme des codes ASCII du message + 2 separateurs
// avoid dead loop, always check all is fine
if (etiquette && valeur) {
// this will not hurt and may save our life ;-)
if (strlen(etiquette) && strlen(valeur)) {
- while (*etiquette)
- sum += *etiquette++ ;
+ while (*etiquette) {
+ c =*etiquette++;
+ // Add another validity check since checksum may not be sufficient
+ if ( (c>='A' && c<='Z') || (c>='0' && c<='9') || c=='-' || c=='+') {
+ sum += c ;
+ } else {
+ return 0;
+ }
+ }
- while(*valeur)
- sum += *valeur++ ;
+ while(*valeur) {
+ c = *valeur++ ;
+ // Add another validity check since checksum may not be sufficient (space authorized in Standard mode)
+ if ( (c>='A' && c<='Z') || (c>='0' && c<='9') || c==' ' || c=='.' || c=='-' || c=='+') {
+ sum += c ;
+ } else {
+ return 0;
+ }
+ }
if (horodate) {
sum += _separator;
- while (*horodate)
- sum += *horodate++ ;
+ c = *horodate++;
+ // Add another validity check starting season [E]té (Summer) or [H]iver (Winter)
+ if ( c=='E' || c=='H' || c=='e' || c=='h') {
+ sum += c ;
+ while (*horodate) {
+ c = *horodate++ ;
+ // Add another validity check for horodate digits
+ if ( c>='0' && c<='9') {
+ sum += c ;
+ } else {
+ return 0;
+ }
+ }
+ } else {
+ return 0;
+ }
}
return ( (sum & 0x3f) + ' ' ) ;
@@ -905,7 +934,8 @@ ValueList * TInfo::checkLine(char * pline)
// Always check to avoid bad behavior
if(strlen(ptok) && strlen(pvalue)) {
// Is checksum is OK
- char calc_checksum = calcChecksum(ptok,pvalue,pts);
+ char calc_checksum = calcChecksum(ptok,pvalue,pts);
+
if ( calc_checksum == checksum) {
// In case we need to do things on specific labels
customLabel(ptok, pvalue, &flags);
From edb2fad6c1b050776ab0ceda088a88d83e0c5f71 Mon Sep 17 00:00:00 2001
From: Barbudor
Date: Fri, 3 Mar 2023 08:42:27 +0100
Subject: [PATCH 062/227] Tuya sequence fix (#18085)
* no additional command while waiting for response
* send wifi state 4 when mqtt is disabled
---
.../tasmota_xdrv_driver/xdrv_16_tuyamcu_v1.ino | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v1.ino b/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v1.ino
index 3ad56d84a..f71318c4d 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v1.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_16_tuyamcu_v1.ino
@@ -92,8 +92,11 @@ struct TUYA {
uint32_t ignore_dimmer_cmd_timeout = 0; // Time until which received dimmer commands should be ignored
bool ignore_tuyareceived = false; // When a modeset changes ignore stat
bool active;
+ uint32_t time_last_cmd; // to compute timeout on response and not sending another message
} Tuya;
+#define TUYA_CMD_TIMEOUT 200
+
#define D_JSON_TUYA_MCU_RECEIVED "TuyaReceived"
#define D_PRFX_TUYA "Tuya"
@@ -477,6 +480,7 @@ void TuyaSendCmd(uint8_t cmd, uint8_t payload[] = nullptr, uint16_t payload_len
}
TuyaSerial->write(checksum);
TuyaSerial->flush();
+ Tuya.time_last_cmd = millis() | 1; // cheap trick to avoid 0
snprintf_P(log_data, sizeof(log_data), PSTR("%s%02x\""), log_data, checksum);
AddLogData(LOG_LEVEL_DEBUG, log_data);
}
@@ -1287,6 +1291,7 @@ void TuyaSerialInput(void)
uint8_t dpDataType = 0;
char DataStr[15];
bool isCmdToSuppress = false;
+ Tuya.time_last_cmd = 0;
if (len > 0) {
ResponseAppend_P(PSTR(",\"CmndData\":\"%s\""), ToHex_P((unsigned char*)&Tuya.buffer[6], len, hex_char, sizeof(hex_char)));
@@ -1416,7 +1421,9 @@ uint8_t TuyaGetTuyaWifiState(void) {
break;
}
- if (MqttIsConnected()) {
+ // When Wifi is connected, Say "connected to cloud" if mqtt is disabled or mqtt is connected
+ // avoid MCU to resets ESP to desperately get state 4 while MQTT is not enabled
+ if ((3 == wifi_state) && (!Settings->flag.mqtt_enabled || MqttIsConnected())) {
wifi_state = 0x04;
}
@@ -1567,7 +1574,7 @@ void TuyaSensorsShow(bool json)
case 82:
case 83:
case 84:
- WSContentSend_PD(PSTR("{s}Timer%d{m}%d{e}"), (sensor-80), Tuya.Sensors[sensor-71]); // No UoM for timers since they can be sec or min
+ WSContentSend_PD(PSTR("{s}Timer%d{m}%u{e}"), (sensor-80), Tuya.Sensors[sensor-71]); // No UoM for timers since they can be sec or min
break;
}
}
@@ -1650,6 +1657,12 @@ bool Xdrv16(uint32_t function) {
result = TuyaButtonPressed();
break;
case FUNC_EVERY_SECOND:
+ if (Tuya.time_last_cmd) {
+ if ((millis()-Tuya.time_last_cmd) < TUYA_CMD_TIMEOUT)
+ break; // don't send anything if we are already waiting for an answer
+ else
+ Tuya.time_last_cmd = 0;
+ }
if (TuyaSerial && Tuya.wifi_state != TuyaGetTuyaWifiState()) { TuyaSetWifiLed(); }
if (!Tuya.low_power_mode) {
Tuya.heartbeat_timer++;
From d07d4b06c9de730c27fdb6179363d930eb1d2b66 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 3 Mar 2023 10:28:22 +0100
Subject: [PATCH 063/227] Update changelogs
- Add MCP23008 virtual switch/button/relay support
---
CHANGELOG.md | 2 +
RELEASENOTES.md | 2 +
.../tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino | 152 ++++++++++++------
.../xdrv_88_esp32_shelly_pro.ino | 4 +-
4 files changed, 111 insertions(+), 49 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1ee82d8c4..5c5684fd7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,8 @@ All notable changes to this project will be documented in this file.
### Changed
### Fixed
+- TuyaMcu v1 sequence fix (#17625)
+- TuyaMcu v1 timer integer overflow (#18048)
### Removed
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index feb22e9f0..7a3d2b793 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -126,8 +126,10 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- Move #define OTA_URL from user_config.h to board files for better inital support [#18008](https://github.com/arendst/Tasmota/issues/18008)
### Fixed
+- TuyaMcu v1 sequence fix [#17625](https://github.com/arendst/Tasmota/issues/17625)
- SEN5X floats and units [#17961](https://github.com/arendst/Tasmota/issues/17961)
- Energytotals cannot be set to negative values [#17965](https://github.com/arendst/Tasmota/issues/17965)
- SR04 driver single pin ultrasonic sensor detection [#17966](https://github.com/arendst/Tasmota/issues/17966)
- IR panasonic protocol regression from v12.0.2.4 [#18013](https://github.com/arendst/Tasmota/issues/18013)
- EnergyTotal divided twice during minimal upgrade step regression from v12.3.1.3 [#18024](https://github.com/arendst/Tasmota/issues/18024)
+- TuyaMcu v1 timer integer overflow [#18048](https://github.com/arendst/Tasmota/issues/18048)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
index 5ceb734ca..349521a9a 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
@@ -20,7 +20,6 @@
* and handle any input and output as configured GPIOs.
*
* Restrictions:
- * - Supports MCP23017 (=I2C) and MCP23S17 (=SPI)
* - Uses incremental I2C addresses / SPI Chip select until template pin count reached
* - Max support for 28 switches (input), 32 buttons (input), 32 relays (output)
*
@@ -38,14 +37,16 @@
* Switch_n1..28 Sn 192..219 Switch to Gnd without internal pullup
* Relay1..28 R 224..255 Relay
* Relay_i1..28 Ri 256..287 Relay inverted
+ * Output_Hi Oh 3840 Fixed output high
+ * Output_lo Ol 3872 Fixed output low
*
* Prepare a template to be loaded either by:
* - a rule like: rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
* - a script like: -y{"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
* - file called mcp23x.dat with contents: {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
*
- * S3 S2 B2 B3 B1 S1 R1 R4 R2 R3 S4
- * {"NAME":"MCP23S17 Shelly Pro 4PM","GPIO":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]}
+ * S3 S2 B2 B3 Oh B1 S1 R1 R4 R2 R3 S4
+ * {"NAME":"MCP23S17 Shelly Pro 4PM","GPIO":[194,193,65,66,3840,64,192,0,224,0,0,0,227,225,226,195]}
*
* Inverted relays and buttons Ri8 Ri7 Ri6 Ri5 Ri4 Ri3 Ri2 Ri1 B1 B2 B3 B4 B5 B6 B7 B8
* {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
@@ -71,13 +72,15 @@
\*********************************************************************************************/
#define XDRV_67 67
-#define XI2C_77 77 // See I2CDEVICES.md
+#define XI2C_77 77 // See I2CDEVICES.md
-#define MCP23XXX_ADDR_START 0x20 // 32
-#define MCP23XXX_ADDR_END 0x26 // 38
+#define MCP23XXX_ADDR_START 0x20 // 32
+#define MCP23XXX_ADDR_END 0x26 // 38
#define MCP23XXX_MAX_DEVICES 6
+#define MCP23XXX_SPI_CLOCK 1000000 // SPI clock speed set to 1MHz in case of signal interference at higher speed (Max is 10MHz)
+
/*********************************************************************************************\
* MCP23017 support
\*********************************************************************************************/
@@ -133,7 +136,6 @@ typedef struct {
uint8_t address;
uint8_t interface;
uint8_t pins; // 8 (MCP23008) or 16 (MCP23017 / MCP23S17)
- uint8_t type; // 1 (MCP23008) or 2 (MCP23017) or 3 (MCP23S17)
int8_t pin_cs;
int8_t pin_int;
} tMcp23xDevice;
@@ -162,7 +164,7 @@ uint16_t *Mcp23x_gpio_pin = nullptr;
#ifdef USE_SPI
void MCP23xEnable(void) {
- SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
+ SPI.beginTransaction(SPISettings(MCP23XXX_SPI_CLOCK, MSBFIRST, SPI_MODE0));
digitalWrite(Mcp23x.device[Mcp23x.chip].pin_cs, 0);
}
@@ -175,12 +177,14 @@ void MCP23xDisable(void) {
void MCP23xDumpRegs(void) {
uint8_t data[22];
for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
+ uint32_t data_size = sizeof(data);
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) { data_size /= 2; }
#ifdef USE_SPI
if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
MCP23xEnable();
SPI.transfer(Mcp23x.device[Mcp23x.chip].address | 1);
SPI.transfer(0);
- for (uint32_t i = 0; i < sizeof(data); i++) {
+ for (uint32_t i = 0; i < data_size; i++) {
data[i] = SPI.transfer(0xFF);
}
MCP23xDisable();
@@ -188,10 +192,10 @@ void MCP23xDumpRegs(void) {
#endif
#ifdef USE_I2C
if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
- I2cReadBuffer(Mcp23x.device[Mcp23x.chip].address, 0, data, sizeof(data));
+ I2cReadBuffer(Mcp23x.device[Mcp23x.chip].address, 0, data, data_size);
}
#endif
- AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Intf %d, Address %02X, Regs %*_H"), Mcp23x.device[Mcp23x.chip].interface, Mcp23x.device[Mcp23x.chip].address, sizeof(data), data);
+ AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Intf %d, Address %02X, Regs %*_H"), Mcp23x.device[Mcp23x.chip].interface, Mcp23x.device[Mcp23x.chip].address, data_size, data);
}
}
@@ -279,6 +283,9 @@ void MCP23xUpdate(uint8_t pin, bool pin_value, uint8_t reg_addr) {
uint8_t reg_value = 0;
if (reg_addr == MCP23X17_OLATA) {
reg_value = Mcp23x.device[Mcp23x.chip].olata;
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ reg_addr = MCP23X08_OLAT;
+ }
} else if (reg_addr == MCP23X17_OLATB) {
reg_value = Mcp23x.device[Mcp23x.chip].olatb;
} else {
@@ -290,6 +297,9 @@ void MCP23xUpdate(uint8_t pin, bool pin_value, uint8_t reg_addr) {
reg_value &= ~(1 << bit);
}
MCP23xWrite(reg_addr, reg_value);
+ if ((8 == Mcp23x.device[Mcp23x.chip].pins) && (reg_addr == MCP23X08_OLAT)) {
+ reg_addr = MCP23X17_OLATA;
+ }
if (reg_addr == MCP23X17_OLATA) {
Mcp23x.device[Mcp23x.chip].olata = reg_value;
} else if (reg_addr == MCP23X17_OLATB) {
@@ -299,12 +309,28 @@ void MCP23xUpdate(uint8_t pin, bool pin_value, uint8_t reg_addr) {
/*********************************************************************************************/
+uint32_t MCP23xSetChip(uint8_t pin) {
+ // Calculate chip based on number of pins per chip. 8 for MCP23008, 16 for MCP23x17
+ // pin 0 - 63
+ for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
+ if (Mcp23x.device[Mcp23x.chip].pins > pin) { break; }
+ pin -= Mcp23x.device[Mcp23x.chip].pins;
+ }
+ return pin; // relative pin number within chip (0 ... 7 or 0 ... 15)
+}
+
void MCP23xPinMode(uint8_t pin, uint8_t flags) {
- // pin 0 - 31
- Mcp23x.chip = pin / 16;
- pin = pin % 16;
- uint8_t iodir = pin < 8 ? MCP23X17_IODIRA : MCP23X17_IODIRB;
- uint8_t gppu = pin < 8 ? MCP23X17_GPPUA : MCP23X17_GPPUB;
+ // pin 0 - 63
+ pin = MCP23xSetChip(pin);
+ uint8_t iodir;
+ uint8_t gppu;
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ iodir = MCP23X08_IODIR;
+ gppu = MCP23X08_GPPU;
+ } else {
+ iodir = pin < 8 ? MCP23X17_IODIRA : MCP23X17_IODIRB;
+ gppu = pin < 8 ? MCP23X17_GPPUA : MCP23X17_GPPUB;
+ }
switch (flags) {
case INPUT:
MCP23xUpdate(pin, true, iodir);
@@ -318,15 +344,25 @@ void MCP23xPinMode(uint8_t pin, uint8_t flags) {
MCP23xUpdate(pin, false, iodir);
break;
}
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: MCP23xPinMode chip %d, pin %d, flags %d, regs %d,%d"), Mcp23x.chip, pin, flags, iodir, gppu);
}
void MCP23xPinInterruptMode(uint8_t pin, uint8_t interrupt_mode) {
- // pin 0 - 31
- Mcp23x.chip = pin / 16;
- pin = pin % 16;
- uint8_t gpinten = pin < 8 ? MCP23X17_GPINTENA : MCP23X17_GPINTENB;
- uint8_t intcon = pin < 8 ? MCP23X17_INTCONA : MCP23X17_INTCONB;
- uint8_t defval = pin < 8 ? MCP23X17_DEFVALA : MCP23X17_DEFVALB;
+ // pin 0 - 63
+ pin = MCP23xSetChip(pin);
+ uint8_t gpinten;
+ uint8_t intcon;
+ uint8_t defval;
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ gpinten = MCP23X08_GPINTEN;
+ intcon = MCP23X08_INTCON;
+ defval = MCP23X08_DEFVAL;
+ } else {
+ gpinten = pin < 8 ? MCP23X17_GPINTENA : MCP23X17_GPINTENB;
+ intcon = pin < 8 ? MCP23X17_INTCONA : MCP23X17_INTCONB;
+ defval = pin < 8 ? MCP23X17_DEFVALA : MCP23X17_DEFVALB;
+ }
switch (interrupt_mode) {
case MCP23XXX_CHANGE:
MCP23xUpdate(pin, true, gpinten);
@@ -348,21 +384,35 @@ void MCP23xPinInterruptMode(uint8_t pin, uint8_t interrupt_mode) {
}
}
+void MCP23xSetPinModes(uint8_t pin, uint8_t flags) {
+ // pin 0 - 63
+ MCP23xPinMode(pin, flags);
+ if (Mcp23x.device[Mcp23x.chip].pin_int > -1) { // Mcp23x.chip is updated by call to MCP23xPinMode
+ MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ }
+}
+
bool MCP23xDigitalRead(uint8_t pin) {
- // pin 0 - 31
- Mcp23x.chip = pin / 16;
- pin = pin % 16;
+ // pin 0 - 63
+ pin = MCP23xSetChip(pin);
uint8_t bit = pin % 8;
- uint8_t reg_addr = pin < 8 ? MCP23X17_GPIOA : MCP23X17_GPIOB;
+ uint8_t reg_addr;
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ reg_addr = MCP23X08_GPIO;
+ } else {
+ reg_addr = pin < 8 ? MCP23X17_GPIOA : MCP23X17_GPIOB;
+ }
uint8_t value = MCP23xRead(reg_addr);
return value & (1 << bit);
}
void MCP23xDigitalWrite(uint8_t pin, bool value) {
- // pin 0 - 31
- Mcp23x.chip = pin / 16;
- pin = pin % 16;
+ // pin 0 - 63
+ pin = MCP23xSetChip(pin);
uint8_t reg_addr = pin < 8 ? MCP23X17_OLATA : MCP23X17_OLATB;
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: MCP23xDigitalWrite chip %d, pin %d, state %d, reg %d"), Mcp23x.chip, pin, value, reg_addr);
+
MCP23xUpdate(pin, value, reg_addr);
}
@@ -370,8 +420,8 @@ void MCP23xDigitalWrite(uint8_t pin, bool value) {
* Tasmota
\*********************************************************************************************/
-int IRAM_ATTR MCP23xPin(uint32_t gpio, uint32_t index = 0);
-int IRAM_ATTR MCP23xPin(uint32_t gpio, uint32_t index) {
+int MCP23xPin(uint32_t gpio, uint32_t index = 0);
+int MCP23xPin(uint32_t gpio, uint32_t index) {
uint16_t real_gpio = gpio << 5;
uint16_t mask = 0xFFE0;
if (index < GPIO_ANY) {
@@ -419,13 +469,6 @@ String MCP23xTemplateLoadFile(void) {
return mcptmplt;
}
-void MCP23xSetPinModes(uint8_t pin, uint8_t flags) {
- MCP23xPinMode(pin, flags);
- if (Mcp23x.device[Mcp23x.chip].pin_int > -1) { // Mcp23x.chip is updated by call to MCP23xPinMode
- MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
- }
-}
-
bool MCP23xLoadTemplate(void) {
String mcptmplt = MCP23xTemplateLoadFile();
uint32_t len = mcptmplt.length() +1;
@@ -494,6 +537,14 @@ bool MCP23xLoadTemplate(void) {
Mcp23x.relay_max++;
MCP23xPinMode(pin, OUTPUT);
}
+ else if (mpin == AGPIO(GPIO_OUTPUT_HI)) {
+ MCP23xPinMode(pin, OUTPUT);
+ MCP23xDigitalWrite(pin, true);
+ }
+ else if (mpin == AGPIO(GPIO_OUTPUT_LO)) {
+ MCP23xPinMode(pin, OUTPUT);
+ MCP23xDigitalWrite(pin, false);
+ }
else { mpin = 0; }
Mcp23x_gpio_pin[pin] = mpin;
}
@@ -552,7 +603,6 @@ void MCP23xModuleInit(void) {
Mcp23x.device[Mcp23x.chip].interface = MCP23X_SPI;
Mcp23x.device[Mcp23x.chip].address = MCP23XXX_ADDR_START << 1;
AddLog(LOG_LEVEL_INFO, PSTR("SPI: MCP23S17 found at CS%d"), Mcp23x.chip +1);
- Mcp23x.device[Mcp23x.chip].type = 3;
Mcp23x.device[Mcp23x.chip].pins = 16;
MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
Mcp23x.device[Mcp23x.chip].olata = MCP23xRead(MCP23X17_OLATA);
@@ -578,16 +628,14 @@ void MCP23xModuleInit(void) {
uint8_t buffer;
if (MCP23xValidRead(MCP23X08_IOCON, &buffer)) {
if (0x00 == buffer) {
- /*
I2cSetActiveFound(mcp23xxx_address, "MCP23008");
- Mcp23x.device[Mcp23x.chip].type = 1;
Mcp23x.device[Mcp23x.chip].pins = 8;
+ MCP23xWrite(MCP23X08_IOCON, 0b00011000); // Slew rate disabled, HAEN pins for addressing
+ Mcp23x.device[Mcp23x.chip].olata = MCP23xRead(MCP23X08_OLAT);
Mcp23x.max_devices++;
- */
}
else if (0x80 == buffer) {
I2cSetActiveFound(mcp23xxx_address, "MCP23017");
- Mcp23x.device[Mcp23x.chip].type = 2;
Mcp23x.device[Mcp23x.chip].pins = 16;
MCP23xWrite(MCP23X08_IOCON, 0x00); // Reset bank mode to 0 (MCP23X17_GPINTENB)
MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
@@ -630,11 +678,16 @@ void MCP23xModuleInit(void) {
void MCP23xServiceInput(void) {
// I found no reliable way to receive interrupts; noise received at undefined moments - unstable usage
- Mcp23x.interrupt = 0;
+ Mcp23x.interrupt = false;
// This works with no interrupt
uint32_t pin_offset = 0;
+ uint32_t gpio;
for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
- uint32_t gpio = MCP23xRead16(MCP23X17_GPIOA); // Read gpio
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ gpio = MCP23xRead(MCP23X08_GPIO); // Read MCP23008 gpio
+ } else {
+ gpio = MCP23xRead16(MCP23X17_GPIOA); // Read MCP23x17 gpio
+ }
// AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("MCP: Chip %d, State %04X"), Mcp23x.chip, gpio);
@@ -657,14 +710,19 @@ void MCP23xServiceInput(void) {
}
void IRAM_ATTR MCP23xInputIsr(void) {
- Mcp23x.interrupt = 1;
+ Mcp23x.interrupt = true;
}
void MCP23xInit(void) {
if (Mcp23x.button_max || Mcp23x.switch_max) {
+ uint32_t gpio;
for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
if (Mcp23x.device[Mcp23x.chip].pin_int > -1) {
- uint32_t gpio = MCP23xRead16(MCP23X17_GPIOA); // Clear interrupt
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ gpio = MCP23xRead(MCP23X08_GPIO); // Clear MCP23008 interrupt
+ } else {
+ gpio = MCP23xRead16(MCP23X17_GPIOA); // Clear MCP23x17 interrupt
+ }
attachInterrupt(Mcp23x.device[Mcp23x.chip].pin_int, MCP23xInputIsr, CHANGE);
}
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
index 1eb01f7a6..e9117e3f2 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
@@ -28,7 +28,7 @@
* {"NAME":"Shelly Pro 1PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3459,0,0,32,4736,0,160,0],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350"}
* {"NAME":"Shelly Pro 2","GPIO":[0,1,0,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
* {"NAME":"Shelly Pro 2PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,9569,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3460,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
- * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,10272,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,10240,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;rule3 on file#mcp23x.dat do {\"NAME\":\"MCP23S17 Shelly Pro 4PM\",\"GPIO\":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]} endon"}
+ * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,10272,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,10240,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;rule3 on file#mcp23x.dat do {\"NAME\":\"MCP23S17 Shelly Pro 4PM\",\"GPIO\":[194,193,65,66,3840,64,192,0,224,0,0,0,227,225,226,195]} endon"}
*
* Shelly Pro 1/2 uses SPI to control one 74HC595 for relays/leds and one ADE7953 (1PM) or two ADE7953 (2PM) for energy monitoring
* Shelly Pro 4 uses an SPI to control one MCP23S17 for buttons/switches/relays/leds and two ADE7953 for energy monitoring and a second SPI for the display
@@ -78,7 +78,7 @@ void ShellyPro4Init(void) {
}
void ShellyPro4Reset(void) {
- MCP23xPinMode(4, OUTPUT);
+// MCP23xPinMode(4, OUTPUT); // Performed by MCP23x.dat template as Output_Hi
MCP23xDigitalWrite(4, 0); // Reset pin display, ADE7953
delay(1); // To initiate a hardware reset, this pin must be brought low for a minimum of 10 μs.
MCP23xDigitalWrite(4, 1);
From 453f0abad1e3a40f9a0bd9b10dacf53ac5924e39 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 3 Mar 2023 10:31:31 +0100
Subject: [PATCH 064/227] Revert "Update changelogs"
This reverts commit d07d4b06c9de730c27fdb6179363d930eb1d2b66.
---
CHANGELOG.md | 2 -
RELEASENOTES.md | 2 -
.../tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino | 152 ++++++------------
.../xdrv_88_esp32_shelly_pro.ino | 4 +-
4 files changed, 49 insertions(+), 111 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c5684fd7..1ee82d8c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,8 +12,6 @@ All notable changes to this project will be documented in this file.
### Changed
### Fixed
-- TuyaMcu v1 sequence fix (#17625)
-- TuyaMcu v1 timer integer overflow (#18048)
### Removed
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 7a3d2b793..feb22e9f0 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -126,10 +126,8 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- Move #define OTA_URL from user_config.h to board files for better inital support [#18008](https://github.com/arendst/Tasmota/issues/18008)
### Fixed
-- TuyaMcu v1 sequence fix [#17625](https://github.com/arendst/Tasmota/issues/17625)
- SEN5X floats and units [#17961](https://github.com/arendst/Tasmota/issues/17961)
- Energytotals cannot be set to negative values [#17965](https://github.com/arendst/Tasmota/issues/17965)
- SR04 driver single pin ultrasonic sensor detection [#17966](https://github.com/arendst/Tasmota/issues/17966)
- IR panasonic protocol regression from v12.0.2.4 [#18013](https://github.com/arendst/Tasmota/issues/18013)
- EnergyTotal divided twice during minimal upgrade step regression from v12.3.1.3 [#18024](https://github.com/arendst/Tasmota/issues/18024)
-- TuyaMcu v1 timer integer overflow [#18048](https://github.com/arendst/Tasmota/issues/18048)
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
index 349521a9a..5ceb734ca 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
@@ -20,6 +20,7 @@
* and handle any input and output as configured GPIOs.
*
* Restrictions:
+ * - Supports MCP23017 (=I2C) and MCP23S17 (=SPI)
* - Uses incremental I2C addresses / SPI Chip select until template pin count reached
* - Max support for 28 switches (input), 32 buttons (input), 32 relays (output)
*
@@ -37,16 +38,14 @@
* Switch_n1..28 Sn 192..219 Switch to Gnd without internal pullup
* Relay1..28 R 224..255 Relay
* Relay_i1..28 Ri 256..287 Relay inverted
- * Output_Hi Oh 3840 Fixed output high
- * Output_lo Ol 3872 Fixed output low
*
* Prepare a template to be loaded either by:
* - a rule like: rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
* - a script like: -y{"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
* - file called mcp23x.dat with contents: {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
*
- * S3 S2 B2 B3 Oh B1 S1 R1 R4 R2 R3 S4
- * {"NAME":"MCP23S17 Shelly Pro 4PM","GPIO":[194,193,65,66,3840,64,192,0,224,0,0,0,227,225,226,195]}
+ * S3 S2 B2 B3 B1 S1 R1 R4 R2 R3 S4
+ * {"NAME":"MCP23S17 Shelly Pro 4PM","GPIO":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]}
*
* Inverted relays and buttons Ri8 Ri7 Ri6 Ri5 Ri4 Ri3 Ri2 Ri1 B1 B2 B3 B4 B5 B6 B7 B8
* {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
@@ -72,15 +71,13 @@
\*********************************************************************************************/
#define XDRV_67 67
-#define XI2C_77 77 // See I2CDEVICES.md
+#define XI2C_77 77 // See I2CDEVICES.md
-#define MCP23XXX_ADDR_START 0x20 // 32
-#define MCP23XXX_ADDR_END 0x26 // 38
+#define MCP23XXX_ADDR_START 0x20 // 32
+#define MCP23XXX_ADDR_END 0x26 // 38
#define MCP23XXX_MAX_DEVICES 6
-#define MCP23XXX_SPI_CLOCK 1000000 // SPI clock speed set to 1MHz in case of signal interference at higher speed (Max is 10MHz)
-
/*********************************************************************************************\
* MCP23017 support
\*********************************************************************************************/
@@ -136,6 +133,7 @@ typedef struct {
uint8_t address;
uint8_t interface;
uint8_t pins; // 8 (MCP23008) or 16 (MCP23017 / MCP23S17)
+ uint8_t type; // 1 (MCP23008) or 2 (MCP23017) or 3 (MCP23S17)
int8_t pin_cs;
int8_t pin_int;
} tMcp23xDevice;
@@ -164,7 +162,7 @@ uint16_t *Mcp23x_gpio_pin = nullptr;
#ifdef USE_SPI
void MCP23xEnable(void) {
- SPI.beginTransaction(SPISettings(MCP23XXX_SPI_CLOCK, MSBFIRST, SPI_MODE0));
+ SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
digitalWrite(Mcp23x.device[Mcp23x.chip].pin_cs, 0);
}
@@ -177,14 +175,12 @@ void MCP23xDisable(void) {
void MCP23xDumpRegs(void) {
uint8_t data[22];
for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
- uint32_t data_size = sizeof(data);
- if (8 == Mcp23x.device[Mcp23x.chip].pins) { data_size /= 2; }
#ifdef USE_SPI
if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
MCP23xEnable();
SPI.transfer(Mcp23x.device[Mcp23x.chip].address | 1);
SPI.transfer(0);
- for (uint32_t i = 0; i < data_size; i++) {
+ for (uint32_t i = 0; i < sizeof(data); i++) {
data[i] = SPI.transfer(0xFF);
}
MCP23xDisable();
@@ -192,10 +188,10 @@ void MCP23xDumpRegs(void) {
#endif
#ifdef USE_I2C
if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
- I2cReadBuffer(Mcp23x.device[Mcp23x.chip].address, 0, data, data_size);
+ I2cReadBuffer(Mcp23x.device[Mcp23x.chip].address, 0, data, sizeof(data));
}
#endif
- AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Intf %d, Address %02X, Regs %*_H"), Mcp23x.device[Mcp23x.chip].interface, Mcp23x.device[Mcp23x.chip].address, data_size, data);
+ AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Intf %d, Address %02X, Regs %*_H"), Mcp23x.device[Mcp23x.chip].interface, Mcp23x.device[Mcp23x.chip].address, sizeof(data), data);
}
}
@@ -283,9 +279,6 @@ void MCP23xUpdate(uint8_t pin, bool pin_value, uint8_t reg_addr) {
uint8_t reg_value = 0;
if (reg_addr == MCP23X17_OLATA) {
reg_value = Mcp23x.device[Mcp23x.chip].olata;
- if (8 == Mcp23x.device[Mcp23x.chip].pins) {
- reg_addr = MCP23X08_OLAT;
- }
} else if (reg_addr == MCP23X17_OLATB) {
reg_value = Mcp23x.device[Mcp23x.chip].olatb;
} else {
@@ -297,9 +290,6 @@ void MCP23xUpdate(uint8_t pin, bool pin_value, uint8_t reg_addr) {
reg_value &= ~(1 << bit);
}
MCP23xWrite(reg_addr, reg_value);
- if ((8 == Mcp23x.device[Mcp23x.chip].pins) && (reg_addr == MCP23X08_OLAT)) {
- reg_addr = MCP23X17_OLATA;
- }
if (reg_addr == MCP23X17_OLATA) {
Mcp23x.device[Mcp23x.chip].olata = reg_value;
} else if (reg_addr == MCP23X17_OLATB) {
@@ -309,28 +299,12 @@ void MCP23xUpdate(uint8_t pin, bool pin_value, uint8_t reg_addr) {
/*********************************************************************************************/
-uint32_t MCP23xSetChip(uint8_t pin) {
- // Calculate chip based on number of pins per chip. 8 for MCP23008, 16 for MCP23x17
- // pin 0 - 63
- for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
- if (Mcp23x.device[Mcp23x.chip].pins > pin) { break; }
- pin -= Mcp23x.device[Mcp23x.chip].pins;
- }
- return pin; // relative pin number within chip (0 ... 7 or 0 ... 15)
-}
-
void MCP23xPinMode(uint8_t pin, uint8_t flags) {
- // pin 0 - 63
- pin = MCP23xSetChip(pin);
- uint8_t iodir;
- uint8_t gppu;
- if (8 == Mcp23x.device[Mcp23x.chip].pins) {
- iodir = MCP23X08_IODIR;
- gppu = MCP23X08_GPPU;
- } else {
- iodir = pin < 8 ? MCP23X17_IODIRA : MCP23X17_IODIRB;
- gppu = pin < 8 ? MCP23X17_GPPUA : MCP23X17_GPPUB;
- }
+ // pin 0 - 31
+ Mcp23x.chip = pin / 16;
+ pin = pin % 16;
+ uint8_t iodir = pin < 8 ? MCP23X17_IODIRA : MCP23X17_IODIRB;
+ uint8_t gppu = pin < 8 ? MCP23X17_GPPUA : MCP23X17_GPPUB;
switch (flags) {
case INPUT:
MCP23xUpdate(pin, true, iodir);
@@ -344,25 +318,15 @@ void MCP23xPinMode(uint8_t pin, uint8_t flags) {
MCP23xUpdate(pin, false, iodir);
break;
}
-
-// AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: MCP23xPinMode chip %d, pin %d, flags %d, regs %d,%d"), Mcp23x.chip, pin, flags, iodir, gppu);
}
void MCP23xPinInterruptMode(uint8_t pin, uint8_t interrupt_mode) {
- // pin 0 - 63
- pin = MCP23xSetChip(pin);
- uint8_t gpinten;
- uint8_t intcon;
- uint8_t defval;
- if (8 == Mcp23x.device[Mcp23x.chip].pins) {
- gpinten = MCP23X08_GPINTEN;
- intcon = MCP23X08_INTCON;
- defval = MCP23X08_DEFVAL;
- } else {
- gpinten = pin < 8 ? MCP23X17_GPINTENA : MCP23X17_GPINTENB;
- intcon = pin < 8 ? MCP23X17_INTCONA : MCP23X17_INTCONB;
- defval = pin < 8 ? MCP23X17_DEFVALA : MCP23X17_DEFVALB;
- }
+ // pin 0 - 31
+ Mcp23x.chip = pin / 16;
+ pin = pin % 16;
+ uint8_t gpinten = pin < 8 ? MCP23X17_GPINTENA : MCP23X17_GPINTENB;
+ uint8_t intcon = pin < 8 ? MCP23X17_INTCONA : MCP23X17_INTCONB;
+ uint8_t defval = pin < 8 ? MCP23X17_DEFVALA : MCP23X17_DEFVALB;
switch (interrupt_mode) {
case MCP23XXX_CHANGE:
MCP23xUpdate(pin, true, gpinten);
@@ -384,35 +348,21 @@ void MCP23xPinInterruptMode(uint8_t pin, uint8_t interrupt_mode) {
}
}
-void MCP23xSetPinModes(uint8_t pin, uint8_t flags) {
- // pin 0 - 63
- MCP23xPinMode(pin, flags);
- if (Mcp23x.device[Mcp23x.chip].pin_int > -1) { // Mcp23x.chip is updated by call to MCP23xPinMode
- MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
- }
-}
-
bool MCP23xDigitalRead(uint8_t pin) {
- // pin 0 - 63
- pin = MCP23xSetChip(pin);
+ // pin 0 - 31
+ Mcp23x.chip = pin / 16;
+ pin = pin % 16;
uint8_t bit = pin % 8;
- uint8_t reg_addr;
- if (8 == Mcp23x.device[Mcp23x.chip].pins) {
- reg_addr = MCP23X08_GPIO;
- } else {
- reg_addr = pin < 8 ? MCP23X17_GPIOA : MCP23X17_GPIOB;
- }
+ uint8_t reg_addr = pin < 8 ? MCP23X17_GPIOA : MCP23X17_GPIOB;
uint8_t value = MCP23xRead(reg_addr);
return value & (1 << bit);
}
void MCP23xDigitalWrite(uint8_t pin, bool value) {
- // pin 0 - 63
- pin = MCP23xSetChip(pin);
+ // pin 0 - 31
+ Mcp23x.chip = pin / 16;
+ pin = pin % 16;
uint8_t reg_addr = pin < 8 ? MCP23X17_OLATA : MCP23X17_OLATB;
-
-// AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: MCP23xDigitalWrite chip %d, pin %d, state %d, reg %d"), Mcp23x.chip, pin, value, reg_addr);
-
MCP23xUpdate(pin, value, reg_addr);
}
@@ -420,8 +370,8 @@ void MCP23xDigitalWrite(uint8_t pin, bool value) {
* Tasmota
\*********************************************************************************************/
-int MCP23xPin(uint32_t gpio, uint32_t index = 0);
-int MCP23xPin(uint32_t gpio, uint32_t index) {
+int IRAM_ATTR MCP23xPin(uint32_t gpio, uint32_t index = 0);
+int IRAM_ATTR MCP23xPin(uint32_t gpio, uint32_t index) {
uint16_t real_gpio = gpio << 5;
uint16_t mask = 0xFFE0;
if (index < GPIO_ANY) {
@@ -469,6 +419,13 @@ String MCP23xTemplateLoadFile(void) {
return mcptmplt;
}
+void MCP23xSetPinModes(uint8_t pin, uint8_t flags) {
+ MCP23xPinMode(pin, flags);
+ if (Mcp23x.device[Mcp23x.chip].pin_int > -1) { // Mcp23x.chip is updated by call to MCP23xPinMode
+ MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ }
+}
+
bool MCP23xLoadTemplate(void) {
String mcptmplt = MCP23xTemplateLoadFile();
uint32_t len = mcptmplt.length() +1;
@@ -537,14 +494,6 @@ bool MCP23xLoadTemplate(void) {
Mcp23x.relay_max++;
MCP23xPinMode(pin, OUTPUT);
}
- else if (mpin == AGPIO(GPIO_OUTPUT_HI)) {
- MCP23xPinMode(pin, OUTPUT);
- MCP23xDigitalWrite(pin, true);
- }
- else if (mpin == AGPIO(GPIO_OUTPUT_LO)) {
- MCP23xPinMode(pin, OUTPUT);
- MCP23xDigitalWrite(pin, false);
- }
else { mpin = 0; }
Mcp23x_gpio_pin[pin] = mpin;
}
@@ -603,6 +552,7 @@ void MCP23xModuleInit(void) {
Mcp23x.device[Mcp23x.chip].interface = MCP23X_SPI;
Mcp23x.device[Mcp23x.chip].address = MCP23XXX_ADDR_START << 1;
AddLog(LOG_LEVEL_INFO, PSTR("SPI: MCP23S17 found at CS%d"), Mcp23x.chip +1);
+ Mcp23x.device[Mcp23x.chip].type = 3;
Mcp23x.device[Mcp23x.chip].pins = 16;
MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
Mcp23x.device[Mcp23x.chip].olata = MCP23xRead(MCP23X17_OLATA);
@@ -628,14 +578,16 @@ void MCP23xModuleInit(void) {
uint8_t buffer;
if (MCP23xValidRead(MCP23X08_IOCON, &buffer)) {
if (0x00 == buffer) {
+ /*
I2cSetActiveFound(mcp23xxx_address, "MCP23008");
+ Mcp23x.device[Mcp23x.chip].type = 1;
Mcp23x.device[Mcp23x.chip].pins = 8;
- MCP23xWrite(MCP23X08_IOCON, 0b00011000); // Slew rate disabled, HAEN pins for addressing
- Mcp23x.device[Mcp23x.chip].olata = MCP23xRead(MCP23X08_OLAT);
Mcp23x.max_devices++;
+ */
}
else if (0x80 == buffer) {
I2cSetActiveFound(mcp23xxx_address, "MCP23017");
+ Mcp23x.device[Mcp23x.chip].type = 2;
Mcp23x.device[Mcp23x.chip].pins = 16;
MCP23xWrite(MCP23X08_IOCON, 0x00); // Reset bank mode to 0 (MCP23X17_GPINTENB)
MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
@@ -678,16 +630,11 @@ void MCP23xModuleInit(void) {
void MCP23xServiceInput(void) {
// I found no reliable way to receive interrupts; noise received at undefined moments - unstable usage
- Mcp23x.interrupt = false;
+ Mcp23x.interrupt = 0;
// This works with no interrupt
uint32_t pin_offset = 0;
- uint32_t gpio;
for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
- if (8 == Mcp23x.device[Mcp23x.chip].pins) {
- gpio = MCP23xRead(MCP23X08_GPIO); // Read MCP23008 gpio
- } else {
- gpio = MCP23xRead16(MCP23X17_GPIOA); // Read MCP23x17 gpio
- }
+ uint32_t gpio = MCP23xRead16(MCP23X17_GPIOA); // Read gpio
// AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("MCP: Chip %d, State %04X"), Mcp23x.chip, gpio);
@@ -710,19 +657,14 @@ void MCP23xServiceInput(void) {
}
void IRAM_ATTR MCP23xInputIsr(void) {
- Mcp23x.interrupt = true;
+ Mcp23x.interrupt = 1;
}
void MCP23xInit(void) {
if (Mcp23x.button_max || Mcp23x.switch_max) {
- uint32_t gpio;
for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
if (Mcp23x.device[Mcp23x.chip].pin_int > -1) {
- if (8 == Mcp23x.device[Mcp23x.chip].pins) {
- gpio = MCP23xRead(MCP23X08_GPIO); // Clear MCP23008 interrupt
- } else {
- gpio = MCP23xRead16(MCP23X17_GPIOA); // Clear MCP23x17 interrupt
- }
+ uint32_t gpio = MCP23xRead16(MCP23X17_GPIOA); // Clear interrupt
attachInterrupt(Mcp23x.device[Mcp23x.chip].pin_int, MCP23xInputIsr, CHANGE);
}
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
index e9117e3f2..1eb01f7a6 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
@@ -28,7 +28,7 @@
* {"NAME":"Shelly Pro 1PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3459,0,0,32,4736,0,160,0],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350"}
* {"NAME":"Shelly Pro 2","GPIO":[0,1,0,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
* {"NAME":"Shelly Pro 2PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,9569,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3460,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
- * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,10272,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,10240,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;rule3 on file#mcp23x.dat do {\"NAME\":\"MCP23S17 Shelly Pro 4PM\",\"GPIO\":[194,193,65,66,3840,64,192,0,224,0,0,0,227,225,226,195]} endon"}
+ * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,10272,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,10240,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;rule3 on file#mcp23x.dat do {\"NAME\":\"MCP23S17 Shelly Pro 4PM\",\"GPIO\":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]} endon"}
*
* Shelly Pro 1/2 uses SPI to control one 74HC595 for relays/leds and one ADE7953 (1PM) or two ADE7953 (2PM) for energy monitoring
* Shelly Pro 4 uses an SPI to control one MCP23S17 for buttons/switches/relays/leds and two ADE7953 for energy monitoring and a second SPI for the display
@@ -78,7 +78,7 @@ void ShellyPro4Init(void) {
}
void ShellyPro4Reset(void) {
-// MCP23xPinMode(4, OUTPUT); // Performed by MCP23x.dat template as Output_Hi
+ MCP23xPinMode(4, OUTPUT);
MCP23xDigitalWrite(4, 0); // Reset pin display, ADE7953
delay(1); // To initiate a hardware reset, this pin must be brought low for a minimum of 10 μs.
MCP23xDigitalWrite(4, 1);
From c6f3fb7a8620a0a1c346e5a98ee69a1c88a0c2af Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 3 Mar 2023 10:32:19 +0100
Subject: [PATCH 065/227] Update changelogs
---
CHANGELOG.md | 2 ++
RELEASENOTES.md | 2 ++
2 files changed, 4 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1ee82d8c4..5c5684fd7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,8 @@ All notable changes to this project will be documented in this file.
### Changed
### Fixed
+- TuyaMcu v1 sequence fix (#17625)
+- TuyaMcu v1 timer integer overflow (#18048)
### Removed
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index feb22e9f0..7a3d2b793 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -126,8 +126,10 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- Move #define OTA_URL from user_config.h to board files for better inital support [#18008](https://github.com/arendst/Tasmota/issues/18008)
### Fixed
+- TuyaMcu v1 sequence fix [#17625](https://github.com/arendst/Tasmota/issues/17625)
- SEN5X floats and units [#17961](https://github.com/arendst/Tasmota/issues/17961)
- Energytotals cannot be set to negative values [#17965](https://github.com/arendst/Tasmota/issues/17965)
- SR04 driver single pin ultrasonic sensor detection [#17966](https://github.com/arendst/Tasmota/issues/17966)
- IR panasonic protocol regression from v12.0.2.4 [#18013](https://github.com/arendst/Tasmota/issues/18013)
- EnergyTotal divided twice during minimal upgrade step regression from v12.3.1.3 [#18024](https://github.com/arendst/Tasmota/issues/18024)
+- TuyaMcu v1 timer integer overflow [#18048](https://github.com/arendst/Tasmota/issues/18048)
From 2e5501e9abb727694f728e2f1681c7c7176dc8ed Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 3 Mar 2023 10:44:35 +0100
Subject: [PATCH 066/227] Add support for multiple MCP23008 as
switch/button/relay
---
CHANGELOG.md | 1 +
RELEASENOTES.md | 2 +-
.../tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino | 152 ++++++++++++------
.../xdrv_88_esp32_shelly_pro.ino | 4 +-
4 files changed, 109 insertions(+), 50 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c5684fd7..183c01d24 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file.
## [12.4.0.2]
### Added
+- Support for multiple MCP23008 as switch/button/relay
### Breaking Changed
- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 7a3d2b793..c8c2e175b 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -112,7 +112,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
## Changelog v12.4.0.2
### Added
-- Support for multiple MCP23017/MCP23S17 as switch/button/relay
+- Support for multiple MCP23008/MCP23017/MCP23S17 as switch/button/relay
- NTP time request from gateway [#17984](https://github.com/arendst/Tasmota/issues/17984)
### Breaking Changed
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
index 5ceb734ca..460cda2f4 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
@@ -20,7 +20,6 @@
* and handle any input and output as configured GPIOs.
*
* Restrictions:
- * - Supports MCP23017 (=I2C) and MCP23S17 (=SPI)
* - Uses incremental I2C addresses / SPI Chip select until template pin count reached
* - Max support for 28 switches (input), 32 buttons (input), 32 relays (output)
*
@@ -38,14 +37,16 @@
* Switch_n1..28 Sn 192..219 Switch to Gnd without internal pullup
* Relay1..28 R 224..255 Relay
* Relay_i1..28 Ri 256..287 Relay inverted
+ * Output_Hi Oh 3840 Fixed output high
+ * Output_lo Ol 3872 Fixed output low
*
* Prepare a template to be loaded either by:
* - a rule like: rule3 on file#mcp23x.dat do {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
* - a script like: -y{"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
* - file called mcp23x.dat with contents: {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
*
- * S3 S2 B2 B3 B1 S1 R1 R4 R2 R3 S4
- * {"NAME":"MCP23S17 Shelly Pro 4PM","GPIO":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]}
+ * S3 S2 B2 B3 Oh B1 S1 R1 R4 R2 R3 S4
+ * {"NAME":"MCP23S17 Shelly Pro 4PM","GPIO":[194,193,65,66,3840,64,192,0,224,0,0,0,227,225,226,195]}
*
* Inverted relays and buttons Ri8 Ri7 Ri6 Ri5 Ri4 Ri3 Ri2 Ri1 B1 B2 B3 B4 B5 B6 B7 B8
* {"NAME":"MCP23017 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
@@ -71,13 +72,15 @@
\*********************************************************************************************/
#define XDRV_67 67
-#define XI2C_77 77 // See I2CDEVICES.md
+#define XI2C_77 77 // See I2CDEVICES.md
-#define MCP23XXX_ADDR_START 0x20 // 32
-#define MCP23XXX_ADDR_END 0x26 // 38
+#define MCP23XXX_ADDR_START 0x20 // 32
+#define MCP23XXX_ADDR_END 0x26 // 38
#define MCP23XXX_MAX_DEVICES 6
+#define MCP23XXX_SPI_CLOCK 1000000 // SPI clock speed set to 1MHz in case of signal interference at higher speed (Max is 10MHz)
+
/*********************************************************************************************\
* MCP23017 support
\*********************************************************************************************/
@@ -133,7 +136,6 @@ typedef struct {
uint8_t address;
uint8_t interface;
uint8_t pins; // 8 (MCP23008) or 16 (MCP23017 / MCP23S17)
- uint8_t type; // 1 (MCP23008) or 2 (MCP23017) or 3 (MCP23S17)
int8_t pin_cs;
int8_t pin_int;
} tMcp23xDevice;
@@ -162,7 +164,7 @@ uint16_t *Mcp23x_gpio_pin = nullptr;
#ifdef USE_SPI
void MCP23xEnable(void) {
- SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
+ SPI.beginTransaction(SPISettings(MCP23XXX_SPI_CLOCK, MSBFIRST, SPI_MODE0));
digitalWrite(Mcp23x.device[Mcp23x.chip].pin_cs, 0);
}
@@ -175,12 +177,14 @@ void MCP23xDisable(void) {
void MCP23xDumpRegs(void) {
uint8_t data[22];
for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
+ uint32_t data_size = sizeof(data);
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) { data_size /= 2; }
#ifdef USE_SPI
if (MCP23X_SPI == Mcp23x.device[Mcp23x.chip].interface) {
MCP23xEnable();
SPI.transfer(Mcp23x.device[Mcp23x.chip].address | 1);
SPI.transfer(0);
- for (uint32_t i = 0; i < sizeof(data); i++) {
+ for (uint32_t i = 0; i < data_size; i++) {
data[i] = SPI.transfer(0xFF);
}
MCP23xDisable();
@@ -188,10 +192,10 @@ void MCP23xDumpRegs(void) {
#endif
#ifdef USE_I2C
if (MCP23X_I2C == Mcp23x.device[Mcp23x.chip].interface) {
- I2cReadBuffer(Mcp23x.device[Mcp23x.chip].address, 0, data, sizeof(data));
+ I2cReadBuffer(Mcp23x.device[Mcp23x.chip].address, 0, data, data_size);
}
#endif
- AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Intf %d, Address %02X, Regs %*_H"), Mcp23x.device[Mcp23x.chip].interface, Mcp23x.device[Mcp23x.chip].address, sizeof(data), data);
+ AddLog(LOG_LEVEL_DEBUG, PSTR("MCP: Intf %d, Address %02X, Regs %*_H"), Mcp23x.device[Mcp23x.chip].interface, Mcp23x.device[Mcp23x.chip].address, data_size, data);
}
}
@@ -279,6 +283,9 @@ void MCP23xUpdate(uint8_t pin, bool pin_value, uint8_t reg_addr) {
uint8_t reg_value = 0;
if (reg_addr == MCP23X17_OLATA) {
reg_value = Mcp23x.device[Mcp23x.chip].olata;
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ reg_addr = MCP23X08_OLAT;
+ }
} else if (reg_addr == MCP23X17_OLATB) {
reg_value = Mcp23x.device[Mcp23x.chip].olatb;
} else {
@@ -290,6 +297,9 @@ void MCP23xUpdate(uint8_t pin, bool pin_value, uint8_t reg_addr) {
reg_value &= ~(1 << bit);
}
MCP23xWrite(reg_addr, reg_value);
+ if ((8 == Mcp23x.device[Mcp23x.chip].pins) && (reg_addr == MCP23X08_OLAT)) {
+ reg_addr = MCP23X17_OLATA;
+ }
if (reg_addr == MCP23X17_OLATA) {
Mcp23x.device[Mcp23x.chip].olata = reg_value;
} else if (reg_addr == MCP23X17_OLATB) {
@@ -299,12 +309,28 @@ void MCP23xUpdate(uint8_t pin, bool pin_value, uint8_t reg_addr) {
/*********************************************************************************************/
+uint32_t MCP23xSetChip(uint8_t pin) {
+ // Calculate chip based on number of pins per chip. 8 for MCP23008, 16 for MCP23x17
+ // pin 0 - 63
+ for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
+ if (Mcp23x.device[Mcp23x.chip].pins > pin) { break; }
+ pin -= Mcp23x.device[Mcp23x.chip].pins;
+ }
+ return pin; // relative pin number within chip (0 ... 7 or 0 ... 15)
+}
+
void MCP23xPinMode(uint8_t pin, uint8_t flags) {
- // pin 0 - 31
- Mcp23x.chip = pin / 16;
- pin = pin % 16;
- uint8_t iodir = pin < 8 ? MCP23X17_IODIRA : MCP23X17_IODIRB;
- uint8_t gppu = pin < 8 ? MCP23X17_GPPUA : MCP23X17_GPPUB;
+ // pin 0 - 63
+ pin = MCP23xSetChip(pin);
+ uint8_t iodir;
+ uint8_t gppu;
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ iodir = MCP23X08_IODIR;
+ gppu = MCP23X08_GPPU;
+ } else {
+ iodir = pin < 8 ? MCP23X17_IODIRA : MCP23X17_IODIRB;
+ gppu = pin < 8 ? MCP23X17_GPPUA : MCP23X17_GPPUB;
+ }
switch (flags) {
case INPUT:
MCP23xUpdate(pin, true, iodir);
@@ -318,15 +344,25 @@ void MCP23xPinMode(uint8_t pin, uint8_t flags) {
MCP23xUpdate(pin, false, iodir);
break;
}
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: MCP23xPinMode chip %d, pin %d, flags %d, regs %d,%d"), Mcp23x.chip, pin, flags, iodir, gppu);
}
void MCP23xPinInterruptMode(uint8_t pin, uint8_t interrupt_mode) {
- // pin 0 - 31
- Mcp23x.chip = pin / 16;
- pin = pin % 16;
- uint8_t gpinten = pin < 8 ? MCP23X17_GPINTENA : MCP23X17_GPINTENB;
- uint8_t intcon = pin < 8 ? MCP23X17_INTCONA : MCP23X17_INTCONB;
- uint8_t defval = pin < 8 ? MCP23X17_DEFVALA : MCP23X17_DEFVALB;
+ // pin 0 - 63
+ pin = MCP23xSetChip(pin);
+ uint8_t gpinten;
+ uint8_t intcon;
+ uint8_t defval;
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ gpinten = MCP23X08_GPINTEN;
+ intcon = MCP23X08_INTCON;
+ defval = MCP23X08_DEFVAL;
+ } else {
+ gpinten = pin < 8 ? MCP23X17_GPINTENA : MCP23X17_GPINTENB;
+ intcon = pin < 8 ? MCP23X17_INTCONA : MCP23X17_INTCONB;
+ defval = pin < 8 ? MCP23X17_DEFVALA : MCP23X17_DEFVALB;
+ }
switch (interrupt_mode) {
case MCP23XXX_CHANGE:
MCP23xUpdate(pin, true, gpinten);
@@ -348,21 +384,35 @@ void MCP23xPinInterruptMode(uint8_t pin, uint8_t interrupt_mode) {
}
}
+void MCP23xSetPinModes(uint8_t pin, uint8_t flags) {
+ // pin 0 - 63
+ MCP23xPinMode(pin, flags);
+ if (Mcp23x.device[Mcp23x.chip].pin_int > -1) { // Mcp23x.chip is updated by call to MCP23xPinMode
+ MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
+ }
+}
+
bool MCP23xDigitalRead(uint8_t pin) {
- // pin 0 - 31
- Mcp23x.chip = pin / 16;
- pin = pin % 16;
+ // pin 0 - 63
+ pin = MCP23xSetChip(pin);
uint8_t bit = pin % 8;
- uint8_t reg_addr = pin < 8 ? MCP23X17_GPIOA : MCP23X17_GPIOB;
+ uint8_t reg_addr;
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ reg_addr = MCP23X08_GPIO;
+ } else {
+ reg_addr = pin < 8 ? MCP23X17_GPIOA : MCP23X17_GPIOB;
+ }
uint8_t value = MCP23xRead(reg_addr);
return value & (1 << bit);
}
void MCP23xDigitalWrite(uint8_t pin, bool value) {
- // pin 0 - 31
- Mcp23x.chip = pin / 16;
- pin = pin % 16;
+ // pin 0 - 63
+ pin = MCP23xSetChip(pin);
uint8_t reg_addr = pin < 8 ? MCP23X17_OLATA : MCP23X17_OLATB;
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: MCP23xDigitalWrite chip %d, pin %d, state %d, reg %d"), Mcp23x.chip, pin, value, reg_addr);
+
MCP23xUpdate(pin, value, reg_addr);
}
@@ -370,8 +420,8 @@ void MCP23xDigitalWrite(uint8_t pin, bool value) {
* Tasmota
\*********************************************************************************************/
-int IRAM_ATTR MCP23xPin(uint32_t gpio, uint32_t index = 0);
-int IRAM_ATTR MCP23xPin(uint32_t gpio, uint32_t index) {
+int MCP23xPin(uint32_t gpio, uint32_t index = 0);
+int MCP23xPin(uint32_t gpio, uint32_t index) {
uint16_t real_gpio = gpio << 5;
uint16_t mask = 0xFFE0;
if (index < GPIO_ANY) {
@@ -419,13 +469,6 @@ String MCP23xTemplateLoadFile(void) {
return mcptmplt;
}
-void MCP23xSetPinModes(uint8_t pin, uint8_t flags) {
- MCP23xPinMode(pin, flags);
- if (Mcp23x.device[Mcp23x.chip].pin_int > -1) { // Mcp23x.chip is updated by call to MCP23xPinMode
- MCP23xPinInterruptMode(pin, MCP23XXX_CHANGE);
- }
-}
-
bool MCP23xLoadTemplate(void) {
String mcptmplt = MCP23xTemplateLoadFile();
uint32_t len = mcptmplt.length() +1;
@@ -494,6 +537,14 @@ bool MCP23xLoadTemplate(void) {
Mcp23x.relay_max++;
MCP23xPinMode(pin, OUTPUT);
}
+ else if (mpin == AGPIO(GPIO_OUTPUT_HI)) {
+ MCP23xPinMode(pin, OUTPUT);
+ MCP23xDigitalWrite(pin, 1);
+ }
+ else if (mpin == AGPIO(GPIO_OUTPUT_LO)) {
+ MCP23xPinMode(pin, OUTPUT);
+ MCP23xDigitalWrite(pin, 0);
+ }
else { mpin = 0; }
Mcp23x_gpio_pin[pin] = mpin;
}
@@ -552,7 +603,6 @@ void MCP23xModuleInit(void) {
Mcp23x.device[Mcp23x.chip].interface = MCP23X_SPI;
Mcp23x.device[Mcp23x.chip].address = MCP23XXX_ADDR_START << 1;
AddLog(LOG_LEVEL_INFO, PSTR("SPI: MCP23S17 found at CS%d"), Mcp23x.chip +1);
- Mcp23x.device[Mcp23x.chip].type = 3;
Mcp23x.device[Mcp23x.chip].pins = 16;
MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
Mcp23x.device[Mcp23x.chip].olata = MCP23xRead(MCP23X17_OLATA);
@@ -578,16 +628,14 @@ void MCP23xModuleInit(void) {
uint8_t buffer;
if (MCP23xValidRead(MCP23X08_IOCON, &buffer)) {
if (0x00 == buffer) {
- /*
I2cSetActiveFound(mcp23xxx_address, "MCP23008");
- Mcp23x.device[Mcp23x.chip].type = 1;
Mcp23x.device[Mcp23x.chip].pins = 8;
+ MCP23xWrite(MCP23X08_IOCON, 0b00011000); // Slew rate disabled, HAEN pins for addressing
+ Mcp23x.device[Mcp23x.chip].olata = MCP23xRead(MCP23X08_OLAT);
Mcp23x.max_devices++;
- */
}
else if (0x80 == buffer) {
I2cSetActiveFound(mcp23xxx_address, "MCP23017");
- Mcp23x.device[Mcp23x.chip].type = 2;
Mcp23x.device[Mcp23x.chip].pins = 16;
MCP23xWrite(MCP23X08_IOCON, 0x00); // Reset bank mode to 0 (MCP23X17_GPINTENB)
MCP23xWrite(MCP23X17_IOCONA, 0b01011000); // Enable INT mirror, Slew rate disabled, HAEN pins for addressing
@@ -630,11 +678,16 @@ void MCP23xModuleInit(void) {
void MCP23xServiceInput(void) {
// I found no reliable way to receive interrupts; noise received at undefined moments - unstable usage
- Mcp23x.interrupt = 0;
+ Mcp23x.interrupt = false;
// This works with no interrupt
uint32_t pin_offset = 0;
+ uint32_t gpio;
for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
- uint32_t gpio = MCP23xRead16(MCP23X17_GPIOA); // Read gpio
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ gpio = MCP23xRead(MCP23X08_GPIO); // Read MCP23008 gpio
+ } else {
+ gpio = MCP23xRead16(MCP23X17_GPIOA); // Read MCP23x17 gpio
+ }
// AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("MCP: Chip %d, State %04X"), Mcp23x.chip, gpio);
@@ -657,14 +710,19 @@ void MCP23xServiceInput(void) {
}
void IRAM_ATTR MCP23xInputIsr(void) {
- Mcp23x.interrupt = 1;
+ Mcp23x.interrupt = true;
}
void MCP23xInit(void) {
if (Mcp23x.button_max || Mcp23x.switch_max) {
+ uint32_t gpio;
for (Mcp23x.chip = 0; Mcp23x.chip < Mcp23x.max_devices; Mcp23x.chip++) {
if (Mcp23x.device[Mcp23x.chip].pin_int > -1) {
- uint32_t gpio = MCP23xRead16(MCP23X17_GPIOA); // Clear interrupt
+ if (8 == Mcp23x.device[Mcp23x.chip].pins) {
+ gpio = MCP23xRead(MCP23X08_GPIO); // Clear MCP23008 interrupt
+ } else {
+ gpio = MCP23xRead16(MCP23X17_GPIOA); // Clear MCP23x17 interrupt
+ }
attachInterrupt(Mcp23x.device[Mcp23x.chip].pin_int, MCP23xInputIsr, CHANGE);
}
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
index 1eb01f7a6..db7671733 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_88_esp32_shelly_pro.ino
@@ -28,7 +28,7 @@
* {"NAME":"Shelly Pro 1PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3459,0,0,32,4736,0,160,0],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350"}
* {"NAME":"Shelly Pro 2","GPIO":[0,1,0,1,768,0,0,0,672,704,736,0,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
* {"NAME":"Shelly Pro 2PM","GPIO":[9568,1,9472,1,768,0,0,0,672,704,736,9569,0,0,5600,6214,0,0,0,5568,0,0,0,0,0,0,0,0,3460,0,0,32,4736,4737,160,161],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;AdcParam2 2,5600,4700,3350"}
- * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,10272,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,10240,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;rule3 on file#mcp23x.dat do {\"NAME\":\"MCP23S17 Shelly Pro 4PM\",\"GPIO\":[194,193,65,66,0,64,192,0,224,0,0,0,227,225,226,195]} endon"}
+ * {"NAME":"Shelly Pro 4PM","GPIO":[0,6210,0,6214,9568,0,0,0,0,0,9569,0,10272,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,736,704,3461,10240,4736,0,0,672],"FLAG":0,"BASE":1,"CMND":"AdcParam1 2,5600,4700,3350;rule3 on file#mcp23x.dat do {\"NAME\":\"MCP23S17 Shelly Pro 4PM\",\"GPIO\":[194,193,65,66,3840,64,192,0,224,0,0,0,227,225,226,195]} endon"}
*
* Shelly Pro 1/2 uses SPI to control one 74HC595 for relays/leds and one ADE7953 (1PM) or two ADE7953 (2PM) for energy monitoring
* Shelly Pro 4 uses an SPI to control one MCP23S17 for buttons/switches/relays/leds and two ADE7953 for energy monitoring and a second SPI for the display
@@ -78,7 +78,7 @@ void ShellyPro4Init(void) {
}
void ShellyPro4Reset(void) {
- MCP23xPinMode(4, OUTPUT);
+ MCP23xPinMode(4, OUTPUT); // Safeguard as also performed by MCP23x.dat template as Output_Hi
MCP23xDigitalWrite(4, 0); // Reset pin display, ADE7953
delay(1); // To initiate a hardware reset, this pin must be brought low for a minimum of 10 μs.
MCP23xDigitalWrite(4, 1);
From 881c4f4a854566091f6e3188149258359c21e3a2 Mon Sep 17 00:00:00 2001
From: Jason2866 <24528715+Jason2866@users.noreply.github.com>
Date: Fri, 3 Mar 2023 12:34:20 +0100
Subject: [PATCH 067/227] fix `OTA_URL` Safe Guard
---
tasmota/my_user_config.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index 128827898..7d6a3c18e 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -1204,7 +1204,7 @@
\*********************************************************************************************/
#ifndef OTA_URL
- #define OTA_URL
+ #define OTA_URL ""
#endif
/*********************************************************************************************\
From cb988edba814716ffb0fea9dae43c69c18ca51f4 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 3 Mar 2023 16:54:57 +0100
Subject: [PATCH 068/227] Prep PCF8574 virtual switch/button/relay
---
tasmota/include/tasmota_template.h | 5 +++++
tasmota/language/af_AF.h | 1 +
tasmota/language/bg_BG.h | 1 +
tasmota/language/ca_AD.h | 1 +
tasmota/language/cs_CZ.h | 1 +
tasmota/language/de_DE.h | 1 +
tasmota/language/el_GR.h | 1 +
tasmota/language/en_GB.h | 1 +
tasmota/language/es_ES.h | 1 +
tasmota/language/fr_FR.h | 1 +
tasmota/language/fy_NL.h | 1 +
tasmota/language/he_HE.h | 1 +
tasmota/language/hu_HU.h | 1 +
tasmota/language/it_IT.h | 1 +
tasmota/language/ko_KO.h | 1 +
tasmota/language/nl_NL.h | 1 +
tasmota/language/pl_PL.h | 1 +
tasmota/language/pt_BR.h | 1 +
tasmota/language/pt_PT.h | 1 +
tasmota/language/ro_RO.h | 1 +
tasmota/language/ru_RU.h | 1 +
tasmota/language/sk_SK.h | 1 +
tasmota/language/sv_SE.h | 1 +
tasmota/language/tr_TR.h | 1 +
tasmota/language/uk_UA.h | 1 +
tasmota/language/vi_VN.h | 1 +
tasmota/language/zh_CN.h | 1 +
tasmota/language/zh_TW.h | 1 +
tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino | 1 +
29 files changed, 33 insertions(+)
diff --git a/tasmota/include/tasmota_template.h b/tasmota/include/tasmota_template.h
index ce1da3845..a85369d05 100644
--- a/tasmota/include/tasmota_template.h
+++ b/tasmota/include/tasmota_template.h
@@ -207,6 +207,7 @@ enum UserSelectablePins {
GPIO_TUYAMCUBR_TX, GPIO_TUYAMCUBR_RX, // TuyaMCU Bridge
GPIO_BIOPDU_PZEM0XX_TX, GPIO_BIOPDU_PZEM016_RX, GPIO_BIOPDU_BIT, // Biomine BioPDU 625x12
GPIO_MCP23XXX_INT, GPIO_MCP23SXX_CS, // MCP23xxx Int and SPI Chip select
+ GPIO_PCF8574_INT, // PCF8574 interrupt
GPIO_SENSOR_END };
// Error as warning to rethink GPIO usage with max 2045
@@ -461,6 +462,7 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_TUYAMCUBR_TX "|" D_SENSOR_TUYAMCUBR_RX "|"
D_SENSOR_BIOPDU_PZEM0XX_TX "|" D_SENSOR_BIOPDU_PZEM016_RX "|" D_SENSOR_BIOPDU_BIT "|"
D_SENSOR_MCP23XXX_INT "|" D_SENSOR_MCP23SXX_CS "|"
+ D_SENSOR_PCF8574_INT "|"
;
const char kSensorNamesFixed[] PROGMEM =
@@ -556,6 +558,9 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#ifdef USE_I2C
AGPIO(GPIO_I2C_SCL) + MAX_I2C, // I2C SCL
AGPIO(GPIO_I2C_SDA) + MAX_I2C, // I2C SDA
+#ifdef USE_PCF8574
+ AGPIO(GPIO_PCF8574_INT), // PCF8574 Interrupt
+#endif // USE_PCF8574
#endif
#if defined(USE_I2S_AUDIO) || defined (USE_I2S)
diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h
index 0f5570444..07875dc6b 100644
--- a/tasmota/language/af_AF.h
+++ b/tasmota/language/af_AF.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h
index 608d08c19..cf62b369c 100644
--- a/tasmota/language/bg_BG.h
+++ b/tasmota/language/bg_BG.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h
index dd67e976e..5b6d91022 100644
--- a/tasmota/language/ca_AD.h
+++ b/tasmota/language/ca_AD.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h
index ae31b8d00..e94b5d5f3 100644
--- a/tasmota/language/cs_CZ.h
+++ b/tasmota/language/cs_CZ.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h
index 41685e005..38d5581c8 100644
--- a/tasmota/language/de_DE.h
+++ b/tasmota/language/de_DE.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Puls"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h
index e282c1237..0cd51bb00 100644
--- a/tasmota/language/el_GR.h
+++ b/tasmota/language/el_GR.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h
index 5422de1e7..04c9b5bef 100644
--- a/tasmota/language/en_GB.h
+++ b/tasmota/language/en_GB.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h
index 829e24a65..dd18ce59d 100644
--- a/tasmota/language/es_ES.h
+++ b/tasmota/language/es_ES.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "Cruce por cero"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h
index 72e20c65d..0805fca30 100644
--- a/tasmota/language/fr_FR.h
+++ b/tasmota/language/fr_FR.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "Effet Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h
index 2a15fb8f0..f8169a531 100644
--- a/tasmota/language/fy_NL.h
+++ b/tasmota/language/fy_NL.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h
index 7fb3b2406..e22418ce8 100644
--- a/tasmota/language/he_HE.h
+++ b/tasmota/language/he_HE.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h
index 00f76e44f..2683f7d0c 100644
--- a/tasmota/language/hu_HU.h
+++ b/tasmota/language/hu_HU.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h
index 6c7661298..66d3154cd 100644
--- a/tasmota/language/it_IT.h
+++ b/tasmota/language/it_IT.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "Impulsi ZC"
#define D_SENSOR_HALLEFFECT "Effetto hall"
#define D_SENSOR_EPD_DATA "EPD - Dati"
+#define D_SENSOR_PCF8574_INT "PCF8574 - Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx - Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx - CS"
#define D_SENSOR_MCP2515_CS "MCP2515 - CS"
diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h
index 7f06bedc5..11a775dc7 100644
--- a/tasmota/language/ko_KO.h
+++ b/tasmota/language/ko_KO.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h
index be5ef613c..3ede2ee6f 100644
--- a/tasmota/language/nl_NL.h
+++ b/tasmota/language/nl_NL.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h
index d64808a38..214628a97 100644
--- a/tasmota/language/pl_PL.h
+++ b/tasmota/language/pl_PL.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "Efekt Halla"
#define D_SENSOR_EPD_DATA "EPD Dane"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h
index 97dc980c0..5e4259319 100644
--- a/tasmota/language/pt_BR.h
+++ b/tasmota/language/pt_BR.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "Efeito Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h
index b77686997..f04c5992e 100644
--- a/tasmota/language/pt_PT.h
+++ b/tasmota/language/pt_PT.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "Efeito Hall"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h
index f210b5c68..51c55c0b1 100644
--- a/tasmota/language/ro_RO.h
+++ b/tasmota/language/ro_RO.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h
index 75dfe0002..672df0a48 100644
--- a/tasmota/language/ru_RU.h
+++ b/tasmota/language/ru_RU.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h
index b97fddb6a..1d8818f9c 100644
--- a/tasmota/language/sk_SK.h
+++ b/tasmota/language/sk_SK.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h
index d40650bd5..2b6161647 100644
--- a/tasmota/language/sv_SE.h
+++ b/tasmota/language/sv_SE.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h
index e74f6c144..bb985fe59 100644
--- a/tasmota/language/tr_TR.h
+++ b/tasmota/language/tr_TR.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h
index e06801fc1..e19dd746b 100644
--- a/tasmota/language/uk_UA.h
+++ b/tasmota/language/uk_UA.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h
index b0a9ac266..1306a01fb 100644
--- a/tasmota/language/vi_VN.h
+++ b/tasmota/language/vi_VN.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h
index d1d5918b1..2ef25fde3 100644
--- a/tasmota/language/zh_CN.h
+++ b/tasmota/language/zh_CN.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h
index 6078ee069..247ad088d 100644
--- a/tasmota/language/zh_TW.h
+++ b/tasmota/language/zh_TW.h
@@ -895,6 +895,7 @@
#define D_SENSOR_ZEROCROSS "ZC Pulse"
#define D_SENSOR_HALLEFFECT "HallEffect"
#define D_SENSOR_EPD_DATA "EPD Data"
+#define D_SENSOR_PCF8574_INT "PCF8574 Int"
#define D_SENSOR_MCP23XXX_INT "MCP23xxx Int"
#define D_SENSOR_MCP23SXX_CS "MCP23Sxx CS"
#define D_SENSOR_MCP2515_CS "MCP2515 CS"
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
index 460cda2f4..6b67e0b46 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_67_mcp23xxx.ino
@@ -723,6 +723,7 @@ void MCP23xInit(void) {
} else {
gpio = MCP23xRead16(MCP23X17_GPIOA); // Clear MCP23x17 interrupt
}
+ pinMode(Mcp23x.device[Mcp23x.chip].pin_int, INPUT_PULLUP);
attachInterrupt(Mcp23x.device[Mcp23x.chip].pin_int, MCP23xInputIsr, CHANGE);
}
}
From 747ebae670604bb32972f18d663a8d47eee42ae8 Mon Sep 17 00:00:00 2001
From: Theo Arends <11044339+arendst@users.noreply.github.com>
Date: Fri, 3 Mar 2023 17:40:27 +0100
Subject: [PATCH 069/227] Add support for multiple PCF8574 as
switch/button/relay
---
CHANGELOG.md | 1 +
RELEASENOTES.md | 1 +
.../tasmota_xdrv_driver/xdrv_28_pcf8574.ino | 492 +++++++++++++++---
.../xdrv_28_pcf8574_v1.ino | 386 ++++++++++++++
4 files changed, 817 insertions(+), 63 deletions(-)
create mode 100644 tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574_v1.ino
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 183c01d24..0d9bd1601 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file.
## [12.4.0.2]
### Added
- Support for multiple MCP23008 as switch/button/relay
+- Support for multiple PCF8574 as switch/button/relay
### Breaking Changed
- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index c8c2e175b..79bd9a651 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -113,6 +113,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
## Changelog v12.4.0.2
### Added
- Support for multiple MCP23008/MCP23017/MCP23S17 as switch/button/relay
+- Support for multiple PCF8574 as switch/button/relay
- NTP time request from gateway [#17984](https://github.com/arendst/Tasmota/issues/17984)
### Breaking Changed
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574.ino b/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574.ino
index a889fe3aa..f07355b1b 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574.ino
@@ -1,7 +1,7 @@
/*
xdrv_28_pcf8574.ino - PCF8574 I2C support for Tasmota
- Copyright (C) 2021 Stefan Bode
+ Copyright (C) 2021 Stefan Bode and Theo Arends
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -24,20 +24,60 @@
*
* I2C Address: PCF8574 = 0x20 .. 0x27 (0x27 is not supported),
* PCF8574A = 0x39 .. 0x3F (0x38 is not supported)
+ *
+ * Start address and count can be overriden in user_config_override.h to allow better
+ * sharing of the I2C address space. Still the covered range must remains valid.
+ * A count of 0 can be used totaly disable any of the 2 ranges.
+ * By default, the following addresses are explicitly excluded (as per the docs) :
+ * - 0x27 and 0x37 are reserved for USE_DISPLAY_LCD in xdsp_01_lcd.ino
+ * - 0X38 is reserved for other sensors
+ * If the respective drivers are not used, overrides allows to recover those addresses
+ * If defined, USE_MCP230xx_ADDR is also always excluded
+ *
+ * Mode 1:
+ * See documentation.
+ *
+ * Mode 2:
+ * Allows easy configuration by using a sequential list of pins configured as Tasmota
+ * template and handle any input and output as configured GPIOs.
+ *
+ * Restrictions:
+ * - Uses incremental I2C addresses until template pin count reached
+ * - Max support for 28 switches (input), 32 buttons (input), 32 relays (output)
+ *
+ * Supported template fields:
+ * NAME - Template name
+ * GPIO - Sequential list of pin 1 and up with configured GPIO function
+ * Function Code Description
+ * ------------------- -------- ----------------------------------------
+ * None 0 Not used
+ * Button1..32 B 32..63 Button to Gnd with internal pullup
+ * Button_n1..32 Bn 64..95 Button to Gnd without internal pullup
+ * Button_i1..32 Bi 96..127 Button inverted to Vcc with internal pullup
+ * Button_in1..32 Bin 128..159 Button inverted to Vcc without internal pullup
+ * Switch1..28 S 160..187 Switch to Gnd with internal pullup
+ * Switch_n1..28 Sn 192..219 Switch to Gnd without internal pullup
+ * Relay1..28 R 224..255 Relay
+ * Relay_i1..28 Ri 256..287 Relay inverted
+ * Output_Hi Oh 3840 Fixed output high
+ * Output_lo Ol 3872 Fixed output low
+ *
+ * Prepare a template to be loaded either by:
+ * - a rule like: rule3 on file#pcf8574.dat do {"NAME":"PCF8574 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]} endon
+ * - a script like: -y{"NAME":"PCF8574 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
+ * - file called pcf8574.dat with contents: {"NAME":"PCF8574 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
+ *
+ * Inverted relays and buttons Ri8 Ri7 Ri6 Ri5 Ri4 Ri3 Ri2 Ri1 B1 B2 B3 B4 B5 B6 B7 B8
+ * {"NAME":"PCF8574 A=Ri8-1, B=B1-8","GPIO":[263,262,261,260,259,258,257,256,32,33,34,35,36,37,38,39]}
+ * B1 B2 B3 B4 Ri4 Ri3 Ri2 Ri1 B5 B6 B7 B8 Ri8 Ri7 Ri6 Ri5
+ * {"NAME":"PCF8574 A=B1-4,Ri4-1, B=B5-8,Ri8-5","GPIO":[32,33,34,35,259,258,257,256,36,37,38,39,263,262,261,260]}
+ * B1 B2 B3 B4 Ri4 Ri3 Ri2 Ri1 B5 B6 B7 B8 Ri8 Ri7 Ri6 Ri5
+ * {"NAME":"PCF8574 A=Bi1-4,Ri4-1, B=Bi5-8,Ri8-5","GPIO":[64,65,66,67,259,258,257,256,68,69,70,71,263,262,261,260]}
\*********************************************************************************************/
#define XDRV_28 28
#define XI2C_02 2 // See I2CDEVICES.md
-// Start address and count can be overriden in user_config_override.h to allow better
-// sharing of the I2C address space. Still the covered range must remains valid.
-// A count of 0 can be used totaly disable any of the 2 ranges.
-// By default, the following addresses are explicitly excluded (as per the docs) :
-// - 0x27 and 0x37 are reserved for USE_DISPLAY_LCD in xdsp_01_lcd.ino
-// - 0X38 is reserved for other sensors
-// If the respective drivers are not used, overrides allows to recover those addresses
-// If defined, USE_MCP230xx_ADDR is also always excluded
-
// PCF8574 address range from 0x20 to 0x26
#ifndef PCF8574_ADDR1
#define PCF8574_ADDR1 0x20 // PCF8574
@@ -53,6 +93,12 @@
#define PCF8574_ADDR2_COUNT 6
#endif
+#define PCF8574_MAX_PINS 64
+
+/*********************************************************************************************\
+ * PCF8574 support
+\*********************************************************************************************/
+
// Consitency tests - Checked across the complete range for the PCF8574/PCF8574A to allow override
#if (PCF8574_ADDR1 < 0x20) || ((PCF8574_ADDR1 + PCF8574_ADDR1_COUNT - 1) > 0x27)
#error PCF8574_ADDR1 and/or PCF8574_ADDR1_COUNT badly overriden. Fix your user_config_override
@@ -63,7 +109,9 @@
struct PCF8574 {
int error;
- uint8_t pin[64];
+ uint32_t relay_inverted;
+ uint32_t button_inverted;
+ uint16_t pin[PCF8574_MAX_PINS];
uint8_t address[MAX_PCF8574];
uint8_t pin_mask[MAX_PCF8574] = { 0 };
#ifdef USE_PCF8574_MQTTINPUT
@@ -71,25 +119,308 @@ struct PCF8574 {
#endif
uint8_t max_connected_ports = 0; // Max numbers of devices comming from PCF8574 modules
uint8_t max_devices = 0; // Max numbers of PCF8574 modules
- char stype[9];
- bool type = false;
+ uint8_t mode;
+ uint8_t chip;
+ uint8_t relay_max;
+ uint8_t relay_offset;
+ uint8_t button_max;
+ uint8_t switch_max;
+ int8_t button_offset;
+ int8_t switch_offset;
+ bool interrupt;
} Pcf8574;
-uint8_t Pcf8574Read(uint8_t idx)
-{
+/*********************************************************************************************\
+ * PCF8574 - I2C
+\*********************************************************************************************/
+
+uint8_t Pcf8574Read(uint8_t idx) {
Wire.requestFrom(Pcf8574.address[idx],(uint8_t)1);
return Wire.read();
}
-uint8_t Pcf8574Write(uint8_t idx)
-{
+uint8_t Pcf8574Write(uint8_t idx) {
Wire.beginTransmission(Pcf8574.address[idx]);
Wire.write(Pcf8574.pin_mask[idx]);
return Wire.endTransmission();
}
-void Pcf8574SwitchRelay(void)
-{
+/*********************************************************************************************/
+
+uint8_t Pcf8574ReadByte(void) {
+ Wire.requestFrom(Pcf8574.address[Pcf8574.chip], (uint8_t)1);
+ return Wire.read();
+}
+
+uint8_t Pcf8574WriteByte(uint8_t value) {
+ Wire.beginTransmission(Pcf8574.address[Pcf8574.chip]);
+ Wire.write(value);
+ return Wire.endTransmission();
+}
+
+bool Pcf8574DigitalRead(uint8_t pin) {
+ // pin 0 - 63
+ Pcf8574.chip = pin / 8;
+ uint8_t bit = pin % 8;
+ uint8_t value = Pcf8574ReadByte();
+ return value & (1 << bit);
+}
+
+void Pcf8574DigitalWrite(uint8_t pin, bool pin_value) {
+ // pin 0 - 63
+ // INPUT or INPUT_PULLUP = Pcf8574DigitalWrite(pin, 1);
+ // OUTPUT = Pcf8574DigitalWrite(pin, 0); or Pcf8574DigitalWrite(pin, 1);
+ Pcf8574.chip = pin / 8;
+ uint8_t bit = pin % 8;
+ uint8_t reg_value = Pcf8574ReadByte();
+ if (pin_value) {
+ reg_value |= 1 << bit;
+ } else {
+ reg_value &= ~(1 << bit);
+ }
+ Pcf8574WriteByte(reg_value);
+}
+
+/*********************************************************************************************\
+ * PCF8574 Mode 2 - Theo Arends
+\*********************************************************************************************/
+
+int Pcf8574Pin(uint32_t gpio, uint32_t index = 0);
+int Pcf8574Pin(uint32_t gpio, uint32_t index) {
+ uint16_t real_gpio = gpio << 5;
+ uint16_t mask = 0xFFE0;
+ if (index < GPIO_ANY) {
+ real_gpio += index;
+ mask = 0xFFFF;
+ }
+ for (uint32_t i = 0; i < Pcf8574.max_connected_ports; i++) {
+ if ((Pcf8574.pin[i] & mask) == real_gpio) {
+ return i; // Pin number configured for gpio
+ }
+ }
+ return -1; // No pin used for gpio
+}
+
+bool Pcf8574PinUsed(uint32_t gpio, uint32_t index = 0);
+bool Pcf8574PinUsed(uint32_t gpio, uint32_t index) {
+ return (Pcf8574Pin(gpio, index) >= 0);
+}
+
+uint32_t Pcf8574GetPin(uint32_t lpin) {
+ if (lpin < Pcf8574.max_connected_ports) {
+ return Pcf8574.pin[lpin];
+ } else {
+ return GPIO_NONE;
+ }
+}
+
+/*********************************************************************************************/
+
+String Pcf8574TemplateLoadFile(void) {
+ String pcftmplt = "";
+#ifdef USE_UFILESYS
+ pcftmplt = TfsLoadString("/pcf8574.dat");
+#endif // USE_UFILESYS
+#ifdef USE_RULES
+ if (!pcftmplt.length()) {
+ pcftmplt = RuleLoadFile("PCF8574.DAT");
+ }
+#endif // USE_RULES
+#ifdef USE_SCRIPT
+ if (!pcftmplt.length()) {
+ pcftmplt = ScriptLoadSection(">y");
+ }
+#endif // USE_SCRIPT
+ return pcftmplt;
+}
+
+bool Pcf8574LoadTemplate(void) {
+ String pcftmplt = Pcf8574TemplateLoadFile();
+ uint32_t len = pcftmplt.length() +1;
+ if (len < 7) { return false; } // No PcfTmplt found
+
+ JsonParser parser((char*)pcftmplt.c_str());
+ JsonParserObject root = parser.getRootObject();
+ if (!root) { return false; }
+
+ // rule3 on file#pcf8574.dat do {"NAME":"PCF8574 A=B1-4,Ri4-1, B=B5-8,Ri8-5","GPIO":[32,33,34,35,259,258,257,256,36,37,38,39,263,262,261,260]} endon
+ // rule3 on file#pcf8574.dat do {"NAME":"PCF8574 A=Bi1-4,Ri4-1, B=Bi5-8,Ri8-5","GPIO":[64,65,66,67,259,258,257,256,68,69,70,71,263,262,261,260]} endon
+ JsonParserToken val = root[PSTR(D_JSON_NAME)];
+ if (val) {
+ AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Template %s"), val.getStr());
+ }
+ JsonParserArray arr = root[PSTR(D_JSON_GPIO)];
+ if (arr) {
+ uint32_t pin = 0;
+ for (pin; pin < Pcf8574.max_connected_ports; pin++) { // Max number of detected chip pins
+ JsonParserToken val = arr[pin];
+ if (!val) { break; }
+ uint16_t mpin = val.getUInt();
+ if (mpin) { // Above GPIO_NONE
+ if ((mpin >= AGPIO(GPIO_SWT1)) && (mpin < (AGPIO(GPIO_SWT1) + MAX_SWITCHES_SET))) {
+ Pcf8574.switch_max++;
+ Pcf8574DigitalWrite(pin, 1); // INPUT_PULLUP
+ }
+ else if ((mpin >= AGPIO(GPIO_SWT1_NP)) && (mpin < (AGPIO(GPIO_SWT1_NP) + MAX_SWITCHES_SET))) {
+ mpin -= (AGPIO(GPIO_SWT1_NP) - AGPIO(GPIO_SWT1));
+ Pcf8574.switch_max++;
+ Pcf8574DigitalWrite(pin, 1); // INPUT
+ }
+ else if ((mpin >= AGPIO(GPIO_KEY1)) && (mpin < (AGPIO(GPIO_KEY1) + MAX_KEYS_SET))) {
+ Pcf8574.button_max++;
+ Pcf8574DigitalWrite(pin, 1); // INPUT_PULLUP
+ }
+ else if ((mpin >= AGPIO(GPIO_KEY1_NP)) && (mpin < (AGPIO(GPIO_KEY1_NP) + MAX_KEYS_SET))) {
+ mpin -= (AGPIO(GPIO_KEY1_NP) - AGPIO(GPIO_KEY1));
+ Pcf8574.button_max++;
+ Pcf8574DigitalWrite(pin, 1); // INPUT
+ }
+ else if ((mpin >= AGPIO(GPIO_KEY1_INV)) && (mpin < (AGPIO(GPIO_KEY1_INV) + MAX_KEYS_SET))) {
+ bitSet(Pcf8574.button_inverted, mpin - AGPIO(GPIO_KEY1_INV));
+ mpin -= (AGPIO(GPIO_KEY1_INV) - AGPIO(GPIO_KEY1));
+ Pcf8574.button_max++;
+ Pcf8574DigitalWrite(pin, 1); // INPUT_PULLUP
+ }
+ else if ((mpin >= AGPIO(GPIO_KEY1_INV_NP)) && (mpin < (AGPIO(GPIO_KEY1_INV_NP) + MAX_KEYS_SET))) {
+ bitSet(Pcf8574.button_inverted, mpin - AGPIO(GPIO_KEY1_INV_NP));
+ mpin -= (AGPIO(GPIO_KEY1_INV_NP) - AGPIO(GPIO_KEY1));
+ Pcf8574.button_max++;
+ Pcf8574DigitalWrite(pin, 1); // INPUT
+ }
+ else if ((mpin >= AGPIO(GPIO_REL1)) && (mpin < (AGPIO(GPIO_REL1) + MAX_RELAYS_SET))) {
+ Pcf8574.relay_max++;
+ Pcf8574DigitalWrite(pin, 1); // OUTPUT
+ }
+ else if ((mpin >= AGPIO(GPIO_REL1_INV)) && (mpin < (AGPIO(GPIO_REL1_INV) + MAX_RELAYS_SET))) {
+ bitSet(Pcf8574.relay_inverted, mpin - AGPIO(GPIO_REL1_INV));
+ mpin -= (AGPIO(GPIO_REL1_INV) - AGPIO(GPIO_REL1));
+ Pcf8574.relay_max++;
+ Pcf8574DigitalWrite(pin, 0); // OUTPUT
+ }
+ else if (mpin == AGPIO(GPIO_OUTPUT_HI)) {
+ Pcf8574DigitalWrite(pin, 1); // OUTPUT
+ }
+ else if (mpin == AGPIO(GPIO_OUTPUT_LO)) {
+ Pcf8574DigitalWrite(pin, 0); // OUTPUT
+ }
+ else { mpin = 0; }
+ Pcf8574.pin[pin] = mpin;
+ }
+ if ((Pcf8574.switch_max >= MAX_SWITCHES_SET) ||
+ (Pcf8574.button_max >= MAX_KEYS_SET) ||
+ (Pcf8574.relay_max >= MAX_RELAYS_SET)) {
+ AddLog(LOG_LEVEL_INFO, PSTR("PCF: Max reached (S%d/B%d/R%d)"), Pcf8574.switch_max, Pcf8574.button_max, Pcf8574.relay_max);
+ break;
+ }
+ }
+ Pcf8574.max_connected_ports = pin; // Max number of configured pins
+ }
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Pins %d, pin %*_V"), Pcf8574.max_connected_ports, Pcf8574.max_connected_ports, (uint8_t*)Pcf8574.pin);
+
+ return true;
+}
+
+uint32_t Pcf8574TemplateGpio(void) {
+ String pcftmplt = Pcf8574TemplateLoadFile();
+ uint32_t len = pcftmplt.length() +1;
+ if (len < 7) { return 0; } // No PcfTmplt found
+
+ JsonParser parser((char*)pcftmplt.c_str());
+ JsonParserObject root = parser.getRootObject();
+ if (!root) { return 0; }
+
+ JsonParserArray arr = root[PSTR(D_JSON_GPIO)];
+ if (arr.isArray()) {
+ return arr.size(); // Number of requested pins
+ }
+ return 0;
+}
+
+void Pcf8574ServiceInput(void) {
+ Pcf8574.interrupt = false;
+ // This works with no interrupt
+ uint32_t pin_offset = 0;
+ uint32_t gpio;
+ for (Pcf8574.chip = 0; Pcf8574.chip < Pcf8574.max_devices; Pcf8574.chip++) {
+ gpio = Pcf8574ReadByte();
+
+// AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("PCF: Chip %d, State %02X"), Pcf8574.chip, gpio);
+
+ uint32_t mask = 1;
+ for (uint32_t pin = 0; pin < 8; pin++) {
+ uint32_t state = ((gpio & mask) != 0);
+ uint32_t lpin = Pcf8574GetPin(pin_offset + pin); // 0 for None, 32 for KEY1, 160 for SWT1, 224 for REL1
+ uint32_t index = lpin & 0x001F; // Max 32 buttons or switches
+ lpin = BGPIO(lpin); // UserSelectablePins number
+ if (GPIO_KEY1 == lpin) {
+ ButtonSetVirtualPinState(Pcf8574.button_offset + index, (state != bitRead(Pcf8574.button_inverted, index)));
+ Pcf8574DigitalWrite(pin_offset + pin, 1); // INPUT and reset interrupt
+ }
+ else if (GPIO_SWT1 == lpin) {
+ SwitchSetVirtualPinState(Pcf8574.switch_offset + index, state);
+ Pcf8574DigitalWrite(pin_offset + pin, 1); // INPUT and reset interrupt
+ }
+ mask <<= 1;
+ }
+ pin_offset += 8;
+ }
+}
+
+void IRAM_ATTR Pcf8574InputIsr(void) {
+ Pcf8574.interrupt = true;
+}
+
+void Pcf8574Init(void) {
+ if (Pcf8574.button_max || Pcf8574.switch_max) {
+ if (PinUsed(GPIO_PCF8574_INT)) {
+ pinMode(Pin(GPIO_PCF8574_INT), INPUT_PULLUP);
+ attachInterrupt(Pin(GPIO_PCF8574_INT), Pcf8574InputIsr, CHANGE);
+ }
+ }
+}
+
+void Pcf8574Power(void) {
+ power_t rpower = XdrvMailbox.index >> Pcf8574.relay_offset;
+ for (uint32_t index = 0; index < Pcf8574.relay_max; index++) {
+ power_t state = rpower &1;
+ if (Pcf8574PinUsed(GPIO_REL1, index)) {
+ uint32_t pin = Pcf8574Pin(GPIO_REL1, index) & 0x3F; // Fix possible overflow over 63 gpios
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Power pin %d, state %d(%d)"), pin, state, bitRead(Pcf8574.relay_inverted, index));
+
+ Pcf8574DigitalWrite(pin, bitRead(Pcf8574.relay_inverted, index) ? !state : state);
+ }
+ rpower >>= 1; // Select next power
+ }
+}
+
+bool Pcf8574AddButton(void) {
+ // XdrvMailbox.index = button/switch index
+ if (Pcf8574.button_offset < 0) { Pcf8574.button_offset = XdrvMailbox.index; }
+ uint32_t index = XdrvMailbox.index - Pcf8574.button_offset;
+ if (index >= Pcf8574.button_max) { return false; }
+ XdrvMailbox.index = (Pcf8574DigitalRead(Pcf8574Pin(GPIO_KEY1, index)) != bitRead(Pcf8574.button_inverted, index));
+
+// AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: AddButton index %d, state %d"), index, XdrvMailbox.index);
+
+ return true;
+}
+
+bool Pcf8574AddSwitch(void) {
+ // XdrvMailbox.index = button/switch index
+ if (Pcf8574.switch_offset < 0) { Pcf8574.switch_offset = XdrvMailbox.index; }
+ uint32_t index = XdrvMailbox.index - Pcf8574.switch_offset;
+ if (index >= Pcf8574.switch_max) { return false; }
+ XdrvMailbox.index = Pcf8574DigitalRead(Pcf8574Pin(GPIO_SWT1, index));
+ return true;
+}
+
+/*********************************************************************************************\
+ * PCF8574 Mode 1 - Stefan Bode
+\*********************************************************************************************/
+
+void Pcf8574SwitchRelay(void) {
for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) {
uint8_t relay_state = bitRead(XdrvMailbox.index, i);
@@ -109,8 +440,7 @@ void Pcf8574SwitchRelay(void)
}
}
-void Pcf8574Init(void)
-{
+void Pcf8574ModuleInit(void) {
uint8_t pcf8574_address = (PCF8574_ADDR1_COUNT > 0) ? PCF8574_ADDR1 : PCF8574_ADDR2;
while ((Pcf8574.max_devices < MAX_PCF8574) && (pcf8574_address < PCF8574_ADDR2 +PCF8574_ADDR2_COUNT)) {
@@ -127,16 +457,18 @@ void Pcf8574Init(void)
// AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Probing addr: 0x%x for PCF8574"), pcf8574_address);
if (I2cSetDevice(pcf8574_address)) {
- Pcf8574.type = true;
+ Pcf8574.mode = 1;
Pcf8574.address[Pcf8574.max_devices] = pcf8574_address;
+ Pcf8574.max_connected_ports += 8;
Pcf8574.max_devices++;
- strcpy(Pcf8574.stype, "PCF8574");
+ char stype[9];
+ strcpy(stype, "PCF8574");
if (pcf8574_address >= PCF8574_ADDR2) {
- strcpy(Pcf8574.stype, "PCF8574A");
+ strcpy(stype, "PCF8574A");
}
- I2cSetActiveFound(pcf8574_address, Pcf8574.stype);
+ I2cSetActiveFound(pcf8574_address, stype);
}
pcf8574_address++;
@@ -144,43 +476,53 @@ void Pcf8574Init(void)
pcf8574_address = PCF8574_ADDR2;
}
}
- if (Pcf8574.type) {
- for (uint32_t i = 0; i < sizeof(Pcf8574.pin); i++) {
- Pcf8574.pin[i] = 99;
- }
- UpdateDevicesPresent(-Pcf8574.max_connected_ports); // reset no of devices to avoid duplicate ports on duplicate init.
- Pcf8574.max_connected_ports = 0; // reset no of devices to avoid duplicate ports on duplicate init.
- for (uint32_t idx = 0; idx < Pcf8574.max_devices; idx++) { // suport up to 8 boards PCF8574
- uint8_t gpio = Pcf8574Read(idx);
- // Insure the input pins are actually writen a 1 for proper input operation
- Pcf8574.pin_mask[idx] = gpio | ~Settings->pcf8574_config[idx];
- Pcf8574Write(idx); // Write back to the register
+ if (Pcf8574.mode) {
+ if (Pcf8574LoadTemplate()) {
+ Pcf8574.mode = 2;
+
+ Pcf8574.relay_offset = TasmotaGlobal.devices_present;
+ Pcf8574.relay_max -= UpdateDevicesPresent(Pcf8574.relay_max);
+
+ Pcf8574.button_offset = -1;
+ Pcf8574.switch_offset = -1;
+ } else {
+ Pcf8574.max_connected_ports = 0; // Reset no of devices
+ for (uint32_t i = 0; i < PCF8574_MAX_PINS; i++) {
+ Pcf8574.pin[i] = 99;
+ }
+
+ for (uint32_t idx = 0; idx < Pcf8574.max_devices; idx++) { // suport up to 8 boards PCF8574
+ uint8_t gpio = Pcf8574Read(idx);
+ // Insure the input pins are actually writen a 1 for proper input operation
+ Pcf8574.pin_mask[idx] = gpio | ~Settings->pcf8574_config[idx];
+ Pcf8574Write(idx); // Write back to the register
#ifdef USE_PCF8574_MQTTINPUT
- Pcf8574.last_input[idx] = gpio & ~Settings->pcf8574_config[idx];
+ Pcf8574.last_input[idx] = gpio & ~Settings->pcf8574_config[idx];
#endif // #ifdef USE_PCF8574_MQTTINPUT
- //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: PCF-%d config=0x%02x, gpio=0x%02X"), idx +1, Settings->pcf8574_config[idx], gpio);
+ //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: PCF-%d config=0x%02x, gpio=0x%02X"), idx +1, Settings->pcf8574_config[idx], gpio);
- for (uint32_t i = 0; i < 8; i++, gpio>>=1) {
- uint8_t _result = Settings->pcf8574_config[idx] >> i &1;
- //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: I2C shift i %d: %d. Powerstate: %d, TasmotaGlobal.devices_present: %d"), i,_result, Settings->power>>i&1, TasmotaGlobal.devices_present);
- if (_result > 0) {
- Pcf8574.pin[TasmotaGlobal.devices_present] = i + 8 * idx;
- bitWrite(TasmotaGlobal.rel_inverted, TasmotaGlobal.devices_present, Settings->flag3.pcf8574_ports_inverted); // SetOption81 - Invert all ports on PCF8574 devices
- if (!Settings->flag.save_state && !Settings->flag3.no_power_feedback) { // SetOption63 - Don't scan relay power state at restart - #5594 and #5663
- //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Set power from from chip state"));
- uint8_t power_state = Settings->flag3.pcf8574_ports_inverted ? 1 & ~gpio : 1 & gpio;
- bitWrite(TasmotaGlobal.power, TasmotaGlobal.devices_present, power_state);
- bitWrite(Settings->power, TasmotaGlobal.devices_present, power_state);
+ for (uint32_t i = 0; i < 8; i++, gpio>>=1) {
+ uint8_t _result = Settings->pcf8574_config[idx] >> i &1;
+ //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: I2C shift i %d: %d. Powerstate: %d, TasmotaGlobal.devices_present: %d"), i,_result, Settings->power>>i&1, TasmotaGlobal.devices_present);
+ if (_result > 0) {
+ Pcf8574.pin[TasmotaGlobal.devices_present] = i + 8 * idx;
+ bitWrite(TasmotaGlobal.rel_inverted, TasmotaGlobal.devices_present, Settings->flag3.pcf8574_ports_inverted); // SetOption81 - Invert all ports on PCF8574 devices
+ if (!Settings->flag.save_state && !Settings->flag3.no_power_feedback) { // SetOption63 - Don't scan relay power state at restart - #5594 and #5663
+ //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Set power from from chip state"));
+ uint8_t power_state = Settings->flag3.pcf8574_ports_inverted ? 1 & ~gpio : 1 & gpio;
+ bitWrite(TasmotaGlobal.power, TasmotaGlobal.devices_present, power_state);
+ bitWrite(Settings->power, TasmotaGlobal.devices_present, power_state);
+ }
+ //else AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: DON'T set power from chip state"));
+ UpdateDevicesPresent(1);
+ Pcf8574.max_connected_ports++;
}
- //else AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: DON'T set power from chip state"));
- UpdateDevicesPresent(1);
- Pcf8574.max_connected_ports++;
}
}
+ //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Settings->power=0x%08X, TasmotaGlobal.power=0x%08X"), Settings->power, TasmotaGlobal.power);
+ AddLog(LOG_LEVEL_INFO, PSTR("PCF: Total devices %d, PCF8574 output ports %d"), Pcf8574.max_devices, Pcf8574.max_connected_ports);
}
- //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Settings->power=0x%08X, TasmotaGlobal.power=0x%08X"), Settings->power, TasmotaGlobal.power);
- AddLog(LOG_LEVEL_INFO, PSTR("PCF: Total devices %d, PCF8574 output ports %d"), Pcf8574.max_devices, Pcf8574.max_connected_ports);
}
}
@@ -340,25 +682,23 @@ void Pcf8574SaveSettings(void)
* Interface
\*********************************************************************************************/
-bool Xdrv28(uint32_t function)
-{
+bool Xdrv28(uint32_t function) {
if (!I2cEnabled(XI2C_02)) { return false; }
bool result = false;
- if (FUNC_PRE_INIT == function) {
- Pcf8574Init();
- }
- else if (Pcf8574.type) {
+ if (FUNC_MODULE_INIT == function) {
+ Pcf8574ModuleInit();
+ } else if (1 == Pcf8574.mode) {
switch (function) {
- case FUNC_SET_POWER:
- Pcf8574SwitchRelay();
- break;
#ifdef USE_PCF8574_MQTTINPUT
case FUNC_EVERY_50_MSECOND:
Pcf8574CheckForInputChange();
break;
#endif // #ifdef USE_PCF8574_MQTTINPUT
+ case FUNC_SET_POWER:
+ Pcf8574SwitchRelay();
+ break;
#ifdef USE_PCF8574_SENSOR
case FUNC_JSON_APPEND:
Pcf8574Show(1);
@@ -378,6 +718,32 @@ bool Xdrv28(uint32_t function)
#endif // #ifdef USE_PCF8574_DISPLAYINPUT
#endif // USE_WEBSERVER
}
+ } else if (2 == Pcf8574.mode) {
+ switch (function) {
+ case FUNC_LOOP:
+ case FUNC_SLEEP_LOOP:
+ if (!Pcf8574.interrupt) { return false; }
+ AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("PCF: Interrupt"));
+ Pcf8574ServiceInput();
+ break;
+ case FUNC_EVERY_100_MSECOND:
+ if (Pcf8574.button_max || Pcf8574.switch_max) {
+ Pcf8574ServiceInput();
+ }
+ break;
+ case FUNC_SET_POWER:
+ Pcf8574Power();
+ break;
+ case FUNC_INIT:
+ Pcf8574Init();
+ break;
+ case FUNC_ADD_BUTTON:
+ result = Pcf8574AddButton();
+ break;
+ case FUNC_ADD_SWITCH:
+ result = Pcf8574AddSwitch();
+ break;
+ }
}
return result;
}
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574_v1.ino b/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574_v1.ino
new file mode 100644
index 000000000..841da4e70
--- /dev/null
+++ b/tasmota/tasmota_xdrv_driver/xdrv_28_pcf8574_v1.ino
@@ -0,0 +1,386 @@
+/*
+ xdrv_28_pcf8574.ino - PCF8574 I2C support for Tasmota
+
+ Copyright (C) 2021 Stefan Bode
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifdef USE_I2C
+#ifdef USE_PCF8574_V1
+/*********************************************************************************************\
+ * PCF8574 - I2C IO Expander
+ *
+ * I2C Address: PCF8574 = 0x20 .. 0x27 (0x27 is not supported),
+ * PCF8574A = 0x39 .. 0x3F (0x38 is not supported)
+\*********************************************************************************************/
+
+#define XDRV_28 28
+#define XI2C_02 2 // See I2CDEVICES.md
+
+// Start address and count can be overriden in user_config_override.h to allow better
+// sharing of the I2C address space. Still the covered range must remains valid.
+// A count of 0 can be used totaly disable any of the 2 ranges.
+// By default, the following addresses are explicitly excluded (as per the docs) :
+// - 0x27 and 0x37 are reserved for USE_DISPLAY_LCD in xdsp_01_lcd.ino
+// - 0X38 is reserved for other sensors
+// If the respective drivers are not used, overrides allows to recover those addresses
+// If defined, USE_MCP230xx_ADDR is also always excluded
+
+// PCF8574 address range from 0x20 to 0x26
+#ifndef PCF8574_ADDR1
+#define PCF8574_ADDR1 0x20 // PCF8574
+#endif
+#ifndef PCF8574_ADDR1_COUNT
+#define PCF8574_ADDR1_COUNT 7
+#endif
+// PCF8574A address range from 0x39 to 0x3E
+#ifndef PCF8574_ADDR2
+#define PCF8574_ADDR2 0x39 // PCF8574A
+#endif
+#ifndef PCF8574_ADDR2_COUNT
+#define PCF8574_ADDR2_COUNT 6
+#endif
+
+// Consitency tests - Checked across the complete range for the PCF8574/PCF8574A to allow override
+#if (PCF8574_ADDR1 < 0x20) || ((PCF8574_ADDR1 + PCF8574_ADDR1_COUNT - 1) > 0x27)
+#error PCF8574_ADDR1 and/or PCF8574_ADDR1_COUNT badly overriden. Fix your user_config_override
+#endif
+#if (PCF8574_ADDR2 < 0x38) || ((PCF8574_ADDR2 + PCF8574_ADDR2_COUNT - 1) > 0x3F)
+#error PCF8574_ADDR2 and/or PCF8574_ADDR2_COUNT badly overriden. Fix your user_config_override.
+#endif
+
+struct PCF8574 {
+ int error;
+ uint8_t pin[64];
+ uint8_t address[MAX_PCF8574];
+ uint8_t pin_mask[MAX_PCF8574] = { 0 };
+#ifdef USE_PCF8574_MQTTINPUT
+ uint8_t last_input[MAX_PCF8574] = { 0 };
+#endif
+ uint8_t max_connected_ports = 0; // Max numbers of devices comming from PCF8574 modules
+ uint8_t max_devices = 0; // Max numbers of PCF8574 modules
+ char stype[9];
+ bool type = false;
+} Pcf8574;
+
+uint8_t Pcf8574Read(uint8_t idx)
+{
+ Wire.requestFrom(Pcf8574.address[idx],(uint8_t)1);
+ return Wire.read();
+}
+
+uint8_t Pcf8574Write(uint8_t idx)
+{
+ Wire.beginTransmission(Pcf8574.address[idx]);
+ Wire.write(Pcf8574.pin_mask[idx]);
+ return Wire.endTransmission();
+}
+
+void Pcf8574SwitchRelay(void)
+{
+ for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) {
+ uint8_t relay_state = bitRead(XdrvMailbox.index, i);
+
+ if (Pcf8574.max_devices > 0 && Pcf8574.pin[i] < 99) {
+ uint8_t board = Pcf8574.pin[i]>>3;
+ uint8_t pin = Pcf8574.pin[i]&0x7;
+ uint8_t oldpinmask = Pcf8574.pin_mask[board];
+ uint8_t _val = bitRead(TasmotaGlobal.rel_inverted, i) ? !relay_state : relay_state;
+
+ //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: SwitchRelay %d=%d => PCF-%d.D%d=%d"), i, relay_state, board +1, pin, _val);
+ bitWrite(Pcf8574.pin_mask[board], pin, _val);
+ if (oldpinmask != Pcf8574.pin_mask[board]) {
+ Pcf8574.error = Pcf8574Write(board);
+ }
+ //else AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: SwitchRelay skipped"));
+ }
+ }
+}
+
+void Pcf8574Init(void)
+{
+ uint8_t pcf8574_address = (PCF8574_ADDR1_COUNT > 0) ? PCF8574_ADDR1 : PCF8574_ADDR2;
+ while ((Pcf8574.max_devices < MAX_PCF8574) && (pcf8574_address < PCF8574_ADDR2 +PCF8574_ADDR2_COUNT)) {
+
+#if defined(USE_MCP230xx) && defined(USE_MCP230xx_ADDR)
+ if (USE_MCP230xx_ADDR == pcf8574_address) {
+ AddLog(LOG_LEVEL_INFO, PSTR("PCF: Address 0x%02x reserved for MCP320xx skipped"), pcf8574_address);
+ pcf8574_address++;
+ if ((PCF8574_ADDR1 +PCF8574_ADDR1_COUNT) == pcf8574_address) { // See comment on allowed addresses and overrides
+ pcf8574_address = PCF8574_ADDR2;
+ }
+ }
+#endif
+
+ // AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Probing addr: 0x%x for PCF8574"), pcf8574_address);
+
+ if (I2cSetDevice(pcf8574_address)) {
+ Pcf8574.type = true;
+
+ Pcf8574.address[Pcf8574.max_devices] = pcf8574_address;
+ Pcf8574.max_devices++;
+
+ strcpy(Pcf8574.stype, "PCF8574");
+ if (pcf8574_address >= PCF8574_ADDR2) {
+ strcpy(Pcf8574.stype, "PCF8574A");
+ }
+ I2cSetActiveFound(pcf8574_address, Pcf8574.stype);
+ }
+
+ pcf8574_address++;
+ if ((PCF8574_ADDR1 +PCF8574_ADDR1_COUNT) == pcf8574_address) { // Support I2C addresses 0x20 to 0x26 and 0x39 to 0x3F
+ pcf8574_address = PCF8574_ADDR2;
+ }
+ }
+ if (Pcf8574.type) {
+ for (uint32_t i = 0; i < sizeof(Pcf8574.pin); i++) {
+ Pcf8574.pin[i] = 99;
+ }
+ UpdateDevicesPresent(-Pcf8574.max_connected_ports); // reset no of devices to avoid duplicate ports on duplicate init.
+
+ Pcf8574.max_connected_ports = 0; // reset no of devices to avoid duplicate ports on duplicate init.
+ for (uint32_t idx = 0; idx < Pcf8574.max_devices; idx++) { // suport up to 8 boards PCF8574
+ uint8_t gpio = Pcf8574Read(idx);
+ // Insure the input pins are actually writen a 1 for proper input operation
+ Pcf8574.pin_mask[idx] = gpio | ~Settings->pcf8574_config[idx];
+ Pcf8574Write(idx); // Write back to the register
+#ifdef USE_PCF8574_MQTTINPUT
+ Pcf8574.last_input[idx] = gpio & ~Settings->pcf8574_config[idx];
+#endif // #ifdef USE_PCF8574_MQTTINPUT
+ //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: PCF-%d config=0x%02x, gpio=0x%02X"), idx +1, Settings->pcf8574_config[idx], gpio);
+
+ for (uint32_t i = 0; i < 8; i++, gpio>>=1) {
+ uint8_t _result = Settings->pcf8574_config[idx] >> i &1;
+ //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: I2C shift i %d: %d. Powerstate: %d, TasmotaGlobal.devices_present: %d"), i,_result, Settings->power>>i&1, TasmotaGlobal.devices_present);
+ if (_result > 0) {
+ Pcf8574.pin[TasmotaGlobal.devices_present] = i + 8 * idx;
+ bitWrite(TasmotaGlobal.rel_inverted, TasmotaGlobal.devices_present, Settings->flag3.pcf8574_ports_inverted); // SetOption81 - Invert all ports on PCF8574 devices
+ if (!Settings->flag.save_state && !Settings->flag3.no_power_feedback) { // SetOption63 - Don't scan relay power state at restart - #5594 and #5663
+ //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Set power from from chip state"));
+ uint8_t power_state = Settings->flag3.pcf8574_ports_inverted ? 1 & ~gpio : 1 & gpio;
+ bitWrite(TasmotaGlobal.power, TasmotaGlobal.devices_present, power_state);
+ bitWrite(Settings->power, TasmotaGlobal.devices_present, power_state);
+ }
+ //else AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: DON'T set power from chip state"));
+ UpdateDevicesPresent(1);
+ Pcf8574.max_connected_ports++;
+ }
+ }
+ }
+ //AddLog(LOG_LEVEL_DEBUG, PSTR("PCF: Settings->power=0x%08X, TasmotaGlobal.power=0x%08X"), Settings->power, TasmotaGlobal.power);
+ AddLog(LOG_LEVEL_INFO, PSTR("PCF: Total devices %d, PCF8574 output ports %d"), Pcf8574.max_devices, Pcf8574.max_connected_ports);
+ }
+}
+
+/*********************************************************************************************\
+ * Presentation
+\*********************************************************************************************/
+
+#ifdef USE_WEBSERVER
+
+#define WEB_HANDLE_PCF8574 "pcf"
+
+const char HTTP_BTN_MENU_PCF8574[] PROGMEM =
+ "
";
+
+const char HTTP_FORM_I2C_PCF8574_1[] PROGMEM =
+ " " D_PCF8574_PARAMETERS " "
+ "