1/*
2 * Copyright (c) 2022 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 OHOS_DAUDIO_LOG_H
17#define OHOS_DAUDIO_LOG_H
18#include "cJSON.h"
19
20#include "hilog/log.h"
21#include <inttypes.h>
22
23namespace OHOS {
24namespace DistributedHardware {
25#undef LOG_TAG
26#define LOG_TAG "DAUDIO"
27
28#define DHLOGD(fmt, ...) HILOG_DEBUG(LOG_CORE, \
29    "[%{public}s][%{public}s]:" fmt, DH_LOG_TAG, __FUNCTION__, ##__VA_ARGS__)
30
31#define DHLOGI(fmt, ...) HILOG_INFO(LOG_CORE, \
32    "[%{public}s][%{public}s]:" fmt, DH_LOG_TAG, __FUNCTION__, ##__VA_ARGS__)
33
34#define DHLOGW(fmt, ...) HILOG_WARN(LOG_CORE, \
35    "[%{public}s][%{public}s]:" fmt, DH_LOG_TAG, __FUNCTION__, ##__VA_ARGS__)
36
37#define DHLOGE(fmt, ...) HILOG_ERROR(LOG_CORE, \
38    "[%{public}s][%{public}s]:" fmt, DH_LOG_TAG, __FUNCTION__, ##__VA_ARGS__)
39
40#define CHECK_NULL_VOID(ptr)                    \
41    do {                                        \
42        if ((ptr) == nullptr) {                 \
43            DHLOGE("Address pointer is null");  \
44            return;                             \
45        }                                       \
46    } while (0)
47
48#define CHECK_NULL_AND_FREE_VOID(ptr, root, ...)     \
49    do {                                             \
50        if ((ptr) == nullptr) {                      \
51            DHLOGE("Address pointer is null");       \
52            cJSON_Delete(root);                      \
53            return;                                  \
54        }                                            \
55    } while (0)
56
57#define CHECK_NULL_RETURN(ptr, ret)             \
58    do {                                        \
59        if ((ptr) == nullptr) {                 \
60            DHLOGE("Address pointer is null");  \
61            return (ret);                       \
62        }                                       \
63    } while (0)
64
65#define CHECK_NULL_FREE_RETURN(ptr, ret, root, ...)    \
66    do {                                               \
67        if ((ptr) == nullptr) {                        \
68            DHLOGE("Address pointer is null");         \
69            cJSON_Delete(root);                        \
70            return (ret);                              \
71        }                                              \
72    } while (0)
73
74#define CHECK_AND_RETURN_RET_LOG(cond, ret, fmt, ...)   \
75    do {                                                \
76        if ((cond)) {                                   \
77            DHLOGE(fmt, ##__VA_ARGS__);                 \
78            return (ret);                               \
79        }                                               \
80    } while (0)
81
82#define CHECK_AND_FREE_RETURN_RET_LOG(cond, ret, root, fmt, ...)    \
83    do {                                                            \
84        if ((cond)) {                                               \
85            DHLOGE(fmt, ##__VA_ARGS__);                             \
86            cJSON_Delete(root);                                     \
87            return (ret);                                           \
88        }                                                           \
89    } while (0)
90
91#define CHECK_AND_FREECHAR_RETURN_RET_LOG(cond, ret, data, fmt, ...)    \
92    do {                                                                \
93        if ((cond)) {                                                   \
94            DHLOGE(fmt, ##__VA_ARGS__);                                 \
95            cJSON_free(data);                                           \
96            return (ret);                                               \
97        }                                                               \
98    } while (0)
99
100#define CHECK_AND_RETURN_LOG(cond, fmt, ...)   \
101    do {                                       \
102        if ((cond)) {                          \
103            DHLOGE(fmt, ##__VA_ARGS__);        \
104            return;                            \
105        }                                      \
106    } while (0)
107
108#define CHECK_AND_FREE_RETURN_LOG(cond, root, fmt, ...)   \
109    do {                                                  \
110        if ((cond)) {                                     \
111            DHLOGE(fmt, ##__VA_ARGS__);                   \
112            cJSON_Delete(root);                           \
113            return;                                       \
114        }                                                 \
115    } while (0)
116
117#define CHECK_AND_LOG(cond, fmt, ...)          \
118    do {                                       \
119        if ((cond)) {                          \
120            DHLOGE(fmt, ##__VA_ARGS__);        \
121        }                                      \
122    } while (0)
123} // namespace DistributedHardware
124} // namespace OHOS
125#endif // OHOS_DAUDIO_LOG_H
126