Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FXAS21002 FXOS8700Q
arm_uc_error.h
00001 // ---------------------------------------------------------------------------- 00002 // Copyright 2016-2017 ARM Ltd. 00003 // 00004 // SPDX-License-Identifier: Apache-2.0 00005 // 00006 // Licensed under the Apache License, Version 2.0 (the "License"); 00007 // you may not use this file except in compliance with the License. 00008 // You may obtain a copy of the License at 00009 // 00010 // http://www.apache.org/licenses/LICENSE-2.0 00011 // 00012 // Unless required by applicable law or agreed to in writing, software 00013 // distributed under the License is distributed on an "AS IS" BASIS, 00014 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00015 // See the License for the specific language governing permissions and 00016 // limitations under the License. 00017 // ---------------------------------------------------------------------------- 00018 00019 #ifndef ARM_UPDATE_ERROR_H 00020 #define ARM_UPDATE_ERROR_H 00021 00022 #include <stdint.h> 00023 00024 // Use two characters to form the 16bit module code 00025 #define TWO_CC(A,B) (((A) & 0xFF) | (((B) & 0xFF) << 8)) 00026 #define CC_ASCII(X) ((((X) < ' ') || ((X) > '~' )) ? '.' : (X)) 00027 00028 #define MANIFEST_MANAGER_PREFIX TWO_CC('M','M') 00029 #define CERTIFICATE_MANAGER_PREFIX TWO_CC('C','M') 00030 #define SOURCE_MANAGER_PREFIX TWO_CC('S','M') 00031 #define SOURCE_PREFIX TWO_CC('S','E') 00032 #define FIRMWARE_MANAGER_PREFIX TWO_CC('F','M') 00033 #define DER_PARSER_PREFIX TWO_CC('D','P') 00034 #define MBED_TLS_ERROR_PREFIX TWO_CC('M','T') 00035 #define UPDATE_CRYPTO_PREFIX TWO_CC('C','U') 00036 #define DEVICE_IDENTITY_PREFIX TWO_CC('D','I') 00037 #define HUB_PREFIX TWO_CC('H','B') 00038 #define EVENT_QUEUE_PREFIX TWO_CC('E','Q') 00039 #define PAAL_PREFIX TWO_CC('P','L') 00040 00041 #define ARM_UC_COMMON_ERR_LIST\ 00042 ENUM_FIXED(ERR_NONE,0)\ 00043 ENUM_AUTO(ERR_UNSPECIFIED)\ 00044 ENUM_AUTO(ERR_INVALID_PARAMETER)\ 00045 ENUM_AUTO(ERR_NULL_PTR)\ 00046 ENUM_AUTO(ERR_NOT_READY)\ 00047 ENUM_AUTO(ERR_INVALID_STATE)\ 00048 ENUM_AUTO(ERR_OUT_OF_MEMORY)\ 00049 00050 // Manifest manager 00051 #define ARM_UC_MM_ERR_LIST\ 00052 ENUM_FIXED(MFST_ERR_FIRST, MANIFEST_MANAGER_PREFIX << 16)\ 00053 ENUM_AUTO(MFST_ERR_NULL_PTR)\ 00054 ENUM_AUTO(MFST_ERR_NOT_READY)\ 00055 ENUM_AUTO(MFST_ERR_PENDING)\ 00056 ENUM_AUTO(MFST_ERR_SIZE)\ 00057 ENUM_AUTO(MFST_ERR_DER_FORMAT)\ 00058 ENUM_AUTO(MFST_ERR_FORMAT)\ 00059 ENUM_AUTO(MFST_ERR_VERSION)\ 00060 ENUM_AUTO(MFST_ERR_ROLLBACK)\ 00061 ENUM_AUTO(MFST_ERR_CRYPTO_MODE)\ 00062 ENUM_AUTO(MFST_ERR_HASH)\ 00063 ENUM_AUTO(MFST_ERR_GUID_VENDOR)\ 00064 ENUM_AUTO(MFST_ERR_GUID_DEVCLASS)\ 00065 ENUM_AUTO(MFST_ERR_GUID_DEVICE)\ 00066 ENUM_AUTO(MFST_ERR_CFG_CREATE_FAILED)\ 00067 ENUM_AUTO(MFST_ERR_KEY_SIZE)\ 00068 ENUM_AUTO(MFST_ERR_CERT_INVALID)\ 00069 ENUM_AUTO(MFST_ERR_CERT_NOT_FOUND)\ 00070 ENUM_AUTO(MFST_ERR_CERT_READ)\ 00071 ENUM_AUTO(MFST_ERR_INVALID_SIGNATURE)\ 00072 ENUM_AUTO(MFST_ERR_INVALID_STATE)\ 00073 ENUM_AUTO(MFST_ERR_BAD_EVENT)\ 00074 ENUM_AUTO(MFST_ERR_EMPTY_FIELD)\ 00075 ENUM_AUTO(MFST_ERR_NO_MANIFEST)\ 00076 ENUM_AUTO(MFST_ERR_SIGNATURE_ALGORITHM)\ 00077 ENUM_AUTO(MFST_ERR_UNSUPPORTED_CONDITION)\ 00078 ENUM_AUTO(MFST_ERR_CTR_IV_SIZE)\ 00079 ENUM_AUTO(MFST_ERR_MISSING_KEYTABLE)\ 00080 ENUM_AUTO(MFST_ERR_BAD_KEYTABLE)\ 00081 ENUM_AUTO(MFST_ERR_LAST)\ 00082 00083 // Certificate Manager 00084 #define ARM_UC_CM_ERR_LIST\ 00085 ENUM_FIXED(ARM_UC_CM_ERR_FIRST, CERTIFICATE_MANAGER_PREFIX << 16)\ 00086 ENUM_AUTO(ARM_UC_CM_ERR_INVALID_PARAMETER)\ 00087 ENUM_AUTO(ARM_UC_CM_ERR_NOT_FOUND)\ 00088 ENUM_AUTO(ARM_UC_CM_ERR_INVALID_CERT)\ 00089 ENUM_AUTO(ARM_UC_CM_ERR_BLACKLISTED)\ 00090 ENUM_AUTO(ARM_UC_CM_ERR_LAST)\ 00091 00092 // DER Parser 00093 #define ARM_UC_DP_ERR_LIST\ 00094 ENUM_FIXED(ARM_UC_DP_ERR_FIRST, DER_PARSER_PREFIX << 16)\ 00095 ENUM_AUTO(ARM_UC_DP_ERR_UNKNOWN)\ 00096 ENUM_AUTO(ARM_UC_DP_ERR_NOT_FOUND)\ 00097 ENUM_AUTO(ARM_UC_DP_ERR_NO_MORE_ELEMENTS)\ 00098 ENUM_AUTO(ARM_UC_DP_ERR_LAST)\ 00099 00100 // Source Manager 00101 #define ARM_UC_SM_ERR_LIST\ 00102 ENUM_FIXED(SOMA_ERR_FIRST, SOURCE_MANAGER_PREFIX << 16)\ 00103 ENUM_AUTO(SOMA_ERR_UNSPECIFIED)\ 00104 ENUM_AUTO(SOMA_ERR_NETWORK_TIMEOUT)\ 00105 ENUM_AUTO(SOMA_ERR_CONNECTION_FAILURE)\ 00106 ENUM_AUTO(SOMA_ERR_DNS_LOOKUP_FAILURE)\ 00107 ENUM_AUTO(SOMA_ERR_CONNECTION_LOSS)\ 00108 ENUM_AUTO(SOMA_ERR_NO_ROUTE_TO_SOURCE)\ 00109 ENUM_AUTO(SOMA_ERR_SOURCE_REGISTRY_FULL)\ 00110 ENUM_AUTO(SOMA_ERR_SOURCE_NOT_FOUND)\ 00111 ENUM_AUTO(SOMA_ERR_INVALID_URI)\ 00112 ENUM_AUTO(SOMA_ERR_INVALID_REQUEST)\ 00113 ENUM_AUTO(SOMA_ERR_INVALID_PARAMETER)\ 00114 ENUM_AUTO(SOMA_ERR_INVALID_MANIFEST_STATE)\ 00115 ENUM_AUTO(SOMA_ERR_INVALID_FW_STATE)\ 00116 ENUM_AUTO(SOMA_ERR_INVALID_EVENT)\ 00117 ENUM_AUTO(SOMA_ERR_LAST)\ 00118 00119 // Source 00120 #define ARM_UC_SRC_ERR_LIST\ 00121 ENUM_FIXED(SRCE_ERR_FIRST, SOURCE_PREFIX << 16)\ 00122 ENUM_AUTO(SRCE_ERR_UNINITIALIZED)\ 00123 ENUM_AUTO(SRCE_ERR_INVALID_PARAMETER)\ 00124 ENUM_AUTO(SRCE_ERR_FAILED)\ 00125 ENUM_AUTO(SRCE_ERR_ABORT)\ 00126 ENUM_AUTO(SRCE_ERR_BUSY)\ 00127 ENUM_AUTO(SRCE_ERR_LAST)\ 00128 00129 // Firmware Manager 00130 #define ARM_UC_FM_ERR_LIST\ 00131 ENUM_FIXED(FIRM_ERR_FIRST, FIRMWARE_MANAGER_PREFIX << 16)\ 00132 ENUM_AUTO(FIRM_ERR_WRITE)\ 00133 ENUM_AUTO(FIRM_ERR_INVALID_PARAMETER)\ 00134 ENUM_AUTO(FIRM_ERR_INVALID_STATE)\ 00135 ENUM_AUTO(FIRM_ERR_ACTIVATE)\ 00136 ENUM_AUTO(FIRM_ERR_UNINITIALIZED)\ 00137 ENUM_AUTO(FIRM_ERR_INVALID_HASH)\ 00138 ENUM_AUTO(FIRM_ERR_FIRMWARE_TOO_LARGE)\ 00139 ENUM_AUTO(FIRM_ERR_LAST)\ 00140 00141 #define ARM_UC_CU_ERR_LIST\ 00142 ENUM_FIXED(ARM_UC_CU_ERR_FIRST, UPDATE_CRYPTO_PREFIX << 16)\ 00143 ENUM_AUTO(ARM_UC_CU_ERR_INVALID_PARAMETER)\ 00144 ENUM_AUTO(ARM_UC_CU_ERR_LAST)\ 00145 00146 #define ARM_UC_DI_ERR_LIST\ 00147 ENUM_FIXED(ARM_UC_DI_ERR_FIRST, DEVICE_IDENTITY_PREFIX << 16)\ 00148 ENUM_AUTO(ARM_UC_DI_ERR_INVALID_PARAMETER)\ 00149 ENUM_AUTO(ARM_UC_DI_ERR_NOT_READY)\ 00150 ENUM_AUTO(ARM_UC_DI_ERR_NOT_FOUND)\ 00151 ENUM_AUTO(ARM_UC_DI_ERR_SIZE)\ 00152 ENUM_AUTO(ARM_UC_DI_ERR_LAST)\ 00153 00154 #define ARM_UC_HB_ERR_LIST\ 00155 ENUM_FIXED(HUB_ERR_FIRST, HUB_PREFIX << 16)\ 00156 ENUM_AUTO(HUB_ERR_INTERNAL_ERROR)\ 00157 ENUM_AUTO(HUB_ERR_ROLLBACK_PROTECTION)\ 00158 ENUM_AUTO(ARM_UC_HUB_ERR_NOT_AVAILABLE)\ 00159 ENUM_AUTO(HUB_ERR_CONNECTION)\ 00160 ENUM_AUTO(HUB_ERR_LAST)\ 00161 00162 #define ARM_UC_EQ_ERR_LIST\ 00163 ENUM_FIXED(ARM_UC_EQ_ERR_FIRST, EVENT_QUEUE_PREFIX << 16)\ 00164 ENUM_AUTO(ARM_UC_EQ_ERR_POOL_EXHAUSTED)\ 00165 ENUM_AUTO(ARM_UC_EQ_ERR_FAILED_TAKE)\ 00166 ENUM_AUTO(ARM_UC_EQ_ERR_LAST)\ 00167 00168 // PAAL 00169 #define ARM_UC_PAAL_ERR_LIST\ 00170 ENUM_FIXED(PAAL_ERR_FIRST, PAAL_PREFIX << 16)\ 00171 ENUM_AUTO(PAAL_ERR_FIRMWARE_TOO_LARGE)\ 00172 ENUM_AUTO(PAAL_ERR_LAST)\ 00173 00174 #define ARM_UC_ERR_LIST\ 00175 ARM_UC_COMMON_ERR_LIST\ 00176 ARM_UC_MM_ERR_LIST\ 00177 ARM_UC_CM_ERR_LIST\ 00178 ARM_UC_DP_ERR_LIST\ 00179 ARM_UC_SM_ERR_LIST\ 00180 ARM_UC_SRC_ERR_LIST\ 00181 ARM_UC_FM_ERR_LIST\ 00182 ARM_UC_CU_ERR_LIST\ 00183 ARM_UC_DI_ERR_LIST\ 00184 ARM_UC_HB_ERR_LIST\ 00185 ARM_UC_EQ_ERR_LIST\ 00186 ARM_UC_PAAL_ERR_LIST\ 00187 00188 enum arm_uc_error { 00189 #define ENUM_AUTO(name) name, 00190 #define ENUM_FIXED(name, val) name = val, 00191 ARM_UC_ERR_LIST 00192 #undef ENUM_AUTO 00193 #undef ENUM_FIXED 00194 }; 00195 union arm_uc_error_code { 00196 int32_t code; 00197 struct { 00198 int16_t error; 00199 union { 00200 uint16_t module; 00201 uint8_t modulecc[2]; 00202 }; 00203 }; 00204 }; 00205 00206 typedef union arm_uc_error_code arm_uc_error_t; 00207 00208 #define ARM_UC_ERROR(CODE) ((arm_uc_error_t){ CODE }) 00209 #define ARM_UC_IS_ERROR(VAR) ((VAR).code != ERR_NONE) 00210 #define ARM_UC_IS_NOT_ERROR(VAR) (!ARM_UC_IS_ERROR(VAR)) 00211 #define ARM_UC_ERROR_MATCHES(VAR,CODE) ((VAR).code == CODE) 00212 00213 #define ARM_UC_CLEAR_ERROR(ERR) ((ERR).code = (ERR_NONE)) 00214 #define ARM_UC_INIT_ERROR(VAR, CODE) arm_uc_error_t (VAR) = arm_uc_code_to_error( CODE ) 00215 #define ARM_UC_GET_ERROR(VAR) ((VAR).code) 00216 00217 #if ARM_UC_ERROR_TRACE_ENABLE 00218 #define ARM_UC_SET_ERROR(VAR, CODE)\ 00219 do { (VAR).code = (CODE);\ 00220 if ( ARM_UC_IS_ERROR(VAR) ) \ 00221 UC_ERROR_TRACE("set error %" PRIx32, (long unsigned int)CODE);\ 00222 } while (0) 00223 #else 00224 #define ARM_UC_SET_ERROR(VAR, CODE) (VAR).code = (CODE) 00225 #endif 00226 // have a way to set errors without trace for values that are not strictly errors. 00227 #define ARM_UC_SET_ERROR_NEVER_TRACE(VAR, CODE) (VAR).code = (CODE) 00228 00229 #ifdef __cplusplus 00230 extern "C" { 00231 #endif 00232 00233 const char *ARM_UC_err2Str(arm_uc_error_t err); 00234 static inline arm_uc_error_t arm_uc_code_to_error(int32_t code) 00235 { 00236 arm_uc_error_t err; 00237 err.code = code; 00238 return err; 00239 } 00240 00241 #ifdef __cplusplus 00242 } 00243 #endif 00244 #endif // ARM_UPDATE_ERROR_H
Generated on Tue Jul 12 2022 20:20:57 by
