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