diff --git a/NOTICE b/NOTICE index be42c7d2..6c4094fa 100644 --- a/NOTICE +++ b/NOTICE @@ -10,3 +10,9 @@ Copyright [2014] [Cisco Systems, Inc.] Licensed under the Apache License, Version 2.0 Some material is derived from openembedded.org or the yocto project and is licensed in the same manner here (MIT for metadata; source code to match the associated recipe license). + +The zzz_generated.tar.gz file uses material from Project Chip which is: +Copyright (c) 2023 Project CHIP Authors +Licensed under the Apache License, Version 2.0 +See the README.md file under recipes-matter for details. +The parent ZAP file is included as `meta-rdk-mtk-bpir4/recipes-matter/barton-matter/files/barton.zap` diff --git a/conf/distro/include/rdk-bpi.inc b/conf/distro/include/rdk-bpi.inc index 643c60b5..926e746a 100644 --- a/conf/distro/include/rdk-bpi.inc +++ b/conf/distro/include/rdk-bpi.inc @@ -65,4 +65,6 @@ DISTRO_FEATURES_append = " resource_optimization" DISTRO_FEATURES_append = " CONFIG_IEEE80211BE" +DISTRO_FEATURES_append = " matter" + #DISTRO_FEATURES_append = " generic_mlo" diff --git a/meta-rdk-mtk-bpir4/recipes-ccsp/util/utopia.bbappend b/meta-rdk-mtk-bpir4/recipes-ccsp/util/utopia.bbappend index 298a601d..a1b5dd8b 100644 --- a/meta-rdk-mtk-bpir4/recipes-ccsp/util/utopia.bbappend +++ b/meta-rdk-mtk-bpir4/recipes-ccsp/util/utopia.bbappend @@ -4,6 +4,8 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" SRC_URI += "file://service_bridge_bpi.sh" +CFLAGS_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'matter', ' -DFEATURE_MATTER_ENABLED', '', d)}" + do_install_append() { install -d ${D}${sysconfdir}/ diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/bluez5/bluez5_5.%.bbappend b/meta-rdk-mtk-bpir4/recipes-connectivity/bluez5/bluez5_5.%.bbappend new file mode 100644 index 00000000..ef1dd0e4 --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/bluez5/bluez5_5.%.bbappend @@ -0,0 +1,4 @@ +# Add this new section +do_install_append() { + install -m 0755 ${B}/tools/btattach ${D}${bindir} +} diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/bt-host-cpc-hci-bridge/bt-host-cpc-hci-bridge_4.4.1.0.bb b/meta-rdk-mtk-bpir4/recipes-connectivity/bt-host-cpc-hci-bridge/bt-host-cpc-hci-bridge_4.4.1.0.bb new file mode 100644 index 00000000..4bbb9e8f --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/bt-host-cpc-hci-bridge/bt-host-cpc-hci-bridge_4.4.1.0.bb @@ -0,0 +1,67 @@ +DESCRIPTION = "Bluetooth CPC HCI Bridge" +LICENSE = "Proprietary" +LIC_FILES_CHKSUM = "file://${WORKDIR}/git/gsdk/License.txt;md5=9a041f41aad5520b22ab2bb033c11e3c" + +# GSDK path definition +GSDK_DIR = "${WORKDIR}/git/gsdk" +BT_BRIDGE_DIR = "${GSDK_DIR}/app/bluetooth/example_host/bt_host_cpc_hci_bridge" + +SRC_URI = "git://github.com/SiliconLabs/gecko_sdk.git;protocol=https;branch=gsdk_4.4;destsuffix=git/gsdk;name=gsdk" +SRCREV_gsdk = "9ad9e19638a2d0ce01ce21d32f5049c5f1b21d70" + +SRC_URI += "file://bt-host-cpc-hci-bridge.service \ + file://bt-host-cpc-hci-bridge-attach.service \ + " + +DEPENDS += "cpcd" +RDEPENDS_${PN} += "cpcd (= 4.4.1.0-r0) bluez5-noinst-tools" + +S = "${BT_BRIDGE_DIR}" + +inherit pkgconfig systemd + +# Ensure we're using the correct toolchain +TOOLCHAIN = "gcc" +INHIBIT_DEFAULT_DEPS = "1" +DEPENDS += "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++ virtual/libc" + +# Basic compilation flags +CFLAGS = "${TARGET_CFLAGS} -D_DEFAULT_SOURCE -D_BSD_SOURCE -DHOST_TOOLCHAIN -DPOSIX -DSL_CATALOG_APP_LOG_PRESENT" + +EXTRA_OEMAKE = "\ + CPC=1 \ + CC='${CC}' \ + CROSS_COMPILE=${TARGET_PREFIX} \ + CFLAGS='${CFLAGS} \ + -I${STAGING_INCDIR} \ + -I${STAGING_INCDIR}/sl_cpc \ + -I${GSDK_DIR}/app/bluetooth/common_host/iostream_mock \ + -I${GSDK_DIR}/app/bluetooth/common_host/app_log \ + -I${GSDK_DIR}/app/bluetooth/common_host/app_log/config \ + -I${GSDK_DIR}/platform/common/inc \ + -I${GSDK_DIR}/protocol/bluetooth/bgstack/ll/utils/hci_packet/inc \ + -fno-short-enums -Wall -std=c99' \ + LDFLAGS='${LDFLAGS}' \ +" + +do_configure[noexec] = "1" + +do_compile() { + oe_runmake +} + +do_install() { + # Install binary from the exe directory + install -d ${D}${bindir} + install -m 0755 ${S}/exe/bt_host_cpc_hci_bridge ${D}${bindir} + + # Install systemd services + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/bt-host-cpc-hci-bridge.service ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/bt-host-cpc-hci-bridge-attach.service ${D}${systemd_system_unitdir} +} + +FILES_${PN} += "${systemd_system_unitdir}" + +SYSTEMD_SERVICE_${PN} = "bt-host-cpc-hci-bridge.service bt-host-cpc-hci-bridge-attach.service" +SYSTEMD_AUTO_ENABLE = "enable" diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/bt-host-cpc-hci-bridge/files/bt-host-cpc-hci-bridge-attach.service b/meta-rdk-mtk-bpir4/recipes-connectivity/bt-host-cpc-hci-bridge/files/bt-host-cpc-hci-bridge-attach.service new file mode 100644 index 00000000..a89f308e --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/bt-host-cpc-hci-bridge/files/bt-host-cpc-hci-bridge-attach.service @@ -0,0 +1,14 @@ +[Unit] +Description=Attach Bluetooth HCI Bridge +After=bt-host-cpc-hci-bridge.service +Requires=bt-host-cpc-hci-bridge.service + +[Service] +Type=simple +ExecStartPre=/bin/sh -c 'while [ ! -e /dev/pts/0 ]; do sleep 1; done' +ExecStart=/usr/bin/btattach -B /dev/pts/0 -S 115200 +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/bt-host-cpc-hci-bridge/files/bt-host-cpc-hci-bridge.service b/meta-rdk-mtk-bpir4/recipes-connectivity/bt-host-cpc-hci-bridge/files/bt-host-cpc-hci-bridge.service new file mode 100644 index 00000000..2d56e307 --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/bt-host-cpc-hci-bridge/files/bt-host-cpc-hci-bridge.service @@ -0,0 +1,14 @@ +[Unit] +Description=Bluetooth CPC HCI Bridge +After=cpcd.service +Requires=cpcd.service + +[Service] +Type=simple +ExecStart=/usr/bin/bt_host_cpc_hci_bridge +Restart=always +RestartSec=5 +WorkingDirectory=/tmp + +[Install] +WantedBy=multi-user.target diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/cpcd/cpcd_4.4.1.0.bb b/meta-rdk-mtk-bpir4/recipes-connectivity/cpcd/cpcd_4.4.1.0.bb new file mode 100644 index 00000000..8f190b83 --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/cpcd/cpcd_4.4.1.0.bb @@ -0,0 +1,28 @@ +# TODO: Verify license -- it is Silabs specific +DESCRIPTION = "Co-Processor Communication Daemon" +LICENSE = "Proprietary" +LIC_FILES_CHKSUM = "file://LICENSE;md5=5e588136d392e8e0e36bd310e9ca0ab3" +SRC_URI = "git://github.com/SiliconLabs/cpc_daemon;protocol=https;name=cpc-daemon;branch=main" +PR = "r0" +# Tag v4.4.1 +SRCREV_cpc-daemon = "283b31aef4f32df23596b8cff1a646dd1dc442c6" +SRC_URI += "file://cpcd.service \ + file://cpcd.conf \ +" +DEPENDS += "mbedtls systemd" +RDEPENDS_${PN} += "systemd" +S = "${WORKDIR}/git" +inherit cmake pkgconfig +EXTRA_OECMAKE += "-DUSE_LEGACY_GPIO_SYSFS=TRUE \ +" +do_install_append() { + install -d ${D}${sysconfdir} + install -m 0644 ${WORKDIR}/cpcd.conf ${D}${sysconfdir}/cpcd.conf + install -d ${D}${bindir} + install -d ${D}${systemd_unitdir}/system + install -m 0644 ${WORKDIR}/cpcd.service ${D}${systemd_unitdir}/system/cpcd.service +} +FILES_${PN} += "${systemd_unitdir}/system/" +inherit systemd +SYSTEMD_SERVICE_${PN} = "cpcd.service" +SYSTEMD_AUTO_ENABLE = "enable" diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/cpcd/files/cpcd.conf b/meta-rdk-mtk-bpir4/recipes-connectivity/cpcd/files/cpcd.conf new file mode 100644 index 00000000..cf75c25e --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/cpcd/files/cpcd.conf @@ -0,0 +1,100 @@ +# Instance Name +# Optional, defaults to "cpcd_0" +# This string uniquely identifies the running cpcd instance. +# An application must pass this value to cpc_init() to connect +# to this particular instance. +instance_name: cpcd_0 + +# Bus type selection +# Mandatory +# Allowed values : UART or SPI +bus_type: UART + +# SPI device file +# Mandatory if spi chosen, ignored if uart chosen +spi_device_file: /dev/spidev0.0 + +# SPI RX IRQ gpio chip +# Mandatory if spi chosen, ignored if uart chosen +spi_rx_irq_gpio_chip: gpiochip0 + +# SPI RX IRQ gpio +# RX interrupt gpio selection +spi_rx_irq_gpio: 22 + +# SPI bitrate. +# Ignored if uart chosen. +# See doc/spi_bitrate.md for a complete explanation +spi_device_bitrate: 1000000 + +# UART device file +# Mandatory if uart chosen, ignored if spi chosen +uart_device_file: /dev/ttyACM0 + +# UART baud rate. +# Optional if uart chosen, ignored if spi chosen. Defaults to 115200 +# Allowed values : standard UART baud rates listed in 'termios.h' +uart_device_baud: 115200 + +# UART flow control. +# Optional if uart chosen, ignored if spi chosen. Defaults to 'true' +# Allowed values are 'true' or 'false' +uart_hardflow: true + +# BOOTLOADER Recovery Pins Enabled +# Set to true to enter bootloader via wake and reset pins +# If true, bootloader_wake_gpio/chip and bootloader_reset_gpio/chip must be configured +bootloader_recovery_pins_enabled: false + +# BOOTLOADER WAKE gpio chip +# Wakeup gpio chip used by the bootloader +bootloader_wake_gpio_chip: gpiochip0 + +# BOOTLOADER WAKE gpio +# Wakeup gpio used by the bootloader +# Ensure bootloader_recovery_pins_enabled=true to use this pin +bootloader_wake_gpio: 24 + +# BOOTLOADER RESET gpio chip +# Reset gpio chip used by the bootloader +bootloader_reset_gpio_chip: gpiochip0 + +# BOOTLOADER RESET gpio +# Reset gpio used by the bootloader +# Ensure bootloader_recovery_pins_enabled=true to use this pin +bootloader_reset_gpio: 23 + +# Prints tracing information to stdout +# Optional, defaults to 'false' +# Allowed values are 'true' or 'false' +stdout_trace: false + +# Prints tracing information to a file located under traces_folder +# Optional, defaults to 'false' +# Allowed values are 'true' or 'false' +trace_to_file: false + +# Traces folder +# Optional, defaults to '/dev/shm/cpcd-traces' +# Folder mounted on a tmpfs is preferred +traces_folder: /dev/shm/cpcd-traces + +# Enable frame trace +# Optional, defaults to 'false' +# Allowed values are 'true' or 'false' +enable_frame_trace: false + +# Number of open file descriptors. +# Optional, defaults to 2000 +# If the error 'Too many open files' occurs, this is the value to increase. +rlimit_nofile: 2000 + +# Disable the encryption over CPC endpoints +# Optional, defaults false +disable_encryption: true + +# Binding key file +# Mandatory when security is used +# Must have 32 alphanumeric characters as the first line, representing a 128 bit binding key +# If ECDH encryption is used, this file will be created during the binding process +binding_key_file: ~/.cpcd/binding.key diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/cpcd/files/cpcd.service b/meta-rdk-mtk-bpir4/recipes-connectivity/cpcd/files/cpcd.service new file mode 100644 index 00000000..e21ef594 --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/cpcd/files/cpcd.service @@ -0,0 +1,12 @@ +[Unit] +Description=Service for the 802.15.4 co-processor communication daemon +StartLimitIntervalSec=300 +StartLimitBurst=5 +[Service] +Type=simple +Restart=always +RestartSec=5 +TimeoutStartSec=60 +ExecStart=/usr/bin/cpcd -c /etc/cpcd.conf +[Install] +WantedBy=multi-user.target diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/0003-Extend-d-bus-properties-and-signals.patch b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/0003-Extend-d-bus-properties-and-signals.patch new file mode 100644 index 00000000..152ce55d --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/0003-Extend-d-bus-properties-and-signals.patch @@ -0,0 +1,473 @@ +From 51008cad7c38a29dbc6a721602507053ba1d932b Mon Sep 17 00:00:00 2001 +From: Thomas Lea +Date: Fri, 14 Feb 2025 11:09:25 -0600 +Subject: [PATCH] Extend d-bus properties and signals + +This change adds the following new properties: + - BorderAgentId + - ThreadNetIfUp (emits signal on change) + - ThreadVersion (was missing from d-bus client) + +The following existing properties now emit signals on change: + - ActiveDatasetTlvs (this already did, but introspect.xml didnt + match) + - PendingDatasetTlv + - Nat64State + - ThreadNetIfUp + +Source: Comcast +--- + src/dbus/client/thread_api_dbus.cpp | 15 +++++ + src/dbus/client/thread_api_dbus.hpp | 35 +++++++++++ + src/dbus/common/constants.hpp | 2 + + src/dbus/server/dbus_thread_object_rcp.cpp | 71 ++++++++++++++++++++++ + src/dbus/server/dbus_thread_object_rcp.hpp | 7 +++ + src/dbus/server/introspect.xml | 16 ++++- + src/utils/thread_helper.cpp | 71 ++++++++++++++++++++++ + src/utils/thread_helper.hpp | 41 ++++++++++++- + 8 files changed, 253 insertions(+), 5 deletions(-) + +diff --git a/src/dbus/client/thread_api_dbus.cpp b/src/dbus/client/thread_api_dbus.cpp +index 51f8828e6a8..bd3ed715255 100644 +--- a/src/dbus/client/thread_api_dbus.cpp ++++ b/src/dbus/client/thread_api_dbus.cpp +@@ -718,6 +718,21 @@ ClientError ThreadApiDBus::GetCapabilities(std::vector &aCapabilities) + return GetProperty(OTBR_DBUS_PROPERTY_CAPABILITIES, aCapabilities); + } + ++ClientError ThreadApiDBus::GetBorderAgentId(std::vector &aId) ++{ ++ return GetProperty(OTBR_DBUS_PROPERTY_BORDER_AGENT_ID, aId); ++} ++ ++ClientError ThreadApiDBus::GetThreadNetIfUp(bool &aIsUp) ++{ ++ return GetProperty(OTBR_DBUS_PROPERTY_THREAD_NETIF_UP, aIsUp); ++} ++ ++ClientError ThreadApiDBus::GetThreadVersion(uint16_t &aVersion) ++{ ++ return GetProperty(OTBR_DBUS_PROPERTY_THREAD_VERSION, aVersion); ++} ++ + std::string ThreadApiDBus::GetInterfaceName(void) + { + return mInterfaceName; +diff --git a/src/dbus/client/thread_api_dbus.hpp b/src/dbus/client/thread_api_dbus.hpp +index e817e525355..4ab4e1542eb 100644 +--- a/src/dbus/client/thread_api_dbus.hpp ++++ b/src/dbus/client/thread_api_dbus.hpp +@@ -864,6 +864,41 @@ public: + */ + ClientError GetCapabilities(std::vector &aCapabilities); + ++ /** ++ * This method gets the border agent identifier. ++ * ++ * @param[out] aId The border agent identifier. ++ * ++ * @retval ERROR_NONE Successfully performed the dbus function call ++ * @retval ERROR_DBUS dbus encode/decode error ++ * @retval ... OpenThread defined error value otherwise ++ * ++ */ ++ ClientError GetBorderAgentId(std::vector &aId); ++ ++ /** ++ * This method gets the up/down state of the thread network interface. ++ * ++ * @param[out] aIsUp True if the interface is up, false otherwise. ++ * ++ * @retval ERROR_NONE Successfully performed the dbus function call ++ * @retval ERROR_DBUS dbus encode/decode error ++ * @retval ... OpenThread defined error value otherwise ++ * ++ */ ++ ClientError GetThreadNetIfUp(bool &aIsUp); ++ ++ /** ++ * This method gets the Thread version supported by this device. ++ * ++ * @param[out] aVersion The Thread version supported by this device. ++ * ++ * @retval ERROR_NONE Successfully performed the dbus function call ++ * @retval ERROR_DBUS dbus encode/decode error ++ * @retval ... OpenThread defined error value otherwise ++ */ ++ ClientError GetThreadVersion(uint16_t &aVersion); ++ + private: + ClientError CallDBusMethodSync(const std::string &aMethodName); + ClientError CallDBusMethodAsync(const std::string &aMethodName, DBusPendingCallNotifyFunction aFunction); +diff --git a/src/dbus/common/constants.hpp b/src/dbus/common/constants.hpp +index 6f8a6e6545a..ed5236c5170 100644 +--- a/src/dbus/common/constants.hpp ++++ b/src/dbus/common/constants.hpp +@@ -126,6 +126,8 @@ + #define OTBR_DBUS_PROPERTY_DHCP6_PD_STATE "Dhcp6PdState" + #define OTBR_DBUS_PROPERTY_TELEMETRY_DATA "TelemetryData" + #define OTBR_DBUS_PROPERTY_CAPABILITIES "Capabilities" ++#define OTBR_DBUS_PROPERTY_BORDER_AGENT_ID "BorderAgentId" ++#define OTBR_DBUS_PROPERTY_THREAD_NETIF_UP "ThreadNetIfUp" + + #define OTBR_NAT64_STATE_NAME_DISABLED "disabled" + #define OTBR_NAT64_STATE_NAME_NOT_RUNNING "not_running" +diff --git a/src/dbus/server/dbus_thread_object_rcp.cpp b/src/dbus/server/dbus_thread_object_rcp.cpp +index a6a3aa3f823..0e5c54d344e 100644 +--- a/src/dbus/server/dbus_thread_object_rcp.cpp ++++ b/src/dbus/server/dbus_thread_object_rcp.cpp +@@ -125,6 +125,11 @@ otbrError DBusThreadObjectRcp::Init(void) + threadHelper->SetDhcp6PdStateCallback(std::bind(&DBusThreadObjectRcp::Dhcp6PdStateHandler, this, _1)); + #endif + threadHelper->AddActiveDatasetChangeHandler(std::bind(&DBusThreadObjectRcp::ActiveDatasetChangeHandler, this, _1)); ++ threadHelper->AddPendingDatasetChangeHandler(std::bind(&DBusThreadObjectRcp::PendingDatasetChangeHandler, this, _1)); ++ threadHelper->AddThreadNetIfUpChangeHandler(std::bind(&DBusThreadObjectRcp::ThreadNetIfUpChangeHandler, this, _1)); ++#if OTBR_ENABLE_NAT64 ++ threadHelper->AddNat64StateChangeHandler(std::bind(&DBusThreadObjectRcp::Nat64StateChangeHandler, this, _1, _2)); ++#endif + mHost.RegisterResetHandler(std::bind(&DBusThreadObjectRcp::NcpResetHandler, this)); + + RegisterMethod(OTBR_DBUS_THREAD_INTERFACE, OTBR_DBUS_SCAN_METHOD, +@@ -307,6 +312,12 @@ otbrError DBusThreadObjectRcp::Init(void) + std::bind(&DBusThreadObjectRcp::GetTelemetryDataHandler, this, _1)); + RegisterGetPropertyHandler(OTBR_DBUS_THREAD_INTERFACE, OTBR_DBUS_PROPERTY_CAPABILITIES, + std::bind(&DBusThreadObjectRcp::GetCapabilitiesHandler, this, _1)); ++#if OTBR_ENABLE_BORDER_AGENT ++ RegisterGetPropertyHandler(OTBR_DBUS_THREAD_INTERFACE, OTBR_DBUS_PROPERTY_BORDER_AGENT_ID, ++ std::bind(&DBusThreadObjectRcp::GetBorderAgentIdHandler, this, _1)); ++#endif ++ RegisterGetPropertyHandler(OTBR_DBUS_THREAD_INTERFACE, OTBR_DBUS_PROPERTY_THREAD_NETIF_UP, ++ std::bind(&DBusThreadObjectRcp::GetThreadNetIfUpHandler, this, _1)); + + SuccessOrExit(error = Signal(OTBR_DBUS_THREAD_INTERFACE, OTBR_DBUS_SIGNAL_READY, std::make_tuple())); + +@@ -332,6 +343,11 @@ void DBusThreadObjectRcp::NcpResetHandler(void) + mHost.GetThreadHelper()->AddDeviceRoleHandler(std::bind(&DBusThreadObjectRcp::DeviceRoleHandler, this, _1)); + mHost.GetThreadHelper()->AddActiveDatasetChangeHandler( + std::bind(&DBusThreadObjectRcp::ActiveDatasetChangeHandler, this, _1)); ++ mHost.GetThreadHelper()->AddPendingDatasetChangeHandler(std::bind(&DBusThreadObjectRcp::PendingDatasetChangeHandler, this, _1)); ++ mHost.GetThreadHelper()->AddThreadNetIfUpChangeHandler(std::bind(&DBusThreadObjectRcp::ThreadNetIfUpChangeHandler, this, _1)); ++#if OTBR_ENABLE_NAT64 ++ mHost.GetThreadHelper()->AddNat64StateChangeHandler(std::bind(&DBusThreadObjectRcp::Nat64StateChangeHandler, this, _1, _2)); ++#endif + SignalPropertyChanged(OTBR_DBUS_THREAD_INTERFACE, OTBR_DBUS_PROPERTY_DEVICE_ROLE, + GetDeviceRoleName(OT_DEVICE_ROLE_DISABLED)); + } +@@ -1524,6 +1540,36 @@ exit: + return error; + } + ++#if OTBR_ENABLE_BORDER_AGENT ++otError DBusThreadObjectRcp::GetBorderAgentIdHandler(DBusMessageIter &aIter) ++{ ++ otBorderAgentId aId; ++ auto threadHelper = mHost.GetThreadHelper(); ++ otError error = OT_ERROR_NONE; ++ std::vector data; ++ ++ SuccessOrExit(error = otBorderAgentGetId(threadHelper->GetInstance(), &aId)); ++ data = std::vector(&aId.mId[0], &aId.mId[OT_BORDER_AGENT_ID_LENGTH]); ++ VerifyOrExit(DBusMessageEncodeToVariant(&aIter, data) == OTBR_ERROR_NONE, error = OT_ERROR_INVALID_ARGS); ++ ++exit: ++ return error; ++} ++#endif ++ ++otError DBusThreadObjectRcp::GetThreadNetIfUpHandler(DBusMessageIter &aIter) ++{ ++ bool isUp = false; ++ auto threadHelper = mHost.GetThreadHelper(); ++ otError error = OT_ERROR_NONE; ++ ++ isUp = otIp6IsEnabled(threadHelper->GetInstance()); ++ VerifyOrExit(DBusMessageEncodeToVariant(&aIter, isUp) == OTBR_ERROR_NONE, error = OT_ERROR_INVALID_ARGS); ++ ++exit: ++ return error; ++} ++ + void DBusThreadObjectRcp::GetPropertiesHandler(DBusRequest &aRequest) + { + UniqueDBusMessage reply(dbus_message_new_method_return(aRequest.GetMessage())); +@@ -1809,6 +1855,31 @@ exit: + } + } + ++void DBusThreadObjectRcp::PendingDatasetChangeHandler(const otOperationalDatasetTlvs &aDatasetTlvs) ++{ ++ std::vector value(aDatasetTlvs.mLength); ++ std::copy(aDatasetTlvs.mTlvs, aDatasetTlvs.mTlvs + aDatasetTlvs.mLength, value.begin()); ++ SignalPropertyChanged(OTBR_DBUS_THREAD_INTERFACE, OTBR_DBUS_PROPERTY_PENDING_DATASET_TLVS, value); ++} ++ ++void DBusThreadObjectRcp::ThreadNetIfUpChangeHandler(bool aIsUp) ++{ ++ SignalPropertyChanged(OTBR_DBUS_THREAD_INTERFACE, OTBR_DBUS_PROPERTY_THREAD_NETIF_UP, aIsUp); ++} ++ ++void DBusThreadObjectRcp::Nat64StateChangeHandler(otNat64State prefixManagerState, otNat64State translatorState) ++{ ++#if OTBR_ENABLE_NAT64 ++ Nat64ComponentState state; ++ state.mPrefixManagerState = GetNat64StateName(prefixManagerState); ++ state.mTranslatorState = GetNat64StateName(translatorState); ++ SignalPropertyChanged(OTBR_DBUS_THREAD_INTERFACE, OTBR_DBUS_PROPERTY_NAT64_STATE, state); ++#else ++ OTBR_UNUSED_VARIABLE(prefixManagerState); ++ OTBR_UNUSED_VARIABLE(translatorState); ++#endif ++} ++ + void DBusThreadObjectRcp::LeaveNetworkHandler(DBusRequest &aRequest) + { + constexpr int kExitCodeShouldRestart = 7; +diff --git a/src/dbus/server/dbus_thread_object_rcp.hpp b/src/dbus/server/dbus_thread_object_rcp.hpp +index 67891bc2743..1b129a1985a 100644 +--- a/src/dbus/server/dbus_thread_object_rcp.hpp ++++ b/src/dbus/server/dbus_thread_object_rcp.hpp +@@ -85,6 +85,9 @@ private: + void DeviceRoleHandler(otDeviceRole aDeviceRole); + void Dhcp6PdStateHandler(otBorderRoutingDhcp6PdState aDhcp6PdState); + void ActiveDatasetChangeHandler(const otOperationalDatasetTlvs &aDatasetTlvs); ++ void PendingDatasetChangeHandler(const otOperationalDatasetTlvs &aDatasetTlvs); ++ void ThreadNetIfUpChangeHandler(bool aIsUp); ++ void Nat64StateChangeHandler(otNat64State prefixManagerState, otNat64State translatorState); + void NcpResetHandler(void); + + void ScanHandler(DBusRequest &aRequest); +@@ -179,6 +182,10 @@ private: + otError GetDnsUpstreamQueryState(DBusMessageIter &aIter); + otError GetTelemetryDataHandler(DBusMessageIter &aIter); + otError GetCapabilitiesHandler(DBusMessageIter &aIter); ++#if OTBR_ENABLE_BORDER_AGENT ++ otError GetBorderAgentIdHandler(DBusMessageIter &aIter); ++#endif ++ otError GetThreadNetIfUpHandler(DBusMessageIter &aIter); + + void ReplyScanResult(DBusRequest &aRequest, otError aError, const std::vector &aResult); + void ReplyEnergyScanResult(DBusRequest &aRequest, otError aError, const std::vector &aResult); +diff --git a/src/dbus/server/introspect.xml b/src/dbus/server/introspect.xml +index 449dee38bef..173485fbb0f 100644 +--- a/src/dbus/server/introspect.xml ++++ b/src/dbus/server/introspect.xml +@@ -561,12 +561,12 @@ + + + +- ++ + + + + +- ++ + + + + +- ++ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/utils/thread_helper.cpp b/src/utils/thread_helper.cpp +index 9866225ae0a..0e874dd4990 100644 +--- a/src/utils/thread_helper.cpp ++++ b/src/utils/thread_helper.cpp +@@ -306,6 +306,23 @@ void ThreadHelper::StateChangedCallback(otChangedFlags aFlags) + ActiveDatasetChangedCallback(); + } + ++ if (aFlags & OT_CHANGED_PENDING_DATASET) ++ { ++ PendingDatasetChangedCallback(); ++ } ++ ++ if (aFlags & OT_CHANGED_THREAD_NETIF_STATE) ++ { ++ ThreadNetIfUpChangedCallback(otIp6IsEnabled(mInstance)); ++ } ++ ++#if OTBR_ENABLE_NAT64 ++ if (aFlags & OT_CHANGED_NAT64_TRANSLATOR_STATE) ++ { ++ Nat64StateChangedCallback(otNat64GetPrefixManagerState(mInstance), otNat64GetTranslatorState(mInstance)); ++ } ++#endif ++ + exit: + return; + } +@@ -329,6 +346,43 @@ exit: + } + } + ++void ThreadHelper::PendingDatasetChangedCallback() ++{ ++ otError error; ++ otOperationalDatasetTlvs datasetTlvs; ++ ++ SuccessOrExit(error = otDatasetGetPendingTlvs(mInstance, &datasetTlvs)); ++ ++ for (const auto &handler : mPendingDatasetChangeHandlers) ++ { ++ handler(datasetTlvs); ++ } ++ ++exit: ++ if (error != OT_ERROR_NONE) ++ { ++ otbrLogWarning("Error handling pending dataset change: %s", otThreadErrorToString(error)); ++ } ++} ++ ++void ThreadHelper::ThreadNetIfUpChangedCallback(bool isUp) ++{ ++ for (const auto &handler : mThreadNetIfUpChangeHandlers) ++ { ++ handler(isUp); ++ } ++} ++ ++#if OTBR_ENABLE_NAT64 ++void ThreadHelper::Nat64StateChangedCallback(otNat64State prefixManagerState, otNat64State translatorState) ++{ ++ for (const auto &handler : mNat64StateChangeHandlers) ++ { ++ handler(prefixManagerState, translatorState); ++ } ++} ++#endif ++ + #if OTBR_ENABLE_DBUS_SERVER + void ThreadHelper::OnUpdateMeshCopTxt(std::map> aUpdate) + { +@@ -888,6 +942,23 @@ void ThreadHelper::AddActiveDatasetChangeHandler(DatasetChangeHandler aHandler) + mActiveDatasetChangeHandlers.push_back(std::move(aHandler)); + } + ++void ThreadHelper::AddPendingDatasetChangeHandler(DatasetChangeHandler aHandler) ++{ ++ mPendingDatasetChangeHandlers.push_back(std::move(aHandler)); ++} ++ ++void ThreadHelper::AddThreadNetIfUpChangeHandler(ThreadNetIfUpChangeHandler aHandler) ++{ ++ mThreadNetIfUpChangeHandlers.push_back(std::move(aHandler)); ++} ++ ++#if OTBR_ENABLE_NAT64 ++void ThreadHelper::AddNat64StateChangeHandler(Nat64StateChangeHandler aHandler) ++{ ++ mNat64StateChangeHandlers.push_back(std::move(aHandler)); ++} ++#endif ++ + void ThreadHelper::DetachGracefully(ResultHandler aHandler) + { + otError error = OT_ERROR_NONE; +diff --git a/src/utils/thread_helper.hpp b/src/utils/thread_helper.hpp +index 2e2de91e586..c557e26ebf2 100644 +--- a/src/utils/thread_helper.hpp ++++ b/src/utils/thread_helper.hpp +@@ -50,6 +50,7 @@ + #include + #include + #include ++#include + #include "mdns/mdns.hpp" + #if OTBR_ENABLE_TELEMETRY_DATA_API + #include "proto/thread_telemetry.pb.h" +@@ -80,7 +81,10 @@ public: + #if OTBR_ENABLE_DHCP6_PD + using Dhcp6PdStateCallback = std::function; + #endif +- ++ using ThreadNetIfUpChangeHandler = std::function; ++#if OTBR_ENABLE_NAT64 ++ using Nat64StateChangeHandler = std::function; /* prefix manager state, translator state */ ++#endif + /** + * The constructor of a Thread helper. + * +@@ -112,6 +116,29 @@ public: + */ + void AddActiveDatasetChangeHandler(DatasetChangeHandler aHandler); + ++ /** ++ * This method adds a callback for pending dataset change. ++ * ++ * @param[in] aHandler The pending dataset change handler. ++ */ ++ void AddPendingDatasetChangeHandler(DatasetChangeHandler aHandler); ++ ++ /** ++ * This method adds a callback for thread network interface state changes. ++ * ++ * @param[in] aHandler The handler for thread network interface state changes. ++ */ ++ void AddThreadNetIfUpChangeHandler(ThreadNetIfUpChangeHandler aHandler); ++ ++#if OTBR_ENABLE_NAT64 ++ /** ++ * This method adds a callback for nat64 translator state changes. ++ * ++ * @param[in] aHandler The handler for nat64 translator state changes. ++ */ ++ void AddNat64StateChangeHandler(Nat64StateChangeHandler aHandler); ++#endif ++ + /** + * This method permits unsecure join on port. + * +@@ -318,6 +345,12 @@ private: + uint8_t RandomChannelFromChannelMask(uint32_t aChannelMask); + + void ActiveDatasetChangedCallback(void); ++ void PendingDatasetChangedCallback(void); ++ void ThreadNetIfUpChangedCallback(bool isUp); ++#if OTBR_ENABLE_NAT64 ++ void Nat64StateChangedCallback(otNat64State prefixManagerState, otNat64State translatorState); ++#endif ++ + + #if OTBR_ENABLE_DHCP6_PD + static void BorderRoutingDhcp6PdCallback(otBorderRoutingDhcp6PdState aState, void *aThreadHelper); +@@ -349,7 +382,11 @@ private: + + std::vector mDeviceRoleHandlers; + std::vector mActiveDatasetChangeHandlers; +- ++ std::vector mPendingDatasetChangeHandlers; ++ std::vector mThreadNetIfUpChangeHandlers; ++#if OTBR_ENABLE_NAT64 ++ std::vector mNat64StateChangeHandlers; ++#endif + std::map mUnsecurePortRefCounter; + + bool mWaitingMgmtSetResponse = +-- +2.43.0 + diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/adjust-otbr-configuration.patch b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/adjust-otbr-configuration.patch new file mode 100644 index 00000000..35462d74 --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/adjust-otbr-configuration.patch @@ -0,0 +1,58 @@ +From: RDKM +Date: Wed, 29 Oct 2025 +Subject: [PATCH] Enable Thread 1.3+ features for newer versions + +Change Thread 1.3 feature conditionals from exact version match to +minimum version match, allowing Thread 1.4+ to use these features. + +Source: RDKM + +diff --git a/protocol/openthread/platform-abstraction/posix/openthread-core-silabs-posix-config.h b/protocol/openthread/platform-abstraction/posix/openthread-core-silabs-posix-config.h +index 39c42ae33..ce0f7d35c 100644 +--- a/protocol/openthread/platform-abstraction/posix/openthread-core-silabs-posix-config.h ++++ b/protocol/openthread/platform-abstraction/posix/openthread-core-silabs-posix-config.h +@@ -188,7 +188,7 @@ sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=1 BACKBONE_ROUTER=1 BORDER_RO + * + */ + #undef OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE +-#define OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE (OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3) ++#define OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_3) + + /** + * OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE +@@ -197,7 +197,7 @@ sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=1 BACKBONE_ROUTER=1 BORDER_RO + * + */ + #undef OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE +-#define OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE (OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3) ++#define OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_3) + + /** + * OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE +@@ -206,7 +206,7 @@ sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=1 BACKBONE_ROUTER=1 BORDER_RO + * + */ + #undef OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE +-#define OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE (OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3) ++#define OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_3) + + /** + * OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE +@@ -215,7 +215,7 @@ sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=1 BACKBONE_ROUTER=1 BORDER_RO + * + */ + #undef OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE +-#define OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE (OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3) ++#define OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_3) + + /** + * OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE +@@ -224,7 +224,7 @@ sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=1 BACKBONE_ROUTER=1 BORDER_RO + * + */ + #undef OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE +-#define OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE (OPENTHREAD_CONFIG_THREAD_VERSION == OT_THREAD_VERSION_1_3) ++#define OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_3) + + /** + * OPENTHREAD_CONFIG_MLE_MAX_CHILDREN diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/openthread-fix-build-errors.patch b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/openthread-fix-build-errors.patch new file mode 100644 index 00000000..156317fd --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/openthread-fix-build-errors.patch @@ -0,0 +1,70 @@ +From: RDKM +Date: Wed, 29 Oct 2025 +Subject: [PATCH] Fix namespace and constant usage in CPC and vendor spinel + +Update OpenThread namespace usage and time constants for compatibility +with newer OpenThread versions. Moves GetRadioSpinel declaration to +external linkage. + +Source: RDKM + +diff --git a/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp b/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp +index 67799f6aa..8bd809e2b 100644 +--- a/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp ++++ b/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp +@@ -51,6 +51,8 @@ + #include + #include + ++#include "common/encoding.hpp" ++#include "common/debug.hpp" + #include "common/code_utils.hpp" + #include "common/logging.hpp" + #include "common/new.hpp" +@@ -163,8 +165,8 @@ void CpcInterfaceImpl::Read(uint64_t aTimeoutUs) + { + cpc_timeval_t timeout; + +- timeout.seconds = static_cast(aTimeoutUs / US_PER_S); +- timeout.microseconds = static_cast(aTimeoutUs % US_PER_S); ++ timeout.seconds = static_cast(aTimeoutUs / OT_US_PER_S); ++ timeout.microseconds = static_cast(aTimeoutUs % OT_US_PER_S); + + block = true; + ret = cpc_set_endpoint_option(mEndpoint, CPC_OPTION_BLOCKING, &block, sizeof(block)); +@@ -188,7 +190,7 @@ void CpcInterfaceImpl::Read(uint64_t aTimeoutUs) + { + break; + } +- uint16_t bufferLen = Encoding::BigEndian::ReadUint16(ptr); ++ uint16_t bufferLen = BigEndian::ReadUint16(ptr); + ptr += 2; + bytesRead -= 2; + if (bytesRead < bufferLen) +diff --git a/protocol/openthread/platform-abstraction/posix/posix_vendor_spinel_interface.cpp b/protocol/openthread/platform-abstraction/posix/posix_vendor_spinel_interface.cpp +index 2c0956631..cf73bd6fd 100644 +--- a/protocol/openthread/platform-abstraction/posix/posix_vendor_spinel_interface.cpp ++++ b/protocol/openthread/platform-abstraction/posix/posix_vendor_spinel_interface.cpp +@@ -51,6 +51,8 @@ using InterfaceType = ot::Posix::VendorInterface; + #error "You must define OT_POSIX_RCP_HDLC_BUS, OT_POSIX_RCP_SPI_BUS or OT_POSIX_RCP_VENDOR_BUS!" + #endif + ++extern ot::Spinel::RadioSpinel &GetRadioSpinel(void); ++ + namespace VendorCmd = ot::Vendor; + namespace AntennaCmd = VendorCmd::Antenna; + namespace CoexCmd = VendorCmd::Coex; +@@ -61,11 +63,11 @@ namespace ot { + namespace Spinel { + namespace Vendor { + +-Spinel::RadioSpinel &GetRadioSpinel() ++/*Spinel::RadioSpinel &GetRadioSpinel() + { + return ot::Posix::sRadio.GetRadioSpinel(); + } +- ++*/ + static void LogIfFail(const char *aText, otError aError) + { + if (aError != OT_ERROR_NONE && aError != OT_ERROR_NO_ACK) diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/otbr-agent.path b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/otbr-agent.path new file mode 100644 index 00000000..df282e2f --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/otbr-agent.path @@ -0,0 +1,9 @@ +[Unit] +Description=Triggers otbr-agent.service when cpcd is started successfully. +Documentation= man:systemd.path + +[Path] +DirectoryNotEmpty=/dev/shm/cpcd/cpcd_0/ + +[Install] +WantedBy=multi-user.target diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/otbr-agent.service b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/otbr-agent.service new file mode 100644 index 00000000..fbc2cfbb --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/files/otbr-agent.service @@ -0,0 +1,16 @@ +[Unit] +Description=OpenThread Border Router service +#ConditionPathExists=/dev/shm/cpcd/cpcd_0/ctrl.cpcd.sock +BindsTo=cpcd.service +Requires=cpcd.service +After=cpcd.service network.target +StartLimitIntervalSec=0 + +[Service] +Type=simple +ExecStart=otbr-agent -v -d5 -I wpan0 -B brlan0 'spinel+cpc://cpcd_0?iid=2&iid-list=0' trel://brlan0 +Restart=always +RestartSec=2 + +[Install] +WantedBy=multi-user.target diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/otbr-agent_4.4.4.0.bb b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/otbr-agent_4.4.4.0.bb new file mode 100644 index 00000000..c2191cc1 --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/otbr-agent_4.4.4.0.bb @@ -0,0 +1,128 @@ +DESCRIPTION = "OpenThread Border Router Agent" +HOMEPAGE = "https://github.com/openthread/ot-br-posix" + + +LICENSE = "Proprietary & BSD-3" +LIC_FILES_CHKSUM = "file://LICENSE;md5=87109e44b2fda96a8991f27684a7349c \ + file://third_party/openthread/repo/LICENSE;md5=543b6fe90ec5901a683320a36390c65f \ +" + +# OTBR and openthread dir paths inside the gecko sdk +GSDK_DIR="${WORKDIR}/git/gsdk" +GSDK_OTBR_DIR="${GSDK_DIR}/util/third_party/ot-br-posix" +GSDK_OT_DIR="${GSDK_DIR}/util/third_party/openthread" + +# Openthread repo path inside the OTBR repo +OTBR_DIR="${WORKDIR}/git/otbr" +OTBR_OT_DIR="${OTBR_DIR}/third_party/openthread/repo" + +SRC_URI = "git://github.com/SiliconLabs/gecko_sdk.git;protocol=https;branch=gsdk_4.4;destsuffix=git/gsdk;name=gsdk" +SRCREV_gsdk= "9ad9e19638a2d0ce01ce21d32f5049c5f1b21d70" + +SRC_URI += "gitsm://github.com/openthread/ot-br-posix.git;protocol=https;branch=main;destsuffix=git/otbr;name=otbr" +SRCREV_otbr = "dc6b912aa94320f2b2839260b2f18ee98379c5be" + +SRCREV_FORMAT = "gsdk_otbr" + +SRC_URI += "file://openthread-fix-build-errors.patch;patchdir=${GSDK_DIR} \ + file://adjust-otbr-configuration.patch;patchdir=${GSDK_DIR} \ + file://otbr-agent.service \ + file://otbr-agent.path \ +" + +S = "${GSDK_OTBR_DIR}" + +DEPENDS += "mdns boost iproute2 jsoncpp ncurses readline cpcd pkgconfig protobuf protobuf-c-native dbus libnetfilter-queue libnetfilter-conntrack" +RDEPENDS_${PN} = "cpcd (= 4.4.1.0-r0)" + +inherit cmake systemd pkgconfig + +# Adding otbr version on to version.txt file +inherit add-version + +# Manadatory thread certification flags +THREAD_CERT_FLAGS = " -DOTBR_DUA_ROUTING=ON \ + -DOTBR_DNSSD_DISCOVERY_PROXY=ON \ + -DOTBR_SRP_ADVERTISING_PROXY=ON \ + -DOTBR_BORDER_ROUTING=ON \ + -DOTBR_TREL=ON \ + -DOTBR_NAT64=ON \ + -DOT_TREL=ON \ + -DOT_DNS_CLIENT=ON \ + -DOT_DNSSD_SERVER=ON \ + -DOT_SRP_CLIENT=ON \ + -DOT_SRP_SERVER=ON \ + " + +# some of the options come from protocol/openthread/platform-abstraction/posix/openthread-core-silabs-posix-config.h +EXTRA_OECMAKE += " \ + -GNinja \ + -DOT_THREAD_VERSION=1.4 \ + -DCMAKE_BUILD_TYPE=Release \ + ${THREAD_CERT_FLAGS} \ + -DOT_DHCP6_CLIENT=ON \ + -DOT_DHCP6_SERVER=ON \ + -DOTBR_DHCP6_PD=OFF \ + -DOTBR_DNS_UPSTREAM_QUERY=ON \ + -DBUILD_TESTING=OFF \ + -DOTBR_COVERAGE=OFF \ + -DOTBR_MDNS=mDNSResponder \ + -DOT_MLR=ON \ + -DOTBR_DBUS=ON \ + -DOT_PLATFORM=posix \ + -DOT_ECDSA=ON \ + -DOT_FIREWALL=OFF \ + -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=${GSDK_DIR}/protocol/openthread/platform-abstraction/posix/posix_vendor_rcp.cmake \ + -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=${GSDK_DIR}/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp \ + -DOT_CLI_VENDOR_EXTENSION=${GSDK_DIR}/protocol/openthread/platform-abstraction/posix/posix_vendor_cli.cmake \ + -DOT_MULTIPAN_RCP=ON \ + -DOT_POSIX_RCP_VENDOR_BUS=ON \ + -DOT_PLATFORM_CONFIG=${GSDK_DIR}/protocol/openthread/platform-abstraction/posix/openthread-core-silabs-posix-config.h \ + -DOT_POSIX_SETTINGS_PATH=\"/etc/thread\" \ + -DOT_CHANNEL_MANAGER=OFF \ + -DOT_CHANNEL_MONITOR=OFF \ + -DOTBR_BACKBONE_ROUTER=ON \ + -DOT_BACKBONE_ROUTER_DUA_NDPROXYING=ON \ + -DOT_BACKBONE_ROUTER_MULTICAST_ROUTING=ON \ +" + +CXXFLAGS += "-Wno-error=unused-but-set-variable" + +# Update the source code of openthread and otbr within GSDK before executing do_populate_lic +# to verify the correct licenses +do_unpack[postfuncs] += "update_otbr" + +update_otbr() { + rm -rf ${GSDK_OTBR_DIR} + rm -rf ${GSDK_OT_DIR} + + ln -sf ${OTBR_DIR} ${GSDK_OTBR_DIR} + ln -sf ${OTBR_OT_DIR} ${GSDK_OT_DIR} +} + +do_install_append() { + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/otbr-agent.service ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/otbr-agent.path ${D}${systemd_system_unitdir} + + install -d ${D}${libdir} + install -m 0644 ${WORKDIR}/build/src/dbus/common/*.a ${D}${libdir} + install -m 0644 ${WORKDIR}/build/src/dbus/client/*.a ${D}${libdir} + + install -d ${D}${includedir} + install -d ${D}${includedir}/otbr/common + install -d ${D}${includedir}/otbr/openthread-br + install -d ${D}${includedir}/otbr/dbus/common + install -d ${D}${includedir}/otbr/dbus/client + install -m 0644 ${S}/src/common/*.hpp ${D}${includedir}/otbr/common + install -m 0644 ${S}/include/openthread-br/*.h ${D}${includedir}/otbr/openthread-br + install -m 0644 ${S}/src/dbus/common/*.hpp ${D}${includedir}/otbr/dbus/common + install -m 0644 ${S}/src/dbus/client/*.hpp ${D}${includedir}/otbr/dbus/client + cp -R --no-dereference --preserve=mode,links ${OTBR_OT_DIR}/include/openthread ${D}${includedir}/otbr/ +} + +FILES_${PN} += "${systemd_system_unitdir}/" + +# IMPORTANT! Do not add otbr-agent.service to the SYSTEMD_SERVICE define below. We don't want it automatically +# started. It will be started by otbr-agent.path +SYSTEMD_SERVICE_${PN} = "otbr-agent.path" diff --git a/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/otbr-agent_4.4.4.0.bbappend b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/otbr-agent_4.4.4.0.bbappend new file mode 100644 index 00000000..a9e9c4fd --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-connectivity/openthread/otbr-agent_4.4.4.0.bbappend @@ -0,0 +1,25 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" + + +CXXFLAGS += "-fPIC" +CFLAGS += "-fPIC" +# Add BartonCore's patch to extend the OTBR D-Bus API +SRC_URI += "file://0003-Extend-d-bus-properties-and-signals.patch;patchdir=${GSDK_OTBR_DIR}" + +# Make sure the patched files are installed too +do_install:append() { + # Make sure the D-Bus API files are properly installed + install -d ${D}${includedir}/otbr/dbus/client + install -d ${D}${includedir}/otbr/dbus/common + install -d ${D}${includedir}/otbr/dbus/server + + # Install the extended client API headers + install -m 0644 ${S}/src/dbus/client/thread_api_dbus.hpp ${D}${includedir}/otbr/dbus/client/ + install -m 0644 ${S}/src/dbus/client/thread_api_dbus.cpp ${D}${includedir}/otbr/dbus/client/ + + # Install the constants header with the new constants + install -m 0644 ${S}/src/dbus/common/constants.hpp ${D}${includedir}/otbr/dbus/common/ + + # Install the server headers + install -m 0644 ${S}/src/dbus/server/dbus_thread_object_rcp.hpp ${D}${includedir}/otbr/dbus/server/ +} diff --git a/meta-rdk-mtk-bpir4/recipes-core/barton-core/barton_%.bbappend b/meta-rdk-mtk-bpir4/recipes-core/barton-core/barton_%.bbappend new file mode 100644 index 00000000..dd845782 --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-core/barton-core/barton_%.bbappend @@ -0,0 +1,40 @@ +# Enable matter support +BARTON_BUILD_REFERENCE = "ON" +BARTON_BUILD_MATTER = "ON" +BARTON_BUILD_THREAD = "ON" + +# This allows us to use the local files/ directory +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" + +# Add custom application matter code to BartonCore source. Note this is separate from +# matter SDK configuration or custom code. While code here is still intended +# to extend matter SDK interfaces, it is not the same as ZAP configuration that +# would generate cluster code behavior. For that sort of configuration, see +# the recipes-matter/barton-matter-example recipe. +SRC_URI += "file://matter/" + +# Define the paths to matter custom plugin code, particularly providers. +# In this case, we want to show off how you would register your own custom +# provider. However, in doing so you must also specify any Barton supplied providers that would +# otherwise have been selected by default. +# +# You can also specify Delegate sources, and both delegate/provider header search paths. +# @see Barton options.cmake for: +# BCORE_MATTER_PROVIDER_IMPLEMENTATIONS +# BCORE_MATTER_DELEGATE_IMPLEMENTATIONS +# BCORE_MATTER_PROVIDER_HEADER_PATHS +# BCORE_MATTER_DELEGATE_HEADER_PATHS +# BCORE_LINK_LIBRARIES (for when your custom matter code depends on additional libraries. In yocto, you should also add to bitbake DEPENDS variable) +MATTER_PROVIDERS="${WORKDIR}/matter/ExampleTestDACProvider.cpp;${S}/core/src/subsystems/matter/providers/BartonCommissionableDataProvider.cpp;${S}/core/src/subsystems/matter/providers/default/DefaultCommissionableDataProvider.cpp" + +# Choose self-signed operational certificate delegate for usability. Actual products need their own +# delegate that wires up to a valid CA. They may also use the default CertifierOperationalCredentialsIssuer +# delegate which uses xpki as its CA. +MATTER_DELEGATES="${S}/core/src/subsystems/matter/delegates/dev/SelfSignedCertifierOperationalCredentialsIssuer.cpp" + +# It is recommended to use the bitbake variable interfaces (e.g. BARTON_BUILD_MATTER) where applicable, but you can always set whatever cmake variables you +# want as well. +EXTRA_OECMAKE += " \ + -DBCORE_MATTER_PROVIDER_IMPLEMENTATIONS='${MATTER_PROVIDERS}' \ + -DBCORE_MATTER_DELEGATE_IMPLEMENTATIONS='${MATTER_DELEGATES}' \ +" diff --git a/meta-rdk-mtk-bpir4/recipes-core/barton-core/files/matter/ExampleTestDACProvider.cpp b/meta-rdk-mtk-bpir4/recipes-core/barton-core/files/matter/ExampleTestDACProvider.cpp new file mode 100644 index 00000000..b263e146 --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-core/barton-core/files/matter/ExampleTestDACProvider.cpp @@ -0,0 +1,22 @@ +// This is a copy of Barton's BartonTestDacProvider for development. This file is intended to showcase how you might +// create and register your own matter plugin code. Since this file simply registers the matter SDK DAC provider, it +// defines no routines. However, if you were to create your own DAC provider (or matter plugin code) you would do so +// here and register your custom matter code with the Registry in a similar manner. +// +// See the barton_%.bbappend to see how to register this file with barton at build-time. + +#include "credentials/examples/DeviceAttestationCredsExample.h" +#include "BartonMatterProviderRegistry.hpp" +#include + +using namespace chip::Credentials; +using namespace barton; + +namespace { + // Just register the example test dac provider. Use a custom do-nothing deleter since the example DAC provider is + // static duration memory. + std::shared_ptr + dacProvider(chip::Credentials::Examples::GetExampleDACProvider(), + [](DeviceAttestationCredentialsProvider *p) {}); + auto providerRegistered = BartonMatterProviderRegistry::Instance().RegisterBartonDACProvider(dacProvider); +} diff --git a/meta-rdk-mtk-bpir4/recipes-core/images/rdk-generic-broadband-image.bbappend b/meta-rdk-mtk-bpir4/recipes-core/images/rdk-generic-broadband-image.bbappend index 4a98ceb2..37e7e19c 100644 --- a/meta-rdk-mtk-bpir4/recipes-core/images/rdk-generic-broadband-image.bbappend +++ b/meta-rdk-mtk-bpir4/recipes-core/images/rdk-generic-broadband-image.bbappend @@ -1,5 +1,5 @@ #WebPA Feature -IMAGE_INSTALL_append = " parodus parodus2ccsp rdktelcovoicemanager asterisk hal-voice-asterisk" +IMAGE_INSTALL_append = " parodus parodus2ccsp rdktelcovoicemanager asterisk hal-voice-asterisk cpcd otbr-agent bluez5-bluetoothd bt-host-cpc-hci-bridge barton" #TR069 Feature IMAGE_INSTALL_append = " ccsp-tr069-pa" diff --git a/meta-rdk-mtk-bpir4/recipes-core/packagegroups/packagegroup-rdk-ccsp-broadband.bbappend b/meta-rdk-mtk-bpir4/recipes-core/packagegroups/packagegroup-rdk-ccsp-broadband.bbappend index 5f424e1e..68951ed1 100644 --- a/meta-rdk-mtk-bpir4/recipes-core/packagegroups/packagegroup-rdk-ccsp-broadband.bbappend +++ b/meta-rdk-mtk-bpir4/recipes-core/packagegroups/packagegroup-rdk-ccsp-broadband.bbappend @@ -5,11 +5,14 @@ RDEPENDS_packagegroup-rdk-ccsp-broadband_append = " iperf3" RDEPENDS_packagegroup-rdk-ccsp-broadband_append = " parodus2ccsp" RDEPENDS_packagegroup-rdk-ccsp-broadband_append = " \ - ${@bb.utils.contains('DISTRO_FEATURES', 'OneWifi', 'rdk-wifi-hal', '' ,d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'CPUPROCANALYZER_BROADBAND', 'cpuprocanalyzer', ' ', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'OneWifi', 'rdk-wifi-hal', '' ,d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'CPUPROCANALYZER_BROADBAND', 'cpuprocanalyzer', ' ', d)} \ + linux-firmware-bcm-bt \ + linux-firmware-rtl-bt \ + linux-firmware-brcm \ " GWPROVAPP = "${@bb.utils.contains('DISTRO_FEATURES','rdkb_wan_manager','ccsp-gwprovapp', '' ,d)}" RDEPENDS_packagegroup-rdk-ccsp-broadband_append = "${@bb.utils.contains('DISTRO_FEATURES', 'rdkb_cellular_manager_mm', ' rdk-cellularmanager-mm', ' ', d)}" RDEPENDS_packagegroup-rdk-ccsp-broadband_append = " rdktelcovoicemanager" -RDEPENDS_packagegroup-rdk-ccsp-broadband_append = " gw-lan-refresh" \ No newline at end of file +RDEPENDS_packagegroup-rdk-ccsp-broadband_append = " gw-lan-refresh" diff --git a/meta-rdk-mtk-bpir4/recipes-kernel/linux-firmware/linux-firmware_%.bbappend b/meta-rdk-mtk-bpir4/recipes-kernel/linux-firmware/linux-firmware_%.bbappend new file mode 100644 index 00000000..f5fa0d82 --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-kernel/linux-firmware/linux-firmware_%.bbappend @@ -0,0 +1,56 @@ +# Only install specific firmware packages +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" + + + +# Define only the packages we need + +PACKAGES =+ " \ + ${PN}-bcm-bt \ + ${PN}-brcm \ + ${PN}-rtl-bt \ +" + + + +# Specify files for each package + +FILES:${PN}-bcm-bt = " \ + ${nonarch_base_libdir}/firmware/brcm/BCM* \ +" + + + +FILES:${PN}-brcm = " \ + ${nonarch_base_libdir}/firmware/brcm/* \ +" + + + +FILES:${PN}-rtl-bt = " \ + ${nonarch_base_libdir}/firmware/rtl_bt/* \ +" + + + +# Dependencies +RDEPENDS:${PN}-bcm-bt += "${PN}-brcm" + + + +# Remove all other firmware packages + +do_install:append() { + # Remove everything except brcm and rtl_bt directories + find ${D}${nonarch_base_libdir}/firmware -mindepth 1 -maxdepth 1 \ + ! -name 'brcm' ! -name 'rtl_bt' -exec rm -rf {} + +} + + + +# Update RRECOMMENDS to include only what we need +RRECOMMENDS:${PN}-nonfreefirmware = "\ + ${PN}-bcm-bt \ + ${PN}-brcm \ + ${PN}-rtl-bt \ +" diff --git a/meta-rdk-mtk-bpir4/recipes-kernel/linux/files/rdkb_cfg/iptables_nf.cfg b/meta-rdk-mtk-bpir4/recipes-kernel/linux/files/rdkb_cfg/iptables_nf.cfg index 023f7003..ba1dcd01 100644 --- a/meta-rdk-mtk-bpir4/recipes-kernel/linux/files/rdkb_cfg/iptables_nf.cfg +++ b/meta-rdk-mtk-bpir4/recipes-kernel/linux/files/rdkb_cfg/iptables_nf.cfg @@ -1,3 +1,10 @@ CONFIG_NF_CONNTRACK_TFTP=y CONFIG_NETFILTER_XT_TARGET_CT=y CONFIG_USB_NET_QMI_WWAN=y +CONFIG_BT_HCIBTUSB=y +CONFIG_BT_HCIBTUSB_RTL=y +CONFIG_BT_INTEL=y +CONFIG_USB_ACM=y +CONFIG_TUN=y +CONFIG_IEEE802154=y +CONFIG_MAC802154=y diff --git a/meta-rdk-mtk-bpir4/recipes-matter/barton-matter/barton-matter_1.4.0.bbappend b/meta-rdk-mtk-bpir4/recipes-matter/barton-matter/barton-matter_1.4.0.bbappend new file mode 100644 index 00000000..0df4059a --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-matter/barton-matter/barton-matter_1.4.0.bbappend @@ -0,0 +1,16 @@ +# Example customization for barton-matter +# This shows how to customize the Matter configuration for your specific product + +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" + +SRC_URI += " \ + file://barton.zap \ + file://zzz_generated.tar.gz \ +" + +MATTER_ZAP_FILE = "${WORKDIR}/barton.zap" +# Adding the zzz_generated tarball to the SRC_URI will unpack it into WORKDIR +MATTER_ZZZ_GENERATED = "${WORKDIR}/zzz_generated" + +# Set persistent storage location for production use +MATTER_CONF_DIR = "/nvram/icontrol" diff --git a/meta-rdk-mtk-bpir4/recipes-matter/barton-matter/files/barton.zap b/meta-rdk-mtk-bpir4/recipes-matter/barton-matter/files/barton.zap new file mode 100644 index 00000000..fdae8c18 --- /dev/null +++ b/meta-rdk-mtk-bpir4/recipes-matter/barton-matter/files/barton.zap @@ -0,0 +1,3806 @@ +{ + "fileFormat": 2, + "featureLevel": 103, + "creator": "zap", + "keyValuePairs": [ + { + "key": "commandDiscovery", + "value": "1" + }, + { + "key": "defaultResponsePolicy", + "value": "always" + }, + { + "key": "manufacturerCodes", + "value": "0x111D" + } + ], + "package": [ + { + "pathRelativity": "relativeToZap", + "path": "zcl.json", + "type": "zcl-properties", + "category": "matter", + "version": 1, + "description": "Matter SDK ZCL data" + } + ], + "endpointTypes": [ + { + "id": 1, + "name": "Anonymous Endpoint Type", + "deviceTypeRef": { + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice", + "deviceTypeOrder": 0 + }, + "deviceTypes": [ + { + "code": 22, + "profileId": 259, + "label": "MA-rootdevice", + "name": "MA-rootdevice", + "deviceTypeOrder": 0 + } + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 22 + ], + "deviceTypeName": "MA-rootdevice", + "deviceTypeCode": 22, + "deviceTypeProfileId": 259, + "clusters": [ + { + "name": "Descriptor", + "code": 29, + "mfgCode": null, + "define": "DESCRIPTOR_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "DeviceTypeList", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ServerList", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClientList", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PartsList", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Binding", + "code": 30, + "mfgCode": null, + "define": "BINDING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Binding", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Access Control", + "code": 31, + "mfgCode": null, + "define": "ACCESS_CONTROL_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "ACL", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Extension", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SubjectsPerAccessControlEntry", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "TargetsPerAccessControlEntry", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AccessControlEntriesPerFabric", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Basic Information", + "code": 40, + "mfgCode": null, + "define": "BASIC_INFORMATION_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "DataModelRevision", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "VendorName", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "VendorID", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "vendor_id", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ProductName", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ProductID", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "NodeLabel", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Location", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "HardwareVersion", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "HardwareVersionString", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SoftwareVersion", + "code": 9, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SoftwareVersionString", + "code": 10, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "UniqueID", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CapabilityMinima", + "code": 19, + "mfgCode": null, + "side": "server", + "type": "CapabilityMinimaStruct", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SpecificationVersion", + "code": 21, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxPathsPerInvoke", + "code": 22, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 1, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "General Commissioning", + "code": 48, + "mfgCode": null, + "define": "GENERAL_COMMISSIONING_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "ArmFailSafe", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "ArmFailSafeResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "SetRegulatoryConfig", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "SetRegulatoryConfigResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "CommissioningComplete", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "CommissioningCompleteResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "Breadcrumb", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0x0000000000000000", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BasicCommissioningInfo", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "BasicCommissioningInfo", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RegulatoryConfig", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "RegulatoryLocationTypeEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LocationCapability", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "RegulatoryLocationTypeEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportsConcurrentConnection", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "2", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Network Commissioning", + "code": 49, + "mfgCode": null, + "define": "NETWORK_COMMISSIONING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "MaxNetworks", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Networks", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InterfaceEnabled", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LastNetworkingStatus", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "NetworkCommissioningStatusEnum", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LastNetworkID", + "code": 6, + "mfgCode": null, + "side": "server", + "type": "octet_string", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LastConnectErrorValue", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "int32s", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "4", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "2", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "General Diagnostics", + "code": 51, + "mfgCode": null, + "define": "GENERAL_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "TestEventTrigger", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "TimeSnapshot", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "TimeSnapshotResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "NetworkInterfaces", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RebootCount", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "UpTime", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "TestEventTriggersEnabled", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Thread Network Diagnostics", + "code": 53, + "mfgCode": null, + "define": "THREAD_NETWORK_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Channel", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RoutingRole", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "RoutingRoleEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "NetworkName", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PanId", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ExtendedPanId", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MeshLocalPrefix", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "octet_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "NeighborTable", + "code": 7, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RouteTable", + "code": 8, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PartitionId", + "code": 9, + "mfgCode": null, + "side": "server", + "type": "int32u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Weighting", + "code": 10, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "DataVersion", + "code": 11, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "StableDataVersion", + "code": 12, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "LeaderRouterId", + "code": 13, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SecurityPolicy", + "code": 59, + "mfgCode": null, + "side": "server", + "type": "SecurityPolicy", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ChannelPage0Mask", + "code": 60, + "mfgCode": null, + "side": "server", + "type": "octet_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OperationalDatasetComponents", + "code": 61, + "mfgCode": null, + "side": "server", + "type": "OperationalDatasetComponents", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveNetworkFaultsList", + "code": 62, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "3", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Wi-Fi Network Diagnostics", + "code": 54, + "mfgCode": null, + "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "BSSID", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "octet_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SecurityType", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "SecurityTypeEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "WiFiVersion", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "WiFiVersionEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ChannelNumber", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "RSSI", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int8s", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Ethernet Network Diagnostics", + "code": 55, + "mfgCode": null, + "define": "ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Administrator Commissioning", + "code": 60, + "mfgCode": null, + "define": "ADMINISTRATOR_COMMISSIONING_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "OpenCommissioningWindow", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RevokeCommissioning", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "WindowStatus", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "CommissioningWindowStatusEnum", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AdminFabricIndex", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "fabric_idx", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AdminVendorId", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "vendor_id", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Operational Credentials", + "code": 62, + "mfgCode": null, + "define": "OPERATIONAL_CREDENTIALS_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "AttestationRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AttestationResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "CertificateChainRequest", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "CertificateChainResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "CSRRequest", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "CSRResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "AddNOC", + "code": 6, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "UpdateNOC", + "code": 7, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "NOCResponse", + "code": 8, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "UpdateFabricLabel", + "code": 9, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveFabric", + "code": 10, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "AddTrustedRootCertificate", + "code": 11, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "NOCs", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "Fabrics", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "SupportedFabrics", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CommissionedFabrics", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "TrustedRootCertificates", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "CurrentFabricIndex", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Group Key Management", + "code": 63, + "mfgCode": null, + "define": "GROUP_KEY_MANAGEMENT_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "KeySetWrite", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "KeySetRead", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "KeySetReadResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "KeySetRemove", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "KeySetReadAllIndices", + "code": 4, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "KeySetReadAllIndicesResponse", + "code": 5, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "GroupKeyMap", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GroupTable", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxGroupsPerFabric", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "MaxGroupKeysPerFabric", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + } + ] + }, + { + "id": 2, + "name": "Anonymous Endpoint Type", + "deviceTypeRef": { + "code": 144, + "profileId": 259, + "label": "MA-network-infrastructure-manager", + "name": "MA-network-infrastructure-manager", + "deviceTypeOrder": 0 + }, + "deviceTypes": [ + { + "code": 144, + "profileId": 259, + "label": "MA-network-infrastructure-manager", + "name": "MA-network-infrastructure-manager", + "deviceTypeOrder": 0 + } + ], + "deviceVersions": [ + 1 + ], + "deviceIdentifiers": [ + 144 + ], + "deviceTypeName": "MA-network-infrastructure-manager", + "deviceTypeCode": 144, + "deviceTypeProfileId": 259, + "clusters": [ + { + "name": "Descriptor", + "code": 29, + "mfgCode": null, + "define": "DESCRIPTOR_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "DeviceTypeList", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ServerList", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClientList", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PartsList", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Binding", + "code": 30, + "mfgCode": null, + "define": "BINDING_CLUSTER", + "side": "server", + "enabled": 1, + "attributes": [ + { + "name": "Binding", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Wi-Fi Network Management", + "code": 1105, + "mfgCode": null, + "define": "WIFI_NETWORK_MANAGEMENT_CLUSTER", + "side": "server", + "enabled": 1, + "apiMaturity": "provisional", + "commands": [ + { + "name": "NetworkPassphraseRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "NetworkPassphraseResponse", + "code": 1, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "SSID", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "octet_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PassphraseSurrogate", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Thread Border Router Management", + "code": 1106, + "mfgCode": null, + "define": "THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER", + "side": "server", + "enabled": 1, + "apiMaturity": "provisional", + "commands": [ + { + "name": "GetActiveDatasetRequest", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "GetPendingDatasetRequest", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "DatasetResponse", + "code": 2, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "SetActiveDatasetRequest", + "code": 3, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "BorderRouterName", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "BorderAgentID", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "octet_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ThreadVersion", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "InterfaceEnabled", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "boolean", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ActiveDatasetTimestamp", + "code": 4, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "PendingDatasetTimestamp", + "code": 5, + "mfgCode": null, + "side": "server", + "type": "int64u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, + { + "name": "Thread Network Directory", + "code": 1107, + "mfgCode": null, + "define": "THREAD_NETWORK_DIRECTORY_CLUSTER", + "side": "server", + "enabled": 1, + "apiMaturity": "provisional", + "commands": [ + { + "name": "AddNetwork", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveNetwork", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "GetOperationalDataset", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OperationalDatasetResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "PreferredExtendedPanID", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "octet_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ThreadNetworks", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ThreadNetworkTableSize", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + } + ] + } + ], + "endpoints": [ + { + "endpointTypeName": "Anonymous Endpoint Type", + "endpointTypeIndex": 0, + "profileId": 259, + "endpointId": 0, + "networkId": 0, + "parentEndpointIdentifier": null + }, + { + "endpointTypeName": "Anonymous Endpoint Type", + "endpointTypeIndex": 1, + "profileId": 259, + "endpointId": 1, + "networkId": 0, + "parentEndpointIdentifier": null + } + ] +} diff --git a/meta-rdk-mtk-bpir4/recipes-matter/barton-matter/files/zzz_generated.tar.gz b/meta-rdk-mtk-bpir4/recipes-matter/barton-matter/files/zzz_generated.tar.gz new file mode 100644 index 00000000..c6c5f78b Binary files /dev/null and b/meta-rdk-mtk-bpir4/recipes-matter/barton-matter/files/zzz_generated.tar.gz differ