1b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu/****************************************************************************** 2b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 3b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Copyright (C) 2011-2012 Broadcom Corporation 4b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 5b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Licensed under the Apache License, Version 2.0 (the "License"); 6b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * you may not use this file except in compliance with the License. 7b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * You may obtain a copy of the License at: 8b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 9b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * http://www.apache.org/licenses/LICENSE-2.0 10b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 11b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Unless required by applicable law or agreed to in writing, software 12b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * distributed under the License is distributed on an "AS IS" BASIS, 13b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * See the License for the specific language governing permissions and 15b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * limitations under the License. 16b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 17b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu ******************************************************************************/ 18e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu#include "OverrideLog.h" 1945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <sys/types.h> 2045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <sys/stat.h> 2145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <fcntl.h> 2245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <errno.h> 2345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "buildcfg.h" 2445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_mem_co.h" 2545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_nv_co.h" 2645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_nv_ci.h" 2745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "config.h" 2845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 2945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#define LOG_TAG "BrcmNfcNfa" 3045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#define PRINT(s) __android_log_write(ANDROID_LOG_DEBUG, "BrcmNci", s) 31e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu#define MAX_NCI_PACKET_SIZE 259 32e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu#define MAX_LOGCAT_LINE 4096 33e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chustatic char log_line[MAX_LOGCAT_LINE]; 3445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 3545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuextern UINT32 ScrProtocolTraceFlag; // = SCR_PROTO_TRACE_ALL; // 0x017F; 3645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic const char* sTable = "0123456789abcdef"; 3745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuextern char bcm_nfc_location[]; 3845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 3945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 4045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 4145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_mem_co_alloc 4245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 4345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description allocate a buffer from platform's memory pool 4445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 4545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 4645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** pointer to buffer if successful 4745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** NULL otherwise 4845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 4945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 5045faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern void *nfa_mem_co_alloc(UINT32 num_bytes) 5145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 5245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return malloc(num_bytes); 5345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 5445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 5545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 5645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 5745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 5845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_mem_co_free 5945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 6045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description free buffer previously allocated using nfa_mem_co_alloc 6145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 6245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 6345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 6445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 6545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 6645faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern void nfa_mem_co_free(void *pBuffer) 6745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 6845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu free(pBuffer); 6945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 7045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 7145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 7245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 7345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_nv_co_read 7545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description This function is called by NFA to read in data from the 7745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** previously opened file. 7845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Parameters pBuffer - buffer to read the data into. 8045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** nbytes - number of bytes to read into the buffer. 8145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 8245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns void 83e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 8445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Note: Upon completion of the request, nfa_nv_ci_read() is 8545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** called with the buffer of data, along with the number 8645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** of bytes read into the buffer, and a status. The 8745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** call-in function should only be called when ALL requested 8845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** bytes have been read, the end of file has been detected, 8945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** or an error has occurred. 9045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 9145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 9245faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern void nfa_nv_co_read(UINT8 *pBuffer, UINT16 nbytes, UINT8 block) 9345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 9445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu char filename[256], filename2[256]; 9545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu strcpy(filename2, bcm_nfc_location); 9645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu strcat(filename2, "/nfaStorage.bin"); 9745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (strlen(filename2) > 200) 9845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 9945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: filename too long", __FUNCTION__); 10045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return; 10145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 10245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu sprintf (filename, "%s%u", filename2, block); 10345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 10445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD ("%s: buffer len=%u; file=%s", __FUNCTION__, nbytes, filename); 10545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int fileStream = open (filename, O_RDONLY); 10645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (fileStream > 0) 10745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 10845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu size_t actualRead = read (fileStream, pBuffer, nbytes); 10945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (actualRead > 0) 11045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 11145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD ("%s: read bytes=%u", __FUNCTION__, actualRead); 11245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_read (actualRead, NFA_NV_CO_OK, block); 11345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 11445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 11545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 11645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: fail to read", __FUNCTION__); 11745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_read (actualRead, NFA_NV_CO_FAIL, block); 11845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 11945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu close (fileStream); 12045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 12145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 12245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 12345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: fail to open", __FUNCTION__); 12445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_read (0, NFA_NV_CO_FAIL, block); 12545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 12645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 12745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 12845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 12945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 13045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_nv_co_write 13145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 13245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description This function is called by io to send file data to the 13345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** phone. 13445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 13545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Parameters pBuffer - buffer to read the data from. 13645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** nbytes - number of bytes to write out to the file. 13745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 13845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns void 139e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 14045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Note: Upon completion of the request, nfa_nv_ci_write() is 14145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** called with the file descriptor and the status. The 14245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** call-in function should only be called when ALL requested 14345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** bytes have been written, or an error has been detected, 14445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 14545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 14645faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern void nfa_nv_co_write(const UINT8 *pBuffer, UINT16 nbytes, UINT8 block) 14745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 14845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu char filename[256], filename2[256]; 14945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu strcpy(filename2, bcm_nfc_location); 15045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu strcat(filename2, "/nfaStorage.bin"); 15145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (strlen(filename2) > 200) 15245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 15345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: filename too long", __FUNCTION__); 15445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return; 15545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 15645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu sprintf (filename, "%s%u", filename2, block); 15745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD ("%s: bytes=%u; file=%s", __FUNCTION__, nbytes, filename); 158e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 15945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int fileStream = 0; 160e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 16145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu fileStream = open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); 16245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (fileStream > 0) 16345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 16445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu size_t actualWritten = write (fileStream, pBuffer, nbytes); 16545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD ("%s: %d bytes written", __FUNCTION__, actualWritten); 16645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (actualWritten > 0) { 16745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_write (NFA_NV_CO_OK); 16845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 16945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 17045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 17145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: fail to write", __FUNCTION__); 17245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_write (NFA_NV_CO_FAIL); 17345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 17445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu close (fileStream); 17545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 17645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 17745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 17845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: fail to open, error = %d", __FUNCTION__, errno); 17945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_write (NFA_NV_CO_FAIL); 18045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 18145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 18245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 18345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 18445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function byte2hex 18645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description convert a byte array to hexadecimal string 18845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 19045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 19145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 19245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 19345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic inline void byte2hex(const char* data, char** str) 19445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 19545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu **str = sTable[(*data >> 4) & 0xf]; 19645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ++*str; 19745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu **str = sTable[*data & 0xf]; 19845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ++*str; 19945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 20045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 20145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 20245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 20345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function byte2char 20445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 20545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description convert a byte array to displayable text string 20645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 20745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 20845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 20945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 21045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 21145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic inline void byte2char(const char* data, char** str) 21245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 21345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu **str = *data < ' ' ? '.' : *data > '~' ? '.' : *data; 21445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ++(*str); 21545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 21645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 21745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 21845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 21945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function word2hex 22045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 22145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description Convert a two byte into text string as little-endian WORD 22245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 22345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 22445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 22545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 22645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 22745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic inline void word2hex(const char* data, char** hex) 22845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 22945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2hex(&data[1], hex); 23045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2hex(&data[0], hex); 23145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 23245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 23345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 23445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 23545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function dumpbin 23645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 23745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description convert a byte array to a blob of text string for logging 23845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 23945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 24045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 24145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 24245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 24345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuvoid dumpbin(const char* data, int size, UINT32 trace_layer, UINT32 trace_type) 24445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 24545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu char line_buff[256]; 24645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu char *line; 24745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int i, j, addr; 24845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu const int width = 16; 24945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if(size <= 0) 25045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return; 25145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#ifdef __RAW_HEADER 25245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write offset 25345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu line = line_buff; 25445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 25545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 25645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 25745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 25845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 25945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 26045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(j = 0; j < width; j++) 26145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 26245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2hex((const char*)&j, &line); 26345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 26445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 26545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line = 0; 26645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu PRINT(line_buff); 26745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif 26845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(i = 0; i < size / width; i++) 26945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 27045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu line = line_buff; 27145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write address: 27245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu addr = i*width; 27345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu word2hex((const char*)&addr, &line); 27445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ':'; *line++ = ' '; 27545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write hex of data 27645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(j = 0; j < width; j++) 27745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 27845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2hex(&data[j], &line); 27945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 28045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 28145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write char of data 28245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(j = 0; j < width; j++) 28345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2char(data++, &line); 28445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //wirte the end of line 28545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line = 0; 28645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //output the line 28745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu PRINT(line_buff); 28845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 28945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //last line of left over if any 29045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int leftover = size % width; 29145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if(leftover > 0) 29245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 29345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu line = line_buff; 29445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write address: 29545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu addr = i*width; 29645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu word2hex((const char*)&addr, &line); 29745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ':'; *line++ = ' '; 29845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write hex of data 29945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(j = 0; j < leftover; j++) 30045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 30145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2hex(&data[j], &line); 30245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 30345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 30445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write hex padding 30545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(; j < width; j++) 30645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 30745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 30845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 30945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 31045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 31145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write char of data 31245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(j = 0; j < leftover; j++) 31345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2char(data++, &line); 31445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write the end of line 31545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line = 0; 31645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //output the line 31745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu PRINT(line_buff); 31845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 31945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 32045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 32145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 32245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 32345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function scru_dump_hex 32445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 32545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description print a text string to log 32645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 32745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 32845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** text string 32945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 33045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 33145faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 *scru_dump_hex (UINT8 *p, char *pTitle, UINT32 len, UINT32 layer, UINT32 type) 33245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 33345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if(pTitle && *pTitle) 33445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu PRINT(pTitle); 33545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu dumpbin(p, len, layer, type); 33645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return p; 33745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 33845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 33945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 34045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 34145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function DispHciCmd 34245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 34345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description Display a HCI command string 34445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 34545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 34645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 34745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 34845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 349e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispHciCmd (BT_HDR *p_buf) 35045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 351e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int i,j; 352e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int nBytes = ((BT_HDR_SIZE + p_buf->offset + p_buf->len)*2)+1; 353e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu UINT8 * data = (UINT8*) p_buf; 354e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int data_len = BT_HDR_SIZE + p_buf->offset + p_buf->len; 35545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 35645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) 35745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return; 358e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 359e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu if (nBytes > sizeof(log_line)) 360e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu return; 361e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 362e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu for(i = 0, j = 0; i < data_len && j < sizeof(log_line)-3; i++) 363e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu { 364e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[(*data >> 4) & 0xf]; 365e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[*data & 0xf]; 366e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu data++; 367e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu } 368e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j] = '\0'; 369e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 370e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu __android_log_write(ANDROID_LOG_DEBUG, "BrcmHciX", log_line); 37145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 37245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 37345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 37445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 37545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 37645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function DispHciEvt 37745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 37845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description display a NCI event 37945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 38045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 38145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 38245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 38345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 384e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispHciEvt (BT_HDR *p_buf) 38545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 386e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int i,j; 387e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int nBytes = ((BT_HDR_SIZE + p_buf->offset + p_buf->len)*2)+1; 388e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu UINT8 * data = (UINT8*) p_buf; 389e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int data_len = BT_HDR_SIZE + p_buf->offset + p_buf->len; 390e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 39145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) 39245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return; 393e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 394e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu if (nBytes > sizeof(log_line)) 395e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu return; 396e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 397e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu for(i = 0, j = 0; i < data_len && j < sizeof(log_line)-3; i++) 398e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu { 399e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[(*data >> 4) & 0xf]; 400e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[*data & 0xf]; 401e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu data++; 402e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu } 403e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j] = '\0'; 404e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 405e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu __android_log_write(ANDROID_LOG_DEBUG, "BrcmHciR", log_line); 40645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 40745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 40863f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen/******************************************************************************* 40963f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** 41063f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** Function DispNciDump 41163f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** 41263f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** Description Log raw NCI packet as hex-ascii bytes 41363f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** 41463f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** Returns None. 41563f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** 41663f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen*******************************************************************************/ 41763f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenenvoid DispNciDump (UINT8 *data, UINT16 len, BOOLEAN is_recv) 41863f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen{ 41942d73cd99ecb8ad8d1108017be383d871b288605Martijn Coenen if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_NCI)) 420e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu return; 421e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 42263f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen char line_buf[(MAX_NCI_PACKET_SIZE*2)+1]; 42363f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen int i,j; 42445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 42563f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen for(i = 0, j = 0; i < len && j < sizeof(line_buf)-3; i++) 42663f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen { 42763f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen line_buf[j++] = sTable[(*data >> 4) & 0xf]; 42863f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen line_buf[j++] = sTable[*data & 0xf]; 42963f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen data++; 43063f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen } 43163f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen line_buf[j] = '\0'; 432e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 43363f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmNciR": "BrcmNciX", line_buf); 43463f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen} 435e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 436e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 437e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu/******************************************************************************* 438e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 439e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Function DispLLCP 440e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 441e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Description Log raw LLCP packet as hex-ascii bytes 442e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 443e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Returns None. 444e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 445e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu*******************************************************************************/ 446e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispLLCP (BT_HDR *p_buf, BOOLEAN is_recv) 447e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu{ 448e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int i,j; 449e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int nBytes = ((BT_HDR_SIZE + p_buf->offset + p_buf->len)*2)+1; 450e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu UINT8 * data = (UINT8*) p_buf; 451e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int data_len = BT_HDR_SIZE + p_buf->offset + p_buf->len; 452e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 4536a36486bba856b2ea2783c88f47e262c131a68fbEvan Chu if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) 4546a36486bba856b2ea2783c88f47e262c131a68fbEvan Chu return; 4556a36486bba856b2ea2783c88f47e262c131a68fbEvan Chu 456e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu for (i = 0; i < data_len; ) 457e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu { 458e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu for(j = 0; i < data_len && j < sizeof(log_line)-3; i++) 459e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu { 460e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[(*data >> 4) & 0xf]; 461e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[*data & 0xf]; 462e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu data++; 463e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu } 464e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j] = '\0'; 465e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmLlcpR": "BrcmLlcpX", log_line); 466e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu } 467e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu} 468e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 469e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 470e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu/******************************************************************************* 471e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 472e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Function DispHcp 473e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 474e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Description Log raw HCP packet as hex-ascii bytes 475e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 476e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Returns None. 477e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 478e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu*******************************************************************************/ 479e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispHcp (UINT8 *data, UINT16 len, BOOLEAN is_recv) 480e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu{ 481e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int i,j; 482e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int nBytes = (len*2)+1; 483e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu char line_buf[400]; 484e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 4856a36486bba856b2ea2783c88f47e262c131a68fbEvan Chu if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) 4866a36486bba856b2ea2783c88f47e262c131a68fbEvan Chu return; 4876a36486bba856b2ea2783c88f47e262c131a68fbEvan Chu 488e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu if (nBytes > sizeof(line_buf)) 489e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu return; 490e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 49142d73cd99ecb8ad8d1108017be383d871b288605Martijn Coenen // Only trace HCP if we're tracing HCI as well 49242d73cd99ecb8ad8d1108017be383d871b288605Martijn Coenen if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) 49342d73cd99ecb8ad8d1108017be383d871b288605Martijn Coenen return; 49442d73cd99ecb8ad8d1108017be383d871b288605Martijn Coenen 495e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu for(i = 0, j = 0; i < len && j < sizeof(line_buf)-3; i++) 496e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu { 497e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu line_buf[j++] = sTable[(*data >> 4) & 0xf]; 498e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu line_buf[j++] = sTable[*data & 0xf]; 499e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu data++; 500e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu } 501e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu line_buf[j] = '\0'; 502e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 503e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmHcpR": "BrcmHcpX", line_buf); 504e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu} 505e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 506e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispSNEP (UINT8 local_sap, UINT8 remote_sap, BT_HDR *p_buf, BOOLEAN is_first, BOOLEAN is_rx) {} 507e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispCHO (UINT8 *pMsg, UINT32 MsgLen, BOOLEAN is_rx) {} 508e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispT3TagMessage(BT_HDR *p_msg, BOOLEAN is_rx) {} 509e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispRWT4Tags (BT_HDR *p_buf, BOOLEAN is_rx) {} 510e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispCET4Tags (BT_HDR *p_buf, BOOLEAN is_rx) {} 511e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispRWI93Tag (BT_HDR *p_buf, BOOLEAN is_rx, UINT8 command_to_respond) {} 512e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispNDEFMsg (UINT8 *pMsg, UINT32 MsgLen, BOOLEAN is_recv) {} 513