Toyomasa Watarai / simple-mbed-cloud-client

Dependents:  

Committer:
MACRUM
Date:
Mon Jul 02 08:06:37 2018 +0000
Revision:
2:bf2124b482f9
Parent:
0:276e7a263c35
Update library

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 #include "update-client-hub/update_client_hub.h"
MACRUM 0:276e7a263c35 20
MACRUM 0:276e7a263c35 21 #include "update-client-common/arm_uc_common.h"
MACRUM 0:276e7a263c35 22 #include "update-client-control-center/arm_uc_control_center.h"
MACRUM 0:276e7a263c35 23 #include "update-client-control-center/arm_uc_pre_shared_key.h"
MACRUM 0:276e7a263c35 24 #include "update-client-control-center/arm_uc_certificate.h"
MACRUM 0:276e7a263c35 25 #include "update-client-source-manager/arm_uc_source_manager.h"
MACRUM 0:276e7a263c35 26 #include "update-client-firmware-manager/arm_uc_firmware_manager.h"
MACRUM 0:276e7a263c35 27 #include "update-client-manifest-manager/update-client-manifest-manager.h"
MACRUM 0:276e7a263c35 28
MACRUM 0:276e7a263c35 29 #include "update_client_hub_state_machine.h"
MACRUM 0:276e7a263c35 30 #include "update_client_hub_event_handlers.h"
MACRUM 0:276e7a263c35 31 #include "update_client_hub_error_handler.h"
MACRUM 0:276e7a263c35 32
MACRUM 0:276e7a263c35 33 #include "pal4life-device-identity/pal_device_identity.h"
MACRUM 0:276e7a263c35 34
MACRUM 0:276e7a263c35 35 #define HANDLE_INIT_ERROR(retval, msg, ...)\
MACRUM 0:276e7a263c35 36 if (retval.error != ERR_NONE)\
MACRUM 0:276e7a263c35 37 {\
MACRUM 0:276e7a263c35 38 ARM_UC_HUB_setState(ARM_UC_HUB_STATE_UNINITIALIZED);\
MACRUM 0:276e7a263c35 39 UC_HUB_ERR_MSG(msg " error code %s", ##__VA_ARGS__, ARM_UC_err2Str(retval));\
MACRUM 0:276e7a263c35 40 return retval;\
MACRUM 0:276e7a263c35 41 }
MACRUM 0:276e7a263c35 42
MACRUM 0:276e7a263c35 43 static const ARM_UPDATE_SOURCE** arm_uc_sources = NULL;
MACRUM 0:276e7a263c35 44 static uint8_t arm_uc_sources_size = 0;
MACRUM 0:276e7a263c35 45
MACRUM 0:276e7a263c35 46 static arm_uc_mmContext_t manifestManagerInitContext = { 0 };
MACRUM 0:276e7a263c35 47 static arm_uc_mmContext_t* pManifestManagerInitContext = &manifestManagerInitContext;
MACRUM 0:276e7a263c35 48
MACRUM 0:276e7a263c35 49 /**
MACRUM 0:276e7a263c35 50 * @brief Call initialiser of all components of the client.
MACRUM 0:276e7a263c35 51 * finish asynchronously, will invoke callback when
MACRUM 0:276e7a263c35 52 * initialisation is done.
MACRUM 0:276e7a263c35 53 * @param init_cb the callback to be invoked at the end of initilastion.
MACRUM 0:276e7a263c35 54 */
MACRUM 0:276e7a263c35 55 arm_uc_error_t ARM_UC_HUB_Initialize(void (*init_cb)(int32_t))
MACRUM 0:276e7a263c35 56 {
MACRUM 0:276e7a263c35 57 arm_uc_error_t retval;
MACRUM 0:276e7a263c35 58
MACRUM 0:276e7a263c35 59 if (ARM_UC_HUB_getState() != ARM_UC_HUB_STATE_UNINITIALIZED)
MACRUM 0:276e7a263c35 60 {
MACRUM 0:276e7a263c35 61 UC_HUB_ERR_MSG("Already Initialized");
MACRUM 0:276e7a263c35 62 return (arm_uc_error_t){ ERR_INVALID_PARAMETER };
MACRUM 0:276e7a263c35 63 }
MACRUM 0:276e7a263c35 64
MACRUM 0:276e7a263c35 65 ARM_UC_HUB_setInitializationCallback(init_cb);
MACRUM 0:276e7a263c35 66
MACRUM 0:276e7a263c35 67 /* Register event handler with Control Center. */
MACRUM 0:276e7a263c35 68 retval = ARM_UC_ControlCenter_Initialize(ARM_UC_HUB_ControlCenterEventHandler);
MACRUM 0:276e7a263c35 69 HANDLE_INIT_ERROR(retval, "Control Center init failed")
MACRUM 0:276e7a263c35 70
MACRUM 0:276e7a263c35 71 /* Register event handler with Firmware Manager */
MACRUM 0:276e7a263c35 72 retval = ARM_UC_FirmwareManager.Initialize(ARM_UC_HUB_FirmwareManagerEventHandler);
MACRUM 0:276e7a263c35 73 HANDLE_INIT_ERROR(retval, "Firmware Manager init failed")
MACRUM 0:276e7a263c35 74
MACRUM 0:276e7a263c35 75 /* Register event handler with Source Manager */
MACRUM 0:276e7a263c35 76 retval = ARM_UC_SourceManager.Initialize(ARM_UC_HUB_SourceManagerEventHandler);
MACRUM 0:276e7a263c35 77 HANDLE_INIT_ERROR(retval, "Source Manager init failed")
MACRUM 0:276e7a263c35 78
MACRUM 0:276e7a263c35 79 for (uint8_t index = 0; index < arm_uc_sources_size; index++)
MACRUM 0:276e7a263c35 80 {
MACRUM 0:276e7a263c35 81 ARM_UC_SourceManager.AddSource(arm_uc_sources[index]);
MACRUM 0:276e7a263c35 82 }
MACRUM 0:276e7a263c35 83
MACRUM 0:276e7a263c35 84 /* Register event handler and add config store implementation to manifest
MACRUM 0:276e7a263c35 85 manager.
MACRUM 0:276e7a263c35 86 */
MACRUM 0:276e7a263c35 87 retval = ARM_UC_mmInit(&pManifestManagerInitContext,
MACRUM 0:276e7a263c35 88 ARM_UC_HUB_ManifestManagerEventHandler,
MACRUM 0:276e7a263c35 89 NULL);
MACRUM 0:276e7a263c35 90 HANDLE_INIT_ERROR(retval, "Manifest manager init failed")
MACRUM 0:276e7a263c35 91
MACRUM 0:276e7a263c35 92 /* add hard coded certificates to the manifest manager */
MACRUM 0:276e7a263c35 93 // retval = ARM_UC_mmStoreCertificate(CA_PATH, cert, CERT_SIZE);
MACRUM 0:276e7a263c35 94 // if ((retval.error != ERR_NONE) && (retval.code != MFST_ERR_PENDING))
MACRUM 0:276e7a263c35 95 // {
MACRUM 0:276e7a263c35 96 // HANDLE_INIT_ERROR(retval, "Manifest manager StoreCertificate failed")
MACRUM 0:276e7a263c35 97 // }
MACRUM 0:276e7a263c35 98
MACRUM 0:276e7a263c35 99 return (arm_uc_error_t){ ERR_NONE };
MACRUM 0:276e7a263c35 100 }
MACRUM 0:276e7a263c35 101
MACRUM 0:276e7a263c35 102 /**
MACRUM 0:276e7a263c35 103 * @brief Process events in the event queue.
MACRUM 0:276e7a263c35 104 */
MACRUM 0:276e7a263c35 105 arm_uc_error_t ARM_UC_HUB_ProcessEvents()
MACRUM 0:276e7a263c35 106 {
MACRUM 0:276e7a263c35 107 ARM_UC_ProcessQueue();
MACRUM 0:276e7a263c35 108
MACRUM 0:276e7a263c35 109 return (arm_uc_error_t){ ERR_NONE };
MACRUM 0:276e7a263c35 110 }
MACRUM 0:276e7a263c35 111
MACRUM 0:276e7a263c35 112 /**
MACRUM 0:276e7a263c35 113 * @brief Register callback function for when callbacks are added to an empty queue.
MACRUM 0:276e7a263c35 114 */
MACRUM 0:276e7a263c35 115 arm_uc_error_t ARM_UC_HUB_AddNotificationHandler(void (*handler)(void))
MACRUM 0:276e7a263c35 116 {
MACRUM 0:276e7a263c35 117 ARM_UC_AddNotificationHandler(handler);
MACRUM 0:276e7a263c35 118
MACRUM 0:276e7a263c35 119 return (arm_uc_error_t){ ERR_NONE };
MACRUM 0:276e7a263c35 120 }
MACRUM 0:276e7a263c35 121
MACRUM 0:276e7a263c35 122 /**
MACRUM 0:276e7a263c35 123 * @brief Add source to the Update Client.
MACRUM 0:276e7a263c35 124 */
MACRUM 0:276e7a263c35 125 arm_uc_error_t ARM_UC_HUB_SetSources(const ARM_UPDATE_SOURCE* sources[],
MACRUM 0:276e7a263c35 126 uint8_t size)
MACRUM 0:276e7a263c35 127 {
MACRUM 0:276e7a263c35 128 arm_uc_sources = sources;
MACRUM 0:276e7a263c35 129 arm_uc_sources_size = size;
MACRUM 0:276e7a263c35 130
MACRUM 0:276e7a263c35 131 return (arm_uc_error_t){ ERR_NONE };
MACRUM 0:276e7a263c35 132 }
MACRUM 0:276e7a263c35 133
MACRUM 0:276e7a263c35 134 /**
MACRUM 0:276e7a263c35 135 * Set PAAL Update implementation
MACRUM 0:276e7a263c35 136 */
MACRUM 0:276e7a263c35 137 arm_uc_error_t ARM_UC_HUB_SetStorage(const ARM_UC_PAAL_UPDATE* implementation)
MACRUM 0:276e7a263c35 138 {
MACRUM 0:276e7a263c35 139 return ARM_UCP_SetPAALUpdate(implementation);
MACRUM 0:276e7a263c35 140 }
MACRUM 0:276e7a263c35 141
MACRUM 0:276e7a263c35 142 /**
MACRUM 0:276e7a263c35 143 * @brief Add monitor to the control center.
MACRUM 0:276e7a263c35 144 */
MACRUM 0:276e7a263c35 145 arm_uc_error_t ARM_UC_HUB_AddMonitor(const ARM_UPDATE_MONITOR* monitor)
MACRUM 0:276e7a263c35 146 {
MACRUM 0:276e7a263c35 147 return ARM_UC_ControlCenter_AddMonitor(monitor);
MACRUM 0:276e7a263c35 148 }
MACRUM 0:276e7a263c35 149
MACRUM 0:276e7a263c35 150 /**
MACRUM 0:276e7a263c35 151 * @brief Temporary error reporting function.
MACRUM 0:276e7a263c35 152 */
MACRUM 0:276e7a263c35 153 void ARM_UC_HUB_AddErrorCallback(void (*callback)(int32_t error))
MACRUM 0:276e7a263c35 154 {
MACRUM 0:276e7a263c35 155 ARM_UC_HUB_AddErrorCallbackInternal(callback);
MACRUM 0:276e7a263c35 156 }
MACRUM 0:276e7a263c35 157
MACRUM 0:276e7a263c35 158 /**
MACRUM 0:276e7a263c35 159 * @brief Authorize request.
MACRUM 0:276e7a263c35 160 */
MACRUM 0:276e7a263c35 161 arm_uc_error_t ARM_UC_Authorize(arm_uc_request_t request)
MACRUM 0:276e7a263c35 162 {
MACRUM 0:276e7a263c35 163 return ARM_UC_ControlCenter_Authorize(request);
MACRUM 0:276e7a263c35 164 }
MACRUM 0:276e7a263c35 165
MACRUM 0:276e7a263c35 166 /**
MACRUM 0:276e7a263c35 167 * @brief Set callback for receiving download progress.
MACRUM 0:276e7a263c35 168 * @details User application call for setting callback handler.
MACRUM 0:276e7a263c35 169 * The callback function takes the progreess in percent as argument.
MACRUM 0:276e7a263c35 170 *
MACRUM 0:276e7a263c35 171 * @param callback Function pointer to the progress function.
MACRUM 0:276e7a263c35 172 * @return Error code.
MACRUM 0:276e7a263c35 173 */
MACRUM 0:276e7a263c35 174 arm_uc_error_t ARM_UC_SetProgressHandler(void (*callback)(uint32_t progress, uint32_t total))
MACRUM 0:276e7a263c35 175 {
MACRUM 0:276e7a263c35 176 return ARM_UC_ControlCenter_SetProgressHandler(callback);
MACRUM 0:276e7a263c35 177 }
MACRUM 0:276e7a263c35 178
MACRUM 0:276e7a263c35 179 /**
MACRUM 0:276e7a263c35 180 * @brief Set callback function for authorizing requests.
MACRUM 0:276e7a263c35 181 * @details User application call for setting callback handler.
MACRUM 0:276e7a263c35 182 * The callback function takes an enum request and an authorization
MACRUM 0:276e7a263c35 183 * function pointer. To authorize the given request, the caller
MACRUM 0:276e7a263c35 184 * invokes the authorization function.
MACRUM 0:276e7a263c35 185 *
MACRUM 0:276e7a263c35 186 * @param callback Function pointer to the authorization function.
MACRUM 0:276e7a263c35 187 * @return Error code.
MACRUM 0:276e7a263c35 188 */
MACRUM 0:276e7a263c35 189 arm_uc_error_t ARM_UC_SetAuthorizeHandler(void (*callback)(int32_t))
MACRUM 0:276e7a263c35 190 {
MACRUM 0:276e7a263c35 191 return ARM_UC_ControlCenter_SetAuthorityHandler(callback);
MACRUM 0:276e7a263c35 192 }
MACRUM 0:276e7a263c35 193
MACRUM 0:276e7a263c35 194 /**
MACRUM 0:276e7a263c35 195 * @brief Override update authorization handler.
MACRUM 0:276e7a263c35 196 * @details Force download and update to progress regardless of authorization
MACRUM 0:276e7a263c35 197 * handler. This function is used for unblocking an update in a buggy
MACRUM 0:276e7a263c35 198 * application.
MACRUM 0:276e7a263c35 199 */
MACRUM 0:276e7a263c35 200 void ARM_UC_OverrideAuthorization(void)
MACRUM 0:276e7a263c35 201 {
MACRUM 0:276e7a263c35 202 ARM_UC_ControlCenter_OverrideAuthorization();
MACRUM 0:276e7a263c35 203 }
MACRUM 0:276e7a263c35 204
MACRUM 0:276e7a263c35 205 /**
MACRUM 0:276e7a263c35 206 * @brief Add certificate.
MACRUM 0:276e7a263c35 207 * @details [long description]
MACRUM 0:276e7a263c35 208 *
MACRUM 0:276e7a263c35 209 * @param certificate Pointer to certiface being added.
MACRUM 0:276e7a263c35 210 * @param certificate_length Certificate length.
MACRUM 0:276e7a263c35 211 * @param fingerprint Pointer to the fingerprint of the certificate being added.
MACRUM 0:276e7a263c35 212 * @param fingerprint_length Fingerprint length.
MACRUM 0:276e7a263c35 213 * @return Error code.
MACRUM 0:276e7a263c35 214 */
MACRUM 0:276e7a263c35 215 arm_uc_error_t ARM_UC_AddCertificate(const uint8_t* certificate,
MACRUM 0:276e7a263c35 216 uint16_t certificate_length,
MACRUM 0:276e7a263c35 217 const uint8_t* fingerprint,
MACRUM 0:276e7a263c35 218 uint16_t fingerprint_length,
MACRUM 0:276e7a263c35 219 void (*callback)(arm_uc_error_t, const arm_uc_buffer_t*))
MACRUM 0:276e7a263c35 220 {
MACRUM 0:276e7a263c35 221 return ARM_UC_Certificate_Add(certificate,
MACRUM 0:276e7a263c35 222 certificate_length,
MACRUM 0:276e7a263c35 223 fingerprint,
MACRUM 0:276e7a263c35 224 fingerprint_length,
MACRUM 0:276e7a263c35 225 callback);
MACRUM 0:276e7a263c35 226 }
MACRUM 0:276e7a263c35 227
MACRUM 0:276e7a263c35 228 /**
MACRUM 0:276e7a263c35 229 * @brief Set pointer to pre-shared-key with the given size.
MACRUM 0:276e7a263c35 230 *
MACRUM 0:276e7a263c35 231 * @param key Pointer to pre-shared-key.
MACRUM 0:276e7a263c35 232 * @param bits Key size in bits.
MACRUM 0:276e7a263c35 233 *
MACRUM 0:276e7a263c35 234 * @return Error code.
MACRUM 0:276e7a263c35 235 */
MACRUM 0:276e7a263c35 236 arm_uc_error_t ARM_UC_AddPreSharedKey(const uint8_t* key, uint16_t bits)
MACRUM 0:276e7a263c35 237 {
MACRUM 0:276e7a263c35 238 return ARM_UC_PreSharedKey_SetKey(key, bits);
MACRUM 0:276e7a263c35 239 }
MACRUM 0:276e7a263c35 240
MACRUM 0:276e7a263c35 241 /**
MACRUM 0:276e7a263c35 242 * @brief Function for setting the vendor ID.
MACRUM 0:276e7a263c35 243 * @details The ID is copied to a 16 byte struct. Any data after the first
MACRUM 0:276e7a263c35 244 * 16 bytes will be ignored.
MACRUM 0:276e7a263c35 245 * @param id Pointer to ID.
MACRUM 0:276e7a263c35 246 * @param length Length of ID.
MACRUM 0:276e7a263c35 247 * @return Error code.
MACRUM 0:276e7a263c35 248 */
MACRUM 0:276e7a263c35 249 arm_uc_error_t ARM_UC_SetVendorId(const uint8_t* id, uint8_t length)
MACRUM 0:276e7a263c35 250 {
MACRUM 0:276e7a263c35 251 arm_uc_guid_t uuid = { 0 };
MACRUM 0:276e7a263c35 252
MACRUM 0:276e7a263c35 253 if (id)
MACRUM 0:276e7a263c35 254 {
MACRUM 0:276e7a263c35 255 for (uint8_t index = 0;
MACRUM 0:276e7a263c35 256 (index < sizeof(arm_uc_guid_t) && (index < length));
MACRUM 0:276e7a263c35 257 index++)
MACRUM 0:276e7a263c35 258 {
MACRUM 0:276e7a263c35 259 ((uint8_t*) uuid)[index] = id[index];
MACRUM 0:276e7a263c35 260 }
MACRUM 0:276e7a263c35 261 }
MACRUM 0:276e7a263c35 262
MACRUM 0:276e7a263c35 263 return pal_setVendorGuid(&uuid);
MACRUM 0:276e7a263c35 264 }
MACRUM 0:276e7a263c35 265
MACRUM 0:276e7a263c35 266 /**
MACRUM 0:276e7a263c35 267 * @brief Function for setting the class ID.
MACRUM 0:276e7a263c35 268 * @details The ID is copied to a 16 byte struct. Any data after the first
MACRUM 0:276e7a263c35 269 * 16 bytes will be ignored.
MACRUM 0:276e7a263c35 270 * @param id Pointer to ID.
MACRUM 0:276e7a263c35 271 * @param length Length of ID.
MACRUM 0:276e7a263c35 272 * @return Error code.
MACRUM 0:276e7a263c35 273 */
MACRUM 0:276e7a263c35 274 arm_uc_error_t ARM_UC_SetClassId(const uint8_t* id, uint8_t length)
MACRUM 0:276e7a263c35 275 {
MACRUM 0:276e7a263c35 276 arm_uc_guid_t uuid = { 0 };
MACRUM 0:276e7a263c35 277
MACRUM 0:276e7a263c35 278 if (id)
MACRUM 0:276e7a263c35 279 {
MACRUM 0:276e7a263c35 280 for (uint8_t index = 0;
MACRUM 0:276e7a263c35 281 (index < sizeof(arm_uc_guid_t) && (index < length));
MACRUM 0:276e7a263c35 282 index++)
MACRUM 0:276e7a263c35 283 {
MACRUM 0:276e7a263c35 284 ((uint8_t*) uuid)[index] = id[index];
MACRUM 0:276e7a263c35 285 }
MACRUM 0:276e7a263c35 286 }
MACRUM 0:276e7a263c35 287
MACRUM 0:276e7a263c35 288 return pal_setClassGuid(&uuid);
MACRUM 0:276e7a263c35 289 }
MACRUM 0:276e7a263c35 290
MACRUM 0:276e7a263c35 291 /**
MACRUM 0:276e7a263c35 292 * @brief Function for setting the device ID.
MACRUM 0:276e7a263c35 293 * @details The ID is copied to a 16 byte struct. Any data after the first
MACRUM 0:276e7a263c35 294 * 16 bytes will be ignored.
MACRUM 0:276e7a263c35 295 * @param id Pointer to ID.
MACRUM 0:276e7a263c35 296 * @param length Length of ID.
MACRUM 0:276e7a263c35 297 * @return Error code.
MACRUM 0:276e7a263c35 298 */
MACRUM 0:276e7a263c35 299 arm_uc_error_t ARM_UC_SetDeviceId(const uint8_t* id, uint8_t length)
MACRUM 0:276e7a263c35 300 {
MACRUM 0:276e7a263c35 301 arm_uc_guid_t uuid = { 0 };
MACRUM 0:276e7a263c35 302
MACRUM 0:276e7a263c35 303 if (id)
MACRUM 0:276e7a263c35 304 {
MACRUM 0:276e7a263c35 305 for (uint8_t index = 0;
MACRUM 0:276e7a263c35 306 (index < sizeof(arm_uc_guid_t) && (index < length));
MACRUM 0:276e7a263c35 307 index++)
MACRUM 0:276e7a263c35 308 {
MACRUM 0:276e7a263c35 309 ((uint8_t*) uuid)[index] = id[index];
MACRUM 0:276e7a263c35 310 }
MACRUM 0:276e7a263c35 311 }
MACRUM 0:276e7a263c35 312
MACRUM 0:276e7a263c35 313 return pal_setDeviceGuid(&uuid);
MACRUM 0:276e7a263c35 314 }
MACRUM 0:276e7a263c35 315
MACRUM 0:276e7a263c35 316 /**
MACRUM 0:276e7a263c35 317 * @brief Function for reporting the vendor ID.
MACRUM 0:276e7a263c35 318 * @details 16 bytes are copied into the supplied buffer.
MACRUM 0:276e7a263c35 319 * @param id Pointer to storage for ID. MUST be at least 16 bytes long.
MACRUM 0:276e7a263c35 320 * @param id_max the size of the ID buffer
MACRUM 0:276e7a263c35 321 * @param id_size pointer to a variable to receive the size of the ID
MACRUM 0:276e7a263c35 322 * written into the buffer (always 16).
MACRUM 0:276e7a263c35 323 * @return Error code.
MACRUM 0:276e7a263c35 324 */
MACRUM 0:276e7a263c35 325 arm_uc_error_t ARM_UC_GetVendorId(uint8_t* id,
MACRUM 0:276e7a263c35 326 const size_t id_max,
MACRUM 0:276e7a263c35 327 size_t* id_size)
MACRUM 0:276e7a263c35 328 {
MACRUM 0:276e7a263c35 329 arm_uc_guid_t guid = {0};
MACRUM 0:276e7a263c35 330 arm_uc_error_t err = {ERR_NONE};
MACRUM 0:276e7a263c35 331 if (id_max < sizeof(arm_uc_guid_t))
MACRUM 0:276e7a263c35 332 {
MACRUM 0:276e7a263c35 333 err.code = ARM_UC_DI_ERR_SIZE;
MACRUM 0:276e7a263c35 334 }
MACRUM 0:276e7a263c35 335 if (err.error == ERR_NONE)
MACRUM 0:276e7a263c35 336 {
MACRUM 0:276e7a263c35 337 err = pal_getVendorGuid(&guid);
MACRUM 0:276e7a263c35 338 }
MACRUM 0:276e7a263c35 339 if (err.error == ERR_NONE)
MACRUM 0:276e7a263c35 340 {
MACRUM 0:276e7a263c35 341 memcpy(id, guid, sizeof(arm_uc_guid_t));
MACRUM 0:276e7a263c35 342 if (id_size != NULL)
MACRUM 0:276e7a263c35 343 {
MACRUM 0:276e7a263c35 344 *id_size = sizeof(arm_uc_guid_t);
MACRUM 0:276e7a263c35 345 }
MACRUM 0:276e7a263c35 346 }
MACRUM 0:276e7a263c35 347 return err;
MACRUM 0:276e7a263c35 348 }
MACRUM 0:276e7a263c35 349
MACRUM 0:276e7a263c35 350 /**
MACRUM 0:276e7a263c35 351 * @brief Function for reporting the class ID.
MACRUM 0:276e7a263c35 352 * @details 16 bytes are copied into the supplied buffer.
MACRUM 0:276e7a263c35 353 * @param id Pointer to storage for ID. MUST be at least 16 bytes long.
MACRUM 0:276e7a263c35 354 * @param id_max the size of the ID buffer
MACRUM 0:276e7a263c35 355 * @param id_size pointer to a variable to receive the size of the ID
MACRUM 0:276e7a263c35 356 * written into the buffer (always 16).
MACRUM 0:276e7a263c35 357 * @return Error code.
MACRUM 0:276e7a263c35 358 */
MACRUM 0:276e7a263c35 359 arm_uc_error_t ARM_UC_GetClassId(uint8_t* id,
MACRUM 0:276e7a263c35 360 const size_t id_max,
MACRUM 0:276e7a263c35 361 size_t* id_size)
MACRUM 0:276e7a263c35 362 {
MACRUM 0:276e7a263c35 363 arm_uc_guid_t guid = {0};
MACRUM 0:276e7a263c35 364 arm_uc_error_t err = {ERR_NONE};
MACRUM 0:276e7a263c35 365 if (id_max < sizeof(arm_uc_guid_t))
MACRUM 0:276e7a263c35 366 {
MACRUM 0:276e7a263c35 367 err.code = ARM_UC_DI_ERR_SIZE;
MACRUM 0:276e7a263c35 368 }
MACRUM 0:276e7a263c35 369 if (err.error == ERR_NONE)
MACRUM 0:276e7a263c35 370 {
MACRUM 0:276e7a263c35 371 err = pal_getClassGuid(&guid);
MACRUM 0:276e7a263c35 372 }
MACRUM 0:276e7a263c35 373 if (err.error == ERR_NONE)
MACRUM 0:276e7a263c35 374 {
MACRUM 0:276e7a263c35 375 memcpy(id, guid, sizeof(arm_uc_guid_t));
MACRUM 0:276e7a263c35 376 if (id_size != NULL)
MACRUM 0:276e7a263c35 377 {
MACRUM 0:276e7a263c35 378 *id_size = sizeof(arm_uc_guid_t);
MACRUM 0:276e7a263c35 379 }
MACRUM 0:276e7a263c35 380 }
MACRUM 0:276e7a263c35 381 return err;
MACRUM 0:276e7a263c35 382 }
MACRUM 0:276e7a263c35 383
MACRUM 0:276e7a263c35 384 /**
MACRUM 0:276e7a263c35 385 * @brief Function for reporting the device ID.
MACRUM 0:276e7a263c35 386 * @details 16 bytes are copied into the supplied buffer.
MACRUM 0:276e7a263c35 387 * @param id Pointer to storage for ID. MUST be at least 16 bytes long.
MACRUM 0:276e7a263c35 388 * @param id_max the size of the ID buffer
MACRUM 0:276e7a263c35 389 * @param id_size pointer to a variable to receive the size of the ID
MACRUM 0:276e7a263c35 390 * written into the buffer (always 16).
MACRUM 0:276e7a263c35 391 * @return Error code.
MACRUM 0:276e7a263c35 392 */
MACRUM 0:276e7a263c35 393 arm_uc_error_t ARM_UC_GetDeviceId(uint8_t* id,
MACRUM 0:276e7a263c35 394 const size_t id_max,
MACRUM 0:276e7a263c35 395 size_t* id_size)
MACRUM 0:276e7a263c35 396 {
MACRUM 0:276e7a263c35 397 arm_uc_guid_t guid = {0};
MACRUM 0:276e7a263c35 398 arm_uc_error_t err = {ERR_NONE};
MACRUM 0:276e7a263c35 399 if (id_max < sizeof(arm_uc_guid_t))
MACRUM 0:276e7a263c35 400 {
MACRUM 0:276e7a263c35 401 err.code = ARM_UC_DI_ERR_SIZE;
MACRUM 0:276e7a263c35 402 }
MACRUM 0:276e7a263c35 403 if (err.error == ERR_NONE)
MACRUM 0:276e7a263c35 404 {
MACRUM 0:276e7a263c35 405 err = pal_getDeviceGuid(&guid);
MACRUM 0:276e7a263c35 406 }
MACRUM 0:276e7a263c35 407 if (err.error == ERR_NONE)
MACRUM 0:276e7a263c35 408 {
MACRUM 0:276e7a263c35 409 memcpy(id, guid, sizeof(arm_uc_guid_t));
MACRUM 0:276e7a263c35 410 if (id_size != NULL)
MACRUM 0:276e7a263c35 411 {
MACRUM 0:276e7a263c35 412 *id_size = sizeof(arm_uc_guid_t);
MACRUM 0:276e7a263c35 413 }
MACRUM 0:276e7a263c35 414 }
MACRUM 0:276e7a263c35 415 return err;
MACRUM 0:276e7a263c35 416 }
MACRUM 0:276e7a263c35 417
MACRUM 0:276e7a263c35 418 arm_uc_error_t ARM_UC_HUB_Uninitialize()
MACRUM 0:276e7a263c35 419 {
MACRUM 0:276e7a263c35 420 arm_uc_error_t err = ARM_UC_SourceManager.Uninitialize();
MACRUM 0:276e7a263c35 421 return err;
MACRUM 0:276e7a263c35 422 }