Toyomasa Watarai / simple-mbed-cloud-client

Dependents:  

Committer:
MACRUM
Date:
Mon Jul 02 06:30:39 2018 +0000
Revision:
0:276e7a263c35
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:276e7a263c35 1 // ----------------------------------------------------------------------------
MACRUM 0:276e7a263c35 2 // Copyright 2016-2017 ARM Ltd.
MACRUM 0:276e7a263c35 3 //
MACRUM 0:276e7a263c35 4 // SPDX-License-Identifier: Apache-2.0
MACRUM 0:276e7a263c35 5 //
MACRUM 0:276e7a263c35 6 // Licensed under the Apache License, Version 2.0 (the "License");
MACRUM 0:276e7a263c35 7 // you may not use this file except in compliance with the License.
MACRUM 0:276e7a263c35 8 // You may obtain a copy of the License at
MACRUM 0:276e7a263c35 9 //
MACRUM 0:276e7a263c35 10 // http://www.apache.org/licenses/LICENSE-2.0
MACRUM 0:276e7a263c35 11 //
MACRUM 0:276e7a263c35 12 // Unless required by applicable law or agreed to in writing, software
MACRUM 0:276e7a263c35 13 // distributed under the License is distributed on an "AS IS" BASIS,
MACRUM 0:276e7a263c35 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
MACRUM 0:276e7a263c35 15 // See the License for the specific language governing permissions and
MACRUM 0:276e7a263c35 16 // limitations under the License.
MACRUM 0:276e7a263c35 17 // ----------------------------------------------------------------------------
MACRUM 0:276e7a263c35 18
MACRUM 0:276e7a263c35 19 // Needed for PRIu64 on FreeRTOS
MACRUM 0:276e7a263c35 20 #include <stdio.h>
MACRUM 0:276e7a263c35 21 // Note: this macro is needed on armcc to get the the limit macros like UINT16_MAX
MACRUM 0:276e7a263c35 22 #ifndef __STDC_LIMIT_MACROS
MACRUM 0:276e7a263c35 23 #define __STDC_LIMIT_MACROS
MACRUM 0:276e7a263c35 24 #endif
MACRUM 0:276e7a263c35 25
MACRUM 0:276e7a263c35 26 // Note: this macro is needed on armcc to get the the PRI*32 macros
MACRUM 0:276e7a263c35 27 // from inttypes.h in a C++ code.
MACRUM 0:276e7a263c35 28 #ifndef __STDC_FORMAT_MACROS
MACRUM 0:276e7a263c35 29 #define __STDC_FORMAT_MACROS
MACRUM 0:276e7a263c35 30 #endif
MACRUM 0:276e7a263c35 31
MACRUM 0:276e7a263c35 32 #ifdef MBED_CLOUD_CLIENT_USER_CONFIG_FILE
MACRUM 0:276e7a263c35 33 #include MBED_CLOUD_CLIENT_USER_CONFIG_FILE
MACRUM 0:276e7a263c35 34 #endif
MACRUM 0:276e7a263c35 35
MACRUM 0:276e7a263c35 36 #ifdef MBED_CLOUD_CLIENT_SUPPORT_UPDATE
MACRUM 0:276e7a263c35 37 #include "update-client-hub/update_client_hub.h"
MACRUM 0:276e7a263c35 38
MACRUM 0:276e7a263c35 39 #include "update-client-source-http/arm_uc_source_http.h"
MACRUM 0:276e7a263c35 40 #include "update-client-lwm2m/lwm2m-source.h"
MACRUM 0:276e7a263c35 41 #include "update-client-lwm2m/lwm2m-monitor.h"
MACRUM 0:276e7a263c35 42 #include "update-client-lwm2m/lwm2m-control.h"
MACRUM 0:276e7a263c35 43 #include "update-client-lwm2m/FirmwareUpdateResource.h"
MACRUM 0:276e7a263c35 44 #include "update-client-lwm2m/DeviceMetadataResource.h"
MACRUM 0:276e7a263c35 45
MACRUM 0:276e7a263c35 46 #include "eventOS_scheduler.h"
MACRUM 0:276e7a263c35 47 #include "eventOS_event.h"
MACRUM 0:276e7a263c35 48
MACRUM 0:276e7a263c35 49 #include "include/UpdateClient.h"
MACRUM 0:276e7a263c35 50 #include "include/UpdateClientResources.h"
MACRUM 0:276e7a263c35 51 #include "include/CloudClientStorage.h"
MACRUM 0:276e7a263c35 52
MACRUM 0:276e7a263c35 53 #include "pal.h"
MACRUM 0:276e7a263c35 54
MACRUM 0:276e7a263c35 55 #if (!defined(MBED_CONF_MBED_TRACE_ENABLE) || MBED_CONF_MBED_TRACE_ENABLE == 0) \
MACRUM 0:276e7a263c35 56 && ARM_UC_ALL_TRACE_ENABLE == 1
MACRUM 0:276e7a263c35 57 #define tr_info(...) { printf(__VA_ARGS__); printf("\r\n"); }
MACRUM 0:276e7a263c35 58 #else
MACRUM 0:276e7a263c35 59 #include "mbed-trace/mbed_trace.h"
MACRUM 0:276e7a263c35 60 #define TRACE_GROUP "uccc"
MACRUM 0:276e7a263c35 61 #endif
MACRUM 0:276e7a263c35 62
MACRUM 0:276e7a263c35 63 /* To be removed once update storage is defined in user config file.
MACRUM 0:276e7a263c35 64 Default to filesystem in the meantime.
MACRUM 0:276e7a263c35 65 */
MACRUM 0:276e7a263c35 66 #ifndef MBED_CLOUD_CLIENT_UPDATE_STORAGE
MACRUM 0:276e7a263c35 67 #define MBED_CLOUD_CLIENT_UPDATE_STORAGE ARM_UCP_FILESYSTEM
MACRUM 0:276e7a263c35 68 #endif
MACRUM 0:276e7a263c35 69
MACRUM 0:276e7a263c35 70 #ifdef MBED_CLOUD_CLIENT_UPDATE_STORAGE
MACRUM 0:276e7a263c35 71 extern ARM_UC_PAAL_UPDATE MBED_CLOUD_CLIENT_UPDATE_STORAGE;
MACRUM 0:276e7a263c35 72 #else
MACRUM 0:276e7a263c35 73 #error Update client storage must be defined in user configuration file
MACRUM 0:276e7a263c35 74 #endif
MACRUM 0:276e7a263c35 75
MACRUM 0:276e7a263c35 76 namespace UpdateClient
MACRUM 0:276e7a263c35 77 {
MACRUM 0:276e7a263c35 78 enum UpdateClientEventType {
MACRUM 0:276e7a263c35 79 UPDATE_CLIENT_EVENT_INITIALIZE,
MACRUM 0:276e7a263c35 80 UPDATE_CLIENT_EVENT_PROCESS_QUEUE
MACRUM 0:276e7a263c35 81 };
MACRUM 0:276e7a263c35 82
MACRUM 0:276e7a263c35 83 static int8_t update_client_tasklet_id = -1;
MACRUM 0:276e7a263c35 84 static FP1<void, int32_t> error_callback;
MACRUM 0:276e7a263c35 85
MACRUM 0:276e7a263c35 86 static void certificate_done(arm_uc_error_t error,
MACRUM 0:276e7a263c35 87 const arm_uc_buffer_t* fingerprint);
MACRUM 0:276e7a263c35 88 static void initialization(void);
MACRUM 0:276e7a263c35 89 static void initialization_done(int32_t);
MACRUM 0:276e7a263c35 90 static void event_handler(arm_event_s* event);
MACRUM 0:276e7a263c35 91 static void queue_handler(void);
MACRUM 0:276e7a263c35 92 static void schedule_event(void);
MACRUM 0:276e7a263c35 93 static void error_handler(int32_t error);
MACRUM 0:276e7a263c35 94 }
MACRUM 0:276e7a263c35 95
MACRUM 0:276e7a263c35 96 void UpdateClient::UpdateClient(FP1<void, int32_t> callback)
MACRUM 0:276e7a263c35 97 {
MACRUM 0:276e7a263c35 98 tr_info("Update Client External Initialization: %p", (void*)pal_osThreadGetId());
MACRUM 0:276e7a263c35 99
MACRUM 0:276e7a263c35 100 /* store callback handler */
MACRUM 0:276e7a263c35 101 error_callback = callback;
MACRUM 0:276e7a263c35 102
MACRUM 0:276e7a263c35 103 /* create event */
MACRUM 0:276e7a263c35 104 eventOS_scheduler_mutex_wait();
MACRUM 0:276e7a263c35 105 if (update_client_tasklet_id == -1) {
MACRUM 0:276e7a263c35 106 update_client_tasklet_id = eventOS_event_handler_create(UpdateClient::event_handler,
MACRUM 0:276e7a263c35 107 UPDATE_CLIENT_EVENT_INITIALIZE);
MACRUM 0:276e7a263c35 108
MACRUM 0:276e7a263c35 109 tr_info("UpdateClient::update_client_tasklet_id: %d",
MACRUM 0:276e7a263c35 110 update_client_tasklet_id);
MACRUM 0:276e7a263c35 111 }
MACRUM 0:276e7a263c35 112 eventOS_scheduler_mutex_release();
MACRUM 0:276e7a263c35 113 }
MACRUM 0:276e7a263c35 114
MACRUM 0:276e7a263c35 115 /**
MACRUM 0:276e7a263c35 116 * @brief Populate M2MObjectList with Update Client objects.
MACRUM 0:276e7a263c35 117 */
MACRUM 0:276e7a263c35 118 void UpdateClient::populate_object_list(M2MObjectList& list)
MACRUM 0:276e7a263c35 119 {
MACRUM 0:276e7a263c35 120 /* Setup Firmware Update LWM2M object */
MACRUM 0:276e7a263c35 121 list.push_back(FirmwareUpdateResource::getObject());
MACRUM 0:276e7a263c35 122 list.push_back(DeviceMetadataResource::getObject());
MACRUM 0:276e7a263c35 123 }
MACRUM 0:276e7a263c35 124
MACRUM 0:276e7a263c35 125 void UpdateClient::set_update_authorize_handler(void (*handler)(int32_t request))
MACRUM 0:276e7a263c35 126 {
MACRUM 0:276e7a263c35 127 ARM_UC_SetAuthorizeHandler(handler);
MACRUM 0:276e7a263c35 128 }
MACRUM 0:276e7a263c35 129
MACRUM 0:276e7a263c35 130 void UpdateClient::update_authorize(int32_t request)
MACRUM 0:276e7a263c35 131 {
MACRUM 0:276e7a263c35 132 switch (request)
MACRUM 0:276e7a263c35 133 {
MACRUM 0:276e7a263c35 134 case RequestDownload:
MACRUM 0:276e7a263c35 135 ARM_UC_Authorize(ARM_UCCC_REQUEST_DOWNLOAD);
MACRUM 0:276e7a263c35 136 break;
MACRUM 0:276e7a263c35 137 case RequestInstall:
MACRUM 0:276e7a263c35 138 ARM_UC_Authorize(ARM_UCCC_REQUEST_INSTALL);
MACRUM 0:276e7a263c35 139 break;
MACRUM 0:276e7a263c35 140 case RequestInvalid:
MACRUM 0:276e7a263c35 141 default:
MACRUM 0:276e7a263c35 142 break;
MACRUM 0:276e7a263c35 143 }
MACRUM 0:276e7a263c35 144 }
MACRUM 0:276e7a263c35 145
MACRUM 0:276e7a263c35 146 void UpdateClient::set_update_progress_handler(void (*handler)(uint32_t progress, uint32_t total))
MACRUM 0:276e7a263c35 147 {
MACRUM 0:276e7a263c35 148 ARM_UC_SetProgressHandler(handler);
MACRUM 0:276e7a263c35 149 }
MACRUM 0:276e7a263c35 150
MACRUM 0:276e7a263c35 151 static void UpdateClient::initialization(void)
MACRUM 0:276e7a263c35 152 {
MACRUM 0:276e7a263c35 153 tr_info("internal initialization: %p", (void*)pal_osThreadGetId());
MACRUM 0:276e7a263c35 154
MACRUM 0:276e7a263c35 155 /* Register sources */
MACRUM 0:276e7a263c35 156 static const ARM_UPDATE_SOURCE* sources[] = {
MACRUM 0:276e7a263c35 157 &ARM_UCS_HTTPSource,
MACRUM 0:276e7a263c35 158 &ARM_UCS_LWM2M_SOURCE
MACRUM 0:276e7a263c35 159 };
MACRUM 0:276e7a263c35 160
MACRUM 0:276e7a263c35 161 ARM_UC_HUB_SetSources(sources, sizeof(sources)/sizeof(ARM_UPDATE_SOURCE*));
MACRUM 0:276e7a263c35 162
MACRUM 0:276e7a263c35 163 /* Register sink for telemetry */
MACRUM 0:276e7a263c35 164 ARM_UC_HUB_AddMonitor(&ARM_UCS_LWM2M_MONITOR);
MACRUM 0:276e7a263c35 165
MACRUM 0:276e7a263c35 166 /* Register local error handler */
MACRUM 0:276e7a263c35 167 ARM_UC_HUB_AddErrorCallback(UpdateClient::error_handler);
MACRUM 0:276e7a263c35 168
MACRUM 0:276e7a263c35 169 /* Link internal queue with external scheduler.
MACRUM 0:276e7a263c35 170 The callback handler is called whenever a task is posted to
MACRUM 0:276e7a263c35 171 an empty queue. This will trigger the queue to be processed.
MACRUM 0:276e7a263c35 172 */
MACRUM 0:276e7a263c35 173 ARM_UC_HUB_AddNotificationHandler(UpdateClient::queue_handler);
MACRUM 0:276e7a263c35 174
MACRUM 0:276e7a263c35 175 /* The override function enables the LWM2M Firmware Update Object
MACRUM 0:276e7a263c35 176 to authorize both download and installation. The intention is
MACRUM 0:276e7a263c35 177 that a buggy user application can't block an update.
MACRUM 0:276e7a263c35 178 */
MACRUM 0:276e7a263c35 179 ARM_UC_CONTROL_SetOverrideCallback(ARM_UC_OverrideAuthorization);
MACRUM 0:276e7a263c35 180
MACRUM 0:276e7a263c35 181 #ifdef MBED_CLOUD_CLIENT_UPDATE_STORAGE
MACRUM 0:276e7a263c35 182 /* Set implementation for storing firmware */
MACRUM 0:276e7a263c35 183 ARM_UC_HUB_SetStorage(&MBED_CLOUD_CLIENT_UPDATE_STORAGE);
MACRUM 0:276e7a263c35 184 #endif
MACRUM 0:276e7a263c35 185
MACRUM 0:276e7a263c35 186 #ifdef MBED_CLOUD_DEV_UPDATE_PSK
MACRUM 0:276e7a263c35 187 /* Add pre shared key */
MACRUM 0:276e7a263c35 188 ARM_UC_AddPreSharedKey(arm_uc_default_psk, arm_uc_default_psk_bits);
MACRUM 0:276e7a263c35 189 #endif
MACRUM 0:276e7a263c35 190
MACRUM 0:276e7a263c35 191 /* Insert default certificate if defined otherwise initialze
MACRUM 0:276e7a263c35 192 Update client immediately.
MACRUM 0:276e7a263c35 193 */
MACRUM 0:276e7a263c35 194 #ifdef MBED_CLOUD_DEV_UPDATE_CERT
MACRUM 0:276e7a263c35 195 /* Add verification certificate */
MACRUM 0:276e7a263c35 196 arm_uc_error_t result = ARM_UC_AddCertificate(arm_uc_default_certificate,
MACRUM 0:276e7a263c35 197 arm_uc_default_certificate_size,
MACRUM 0:276e7a263c35 198 arm_uc_default_fingerprint,
MACRUM 0:276e7a263c35 199 arm_uc_default_fingerprint_size,
MACRUM 0:276e7a263c35 200 UpdateClient::certificate_done);
MACRUM 0:276e7a263c35 201
MACRUM 0:276e7a263c35 202 /* Certificate insertion failed, most likely because the certificate
MACRUM 0:276e7a263c35 203 has already been inserted once before.
MACRUM 0:276e7a263c35 204
MACRUM 0:276e7a263c35 205 Continue initialization regardlessly, since the Update Client can still
MACRUM 0:276e7a263c35 206 work if verification certificates are inserted through the Factory
MACRUM 0:276e7a263c35 207 Client or by other means.
MACRUM 0:276e7a263c35 208 */
MACRUM 0:276e7a263c35 209 if (result.code != ARM_UC_CM_ERR_NONE)
MACRUM 0:276e7a263c35 210 {
MACRUM 0:276e7a263c35 211 tr_info("ARM_UC_AddCertificate failed");
MACRUM 0:276e7a263c35 212
MACRUM 0:276e7a263c35 213 ARM_UC_HUB_Initialize(UpdateClient::initialization_done);
MACRUM 0:276e7a263c35 214 }
MACRUM 0:276e7a263c35 215 #else
MACRUM 0:276e7a263c35 216 ARM_UC_HUB_Initialize(UpdateClient::initialization_done);
MACRUM 0:276e7a263c35 217 #endif
MACRUM 0:276e7a263c35 218 }
MACRUM 0:276e7a263c35 219
MACRUM 0:276e7a263c35 220 static void UpdateClient::certificate_done(arm_uc_error_t error,
MACRUM 0:276e7a263c35 221 const arm_uc_buffer_t* fingerprint)
MACRUM 0:276e7a263c35 222 {
MACRUM 0:276e7a263c35 223 (void) fingerprint;
MACRUM 0:276e7a263c35 224
MACRUM 0:276e7a263c35 225 /* Certificate insertion failure is not necessarily fatal.
MACRUM 0:276e7a263c35 226 If verification certificates have been injected by other means
MACRUM 0:276e7a263c35 227 it is still possible to perform updates, which is why the
MACRUM 0:276e7a263c35 228 Update client initializes anyway.
MACRUM 0:276e7a263c35 229 */
MACRUM 0:276e7a263c35 230 if (error.code != ARM_UC_CM_ERR_NONE)
MACRUM 0:276e7a263c35 231 {
MACRUM 0:276e7a263c35 232 error_callback.call(WarningCertificateInsertion);
MACRUM 0:276e7a263c35 233 }
MACRUM 0:276e7a263c35 234
MACRUM 0:276e7a263c35 235 ARM_UC_HUB_Initialize(UpdateClient::initialization_done);
MACRUM 0:276e7a263c35 236 }
MACRUM 0:276e7a263c35 237
MACRUM 0:276e7a263c35 238 static void UpdateClient::initialization_done(int32_t result)
MACRUM 0:276e7a263c35 239 {
MACRUM 0:276e7a263c35 240 tr_info("internal initialization done: %" PRIu32 " %p", result, (void*)pal_osThreadGetId());
MACRUM 0:276e7a263c35 241 }
MACRUM 0:276e7a263c35 242
MACRUM 0:276e7a263c35 243 static void UpdateClient::event_handler(arm_event_s* event)
MACRUM 0:276e7a263c35 244 {
MACRUM 0:276e7a263c35 245 switch (event->event_type)
MACRUM 0:276e7a263c35 246 {
MACRUM 0:276e7a263c35 247 case UPDATE_CLIENT_EVENT_INITIALIZE:
MACRUM 0:276e7a263c35 248 UpdateClient::initialization();
MACRUM 0:276e7a263c35 249 break;
MACRUM 0:276e7a263c35 250
MACRUM 0:276e7a263c35 251 case UPDATE_CLIENT_EVENT_PROCESS_QUEUE:
MACRUM 0:276e7a263c35 252 {
MACRUM 0:276e7a263c35 253 /* process a single callback, for better cooperability */
MACRUM 0:276e7a263c35 254 bool queue_not_empty = ARM_UC_ProcessSingleCallback();
MACRUM 0:276e7a263c35 255
MACRUM 0:276e7a263c35 256 if (queue_not_empty)
MACRUM 0:276e7a263c35 257 {
MACRUM 0:276e7a263c35 258 /* reschedule event handler, if queue is not empty */
MACRUM 0:276e7a263c35 259 UpdateClient::schedule_event();
MACRUM 0:276e7a263c35 260 }
MACRUM 0:276e7a263c35 261 }
MACRUM 0:276e7a263c35 262 break;
MACRUM 0:276e7a263c35 263
MACRUM 0:276e7a263c35 264 default:
MACRUM 0:276e7a263c35 265 break;
MACRUM 0:276e7a263c35 266 }
MACRUM 0:276e7a263c35 267 }
MACRUM 0:276e7a263c35 268
MACRUM 0:276e7a263c35 269 static void UpdateClient::queue_handler(void)
MACRUM 0:276e7a263c35 270 {
MACRUM 0:276e7a263c35 271 /* warning: queue_handler can be called from interrupt context.
MACRUM 0:276e7a263c35 272 */
MACRUM 0:276e7a263c35 273 UpdateClient::schedule_event();
MACRUM 0:276e7a263c35 274 }
MACRUM 0:276e7a263c35 275
MACRUM 0:276e7a263c35 276 static void UpdateClient::schedule_event()
MACRUM 0:276e7a263c35 277 {
MACRUM 0:276e7a263c35 278 /* schedule event */
MACRUM 0:276e7a263c35 279 arm_event_s event = {
MACRUM 0:276e7a263c35 280 .receiver = update_client_tasklet_id,
MACRUM 0:276e7a263c35 281 .sender = 0,
MACRUM 0:276e7a263c35 282 .event_type = UPDATE_CLIENT_EVENT_PROCESS_QUEUE,
MACRUM 0:276e7a263c35 283 .event_id = 0,
MACRUM 0:276e7a263c35 284 .data_ptr = NULL,
MACRUM 0:276e7a263c35 285 .priority = ARM_LIB_LOW_PRIORITY_EVENT,
MACRUM 0:276e7a263c35 286 .event_data = 0,
MACRUM 0:276e7a263c35 287 };
MACRUM 0:276e7a263c35 288
MACRUM 0:276e7a263c35 289 eventOS_event_send(&event);
MACRUM 0:276e7a263c35 290 }
MACRUM 0:276e7a263c35 291
MACRUM 0:276e7a263c35 292 static void UpdateClient::error_handler(int32_t error)
MACRUM 0:276e7a263c35 293 {
MACRUM 0:276e7a263c35 294 tr_info("error reported: %" PRIi32, error);
MACRUM 0:276e7a263c35 295
MACRUM 0:276e7a263c35 296 /* add warning base if less severe than error */
MACRUM 0:276e7a263c35 297 if (error < ARM_UC_ERROR)
MACRUM 0:276e7a263c35 298 {
MACRUM 0:276e7a263c35 299 error_callback.call(WarningBase + error);
MACRUM 0:276e7a263c35 300 }
MACRUM 0:276e7a263c35 301 /* add error base if less severe than fatal */
MACRUM 0:276e7a263c35 302 else if (error < ARM_UC_FATAL)
MACRUM 0:276e7a263c35 303 {
MACRUM 0:276e7a263c35 304 error_callback.call(ErrorBase + error);
MACRUM 0:276e7a263c35 305 }
MACRUM 0:276e7a263c35 306 /* add fatal base */
MACRUM 0:276e7a263c35 307 else
MACRUM 0:276e7a263c35 308 {
MACRUM 0:276e7a263c35 309 error_callback.call(FatalBase + error);
MACRUM 0:276e7a263c35 310 }
MACRUM 0:276e7a263c35 311 }
MACRUM 0:276e7a263c35 312
MACRUM 0:276e7a263c35 313 int UpdateClient::getVendorId(uint8_t* buffer, size_t buffer_size_max, size_t* value_size)
MACRUM 0:276e7a263c35 314 {
MACRUM 0:276e7a263c35 315 arm_uc_error_t err = ARM_UC_GetVendorId(buffer, buffer_size_max, value_size);
MACRUM 0:276e7a263c35 316 if (err.code == ARM_UC_DI_ERR_SIZE)
MACRUM 0:276e7a263c35 317 {
MACRUM 0:276e7a263c35 318 return CCS_STATUS_MEMORY_ERROR;
MACRUM 0:276e7a263c35 319 }
MACRUM 0:276e7a263c35 320 if (err.error == ERR_NONE)
MACRUM 0:276e7a263c35 321 {
MACRUM 0:276e7a263c35 322 *value_size = 16;
MACRUM 0:276e7a263c35 323 return CCS_STATUS_SUCCESS;
MACRUM 0:276e7a263c35 324 }
MACRUM 0:276e7a263c35 325 return CCS_STATUS_KEY_DOESNT_EXIST;
MACRUM 0:276e7a263c35 326 }
MACRUM 0:276e7a263c35 327 int UpdateClient::getClassId(uint8_t* buffer, size_t buffer_size_max, size_t* value_size)
MACRUM 0:276e7a263c35 328 {
MACRUM 0:276e7a263c35 329 arm_uc_error_t err = ARM_UC_GetClassId(buffer, buffer_size_max, value_size);
MACRUM 0:276e7a263c35 330 if (err.code == ARM_UC_DI_ERR_SIZE)
MACRUM 0:276e7a263c35 331 {
MACRUM 0:276e7a263c35 332 return CCS_STATUS_MEMORY_ERROR;
MACRUM 0:276e7a263c35 333 }
MACRUM 0:276e7a263c35 334 if (err.error == ERR_NONE)
MACRUM 0:276e7a263c35 335 {
MACRUM 0:276e7a263c35 336 *value_size = 16;
MACRUM 0:276e7a263c35 337 return CCS_STATUS_SUCCESS;
MACRUM 0:276e7a263c35 338 }
MACRUM 0:276e7a263c35 339 return CCS_STATUS_KEY_DOESNT_EXIST;
MACRUM 0:276e7a263c35 340 }
MACRUM 0:276e7a263c35 341 int UpdateClient::getDeviceId(uint8_t* buffer, size_t buffer_size_max, size_t* value_size)
MACRUM 0:276e7a263c35 342 {
MACRUM 0:276e7a263c35 343 arm_uc_error_t err = ARM_UC_GetDeviceId(buffer, buffer_size_max, value_size);
MACRUM 0:276e7a263c35 344 if (err.code == ARM_UC_DI_ERR_SIZE)
MACRUM 0:276e7a263c35 345 {
MACRUM 0:276e7a263c35 346 return CCS_STATUS_MEMORY_ERROR;
MACRUM 0:276e7a263c35 347 }
MACRUM 0:276e7a263c35 348 if (err.error == ERR_NONE)
MACRUM 0:276e7a263c35 349 {
MACRUM 0:276e7a263c35 350 *value_size = 16;
MACRUM 0:276e7a263c35 351 return CCS_STATUS_SUCCESS;
MACRUM 0:276e7a263c35 352 }
MACRUM 0:276e7a263c35 353 return CCS_STATUS_KEY_DOESNT_EXIST;
MACRUM 0:276e7a263c35 354 }
MACRUM 0:276e7a263c35 355
MACRUM 0:276e7a263c35 356 #endif