1a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/******************************************************************************
2a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *
3a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *  Copyright (C) 2011-2012 Broadcom Corporation
4a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *
5a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *  Licensed under the Apache License, Version 2.0 (the "License");
6a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *  you may not use this file except in compliance with the License.
7a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *  You may obtain a copy of the License at:
8a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *
9a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *  http://www.apache.org/licenses/LICENSE-2.0
10a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *
11a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *  Unless required by applicable law or agreed to in writing, software
12a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *  distributed under the License is distributed on an "AS IS" BASIS,
13a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *  See the License for the specific language governing permissions and
15a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *  limitations under the License.
16a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *
17a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ******************************************************************************/
18a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#include "OverrideLog.h"
19a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#include "ProtoDispBluetoothHci.h"
20a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#include "nfc_target.h"
21a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#include <cutils/log.h>
22a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
23a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
24a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuextern UINT8 *HCIDisp1 (char *p_descr, UINT8 *p_data);
25a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuextern UINT32 ScrProtocolTraceFlag;
26a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#define HCI_GEN_TRACE   (TRACE_CTRL_GENERAL | TRACE_LAYER_HCI | \
27a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu                         TRACE_ORG_PROTO_DISP | hci_trace_type)
28a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic UINT8 hci_trace_type = 0;
29a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic char* modes_str [] =
30a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{
31a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "No sleep mode",
32a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "UART",
33a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "UART with messaging",
34a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "USB",
35a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "H4IBSS",
36a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "USB with host wake",
37a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "SDIO",
38a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "UART CS-N",
39a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "SPI",
40a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "H5",
41a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "H4DS",
42a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "",
43a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    "UART with BREAK"
44a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu};
45a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic UINT8* p_end_hci = NULL;
46a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic UINT8* HCIDisp1Ext (char *p_descr, UINT8 *p_data, char * p_ext);
47a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic void disp_sleepmode (UINT8* p);
48a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chustatic void disp_sleepmode_evt (UINT8* p);
49a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
50a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
51a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu///////////////////////////////////////////
52a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu///////////////////////////////////////////
53a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
54a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
55a24be4f06674b2707b57904deaa0dff5a95823bdEvan ChuUINT8 *HCIDisp1Ext (char *p_descr, UINT8 *p_data, char * p_ext)
56a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{
57a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    if (p_data == p_end_hci)
58a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return p_data;
59a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
60a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    char    buff[200];
61a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
62a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    sprintf (buff, "%40s : %u (0x%02x): %s", p_descr, *p_data, *p_data, p_ext);
63a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
64a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    ScrLog (HCI_GEN_TRACE, "%s", buff);
65a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    return (p_data + 1);
66a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu}
67a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
68a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
69a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/*******************************************************************************
70a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
71a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Function         disp_sleepmode
72a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
73a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Description      Displays VSC sleep mode
74a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
75a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Returns          none.
76a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
77a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu*******************************************************************************/
78a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid disp_sleepmode(UINT8 * p)
79a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{
80a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    hci_trace_type = TRACE_TYPE_CMD_TX;
81a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    ScrLog (HCI_GEN_TRACE, "--");
82a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    int len     = p[2];
83a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    ScrLog (HCI_GEN_TRACE, "SEND Command to HCI.  Name: Set_Sleepmode_Param   (Hex Code: 0xfc27  Param Len: %d)", len);
84a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p       += 3;
85a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p_end_hci   = p + len;
86a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1Ext("Sleep_Mode", p, (*p <= 12) ? modes_str[*p] : "");
87a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1("Idle_Threshold_Host", p);
88a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1("Idle_Threshold_HC", p);
89a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1Ext("BT_WAKE_Active_Mode", p, (*p == 0) ? "Active Low" : ((*p == 1) ? "Active High" : ""));
90a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1Ext("HOST_WAKE_Active_Mode", p, (*p == 0) ? "Active Low" : ((*p == 1) ? "Active High" : ""));
91a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1("Allow_Host_Sleep_During_SCO", p);
92a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1("Combine_Sleep_Mode_And_LPM", p);
93a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1("Enable_Tristate_Control_Of_UART_Tx_Line", p);
94a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1Ext("Active_Connection_Handling_On_Suspend", p, (*p == 0) ? "Maintain connections; sleep when timed activity allows" : ((*p == 1) ? "Sleep until resume is detected" : ""));
95a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1("Resume_Timeout", p);
96a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1("Enable_BREAK_To_Host", p);
97a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1("Pulsed_HOST_WAKE", p);
98a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
99a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    ScrLog (HCI_GEN_TRACE, "--");
100a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu}
101a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
102a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
103a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/*******************************************************************************
104a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
105a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Function         disp_sleepmode_evt
106a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
107a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Description      Displays HCI comand complete event for VSC sleep mode.
108a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
109a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Returns          none.
110a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
111a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu*******************************************************************************/
112a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid disp_sleepmode_evt(UINT8* p)
113a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{
114a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    UINT8   len=p[1], status=p[5];
115a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
116a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    hci_trace_type = TRACE_TYPE_EVT_RX;
117a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    ScrLog (HCI_GEN_TRACE, "--");
118a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    ScrLog (HCI_GEN_TRACE, "RCVD Event from HCI. Name: HCI_Command_Complete  (Hex Code: 0x0e  Param Len: %d)", len);
119a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
120a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    p = HCIDisp1 ("Num HCI Cmd Packets", p+2);
121a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    ScrLog (HCI_GEN_TRACE,"%40s : 0xfc27  (Set_Sleepmode_Param)", "Cmd Code");
122a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    ScrLog (HCI_GEN_TRACE, "%40s : %d (0x%02x) %s", "Status", status, status, (status == 0) ? "Success" : "");
123a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    ScrLog (HCI_GEN_TRACE, "--");
124a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu}
125a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
126a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/*******************************************************************************
127a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
128a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Function         ProtoDispBluetoothHciCmd
129a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
130a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Description      Display a HCI command string
131a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
132a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Returns:
133a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**                  Nothing
134a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
135a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu*******************************************************************************/
136a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid ProtoDispBluetoothHciCmd (BT_HDR *p_buf)
137a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{
138a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY))
139a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return;
140a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    UINT8 * p = (UINT8 *)(p_buf + 1) + p_buf->offset;
141a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    if (*(p) == 0x27 && *(p+1) == 0xfc) // opcode sleep mode
142a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    {
143a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        disp_sleepmode(p);
144a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    }
145a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu}
146a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
147a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
148a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu/*******************************************************************************
149a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
150a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Function         ProtoDispBluetoothHciEvt
151a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
152a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Description      display a NCI event
153a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
154a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu** Returns:
155a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**                  Nothing
156a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu**
157a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu*******************************************************************************/
158a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuvoid ProtoDispBluetoothHciEvt (BT_HDR *pBuffer)
159a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu{
160a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY))
161a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        return;
162a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu
163a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    UINT8   *p = (UINT8 *)(pBuffer + 1) + pBuffer->offset;
164a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    if (*p == 0x0e) // command complete
165a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    {
166a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        if (*(p+1) == 4)    // length
167a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        {
168a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu            if (*(p+3) == 0x27 && *(p+4) == 0xfc)   // opcode 0x27fc (sleep mode)
169a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu            {
170a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu                disp_sleepmode_evt(p);
171a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu            }
172a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu        }
173a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu    }
174a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu}
175