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