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