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 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 24 const char * NXPLOG_ITEM_EXTNS = "NxpExtns"; 25 const char * NXPLOG_ITEM_NCIHAL = "NxpHal"; 26 const char * NXPLOG_ITEM_NCIX = "NxpNciX"; 27 const char * NXPLOG_ITEM_NCIR = "NxpNciR"; 28 const char * NXPLOG_ITEM_FWDNLD = "NxpFwDnld"; 29 const char * NXPLOG_ITEM_TML = "NxpTml"; 30 31 #ifdef NXP_HCI_REQ 32 const char * NXPLOG_ITEM_HCPX = "NxpHcpX"; 33 const char * NXPLOG_ITEM_HCPR = "NxpHcpR"; 34 #endif /*NXP_HCI_REQ*/ 35 36 /* global log level structure */ 37 nci_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 ******************************************************************************/ 51 static 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 ******************************************************************************/ 77 static 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 return; 97 } 98 99 /******************************************************************************* 100 * 101 * Function phNxpLog_SetExtnsLogLevel 102 * 103 * Description Sets the Extensions layer log level. 104 * 105 * Returns void 106 * 107 ******************************************************************************/ 108 static void phNxpLog_SetExtnsLogLevel (uint8_t level) 109 { 110 unsigned long num = 0; 111 int len; 112 char valueStr [PROPERTY_VALUE_MAX] = {0}; 113 if (GetNxpNumValue (NAME_NXPLOG_EXTNS_LOGLEVEL, &num, sizeof(num))) 114 { 115 gLog_level.extns_log_level = (level > (unsigned char) num) ? level : (unsigned char) num;; 116 } 117 118 len = property_get (PROP_NAME_NXPLOG_EXTNS_LOGLEVEL, valueStr, ""); 119 if (len > 0) 120 { 121 /* let Android property override .conf variable */ 122 sscanf (valueStr, "%lu", &num); 123 gLog_level.extns_log_level = (unsigned char) num; 124 } 125 126 return; 127 } 128 129 /******************************************************************************* 130 * 131 * Function phNxpLog_SetTmlLogLevel 132 * 133 * Description Sets the TML layer log level. 134 * 135 * Returns void 136 * 137 ******************************************************************************/ 138 static void phNxpLog_SetTmlLogLevel (uint8_t level) 139 { 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 { 145 gLog_level.tml_log_level = (level > (unsigned char) num) ? level : (unsigned char) num;; 146 } 147 148 len = property_get (PROP_NAME_NXPLOG_TML_LOGLEVEL, valueStr, ""); 149 if (len > 0) 150 { 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 { 170 unsigned long num = 0; 171 int len; 172 char valueStr [PROPERTY_VALUE_MAX] = {0}; 173 if (GetNxpNumValue (NAME_NXPLOG_FWDNLD_LOGLEVEL, &num, sizeof(num))) 174 { 175 gLog_level.dnld_log_level = (level > (unsigned char) num) ? level : (unsigned char) num;; 176 } 177 178 len = property_get (PROP_NAME_NXPLOG_FWDNLD_LOGLEVEL, valueStr, ""); 179 if (len > 0) 180 { 181 /* let Android property override .conf variable */ 182 sscanf (valueStr, "%lu", &num); 183 gLog_level.dnld_log_level = (unsigned char) num; 184 } 185 186 return; 187 } 188 189 /******************************************************************************* 190 * 191 * Function phNxpLog_SetNciTxLogLevel 192 * 193 * Description Sets the NCI transaction layer log level. 194 * 195 * Returns void 196 * 197 ******************************************************************************/ 198 static void phNxpLog_SetNciTxLogLevel (uint8_t level) 199 { 200 unsigned long num = 0; 201 int len; 202 char valueStr [PROPERTY_VALUE_MAX] = {0}; 203 if (GetNxpNumValue (NAME_NXPLOG_NCIX_LOGLEVEL, &num, sizeof(num))) 204 { 205 gLog_level.ncix_log_level = (level > (unsigned char) num) ? level : (unsigned char) num; 206 } 207 if (GetNxpNumValue (NAME_NXPLOG_NCIR_LOGLEVEL, &num, sizeof(num))) 208 { 209 gLog_level.ncir_log_level = (level > (unsigned char) num) ? level : (unsigned char) num;; 210 } 211 212 len = property_get (PROP_NAME_NXPLOG_NCI_LOGLEVEL, valueStr, ""); 213 if (len > 0) 214 { 215 /* let Android property override .conf variable */ 216 sscanf (valueStr, "%lu", &num); 217 gLog_level.ncix_log_level = (unsigned char) num; 218 gLog_level.ncir_log_level = (unsigned char) num; 219 } 220 221 return; 222 } 223 224 /****************************************************************************** 225 * Function phNxpLog_InitializeLogLevel 226 * 227 * Description Initialize and get log level of module from libnfc-nxp.conf or 228 * Android runtime properties. 229 * The Android property nfc.nxp_global_log_level is to 230 * define log level for all modules. Modules log level will override global level. 231 * The Android property will override the level 232 * in libnfc-nxp.conf 233 * 234 * Android property names: 235 * nfc.nxp_log_level_global * defines log level for all modules 236 * nfc.nxp_log_level_extns * extensions module log 237 * nfc.nxp_log_level_hal * Hal module log 238 * nfc.nxp_log_level_dnld * firmware download module log 239 * nfc.nxp_log_level_tml * TML module log 240 * nfc.nxp_log_level_nci * NCI transaction log 241 * 242 * Log Level values: 243 * NXPLOG_LOG_SILENT_LOGLEVEL 0 * No trace to show 244 * NXPLOG_LOG_ERROR_LOGLEVEL 1 * Show Error trace only 245 * NXPLOG_LOG_WARN_LOGLEVEL 2 * Show Warning trace and Error trace 246 * NXPLOG_LOG_DEBUG_LOGLEVEL 3 * Show all traces 247 * 248 * Returns void 249 * 250 ******************************************************************************/ 251 void phNxpLog_InitializeLogLevel(void) 252 { 253 uint8_t level = phNxpLog_SetGlobalLogLevel (); 254 phNxpLog_SetHALLogLevel (level); 255 phNxpLog_SetExtnsLogLevel (level); 256 phNxpLog_SetTmlLogLevel (level); 257 phNxpLog_SetDnldLogLevel (level); 258 phNxpLog_SetNciTxLogLevel (level); 259 260 ALOGD ("%s: global =%u, Fwdnld =%u, extns =%u, \ 261 hal =%u, tml =%u, ncir =%u, \ 262 ncix =%u", \ 263 __FUNCTION__, gLog_level.global_log_level, gLog_level.dnld_log_level, 264 gLog_level.extns_log_level, gLog_level.hal_log_level, gLog_level.tml_log_level, 265 gLog_level.ncir_log_level, gLog_level.ncix_log_level); 266 267 return; 268 } 269