From 8a2fd0dfd65eaf8403811ed821a5617adf957557 Mon Sep 17 00:00:00 2001 From: rgoliver Date: Fri, 26 Nov 2021 14:56:34 -0500 Subject: [PATCH 1/5] RPC: Refactor RPC examples for better code reuse, and add RPCs to EFR lock app (#11633) * RPC: Move Rpc.cpp to platform Reduce code duplication by moving the Rpc.cpp file to the platform. This greatly reduces code required to add rpcs to examples. * RPC: Add RPCs to EFR lock app --- .../esp32/main/CMakeLists.txt | 7 + examples/all-clusters-app/esp32/main/Rpc.cpp | 352 ------------------ .../pigweed/protos/device_service.proto | 2 +- examples/lighting-app/efr32/BUILD.gn | 21 +- examples/lighting-app/efr32/src/Rpc.cpp | 92 ----- .../lighting-app/nrfconnect/CMakeLists.txt | 9 +- examples/lighting-app/nrfconnect/main/Rpc.cpp | 102 ----- .../nrfconnect/main/include/AppTask.h | 9 +- .../lighting-app/nrfconnect/main/main.cpp | 5 +- examples/lock-app/efr32/BUILD.gn | 45 +++ examples/lock-app/efr32/src/main.cpp | 8 + examples/lock-app/efr32/with_pw_rpc.gni | 5 +- examples/lock-app/esp32/main/CMakeLists.txt | 7 + examples/lock-app/esp32/main/Rpc.cpp | 99 ----- examples/platform/efr32/Rpc.cpp | 149 ++++++++ .../efr32/include => platform/efr32}/Rpc.h | 0 examples/platform/esp32/Rpc.cpp | 167 +++++++++ .../main/include => platform/esp32}/Rpc.h | 0 examples/platform/nrfconnect/Rpc.cpp | 152 ++++++++ .../include => platform/nrfconnect}/Rpc.h | 0 scripts/build/build/targets.py | 2 +- .../testdata/all_targets_except_host.txt | 1 + .../build/testdata/build_all_except_host.txt | 6 + .../glob_star_targets_except_host.txt | 1 + 24 files changed, 578 insertions(+), 663 deletions(-) delete mode 100644 examples/all-clusters-app/esp32/main/Rpc.cpp delete mode 100644 examples/lighting-app/efr32/src/Rpc.cpp delete mode 100644 examples/lighting-app/nrfconnect/main/Rpc.cpp delete mode 100644 examples/lock-app/esp32/main/Rpc.cpp create mode 100644 examples/platform/efr32/Rpc.cpp rename examples/{lighting-app/efr32/include => platform/efr32}/Rpc.h (100%) create mode 100644 examples/platform/esp32/Rpc.cpp rename examples/{all-clusters-app/esp32/main/include => platform/esp32}/Rpc.h (100%) create mode 100644 examples/platform/nrfconnect/Rpc.cpp rename examples/{lighting-app/nrfconnect/main/include => platform/nrfconnect}/Rpc.h (100%) diff --git a/examples/all-clusters-app/esp32/main/CMakeLists.txt b/examples/all-clusters-app/esp32/main/CMakeLists.txt index 0b4520dca3d90d..29430a67c079a6 100644 --- a/examples/all-clusters-app/esp32/main/CMakeLists.txt +++ b/examples/all-clusters-app/esp32/main/CMakeLists.txt @@ -220,4 +220,11 @@ target_link_options(${COMPONENT_LIB} "-T${PIGWEED_ROOT}/pw_tokenizer/pw_tokenizer_linker_sections.ld" ) +target_compile_options(${COMPONENT_LIB} PRIVATE + "-DPW_RPC_ATTRIBUTE_SERVICE=1" + "-DPW_RPC_BUTTON_SERVICE=1" + "-DPW_RPC_DEVICE_SERVICE=1" + "-DPW_RPC_LIGHTING_SERVICE=1" + "-DPW_RPC_LOCKING_SERVICE=1") + endif (CONFIG_ENABLE_PW_RPC) diff --git a/examples/all-clusters-app/esp32/main/Rpc.cpp b/examples/all-clusters-app/esp32/main/Rpc.cpp deleted file mode 100644 index 0de247455fcd61..00000000000000 --- a/examples/all-clusters-app/esp32/main/Rpc.cpp +++ /dev/null @@ -1,352 +0,0 @@ -/* - * - * Copyright (c) 2021 Project CHIP Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "sdkconfig.h" -#if CONFIG_ENABLE_PW_RPC -#include "PigweedLoggerMutex.h" -#include "RpcService.h" -#include "esp_log.h" -#include "freertos/FreeRTOS.h" -#include "freertos/event_groups.h" -#include "freertos/semphr.h" -#include "freertos/task.h" -#include "pw_log/log.h" -#include "pw_rpc/server.h" -#include "pw_sys_io/sys_io.h" -#include "rpc_services/Attributes.h" -#include "rpc_services/Button.h" -#include "rpc_services/Device.h" -#include "rpc_services/Lighting.h" -#include "rpc_services/Locking.h" - -#include - -#include "ScreenManager.h" -#include "esp_event.h" -#include "esp_log.h" -#include "esp_netif.h" -#include "esp_system.h" -#include "esp_wifi.h" -#include "freertos/FreeRTOS.h" -#include "freertos/semphr.h" -#include "freertos/timers.h" -#include "pw_containers/flat_map.h" -#include "pw_status/status.h" -#include "pw_status/try.h" -#include "pw_trace_tokenized/trace_rpc_service_nanopb.h" -#include "wifi_service/wifi_service.rpc.pb.h" -#include - -#include "WiFiProvisioning.h" - -#include "ESP32Utils.h" - -static const char * TAG = "RPC"; - -// Define trace time for pw_trace -PW_TRACE_TIME_TYPE pw_trace_GetTraceTime() -{ - return (PW_TRACE_TIME_TYPE) chip::System::SystemClock().GetMonotonicMicroseconds64().count(); -} -// Microsecond time source -size_t pw_trace_GetTraceTimeTicksPerSecond() -{ - return 1000000; -} - -namespace chip { -namespace rpc { -namespace { - -constexpr pw::containers::FlatMap kChannelToFreqMap({ { - { 1, 2412 }, { 2, 2417 }, { 3, 2422 }, { 4, 2427 }, { 5, 2432 }, { 6, 2437 }, { 7, 2442 }, { 8, 2447 }, - { 9, 2452 }, { 10, 2457 }, { 11, 2462 }, { 12, 2467 }, { 13, 2472 }, { 14, 2484 }, { 32, 5160 }, { 34, 5170 }, - { 36, 5180 }, { 38, 5190 }, { 40, 5200 }, { 42, 5210 }, { 44, 5220 }, { 46, 5230 }, { 48, 5240 }, { 50, 5250 }, - { 52, 5260 }, { 54, 5270 }, { 56, 5280 }, { 58, 5290 }, { 60, 5300 }, { 62, 5310 }, { 64, 5320 }, { 68, 5340 }, - { 96, 5480 }, { 100, 5500 }, { 102, 5510 }, { 104, 5520 }, { 106, 5530 }, { 108, 5540 }, { 110, 5550 }, { 112, 5560 }, - { 114, 5570 }, { 116, 5580 }, { 118, 5590 }, { 120, 5600 }, { 122, 5610 }, { 124, 5620 }, { 126, 5630 }, { 128, 5640 }, - { 132, 5660 }, { 134, 5670 }, { 136, 5680 }, { 138, 5690 }, { 140, 5700 }, { 142, 5710 }, { 144, 5720 }, { 149, 5745 }, - { 151, 5755 }, { 153, 5765 }, { 155, 5775 }, { 157, 5785 }, { 159, 5795 }, { 161, 5805 }, { 165, 5825 }, { 169, 5845 }, - { 173, 5865 }, { 183, 4915 }, { 184, 4920 }, { 185, 4925 }, { 187, 4935 }, { 188, 4940 }, { 189, 4945 }, { 192, 4960 }, - { 196, 4980 }, -} }); - -// These are potentially large objects for the scan results. -constexpr size_t kScanRecordsMax = sizeof(chip_rpc_ScanResults().aps) / sizeof(chip_rpc_ScanResult); -chip_rpc_ScanResults out_scan_records; -wifi_ap_record_t scan_records[kScanRecordsMax]; - -class Esp32Button final : public Button -{ -public: - pw::Status Event(ServerContext &, const chip_rpc_ButtonEvent & request, pw_protobuf_Empty & response) override - { -#if CONFIG_DEVICE_TYPE_M5STACK - if (request.pushed) - { - ScreenManager::ButtonPressed(1 + request.idx); - } - return pw::OkStatus(); -#else // CONFIG_DEVICE_TYPE_M5STACK - return pw::Status::Unimplemented(); -#endif // CONFIG_DEVICE_TYPE_M5STACK - } -}; - -class Esp32Device final : public Device -{ -public: - pw::Status Reboot(ServerContext & ctx, const pw_protobuf_Empty & request, pw_protobuf_Empty & response) override - { - mRebootTimer = xTimerCreateStatic("Reboot", kRebootTimerPeriodTicks, false, nullptr, RebootHandler, &mRebootTimerBuffer); - xTimerStart(mRebootTimer, 0); - return pw::OkStatus(); - } - -private: - static constexpr TickType_t kRebootTimerPeriodTicks = 1000; - TimerHandle_t mRebootTimer; - StaticTimer_t mRebootTimerBuffer; - - static void RebootHandler(TimerHandle_t) { esp_restart(); } -}; - -class Wifi final : public generated::Wifi -{ -public: - pw::Status GetChannel(ServerContext &, const pw_protobuf_Empty & request, chip_rpc_Channel & response) - { - uint8_t channel = 0; - wifi_second_chan_t second; - PW_TRY(EspToPwStatus(esp_wifi_get_channel(&channel, &second))); - response.channel = channel; - return pw::OkStatus(); - } - - pw::Status GetSsid(ServerContext &, const pw_protobuf_Empty & request, chip_rpc_Ssid & response) - { - wifi_config_t config; - PW_TRY(EspToPwStatus(esp_wifi_get_config(WIFI_IF_STA, &config))); - size_t size = std::min(sizeof(response.ssid.bytes), sizeof(config.sta.ssid)); - memcpy(response.ssid.bytes, config.sta.ssid, size); - response.ssid.size = size; - return pw::OkStatus(); - } - - pw::Status GetState(ServerContext &, const pw_protobuf_Empty & request, chip_rpc_State & response) - { - wifi_ap_record_t ap_info; - esp_err_t err = esp_wifi_sta_get_ap_info(&ap_info); - PW_TRY(EspToPwStatus(err)); - response.connected = (err != ESP_ERR_WIFI_NOT_CONNECT); - return pw::OkStatus(); - } - - pw::Status GetMacAddress(ServerContext &, const pw_protobuf_Empty & request, chip_rpc_MacAddress & response) - { - uint8_t mac[6]; - PW_TRY(EspToPwStatus(esp_wifi_get_mac(WIFI_IF_STA, mac))); - snprintf(response.mac_address, sizeof(response.mac_address), "%02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], - mac[3], mac[4], mac[5]); - return pw::OkStatus(); - } - - pw::Status GetWiFiInterface(ServerContext &, const pw_protobuf_Empty & request, chip_rpc_WiFiInterface & response) - { - wifi_ap_record_t ap_info; - PW_TRY(EspToPwStatus(esp_wifi_sta_get_ap_info(&ap_info))); - snprintf(response.interface, sizeof(response.interface), "STA"); - return pw::OkStatus(); - } - - pw::Status GetIP4Address(ServerContext &, const pw_protobuf_Empty & request, chip_rpc_IP4Address & response) - { - esp_netif_ip_info_t ip_info; - PW_TRY(EspToPwStatus(esp_netif_get_ip_info(esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"), &ip_info))); - snprintf(response.address, sizeof(response.address), IPSTR, IP2STR(&ip_info.ip)); - return pw::OkStatus(); - } - - pw::Status GetIP6Address(ServerContext &, const pw_protobuf_Empty & request, chip_rpc_IP6Address & response) - { - esp_ip6_addr_t ip6; - PW_TRY(EspToPwStatus(esp_netif_get_ip6_linklocal(esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"), &ip6))); - snprintf(response.address, sizeof(response.address), IPV6STR, IPV62STR(ip6)); - return pw::OkStatus(); - } - - // NOTE: Currently this is blocking, it can be made non-blocking if needed - // but would require another worker thread to handle the scanning. - void StartScan(ServerContext &, const chip_rpc_ScanConfig & request, ServerWriter & writer) - { - wifi_scan_config_t scan_config; - if (request.ssid_count != 0) - { - scan_config.ssid = const_cast(reinterpret_cast(request.ssid[0].bytes)); - } - if (request.bssid_count != 0) - { - scan_config.bssid = const_cast(reinterpret_cast(request.bssid[0].bytes)); - } - scan_config.channel = request.channel; - scan_config.show_hidden = request.show_hidden; - scan_config.scan_type = static_cast(request.active_scan); - if (request.active_scan) - { - scan_config.scan_time.active.min = request.scan_time_min_ms; - scan_config.scan_time.active.max = request.scan_time_max_ms; - } - else - { - scan_config.scan_time.passive = request.scan_time_min_ms; - } - - auto err = esp_wifi_scan_start(&scan_config, true /* block */); - if (ESP_OK != err) - { - ESP_LOGI(TAG, "Error starting scan: %d", err); - return; - } - - // Output scan results - uint16_t num_scan_records = kScanRecordsMax; - err = esp_wifi_scan_get_ap_records(&num_scan_records, scan_records); - if (ESP_OK != err) - { - ESP_LOGI(TAG, "Error getting scanned APs: %d", err); - num_scan_records = 0; - } - ESP_LOGI(TAG, "%d", num_scan_records); - out_scan_records.aps_count = num_scan_records; - - for (size_t i = 0; i < num_scan_records; ++i) - { - out_scan_records.aps[i].ssid.size = std::min(sizeof(scan_records[i].ssid), sizeof(out_scan_records.aps[i].ssid.bytes)); - memcpy(out_scan_records.aps[i].ssid.bytes, scan_records[i].ssid, out_scan_records.aps[i].ssid.size); - out_scan_records.aps[i].bssid.size = - std::min(sizeof(scan_records[i].bssid), sizeof(out_scan_records.aps[i].bssid.bytes)); - memcpy(out_scan_records.aps[i].bssid.bytes, scan_records[i].bssid, out_scan_records.aps[i].bssid.size); - out_scan_records.aps[i].security_type = static_cast(scan_records[i].authmode); - out_scan_records.aps[i].channel = scan_records[i].primary; - auto found_channel = kChannelToFreqMap.find(scan_records[i].primary); - out_scan_records.aps[i].frequency = (found_channel ? found_channel->second : 0); - out_scan_records.aps[i].signal = scan_records[i].rssi; - } - writer.Write(out_scan_records); - writer.Finish(); - } - - pw::Status StopScan(ServerContext &, const pw_protobuf_Empty & request, pw_protobuf_Empty & response) - { - esp_wifi_scan_stop(); - return pw::OkStatus(); - } - - pw::Status Connect(ServerContext &, const chip_rpc_ConnectionData & request, chip_rpc_ConnectionResult & response) - { - char ssid[sizeof(wifi_config_t().sta.ssid)]; - char password[sizeof(wifi_config_t().sta.password)]; - size_t ssid_size = std::min(sizeof(ssid) - 1, static_cast(request.ssid.size)); - memcpy(ssid, request.ssid.bytes, ssid_size); - ssid[ssid_size] = '\0'; - size_t password_size = std::min(sizeof(password) - 1, static_cast(request.secret.size)); - memcpy(password, request.secret.bytes, password_size); - password[password_size] = '\0'; - return SetWiFiStationProvisioning(ssid, password) == CHIP_NO_ERROR ? pw::OkStatus() : pw::Status::Unknown(); - } - - pw::Status Disconnect(ServerContext &, const pw_protobuf_Empty & request, pw_protobuf_Empty & response) - { - chip::DeviceLayer::ConnectivityMgr().ClearWiFiStationProvision(); - chip::DeviceLayer::ConnectivityMgr().SetWiFiStationMode(chip::DeviceLayer::ConnectivityManager::kWiFiStationMode_Disabled); - return pw::OkStatus(); - } - -private: - static constexpr pw::Status EspToPwStatus(esp_err_t err) - { - switch (err) - { - case ESP_OK: - return pw::OkStatus(); - case ESP_ERR_WIFI_NOT_INIT: - return pw::Status::FailedPrecondition(); - case ESP_ERR_INVALID_ARG: - return pw::Status::InvalidArgument(); - case ESP_ERR_ESP_NETIF_INVALID_PARAMS: - return pw::Status::InvalidArgument(); - case ESP_ERR_WIFI_IF: - return pw::Status::NotFound(); - case ESP_ERR_WIFI_NOT_CONNECT: - return pw::Status::FailedPrecondition(); - case ESP_ERR_WIFI_NOT_STARTED: - return pw::Status::FailedPrecondition(); - case ESP_ERR_WIFI_CONN: - return pw::Status::Internal(); - case ESP_FAIL: - return pw::Status::Internal(); - default: - return pw::Status::Unknown(); - } - } -}; - -constexpr size_t kRpcStackSizeBytes = (8 * 1024); -constexpr uint8_t kRpcTaskPriority = 5; - -TaskHandle_t rpcTaskHandle; - -Attributes attributes_service; -Esp32Button button_service; -Esp32Device device_service; -Lighting lighting_service; -Locking locking_service; -Wifi wifi_service; -pw::trace::TraceService trace_service; - -void RegisterServices(pw::rpc::Server & server) -{ - server.RegisterService(attributes_service); - server.RegisterService(button_service); - server.RegisterService(device_service); - server.RegisterService(lighting_service); - server.RegisterService(locking_service); - server.RegisterService(wifi_service); - server.RegisterService(trace_service); - PW_TRACE_SET_ENABLED(true); -} - -void RunRpcService(void *) -{ - Start(RegisterServices, &logger_mutex); -} - -} // namespace - -void Init() -{ - PigweedLogger::init(); - - ESP_LOGI(TAG, "----------- esp32-rpc-service starting -----------"); - - xTaskCreate(RunRpcService, "RPC", kRpcStackSizeBytes / sizeof(StackType_t), nullptr, kRpcTaskPriority, &rpcTaskHandle); -} - -} // namespace rpc -} // namespace chip - -#endif // CONFIG_ENABLE_PW_RPC diff --git a/examples/common/pigweed/protos/device_service.proto b/examples/common/pigweed/protos/device_service.proto index fdca9667a1daf9..1e9f3281ffb99d 100644 --- a/examples/common/pigweed/protos/device_service.proto +++ b/examples/common/pigweed/protos/device_service.proto @@ -20,7 +20,7 @@ message DeviceInfo { message FabricInfo { uint32 fabric_id = 1; - uint32 node_id = 2; + uint64 node_id = 2; } message DeviceState { diff --git a/examples/lighting-app/efr32/BUILD.gn b/examples/lighting-app/efr32/BUILD.gn index dd93106fd3636b..b7d2e00c3b5ae1 100644 --- a/examples/lighting-app/efr32/BUILD.gn +++ b/examples/lighting-app/efr32/BUILD.gn @@ -22,7 +22,6 @@ import("${efr32_sdk_build_root}/efr32_executable.gni") import("${efr32_sdk_build_root}/efr32_sdk.gni") import("${chip_root}/examples/common/pigweed/pigweed_rpcs.gni") - if (chip_enable_pw_rpc) { import("//build_overrides/pigweed.gni") import("$dir_pw_build/target_types.gni") @@ -71,10 +70,7 @@ efr32_sdk("sdk") { ] if (chip_enable_pw_rpc) { - defines += [ - "HAL_VCOM_ENABLE=1", - "PW_RPC_ENABLED", - ] + defines += [ "HAL_VCOM_ENABLE=1" ] } } @@ -114,21 +110,24 @@ efr32_executable("lighting_app") { } if (chip_enable_pw_rpc) { - defines += [ "PW_RPC_ENABLED" ] + defines += [ + "PW_RPC_ENABLED", + "PW_RPC_ATTRIBUTE_SERVICE=1", + "PW_RPC_BUTTON_SERVICE=1", + "PW_RPC_DEVICE_SERVICE=1", + "PW_RPC_LIGHTING_SERVICE=1", + ] + sources += [ "${chip_root}/examples/common/pigweed/RpcService.cpp", "${chip_root}/examples/common/pigweed/efr32/PigweedLoggerMutex.cpp", "${examples_plat_dir}/PigweedLogger.cpp", - "src/Rpc.cpp", + "${examples_plat_dir}/Rpc.cpp", ] deps += [ - "$dir_pw_assert", - "$dir_pw_checksum", "$dir_pw_hdlc:rpc_channel_output", - "$dir_pw_stream", "$dir_pw_stream:sys_io_stream", - "$dir_pw_sys_io", "${chip_root}/config/efr32/lib/pw_rpc:pw_rpc", "${chip_root}/examples/common/pigweed:attributes_service.nanopb_rpc", "${chip_root}/examples/common/pigweed:button_service.nanopb_rpc", diff --git a/examples/lighting-app/efr32/src/Rpc.cpp b/examples/lighting-app/efr32/src/Rpc.cpp deleted file mode 100644 index d7969972530dc1..00000000000000 --- a/examples/lighting-app/efr32/src/Rpc.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - * - * Copyright (c) 2021 Project CHIP Authors - * All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "AppTask.h" -#include "FreeRTOS.h" -#include "PigweedLoggerMutex.h" -#include "pigweed/RpcService.h" -#include "pigweed/rpc_services/Attributes.h" -#include "pigweed/rpc_services/Button.h" -#include "pigweed/rpc_services/Device.h" -#include "pigweed/rpc_services/Lighting.h" -#include "pw_sys_io_efr32/init.h" -#include "task.h" - -namespace chip { -namespace rpc { - -class Efr32Button final : public Button -{ -public: - pw::Status Event(ServerContext &, const chip_rpc_ButtonEvent & request, pw_protobuf_Empty & response) override - { - GetAppTask().ButtonEventHandler(SL_SIMPLE_BUTTON_INSTANCE(request.idx) /* PB 0 or PB 1 */, request.pushed); - return pw::OkStatus(); - } -}; - -class Efr32Device final : public Device -{ -public: - pw::Status Reboot(ServerContext & ctx, const pw_protobuf_Empty & request, pw_protobuf_Empty & response) override - { - NVIC_SystemReset(); - // WILL NOT RETURN - return pw::OkStatus(); - } -}; - -namespace { - -#define RPC_TASK_STACK_SIZE 4096 -#define RPC_TASK_PRIORITY 1 -static TaskHandle_t sRpcTaskHandle; -StaticTask_t sRpcTaskBuffer; -StackType_t sRpcTaskStack[RPC_TASK_STACK_SIZE]; - -Attributes attributes_service; -Efr32Button button_service; -Efr32Device device_service; -Lighting lighting_service; - -void RegisterServices(pw::rpc::Server & server) -{ - server.RegisterService(attributes_service); - server.RegisterService(button_service); - server.RegisterService(device_service); - server.RegisterService(lighting_service); -} - -} // namespace - -void RunRpcService(void *) -{ - Start(RegisterServices, &logger_mutex); -} - -void Init() -{ - pw_sys_io_Init(); - - // Start App task. - sRpcTaskHandle = xTaskCreateStatic(RunRpcService, "RPC_TASK", ArraySize(sRpcTaskStack), nullptr, RPC_TASK_PRIORITY, - sRpcTaskStack, &sRpcTaskBuffer); -} - -} // namespace rpc -} // namespace chip diff --git a/examples/lighting-app/nrfconnect/CMakeLists.txt b/examples/lighting-app/nrfconnect/CMakeLists.txt index 698c0bd65621de..6663936334d4a1 100644 --- a/examples/lighting-app/nrfconnect/CMakeLists.txt +++ b/examples/lighting-app/nrfconnect/CMakeLists.txt @@ -160,9 +160,9 @@ pw_proto_library(lighting_service ) target_sources(app PRIVATE - main/Rpc.cpp ../../common/pigweed/RpcService.cpp ../../common/pigweed/nrfconnect/PigweedLoggerMutex.cpp + ${NRFCONNECT_COMMON}/Rpc.cpp ${NRFCONNECT_COMMON}/util/PigweedLogger.cpp ) @@ -170,10 +170,17 @@ target_include_directories(app PRIVATE ${PIGWEED_ROOT}/pw_sys_io/public ${CHIP_ROOT}/src/lib/support ${CHIP_ROOT}/src/system + ${NRFCONNECT_COMMON} ../../common ../../common/pigweed ../../common/pigweed/nrfconnect) +target_compile_options(app PRIVATE + "-DPW_RPC_ATTRIBUTE_SERVICE=1" + "-DPW_RPC_BUTTON_SERVICE=1" + "-DPW_RPC_DEVICE_SERVICE=1" + "-DPW_RPC_LIGHTING_SERVICE=1") + target_link_libraries(app PRIVATE attributes_service.nanopb_rpc button_service.nanopb_rpc diff --git a/examples/lighting-app/nrfconnect/main/Rpc.cpp b/examples/lighting-app/nrfconnect/main/Rpc.cpp deleted file mode 100644 index 66100e38593f87..00000000000000 --- a/examples/lighting-app/nrfconnect/main/Rpc.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - * - * Copyright (c) 2020 Project CHIP Authors - * All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "AppTask.h" -#include "PigweedLoggerMutex.h" -#include "pigweed/RpcService.h" -#include "pw_sys_io_nrfconnect/init.h" -#include "rpc_services/Attributes.h" -#include "rpc_services/Button.h" -#include "rpc_services/Device.h" -#include "rpc_services/Lighting.h" - -#include - -LOG_MODULE_DECLARE(app); - -namespace chip { -namespace rpc { - -namespace { - -void reboot_timer_handler(struct k_timer * dummy) -{ - NVIC_SystemReset(); -} -K_TIMER_DEFINE(reboot_timer, reboot_timer_handler, NULL); - -} // namespace - -class NrfButton final : public Button -{ -public: - pw::Status Event(ServerContext &, const chip_rpc_ButtonEvent & request, pw_protobuf_Empty & response) override - { - GetAppTask().ButtonEventHandler(request.pushed << request.idx /* button_state */, 1 << request.idx /* has_changed */); - return pw::OkStatus(); - } -}; - -class NrfDevice final : public Device -{ -public: - pw::Status Reboot(ServerContext & ctx, const pw_protobuf_Empty & request, pw_protobuf_Empty & response) override - { - k_timer_start(&reboot_timer, K_SECONDS(1), K_FOREVER); - return pw::OkStatus(); - } -}; - -namespace { - -constexpr size_t kRpcTaskSize = 4096; -constexpr int kRpcPriority = 5; - -K_THREAD_STACK_DEFINE(rpc_stack_area, kRpcTaskSize); -struct k_thread rpc_thread_data; - -Attributes attributes_service; -NrfButton button_service; -NrfDevice device_service; -Lighting lighting_service; - -void RegisterServices(pw::rpc::Server & server) -{ - server.RegisterService(attributes_service); - server.RegisterService(button_service); - server.RegisterService(device_service); - server.RegisterService(lighting_service); -} - -} // namespace - -k_tid_t Init() -{ - pw_sys_io_Init(); - k_tid_t tid = k_thread_create(&rpc_thread_data, rpc_stack_area, K_THREAD_STACK_SIZEOF(rpc_stack_area), RunRpcService, NULL, - NULL, NULL, kRpcPriority, 0, K_NO_WAIT); - return tid; -} - -void RunRpcService(void *, void *, void *) -{ - Start(RegisterServices, &logger_mutex); -} - -} // namespace rpc -} // namespace chip diff --git a/examples/lighting-app/nrfconnect/main/include/AppTask.h b/examples/lighting-app/nrfconnect/main/include/AppTask.h index 83f54267a555b2..12ff22ba963ca3 100644 --- a/examples/lighting-app/nrfconnect/main/include/AppTask.h +++ b/examples/lighting-app/nrfconnect/main/include/AppTask.h @@ -21,10 +21,13 @@ #include "AppEvent.h" #include "LEDWidget.h" #include "LightingManager.h" -#include "Rpc.h" #include +#ifdef CONFIG_CHIP_PW_RPC +#include "Rpc.h" +#endif + #ifdef CONFIG_MCUMGR_SMP_BT #include "DFUOverSMP.h" #endif @@ -43,9 +46,11 @@ class AppTask void UpdateClusterState(); private: +#ifdef CONFIG_CHIP_PW_RPC friend class chip::rpc::NrfButton; - friend AppTask & GetAppTask(void); +#endif + friend AppTask & GetAppTask(void); int Init(); static void ActionInitiated(LightingManager::Action_t aAction, int32_t aActor); diff --git a/examples/lighting-app/nrfconnect/main/main.cpp b/examples/lighting-app/nrfconnect/main/main.cpp index a3e5944651b9cf..1d2ae1530b813d 100644 --- a/examples/lighting-app/nrfconnect/main/main.cpp +++ b/examples/lighting-app/nrfconnect/main/main.cpp @@ -17,7 +17,6 @@ */ #include "AppTask.h" -#include "Rpc.h" #include #include @@ -25,6 +24,10 @@ #include +#ifdef CONFIG_CHIP_PW_RPC +#include "Rpc.h" +#endif + #ifdef CONFIG_USB #include #endif diff --git a/examples/lock-app/efr32/BUILD.gn b/examples/lock-app/efr32/BUILD.gn index 805f0a963d6e09..eae91987d71832 100644 --- a/examples/lock-app/efr32/BUILD.gn +++ b/examples/lock-app/efr32/BUILD.gn @@ -20,6 +20,12 @@ import("${build_root}/config/defaults.gni") import("${efr32_sdk_build_root}/efr32_executable.gni") import("${efr32_sdk_build_root}/efr32_sdk.gni") +import("${chip_root}/examples/common/pigweed/pigweed_rpcs.gni") +if (chip_enable_pw_rpc) { + import("//build_overrides/pigweed.gni") + import("$dir_pw_build/target_types.gni") +} + assert(current_os == "freertos") efr32_project_dir = "${chip_root}/examples/lock-app/efr32" @@ -59,6 +65,10 @@ efr32_sdk("sdk") { "BOARD_ID=${efr32_board}", "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE=${setupPinCode}", ] + + if (chip_enable_pw_rpc) { + defines += [ "HAL_VCOM_ENABLE=1" ] + } } efr32_executable("lock_app") { @@ -97,6 +107,41 @@ efr32_executable("lock_app") { defines += [ "DISPLAY_ENABLED" ] } + if (chip_enable_pw_rpc) { + defines += [ + "PW_RPC_ENABLED", + "PW_RPC_ATTRIBUTE_SERVICE=1", + "PW_RPC_BUTTON_SERVICE=1", + "PW_RPC_DEVICE_SERVICE=1", + "PW_RPC_LOCKING_SERVICE=1", + ] + + sources += [ + "${chip_root}/examples/common/pigweed/RpcService.cpp", + "${chip_root}/examples/common/pigweed/efr32/PigweedLoggerMutex.cpp", + "${examples_plat_dir}/PigweedLogger.cpp", + "${examples_plat_dir}/Rpc.cpp", + ] + + deps += [ + "$dir_pw_hdlc:rpc_channel_output", + "$dir_pw_stream:sys_io_stream", + "${chip_root}/config/efr32/lib/pw_rpc:pw_rpc", + "${chip_root}/examples/common/pigweed:attributes_service.nanopb_rpc", + "${chip_root}/examples/common/pigweed:button_service.nanopb_rpc", + "${chip_root}/examples/common/pigweed:device_service.nanopb_rpc", + "${chip_root}/examples/common/pigweed:locking_service.nanopb_rpc", + "${examples_plat_dir}/pw_sys_io:pw_sys_io_efr32", + ] + + deps += pw_build_LINK_DEPS + + include_dirs += [ + "${chip_root}/examples/common", + "${chip_root}/examples/common/pigweed/efr32", + ] + } + if (enable_heap_monitoring) { defines += [ "HEAP_MONITORING" ] sources += [ "${examples_plat_dir}/MemMonitoring.cpp" ] diff --git a/examples/lock-app/efr32/src/main.cpp b/examples/lock-app/efr32/src/main.cpp index 1e07cd63605644..012b1ddd63f162 100644 --- a/examples/lock-app/efr32/src/main.cpp +++ b/examples/lock-app/efr32/src/main.cpp @@ -48,6 +48,10 @@ #include "lcd.h" #endif +#if PW_RPC_ENABLED +#include "Rpc.h" +#endif + #if CHIP_ENABLE_OPENTHREAD #include #include @@ -104,6 +108,10 @@ int main(void) init_efrPlatform(); mbedtls_platform_set_calloc_free(CHIPPlatformMemoryCalloc, CHIPPlatformMemoryFree); +#if PW_RPC_ENABLED + chip::rpc::Init(); +#endif + EFR32_LOG("=================================================="); EFR32_LOG("chip-efr32-lock-example starting"); EFR32_LOG("=================================================="); diff --git a/examples/lock-app/efr32/with_pw_rpc.gni b/examples/lock-app/efr32/with_pw_rpc.gni index a64475b97e246e..f9f11473f56d43 100644 --- a/examples/lock-app/efr32/with_pw_rpc.gni +++ b/examples/lock-app/efr32/with_pw_rpc.gni @@ -18,8 +18,11 @@ import("//build_overrides/chip.gni") import("${chip_root}/config/efr32/lib/pw_rpc/pw_rpc.gni") -import("${chip_root}/src/platform/EFR32/args.gni") +import("${chip_root}/examples/platform/efr32/args.gni") efr32_sdk_target = get_label_info(":sdk", "label_no_toolchain") +chip_enable_pw_rpc = true +chip_enable_openthread = true + cpp_standard = "gnu++17" diff --git a/examples/lock-app/esp32/main/CMakeLists.txt b/examples/lock-app/esp32/main/CMakeLists.txt index 75b0d406fa412b..ce2c2116ca6e59 100644 --- a/examples/lock-app/esp32/main/CMakeLists.txt +++ b/examples/lock-app/esp32/main/CMakeLists.txt @@ -98,6 +98,7 @@ pw_proto_library(locking_service ) target_link_libraries(${COMPONENT_LIB} PUBLIC + attributes_service.nanopb_rpc device_service.nanopb_rpc button_service.nanopb_rpc locking_service.nanopb_rpc @@ -107,6 +108,12 @@ target_link_libraries(${COMPONENT_LIB} PUBLIC pw_rpc.server ) +target_compile_options(${COMPONENT_LIB} PRIVATE + "-DPW_RPC_ATTRIBUTE_SERVICE=2" + "-DPW_RPC_BUTTON_SERVICE=1" + "-DPW_RPC_DEVICE_SERVICE=1" + "-DPW_RPC_LOCKING_SERVICE=1") + else (CONFIG_ENABLE_PW_RPC) idf_component_register(PRIV_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/zzz_generated/lock-app/" diff --git a/examples/lock-app/esp32/main/Rpc.cpp b/examples/lock-app/esp32/main/Rpc.cpp deleted file mode 100644 index 0aea9244960482..00000000000000 --- a/examples/lock-app/esp32/main/Rpc.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * - * Copyright (c) 2020 Project CHIP Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "sdkconfig.h" -#if CONFIG_ENABLE_PW_RPC -#include "AppTask.h" -#include "PigweedLoggerMutex.h" -#include "RpcService.h" -#include "esp_log.h" -#include "esp_system.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "pw_rpc/server.h" -#include "pw_sys_io/sys_io.h" -#include "rpc_services/Button.h" -#include "rpc_services/Device.h" -#include "rpc_services/Locking.h" - -#include - -const char * TAG = "RPC"; - -using chip::DeviceLayer::ConfigurationMgr; - -static bool uartInitialised; - -namespace chip { -namespace rpc { - -class Esp32Button final : public Button -{ -public: - pw::Status Event(ServerContext &, const chip_rpc_ButtonEvent & request, pw_protobuf_Empty & response) override - { - GetAppTask().ButtonEventHandler(request.idx, request.pushed); - return pw::OkStatus(); - } -}; - -class Esp32Device final : public Device -{ -public: - pw::Status Reboot(ServerContext & ctx, const pw_protobuf_Empty & request, pw_protobuf_Empty & response) override - { - esp_restart(); - // WILL NOT RETURN - return pw::OkStatus(); - } -}; - -constexpr size_t kRpcStackSizeBytes = (4 * 1024); -constexpr uint8_t kRpcTaskPriority = 5; - -TaskHandle_t rpcTaskHandle; - -Esp32Button button_service; -Locking locking_service; -Device device_service; - -void RegisterServices(pw::rpc::Server & server) -{ - server.RegisterService(locking_service); - server.RegisterService(button_service); - server.RegisterService(device_service); -} - -void RunRpcService(void *) -{ - Start(RegisterServices, &logger_mutex); -} - -void Init() -{ - PigweedLogger::init(); - uartInitialised = true; - - ESP_LOGI(TAG, "----------- esp32-rpc-service starting -----------"); - - xTaskCreate(RunRpcService, "RPC", kRpcStackSizeBytes / sizeof(StackType_t), nullptr, kRpcTaskPriority, &rpcTaskHandle); -} - -} // namespace rpc -} // namespace chip - -#endif diff --git a/examples/platform/efr32/Rpc.cpp b/examples/platform/efr32/Rpc.cpp new file mode 100644 index 00000000000000..89afffe420b0b1 --- /dev/null +++ b/examples/platform/efr32/Rpc.cpp @@ -0,0 +1,149 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "AppTask.h" +#include "FreeRTOS.h" +#include "PigweedLoggerMutex.h" +#include "pigweed/RpcService.h" +#include "pw_sys_io_efr32/init.h" +#include "task.h" + +#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE +#include "pigweed/rpc_services/Attributes.h" +#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE +#include "pigweed/rpc_services/Button.h" +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +#include "pigweed/rpc_services/Device.h" +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE +#include "pigweed/rpc_services/Lighting.h" +#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + +#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE +#include "pigweed/rpc_services/Locking.h" +#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE + +namespace chip { +namespace rpc { + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE +class Efr32Button final : public Button +{ +public: + pw::Status Event(ServerContext &, const chip_rpc_ButtonEvent & request, pw_protobuf_Empty & response) override + { + GetAppTask().ButtonEventHandler(SL_SIMPLE_BUTTON_INSTANCE(request.idx) /* PB 0 or PB 1 */, request.pushed); + return pw::OkStatus(); + } +}; +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +class Efr32Device final : public Device +{ +public: + pw::Status Reboot(ServerContext & ctx, const pw_protobuf_Empty & request, pw_protobuf_Empty & response) override + { + mRebootTimer = xTimerCreateStatic("Reboot", kRebootTimerPeriodTicks, false, nullptr, RebootHandler, &mRebootTimerBuffer); + xTimerStart(mRebootTimer, 0); + return pw::OkStatus(); + } + +private: + static constexpr TickType_t kRebootTimerPeriodTicks = 1000; + TimerHandle_t mRebootTimer; + StaticTimer_t mRebootTimerBuffer; + + static void RebootHandler(TimerHandle_t) { NVIC_SystemReset(); } +}; +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +namespace { + +#define RPC_TASK_STACK_SIZE 4096 +#define RPC_TASK_PRIORITY 1 +static TaskHandle_t sRpcTaskHandle; +StaticTask_t sRpcTaskBuffer; +StackType_t sRpcTaskStack[RPC_TASK_STACK_SIZE]; + +#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE +Attributes attributes_service; +#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE +Efr32Button button_service; +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +Efr32Device device_service; +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE +Lighting lighting_service; +#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + +#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE +Locking locking; +#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE + +void RegisterServices(pw::rpc::Server & server) +{ +#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + server.RegisterService(attributes_service); +#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + server.RegisterService(button_service); +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + server.RegisterService(device_service); +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + server.RegisterService(lighting_service); +#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + +#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE + server.RegisterService(locking); +#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE +} + +} // namespace + +void RunRpcService(void *) +{ + Start(RegisterServices, &logger_mutex); +} + +void Init() +{ + pw_sys_io_Init(); + + // Start App task. + sRpcTaskHandle = xTaskCreateStatic(RunRpcService, "RPC_TASK", ArraySize(sRpcTaskStack), nullptr, RPC_TASK_PRIORITY, + sRpcTaskStack, &sRpcTaskBuffer); +} + +} // namespace rpc +} // namespace chip diff --git a/examples/lighting-app/efr32/include/Rpc.h b/examples/platform/efr32/Rpc.h similarity index 100% rename from examples/lighting-app/efr32/include/Rpc.h rename to examples/platform/efr32/Rpc.h diff --git a/examples/platform/esp32/Rpc.cpp b/examples/platform/esp32/Rpc.cpp new file mode 100644 index 00000000000000..ccc877ecb46fdf --- /dev/null +++ b/examples/platform/esp32/Rpc.cpp @@ -0,0 +1,167 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "sdkconfig.h" + +#if CONFIG_ENABLE_PW_RPC +#include "PigweedLoggerMutex.h" +#include "RpcService.h" +#include "esp_log.h" +#include "freertos/FreeRTOS.h" +#include "freertos/event_groups.h" +#include "freertos/semphr.h" +#include "freertos/task.h" +#include "pw_log/log.h" +#include "pw_rpc/server.h" +#include "pw_sys_io/sys_io.h" +#include "support/CodeUtils.h" + +#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE +#include "pigweed/rpc_services/Attributes.h" +#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE +#include "ScreenManager.h" +#include "pigweed/rpc_services/Button.h" +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +#include "pigweed/rpc_services/Device.h" +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE +#include "pigweed/rpc_services/Lighting.h" +#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + +#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE +#include "pigweed/rpc_services/Locking.h" +#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE + +namespace chip { +namespace rpc { + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE +class Esp32Button final : public Button +{ +public: + pw::Status Event(ServerContext &, const chip_rpc_ButtonEvent & request, pw_protobuf_Empty & response) override + { +#if CONFIG_DEVICE_TYPE_M5STACK + if (request.pushed) + { + ScreenManager::ButtonPressed(1 + request.idx); + } + return pw::OkStatus(); +#else // CONFIG_DEVICE_TYPE_M5STACK + return pw::Status::Unimplemented(); +#endif // CONFIG_DEVICE_TYPE_M5STACK + } +}; +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +class Esp32Device final : public Device +{ +public: + pw::Status Reboot(ServerContext & ctx, const pw_protobuf_Empty & request, pw_protobuf_Empty & response) override + { + mRebootTimer = xTimerCreateStatic("Reboot", kRebootTimerPeriodTicks, false, nullptr, RebootHandler, &mRebootTimerBuffer); + xTimerStart(mRebootTimer, 0); + return pw::OkStatus(); + } + +private: + static constexpr TickType_t kRebootTimerPeriodTicks = 1000; + TimerHandle_t mRebootTimer; + StaticTimer_t mRebootTimerBuffer; + + static void RebootHandler(TimerHandle_t) { esp_restart(); } +}; +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +namespace { + +#define RPC_TASK_STACK_SIZE (8 * 1024) +#define RPC_TASK_PRIORITY 5 +static TaskHandle_t sRpcTaskHandle; +StaticTask_t sRpcTaskBuffer; +StackType_t sRpcTaskStack[RPC_TASK_STACK_SIZE]; + +#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE +Attributes attributes_service; +#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE +Esp32Button button_service; +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +Esp32Device device_service; +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE +Lighting lighting_service; +#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + +#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE +Locking locking; +#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE + +void RegisterServices(pw::rpc::Server & server) +{ +#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + server.RegisterService(attributes_service); +#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + server.RegisterService(button_service); +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + server.RegisterService(device_service); +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + server.RegisterService(lighting_service); +#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + +#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE + server.RegisterService(locking); +#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE +} + +} // namespace + +void RunRpcService(void *) +{ + Start(RegisterServices, &logger_mutex); +} + +void Init() +{ + PigweedLogger::init(); + + // Start App task. + sRpcTaskHandle = xTaskCreateStatic(RunRpcService, "RPC_TASK", ArraySize(sRpcTaskStack), nullptr, RPC_TASK_PRIORITY, + sRpcTaskStack, &sRpcTaskBuffer); +} + +} // namespace rpc +} // namespace chip + +#endif // CONFIG_ENABLE_PW_RPC diff --git a/examples/all-clusters-app/esp32/main/include/Rpc.h b/examples/platform/esp32/Rpc.h similarity index 100% rename from examples/all-clusters-app/esp32/main/include/Rpc.h rename to examples/platform/esp32/Rpc.h diff --git a/examples/platform/nrfconnect/Rpc.cpp b/examples/platform/nrfconnect/Rpc.cpp new file mode 100644 index 00000000000000..44cfb0e82eb01e --- /dev/null +++ b/examples/platform/nrfconnect/Rpc.cpp @@ -0,0 +1,152 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "AppTask.h" +#include "PigweedLoggerMutex.h" +#include "pigweed/RpcService.h" +#include "pw_sys_io_nrfconnect/init.h" + +#include + +LOG_MODULE_DECLARE(app); + +#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE +#include "pigweed/rpc_services/Attributes.h" +#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE +#include "pigweed/rpc_services/Button.h" +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +#include "pigweed/rpc_services/Device.h" +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE +#include "pigweed/rpc_services/Lighting.h" +#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + +#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE +#include "pigweed/rpc_services/Locking.h" +#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE + +namespace chip { +namespace rpc { + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +namespace { + +void reboot_timer_handler(struct k_timer * dummy) +{ + NVIC_SystemReset(); +} +K_TIMER_DEFINE(reboot_timer, reboot_timer_handler, NULL); + +} // namespace + +class NrfDevice final : public Device +{ +public: + pw::Status Reboot(ServerContext & ctx, const pw_protobuf_Empty & request, pw_protobuf_Empty & response) override + { + k_timer_start(&reboot_timer, K_SECONDS(1), K_FOREVER); + return pw::OkStatus(); + } +}; +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE +class NrfButton final : public Button +{ +public: + pw::Status Event(ServerContext &, const chip_rpc_ButtonEvent & request, pw_protobuf_Empty & response) override + { + GetAppTask().ButtonEventHandler(request.pushed << request.idx /* button_state */, 1 << request.idx /* has_changed */); + return pw::OkStatus(); + } +}; +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +namespace { + +constexpr size_t kRpcTaskSize = 4096; +constexpr int kRpcPriority = 5; + +K_THREAD_STACK_DEFINE(rpc_stack_area, kRpcTaskSize); +struct k_thread rpc_thread_data; + +#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE +Attributes attributes_service; +#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE +NrfButton button_service; +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE +NrfDevice device_service; +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE +Lighting lighting_service; +#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + +#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE +Locking locking; +#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE + +void RegisterServices(pw::rpc::Server & server) +{ +#if defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + server.RegisterService(attributes_service); +#endif // defined(PW_RPC_ATTRIBUTE_SERVICE) && PW_RPC_ATTRIBUTE_SERVICE + +#if defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + server.RegisterService(button_service); +#endif // defined(PW_RPC_BUTTON_SERVICE) && PW_RPC_BUTTON_SERVICE + +#if defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + server.RegisterService(device_service); +#endif // defined(PW_RPC_DEVICE_SERVICE) && PW_RPC_DEVICE_SERVICE + +#if defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + server.RegisterService(lighting_service); +#endif // defined(PW_RPC_LIGHTING_SERVICE) && PW_RPC_LIGHTING_SERVICE + +#if defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE + server.RegisterService(locking); +#endif // defined(PW_RPC_LOCKING_SERVICE) && PW_RPC_LOCKING_SERVICE +} + +} // namespace + +void RunRpcService(void *, void *, void *) +{ + Start(RegisterServices, &logger_mutex); +} + +k_tid_t Init() +{ + pw_sys_io_Init(); + k_tid_t tid = k_thread_create(&rpc_thread_data, rpc_stack_area, K_THREAD_STACK_SIZEOF(rpc_stack_area), RunRpcService, NULL, + NULL, NULL, kRpcPriority, 0, K_NO_WAIT); + return tid; +} + +} // namespace rpc +} // namespace chip diff --git a/examples/lighting-app/nrfconnect/main/include/Rpc.h b/examples/platform/nrfconnect/Rpc.h similarity index 100% rename from examples/lighting-app/nrfconnect/main/include/Rpc.h rename to examples/platform/nrfconnect/Rpc.h diff --git a/scripts/build/build/targets.py b/scripts/build/build/targets.py index c818bb2628660a..e013bd23a998a8 100644 --- a/scripts/build/build/targets.py +++ b/scripts/build/build/targets.py @@ -150,11 +150,11 @@ def Efr32Targets(): board=Efr32Board.BRD4161A) yield efr_target.Extend('window-covering', app=Efr32App.WINDOW_COVERING) - yield efr_target.Extend('lock', app=Efr32App.LOCK) yield efr_target.Extend('unit-test', app=Efr32App.UNIT_TEST) rpc_aware_targets = [ efr_target.Extend('light', app=Efr32App.LIGHT), + efr_target.Extend('lock', app=Efr32App.LOCK) ] for target in rpc_aware_targets: diff --git a/scripts/build/testdata/all_targets_except_host.txt b/scripts/build/testdata/all_targets_except_host.txt index 62abd8211112f8..ba1c11063b90d2 100644 --- a/scripts/build/testdata/all_targets_except_host.txt +++ b/scripts/build/testdata/all_targets_except_host.txt @@ -12,6 +12,7 @@ android-x86-chip-tool efr32-brd4161a-light efr32-brd4161a-light-rpc efr32-brd4161a-lock +efr32-brd4161a-lock-rpc efr32-brd4161a-unit-test efr32-brd4161a-window-covering esp32-c3devkit-all-clusters diff --git a/scripts/build/testdata/build_all_except_host.txt b/scripts/build/testdata/build_all_except_host.txt index 36c1866eda665b..734f2b84915638 100644 --- a/scripts/build/testdata/build_all_except_host.txt +++ b/scripts/build/testdata/build_all_except_host.txt @@ -133,6 +133,9 @@ gn gen --check --fail-on-unused-args --root={root}/examples/lighting-app/efr32 ' # Generating efr32-brd4161a-lock gn gen --check --fail-on-unused-args --root={root}/examples/lock-app/efr32 '--args=efr32_board="BRD4161A"' {out}/efr32-brd4161a-lock +# Generating efr32-brd4161a-lock-rpc +gn gen --check --fail-on-unused-args --root={root}/examples/lock-app/efr32 '--args=efr32_board="BRD4161A" import("//with_pw_rpc.gni")' {out}/efr32-brd4161a-lock-rpc + # Generating efr32-brd4161a-unit-test gn gen --check --fail-on-unused-args --root={root}/src/test_driver/efr32 '--args=efr32_board="BRD4161A"' {out}/efr32-brd4161a-unit-test @@ -587,6 +590,9 @@ ninja -C {out}/efr32-brd4161a-light-rpc # Building efr32-brd4161a-lock ninja -C {out}/efr32-brd4161a-lock +# Building efr32-brd4161a-lock-rpc +ninja -C {out}/efr32-brd4161a-lock-rpc + # Building efr32-brd4161a-unit-test ninja -C {out}/efr32-brd4161a-unit-test diff --git a/scripts/build/testdata/glob_star_targets_except_host.txt b/scripts/build/testdata/glob_star_targets_except_host.txt index a78108879d08eb..fce80642e1562a 100644 --- a/scripts/build/testdata/glob_star_targets_except_host.txt +++ b/scripts/build/testdata/glob_star_targets_except_host.txt @@ -12,6 +12,7 @@ android-x86-chip-tool efr32-brd4161a-light efr32-brd4161a-light-rpc efr32-brd4161a-lock +efr32-brd4161a-lock-rpc efr32-brd4161a-unit-test efr32-brd4161a-window-covering esp32-c3devkit-all-clusters From ab5734cf6b470f70e0e5311a46a1410805a05019 Mon Sep 17 00:00:00 2001 From: Tennessee Carmel-Veilleux Date: Sat, 27 Nov 2021 12:08:31 -0500 Subject: [PATCH 2/5] Make PAA trust store configurable (#12277) * Make PAA store configurable PAA store used by DefaultDeviceAttestationVerifier could not be replaced, forcing a few fixed test roots to always be used and nothing else, unless completely forking the DefaultDeviceAttestationVerifier. - This PR introduces the `PaaRootStore` interface, which the default `DeviceAttestationVerifier` expects to get configured at in constructor. - Examples were modified to use the default test PAA root store - Unit tests updated to use the testing root store - Refactored simple array-based Root store to self-extract the SKID Testing done: added new units tests which pass, ran cert tests, validated attestation succeeds the same as before with test keys. Fixed #11913 * Restyled by clang-format * Address review comments - Rename PaaRootStore to AttestationTrustStore - Add comments about ArrayAttestationtTrustStore lifecycle - Remove debug print * Fix python build * Fix tv-app scoping issue * Attempt to debug Darwin error * Restyled by clang-format * Remove debug logging used to diagnose CI Co-authored-by: Restyled.io --- .../chip-tool/commands/common/CHIPCommand.cpp | 5 +- examples/platform/linux/AppMain.cpp | 4 +- examples/tv-casting-app/linux/main.cpp | 8 +- .../java/AndroidDeviceControllerWrapper.cpp | 4 +- .../ChipDeviceController-ScriptBinding.cpp | 4 +- .../python/chip/internal/CommissionerImpl.cpp | 8 +- src/credentials/CHIPCert.h | 2 +- src/credentials/DeviceAttestationVerifier.h | 81 +++++++ .../DefaultDeviceAttestationVerifier.cpp | 208 +++++++++--------- .../DefaultDeviceAttestationVerifier.h | 22 +- .../tests/TestCertificationDeclaration.cpp | 4 +- .../TestDeviceAttestationCredentials.cpp | 80 ++++++- src/crypto/CHIPCryptoPAL.h | 2 + src/crypto/tests/CHIPCryptoPALTest.cpp | 4 +- .../Framework/CHIP/CHIPDeviceController.mm | 4 +- src/protocols/secure_channel/CASESession.h | 2 +- 16 files changed, 314 insertions(+), 128 deletions(-) diff --git a/examples/chip-tool/commands/common/CHIPCommand.cpp b/examples/chip-tool/commands/common/CHIPCommand.cpp index 44921d77b457f9..7f39cab591b99b 100644 --- a/examples/chip-tool/commands/common/CHIPCommand.cpp +++ b/examples/chip-tool/commands/common/CHIPCommand.cpp @@ -45,7 +45,10 @@ CHIP_ERROR CHIPCommand::Run() chip::Platform::ScopedMemoryBuffer rcac; chip::Credentials::SetDeviceAttestationCredentialsProvider(chip::Credentials::Examples::GetExampleDACProvider()); - chip::Credentials::SetDeviceAttestationVerifier(chip::Credentials::GetDefaultDACVerifier()); + + // TODO: Replace testingRootStore with a AttestationTrustStore that has the necessary official PAA roots available + const chip::Credentials::AttestationTrustStore * testingRootStore = chip::Credentials::GetTestAttestationTrustStore(); + chip::Credentials::SetDeviceAttestationVerifier(chip::Credentials::GetDefaultDACVerifier(testingRootStore)); VerifyOrReturnError(noc.Alloc(chip::Controller::kMaxCHIPDERCertLength), CHIP_ERROR_NO_MEMORY); VerifyOrReturnError(icac.Alloc(chip::Controller::kMaxCHIPDERCertLength), CHIP_ERROR_NO_MEMORY); diff --git a/examples/platform/linux/AppMain.cpp b/examples/platform/linux/AppMain.cpp index 5b79f089d13674..44f9917c92e70d 100644 --- a/examples/platform/linux/AppMain.cpp +++ b/examples/platform/linux/AppMain.cpp @@ -234,7 +234,9 @@ CHIP_ERROR InitCommissioner() ReturnErrorOnFailure(gCommissioner.SetUdcListenPort(LinuxDeviceOptions::GetInstance().unsecuredCommissionerPort)); // Initialize device attestation verifier - SetDeviceAttestationVerifier(GetDefaultDACVerifier()); + // TODO: Replace testingRootStore with a AttestationTrustStore that has the necessary official PAA roots available + const chip::Credentials::AttestationTrustStore * testingRootStore = chip::Credentials::GetTestAttestationTrustStore(); + SetDeviceAttestationVerifier(GetDefaultDACVerifier(testingRootStore)); chip::Platform::ScopedMemoryBuffer noc; VerifyOrReturnError(noc.Alloc(chip::Controller::kMaxCHIPDERCertLength), CHIP_ERROR_NO_MEMORY); diff --git a/examples/tv-casting-app/linux/main.cpp b/examples/tv-casting-app/linux/main.cpp index e2b356db9ae093..7cd5934347e967 100644 --- a/examples/tv-casting-app/linux/main.cpp +++ b/examples/tv-casting-app/linux/main.cpp @@ -195,8 +195,12 @@ int main(int argc, char * argv[]) // Initialize device attestation config SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider()); - // Initialize device attestation verifier - SetDeviceAttestationVerifier(GetDefaultDACVerifier()); + // Initialize device attestation verifier from a constant version + { + // TODO: Replace testingRootStore with a AttestationTrustStore that has the necessary official PAA roots available + const chip::Credentials::AttestationTrustStore * testingRootStore = chip::Credentials::GetTestAttestationTrustStore(); + SetDeviceAttestationVerifier(GetDefaultDACVerifier(testingRootStore)); + } if (!chip::ArgParser::ParseArgs(argv[0], argc, argv, allOptions)) { diff --git a/src/controller/java/AndroidDeviceControllerWrapper.cpp b/src/controller/java/AndroidDeviceControllerWrapper.cpp index bb18387a38a488..4f961e0a0dec97 100644 --- a/src/controller/java/AndroidDeviceControllerWrapper.cpp +++ b/src/controller/java/AndroidDeviceControllerWrapper.cpp @@ -204,7 +204,9 @@ AndroidDeviceControllerWrapper * AndroidDeviceControllerWrapper::AllocateNew(Jav wrapper->SetJavaObjectRef(vm, deviceControllerObj); // Initialize device attestation verifier - SetDeviceAttestationVerifier(GetDefaultDACVerifier()); + // TODO: Replace testingRootStore with a AttestationTrustStore that has the necessary official PAA roots available + const chip::Credentials::AttestationTrustStore * testingRootStore = chip::Credentials::GetTestAttestationTrustStore(); + SetDeviceAttestationVerifier(GetDefaultDACVerifier(testingRootStore)); chip::Controller::FactoryInitParams initParams; chip::Controller::SetupParams setupParams; diff --git a/src/controller/python/ChipDeviceController-ScriptBinding.cpp b/src/controller/python/ChipDeviceController-ScriptBinding.cpp index 9c1b09388d0f7f..c7fc136760d8fc 100644 --- a/src/controller/python/ChipDeviceController-ScriptBinding.cpp +++ b/src/controller/python/ChipDeviceController-ScriptBinding.cpp @@ -182,7 +182,9 @@ ChipError::StorageType pychip_DeviceController_NewDeviceController(chip::Control } // Initialize device attestation verifier - SetDeviceAttestationVerifier(GetDefaultDACVerifier()); + // TODO: Replace testingRootStore with a AttestationTrustStore that has the necessary official PAA roots available + const chip::Credentials::AttestationTrustStore * testingRootStore = chip::Credentials::GetTestAttestationTrustStore(); + SetDeviceAttestationVerifier(GetDefaultDACVerifier(testingRootStore)); CHIP_ERROR err = sOperationalCredentialsIssuer.Initialize(sStorageDelegate); VerifyOrReturnError(err == CHIP_NO_ERROR, err.AsInteger()); diff --git a/src/controller/python/chip/internal/CommissionerImpl.cpp b/src/controller/python/chip/internal/CommissionerImpl.cpp index 4386fc16ab549b..8d5b129d7d1159 100644 --- a/src/controller/python/chip/internal/CommissionerImpl.cpp +++ b/src/controller/python/chip/internal/CommissionerImpl.cpp @@ -108,6 +108,11 @@ extern "C" chip::Controller::DeviceCommissioner * pychip_internal_Commissioner_N chip::Platform::ScopedMemoryBuffer rcac; chip::Crypto::P256Keypair ephemeralKey; + // Initialize device attestation verifier + // TODO: Replace testingRootStore with a AttestationTrustStore that has the necessary official PAA roots available + const chip::Credentials::AttestationTrustStore * testingRootStore = chip::Credentials::GetTestAttestationTrustStore(); + chip::Credentials::SetDeviceAttestationVerifier(chip::Credentials::GetDefaultDACVerifier(testingRootStore)); + err = gFabricStorage.Initialize(&gServerStorage); SuccessOrExit(err); @@ -116,9 +121,6 @@ extern "C" chip::Controller::DeviceCommissioner * pychip_internal_Commissioner_N commissionerParams.pairingDelegate = &gPairingDelegate; commissionerParams.storageDelegate = &gServerStorage; - // Initialize device attestation verifier - chip::Credentials::SetDeviceAttestationVerifier(chip::Credentials::GetDefaultDACVerifier()); - err = ephemeralKey.Initialize(); SuccessOrExit(err); diff --git a/src/credentials/CHIPCert.h b/src/credentials/CHIPCert.h index 762e0f25f209f6..b957e60283b638 100644 --- a/src/credentials/CHIPCert.h +++ b/src/credentials/CHIPCert.h @@ -42,7 +42,7 @@ namespace chip { namespace Credentials { -static constexpr uint32_t kKeyIdentifierLength = 20; +static constexpr uint32_t kKeyIdentifierLength = static_cast(Crypto::kSubjectKeyIdentifierLength); static constexpr uint32_t kChip32bitAttrUTF8Length = 8; static constexpr uint32_t kChip64bitAttrUTF8Length = 16; static constexpr uint16_t kX509NoWellDefinedExpirationDateYear = 9999; diff --git a/src/credentials/DeviceAttestationVerifier.h b/src/credentials/DeviceAttestationVerifier.h index 09d843153943d5..75ee5a0eb50d0e 100644 --- a/src/credentials/DeviceAttestationVerifier.h +++ b/src/credentials/DeviceAttestationVerifier.h @@ -99,6 +99,87 @@ struct DeviceInfoForAttestation uint16_t paaVendorId = VendorId::NotSpecified; }; +/** + * @brief Helper utility to model a basic trust store usable for device attestation verifiers. + * + * API is synchronous. Real commissioner implementations may entirely + * hide Product Attestation Authority cert lookup behind the DeviceAttestationVerifier and + * never use this interface at all. It is provided as a utility to help build DeviceAttestationVerifier + * implementations suitable for testing or examples. + */ +class AttestationTrustStore +{ +public: + AttestationTrustStore() = default; + virtual ~AttestationTrustStore() = default; + + // Not copyable + AttestationTrustStore(const AttestationTrustStore &) = delete; + AttestationTrustStore & operator=(const AttestationTrustStore &) = delete; + + /** + * @brief Look-up a PAA cert by SKID + * + * The implementations of this interface must have access to a set of PAAs to trust. + * + * Interface is synchronous, and therefore this should not be used unless to expose a PAA + * store that is both fully local and quick to access. + * + * @param[in] skid Buffer containing the subject key identifier (SKID) of the PAA to look-up + * @param[inout] outPaaDerBuffer Buffer to receive the contents of the PAA root cert, if found. + * Size will be updated to match actual size. + * + * @returns CHIP_NO_ERROR on success, CHIP_INVALID_ARGUMENT if `skid` or `outPaaDerBuffer` arguments + * are not usable, CHIP_BUFFER_TOO_SMALL if certificate doesn't fit in `outPaaDerBuffer` + * span, CHIP_ERROR_CA_CERT_NOT_FOUND if no PAA found that matches `skid. + * + */ + virtual CHIP_ERROR GetProductAttestationAuthorityCert(const ByteSpan & skid, MutableByteSpan & outPaaDerBuffer) const = 0; +}; + +/** + * @brief Basic AttestationTrustStore that holds all data within caller-owned memory. + * + * This is useful to wrap a fixed constant array of certificates into a trust store + * implementation. + */ + +class ArrayAttestationTrustStore : public AttestationTrustStore +{ +public: + ArrayAttestationTrustStore(const ByteSpan * derCerts, size_t numCerts) : mDerCerts(derCerts), mNumCerts(numCerts) {} + + CHIP_ERROR GetProductAttestationAuthorityCert(const ByteSpan & skid, MutableByteSpan & outPaaDerBuffer) const override + { + VerifyOrReturnError(!skid.empty() && (skid.data() != nullptr), CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(skid.size() == Crypto::kSubjectKeyIdentifierLength, CHIP_ERROR_INVALID_ARGUMENT); + + size_t paaIdx; + ByteSpan candidate; + + for (paaIdx = 0; paaIdx < mNumCerts; ++paaIdx) + { + uint8_t skidBuf[Crypto::kSubjectKeyIdentifierLength] = { 0 }; + candidate = mDerCerts[paaIdx]; + MutableByteSpan candidateSkidSpan{ skidBuf }; + VerifyOrReturnError(CHIP_NO_ERROR == Crypto::ExtractSKIDFromX509Cert(candidate, candidateSkidSpan), + CHIP_ERROR_INTERNAL); + + if (skid.data_equal(candidateSkidSpan)) + { + // Found a match + return CopySpanToMutableSpan(candidate, outPaaDerBuffer); + } + } + + return CHIP_ERROR_CA_CERT_NOT_FOUND; + } + +protected: + const ByteSpan * mDerCerts; + const size_t mNumCerts; +}; + class DeviceAttestationVerifier { public: diff --git a/src/credentials/examples/DefaultDeviceAttestationVerifier.cpp b/src/credentials/examples/DefaultDeviceAttestationVerifier.cpp index b6cf795092fd47..23acd0179f59f7 100644 --- a/src/credentials/examples/DefaultDeviceAttestationVerifier.cpp +++ b/src/credentials/examples/DefaultDeviceAttestationVerifier.cpp @@ -34,114 +34,98 @@ namespace Credentials { namespace { -CHIP_ERROR GetProductAttestationAuthorityCert(const ByteSpan & skid, MutableByteSpan & outDacBuffer) -{ - struct PAALookupTable - { - const uint8_t mPAACertificate[kMax_x509_Certificate_Length]; - const uint8_t mSKID[kKeyIdentifierLength]; - }; - - static PAALookupTable - sPAALookupTable[] = { - { /* - credentials/test/attestation/Chip-Test-PAA-FFF1-Cert.pem - -----BEGIN CERTIFICATE----- - MIIBmTCCAT+gAwIBAgIIaDhPq7kZ/N8wCgYIKoZIzj0EAwIwHzEdMBsGA1UEAwwU - TWF0dGVyIFRlc3QgUEFBIEZGRjEwIBcNMjEwNjI4MTQyMzQzWhgPOTk5OTEyMzEy - MzU5NTlaMB8xHTAbBgNVBAMMFE1hdHRlciBUZXN0IFBBQSBGRkYxMFkwEwYHKoZI - zj0CAQYIKoZIzj0DAQcDQgAEG5isW7wR3GoXVaBbCsXha6AsRu5vwrvnb/fPbKeq - Tp/R15jcvvtP6uIl03c8kTSMwm1JMTHjCWMtXp7zHRLek6NjMGEwDwYDVR0TAQH/ - BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFO8Y4OzUZgQ03w28kR7U - UhaZZoOfMB8GA1UdIwQYMBaAFO8Y4OzUZgQ03w28kR7UUhaZZoOfMAoGCCqGSM49 - BAMCA0gAMEUCIQCn+l+nZv/3tf0VjNNPYl1IkSAOBYUO8SX23udWVPmXNgIgI7Ub - bkJTKCjbCZIDNwUNcPC2tyzNPLeB5nGsIl31Rys= - -----END CERTIFICATE----- - */ - { 0x30, 0x82, 0x01, 0x99, 0x30, 0x82, 0x01, 0x3F, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x68, 0x38, 0x4F, 0xAB, - 0xB9, 0x19, 0xFC, 0xDF, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x1F, 0x31, - 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x14, 0x4D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x54, 0x65, - 0x73, 0x74, 0x20, 0x50, 0x41, 0x41, 0x20, 0x46, 0x46, 0x46, 0x31, 0x30, 0x20, 0x17, 0x0D, 0x32, 0x31, 0x30, 0x36, - 0x32, 0x38, 0x31, 0x34, 0x32, 0x33, 0x34, 0x33, 0x5A, 0x18, 0x0F, 0x39, 0x39, 0x39, 0x39, 0x31, 0x32, 0x33, 0x31, - 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5A, 0x30, 0x1F, 0x31, 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, - 0x14, 0x4D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x50, 0x41, 0x41, 0x20, 0x46, 0x46, - 0x46, 0x31, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, - 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x1B, 0x98, 0xAC, 0x5B, 0xBC, 0x11, 0xDC, 0x6A, 0x17, - 0x55, 0xA0, 0x5B, 0x0A, 0xC5, 0xE1, 0x6B, 0xA0, 0x2C, 0x46, 0xEE, 0x6F, 0xC2, 0xBB, 0xE7, 0x6F, 0xF7, 0xCF, 0x6C, - 0xA7, 0xAA, 0x4E, 0x9F, 0xD1, 0xD7, 0x98, 0xDC, 0xBE, 0xFB, 0x4F, 0xEA, 0xE2, 0x25, 0xD3, 0x77, 0x3C, 0x91, 0x34, - 0x8C, 0xC2, 0x6D, 0x49, 0x31, 0x31, 0xE3, 0x09, 0x63, 0x2D, 0x5E, 0x9E, 0xF3, 0x1D, 0x12, 0xDE, 0x93, 0xA3, 0x63, - 0x30, 0x61, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, - 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1D, 0x06, - 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xEF, 0x18, 0xE0, 0xEC, 0xD4, 0x66, 0x04, 0x34, 0xDF, 0x0D, 0xBC, - 0x91, 0x1E, 0xD4, 0x52, 0x16, 0x99, 0x66, 0x83, 0x9F, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, - 0x16, 0x80, 0x14, 0xEF, 0x18, 0xE0, 0xEC, 0xD4, 0x66, 0x04, 0x34, 0xDF, 0x0D, 0xBC, 0x91, 0x1E, 0xD4, 0x52, 0x16, - 0x99, 0x66, 0x83, 0x9F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, - 0x30, 0x45, 0x02, 0x21, 0x00, 0xA7, 0xFA, 0x5F, 0xA7, 0x66, 0xFF, 0xF7, 0xB5, 0xFD, 0x15, 0x8C, 0xD3, 0x4F, 0x62, - 0x5D, 0x48, 0x91, 0x20, 0x0E, 0x05, 0x85, 0x0E, 0xF1, 0x25, 0xF6, 0xDE, 0xE7, 0x56, 0x54, 0xF9, 0x97, 0x36, 0x02, - 0x20, 0x23, 0xB5, 0x1B, 0x6E, 0x42, 0x53, 0x28, 0x28, 0xDB, 0x09, 0x92, 0x03, 0x37, 0x05, 0x0D, 0x70, 0xF0, 0xB6, - 0xB7, 0x2C, 0xCD, 0x3C, 0xB7, 0x81, 0xE6, 0x71, 0xAC, 0x22, 0x5D, 0xF5, 0x47, 0x2B }, - { 0xEF, 0x18, 0xE0, 0xEC, 0xD4, 0x66, 0x04, 0x34, 0xDF, 0x0D, - 0xBC, 0x91, 0x1E, 0xD4, 0x52, 0x16, 0x99, 0x66, 0x83, 0x9F } }, - { /* - credentials/test/attestation/Chip-Test-PAA-FFF2-Cert.pem - -----BEGIN CERTIFICATE----- - MIIBnTCCAUKgAwIBAgIIA5KnZVo+bHcwCgYIKoZIzj0EAwIwHzEdMBsGA1UEAwwU - TWF0dGVyIFRlc3QgUEFBIEZGRjIwIBcNMjEwNjI4MTQyMzQzWhgPOTk5OTEyMzEy - MzU5NTlaMB8xHTAbBgNVBAMMFE1hdHRlciBUZXN0IFBBQSBGRkYyMFkwEwYHKoZI - zj0CAQYIKoZIzj0DAQcDQgAEdW4YkvnpULAOlQqilfM1sEhLh20i4m+WZZLKweUQ - 1f6Zsx1cmIgWeorWUDd+dRD7dYI8fluYuMAG7F8Gz66FSqNmMGQwEgYDVR0TAQH/ - BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFOfv6sMzXF/Qw+Y0 - Up8WcEbEvKVcMB8GA1UdIwQYMBaAFOfv6sMzXF/Qw+Y0Up8WcEbEvKVcMAoGCCqG - SM49BAMCA0kAMEYCIQCSUQ0dYCFfARvaLqeV/ssklO+QppeHrQr8IGxhjAnMUgIh - AKA2sK+D40VcCTi5S/9HdRlyuNy+cZyfYbVW7LTqF8xX - -----END CERTIFICATE----- - */ - { 0x30, 0x82, 0x01, 0x9D, 0x30, 0x82, 0x01, 0x42, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x03, 0x92, 0xA7, 0x65, - 0x5A, 0x3E, 0x6C, 0x77, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x1F, 0x31, - 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x14, 0x4D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x54, 0x65, - 0x73, 0x74, 0x20, 0x50, 0x41, 0x41, 0x20, 0x46, 0x46, 0x46, 0x32, 0x30, 0x20, 0x17, 0x0D, 0x32, 0x31, 0x30, 0x36, - 0x32, 0x38, 0x31, 0x34, 0x32, 0x33, 0x34, 0x33, 0x5A, 0x18, 0x0F, 0x39, 0x39, 0x39, 0x39, 0x31, 0x32, 0x33, 0x31, - 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5A, 0x30, 0x1F, 0x31, 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, - 0x14, 0x4D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x50, 0x41, 0x41, 0x20, 0x46, 0x46, - 0x46, 0x32, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, - 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x75, 0x6E, 0x18, 0x92, 0xF9, 0xE9, 0x50, 0xB0, 0x0E, - 0x95, 0x0A, 0xA2, 0x95, 0xF3, 0x35, 0xB0, 0x48, 0x4B, 0x87, 0x6D, 0x22, 0xE2, 0x6F, 0x96, 0x65, 0x92, 0xCA, 0xC1, - 0xE5, 0x10, 0xD5, 0xFE, 0x99, 0xB3, 0x1D, 0x5C, 0x98, 0x88, 0x16, 0x7A, 0x8A, 0xD6, 0x50, 0x37, 0x7E, 0x75, 0x10, - 0xFB, 0x75, 0x82, 0x3C, 0x7E, 0x5B, 0x98, 0xB8, 0xC0, 0x06, 0xEC, 0x5F, 0x06, 0xCF, 0xAE, 0x85, 0x4A, 0xA3, 0x66, - 0x30, 0x64, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, - 0x02, 0x01, 0x01, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, - 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xE7, 0xEF, 0xEA, 0xC3, 0x33, 0x5C, 0x5F, 0xD0, - 0xC3, 0xE6, 0x34, 0x52, 0x9F, 0x16, 0x70, 0x46, 0xC4, 0xBC, 0xA5, 0x5C, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, - 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xE7, 0xEF, 0xEA, 0xC3, 0x33, 0x5C, 0x5F, 0xD0, 0xC3, 0xE6, 0x34, 0x52, 0x9F, - 0x16, 0x70, 0x46, 0xC4, 0xBC, 0xA5, 0x5C, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, - 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x92, 0x51, 0x0D, 0x1D, 0x60, 0x21, 0x5F, 0x01, 0x1B, 0xDA, 0x2E, - 0xA7, 0x95, 0xFE, 0xCB, 0x24, 0x94, 0xEF, 0x90, 0xA6, 0x97, 0x87, 0xAD, 0x0A, 0xFC, 0x20, 0x6C, 0x61, 0x8C, 0x09, - 0xCC, 0x52, 0x02, 0x21, 0x00, 0xA0, 0x36, 0xB0, 0xAF, 0x83, 0xE3, 0x45, 0x5C, 0x09, 0x38, 0xB9, 0x4B, 0xFF, 0x47, - 0x75, 0x19, 0x72, 0xB8, 0xDC, 0xBE, 0x71, 0x9C, 0x9F, 0x61, 0xB5, 0x56, 0xEC, 0xB4, 0xEA, 0x17, 0xCC, 0x57 }, - { 0xE7, 0xEF, 0xEA, 0xC3, 0x33, 0x5C, 0x5F, 0xD0, 0xC3, 0xE6, - 0x34, 0x52, 0x9F, 0x16, 0x70, 0x46, 0xC4, 0xBC, 0xA5, 0x5C } }, - }; +/* +credentials/test/attestation/Chip-Test-PAA-FFF1-Cert.pem +-----BEGIN CERTIFICATE----- +MIIBmTCCAT+gAwIBAgIIaDhPq7kZ/N8wCgYIKoZIzj0EAwIwHzEdMBsGA1UEAwwU +TWF0dGVyIFRlc3QgUEFBIEZGRjEwIBcNMjEwNjI4MTQyMzQzWhgPOTk5OTEyMzEy +MzU5NTlaMB8xHTAbBgNVBAMMFE1hdHRlciBUZXN0IFBBQSBGRkYxMFkwEwYHKoZI +zj0CAQYIKoZIzj0DAQcDQgAEG5isW7wR3GoXVaBbCsXha6AsRu5vwrvnb/fPbKeq +Tp/R15jcvvtP6uIl03c8kTSMwm1JMTHjCWMtXp7zHRLek6NjMGEwDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFO8Y4OzUZgQ03w28kR7U +UhaZZoOfMB8GA1UdIwQYMBaAFO8Y4OzUZgQ03w28kR7UUhaZZoOfMAoGCCqGSM49 +BAMCA0gAMEUCIQCn+l+nZv/3tf0VjNNPYl1IkSAOBYUO8SX23udWVPmXNgIgI7Ub +bkJTKCjbCZIDNwUNcPC2tyzNPLeB5nGsIl31Rys= +-----END CERTIFICATE----- +*/ +const uint8_t kChipTestPaaFff1[] = { + 0x30, 0x82, 0x01, 0x99, 0x30, 0x82, 0x01, 0x3F, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x68, 0x38, 0x4F, 0xAB, 0xB9, 0x19, + 0xFC, 0xDF, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x1F, 0x31, 0x1D, 0x30, 0x1B, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x0C, 0x14, 0x4D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x50, 0x41, 0x41, + 0x20, 0x46, 0x46, 0x46, 0x31, 0x30, 0x20, 0x17, 0x0D, 0x32, 0x31, 0x30, 0x36, 0x32, 0x38, 0x31, 0x34, 0x32, 0x33, 0x34, 0x33, + 0x5A, 0x18, 0x0F, 0x39, 0x39, 0x39, 0x39, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5A, 0x30, 0x1F, 0x31, + 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x14, 0x4D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x54, 0x65, 0x73, 0x74, + 0x20, 0x50, 0x41, 0x41, 0x20, 0x46, 0x46, 0x46, 0x31, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, + 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x1B, 0x98, 0xAC, 0x5B, 0xBC, 0x11, + 0xDC, 0x6A, 0x17, 0x55, 0xA0, 0x5B, 0x0A, 0xC5, 0xE1, 0x6B, 0xA0, 0x2C, 0x46, 0xEE, 0x6F, 0xC2, 0xBB, 0xE7, 0x6F, 0xF7, 0xCF, + 0x6C, 0xA7, 0xAA, 0x4E, 0x9F, 0xD1, 0xD7, 0x98, 0xDC, 0xBE, 0xFB, 0x4F, 0xEA, 0xE2, 0x25, 0xD3, 0x77, 0x3C, 0x91, 0x34, 0x8C, + 0xC2, 0x6D, 0x49, 0x31, 0x31, 0xE3, 0x09, 0x63, 0x2D, 0x5E, 0x9E, 0xF3, 0x1D, 0x12, 0xDE, 0x93, 0xA3, 0x63, 0x30, 0x61, 0x30, + 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x0E, 0x06, 0x03, 0x55, + 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, + 0x14, 0xEF, 0x18, 0xE0, 0xEC, 0xD4, 0x66, 0x04, 0x34, 0xDF, 0x0D, 0xBC, 0x91, 0x1E, 0xD4, 0x52, 0x16, 0x99, 0x66, 0x83, 0x9F, + 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xEF, 0x18, 0xE0, 0xEC, 0xD4, 0x66, 0x04, 0x34, + 0xDF, 0x0D, 0xBC, 0x91, 0x1E, 0xD4, 0x52, 0x16, 0x99, 0x66, 0x83, 0x9F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, + 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0xA7, 0xFA, 0x5F, 0xA7, 0x66, 0xFF, 0xF7, 0xB5, 0xFD, 0x15, + 0x8C, 0xD3, 0x4F, 0x62, 0x5D, 0x48, 0x91, 0x20, 0x0E, 0x05, 0x85, 0x0E, 0xF1, 0x25, 0xF6, 0xDE, 0xE7, 0x56, 0x54, 0xF9, 0x97, + 0x36, 0x02, 0x20, 0x23, 0xB5, 0x1B, 0x6E, 0x42, 0x53, 0x28, 0x28, 0xDB, 0x09, 0x92, 0x03, 0x37, 0x05, 0x0D, 0x70, 0xF0, 0xB6, + 0xB7, 0x2C, 0xCD, 0x3C, 0xB7, 0x81, 0xE6, 0x71, 0xAC, 0x22, 0x5D, 0xF5, 0x47, 0x2B +}; - size_t paaLookupTableIdx; - for (paaLookupTableIdx = 0; paaLookupTableIdx < ArraySize(sPAALookupTable); ++paaLookupTableIdx) - { - if (skid.data_equal(ByteSpan(sPAALookupTable[paaLookupTableIdx].mSKID))) - { - break; - } - } +/* +credentials/test/attestation/Chip-Test-PAA-FFF2-Cert.pem +-----BEGIN CERTIFICATE----- +MIIBnTCCAUKgAwIBAgIIA5KnZVo+bHcwCgYIKoZIzj0EAwIwHzEdMBsGA1UEAwwU +TWF0dGVyIFRlc3QgUEFBIEZGRjIwIBcNMjEwNjI4MTQyMzQzWhgPOTk5OTEyMzEy +MzU5NTlaMB8xHTAbBgNVBAMMFE1hdHRlciBUZXN0IFBBQSBGRkYyMFkwEwYHKoZI +zj0CAQYIKoZIzj0DAQcDQgAEdW4YkvnpULAOlQqilfM1sEhLh20i4m+WZZLKweUQ +1f6Zsx1cmIgWeorWUDd+dRD7dYI8fluYuMAG7F8Gz66FSqNmMGQwEgYDVR0TAQH/ +BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFOfv6sMzXF/Qw+Y0 +Up8WcEbEvKVcMB8GA1UdIwQYMBaAFOfv6sMzXF/Qw+Y0Up8WcEbEvKVcMAoGCCqG +SM49BAMCA0kAMEYCIQCSUQ0dYCFfARvaLqeV/ssklO+QppeHrQr8IGxhjAnMUgIh +AKA2sK+D40VcCTi5S/9HdRlyuNy+cZyfYbVW7LTqF8xX +-----END CERTIFICATE----- +*/ +const uint8_t kChipTestPaaFff2[] = { + 0x30, 0x82, 0x01, 0x9D, 0x30, 0x82, 0x01, 0x42, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x03, 0x92, 0xA7, 0x65, 0x5A, 0x3E, + 0x6C, 0x77, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x1F, 0x31, 0x1D, 0x30, 0x1B, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x0C, 0x14, 0x4D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x50, 0x41, 0x41, + 0x20, 0x46, 0x46, 0x46, 0x32, 0x30, 0x20, 0x17, 0x0D, 0x32, 0x31, 0x30, 0x36, 0x32, 0x38, 0x31, 0x34, 0x32, 0x33, 0x34, 0x33, + 0x5A, 0x18, 0x0F, 0x39, 0x39, 0x39, 0x39, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5A, 0x30, 0x1F, 0x31, + 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x14, 0x4D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x54, 0x65, 0x73, 0x74, + 0x20, 0x50, 0x41, 0x41, 0x20, 0x46, 0x46, 0x46, 0x32, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, + 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x75, 0x6E, 0x18, 0x92, 0xF9, 0xE9, + 0x50, 0xB0, 0x0E, 0x95, 0x0A, 0xA2, 0x95, 0xF3, 0x35, 0xB0, 0x48, 0x4B, 0x87, 0x6D, 0x22, 0xE2, 0x6F, 0x96, 0x65, 0x92, 0xCA, + 0xC1, 0xE5, 0x10, 0xD5, 0xFE, 0x99, 0xB3, 0x1D, 0x5C, 0x98, 0x88, 0x16, 0x7A, 0x8A, 0xD6, 0x50, 0x37, 0x7E, 0x75, 0x10, 0xFB, + 0x75, 0x82, 0x3C, 0x7E, 0x5B, 0x98, 0xB8, 0xC0, 0x06, 0xEC, 0x5F, 0x06, 0xCF, 0xAE, 0x85, 0x4A, 0xA3, 0x66, 0x30, 0x64, 0x30, + 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x01, 0x30, 0x0E, + 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, + 0x04, 0x16, 0x04, 0x14, 0xE7, 0xEF, 0xEA, 0xC3, 0x33, 0x5C, 0x5F, 0xD0, 0xC3, 0xE6, 0x34, 0x52, 0x9F, 0x16, 0x70, 0x46, 0xC4, + 0xBC, 0xA5, 0x5C, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xE7, 0xEF, 0xEA, 0xC3, 0x33, + 0x5C, 0x5F, 0xD0, 0xC3, 0xE6, 0x34, 0x52, 0x9F, 0x16, 0x70, 0x46, 0xC4, 0xBC, 0xA5, 0x5C, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, + 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x92, 0x51, 0x0D, 0x1D, 0x60, 0x21, 0x5F, + 0x01, 0x1B, 0xDA, 0x2E, 0xA7, 0x95, 0xFE, 0xCB, 0x24, 0x94, 0xEF, 0x90, 0xA6, 0x97, 0x87, 0xAD, 0x0A, 0xFC, 0x20, 0x6C, 0x61, + 0x8C, 0x09, 0xCC, 0x52, 0x02, 0x21, 0x00, 0xA0, 0x36, 0xB0, 0xAF, 0x83, 0xE3, 0x45, 0x5C, 0x09, 0x38, 0xB9, 0x4B, 0xFF, 0x47, + 0x75, 0x19, 0x72, 0xB8, 0xDC, 0xBE, 0x71, 0x9C, 0x9F, 0x61, 0xB5, 0x56, 0xEC, 0xB4, 0xEA, 0x17, 0xCC, 0x57 +}; - VerifyOrReturnError(paaLookupTableIdx < ArraySize(sPAALookupTable), CHIP_ERROR_INVALID_ARGUMENT); +const ByteSpan kTestPaaRoots[] = { + ByteSpan{ kChipTestPaaFff1 }, + ByteSpan{ kChipTestPaaFff2 }, +}; - return CopySpanToMutableSpan(ByteSpan{ sPAALookupTable[paaLookupTableIdx].mPAACertificate }, outDacBuffer); -} +const ArrayAttestationTrustStore kTestAttestationTrustStore{ &kTestPaaRoots[0], ArraySize(kTestPaaRoots) }; +/** + * @brief Look-up of well-known keys used for CD signing by CSA. + * + * Current version uses only test key/cert provided in spec. + */ CHIP_ERROR GetCertificationDeclarationCertificate(const ByteSpan & skid, MutableByteSpan & outCertificate) { struct CertChainLookupTable { const uint8_t mCertificate[kMax_x509_Certificate_Length]; - const uint8_t mSKID[kKeyIdentifierLength]; + const uint8_t mSKID[Crypto::kSubjectKeyIdentifierLength]; }; static CertChainLookupTable @@ -191,6 +175,8 @@ CHIP_ERROR GetCertificationDeclarationCertificate(const ByteSpan & skid, Mutable class DefaultDACVerifier : public DeviceAttestationVerifier { public: + DefaultDACVerifier(const AttestationTrustStore * paaRootStore) : mAttestationTrustStore(paaRootStore) {} + AttestationVerificationResult VerifyAttestationInformation(const ByteSpan & attestationInfoBuffer, const ByteSpan & attestationChallengeBuffer, const ByteSpan & attestationSignatureBuffer, @@ -203,6 +189,11 @@ class DefaultDACVerifier : public DeviceAttestationVerifier AttestationVerificationResult ValidateCertificateDeclarationPayload(const ByteSpan & certDeclBuffer, const ByteSpan & firmwareInfo, const DeviceInfoForAttestation & deviceInfo) override; + +protected: + DefaultDACVerifier() {} + + const AttestationTrustStore * mAttestationTrustStore; }; AttestationVerificationResult DefaultDACVerifier::VerifyAttestationInformation(const ByteSpan & attestationInfoBuffer, @@ -246,7 +237,7 @@ AttestationVerificationResult DefaultDACVerifier::VerifyAttestationInformation(c deviceSignature) == CHIP_NO_ERROR, AttestationVerificationResult::kAttestationSignatureInvalid); - uint8_t akidBuf[Credentials::kKeyIdentifierLength]; + uint8_t akidBuf[Crypto::kAuthorityKeyIdentifierLength]; MutableByteSpan akid(akidBuf); ExtractAKIDFromX509Cert(paiCertDerBuffer, akid); @@ -254,7 +245,7 @@ AttestationVerificationResult DefaultDACVerifier::VerifyAttestationInformation(c chip::Platform::ScopedMemoryBuffer paaCert; VerifyOrReturnError(paaCert.Alloc(paaCertAllocatedLen), AttestationVerificationResult::kNoMemory); MutableByteSpan paa(paaCert.Get(), paaCertAllocatedLen); - VerifyOrReturnError(GetProductAttestationAuthorityCert(akid, paa) == CHIP_NO_ERROR, + VerifyOrReturnError(mAttestationTrustStore->GetProductAttestationAuthorityCert(akid, paa) == CHIP_NO_ERROR, AttestationVerificationResult::kPaaNotFound); VerifyOrReturnError(ValidateCertificateChain(paa.data(), paa.size(), paiCertDerBuffer.data(), paiCertDerBuffer.size(), @@ -279,9 +270,9 @@ AttestationVerificationResult DefaultDACVerifier::VerifyAttestationInformation(c ByteSpan firmwareInfoSpan; DeviceAttestationVendorReservedDeconstructor vendorReserved; - VerifyOrReturnError(DeconstructAttestationElements(attestationInfoBuffer, certificationDeclarationSpan, attestationNonceSpan, - timestampDeconstructed, firmwareInfoSpan, vendorReserved) == CHIP_NO_ERROR, - AttestationVerificationResult::kAttestationElementsMalformed); + CHIP_ERROR status = DeconstructAttestationElements(attestationInfoBuffer, certificationDeclarationSpan, attestationNonceSpan, + timestampDeconstructed, firmwareInfoSpan, vendorReserved); + VerifyOrReturnError(status == CHIP_NO_ERROR, AttestationVerificationResult::kAttestationElementsMalformed); // Verify that Nonce matches with what we sent VerifyOrReturnError(attestationNonceSpan.data_equal(attestationNonce), @@ -397,9 +388,14 @@ AttestationVerificationResult DefaultDACVerifier::ValidateCertificateDeclaration } // namespace -DeviceAttestationVerifier * GetDefaultDACVerifier() +const AttestationTrustStore * GetTestAttestationTrustStore() +{ + return &kTestAttestationTrustStore; +} + +DeviceAttestationVerifier * GetDefaultDACVerifier(const AttestationTrustStore * paaRootStore) { - static DefaultDACVerifier defaultDACVerifier; + static DefaultDACVerifier defaultDACVerifier{ paaRootStore }; return &defaultDACVerifier; } diff --git a/src/credentials/examples/DefaultDeviceAttestationVerifier.h b/src/credentials/examples/DefaultDeviceAttestationVerifier.h index aad200fdd3e434..4198e1c147348b 100644 --- a/src/credentials/examples/DefaultDeviceAttestationVerifier.h +++ b/src/credentials/examples/DefaultDeviceAttestationVerifier.h @@ -21,14 +21,30 @@ namespace chip { namespace Credentials { +/** + * @brief Get implementation of a PAA root store containing a basic set of static PAA roots + * sufficient for *testing* only. + * + * WARNING: The PAA list known to this PAA root store is a reduced subset that will likely + * cause users of it to fail attestation procedure in some cases. This is provided + * to support tests and examples, not to be used by real commissioners, as it + * contains several test roots which are not trustworthy for certified product usage. + * + * @returns a singleton AttestationTrustStore that contains some well-known PAA test root certs. + */ +const AttestationTrustStore * GetTestAttestationTrustStore(); + /** * @brief Get implementation of a sample DAC verifier to validate device * attestation procedure. * - * @returns a singleton DeviceAttestationVerifier that relies on no - * storage abstractions. + * @param[in] paaRootStore Pointer to the AttestationTrustStore instance to be used by implementation + * of default DeviceAttestationVerifier. Caller must ensure storage is + * always available while the DeviceAttestationVerifier could be used. + * + * @returns a singleton DeviceAttestationVerifier that satisfies basic device attestation procedure requirements. */ -DeviceAttestationVerifier * GetDefaultDACVerifier(); +DeviceAttestationVerifier * GetDefaultDACVerifier(const AttestationTrustStore * paaRootStore); } // namespace Credentials } // namespace chip diff --git a/src/credentials/tests/TestCertificationDeclaration.cpp b/src/credentials/tests/TestCertificationDeclaration.cpp index 12e49518de3e8f..3d15f39f2ea02e 100644 --- a/src/credentials/tests/TestCertificationDeclaration.cpp +++ b/src/credentials/tests/TestCertificationDeclaration.cpp @@ -247,7 +247,7 @@ static void TestCD_CMSSignAndVerify(nlTestSuite * inSuite, void * inContext) { ByteSpan cdContentIn(sTestCMS_CDContent01); ByteSpan cdContentOut; - uint8_t signerKeyIdBuf[kKeyIdentifierLength]; + uint8_t signerKeyIdBuf[Crypto::kSubjectKeyIdentifierLength]; MutableByteSpan signerKeyId(signerKeyIdBuf); uint8_t signedMessageBuf[kMaxCMSSignedCDMessage]; MutableByteSpan signedMessage(signedMessageBuf); @@ -297,7 +297,7 @@ static void TestCD_CMSVerifyAndExtract(nlTestSuite * inSuite, void * inContext) NL_TEST_ASSERT(inSuite, testCase.cdContent.data_equal(cdContentOut)); // Test CMS_ExtractKeyId() - uint8_t signerKeyIdBuf[kKeyIdentifierLength]; + uint8_t signerKeyIdBuf[Crypto::kSubjectKeyIdentifierLength]; MutableByteSpan signerKeyId(signerKeyIdBuf); NL_TEST_ASSERT(inSuite, ExtractSKIDFromX509Cert(testCase.signerCert, signerKeyId) == CHIP_NO_ERROR); diff --git a/src/credentials/tests/TestDeviceAttestationCredentials.cpp b/src/credentials/tests/TestDeviceAttestationCredentials.cpp index f706582ddc087e..ea2de206212702 100644 --- a/src/credentials/tests/TestDeviceAttestationCredentials.cpp +++ b/src/credentials/tests/TestDeviceAttestationCredentials.cpp @@ -195,8 +195,7 @@ static void TestDACVerifierExample_AttestationInfoVerification(nlTestSuite * inS default_verifier->VerifyAttestationInformation(ByteSpan(), ByteSpan(), ByteSpan(), ByteSpan(), ByteSpan(), ByteSpan()); NL_TEST_ASSERT(inSuite, attestation_result == AttestationVerificationResult::kNotImplemented); - // Replace default verifier with example verifier - DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier(); + DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier(GetTestAttestationTrustStore()); NL_TEST_ASSERT(inSuite, example_dac_verifier != nullptr); NL_TEST_ASSERT(inSuite, default_verifier != example_dac_verifier); @@ -252,7 +251,7 @@ static void TestDACVerifierExample_CertDeclarationVerification(nlTestSuite * inS CHIP_ERROR err = CHIP_NO_ERROR; // Replace default verifier with example verifier - DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier(); + DeviceAttestationVerifier * example_dac_verifier = GetDefaultDACVerifier(GetTestAttestationTrustStore()); NL_TEST_ASSERT(inSuite, example_dac_verifier != nullptr); SetDeviceAttestationVerifier(example_dac_verifier); @@ -295,6 +294,80 @@ static void TestDACVerifierExample_CertDeclarationVerification(nlTestSuite * inS NL_TEST_ASSERT(inSuite, attestation_result == AttestationVerificationResult::kSuccess); } +static void TestAttestationTrustStore(nlTestSuite * inSuite, void * inContext) +{ + uint8_t kPaaFff1Start[] = { 0x30, 0x82, 0x01, 0x99, 0x30, 0x82, 0x01, 0x3F, 0xA0, 0x03, 0x02, 0x01, 0x02, + 0x02, 0x08, 0x68, 0x38, 0x4F, 0xAB, 0xB9, 0x19, 0xFC, 0xDF, 0x30, 0x0A, 0x06, + 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x1F, 0x31 }; + uint8_t kPaaFff1Skid[] = { 0xEF, 0x18, 0xE0, 0xEC, 0xD4, 0x66, 0x04, 0x34, 0xDF, 0x0D, + 0xBC, 0x91, 0x1E, 0xD4, 0x52, 0x16, 0x99, 0x66, 0x83, 0x9F }; + + uint8_t kPaaFff2Start[] = { 0x30, 0x82, 0x01, 0x9D, 0x30, 0x82, 0x01, 0x42, 0xA0, 0x03, 0x02, 0x01, 0x02, + 0x02, 0x08, 0x03, 0x92, 0xA7, 0x65, 0x5A, 0x3E, 0x6C, 0x77, 0x30, 0x0A, 0x06, + 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x1F, 0x31 }; + uint8_t kPaaFff2Skid[] = { 0xE7, 0xEF, 0xEA, 0xC3, 0x33, 0x5C, 0x5F, 0xD0, 0xC3, 0xE6, + 0x34, 0x52, 0x9F, 0x16, 0x70, 0x46, 0xC4, 0xBC, 0xA5, 0x5C }; + + // SKID to trigger CHIP_ERROR_INVALID_ARGUMENT + uint8_t kPaaBadSkid1[] = { 0xE7, 0xEF, 0xEA, 0xC3, 0x33, 0x5C, 0xD0, 0xC3, 0xE6, 0x34, + 0x52, 0x9F, 0x16, 0x70, 0x46, 0xC4, 0xBC, 0xA5, 0x5C }; + ByteSpan kPaaBadSkidSpan1{ kPaaBadSkid1 }; + + // SKID to trigger CHIP_ERROR_INVALID_ARGUMENT + ByteSpan kPaaBadSkidSpan2{ nullptr, sizeof(kPaaFff2Skid) }; + + // SKID to trigger CHIP_ERROR_CA_CERT_NOT_FOUND + uint8_t kPaaGoodSkidNotPresent[] = { 0xE7, 0xEF, 0xEA, 0xC3, 0x33, 0x5C, 0x5F, 0xD0, 0xC3, 0xE6, + 0x34, 0x52, 0x9F, 0x16, 0x70, 0xFF, 0xFF, 0xBC, 0xA5, 0x5C }; + + struct TestCase + { + ByteSpan skidSpan; + ByteSpan startSpan; + CHIP_ERROR expectedResult; + }; + + const TestCase kTestCases[] = { + { .skidSpan = ByteSpan{ kPaaFff1Skid }, .startSpan = ByteSpan{ kPaaFff1Start }, .expectedResult = CHIP_NO_ERROR }, + { .skidSpan = ByteSpan{ kPaaFff2Skid }, .startSpan = ByteSpan{ kPaaFff2Start }, .expectedResult = CHIP_NO_ERROR }, + { .skidSpan = ByteSpan{ kPaaFff2Skid }, + .startSpan = ByteSpan{ kPaaFff2Start }, + .expectedResult = CHIP_ERROR_BUFFER_TOO_SMALL }, + { .skidSpan = kPaaBadSkidSpan1, .startSpan = ByteSpan{}, .expectedResult = CHIP_ERROR_INVALID_ARGUMENT }, + { .skidSpan = kPaaBadSkidSpan2, .startSpan = ByteSpan{}, .expectedResult = CHIP_ERROR_INVALID_ARGUMENT }, + { .skidSpan = ByteSpan{ kPaaGoodSkidNotPresent }, .startSpan = ByteSpan{}, .expectedResult = CHIP_ERROR_CA_CERT_NOT_FOUND }, + }; + + const AttestationTrustStore * testAttestationTrustStore = GetTestAttestationTrustStore(); + NL_TEST_ASSERT(inSuite, testAttestationTrustStore != nullptr); + + size_t testCaseIdx = 0; + for (const auto & testCase : kTestCases) + { + uint8_t buf[kMaxDERCertLength]; + MutableByteSpan paaCertSpan{ buf }; + if (testCase.expectedResult == CHIP_ERROR_BUFFER_TOO_SMALL) + { + // Make the output much too small if checking for size handling + paaCertSpan = paaCertSpan.SubSpan(0, 16); + } + + // Try to obtain cert + CHIP_ERROR result = testAttestationTrustStore->GetProductAttestationAuthorityCert(testCase.skidSpan, paaCertSpan); + NL_TEST_ASSERT(inSuite, result == testCase.expectedResult); + + // In success cases, make sure the start of the cert matches expectation. Not using full certs + // to avoid repeating the known constants here. + if (testCase.expectedResult == CHIP_NO_ERROR) + { + NL_TEST_ASSERT(inSuite, paaCertSpan.size() > testCase.startSpan.size()); + paaCertSpan = paaCertSpan.SubSpan(0, testCase.startSpan.size()); + NL_TEST_ASSERT(inSuite, paaCertSpan.data_equal(testCase.startSpan) == true); + } + ++testCaseIdx; + } +} + /** * Set up the test suite. */ @@ -326,6 +399,7 @@ int TestDeviceAttestation_Teardown(void * inContext) static const nlTest sTests[] = { NL_TEST_DEF("Test Example Device Attestation Credentials Providers", TestDACProvidersExample_Providers), NL_TEST_DEF("Test Example Device Attestation Signature", TestDACProvidersExample_Signature), + NL_TEST_DEF("Test the 'for testing' Paa Root Store", TestAttestationTrustStore), NL_TEST_DEF("Test Example Device Attestation Information Verification", TestDACVerifierExample_AttestationInfoVerification), NL_TEST_DEF("Test Example Device Attestation Certification Declaration Verification", TestDACVerifierExample_CertDeclarationVerification), NL_TEST_SENTINEL() diff --git a/src/crypto/CHIPCryptoPAL.h b/src/crypto/CHIPCryptoPAL.h index 1d55e72a060cbd..78a58be47eb604 100644 --- a/src/crypto/CHIPCryptoPAL.h +++ b/src/crypto/CHIPCryptoPAL.h @@ -46,6 +46,8 @@ constexpr size_t kP256_ECDSA_Signature_Length_Raw = (2 * kP256_FE_Length); constexpr size_t kP256_Point_Length = (2 * kP256_FE_Length + 1); constexpr size_t kSHA256_Hash_Length = 32; constexpr size_t kSHA1_Hash_Length = 20; +constexpr size_t kSubjectKeyIdentifierLength = kSHA1_Hash_Length; +constexpr size_t kAuthorityKeyIdentifierLength = kSHA1_Hash_Length; constexpr size_t CHIP_CRYPTO_GROUP_SIZE_BYTES = kP256_FE_Length; constexpr size_t CHIP_CRYPTO_PUBLIC_KEY_SIZE_BYTES = kP256_Point_Length; diff --git a/src/crypto/tests/CHIPCryptoPALTest.cpp b/src/crypto/tests/CHIPCryptoPALTest.cpp index df2a737913afd6..dc3989bec15880 100644 --- a/src/crypto/tests/CHIPCryptoPALTest.cpp +++ b/src/crypto/tests/CHIPCryptoPALTest.cpp @@ -1874,7 +1874,7 @@ static void TestSKID_x509Extraction(nlTestSuite * inSuite, void * inContext) HeapChecker heapChecker(inSuite); CHIP_ERROR err = CHIP_NO_ERROR; - uint8_t skidBuf[Credentials::kKeyIdentifierLength]; + uint8_t skidBuf[kSubjectKeyIdentifierLength]; MutableByteSpan skidOut(skidBuf); ByteSpan cert; @@ -1901,7 +1901,7 @@ static void TestAKID_x509Extraction(nlTestSuite * inSuite, void * inContext) HeapChecker heapChecker(inSuite); CHIP_ERROR err = CHIP_NO_ERROR; - uint8_t akidBuf[Credentials::kKeyIdentifierLength]; + uint8_t akidBuf[kAuthorityKeyIdentifierLength]; MutableByteSpan akidOut(akidBuf); ByteSpan cert; diff --git a/src/darwin/Framework/CHIP/CHIPDeviceController.mm b/src/darwin/Framework/CHIP/CHIPDeviceController.mm index 794d6ed7ccd24f..1986c664cdbcda 100644 --- a/src/darwin/Framework/CHIP/CHIPDeviceController.mm +++ b/src/darwin/Framework/CHIP/CHIPDeviceController.mm @@ -190,7 +190,9 @@ - (BOOL)startup:(_Nullable id)storageDelegate } // Initialize device attestation verifier - chip::Credentials::SetDeviceAttestationVerifier(chip::Credentials::GetDefaultDACVerifier()); + // TODO: Replace testingRootStore with a AttestationTrustStore that has the necessary official PAA roots available + const chip::Credentials::AttestationTrustStore * testingRootStore = chip::Credentials::GetTestAttestationTrustStore(); + chip::Credentials::SetDeviceAttestationVerifier(chip::Credentials::GetDefaultDACVerifier(testingRootStore)); params.fabricStorage = _fabricStorage; commissionerParams.storageDelegate = _persistentStorageDelegateBridge; diff --git a/src/protocols/secure_channel/CASESession.h b/src/protocols/secure_channel/CASESession.h index a8bbadd3cf1b75..71cda76e5eabd7 100644 --- a/src/protocols/secure_channel/CASESession.h +++ b/src/protocols/secure_channel/CASESession.h @@ -47,7 +47,7 @@ namespace chip { constexpr uint16_t kSigmaParamRandomNumberSize = 32; -constexpr uint16_t kTrustedRootIdSize = Credentials::kKeyIdentifierLength; +constexpr uint16_t kTrustedRootIdSize = Crypto::kSubjectKeyIdentifierLength; constexpr uint16_t kMaxTrustedRootIds = 5; constexpr uint16_t kIPKSize = 16; From 1ee4c8d949d653e63af4a07f3e620348b28cea03 Mon Sep 17 00:00:00 2001 From: Marc Lepage <67919234+mlepage-google@users.noreply.github.com> Date: Sun, 28 Nov 2021 14:56:55 -0500 Subject: [PATCH 3/5] Disable python codegen for lists (#12300) * Disable python codegen for lists This code is not really used right now, doesn't work with nullable lists, and is blocking new clusters from using nullable lists. Disable for now to unblock, until it can be fixed or removed entirely. * Regen code Not strictly necessary (as only unused python code was removed for just the case of lists) but presubmits require it. * Restyle code * Change comment and removal syntax --- .../python/chip/clusters/CHIPClusters.cpp | 1480 ----------------- .../templates/python-CHIPClusters-cpp.zapt | 82 +- 2 files changed, 1 insertion(+), 1561 deletions(-) diff --git a/src/controller/python/chip/clusters/CHIPClusters.cpp b/src/controller/python/chip/clusters/CHIPClusters.cpp index 0974f520d5e662..ab532e0d847ed4 100644 --- a/src/controller/python/chip/clusters/CHIPClusters.cpp +++ b/src/controller/python/chip/clusters/CHIPClusters.cpp @@ -105,42 +105,6 @@ static void OnApplicationLauncherApplicationLauncherListListAttributeResponse(void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu16 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -152,46 +116,6 @@ static void OnAudioOutputAudioOutputListListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " index: %" PRIu8 ",", entry.index); - ChipLogProgress(Zcl, " outputType: %" PRIu8 ",", entry.outputType); - ChipLogProgress(Zcl, " name: %.*s,", static_cast(entry.name.size()), entry.name.data()); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -202,49 +126,6 @@ static void OnBridgedActionsActionListListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " ActionID: %" PRIu16 ",", entry.actionID); - ChipLogProgress(Zcl, " Name: %.*s,", static_cast(entry.name.size()), entry.name.data()); - ChipLogProgress(Zcl, " Type: %" PRIu8 ",", entry.type); - ChipLogProgress(Zcl, " EndpointListID: %" PRIu16 ",", entry.endpointListID); - ChipLogProgress(Zcl, " SupportedCommands: %" PRIu16 ",", entry.supportedCommands); - ChipLogProgress(Zcl, " Status: %" PRIu8 ",", entry.status); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -256,47 +137,6 @@ static void OnBridgedActionsEndpointListListAttributeResponse( const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " EndpointListID: %" PRIu16 ",", entry.endpointListID); - ChipLogProgress(Zcl, " Name: %.*s,", static_cast(entry.name.size()), entry.name.data()); - ChipLogProgress(Zcl, " Type: %" PRIu8 ",", entry.type); - ChipLogProgress(chipTool, " Endpoints: list member of struct element of list attribute printing not supported yet"); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -307,42 +147,6 @@ static void OnContentLauncherAcceptsHeaderListListAttributeResponse(void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %s,", ByteSpanToString(entry).c_str()); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -352,42 +156,6 @@ static void OnContentLauncherSupportedStreamingTypesListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu8 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -398,45 +166,6 @@ static void OnDescriptorDeviceListListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " type: %" PRIu32 ",", entry.type); - ChipLogProgress(Zcl, " revision: %" PRIu16 ",", entry.revision); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -446,42 +175,6 @@ chip::Callback::Callback gDescriptorD static void OnDescriptorServerListListAttributeResponse(void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu32 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -491,42 +184,6 @@ chip::Callback::Callback gDescriptorS static void OnDescriptorClientListListAttributeResponse(void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu32 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -536,42 +193,6 @@ chip::Callback::Callback gDescriptorC static void OnDescriptorPartsListListAttributeResponse(void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu16 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -582,45 +203,6 @@ static void OnFixedLabelLabelListListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " label: %.*s,", static_cast(entry.label.size()), entry.label.data()); - ChipLogProgress(Zcl, " value: %.*s,", static_cast(entry.value.size()), entry.value.data()); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -632,44 +214,6 @@ static void OnGeneralCommissioningBasicCommissioningInfoListListAttributeRespons const chip::app::DataModel::DecodableList< chip::app::Clusters::GeneralCommissioning::Structs::BasicCommissioningInfoType::DecodableType> & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " FailSafeExpiryLengthMs: %" PRIu32 ",", entry.failSafeExpiryLengthMs); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -682,49 +226,6 @@ static void OnGeneralDiagnosticsNetworkInterfacesListAttributeResponse( const chip::app::DataModel::DecodableList< chip::app::Clusters::GeneralDiagnostics::Structs::NetworkInterfaceType::DecodableType> & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " Name: %.*s,", static_cast(entry.name.size()), entry.name.data()); - ChipLogProgress(Zcl, " FabricConnected: %d,", entry.fabricConnected); - ChipLogProgress(Zcl, " OffPremiseServicesReachableIPv4: %d,", entry.offPremiseServicesReachableIPv4); - ChipLogProgress(Zcl, " OffPremiseServicesReachableIPv6: %d,", entry.offPremiseServicesReachableIPv6); - ChipLogProgress(Zcl, " HardwareAddress: %s,", ByteSpanToString(entry.hardwareAddress).c_str()); - ChipLogProgress(Zcl, " Type: %" PRIu8 ",", entry.type); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -734,42 +235,6 @@ chip::Callback::Callback & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu8 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -779,42 +244,6 @@ chip::Callback::Callback & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu8 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -824,42 +253,6 @@ chip::Callback::Callback & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu8 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -870,46 +263,6 @@ static void OnGroupKeyManagementGroupsListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " VendorId: %" PRIu16 ",", entry.vendorId); - ChipLogProgress(Zcl, " VendorGroupId: %" PRIu16 ",", entry.vendorGroupId); - ChipLogProgress(Zcl, " GroupKeySetIndex: %" PRIu16 ",", entry.groupKeySetIndex); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -920,48 +273,6 @@ static void OnGroupKeyManagementGroupKeysListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " VendorId: %" PRIu16 ",", entry.vendorId); - ChipLogProgress(Zcl, " GroupKeyIndex: %" PRIu16 ",", entry.groupKeyIndex); - ChipLogProgress(Zcl, " GroupKeyRoot: %s,", ByteSpanToString(entry.groupKeyRoot).c_str()); - ChipLogProgress(Zcl, " GroupKeyEpochStartTime: %" PRIu64 ",", entry.groupKeyEpochStartTime); - ChipLogProgress(Zcl, " GroupKeySecurityPolicy: %" PRIu8 ",", entry.groupKeySecurityPolicy); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -972,47 +283,6 @@ static void OnMediaInputMediaInputListListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " index: %" PRIu8 ",", entry.index); - ChipLogProgress(Zcl, " inputType: %" PRIu8 ",", entry.inputType); - ChipLogProgress(Zcl, " name: %.*s,", static_cast(entry.name.size()), entry.name.data()); - ChipLogProgress(Zcl, " description: %.*s,", static_cast(entry.description.size()), entry.description.data()); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1023,46 +293,6 @@ static void OnModeSelectSupportedModesListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " Label: %.*s,", static_cast(entry.label.size()), entry.label.data()); - ChipLogProgress(Zcl, " Mode: %" PRIu8 ",", entry.mode); - ChipLogProgress(Zcl, " SemanticTag: %" PRIu32 ",", entry.semanticTag); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1074,49 +304,6 @@ static void OnOperationalCredentialsFabricsListListAttributeResponse( const chip::app::DataModel::DecodableList< chip::app::Clusters::OperationalCredentials::Structs::FabricDescriptor::DecodableType> & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " FabricIndex: %" PRIu8 ",", entry.fabricIndex); - ChipLogProgress(Zcl, " RootPublicKey: %s,", ByteSpanToString(entry.rootPublicKey).c_str()); - ChipLogProgress(Zcl, " VendorId: %" PRIu16 ",", entry.vendorId); - ChipLogProgress(Zcl, " FabricId: %" PRIu64 ",", entry.fabricId); - ChipLogProgress(Zcl, " NodeId: %" PRIu64 ",", entry.nodeId); - ChipLogProgress(Zcl, " Label: %.*s,", static_cast(entry.label.size()), entry.label.data()); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1125,42 +312,6 @@ chip::Callback::Callback static void OnOperationalCredentialsTrustedRootCertificatesListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %s,", ByteSpanToString(entry).c_str()); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1171,42 +322,6 @@ chip::Callback::Callback & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu8 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1218,48 +333,6 @@ static void OnSoftwareDiagnosticsThreadMetricsListAttributeResponse( const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " Id: %" PRIu64 ",", entry.id); - ChipLogProgress(Zcl, " Name: %.*s,", static_cast(entry.name.size()), entry.name.data()); - ChipLogProgress(Zcl, " StackFreeCurrent: %" PRIu32 ",", entry.stackFreeCurrent); - ChipLogProgress(Zcl, " StackFreeMinimum: %" PRIu32 ",", entry.stackFreeMinimum); - ChipLogProgress(Zcl, " StackSize: %" PRIu32 ",", entry.stackSize); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1269,49 +342,6 @@ static void OnTvChannelTvChannelListListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " majorNumber: %" PRIu16 ",", entry.majorNumber); - ChipLogProgress(Zcl, " minorNumber: %" PRIu16 ",", entry.minorNumber); - ChipLogProgress(Zcl, " name: %.*s,", static_cast(entry.name.size()), entry.name.data()); - ChipLogProgress(Zcl, " callSign: %.*s,", static_cast(entry.callSign.size()), entry.callSign.data()); - ChipLogProgress(Zcl, " affiliateCallSign: %.*s,", static_cast(entry.affiliateCallSign.size()), - entry.affiliateCallSign.data()); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1323,45 +353,6 @@ static void OnTargetNavigatorTargetNavigatorListListAttributeResponse( const chip::app::DataModel::DecodableList< chip::app::Clusters::TargetNavigator::Structs::NavigateTargetTargetInfo::DecodableType> & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " identifier: %" PRIu8 ",", entry.identifier); - ChipLogProgress(Zcl, " name: %.*s,", static_cast(entry.name.size()), entry.name.data()); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1369,42 +360,6 @@ chip::Callback::Callback & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu8 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1414,42 +369,6 @@ chip::Callback::Callback gTestCluster static void OnTestClusterListOctetStringListAttributeResponse(void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %s,", ByteSpanToString(entry).c_str()); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1460,45 +379,6 @@ static void OnTestClusterListStructOctetStringListAttributeResponse( void * context, const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " fabricIndex: %" PRIu64 ",", entry.fabricIndex); - ChipLogProgress(Zcl, " operationalCert: %s,", ByteSpanToString(entry.operationalCert).c_str()); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1509,144 +389,6 @@ static void OnTestClusterListNullablesAndOptionalsStructListAttributeResponse( const chip::app::DataModel::DecodableList< chip::app::Clusters::TestCluster::Structs::NullablesAndOptionalsStruct::DecodableType> & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - if (entry.nullableInt.IsNull()) - { - ChipLogProgress(chipTool, " NullableInt: null"); - } - else - { - ChipLogProgress(Zcl, " NullableInt: %" PRIu16 ",", entry.nullableInt.Value()); - } - if (entry.optionalInt.HasValue()) - { - ChipLogProgress(Zcl, " OptionalInt: %" PRIu16 ",", entry.optionalInt.Value()); - } - if (entry.nullableOptionalInt.HasValue()) - { - if (entry.nullableOptionalInt.Value().IsNull()) - { - ChipLogProgress(chipTool, " NullableOptionalInt: null"); - } - else - { - ChipLogProgress(Zcl, " NullableOptionalInt: %" PRIu16 ",", entry.nullableOptionalInt.Value().Value()); - } - } - if (entry.nullableString.IsNull()) - { - ChipLogProgress(chipTool, " NullableString: null"); - } - else - { - ChipLogProgress(Zcl, " NullableString: %.*s,", static_cast(entry.nullableString.Value().size()), - entry.nullableString.Value().data()); - } - if (entry.optionalString.HasValue()) - { - ChipLogProgress(Zcl, " OptionalString: %.*s,", static_cast(entry.optionalString.Value().size()), - entry.optionalString.Value().data()); - } - if (entry.nullableOptionalString.HasValue()) - { - if (entry.nullableOptionalString.Value().IsNull()) - { - ChipLogProgress(chipTool, " NullableOptionalString: null"); - } - else - { - ChipLogProgress(Zcl, " NullableOptionalString: %.*s,", - static_cast(entry.nullableOptionalString.Value().Value().size()), - entry.nullableOptionalString.Value().Value().data()); - } - } - if (entry.nullableStruct.IsNull()) - { - ChipLogProgress(chipTool, " NullableStruct: null"); - } - else - { - ChipLogProgress(chipTool, - " NullableStruct: struct member of struct element of list attribute printing not supported yet"); - } - if (entry.optionalStruct.HasValue()) - { - ChipLogProgress(chipTool, - " OptionalStruct: struct member of struct element of list attribute printing not supported yet"); - } - if (entry.nullableOptionalStruct.HasValue()) - { - if (entry.nullableOptionalStruct.Value().IsNull()) - { - ChipLogProgress(chipTool, " NullableOptionalStruct: null"); - } - else - { - ChipLogProgress( - chipTool, - " NullableOptionalStruct: struct member of struct element of list attribute printing not supported yet"); - } - } - if (entry.nullableList.IsNull()) - { - ChipLogProgress(chipTool, " NullableList: null"); - } - else - { - ChipLogProgress(chipTool, " NullableList: list member of struct element of list attribute printing not supported yet"); - } - if (entry.optionalList.HasValue()) - { - ChipLogProgress(chipTool, " OptionalList: list member of struct element of list attribute printing not supported yet"); - } - if (entry.nullableOptionalList.HasValue()) - { - if (entry.nullableOptionalList.Value().IsNull()) - { - ChipLogProgress(chipTool, " NullableOptionalList: null"); - } - else - { - ChipLogProgress( - chipTool, " NullableOptionalList: list member of struct element of list attribute printing not supported yet"); - } - } - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1659,57 +401,6 @@ static void OnThreadNetworkDiagnosticsNeighborTableListListAttributeResponse( const chip::app::DataModel::DecodableList< chip::app::Clusters::ThreadNetworkDiagnostics::Structs::NeighborTable::DecodableType> & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " ExtAddress: %" PRIu64 ",", entry.extAddress); - ChipLogProgress(Zcl, " Age: %" PRIu32 ",", entry.age); - ChipLogProgress(Zcl, " Rloc16: %" PRIu16 ",", entry.rloc16); - ChipLogProgress(Zcl, " LinkFrameCounter: %" PRIu32 ",", entry.linkFrameCounter); - ChipLogProgress(Zcl, " MleFrameCounter: %" PRIu32 ",", entry.mleFrameCounter); - ChipLogProgress(Zcl, " LQI: %" PRIu8 ",", entry.lqi); - ChipLogProgress(Zcl, " AverageRssi: %" PRId8 ",", entry.averageRssi); - ChipLogProgress(Zcl, " LastRssi: %" PRId8 ",", entry.lastRssi); - ChipLogProgress(Zcl, " FrameErrorRate: %" PRIu8 ",", entry.frameErrorRate); - ChipLogProgress(Zcl, " MessageErrorRate: %" PRIu8 ",", entry.messageErrorRate); - ChipLogProgress(Zcl, " RxOnWhenIdle: %d,", entry.rxOnWhenIdle); - ChipLogProgress(Zcl, " FullThreadDevice: %d,", entry.fullThreadDevice); - ChipLogProgress(Zcl, " FullNetworkData: %d,", entry.fullNetworkData); - ChipLogProgress(Zcl, " IsChild: %d,", entry.isChild); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1722,53 +413,6 @@ static void OnThreadNetworkDiagnosticsRouteTableListListAttributeResponse( const chip::app::DataModel::DecodableList & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " ExtAddress: %" PRIu64 ",", entry.extAddress); - ChipLogProgress(Zcl, " Rloc16: %" PRIu16 ",", entry.rloc16); - ChipLogProgress(Zcl, " RouterId: %" PRIu8 ",", entry.routerId); - ChipLogProgress(Zcl, " NextHop: %" PRIu8 ",", entry.nextHop); - ChipLogProgress(Zcl, " PathCost: %" PRIu8 ",", entry.pathCost); - ChipLogProgress(Zcl, " LQIIn: %" PRIu8 ",", entry.LQIIn); - ChipLogProgress(Zcl, " LQIOut: %" PRIu8 ",", entry.LQIOut); - ChipLogProgress(Zcl, " Age: %" PRIu8 ",", entry.age); - ChipLogProgress(Zcl, " Allocated: %d,", entry.allocated); - ChipLogProgress(Zcl, " LinkEstablished: %d,", entry.linkEstablished); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1780,45 +424,6 @@ static void OnThreadNetworkDiagnosticsSecurityPolicyListAttributeResponse( const chip::app::DataModel::DecodableList< chip::app::Clusters::ThreadNetworkDiagnostics::Structs::SecurityPolicy::DecodableType> & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " RotationTime: %" PRIu16 ",", entry.rotationTime); - ChipLogProgress(Zcl, " Flags: %" PRIu16 ",", entry.flags); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1830,55 +435,6 @@ static void OnThreadNetworkDiagnosticsOperationalDatasetComponentsListAttributeR const chip::app::DataModel::DecodableList< chip::app::Clusters::ThreadNetworkDiagnostics::Structs::OperationalDatasetComponents::DecodableType> & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " {"); - ChipLogProgress(Zcl, " ActiveTimestampPresent: %d,", entry.activeTimestampPresent); - ChipLogProgress(Zcl, " PendingTimestampPresent: %d,", entry.pendingTimestampPresent); - ChipLogProgress(Zcl, " MasterKeyPresent: %d,", entry.masterKeyPresent); - ChipLogProgress(Zcl, " NetworkNamePresent: %d,", entry.networkNamePresent); - ChipLogProgress(Zcl, " ExtendedPanIdPresent: %d,", entry.extendedPanIdPresent); - ChipLogProgress(Zcl, " MeshLocalPrefixPresent: %d,", entry.meshLocalPrefixPresent); - ChipLogProgress(Zcl, " DelayPresent: %d,", entry.delayPresent); - ChipLogProgress(Zcl, " PanIdPresent: %d,", entry.panIdPresent); - ChipLogProgress(Zcl, " ChannelPresent: %d,", entry.channelPresent); - ChipLogProgress(Zcl, " PskcPresent: %d,", entry.pskcPresent); - ChipLogProgress(Zcl, " SecurityPolicyPresent: %d,", entry.securityPolicyPresent); - ChipLogProgress(Zcl, " ChannelMaskPresent: %d,", entry.channelMaskPresent); - ChipLogProgress(Zcl, " },"); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } @@ -1889,42 +445,6 @@ chip::Callback::Callback & list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - ChipLogProgress(Zcl, " %" PRIu8 ",", entry); -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } diff --git a/src/controller/python/templates/python-CHIPClusters-cpp.zapt b/src/controller/python/templates/python-CHIPClusters-cpp.zapt index 4fb2d50430cab3..5ba06ea7836f03 100644 --- a/src/controller/python/templates/python-CHIPClusters-cpp.zapt +++ b/src/controller/python/templates/python-CHIPClusters-cpp.zapt @@ -90,87 +90,7 @@ void OnAttributeResponse(void * /* context */, bool value) {{#if isList}} static void On{{asUpperCamelCase parent.name}}{{asUpperCamelCase name}}ListAttributeResponse(void * context, {{zapTypeToDecodableClusterObjectType type ns=parent.name isArgument=true}} list) { - size_t count = 0; - CHIP_ERROR err = list.ComputeSize(&count); - if (err != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - ChipLogProgress(Zcl, " attributeValue:%s", count > 0 ? "" : " []"); - - if (count > 0) - ChipLogProgress(Zcl, " ["); - - auto iter = list.begin(); - while (iter.Next()) - { -#if CHIP_PROGRESS_LOGGING - auto & entry = iter.GetValue(); - {{#if isStruct}} - ChipLogProgress(Zcl, " {"); - {{#chip_attribute_list_entryTypes}} - {{~#*inline "field"}}entry.{{asLowerCamelCase name}}{{#if isOptional}}.Value(){{/if}}{{/inline~}} - {{~#*inline "fieldValue"}}{{>field}}{{#if isNullable}}.Value(){{/if}}{{/inline~}} - {{#if isOptional}} - if (entry.{{asLowerCamelCase name}}.HasValue()) { - {{/if}} - {{#if isNullable}} - if ({{>field}}.IsNull()) { - ChipLogProgress(chipTool, " {{asSymbol label}}: null"); - } else { - {{/if}} - {{#if isArray}} - {{! TODO: Add support for printing list member of struct element of list attribute }} - ChipLogProgress(chipTool, " {{asSymbol label}}: list member of struct element of list attribute printing not supported yet"); - {{else if (isOctetString type)}} - ChipLogProgress(Zcl, " {{asSymbol label}}: %s,", ByteSpanToString({{>fieldValue}}).c_str()); - {{else if (isCharString type)}} - ChipLogProgress(Zcl, " {{asSymbol label}}: %.*s,", static_cast({{>fieldValue}}.size()), {{>fieldValue}}.data()); - {{else if isStruct}} - {{! TODO: Add support for printing struct member of struct element of list attribute }} - ChipLogProgress(chipTool, " {{asSymbol label}}: struct member of struct element of list attribute printing not supported yet"); - {{else}} - ChipLogProgress(Zcl, " {{asSymbol label}}: {{asPrintFormat type}},", {{>fieldValue}}); - {{/if}} - {{#if isNullable}} - } - {{/if}} - {{#if isOptional}} - } - {{/if}} - {{/chip_attribute_list_entryTypes}} - ChipLogProgress(Zcl, " },"); - {{else if (isOctetString type)}} - ChipLogProgress(Zcl, " %s,", ByteSpanToString(entry).c_str()); - {{else if (isCharString type)}} - ChipLogProgress(Zcl, " %.*s,", static_cast(entry.size()), entry.data()); - {{else}} - {{~! NOTE: asPrintFormat does not handle the isArray case at - all right, but we want the print format for our _entries_ - anyway. Indirect through a partial that will let us set - isArray to false. ~}} - {{~#*inline "asPrintFormatForElement"}}{{asPrintFormat type}}{{/inline~}} - ChipLogProgress(Zcl, " {{>asPrintFormatForElement isArray=false}},", entry); - {{/if}} -#endif // CHIP_PROGRESS_LOGGING - } - if (iter.GetStatus() != CHIP_NO_ERROR) - { - if (gFailureResponseDelegate != nullptr) - { - gFailureResponseDelegate(EMBER_ZCL_STATUS_INVALID_VALUE); - } - return; - } - - if (count > 0) - ChipLogProgress(Zcl, " ]"); - + {{! TODO: implementation }} if (gSuccessResponseDelegate != nullptr) gSuccessResponseDelegate(); } From f58faac730e7d33b938abe4e8d66c435b374b54d Mon Sep 17 00:00:00 2001 From: Jerry Johns Date: Sun, 28 Nov 2021 12:19:39 -0800 Subject: [PATCH 4/5] Fix wildcard reads + chunking (#12140) * Fix Wildcard Reads Using the Matter REPL, this PR fixes a number of critical bugs in both the server-side logic as well as the Python APIs to validate all permutations of wildcard reads as well as basic chunking. On the server side, it fixes: - The AttributeExpandPathIterator was incorrectly using emberAfClusterIndex to iterate over clusters on an endpoint, but that isn't its API contract. That function returns something else completely. Fixed that implementation as well as created a new, better named function called emberAfClusterIndexInMatchingEndpoints that actually better describes what it does. - In ReadSingleClusterData, we were chaining a number of MessageDef builder calls one after another and checking the error at the end (by calling GetError()). However, this resulted in the original error encountered in the first call in that chain being lost and replaced with something else by the time it got to the end. This was especially problematic during chunking since the errors CHIP_ERROR_BUFFER_TOO_SMALL and CHIP_ERROR_NO_MEMORY are what the higher level calls in Engine::BuildSingleReportDataAttributeReportIBs expect to correclty handle chunking. Since the error got lost and converted, it resulted in the Engine treating it like a critical failure and stopping the generation of reports entirely. On the client side in Python: - Reading Clusters.OnOff.Attributes.SampleMfgSpecificAttribute0x00000x1049 broke because in the Python code, we were generating attribute IDs that were 16-bit values instead of 32-bits. This was a combination of not generating them correclty, as well as the C++ bindings expecting a c_uint16 instead of c_uint32 - Fixed up ChipDeviceController.ReadAttribute to actually work correctly with wildcards instead of just erroring out due to parsing issues. Validation: - Tested all wildcard read variations using the Python ReadAttribute API in the REPL and ensured it completed successfully. - Added all variations as tests to the mobile device test suite. * Update src/app/util/attribute-storage.h * Rerun Codegen * Do not enable WiFi on cirque tests * Disable wildcards * Fixes some more bugs in the chunking logic + adds a definitive chunking validation test. * Build fixes Co-authored-by: Song Guo Co-authored-by: Kaku Matsu --- .github/workflows/cirque.yaml | 1 + config/standalone/CHIPProjectConfig.h | 2 + src/app/MessageDef/Builder.cpp | 3 +- src/app/reporting/Engine.cpp | 67 +- src/app/reporting/Engine.h | 9 +- src/app/util/attribute-storage.cpp | 27 +- src/app/util/attribute-storage.h | 13 +- .../util/ember-compatibility-functions.cpp | 4 + src/controller/python/chip/ChipDeviceCtrl.py | 33 +- .../python/chip/clusters/Attribute.py | 13 +- .../python/chip/clusters/Objects.py | 2344 ++++++++--------- .../templates/python-cluster-Objects-py.zapt | 2 +- .../test/test_scripts/cluster_objects.py | 79 +- src/controller/tests/BUILD.gn | 4 +- src/controller/tests/TestReadChunking.cpp | 239 ++ src/controller/tests/data_model/BUILD.gn | 3 +- src/lib/core/CHIPConfig.h | 10 + 17 files changed, 1608 insertions(+), 1245 deletions(-) create mode 100644 src/controller/tests/TestReadChunking.cpp diff --git a/.github/workflows/cirque.yaml b/.github/workflows/cirque.yaml index 76483ff6df790e..0534c52105da64 100644 --- a/.github/workflows/cirque.yaml +++ b/.github/workflows/cirque.yaml @@ -102,6 +102,7 @@ jobs: --volume /tmp:/tmp \ -- ./gn_build.sh \ chip_build_tests=false \ + chip_enable_wifi=false \ enable_host_gcc_build=true \ enable_host_gcc_mbedtls_build=false \ enable_host_clang_build=false \ diff --git a/config/standalone/CHIPProjectConfig.h b/config/standalone/CHIPProjectConfig.h index 6e3f47e2fbf1f5..5cb03319c166ae 100644 --- a/config/standalone/CHIPProjectConfig.h +++ b/config/standalone/CHIPProjectConfig.h @@ -75,4 +75,6 @@ #define DYNAMIC_ENDPOINT_COUNT 4 #endif +#define CONFIG_IM_BUILD_FOR_UNIT_TEST 1 + #endif /* CHIPPROJECTCONFIG_H */ diff --git a/src/app/MessageDef/Builder.cpp b/src/app/MessageDef/Builder.cpp index 035c88b3a32509..e93582412f1922 100644 --- a/src/app/MessageDef/Builder.cpp +++ b/src/app/MessageDef/Builder.cpp @@ -47,8 +47,7 @@ void Builder::ResetError() void Builder::ResetError(CHIP_ERROR aErr) { - mError = aErr; - mOuterContainerType = chip::TLV::kTLVType_NotSpecified; + mError = aErr; } void Builder::EndOfContainer() diff --git a/src/app/reporting/Engine.cpp b/src/app/reporting/Engine.cpp index 9acb2cf77f7569..0d865c138b81c5 100644 --- a/src/app/reporting/Engine.cpp +++ b/src/app/reporting/Engine.cpp @@ -67,6 +67,8 @@ Engine::RetrieveClusterData(FabricIndex aAccessingFabricIndex, AttributeReportIB CHIP_ERROR err = CHIP_NO_ERROR; AttributeReportIB::Builder attributeReport = aAttributeReportIBs.CreateAttributeReport(); + err = attributeReport.GetError(); + SuccessOrExit(attributeReport.GetError()); ChipLogDetail(DataManagement, " Cluster %" PRIx32 ", Attribute %" PRIx32 " is dirty", aPath.mClusterId, aPath.mAttributeId); @@ -95,10 +97,17 @@ CHIP_ERROR Engine::BuildSingleReportDataAttributeReportIBs(ReportDataMessage::Bu bool attributeDataWritten = false; bool hasMoreChunks = true; TLV::TLVWriter backup; + const uint32_t kReservedSizeEndOfReportIBs = 1; + aReportDataBuilder.Checkpoint(backup); auto attributeReportIBs = aReportDataBuilder.CreateAttributeReportIBs(); SuccessOrExit(err = aReportDataBuilder.GetError()); + // + // Reserve enough space for closing out the Report IB list + // + attributeReportIBs.GetWriter()->ReserveBuffer(kReservedSizeEndOfReportIBs); + { // TODO: Figure out how AttributePathExpandIterator should handle read // vs write paths. @@ -127,8 +136,8 @@ CHIP_ERROR Engine::BuildSingleReportDataAttributeReportIBs(ReportDataMessage::Bu continue; } } - // If we are processing a read request, or the initial report of a subscription, just regard all paths as dirty paths. + // If we are processing a read request, or the initial report of a subscription, just regard all paths as dirty paths. TLV::TLVWriter attributeBackup; attributeReportIBs.Checkpoint(attributeBackup); ConcreteReadAttributePath pathForRetrieval(readPath); @@ -147,19 +156,48 @@ CHIP_ERROR Engine::BuildSingleReportDataAttributeReportIBs(ReportDataMessage::Bu hasMoreChunks = false; } exit: + // + // Running out of space is an error that we're expected to handle - the incompletely written DataIB has already been rolled back + // earlier to ensure only whole and complete DataIBs are present in the stream. + // + // We can safely clear out the error so that the rest of the machinery to close out the reports, etc. will function correctly. + // These are are guaranteed to not fail since we've already reserved memory for the remaining 'close out' TLV operations in this + // function and its callers. + // if ((err == CHIP_ERROR_BUFFER_TOO_SMALL) || (err == CHIP_ERROR_NO_MEMORY)) { ChipLogDetail(DataManagement, " We cannot put more chunks into this report. Enable chunking."); + + // + // Reset the error tracked within the builder. Otherwise, any further attempts to write + // data through the builder will be blocked by that error. + // + attributeReportIBs.ResetError(); err = CHIP_NO_ERROR; } + // + // Only close out the report if we haven't hit an error yet so far. + // if (err == CHIP_NO_ERROR) { + attributeReportIBs.GetWriter()->UnreserveBuffer(kReservedSizeEndOfReportIBs); + attributeReportIBs.EndOfAttributeReportIBs(); err = attributeReportIBs.GetError(); + + // + // We reserved space for this earlier - consequently, the call to end the ReportIBs should + // never fail, so assert if we do since that's a logic bug. + // + VerifyOrDie(err == CHIP_NO_ERROR); } - if (!attributeDataWritten || err != CHIP_NO_ERROR) + // + // Rollback the the entire ReportIB array if we never wrote any attributes + // AND never hit an error. + // + if (!attributeDataWritten && err == CHIP_NO_ERROR) { aReportDataBuilder.Rollback(backup); } @@ -269,7 +307,7 @@ CHIP_ERROR Engine::BuildSingleReportDataEventReports(ReportDataMessage::Builder ChipLogDetail(DataManagement, "Fetched %zu events", eventCount); exit: - if (err != CHIP_NO_ERROR || eventCount == 0 || eventClean) + if (err == CHIP_NO_ERROR && (eventCount == 0 || eventClean)) { aReportDataBuilder.Rollback(backup); } @@ -289,6 +327,12 @@ CHIP_ERROR Engine::BuildAndSendSingleReportData(ReadHandler * apReadHandler) uint16_t reservedSize = 0; bool hasMoreChunks = false; + // Reserved size for the MoreChunks boolean flag, which takes up 1 byte for the control tag and 1 byte for the context tag. + const uint32_t kReservedSizeForMoreChunksFlag = 1 + 1; + + // Reserved size for the end of report message, which is an end-of-container (i.e 1 byte for the control tag). + const uint32_t kReservedSizeForEndOfReportMessage = 1; + VerifyOrExit(!bufHandle.IsNull(), err = CHIP_ERROR_NO_MEMORY); if (bufHandle->AvailableDataLength() > kMaxSecureSduLengthBytes) @@ -298,6 +342,10 @@ CHIP_ERROR Engine::BuildAndSendSingleReportData(ReadHandler * apReadHandler) reportDataWriter.Init(std::move(bufHandle)); +#if CONFIG_IM_BUILD_FOR_UNIT_TEST + reportDataWriter.ReserveBuffer(mReservedSize); +#endif + // Always limit the size of the generated packet to fit within kMaxSecureSduLengthBytes regardless of the available buffer // capacity. // Also, we need to reserve some extra space for the MIC field. @@ -314,7 +362,7 @@ CHIP_ERROR Engine::BuildAndSendSingleReportData(ReadHandler * apReadHandler) reportDataBuilder.SubscriptionId(subscriptionId); } - SuccessOrExit(err = reportDataWriter.ReserveBuffer(Engine::kReservedSizeForMoreChunksFlag)); + SuccessOrExit(err = reportDataWriter.ReserveBuffer(kReservedSizeForMoreChunksFlag + kReservedSizeForEndOfReportMessage)); err = BuildSingleReportDataAttributeReportIBs(reportDataBuilder, apReadHandler, &hasMoreChunks); SuccessOrExit(err); @@ -322,7 +370,9 @@ CHIP_ERROR Engine::BuildAndSendSingleReportData(ReadHandler * apReadHandler) err = BuildSingleReportDataEventReports(reportDataBuilder, apReadHandler, &hasMoreChunks); SuccessOrExit(err); - SuccessOrExit(err = reportDataWriter.UnreserveBuffer(Engine::kReservedSizeForMoreChunksFlag)); + SuccessOrExit(reportDataBuilder.GetError()); + + SuccessOrExit(err = reportDataWriter.UnreserveBuffer(kReservedSizeForMoreChunksFlag + kReservedSizeForEndOfReportMessage)); if (hasMoreChunks) { reportDataBuilder.MoreChunkedMessages(hasMoreChunks); @@ -333,7 +383,12 @@ CHIP_ERROR Engine::BuildAndSendSingleReportData(ReadHandler * apReadHandler) } reportDataBuilder.EndOfReportDataMessage(); - SuccessOrExit(err = reportDataBuilder.GetError()); + + // + // Since we've already reserved space for both the MoreChunked/SuppressResponse flags, as well as + // the end-of-container flag for the end of the report, we should never hit an error closing out the message. + // + VerifyOrDie(reportDataBuilder.GetError() == CHIP_NO_ERROR); err = reportDataWriter.Finalize(&bufHandle); SuccessOrExit(err); diff --git a/src/app/reporting/Engine.h b/src/app/reporting/Engine.h index 9a74acc5cf5923..71890bd5900a26 100644 --- a/src/app/reporting/Engine.h +++ b/src/app/reporting/Engine.h @@ -62,6 +62,10 @@ class Engine void Shutdown(); +#if CONFIG_IM_BUILD_FOR_UNIT_TEST + void SetWriterReserved(uint32_t aReservedSize) { mReservedSize = aReservedSize; } +#endif + /** * Main work-horse function that executes the run-loop. */ @@ -146,8 +150,9 @@ class Engine */ ClusterInfo * mpGlobalDirtySet = nullptr; - constexpr static uint32_t kReservedSizeForMoreChunksFlag = - 2; // According to TLV encoding, the TAG length is 1 byte and its type is 1 byte. +#if CONFIG_IM_BUILD_FOR_UNIT_TEST + uint32_t mReservedSize = 0; +#endif }; }; // namespace reporting diff --git a/src/app/util/attribute-storage.cpp b/src/app/util/attribute-storage.cpp index a04a413434b679..b542a224d31771 100644 --- a/src/app/util/attribute-storage.cpp +++ b/src/app/util/attribute-storage.cpp @@ -710,7 +710,7 @@ EmberAfStatus emAfReadOrWriteAttribute(EmberAfAttributeSearchRecord * attRecord, // mask = CLUSTER_MASK_CLIENT -> find client // mask = CLUSTER_MASK_SERVER -> find server EmberAfCluster * emberAfFindClusterInTypeWithMfgCode(EmberAfEndpointType * endpointType, ClusterId clusterId, - EmberAfClusterMask mask, uint16_t manufacturerCode) + EmberAfClusterMask mask, uint16_t manufacturerCode, uint8_t * index) { uint8_t i; for (i = 0; i < endpointType->clusterCount; i++) @@ -725,6 +725,11 @@ EmberAfCluster * emberAfFindClusterInTypeWithMfgCode(EmberAfEndpointType * endpo // if the manufacturerCode == EMBER_AF_NULL_MANUFACTURER_CODE || manufacturerCode == EMBER_AF_NULL_MANUFACTURER_CODE)) { + if (index) + { + *index = i; + } + return cluster; } } @@ -740,7 +745,7 @@ EmberAfCluster * emberAfFindClusterInType(EmberAfEndpointType * endpointType, Cl // This code is used during unit tests for clusters that do not involve manufacturer code. // Should this code be used in other locations, manufacturerCode should be added. -uint8_t emberAfClusterIndex(EndpointId endpoint, ClusterId clusterId, EmberAfClusterMask mask) +uint8_t emberAfClusterIndexInMatchingEndpoints(EndpointId endpoint, ClusterId clusterId, EmberAfClusterMask mask) { uint8_t ep; uint8_t index = 0xFF; @@ -759,6 +764,24 @@ uint8_t emberAfClusterIndex(EndpointId endpoint, ClusterId clusterId, EmberAfClu return 0xFF; } +uint8_t emberAfClusterIndex(EndpointId endpoint, ClusterId clusterId, EmberAfClusterMask mask) +{ + uint8_t ep; + uint8_t index = 0xFF; + for (ep = 0; ep < emberAfEndpointCount(); ep++) + { + EmberAfEndpointType * endpointType = emAfEndpoints[ep].endpointType; + if (emberAfFindClusterInTypeWithMfgCode(endpointType, clusterId, mask, EMBER_AF_NULL_MANUFACTURER_CODE, &index) != NULL) + { + if (emAfEndpoints[ep].endpoint == endpoint) + { + return index; + } + } + } + return 0xFF; +} + // Returns true uf endpoint contains passed cluster bool emberAfContainsClusterWithMfgCode(EndpointId endpoint, ClusterId clusterId, uint16_t manufacturerCode) { diff --git a/src/app/util/attribute-storage.h b/src/app/util/attribute-storage.h index e843a50a9cc298..8587342429a5d2 100644 --- a/src/app/util/attribute-storage.h +++ b/src/app/util/attribute-storage.h @@ -131,11 +131,13 @@ bool emAfMatchCluster(EmberAfCluster * cluster, EmberAfAttributeSearchRecord * a bool emAfMatchAttribute(EmberAfCluster * cluster, EmberAfAttributeMetadata * am, EmberAfAttributeSearchRecord * attRecord); EmberAfCluster * emberAfFindClusterInTypeWithMfgCode(EmberAfEndpointType * endpointType, chip::ClusterId clusterId, - EmberAfClusterMask mask, uint16_t manufacturerCode); + EmberAfClusterMask mask, uint16_t manufacturerCode, uint8_t * index = nullptr); EmberAfCluster * emberAfFindClusterInType(EmberAfEndpointType * endpointType, chip::ClusterId clusterId, EmberAfClusterMask mask); -// This function returns the index of cluster for the particular endpoint. +// For a given cluster and mask, retrieves the list of endpoints sorted by endpoint that contain the matching cluster and returns +// the index within that list that matches the given endpoint. +// // Mask is either CLUSTER_MASK_CLIENT or CLUSTER_MASK_SERVER // For example, if you have 3 endpoints, 10, 11, 12, and cluster X server is // located on 11 and 12, and cluster Y server is located only on 10 then @@ -145,6 +147,13 @@ EmberAfCluster * emberAfFindClusterInType(EmberAfEndpointType * endpointType, ch // clusterIndex(Y,10,CLUSTER_MASK_SERVER) returns 0 // clusterIndex(Y,11,CLUSTER_MASK_SERVER) returns 0xFF // clusterIndex(Y,12,CLUSTER_MASK_SERVER) returns 0xFF +uint8_t emberAfClusterIndexInMatchingEndpoints(chip::EndpointId endpoint, chip::ClusterId clusterId, EmberAfClusterMask mask); + +// +// Given a cluster ID, endpoint ID and a cluster mask, finds a matching cluster within that endpoint +// with a matching mask. If one is found, the relative index of that cluster within the list of clusters on that +// endpoint is returned. Otherwise, 0xFF is returned. +// uint8_t emberAfClusterIndex(chip::EndpointId endpoint, chip::ClusterId clusterId, EmberAfClusterMask mask); // If server == true, returns the number of server clusters, diff --git a/src/app/util/ember-compatibility-functions.cpp b/src/app/util/ember-compatibility-functions.cpp index aa20dbcb66e375..90298769c21cbc 100644 --- a/src/app/util/ember-compatibility-functions.cpp +++ b/src/app/util/ember-compatibility-functions.cpp @@ -247,7 +247,10 @@ CHIP_ERROR ReadSingleClusterData(FabricIndex aAccessingFabricIndex, const Concre aAttributeReport.Checkpoint(backup); attributeDataIBBuilder = aAttributeReport.CreateAttributeData(); + ReturnErrorOnFailure(attributeDataIBBuilder.GetError()); + attributePathIBBuilder = attributeDataIBBuilder.CreatePath(); + attributePathIBBuilder.Endpoint(aPath.mEndpointId) .Cluster(aPath.mClusterId) .Attribute(aPath.mAttributeId) @@ -516,6 +519,7 @@ CHIP_ERROR ReadSingleClusterData(FabricIndex aAccessingFabricIndex, const Concre { ReturnErrorOnFailure(SendFailureStatus(aPath, aAttributeReport, imStatus, backup)); } + return CHIP_NO_ERROR; } diff --git a/src/controller/python/chip/ChipDeviceCtrl.py b/src/controller/python/chip/ChipDeviceCtrl.py index 4ca3aa94bbd0da..edaf1438fdc7b6 100644 --- a/src/controller/python/chip/ChipDeviceCtrl.py +++ b/src/controller/python/chip/ChipDeviceCtrl.py @@ -422,15 +422,19 @@ async def ReadAttribute(self, nodeid: int, attributes: typing.List[typing.Union[ nodeId: Target's Node ID attributes: A list of tuples of varying types depending on the type of read being requested: - (): Endpoint = *, Cluster = *, Attribute = * - (Clusters.ClusterA): Endpoint = *, Cluster = specific, Attribute = * - (Clusters.ClusterA.AttributeA): Endpoint = *, Cluster = specific, Attribute = specific - (endpoint, Clusters.ClusterA): Endpoint = specific, Cluster = specific, Attribute = * (endpoint, Clusters.ClusterA.AttributeA): Endpoint = specific, Cluster = specific, Attribute = specific + (endpoint, Clusters.ClusterA): Endpoint = specific, Cluster = specific, Attribute = * + (Clusters.ClusterA.AttributeA): Endpoint = *, Cluster = specific, Attribute = specific + endpoint: Endpoint = specific, Cluster = *, Attribute = * + Clusters.ClusterA: Endpoint = *, Cluster = specific, Attribute = * + '*' or (): Endpoint = *, Cluster = *, Attribute = * The cluster and attributes specified above are to be selected from the generated cluster objects. - NOTE: Only the last variant is currently supported. + e.g + ReadAttribute(1, [ 1 ] ) -- case 4 above. + ReadAttribute(1, [ Clusters.Basic ] ) -- case 5 above. + ReadAttribute(1, [ (1, Clusters.Basic.Attributes.Location ] ) -- case 1 above. ''' eventLoop = asyncio.get_running_loop() @@ -442,19 +446,20 @@ async def ReadAttribute(self, nodeid: int, attributes: typing.List[typing.Union[ endpoint = None cluster = None attribute = None - if v == () or v == ('*'): + if v == ('*') or v == (): # Wildcard pass - elif len(v) == 1: - if v[0] is int: - endpoint = v[0] - elif issubclass(v[0], ClusterObjects.Cluster): - cluster = v[0] - elif issubclass(v[0], ClusterObjects.ClusterAttributeDescriptor): - attribute = v[0] + elif type(v) is not tuple: + print(type(v)) + if type(v) is int: + endpoint = v + elif issubclass(v, ClusterObjects.Cluster): + cluster = v + elif issubclass(v, ClusterObjects.ClusterAttributeDescriptor): + attribute = v else: raise ValueError("Unsupported Attribute Path") - elif len(v) == 2: + else: # endpoint + (cluster) attribute / endpoint + cluster endpoint = v[0] if issubclass(v[1], ClusterObjects.Cluster): diff --git a/src/controller/python/chip/clusters/Attribute.py b/src/controller/python/chip/clusters/Attribute.py index d8f3cebe68bc0c..bbd9f23c90db1b 100644 --- a/src/controller/python/chip/clusters/Attribute.py +++ b/src/controller/python/chip/clusters/Attribute.py @@ -133,10 +133,17 @@ def _handleAttributeData(self, path: AttributePath, status: int, data: bytes): if attributeType is None: attributeValue = chip.tlv.TLVReader(data).get().get("Any", {}) else: - attributeValue = attributeType.FromTLV(data) + try: + attributeValue = attributeType.FromTLV(data) + except: + logging.error( + f"Error convering TLV to Cluster Object for path: Endpoint = {path.EndpointId}/Cluster = {path.ClusterId}/Attribute = {path.AttributeId}") + logging.error( + f"Failed Cluster Object: {str(attributeType)}") + raise self._res.append(AttributeReadResult( - Path=path, Status=imStatus, Data=attributeValue)) + Path=path, Status=imStatus, Data=attributeType(attributeValue))) except Exception as ex: logging.exception(ex) @@ -196,7 +203,7 @@ def handleDone(self): _OnReadAttributeDataCallbackFunct = CFUNCTYPE( - None, py_object, c_uint16, c_uint32, c_uint32, c_uint16, c_void_p, c_size_t) + None, py_object, c_uint16, c_uint32, c_uint32, c_uint32, c_void_p, c_size_t) _OnReadErrorCallbackFunct = CFUNCTYPE( None, py_object, c_uint32) _OnReadDoneCallbackFunct = CFUNCTYPE( diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py index afd713c4f205e2..1fb41413cc819e 100644 --- a/src/controller/python/chip/clusters/Objects.py +++ b/src/controller/python/chip/clusters/Objects.py @@ -46,7 +46,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -62,7 +62,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -78,7 +78,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -94,7 +94,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -110,7 +110,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -126,7 +126,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -142,7 +142,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0020 + return 0x00000020 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -158,7 +158,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0021 + return 0x00000021 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -174,7 +174,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0030 + return 0x00000030 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -190,7 +190,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0031 + return 0x00000031 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -206,7 +206,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0032 + return 0x00000032 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -222,7 +222,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0033 + return 0x00000033 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -238,7 +238,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0034 + return 0x00000034 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -254,7 +254,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0035 + return 0x00000035 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -270,7 +270,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0036 + return 0x00000036 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -286,7 +286,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0037 + return 0x00000037 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -302,7 +302,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0038 + return 0x00000038 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -318,7 +318,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0039 + return 0x00000039 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -334,7 +334,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003A + return 0x0000003A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -350,7 +350,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003B + return 0x0000003B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -366,7 +366,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003C + return 0x0000003C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -382,7 +382,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003D + return 0x0000003D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -398,7 +398,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003E + return 0x0000003E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -414,7 +414,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0040 + return 0x00000040 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -430,7 +430,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0041 + return 0x00000041 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -446,7 +446,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0050 + return 0x00000050 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -462,7 +462,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0051 + return 0x00000051 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -478,7 +478,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0052 + return 0x00000052 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -494,7 +494,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0053 + return 0x00000053 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -510,7 +510,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0054 + return 0x00000054 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -526,7 +526,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0055 + return 0x00000055 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -542,7 +542,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0056 + return 0x00000056 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -558,7 +558,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0057 + return 0x00000057 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -574,7 +574,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0058 + return 0x00000058 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -590,7 +590,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0059 + return 0x00000059 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -606,7 +606,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x005A + return 0x0000005A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -622,7 +622,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x005B + return 0x0000005B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -638,7 +638,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x005C + return 0x0000005C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -654,7 +654,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x005D + return 0x0000005D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -670,7 +670,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x005E + return 0x0000005E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -686,7 +686,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0060 + return 0x00000060 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -702,7 +702,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0061 + return 0x00000061 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -718,7 +718,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0070 + return 0x00000070 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -734,7 +734,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0071 + return 0x00000071 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -750,7 +750,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0072 + return 0x00000072 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -766,7 +766,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0073 + return 0x00000073 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -782,7 +782,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0074 + return 0x00000074 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -798,7 +798,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0075 + return 0x00000075 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -814,7 +814,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0076 + return 0x00000076 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -830,7 +830,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0077 + return 0x00000077 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -846,7 +846,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0078 + return 0x00000078 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -862,7 +862,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0079 + return 0x00000079 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -878,7 +878,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x007A + return 0x0000007A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -894,7 +894,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x007B + return 0x0000007B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -910,7 +910,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x007C + return 0x0000007C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -926,7 +926,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x007D + return 0x0000007D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -942,7 +942,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x007E + return 0x0000007E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -958,7 +958,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -974,7 +974,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -996,7 +996,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1012,7 +1012,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1028,7 +1028,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1044,7 +1044,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1060,7 +1060,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1076,7 +1076,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1092,7 +1092,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1108,7 +1108,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1124,7 +1124,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1140,7 +1140,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1156,7 +1156,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1262,7 +1262,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1278,7 +1278,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1294,7 +1294,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1310,7 +1310,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1510,7 +1510,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1526,7 +1526,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -1542,7 +1542,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2017,7 +2017,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2033,7 +2033,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2049,7 +2049,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2065,7 +2065,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2081,7 +2081,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2097,7 +2097,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2113,7 +2113,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2129,7 +2129,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2254,7 +2254,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2270,7 +2270,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4000 + return 0x00004000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2286,7 +2286,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4001 + return 0x00004001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2302,7 +2302,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4002 + return 0x00004002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2318,7 +2318,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4003 + return 0x00004003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2334,7 +2334,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2350,7 +2350,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2372,7 +2372,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2388,7 +2388,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2404,7 +2404,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2420,7 +2420,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2621,7 +2621,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2637,7 +2637,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2653,7 +2653,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2669,7 +2669,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2685,7 +2685,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2701,7 +2701,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2717,7 +2717,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2733,7 +2733,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000F + return 0x0000000F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2749,7 +2749,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2765,7 +2765,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2781,7 +2781,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2797,7 +2797,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2813,7 +2813,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2829,7 +2829,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4000 + return 0x00004000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2845,7 +2845,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2861,7 +2861,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2983,7 +2983,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -2999,7 +2999,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3015,7 +3015,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3037,7 +3037,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3053,7 +3053,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3069,7 +3069,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3085,7 +3085,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3101,7 +3101,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3117,7 +3117,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3133,7 +3133,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3149,7 +3149,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3165,7 +3165,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3181,7 +3181,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0009 + return 0x00000009 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3197,7 +3197,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3213,7 +3213,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3235,7 +3235,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3251,7 +3251,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001C + return 0x0000001C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3267,7 +3267,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x002E + return 0x0000002E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3283,7 +3283,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0051 + return 0x00000051 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3299,7 +3299,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0054 + return 0x00000054 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3315,7 +3315,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0055 + return 0x00000055 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3331,7 +3331,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0067 + return 0x00000067 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3347,7 +3347,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x006F + return 0x0000006F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3363,7 +3363,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0100 + return 0x00000100 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3379,7 +3379,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3395,7 +3395,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3900,7 +3900,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3916,7 +3916,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3932,7 +3932,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3948,7 +3948,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3964,7 +3964,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3980,7 +3980,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -3996,7 +3996,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4191,7 +4191,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4207,7 +4207,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4223,7 +4223,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4239,7 +4239,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4255,7 +4255,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4293,7 +4293,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4309,7 +4309,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4325,7 +4325,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4341,7 +4341,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4357,7 +4357,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4373,7 +4373,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4471,7 +4471,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4487,7 +4487,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4503,7 +4503,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4519,7 +4519,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4535,7 +4535,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4551,7 +4551,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4567,7 +4567,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4583,7 +4583,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4599,7 +4599,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4939,7 +4939,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4955,7 +4955,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4971,7 +4971,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -4987,7 +4987,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5003,7 +5003,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5074,7 +5074,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5090,7 +5090,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5106,7 +5106,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5122,7 +5122,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5138,7 +5138,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5154,7 +5154,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5170,7 +5170,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5186,7 +5186,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5202,7 +5202,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5218,7 +5218,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0009 + return 0x00000009 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5234,7 +5234,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000A + return 0x0000000A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5250,7 +5250,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000B + return 0x0000000B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5266,7 +5266,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000C + return 0x0000000C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5282,7 +5282,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000D + return 0x0000000D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5298,7 +5298,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000E + return 0x0000000E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5314,7 +5314,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000F + return 0x0000000F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5330,7 +5330,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5346,7 +5346,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5362,7 +5362,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5378,7 +5378,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5394,7 +5394,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5618,7 +5618,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5634,7 +5634,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5706,7 +5706,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5722,7 +5722,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5738,7 +5738,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5754,7 +5754,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5843,7 +5843,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5859,7 +5859,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5881,7 +5881,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5897,7 +5897,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5919,7 +5919,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5935,7 +5935,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5957,7 +5957,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5973,7 +5973,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -5995,7 +5995,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6011,7 +6011,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6027,7 +6027,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6043,7 +6043,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6059,7 +6059,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6075,7 +6075,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6091,7 +6091,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6107,7 +6107,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6123,7 +6123,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6139,7 +6139,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0009 + return 0x00000009 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6155,7 +6155,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000A + return 0x0000000A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6171,7 +6171,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000B + return 0x0000000B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6187,7 +6187,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000C + return 0x0000000C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6203,7 +6203,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000D + return 0x0000000D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6219,7 +6219,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000E + return 0x0000000E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6235,7 +6235,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000F + return 0x0000000F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6251,7 +6251,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6267,7 +6267,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6283,7 +6283,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6299,7 +6299,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6315,7 +6315,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6331,7 +6331,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6347,7 +6347,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0016 + return 0x00000016 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6363,7 +6363,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0017 + return 0x00000017 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6379,7 +6379,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0018 + return 0x00000018 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6395,7 +6395,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0019 + return 0x00000019 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6411,7 +6411,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001A + return 0x0000001A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6427,7 +6427,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001B + return 0x0000001B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6443,7 +6443,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001C + return 0x0000001C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6459,7 +6459,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001D + return 0x0000001D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6475,7 +6475,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001E + return 0x0000001E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6491,7 +6491,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6507,7 +6507,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6670,7 +6670,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6686,7 +6686,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6702,7 +6702,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6718,7 +6718,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6734,7 +6734,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -6750,7 +6750,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7173,7 +7173,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7189,7 +7189,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7276,7 +7276,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7292,7 +7292,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7387,7 +7387,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7403,7 +7403,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7419,7 +7419,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7435,7 +7435,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7451,7 +7451,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7467,7 +7467,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7483,7 +7483,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7499,7 +7499,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7515,7 +7515,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7531,7 +7531,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7679,7 +7679,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7695,7 +7695,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7711,7 +7711,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7727,7 +7727,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7743,7 +7743,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7759,7 +7759,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7981,7 +7981,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -7997,7 +7997,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8013,7 +8013,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8029,7 +8029,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8045,7 +8045,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8061,7 +8061,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8077,7 +8077,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8093,7 +8093,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8109,7 +8109,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8125,7 +8125,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0009 + return 0x00000009 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8141,7 +8141,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000A + return 0x0000000A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8157,7 +8157,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000B + return 0x0000000B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8173,7 +8173,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000C + return 0x0000000C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8189,7 +8189,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000D + return 0x0000000D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8205,7 +8205,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000E + return 0x0000000E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8221,7 +8221,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000F + return 0x0000000F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8237,7 +8237,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8253,7 +8253,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8269,7 +8269,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8285,7 +8285,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8301,7 +8301,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8317,7 +8317,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8333,7 +8333,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0016 + return 0x00000016 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8349,7 +8349,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0017 + return 0x00000017 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8365,7 +8365,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0018 + return 0x00000018 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8381,7 +8381,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0019 + return 0x00000019 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8397,7 +8397,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001A + return 0x0000001A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8413,7 +8413,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001B + return 0x0000001B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8429,7 +8429,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001C + return 0x0000001C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8445,7 +8445,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001D + return 0x0000001D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8461,7 +8461,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001E + return 0x0000001E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8477,7 +8477,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001F + return 0x0000001F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8493,7 +8493,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0020 + return 0x00000020 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8509,7 +8509,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0021 + return 0x00000021 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8525,7 +8525,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0022 + return 0x00000022 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8541,7 +8541,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0023 + return 0x00000023 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8557,7 +8557,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0024 + return 0x00000024 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8573,7 +8573,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0025 + return 0x00000025 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8589,7 +8589,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0026 + return 0x00000026 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8605,7 +8605,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0027 + return 0x00000027 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8621,7 +8621,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0028 + return 0x00000028 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8637,7 +8637,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0029 + return 0x00000029 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8653,7 +8653,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x002A + return 0x0000002A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8669,7 +8669,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x002B + return 0x0000002B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8685,7 +8685,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x002C + return 0x0000002C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8701,7 +8701,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x002D + return 0x0000002D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8717,7 +8717,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x002E + return 0x0000002E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8733,7 +8733,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x002F + return 0x0000002F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8749,7 +8749,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0030 + return 0x00000030 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8765,7 +8765,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0031 + return 0x00000031 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8781,7 +8781,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0032 + return 0x00000032 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8797,7 +8797,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0033 + return 0x00000033 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8813,7 +8813,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0034 + return 0x00000034 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8829,7 +8829,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0035 + return 0x00000035 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8845,7 +8845,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0036 + return 0x00000036 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8861,7 +8861,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0037 + return 0x00000037 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8877,7 +8877,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0038 + return 0x00000038 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8893,7 +8893,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0039 + return 0x00000039 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8909,7 +8909,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003A + return 0x0000003A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8925,7 +8925,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003B + return 0x0000003B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8941,7 +8941,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003C + return 0x0000003C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8957,7 +8957,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003D + return 0x0000003D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8973,7 +8973,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003E + return 0x0000003E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -8989,7 +8989,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9005,7 +9005,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9083,7 +9083,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9099,7 +9099,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9115,7 +9115,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9131,7 +9131,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9147,7 +9147,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9163,7 +9163,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9179,7 +9179,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9195,7 +9195,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9211,7 +9211,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9227,7 +9227,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0009 + return 0x00000009 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9243,7 +9243,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000A + return 0x0000000A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9259,7 +9259,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000B + return 0x0000000B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9275,7 +9275,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000C + return 0x0000000C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9291,7 +9291,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9307,7 +9307,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9404,7 +9404,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9420,7 +9420,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9436,7 +9436,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9452,7 +9452,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9468,7 +9468,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9484,7 +9484,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9500,7 +9500,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9516,7 +9516,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9532,7 +9532,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9548,7 +9548,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9564,7 +9564,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9586,7 +9586,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9602,7 +9602,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9673,7 +9673,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9689,7 +9689,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9705,7 +9705,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9721,7 +9721,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9737,7 +9737,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9753,7 +9753,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9769,7 +9769,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0009 + return 0x00000009 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9785,7 +9785,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000A + return 0x0000000A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9801,7 +9801,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000B + return 0x0000000B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9817,7 +9817,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000C + return 0x0000000C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9833,7 +9833,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000D + return 0x0000000D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9849,7 +9849,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000E + return 0x0000000E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9865,7 +9865,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000F + return 0x0000000F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9881,7 +9881,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9897,7 +9897,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9913,7 +9913,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9929,7 +9929,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9951,7 +9951,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9967,7 +9967,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9983,7 +9983,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -9999,7 +9999,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10015,7 +10015,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10215,7 +10215,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10231,7 +10231,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10545,7 +10545,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10561,7 +10561,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10577,7 +10577,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10593,7 +10593,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10609,7 +10609,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10625,7 +10625,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10641,7 +10641,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10679,7 +10679,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10695,7 +10695,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10711,7 +10711,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10733,7 +10733,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10749,7 +10749,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10765,7 +10765,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10854,7 +10854,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10870,7 +10870,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10886,7 +10886,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10902,7 +10902,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10918,7 +10918,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10934,7 +10934,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10950,7 +10950,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10972,7 +10972,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -10988,7 +10988,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -11004,7 +11004,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -11020,7 +11020,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -11036,7 +11036,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -11052,7 +11052,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -11068,7 +11068,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12192,7 +12192,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12208,7 +12208,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12224,7 +12224,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12240,7 +12240,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12256,7 +12256,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12272,7 +12272,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12288,7 +12288,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12304,7 +12304,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12320,7 +12320,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12336,7 +12336,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12352,7 +12352,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12368,7 +12368,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12384,7 +12384,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12400,7 +12400,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0016 + return 0x00000016 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12416,7 +12416,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0017 + return 0x00000017 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12432,7 +12432,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0018 + return 0x00000018 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12448,7 +12448,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0019 + return 0x00000019 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12464,7 +12464,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001A + return 0x0000001A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12480,7 +12480,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0020 + return 0x00000020 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12496,7 +12496,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0021 + return 0x00000021 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12512,7 +12512,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0022 + return 0x00000022 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12528,7 +12528,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0023 + return 0x00000023 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12544,7 +12544,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0024 + return 0x00000024 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12560,7 +12560,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0025 + return 0x00000025 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12576,7 +12576,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0026 + return 0x00000026 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12592,7 +12592,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0027 + return 0x00000027 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12608,7 +12608,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0028 + return 0x00000028 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12624,7 +12624,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0029 + return 0x00000029 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12640,7 +12640,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x002A + return 0x0000002A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12656,7 +12656,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x002B + return 0x0000002B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12672,7 +12672,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0030 + return 0x00000030 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12688,7 +12688,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0031 + return 0x00000031 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12704,7 +12704,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0032 + return 0x00000032 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12720,7 +12720,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0033 + return 0x00000033 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12736,7 +12736,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0034 + return 0x00000034 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12752,7 +12752,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0040 + return 0x00000040 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12768,7 +12768,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0041 + return 0x00000041 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12784,7 +12784,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0042 + return 0x00000042 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12800,7 +12800,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0043 + return 0x00000043 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12816,7 +12816,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0044 + return 0x00000044 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12832,7 +12832,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0045 + return 0x00000045 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12848,7 +12848,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0046 + return 0x00000046 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12864,7 +12864,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0047 + return 0x00000047 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12880,7 +12880,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -12896,7 +12896,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13025,7 +13025,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13041,7 +13041,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13057,7 +13057,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13073,7 +13073,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13089,7 +13089,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13105,7 +13105,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13121,7 +13121,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13137,7 +13137,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13153,7 +13153,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13169,7 +13169,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0009 + return 0x00000009 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13185,7 +13185,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000A + return 0x0000000A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13201,7 +13201,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000B + return 0x0000000B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13217,7 +13217,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000C + return 0x0000000C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13233,7 +13233,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000D + return 0x0000000D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13249,7 +13249,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000E + return 0x0000000E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13265,7 +13265,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000F + return 0x0000000F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13281,7 +13281,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13297,7 +13297,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13313,7 +13313,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13329,7 +13329,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13345,7 +13345,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13361,7 +13361,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13377,7 +13377,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0016 + return 0x00000016 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13393,7 +13393,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0017 + return 0x00000017 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13409,7 +13409,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0018 + return 0x00000018 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13425,7 +13425,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0019 + return 0x00000019 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13441,7 +13441,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001A + return 0x0000001A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13457,7 +13457,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13473,7 +13473,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13524,7 +13524,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13540,7 +13540,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13556,7 +13556,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13572,7 +13572,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13588,7 +13588,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13604,7 +13604,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13620,7 +13620,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13636,7 +13636,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13652,7 +13652,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0009 + return 0x00000009 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13668,7 +13668,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000A + return 0x0000000A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13684,7 +13684,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13700,7 +13700,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13737,7 +13737,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13753,7 +13753,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13769,7 +13769,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13785,7 +13785,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13801,7 +13801,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13817,7 +13817,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13833,7 +13833,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13849,7 +13849,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13865,7 +13865,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13881,7 +13881,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0009 + return 0x00000009 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13897,7 +13897,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000A + return 0x0000000A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13913,7 +13913,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000B + return 0x0000000B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13929,7 +13929,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000C + return 0x0000000C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13945,7 +13945,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13961,7 +13961,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13977,7 +13977,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -13993,7 +13993,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14009,7 +14009,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14025,7 +14025,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14041,7 +14041,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0016 + return 0x00000016 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14057,7 +14057,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0017 + return 0x00000017 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14073,7 +14073,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0020 + return 0x00000020 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14089,7 +14089,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0021 + return 0x00000021 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14105,7 +14105,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0022 + return 0x00000022 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14121,7 +14121,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14137,7 +14137,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14497,7 +14497,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14513,7 +14513,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14529,7 +14529,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14545,7 +14545,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14561,7 +14561,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14577,7 +14577,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14593,7 +14593,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14609,7 +14609,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14625,7 +14625,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14641,7 +14641,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0009 + return 0x00000009 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14657,7 +14657,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14673,7 +14673,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14689,7 +14689,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14705,7 +14705,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14721,7 +14721,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14737,7 +14737,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14753,7 +14753,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0016 + return 0x00000016 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14769,7 +14769,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0017 + return 0x00000017 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14785,7 +14785,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0018 + return 0x00000018 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14801,7 +14801,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0019 + return 0x00000019 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14817,7 +14817,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001A + return 0x0000001A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14833,7 +14833,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001B + return 0x0000001B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14849,7 +14849,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001C + return 0x0000001C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14865,7 +14865,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001D + return 0x0000001D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14881,7 +14881,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001E + return 0x0000001E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14897,7 +14897,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0020 + return 0x00000020 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14913,7 +14913,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0021 + return 0x00000021 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14929,7 +14929,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0022 + return 0x00000022 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14945,7 +14945,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0023 + return 0x00000023 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14961,7 +14961,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0024 + return 0x00000024 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14977,7 +14977,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0025 + return 0x00000025 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -14993,7 +14993,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0029 + return 0x00000029 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15009,7 +15009,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0030 + return 0x00000030 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15025,7 +15025,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0031 + return 0x00000031 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15041,7 +15041,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0032 + return 0x00000032 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15057,7 +15057,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0040 + return 0x00000040 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15073,7 +15073,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0041 + return 0x00000041 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15089,7 +15089,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0042 + return 0x00000042 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15105,7 +15105,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0043 + return 0x00000043 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15121,7 +15121,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0044 + return 0x00000044 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15137,7 +15137,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0045 + return 0x00000045 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15153,7 +15153,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0046 + return 0x00000046 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15169,7 +15169,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0047 + return 0x00000047 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15185,7 +15185,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15201,7 +15201,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15223,7 +15223,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15239,7 +15239,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15255,7 +15255,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15271,7 +15271,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15293,7 +15293,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15309,7 +15309,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15325,7 +15325,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15341,7 +15341,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15357,7 +15357,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15373,7 +15373,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15389,7 +15389,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15405,7 +15405,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15421,7 +15421,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15437,7 +15437,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15459,7 +15459,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15475,7 +15475,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15491,7 +15491,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15507,7 +15507,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -15523,7 +15523,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16105,7 +16105,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16121,7 +16121,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16137,7 +16137,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16153,7 +16153,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16169,7 +16169,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16185,7 +16185,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16201,7 +16201,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16217,7 +16217,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16233,7 +16233,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16249,7 +16249,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000F + return 0x0000000F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16265,7 +16265,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16281,7 +16281,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16297,7 +16297,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16313,7 +16313,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16329,7 +16329,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16345,7 +16345,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0016 + return 0x00000016 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16361,7 +16361,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0017 + return 0x00000017 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16377,7 +16377,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0019 + return 0x00000019 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16393,7 +16393,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001A + return 0x0000001A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16409,7 +16409,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001B + return 0x0000001B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16425,7 +16425,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0020 + return 0x00000020 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16441,7 +16441,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0021 + return 0x00000021 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16457,7 +16457,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0022 + return 0x00000022 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16473,7 +16473,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0024 + return 0x00000024 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16489,7 +16489,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0025 + return 0x00000025 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16505,7 +16505,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0026 + return 0x00000026 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16521,7 +16521,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0028 + return 0x00000028 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16537,7 +16537,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0029 + return 0x00000029 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16553,7 +16553,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x002A + return 0x0000002A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16569,7 +16569,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0030 + return 0x00000030 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16585,7 +16585,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0031 + return 0x00000031 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16601,7 +16601,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0032 + return 0x00000032 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16617,7 +16617,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0033 + return 0x00000033 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16633,7 +16633,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0034 + return 0x00000034 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16649,7 +16649,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0036 + return 0x00000036 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16665,7 +16665,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0037 + return 0x00000037 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16681,7 +16681,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0038 + return 0x00000038 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16697,7 +16697,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003A + return 0x0000003A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16713,7 +16713,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003B + return 0x0000003B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16729,7 +16729,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x003C + return 0x0000003C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16745,7 +16745,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4000 + return 0x00004000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16761,7 +16761,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4001 + return 0x00004001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16777,7 +16777,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4002 + return 0x00004002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16793,7 +16793,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4003 + return 0x00004003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16809,7 +16809,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4004 + return 0x00004004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16825,7 +16825,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4005 + return 0x00004005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16841,7 +16841,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4006 + return 0x00004006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16857,7 +16857,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x400A + return 0x0000400A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16873,7 +16873,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x400B + return 0x0000400B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16889,7 +16889,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x400C + return 0x0000400C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16905,7 +16905,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x400D + return 0x0000400D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16921,7 +16921,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x4010 + return 0x00004010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16937,7 +16937,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16953,7 +16953,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16975,7 +16975,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -16991,7 +16991,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17007,7 +17007,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17023,7 +17023,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17039,7 +17039,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17055,7 +17055,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17071,7 +17071,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17087,7 +17087,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17103,7 +17103,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17119,7 +17119,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0020 + return 0x00000020 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17135,7 +17135,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0030 + return 0x00000030 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17151,7 +17151,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0031 + return 0x00000031 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17167,7 +17167,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0032 + return 0x00000032 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17183,7 +17183,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0033 + return 0x00000033 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17199,7 +17199,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0034 + return 0x00000034 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17215,7 +17215,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0035 + return 0x00000035 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17231,7 +17231,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17247,7 +17247,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17274,7 +17274,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17290,7 +17290,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17306,7 +17306,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17322,7 +17322,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17338,7 +17338,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17354,7 +17354,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17370,7 +17370,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17392,7 +17392,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17408,7 +17408,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17424,7 +17424,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17440,7 +17440,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17456,7 +17456,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17472,7 +17472,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17494,7 +17494,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17510,7 +17510,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17526,7 +17526,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17542,7 +17542,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17558,7 +17558,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17574,7 +17574,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17590,7 +17590,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17606,7 +17606,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17622,7 +17622,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17638,7 +17638,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17654,7 +17654,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17676,7 +17676,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17692,7 +17692,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17708,7 +17708,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17724,7 +17724,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17740,7 +17740,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17756,7 +17756,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17778,7 +17778,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17794,7 +17794,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17810,7 +17810,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17826,7 +17826,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17842,7 +17842,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17858,7 +17858,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17880,7 +17880,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17896,7 +17896,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17912,7 +17912,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17928,7 +17928,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17944,7 +17944,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17960,7 +17960,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17976,7 +17976,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0020 + return 0x00000020 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -17992,7 +17992,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0021 + return 0x00000021 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18008,7 +18008,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0022 + return 0x00000022 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18024,7 +18024,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0030 + return 0x00000030 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18040,7 +18040,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0031 + return 0x00000031 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18056,7 +18056,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0032 + return 0x00000032 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18072,7 +18072,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18088,7 +18088,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18110,7 +18110,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18126,7 +18126,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18142,7 +18142,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18158,7 +18158,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18174,7 +18174,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18190,7 +18190,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18212,7 +18212,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18228,7 +18228,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18244,7 +18244,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18260,7 +18260,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18276,7 +18276,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18292,7 +18292,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18314,7 +18314,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18330,7 +18330,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18346,7 +18346,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18362,7 +18362,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18378,7 +18378,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18394,7 +18394,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18416,7 +18416,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18432,7 +18432,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18448,7 +18448,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18464,7 +18464,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18480,7 +18480,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18496,7 +18496,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18518,7 +18518,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18534,7 +18534,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18550,7 +18550,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18566,7 +18566,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18582,7 +18582,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18598,7 +18598,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18620,7 +18620,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18636,7 +18636,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18652,7 +18652,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18668,7 +18668,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18684,7 +18684,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18700,7 +18700,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18722,7 +18722,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18738,7 +18738,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18754,7 +18754,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18770,7 +18770,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18786,7 +18786,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18802,7 +18802,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18824,7 +18824,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18840,7 +18840,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18856,7 +18856,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18872,7 +18872,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18888,7 +18888,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18904,7 +18904,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18926,7 +18926,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18942,7 +18942,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18958,7 +18958,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18974,7 +18974,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -18990,7 +18990,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19006,7 +19006,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19028,7 +19028,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19044,7 +19044,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19060,7 +19060,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19076,7 +19076,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19092,7 +19092,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19108,7 +19108,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19130,7 +19130,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19146,7 +19146,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19162,7 +19162,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19178,7 +19178,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19194,7 +19194,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19210,7 +19210,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19232,7 +19232,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19248,7 +19248,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19264,7 +19264,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19280,7 +19280,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19296,7 +19296,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19312,7 +19312,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19334,7 +19334,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19350,7 +19350,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19366,7 +19366,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19382,7 +19382,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19398,7 +19398,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19414,7 +19414,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19436,7 +19436,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19452,7 +19452,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19468,7 +19468,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19484,7 +19484,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19500,7 +19500,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19516,7 +19516,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19538,7 +19538,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19554,7 +19554,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19570,7 +19570,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19586,7 +19586,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19602,7 +19602,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19618,7 +19618,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19640,7 +19640,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19656,7 +19656,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19672,7 +19672,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19688,7 +19688,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19704,7 +19704,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19720,7 +19720,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19742,7 +19742,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19758,7 +19758,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19774,7 +19774,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19790,7 +19790,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19806,7 +19806,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19822,7 +19822,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19844,7 +19844,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19860,7 +19860,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19876,7 +19876,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19892,7 +19892,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19908,7 +19908,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19924,7 +19924,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19946,7 +19946,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19962,7 +19962,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19978,7 +19978,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -19994,7 +19994,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20010,7 +20010,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20026,7 +20026,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20048,7 +20048,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20064,7 +20064,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20080,7 +20080,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20096,7 +20096,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20112,7 +20112,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20128,7 +20128,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20150,7 +20150,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20166,7 +20166,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20182,7 +20182,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20198,7 +20198,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20214,7 +20214,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20230,7 +20230,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20252,7 +20252,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20268,7 +20268,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20284,7 +20284,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20300,7 +20300,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20316,7 +20316,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20332,7 +20332,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20354,7 +20354,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20370,7 +20370,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20386,7 +20386,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20402,7 +20402,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20418,7 +20418,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20434,7 +20434,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20456,7 +20456,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20472,7 +20472,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20488,7 +20488,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20504,7 +20504,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20520,7 +20520,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20536,7 +20536,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20558,7 +20558,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20574,7 +20574,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20590,7 +20590,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20606,7 +20606,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20622,7 +20622,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20638,7 +20638,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20660,7 +20660,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20676,7 +20676,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20692,7 +20692,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20708,7 +20708,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20724,7 +20724,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20740,7 +20740,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20762,7 +20762,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20778,7 +20778,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20794,7 +20794,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20810,7 +20810,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20826,7 +20826,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20842,7 +20842,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20864,7 +20864,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20880,7 +20880,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20896,7 +20896,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20912,7 +20912,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20928,7 +20928,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20944,7 +20944,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20966,7 +20966,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20982,7 +20982,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -20998,7 +20998,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21014,7 +21014,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21030,7 +21030,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21046,7 +21046,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21068,7 +21068,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21084,7 +21084,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21100,7 +21100,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21116,7 +21116,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21132,7 +21132,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21148,7 +21148,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21314,7 +21314,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21330,7 +21330,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21346,7 +21346,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21362,7 +21362,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21378,7 +21378,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21394,7 +21394,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21410,7 +21410,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21426,7 +21426,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21442,7 +21442,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21943,7 +21943,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -21959,7 +21959,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22023,7 +22023,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22039,7 +22039,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22055,7 +22055,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22077,7 +22077,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22093,7 +22093,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22109,7 +22109,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22256,7 +22256,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22272,7 +22272,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22288,7 +22288,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22304,7 +22304,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22320,7 +22320,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22403,7 +22403,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22419,7 +22419,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22435,7 +22435,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22451,7 +22451,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22825,7 +22825,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22841,7 +22841,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22857,7 +22857,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22873,7 +22873,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22889,7 +22889,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22905,7 +22905,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22921,7 +22921,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22937,7 +22937,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22953,7 +22953,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -22969,7 +22969,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23088,7 +23088,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23104,7 +23104,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23120,7 +23120,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23136,7 +23136,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23171,7 +23171,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23187,7 +23187,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23336,7 +23336,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23352,7 +23352,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23575,7 +23575,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23591,7 +23591,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23607,7 +23607,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23623,7 +23623,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23709,7 +23709,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23725,7 +23725,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23741,7 +23741,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23757,7 +23757,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23843,7 +23843,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23859,7 +23859,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23875,7 +23875,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23891,7 +23891,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23907,7 +23907,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23953,7 +23953,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23969,7 +23969,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -23985,7 +23985,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24001,7 +24001,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24017,7 +24017,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24033,7 +24033,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24049,7 +24049,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24065,7 +24065,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24081,7 +24081,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24155,7 +24155,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24171,7 +24171,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24949,7 +24949,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24965,7 +24965,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24981,7 +24981,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0002 + return 0x00000002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -24997,7 +24997,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0003 + return 0x00000003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25013,7 +25013,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25029,7 +25029,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25045,7 +25045,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25061,7 +25061,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25077,7 +25077,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000C + return 0x0000000C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25093,7 +25093,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000D + return 0x0000000D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25109,7 +25109,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000E + return 0x0000000E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25125,7 +25125,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25141,7 +25141,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25157,7 +25157,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25173,7 +25173,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0016 + return 0x00000016 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25189,7 +25189,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0019 + return 0x00000019 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25205,7 +25205,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001A + return 0x0000001A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25221,7 +25221,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001B + return 0x0000001B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25237,7 +25237,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001C + return 0x0000001C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25253,7 +25253,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001D + return 0x0000001D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25269,7 +25269,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001E + return 0x0000001E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25285,7 +25285,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001F + return 0x0000001F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25301,7 +25301,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0020 + return 0x00000020 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25317,7 +25317,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0021 + return 0x00000021 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25333,7 +25333,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0022 + return 0x00000022 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25349,7 +25349,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0023 + return 0x00000023 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25365,7 +25365,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x00FF + return 0x000000FF @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25381,7 +25381,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8000 + return 0x00008000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25397,7 +25397,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8001 + return 0x00008001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25413,7 +25413,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8002 + return 0x00008002 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25429,7 +25429,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8003 + return 0x00008003 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25445,7 +25445,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8004 + return 0x00008004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25461,7 +25461,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8005 + return 0x00008005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25477,7 +25477,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8006 + return 0x00008006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25493,7 +25493,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8008 + return 0x00008008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25509,7 +25509,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x800C + return 0x0000800C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25525,7 +25525,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x800D + return 0x0000800D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25541,7 +25541,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x800E + return 0x0000800E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25557,7 +25557,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8010 + return 0x00008010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25573,7 +25573,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8014 + return 0x00008014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25589,7 +25589,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8015 + return 0x00008015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25605,7 +25605,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8016 + return 0x00008016 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25621,7 +25621,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x8019 + return 0x00008019 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25637,7 +25637,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x801E + return 0x0000801E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25653,7 +25653,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25669,7 +25669,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25977,7 +25977,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -25993,7 +25993,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26015,7 +26015,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26031,7 +26031,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0010 + return 0x00000010 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26047,7 +26047,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0011 + return 0x00000011 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26063,7 +26063,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0012 + return 0x00000012 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26079,7 +26079,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0013 + return 0x00000013 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26095,7 +26095,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0014 + return 0x00000014 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26111,7 +26111,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0015 + return 0x00000015 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26127,7 +26127,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0016 + return 0x00000016 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26143,7 +26143,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0017 + return 0x00000017 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26159,7 +26159,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0018 + return 0x00000018 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26175,7 +26175,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0019 + return 0x00000019 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26191,7 +26191,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x001A + return 0x0000001A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26207,7 +26207,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26223,7 +26223,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26245,7 +26245,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26261,7 +26261,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26277,7 +26277,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0004 + return 0x00000004 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26293,7 +26293,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0005 + return 0x00000005 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26309,7 +26309,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0006 + return 0x00000006 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26325,7 +26325,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0007 + return 0x00000007 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26341,7 +26341,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0008 + return 0x00000008 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26357,7 +26357,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000A + return 0x0000000A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26373,7 +26373,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000B + return 0x0000000B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26389,7 +26389,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000C + return 0x0000000C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26405,7 +26405,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000D + return 0x0000000D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26421,7 +26421,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x000E + return 0x0000000E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26437,7 +26437,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26453,7 +26453,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26553,7 +26553,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26569,7 +26569,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26708,7 +26708,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26724,7 +26724,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26740,7 +26740,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26756,7 +26756,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26869,7 +26869,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26885,7 +26885,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0100 + return 0x00000100 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26901,7 +26901,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0101 + return 0x00000101 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26917,7 +26917,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0102 + return 0x00000102 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26933,7 +26933,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0103 + return 0x00000103 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26949,7 +26949,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0104 + return 0x00000104 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26965,7 +26965,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0105 + return 0x00000105 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26981,7 +26981,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0106 + return 0x00000106 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -26997,7 +26997,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0107 + return 0x00000107 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27013,7 +27013,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0108 + return 0x00000108 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27029,7 +27029,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0200 + return 0x00000200 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27045,7 +27045,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0201 + return 0x00000201 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27061,7 +27061,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0202 + return 0x00000202 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27077,7 +27077,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0203 + return 0x00000203 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27093,7 +27093,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0204 + return 0x00000204 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27109,7 +27109,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0205 + return 0x00000205 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27125,7 +27125,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0300 + return 0x00000300 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27141,7 +27141,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0301 + return 0x00000301 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27157,7 +27157,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0302 + return 0x00000302 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27173,7 +27173,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0303 + return 0x00000303 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27189,7 +27189,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0304 + return 0x00000304 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27205,7 +27205,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0305 + return 0x00000305 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27221,7 +27221,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0306 + return 0x00000306 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27237,7 +27237,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0307 + return 0x00000307 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27253,7 +27253,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0308 + return 0x00000308 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27269,7 +27269,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0309 + return 0x00000309 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27285,7 +27285,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x030A + return 0x0000030A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27301,7 +27301,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x030B + return 0x0000030B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27317,7 +27317,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x030C + return 0x0000030C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27333,7 +27333,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x030D + return 0x0000030D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27349,7 +27349,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x030E + return 0x0000030E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27365,7 +27365,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x030F + return 0x0000030F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27381,7 +27381,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0310 + return 0x00000310 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27397,7 +27397,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0311 + return 0x00000311 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27413,7 +27413,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0312 + return 0x00000312 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27429,7 +27429,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0400 + return 0x00000400 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27445,7 +27445,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0401 + return 0x00000401 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27461,7 +27461,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0402 + return 0x00000402 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27477,7 +27477,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0403 + return 0x00000403 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27493,7 +27493,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0404 + return 0x00000404 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27509,7 +27509,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0405 + return 0x00000405 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27525,7 +27525,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0500 + return 0x00000500 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27541,7 +27541,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0501 + return 0x00000501 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27557,7 +27557,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0502 + return 0x00000502 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27573,7 +27573,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0503 + return 0x00000503 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27589,7 +27589,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0504 + return 0x00000504 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27605,7 +27605,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0505 + return 0x00000505 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27621,7 +27621,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0506 + return 0x00000506 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27637,7 +27637,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0507 + return 0x00000507 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27653,7 +27653,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0508 + return 0x00000508 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27669,7 +27669,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0509 + return 0x00000509 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27685,7 +27685,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x050A + return 0x0000050A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27701,7 +27701,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x050B + return 0x0000050B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27717,7 +27717,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x050C + return 0x0000050C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27733,7 +27733,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x050D + return 0x0000050D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27749,7 +27749,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x050E + return 0x0000050E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27765,7 +27765,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x050F + return 0x0000050F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27781,7 +27781,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0510 + return 0x00000510 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27797,7 +27797,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0511 + return 0x00000511 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27813,7 +27813,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0513 + return 0x00000513 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27829,7 +27829,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0514 + return 0x00000514 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27845,7 +27845,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0515 + return 0x00000515 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27861,7 +27861,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0516 + return 0x00000516 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27877,7 +27877,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0517 + return 0x00000517 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27893,7 +27893,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0600 + return 0x00000600 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27909,7 +27909,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0601 + return 0x00000601 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27925,7 +27925,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0602 + return 0x00000602 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27941,7 +27941,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0603 + return 0x00000603 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27957,7 +27957,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0604 + return 0x00000604 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27973,7 +27973,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0605 + return 0x00000605 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -27989,7 +27989,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0700 + return 0x00000700 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28005,7 +28005,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0701 + return 0x00000701 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28021,7 +28021,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0702 + return 0x00000702 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28037,7 +28037,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0800 + return 0x00000800 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28053,7 +28053,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0801 + return 0x00000801 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28069,7 +28069,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0802 + return 0x00000802 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28085,7 +28085,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0803 + return 0x00000803 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28101,7 +28101,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0804 + return 0x00000804 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28117,7 +28117,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0805 + return 0x00000805 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28133,7 +28133,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0806 + return 0x00000806 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28149,7 +28149,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0807 + return 0x00000807 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28165,7 +28165,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0808 + return 0x00000808 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28181,7 +28181,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0809 + return 0x00000809 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28197,7 +28197,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x080A + return 0x0000080A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28213,7 +28213,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0901 + return 0x00000901 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28229,7 +28229,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0902 + return 0x00000902 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28245,7 +28245,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0903 + return 0x00000903 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28261,7 +28261,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0905 + return 0x00000905 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28277,7 +28277,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0906 + return 0x00000906 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28293,7 +28293,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0907 + return 0x00000907 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28309,7 +28309,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0908 + return 0x00000908 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28325,7 +28325,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0909 + return 0x00000909 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28341,7 +28341,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x090A + return 0x0000090A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28357,7 +28357,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x090B + return 0x0000090B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28373,7 +28373,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x090C + return 0x0000090C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28389,7 +28389,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x090D + return 0x0000090D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28405,7 +28405,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x090E + return 0x0000090E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28421,7 +28421,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x090F + return 0x0000090F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28437,7 +28437,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0910 + return 0x00000910 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28453,7 +28453,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0911 + return 0x00000911 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28469,7 +28469,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0912 + return 0x00000912 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28485,7 +28485,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0913 + return 0x00000913 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28501,7 +28501,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0914 + return 0x00000914 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28517,7 +28517,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0915 + return 0x00000915 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28533,7 +28533,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0916 + return 0x00000916 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28549,7 +28549,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0917 + return 0x00000917 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28565,7 +28565,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A01 + return 0x00000A01 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28581,7 +28581,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A02 + return 0x00000A02 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28597,7 +28597,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A03 + return 0x00000A03 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28613,7 +28613,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A05 + return 0x00000A05 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28629,7 +28629,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A06 + return 0x00000A06 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28645,7 +28645,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A07 + return 0x00000A07 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28661,7 +28661,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A08 + return 0x00000A08 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28677,7 +28677,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A09 + return 0x00000A09 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28693,7 +28693,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A0A + return 0x00000A0A @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28709,7 +28709,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A0B + return 0x00000A0B @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28725,7 +28725,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A0C + return 0x00000A0C @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28741,7 +28741,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A0D + return 0x00000A0D @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28757,7 +28757,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A0E + return 0x00000A0E @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28773,7 +28773,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A0F + return 0x00000A0F @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28789,7 +28789,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A10 + return 0x00000A10 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28805,7 +28805,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A11 + return 0x00000A11 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28821,7 +28821,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A12 + return 0x00000A12 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28837,7 +28837,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A13 + return 0x00000A13 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28853,7 +28853,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A14 + return 0x00000A14 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28869,7 +28869,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A15 + return 0x00000A15 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28885,7 +28885,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A16 + return 0x00000A16 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28901,7 +28901,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0A17 + return 0x00000A17 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28917,7 +28917,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -28933,7 +28933,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -29006,7 +29006,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -29022,7 +29022,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -29092,7 +29092,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0000 + return 0x00000000 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -29108,7 +29108,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0x0001 + return 0x00000001 @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -29124,7 +29124,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFC + return 0x0000FFFC @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: @@ -29140,7 +29140,7 @@ def cluster_id(cls) -> int: @ChipUtility.classproperty def attribute_id(cls) -> int: - return 0xFFFD + return 0x0000FFFD @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: diff --git a/src/controller/python/templates/python-cluster-Objects-py.zapt b/src/controller/python/templates/python-cluster-Objects-py.zapt index b860e11185b1b6..aa80f09a88bfa0 100644 --- a/src/controller/python/templates/python-cluster-Objects-py.zapt +++ b/src/controller/python/templates/python-cluster-Objects-py.zapt @@ -96,7 +96,7 @@ class {{asUpperCamelCase name}}(Cluster): @ChipUtility.classproperty def attribute_id(cls) -> int: - return {{ asHex code 4 }} + return {{ asMEI manufacturerCode code }} @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: diff --git a/src/controller/python/test/test_scripts/cluster_objects.py b/src/controller/python/test/test_scripts/cluster_objects.py index 3b1d15dda2fe4f..c1d1f584bea585 100644 --- a/src/controller/python/test/test_scripts/cluster_objects.py +++ b/src/controller/python/test/test_scripts/cluster_objects.py @@ -96,54 +96,55 @@ async def SendWriteRequest(cls, devCtrl): raise AssertionError("Read returned unexpected result.") @classmethod - async def SendReadRequest(cls, devCtrl): + async def TestReadRequests(cls, devCtrl): + ''' + Tests out various permutations of endpoint, cluster and attribute ID (with wildcards) to validate + reads. + + With the use of cluster objects, the actual received data is validated against the data model description + for those values, so no extra validation has to be done here in this test for the values themselves. + ''' + + logger.info("1: Reading Ex Cx Ax") req = [ (0, Clusters.Basic.Attributes.VendorName), - (0, Clusters.Basic.Attributes.VendorID), - (0, Clusters.Basic.Attributes.ProductName), (0, Clusters.Basic.Attributes.ProductID), - (0, Clusters.Basic.Attributes.NodeLabel), - (0, Clusters.Basic.Attributes.Location), (0, Clusters.Basic.Attributes.HardwareVersion), - (0, Clusters.Basic.Attributes.HardwareVersionString), - (0, Clusters.Basic.Attributes.SoftwareVersion), - (0, Clusters.Basic.Attributes.SoftwareVersionString), ] + res = await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req) + if (len(res) != 3): + raise AssertionError( + f"Got back {len(res)} data items instead of 3") - # Note: The server might be too small to handle reading lots of attributes at the same time. - res = [ - await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=[r]) for r in req + logger.info("2: Reading Ex Cx A*") + req = [ + (0, Clusters.Basic), ] + await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req) - expectedRes = [ - [AttributeReadResult(Path=AttributePath( - EndpointId=0, ClusterId=40, AttributeId=1), Status=chip.interaction_model.Status.Success, Data='TEST_VENDOR'), ], - [AttributeReadResult(Path=AttributePath( - EndpointId=0, ClusterId=40, AttributeId=2), Status=chip.interaction_model.Status.Success, Data=9050), ], - [AttributeReadResult(Path=AttributePath( - EndpointId=0, ClusterId=40, AttributeId=3), Status=chip.interaction_model.Status.Success, Data='TEST_PRODUCT'), ], - [AttributeReadResult(Path=AttributePath( - EndpointId=0, ClusterId=40, AttributeId=4), Status=chip.interaction_model.Status.Success, Data=65279), ], - [AttributeReadResult(Path=AttributePath( - EndpointId=0, ClusterId=40, AttributeId=5), Status=chip.interaction_model.Status.Success, Data='Test'), ], - [AttributeReadResult(Path=AttributePath( - EndpointId=0, ClusterId=40, AttributeId=6), Status=chip.interaction_model.Status.Success, Data=''), ], - [AttributeReadResult(Path=AttributePath( - EndpointId=0, ClusterId=40, AttributeId=7), Status=chip.interaction_model.Status.Success, Data=0), ], - [AttributeReadResult(Path=AttributePath( - EndpointId=0, ClusterId=40, AttributeId=8), Status=chip.interaction_model.Status.Success, Data='TEST_VERSION'), ], - [AttributeReadResult(Path=AttributePath( - EndpointId=0, ClusterId=40, AttributeId=9), Status=chip.interaction_model.Status.Success, Data=0), ], - [AttributeReadResult(Path=AttributePath( - EndpointId=0, ClusterId=40, AttributeId=10), Status=chip.interaction_model.Status.Success, Data='prerelease')], + logger.info("3: Reading E* Cx Ax") + req = [ + Clusters.Descriptor.Attributes.ServerList ] + await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req) - if res != expectedRes: - for i in range(len(res)): - if res[i] != expectedRes[i]: - logger.error( - f"Item {i} is not expected, expect {expectedRes[i]} got {res[i]}") - raise AssertionError("Read returned unexpected result.") + logger.info("4: Reading Ex C* A*") + req = [ + 0 + ] + await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req) + + logger.info("5: Reading E* Cx A*") + req = [ + Clusters.Descriptor + ] + await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req) + + logger.info("6: Reading E* C* A*") + req = [ + '*' + ] + await devCtrl.ReadAttribute(nodeid=NODE_ID, attributes=req) @classmethod async def RunTest(cls, devCtrl): @@ -153,7 +154,7 @@ async def RunTest(cls, devCtrl): await cls.RoundTripTestWithBadEndpoint(devCtrl) await cls.SendCommandWithResponse(devCtrl) await cls.SendWriteRequest(devCtrl) - await cls.SendReadRequest(devCtrl) + await cls.TestReadRequests(devCtrl) except Exception as ex: logger.error( f"Unexpected error occurred when running tests: {ex}") diff --git a/src/controller/tests/BUILD.gn b/src/controller/tests/BUILD.gn index f274c53eb96862..563c32e6f36ed6 100644 --- a/src/controller/tests/BUILD.gn +++ b/src/controller/tests/BUILD.gn @@ -23,8 +23,10 @@ chip_test_suite("tests") { test_sources = [ "TestCommissionableNodeController.cpp" ] - if (chip_device_platform != "mbed" && chip_device_platform != "efr32") { + if (chip_device_platform != "mbed" && chip_device_platform != "efr32" && + chip_device_platform != "esp32") { test_sources += [ "TestServerCommandDispatch.cpp" ] + test_sources += [ "TestReadChunking.cpp" ] } cflags = [ "-Wconversion" ] diff --git a/src/controller/tests/TestReadChunking.cpp b/src/controller/tests/TestReadChunking.cpp new file mode 100644 index 00000000000000..d4af5407088e17 --- /dev/null +++ b/src/controller/tests/TestReadChunking.cpp @@ -0,0 +1,239 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "app-common/zap-generated/ids/Attributes.h" +#include "app-common/zap-generated/ids/Clusters.h" +#include "app/ConcreteAttributePath.h" +#include "protocols/interaction_model/Constants.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using TestContext = chip::Test::AppContext; +using namespace chip; +using namespace chip::app::Clusters; + +namespace { + +uint32_t gIterationCount = 0; +nlTestSuite * gSuite = nullptr; + +// +// The generated endpoint_config for the controller app has Endpoint 1 +// already used in the fixed endpoint set of size 1. Consequently, let's use the next +// number higher than that for our dynamic test endpoint. +// +constexpr EndpointId kTestEndpointId = 2; + +class TestCommandInteraction +{ +public: + TestCommandInteraction() {} + static void TestChunking(nlTestSuite * apSuite, void * apContext); + +private: +}; + +//clang-format off +DECLARE_DYNAMIC_ATTRIBUTE_LIST_BEGIN(testClusterAttrs) +DECLARE_DYNAMIC_ATTRIBUTE(0x00000001, INT8U, 1, 0), DECLARE_DYNAMIC_ATTRIBUTE(0x00000002, INT8U, 1, 0), + DECLARE_DYNAMIC_ATTRIBUTE(0x00000003, INT8U, 1, 0), DECLARE_DYNAMIC_ATTRIBUTE(0x00000004, INT8U, 1, 0), + DECLARE_DYNAMIC_ATTRIBUTE(0x00000005, INT8U, 1, 0), DECLARE_DYNAMIC_ATTRIBUTE_LIST_END(); + +DECLARE_DYNAMIC_CLUSTER_LIST_BEGIN(testEndpointClusters) +DECLARE_DYNAMIC_CLUSTER(TestCluster::Id, testClusterAttrs), DECLARE_DYNAMIC_CLUSTER_LIST_END; + +DECLARE_DYNAMIC_ENDPOINT(testEndpoint, testEndpointClusters); +//clang-format on + +class TestReadCallback : public app::ReadClient::Callback +{ +public: + void OnAttributeData(const app::ReadClient * apReadClient, const app::ConcreteDataAttributePath & aPath, + TLV::TLVReader * apData, const app::StatusIB & aStatus) override; + + void OnDone(app::ReadClient * apReadClient) override; + + void OnReportEnd(const app::ReadClient * apReadClient) override { mOnReportEnd = true; } + + uint32_t mAttributeCount = 0; + bool mOnReportEnd = false; +}; + +void TestReadCallback::OnAttributeData(const app::ReadClient * apReadClient, const app::ConcreteDataAttributePath & aPath, + TLV::TLVReader * apData, const app::StatusIB & aStatus) +{ + uint8_t v; + NL_TEST_ASSERT(gSuite, app::DataModel::Decode(*apData, v) == CHIP_NO_ERROR); + NL_TEST_ASSERT(gSuite, v == (uint8_t) gIterationCount); + mAttributeCount++; +} + +void TestReadCallback::OnDone(app::ReadClient * apReadClient) {} + +class TestAttrAccess : public app::AttributeAccessInterface +{ +public: + // Register for the Test Cluster cluster on all endpoints. + TestAttrAccess() : AttributeAccessInterface(Optional::Missing(), TestCluster::Id) {} + + CHIP_ERROR Read(const app::ConcreteReadAttributePath & aPath, app::AttributeValueEncoder & aEncoder) override; + CHIP_ERROR Write(const app::ConcreteDataAttributePath & aPath, app::AttributeValueDecoder & aDecoder) override; +}; + +CHIP_ERROR TestAttrAccess::Read(const app::ConcreteReadAttributePath & aPath, app::AttributeValueEncoder & aEncoder) +{ + return aEncoder.Encode((uint8_t) gIterationCount); +} + +CHIP_ERROR TestAttrAccess::Write(const app::ConcreteDataAttributePath & aPath, app::AttributeValueDecoder & aDecoder) +{ + return CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE; +} + +/* + * This validates all the various corner cases encountered during chunking by + * artifically reducing the size of a packet buffer used to encode attribute data + * to force chunking to happen over multiple packets even with a small number of attributes + * and then slowly increasing the available size by 1 byte in each test iteration and re-running + * the report generation logic. This 1-byte incremental approach sweeps through from a base scenario of + * N attributes fitting in a report, to eventually resulting in N+1 attributes fitting in a report. + + * This will cause all the various corner cases encountered of closing out the various containers within + * the report and thoroughly and definitely validate those edge cases. + * + * Importantly, this test tries to re-use *as much as possible* the actual IM constructs used by real + * server-side applications. Consequently, this is why it registers a dynamic endpoint + fake attribute access + * interface to simulate faithfully a real application. This ensures validation of as much production logic pathways + * as we can possibly cover. + * + */ +void TestCommandInteraction::TestChunking(nlTestSuite * apSuite, void * apContext) +{ + TestContext & ctx = *static_cast(apContext); + auto sessionHandle = ctx.GetSessionBobToAlice(); + app::InteractionModelEngine * engine = app::InteractionModelEngine::GetInstance(); + app::ReadClient * readClient; + TestAttrAccess testServer; + + // Initialize the ember side server logic + InitDataModelHandler(&ctx.GetExchangeManager()); + + // Register our fake dynamic endpoint. + emberAfSetDynamicEndpoint(0, kTestEndpointId, &testEndpoint, 0, 0); + + // Register our fake attribute access interface. + registerAttributeAccessOverride(&testServer); + + app::AttributePathParams attributePath(kTestEndpointId, app::Clusters::TestCluster::Id); + app::ReadPrepareParams readParams(sessionHandle); + + readParams.mpAttributePathParamsList = &attributePath; + readParams.mAttributePathParamsListSize = 1; + + // + // We've empirically determined that by reserving 950 bytes in the packet buffer, we can fit 2 + // AttributeDataIBs into the packet. ~30-40 bytes covers a single AttributeDataIB, but let's 2-3x that + // to ensure we'll sweep from fitting 2 IBs to 3-4 IBs. + // + for (int i = 100; i > 0; i--) + { + TestReadCallback readCallback; + + ChipLogDetail(DataManagement, "Running iteration %d\n", i); + + gIterationCount = (uint32_t) i; + + app::InteractionModelEngine::GetInstance()->GetReportingEngine().SetWriterReserved((uint32_t)(850 + i)); + + NL_TEST_ASSERT(apSuite, + engine->NewReadClient(&readClient, app::ReadClient::InteractionType::Read, &readCallback) == CHIP_NO_ERROR); + NL_TEST_ASSERT(apSuite, readClient->SendReadRequest(readParams) == CHIP_NO_ERROR); + + // + // Service the IO + Engine till we get a ReportEnd callback on the client. + // Since bugs can happen, we don't want this test to never stop, so create a ceiling for how many + // times this can run without seeing expected results. + // + for (int j = 0; j < 10 && !readCallback.mOnReportEnd; j++) + { + ctx.DrainAndServiceIO(); + chip::app::InteractionModelEngine::GetInstance()->GetReportingEngine().Run(); + ctx.DrainAndServiceIO(); + } + + // + // Always returns the same number of attributes read (5 + revision = 6). + // + NL_TEST_ASSERT(apSuite, readCallback.mAttributeCount == 6); + readCallback.mAttributeCount = 0; + + NL_TEST_ASSERT(apSuite, ctx.GetExchangeManager().GetNumActiveExchanges() == 0); + + // + // Stop the test if we detected an error. Otherwise, it'll be difficult to read the logs. + // + if (apSuite->flagError) + { + break; + } + } +} + +// clang-format off +const nlTest sTests[] = +{ + NL_TEST_DEF("TestChunking", TestCommandInteraction::TestChunking), + NL_TEST_SENTINEL() +}; + +// clang-format on + +// clang-format off +nlTestSuite sSuite = +{ + "TestReadChunking", + &sTests[0], + TestContext::InitializeAsync, + TestContext::Finalize +}; +// clang-format on + +} // namespace + +int TestReadChunkingTests() +{ + TestContext gContext; + gSuite = &sSuite; + nlTestRunner(&sSuite, &gContext); + return (nlTestRunnerStats(&sSuite)); +} + +CHIP_REGISTER_TEST_SUITE(TestReadChunkingTests) diff --git a/src/controller/tests/data_model/BUILD.gn b/src/controller/tests/data_model/BUILD.gn index 8293d9f1b827e5..ef85c92985ae29 100644 --- a/src/controller/tests/data_model/BUILD.gn +++ b/src/controller/tests/data_model/BUILD.gn @@ -22,7 +22,8 @@ import("${chip_root}/src/platform/device.gni") chip_test_suite("data_model") { output_name = "libDataModelTests" - if (chip_device_platform != "mbed" && chip_device_platform != "efr32") { + if (chip_device_platform != "mbed" && chip_device_platform != "efr32" && + chip_device_platform != "esp32") { test_sources = [ "TestCommands.cpp" ] test_sources += [ "TestRead.cpp" ] test_sources += [ "TestWrite.cpp" ] diff --git a/src/lib/core/CHIPConfig.h b/src/lib/core/CHIPConfig.h index 83c4461bed4b3e..0f78b4c2eef9ae 100644 --- a/src/lib/core/CHIPConfig.h +++ b/src/lib/core/CHIPConfig.h @@ -2494,6 +2494,16 @@ extern const char CHIP_NON_PRODUCTION_MARKER[]; #define CHIP_IM_MAX_NUM_WRITE_CLIENT 4 #endif +/** + * @def CONFIG_IM_BUILD_FOR_UNIT_TEST + * + * @brief Defines whether we're currently building the IM for unit testing, which enables a set of features + * that are only utilized in those tests. + */ +#ifndef CONFIG_IM_BUILD_FOR_UNIT_TEST +#define CONFIG_IM_BUILD_FOR_UNIT_TEST 0 +#endif + /** * @def CHIP_DEVICE_CONTROLLER_SUBSCRIPTION_ATTRIBUTE_PATH_POOL_SIZE * From 77258f7dffdc452c7a64aa4c6537679e77edf303 Mon Sep 17 00:00:00 2001 From: Dohyun Pyun Date: Mon, 29 Nov 2021 23:15:13 +0900 Subject: [PATCH 5/5] [TIZEN] Fix the potential build errors for ARM64 (#12312) --- src/platform/Tizen/BLEManagerImpl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/Tizen/BLEManagerImpl.cpp b/src/platform/Tizen/BLEManagerImpl.cpp index 65c63247ecb8a4..f51882d4b586a5 100644 --- a/src/platform/Tizen/BLEManagerImpl.cpp +++ b/src/platform/Tizen/BLEManagerImpl.cpp @@ -806,7 +806,7 @@ void BLEManagerImpl::HandleC1CharWriteEvent(BLE_CONNECTION_OBJECT conId, const u CHIP_ERROR err = CHIP_NO_ERROR; System::PacketBufferHandle buf; - ChipLogProgress(DeviceLayer, "Write request received for CHIPoBLE Client TX characteristic (data len %u)", len); + ChipLogProgress(DeviceLayer, "Write request received for CHIPoBLE Client TX characteristic (data len %zu)", len); // Copy the data to a packet buffer. buf = System::PacketBufferHandle::NewWithData(value, len); VerifyOrExit(!buf.IsNull(), err = CHIP_ERROR_NO_MEMORY); @@ -824,7 +824,7 @@ void BLEManagerImpl::HandleRXCharChanged(BLE_CONNECTION_OBJECT conId, const uint CHIP_ERROR err = CHIP_NO_ERROR; System::PacketBufferHandle buf; - ChipLogProgress(DeviceLayer, "Notification received on CHIPoBLE Client RX characteristic (data len %u)", len); + ChipLogProgress(DeviceLayer, "Notification received on CHIPoBLE Client RX characteristic (data len %zu)", len); // Copy the data to a packet buffer. buf = System::PacketBufferHandle::NewWithData(value, len); VerifyOrExit(!buf.IsNull(), err = CHIP_ERROR_NO_MEMORY);