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