mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
188:bcfe06ba3d64
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 149:156823d33999 1 /** \addtogroup platform */
<> 149:156823d33999 2 /** @{*/
AnnaBridge 178:79309dc6340a 3 /**
AnnaBridge 178:79309dc6340a 4 * \defgroup platform_error Error functions
AnnaBridge 178:79309dc6340a 5 * @{
AnnaBridge 178:79309dc6340a 6 */
<> 149:156823d33999 7 /* mbed Microcontroller Library
<> 149:156823d33999 8 * Copyright (c) 2006-2013 ARM Limited
AnnaBridge 189:f392fc9709a3 9 * SPDX-License-Identifier: Apache-2.0
<> 149:156823d33999 10 *
<> 149:156823d33999 11 * Licensed under the Apache License, Version 2.0 (the "License");
<> 149:156823d33999 12 * you may not use this file except in compliance with the License.
<> 149:156823d33999 13 * You may obtain a copy of the License at
<> 149:156823d33999 14 *
<> 149:156823d33999 15 * http://www.apache.org/licenses/LICENSE-2.0
<> 149:156823d33999 16 *
<> 149:156823d33999 17 * Unless required by applicable law or agreed to in writing, software
<> 149:156823d33999 18 * distributed under the License is distributed on an "AS IS" BASIS,
<> 149:156823d33999 19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
<> 149:156823d33999 20 * See the License for the specific language governing permissions and
<> 149:156823d33999 21 * limitations under the License.
<> 149:156823d33999 22 */
<> 149:156823d33999 23 #ifndef MBED_ERROR_H
<> 149:156823d33999 24 #define MBED_ERROR_H
<> 149:156823d33999 25
Anna Bridge 186:707f6e361f3e 26 #include "platform/mbed_retarget.h"
Anna Bridge 186:707f6e361f3e 27 #include "platform/mbed_toolchain.h"
AnnaBridge 167:e84263d55307 28
Anna Bridge 186:707f6e361f3e 29 #ifdef __cplusplus
Anna Bridge 186:707f6e361f3e 30 extern "C" {
Anna Bridge 186:707f6e361f3e 31 #endif
Anna Bridge 186:707f6e361f3e 32
AnnaBridge 187:0387e8f68319 33 /** Define this macro to include filenames in error context. For release builds, do not include filename to save memory.
AnnaBridge 187:0387e8f68319 34 * MBED_PLATFORM_CONF_ERROR_FILENAME_CAPTURE_ENABLED
AnnaBridge 187:0387e8f68319 35 */
AnnaBridge 187:0387e8f68319 36
AnnaBridge 187:0387e8f68319 37 /** Define this macro to enable error history
AnnaBridge 187:0387e8f68319 38 * MBED_PLATFORM_CONF_ERROR_HIST_ENABLED
AnnaBridge 187:0387e8f68319 39 */
Anna Bridge 186:707f6e361f3e 40
AnnaBridge 187:0387e8f68319 41 #ifndef MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN
AnnaBridge 187:0387e8f68319 42 #define MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN 16
AnnaBridge 187:0387e8f68319 43 #else //MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN
AnnaBridge 187:0387e8f68319 44 #if MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN > 64
AnnaBridge 187:0387e8f68319 45 //We have to limit this to 64 bytes since we use mbed_error_printf for error reporting
AnnaBridge 189:f392fc9709a3 46 //and mbed_error_vprintf uses 128bytes internal buffer which may not be sufficient for anything
AnnaBridge 187:0387e8f68319 47 //longer that 64 bytes with the current implementation.
AnnaBridge 187:0387e8f68319 48 #error "Unsupported error filename buffer length detected, max supported length is 64 chars. Please change MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN or max-error-filename-len in configuration."
AnnaBridge 187:0387e8f68319 49 #endif
AnnaBridge 187:0387e8f68319 50 #endif
Anna Bridge 186:707f6e361f3e 51
Anna Bridge 186:707f6e361f3e 52 #define MBED_ERROR_STATUS_CODE_MASK (0x0000FFFF)
Anna Bridge 186:707f6e361f3e 53 #define MBED_ERROR_STATUS_CODE_POS (0)
Anna Bridge 186:707f6e361f3e 54 #define MBED_ERROR_STATUS_CODE_FIELD_SIZE (16)
Anna Bridge 186:707f6e361f3e 55
Anna Bridge 186:707f6e361f3e 56 #define MBED_ERROR_STATUS_MODULE_MASK (0x00FF0000)
Anna Bridge 186:707f6e361f3e 57 #define MBED_ERROR_STATUS_MODULE_POS (16)
Anna Bridge 186:707f6e361f3e 58 #define MBED_ERROR_STATUS_MODULE_FIELD_SIZE (8)
Anna Bridge 186:707f6e361f3e 59
Anna Bridge 186:707f6e361f3e 60 #define MBED_ERROR_STATUS_TYPE_MASK (0x60000000)
Anna Bridge 186:707f6e361f3e 61 #define MBED_ERROR_STATUS_TYPE_POS (29)
Anna Bridge 186:707f6e361f3e 62 #define MBED_ERROR_STATUS_TYPE_FIELD_SIZE (2)
Anna Bridge 186:707f6e361f3e 63
Anna Bridge 186:707f6e361f3e 64 /* mbed_error_status_t Status Encoding */
Anna Bridge 186:707f6e361f3e 65 //|31(1 bit) Always Negative|30-29(2 bits) |28-24 | 23-16(8 bits) | 15-0(16 bits) |
Anna Bridge 186:707f6e361f3e 66 //|-1 |TYPE |(unused/reserved) | MODULE TYPE | ERROR CODE |
Anna Bridge 186:707f6e361f3e 67
Anna Bridge 186:707f6e361f3e 68 #define MAKE_MBED_ERROR(type, module, error_code) (mbed_error_status_t) \
Anna Bridge 186:707f6e361f3e 69 ((0x80000000) | \
Anna Bridge 186:707f6e361f3e 70 (MBED_ERROR_STATUS_CODE_MASK & (error_code << MBED_ERROR_STATUS_CODE_POS)) | \
Anna Bridge 186:707f6e361f3e 71 (MBED_ERROR_STATUS_MODULE_MASK & (module << MBED_ERROR_STATUS_MODULE_POS)) | \
AnnaBridge 187:0387e8f68319 72 (MBED_ERROR_STATUS_TYPE_MASK & (type << MBED_ERROR_STATUS_TYPE_POS)))
Anna Bridge 186:707f6e361f3e 73
Anna Bridge 186:707f6e361f3e 74 #define MBED_GET_ERROR_TYPE( error_status ) ((error_status & MBED_ERROR_STATUS_TYPE_MASK) >> MBED_ERROR_STATUS_TYPE_POS)
AnnaBridge 187:0387e8f68319 75 #define MBED_GET_ERROR_MODULE( error_status ) ((error_status & MBED_ERROR_STATUS_MODULE_MASK) >> MBED_ERROR_STATUS_MODULE_POS)
Anna Bridge 186:707f6e361f3e 76 #define MBED_GET_ERROR_CODE( error_status ) (int)((MBED_GET_ERROR_TYPE( error_status ) == MBED_ERROR_TYPE_POSIX)?(-error_status):((error_status & MBED_ERROR_STATUS_CODE_MASK) >> MBED_ERROR_STATUS_CODE_POS))
Anna Bridge 186:707f6e361f3e 77
Anna Bridge 186:707f6e361f3e 78 /** mbed_error_status_t description
Anna Bridge 186:707f6e361f3e 79 *
Anna Bridge 186:707f6e361f3e 80 * mbed_error_status_t type represents the error status values under MbedOS. mbed_error_status_t values are signed integers and always be negative.\n
Anna Bridge 186:707f6e361f3e 81 * Internally its encoded as below with bit-fields representing error type, module and error code:\n\n
Anna Bridge 186:707f6e361f3e 82 * mbed_error_status_t Status Encoding:\n
Anna Bridge 186:707f6e361f3e 83 *
Anna Bridge 186:707f6e361f3e 84 \verbatim
Anna Bridge 186:707f6e361f3e 85 | 31 Always Negative | 30-29(2 bits) | 28-24 | 23-16(8 bits) | 15-0(16 bits) |
Anna Bridge 186:707f6e361f3e 86 | -1 | TYPE | (unused/reserved) | MODULE TYPE | ERROR CODE |
Anna Bridge 186:707f6e361f3e 87 \endverbatim
AnnaBridge 187:0387e8f68319 88 *
Anna Bridge 186:707f6e361f3e 89 * The error status value range for each error type is as follows:\n
AnnaBridge 189:f392fc9709a3 90 * POSIX Error Status-es - 0xFFFFFFFF to 0xFFFFFF01(-1 -255) - This corresponds to POSIX error codes represented as negative.\n
Anna Bridge 186:707f6e361f3e 91 * System Error Status-es - 0x80XX0100 to 0x80XX0FFF - This corresponds to System error codes range(all values are negative). Bits 23-16 will be module type(marked with XX)\n
Anna Bridge 186:707f6e361f3e 92 * Custom Error Status-es - 0xA0XX1000 to 0xA0XXFFFF - This corresponds to Custom error codes range(all values are negative). Bits 23-16 will be module type(marked with XX)\n\n
Anna Bridge 186:707f6e361f3e 93 *
AnnaBridge 188:bcfe06ba3d64 94 * The ERROR CODE(values encoded into ERROR CODE bit-field in mbed_error_status_t) value range for each error type is also separated as below:\n
AnnaBridge 189:f392fc9709a3 95 * POSIX Error Codes - 1 to 255.\n
Anna Bridge 186:707f6e361f3e 96 * System Error Codes - 256 to 4095.\n
Anna Bridge 186:707f6e361f3e 97 * Custom Error Codes - 4096 to 65535.\n
Anna Bridge 186:707f6e361f3e 98 *
AnnaBridge 189:f392fc9709a3 99 * @note POSIX error codes are always encoded as negative of their actual value. For example, EPERM is encoded as -EPERM.
AnnaBridge 189:f392fc9709a3 100 * And, the MODULE TYPE for POSIX error codes are always encoded as MBED_MODULE_UNKNOWN.\n
AnnaBridge 189:f392fc9709a3 101 * This is to enable easy injection of POSIX error codes into MbedOS error handling system without altering the actual POSIX error values.\n
AnnaBridge 189:f392fc9709a3 102 * Accordingly, POSIX error codes are represented as -1 to -255 under MbedOS error status representation.
Anna Bridge 186:707f6e361f3e 103 */
Anna Bridge 186:707f6e361f3e 104 typedef int mbed_error_status_t;
Anna Bridge 186:707f6e361f3e 105
Anna Bridge 186:707f6e361f3e 106 /**
AnnaBridge 189:f392fc9709a3 107 * Macro for defining a POSIX error status. This macro is mainly used to define POSIX error values in mbed_error_code_t enumeration.
Anna Bridge 186:707f6e361f3e 108 * @param error_name Name of the error without the ERROR_ prefix
Anna Bridge 186:707f6e361f3e 109 * @param error_code Error code value to be used, must be between 1 and 255(inclusive).
Anna Bridge 186:707f6e361f3e 110 *
Anna Bridge 186:707f6e361f3e 111 */
Anna Bridge 186:707f6e361f3e 112 #define MBED_DEFINE_POSIX_ERROR( error_name, error_code ) \
Anna Bridge 186:707f6e361f3e 113 MBED_ERROR_CODE_##error_name = error_code, \
Anna Bridge 186:707f6e361f3e 114 MBED_ERROR_##error_name = -(MBED_POSIX_ERROR_BASE + error_code)
Anna Bridge 186:707f6e361f3e 115
Anna Bridge 186:707f6e361f3e 116 /**
Anna Bridge 186:707f6e361f3e 117 * Macro for defining a System error status. This macro is used to define System error values in mbed_error_code_t enumeration.
Anna Bridge 186:707f6e361f3e 118 * @param error_name Name of the error without the ERROR_ prefix
Anna Bridge 186:707f6e361f3e 119 * @param error_code Error code value to be used, must be between 256 and 4096(inclusive).
Anna Bridge 186:707f6e361f3e 120 *
Anna Bridge 186:707f6e361f3e 121 */
Anna Bridge 186:707f6e361f3e 122 #define MBED_DEFINE_SYSTEM_ERROR( error_name, error_code ) \
Anna Bridge 186:707f6e361f3e 123 MBED_ERROR_CODE_##error_name = MBED_SYSTEM_ERROR_BASE + error_code, \
Anna Bridge 186:707f6e361f3e 124 MBED_ERROR_##error_name = MAKE_MBED_ERROR(MBED_ERROR_TYPE_SYSTEM, MBED_MODULE_UNKNOWN, MBED_ERROR_CODE_##error_name)
Anna Bridge 186:707f6e361f3e 125
Anna Bridge 186:707f6e361f3e 126 /**
Anna Bridge 186:707f6e361f3e 127 * Macro for defining a Custom error status. This macro is used to define custom error values in mbed_error_code_t enumeration.
Anna Bridge 186:707f6e361f3e 128 * @param error_name Name of the error without the ERROR_ prefix
Anna Bridge 186:707f6e361f3e 129 * @param error_code Error code value to be used, must be between 4097 and 65535(inclusive).
Anna Bridge 186:707f6e361f3e 130 *
Anna Bridge 186:707f6e361f3e 131 */
Anna Bridge 186:707f6e361f3e 132 #define MBED_DEFINE_CUSTOM_ERROR( error_name, error_code ) \
Anna Bridge 186:707f6e361f3e 133 MBED_ERROR_CODE_##error_name = MBED_CUSTOM_ERROR_BASE + error_code, \
Anna Bridge 186:707f6e361f3e 134 MBED_ERROR_##error_name = MAKE_MBED_ERROR(MBED_ERROR_TYPE_CUSTOM, MBED_MODULE_UNKNOWN, MBED_ERROR_CODE_##error_name)
Anna Bridge 186:707f6e361f3e 135
Anna Bridge 186:707f6e361f3e 136
Anna Bridge 186:707f6e361f3e 137 /**
Anna Bridge 186:707f6e361f3e 138 * Macros for setting a system warning. These macros will log the error, Its a wrapper for calling mbed_warning API.
Anna Bridge 186:707f6e361f3e 139 * There are 2 versions of this macro. MBED_WARNING takes status and message. MBED_WARNING1 takes an additional context specific argument
Anna Bridge 186:707f6e361f3e 140 * @param error_status mbed_error_status_t status to be set(See mbed_error_status_t enum above for available error status values).
Anna Bridge 186:707f6e361f3e 141 * @param error_msg The error message to be printed out to STDIO/Serial.
Anna Bridge 186:707f6e361f3e 142 * @param error_value Value associated with the error status. This would depend on error code/error scenario.
Anna Bridge 186:707f6e361f3e 143 *
Anna Bridge 186:707f6e361f3e 144 * @code
AnnaBridge 187:0387e8f68319 145 *
Anna Bridge 186:707f6e361f3e 146 * MBED_WARNING( ERROR_INVALID_SIZE, "MyDriver: Invalid size in read" )
Anna Bridge 186:707f6e361f3e 147 * MBED_WARNING1( ERROR_INVALID_SIZE, "MyDriver: Invalid size in read", size_val )
Anna Bridge 186:707f6e361f3e 148 *
Anna Bridge 186:707f6e361f3e 149 * @endcode
Anna Bridge 186:707f6e361f3e 150 * @note The macro calls mbed_warning API with filename and line number info without caller explicitly passing them.
Anna Bridge 186:707f6e361f3e 151 * Since this macro is a wrapper for mbed_warning API callers should process the return value from this macro which is the return value from calling mbed_error API.
Anna Bridge 186:707f6e361f3e 152 *
Anna Bridge 186:707f6e361f3e 153 */
Anna Bridge 186:707f6e361f3e 154 #ifdef NDEBUG
AnnaBridge 187:0387e8f68319 155 #define MBED_WARNING1( error_status, error_msg, error_value ) mbed_warning( error_status, (const char *)NULL, (uint32_t)error_value, NULL, 0 )
AnnaBridge 187:0387e8f68319 156 #define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)NULL, (uint32_t)0, NULL, 0 )
AnnaBridge 187:0387e8f68319 157 #else //NDEBUG
AnnaBridge 187:0387e8f68319 158 #if MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED
AnnaBridge 187:0387e8f68319 159 #define MBED_WARNING1( error_status, error_msg, error_value ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)error_value, (const char *)MBED_FILENAME, __LINE__ )
AnnaBridge 187:0387e8f68319 160 #define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)0 , (const char *)MBED_FILENAME, __LINE__ )
AnnaBridge 187:0387e8f68319 161 #else //MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED
AnnaBridge 187:0387e8f68319 162 #define MBED_WARNING1( error_status, error_msg, error_value ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)error_value, NULL, 0 )
AnnaBridge 187:0387e8f68319 163 #define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)0, NULL, 0 )
AnnaBridge 187:0387e8f68319 164 #endif
Anna Bridge 186:707f6e361f3e 165 #endif
Anna Bridge 186:707f6e361f3e 166
Anna Bridge 186:707f6e361f3e 167 /**
Anna Bridge 186:707f6e361f3e 168 * Macros for setting a fatal system error. These macros will log the error, prints the error report and halts the system. Its a wrapper for calling mbed_error API.
Anna Bridge 186:707f6e361f3e 169 * There are 2 versions of this macro. MBED_ERROR takes status and message. MBED_ERROR1 takes an additional context specific argument
Anna Bridge 186:707f6e361f3e 170 * @param error_status mbed_error_status_t status to be set(See mbed_error_status_t enum above for available error status values).
Anna Bridge 186:707f6e361f3e 171 * @param error_msg The error message to be printed out to STDIO/Serial.
Anna Bridge 186:707f6e361f3e 172 * @param error_value Value associated with the error status. This would depend on error code/error scenario. Only available with MBED_ERROR1
AnnaBridge 189:f392fc9709a3 173 * @return Does not return
Anna Bridge 186:707f6e361f3e 174 *
Anna Bridge 186:707f6e361f3e 175 * @code
AnnaBridge 187:0387e8f68319 176 *
Anna Bridge 186:707f6e361f3e 177 * MBED_ERROR( MBED_ERROR_MUTEX_LOCK_FAILED, "MyDriver: Can't lock driver Mutex" )
Anna Bridge 186:707f6e361f3e 178 * MBED_ERROR1( MBED_ERROR_MUTEX_LOCK_FAILED, "MyDriver: Can't lock driver Mutex", &my_mutex )
Anna Bridge 186:707f6e361f3e 179 *
Anna Bridge 186:707f6e361f3e 180 * @endcode
Anna Bridge 186:707f6e361f3e 181 * @note The macro calls mbed_error API with filename and line number info without caller explicitly passing them.
AnnaBridge 187:0387e8f68319 182 * Since this macro is a wrapper for mbed_error API callers should process the return value from this macro which is the return value from calling mbed_error API.
Anna Bridge 186:707f6e361f3e 183 *
Anna Bridge 186:707f6e361f3e 184 */
Anna Bridge 186:707f6e361f3e 185 #ifdef NDEBUG
AnnaBridge 187:0387e8f68319 186 #define MBED_ERROR1( error_status, error_msg, error_value ) mbed_error( error_status, (const char *)NULL, (uint32_t)error_value, NULL, 0 )
AnnaBridge 187:0387e8f68319 187 #define MBED_ERROR( error_status, error_msg ) mbed_error( error_status, (const char *)NULL, (uint32_t)0 , NULL, 0 )
AnnaBridge 187:0387e8f68319 188 #else //NDEBUG
AnnaBridge 187:0387e8f68319 189 #if MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED
AnnaBridge 187:0387e8f68319 190 #define MBED_ERROR1( error_status, error_msg, error_value ) mbed_error( error_status, (const char *)error_msg, (uint32_t)error_value, (const char *)MBED_FILENAME, __LINE__ )
AnnaBridge 187:0387e8f68319 191 #define MBED_ERROR( error_status, error_msg ) mbed_error( error_status, (const char *)error_msg, (uint32_t)0 , (const char *)MBED_FILENAME, __LINE__ )
AnnaBridge 187:0387e8f68319 192 #else //MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED
AnnaBridge 187:0387e8f68319 193 #define MBED_ERROR1( error_status, error_msg, error_value ) mbed_error( error_status, (const char *)error_msg, (uint32_t)error_value, NULL, 0 )
AnnaBridge 187:0387e8f68319 194 #define MBED_ERROR( error_status, error_msg ) mbed_error( error_status, (const char *)error_msg, (uint32_t)0 , NULL, 0 )
AnnaBridge 187:0387e8f68319 195 #endif
Anna Bridge 186:707f6e361f3e 196 #endif
Anna Bridge 186:707f6e361f3e 197
Anna Bridge 186:707f6e361f3e 198 //Error Type definition
Anna Bridge 186:707f6e361f3e 199 /** mbed_error_type_t definition
Anna Bridge 186:707f6e361f3e 200 * @note
Anna Bridge 186:707f6e361f3e 201 * This enumeration defines the Error types supported. The value of these enum values will be encoded into mbed_error_status_t TYPE field.\n
Anna Bridge 186:707f6e361f3e 202 * See mbed_error_status_t description for more info.\n
Anna Bridge 186:707f6e361f3e 203 * MBED_ERROR_TYPE_SYSTEM - Used to indicate that the error status is of System defined Error type.\n
AnnaBridge 187:0387e8f68319 204 * MBED_ERROR_TYPE_CUSTOM - Used to indicate that the error status is of Custom defined Error type.\n
AnnaBridge 189:f392fc9709a3 205 * MBED_ERROR_TYPE_POSIX - Used to indicate that the error status is of POSIX error type.\n
Anna Bridge 186:707f6e361f3e 206 *
Anna Bridge 186:707f6e361f3e 207 */
AnnaBridge 187:0387e8f68319 208 typedef enum _mbed_error_type_t {
Anna Bridge 186:707f6e361f3e 209 MBED_ERROR_TYPE_SYSTEM = 0,
Anna Bridge 186:707f6e361f3e 210 MBED_ERROR_TYPE_CUSTOM = 1,
Anna Bridge 186:707f6e361f3e 211 //2 is reserved
Anna Bridge 186:707f6e361f3e 212 //Use 3 for POSIX because we are mapping -1 to -255 to POSIX error codes
Anna Bridge 186:707f6e361f3e 213 //and thus we must use 3 to match the type bits in error status representation which are from 0xFFFFFFFF to 0xFFFFFF00
Anna Bridge 186:707f6e361f3e 214 MBED_ERROR_TYPE_POSIX = 3
AnnaBridge 187:0387e8f68319 215 } mbed_error_type_t;
Anna Bridge 186:707f6e361f3e 216
Anna Bridge 186:707f6e361f3e 217 //Module type/id definitions
Anna Bridge 186:707f6e361f3e 218 /** mbed_module_type_t definition
Anna Bridge 186:707f6e361f3e 219 * @note
Anna Bridge 186:707f6e361f3e 220 * This enumeration defines the module types. The value of these enum values will be encoded into mbed_error_status_t MODULE field.\n\n
Anna Bridge 186:707f6e361f3e 221 * See mbed_error_status_t description for more info.\n
Anna Bridge 186:707f6e361f3e 222 * MBED_MODULE_UNKNOWN - This module type can be used if caller of the mbed_error/mbed_warning doesn't know who is the actual originator of the error.\n
Anna Bridge 186:707f6e361f3e 223 * Other module values can be used to provide more info on who/where the error originated from.\n\n
Anna Bridge 186:707f6e361f3e 224 * For example, if I2C driver is the component originating the error you can use MBED_MODULE_DRIVER_I2C to provide more info.\n
Anna Bridge 186:707f6e361f3e 225 * Its used in call to MBED_MAKE_ERROR/MBED_MAKE_SYSTEM_ERROR/MBED_MAKE_CUSTOM_ERROR macros.\n
Anna Bridge 186:707f6e361f3e 226 *
Anna Bridge 186:707f6e361f3e 227 * @code
Anna Bridge 186:707f6e361f3e 228 * Example: mbed_error_status_t i2c_driver_error = MBED_MAKE_ERROR( MBED_MODULE_DRIVER_I2C, MBED_ERROR_CONFIG_UNSUPPORTED );
Anna Bridge 186:707f6e361f3e 229 * @endcode
AnnaBridge 187:0387e8f68319 230 *
Anna Bridge 186:707f6e361f3e 231 * @note
Anna Bridge 186:707f6e361f3e 232 * \n Below are the module code mappings:\n
Anna Bridge 186:707f6e361f3e 233 \verbatim
AnnaBridge 188:bcfe06ba3d64 234 MBED_MODULE_APPLICATION 0 Application
AnnaBridge 188:bcfe06ba3d64 235 MBED_MODULE_PLATFORM 1 Platform
AnnaBridge 188:bcfe06ba3d64 236 MBED_MODULE_KERNEL 2 RTX Kernel
AnnaBridge 188:bcfe06ba3d64 237 MBED_MODULE_NETWORK_STACK 3 Network stack
AnnaBridge 188:bcfe06ba3d64 238 MBED_MODULE_HAL 4 HAL - Hardware Abstraction Layer
AnnaBridge 188:bcfe06ba3d64 239 MBED_MODULE_MEMORY_SUBSYSTEM 5 Memory Subsystem
AnnaBridge 188:bcfe06ba3d64 240 MBED_MODULE_FILESYSTEM 6 Filesystem
AnnaBridge 188:bcfe06ba3d64 241 MBED_MODULE_BLOCK_DEVICE 7 Block device
AnnaBridge 188:bcfe06ba3d64 242 MBED_MODULE_DRIVER 8 Driver
AnnaBridge 188:bcfe06ba3d64 243 MBED_MODULE_DRIVER_SERIAL 9 Serial Driver
AnnaBridge 188:bcfe06ba3d64 244 MBED_MODULE_DRIVER_RTC 10 RTC Driver
AnnaBridge 188:bcfe06ba3d64 245 MBED_MODULE_DRIVER_I2C 11 I2C Driver
AnnaBridge 188:bcfe06ba3d64 246 MBED_MODULE_DRIVER_SPI 12 SPI Driver
AnnaBridge 188:bcfe06ba3d64 247 MBED_MODULE_DRIVER_GPIO 13 GPIO Driver
AnnaBridge 188:bcfe06ba3d64 248 MBED_MODULE_DRIVER_ANALOG 14 Analog Driver
AnnaBridge 188:bcfe06ba3d64 249 MBED_MODULE_DRIVER_DIGITAL 15 DigitalIO Driver
AnnaBridge 188:bcfe06ba3d64 250 MBED_MODULE_DRIVER_CAN 16 CAN Driver
AnnaBridge 188:bcfe06ba3d64 251 MBED_MODULE_DRIVER_ETHERNET 17 Ethernet Driver
AnnaBridge 188:bcfe06ba3d64 252 MBED_MODULE_DRIVER_CRC 18 CRC Module
AnnaBridge 188:bcfe06ba3d64 253 MBED_MODULE_DRIVER_PWM 19 PWM Driver
AnnaBridge 188:bcfe06ba3d64 254 MBED_MODULE_DRIVER_QSPI 20 QSPI Driver
AnnaBridge 188:bcfe06ba3d64 255 MBED_MODULE_DRIVER_USB 21 USB Driver
AnnaBridge 188:bcfe06ba3d64 256 MBED_MODULE_TARGET_SDK 22 SDK
AnnaBridge 188:bcfe06ba3d64 257 MBED_MODULE_BLE 23 BLE
AnnaBridge 189:f392fc9709a3 258 MBED_MODULE_NETWORK_STATS 24 Network Statistics
AnnaBridge 187:0387e8f68319 259
AnnaBridge 188:bcfe06ba3d64 260 MBED_MODULE_UNKNOWN 255 Unknown module
Anna Bridge 186:707f6e361f3e 261 \endverbatim
AnnaBridge 187:0387e8f68319 262 *
Anna Bridge 186:707f6e361f3e 263 */
AnnaBridge 187:0387e8f68319 264 typedef enum _mbed_module_type {
Anna Bridge 186:707f6e361f3e 265 MBED_MODULE_APPLICATION = 0,
Anna Bridge 186:707f6e361f3e 266 MBED_MODULE_PLATFORM,
Anna Bridge 186:707f6e361f3e 267 MBED_MODULE_KERNEL,
Anna Bridge 186:707f6e361f3e 268 MBED_MODULE_NETWORK_STACK,
Anna Bridge 186:707f6e361f3e 269 MBED_MODULE_HAL,
AnnaBridge 188:bcfe06ba3d64 270 MBED_MODULE_MEMORY_SUBSYSTEM,
Anna Bridge 186:707f6e361f3e 271 MBED_MODULE_FILESYSTEM,
Anna Bridge 186:707f6e361f3e 272 MBED_MODULE_BLOCK_DEVICE,
Anna Bridge 186:707f6e361f3e 273 MBED_MODULE_DRIVER,
Anna Bridge 186:707f6e361f3e 274 MBED_MODULE_DRIVER_SERIAL,
Anna Bridge 186:707f6e361f3e 275 MBED_MODULE_DRIVER_RTC,
Anna Bridge 186:707f6e361f3e 276 MBED_MODULE_DRIVER_I2C,
Anna Bridge 186:707f6e361f3e 277 MBED_MODULE_DRIVER_SPI,
Anna Bridge 186:707f6e361f3e 278 MBED_MODULE_DRIVER_GPIO,
Anna Bridge 186:707f6e361f3e 279 MBED_MODULE_DRIVER_ANALOG,
Anna Bridge 186:707f6e361f3e 280 MBED_MODULE_DRIVER_DIGITAL,
Anna Bridge 186:707f6e361f3e 281 MBED_MODULE_DRIVER_CAN,
Anna Bridge 186:707f6e361f3e 282 MBED_MODULE_DRIVER_ETHERNET,
Anna Bridge 186:707f6e361f3e 283 MBED_MODULE_DRIVER_CRC,
Anna Bridge 186:707f6e361f3e 284 MBED_MODULE_DRIVER_PWM,
Anna Bridge 186:707f6e361f3e 285 MBED_MODULE_DRIVER_QSPI,
Anna Bridge 186:707f6e361f3e 286 MBED_MODULE_DRIVER_USB,
Anna Bridge 186:707f6e361f3e 287 MBED_MODULE_TARGET_SDK,
AnnaBridge 188:bcfe06ba3d64 288 MBED_MODULE_BLE,
AnnaBridge 189:f392fc9709a3 289 MBED_MODULE_NETWORK_STATS,
Anna Bridge 186:707f6e361f3e 290 /* Add More entities here as required */
AnnaBridge 187:0387e8f68319 291
Anna Bridge 186:707f6e361f3e 292 MBED_MODULE_UNKNOWN = 255,
Anna Bridge 186:707f6e361f3e 293 MBED_MODULE_MAX = MBED_MODULE_UNKNOWN
Anna Bridge 186:707f6e361f3e 294 } mbed_module_type_t;
Anna Bridge 186:707f6e361f3e 295
AnnaBridge 188:bcfe06ba3d64 296 //Use MBED_SUCCESS(=0) or any positive number for successful returns
Anna Bridge 186:707f6e361f3e 297 #define MBED_SUCCESS 0
Anna Bridge 186:707f6e361f3e 298
Anna Bridge 186:707f6e361f3e 299 #define MBED_POSIX_ERROR_BASE 0
Anna Bridge 186:707f6e361f3e 300 #define MBED_SYSTEM_ERROR_BASE 256
Anna Bridge 186:707f6e361f3e 301 #define MBED_CUSTOM_ERROR_BASE 4096
Anna Bridge 186:707f6e361f3e 302
Anna Bridge 186:707f6e361f3e 303 //Error Code definitions
Anna Bridge 186:707f6e361f3e 304 /** mbed_error_code_t definition
Anna Bridge 186:707f6e361f3e 305 *
Anna Bridge 186:707f6e361f3e 306 * mbed_error_code_t enumeration defines the Error codes and Error status values for MBED_MODULE_UNKNOWN.\n
AnnaBridge 189:f392fc9709a3 307 * It defines all of POSIX Error Codes/Statuses and Mbed System Error Codes/Statuses.\n\n
Anna Bridge 186:707f6e361f3e 308 *
Anna Bridge 186:707f6e361f3e 309 * @note
AnnaBridge 189:f392fc9709a3 310 * POSIX Error codes are defined using the macro MBED_DEFINE_POSIX_ERROR\n
Anna Bridge 186:707f6e361f3e 311 * For example MBED_DEFINE_POSIX_ERROR( EPERM, EPERM ). This effectively defines the following values:\n
Anna Bridge 186:707f6e361f3e 312 * ERROR_CODE_EPERM = EPERM\n
Anna Bridge 186:707f6e361f3e 313 * ERROR_EPERM = -EPERM\n
Anna Bridge 186:707f6e361f3e 314 *
AnnaBridge 189:f392fc9709a3 315 * POSIX Error codes are defined using the macro MBED_DEFINE_POSIX_ERROR\n
Anna Bridge 186:707f6e361f3e 316 * For example MBED_DEFINE_POSIX_ERROR( EPERM, EPERM ). This macro defines the following values:\n
Anna Bridge 186:707f6e361f3e 317 * ERROR_CODE_EPERM = MBED_POSIX_ERROR_BASE+EPERM\n
Anna Bridge 186:707f6e361f3e 318 * ERROR_EPERM = -(MBED_POSIX_ERROR_BASE+EPERM)\n
Anna Bridge 186:707f6e361f3e 319 * Its effectively equivalent to:\n
Anna Bridge 186:707f6e361f3e 320 * ERROR_CODE_EPERM = 1\n
AnnaBridge 187:0387e8f68319 321 * ERROR_EPERM = -1\n
AnnaBridge 189:f392fc9709a3 322 * All POSIX error codes currently supported by MbedOS(defined in mbed_retarget.h) are defined using the MBED_DEFINE_POSIX_ERROR macro.\n\n
AnnaBridge 189:f392fc9709a3 323 * Below are the POSIX error codes and the description:\n
Anna Bridge 186:707f6e361f3e 324 * \verbatim
AnnaBridge 187:0387e8f68319 325 EPERM 1 Operation not permitted
AnnaBridge 187:0387e8f68319 326 ENOENT 2 No such file or directory
AnnaBridge 187:0387e8f68319 327 ESRCH 3 No such process
AnnaBridge 187:0387e8f68319 328 EINTR 4 Interrupted system call
AnnaBridge 187:0387e8f68319 329 EIO 5 I/O error
AnnaBridge 187:0387e8f68319 330 ENXIO 6 No such device or address
AnnaBridge 187:0387e8f68319 331 E2BIG 7 Argument list too long
AnnaBridge 187:0387e8f68319 332 ENOEXEC 8 Exec format error
AnnaBridge 187:0387e8f68319 333 EBADF 9 Bad file number
AnnaBridge 187:0387e8f68319 334 ECHILD 10 No child processes
AnnaBridge 187:0387e8f68319 335 EAGAIN 11 Try again
AnnaBridge 187:0387e8f68319 336 ENOMEM 12 Out of memory
AnnaBridge 187:0387e8f68319 337 EACCES 13 Permission denied
AnnaBridge 187:0387e8f68319 338 EFAULT 14 Bad address
AnnaBridge 187:0387e8f68319 339 ENOTBLK 15 Block device required
AnnaBridge 187:0387e8f68319 340 EBUSY 16 Device or resource busy
AnnaBridge 187:0387e8f68319 341 EEXIST 17 File exists
AnnaBridge 187:0387e8f68319 342 EXDEV 18 Cross-device link
AnnaBridge 187:0387e8f68319 343 ENODEV 19 No such device
AnnaBridge 187:0387e8f68319 344 ENOTDIR 20 Not a directory
AnnaBridge 187:0387e8f68319 345 EISDIR 21 Is a directory
AnnaBridge 187:0387e8f68319 346 EINVAL 22 Invalid argument
AnnaBridge 187:0387e8f68319 347 ENFILE 23 File table overflow
AnnaBridge 187:0387e8f68319 348 EMFILE 24 Too many open files
AnnaBridge 187:0387e8f68319 349 ENOTTY 25 Not a typewriter
AnnaBridge 187:0387e8f68319 350 ETXTBSY 26 Text file busy
AnnaBridge 187:0387e8f68319 351 EFBIG 27 File too large
AnnaBridge 187:0387e8f68319 352 ENOSPC 28 No space left on device
AnnaBridge 187:0387e8f68319 353 ESPIPE 29 Illegal seek
AnnaBridge 187:0387e8f68319 354 EROFS 30 Read-only file system
AnnaBridge 187:0387e8f68319 355 EMLINK 31 Too many links
AnnaBridge 187:0387e8f68319 356 EPIPE 32 Broken pipe
AnnaBridge 187:0387e8f68319 357 EDOM 33 Math argument out of domain of func
AnnaBridge 187:0387e8f68319 358 ERANGE 34 Math result not representable
AnnaBridge 187:0387e8f68319 359 EDEADLK 35 Resource deadlock would occur
AnnaBridge 187:0387e8f68319 360 ENAMETOOLONG 36 File name too long
AnnaBridge 187:0387e8f68319 361 ENOLCK 37 No record locks available
AnnaBridge 187:0387e8f68319 362 ENOSYS 38 Function not implemented
AnnaBridge 187:0387e8f68319 363 ENOTEMPTY 39 Directory not empty
AnnaBridge 187:0387e8f68319 364 ELOOP 40 Too many symbolic links encountered
AnnaBridge 187:0387e8f68319 365 EWOULDBLOCK EAGAIN Operation would block
AnnaBridge 187:0387e8f68319 366 ENOMSG 42 No message of desired type
AnnaBridge 187:0387e8f68319 367 EIDRM 43 Identifier removed
AnnaBridge 187:0387e8f68319 368 ECHRNG 44 Channel number out of range
AnnaBridge 187:0387e8f68319 369 EL2NSYNC 45 Level 2 not synchronized
AnnaBridge 187:0387e8f68319 370 EL3HLT 46 Level 3 halted
AnnaBridge 187:0387e8f68319 371 EL3RST 47 Level 3 reset
AnnaBridge 187:0387e8f68319 372 ELNRNG 48 Link number out of range
AnnaBridge 187:0387e8f68319 373 EUNATCH 49 Protocol driver not attached
AnnaBridge 187:0387e8f68319 374 ENOCSI 50 No CSI structure available
AnnaBridge 187:0387e8f68319 375 EL2HLT 51 Level 2 halted
AnnaBridge 187:0387e8f68319 376 EBADE 52 Invalid exchange
AnnaBridge 187:0387e8f68319 377 EBADR 53 Invalid request descriptor
AnnaBridge 187:0387e8f68319 378 EXFULL 54 Exchange full
AnnaBridge 187:0387e8f68319 379 ENOANO 55 No anode
AnnaBridge 187:0387e8f68319 380 EBADRQC 56 Invalid request code
AnnaBridge 187:0387e8f68319 381 EBADSLT 57 Invalid slot
AnnaBridge 187:0387e8f68319 382 EDEADLOCK EDEADLK Resource deadlock would occur
AnnaBridge 187:0387e8f68319 383 EBFONT 59 Bad font file format
AnnaBridge 187:0387e8f68319 384 ENOSTR 60 Device not a stream
AnnaBridge 187:0387e8f68319 385 ENODATA 61 No data available
AnnaBridge 187:0387e8f68319 386 ETIME 62 Timer expired
AnnaBridge 187:0387e8f68319 387 ENOSR 63 Out of streams resources
AnnaBridge 187:0387e8f68319 388 ENONET 64 Machine is not on the network
AnnaBridge 187:0387e8f68319 389 ENOPKG 65 Package not installed
AnnaBridge 187:0387e8f68319 390 EREMOTE 66 Object is remote
AnnaBridge 187:0387e8f68319 391 ENOLINK 67 Link has been severed
AnnaBridge 187:0387e8f68319 392 EADV 68 Advertise error
AnnaBridge 187:0387e8f68319 393 ESRMNT 69 Srmount error
AnnaBridge 187:0387e8f68319 394 ECOMM 70 Communication error on send
AnnaBridge 187:0387e8f68319 395 EPROTO 71 Protocol error
AnnaBridge 187:0387e8f68319 396 EMULTIHOP 72 Multihop attempted
AnnaBridge 187:0387e8f68319 397 EDOTDOT 73 RFS specific error
AnnaBridge 187:0387e8f68319 398 EBADMSG 74 Not a data message
AnnaBridge 187:0387e8f68319 399 EOVERFLOW 75 Value too large for defined data type
AnnaBridge 187:0387e8f68319 400 ENOTUNIQ 76 Name not unique on network
AnnaBridge 187:0387e8f68319 401 EBADFD 77 File descriptor in bad state
AnnaBridge 187:0387e8f68319 402 EREMCHG 78 Remote address changed
AnnaBridge 187:0387e8f68319 403 ELIBACC 79 Can not access a needed shared library
AnnaBridge 187:0387e8f68319 404 ELIBBAD 80 Accessing a corrupted shared library
AnnaBridge 187:0387e8f68319 405 ELIBSCN 81 .lib section in a.out corrupted
AnnaBridge 187:0387e8f68319 406 ELIBMAX 82 Attempting to link in too many shared libraries
AnnaBridge 187:0387e8f68319 407 ELIBEXEC 83 Cannot exec a shared library directly
AnnaBridge 187:0387e8f68319 408 EILSEQ 84 Illegal byte sequence
AnnaBridge 187:0387e8f68319 409 ERESTART 85 Interrupted system call should be restarted
AnnaBridge 187:0387e8f68319 410 ESTRPIPE 86 Streams pipe error
AnnaBridge 187:0387e8f68319 411 EUSERS 87 Too many users
AnnaBridge 187:0387e8f68319 412 ENOTSOCK 88 Socket operation on non-socket
AnnaBridge 187:0387e8f68319 413 EDESTADDRREQ 89 Destination address required
AnnaBridge 187:0387e8f68319 414 EMSGSIZE 90 Message too long
AnnaBridge 187:0387e8f68319 415 EPROTOTYPE 91 Protocol wrong type for socket
AnnaBridge 187:0387e8f68319 416 ENOPROTOOPT 92 Protocol not available
AnnaBridge 187:0387e8f68319 417 EPROTONOSUPPORT 93 Protocol not supported
AnnaBridge 187:0387e8f68319 418 ESOCKTNOSUPPORT 94 Socket type not supported
AnnaBridge 187:0387e8f68319 419 EOPNOTSUPP 95 Operation not supported on transport endpoint
AnnaBridge 187:0387e8f68319 420 EPFNOSUPPORT 96 Protocol family not supported
AnnaBridge 187:0387e8f68319 421 EAFNOSUPPORT 97 Address family not supported by protocol
AnnaBridge 187:0387e8f68319 422 EADDRINUSE 98 Address already in use
AnnaBridge 187:0387e8f68319 423 EADDRNOTAVAIL 99 Cannot assign requested address
AnnaBridge 187:0387e8f68319 424 ENETDOWN 100 Network is down
AnnaBridge 187:0387e8f68319 425 ENETUNREACH 101 Network is unreachable
AnnaBridge 187:0387e8f68319 426 ENETRESET 102 Network dropped connection because of reset
AnnaBridge 187:0387e8f68319 427 ECONNABORTED 103 Software caused connection abort
AnnaBridge 187:0387e8f68319 428 ECONNRESET 104 Connection reset by peer
AnnaBridge 187:0387e8f68319 429 ENOBUFS 105 No buffer space available
AnnaBridge 187:0387e8f68319 430 EISCONN 106 Transport endpoint is already connected
AnnaBridge 187:0387e8f68319 431 ENOTCONN 107 Transport endpoint is not connected
AnnaBridge 187:0387e8f68319 432 ESHUTDOWN 108 Cannot send after transport endpoint shutdown
AnnaBridge 187:0387e8f68319 433 ETOOMANYREFS 109 Too many references: cannot splice
AnnaBridge 187:0387e8f68319 434 ETIMEDOUT 110 Connection timed out
AnnaBridge 187:0387e8f68319 435 ECONNREFUSED 111 Connection refused
AnnaBridge 187:0387e8f68319 436 EHOSTDOWN 112 Host is down
AnnaBridge 187:0387e8f68319 437 EHOSTUNREACH 113 No route to host
AnnaBridge 187:0387e8f68319 438 EALREADY 114 Operation already in progress
AnnaBridge 187:0387e8f68319 439 EINPROGRESS 115 Operation now in progress
AnnaBridge 187:0387e8f68319 440 ESTALE 116 Stale NFS file handle
AnnaBridge 187:0387e8f68319 441 EUCLEAN 117 Structure needs cleaning
AnnaBridge 187:0387e8f68319 442 ENOTNAM 118 Not a XENIX named type file
AnnaBridge 187:0387e8f68319 443 ENAVAIL 119 No XENIX semaphores available
AnnaBridge 187:0387e8f68319 444 EISNAM 120 Is a named type file
AnnaBridge 187:0387e8f68319 445 EREMOTEIO 121 Remote I/O error
AnnaBridge 187:0387e8f68319 446 EDQUOT 122 Quota exceeded
AnnaBridge 187:0387e8f68319 447 ENOMEDIUM 123 No medium found
AnnaBridge 187:0387e8f68319 448 EMEDIUMTYPE 124 Wrong medium type
AnnaBridge 187:0387e8f68319 449 ECANCELED 125 Operation Canceled
AnnaBridge 187:0387e8f68319 450 ENOKEY 126 Required key not available
AnnaBridge 187:0387e8f68319 451 EKEYEXPIRED 127 Key has expired
AnnaBridge 187:0387e8f68319 452 EKEYREVOKED 128 Key has been revoked
AnnaBridge 187:0387e8f68319 453 EKEYREJECTED 129 Key was rejected by service
AnnaBridge 187:0387e8f68319 454 EOWNERDEAD 130 Owner died
AnnaBridge 187:0387e8f68319 455 ENOTRECOVERABLE 131 State not recoverable
Anna Bridge 186:707f6e361f3e 456 \endverbatim
Anna Bridge 186:707f6e361f3e 457 *
Anna Bridge 186:707f6e361f3e 458 * @note
Anna Bridge 186:707f6e361f3e 459 * MbedOS System Error codes are defined using the macro MBED_DEFINE_SYSTEM_ERROR\n
Anna Bridge 186:707f6e361f3e 460 * For example MBED_DEFINE_SYSTEM_ERROR( INVALID_ARGUMENT ,1 ) macro defines the following values:\n
Anna Bridge 186:707f6e361f3e 461 * ERROR_CODE_INVALID_ARGUMENT = MBED_SYSTEM_ERROR_BASE+1\n
Anna Bridge 186:707f6e361f3e 462 * ERROR_INVALID_ARGUMENT = MAKE_MBED_ERROR(ERROR_TYPE_SYSTEM, MBED_MODULE_UNKNOWN, ERROR_CODE_INVALID_ARGUMENT)\n
Anna Bridge 186:707f6e361f3e 463 * Its effectively equivalent to:\n
Anna Bridge 186:707f6e361f3e 464 * ERROR_CODE_INVALID_ARGUMENT = 1\n
AnnaBridge 187:0387e8f68319 465 * ERROR_INVALID_ARGUMENT = 0x80FF0001\n (Note that MODULE field is set to MBED_MODULE_UNKNOWN)
Anna Bridge 186:707f6e361f3e 466 * New System Error codes should be defined using MBED_DEFINE_SYSTEM_ERROR macro and must have an unique error code value\n
Anna Bridge 186:707f6e361f3e 467 * passed as the second argument in the MBED_DEFINE_SYSTEM_ERROR macro.\n\n
Anna Bridge 186:707f6e361f3e 468 * Below are the Mbed System error codes and the description:
AnnaBridge 187:0387e8f68319 469 * \verbatim
AnnaBridge 187:0387e8f68319 470 UNKNOWN 256 Unknown error
AnnaBridge 187:0387e8f68319 471 INVALID_ARGUMENT 257 Invalid Argument
AnnaBridge 187:0387e8f68319 472 INVALID_DATA 258 Invalid data
AnnaBridge 187:0387e8f68319 473 INVALID_FORMAT 259 Invalid format
AnnaBridge 187:0387e8f68319 474 INVALID_INDEX 260 Invalid Index
AnnaBridge 188:bcfe06ba3d64 475 INVALID_SIZE 261 Invalid Size
AnnaBridge 187:0387e8f68319 476 INVALID_OPERATION 262 Invalid Operation
AnnaBridge 187:0387e8f68319 477 NOT_FOUND 263 Not Found
AnnaBridge 187:0387e8f68319 478 ACCESS_DENIED 264 Access Denied
AnnaBridge 187:0387e8f68319 479 NOT_SUPPORTED 265 Not supported
AnnaBridge 187:0387e8f68319 480 BUFFER_FULL 266 Buffer Full
AnnaBridge 187:0387e8f68319 481 MEDIA_FULL 267 Media/Disk Full
AnnaBridge 187:0387e8f68319 482 ALREADY_IN_USE 268 Already in use
AnnaBridge 187:0387e8f68319 483 TIMEOUT 269 Timeout error
AnnaBridge 187:0387e8f68319 484 NOT_READY 270 Not Ready
AnnaBridge 187:0387e8f68319 485 FAILED_OPERATION 271 Requested Operation failed
AnnaBridge 187:0387e8f68319 486 OPERATION_PROHIBITED 272 Operation prohibited
AnnaBridge 187:0387e8f68319 487 OPERATION_ABORTED 273 Operation failed
AnnaBridge 187:0387e8f68319 488 WRITE_PROTECTED 274 Attempt to write to write-protected resource
AnnaBridge 187:0387e8f68319 489 NO_RESPONSE 275 No response
AnnaBridge 188:bcfe06ba3d64 490 SEMAPHORE_LOCK_FAILED 276 Semaphore lock failed
AnnaBridge 187:0387e8f68319 491 MUTEX_LOCK_FAILED 277 Mutex lock failed
AnnaBridge 188:bcfe06ba3d64 492 SEMAPHORE_UNLOCK_FAILED 278 Semaphore unlock failed
AnnaBridge 187:0387e8f68319 493 MUTEX_UNLOCK_FAILED 279 Mutex unlock failed
AnnaBridge 187:0387e8f68319 494 CRC_ERROR 280 CRC error or mismatch
AnnaBridge 187:0387e8f68319 495 OPEN_FAILED 281 Open failed
AnnaBridge 187:0387e8f68319 496 CLOSE_FAILED 282 Close failed
AnnaBridge 187:0387e8f68319 497 READ_FAILED 283 Read failed
AnnaBridge 187:0387e8f68319 498 WRITE_FAILED 284 Write failed
AnnaBridge 187:0387e8f68319 499 INITIALIZATION_FAILED 285 Initialization failed
AnnaBridge 187:0387e8f68319 500 BOOT_FAILURE 286 Boot failure
AnnaBridge 187:0387e8f68319 501 OUT_OF_MEMORY 287 Out of memory
AnnaBridge 187:0387e8f68319 502 OUT_OF_RESOURCES 288 Out of resources
AnnaBridge 187:0387e8f68319 503 ALLOC_FAILED 289 Alloc failed
AnnaBridge 187:0387e8f68319 504 FREE_FAILED 290 Free failed
AnnaBridge 187:0387e8f68319 505 OVERFLOW 291 Overflow error
AnnaBridge 187:0387e8f68319 506 UNDERFLOW 292 Underflow error
AnnaBridge 187:0387e8f68319 507 STACK_OVERFLOW 293 Stack overflow error
AnnaBridge 187:0387e8f68319 508 ISR_QUEUE_OVERFLOW 294 ISR queue overflow
AnnaBridge 187:0387e8f68319 509 TIMER_QUEUE_OVERFLOW 295 Timer Queue overflow
AnnaBridge 187:0387e8f68319 510 CLIB_SPACE_UNAVAILABLE 296 Standard library error - Space unavailable
AnnaBridge 187:0387e8f68319 511 CLIB_EXCEPTION 297 Standard library error - Exception
AnnaBridge 187:0387e8f68319 512 CLIB_MUTEX_INIT_FAILURE 298 Standard library error - Mutex Init failure
AnnaBridge 187:0387e8f68319 513 CREATE_FAILED 299 Create failed
AnnaBridge 187:0387e8f68319 514 DELETE_FAILED 300 Delete failed
AnnaBridge 187:0387e8f68319 515 THREAD_CREATE_FAILED 301 Thread Create failed
AnnaBridge 187:0387e8f68319 516 THREAD_DELETE_FAILED 302 Thread Delete failed
AnnaBridge 187:0387e8f68319 517 PROHIBITED_IN_ISR_CONTEXT 303 Operation Prohibited in ISR context
AnnaBridge 187:0387e8f68319 518 PINMAP_INVALID 304 Pinmap Invalid
AnnaBridge 187:0387e8f68319 519 RTOS_EVENT 305 Unknown Rtos Error
AnnaBridge 187:0387e8f68319 520 RTOS_THREAD_EVENT 306 Rtos Thread Error
AnnaBridge 187:0387e8f68319 521 RTOS_MUTEX_EVENT 307 Rtos Mutex Error
AnnaBridge 187:0387e8f68319 522 RTOS_SEMAPHORE_EVENT 308 Rtos Semaphore Error
AnnaBridge 187:0387e8f68319 523 RTOS_MEMORY_POOL_EVENT 309 Rtos Memory Pool Error
AnnaBridge 187:0387e8f68319 524 RTOS_TIMER_EVENT 310 Rtos Timer Error
AnnaBridge 187:0387e8f68319 525 RTOS_EVENT_FLAGS_EVENT 311 Rtos Event flags Error
AnnaBridge 187:0387e8f68319 526 RTOS_MESSAGE_QUEUE_EVENT 312 Rtos Message queue Error
AnnaBridge 187:0387e8f68319 527 DEVICE_BUSY 313 Device Busy
AnnaBridge 187:0387e8f68319 528 CONFIG_UNSUPPORTED 314 Configuration not supported
AnnaBridge 187:0387e8f68319 529 CONFIG_MISMATCH 315 Configuration mismatch
AnnaBridge 188:bcfe06ba3d64 530 ALREADY_INITIALIZED 316 Already initialized
AnnaBridge 187:0387e8f68319 531 HARDFAULT_EXCEPTION 317 HardFault exception
AnnaBridge 187:0387e8f68319 532 MEMMANAGE_EXCEPTION 318 MemManage exception
AnnaBridge 187:0387e8f68319 533 BUSFAULT_EXCEPTION 319 BusFault exception
Anna Bridge 186:707f6e361f3e 534 USAGEFAULT_EXCEPTION 320 UsageFault exception
AnnaBridge 188:bcfe06ba3d64 535 BLE_NO_FRAME_INITIALIZED, 321 BLE No frame initialized
AnnaBridge 188:bcfe06ba3d64 536 BLE_BACKEND_CREATION_FAILED 322 BLE Backend creation failed
AnnaBridge 188:bcfe06ba3d64 537 BLE_BACKEND_NOT_INITIALIZED 323 BLE Backend not initialized
AnnaBridge 189:f392fc9709a3 538 ASSERTION_FAILED 324 Assertion Failed
AnnaBridge 189:f392fc9709a3 539 AUTHENTICATION_FAILED 325 Authentication Failed
AnnaBridge 189:f392fc9709a3 540 RBP_AUTHENTICATION_FAILED 326 Rollback Protect Authentication Failed
Anna Bridge 186:707f6e361f3e 541 \endverbatim
Anna Bridge 186:707f6e361f3e 542 *
Anna Bridge 186:707f6e361f3e 543 * @note
Anna Bridge 186:707f6e361f3e 544 * Custom Error codes can be defined using the macro DEFINE_CUSTOM_ERROR\n
Anna Bridge 186:707f6e361f3e 545 * This is mainly meant to capture non-generic error codes specific to a device.
Anna Bridge 186:707f6e361f3e 546 * For example DEFINE_CUSTOM_ERROR( MY_CUSTOM_ERROR ,1 ) macro defines the following values:\n
Anna Bridge 186:707f6e361f3e 547 * ERROR_CODE_MY_CUSTOM_ERROR = MBED_CUSTOM_ERROR_BASE+1\n
Anna Bridge 186:707f6e361f3e 548 * ERROR_MY_CUSTOM_ERROR = MAKE_MBED_ERROR(ERROR_TYPE_CUSTOM, MBED_MODULE_UNKNOWN, ERROR_CODE_MY_CUSTOM_ERROR)\n
Anna Bridge 186:707f6e361f3e 549 * Its effectively equivalent to:\n
Anna Bridge 186:707f6e361f3e 550 * ERROR_CODE_MY_CUSTOM_ERROR = 4097\n
Anna Bridge 186:707f6e361f3e 551 * ERROR_MY_CUSTOM_ERROR = 0xA0FF1001\n (Note that MODULE field is set to MBED_MODULE_UNKNOWN) \n\n
Anna Bridge 186:707f6e361f3e 552 *
Anna Bridge 186:707f6e361f3e 553 * @note
AnnaBridge 187:0387e8f68319 554 * **Using error codes:** \n
AnnaBridge 189:f392fc9709a3 555 * POSIX error codes may be used in modules/functions currently using POSIX error codes and switching them to Mbed-OS error codes
AnnaBridge 187:0387e8f68319 556 * may cause interoperability issues. For example, some of the filesystem, network stack implementations may need to use
AnnaBridge 189:f392fc9709a3 557 * POSIX error codes in order to keep them compatible with other modules interfacing with them, and may continue to use POSIX error codes.
AnnaBridge 187:0387e8f68319 558 *
Anna Bridge 186:707f6e361f3e 559 * In all other cases, like for any native development of Mbed-OS modules Mbed-OS error codes should be used.
Anna Bridge 186:707f6e361f3e 560 * This makes it easy to use Mbed-OS error reporting/logging infrastructure and makes debugging error scenarios
Anna Bridge 186:707f6e361f3e 561 * much more efficient.
AnnaBridge 187:0387e8f68319 562 *
Anna Bridge 186:707f6e361f3e 563 * @note
Anna Bridge 186:707f6e361f3e 564 * **Searching for error codes in mbed-os source tree:** \n
Anna Bridge 186:707f6e361f3e 565 * If you get an error report as below which you want to search for in mbed-os source tree, first take note of "Error Code" number. \n
Anna Bridge 186:707f6e361f3e 566 * For example, the below error report has an error code of \b 259. Find the error name associated with the error code and in this case its \b INVALID_FORMAT. \n
AnnaBridge 187:0387e8f68319 567 * Use that error name(\b INVALID_FORMAT) to search the source tree for code locations setting that specific error code. \n
Anna Bridge 186:707f6e361f3e 568 * If the Error module reported is not 255(which indicates unknown module), you can also use that to narrow down to the specific component reporting the error.
Anna Bridge 186:707f6e361f3e 569 * See mbed_module_type_t enum above for module mapping. \n
AnnaBridge 187:0387e8f68319 570 *
Anna Bridge 186:707f6e361f3e 571 * \verbatim
Anna Bridge 186:707f6e361f3e 572 ++ MbedOS Error Info ++
AnnaBridge 188:bcfe06ba3d64 573 Error Status: 0x80FF013D Code: 317 Module: 255
AnnaBridge 188:bcfe06ba3d64 574 Error Message: Fault exception
AnnaBridge 188:bcfe06ba3d64 575 Location: 0x5CD1
AnnaBridge 188:bcfe06ba3d64 576 Error Value: 0x4A2A
AnnaBridge 188:bcfe06ba3d64 577 Current Thread: Id: 0x20001E80 Entry: 0x5EB1 StackSize: 0x1000 StackMem: 0x20000E80 SP: 0x2002FF90
AnnaBridge 188:bcfe06ba3d64 578 For more info, visit: https://mbed.com/s/error?error=0x80FF013D&mbedos=999999&core=0x410FC241&compile=1&ver=5060528
Anna Bridge 186:707f6e361f3e 579 -- MbedOS Error Info --
Anna Bridge 186:707f6e361f3e 580 \endverbatim
Anna Bridge 186:707f6e361f3e 581 */
AnnaBridge 187:0387e8f68319 582
AnnaBridge 187:0387e8f68319 583 typedef enum _mbed_error_code {
Anna Bridge 186:707f6e361f3e 584 //Below are POSIX ERROR CODE definitions, which starts at MBED_POSIX_ERROR_BASE(=0)
AnnaBridge 189:f392fc9709a3 585 //POSIX ERROR CODE definitions starts at offset 0(MBED_POSIX_ERROR_BASE) to align them with actual POSIX Error Code
Anna Bridge 186:707f6e361f3e 586 //defintions in mbed_retarget.h
Anna Bridge 186:707f6e361f3e 587 // Error Name Error Code
AnnaBridge 187:0387e8f68319 588 MBED_DEFINE_POSIX_ERROR(EPERM, EPERM), /* 1 Operation not permitted */
AnnaBridge 187:0387e8f68319 589 MBED_DEFINE_POSIX_ERROR(ENOENT, ENOENT), /* 2 No such file or directory */
AnnaBridge 187:0387e8f68319 590 MBED_DEFINE_POSIX_ERROR(ESRCH, ESRCH), /* 3 No such process */
AnnaBridge 187:0387e8f68319 591 MBED_DEFINE_POSIX_ERROR(EINTR, EINTR), /* 4 Interrupted system call */
AnnaBridge 187:0387e8f68319 592 MBED_DEFINE_POSIX_ERROR(EIO, EIO), /* 5 I/O error */
AnnaBridge 187:0387e8f68319 593 MBED_DEFINE_POSIX_ERROR(ENXIO, ENXIO), /* 6 No such device or address */
AnnaBridge 187:0387e8f68319 594 MBED_DEFINE_POSIX_ERROR(E2BIG, E2BIG), /* 7 Argument list too long */
AnnaBridge 187:0387e8f68319 595 MBED_DEFINE_POSIX_ERROR(ENOEXEC, ENOEXEC), /* 8 Exec format error */
AnnaBridge 187:0387e8f68319 596 MBED_DEFINE_POSIX_ERROR(EBADF, EBADF), /* 9 Bad file number */
AnnaBridge 187:0387e8f68319 597 MBED_DEFINE_POSIX_ERROR(ECHILD, ECHILD), /* 10 No child processes */
AnnaBridge 187:0387e8f68319 598 MBED_DEFINE_POSIX_ERROR(EAGAIN, EAGAIN), /* 11 Try again */
AnnaBridge 187:0387e8f68319 599 MBED_DEFINE_POSIX_ERROR(ENOMEM, ENOMEM), /* 12 Out of memory */
AnnaBridge 187:0387e8f68319 600 MBED_DEFINE_POSIX_ERROR(EACCES, EACCES), /* 13 Permission denied */
AnnaBridge 187:0387e8f68319 601 MBED_DEFINE_POSIX_ERROR(EFAULT, EFAULT), /* 14 Bad address */
AnnaBridge 187:0387e8f68319 602 MBED_DEFINE_POSIX_ERROR(ENOTBLK, ENOTBLK), /* 15 Block device required */
AnnaBridge 187:0387e8f68319 603 MBED_DEFINE_POSIX_ERROR(EBUSY, EBUSY), /* 16 Device or resource busy */
AnnaBridge 187:0387e8f68319 604 MBED_DEFINE_POSIX_ERROR(EEXIST, EEXIST), /* 17 File exists */
AnnaBridge 187:0387e8f68319 605 MBED_DEFINE_POSIX_ERROR(EXDEV, EXDEV), /* 18 Cross-device link */
AnnaBridge 187:0387e8f68319 606 MBED_DEFINE_POSIX_ERROR(ENODEV, ENODEV), /* 19 No such device */
AnnaBridge 187:0387e8f68319 607 MBED_DEFINE_POSIX_ERROR(ENOTDIR, ENOTDIR), /* 20 Not a directory */
AnnaBridge 187:0387e8f68319 608 MBED_DEFINE_POSIX_ERROR(EISDIR, EISDIR), /* 21 Is a directory */
AnnaBridge 187:0387e8f68319 609 MBED_DEFINE_POSIX_ERROR(EINVAL, EINVAL), /* 22 Invalid argument */
AnnaBridge 187:0387e8f68319 610 MBED_DEFINE_POSIX_ERROR(ENFILE, ENFILE), /* 23 File table overflow */
AnnaBridge 187:0387e8f68319 611 MBED_DEFINE_POSIX_ERROR(EMFILE, EMFILE), /* 24 Too many open files */
AnnaBridge 187:0387e8f68319 612 MBED_DEFINE_POSIX_ERROR(ENOTTY, ENOTTY), /* 25 Not a typewriter */
AnnaBridge 187:0387e8f68319 613 MBED_DEFINE_POSIX_ERROR(ETXTBSY, ETXTBSY), /* 26 Text file busy */
AnnaBridge 187:0387e8f68319 614 MBED_DEFINE_POSIX_ERROR(EFBIG, EFBIG), /* 27 File too large */
AnnaBridge 187:0387e8f68319 615 MBED_DEFINE_POSIX_ERROR(ENOSPC, ENOSPC), /* 28 No space left on device */
AnnaBridge 187:0387e8f68319 616 MBED_DEFINE_POSIX_ERROR(ESPIPE, ESPIPE), /* 29 Illegal seek */
AnnaBridge 187:0387e8f68319 617 MBED_DEFINE_POSIX_ERROR(EROFS, EROFS), /* 30 Read-only file system */
AnnaBridge 187:0387e8f68319 618 MBED_DEFINE_POSIX_ERROR(EMLINK, EMLINK), /* 31 Too many links */
AnnaBridge 187:0387e8f68319 619 MBED_DEFINE_POSIX_ERROR(EPIPE, EPIPE), /* 32 Broken pipe */
AnnaBridge 187:0387e8f68319 620 MBED_DEFINE_POSIX_ERROR(EDOM, EDOM), /* 33 Math argument out of domain of func */
AnnaBridge 187:0387e8f68319 621 MBED_DEFINE_POSIX_ERROR(ERANGE, ERANGE), /* 34 Math result not representable */
AnnaBridge 187:0387e8f68319 622 MBED_DEFINE_POSIX_ERROR(EDEADLK, EDEADLK), /* 35 Resource deadlock would occur */
AnnaBridge 187:0387e8f68319 623 MBED_DEFINE_POSIX_ERROR(ENAMETOOLONG, ENAMETOOLONG), /* 36 File name too long */
AnnaBridge 187:0387e8f68319 624 MBED_DEFINE_POSIX_ERROR(ENOLCK, ENOLCK), /* 37 No record locks available */
AnnaBridge 187:0387e8f68319 625 MBED_DEFINE_POSIX_ERROR(ENOSYS, ENOSYS), /* 38 Function not implemented */
AnnaBridge 187:0387e8f68319 626 MBED_DEFINE_POSIX_ERROR(ENOTEMPTY, ENOTEMPTY), /* 39 Directory not empty */
AnnaBridge 187:0387e8f68319 627 MBED_DEFINE_POSIX_ERROR(ELOOP, ELOOP), /* 40 Too many symbolic links encountered */
AnnaBridge 187:0387e8f68319 628 MBED_DEFINE_POSIX_ERROR(EWOULDBLOCK, EAGAIN), /* EAGAIN Operation would block */
AnnaBridge 187:0387e8f68319 629 MBED_DEFINE_POSIX_ERROR(ENOMSG, ENOMSG), /* 42 No message of desired type */
AnnaBridge 187:0387e8f68319 630 MBED_DEFINE_POSIX_ERROR(EIDRM, EIDRM), /* 43 Identifier removed */
AnnaBridge 187:0387e8f68319 631 MBED_DEFINE_POSIX_ERROR(ECHRNG, ECHRNG), /* 44 Channel number out of range */
AnnaBridge 187:0387e8f68319 632 MBED_DEFINE_POSIX_ERROR(EL2NSYNC, EL2NSYNC), /* 45 Level 2 not synchronized */
AnnaBridge 187:0387e8f68319 633 MBED_DEFINE_POSIX_ERROR(EL3HLT, EL3HLT), /* 46 Level 3 halted */
AnnaBridge 187:0387e8f68319 634 MBED_DEFINE_POSIX_ERROR(EL3RST, EL3RST), /* 47 Level 3 reset */
AnnaBridge 187:0387e8f68319 635 MBED_DEFINE_POSIX_ERROR(ELNRNG, ELNRNG), /* 48 Link number out of range */
AnnaBridge 187:0387e8f68319 636 MBED_DEFINE_POSIX_ERROR(EUNATCH, EUNATCH), /* 49 Protocol driver not attached */
AnnaBridge 187:0387e8f68319 637 MBED_DEFINE_POSIX_ERROR(ENOCSI, ENOCSI), /* 50 No CSI structure available */
AnnaBridge 187:0387e8f68319 638 MBED_DEFINE_POSIX_ERROR(EL2HLT, EL2HLT), /* 51 Level 2 halted */
AnnaBridge 187:0387e8f68319 639 MBED_DEFINE_POSIX_ERROR(EBADE, EBADE), /* 52 Invalid exchange */
AnnaBridge 187:0387e8f68319 640 MBED_DEFINE_POSIX_ERROR(EBADR, EBADR), /* 53 Invalid request descriptor */
AnnaBridge 187:0387e8f68319 641 MBED_DEFINE_POSIX_ERROR(EXFULL, EXFULL), /* 54 Exchange full */
AnnaBridge 187:0387e8f68319 642 MBED_DEFINE_POSIX_ERROR(ENOANO, ENOANO), /* 55 No anode */
AnnaBridge 187:0387e8f68319 643 MBED_DEFINE_POSIX_ERROR(EBADRQC, EBADRQC), /* 56 Invalid request code */
AnnaBridge 187:0387e8f68319 644 MBED_DEFINE_POSIX_ERROR(EBADSLT, EBADSLT), /* 57 Invalid slot */
AnnaBridge 187:0387e8f68319 645 MBED_DEFINE_POSIX_ERROR(EDEADLOCK, EDEADLK), /* EDEADLK Resource deadlock would occur */
AnnaBridge 187:0387e8f68319 646 MBED_DEFINE_POSIX_ERROR(EBFONT, EBFONT), /* 59 Bad font file format */
AnnaBridge 187:0387e8f68319 647 MBED_DEFINE_POSIX_ERROR(ENOSTR, ENOSTR), /* 60 Device not a stream */
AnnaBridge 187:0387e8f68319 648 MBED_DEFINE_POSIX_ERROR(ENODATA, ENODATA), /* 61 No data available */
AnnaBridge 187:0387e8f68319 649 MBED_DEFINE_POSIX_ERROR(ETIME, ETIME), /* 62 Timer expired */
AnnaBridge 187:0387e8f68319 650 MBED_DEFINE_POSIX_ERROR(ENOSR, ENOSR), /* 63 Out of streams resources */
AnnaBridge 187:0387e8f68319 651 MBED_DEFINE_POSIX_ERROR(ENONET, ENONET), /* 64 Machine is not on the network */
AnnaBridge 187:0387e8f68319 652 MBED_DEFINE_POSIX_ERROR(ENOPKG, ENOPKG), /* 65 Package not installed */
AnnaBridge 187:0387e8f68319 653 MBED_DEFINE_POSIX_ERROR(EREMOTE, EREMOTE), /* 66 Object is remote */
AnnaBridge 187:0387e8f68319 654 MBED_DEFINE_POSIX_ERROR(ENOLINK, ENOLINK), /* 67 Link has been severed */
AnnaBridge 187:0387e8f68319 655 MBED_DEFINE_POSIX_ERROR(EADV, EADV), /* 68 Advertise error */
AnnaBridge 187:0387e8f68319 656 MBED_DEFINE_POSIX_ERROR(ESRMNT, ESRMNT), /* 69 Srmount error */
AnnaBridge 187:0387e8f68319 657 MBED_DEFINE_POSIX_ERROR(ECOMM, ECOMM), /* 70 Communication error on send */
AnnaBridge 187:0387e8f68319 658 MBED_DEFINE_POSIX_ERROR(EPROTO, EPROTO), /* 71 Protocol error */
AnnaBridge 187:0387e8f68319 659 MBED_DEFINE_POSIX_ERROR(EMULTIHOP, EMULTIHOP), /* 72 Multihop attempted */
AnnaBridge 187:0387e8f68319 660 MBED_DEFINE_POSIX_ERROR(EDOTDOT, EDOTDOT), /* 73 RFS specific error */
AnnaBridge 187:0387e8f68319 661 MBED_DEFINE_POSIX_ERROR(EBADMSG, EBADMSG), /* 74 Not a data message */
AnnaBridge 187:0387e8f68319 662 MBED_DEFINE_POSIX_ERROR(EOVERFLOW, EOVERFLOW), /* 75 Value too large for defined data type */
AnnaBridge 187:0387e8f68319 663 MBED_DEFINE_POSIX_ERROR(ENOTUNIQ, ENOTUNIQ), /* 76 Name not unique on network */
AnnaBridge 187:0387e8f68319 664 MBED_DEFINE_POSIX_ERROR(EBADFD, EBADFD), /* 77 File descriptor in bad state */
AnnaBridge 187:0387e8f68319 665 MBED_DEFINE_POSIX_ERROR(EREMCHG, EREMCHG), /* 78 Remote address changed */
AnnaBridge 187:0387e8f68319 666 MBED_DEFINE_POSIX_ERROR(ELIBACC, ELIBACC), /* 79 Can not access a needed shared library */
AnnaBridge 187:0387e8f68319 667 MBED_DEFINE_POSIX_ERROR(ELIBBAD, ELIBBAD), /* 80 Accessing a corrupted shared library */
AnnaBridge 187:0387e8f68319 668 MBED_DEFINE_POSIX_ERROR(ELIBSCN, ELIBSCN), /* 81 .lib section in a.out corrupted */
AnnaBridge 187:0387e8f68319 669 MBED_DEFINE_POSIX_ERROR(ELIBMAX, ELIBMAX), /* 82 Attempting to link in too many shared libraries */
AnnaBridge 187:0387e8f68319 670 MBED_DEFINE_POSIX_ERROR(ELIBEXEC, ELIBEXEC), /* 83 Cannot exec a shared library directly */
AnnaBridge 187:0387e8f68319 671 MBED_DEFINE_POSIX_ERROR(EILSEQ, EILSEQ), /* 84 Illegal byte sequence */
AnnaBridge 187:0387e8f68319 672 MBED_DEFINE_POSIX_ERROR(ERESTART, ERESTART), /* 85 Interrupted system call should be restarted */
AnnaBridge 187:0387e8f68319 673 MBED_DEFINE_POSIX_ERROR(ESTRPIPE, ESTRPIPE), /* 86 Streams pipe error */
AnnaBridge 187:0387e8f68319 674 MBED_DEFINE_POSIX_ERROR(EUSERS, EUSERS), /* 87 Too many users */
AnnaBridge 187:0387e8f68319 675 MBED_DEFINE_POSIX_ERROR(ENOTSOCK, ENOTSOCK), /* 88 Socket operation on non-socket */
AnnaBridge 187:0387e8f68319 676 MBED_DEFINE_POSIX_ERROR(EDESTADDRREQ, EDESTADDRREQ), /* 89 Destination address required */
AnnaBridge 187:0387e8f68319 677 MBED_DEFINE_POSIX_ERROR(EMSGSIZE, EMSGSIZE), /* 90 Message too long */
AnnaBridge 187:0387e8f68319 678 MBED_DEFINE_POSIX_ERROR(EPROTOTYPE, EPROTOTYPE), /* 91 Protocol wrong type for socket */
AnnaBridge 187:0387e8f68319 679 MBED_DEFINE_POSIX_ERROR(ENOPROTOOPT, ENOPROTOOPT), /* 92 Protocol not available */
AnnaBridge 187:0387e8f68319 680 MBED_DEFINE_POSIX_ERROR(EPROTONOSUPPORT, EPROTONOSUPPORT), /* 93 Protocol not supported */
AnnaBridge 187:0387e8f68319 681 MBED_DEFINE_POSIX_ERROR(ESOCKTNOSUPPORT, ESOCKTNOSUPPORT), /* 94 Socket type not supported */
AnnaBridge 187:0387e8f68319 682 MBED_DEFINE_POSIX_ERROR(EOPNOTSUPP, EOPNOTSUPP), /* 95 Operation not supported on transport endpoint */
AnnaBridge 187:0387e8f68319 683 MBED_DEFINE_POSIX_ERROR(EPFNOSUPPORT, EPFNOSUPPORT), /* 96 Protocol family not supported */
AnnaBridge 187:0387e8f68319 684 MBED_DEFINE_POSIX_ERROR(EAFNOSUPPORT, EAFNOSUPPORT), /* 97 Address family not supported by protocol */
AnnaBridge 187:0387e8f68319 685 MBED_DEFINE_POSIX_ERROR(EADDRINUSE, EADDRINUSE), /* 98 Address already in use */
AnnaBridge 187:0387e8f68319 686 MBED_DEFINE_POSIX_ERROR(EADDRNOTAVAIL, EADDRNOTAVAIL), /* 99 Cannot assign requested address */
AnnaBridge 187:0387e8f68319 687 MBED_DEFINE_POSIX_ERROR(ENETDOWN, ENETDOWN), /* 100 Network is down */
AnnaBridge 187:0387e8f68319 688 MBED_DEFINE_POSIX_ERROR(ENETUNREACH, ENETUNREACH), /* 101 Network is unreachable */
AnnaBridge 187:0387e8f68319 689 MBED_DEFINE_POSIX_ERROR(ENETRESET, ENETRESET), /* 102 Network dropped connection because of reset */
AnnaBridge 187:0387e8f68319 690 MBED_DEFINE_POSIX_ERROR(ECONNABORTED, ECONNABORTED), /* 103 Software caused connection abort */
AnnaBridge 187:0387e8f68319 691 MBED_DEFINE_POSIX_ERROR(ECONNRESET, ECONNRESET), /* 104 Connection reset by peer */
AnnaBridge 187:0387e8f68319 692 MBED_DEFINE_POSIX_ERROR(ENOBUFS, ENOBUFS), /* 105 No buffer space available */
AnnaBridge 187:0387e8f68319 693 MBED_DEFINE_POSIX_ERROR(EISCONN, EISCONN), /* 106 Transport endpoint is already connected */
AnnaBridge 187:0387e8f68319 694 MBED_DEFINE_POSIX_ERROR(ENOTCONN, ENOTCONN), /* 107 Transport endpoint is not connected */
AnnaBridge 187:0387e8f68319 695 MBED_DEFINE_POSIX_ERROR(ESHUTDOWN, ESHUTDOWN), /* 108 Cannot send after transport endpoint shutdown */
AnnaBridge 187:0387e8f68319 696 MBED_DEFINE_POSIX_ERROR(ETOOMANYREFS, ETOOMANYREFS), /* 109 Too many references: cannot splice */
AnnaBridge 187:0387e8f68319 697 MBED_DEFINE_POSIX_ERROR(ETIMEDOUT, ETIMEDOUT), /* 110 Connection timed out */
AnnaBridge 187:0387e8f68319 698 MBED_DEFINE_POSIX_ERROR(ECONNREFUSED, ECONNREFUSED), /* 111 Connection refused */
AnnaBridge 187:0387e8f68319 699 MBED_DEFINE_POSIX_ERROR(EHOSTDOWN, EHOSTDOWN), /* 112 Host is down */
AnnaBridge 187:0387e8f68319 700 MBED_DEFINE_POSIX_ERROR(EHOSTUNREACH, EHOSTUNREACH), /* 113 No route to host */
AnnaBridge 187:0387e8f68319 701 MBED_DEFINE_POSIX_ERROR(EALREADY, EALREADY), /* 114 Operation already in progress */
AnnaBridge 187:0387e8f68319 702 MBED_DEFINE_POSIX_ERROR(EINPROGRESS, EINPROGRESS), /* 115 Operation now in progress */
AnnaBridge 187:0387e8f68319 703 MBED_DEFINE_POSIX_ERROR(ESTALE, ESTALE), /* 116 Stale NFS file handle */
AnnaBridge 187:0387e8f68319 704 MBED_DEFINE_POSIX_ERROR(EUCLEAN, EUCLEAN), /* 117 Structure needs cleaning */
AnnaBridge 187:0387e8f68319 705 MBED_DEFINE_POSIX_ERROR(ENOTNAM, ENOTNAM), /* 118 Not a XENIX named type file */
AnnaBridge 187:0387e8f68319 706 MBED_DEFINE_POSIX_ERROR(ENAVAIL, ENAVAIL), /* 119 No XENIX semaphores available */
AnnaBridge 187:0387e8f68319 707 MBED_DEFINE_POSIX_ERROR(EISNAM, EISNAM), /* 120 Is a named type file */
AnnaBridge 187:0387e8f68319 708 MBED_DEFINE_POSIX_ERROR(EREMOTEIO, EREMOTEIO), /* 121 Remote I/O error */
AnnaBridge 187:0387e8f68319 709 MBED_DEFINE_POSIX_ERROR(EDQUOT, EDQUOT), /* 122 Quota exceeded */
AnnaBridge 187:0387e8f68319 710 MBED_DEFINE_POSIX_ERROR(ENOMEDIUM, ENOMEDIUM), /* 123 No medium found */
AnnaBridge 187:0387e8f68319 711 MBED_DEFINE_POSIX_ERROR(EMEDIUMTYPE, EMEDIUMTYPE), /* 124 Wrong medium type */
AnnaBridge 187:0387e8f68319 712 MBED_DEFINE_POSIX_ERROR(ECANCELED, ECANCELED), /* 125 Operation Canceled */
AnnaBridge 187:0387e8f68319 713 MBED_DEFINE_POSIX_ERROR(ENOKEY, ENOKEY), /* 126 Required key not available */
AnnaBridge 187:0387e8f68319 714 MBED_DEFINE_POSIX_ERROR(EKEYEXPIRED, EKEYEXPIRED), /* 127 Key has expired */
AnnaBridge 187:0387e8f68319 715 MBED_DEFINE_POSIX_ERROR(EKEYREVOKED, EKEYREVOKED), /* 128 Key has been revoked */
AnnaBridge 187:0387e8f68319 716 MBED_DEFINE_POSIX_ERROR(EKEYREJECTED, EKEYREJECTED), /* 129 Key was rejected by service */
AnnaBridge 187:0387e8f68319 717 MBED_DEFINE_POSIX_ERROR(EOWNERDEAD, EOWNERDEAD), /* 130 Owner died */
AnnaBridge 187:0387e8f68319 718 MBED_DEFINE_POSIX_ERROR(ENOTRECOVERABLE, ENOTRECOVERABLE), /* 131 State not recoverable */
AnnaBridge 187:0387e8f68319 719
Anna Bridge 186:707f6e361f3e 720 //Below are MBED SYSTEM ERROR CODE definitions
Anna Bridge 186:707f6e361f3e 721 //MBED SYSTEM ERROR CODE definitions starts at offset MBED_SYSTEM_ERROR_BASE, see above.
Anna Bridge 186:707f6e361f3e 722 // Error Name Error Offset Error Code
AnnaBridge 187:0387e8f68319 723 MBED_DEFINE_SYSTEM_ERROR(UNKNOWN, 0), /* 256 Unknown error */
AnnaBridge 187:0387e8f68319 724 MBED_DEFINE_SYSTEM_ERROR(INVALID_ARGUMENT, 1), /* 257 Invalid Argument */
AnnaBridge 187:0387e8f68319 725 MBED_DEFINE_SYSTEM_ERROR(INVALID_DATA_DETECTED, 2), /* 258 Invalid data detected */
AnnaBridge 187:0387e8f68319 726 MBED_DEFINE_SYSTEM_ERROR(INVALID_FORMAT, 3), /* 259 Invalid format */
AnnaBridge 187:0387e8f68319 727 MBED_DEFINE_SYSTEM_ERROR(INVALID_INDEX, 4), /* 260 Invalid Index */
AnnaBridge 188:bcfe06ba3d64 728 MBED_DEFINE_SYSTEM_ERROR(INVALID_SIZE, 5), /* 261 Invalid Size */
AnnaBridge 187:0387e8f68319 729 MBED_DEFINE_SYSTEM_ERROR(INVALID_OPERATION, 6), /* 262 Invalid Operation */
AnnaBridge 187:0387e8f68319 730 MBED_DEFINE_SYSTEM_ERROR(ITEM_NOT_FOUND, 7), /* 263 Item Not Found */
AnnaBridge 187:0387e8f68319 731 MBED_DEFINE_SYSTEM_ERROR(ACCESS_DENIED, 8), /* 264 Access Denied */
AnnaBridge 187:0387e8f68319 732 MBED_DEFINE_SYSTEM_ERROR(UNSUPPORTED, 9), /* 265 Unsupported */
AnnaBridge 187:0387e8f68319 733 MBED_DEFINE_SYSTEM_ERROR(BUFFER_FULL, 10), /* 266 Buffer Full */
AnnaBridge 187:0387e8f68319 734 MBED_DEFINE_SYSTEM_ERROR(MEDIA_FULL, 11), /* 267 Media/Disk Full */
AnnaBridge 187:0387e8f68319 735 MBED_DEFINE_SYSTEM_ERROR(ALREADY_IN_USE, 12), /* 268 Already in use */
AnnaBridge 187:0387e8f68319 736 MBED_DEFINE_SYSTEM_ERROR(TIME_OUT, 13), /* 269 Timeout error */
AnnaBridge 187:0387e8f68319 737 MBED_DEFINE_SYSTEM_ERROR(NOT_READY, 14), /* 270 Not Ready */
AnnaBridge 187:0387e8f68319 738 MBED_DEFINE_SYSTEM_ERROR(FAILED_OPERATION, 15), /* 271 Requested Operation failed */
AnnaBridge 187:0387e8f68319 739 MBED_DEFINE_SYSTEM_ERROR(OPERATION_PROHIBITED, 16), /* 272 Operation prohibited */
AnnaBridge 187:0387e8f68319 740 MBED_DEFINE_SYSTEM_ERROR(OPERATION_ABORTED, 17), /* 273 Operation failed */
AnnaBridge 187:0387e8f68319 741 MBED_DEFINE_SYSTEM_ERROR(WRITE_PROTECTED, 18), /* 274 Attempt to write to write-protected resource */
AnnaBridge 187:0387e8f68319 742 MBED_DEFINE_SYSTEM_ERROR(NO_RESPONSE, 19), /* 275 No response */
AnnaBridge 188:bcfe06ba3d64 743 MBED_DEFINE_SYSTEM_ERROR(SEMAPHORE_LOCK_FAILED, 20), /* 276 Semaphore lock failed */
AnnaBridge 187:0387e8f68319 744 MBED_DEFINE_SYSTEM_ERROR(MUTEX_LOCK_FAILED, 21), /* 277 Mutex lock failed */
AnnaBridge 188:bcfe06ba3d64 745 MBED_DEFINE_SYSTEM_ERROR(SEMAPHORE_UNLOCK_FAILED, 22), /* 278 Semaphore unlock failed */
AnnaBridge 187:0387e8f68319 746 MBED_DEFINE_SYSTEM_ERROR(MUTEX_UNLOCK_FAILED, 23), /* 279 Mutex unlock failed */
AnnaBridge 187:0387e8f68319 747 MBED_DEFINE_SYSTEM_ERROR(CRC_ERROR, 24), /* 280 CRC error or mismatch */
AnnaBridge 187:0387e8f68319 748 MBED_DEFINE_SYSTEM_ERROR(OPEN_FAILED, 25), /* 281 Open failed */
AnnaBridge 187:0387e8f68319 749 MBED_DEFINE_SYSTEM_ERROR(CLOSE_FAILED, 26), /* 282 Close failed */
AnnaBridge 187:0387e8f68319 750 MBED_DEFINE_SYSTEM_ERROR(READ_FAILED, 27), /* 283 Read failed */
AnnaBridge 187:0387e8f68319 751 MBED_DEFINE_SYSTEM_ERROR(WRITE_FAILED, 28), /* 284 Write failed */
AnnaBridge 187:0387e8f68319 752 MBED_DEFINE_SYSTEM_ERROR(INITIALIZATION_FAILED, 29), /* 285 Initialization failed */
AnnaBridge 187:0387e8f68319 753 MBED_DEFINE_SYSTEM_ERROR(BOOT_FAILURE, 30), /* 286 Boot failure */
AnnaBridge 187:0387e8f68319 754 MBED_DEFINE_SYSTEM_ERROR(OUT_OF_MEMORY, 31), /* 287 Out of memory */
AnnaBridge 187:0387e8f68319 755 MBED_DEFINE_SYSTEM_ERROR(OUT_OF_RESOURCES, 32), /* 288 Out of resources */
AnnaBridge 187:0387e8f68319 756 MBED_DEFINE_SYSTEM_ERROR(ALLOC_FAILED, 33), /* 289 Alloc failed */
AnnaBridge 187:0387e8f68319 757 MBED_DEFINE_SYSTEM_ERROR(FREE_FAILED, 34), /* 290 Free failed */
AnnaBridge 187:0387e8f68319 758 MBED_DEFINE_SYSTEM_ERROR(OVERFLOW, 35), /* 291 Overflow error */
AnnaBridge 187:0387e8f68319 759 MBED_DEFINE_SYSTEM_ERROR(UNDERFLOW, 36), /* 292 Underflow error */
AnnaBridge 187:0387e8f68319 760 MBED_DEFINE_SYSTEM_ERROR(STACK_OVERFLOW, 37), /* 293 Stack overflow error */
AnnaBridge 187:0387e8f68319 761 MBED_DEFINE_SYSTEM_ERROR(ISR_QUEUE_OVERFLOW, 38), /* 294 ISR queue overflow */
AnnaBridge 187:0387e8f68319 762 MBED_DEFINE_SYSTEM_ERROR(TIMER_QUEUE_OVERFLOW, 39), /* 295 Timer Queue overflow */
AnnaBridge 187:0387e8f68319 763 MBED_DEFINE_SYSTEM_ERROR(CLIB_SPACE_UNAVAILABLE, 40), /* 296 Standard library error - Space unavailable */
AnnaBridge 187:0387e8f68319 764 MBED_DEFINE_SYSTEM_ERROR(CLIB_EXCEPTION, 41), /* 297 Standard library error - Exception */
AnnaBridge 187:0387e8f68319 765 MBED_DEFINE_SYSTEM_ERROR(CLIB_MUTEX_INIT_FAILURE, 42), /* 298 Standard library error - Mutex Init failure */
AnnaBridge 187:0387e8f68319 766 MBED_DEFINE_SYSTEM_ERROR(CREATE_FAILED, 43), /* 299 Create failed */
AnnaBridge 187:0387e8f68319 767 MBED_DEFINE_SYSTEM_ERROR(DELETE_FAILED, 44), /* 300 Delete failed */
AnnaBridge 187:0387e8f68319 768 MBED_DEFINE_SYSTEM_ERROR(THREAD_CREATE_FAILED, 45), /* 301 Thread Create failed */
AnnaBridge 187:0387e8f68319 769 MBED_DEFINE_SYSTEM_ERROR(THREAD_DELETE_FAILED, 46), /* 302 Thread Delete failed */
AnnaBridge 187:0387e8f68319 770 MBED_DEFINE_SYSTEM_ERROR(PROHIBITED_IN_ISR_CONTEXT, 47), /* 303 Operation Prohibited in ISR context */
AnnaBridge 187:0387e8f68319 771 MBED_DEFINE_SYSTEM_ERROR(PINMAP_INVALID, 48), /* 304 Pinmap Invalid */
AnnaBridge 187:0387e8f68319 772 MBED_DEFINE_SYSTEM_ERROR(RTOS_EVENT, 49), /* 305 Unknown Rtos Error */
AnnaBridge 187:0387e8f68319 773 MBED_DEFINE_SYSTEM_ERROR(RTOS_THREAD_EVENT, 50), /* 306 Rtos Thread Error */
AnnaBridge 187:0387e8f68319 774 MBED_DEFINE_SYSTEM_ERROR(RTOS_MUTEX_EVENT, 51), /* 307 Rtos Mutex Error */
AnnaBridge 187:0387e8f68319 775 MBED_DEFINE_SYSTEM_ERROR(RTOS_SEMAPHORE_EVENT, 52), /* 308 Rtos Semaphore Error */
AnnaBridge 187:0387e8f68319 776 MBED_DEFINE_SYSTEM_ERROR(RTOS_MEMORY_POOL_EVENT, 53), /* 309 Rtos Memory Pool Error */
AnnaBridge 187:0387e8f68319 777 MBED_DEFINE_SYSTEM_ERROR(RTOS_TIMER_EVENT, 54), /* 310 Rtos Timer Error */
AnnaBridge 187:0387e8f68319 778 MBED_DEFINE_SYSTEM_ERROR(RTOS_EVENT_FLAGS_EVENT, 55), /* 311 Rtos Event flags Error */
AnnaBridge 187:0387e8f68319 779 MBED_DEFINE_SYSTEM_ERROR(RTOS_MESSAGE_QUEUE_EVENT, 56), /* 312 Rtos Message queue Error */
AnnaBridge 187:0387e8f68319 780 MBED_DEFINE_SYSTEM_ERROR(DEVICE_BUSY, 57), /* 313 Device Busy */
AnnaBridge 187:0387e8f68319 781 MBED_DEFINE_SYSTEM_ERROR(CONFIG_UNSUPPORTED, 58), /* 314 Configuration not supported */
AnnaBridge 187:0387e8f68319 782 MBED_DEFINE_SYSTEM_ERROR(CONFIG_MISMATCH, 59), /* 315 Configuration mismatch */
AnnaBridge 188:bcfe06ba3d64 783 MBED_DEFINE_SYSTEM_ERROR(ALREADY_INITIALIZED, 60), /* 316 Already initialized */
AnnaBridge 187:0387e8f68319 784 MBED_DEFINE_SYSTEM_ERROR(HARDFAULT_EXCEPTION, 61), /* 317 HardFault exception */
AnnaBridge 187:0387e8f68319 785 MBED_DEFINE_SYSTEM_ERROR(MEMMANAGE_EXCEPTION, 62), /* 318 MemManage exception */
AnnaBridge 187:0387e8f68319 786 MBED_DEFINE_SYSTEM_ERROR(BUSFAULT_EXCEPTION, 63), /* 319 BusFault exception */
AnnaBridge 187:0387e8f68319 787 MBED_DEFINE_SYSTEM_ERROR(USAGEFAULT_EXCEPTION, 64), /* 320 UsageFault exception*/
AnnaBridge 188:bcfe06ba3d64 788 MBED_DEFINE_SYSTEM_ERROR(BLE_NO_FRAME_INITIALIZED, 65), /* 321 BLE No frame initialized */
AnnaBridge 188:bcfe06ba3d64 789 MBED_DEFINE_SYSTEM_ERROR(BLE_BACKEND_CREATION_FAILED, 66), /* 322 BLE Backend creation failed */
AnnaBridge 188:bcfe06ba3d64 790 MBED_DEFINE_SYSTEM_ERROR(BLE_BACKEND_NOT_INITIALIZED, 67), /* 323 BLE Backend not initialized */
AnnaBridge 189:f392fc9709a3 791 MBED_DEFINE_SYSTEM_ERROR(ASSERTION_FAILED, 68), /* 324 Assertion Failed */
AnnaBridge 189:f392fc9709a3 792 MBED_DEFINE_SYSTEM_ERROR(AUTHENTICATION_FAILED, 69), /* 325 Authentication Failed */
AnnaBridge 189:f392fc9709a3 793 MBED_DEFINE_SYSTEM_ERROR(RBP_AUTHENTICATION_FAILED, 70), /* 326 Rollback Protection Authentication Failed */
AnnaBridge 189:f392fc9709a3 794 MBED_DEFINE_SYSTEM_ERROR(BLE_USE_INCOMPATIBLE_API, 71), /* 327 Concurrent use of incompatible versions of a BLE API */
AnnaBridge 189:f392fc9709a3 795 MBED_DEFINE_SYSTEM_ERROR(BLE_ILLEGAL_STATE, 72), /* 328 BLE stack entered illegal state */
AnnaBridge 187:0387e8f68319 796
Anna Bridge 186:707f6e361f3e 797 //Everytime you add a new system error code, you must update
Anna Bridge 186:707f6e361f3e 798 //Error documentation under Handbook to capture the info on
Anna Bridge 186:707f6e361f3e 799 //the new error status/codes
AnnaBridge 187:0387e8f68319 800
Anna Bridge 186:707f6e361f3e 801 //MBED CUSTOM ERROR CODE definitions starts at offset MBED_CUSTOM_ERROR_BASE, see above.
Anna Bridge 186:707f6e361f3e 802 /* Add More/Custom Error Codes here, See example below */
AnnaBridge 187:0387e8f68319 803 //DEFINE_CUSTOM_ERROR( MY_CUSTOM_ERROR , 1 ),
AnnaBridge 187:0387e8f68319 804
Anna Bridge 186:707f6e361f3e 805 } mbed_error_code_t;
Anna Bridge 186:707f6e361f3e 806
Anna Bridge 186:707f6e361f3e 807 /** mbed_error_ctx struct
Anna Bridge 186:707f6e361f3e 808 *
Anna Bridge 186:707f6e361f3e 809 * This struct captures the context information at the time of error.\n
Anna Bridge 186:707f6e361f3e 810 * It primarily contains information about the thread where the error originated,\n
Anna Bridge 186:707f6e361f3e 811 * filename/line number of the source file where the error occurred, a context specific error value(error_value)\n
Anna Bridge 186:707f6e361f3e 812 * and the address where the error originated.\n
Anna Bridge 186:707f6e361f3e 813 *
Anna Bridge 186:707f6e361f3e 814 * @note
Anna Bridge 186:707f6e361f3e 815 * Below are the members of mbed_error_ctx struct\n
Anna Bridge 186:707f6e361f3e 816 * error_status mbed_error_status_t value for this error\n
Anna Bridge 186:707f6e361f3e 817 * error_function_address Address where the error occurred\n
Anna Bridge 186:707f6e361f3e 818 * thread_id ID of the thread which generated the error\n
Anna Bridge 186:707f6e361f3e 819 * thread_entry_address Entry function of the thread which generated the error\n
Anna Bridge 186:707f6e361f3e 820 * thread_stack_size Stack Size of the thread which generated the error\n
Anna Bridge 186:707f6e361f3e 821 * thread_stack_mem Stack Top of the thread which generated the error\n
Anna Bridge 186:707f6e361f3e 822 * thread_current_sp Current Stack Pointer of the thread which generated the error\n
Anna Bridge 186:707f6e361f3e 823 * error_value A context/error specific value associated with this error\n
Anna Bridge 186:707f6e361f3e 824 * error_filename Filename where the error originated\n
Anna Bridge 186:707f6e361f3e 825 * error_line_number Line number in error_filename where the error originated\n
Anna Bridge 186:707f6e361f3e 826 */
Anna Bridge 186:707f6e361f3e 827 typedef struct _mbed_error_ctx {
Anna Bridge 186:707f6e361f3e 828 mbed_error_status_t error_status;
Anna Bridge 186:707f6e361f3e 829 uint32_t error_address;
Anna Bridge 186:707f6e361f3e 830 uint32_t error_value;
Anna Bridge 186:707f6e361f3e 831 uint32_t thread_id;
Anna Bridge 186:707f6e361f3e 832 uint32_t thread_entry_address;
Anna Bridge 186:707f6e361f3e 833 uint32_t thread_stack_size;
Anna Bridge 186:707f6e361f3e 834 uint32_t thread_stack_mem;
Anna Bridge 186:707f6e361f3e 835 uint32_t thread_current_sp;
AnnaBridge 187:0387e8f68319 836 #ifdef MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN
AnnaBridge 187:0387e8f68319 837 char error_filename[MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN];
Anna Bridge 186:707f6e361f3e 838 uint32_t error_line_number;
AnnaBridge 187:0387e8f68319 839 #endif
AnnaBridge 189:f392fc9709a3 840 #if MBED_CONF_PLATFORM_CRASH_CAPTURE_ENABLED
AnnaBridge 189:f392fc9709a3 841 int32_t error_reboot_count;//everytime we write this struct we increment this value by 1, irrespective of time between reboots. Note that the data itself might change, but everytime we reboot due to error we update this count by 1
AnnaBridge 189:f392fc9709a3 842 int32_t is_error_processed;//once this error is processed set this value to 1
AnnaBridge 189:f392fc9709a3 843 uint32_t crc_error_ctx;//crc_error_ctx should always be the last member in this struct
AnnaBridge 189:f392fc9709a3 844 #endif
Anna Bridge 186:707f6e361f3e 845 } mbed_error_ctx;
AnnaBridge 167:e84263d55307 846
<> 149:156823d33999 847 /** To generate a fatal compile-time error, you can use the pre-processor #error directive.
<> 149:156823d33999 848 *
AnnaBridge 167:e84263d55307 849 * @param format C string that contains data stream to be printed.
AnnaBridge 167:e84263d55307 850 * Code snippets below show valid format.
AnnaBridge 167:e84263d55307 851 *
<> 149:156823d33999 852 * @code
<> 149:156823d33999 853 * #error "That shouldn't have happened!"
<> 149:156823d33999 854 * @endcode
<> 149:156823d33999 855 *
<> 149:156823d33999 856 * If the compiler evaluates this line, it will report the error and stop the compile.
<> 149:156823d33999 857 *
<> 149:156823d33999 858 * For example, you could use this to check some user-defined compile-time variables:
<> 149:156823d33999 859 *
<> 149:156823d33999 860 * @code
<> 149:156823d33999 861 * #define NUM_PORTS 7
<> 149:156823d33999 862 * #if (NUM_PORTS > 4)
<> 149:156823d33999 863 * #error "NUM_PORTS must be less than 4"
<> 149:156823d33999 864 * #endif
<> 149:156823d33999 865 * @endcode
<> 149:156823d33999 866 *
<> 149:156823d33999 867 * Reporting Run-Time Errors:
<> 149:156823d33999 868 * To generate a fatal run-time error, you can use the mbed error() function.
<> 149:156823d33999 869 *
<> 149:156823d33999 870 * @code
<> 149:156823d33999 871 * error("That shouldn't have happened!");
<> 149:156823d33999 872 * @endcode
<> 149:156823d33999 873 *
<> 149:156823d33999 874 * If the mbed running the program executes this function, it will print the
<> 149:156823d33999 875 * message via the USB serial port, and then die with the blue lights of death!
<> 149:156823d33999 876 *
<> 149:156823d33999 877 * The message can use printf-style formatting, so you can report variables in the
<> 149:156823d33999 878 * message too. For example, you could use this to check a run-time condition:
<> 149:156823d33999 879 *
<> 149:156823d33999 880 * @code
<> 149:156823d33999 881 * if(x >= 5) {
<> 149:156823d33999 882 * error("expected x to be less than 5, but got %d", x);
<> 149:156823d33999 883 * }
AnnaBridge 167:e84263d55307 884 * @endcode
AnnaBridge 167:e84263d55307 885 *
AnnaBridge 167:e84263d55307 886 *
<> 149:156823d33999 887 */
AnnaBridge 187:0387e8f68319 888
AnnaBridge 189:f392fc9709a3 889 MBED_NORETURN void error(const char *format, ...) MBED_PRINTF(1, 2);
<> 149:156823d33999 890
Anna Bridge 186:707f6e361f3e 891 /**
Anna Bridge 186:707f6e361f3e 892 * Call this Macro to generate a mbed_error_status_t value for a System error
Anna Bridge 186:707f6e361f3e 893 * @param module Module generating the error code. If its unknown, pass MBED_MODULE_UNKNOWN. See mbed_module_type_t for module types.
Anna Bridge 186:707f6e361f3e 894 * @param error_code The mbed_error_code_t code to be used in generating the mbed_error_status_t. See mbed_error_code_t for error codes.
Anna Bridge 186:707f6e361f3e 895 *
Anna Bridge 186:707f6e361f3e 896 * @code
AnnaBridge 187:0387e8f68319 897 *
Anna Bridge 186:707f6e361f3e 898 * mbed_error_status_t driver_error = MBED_MAKE_SYSTEM_ERROR( MODULE_DRIVER_USB, MBED_ERROR_CODE_INITIALIZATION_FAILED )
Anna Bridge 186:707f6e361f3e 899 *
Anna Bridge 186:707f6e361f3e 900 * @endcode
Anna Bridge 186:707f6e361f3e 901 * @note This macro generate mbed_error_status_t-es with error type set to MBED_ERROR_TYPE_SYSTEM
Anna Bridge 186:707f6e361f3e 902 *
Anna Bridge 186:707f6e361f3e 903 */
Anna Bridge 186:707f6e361f3e 904 #define MBED_MAKE_SYSTEM_ERROR(module, error_code) MAKE_MBED_ERROR(MBED_ERROR_TYPE_SYSTEM, module, error_code)
Anna Bridge 186:707f6e361f3e 905
Anna Bridge 186:707f6e361f3e 906 /**
Anna Bridge 186:707f6e361f3e 907 * Call this Macro to generate a mbed_error_status_t value for a Custom error
Anna Bridge 186:707f6e361f3e 908 * @param module Module generating the error code. If its unknown, pass MBED_MODULE_UNKNOWN. See mbed_module_type_t for module types.
Anna Bridge 186:707f6e361f3e 909 * @param error_code The mbed_error_code_t code to be used in generating the mbed_error_status_t. See mbed_error_code_t for error codes.
Anna Bridge 186:707f6e361f3e 910 *
Anna Bridge 186:707f6e361f3e 911 * @code
AnnaBridge 187:0387e8f68319 912 *
Anna Bridge 186:707f6e361f3e 913 * mbed_error_status_t custom_error = MBED_MAKE_CUSTOM_ERROR( MBED_MODULE_APPLICATION, 0xDEAD//16-bit custom error code )
Anna Bridge 186:707f6e361f3e 914 *
Anna Bridge 186:707f6e361f3e 915 * @endcode
Anna Bridge 186:707f6e361f3e 916 * @note This macro generate mbed_error_status_t-es with error type set to MBED_ERROR_TYPE_CUSTOM
Anna Bridge 186:707f6e361f3e 917 *
Anna Bridge 186:707f6e361f3e 918 */
Anna Bridge 186:707f6e361f3e 919 #define MBED_MAKE_CUSTOM_ERROR(module, error_code) MAKE_MBED_ERROR(MBED_ERROR_TYPE_CUSTOM, module, error_code)
Anna Bridge 186:707f6e361f3e 920
Anna Bridge 186:707f6e361f3e 921 /**
Anna Bridge 186:707f6e361f3e 922 * Call this Macro to generate a mbed_error_status_t value for a System error
Anna Bridge 186:707f6e361f3e 923 * @param module Module generating the error code. If its unknown, pass MBED_MODULE_UNKNOWN. See mbed_module_type_t for module types.
Anna Bridge 186:707f6e361f3e 924 * @param error_code The mbed_error_code_t code to be used in generating the mbed_error_status_t. See mbed_error_code_t for error codes.
Anna Bridge 186:707f6e361f3e 925 *
Anna Bridge 186:707f6e361f3e 926 * @code
AnnaBridge 187:0387e8f68319 927 *
Anna Bridge 186:707f6e361f3e 928 * mbed_error_status_t new_error = MBED_MAKE_ERROR( MODULE_DRIVER_USB, MBED_ERROR_INITIALIZATION_FAILED )
Anna Bridge 186:707f6e361f3e 929 *
Anna Bridge 186:707f6e361f3e 930 * @endcode
Anna Bridge 186:707f6e361f3e 931 * @note This macro generate mbed_error_status_t-es with error type set to MBED_ERROR_TYPE_SYSTEM
Anna Bridge 186:707f6e361f3e 932 *
Anna Bridge 186:707f6e361f3e 933 */
Anna Bridge 186:707f6e361f3e 934 #define MBED_MAKE_ERROR(module, error_code) MBED_MAKE_SYSTEM_ERROR(module, error_code)
Anna Bridge 186:707f6e361f3e 935
Anna Bridge 186:707f6e361f3e 936 /**
Anna Bridge 186:707f6e361f3e 937 * Callback/Error hook function prototype. Applications needing a callback when an error is reported can use mbed_set_error_hook function
Anna Bridge 186:707f6e361f3e 938 * to register a callback/error hook function using the following prototype. When an error happens in the system error handling
Anna Bridge 186:707f6e361f3e 939 * implementation will invoke this callback with the mbed_error_status_t reported and the error context at the time of error.
Anna Bridge 186:707f6e361f3e 940 * @param error_ctx Error context structure associated with this error.
Anna Bridge 186:707f6e361f3e 941 * @return void
Anna Bridge 186:707f6e361f3e 942 *
Anna Bridge 186:707f6e361f3e 943 */
Anna Bridge 186:707f6e361f3e 944 typedef void (*mbed_error_hook_t)(const mbed_error_ctx *error_ctx);
Anna Bridge 186:707f6e361f3e 945
AnnaBridge 189:f392fc9709a3 946
AnnaBridge 189:f392fc9709a3 947 /**
AnnaBridge 189:f392fc9709a3 948 * Callback function for reporting error context during boot up. When MbedOS error handling system detects a fatal error
AnnaBridge 189:f392fc9709a3 949 * it will auto-reboot the system(if MBED_CONF_PLATFORM_FATAL_ERROR_AUTO_REBOOT_ENABLED is enabled) after capturing the
AnnaBridge 189:f392fc9709a3 950 * error info in special crash data RAM region. Once rebooted, MbedOS initialization routines will call this function with a pointer to
AnnaBridge 189:f392fc9709a3 951 * the captured mbed_error_ctx structure. If application implementation needs to receive this callback, mbed_error_reboot_callback
AnnaBridge 189:f392fc9709a3 952 * function should be overridden with custom implementation. By default it's defined as a WEAK function in mbed_error.c.
AnnaBridge 189:f392fc9709a3 953 * Note that this callback will be invoked before the system starts executing main() function. So the implementation of
AnnaBridge 189:f392fc9709a3 954 * the callback should be aware any resource limitations/availability of resources which are yet to be initialized by application main().
AnnaBridge 189:f392fc9709a3 955 *
AnnaBridge 189:f392fc9709a3 956 * @param error_ctx Error context structure associated with this error.
AnnaBridge 189:f392fc9709a3 957 * @return void
AnnaBridge 189:f392fc9709a3 958 *
AnnaBridge 189:f392fc9709a3 959 */
AnnaBridge 189:f392fc9709a3 960 void mbed_error_reboot_callback(mbed_error_ctx *error_context);
AnnaBridge 189:f392fc9709a3 961
AnnaBridge 189:f392fc9709a3 962 /**
AnnaBridge 189:f392fc9709a3 963 * Initialize error handling system, this is called by the mbed-os boot sequence. This is not required to be called by Application unless the boot sequence is overridden by the system implementation.
AnnaBridge 189:f392fc9709a3 964 * NOTE: If MBED_CONF_PLATFORM_FATAL_ERROR_AUTO_REBOOT_ENABLED is enabled and if the current reboot count exceeds MBED_CONF_PLATFORM_ERROR_REBOOT_MAX the system will halt when this function is called,
AnnaBridge 189:f392fc9709a3 965 * and in such cases the caller will not get the control back. Also note that calling this function may trigger mbed_error_reboot_callback() if application side overides mbed_error_reboot_callback().
AnnaBridge 189:f392fc9709a3 966 * @return MBED_SUCCESS on success.
AnnaBridge 189:f392fc9709a3 967 *
AnnaBridge 189:f392fc9709a3 968 */
AnnaBridge 189:f392fc9709a3 969
AnnaBridge 189:f392fc9709a3 970 mbed_error_status_t mbed_error_initialize(void);
AnnaBridge 189:f392fc9709a3 971
AnnaBridge 189:f392fc9709a3 972 /**
AnnaBridge 189:f392fc9709a3 973 * Call this function to retrieve the error context after a fatal error which triggered a system reboot. The function retrieves the error context stored in crash-report ram area which is preserved over reboot.
AnnaBridge 189:f392fc9709a3 974 * @param error_info Pointer to mbed_error_ctx struct allocated by the caller. This is the mbed_error_ctx info captured as part of the fatal error which triggered the reboot.
AnnaBridge 189:f392fc9709a3 975 * @return 0 or MBED_SUCCESS on success.
AnnaBridge 189:f392fc9709a3 976 * MBED_ERROR_INVALID_ARGUMENT in case of invalid error_info pointer
AnnaBridge 189:f392fc9709a3 977 * MBED_ERROR_ITEM_NOT_FOUND if no reboot context is currently captured by the system
AnnaBridge 189:f392fc9709a3 978 *
AnnaBridge 189:f392fc9709a3 979 */
AnnaBridge 189:f392fc9709a3 980 mbed_error_status_t mbed_get_reboot_error_info(mbed_error_ctx *error_info);
AnnaBridge 189:f392fc9709a3 981
AnnaBridge 189:f392fc9709a3 982 /**
AnnaBridge 189:f392fc9709a3 983 * Calling this function resets the current reboot context captured by the system(stored in special crash data RAM region).
AnnaBridge 189:f392fc9709a3 984 * @return MBED_SUCCESS on success.
AnnaBridge 189:f392fc9709a3 985 * MBED_ERROR_ITEM_NOT_FOUND if no reboot context is currently captured by the system
AnnaBridge 189:f392fc9709a3 986 */
AnnaBridge 189:f392fc9709a3 987 mbed_error_status_t mbed_reset_reboot_error_info(void);
AnnaBridge 189:f392fc9709a3 988
AnnaBridge 189:f392fc9709a3 989 /**
AnnaBridge 189:f392fc9709a3 990 * Calling this function resets the current reboot count stored as part of error context captured in special crash data RAM region.
AnnaBridge 189:f392fc9709a3 991 * The function will also update the CRC value stored as part of error context accordingly.
AnnaBridge 189:f392fc9709a3 992 * @return MBED_SUCCESS on success.
AnnaBridge 189:f392fc9709a3 993 * MBED_ERROR_ITEM_NOT_FOUND if no reboot context is currently captured by the system
AnnaBridge 189:f392fc9709a3 994 */
AnnaBridge 189:f392fc9709a3 995 mbed_error_status_t mbed_reset_reboot_count(void);
AnnaBridge 189:f392fc9709a3 996
Anna Bridge 186:707f6e361f3e 997 /**
Anna Bridge 186:707f6e361f3e 998 * Call this function to set a system error/warning. This function will log the error status with the context info and return to caller.
Anna Bridge 186:707f6e361f3e 999 *
Anna Bridge 186:707f6e361f3e 1000 * @param error_status mbed_error_status_t status to be set(See mbed_error_status_t enum above for available error status values).
Anna Bridge 186:707f6e361f3e 1001 * @param error_msg The error message to be printed out to STDIO/Serial.
Anna Bridge 186:707f6e361f3e 1002 * @param error_value Value associated with the error status. This would depend on error code/error scenario.
Anna Bridge 186:707f6e361f3e 1003 * @param filename Name of the source file originating the error( Most callers can pass __FILE__ here ).
Anna Bridge 186:707f6e361f3e 1004 * @param line_number The line number of the source file originating the error( Most callers can pass __LINE__ here ) .
Anna Bridge 186:707f6e361f3e 1005 * @return 0 or MBED_SUCCESS.
AnnaBridge 187:0387e8f68319 1006 * MBED_ERROR_INVALID_ARGUMENT if called with invalid error status/codes
Anna Bridge 186:707f6e361f3e 1007 *
Anna Bridge 186:707f6e361f3e 1008 * @code
AnnaBridge 187:0387e8f68319 1009 *
Anna Bridge 186:707f6e361f3e 1010 * mbed_error( ERROR_OUT_OF_MEMORY, "Out of memory error", 0, __FILE__, __LINE__ )
Anna Bridge 186:707f6e361f3e 1011 *
Anna Bridge 186:707f6e361f3e 1012 * @endcode
Anna Bridge 186:707f6e361f3e 1013 *
Anna Bridge 186:707f6e361f3e 1014 * @note See MBED_WARNING/MBED_ERROR macros which provides a wrapper on this API
Anna Bridge 186:707f6e361f3e 1015 */
Anna Bridge 186:707f6e361f3e 1016 mbed_error_status_t mbed_warning(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number);
Anna Bridge 186:707f6e361f3e 1017
Anna Bridge 186:707f6e361f3e 1018 /**
Anna Bridge 186:707f6e361f3e 1019 * Returns the first system error reported.
Anna Bridge 186:707f6e361f3e 1020 * @return mbed_error_status_t code logged for the first error or MBED_SUCCESS if no errors are logged.
Anna Bridge 186:707f6e361f3e 1021 *
Anna Bridge 186:707f6e361f3e 1022 */
Anna Bridge 186:707f6e361f3e 1023 mbed_error_status_t mbed_get_first_error(void);
Anna Bridge 186:707f6e361f3e 1024
Anna Bridge 186:707f6e361f3e 1025 /**
Anna Bridge 186:707f6e361f3e 1026 * Returns the most recent system error reported.
Anna Bridge 186:707f6e361f3e 1027 * @return mbed_error_status_t code logged for the last error or MBED_SUCCESS if no errors are logged.
Anna Bridge 186:707f6e361f3e 1028 *
Anna Bridge 186:707f6e361f3e 1029 */
Anna Bridge 186:707f6e361f3e 1030 mbed_error_status_t mbed_get_last_error(void);
Anna Bridge 186:707f6e361f3e 1031
Anna Bridge 186:707f6e361f3e 1032 /**
Anna Bridge 186:707f6e361f3e 1033 * Returns the number of system errors reported after boot.
Anna Bridge 186:707f6e361f3e 1034 * @return int Number of errors reported.
Anna Bridge 186:707f6e361f3e 1035 *
Anna Bridge 186:707f6e361f3e 1036 */
Anna Bridge 186:707f6e361f3e 1037 int mbed_get_error_count(void);
Anna Bridge 186:707f6e361f3e 1038
Anna Bridge 186:707f6e361f3e 1039 /**
Anna Bridge 186:707f6e361f3e 1040 * Call this function to set a fatal system error and halt the system. This function will log the fatal error with the context info and prints the error report and halts the system.
AnnaBridge 187:0387e8f68319 1041 *
Anna Bridge 186:707f6e361f3e 1042 * @param error_status mbed_error_status_t status to be set(See mbed_error_status_t enum above for available error status values).
Anna Bridge 186:707f6e361f3e 1043 * @param error_msg The error message to be printed out to STDIO/Serial.
Anna Bridge 186:707f6e361f3e 1044 * @param error_value Value associated with the error status. This would depend on error code/error scenario.
Anna Bridge 186:707f6e361f3e 1045 * @param filename Name of the source file originating the error( Most callers can pass __FILE__ here ).
Anna Bridge 186:707f6e361f3e 1046 * @param line_number The line number of the source file originating the error( Most callers can pass __LINE__ here ) .
AnnaBridge 189:f392fc9709a3 1047 * @return Does not return.
Anna Bridge 186:707f6e361f3e 1048 *
Anna Bridge 186:707f6e361f3e 1049 * @code
AnnaBridge 187:0387e8f68319 1050 *
Anna Bridge 186:707f6e361f3e 1051 * mbed_error( MBED_ERROR_PROHIBITED_OPERATION, "Prohibited operation tried", 0, __FILE__, __LINE__ )
Anna Bridge 186:707f6e361f3e 1052 *
Anna Bridge 186:707f6e361f3e 1053 * @endcode
Anna Bridge 186:707f6e361f3e 1054 *
Anna Bridge 186:707f6e361f3e 1055 * @note See MBED_WARNING/MBED_ERROR macros which provides a wrapper on this API
Anna Bridge 186:707f6e361f3e 1056 */
AnnaBridge 189:f392fc9709a3 1057 MBED_NORETURN mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number);
Anna Bridge 186:707f6e361f3e 1058
Anna Bridge 186:707f6e361f3e 1059 /**
AnnaBridge 187:0387e8f68319 1060 * Registers an application defined error callback with the error handling system.
Anna Bridge 186:707f6e361f3e 1061 * This function will be called with error context info whenever system handles a mbed_error/mbed_warning call
Anna Bridge 186:707f6e361f3e 1062 * NOTE: This function should be implemented for re-entrancy as multiple threads may invoke mbed_error which may cause error hook to be called.
Anna Bridge 186:707f6e361f3e 1063 * @param custom_error_hook mbed_error_status_t status to be set(See mbed_error_status_t enum above for available error status values).
Anna Bridge 186:707f6e361f3e 1064 * @return 0 or MBED_SUCCESS on success.
Anna Bridge 186:707f6e361f3e 1065 * MBED_ERROR_INVALID_ARGUMENT in case of NULL for custom_error_hook
Anna Bridge 186:707f6e361f3e 1066 *
Anna Bridge 186:707f6e361f3e 1067 * @code
AnnaBridge 187:0387e8f68319 1068 *
Anna Bridge 186:707f6e361f3e 1069 * mbed_error_status_t my_custom_error_hook(mbed_error_status_t error_status, const mbed_error_ctx *error_ctx) {
Anna Bridge 186:707f6e361f3e 1070 * //Do something with the error_status or error_ctx
Anna Bridge 186:707f6e361f3e 1071 * }
Anna Bridge 186:707f6e361f3e 1072 *
Anna Bridge 186:707f6e361f3e 1073 * mbed_set_error_hook( my_custom_error_hook )
Anna Bridge 186:707f6e361f3e 1074 *
Anna Bridge 186:707f6e361f3e 1075 * @endcode
Anna Bridge 186:707f6e361f3e 1076 * @note The erro hook function implementation should be re-entrant.
Anna Bridge 186:707f6e361f3e 1077 *
Anna Bridge 186:707f6e361f3e 1078 */
Anna Bridge 186:707f6e361f3e 1079 mbed_error_status_t mbed_set_error_hook(mbed_error_hook_t custom_error_hook);
Anna Bridge 186:707f6e361f3e 1080
Anna Bridge 186:707f6e361f3e 1081 /**
Anna Bridge 186:707f6e361f3e 1082 * Reads the first error context information captured.
Anna Bridge 186:707f6e361f3e 1083 * @param error_info This is the mbed_error_context info captured as part of the first mbed_error call. The caller should pass a pointer to mbed_error_context struct allocated by the caller.
Anna Bridge 186:707f6e361f3e 1084 * @return 0 or MBED_SUCCESS on success.
Anna Bridge 186:707f6e361f3e 1085 * MBED_ERROR_INVALID_ARGUMENT in case of invalid index
Anna Bridge 186:707f6e361f3e 1086 *
Anna Bridge 186:707f6e361f3e 1087 */
Anna Bridge 186:707f6e361f3e 1088 mbed_error_status_t mbed_get_first_error_info(mbed_error_ctx *error_info);
Anna Bridge 186:707f6e361f3e 1089
Anna Bridge 186:707f6e361f3e 1090 /**
Anna Bridge 186:707f6e361f3e 1091 * Reads the last error context information captured.
Anna Bridge 186:707f6e361f3e 1092 * @param error_info This is the mbed_error_context info captured as part of the last mbed_error call. The caller should pass a pointer to mbed_error_context struct allocated by the caller.
Anna Bridge 186:707f6e361f3e 1093 * @return 0 or MBED_ERROR_SUCCESS on success.
Anna Bridge 186:707f6e361f3e 1094 * MBED_ERROR_INVALID_ARGUMENT in case of invalid index
Anna Bridge 186:707f6e361f3e 1095 *
Anna Bridge 186:707f6e361f3e 1096 */
Anna Bridge 186:707f6e361f3e 1097 mbed_error_status_t mbed_get_last_error_info(mbed_error_ctx *error_info);
Anna Bridge 186:707f6e361f3e 1098
Anna Bridge 186:707f6e361f3e 1099 /**
Anna Bridge 186:707f6e361f3e 1100 * Clears the last error, first error, error count and all entries in the error history.
Anna Bridge 186:707f6e361f3e 1101 * @return 0 or MBED_SUCCESS on success.
Anna Bridge 186:707f6e361f3e 1102 *
Anna Bridge 186:707f6e361f3e 1103 */
Anna Bridge 186:707f6e361f3e 1104 mbed_error_status_t mbed_clear_all_errors(void);
Anna Bridge 186:707f6e361f3e 1105
Anna Bridge 186:707f6e361f3e 1106 /**
Anna Bridge 186:707f6e361f3e 1107 * Generates a mbed_error_status_t value based on passed in values for type, module and error code.
Anna Bridge 186:707f6e361f3e 1108 * @param error_type Error type based on mbed_error_type_t enum.
Anna Bridge 186:707f6e361f3e 1109 * @param module Module type based on mbed_module_type_t enum.
Anna Bridge 186:707f6e361f3e 1110 * @param error_code Error codes defined by mbed_error_code_t enum
Anna Bridge 186:707f6e361f3e 1111 * @return 0 or MBED_ERROR_SUCCESS on success.
Anna Bridge 186:707f6e361f3e 1112 *
Anna Bridge 186:707f6e361f3e 1113 */
Anna Bridge 186:707f6e361f3e 1114 mbed_error_status_t mbed_make_error(mbed_error_type_t error_type, mbed_module_type_t module, mbed_error_code_t error_code);
Anna Bridge 186:707f6e361f3e 1115
Anna Bridge 186:707f6e361f3e 1116 /**
Anna Bridge 186:707f6e361f3e 1117 * Returns the current number of entries in the error history, if there has been more than max number of errors logged the number returned will be max depth of error history.
Anna Bridge 186:707f6e361f3e 1118 * @return Current number of entries in the error history.
Anna Bridge 186:707f6e361f3e 1119 *
Anna Bridge 186:707f6e361f3e 1120 */
Anna Bridge 186:707f6e361f3e 1121 int mbed_get_error_hist_count(void);
Anna Bridge 186:707f6e361f3e 1122
Anna Bridge 186:707f6e361f3e 1123 /**
Anna Bridge 186:707f6e361f3e 1124 * Reads the error context information for a specific error from error history, specified by the index.
AnnaBridge 187:0387e8f68319 1125 *
Anna Bridge 186:707f6e361f3e 1126 * @param index index of the error context entry in the history to be retrieved.\n
Anna Bridge 186:707f6e361f3e 1127 * The number of entries in the error history is configured during build and the max index depends on max depth of error history.\n
Anna Bridge 186:707f6e361f3e 1128 * index = 0 points to the oldest entry in the history, and index = (max history depth - 1) points to the latest entry in the error history.\n
Anna Bridge 186:707f6e361f3e 1129 * @param error_info This is the mbed_error_context info captured as part of the error history. The caller should pass a pointer to mbed_error_context struct allocated by the caller.
Anna Bridge 186:707f6e361f3e 1130 * @return 0 or MBED_SUCCESS on success.
Anna Bridge 186:707f6e361f3e 1131 * MBED_ERROR_INVALID_ARGUMENT in case of invalid index
Anna Bridge 186:707f6e361f3e 1132 *
Anna Bridge 186:707f6e361f3e 1133 */
Anna Bridge 186:707f6e361f3e 1134 mbed_error_status_t mbed_get_error_hist_info(int index, mbed_error_ctx *error_info);
Anna Bridge 186:707f6e361f3e 1135
Anna Bridge 186:707f6e361f3e 1136 /**
Anna Bridge 186:707f6e361f3e 1137 * Saves the error history information to a file
AnnaBridge 187:0387e8f68319 1138 *
Anna Bridge 186:707f6e361f3e 1139 * @param path path to the file in the filesystem
Anna Bridge 186:707f6e361f3e 1140 * @return 0 or MBED_ERROR_SUCCESS on success.
Anna Bridge 186:707f6e361f3e 1141 * MBED_ERROR_WRITE_FAILED if writing to file failed
AnnaBridge 187:0387e8f68319 1142 * MBED_ERROR_INVALID_ARGUMENT if path is not valid
Anna Bridge 186:707f6e361f3e 1143 *
Anna Bridge 186:707f6e361f3e 1144 * @note Filesystem support is required in order for this function to work.
Anna Bridge 186:707f6e361f3e 1145 *
Anna Bridge 186:707f6e361f3e 1146 */
Anna Bridge 186:707f6e361f3e 1147 mbed_error_status_t mbed_save_error_hist(const char *path);
<> 149:156823d33999 1148
<> 149:156823d33999 1149 #ifdef __cplusplus
<> 149:156823d33999 1150 }
<> 149:156823d33999 1151 #endif
<> 149:156823d33999 1152
<> 149:156823d33999 1153 #endif
<> 149:156823d33999 1154
<> 149:156823d33999 1155 /** @}*/
AnnaBridge 178:79309dc6340a 1156 /** @}*/
Anna Bridge 186:707f6e361f3e 1157
Anna Bridge 186:707f6e361f3e 1158