1f857971dSopenharmony_ci/* 2f857971dSopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 3f857971dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f857971dSopenharmony_ci * you may not use this file except in compliance with the License. 5f857971dSopenharmony_ci * You may obtain a copy of the License at 6f857971dSopenharmony_ci * 7f857971dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f857971dSopenharmony_ci * 9f857971dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f857971dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f857971dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f857971dSopenharmony_ci * See the License for the specific language governing permissions and 13f857971dSopenharmony_ci * limitations under the License. 14f857971dSopenharmony_ci */ 15f857971dSopenharmony_ci 16f857971dSopenharmony_ci#ifndef DEVICESTATUS_COMMON_H 17f857971dSopenharmony_ci#define DEVICESTATUS_COMMON_H 18f857971dSopenharmony_ci 19f857971dSopenharmony_ci#include <cstdint> 20f857971dSopenharmony_ci#include <type_traits> 21f857971dSopenharmony_ci 22f857971dSopenharmony_ci#include "devicestatus_errors.h" 23f857971dSopenharmony_ci#include "fi_log.h" 24f857971dSopenharmony_ci 25f857971dSopenharmony_cinamespace OHOS { 26f857971dSopenharmony_cinamespace Msdp { 27f857971dSopenharmony_cinamespace DeviceStatus { 28f857971dSopenharmony_ci#define DEV_RET_IF_NULL_WITH_RET(cond, retval) if (cond) {return (retval);} 29f857971dSopenharmony_ci#define DEV_RET_IF_NULL(cond) if (cond) {return;} 30f857971dSopenharmony_ci#define DEV_RET_IF_NULL_WITH_LOG(cond, loginfo) \ 31f857971dSopenharmony_ci do { \ 32f857971dSopenharmony_ci if (cond) { \ 33f857971dSopenharmony_ci FI_HILOGE("%{public}s "#loginfo" ", __func__); \ 34f857971dSopenharmony_ci return; \ 35f857971dSopenharmony_ci } \ 36f857971dSopenharmony_ci } while (0) \ 37f857971dSopenharmony_ci 38f857971dSopenharmony_ci#define WRITEBOOL(parcel, data, ...) \ 39f857971dSopenharmony_ci do { \ 40f857971dSopenharmony_ci if (!(parcel).WriteBool(data)) { \ 41f857971dSopenharmony_ci FI_HILOGE("WriteBool "#data" failed"); \ 42f857971dSopenharmony_ci return __VA_ARGS__; \ 43f857971dSopenharmony_ci } \ 44f857971dSopenharmony_ci } while (0) 45f857971dSopenharmony_ci 46f857971dSopenharmony_ci#define WRITEINT32(parcel, data, ...) \ 47f857971dSopenharmony_ci do { \ 48f857971dSopenharmony_ci if (!(parcel).WriteInt32(data)) { \ 49f857971dSopenharmony_ci FI_HILOGE("WriteInt32 "#data" failed"); \ 50f857971dSopenharmony_ci return __VA_ARGS__; \ 51f857971dSopenharmony_ci } \ 52f857971dSopenharmony_ci } while (0) 53f857971dSopenharmony_ci 54f857971dSopenharmony_ci#define WRITEINT64(parcel, data, ...) \ 55f857971dSopenharmony_ci do { \ 56f857971dSopenharmony_ci if (!(parcel).WriteInt64(data)) { \ 57f857971dSopenharmony_ci FI_HILOGE("WriteInt64 "#data" failed"); \ 58f857971dSopenharmony_ci return __VA_ARGS__; \ 59f857971dSopenharmony_ci } \ 60f857971dSopenharmony_ci } while (0) 61f857971dSopenharmony_ci 62f857971dSopenharmony_ci#define WRITEUINT32(parcel, data, ...) \ 63f857971dSopenharmony_ci do { \ 64f857971dSopenharmony_ci if (!(parcel).WriteUint32(data)) { \ 65f857971dSopenharmony_ci FI_HILOGE("WriteUint32 "#data" failed"); \ 66f857971dSopenharmony_ci return __VA_ARGS__; \ 67f857971dSopenharmony_ci } \ 68f857971dSopenharmony_ci } while (0) 69f857971dSopenharmony_ci 70f857971dSopenharmony_ci#define WRITEDOUBLE(parcel, data, ...) \ 71f857971dSopenharmony_ci do { \ 72f857971dSopenharmony_ci if (!(parcel).WriteDouble(data)) { \ 73f857971dSopenharmony_ci FI_HILOGE("WriteDouble "#data" failed"); \ 74f857971dSopenharmony_ci return __VA_ARGS__; \ 75f857971dSopenharmony_ci } \ 76f857971dSopenharmony_ci } while (0) 77f857971dSopenharmony_ci 78f857971dSopenharmony_ci#define WRITEFLOAT(parcel, data, ...) \ 79f857971dSopenharmony_ci do { \ 80f857971dSopenharmony_ci if (!(parcel).WriteFloat(data)) { \ 81f857971dSopenharmony_ci FI_HILOGE("WriteFloat "#data" failed"); \ 82f857971dSopenharmony_ci return __VA_ARGS__; \ 83f857971dSopenharmony_ci } \ 84f857971dSopenharmony_ci } while (0) 85f857971dSopenharmony_ci 86f857971dSopenharmony_ci#define WRITESTRING(parcel, data, ...) \ 87f857971dSopenharmony_ci do { \ 88f857971dSopenharmony_ci if (!(parcel).WriteString(data)) { \ 89f857971dSopenharmony_ci FI_HILOGE("WriteString "#data" failed"); \ 90f857971dSopenharmony_ci return __VA_ARGS__; \ 91f857971dSopenharmony_ci } \ 92f857971dSopenharmony_ci } while (0) 93f857971dSopenharmony_ci 94f857971dSopenharmony_ci#define WRITESTRING16(parcel, data, ...) \ 95f857971dSopenharmony_ci do { \ 96f857971dSopenharmony_ci if (!(parcel).WriteString16(data)) { \ 97f857971dSopenharmony_ci FI_HILOGE("WriteString16 "#data" failed"); \ 98f857971dSopenharmony_ci return __VA_ARGS__; \ 99f857971dSopenharmony_ci } \ 100f857971dSopenharmony_ci } while (0) 101f857971dSopenharmony_ci 102f857971dSopenharmony_ci#define WRITEREMOTEOBJECT(parcel, data, ...) \ 103f857971dSopenharmony_ci do { \ 104f857971dSopenharmony_ci if (!(parcel).WriteRemoteObject(data)) { \ 105f857971dSopenharmony_ci FI_HILOGE("WriteRemoteObject "#data" failed"); \ 106f857971dSopenharmony_ci return __VA_ARGS__; \ 107f857971dSopenharmony_ci } \ 108f857971dSopenharmony_ci } while (0) 109f857971dSopenharmony_ci 110f857971dSopenharmony_ci#define WRITEUINT8VECTOR(parcel, data, ...) \ 111f857971dSopenharmony_ci do { \ 112f857971dSopenharmony_ci if (!(parcel).WriteUInt8Vector(data)) { \ 113f857971dSopenharmony_ci FI_HILOGE("WriteUInt8Vector "#data" failed"); \ 114f857971dSopenharmony_ci return __VA_ARGS__; \ 115f857971dSopenharmony_ci } \ 116f857971dSopenharmony_ci } while (0) 117f857971dSopenharmony_ci 118f857971dSopenharmony_ci#define WRITEINT32VECTOR(parcel, data, ...) \ 119f857971dSopenharmony_ci do { \ 120f857971dSopenharmony_ci if (!(parcel).WriteInt32Vector(data)) { \ 121f857971dSopenharmony_ci FI_HILOGE("WriteInt32Vector "#data" failed"); \ 122f857971dSopenharmony_ci return __VA_ARGS__; \ 123f857971dSopenharmony_ci } \ 124f857971dSopenharmony_ci } while (0) 125f857971dSopenharmony_ci 126f857971dSopenharmony_ci#define WRITEFLOATVECTOR(parcel, data, ...) \ 127f857971dSopenharmony_ci do { \ 128f857971dSopenharmony_ci if (!(parcel).WriteFloatVector(data)) { \ 129f857971dSopenharmony_ci FI_HILOGE("WriteFloatVector "#data" failed"); \ 130f857971dSopenharmony_ci return __VA_ARGS__; \ 131f857971dSopenharmony_ci } \ 132f857971dSopenharmony_ci } while (0) 133f857971dSopenharmony_ci 134f857971dSopenharmony_ci#define READBOOL(parcel, data, ...) \ 135f857971dSopenharmony_ci do { \ 136f857971dSopenharmony_ci if (!(parcel).ReadBool(data)) { \ 137f857971dSopenharmony_ci FI_HILOGE("ReadBool "#data" failed"); \ 138f857971dSopenharmony_ci return __VA_ARGS__; \ 139f857971dSopenharmony_ci } \ 140f857971dSopenharmony_ci } while (0) 141f857971dSopenharmony_ci 142f857971dSopenharmony_ci#define READINT32(parcel, data, ...) \ 143f857971dSopenharmony_ci do { \ 144f857971dSopenharmony_ci if (!(parcel).ReadInt32(data)) { \ 145f857971dSopenharmony_ci FI_HILOGE("ReadInt32 "#data" failed"); \ 146f857971dSopenharmony_ci return __VA_ARGS__; \ 147f857971dSopenharmony_ci } \ 148f857971dSopenharmony_ci } while (0) 149f857971dSopenharmony_ci 150f857971dSopenharmony_ci#define READINT64(parcel, data, ...) \ 151f857971dSopenharmony_ci do { \ 152f857971dSopenharmony_ci if (!(parcel).ReadInt64(data)) { \ 153f857971dSopenharmony_ci FI_HILOGE("ReadInt64 "#data" failed"); \ 154f857971dSopenharmony_ci return __VA_ARGS__; \ 155f857971dSopenharmony_ci } \ 156f857971dSopenharmony_ci } while (0) 157f857971dSopenharmony_ci 158f857971dSopenharmony_ci#define READUINT32(parcel, data, ...) \ 159f857971dSopenharmony_ci do { \ 160f857971dSopenharmony_ci if (!(parcel).ReadUint32(data)) { \ 161f857971dSopenharmony_ci FI_HILOGE("ReadUint32 "#data" failed"); \ 162f857971dSopenharmony_ci return __VA_ARGS__; \ 163f857971dSopenharmony_ci } \ 164f857971dSopenharmony_ci } while (0) 165f857971dSopenharmony_ci 166f857971dSopenharmony_ci#define READDOUBLE(parcel, data, ...) \ 167f857971dSopenharmony_ci do { \ 168f857971dSopenharmony_ci if (!(parcel).ReadDouble(data)) { \ 169f857971dSopenharmony_ci FI_HILOGE("ReadDouble "#data" failed"); \ 170f857971dSopenharmony_ci return __VA_ARGS__; \ 171f857971dSopenharmony_ci } \ 172f857971dSopenharmony_ci } while (0) 173f857971dSopenharmony_ci 174f857971dSopenharmony_ci#define READFLOAT(parcel, data, ...) \ 175f857971dSopenharmony_ci do { \ 176f857971dSopenharmony_ci if (!(parcel).ReadFloat(data)) { \ 177f857971dSopenharmony_ci FI_HILOGE("ReadFloat "#data" failed"); \ 178f857971dSopenharmony_ci return __VA_ARGS__; \ 179f857971dSopenharmony_ci } \ 180f857971dSopenharmony_ci } while (0) 181f857971dSopenharmony_ci 182f857971dSopenharmony_ci#define READSTRING(parcel, data, ...) \ 183f857971dSopenharmony_ci do { \ 184f857971dSopenharmony_ci if (!(parcel).ReadString(data)) { \ 185f857971dSopenharmony_ci FI_HILOGE("ReadString "#data" failed"); \ 186f857971dSopenharmony_ci return __VA_ARGS__; \ 187f857971dSopenharmony_ci } \ 188f857971dSopenharmony_ci } while (0) 189f857971dSopenharmony_ci 190f857971dSopenharmony_ci#define READUINT8VECTOR(parcel, data, ...) \ 191f857971dSopenharmony_ci do { \ 192f857971dSopenharmony_ci if (!(parcel).ReadUInt8Vector(&data)) { \ 193f857971dSopenharmony_ci FI_HILOGE("ReadUInt8Vector "#data" failed"); \ 194f857971dSopenharmony_ci return __VA_ARGS__; \ 195f857971dSopenharmony_ci } \ 196f857971dSopenharmony_ci } while (0) 197f857971dSopenharmony_ci 198f857971dSopenharmony_ci#define READSTRING16(parcel, data, ...) \ 199f857971dSopenharmony_ci do { \ 200f857971dSopenharmony_ci if (!(parcel).ReadString16(data)) { \ 201f857971dSopenharmony_ci FI_HILOGE("ReadString16 "#data" failed"); \ 202f857971dSopenharmony_ci return __VA_ARGS__; \ 203f857971dSopenharmony_ci } \ 204f857971dSopenharmony_ci } while (0) 205f857971dSopenharmony_ci 206f857971dSopenharmony_ci#define READINT32VECTOR(parcel, data, ...) \ 207f857971dSopenharmony_ci do { \ 208f857971dSopenharmony_ci if (!(parcel).ReadInt32Vector(&data)) { \ 209f857971dSopenharmony_ci FI_HILOGE("ReadInt32Vector "#data" failed"); \ 210f857971dSopenharmony_ci return __VA_ARGS__; \ 211f857971dSopenharmony_ci } \ 212f857971dSopenharmony_ci } while (0) 213f857971dSopenharmony_ci 214f857971dSopenharmony_ci#define READFLOATVECTOR(parcel, data, ...) \ 215f857971dSopenharmony_ci do { \ 216f857971dSopenharmony_ci if (!(parcel).ReadFloatVector(&data)) { \ 217f857971dSopenharmony_ci FI_HILOGE("ReadFloatVector "#data" failed"); \ 218f857971dSopenharmony_ci return __VA_ARGS__; \ 219f857971dSopenharmony_ci } \ 220f857971dSopenharmony_ci } while (0) 221f857971dSopenharmony_ci 222f857971dSopenharmony_citemplate<typename E> 223f857971dSopenharmony_ciconstexpr auto DeviceStatusToUnderlying(E e) noexcept 224f857971dSopenharmony_ci{ 225f857971dSopenharmony_ci return static_cast<std::underlying_type_t<E>>(e); 226f857971dSopenharmony_ci} 227f857971dSopenharmony_ci} // namespace DeviceStatus 228f857971dSopenharmony_ci} // namespace Msdp 229f857971dSopenharmony_ci} // namespace OHOS 230f857971dSopenharmony_ci 231f857971dSopenharmony_ci#endif // DEVICESTATUS_COMMON_H 232