The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
Parent:
170:e95d10626187
Child:
172:65be27845400
mbed library. Release version 164

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