[ota-requestor-app] Reference implementation for AnnounceOTAProvider command (#10434)
* implement ota-requestor command handlers and delegate class
* fix ota requestor delegate comment
* logging improvements from Tennessee's suggestions
* logging improvements/fixes and some name changes
* change AnnounceOTAProvider providerLocation field to chip::NodeID
* suggestions from Sergei
- handle default in announcementReason switch statement
- use auto & in emberAf callback
* use kUndefined values instead of Optional for FabricIndex and NodeId
* remove accidental esp32 folder
* restyling
* use DecodeableType in OTA Requestor Delegate
* regen with pep8 installed
* move emberAf handler for AnnounceOtaProvider to application code
* apply new timer argument fix
* rename providerId to providerNodeId
* remove ota-requestor directory (no longer used)
* use CHIP_ERROR_FORMAT
diff --git a/examples/ota-requestor-app/linux/ExampleSelfCommissioning.h b/examples/ota-requestor-app/linux/ExampleSelfCommissioning.h
index 99346b7..26e8b9c 100644
--- a/examples/ota-requestor-app/linux/ExampleSelfCommissioning.h
+++ b/examples/ota-requestor-app/linux/ExampleSelfCommissioning.h
@@ -42,7 +42,8 @@
VerifyOrExit(storage != nullptr && opCredsIssuer != nullptr, err = CHIP_ERROR_INVALID_ARGUMENT);
err = opCredsIssuer->Initialize(*storage);
- VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init failure! Operational Cred Issuer: %s", chip::ErrorStr(err)));
+ VerifyOrExit(err == CHIP_NO_ERROR,
+ ChipLogError(Controller, "Init failure! Operational Cred Issuer: %" CHIP_ERROR_FORMAT, err.Format()));
VerifyOrExit(rcac.Alloc(chip::Controller::kMaxCHIPDERCertLength), err = CHIP_ERROR_NO_MEMORY);
VerifyOrExit(noc.Alloc(chip::Controller::kMaxCHIPDERCertLength), err = CHIP_ERROR_NO_MEMORY);
@@ -74,10 +75,11 @@
auto & factory = chip::Controller::DeviceControllerFactory::GetInstance();
err = factory.Init(initParams);
- VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Controller Factory init failure! %s", chip::ErrorStr(err)));
+ VerifyOrExit(err == CHIP_NO_ERROR,
+ ChipLogError(Controller, "Controller Factory init failure! %" CHIP_ERROR_FORMAT, err.Format()));
err = factory.SetupController(setupParams, controller);
- VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Controller init failure! %s", chip::ErrorStr(err)));
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Controller init failure! %" CHIP_ERROR_FORMAT, err.Format()));
}
exit:
diff --git a/examples/ota-requestor-app/linux/main.cpp b/examples/ota-requestor-app/linux/main.cpp
index 857294f..8fca12c 100644
--- a/examples/ota-requestor-app/linux/main.cpp
+++ b/examples/ota-requestor-app/linux/main.cpp
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+#include <app-common/zap-generated/callback.h>
#include <app-common/zap-generated/enums.h>
#include <app/server/Server.h>
#include <app/util/util.h>
@@ -40,6 +41,7 @@
#include <zap-generated/CHIPClusters.h>
#include "BDXDownloader.h"
+#include "ExampleOTARequestor.h"
#include "ExampleSelfCommissioning.h"
#include "PersistentStorage.h"
@@ -70,7 +72,7 @@
CharSpan softwareVersionString, chip::ByteSpan updateToken, bool userConsentNeeded,
chip::ByteSpan metadataForRequestor)
{
- ChipLogDetail(SoftwareUpdate, "%s", __FUNCTION__);
+ ChipLogDetail(SoftwareUpdate, "QueryImageResponse responded with action %" PRIu8, status);
TransferSession::TransferInitData initOptions;
initOptions.TransferCtlFlags = chip::bdx::TransferControlFlags::kReceiverDrive;
@@ -132,7 +134,7 @@
err = cluster.Associate(device, kOtaProviderEndpoint);
if (err != CHIP_NO_ERROR)
{
- ChipLogError(SoftwareUpdate, "Associate() failed: %s", chip::ErrorStr(err));
+ ChipLogError(SoftwareUpdate, "Associate() failed: %" CHIP_ERROR_FORMAT, err.Format());
return;
}
err = cluster.QueryImage(successCallback, failureCallback, kExampleVendorId, kExampleProductId, kExampleHWVersion,
@@ -140,13 +142,13 @@
metadata);
if (err != CHIP_NO_ERROR)
{
- ChipLogError(SoftwareUpdate, "QueryImage() failed: %s", chip::ErrorStr(err));
+ ChipLogError(SoftwareUpdate, "QueryImage() failed: %" CHIP_ERROR_FORMAT, err.Format());
}
}
void OnConnectFail(void * context, chip::NodeId deviceId, CHIP_ERROR error)
{
- ChipLogError(SoftwareUpdate, "failed to connect to 0x%" PRIX64 ": %s", deviceId, chip::ErrorStr(error));
+ ChipLogError(SoftwareUpdate, "failed to connect to 0x%" PRIX64 ": %" CHIP_ERROR_FORMAT, deviceId, error.Format());
}
Callback<OnDeviceConnected> mConnectionCallback(OnConnection, nullptr);
@@ -260,12 +262,10 @@
chip::DeviceLayer::ConfigurationMgr().LogDeviceConfig();
err = mStorage.Init();
- VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init Storage failure: %s", chip::ErrorStr(err)));
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "Init Storage failure: %" CHIP_ERROR_FORMAT, err.Format()));
chip::Logging::SetLogFilter(mStorage.GetLoggingLevel());
- VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "failed to set UDP port: %s", chip::ErrorStr(err)));
-
err = chip::DeviceLayer::ConfigurationMgr().StoreSetupDiscriminator(setupDiscriminator);
if (err == CHIP_NO_ERROR)
{
@@ -273,7 +273,7 @@
}
else
{
- ChipLogError(SoftwareUpdate, "Setup discriminator setting failed with code: %s \n", chip::ErrorStr(err));
+ ChipLogError(SoftwareUpdate, "Setup discriminator setting failed with code: %" CHIP_ERROR_FORMAT "\n", err.Format());
goto exit;
}
@@ -301,10 +301,10 @@
err = DoExampleSelfCommissioning(mController, &mOpCredsIssuer, &mStorage, mStorage.GetLocalNodeId(),
mStorage.GetListenPort());
VerifyOrExit(err == CHIP_NO_ERROR,
- ChipLogError(SoftwareUpdate, "example self-commissioning failed: %s", chip::ErrorStr(err)));
+ ChipLogError(SoftwareUpdate, "example self-commissioning failed: %" CHIP_ERROR_FORMAT, err.Format()));
err = chip::Controller::DeviceControllerFactory::GetInstance().ServiceEvents();
- VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "ServiceEvents() failed: %s", chip::ErrorStr(err)));
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "ServiceEvents() failed: %" CHIP_ERROR_FORMAT, err.Format()));
ChipLogProgress(SoftwareUpdate, "Attempting to connect to device 0x%" PRIX64, providerNodeId);
@@ -312,7 +312,7 @@
// Currently, that pairing action will persist the CASE session in persistent memory, which will then be read by the
// following call.
err = mController.GetDevice(providerNodeId, &providerDevice);
- VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "No device found: %s", chip::ErrorStr(err)));
+ VerifyOrExit(err == CHIP_NO_ERROR, ChipLogError(Controller, "No device found: %" CHIP_ERROR_FORMAT, err.Format()));
err = providerDevice->EstablishConnectivity(&mConnectionCallback, &mConnectFailCallback);
}
@@ -320,6 +320,6 @@
chip::DeviceLayer::PlatformMgr().RunEventLoop();
exit:
- ChipLogDetail(SoftwareUpdate, "%s", ErrorStr(err));
+ ChipLogDetail(SoftwareUpdate, "%" CHIP_ERROR_FORMAT, err.Format());
return 0;
}
diff --git a/examples/ota-requestor-app/ota-requestor-common/BDXDownloader.cpp b/examples/ota-requestor-app/ota-requestor-common/BDXDownloader.cpp
index 5a93ed7..025dcab 100644
--- a/examples/ota-requestor-app/ota-requestor-common/BDXDownloader.cpp
+++ b/examples/ota-requestor-app/ota-requestor-common/BDXDownloader.cpp
@@ -55,7 +55,7 @@
break;
case TransferSession::OutputEventType::kMsgToSend: {
chip::Messaging::SendFlags sendFlags;
- VerifyOrReturn(mExchangeCtx != nullptr, ChipLogError(BDX, "%s: mExchangeContext is null", __FUNCTION__));
+ VerifyOrReturn(mExchangeCtx != nullptr, ChipLogError(BDX, "mExchangeContext is null, cannot proceed"));
if (event.msgTypeData.MessageType == static_cast<uint8_t>(MessageType::ReceiveInit))
{
sendFlags.Set(chip::Messaging::SendMessageFlags::kFromInitiator);
@@ -66,12 +66,11 @@
}
err = mExchangeCtx->SendMessage(event.msgTypeData.ProtocolId, event.msgTypeData.MessageType, std::move(event.MsgData),
sendFlags);
- VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(BDX, "%s: SendMessage failed: %s", __FUNCTION__, chip::ErrorStr(err)));
+ VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(BDX, "SendMessage failed: %" CHIP_ERROR_FORMAT, err.Format()));
break;
}
case TransferSession::OutputEventType::kAcceptReceived:
- VerifyOrReturn(CHIP_NO_ERROR == mTransfer.PrepareBlockQuery(),
- ChipLogError(BDX, "%s: PrepareBlockQuery failed", __FUNCTION__));
+ VerifyOrReturn(CHIP_NO_ERROR == mTransfer.PrepareBlockQuery(), ChipLogError(BDX, "PrepareBlockQuery failed"));
break;
case TransferSession::OutputEventType::kBlockReceived: {
ChipLogDetail(BDX, "Got block length %zu", event.blockdata.Length);
@@ -84,15 +83,13 @@
if (event.blockdata.IsEof)
{
err = mTransfer.PrepareBlockAck();
- VerifyOrReturn(err == CHIP_NO_ERROR,
- ChipLogError(BDX, "%s: PrepareBlockAck failed: %s", __FUNCTION__, chip::ErrorStr(err)));
+ VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(BDX, "PrepareBlockAck failed: %" CHIP_ERROR_FORMAT, err.Format()));
mIsTransferComplete = true;
}
else
{
err = mTransfer.PrepareBlockQuery();
- VerifyOrReturn(err == CHIP_NO_ERROR,
- ChipLogError(BDX, "%s: PrepareBlockQuery failed: %s", __FUNCTION__, chip::ErrorStr(err)));
+ VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(BDX, "PrepareBlockQuery failed: %" CHIP_ERROR_FORMAT, err.Format()));
}
break;
}
@@ -116,6 +113,6 @@
case TransferSession::OutputEventType::kQueryReceived:
case TransferSession::OutputEventType::kAckEOFReceived:
default:
- ChipLogError(BDX, "%s: unexpected event type", __FUNCTION__);
+ ChipLogError(BDX, "Unexpected BDX event type: %" PRIu16, static_cast<uint16_t>(event.EventType));
}
}
diff --git a/examples/ota-requestor-app/ota-requestor-common/BUILD.gn b/examples/ota-requestor-app/ota-requestor-common/BUILD.gn
index 600fc00..a48a989 100644
--- a/examples/ota-requestor-app/ota-requestor-common/BUILD.gn
+++ b/examples/ota-requestor-app/ota-requestor-common/BUILD.gn
@@ -33,9 +33,13 @@
sources = [
"BDXDownloader.cpp",
"BDXDownloader.h",
+ "ExampleOTARequestor.cpp",
+ "ExampleOTARequestor.h",
]
is_server = true
public_configs = [ ":config" ]
+
+ is_server = true
}
diff --git a/examples/ota-requestor-app/ota-requestor-common/ExampleOTARequestor.cpp b/examples/ota-requestor-app/ota-requestor-common/ExampleOTARequestor.cpp
new file mode 100644
index 0000000..0937852
--- /dev/null
+++ b/examples/ota-requestor-app/ota-requestor-common/ExampleOTARequestor.cpp
@@ -0,0 +1,142 @@
+/*
+ *
+ * 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 <ExampleOTARequestor.h>
+
+#include <app-common/zap-generated/enums.h>
+#include <app/util/af-enums.h>
+#include <app/util/util.h>
+#include <controller/CHIPDevice.h>
+#include <lib/core/NodeId.h>
+#include <lib/support/BufferReader.h>
+#include <lib/support/Span.h>
+#include <lib/support/logging/CHIPLogging.h>
+#include <platform/CHIPDeviceLayer.h>
+#include <system/SystemClock.h>
+#include <transport/FabricTable.h>
+
+using chip::FabricInfo;
+
+ExampleOTARequestor ExampleOTARequestor::sInstance;
+
+constexpr uint32_t kImmediateStartDelayMs = 1; // Start the timer with this value when starting OTA "immediately"
+
+// OTA Software Update Requestor Cluster AnnounceOtaProvider Command callback (from client)
+bool emberAfOtaSoftwareUpdateRequestorClusterAnnounceOtaProviderCallback(
+ chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
+ const chip::app::Clusters::OtaSoftwareUpdateRequestor::Commands::AnnounceOtaProvider::DecodableType & commandData)
+{
+ EmberAfStatus status = ExampleOTARequestor::GetInstance().HandleAnnounceOTAProvider(commandObj, commandPath, commandData);
+ emberAfSendImmediateDefaultResponse(status);
+ return true;
+}
+
+ExampleOTARequestor::ExampleOTARequestor()
+{
+ mOtaStartDelayMs = 0;
+ mProviderNodeId = chip::kUndefinedNodeId;
+ mProviderFabricIndex = chip::kUndefinedFabricIndex;
+}
+
+void ExampleOTARequestor::Init(chip::Controller::ControllerDeviceInitParams connectParams, uint32_t startDelayMs)
+{
+ mConnectParams = connectParams;
+ mOtaStartDelayMs = startDelayMs;
+}
+
+void ExampleOTARequestor::ConnectToProvider()
+{
+ FabricInfo * providerFabric = GetProviderFabricInfo();
+ VerifyOrReturn(providerFabric != nullptr,
+ ChipLogError(SoftwareUpdate, "No Fabric found for index %" PRIu8, mProviderFabricIndex));
+
+ ChipLogProgress(SoftwareUpdate,
+ "Once #7976 is fixed, this would attempt to connect to 0x" ChipLogFormatX64 " on FabricIndex 0x%" PRIu8
+ " (" ChipLogFormatX64 ")",
+ ChipLogValueX64(mProviderNodeId), mProviderFabricIndex, ChipLogValueX64(providerFabric->GetFabricId()));
+
+ // TODO: uncomment and fill in after #7976 is fixed
+ // mProviderDevice.Init(mConnectParams, mProviderNodeId, address, mProviderFabricIndex);
+ // mProviderDevice.EstablishConnectivity();
+}
+
+EmberAfStatus ExampleOTARequestor::HandleAnnounceOTAProvider(
+ chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
+ const chip::app::Clusters::OtaSoftwareUpdateRequestor::Commands::AnnounceOtaProvider::DecodableType & commandData)
+{
+ auto & providerLocation = commandData.providerLocation;
+ auto & announcementReason = commandData.announcementReason;
+
+ if (commandObj == nullptr || commandObj->GetExchangeContext() == nullptr)
+ {
+ ChipLogError(SoftwareUpdate, "Cannot access ExchangeContext for FabricIndex");
+ return EMBER_ZCL_STATUS_INVALID_ARGUMENT;
+ }
+
+ mProviderNodeId = providerLocation;
+ mProviderFabricIndex = commandObj->GetExchangeContext()->GetSecureSession().GetFabricIndex();
+
+ FabricInfo * providerFabric = GetProviderFabricInfo();
+ if (providerFabric == nullptr)
+ {
+ ChipLogError(SoftwareUpdate, "No Fabric found for index %" PRIu8, mProviderFabricIndex);
+ return EMBER_ZCL_STATUS_SUCCESS;
+ }
+
+ ChipLogProgress(SoftwareUpdate,
+ "Notified of Provider at NodeID: 0x" ChipLogFormatX64 "on FabricIndex 0x%" PRIu8 " (" ChipLogFormatX64 ")",
+ ChipLogValueX64(mProviderNodeId), mProviderFabricIndex, ChipLogValueX64(providerFabric->GetFabricId()));
+
+ // If reason is URGENT_UPDATE_AVAILABLE, we start OTA immediately. Otherwise, respect the timer value set in mOtaStartDelayMs.
+ // This is done to exemplify what a real-world OTA Requestor might do while also being configurable enough to use as a test app.
+ uint32_t msToStart = 0;
+ switch (announcementReason)
+ {
+ case static_cast<uint8_t>(EMBER_ZCL_OTA_ANNOUNCEMENT_REASON_SIMPLE_ANNOUNCEMENT):
+ case static_cast<uint8_t>(EMBER_ZCL_OTA_ANNOUNCEMENT_REASON_UPDATE_AVAILABLE):
+ msToStart = mOtaStartDelayMs;
+ break;
+ case static_cast<uint8_t>(EMBER_ZCL_OTA_ANNOUNCEMENT_REASON_URGENT_UPDATE_AVAILABLE):
+ msToStart = kImmediateStartDelayMs;
+ break;
+ default:
+ ChipLogError(SoftwareUpdate, "Unexpected announcementReason: %" PRIu8, static_cast<uint8_t>(announcementReason));
+ return EMBER_ZCL_STATUS_INVALID_ARGUMENT;
+ }
+
+ chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Milliseconds32(msToStart), StartDelayTimerHandler, this);
+
+ return EMBER_ZCL_STATUS_SUCCESS;
+}
+
+void ExampleOTARequestor::StartDelayTimerHandler(chip::System::Layer * systemLayer, void * appState)
+{
+ VerifyOrReturn(appState != nullptr);
+ static_cast<ExampleOTARequestor *>(appState)->ConnectToProvider();
+}
+
+chip::FabricInfo * ExampleOTARequestor::GetProviderFabricInfo()
+{
+ if (mConnectParams.fabricsTable == nullptr)
+ {
+ ChipLogError(SoftwareUpdate, "FabricTable is null!");
+ return nullptr;
+ }
+
+ return mConnectParams.fabricsTable->FindFabricWithIndex(mProviderFabricIndex);
+}
diff --git a/examples/ota-requestor-app/ota-requestor-common/ExampleOTARequestor.h b/examples/ota-requestor-app/ota-requestor-common/ExampleOTARequestor.h
new file mode 100644
index 0000000..5cec185
--- /dev/null
+++ b/examples/ota-requestor-app/ota-requestor-common/ExampleOTARequestor.h
@@ -0,0 +1,56 @@
+/*
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <app-common/zap-generated/cluster-objects.h>
+#include <app/Command.h>
+#include <app/util/basic-types.h>
+#include <controller/CHIPDevice.h>
+#include <lib/core/NodeId.h>
+#include <lib/core/Optional.h>
+
+// An example implementation for how an application might handle receiving an AnnounceOTAProvider command. In this case, the
+// AnnounceOTAProvider command will be used as a trigger to send a QueryImage command and begin the OTA process. This class also
+// contains other application-specific logic related to OTA Software Update.
+class ExampleOTARequestor
+{
+public:
+ static ExampleOTARequestor & GetInstance() { return sInstance; }
+
+ void Init(chip::Controller::ControllerDeviceInitParams connectParams, uint32_t startDelayMs);
+
+ EmberAfStatus HandleAnnounceOTAProvider(
+ chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath,
+ const chip::app::Clusters::OtaSoftwareUpdateRequestor::Commands::AnnounceOtaProvider::DecodableType & commandData);
+
+private:
+ ExampleOTARequestor();
+
+ static void StartDelayTimerHandler(chip::System::Layer * systemLayer, void * appState);
+ void ConnectToProvider();
+ chip::FabricInfo * GetProviderFabricInfo();
+
+ static ExampleOTARequestor sInstance;
+
+ chip::Controller::Device mProviderDevice;
+ chip::Controller::ControllerDeviceInitParams mConnectParams;
+ chip::NodeId mProviderNodeId;
+ chip::FabricIndex mProviderFabricIndex;
+ uint32_t mOtaStartDelayMs;
+};
diff --git a/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.zap b/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.zap
index ffde58b..74b5760 100644
--- a/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.zap
+++ b/examples/ota-requestor-app/ota-requestor-common/ota-requestor-app.zap
@@ -1,5 +1,5 @@
{
- "featureLevel": 54,
+ "featureLevel": 62,
"creator": "zap",
"keyValuePairs": [
{
@@ -1081,6 +1081,403 @@
]
},
{
+ "name": "OTA Software Update Requestor",
+ "code": 42,
+ "mfgCode": null,
+ "define": "OTA_REQUESTOR_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "AnnounceOtaProvider",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
+ "attributes": [
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "OTA Software Update Requestor",
+ "code": 42,
+ "mfgCode": null,
+ "define": "OTA_REQUESTOR_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [],
+ "attributes": [
+ {
+ "name": "default ota provider",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "update possible",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "General Commissioning",
+ "code": 48,
+ "mfgCode": null,
+ "define": "GENERAL_COMMISSIONING_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "ArmFailSafe",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetRegulatoryConfig",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "CommissioningComplete",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "General Commissioning",
+ "code": 48,
+ "mfgCode": null,
+ "define": "GENERAL_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ArmFailSafeResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "SetRegulatoryConfigResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "CommissioningCompleteResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "Breadcrumb",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000000000000000",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "BasicCommissioningInfoList",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ },
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 0,
+ "maxInterval": 65344,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "client",
+ "enabled": 0,
+ "commands": [
+ {
+ "name": "ScanNetworks",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "AddWiFiNetwork",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateWiFiNetwork",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "AddThreadNetwork",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "UpdateThreadNetwork",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "RemoveNetwork",
+ "code": 10,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "EnableNetwork",
+ "code": 12,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "DisableNetwork",
+ "code": 14,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ },
+ {
+ "name": "GetLastNetworkCommissioningResult",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "incoming": 1,
+ "outgoing": 0
+ }
+ ],
+ "attributes": []
+ },
+ {
+ "name": "Network Commissioning",
+ "code": 49,
+ "mfgCode": null,
+ "define": "NETWORK_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ScanNetworksResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "AddWiFiNetworkResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "UpdateWiFiNetworkResponse",
+ "code": 5,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "AddThreadNetworkResponse",
+ "code": 7,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "UpdateThreadNetworkResponse",
+ "code": 9,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 0,
+ "outgoing": 1
+ },
+ {
+ "name": "RemoveNetworkResponse",
+ "code": 11,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "EnableNetworkResponse",
+ "code": 13,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ },
+ {
+ "name": "DisableNetworkResponse",
+ "code": 15,
+ "mfgCode": null,
+ "source": "server",
+ "incoming": 1,
+ "outgoing": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "ClusterRevision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
"name": "Operational Credentials",
"code": 62,
"mfgCode": null,
@@ -1180,328 +1577,6 @@
]
},
{
- "name": "General Commissioning",
- "code": 48,
- "mfgCode": null,
- "define": "GENERAL_COMMISSIONING_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [
- {
- "name": "ArmFailSafe",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "SetRegulatoryConfig",
- "code": 2,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "CommissioningComplete",
- "code": 4,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- }
- ],
- "attributes": [
- {
- "name": "ClusterRevision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0001",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "General Commissioning",
- "code": 48,
- "mfgCode": null,
- "define": "GENERAL_COMMISSIONING_CLUSTER",
- "side": "server",
- "enabled": 1,
- "commands": [
- {
- "name": "ArmFailSafeResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "SetRegulatoryConfigResponse",
- "code": 3,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "CommissioningCompleteResponse",
- "code": 5,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- }
- ],
- "attributes": [
- {
- "name": "Breadcrumb",
- "code": 0,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0000000000000000",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "BasicCommissioningInfoList",
- "code": 1,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- },
- {
- "name": "ClusterRevision",
- "code": 65533,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0001",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "Network Commissioning",
- "code": 49,
- "mfgCode": null,
- "define": "NETWORK_COMMISSIONING_CLUSTER",
- "side": "client",
- "enabled": 0,
- "commands": [
- {
- "name": "ScanNetworks",
- "code": 0,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "AddWiFiNetwork",
- "code": 2,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "UpdateWiFiNetwork",
- "code": 4,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "AddThreadNetwork",
- "code": 6,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "UpdateThreadNetwork",
- "code": 8,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 0
- },
- {
- "name": "RemoveNetwork",
- "code": 10,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "EnableNetwork",
- "code": 12,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "DisableNetwork",
- "code": 14,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "GetLastNetworkCommissioningResult",
- "code": 16,
- "mfgCode": null,
- "source": "client",
- "incoming": 1,
- "outgoing": 1
- }
- ],
- "attributes": [
- {
- "name": "ClusterRevision",
- "code": 65533,
- "mfgCode": null,
- "side": "client",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0001",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
- "name": "Network Commissioning",
- "code": 49,
- "mfgCode": null,
- "define": "NETWORK_COMMISSIONING_CLUSTER",
- "side": "server",
- "enabled": 1,
- "commands": [
- {
- "name": "ScanNetworksResponse",
- "code": 1,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "AddWiFiNetworkResponse",
- "code": 3,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "UpdateWiFiNetworkResponse",
- "code": 5,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "AddThreadNetworkResponse",
- "code": 7,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "UpdateThreadNetworkResponse",
- "code": 9,
- "mfgCode": null,
- "source": "server",
- "incoming": 0,
- "outgoing": 1
- },
- {
- "name": "RemoveNetworkResponse",
- "code": 11,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "EnableNetworkResponse",
- "code": 13,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- },
- {
- "name": "DisableNetworkResponse",
- "code": 15,
- "mfgCode": null,
- "source": "server",
- "incoming": 1,
- "outgoing": 1
- }
- ],
- "attributes": [
- {
- "name": "ClusterRevision",
- "code": 65533,
- "mfgCode": null,
- "side": "server",
- "included": 1,
- "storageOption": "RAM",
- "singleton": 0,
- "bounded": 0,
- "defaultValue": "0x0001",
- "reportable": 0,
- "minInterval": 0,
- "maxInterval": 65344,
- "reportableChange": 0
- }
- ]
- },
- {
"name": "Operational Credentials",
"code": 62,
"mfgCode": null,
@@ -3586,5 +3661,6 @@
"endpointVersion": 1,
"deviceIdentifier": 0
}
- ]
-}
+ ],
+ "log": []
+}
\ No newline at end of file
diff --git a/src/app/zap-templates/zcl/data-model/chip/chip-ota.xml b/src/app/zap-templates/zcl/data-model/chip/chip-ota.xml
index c2009f6..cc35fc6 100644
--- a/src/app/zap-templates/zcl/data-model/chip/chip-ota.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/chip-ota.xml
@@ -99,8 +99,8 @@
<attribute side="server" code="0x0002" define="UPDATE_POSSIBLE" type="BOOLEAN" writable="false" optional="false">update possible</attribute>
<command source="client" code="0" name="AnnounceOtaProvider" optional="true" cli="chip ota announceotaprovider">
<description>Notify OTA Provider that an update was applied</description>
- <arg name="providerLocation" type="OCTET_STRING" length="16"/>
- <arg name="vendorId" type="INT16U"/>
+ <arg name="providerLocation" type="NODE_ID"/>
+ <arg name="vendorId" type="VENDOR_ID"/>
<arg name="announcementReason" type="OTAAnnouncementReason"/>
<arg name="metadataForNode" type="OCTET_STRING" length="512" optional="true"/>
</command>
diff --git a/src/controller/java/zap-generated/CHIPClusters-JNI.cpp b/src/controller/java/zap-generated/CHIPClusters-JNI.cpp
index 1cad863..6af16bb 100644
--- a/src/controller/java/zap-generated/CHIPClusters-JNI.cpp
+++ b/src/controller/java/zap-generated/CHIPClusters-JNI.cpp
@@ -20675,14 +20675,13 @@
}
JNI_METHOD(void, OtaSoftwareUpdateRequestorCluster, announceOtaProvider)
-(JNIEnv * env, jobject self, jlong clusterPtr, jobject callback, jbyteArray providerLocation, jint vendorId,
- jint announcementReason, jbyteArray metadataForNode)
+(JNIEnv * env, jobject self, jlong clusterPtr, jobject callback, jlong providerLocation, jint vendorId, jint announcementReason,
+ jbyteArray metadataForNode)
{
chip::DeviceLayer::StackLock lock;
CHIP_ERROR err = CHIP_NO_ERROR;
OtaSoftwareUpdateRequestorCluster * cppCluster;
- JniByteArray providerLocationArr(env, providerLocation);
JniByteArray metadataForNodeArr(env, metadataForNode);
std::unique_ptr<CHIPDefaultSuccessCallback, void (*)(CHIPDefaultSuccessCallback *)> onSuccess(
@@ -20695,9 +20694,8 @@
cppCluster = reinterpret_cast<OtaSoftwareUpdateRequestorCluster *>(clusterPtr);
VerifyOrExit(cppCluster != nullptr, err = CHIP_ERROR_INCORRECT_STATE);
- err = cppCluster->AnnounceOtaProvider(onSuccess->Cancel(), onFailure->Cancel(),
- chip::ByteSpan((const uint8_t *) providerLocationArr.data(), providerLocationArr.size()),
- vendorId, static_cast<uint8_t>(announcementReason),
+ err = cppCluster->AnnounceOtaProvider(onSuccess->Cancel(), onFailure->Cancel(), providerLocation,
+ static_cast<chip::VendorId>(vendorId), static_cast<uint8_t>(announcementReason),
chip::ByteSpan((const uint8_t *) metadataForNodeArr.data(), metadataForNodeArr.size()));
SuccessOrExit(err);
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
index 8593dad..00aa981 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
@@ -4280,7 +4280,7 @@
public void announceOtaProvider(
DefaultClusterCallback callback,
- byte[] providerLocation,
+ long providerLocation,
int vendorId,
int announcementReason,
byte[] metadataForNode) {
@@ -4296,7 +4296,7 @@
private native void announceOtaProvider(
long chipClusterPtr,
DefaultClusterCallback callback,
- byte[] providerLocation,
+ long providerLocation,
int vendorId,
int announcementReason,
byte[] metadataForNode);
diff --git a/src/controller/python/chip/clusters/CHIPClusters.cpp b/src/controller/python/chip/clusters/CHIPClusters.cpp
index 64dc915..f40fecc 100644
--- a/src/controller/python/chip/clusters/CHIPClusters.cpp
+++ b/src/controller/python/chip/clusters/CHIPClusters.cpp
@@ -5183,15 +5183,14 @@
// Cluster OtaSoftwareUpdateRequestor
chip::ChipError::StorageType chip_ime_AppendCommand_OtaSoftwareUpdateRequestor_AnnounceOtaProvider(
- chip::Controller::Device * device, chip::EndpointId ZCLendpointId, chip::GroupId, const uint8_t * providerLocation,
- uint32_t providerLocation_Len, uint16_t vendorId, uint8_t announcementReason, const uint8_t * metadataForNode,
- uint32_t metadataForNode_Len)
+ chip::Controller::Device * device, chip::EndpointId ZCLendpointId, chip::GroupId, chip::NodeId providerLocation,
+ chip::VendorId vendorId, uint8_t announcementReason, const uint8_t * metadataForNode, uint32_t metadataForNode_Len)
{
VerifyOrReturnError(device != nullptr, CHIP_ERROR_INVALID_ARGUMENT.AsInteger());
chip::Controller::OtaSoftwareUpdateRequestorCluster cluster;
cluster.Associate(device, ZCLendpointId);
return cluster
- .AnnounceOtaProvider(nullptr, nullptr, chip::ByteSpan(providerLocation, providerLocation_Len), vendorId, announcementReason,
+ .AnnounceOtaProvider(nullptr, nullptr, providerLocation, vendorId, announcementReason,
chip::ByteSpan(metadataForNode, metadataForNode_Len))
.AsInteger();
}
diff --git a/src/controller/python/chip/clusters/CHIPClusters.py b/src/controller/python/chip/clusters/CHIPClusters.py
index ced51e6..992fd07 100644
--- a/src/controller/python/chip/clusters/CHIPClusters.py
+++ b/src/controller/python/chip/clusters/CHIPClusters.py
@@ -2305,7 +2305,7 @@
"commandId": 0x00000000,
"commandName": "AnnounceOtaProvider",
"args": {
- "providerLocation": "bytes",
+ "providerLocation": "int",
"vendorId": "int",
"announcementReason": "int",
"metadataForNode": "bytes",
@@ -4856,10 +4856,10 @@
location), requestorCanConsent, metadataForProvider, len(metadataForProvider)
)
- def ClusterOtaSoftwareUpdateRequestor_CommandAnnounceOtaProvider(self, device: ctypes.c_void_p, ZCLendpoint: int, ZCLgroupid: int, providerLocation: bytes, vendorId: int, announcementReason: int, metadataForNode: bytes):
+ def ClusterOtaSoftwareUpdateRequestor_CommandAnnounceOtaProvider(self, device: ctypes.c_void_p, ZCLendpoint: int, ZCLgroupid: int, providerLocation: int, vendorId: int, announcementReason: int, metadataForNode: bytes):
return self._chipLib.chip_ime_AppendCommand_OtaSoftwareUpdateRequestor_AnnounceOtaProvider(
- device, ZCLendpoint, ZCLgroupid, providerLocation, len(
- providerLocation), vendorId, announcementReason, metadataForNode, len(metadataForNode)
+ device, ZCLendpoint, ZCLgroupid, providerLocation, vendorId, announcementReason, metadataForNode, len(
+ metadataForNode)
)
def ClusterOnOff_CommandOff(self, device: ctypes.c_void_p, ZCLendpoint: int, ZCLgroupid: int):
@@ -8251,7 +8251,7 @@
# Cluster OtaSoftwareUpdateRequestor
# Cluster OtaSoftwareUpdateRequestor Command AnnounceOtaProvider
self._chipLib.chip_ime_AppendCommand_OtaSoftwareUpdateRequestor_AnnounceOtaProvider.argtypes = [
- ctypes.c_void_p, ctypes.c_uint8, ctypes.c_uint16, ctypes.c_char_p, ctypes.c_uint32, ctypes.c_uint16, ctypes.c_uint8, ctypes.c_char_p, ctypes.c_uint32]
+ ctypes.c_void_p, ctypes.c_uint8, ctypes.c_uint16, ctypes.c_uint64, ctypes.c_uint16, ctypes.c_uint8, ctypes.c_char_p, ctypes.c_uint32]
self._chipLib.chip_ime_AppendCommand_OtaSoftwareUpdateRequestor_AnnounceOtaProvider.restype = ctypes.c_uint32
# Cluster OtaSoftwareUpdateRequestor ReadAttribute DefaultOtaProvider
self._chipLib.chip_ime_ReadAttribute_OtaSoftwareUpdateRequestor_DefaultOtaProvider.argtypes = [
diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py
index a8592bf..39c4299 100644
--- a/src/controller/python/chip/clusters/Objects.py
+++ b/src/controller/python/chip/clusters/Objects.py
@@ -4646,7 +4646,7 @@
return ClusterObjectDescriptor(
Fields=[
ClusterObjectFieldDescriptor(
- Label="ProviderLocation", Tag=0, Type=bytes),
+ Label="ProviderLocation", Tag=0, Type=uint),
ClusterObjectFieldDescriptor(
Label="VendorId", Tag=1, Type=uint),
ClusterObjectFieldDescriptor(
@@ -4655,7 +4655,7 @@
Label="MetadataForNode", Tag=3, Type=bytes),
])
- ProviderLocation: 'bytes' = None
+ ProviderLocation: 'uint' = None
VendorId: 'uint' = None
AnnouncementReason: 'OtaSoftwareUpdateRequestor.Enums.OTAAnnouncementReason' = None
MetadataForNode: 'bytes' = None
diff --git a/src/darwin/Framework/CHIP/zap-generated/CHIPClustersObjc.h b/src/darwin/Framework/CHIP/zap-generated/CHIPClustersObjc.h
index 283557b..1c0593b 100644
--- a/src/darwin/Framework/CHIP/zap-generated/CHIPClustersObjc.h
+++ b/src/darwin/Framework/CHIP/zap-generated/CHIPClustersObjc.h
@@ -1119,7 +1119,7 @@
*/
@interface CHIPOtaSoftwareUpdateRequestor : CHIPCluster
-- (void)announceOtaProvider:(NSData *)providerLocation
+- (void)announceOtaProvider:(uint64_t)providerLocation
vendorId:(uint16_t)vendorId
announcementReason:(uint8_t)announcementReason
metadataForNode:(NSData *)metadataForNode
diff --git a/src/darwin/Framework/CHIP/zap-generated/CHIPClustersObjc.mm b/src/darwin/Framework/CHIP/zap-generated/CHIPClustersObjc.mm
index a5dda26..9b8ac4c 100644
--- a/src/darwin/Framework/CHIP/zap-generated/CHIPClustersObjc.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/CHIPClustersObjc.mm
@@ -3268,14 +3268,14 @@
return &_cppCluster;
}
-- (void)announceOtaProvider:(NSData *)providerLocation
+- (void)announceOtaProvider:(uint64_t)providerLocation
vendorId:(uint16_t)vendorId
announcementReason:(uint8_t)announcementReason
metadataForNode:(NSData *)metadataForNode
responseHandler:(ResponseHandler)responseHandler
{
new CHIPDefaultSuccessCallbackBridge(self.callbackQueue, responseHandler, ^(Cancelable * success, Cancelable * failure) {
- return self.cppCluster.AnnounceOtaProvider(success, failure, [self asByteSpan:providerLocation], vendorId,
+ return self.cppCluster.AnnounceOtaProvider(success, failure, providerLocation, static_cast<chip::VendorId>(vendorId),
static_cast<uint8_t>(announcementReason), [self asByteSpan:metadataForNode]);
});
}
diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
index be41987..7b27f3a 100644
--- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
+++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
@@ -5556,8 +5556,8 @@
static constexpr CommandId GetCommandId() { return AnnounceOtaProvider::Id; }
static constexpr ClusterId GetClusterId() { return OtaSoftwareUpdateRequestor::Id; }
- chip::ByteSpan providerLocation;
- uint16_t vendorId;
+ chip::NodeId providerLocation;
+ chip::VendorId vendorId;
OTAAnnouncementReason announcementReason;
chip::ByteSpan metadataForNode;
@@ -5570,8 +5570,8 @@
static constexpr CommandId GetCommandId() { return AnnounceOtaProvider::Id; }
static constexpr ClusterId GetClusterId() { return OtaSoftwareUpdateRequestor::Id; }
- chip::ByteSpan providerLocation;
- uint16_t vendorId;
+ chip::NodeId providerLocation;
+ chip::VendorId vendorId;
OTAAnnouncementReason announcementReason;
chip::ByteSpan metadataForNode;
CHIP_ERROR Decode(TLV::TLVReader & reader);
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
index 6a0f4ec..c543381 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
+++ b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h
@@ -13951,7 +13951,7 @@
public:
OtaSoftwareUpdateRequestorAnnounceOtaProvider() : ModelCommand("announce-ota-provider")
{
- AddArgument("ProviderLocation", &mRequest.providerLocation);
+ AddArgument("ProviderLocation", 0, UINT64_MAX, &mRequest.providerLocation);
AddArgument("VendorId", 0, UINT16_MAX, &mRequest.vendorId);
AddArgument(
"AnnouncementReason", 0, UINT8_MAX,
diff --git a/zzz_generated/controller-clusters/zap-generated/CHIPClusters.cpp b/zzz_generated/controller-clusters/zap-generated/CHIPClusters.cpp
index 0612631..2d65282 100644
--- a/zzz_generated/controller-clusters/zap-generated/CHIPClusters.cpp
+++ b/zzz_generated/controller-clusters/zap-generated/CHIPClusters.cpp
@@ -8700,7 +8700,7 @@
// OtaSoftwareUpdateRequestor Cluster Commands
CHIP_ERROR OtaSoftwareUpdateRequestorCluster::AnnounceOtaProvider(Callback::Cancelable * onSuccessCallback,
Callback::Cancelable * onFailureCallback,
- chip::ByteSpan providerLocation, uint16_t vendorId,
+ chip::NodeId providerLocation, chip::VendorId vendorId,
uint8_t announcementReason, chip::ByteSpan metadataForNode)
{
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -8725,9 +8725,9 @@
SuccessOrExit(err = sender->PrepareCommand(cmdParams));
VerifyOrExit((writer = sender->GetCommandDataIBTLVWriter()) != nullptr, err = CHIP_ERROR_INCORRECT_STATE);
- // providerLocation: octetString
+ // providerLocation: nodeId
SuccessOrExit(err = writer->Put(TLV::ContextTag(argSeqNumber++), providerLocation));
- // vendorId: int16u
+ // vendorId: vendorId
SuccessOrExit(err = writer->Put(TLV::ContextTag(argSeqNumber++), vendorId));
// announcementReason: OTAAnnouncementReason
SuccessOrExit(err = writer->Put(TLV::ContextTag(argSeqNumber++), announcementReason));
diff --git a/zzz_generated/controller-clusters/zap-generated/CHIPClusters.h b/zzz_generated/controller-clusters/zap-generated/CHIPClusters.h
index 656c9e6..0e73803 100644
--- a/zzz_generated/controller-clusters/zap-generated/CHIPClusters.h
+++ b/zzz_generated/controller-clusters/zap-generated/CHIPClusters.h
@@ -939,7 +939,7 @@
// Cluster Commands
CHIP_ERROR AnnounceOtaProvider(Callback::Cancelable * onSuccessCallback, Callback::Cancelable * onFailureCallback,
- chip::ByteSpan providerLocation, uint16_t vendorId, uint8_t announcementReason,
+ chip::NodeId providerLocation, chip::VendorId vendorId, uint8_t announcementReason,
chip::ByteSpan metadataForNode);
// Cluster Attributes
diff --git a/zzz_generated/ota-requestor-app/zap-generated/IMClusterCommandHandler.cpp b/zzz_generated/ota-requestor-app/zap-generated/IMClusterCommandHandler.cpp
index 8c9caab..add2e45 100644
--- a/zzz_generated/ota-requestor-app/zap-generated/IMClusterCommandHandler.cpp
+++ b/zzz_generated/ota-requestor-app/zap-generated/IMClusterCommandHandler.cpp
@@ -411,6 +411,46 @@
} // namespace OtaSoftwareUpdateProvider
+namespace OtaSoftwareUpdateRequestor {
+
+void DispatchServerCommand(CommandHandler * apCommandObj, const ConcreteCommandPath & aCommandPath, TLV::TLVReader & aDataTlv)
+{
+ // We are using TLVUnpackError and TLVError here since both of them can be CHIP_END_OF_TLV
+ // When TLVError is CHIP_END_OF_TLV, it means we have iterated all of the items, which is not a real error.
+ // Any error value TLVUnpackError means we have received an illegal value.
+ // The following variables are used for all commands to save code size.
+ CHIP_ERROR TLVError = CHIP_NO_ERROR;
+ bool wasHandled = false;
+ {
+ switch (aCommandPath.mCommandId)
+ {
+ case Commands::AnnounceOtaProvider::Id: {
+ Commands::AnnounceOtaProvider::DecodableType commandData;
+ TLVError = DataModel::Decode(aDataTlv, commandData);
+ if (TLVError == CHIP_NO_ERROR)
+ {
+ wasHandled =
+ emberAfOtaSoftwareUpdateRequestorClusterAnnounceOtaProviderCallback(apCommandObj, aCommandPath, commandData);
+ }
+ break;
+ }
+ default: {
+ // Unrecognized command ID, error status will apply.
+ ReportCommandUnsupported(apCommandObj, aCommandPath);
+ return;
+ }
+ }
+ }
+
+ if (CHIP_NO_ERROR != TLVError || !wasHandled)
+ {
+ apCommandObj->AddStatus(aCommandPath, Protocols::InteractionModel::Status::InvalidCommand);
+ ChipLogProgress(Zcl, "Failed to dispatch command, TLVError=%" CHIP_ERROR_FORMAT, TLVError.Format());
+ }
+}
+
+} // namespace OtaSoftwareUpdateRequestor
+
namespace OperationalCredentials {
void DispatchServerCommand(CommandHandler * apCommandObj, const ConcreteCommandPath & aCommandPath, TLV::TLVReader & aDataTlv)
@@ -540,6 +580,9 @@
case Clusters::NetworkCommissioning::Id:
Clusters::NetworkCommissioning::DispatchServerCommand(apCommandObj, aCommandPath, aReader);
break;
+ case Clusters::OtaSoftwareUpdateRequestor::Id:
+ Clusters::OtaSoftwareUpdateRequestor::DispatchServerCommand(apCommandObj, aCommandPath, aReader);
+ break;
case Clusters::OperationalCredentials::Id:
Clusters::OperationalCredentials::DispatchServerCommand(apCommandObj, aCommandPath, aReader);
break;
diff --git a/zzz_generated/ota-requestor-app/zap-generated/PluginApplicationCallbacks.h b/zzz_generated/ota-requestor-app/zap-generated/PluginApplicationCallbacks.h
index e2d4bd9..759ae64 100644
--- a/zzz_generated/ota-requestor-app/zap-generated/PluginApplicationCallbacks.h
+++ b/zzz_generated/ota-requestor-app/zap-generated/PluginApplicationCallbacks.h
@@ -25,4 +25,5 @@
MatterGeneralCommissioningPluginServerInitCallback(); \
MatterNetworkCommissioningPluginServerInitCallback(); \
MatterOtaSoftwareUpdateProviderPluginClientInitCallback(); \
+ MatterOtaSoftwareUpdateRequestorPluginServerInitCallback(); \
MatterOperationalCredentialsPluginServerInitCallback();
diff --git a/zzz_generated/ota-requestor-app/zap-generated/callback-stub.cpp b/zzz_generated/ota-requestor-app/zap-generated/callback-stub.cpp
index 98a0eda..864ec4f 100644
--- a/zzz_generated/ota-requestor-app/zap-generated/callback-stub.cpp
+++ b/zzz_generated/ota-requestor-app/zap-generated/callback-stub.cpp
@@ -38,6 +38,9 @@
case ZCL_OTA_PROVIDER_CLUSTER_ID:
emberAfOtaSoftwareUpdateProviderClusterInitCallback(endpoint);
break;
+ case ZCL_OTA_REQUESTOR_CLUSTER_ID:
+ emberAfOtaSoftwareUpdateRequestorClusterInitCallback(endpoint);
+ break;
case ZCL_OPERATIONAL_CREDENTIALS_CLUSTER_ID:
emberAfOperationalCredentialsClusterInitCallback(endpoint);
break;
@@ -62,6 +65,11 @@
// To prevent warning
(void) endpoint;
}
+void __attribute__((weak)) emberAfOtaSoftwareUpdateRequestorClusterInitCallback(EndpointId endpoint)
+{
+ // To prevent warning
+ (void) endpoint;
+}
void __attribute__((weak)) emberAfOperationalCredentialsClusterInitCallback(EndpointId endpoint)
{
// To prevent warning
diff --git a/zzz_generated/ota-requestor-app/zap-generated/endpoint_config.h b/zzz_generated/ota-requestor-app/zap-generated/endpoint_config.h
index 71e568a..524d0ab 100644
--- a/zzz_generated/ota-requestor-app/zap-generated/endpoint_config.h
+++ b/zzz_generated/ota-requestor-app/zap-generated/endpoint_config.h
@@ -27,12 +27,17 @@
#define GENERATED_DEFAULTS \
{ \
\
- /* Endpoint: 0, Cluster: General Commissioning (server), big-endian */ \
+ /* Endpoint: 0, Cluster: OTA Software Update Requestor (server), big-endian */ \
\
- /* 0 - Breadcrumb, */ \
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ /* 0 - default ota provider, */ \
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
\
- /* 8 - BasicCommissioningInfoList, */ \
+ /* Endpoint: 0, Cluster: General Commissioning (server), big-endian */ \
+ \
+ /* 17 - Breadcrumb, */ \
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ \
+ /* 25 - BasicCommissioningInfoList, */ \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
@@ -50,7 +55,7 @@
\
/* Endpoint: 0, Cluster: Operational Credentials (server), big-endian */ \
\
- /* 262 - fabrics list, */ \
+ /* 279 - fabrics list, */ \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
@@ -74,12 +79,17 @@
#define GENERATED_DEFAULTS \
{ \
\
- /* Endpoint: 0, Cluster: General Commissioning (server), little-endian */ \
+ /* Endpoint: 0, Cluster: OTA Software Update Requestor (server), little-endian */ \
\
- /* 0 - Breadcrumb, */ \
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ /* 0 - default ota provider, */ \
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
\
- /* 8 - BasicCommissioningInfoList, */ \
+ /* Endpoint: 0, Cluster: General Commissioning (server), little-endian */ \
+ \
+ /* 17 - Breadcrumb, */ \
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ \
+ /* 25 - BasicCommissioningInfoList, */ \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
@@ -97,7 +107,7 @@
\
/* Endpoint: 0, Cluster: Operational Credentials (server), little-endian */ \
\
- /* 262 - fabrics list, */ \
+ /* 279 - fabrics list, */ \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
@@ -119,7 +129,7 @@
#endif // BIGENDIAN_CPU
-#define GENERATED_DEFAULTS_COUNT (3)
+#define GENERATED_DEFAULTS_COUNT (4)
#define ZAP_TYPE(type) ZCL_##type##_ATTRIBUTE_TYPE
#define ZAP_LONG_DEFAULTS_INDEX(index) \
@@ -147,23 +157,29 @@
#define ZAP_ATTRIBUTE_MASK(mask) ATTRIBUTE_MASK_##mask
// This is an array of EmberAfAttributeMetadata structures.
-#define GENERATED_ATTRIBUTE_COUNT 9
+#define GENERATED_ATTRIBUTE_COUNT 12
#define GENERATED_ATTRIBUTES \
{ \
\
/* Endpoint: 0, Cluster: OTA Software Update Provider (client) */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, ZAP_ATTRIBUTE_MASK(CLIENT), ZAP_SIMPLE_DEFAULT(1) }, /* ClusterRevision */ \
\
+ /* Endpoint: 0, Cluster: OTA Software Update Requestor (server) */ \
+ { 0x0001, ZAP_TYPE(OCTET_STRING), 17, ZAP_ATTRIBUTE_MASK(WRITABLE), \
+ ZAP_LONG_DEFAULTS_INDEX(0) }, /* default ota provider */ \
+ { 0x0002, ZAP_TYPE(BOOLEAN), 1, 0, ZAP_EMPTY_DEFAULT() }, /* update possible */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, ZAP_SIMPLE_DEFAULT(1) }, /* ClusterRevision */ \
+ \
/* Endpoint: 0, Cluster: General Commissioning (server) */ \
- { 0x0000, ZAP_TYPE(INT64U), 8, ZAP_ATTRIBUTE_MASK(WRITABLE), ZAP_LONG_DEFAULTS_INDEX(0) }, /* Breadcrumb */ \
- { 0x0001, ZAP_TYPE(ARRAY), 254, 0, ZAP_LONG_DEFAULTS_INDEX(8) }, /* BasicCommissioningInfoList */ \
- { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, ZAP_SIMPLE_DEFAULT(0x0001) }, /* ClusterRevision */ \
+ { 0x0000, ZAP_TYPE(INT64U), 8, ZAP_ATTRIBUTE_MASK(WRITABLE), ZAP_LONG_DEFAULTS_INDEX(17) }, /* Breadcrumb */ \
+ { 0x0001, ZAP_TYPE(ARRAY), 254, 0, ZAP_LONG_DEFAULTS_INDEX(25) }, /* BasicCommissioningInfoList */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, ZAP_SIMPLE_DEFAULT(0x0001) }, /* ClusterRevision */ \
\
/* Endpoint: 0, Cluster: Network Commissioning (server) */ \
- { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, ZAP_SIMPLE_DEFAULT(0x0001) }, /* ClusterRevision */ \
+ { 0xFFFD, ZAP_TYPE(INT16U), 2, 0, ZAP_SIMPLE_DEFAULT(1) }, /* ClusterRevision */ \
\
/* Endpoint: 0, Cluster: Operational Credentials (server) */ \
- { 0x0001, ZAP_TYPE(ARRAY), 320, 0, ZAP_LONG_DEFAULTS_INDEX(262) }, /* fabrics list */ \
+ { 0x0001, ZAP_TYPE(ARRAY), 320, 0, ZAP_LONG_DEFAULTS_INDEX(279) }, /* fabrics list */ \
{ 0x0002, ZAP_TYPE(INT8U), 1, 0, ZAP_EMPTY_DEFAULT() }, /* SupportedFabrics */ \
{ 0x0003, ZAP_TYPE(INT8U), 1, 0, ZAP_EMPTY_DEFAULT() }, /* CommissionedFabrics */ \
{ 0xFFFD, ZAP_TYPE(INT16U), 2, 0, ZAP_SIMPLE_DEFAULT(1) }, /* ClusterRevision */ \
@@ -176,20 +192,23 @@
#define GENERATED_FUNCTION_ARRAYS
#define ZAP_CLUSTER_MASK(mask) CLUSTER_MASK_##mask
-#define GENERATED_CLUSTER_COUNT 4
+#define GENERATED_CLUSTER_COUNT 5
#define GENERATED_CLUSTERS \
{ \
{ \
0x0029, ZAP_ATTRIBUTE_INDEX(0), 1, 2, ZAP_CLUSTER_MASK(CLIENT), NULL \
}, /* Endpoint: 0, Cluster: OTA Software Update Provider (client) */ \
{ \
- 0x0030, ZAP_ATTRIBUTE_INDEX(1), 3, 264, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x002A, ZAP_ATTRIBUTE_INDEX(1), 3, 20, ZAP_CLUSTER_MASK(SERVER), NULL \
+ }, /* Endpoint: 0, Cluster: OTA Software Update Requestor (server) */ \
+ { \
+ 0x0030, ZAP_ATTRIBUTE_INDEX(4), 3, 264, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 0, Cluster: General Commissioning (server) */ \
{ \
- 0x0031, ZAP_ATTRIBUTE_INDEX(4), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x0031, ZAP_ATTRIBUTE_INDEX(7), 1, 2, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 0, Cluster: Network Commissioning (server) */ \
{ \
- 0x003E, ZAP_ATTRIBUTE_INDEX(5), 4, 324, ZAP_CLUSTER_MASK(SERVER), NULL \
+ 0x003E, ZAP_ATTRIBUTE_INDEX(8), 4, 324, ZAP_CLUSTER_MASK(SERVER), NULL \
}, /* Endpoint: 0, Cluster: Operational Credentials (server) */ \
}
@@ -198,7 +217,7 @@
// This is an array of EmberAfEndpointType structures.
#define GENERATED_ENDPOINT_TYPES \
{ \
- { ZAP_CLUSTER_INDEX(0), 4, 592 }, \
+ { ZAP_CLUSTER_INDEX(0), 5, 612 }, \
}
// Largest attribute size is needed for various buffers
@@ -208,7 +227,7 @@
#define ATTRIBUTE_SINGLETONS_SIZE (0)
// Total size of attribute storage
-#define ATTRIBUTE_MAX_SIZE (592)
+#define ATTRIBUTE_MAX_SIZE (612)
// Number of fixed endpoints
#define FIXED_ENDPOINT_COUNT (1)
diff --git a/zzz_generated/ota-requestor-app/zap-generated/gen_config.h b/zzz_generated/ota-requestor-app/zap-generated/gen_config.h
index b31a8aa..63e61e4 100644
--- a/zzz_generated/ota-requestor-app/zap-generated/gen_config.h
+++ b/zzz_generated/ota-requestor-app/zap-generated/gen_config.h
@@ -32,6 +32,7 @@
#define EMBER_AF_GENERAL_COMMISSIONING_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_NETWORK_COMMISSIONING_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_OTA_PROVIDER_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
+#define EMBER_AF_OTA_REQUESTOR_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_OPERATIONAL_CREDENTIALS_CLUSTER_SERVER_ENDPOINT_COUNT (1)
/**** Cluster Plugins ****/
@@ -50,6 +51,11 @@
#define ZCL_USING_OTA_PROVIDER_CLUSTER_CLIENT
#define EMBER_AF_PLUGIN_OTA_SOFTWARE_UPDATE_PROVIDER_CLIENT
+// Use this macro to check if the server side of the OTA Software Update Requestor cluster is included
+#define ZCL_USING_OTA_REQUESTOR_CLUSTER_SERVER
+#define EMBER_AF_PLUGIN_OTA_SOFTWARE_UPDATE_REQUESTOR_SERVER
+#define EMBER_AF_PLUGIN_OTA_SOFTWARE_UPDATE_REQUESTOR
+
// Use this macro to check if the server side of the Operational Credentials cluster is included
#define ZCL_USING_OPERATIONAL_CREDENTIALS_CLUSTER_SERVER
#define EMBER_AF_PLUGIN_OPERATIONAL_CREDENTIALS_SERVER