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