Simulated product dispenser
Fork of mbed-cloud-workshop-connect-HTS221 by
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 00027 #define MANIFEST_MANAGER_PREFIX TWO_CC('M','M') 00028 #define CERTIFICATE_MANAGER_PREFIX TWO_CC('C','M') 00029 #define SOURCE_MANAGER_PREFIX TWO_CC('S','M') 00030 #define SOURCE_PREFIX TWO_CC('S','E') 00031 #define FIRMWARE_MANAGER_PREFIX TWO_CC('F','M') 00032 #define DER_PARSER_PREFIX TWO_CC('D','P') 00033 #define MBED_TLS_ERROR_PREFIX TWO_CC('M','T') 00034 #define UPDATE_CRYPTO_PREFIX TWO_CC('C','U') 00035 #define DEVICE_IDENTITY_PREFIX TWO_CC('D','I') 00036 #define HUB_PREFIX TWO_CC('H','B') 00037 #define EVENT_QUEUE_PREFIX TWO_CC('E','Q') 00038 00039 #define ARM_UC_COMMON_ERR_LIST\ 00040 ENUM_FIXED(ERR_NONE,0)\ 00041 ENUM_AUTO(ERR_UNSPECIFIED)\ 00042 ENUM_AUTO(ERR_INVALID_PARAMETER)\ 00043 ENUM_AUTO(ERR_NULL_PTR)\ 00044 ENUM_AUTO(ERR_NOT_READY)\ 00045 ENUM_AUTO(ERR_INVALID_STATE)\ 00046 00047 // Manifest manager 00048 #define ARM_UC_MM_ERR_LIST\ 00049 ENUM_FIXED(MFST_ERR_NONE, MANIFEST_MANAGER_PREFIX << 16)\ 00050 ENUM_AUTO(MFST_ERR_NULL_PTR)\ 00051 ENUM_AUTO(MFST_ERR_PENDING)\ 00052 ENUM_AUTO(MFST_ERR_SIZE)\ 00053 ENUM_AUTO(MFST_ERR_DER_FORMAT)\ 00054 ENUM_AUTO(MFST_ERR_FORMAT)\ 00055 ENUM_AUTO(MFST_ERR_VERSION)\ 00056 ENUM_AUTO(MFST_ERR_ROLLBACK)\ 00057 ENUM_AUTO(MFST_ERR_CRYPTO_MODE)\ 00058 ENUM_AUTO(MFST_ERR_HASH)\ 00059 ENUM_AUTO(MFST_ERR_GUID_VENDOR)\ 00060 ENUM_AUTO(MFST_ERR_GUID_DEVCLASS)\ 00061 ENUM_AUTO(MFST_ERR_GUID_DEVICE)\ 00062 ENUM_AUTO(MFST_ERR_CFG_CREATE_FAILED)\ 00063 ENUM_AUTO(MFST_ERR_KEY_SIZE)\ 00064 ENUM_AUTO(MFST_ERR_CERT_INVALID)\ 00065 ENUM_AUTO(MFST_ERR_CERT_NOT_FOUND)\ 00066 ENUM_AUTO(MFST_ERR_CERT_READ)\ 00067 ENUM_AUTO(MFST_ERR_INVALID_SIGNATURE)\ 00068 ENUM_AUTO(MFST_ERR_INVALID_STATE)\ 00069 ENUM_AUTO(MFST_ERR_BAD_EVENT)\ 00070 ENUM_AUTO(MFST_ERR_EMPTY_FIELD)\ 00071 ENUM_AUTO(MFST_ERR_NO_MANIFEST)\ 00072 ENUM_AUTO(MFST_ERR_SIGNATURE_ALGORITHM)\ 00073 ENUM_AUTO(MFST_ERR_UNSUPPORTED_CONDITION)\ 00074 ENUM_AUTO(MFST_ERR_CTR_IV_SIZE)\ 00075 ENUM_AUTO(MFST_ERR_BAD_KEYTABLE_REF)\ 00076 ENUM_AUTO(MFST_ERR_BAD_KEYTABLE)\ 00077 00078 // Certificate Manager 00079 #define ARM_UC_CM_ERR_LIST\ 00080 ENUM_FIXED(ARM_UC_CM_ERR_NONE, CERTIFICATE_MANAGER_PREFIX << 16)\ 00081 ENUM_AUTO(ARM_UC_CM_ERR_INVALID_PARAMETER)\ 00082 ENUM_AUTO(ARM_UC_CM_ERR_NOT_FOUND)\ 00083 ENUM_AUTO(ARM_UC_CM_ERR_INVALID_CERT)\ 00084 ENUM_AUTO(ARM_UC_CM_ERR_BLACKLISTED)\ 00085 00086 // DER Parser 00087 #define ARM_UC_DP_ERR_LIST\ 00088 ENUM_FIXED(ARM_UC_DP_ERR_NONE, DER_PARSER_PREFIX << 16)\ 00089 ENUM_AUTO(ARM_UC_DP_ERR_UNKNOWN)\ 00090 ENUM_AUTO(ARM_UC_DP_ERR_NOT_FOUND)\ 00091 ENUM_AUTO(ARM_UC_DP_ERR_NO_MORE_ELEMENTS)\ 00092 00093 // Source Manager 00094 #define ARM_UC_SM_ERR_LIST\ 00095 ENUM_FIXED(SOMA_ERR_NONE, SOURCE_MANAGER_PREFIX << 16)\ 00096 ENUM_AUTO(SOMA_ERR_UNSPECIFIED)\ 00097 ENUM_AUTO(SOMA_ERR_NO_ROUTE_TO_SOURCE)\ 00098 ENUM_AUTO(SOMA_ERR_SOURCE_REGISTRY_FULL)\ 00099 ENUM_AUTO(SOMA_ERR_SOURCE_NOT_FOUND)\ 00100 ENUM_AUTO(SOMA_ERR_INVALID_URI)\ 00101 ENUM_AUTO(SOMA_ERR_INVALID_REQUEST)\ 00102 ENUM_AUTO(SOMA_ERR_INVALID_PARAMETER)\ 00103 ENUM_AUTO(SOMA_ERR_INVALID_MANIFEST_STATE)\ 00104 ENUM_AUTO(SOMA_ERR_INVALID_FW_STATE)\ 00105 ENUM_AUTO(SOMA_ERR_INVALID_EVENT) 00106 00107 // Source 00108 #define ARM_UC_SRC_ERR_LIST\ 00109 ENUM_FIXED(SRCE_ERR_NONE, SOURCE_PREFIX << 16)\ 00110 ENUM_AUTO(SRCE_ERR_UNINITIALIZED)\ 00111 ENUM_AUTO(SRCE_ERR_INVALID_PARAMETER)\ 00112 ENUM_AUTO(SRCE_ERR_FAILED)\ 00113 ENUM_AUTO(SRCE_ERR_ABORT)\ 00114 ENUM_AUTO(SRCE_ERR_BUSY) 00115 00116 // Firmware Manager 00117 #define ARM_UC_FM_ERR_LIST\ 00118 ENUM_FIXED(FIRM_ERR_NONE, FIRMWARE_MANAGER_PREFIX << 16)\ 00119 ENUM_AUTO(FIRM_ERR_WRITE)\ 00120 ENUM_AUTO(FIRM_ERR_INVALID_PARAMETER)\ 00121 ENUM_AUTO(FIRM_ERR_ACTIVATE)\ 00122 ENUM_AUTO(FIRM_ERR_UNINITIALIZED)\ 00123 ENUM_AUTO(FIRM_ERR_INVALID_HASH) 00124 00125 #define ARM_UC_CU_ERR_LIST\ 00126 ENUM_FIXED(ARM_UC_CU_ERR_NONE, UPDATE_CRYPTO_PREFIX << 16)\ 00127 ENUM_AUTO(ARM_UC_CU_ERR_INVALID_PARAMETER)\ 00128 00129 #define ARM_UC_DI_ERR_LIST\ 00130 ENUM_FIXED(ARM_UC_DI_ERR_NONE, DEVICE_IDENTITY_PREFIX << 16)\ 00131 ENUM_AUTO(ARM_UC_DI_ERR_INVALID_PARAMETER)\ 00132 ENUM_AUTO(ARM_UC_DI_ERR_NOT_READY)\ 00133 ENUM_AUTO(ARM_UC_DI_ERR_NOT_FOUND)\ 00134 ENUM_AUTO(ARM_UC_DI_ERR_SIZE)\ 00135 00136 #define ARM_UC_HB_ERR_LIST\ 00137 ENUM_FIXED(HUB_ERR_NONE, HUB_PREFIX << 16)\ 00138 ENUM_AUTO(HUB_ERR_INTERNAL_ERROR)\ 00139 ENUM_AUTO(HUB_ERR_ROLLBACK_PROTECTION)\ 00140 ENUM_AUTO(ARM_UC_HUB_ERR_NOT_AVAILABLE)\ 00141 ENUM_AUTO(HUB_ERR_CONNECTION)\ 00142 00143 #define ARM_UC_EQ_ERR_LIST\ 00144 ENUM_FIXED(ARM_UC_EQ_ERR_NONE, EVENT_QUEUE_PREFIX)\ 00145 ENUM_AUTO(ARM_UC_EQ_ERR_POOL_EXHAUSTED)\ 00146 ENUM_AUTO(ARM_UC_EQ_ERR_FAILED_TAKE)\ 00147 00148 #define ARM_UC_ERR_LIST\ 00149 ARM_UC_COMMON_ERR_LIST\ 00150 ARM_UC_MM_ERR_LIST\ 00151 ARM_UC_CM_ERR_LIST\ 00152 ARM_UC_DP_ERR_LIST\ 00153 ARM_UC_SM_ERR_LIST\ 00154 ARM_UC_SRC_ERR_LIST\ 00155 ARM_UC_FM_ERR_LIST\ 00156 ARM_UC_CU_ERR_LIST\ 00157 ARM_UC_DI_ERR_LIST\ 00158 ARM_UC_HB_ERR_LIST\ 00159 ARM_UC_EQ_ERR_LIST\ 00160 00161 enum arm_uc_error { 00162 #define ENUM_AUTO(name) name, 00163 #define ENUM_FIXED(name, val) name = val, 00164 ARM_UC_ERR_LIST 00165 #undef ENUM_AUTO 00166 #undef ENUM_FIXED 00167 }; 00168 union arm_uc_error_code { 00169 int32_t code; 00170 struct { 00171 int16_t error; 00172 union { 00173 uint16_t module; 00174 uint8_t modulecc[2]; 00175 }; 00176 }; 00177 }; 00178 00179 typedef union arm_uc_error_code arm_uc_error_t; 00180 00181 00182 #define ARM_UC_ERROR(CODE) ((arm_uc_error_t){ CODE }) 00183 #define ARM_UC_IS_ERROR(VAR) ((VAR).error != ERR_NONE) 00184 #define ARM_UC_IS_NOT_ERROR(VAR) (!ARM_UC_IS_ERROR(VAR)) 00185 00186 #define ARM_UC_CLEAR_ERROR(ERR)\ 00187 ((ERR).code = (ERR_NONE)) 00188 #define ARM_UC_INIT_ERROR(VAR, CODE) arm_uc_error_t (VAR) = arm_uc_code_to_error( CODE ) 00189 #define ARM_UC_GET_ERROR(VAR) ((VAR).code) 00190 00191 #if ARM_UC_ERROR_TRACE_ENABLE 00192 #define ARM_UC_SET_ERROR(VAR, CODE)\ 00193 do { (VAR).code = (CODE);\ 00194 if ( ARM_UC_IS_ERROR(VAR) ) \ 00195 UC_ERROR_TRACE("set error %" PRIx32, (long unsigned int)CODE);\ 00196 } while (0) 00197 #else 00198 #define ARM_UC_SET_ERROR(VAR, CODE) (VAR).code = (CODE) 00199 #endif 00200 // have a way to set errors without trace for values that are not strictly errors. 00201 #define ARM_UC_SET_ERROR_NEVER_TRACE(VAR, CODE) (VAR).code = (CODE) 00202 00203 00204 #ifdef __cplusplus 00205 extern "C" { 00206 #endif 00207 00208 const char* ARM_UC_err2Str(arm_uc_error_t err); 00209 static inline arm_uc_error_t arm_uc_code_to_error(uint32_t code) { 00210 arm_uc_error_t err; 00211 err.code = code; 00212 return err; 00213 } 00214 00215 #ifdef __cplusplus 00216 } 00217 #endif 00218 #endif // ARM_UPDATE_ERROR_H
Generated on Tue Jul 12 2022 19:12:11 by 1.7.2