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