17
17
*/
18
18
19
19
#include < app-common/zap-generated/callback.h>
20
+ #include < app-common/zap-generated/cluster-objects.h>
20
21
#include < app/device/OperationalDeviceProxy.h>
21
22
#include < app/server/Server.h>
22
23
#include < credentials/examples/DeviceAttestationCredsExample.h>
@@ -43,11 +44,10 @@ using chip::Transport::PeerAddress;
43
44
using namespace chip ::ArgParser;
44
45
using namespace chip ::Messaging;
45
46
using namespace chip ::app::device;
47
+ using namespace chip ::app::Clusters::OtaSoftwareUpdateProvider::Commands;
46
48
47
- void OnQueryImageResponse (void * context, uint8_t status, uint32_t delayedActionTime, CharSpan imageURI, uint32_t softwareVersion,
48
- CharSpan softwareVersionString, ByteSpan updateToken, bool userConsentNeeded,
49
- ByteSpan metadataForRequestor);
50
- void OnQueryImageFailure (void * context, uint8_t status);
49
+ void OnQueryImageResponse (void * context, const QueryImageResponse::DecodableType & response);
50
+ void OnQueryImageFailure (void * context, EmberAfStatus status);
51
51
void OnConnected (void * context, OperationalDeviceProxy * operationalDeviceProxy);
52
52
void OnConnectionFailure (void * context, OperationalDeviceProxy * operationalDeviceProxy, CHIP_ERROR error);
53
53
bool HandleOptions (const char * aProgram, OptionSet * aOptions, int aIdentifier, const char * aName, const char * aValue);
@@ -56,8 +56,6 @@ bool HandleOptions(const char * aProgram, OptionSet * aOptions, int aIdentifier,
56
56
OperationalDeviceProxy gOperationalDeviceProxy ;
57
57
ExchangeContext * exchangeCtx = nullptr ;
58
58
BdxDownloader bdxDownloader;
59
- Callback<OtaSoftwareUpdateProviderClusterQueryImageResponseCallback> mQueryImageResponseCallback (OnQueryImageResponse, nullptr );
60
- Callback<DefaultFailureCallback> mOnQueryFailureCallback (OnQueryImageFailure, nullptr );
61
59
Callback<OnOperationalDeviceConnected> mOnConnectedCallback (OnConnected, nullptr );
62
60
Callback<OnOperationalDeviceConnectionFailure> mOnConnectionFailureCallback (OnConnectionFailure, nullptr );
63
61
@@ -108,11 +106,9 @@ HelpOptions helpOptions("ota-requestor-app", "Usage: ota-requestor-app [options]
108
106
109
107
OptionSet * allOptions[] = { &cmdLineOptions, &helpOptions, nullptr };
110
108
111
- void OnQueryImageResponse (void * context, uint8_t status, uint32_t delayedActionTime, CharSpan imageURI, uint32_t softwareVersion,
112
- CharSpan softwareVersionString, ByteSpan updateToken, bool userConsentNeeded,
113
- ByteSpan metadataForRequestor)
109
+ void OnQueryImageResponse (void * context, const QueryImageResponse::DecodableType & response)
114
110
{
115
- ChipLogDetail (SoftwareUpdate, " QueryImageResponse responded with action %" PRIu8, status);
111
+ ChipLogDetail (SoftwareUpdate, " QueryImageResponse responded with action %" PRIu8, response. status );
116
112
117
113
TransferSession::TransferInitData initOptions;
118
114
initOptions.TransferCtlFlags = chip::bdx::TransferControlFlags::kReceiverDrive ;
@@ -143,7 +139,7 @@ void OnQueryImageResponse(void * context, uint8_t status, uint32_t delayedAction
143
139
chip::System::Clock::Seconds16 (20 ));
144
140
}
145
141
146
- void OnQueryImageFailure (void * context, uint8_t status)
142
+ void OnQueryImageFailure (void * context, EmberAfStatus status)
147
143
{
148
144
ChipLogDetail (SoftwareUpdate, " QueryImage failure response %" PRIu8, status);
149
145
}
@@ -154,17 +150,13 @@ void OnConnected(void * context, OperationalDeviceProxy * operationalDeviceProxy
154
150
chip::Controller::OtaSoftwareUpdateProviderCluster cluster;
155
151
constexpr EndpointId kOtaProviderEndpoint = 0 ;
156
152
157
- chip::Callback::Cancelable * successCallback = mQueryImageResponseCallback .Cancel ();
158
- chip::Callback::Cancelable * failureCallback = mOnQueryFailureCallback .Cancel ();
159
-
160
153
// These QueryImage params have been chosen arbitrarily
161
- constexpr VendorId kExampleVendorId = VendorId::Common;
162
- constexpr uint16_t kExampleProductId = 77 ;
163
- constexpr uint16_t kExampleHWVersion = 3 ;
164
- constexpr uint16_t kExampleSoftwareVersion = 0 ;
165
- constexpr uint8_t kExampleProtocolsSupported =
166
- EMBER_ZCL_OTA_DOWNLOAD_PROTOCOL_BDX_SYNCHRONOUS; // TODO: support this as a list once ember adds list support
167
- const char locationBuf[] = { ' U' , ' S' };
154
+ constexpr VendorId kExampleVendorId = VendorId::Common;
155
+ constexpr uint16_t kExampleProductId = 77 ;
156
+ constexpr uint16_t kExampleHWVersion = 3 ;
157
+ constexpr uint16_t kExampleSoftwareVersion = 0 ;
158
+ constexpr EmberAfOTADownloadProtocol kExampleProtocolsSupported [] = { EMBER_ZCL_OTA_DOWNLOAD_PROTOCOL_BDX_SYNCHRONOUS };
159
+ const char locationBuf[] = { ' U' , ' S' };
168
160
CharSpan exampleLocation (locationBuf);
169
161
constexpr bool kExampleClientCanConsent = false ;
170
162
ByteSpan metadata;
@@ -175,8 +167,16 @@ void OnConnected(void * context, OperationalDeviceProxy * operationalDeviceProxy
175
167
ChipLogError (SoftwareUpdate, " Associate() failed: %" CHIP_ERROR_FORMAT, err.Format ());
176
168
return ;
177
169
}
178
- err = cluster.QueryImage (successCallback, failureCallback, kExampleVendorId , kExampleProductId , kExampleSoftwareVersion ,
179
- kExampleProtocolsSupported , kExampleHWVersion , exampleLocation, kExampleClientCanConsent , metadata);
170
+ QueryImage::Type args;
171
+ args.vendorId = kExampleVendorId ;
172
+ args.productId = kExampleProductId ;
173
+ args.softwareVersion = kExampleSoftwareVersion ;
174
+ args.protocolsSupported = kExampleProtocolsSupported ;
175
+ args.hardwareVersion .Emplace (kExampleHWVersion );
176
+ args.location .Emplace (exampleLocation);
177
+ args.requestorCanConsent .Emplace (kExampleClientCanConsent );
178
+ args.metadataForProvider .Emplace (metadata);
179
+ err = cluster.InvokeCommand (args, /* context = */ nullptr , OnQueryImageResponse, OnQueryImageFailure);
180
180
if (err != CHIP_NO_ERROR)
181
181
{
182
182
ChipLogError (SoftwareUpdate, " QueryImage() failed: %" CHIP_ERROR_FORMAT, err.Format ());
0 commit comments