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