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_DCAMERA_LOG_H
17#define OHOS_DCAMERA_LOG_H
18
19namespace OHOS {
20namespace DistributedHardware {
21typedef enum {
22    DH_LOG_DEBUG,
23    DH_LOG_INFO,
24    DH_LOG_WARN,
25    DH_LOG_ERROR,
26} DHLogLevel;
27
28void DHLog(DHLogLevel logLevel, const char *fmt, ...);
29#define CHECK_NULL_RETURN(cond, ret, ...)       \
30    do {                                        \
31        if ((cond)) {                           \
32            return (ret);                       \
33        }                                       \
34    } while (0)
35
36#define CHECK_AND_RETURN_RET_LOG(cond, ret, fmt, ...)   \
37    do {                                                \
38        if ((cond)) {                                   \
39            DHLOGE(fmt, ##__VA_ARGS__);                 \
40            return (ret);                               \
41        }                                               \
42    } while (0)
43
44#define CHECK_AND_RETURN_LOG(cond, fmt, ...)   \
45    do {                                       \
46        if ((cond)) {                          \
47            DHLOGE(fmt, ##__VA_ARGS__);        \
48            return;                            \
49        }                                      \
50    } while (0)
51
52#define CHECK_AND_LOG(cond, fmt, ...)          \
53    do {                                       \
54        if ((cond)) {                          \
55            DHLOGE(fmt, ##__VA_ARGS__);        \
56        }                                      \
57    } while (0)
58
59#define CHECK_NULL_FREE_RETURN(ptr, ret, root, ...)    \
60    do {                                               \
61        if ((ptr) == nullptr) {                        \
62            DHLOGE("Address pointer is null");         \
63            cJSON_Delete((root));                      \
64            return (ret);                              \
65        }                                              \
66    } while (0)
67
68#define CHECK_AND_FREE_RETURN_RET_LOG(cond, ret, root, fmt, ...)    \
69    do {                                                            \
70        if ((cond)) {                                               \
71            DHLOGE(fmt, ##__VA_ARGS__);                             \
72            cJSON_Delete((root));                                   \
73            return (ret);                                           \
74        }                                                           \
75    } while (0)
76
77#define ULOGD(fmt, ...) DHLog(DH_LOG_DEBUG, \
78    (std::string("[") + DH_LOG_TAG + "][" + __FUNCTION__ + "]:" + fmt).c_str(), ##__VA_ARGS__)
79
80#define ULOGI(fmt, ...) DHLog(DH_LOG_INFO, \
81    (std::string("[") + DH_LOG_TAG + "][" + __FUNCTION__ + "]:" + fmt).c_str(), ##__VA_ARGS__)
82
83#define ULOGW(fmt, ...) DHLog(DH_LOG_WARN, \
84    (std::string("[") + DH_LOG_TAG + "][" + __FUNCTION__ + "]:" + fmt).c_str(), ##__VA_ARGS__)
85
86#define ULOGE(fmt, ...) DHLog(DH_LOG_ERROR, \
87    (std::string("[") + DH_LOG_TAG + "][" + __FUNCTION__ + "]:" + fmt).c_str(), ##__VA_ARGS__)
88} // namespace DistributedHardware
89} // namespace OHOS
90#endif // OHOS_DCAMERA_LOG_H
91