Simple interface for Mbed Cloud Client

Dependents:  

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     ENUM_AUTO(MFST_ERR_CTR_IV_SIZE)\
00071     ENUM_AUTO(MFST_ERR_BAD_KEYTABLE_REF)\
00072     ENUM_AUTO(MFST_ERR_BAD_KEYTABLE)\
00073 
00074 // Certificate Manager
00075 #define ARM_UC_CM_ERR_LIST\
00076     ENUM_FIXED(ARM_UC_CM_ERR_NONE, CERTIFICATE_MANAGER_PREFIX << 16)\
00077     ENUM_AUTO(ARM_UC_CM_ERR_INVALID_PARAMETER)\
00078     ENUM_AUTO(ARM_UC_CM_ERR_NOT_FOUND)\
00079     ENUM_AUTO(ARM_UC_CM_ERR_INVALID_CERT)\
00080     ENUM_AUTO(ARM_UC_CM_ERR_BLACKLISTED)\
00081 
00082 // DER Parser
00083 #define ARM_UC_DP_ERR_LIST\
00084     ENUM_FIXED(ARM_UC_DP_ERR_NONE, DER_PARSER_PREFIX << 16)\
00085     ENUM_AUTO(ARM_UC_DP_ERR_UNKNOWN)\
00086     ENUM_AUTO(ARM_UC_DP_ERR_NOT_FOUND)\
00087     ENUM_AUTO(ARM_UC_DP_ERR_NO_MORE_ELEMENTS)\
00088 
00089 // Source Manager
00090 #define ARM_UC_SM_ERR_LIST\
00091     ENUM_FIXED(SOMA_ERR_NONE, SOURCE_MANAGER_PREFIX << 16)\
00092     ENUM_AUTO(SOMA_ERR_NO_ROUTE_TO_SOURCE)\
00093     ENUM_AUTO(SOMA_ERR_SOURCE_REGISTRY_FULL)\
00094     ENUM_AUTO(SOMA_ERR_SOURCE_NOT_FOUND)\
00095     ENUM_AUTO(SOMA_ERR_INVALID_PARAMETER)
00096 
00097 // Source
00098 #define ARM_UC_SRC_ERR_LIST\
00099     ENUM_FIXED(SRCE_ERR_NONE, SOURCE_PREFIX << 16)\
00100     ENUM_AUTO(SRCE_ERR_UNINITIALIZED)\
00101     ENUM_AUTO(SRCE_ERR_INVALID_PARAMETER)\
00102     ENUM_AUTO(SRCE_ERR_FAILED)\
00103     ENUM_AUTO(SRCE_ERR_BUSY)
00104 
00105 // Firmware Manager
00106 #define ARM_UC_FM_ERR_LIST\
00107     ENUM_FIXED(FIRM_ERR_NONE, FIRMWARE_MANAGER_PREFIX << 16)\
00108     ENUM_AUTO(FIRM_ERR_WRITE)\
00109     ENUM_AUTO(FIRM_ERR_INVALID_PARAMETER)\
00110     ENUM_AUTO(FIRM_ERR_ACTIVATE)\
00111     ENUM_AUTO(FIRM_ERR_UNINITIALIZED)\
00112     ENUM_AUTO(FIRM_ERR_INVALID_HASH)
00113 
00114 #define ARM_UC_CU_ERR_LIST\
00115     ENUM_FIXED(ARM_UC_CU_ERR_NONE, UPDATE_CRYPTO_PREFIX << 16)\
00116     ENUM_AUTO(ARM_UC_CU_ERR_INVALID_PARAMETER)\
00117 
00118 #define ARM_UC_DI_ERR_LIST\
00119     ENUM_FIXED(ARM_UC_DI_ERR_NONE, DEVICE_IDENTITY_PREFIX << 16)\
00120     ENUM_AUTO(ARM_UC_DI_ERR_INVALID_PARAMETER)\
00121     ENUM_AUTO(ARM_UC_DI_ERR_NOT_READY)\
00122     ENUM_AUTO(ARM_UC_DI_ERR_NOT_FOUND)\
00123     ENUM_AUTO(ARM_UC_DI_ERR_SIZE)\
00124 
00125 #define ARM_UC_HB_ERR_LIST\
00126     ENUM_FIXED(HUB_ERR_NONE, HUB_PREFIX << 16)\
00127     ENUM_AUTO(HUB_ERR_ROLLBACK_PROTECTION)\
00128 
00129 #define ARM_UC_ERR_LIST\
00130     ARM_UC_COMMON_ERR_LIST\
00131     ARM_UC_MM_ERR_LIST\
00132     ARM_UC_CM_ERR_LIST\
00133     ARM_UC_DP_ERR_LIST\
00134     ARM_UC_SM_ERR_LIST\
00135     ARM_UC_SRC_ERR_LIST\
00136     ARM_UC_FM_ERR_LIST\
00137     ARM_UC_CU_ERR_LIST\
00138     ARM_UC_DI_ERR_LIST\
00139     ARM_UC_HB_ERR_LIST\
00140 
00141 enum arm_uc_error {
00142     #define ENUM_AUTO(name) name,
00143     #define ENUM_FIXED(name, val) name = val,
00144     ARM_UC_ERR_LIST
00145     #undef ENUM_AUTO
00146     #undef ENUM_FIXED
00147 };
00148 union arm_uc_error_code {
00149     int32_t code;
00150     struct {
00151         int16_t error;
00152         union {
00153             uint16_t module;
00154             uint8_t  modulecc[2];
00155         };
00156     };
00157 };
00158 
00159 typedef union arm_uc_error_code arm_uc_error_t;
00160 
00161 #ifndef ARM_UC_ERR_TRACE
00162 #define ARM_UC_ERR_TRACE 0
00163 #endif
00164 
00165 #if ARM_UC_ERR_TRACE
00166 #define ARM_UC_SET_ERROR(ERR, CODE)
00167     do {(ERR).code = (CODE);} while (0)
00168 #else
00169 #define ARM_UC_SET_ERROR(ERR, CODE)\
00170     (ERR).code = (CODE)
00171 #endif
00172 
00173 #ifdef __cplusplus
00174 extern "C" {
00175 #endif
00176 
00177 const char* ARM_UC_err2Str(arm_uc_error_t err);
00178 
00179 #ifdef __cplusplus
00180 }
00181 #endif
00182 #endif // ARM_UPDATE_ERROR_H