Files
2024-09-27 19:16:49 +08:00

151 lines
5.1 KiB
C++

/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* 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 errors.h
*
* @brief Provides format of error code in OpenHarmony.
*/
#ifndef UTILS_BASE_ERRORS_H
#define UTILS_BASE_ERRORS_H
#include <cerrno>
namespace OHOS {
/**
* ErrCode layout
*
* +-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* | 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|
* +-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* |Field|Reserved| Subsystem | Module | Code |
* +-----+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
*/
using ErrCode = int;
/**
* @brief Enumerates the values of the <b>Subsystem</b> segment
* of ErrCode for every subsystem.
*/
enum {
SUBSYS_COMMON = 0,
SUBSYS_AAFWK = 1,
SUBSYS_ACCOUNT = 2,
SUBSYS_AI = 3,
SUBSYS_APPEXECFWK = 4,
SUBSYS_APPLICATIONS = 5,
SUBSYS_ARVR = 6,
SUBSYS_ARVRHARDWARE = 7,
SUBSYS_BARRIERFREE = 8,
SUBSYS_BIOMETRICS = 9,
SUBSYS_CCRUNTIME = 10,
SUBSYS_COMMUNICATION = 11,
SUBSYS_DFX = 12,
SUBSYS_DISTRIBUTEDDATAMNG = 13,
SUBSYS_DISTRIBUTEDSCHEDULE = 14,
SUBSYS_DRIVERS = 15,
SUBSYS_GLOBAL = 16,
SUBSYS_GRAPHIC = 17,
SUBSYS_HBS = 18,
SUBSYS_IAWARE = 19,
SUBSYS_IDE = 20,
SUBSYS_INTELLIACCESSORIES = 21,
SUBSYS_INTELLISPEAKER = 22,
SUBSYS_INTELLITV = 23,
SUBSYS_IOT = 24,
SUBSYS_IOTHARDWARE = 25,
SUBSYS_IVIHARDWARE = 26,
SUBSYS_KERNEL = 27,
SUBSYS_LOCATION = 28,
SUBSYS_MSDP = 29,
SUBSYS_MULTIMEDIA = 30,
SUBSYS_MULTIMODAINPUT = 31,
SUBSYS_NOTIFICATION = 32,
SUBSYS_POWERMNG = 33,
SUBSYS_ROUTER = 34,
SUBSYS_SECURITY = 35,
SUBSYS_SENSORS = 36,
SUBSYS_SMALLSERVICES = 37,
SUBSYS_SOURCECODETRANSFORMER = 38,
SUBSYS_STARTUP = 39,
SUBSYS_TELEPONY = 40,
SUBSYS_UPDATE = 41,
SUBSYS_USB = 42,
SUBSYS_WEARABLE = 43,
SUBSYS_WEARABLEHARDWARE = 44,
SUBSYS_IVI = 45,
SUBSYS_DISTRIBUTEDHARDWARE = 46,
SUBSYS_DEVICEPROFILE = 47,
SUBSYS_CUSTOMIZATION = 48,
SUBSYS_FILEMANAGEMENT = 49,
// new type
};
// be used to init the subsystem errorno.
/**
* @brief Generates the base error codes for a specified module
* in specified subsystem.
*
* @param subsystem Indicates the subsystem.
* @param module Indicates the module.
* The default value is 0.
* @return Returns the base error codes of the specified module.
*/
constexpr ErrCode ErrCodeOffset(unsigned int subsystem, unsigned int module = 0)
{
constexpr int SUBSYSTEM_BIT_NUM = 21;
constexpr int MODULE_BIT_NUM = 16;
return (subsystem << SUBSYSTEM_BIT_NUM) | (module << MODULE_BIT_NUM);
}
// offset of common error, only be used in this file.
/**
* @brief Provides the common base error codes, which apply to all modules,
* in the commonlibrary subsystem.
*/
constexpr ErrCode BASE_ERR_OFFSET = ErrCodeOffset(SUBSYS_COMMON);
/**
* @brief Enumerates the common base error codes
* in the commonlibrary subsystem.
*
* @see Related error codes defined in errno.h
*/
enum {
ERR_OK = 0,
ERR_NO_MEMORY = BASE_ERR_OFFSET + ENOMEM,
ERR_INVALID_OPERATION = BASE_ERR_OFFSET + ENOSYS,
ERR_INVALID_VALUE = BASE_ERR_OFFSET + EINVAL,
ERR_NAME_NOT_FOUND = BASE_ERR_OFFSET + ENOENT,
ERR_PERMISSION_DENIED = BASE_ERR_OFFSET + EPERM,
ERR_NO_INIT = BASE_ERR_OFFSET + ENODEV,
ERR_ALREADY_EXISTS = BASE_ERR_OFFSET + EEXIST,
ERR_DEAD_OBJECT = BASE_ERR_OFFSET + EPIPE,
ERR_OVERFLOW = BASE_ERR_OFFSET + EOVERFLOW,
ERR_ENOUGH_DATA = BASE_ERR_OFFSET + ENODATA,
ERR_WOULD_BLOCK = BASE_ERR_OFFSET + EWOULDBLOCK,
ERR_TIMED_OUT = BASE_ERR_OFFSET + ETIMEDOUT
};
#define SUCCEEDED(errCode) ((errCode) == ERR_OK)
#define FAILED(errCode) ((errCode) != ERR_OK)
}
#endif