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#ifndef MOCK_NATIVE_INCLUDE_ERRORS_H
18#define MOCK_NATIVE_INCLUDE_ERRORS_H
19
20#include <cerrno>
21
22namespace OHOS {
23/**
24 * ErrCode layout
25 *
26 * +-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
27 * | 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|
28 * +-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
29 * |Field|Reserved|        Subsystem      |  Module      |                  Code                         |
30 * +-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
31 */
32
33using ErrCode = int;
34
35enum {
36    SUBSYS_COMMON               = 0,
37    SUBSYS_AAFWK                = 1,
38    SUBSYS_ACCOUNT              = 2,
39    SUBSYS_AI                   = 3,
40    SUBSYS_APPEXECFWK           = 4,
41    SUBSYS_APPLICATIONS         = 5,
42    SUBSYS_ARVR                 = 6,
43    SUBSYS_ARVRHARDWARE         = 7,
44    SUBSYS_BARRIERFREE          = 8,
45    SUBSYS_BIOMETRICS           = 9,
46    SUBSYS_CCRUNTIME            = 10,
47    SUBSYS_COMMUNICATION        = 11,
48    SUBSYS_DFX                  = 12,
49    SUBSYS_DISTRIBUTEDDATAMNG   = 13,
50    SUBSYS_DISTRIBUTEDSCHEDULE  = 14,
51    SUBSYS_DRIVERS              = 15,
52    SUBSYS_GLOBAL               = 16,
53    SUBSYS_GRAPHIC              = 17,
54    SUBSYS_HBS                  = 18,
55    SUBSYS_IAWARE               = 19,
56    SUBSYS_IDE                  = 20,
57    SUBSYS_INTELLIACCESSORIES   = 21,
58    SUBSYS_INTELLISPEAKER       = 22,
59    SUBSYS_INTELLITV            = 23,
60    SUBSYS_IOT                  = 24,
61    SUBSYS_IOTHARDWARE          = 25,
62    SUBSYS_IVIHARDWARE          = 26,
63    SUBSYS_KERNEL               = 27,
64    SUBSYS_LOCATION             = 28,
65    SUBSYS_MSDP                 = 29,
66    SUBSYS_MULTIMEDIA           = 30,
67    SUBSYS_MULTIMODAINPUT       = 31,
68    SUBSYS_NOTIFICATION         = 32,
69    SUBSYS_POWERMNG             = 33,
70    SUBSYS_ROUTER               = 34,
71    SUBSYS_SECURITY             = 35,
72    SUBSYS_SENSORS              = 36,
73    SUBSYS_SMALLSERVICES        = 37,
74    SUBSYS_SOURCECODETRANSFORMER = 38,
75    SUBSYS_STARTUP              = 39,
76    SUBSYS_TELEPONY             = 40,
77    SUBSYS_UPDATE               = 41,
78    SUBSYS_USB                  = 42,
79    SUBSYS_WEARABLE             = 43,
80    SUBSYS_WEARABLEHARDWARE     = 44,
81    SUBSYS_IVI                  = 45
82    // new type
83};
84
85// be used to init the subsystem errorno.
86constexpr ErrCode ErrCodeOffset(unsigned int subsystem, unsigned int module = 0)
87{
88    constexpr int SUBSYSTEM_BIT_NUM = 21;
89    constexpr int MODULE_BIT_NUM = 16;
90    return (subsystem << SUBSYSTEM_BIT_NUM) | (module << MODULE_BIT_NUM);
91}
92
93// offset of common error, only be used in this file.
94constexpr ErrCode BASE_ERR_OFFSET = ErrCodeOffset(SUBSYS_COMMON);
95
96enum {
97    ERR_OK                = 0,
98    ERR_NO_MEMORY         = BASE_ERR_OFFSET + ENOMEM,
99    ERR_INVALID_OPERATION = BASE_ERR_OFFSET + ENOSYS,
100    ERR_INVALID_VALUE     = BASE_ERR_OFFSET + EINVAL,
101    ERR_NAME_NOT_FOUND    = BASE_ERR_OFFSET + ENOENT,
102    ERR_PERMISSION_DENIED = BASE_ERR_OFFSET + EPERM,
103    ERR_NO_INIT           = BASE_ERR_OFFSET + ENODEV,
104    ERR_ALREADY_EXISTS    = BASE_ERR_OFFSET + EEXIST,
105    ERR_DEAD_OBJECT       = BASE_ERR_OFFSET + EPIPE,
106    ERR_OVERFLOW          = BASE_ERR_OFFSET + EOVERFLOW,
107    ERR_ENOUGH_DATA       = BASE_ERR_OFFSET + ENODATA,
108    ERR_WOULD_BLOCK       = BASE_ERR_OFFSET + EWOULDBLOCK,
109    ERR_TIMED_OUT         = BASE_ERR_OFFSET + ETIMEDOUT
110};
111
112#define SUCCEEDED(errCode) ((errCode) == ERR_OK)
113#define FAILED(errCode) ((errCode) != ERR_OK)
114} // namespace OHOS
115
116#endif  // MOCK_NATIVE_INCLUDE_ERRORS_H
117