1 /* 2 * Copyright (c) 2022-2023 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 #ifndef DEVICESTATUS_COMMON_H 17 #define DEVICESTATUS_COMMON_H 18 19 #include <cstdint> 20 #include <type_traits> 21 22 #include "devicestatus_errors.h" 23 #include "fi_log.h" 24 25 namespace OHOS { 26 namespace Msdp { 27 namespace DeviceStatus { 28 #define DEV_RET_IF_NULL_WITH_RET(cond, retval) if (cond) {return (retval);} 29 #define DEV_RET_IF_NULL(cond) if (cond) {return;} 30 #define DEV_RET_IF_NULL_WITH_LOG(cond, loginfo) \ 31 do { \ 32 if (cond) { \ 33 FI_HILOGE("%{public}s "#loginfo" ", __func__); \ 34 return; \ 35 } \ 36 } while (0) \ 37 38 #define WRITEBOOL(parcel, data, ...) \ 39 do { \ 40 if (!(parcel).WriteBool(data)) { \ 41 FI_HILOGE("WriteBool "#data" failed"); \ 42 return __VA_ARGS__; \ 43 } \ 44 } while (0) 45 46 #define WRITEINT32(parcel, data, ...) \ 47 do { \ 48 if (!(parcel).WriteInt32(data)) { \ 49 FI_HILOGE("WriteInt32 "#data" failed"); \ 50 return __VA_ARGS__; \ 51 } \ 52 } while (0) 53 54 #define WRITEINT64(parcel, data, ...) \ 55 do { \ 56 if (!(parcel).WriteInt64(data)) { \ 57 FI_HILOGE("WriteInt64 "#data" failed"); \ 58 return __VA_ARGS__; \ 59 } \ 60 } while (0) 61 62 #define WRITEUINT32(parcel, data, ...) \ 63 do { \ 64 if (!(parcel).WriteUint32(data)) { \ 65 FI_HILOGE("WriteUint32 "#data" failed"); \ 66 return __VA_ARGS__; \ 67 } \ 68 } while (0) 69 70 #define WRITEDOUBLE(parcel, data, ...) \ 71 do { \ 72 if (!(parcel).WriteDouble(data)) { \ 73 FI_HILOGE("WriteDouble "#data" failed"); \ 74 return __VA_ARGS__; \ 75 } \ 76 } while (0) 77 78 #define WRITEFLOAT(parcel, data, ...) \ 79 do { \ 80 if (!(parcel).WriteFloat(data)) { \ 81 FI_HILOGE("WriteFloat "#data" failed"); \ 82 return __VA_ARGS__; \ 83 } \ 84 } while (0) 85 86 #define WRITESTRING(parcel, data, ...) \ 87 do { \ 88 if (!(parcel).WriteString(data)) { \ 89 FI_HILOGE("WriteString "#data" failed"); \ 90 return __VA_ARGS__; \ 91 } \ 92 } while (0) 93 94 #define WRITESTRING16(parcel, data, ...) \ 95 do { \ 96 if (!(parcel).WriteString16(data)) { \ 97 FI_HILOGE("WriteString16 "#data" failed"); \ 98 return __VA_ARGS__; \ 99 } \ 100 } while (0) 101 102 #define WRITEREMOTEOBJECT(parcel, data, ...) \ 103 do { \ 104 if (!(parcel).WriteRemoteObject(data)) { \ 105 FI_HILOGE("WriteRemoteObject "#data" failed"); \ 106 return __VA_ARGS__; \ 107 } \ 108 } while (0) 109 110 #define WRITEUINT8VECTOR(parcel, data, ...) \ 111 do { \ 112 if (!(parcel).WriteUInt8Vector(data)) { \ 113 FI_HILOGE("WriteUInt8Vector "#data" failed"); \ 114 return __VA_ARGS__; \ 115 } \ 116 } while (0) 117 118 #define WRITEINT32VECTOR(parcel, data, ...) \ 119 do { \ 120 if (!(parcel).WriteInt32Vector(data)) { \ 121 FI_HILOGE("WriteInt32Vector "#data" failed"); \ 122 return __VA_ARGS__; \ 123 } \ 124 } while (0) 125 126 #define WRITEFLOATVECTOR(parcel, data, ...) \ 127 do { \ 128 if (!(parcel).WriteFloatVector(data)) { \ 129 FI_HILOGE("WriteFloatVector "#data" failed"); \ 130 return __VA_ARGS__; \ 131 } \ 132 } while (0) 133 134 #define READBOOL(parcel, data, ...) \ 135 do { \ 136 if (!(parcel).ReadBool(data)) { \ 137 FI_HILOGE("ReadBool "#data" failed"); \ 138 return __VA_ARGS__; \ 139 } \ 140 } while (0) 141 142 #define READINT32(parcel, data, ...) \ 143 do { \ 144 if (!(parcel).ReadInt32(data)) { \ 145 FI_HILOGE("ReadInt32 "#data" failed"); \ 146 return __VA_ARGS__; \ 147 } \ 148 } while (0) 149 150 #define READINT64(parcel, data, ...) \ 151 do { \ 152 if (!(parcel).ReadInt64(data)) { \ 153 FI_HILOGE("ReadInt64 "#data" failed"); \ 154 return __VA_ARGS__; \ 155 } \ 156 } while (0) 157 158 #define READUINT32(parcel, data, ...) \ 159 do { \ 160 if (!(parcel).ReadUint32(data)) { \ 161 FI_HILOGE("ReadUint32 "#data" failed"); \ 162 return __VA_ARGS__; \ 163 } \ 164 } while (0) 165 166 #define READDOUBLE(parcel, data, ...) \ 167 do { \ 168 if (!(parcel).ReadDouble(data)) { \ 169 FI_HILOGE("ReadDouble "#data" failed"); \ 170 return __VA_ARGS__; \ 171 } \ 172 } while (0) 173 174 #define READFLOAT(parcel, data, ...) \ 175 do { \ 176 if (!(parcel).ReadFloat(data)) { \ 177 FI_HILOGE("ReadFloat "#data" failed"); \ 178 return __VA_ARGS__; \ 179 } \ 180 } while (0) 181 182 #define READSTRING(parcel, data, ...) \ 183 do { \ 184 if (!(parcel).ReadString(data)) { \ 185 FI_HILOGE("ReadString "#data" failed"); \ 186 return __VA_ARGS__; \ 187 } \ 188 } while (0) 189 190 #define READUINT8VECTOR(parcel, data, ...) \ 191 do { \ 192 if (!(parcel).ReadUInt8Vector(&data)) { \ 193 FI_HILOGE("ReadUInt8Vector "#data" failed"); \ 194 return __VA_ARGS__; \ 195 } \ 196 } while (0) 197 198 #define READSTRING16(parcel, data, ...) \ 199 do { \ 200 if (!(parcel).ReadString16(data)) { \ 201 FI_HILOGE("ReadString16 "#data" failed"); \ 202 return __VA_ARGS__; \ 203 } \ 204 } while (0) 205 206 #define READINT32VECTOR(parcel, data, ...) \ 207 do { \ 208 if (!(parcel).ReadInt32Vector(&data)) { \ 209 FI_HILOGE("ReadInt32Vector "#data" failed"); \ 210 return __VA_ARGS__; \ 211 } \ 212 } while (0) 213 214 #define READFLOATVECTOR(parcel, data, ...) \ 215 do { \ 216 if (!(parcel).ReadFloatVector(&data)) { \ 217 FI_HILOGE("ReadFloatVector "#data" failed"); \ 218 return __VA_ARGS__; \ 219 } \ 220 } while (0) 221 222 template<typename E> 223 constexpr auto DeviceStatusToUnderlying(E e) noexcept 224 { 225 return static_cast<std::underlying_type_t<E>>(e); 226 } 227 } // namespace DeviceStatus 228 } // namespace Msdp 229 } // namespace OHOS 230 231 #endif // DEVICESTATUS_COMMON_H 232