1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Copyright (C) 1999-2012 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "OverrideLog.h" 19a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#include "android_logmsg.h" 20a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#include "nfc_target.h" 21a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#include "buildcfg.h" 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <cutils/log.h> 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 25a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuextern UINT32 ScrProtocolTraceFlag; 26a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#define MAX_NCI_PACKET_SIZE 259 27a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#define BTE_LOG_BUF_SIZE 1024 28a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#define BTE_LOG_MAX_SIZE (BTE_LOG_BUF_SIZE - 12) 29a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#define MAX_LOGCAT_LINE 4096 30a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#define PRINT(s) __android_log_write (ANDROID_LOG_DEBUG, "BrcmNci", s) 31a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic char log_line [MAX_LOGCAT_LINE]; 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic const char* sTable = "0123456789abcdef"; 33a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic BOOLEAN sIsUseRaw = FALSE; 34a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic void ToHex (const UINT8* data, UINT16 len, char* hexString, UINT16 hexStringSize); 35a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic void dumpbin (const char* data, int size, UINT32 trace_layer, UINT32 trace_type); 36a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic inline void word2hex (const char* data, char** hex); 37a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic inline void byte2char (const char* data, char** str); 38a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic inline void byte2hex (const char* data, char** str); 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 40a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 41a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid BTDISP_LOCK_LOG() 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 46a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid BTDISP_UNLOCK_LOG() 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 48a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 50a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 51a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid BTDISP_INIT_LOCK() 52a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 53a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 54a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 55a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 56a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid BTDISP_UNINIT_LOCK() 57a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 61a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid ProtoDispAdapterUseRawOutput (BOOLEAN isUseRaw) 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 63a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu sIsUseRaw = isUseRaw; 64a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 65a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 66a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 67a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid ProtoDispAdapterDisplayNciPacket (UINT8 *nciPacket, UINT16 nciPacketLen, BOOLEAN is_recv) 68a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 69a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //Protocol decoder is not available, so decode NCI packet into hex numbers. 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_NCI)) 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 72a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu char line_buf [(MAX_NCI_PACKET_SIZE*2)+1]; 73a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ToHex (nciPacket, nciPacketLen, line_buf, sizeof(line_buf)); 74a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu __android_log_write (ANDROID_LOG_DEBUG, (is_recv) ? "BrcmNciR": "BrcmNciX", line_buf); 75a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 78a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid ToHex (const UINT8* data, UINT16 len, char* hexString, UINT16 hexStringSize) 79a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 80a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu int i=0, j=0; 81a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu for(i = 0, j = 0; i < len && j < hexStringSize-3; i++) 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 83a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu hexString [j++] = sTable [(*data >> 4) & 0xf]; 84a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu hexString [j++] = sTable [*data & 0xf]; 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project data++; 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 87a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu hexString [j] = '\0'; 88a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 89a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 90a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 91a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu//Protodisp code calls ScrLog() to print decoded texts. 92a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid ScrLog (UINT32 trace_set_mask, const char *fmt_str, ...) 93a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 94a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu static char buffer [BTE_LOG_BUF_SIZE]; 95a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu va_list ap; 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 97a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu va_start (ap, fmt_str); 98a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu vsnprintf (buffer, BTE_LOG_MAX_SIZE, fmt_str, ap); 99a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu va_end (ap); 100a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu __android_log_write(ANDROID_LOG_INFO, "BrcmNci", buffer); 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 104a24be4f06674b2707b57904deaa0dff5a95823bdEvan ChuUINT8 *scru_dump_hex (UINT8 *p, char *pTitle, UINT32 len, UINT32 layer, UINT32 type) 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 106a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if(pTitle && *pTitle) 107a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu PRINT(pTitle); 108a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu dumpbin((char*) p, len, layer, type); 109a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return p; 110a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 113a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid dumpbin(const char* data, int size, UINT32 trace_layer, UINT32 trace_type) 114a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 115a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu char line_buff[256]; 116a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu char *line; 117a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu int i, j, addr; 118a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu const int width = 16; 119a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if(size <= 0) 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 121a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu for(i = 0; i < size / width; i++) 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 123a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu line = line_buff; 124a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //write address: 125a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu addr = i*width; 126a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu word2hex((const char*)&addr, &line); 127a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *line++ = ':'; *line++ = ' '; 128a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //write hex of data 129a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu for(j = 0; j < width; j++) 130a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 131a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu byte2hex(&data[j], &line); 132a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *line++ = ' '; 133a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 134a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //write char of data 135a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu for(j = 0; j < width; j++) 136a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu byte2char(data++, &line); 137a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //wirte the end of line 138a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *line = 0; 139a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //output the line 140a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu PRINT(line_buff); 141a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 142a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //last line of left over if any 143a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu int leftover = size % width; 144a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if(leftover > 0) 145a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 146a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu line = line_buff; 147a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //write address: 148a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu addr = i*width; 149a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu word2hex((const char*)&addr, &line); 150a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *line++ = ':'; *line++ = ' '; 151a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //write hex of data 152a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu for(j = 0; j < leftover; j++) 153a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 154a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu byte2hex(&data[j], &line); 155a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *line++ = ' '; 156a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 157a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //write hex padding 158a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu for(; j < width; j++) 159a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 160a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *line++ = ' '; 161a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *line++ = ' '; 162a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *line++ = ' '; 163a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 164a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //write char of data 165a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu for(j = 0; j < leftover; j++) 166a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu byte2char(data++, &line); 167a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //write the end of line 168a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *line = 0; 169a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //output the line 170a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu PRINT(line_buff); 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 172a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 173a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 175a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuinline void word2hex (const char* data, char** hex) 176a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 177a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu byte2hex(&data[1], hex); 178a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu byte2hex(&data[0], hex); 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 182a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuinline void byte2char (const char* data, char** str) 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 184a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu **str = *data < ' ' ? '.' : *data > '~' ? '.' : *data; 185a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ++(*str); 186a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 189a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuinline void byte2hex (const char* data, char** str) 190a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 191a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu **str = sTable[(*data >> 4) & 0xf]; 192a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ++*str; 193a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu **str = sTable[*data & 0xf]; 194a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ++*str; 195a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 196a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 198a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //Decode a few Bluetooth HCI packets into hex numbers. 199a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispHciCmd (BT_HDR *p_buf) 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 201a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu UINT32 nBytes = ((BT_HDR_SIZE + p_buf->offset + p_buf->len)*2)+1; 202a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu UINT8* data = (UINT8*) p_buf; 203a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu int data_len = BT_HDR_SIZE + p_buf->offset + p_buf->len; 204a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 205a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) 206a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return; 207a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 208a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (nBytes > sizeof(log_line)) 209a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return; 210a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 211a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ToHex (data, data_len, log_line, sizeof(log_line)); 212a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu __android_log_write (ANDROID_LOG_DEBUG, "BrcmHciX", log_line); 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 215a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 216a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //Decode a few Bluetooth HCI packets into hex numbers. 217a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispHciEvt (BT_HDR *p_buf) 218a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 219a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu UINT32 nBytes = ((BT_HDR_SIZE + p_buf->offset + p_buf->len)*2)+1; 220a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu UINT8* data = (UINT8*) p_buf; 221a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu int data_len = BT_HDR_SIZE + p_buf->offset + p_buf->len; 222a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 223a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) 224a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return; 225a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 226a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (nBytes > sizeof(log_line)) 227a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return; 228a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 229a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ToHex (data, data_len, log_line, sizeof(log_line)); 230a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu __android_log_write (ANDROID_LOG_DEBUG, "BrcmHciR", log_line); 231a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 232a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 233a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 234a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu /******************************************************************************* 235a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** 236a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** Function DispLLCP 237a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** 238a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** Description Log LLCP packet as hex-ascii bytes. 239a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** 240a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** Returns None. 241a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** 242a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *******************************************************************************/ 243a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispLLCP (BT_HDR *p_buf, BOOLEAN is_recv) 244a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 245a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu UINT32 nBytes = ((BT_HDR_SIZE + p_buf->offset + p_buf->len)*2)+1; 246a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu UINT8 * data = (UINT8*) p_buf; 247a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu int data_len = BT_HDR_SIZE + p_buf->offset + p_buf->len; 248a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 249a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) 250a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return; 251a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 252a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (nBytes > sizeof(log_line)) 253a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return; 254a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 255a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ToHex (data, data_len, log_line, sizeof(log_line)); 256a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu __android_log_write (ANDROID_LOG_DEBUG, (is_recv) ? "BrcmLlcpR": "BrcmLlcpX", log_line); 257a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 258a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 259a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 260a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu /******************************************************************************* 261a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** 262a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** Function DispHcp 263a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** 264a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** Description Log raw HCP packet as hex-ascii bytes 265a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** 266a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** Returns None. 267a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ** 268a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *******************************************************************************/ 269a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispHcp (UINT8 *data, UINT16 len, BOOLEAN is_recv) 270a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 271a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu UINT32 nBytes = (len*2)+1; 272a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 273a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) 274a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return; 275a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 276a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu // Only trace HCP if we're tracing HCI as well 277a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) 278a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return; 279a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 280a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (nBytes > sizeof(log_line)) 281a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu return; 282a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 283a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ToHex (data, len, log_line, sizeof(log_line)); 284a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu __android_log_write (ANDROID_LOG_DEBUG, (is_recv) ? "BrcmHcpR": "BrcmHcpX", log_line); 285a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 286a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 287a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 288a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispSNEP (UINT8 local_sap, UINT8 remote_sap, BT_HDR *p_buf, BOOLEAN is_first, BOOLEAN is_rx) {} 289a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispCHO (UINT8 *pMsg, UINT32 MsgLen, BOOLEAN is_rx) {} 290a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispT3TagMessage(BT_HDR *p_msg, BOOLEAN is_rx) {} 291a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispRWT4Tags (BT_HDR *p_buf, BOOLEAN is_rx) {} 292a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispCET4Tags (BT_HDR *p_buf, BOOLEAN is_rx) {} 293a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispRWI93Tag (BT_HDR *p_buf, BOOLEAN is_rx, UINT8 command_to_respond) {} 294a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu void DispNDEFMsg (UINT8 *pMsg, UINT32 MsgLen, BOOLEAN is_recv) {} 295a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 296a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 297a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/******************************************************************************* 298a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 299a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Function: LogMsg 300a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 301a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Description: Print messages from NFC stack. 302a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 303a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Returns: None. 304a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** 305a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu*******************************************************************************/ 306a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...) 307a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 308a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu static char buffer [BTE_LOG_BUF_SIZE]; 309a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu va_list ap; 310a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu UINT32 trace_type = trace_set_mask & 0x07; //lower 3 bits contain trace type 311a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu int android_log_type = ANDROID_LOG_INFO; 312a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 313a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu va_start (ap, fmt_str); 314a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu vsnprintf (buffer, BTE_LOG_MAX_SIZE, fmt_str, ap); 315a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu va_end (ap); 316a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (trace_type == TRACE_TYPE_ERROR) 317a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu android_log_type = ANDROID_LOG_ERROR; 318a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu __android_log_write (android_log_type, LOGMSG_TAG_NAME, buffer); 319a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 320a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 321a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 322a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid LogMsg_0 (UINT32 maskTraceSet, const char *p_str) 323a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 324a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu LogMsg (maskTraceSet, p_str); 325a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 326a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 327a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 328a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid LogMsg_1 (UINT32 maskTraceSet, const char *fmt_str, UINT32 p1) 329a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 330a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu LogMsg (maskTraceSet, fmt_str, p1); 331a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 332a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 333a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 334a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid LogMsg_2 (UINT32 maskTraceSet, const char *fmt_str, UINT32 p1, UINT32 p2) 335a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 336a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu LogMsg (maskTraceSet, fmt_str, p1, p2); 337a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 338a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 339a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 340a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid LogMsg_3 (UINT32 maskTraceSet, const char *fmt_str, UINT32 p1, UINT32 p2, UINT32 p3) 341a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 342a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu LogMsg (maskTraceSet, fmt_str, p1, p2, p3); 343a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 344a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 345a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 346a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid LogMsg_4 (UINT32 maskTraceSet, const char *fmt_str, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) 347a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 348a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu LogMsg (maskTraceSet, fmt_str, p1, p2, p3, p4); 349a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 350a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 351a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid LogMsg_5 (UINT32 maskTraceSet, const char *fmt_str, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4, UINT32 p5) 352a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 353a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu LogMsg (maskTraceSet, fmt_str, p1, p2, p3, p4, p5); 354a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu} 355a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 356a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 357a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid LogMsg_6 (UINT32 maskTraceSet, const char *fmt_str, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4, UINT32 p5, UINT32 p6) 358a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{ 359a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu LogMsg (maskTraceSet, fmt_str, p1, p2, p3, p4, p5, p6); 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 361