Ignore:
Timestamp:
Apr 5, 2019, 9:26:53 PM (5 years ago)
Author:
coas-nagasima
Message:

mbed関連を更新
シリアルドライバをmbedのHALを使うよう変更
ファイルディスクリプタの処理を更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asp3_tinet_ecnl_arm/trunk/asp3_dcre/mbed/platform/mbed_error.h

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