1/*
2 * Copyright (C) 2005-2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <android/log.h>
20
21/*
22 * Normally we strip the effects of ALOGV (VERBOSE messages),
23 * LOG_FATAL and LOG_FATAL_IF (FATAL assert messages) from the
24 * release builds be defining NDEBUG.  You can modify this (for
25 * example with "#define LOG_NDEBUG 0" at the top of your source
26 * file) to change that behavior.
27 */
28
29#ifndef LOG_NDEBUG
30#ifdef NDEBUG
31#define LOG_NDEBUG 1
32#else
33#define LOG_NDEBUG 0
34#endif
35#endif
36
37/* --------------------------------------------------------------------- */
38
39#ifndef __predict_false
40#define __predict_false(exp) __builtin_expect((exp) != 0, 0)
41#endif
42
43/*
44 * Simplified macro to send a verbose radio log message using current LOG_TAG.
45 */
46#ifndef RLOGV
47#define __RLOGV(...)                                                         \
48  ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_VERBOSE, LOG_TAG, \
49                                 __VA_ARGS__))
50#if LOG_NDEBUG
51#define RLOGV(...)          \
52  do {                      \
53    if (0) {                \
54      __RLOGV(__VA_ARGS__); \
55    }                       \
56  } while (0)
57#else
58#define RLOGV(...) __RLOGV(__VA_ARGS__)
59#endif
60#endif
61
62#ifndef RLOGV_IF
63#if LOG_NDEBUG
64#define RLOGV_IF(cond, ...) ((void)0)
65#else
66#define RLOGV_IF(cond, ...)                                                \
67  ((__predict_false(cond))                                                 \
68       ? ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_VERBOSE, \
69                                        LOG_TAG, __VA_ARGS__))             \
70       : (void)0)
71#endif
72#endif
73
74/*
75 * Simplified macro to send a debug radio log message using  current LOG_TAG.
76 */
77#ifndef RLOGD
78#define RLOGD(...)                                                         \
79  ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_DEBUG, LOG_TAG, \
80                                 __VA_ARGS__))
81#endif
82
83#ifndef RLOGD_IF
84#define RLOGD_IF(cond, ...)                                              \
85  ((__predict_false(cond))                                               \
86       ? ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_DEBUG, \
87                                        LOG_TAG, __VA_ARGS__))           \
88       : (void)0)
89#endif
90
91/*
92 * Simplified macro to send an info radio log message using  current LOG_TAG.
93 */
94#ifndef RLOGI
95#define RLOGI(...)                                                        \
96  ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_INFO, LOG_TAG, \
97                                 __VA_ARGS__))
98#endif
99
100#ifndef RLOGI_IF
101#define RLOGI_IF(cond, ...)                                             \
102  ((__predict_false(cond))                                              \
103       ? ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_INFO, \
104                                        LOG_TAG, __VA_ARGS__))          \
105       : (void)0)
106#endif
107
108/*
109 * Simplified macro to send a warning radio log message using current LOG_TAG.
110 */
111#ifndef RLOGW
112#define RLOGW(...)                                                        \
113  ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_WARN, LOG_TAG, \
114                                 __VA_ARGS__))
115#endif
116
117#ifndef RLOGW_IF
118#define RLOGW_IF(cond, ...)                                             \
119  ((__predict_false(cond))                                              \
120       ? ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_WARN, \
121                                        LOG_TAG, __VA_ARGS__))          \
122       : (void)0)
123#endif
124
125/*
126 * Simplified macro to send an error radio log message using current LOG_TAG.
127 */
128#ifndef RLOGE
129#define RLOGE(...)                                                         \
130  ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_ERROR, LOG_TAG, \
131                                 __VA_ARGS__))
132#endif
133
134#ifndef RLOGE_IF
135#define RLOGE_IF(cond, ...)                                              \
136  ((__predict_false(cond))                                               \
137       ? ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_ERROR, \
138                                        LOG_TAG, __VA_ARGS__))           \
139       : (void)0)
140#endif
141