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