1 /*
2 * Copyright (C) 2015 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 #define LOG_TAG "pn54x"
17
18 #include <stdio.h>
19 #include <string.h>
20 #if !defined (NXPLOG__H_INCLUDED)
21 # include "phNxpLog.h"
22 # include "phNxpConfig.h"
23 #endif
24 #include <cutils/properties.h>
25 #include <log/log.h>
26
27 const char * NXPLOG_ITEM_EXTNS = "NxpExtns";
28 const char * NXPLOG_ITEM_NCIHAL = "NxpHal";
29 const char * NXPLOG_ITEM_NCIX = "NxpNciX";
30 const char * NXPLOG_ITEM_NCIR = "NxpNciR";
31 const char * NXPLOG_ITEM_FWDNLD = "NxpFwDnld";
32 const char * NXPLOG_ITEM_TML = "NxpTml";
33
34 #ifdef NXP_HCI_REQ
35 const char * NXPLOG_ITEM_HCPX = "NxpHcpX";
36 const char * NXPLOG_ITEM_HCPR = "NxpHcpR";
37 #endif /*NXP_HCI_REQ*/
38
39 /* global log level structure */
40 nci_log_level_t gLog_level;
41
42
43 /*******************************************************************************
44 *
45 * Function phNxpLog_SetGlobalLogLevel
46 *
47 * Description Sets the global log level for all modules.
48 * This value is set by Android property nfc.nxp_log_level_global.
49 * If value can be overridden by module log level.
50 *
51 * Returns The value of global log level
52 *
53 ******************************************************************************/
phNxpLog_SetGlobalLogLevel(void)54 static uint8_t phNxpLog_SetGlobalLogLevel (void)
55 {
56 uint8_t level = NXPLOG_DEFAULT_LOGLEVEL;
57 unsigned long num = 0;
58 char valueStr [PROPERTY_VALUE_MAX] = {0};
59
60 int len = property_get (PROP_NAME_NXPLOG_GLOBAL_LOGLEVEL, valueStr, "");
61 if (len > 0)
62 {
63 /* let Android property override .conf variable */
64 sscanf (valueStr, "%lu", &num);
65 level = (unsigned char) num;
66 }
67 memset(&gLog_level, level, sizeof(nci_log_level_t));
68 return level;
69 }
70
71 /*******************************************************************************
72 *
73 * Function phNxpLog_SetHALLogLevel
74 *
75 * Description Sets the HAL layer log level.
76 *
77 * Returns void
78 *
79 ******************************************************************************/
phNxpLog_SetHALLogLevel(uint8_t level)80 static void phNxpLog_SetHALLogLevel (uint8_t level)
81 {
82 unsigned long num = 0;
83 int len;
84 char valueStr [PROPERTY_VALUE_MAX] = {0};
85
86 if (GetNxpNumValue (NAME_NXPLOG_HAL_LOGLEVEL, &num, sizeof(num)))
87 {
88 gLog_level.hal_log_level = (level > (unsigned char) num) ? level : (unsigned char) num;;
89 }
90
91 len = property_get (PROP_NAME_NXPLOG_HAL_LOGLEVEL, valueStr, "");
92 if (len > 0)
93 {
94 /* let Android property override .conf variable */
95 sscanf (valueStr, "%lu", &num);
96 gLog_level.hal_log_level = (unsigned char) num;
97 }
98
99 return;
100 }
101
102 /*******************************************************************************
103 *
104 * Function phNxpLog_SetExtnsLogLevel
105 *
106 * Description Sets the Extensions layer log level.
107 *
108 * Returns void
109 *
110 ******************************************************************************/
phNxpLog_SetExtnsLogLevel(uint8_t level)111 static void phNxpLog_SetExtnsLogLevel (uint8_t level)
112 {
113 unsigned long num = 0;
114 int len;
115 char valueStr [PROPERTY_VALUE_MAX] = {0};
116 if (GetNxpNumValue (NAME_NXPLOG_EXTNS_LOGLEVEL, &num, sizeof(num)))
117 {
118 gLog_level.extns_log_level = (level > (unsigned char) num) ? level : (unsigned char) num;;
119 }
120
121 len = property_get (PROP_NAME_NXPLOG_EXTNS_LOGLEVEL, valueStr, "");
122 if (len > 0)
123 {
124 /* let Android property override .conf variable */
125 sscanf (valueStr, "%lu", &num);
126 gLog_level.extns_log_level = (unsigned char) num;
127 }
128
129 return;
130 }
131
132 /*******************************************************************************
133 *
134 * Function phNxpLog_SetTmlLogLevel
135 *
136 * Description Sets the TML layer log level.
137 *
138 * Returns void
139 *
140 ******************************************************************************/
phNxpLog_SetTmlLogLevel(uint8_t level)141 static void phNxpLog_SetTmlLogLevel (uint8_t level)
142 {
143 unsigned long num = 0;
144 int len;
145 char valueStr [PROPERTY_VALUE_MAX] = {0};
146 if (GetNxpNumValue (NAME_NXPLOG_TML_LOGLEVEL, &num, sizeof(num)))
147 {
148 gLog_level.tml_log_level = (level > (unsigned char) num) ? level : (unsigned char) num;;
149 }
150
151 len = property_get (PROP_NAME_NXPLOG_TML_LOGLEVEL, valueStr, "");
152 if (len > 0)
153 {
154 /* let Android property override .conf variable */
155 sscanf (valueStr, "%lu", &num);
156 gLog_level.tml_log_level = (unsigned char) num;
157 }
158
159 return;
160 }
161
162 /*******************************************************************************
163 *
164 * Function phNxpLog_SetDnldLogLevel
165 *
166 * Description Sets the FW download layer log level.
167 *
168 * Returns void
169 *
170 ******************************************************************************/
phNxpLog_SetDnldLogLevel(uint8_t level)171 static void phNxpLog_SetDnldLogLevel (uint8_t level)
172 {
173 unsigned long num = 0;
174 int len;
175 char valueStr [PROPERTY_VALUE_MAX] = {0};
176 if (GetNxpNumValue (NAME_NXPLOG_FWDNLD_LOGLEVEL, &num, sizeof(num)))
177 {
178 gLog_level.dnld_log_level = (level > (unsigned char) num) ? level : (unsigned char) num;;
179 }
180
181 len = property_get (PROP_NAME_NXPLOG_FWDNLD_LOGLEVEL, valueStr, "");
182 if (len > 0)
183 {
184 /* let Android property override .conf variable */
185 sscanf (valueStr, "%lu", &num);
186 gLog_level.dnld_log_level = (unsigned char) num;
187 }
188
189 return;
190 }
191
192 /*******************************************************************************
193 *
194 * Function phNxpLog_SetNciTxLogLevel
195 *
196 * Description Sets the NCI transaction layer log level.
197 *
198 * Returns void
199 *
200 ******************************************************************************/
phNxpLog_SetNciTxLogLevel(uint8_t level)201 static void phNxpLog_SetNciTxLogLevel (uint8_t level)
202 {
203 unsigned long num = 0;
204 int len;
205 char valueStr [PROPERTY_VALUE_MAX] = {0};
206 if (GetNxpNumValue (NAME_NXPLOG_NCIX_LOGLEVEL, &num, sizeof(num)))
207 {
208 gLog_level.ncix_log_level = (level > (unsigned char) num) ? level : (unsigned char) num;
209 }
210 if (GetNxpNumValue (NAME_NXPLOG_NCIR_LOGLEVEL, &num, sizeof(num)))
211 {
212 gLog_level.ncir_log_level = (level > (unsigned char) num) ? level : (unsigned char) num;;
213 }
214
215 len = property_get (PROP_NAME_NXPLOG_NCI_LOGLEVEL, valueStr, "");
216 if (len > 0)
217 {
218 /* let Android property override .conf variable */
219 sscanf (valueStr, "%lu", &num);
220 gLog_level.ncix_log_level = (unsigned char) num;
221 gLog_level.ncir_log_level = (unsigned char) num;
222 }
223
224 return;
225 }
226
227 /******************************************************************************
228 * Function phNxpLog_InitializeLogLevel
229 *
230 * Description Initialize and get log level of module from libnfc-nxp.conf or
231 * Android runtime properties.
232 * The Android property nfc.nxp_global_log_level is to
233 * define log level for all modules. Modules log level will override global level.
234 * The Android property will override the level
235 * in libnfc-nxp.conf
236 *
237 * Android property names:
238 * nfc.nxp_log_level_global * defines log level for all modules
239 * nfc.nxp_log_level_extns * extensions module log
240 * nfc.nxp_log_level_hal * Hal module log
241 * nfc.nxp_log_level_dnld * firmware download module log
242 * nfc.nxp_log_level_tml * TML module log
243 * nfc.nxp_log_level_nci * NCI transaction log
244 *
245 * Log Level values:
246 * NXPLOG_LOG_SILENT_LOGLEVEL 0 * No trace to show
247 * NXPLOG_LOG_ERROR_LOGLEVEL 1 * Show Error trace only
248 * NXPLOG_LOG_WARN_LOGLEVEL 2 * Show Warning trace and Error trace
249 * NXPLOG_LOG_DEBUG_LOGLEVEL 3 * Show all traces
250 *
251 * Returns void
252 *
253 ******************************************************************************/
phNxpLog_InitializeLogLevel(void)254 void phNxpLog_InitializeLogLevel(void)
255 {
256 uint8_t level = phNxpLog_SetGlobalLogLevel ();
257 phNxpLog_SetHALLogLevel (level);
258 phNxpLog_SetExtnsLogLevel (level);
259 phNxpLog_SetTmlLogLevel (level);
260 phNxpLog_SetDnldLogLevel (level);
261 phNxpLog_SetNciTxLogLevel (level);
262
263 ALOGV("%s: global =%u, Fwdnld =%u, extns =%u, \
264 hal =%u, tml =%u, ncir =%u, \
265 ncix =%u", \
266 __func__, gLog_level.global_log_level, gLog_level.dnld_log_level,
267 gLog_level.extns_log_level, gLog_level.hal_log_level, gLog_level.tml_log_level,
268 gLog_level.ncir_log_level, gLog_level.ncix_log_level);
269
270 return;
271 }
272