Example

Dependencies:   FXAS21002 FXOS8700Q

Committer:
maygup01
Date:
Tue Nov 19 09:49:38 2019 +0000
Revision:
0:11cc2b7889af
Example

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maygup01 0:11cc2b7889af 1 // ----------------------------------------------------------------------------
maygup01 0:11cc2b7889af 2 // Copyright 2016-2017 ARM Ltd.
maygup01 0:11cc2b7889af 3 //
maygup01 0:11cc2b7889af 4 // SPDX-License-Identifier: Apache-2.0
maygup01 0:11cc2b7889af 5 //
maygup01 0:11cc2b7889af 6 // Licensed under the Apache License, Version 2.0 (the "License");
maygup01 0:11cc2b7889af 7 // you may not use this file except in compliance with the License.
maygup01 0:11cc2b7889af 8 // You may obtain a copy of the License at
maygup01 0:11cc2b7889af 9 //
maygup01 0:11cc2b7889af 10 // http://www.apache.org/licenses/LICENSE-2.0
maygup01 0:11cc2b7889af 11 //
maygup01 0:11cc2b7889af 12 // Unless required by applicable law or agreed to in writing, software
maygup01 0:11cc2b7889af 13 // distributed under the License is distributed on an "AS IS" BASIS,
maygup01 0:11cc2b7889af 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
maygup01 0:11cc2b7889af 15 // See the License for the specific language governing permissions and
maygup01 0:11cc2b7889af 16 // limitations under the License.
maygup01 0:11cc2b7889af 17 // ----------------------------------------------------------------------------
maygup01 0:11cc2b7889af 18
maygup01 0:11cc2b7889af 19 #include <stdio.h>
maygup01 0:11cc2b7889af 20
maygup01 0:11cc2b7889af 21 #include "update_client_hub_error_handler.h"
maygup01 0:11cc2b7889af 22
maygup01 0:11cc2b7889af 23 #include "update-client-control-center/arm_uc_control_center.h"
maygup01 0:11cc2b7889af 24 #include "update-client-common/arm_uc_common.h"
maygup01 0:11cc2b7889af 25
maygup01 0:11cc2b7889af 26 #include <stdio.h> // for snprintf
maygup01 0:11cc2b7889af 27
maygup01 0:11cc2b7889af 28 static void (*arm_uc_error_callback_handler)(int32_t error) = NULL;
maygup01 0:11cc2b7889af 29
maygup01 0:11cc2b7889af 30 void ARM_UC_HUB_AddErrorCallbackInternal(void (*callback)(int32_t error))
maygup01 0:11cc2b7889af 31 {
maygup01 0:11cc2b7889af 32 arm_uc_error_callback_handler = callback;
maygup01 0:11cc2b7889af 33 }
maygup01 0:11cc2b7889af 34
maygup01 0:11cc2b7889af 35 /**
maygup01 0:11cc2b7889af 36 * @brief Error handler.
maygup01 0:11cc2b7889af 37 * @details Generates error code for the user application and any registered
maygup01 0:11cc2b7889af 38 * monitors. Also responsible for setting the Hub back to a consistent state.
maygup01 0:11cc2b7889af 39 * Supported error codes: All elements of arm_uc_monitor_result_t.
maygup01 0:11cc2b7889af 40 * @param error arm_uc_error_t code.
maygup01 0:11cc2b7889af 41 * @param state Internal Hub state.
maygup01 0:11cc2b7889af 42 */
maygup01 0:11cc2b7889af 43 void ARM_UC_HUB_ErrorHandler(int32_t error, arm_uc_hub_state_t state)
maygup01 0:11cc2b7889af 44 {
maygup01 0:11cc2b7889af 45 UC_HUB_TRACE("error: %" PRIX32 " %d", (uint32_t) error, state);
maygup01 0:11cc2b7889af 46
maygup01 0:11cc2b7889af 47 #if ARM_UC_HUB_TRACE_ENABLE
maygup01 0:11cc2b7889af 48 uint32_t trace_val = 0;
maygup01 0:11cc2b7889af 49 char *trace_str = "";
maygup01 0:11cc2b7889af 50 char trace_buf[sizeof("XX:65536")];
maygup01 0:11cc2b7889af 51 #define TRACE_ARGS(s) do { trace_val = ((uint32_t)error); trace_str = (s); } while(0);
maygup01 0:11cc2b7889af 52 #else
maygup01 0:11cc2b7889af 53 #define TRACE_ARGS(s)
maygup01 0:11cc2b7889af 54 #endif
maygup01 0:11cc2b7889af 55
maygup01 0:11cc2b7889af 56 /* Use common defaults for code size optimisation - avoids duplicate assignments. */
maygup01 0:11cc2b7889af 57 /* Returns these values for any not otherwise overridden. */
maygup01 0:11cc2b7889af 58 int32_t error_external = ARM_UC_ERROR;
maygup01 0:11cc2b7889af 59 arm_uc_monitor_result_t error_monitor = ARM_UC_UPDATE_RESULT_UPDATE_NONSPECIFIC_SYSTEM_ERROR;
maygup01 0:11cc2b7889af 60
maygup01 0:11cc2b7889af 61 arm_uc_hub_state_t next_state = ARM_UC_HUB_STATE_WAIT_FOR_ERROR_ACK;
maygup01 0:11cc2b7889af 62
maygup01 0:11cc2b7889af 63 switch (error) {
maygup01 0:11cc2b7889af 64 /* Update Client */
maygup01 0:11cc2b7889af 65 case ERR_UNSPECIFIED:
maygup01 0:11cc2b7889af 66 TRACE_ARGS("ERR_UNSPECIFIED");
maygup01 0:11cc2b7889af 67 break;
maygup01 0:11cc2b7889af 68 case ERR_INVALID_PARAMETER:
maygup01 0:11cc2b7889af 69 TRACE_ARGS("ERR_INVALID_PARAMETER");
maygup01 0:11cc2b7889af 70 break;
maygup01 0:11cc2b7889af 71 case ERR_NULL_PTR:
maygup01 0:11cc2b7889af 72 TRACE_ARGS("ERR_NULL_PTR");
maygup01 0:11cc2b7889af 73 break;
maygup01 0:11cc2b7889af 74 case ERR_NOT_READY:
maygup01 0:11cc2b7889af 75 TRACE_ARGS("ERR_NOT_READY");
maygup01 0:11cc2b7889af 76 break;
maygup01 0:11cc2b7889af 77 case ERR_INVALID_STATE:
maygup01 0:11cc2b7889af 78 TRACE_ARGS("ERR_INVALID_STATE");
maygup01 0:11cc2b7889af 79 break;
maygup01 0:11cc2b7889af 80 case ERR_OUT_OF_MEMORY:
maygup01 0:11cc2b7889af 81 TRACE_ARGS("ERR_OUT_OF_MEMORY");
maygup01 0:11cc2b7889af 82 error_monitor = ARM_UC_UPDATE_RESULT_WRITER_INSUFFICIENT_MEMORY_SPACE;
maygup01 0:11cc2b7889af 83 break;
maygup01 0:11cc2b7889af 84 /* Certificate Manager */
maygup01 0:11cc2b7889af 85 case ARM_UC_CM_ERR_NOT_FOUND:
maygup01 0:11cc2b7889af 86 TRACE_ARGS("ARM_UC_CM_ERR_NOT_FOUND");
maygup01 0:11cc2b7889af 87 error_external = ARM_UC_WARNING_CERTIFICATE_NOT_FOUND;
maygup01 0:11cc2b7889af 88 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_CERTIFICATE_NOT_FOUND;
maygup01 0:11cc2b7889af 89 break;
maygup01 0:11cc2b7889af 90 case ARM_UC_CM_ERR_INVALID_CERT:
maygup01 0:11cc2b7889af 91 case ARM_UC_CM_ERR_BLACKLISTED:
maygup01 0:11cc2b7889af 92 TRACE_ARGS("ARM_UC_CM_ERR_INVALID_CERT/BLACKLISTED");
maygup01 0:11cc2b7889af 93 error_external = ARM_UC_WARNING_CERTIFICATE_INVALID;
maygup01 0:11cc2b7889af 94 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INVALID_CERTIFICATE;
maygup01 0:11cc2b7889af 95 break;
maygup01 0:11cc2b7889af 96
maygup01 0:11cc2b7889af 97 /* DER Parser */
maygup01 0:11cc2b7889af 98 case ARM_UC_DP_ERR_UNKNOWN:
maygup01 0:11cc2b7889af 99 case ARM_UC_DP_ERR_NOT_FOUND:
maygup01 0:11cc2b7889af 100 case ARM_UC_DP_ERR_NO_MORE_ELEMENTS:
maygup01 0:11cc2b7889af 101 TRACE_ARGS("ARM_UC_DP_ERR_UNKNOWN/NOT_FOUND/NO_MORE_ELEMENTS");
maygup01 0:11cc2b7889af 102 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INVALID_MANIFEST_FORMAT;
maygup01 0:11cc2b7889af 103 break;
maygup01 0:11cc2b7889af 104
maygup01 0:11cc2b7889af 105 /* Firmware Manager */
maygup01 0:11cc2b7889af 106 case FIRM_ERR_WRITE:
maygup01 0:11cc2b7889af 107 TRACE_ARGS("FIRM_ERR_WRITE");
maygup01 0:11cc2b7889af 108 error_external = ARM_UC_ERROR_WRITE_TO_STORAGE;
maygup01 0:11cc2b7889af 109 error_monitor = ARM_UC_UPDATE_RESULT_WRITER_WRITE_FAILURE;
maygup01 0:11cc2b7889af 110 break;
maygup01 0:11cc2b7889af 111 case FIRM_ERR_INVALID_PARAMETER:
maygup01 0:11cc2b7889af 112 case FIRM_ERR_UNINITIALIZED:
maygup01 0:11cc2b7889af 113 TRACE_ARGS("FIRM_ERR_INVALID_PARAMETER/UNINITIALIZED");
maygup01 0:11cc2b7889af 114 error_external = ARM_UC_ERROR_WRITE_TO_STORAGE;
maygup01 0:11cc2b7889af 115 error_monitor = ARM_UC_UPDATE_RESULT_WRITER_NONSPECIFIC_ERROR;
maygup01 0:11cc2b7889af 116 break;
maygup01 0:11cc2b7889af 117 case FIRM_ERR_ACTIVATE:
maygup01 0:11cc2b7889af 118 TRACE_ARGS("FIRM_ERR_ACTIVATE");
maygup01 0:11cc2b7889af 119 error_monitor = ARM_UC_UPDATE_RESULT_WRITER_ACTIVATION_FAILURE;
maygup01 0:11cc2b7889af 120 break;
maygup01 0:11cc2b7889af 121 case FIRM_ERR_INVALID_HASH:
maygup01 0:11cc2b7889af 122 TRACE_ARGS("FIRM_ERR_INVALID_HASH");
maygup01 0:11cc2b7889af 123 error_external = ARM_UC_ERROR_INVALID_HASH;
maygup01 0:11cc2b7889af 124 error_monitor = ARM_UC_UPDATE_RESULT_WRITER_HASH_ERROR;
maygup01 0:11cc2b7889af 125 break;
maygup01 0:11cc2b7889af 126 case FIRM_ERR_FIRMWARE_TOO_LARGE:
maygup01 0:11cc2b7889af 127 TRACE_ARGS("FIRM_ERR_FIRMWARE_TOO_LARGE");
maygup01 0:11cc2b7889af 128 error_external = ARM_UC_ERROR_WRITE_TO_STORAGE;
maygup01 0:11cc2b7889af 129 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INSUFFICIENT_STORAGE_SPACE;
maygup01 0:11cc2b7889af 130 break;
maygup01 0:11cc2b7889af 131
maygup01 0:11cc2b7889af 132 /* Manifest Manager */
maygup01 0:11cc2b7889af 133 case MFST_ERR_NULL_PTR:
maygup01 0:11cc2b7889af 134 TRACE_ARGS("MFST_ERR_NULL_PTR");
maygup01 0:11cc2b7889af 135 error_external = ARM_UC_WARNING_IDENTITY_NOT_FOUND;
maygup01 0:11cc2b7889af 136 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_NONSPECIFIC_ERROR;
maygup01 0:11cc2b7889af 137 break;
maygup01 0:11cc2b7889af 138 case MFST_ERR_NOT_READY:
maygup01 0:11cc2b7889af 139 TRACE_ARGS("MFST_ERR_NOT_READY");
maygup01 0:11cc2b7889af 140 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_NONSPECIFIC_ERROR;
maygup01 0:11cc2b7889af 141 break;
maygup01 0:11cc2b7889af 142 // case MFST_ERR_PENDING IS NOT AN ERROR!
maygup01 0:11cc2b7889af 143 case MFST_ERR_SIZE:
maygup01 0:11cc2b7889af 144 TRACE_ARGS("MFST_ERR_SIZE");
maygup01 0:11cc2b7889af 145 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INVALID_MANIFEST_SIZE;
maygup01 0:11cc2b7889af 146 break;
maygup01 0:11cc2b7889af 147 case MFST_ERR_DER_FORMAT:
maygup01 0:11cc2b7889af 148 case MFST_ERR_FORMAT:
maygup01 0:11cc2b7889af 149 TRACE_ARGS("MFST_ERR_DER_FORMAT/MFST_ERR_FORMAT");
maygup01 0:11cc2b7889af 150 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INVALID_MANIFEST_FORMAT;
maygup01 0:11cc2b7889af 151 break;
maygup01 0:11cc2b7889af 152 case MFST_ERR_VERSION:
maygup01 0:11cc2b7889af 153 TRACE_ARGS("MFST_ERR_VERSION");
maygup01 0:11cc2b7889af 154 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_UNSUPPORTED_MANIFEST_VERSION;
maygup01 0:11cc2b7889af 155 break;
maygup01 0:11cc2b7889af 156 case MFST_ERR_ROLLBACK:
maygup01 0:11cc2b7889af 157 TRACE_ARGS("MFST_ERR_ROLLBACK");
maygup01 0:11cc2b7889af 158 error_external = ARM_UC_WARNING_ROLLBACK_PROTECTION;
maygup01 0:11cc2b7889af 159 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_ROLLBACK_PROTECTION;
maygup01 0:11cc2b7889af 160 break;
maygup01 0:11cc2b7889af 161 case MFST_ERR_CRYPTO_MODE:
maygup01 0:11cc2b7889af 162 TRACE_ARGS("MFST_ERR_CRYPTO_MODE");
maygup01 0:11cc2b7889af 163 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INVALID_CRYPTO_MODE;
maygup01 0:11cc2b7889af 164 break;
maygup01 0:11cc2b7889af 165 case MFST_ERR_HASH:
maygup01 0:11cc2b7889af 166 TRACE_ARGS("MFST_ERR_HASH");
maygup01 0:11cc2b7889af 167 error_external = ARM_UC_WARNING_SIGNATURE_INVALID;
maygup01 0:11cc2b7889af 168 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INTEGRITY_CHECK_FAILED;
maygup01 0:11cc2b7889af 169 break;
maygup01 0:11cc2b7889af 170 case MFST_ERR_GUID_VENDOR:
maygup01 0:11cc2b7889af 171 TRACE_ARGS("MFST_ERR_GUID_VENDOR");
maygup01 0:11cc2b7889af 172 error_external = ARM_UC_WARNING_VENDOR_MISMATCH;
maygup01 0:11cc2b7889af 173 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_WRONG_VENDOR_ID;
maygup01 0:11cc2b7889af 174 break;
maygup01 0:11cc2b7889af 175 case MFST_ERR_GUID_DEVCLASS:
maygup01 0:11cc2b7889af 176 TRACE_ARGS("MFST_ERR_GUID_DEVCLASS");
maygup01 0:11cc2b7889af 177 error_external = ARM_UC_WARNING_CLASS_MISMATCH;
maygup01 0:11cc2b7889af 178 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_WRONG_CLASS_ID;
maygup01 0:11cc2b7889af 179 break;
maygup01 0:11cc2b7889af 180 case MFST_ERR_GUID_DEVICE:
maygup01 0:11cc2b7889af 181 TRACE_ARGS("MFST_ERR_GUID_DEVICE");
maygup01 0:11cc2b7889af 182 error_external = ARM_UC_WARNING_DEVICE_MISMATCH;
maygup01 0:11cc2b7889af 183 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_NONSPECIFIC_ERROR;
maygup01 0:11cc2b7889af 184 break;
maygup01 0:11cc2b7889af 185 case MFST_ERR_CERT_INVALID:
maygup01 0:11cc2b7889af 186 TRACE_ARGS("MFST_ERR_CERT_INVALID");
maygup01 0:11cc2b7889af 187 error_external = ARM_UC_WARNING_CERTIFICATE_INVALID;
maygup01 0:11cc2b7889af 188 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INVALID_CERTIFICATE;
maygup01 0:11cc2b7889af 189 break;
maygup01 0:11cc2b7889af 190 case MFST_ERR_CERT_NOT_FOUND:
maygup01 0:11cc2b7889af 191 case MFST_ERR_CERT_READ:
maygup01 0:11cc2b7889af 192 TRACE_ARGS("MFST_ERR_CERT_NOT_FOUND/READ");
maygup01 0:11cc2b7889af 193 error_external = ARM_UC_WARNING_CERTIFICATE_NOT_FOUND;
maygup01 0:11cc2b7889af 194 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_CERTIFICATE_NOT_FOUND;
maygup01 0:11cc2b7889af 195 break;
maygup01 0:11cc2b7889af 196 case MFST_ERR_INVALID_SIGNATURE:
maygup01 0:11cc2b7889af 197 TRACE_ARGS("MFST_ERR_INVALID_SIGNATURE");
maygup01 0:11cc2b7889af 198 error_external = ARM_UC_WARNING_SIGNATURE_INVALID;
maygup01 0:11cc2b7889af 199 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INVALID_SIGNATURE;
maygup01 0:11cc2b7889af 200 break;
maygup01 0:11cc2b7889af 201 case MFST_ERR_INVALID_STATE:
maygup01 0:11cc2b7889af 202 TRACE_ARGS("MFST_ERR_INVALID_STATE");
maygup01 0:11cc2b7889af 203 break;
maygup01 0:11cc2b7889af 204 case MFST_ERR_BAD_EVENT:
maygup01 0:11cc2b7889af 205 TRACE_ARGS("MFST_ERR_BAD_EVENT");
maygup01 0:11cc2b7889af 206 break;
maygup01 0:11cc2b7889af 207 case MFST_ERR_EMPTY_FIELD:
maygup01 0:11cc2b7889af 208 TRACE_ARGS("MFST_ERR_EMPTY_FIELD");
maygup01 0:11cc2b7889af 209 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_MISSING_FIELD;
maygup01 0:11cc2b7889af 210 break;
maygup01 0:11cc2b7889af 211 case MFST_ERR_NO_MANIFEST:
maygup01 0:11cc2b7889af 212 TRACE_ARGS("MFST_ERR_NO_MANIFEST");
maygup01 0:11cc2b7889af 213 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_DEPENDENT_MANIFEST_NOT_FOUND;
maygup01 0:11cc2b7889af 214 break;
maygup01 0:11cc2b7889af 215 case MFST_ERR_SIGNATURE_ALGORITHM:
maygup01 0:11cc2b7889af 216 case MFST_ERR_UNSUPPORTED_CONDITION:
maygup01 0:11cc2b7889af 217 TRACE_ARGS("MFST_ERR_SIGNATURE_ALGORITHM/UNSUPPORTED_CONDITION");
maygup01 0:11cc2b7889af 218 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_NONSPECIFIC_ERROR;
maygup01 0:11cc2b7889af 219 break;
maygup01 0:11cc2b7889af 220 case MFST_ERR_CTR_IV_SIZE:
maygup01 0:11cc2b7889af 221 case MFST_ERR_BAD_KEYTABLE:
maygup01 0:11cc2b7889af 222 TRACE_ARGS("MFST_ERR_CTR_IV_SIZE/BAD_KEYTABLE");
maygup01 0:11cc2b7889af 223 error_external = ARM_UC_WARNING_BAD_KEYTABLE;
maygup01 0:11cc2b7889af 224 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_CORRUPTED_KEYTABLE;
maygup01 0:11cc2b7889af 225 break;
maygup01 0:11cc2b7889af 226 case MFST_ERR_MISSING_KEYTABLE:
maygup01 0:11cc2b7889af 227 TRACE_ARGS("MFST_ERR_MISSING_KEYTABLE");
maygup01 0:11cc2b7889af 228 error_external = ARM_UC_WARNING_BAD_KEYTABLE;
maygup01 0:11cc2b7889af 229 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_MISSING_ITEM;
maygup01 0:11cc2b7889af 230 break;
maygup01 0:11cc2b7889af 231
maygup01 0:11cc2b7889af 232 /* Source Manager */
maygup01 0:11cc2b7889af 233 // case SOMA_ERR_UNSPECIFIED IS NOT USED!
maygup01 0:11cc2b7889af 234 case SOMA_ERR_NETWORK_TIMEOUT:
maygup01 0:11cc2b7889af 235 TRACE_ARGS("SOMA_ERR_NETWORK_TIMEOUT");
maygup01 0:11cc2b7889af 236 error_external = ARM_UC_ERROR_CONNECTION;
maygup01 0:11cc2b7889af 237 error_monitor = ARM_UC_UPDATE_RESULT_FETCHER_NETWORK_TIMEOUT;
maygup01 0:11cc2b7889af 238 break;
maygup01 0:11cc2b7889af 239 case SOMA_ERR_CONNECTION_FAILURE:
maygup01 0:11cc2b7889af 240 TRACE_ARGS("SOMA_ERR_CONNECTION_FAILURE");
maygup01 0:11cc2b7889af 241 error_external = ARM_UC_ERROR_CONNECTION;
maygup01 0:11cc2b7889af 242 error_monitor = ARM_UC_UPDATE_RESULT_FETCHER_NETWORK_CONNECTION_FAILURE;
maygup01 0:11cc2b7889af 243 break;
maygup01 0:11cc2b7889af 244 case SOMA_ERR_DNS_LOOKUP_FAILURE:
maygup01 0:11cc2b7889af 245 TRACE_ARGS("SOMA_ERR_DNS_LOOKUP_FAILURE");
maygup01 0:11cc2b7889af 246 error_external = ARM_UC_ERROR_CONNECTION;
maygup01 0:11cc2b7889af 247 error_monitor = ARM_UC_UPDATE_RESULT_FETCHER_DNS_LOOKUP_FAILURE;
maygup01 0:11cc2b7889af 248 break;
maygup01 0:11cc2b7889af 249 case SOMA_ERR_CONNECTION_LOSS:
maygup01 0:11cc2b7889af 250 TRACE_ARGS("SOMA_ERR_CONNECTION_LOSS");
maygup01 0:11cc2b7889af 251 error_external = ARM_UC_ERROR_CONNECTION;
maygup01 0:11cc2b7889af 252 error_monitor = ARM_UC_UPDATE_RESULT_FETCHER_NETWORK_CONNECTION_LOSS;
maygup01 0:11cc2b7889af 253 break;
maygup01 0:11cc2b7889af 254 case SOMA_ERR_NO_ROUTE_TO_SOURCE:
maygup01 0:11cc2b7889af 255 TRACE_ARGS("SOMA_ERR_NO_ROUTE_TO_SOURCE");
maygup01 0:11cc2b7889af 256 error_external = ARM_UC_ERROR_CONNECTION;
maygup01 0:11cc2b7889af 257 error_monitor = ARM_UC_UPDATE_RESULT_FETCHER_NO_ROUTE_AVAILABLE;
maygup01 0:11cc2b7889af 258 break;
maygup01 0:11cc2b7889af 259 case SOMA_ERR_SOURCE_REGISTRY_FULL:
maygup01 0:11cc2b7889af 260 case SOMA_ERR_SOURCE_NOT_FOUND:
maygup01 0:11cc2b7889af 261 TRACE_ARGS("SOMA_ERR_SOURCE_REGISTRY_FULL/SOURCE_NOT_FOUND");
maygup01 0:11cc2b7889af 262 error_external = ARM_UC_ERROR_CONNECTION;
maygup01 0:11cc2b7889af 263 error_monitor = ARM_UC_UPDATE_RESULT_UPDATE_NONSPECIFIC_NETWORK_ERROR;
maygup01 0:11cc2b7889af 264 break;
maygup01 0:11cc2b7889af 265 case SOMA_ERR_INVALID_URI:
maygup01 0:11cc2b7889af 266 TRACE_ARGS("SOMA_ERR_INVALID_URI");
maygup01 0:11cc2b7889af 267 error_external = ARM_UC_WARNING_URI_NOT_FOUND;
maygup01 0:11cc2b7889af 268 error_monitor = ARM_UC_UPDATE_RESULT_FETCHER_INVALID_RESOURCE_URI;
maygup01 0:11cc2b7889af 269 break;
maygup01 0:11cc2b7889af 270 case SOMA_ERR_INVALID_REQUEST:
maygup01 0:11cc2b7889af 271 TRACE_ARGS("SOMA_ERR_INVALID_REQUEST");
maygup01 0:11cc2b7889af 272 error_external = ARM_UC_WARNING_URI_NOT_FOUND;
maygup01 0:11cc2b7889af 273 error_monitor = ARM_UC_UPDATE_RESULT_FETCHER_INVALID_REQUEST_TYPE;
maygup01 0:11cc2b7889af 274 break;
maygup01 0:11cc2b7889af 275 case SOMA_ERR_INVALID_PARAMETER:
maygup01 0:11cc2b7889af 276 TRACE_ARGS("SOMA_ERR_INVALID_PARAMETER");
maygup01 0:11cc2b7889af 277 error_external = ARM_UC_WARNING_URI_NOT_FOUND;
maygup01 0:11cc2b7889af 278 break;
maygup01 0:11cc2b7889af 279 case SOMA_ERR_INVALID_MANIFEST_STATE:
maygup01 0:11cc2b7889af 280 TRACE_ARGS("SOMA_ERR_INVALID_MANIFEST_STATE");
maygup01 0:11cc2b7889af 281 error_external = ARM_UC_WARNING_UNKNOWN;
maygup01 0:11cc2b7889af 282 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_NONSPECIFIC_ERROR;
maygup01 0:11cc2b7889af 283 break;
maygup01 0:11cc2b7889af 284 case SOMA_ERR_INVALID_FW_STATE:
maygup01 0:11cc2b7889af 285 TRACE_ARGS("SOMA_ERR_INVALID_FW_STATE");
maygup01 0:11cc2b7889af 286 error_external = ARM_UC_WARNING_UNKNOWN;
maygup01 0:11cc2b7889af 287 break;
maygup01 0:11cc2b7889af 288 case SOMA_ERR_INVALID_EVENT:
maygup01 0:11cc2b7889af 289 TRACE_ARGS("SOMA_ERR_INVALID_EVENT");
maygup01 0:11cc2b7889af 290 error_external = ARM_UC_WARNING_UNKNOWN;
maygup01 0:11cc2b7889af 291 break;
maygup01 0:11cc2b7889af 292
maygup01 0:11cc2b7889af 293 /* Source */
maygup01 0:11cc2b7889af 294 case SRCE_ERR_UNINITIALIZED:
maygup01 0:11cc2b7889af 295 case SRCE_ERR_INVALID_PARAMETER:
maygup01 0:11cc2b7889af 296 case SRCE_ERR_FAILED:
maygup01 0:11cc2b7889af 297 case SRCE_ERR_ABORT:
maygup01 0:11cc2b7889af 298 TRACE_ARGS("SRCE_ERR_UNINITIALIZED/INVALID_PARAMETER/FAILED/ABORT");
maygup01 0:11cc2b7889af 299 error_monitor = ARM_UC_UPDATE_RESULT_UPDATE_NONSPECIFIC_SYSTEM_ERROR;
maygup01 0:11cc2b7889af 300 break;
maygup01 0:11cc2b7889af 301 case SRCE_ERR_BUSY:
maygup01 0:11cc2b7889af 302 /* Unexpected, normally used for flow control, not as error. */
maygup01 0:11cc2b7889af 303 TRACE_ARGS("SRCE_ERR_BUSY");
maygup01 0:11cc2b7889af 304 error_monitor = ARM_UC_UPDATE_RESULT_UPDATE_NONSPECIFIC_SYSTEM_ERROR;
maygup01 0:11cc2b7889af 305 break;
maygup01 0:11cc2b7889af 306
maygup01 0:11cc2b7889af 307 /* Crypto */
maygup01 0:11cc2b7889af 308 case ARM_UC_CU_ERR_INVALID_PARAMETER:
maygup01 0:11cc2b7889af 309 TRACE_ARGS("ARM_UC_CU_ERR_INVALID_PARAMETER");
maygup01 0:11cc2b7889af 310 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INVALID_CRYPTO_MODE;
maygup01 0:11cc2b7889af 311 break;
maygup01 0:11cc2b7889af 312
maygup01 0:11cc2b7889af 313 /* Device Identity */
maygup01 0:11cc2b7889af 314 case ARM_UC_DI_ERR_INVALID_PARAMETER:
maygup01 0:11cc2b7889af 315 TRACE_ARGS("ARM_UC_DI_ERR_INVALID_PARAMETER");
maygup01 0:11cc2b7889af 316 error_monitor = ARM_UC_UPDATE_RESULT_UPDATE_NONSPECIFIC_SYSTEM_ERROR;
maygup01 0:11cc2b7889af 317 break;
maygup01 0:11cc2b7889af 318 case ARM_UC_DI_ERR_NOT_READY:
maygup01 0:11cc2b7889af 319 case ARM_UC_DI_ERR_NOT_FOUND:
maygup01 0:11cc2b7889af 320 TRACE_ARGS("ARM_UC_DI_ERR_NOT_READY/NOT_FOUND");
maygup01 0:11cc2b7889af 321 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_MISSING_ITEM;
maygup01 0:11cc2b7889af 322 break;
maygup01 0:11cc2b7889af 323 case ARM_UC_DI_ERR_SIZE:
maygup01 0:11cc2b7889af 324 TRACE_ARGS("ARM_UC_DI_ERR_SIZE");
maygup01 0:11cc2b7889af 325 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_INSUFFICIENT_MEMORY_SPACE;
maygup01 0:11cc2b7889af 326 break;
maygup01 0:11cc2b7889af 327
maygup01 0:11cc2b7889af 328 /* Hub */
maygup01 0:11cc2b7889af 329 case HUB_ERR_INTERNAL_ERROR:
maygup01 0:11cc2b7889af 330 TRACE_ARGS("HUB_ERR_INTERNAL_ERROR");
maygup01 0:11cc2b7889af 331 error_external = ARM_UC_FATAL;
maygup01 0:11cc2b7889af 332 break;
maygup01 0:11cc2b7889af 333 case HUB_ERR_ROLLBACK_PROTECTION:
maygup01 0:11cc2b7889af 334 TRACE_ARGS("HUB_ERR_ROLLBACK_PROTECTION");
maygup01 0:11cc2b7889af 335 error_external = ARM_UC_WARNING_ROLLBACK_PROTECTION;
maygup01 0:11cc2b7889af 336 error_monitor = ARM_UC_UPDATE_RESULT_MANIFEST_ROLLBACK_PROTECTION;
maygup01 0:11cc2b7889af 337 break;
maygup01 0:11cc2b7889af 338 case ARM_UC_HUB_ERR_NOT_AVAILABLE:
maygup01 0:11cc2b7889af 339 TRACE_ARGS("ARM_UC_HUB_ERR_NOT_AVAILABLE");
maygup01 0:11cc2b7889af 340 error_external = ARM_UC_ERROR_CONNECTION;
maygup01 0:11cc2b7889af 341 break;
maygup01 0:11cc2b7889af 342 /* LWM2M source */
maygup01 0:11cc2b7889af 343 case HUB_ERR_CONNECTION:
maygup01 0:11cc2b7889af 344 TRACE_ARGS("HUB_ERR_CONNECTION");
maygup01 0:11cc2b7889af 345 error_external = ARM_UC_ERROR_CONNECTION;
maygup01 0:11cc2b7889af 346 error_monitor = ARM_UC_UPDATE_RESULT_FETCHER_NETWORK_CONNECTION_FAILURE;
maygup01 0:11cc2b7889af 347 /* Prevent a possible infinite loop: when HUB_ERR_CONNECTION is received,
maygup01 0:11cc2b7889af 348 the next state was always set to ARM_UC_HUB_STATE_UNKNOWN. However,
maygup01 0:11cc2b7889af 349 this function also sends a report which might fail, which will trigger
maygup01 0:11cc2b7889af 350 the HUB_ERR_CONNECTION event and will repeat the whole process again,
maygup01 0:11cc2b7889af 351 potentially in an infinite loop in case of network issues. So switch
maygup01 0:11cc2b7889af 352 the state to "idle" directly to prevent this.*/
maygup01 0:11cc2b7889af 353 next_state = ARM_UC_HUB_STATE_IDLE;
maygup01 0:11cc2b7889af 354 break;
maygup01 0:11cc2b7889af 355
maygup01 0:11cc2b7889af 356 default:
maygup01 0:11cc2b7889af 357 UC_HUB_ERR_MSG("Unexpected error!");
maygup01 0:11cc2b7889af 358 #if ARM_UC_HUB_TRACE_ENABLE
maygup01 0:11cc2b7889af 359 {
maygup01 0:11cc2b7889af 360 arm_uc_error_t err;
maygup01 0:11cc2b7889af 361 err.code = (uint32_t)error;
maygup01 0:11cc2b7889af 362 snprintf(trace_buf, sizeof(trace_buf), "%c%c.%hu",
maygup01 0:11cc2b7889af 363 err.modulecc[0], err.modulecc[1], err.error);
maygup01 0:11cc2b7889af 364 }
maygup01 0:11cc2b7889af 365 #endif
maygup01 0:11cc2b7889af 366 TRACE_ARGS(trace_buf);
maygup01 0:11cc2b7889af 367 error_external = ARM_UC_WARNING_UNKNOWN;
maygup01 0:11cc2b7889af 368 break;
maygup01 0:11cc2b7889af 369 }
maygup01 0:11cc2b7889af 370 UC_HUB_TRACE("%s: %" PRIX32, trace_str, (uint32_t) trace_val);
maygup01 0:11cc2b7889af 371
maygup01 0:11cc2b7889af 372 /* send error code to monitor */
maygup01 0:11cc2b7889af 373 ARM_UC_ControlCenter_ReportUpdateResult(error_monitor);
maygup01 0:11cc2b7889af 374
maygup01 0:11cc2b7889af 375 /* progress state in hub */
maygup01 0:11cc2b7889af 376 ARM_UC_HUB_setState(next_state);
maygup01 0:11cc2b7889af 377
maygup01 0:11cc2b7889af 378 /* Send the external code to the user application. */
maygup01 0:11cc2b7889af 379 if (arm_uc_error_callback_handler) {
maygup01 0:11cc2b7889af 380 arm_uc_error_callback_handler(error_external);
maygup01 0:11cc2b7889af 381 }
maygup01 0:11cc2b7889af 382 }