Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Thu Oct 11 02:27:46 2018 +0000
Revision:
3:f3764f852aa8
Parent:
0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;

Who changed what in which revision?

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