1c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi/****************************************************************************** 2c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * 3c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * Copyright (C) 1999-2012 Broadcom Corporation 4c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * 5c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * Licensed under the Apache License, Version 2.0 (the "License"); 6c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * you may not use this file except in compliance with the License. 7c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * You may obtain a copy of the License at: 8c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * 9c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * http://www.apache.org/licenses/LICENSE-2.0 10c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * 11c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * Unless required by applicable law or agreed to in writing, software 12c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * distributed under the License is distributed on an "AS IS" BASIS, 13c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * See the License for the specific language governing permissions and 15c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * limitations under the License. 16c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi * 17c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi ******************************************************************************/ 18d03c06e4c5dc9b5561d084d173d34e731304e604Ruchi Kandoi#include "_OverrideLog.h" 19d03c06e4c5dc9b5561d084d173d34e731304e604Ruchi Kandoi 206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include <cutils/log.h> 21c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi#include "android_logmsg.h" 22c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi#include "buildcfg.h" 236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfc_target.h" 24c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 25c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoiextern uint32_t ScrProtocolTraceFlag; 26c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi#define MAX_NCI_PACKET_SIZE 259 27c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi#define BTE_LOG_BUF_SIZE 1024 28c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi#define BTE_LOG_MAX_SIZE (BTE_LOG_BUF_SIZE - 12) 29c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi#define MAX_LOGCAT_LINE 4096 306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define PRINT(s) __android_log_write(ANDROID_LOG_DEBUG, "BrcmNci", s) 316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic char log_line[MAX_LOGCAT_LINE]; 32c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoistatic const char* sTable = "0123456789abcdef"; 336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic bool sIsUseRaw = FALSE; 346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void ToHex(const uint8_t* data, uint16_t len, char* hexString, 356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t hexStringSize); 366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic void dumpbin(const char* data, int size, uint32_t trace_layer, 376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t trace_type); 386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic inline void word2hex(const char* data, char** hex); 396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic inline void byte2char(const char* data, char** str); 406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic inline void byte2hex(const char* data, char** str); 41c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid BTDISP_LOCK_LOG() {} 43c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid BTDISP_UNLOCK_LOG() {} 45c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid BTDISP_INIT_LOCK() {} 47c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid BTDISP_UNINIT_LOCK() {} 49c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid ProtoDispAdapterUseRawOutput(bool isUseRaw) { sIsUseRaw = isUseRaw; } 51c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid ProtoDispAdapterDisplayNciPacket(uint8_t* nciPacket, uint16_t nciPacketLen, 536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool is_recv) { 546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // Protocol decoder is not available, so decode NCI packet into hex numbers. 556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_NCI)) return; 566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi char line_buf[(MAX_NCI_PACKET_SIZE * 2) + 1]; 576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ToHex(nciPacket, nciPacketLen, line_buf, sizeof(line_buf)); 586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmNciR" : "BrcmNciX", 596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi line_buf); 60c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 61c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid ToHex(const uint8_t* data, uint16_t len, char* hexString, 636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t hexStringSize) { 646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int i = 0, j = 0; 656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (i = 0, j = 0; i < len && j < hexStringSize - 3; i++) { 666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi hexString[j++] = sTable[(*data >> 4) & 0xf]; 676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi hexString[j++] = sTable[*data & 0xf]; 686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi data++; 696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi hexString[j] = '\0'; 71c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 72c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi// Protodisp code calls ScrLog() to print decoded texts. 746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid ScrLog(uint32_t trace_set_mask, const char* fmt_str, ...) { 756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi static char buffer[BTE_LOG_BUF_SIZE]; 766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi va_list ap; 77c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi va_start(ap, fmt_str); 796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi vsnprintf(buffer, BTE_LOG_MAX_SIZE, fmt_str, ap); 806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi va_end(ap); 816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi __android_log_write(ANDROID_LOG_INFO, "BrcmNci", buffer); 82c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 83c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t* scru_dump_hex(uint8_t* p, char* pTitle, uint32_t len, uint32_t layer, 856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t type) { 866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (pTitle && *pTitle) PRINT(pTitle); 876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dumpbin((char*)p, len, layer, type); 886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return p; 89c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 90c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid dumpbin(const char* data, int size, uint32_t trace_layer, 926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t trace_type) { 936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi char line_buff[256]; 946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi char* line; 956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int i, j, addr; 966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi const int width = 16; 976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (size <= 0) return; 986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (i = 0; i < size / width; i++) { 996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi line = line_buff; 1006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // write address: 1016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi addr = i * width; 1026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi word2hex((const char*)&addr, &line); 1036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line++ = ':'; 1046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line++ = ' '; 1056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // write hex of data 1066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (j = 0; j < width; j++) { 1076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi byte2hex(&data[j], &line); 1086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line++ = ' '; 109c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi } 1106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // write char of data 1116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (j = 0; j < width; j++) byte2char(data++, &line); 1126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // wirte the end of line 1136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line = 0; 1146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // output the line 1156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi PRINT(line_buff); 1166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // last line of left over if any 1186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int leftover = size % width; 1196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (leftover > 0) { 1206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi line = line_buff; 1216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // write address: 1226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi addr = i * width; 1236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi word2hex((const char*)&addr, &line); 1246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line++ = ':'; 1256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line++ = ' '; 1266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // write hex of data 1276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (j = 0; j < leftover; j++) { 1286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi byte2hex(&data[j], &line); 1296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line++ = ' '; 130c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi } 1316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // write hex padding 1326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (; j < width; j++) { 1336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line++ = ' '; 1346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line++ = ' '; 1356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line++ = ' '; 136c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi } 1376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // write char of data 1386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (j = 0; j < leftover; j++) byte2char(data++, &line); 1396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // write the end of line 1406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *line = 0; 1416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // output the line 1426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi PRINT(line_buff); 1436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 144c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 145c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiinline void word2hex(const char* data, char** hex) { 1476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi byte2hex(&data[1], hex); 1486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi byte2hex(&data[0], hex); 149c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 150c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiinline void byte2char(const char* data, char** str) { 1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi **str = *data < ' ' ? '.' : *data > '~' ? '.' : *data; 1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ++(*str); 154c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 155c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiinline void byte2hex(const char* data, char** str) { 1576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi **str = sTable[(*data >> 4) & 0xf]; 1586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ++*str; 1596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi **str = sTable[*data & 0xf]; 1606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ++*str; 161c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 162c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi// Decode a few Bluetooth HCI packets into hex numbers. 1646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispHciCmd(NFC_HDR* p_buf) { 1656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t nBytes = ((NFC_HDR_SIZE + p_buf->offset + p_buf->len) * 2) + 1; 1666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* data = (uint8_t*)p_buf; 1676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int data_len = NFC_HDR_SIZE + p_buf->offset + p_buf->len; 168c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return; 170c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nBytes > sizeof(log_line)) return; 172c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ToHex(data, data_len, log_line, sizeof(log_line)); 1746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi __android_log_write(ANDROID_LOG_DEBUG, "BrcmHciX", log_line); 1756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi} 176c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi// Decode a few Bluetooth HCI packets into hex numbers. 1786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispHciEvt(NFC_HDR* p_buf) { 1796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t nBytes = ((NFC_HDR_SIZE + p_buf->offset + p_buf->len) * 2) + 1; 1806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* data = (uint8_t*)p_buf; 1816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int data_len = NFC_HDR_SIZE + p_buf->offset + p_buf->len; 182c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return; 184c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nBytes > sizeof(log_line)) return; 186c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ToHex(data, data_len, log_line, sizeof(log_line)); 1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi __android_log_write(ANDROID_LOG_DEBUG, "BrcmHciR", log_line); 1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi} 190c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi/*************************************************************************** 1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** 1936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** Function DispLLCP 1946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** 1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** Description Log LLCP packet as hex-ascii bytes. 1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** 1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** Returns None. 1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** 1996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi***************************************************************************/ 2006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispLLCP(NFC_HDR* p_buf, bool is_recv) { 2016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t nBytes = ((NFC_HDR_SIZE + p_buf->offset + p_buf->len) * 2) + 1; 2026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* data = (uint8_t*)p_buf; 2036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int data_len = NFC_HDR_SIZE + p_buf->offset + p_buf->len; 204c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return; 206c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nBytes > sizeof(log_line)) return; 208c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ToHex(data, data_len, log_line, sizeof(log_line)); 2106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmLlcpR" : "BrcmLlcpX", 2116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi log_line); 2126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi} 213c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi/*************************************************************************** 2156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** 2166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** Function DispHcp 2176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** 2186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** Description Log raw HCP packet as hex-ascii bytes 2196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** 2206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** Returns None. 2216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi** 2226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi***************************************************************************/ 2236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispHcp(uint8_t* data, uint16_t len, bool is_recv) { 2246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t nBytes = (len * 2) + 1; 225c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return; 227c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi // Only trace HCP if we're tracing HCI as well 2296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) return; 230c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nBytes > sizeof(log_line)) return; 232c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ToHex(data, len, log_line, sizeof(log_line)); 2346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmHcpR" : "BrcmHcpX", 2356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi log_line); 2366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi} 237c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispSNEP(uint8_t local_sap, uint8_t remote_sap, NFC_HDR* p_buf, 2396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi bool is_first, bool is_rx) {} 2406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispCHO(uint8_t* pMsg, uint32_t MsgLen, bool is_rx) {} 2416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispT3TagMessage(NFC_HDR* p_msg, bool is_rx) {} 2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispRWT4Tags(NFC_HDR* p_buf, bool is_rx) {} 2436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispCET4Tags(NFC_HDR* p_buf, bool is_rx) {} 2446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispRWI93Tag(NFC_HDR* p_buf, bool is_rx, uint8_t command_to_respond) {} 2456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid DispNDEFMsg(uint8_t* pMsg, uint32_t MsgLen, bool is_recv) {} 246c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 247c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi/******************************************************************************* 248c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi** 249c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi** Function: LogMsg 250c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi** 251c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi** Description: Print messages from NFC stack. 252c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi** 253c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi** Returns: None. 254c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi** 255c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi*******************************************************************************/ 2566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) { 2576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi static char buffer[BTE_LOG_BUF_SIZE]; 2586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi va_list ap; 2596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t trace_type = 2606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi trace_set_mask & 0x07; // lower 3 bits contain trace type 2616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int android_log_type = ANDROID_LOG_INFO; 2626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi va_start(ap, fmt_str); 2646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi vsnprintf(buffer, BTE_LOG_MAX_SIZE, fmt_str, ap); 2656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi va_end(ap); 2666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (trace_type == TRACE_TYPE_ERROR) android_log_type = ANDROID_LOG_ERROR; 2676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi __android_log_write(android_log_type, LOGMSG_TAG_NAME, buffer); 268c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 269c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid LogMsg_0(uint32_t maskTraceSet, const char* p_str) { 2716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LogMsg(maskTraceSet, p_str); 272c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 273c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid LogMsg_1(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1) { 2756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LogMsg(maskTraceSet, fmt_str, p1); 276c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 277c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid LogMsg_2(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1, 2796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uintptr_t p2) { 2806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LogMsg(maskTraceSet, fmt_str, p1, p2); 281c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 282c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid LogMsg_3(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1, 2846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uintptr_t p2, uintptr_t p3) { 2856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LogMsg(maskTraceSet, fmt_str, p1, p2, p3); 286c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 287c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid LogMsg_4(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1, 2896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uintptr_t p2, uintptr_t p3, uintptr_t p4) { 2906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LogMsg(maskTraceSet, fmt_str, p1, p2, p3, p4); 291c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 292c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid LogMsg_5(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1, 2946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5) { 2956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LogMsg(maskTraceSet, fmt_str, p1, p2, p3, p4, p5); 296c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 297c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi 2986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid LogMsg_6(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1, 2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5, 3006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uintptr_t p6) { 3016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi LogMsg(maskTraceSet, fmt_str, p1, p2, p3, p4, p5, p6); 302c48669e5377a49f384c6de1d162534248d30f9f3Ruchi Kandoi} 303