mbed official / mbed

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

Committer:
Anna Bridge
Date:
Fri Jun 22 15:38:59 2018 +0100
Revision:
169:a7c7b631e539
Parent:
158:1c57384330a6
Child:
170:e95d10626187
mbed library. Release version 162

Who changed what in which revision?

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