summaryrefslogtreecommitdiff
path: root/bsp/ck802/libraries/include/drv_errno.h
blob: c7187eb0dafe7cc2436639fead261e5205881a56 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
 * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/******************************************************************************
 * @file     drv_errno.h
 * @brief    header file for error num
 * @version  V1.0
 * @date     02. June 2017
 ******************************************************************************/

/******************************************************************************
 * @file
 * @details     Error code field difination
 *              Error number is devided into 4 field:
 *              0x8******* : 8  : means < 0
 *              0x*A****** : A  : means type number: bsp(1), driver(2), hal(3), app(4)...
 *              0x**AB**** : AB : means module number: timer(1), rtc(2), ....
 *              0x****AB** : AB : means API number: module API's definition
 *              0x******AB : AB : means sub error number
 *                                  0 ~ 0x80 is common error such as EPERM, refer to errno.h
 *                                  0x80 ~ 0xFF is specific error, can difine in module
 *
 *              For example 0x81020113 means:
 *                  1. 0x8*******: value < 0, means error happened
 *                  2. 0x*1******: type number is 1, means bsp error
 *                  3. 0x**02****: module number is 02, means RTC error
 *                  4. 0x****01**: module API is 01, means RTC's init
 *                  5. 0x******13: specific error is 0x13=19=ENODEV, means no such device
 *
 *              For special bsp module example, you can return:
 *                  (BSP_ERRNO_TIMER_BASE | BSP_API_RTC_INIT | EPERM)    for rtc init error
 *                  (BSP_ERRNO_TIMER_BASE | BSP_API_RTC_SETTIME | ENXIO) for rtc settime error
 *
 *              Here list the common sub error number (0x******AB) below(0~127 defined in errno.h as standard err code):
 *              Code          Hex    Deci   Meaning
 *              -------------------------------------------------------
 *              EPERM         0x01    1   Operation not permitted
 *              EIO           0x05    5   I/O error
 *              ENXIO         0x06    6   No such device or address
 *              ENOMEM        0x0C   12   Out of memory
 *              EACCES        0x0D   13   Permission denied
 *              EINVAL        0x16   22      Invalid argument
 *              ...
 *              SPEC_ERR_BASE 0x80  128   module special error number base
 *              ...
 *              ERRNO_MAX     0xFF   --   Max sub error number
 ******************************************************************************/

#ifndef _DRV_ERRNO_H_
#define _DRV_ERRNO_H_


#include <errno.h>

#define ERRNO_DRV_START 0X80

/* drvier General return codes */
typedef enum {
    EDRV = ERRNO_DRV_START,   ///< Unspecified error
    EDRV_BUSY,                ///< Driver is busy
    EDRV_TIMEOUT,             ///< Timeout occurred
    EDRV_UNSUPPORTED,         ///< Operation not supported
    EDRV_PARAMETER,           ///< Parameter error
    EDRV_SPECIFIC             ///< Start of driver specific errors
} drv_common_err_e;


/** Get error type */
#define GET_ERROR_TYPE(errno) \
    (error & 0xFF000000 >> 24)
/** Get error module */
#define GET_ERROR_MODULE(error) \
    (error & 0x00FF0000 >> 16)
/** Get error API */
#define GET_ERROR_API(error) \
    (error & 0x0000FF00 >> 8)
/** Get errno */
#define GET_ERROR_NUM(error) \
    (error & 0x000000FF)

#ifndef CSI_DRV_ERRNO_BASE
/** means bsp errors */
#define CSI_DRV_ERRNO_BASE          0x81000000
#endif

/** driver module id definition*/
#define CSI_DRV_ERRNO_GPIO_BASE     0x81010000
#define CSI_DRV_ERRNO_USART_BASE    0x81020000
#define CSI_DRV_ERRNO_SPI_BASE      0x81030000
#define CSI_DRV_ERRNO_I2C_BASE      0x81040000
#define CSI_DRV_ERRNO_FLASH_BASE    0x81050000
#define CSI_DRV_ERRNO_PWM_BASE      0x81060000
#define CSI_DRV_ERRNO_RTC_BASE      0x81070000
#define CSI_DRV_ERRNO_TIMER_BASE    0x81080000
#define CSI_DRV_ERRNO_WDT_BASE      0x81090000
#define CSI_DRV_ERRNO_AES_BASE      0x810A0000
#define CSI_DRV_ERRNO_CRC_BASE      0x810B0000
#define CSI_DRV_ERRNO_RSA_BASE      0x810C0000
#define CSI_DRV_ERRNO_SHA_BASE      0x810D0000
#define CSI_DRV_ERRNO_TRNG_BASE     0x810E0000
#define CSI_DRV_ERRNO_EFLASH_BASE   0x810F0000
#define CSI_DRV_ERRNO_DMA_BASE      0x81100000

#endif /* CSI_DRV_ERRNO_H */