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