Example
Dependencies: FXAS21002 FXOS8700Q
simple-mbed-cloud-client/mbed-cloud-client/update-client-hub/source/update_client_hub_error_handler.c@0:11cc2b7889af, 2019-11-19 (annotated)
- Committer:
- maygup01
- Date:
- Tue Nov 19 09:49:38 2019 +0000
- Revision:
- 0:11cc2b7889af
Example
Who changed what in which revision?
User | Revision | Line number | New 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 | } |