1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 /**
17 * @file errors.h
18 *
19 * @brief Provides format of error code in OpenHarmony.
20 */
21
22 #ifndef UTILS_BASE_ERRORS_H
23 #define UTILS_BASE_ERRORS_H
24
25 #include <cerrno>
26
27 namespace OHOS {
28
29 /**
30 * ErrCode layout
31 *
32 * +-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
33 * | Bit |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00|
34 * +-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
35 * |Field|Reserved| Subsystem | Module | Code |
36 * +-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
37 */
38
39 using ErrCode = int;
40
41 /**
42 * @brief Enumerates the values of the <b>Subsystem</b> segment
43 * of ErrCode for every subsystem.
44 */
45 enum {
46 SUBSYS_COMMON = 0,
47 SUBSYS_AAFWK = 1,
48 SUBSYS_ACCOUNT = 2,
49 SUBSYS_AI = 3,
50 SUBSYS_APPEXECFWK = 4,
51 SUBSYS_APPLICATIONS = 5,
52 SUBSYS_ARVR = 6,
53 SUBSYS_ARVRHARDWARE = 7,
54 SUBSYS_BARRIERFREE = 8,
55 SUBSYS_BIOMETRICS = 9,
56 SUBSYS_CCRUNTIME = 10,
57 SUBSYS_COMMUNICATION = 11,
58 SUBSYS_DFX = 12,
59 SUBSYS_DISTRIBUTEDDATAMNG = 13,
60 SUBSYS_DISTRIBUTEDSCHEDULE = 14,
61 SUBSYS_DRIVERS = 15,
62 SUBSYS_GLOBAL = 16,
63 SUBSYS_GRAPHIC = 17,
64 SUBSYS_HBS = 18,
65 SUBSYS_IAWARE = 19,
66 SUBSYS_IDE = 20,
67 SUBSYS_INTELLIACCESSORIES = 21,
68 SUBSYS_INTELLISPEAKER = 22,
69 SUBSYS_INTELLITV = 23,
70 SUBSYS_IOT = 24,
71 SUBSYS_IOTHARDWARE = 25,
72 SUBSYS_IVIHARDWARE = 26,
73 SUBSYS_KERNEL = 27,
74 SUBSYS_LOCATION = 28,
75 SUBSYS_MSDP = 29,
76 SUBSYS_MULTIMEDIA = 30,
77 SUBSYS_MULTIMODAINPUT = 31,
78 SUBSYS_NOTIFICATION = 32,
79 SUBSYS_POWERMNG = 33,
80 SUBSYS_ROUTER = 34,
81 SUBSYS_SECURITY = 35,
82 SUBSYS_SENSORS = 36,
83 SUBSYS_SMALLSERVICES = 37,
84 SUBSYS_SOURCECODETRANSFORMER = 38,
85 SUBSYS_STARTUP = 39,
86 SUBSYS_TELEPONY = 40,
87 SUBSYS_UPDATE = 41,
88 SUBSYS_USB = 42,
89 SUBSYS_WEARABLE = 43,
90 SUBSYS_WEARABLEHARDWARE = 44,
91 SUBSYS_IVI = 45,
92 SUBSYS_DISTRIBUTEDHARDWARE = 46,
93 SUBSYS_DEVICEPROFILE = 47,
94 SUBSYS_CUSTOMIZATION = 48,
95 SUBSYS_FILEMANAGEMENT = 49,
96 // new type
97 };
98
99 // be used to init the subsystem errorno.
100 /**
101 * @brief Generates the base error codes for a specified module
102 * in specified subsystem.
103 *
104 * @param subsystem Indicates the subsystem.
105 * @param module Indicates the module.
106 * The default value is 0.
107 * @return Returns the base error codes of the specified module.
108 */
ErrCodeOffset(unsigned int subsystem, unsigned int module = 0)109 constexpr ErrCode ErrCodeOffset(unsigned int subsystem, unsigned int module = 0)
110 {
111 constexpr int SUBSYSTEM_BIT_NUM = 21;
112 constexpr int MODULE_BIT_NUM = 16;
113 return (subsystem << SUBSYSTEM_BIT_NUM) | (module << MODULE_BIT_NUM);
114 }
115
116 // offset of common error, only be used in this file.
117 /**
118 * @brief Provides the common base error codes, which apply to all modules,
119 * in the commonlibrary subsystem.
120 */
121 constexpr ErrCode BASE_ERR_OFFSET = ErrCodeOffset(SUBSYS_COMMON);
122
123 /**
124 * @brief Enumerates the common base error codes
125 * in the commonlibrary subsystem.
126 *
127 * @see Related error codes defined in errno.h
128 */
129 enum {
130 ERR_OK = 0,
131 ERR_NO_MEMORY = BASE_ERR_OFFSET + ENOMEM,
132 ERR_INVALID_OPERATION = BASE_ERR_OFFSET + ENOSYS,
133 ERR_INVALID_VALUE = BASE_ERR_OFFSET + EINVAL,
134 ERR_NAME_NOT_FOUND = BASE_ERR_OFFSET + ENOENT,
135 ERR_PERMISSION_DENIED = BASE_ERR_OFFSET + EPERM,
136 ERR_NO_INIT = BASE_ERR_OFFSET + ENODEV,
137 ERR_ALREADY_EXISTS = BASE_ERR_OFFSET + EEXIST,
138 ERR_DEAD_OBJECT = BASE_ERR_OFFSET + EPIPE,
139 ERR_OVERFLOW = BASE_ERR_OFFSET + EOVERFLOW,
140 ERR_ENOUGH_DATA = BASE_ERR_OFFSET + ENODATA,
141 ERR_WOULD_BLOCK = BASE_ERR_OFFSET + EWOULDBLOCK,
142 ERR_TIMED_OUT = BASE_ERR_OFFSET + ETIMEDOUT
143 };
144
145 #define SUCCEEDED(errCode) ((errCode) == ERR_OK)
146 #define FAILED(errCode) ((errCode) != ERR_OK)
147
148 }
149
150 #endif
151