Home | History | Annotate | Download | only in log
      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  ******************************************************************************/
     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  ******************************************************************************/
     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  ******************************************************************************/
    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  ******************************************************************************/
    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  ******************************************************************************/
    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  ******************************************************************************/
    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  ******************************************************************************/
    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