1 /* Copyright (c) 2012, 2014, 2016, The Linux Foundation. All rights reserved.
2  *
3  * Redistribution and use in source and binary forms, with or without
4  * modification, are permitted provided that the following conditions are
5  * met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above
9  *       copyright notice, this list of conditions and the following
10  *       disclaimer in the documentation and/or other materials provided
11  *       with the distribution.
12  *     * Neither the name of The Linux Foundation nor the names of its
13  *       contributors may be used to endorse or promote products derived
14  *       from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  */
29 
30 #ifndef __MM_CAMERA_DBG_H__
31 #define __MM_CAMERA_DBG_H__
32 
33 // System dependencies
34 #include <log/log.h>
35 
36 #ifdef QCAMERA_REDEFINE_LOG
37 
38 // Camera dependencies
39 #include "cam_types.h"
40 
41 typedef enum {
42     CAM_NO_MODULE,
43     CAM_HAL_MODULE,
44     CAM_MCI_MODULE,
45     CAM_JPEG_MODULE,
46     CAM_LAST_MODULE
47 } cam_modules_t;
48 
49 /* values that persist.camera.global.debug can be set to */
50 /* all camera modules need to map their internal debug levels to this range */
51 typedef enum {
52     CAM_GLBL_DBG_NONE  = 0,
53     CAM_GLBL_DBG_ERR   = 1,
54     CAM_GLBL_DBG_WARN  = 2,
55     CAM_GLBL_DBG_HIGH  = 3,
56     CAM_GLBL_DBG_DEBUG = 4,
57     CAM_GLBL_DBG_LOW   = 5,
58     CAM_GLBL_DBG_INFO  = 6
59 } cam_global_debug_level_t;
60 
61 extern int g_cam_log[CAM_LAST_MODULE][CAM_GLBL_DBG_INFO + 1];
62 
63 #define FATAL_IF(cond, ...) LOG_ALWAYS_FATAL_IF(cond, ## __VA_ARGS__)
64 
65 #undef CLOGx
66 #define CLOGx(module, level, fmt, args...)                         \
67 {\
68 if (g_cam_log[module][level]) {                                  \
69   mm_camera_debug_log(module, level, __func__, __LINE__, fmt, ##args); \
70 }\
71 }
72 
73 #undef CLOGI
74 #define CLOGI(module, fmt, args...)                \
75     CLOGx(module, CAM_GLBL_DBG_INFO, fmt, ##args)
76 #undef CLOGD
77 #define CLOGD(module, fmt, args...)                \
78     CLOGx(module, CAM_GLBL_DBG_DEBUG, fmt, ##args)
79 #undef CLOGL
80 #define CLOGL(module, fmt, args...)                \
81     CLOGx(module, CAM_GLBL_DBG_LOW, fmt, ##args)
82 #undef CLOGW
83 #define CLOGW(module, fmt, args...)                \
84     CLOGx(module, CAM_GLBL_DBG_WARN, fmt, ##args)
85 #undef CLOGH
86 #define CLOGH(module, fmt, args...)                \
87     CLOGx(module, CAM_GLBL_DBG_HIGH, fmt, ##args)
88 #undef CLOGE
89 #define CLOGE(module, fmt, args...)                \
90     CLOGx(module, CAM_GLBL_DBG_ERR, fmt, ##args)
91 
92 #ifndef CAM_MODULE
93 #define CAM_MODULE CAM_MCI_MODULE
94 #endif
95 
96 #undef LOGD
97 #define LOGD(fmt, args...) CLOGD(CAM_MODULE, fmt, ##args)
98 #undef LOGL
99 #define LOGL(fmt, args...) CLOGL(CAM_MODULE, fmt, ##args)
100 #undef LOGW
101 #define LOGW(fmt, args...) CLOGW(CAM_MODULE, fmt, ##args)
102 #undef LOGH
103 #define LOGH(fmt, args...) CLOGH(CAM_MODULE, fmt, ##args)
104 #undef LOGE
105 #define LOGE(fmt, args...) CLOGE(CAM_MODULE, fmt, ##args)
106 #undef LOGI
107 #define LOGI(fmt, args...) CLOGI(CAM_MODULE, fmt, ##args)
108 
109 /* reads and updates camera logging properties */
110 void mm_camera_set_dbg_log_properties(void);
111 
112 /* generic logger function */
113 void mm_camera_debug_log(const cam_modules_t module,
114                    const cam_global_debug_level_t level,
115                    const char *func, const int line, const char *fmt, ...);
116 
117 void mm_camera_debug_open(void);
118 void mm_camera_debug_close(void);
119 
120 #else
121 
122 #undef LOGD
123 #define LOGD(fmt, args...) ALOGD(fmt, ##args)
124 #undef LOGL
125 #define LOGL(fmt, args...) ALOGD(fmt, ##args)
126 #undef LOGW
127 #define LOGW(fmt, args...) ALOGW(fmt, ##args)
128 #undef LOGH
129 #define LOGH(fmt, args...) ALOGD(fmt, ##args)
130 #undef LOGE
131 #define LOGE(fmt, args...) ALOGE(fmt, ##args)
132 #undef LOGI
133 #define LOGI(fmt, args...) ALOGV(fmt, ##args)
134 
135 #endif
136 
137 #endif /* __MM_CAMERA_DBG_H__ */
138