Mbed Cloud example program for workshop in W27 2018.

Dependencies:   MMA7660 LM75B

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers arm_uc_error.h Source File

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 
00038 #define ARM_UC_COMMON_ERR_LIST\
00039     ENUM_FIXED(ERR_NONE,0)\
00040     ENUM_AUTO(ERR_INVALID_PARAMETER)\
00041     ENUM_AUTO(ERR_NOT_READY)\
00042 
00043 // Manifest manager
00044 #define ARM_UC_MM_ERR_LIST\
00045     ENUM_FIXED(MFST_ERR_NONE, MANIFEST_MANAGER_PREFIX << 16)\
00046     ENUM_AUTO(MFST_ERR_NULL_PTR)\
00047     ENUM_AUTO(MFST_ERR_PENDING)\
00048     ENUM_AUTO(MFST_ERR_SIZE)\
00049     ENUM_AUTO(MFST_ERR_DER_FORMAT)\
00050     ENUM_AUTO(MFST_ERR_FORMAT)\
00051     ENUM_AUTO(MFST_ERR_VERSION)\
00052     ENUM_AUTO(MFST_ERR_ROLLBACK)\
00053     ENUM_AUTO(MFST_ERR_CRYPTO_MODE)\
00054     ENUM_AUTO(MFST_ERR_HASH)\
00055     ENUM_AUTO(MFST_ERR_GUID_VENDOR)\
00056     ENUM_AUTO(MFST_ERR_GUID_DEVCLASS)\
00057     ENUM_AUTO(MFST_ERR_GUID_DEVICE)\
00058     ENUM_AUTO(MFST_ERR_CFG_CREATE_FAILED)\
00059     ENUM_AUTO(MFST_ERR_KEY_SIZE)\
00060     ENUM_AUTO(MFST_ERR_CERT_INVALID)\
00061     ENUM_AUTO(MFST_ERR_CERT_NOT_FOUND)\
00062     ENUM_AUTO(MFST_ERR_CERT_READ)\
00063     ENUM_AUTO(MFST_ERR_INVALID_SIGNATURE)\
00064     ENUM_AUTO(MFST_ERR_INVALID_STATE)\
00065     ENUM_AUTO(MFST_ERR_BAD_EVENT)\
00066     ENUM_AUTO(MFST_ERR_EMPTY_FIELD)\
00067     ENUM_AUTO(MFST_ERR_NO_MANIFEST)\
00068     ENUM_AUTO(MFST_ERR_SIGNATURE_ALGORITHM)\
00069     ENUM_AUTO(MFST_ERR_UNSUPPORTED_CONDITION)\
00070 
00071 // Certificate Manager
00072 #define ARM_UC_CM_ERR_LIST\
00073     ENUM_FIXED(ARM_UC_CM_ERR_NONE, CERTIFICATE_MANAGER_PREFIX << 16)\
00074     ENUM_AUTO(ARM_UC_CM_ERR_INVALID_PARAMETER)\
00075     ENUM_AUTO(ARM_UC_CM_ERR_NOT_FOUND)\
00076     ENUM_AUTO(ARM_UC_CM_ERR_INVALID_CERT)\
00077     ENUM_AUTO(ARM_UC_CM_ERR_BLACKLISTED)\
00078 
00079 // DER Parser
00080 #define ARM_UC_DP_ERR_LIST\
00081     ENUM_FIXED(ARM_UC_DP_ERR_NONE, DER_PARSER_PREFIX << 16)\
00082     ENUM_AUTO(ARM_UC_DP_ERR_UNKNOWN)\
00083     ENUM_AUTO(ARM_UC_DP_ERR_NOT_FOUND)\
00084     ENUM_AUTO(ARM_UC_DP_ERR_NO_MORE_ELEMENTS)\
00085 
00086 // Source Manager
00087 #define ARM_UC_SM_ERR_LIST\
00088     ENUM_FIXED(SOMA_ERR_NONE, SOURCE_MANAGER_PREFIX << 16)\
00089     ENUM_AUTO(SOMA_ERR_NO_ROUTE_TO_SOURCE)\
00090     ENUM_AUTO(SOMA_ERR_SOURCE_REGISTRY_FULL)\
00091     ENUM_AUTO(SOMA_ERR_SOURCE_NOT_FOUND)\
00092     ENUM_AUTO(SOMA_ERR_INVALID_PARAMETER)
00093 
00094 // Source
00095 #define ARM_UC_SRC_ERR_LIST\
00096     ENUM_FIXED(SRCE_ERR_NONE, SOURCE_PREFIX << 16)\
00097     ENUM_AUTO(SRCE_ERR_UNINITIALIZED)\
00098     ENUM_AUTO(SRCE_ERR_INVALID_PARAMETER)\
00099     ENUM_AUTO(SRCE_ERR_FAILED)\
00100     ENUM_AUTO(SRCE_ERR_BUSY)
00101 
00102 // Firmware Manager
00103 #define ARM_UC_FM_ERR_LIST\
00104     ENUM_FIXED(FIRM_ERR_NONE, FIRMWARE_MANAGER_PREFIX << 16)\
00105     ENUM_AUTO(FIRM_ERR_WRITE)\
00106     ENUM_AUTO(FIRM_ERR_INVALID_PARAMETER)\
00107     ENUM_AUTO(FIRM_ERR_ACTIVATE)\
00108     ENUM_AUTO(FIRM_ERR_UNINITIALIZED)\
00109     ENUM_AUTO(FIRM_ERR_INVALID_HASH)
00110 
00111 #define ARM_UC_CU_ERR_LIST\
00112     ENUM_FIXED(ARM_UC_CU_ERR_NONE, UPDATE_CRYPTO_PREFIX << 16)\
00113     ENUM_AUTO(ARM_UC_CU_ERR_INVALID_PARAMETER)\
00114 
00115 #define ARM_UC_DI_ERR_LIST\
00116     ENUM_FIXED(ARM_UC_DI_ERR_NONE, DEVICE_IDENTITY_PREFIX << 16)\
00117     ENUM_AUTO(ARM_UC_DI_ERR_INVALID_PARAMETER)\
00118     ENUM_AUTO(ARM_UC_DI_ERR_NOT_READY)\
00119     ENUM_AUTO(ARM_UC_DI_ERR_NOT_FOUND)\
00120     ENUM_AUTO(ARM_UC_DI_ERR_SIZE)\
00121 
00122 #define ARM_UC_HB_ERR_LIST\
00123     ENUM_FIXED(HUB_ERR_NONE, HUB_PREFIX << 16)\
00124     ENUM_AUTO(HUB_ERR_ROLLBACK_PROTECTION)\
00125 
00126 #define ARM_UC_ERR_LIST\
00127     ARM_UC_COMMON_ERR_LIST\
00128     ARM_UC_MM_ERR_LIST\
00129     ARM_UC_CM_ERR_LIST\
00130     ARM_UC_DP_ERR_LIST\
00131     ARM_UC_SM_ERR_LIST\
00132     ARM_UC_SRC_ERR_LIST\
00133     ARM_UC_FM_ERR_LIST\
00134     ARM_UC_CU_ERR_LIST\
00135     ARM_UC_DI_ERR_LIST\
00136     ARM_UC_HB_ERR_LIST\
00137 
00138 enum arm_uc_error {
00139     #define ENUM_AUTO(name) name,
00140     #define ENUM_FIXED(name, val) name = val,
00141     ARM_UC_ERR_LIST
00142     #undef ENUM_AUTO
00143     #undef ENUM_FIXED
00144 };
00145 union arm_uc_error_code {
00146     int32_t code;
00147     struct {
00148         int16_t error;
00149         union {
00150             uint16_t module;
00151             uint8_t  modulecc[2];
00152         };
00153     };
00154 };
00155 
00156 typedef union arm_uc_error_code arm_uc_error_t;
00157 
00158 #ifndef ARM_UC_ERR_TRACE
00159 #define ARM_UC_ERR_TRACE 0
00160 #endif
00161 
00162 #if ARM_UC_ERR_TRACE
00163 #define ARM_UC_SET_ERROR(ERR, CODE)
00164     do {(ERR).code = (CODE);} while (0)
00165 #else
00166 #define ARM_UC_SET_ERROR(ERR, CODE)\
00167     (ERR).code = (CODE)
00168 #endif
00169 
00170 #ifdef __cplusplus
00171 extern "C" {
00172 #endif
00173 
00174 const char* ARM_UC_err2Str(arm_uc_error_t err);
00175 
00176 #ifdef __cplusplus
00177 }
00178 #endif
00179 #endif // ARM_UPDATE_ERROR_H