Initial commit

Dependencies:   FastPWM

Committer:
lypinator
Date:
Wed Sep 16 01:11:49 2020 +0000
Revision:
0:bb348c97df44
Added PWM

Who changed what in which revision?

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