@@ -223,7 +223,7 @@ class Device : public pw_rpc::nanopb::Device::Service<Device>
223
223
224
224
virtual pw::Status TriggerOta (const pw_protobuf_Empty & request, pw_protobuf_Empty & response)
225
225
{
226
- #if CONFIG_CHIP_OTA_REQUESTOR
226
+ #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
227
227
chip::DeviceLayer::PlatformMgr ().ScheduleWork (
228
228
[](intptr_t ) {
229
229
chip::OTARequestorInterface * requestor = chip::GetRequestorInstance ();
@@ -238,10 +238,33 @@ class Device : public pw_rpc::nanopb::Device::Service<Device>
238
238
},
239
239
reinterpret_cast <intptr_t >(nullptr ));
240
240
return pw::OkStatus ();
241
- #else
241
+ #else // CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
242
242
ChipLogError (AppServer, " Trigger OTA requested, but OTA requestor not compiled in." );
243
243
return pw::Status::Unimplemented ();
244
- #endif
244
+ #endif // CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
245
+ }
246
+
247
+ virtual pw::Status SetOtaMetadataForProvider (const chip_rpc_MetadataForProvider & request, pw_protobuf_Empty & response)
248
+ {
249
+ #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
250
+ chip::OTARequestorInterface * requestor = chip::GetRequestorInstance ();
251
+ if (requestor == nullptr )
252
+ {
253
+ ChipLogError (SoftwareUpdate, " Can't get the CASESessionManager" );
254
+ return pw::Status::Unavailable ();
255
+ }
256
+ else if (sizeof (metadataForProviderBuffer) < request.tlv .size )
257
+ {
258
+ return pw::Status::ResourceExhausted ();
259
+ }
260
+ memcpy (metadataForProviderBuffer, request.tlv .bytes , request.tlv .size );
261
+ DeviceLayer::StackLock lock;
262
+ requestor->SetMetadataForProvider (chip::ByteSpan (metadataForProviderBuffer, request.tlv .size ));
263
+ return pw::OkStatus ();
264
+ #else // CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
265
+ ChipLogError (AppServer, " OTA set metadata for provider requested, but OTA requestor not compiled in." );
266
+ return pw::Status::Unimplemented ();
267
+ #endif // CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
245
268
}
246
269
247
270
virtual pw::Status SetPairingState (const chip_rpc_PairingState & request, pw_protobuf_Empty & response)
@@ -415,6 +438,10 @@ class Device : public pw_rpc::nanopb::Device::Service<Device>
415
438
}
416
439
417
440
private:
441
+ #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
442
+ static constexpr size_t kMaxMetadataForProviderLength = 512 ; // length defined in chip spec 11.20.6.7
443
+ uint8_t metadataForProviderBuffer[kMaxMetadataForProviderLength ];
444
+ #endif // CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR
418
445
Internal::CommissionableDataProviderRpcWrapper mCommissionableDataProvider ;
419
446
};
420
447
0 commit comments