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 */ 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