libmain.c revision e29968cf3e053557a9c2efc5a7a42d0767c51d9d
145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/**************************************************************************** 245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Name: libmain.h 445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function This file contains helper functions for NFA 645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Copyright (c) 2011-2012, Broadcom Corp., All Rights Reserved. 845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Broadcom Bluetooth Core. Proprietary and confidential. 945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 1045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*****************************************************************************/ 11e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu#include "OverrideLog.h" 1245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <sys/types.h> 1345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <sys/stat.h> 1445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <fcntl.h> 1545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <errno.h> 1645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "buildcfg.h" 1745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_mem_co.h" 1845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_nv_co.h" 1945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_nv_ci.h" 2045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "config.h" 2145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 2245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#define LOG_TAG "BrcmNfcNfa" 2345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#define PRINT(s) __android_log_write(ANDROID_LOG_DEBUG, "BrcmNci", s) 24e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu#define MAX_NCI_PACKET_SIZE 259 25e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu#define MAX_LOGCAT_LINE 4096 26e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chustatic char log_line[MAX_LOGCAT_LINE]; 2745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 2845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuextern UINT32 ScrProtocolTraceFlag; // = SCR_PROTO_TRACE_ALL; // 0x017F; 2945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic const char* sTable = "0123456789abcdef"; 3045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuextern char bcm_nfc_location[]; 3145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 3245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 3345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 3445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_mem_co_alloc 3545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 3645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description allocate a buffer from platform's memory pool 3745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 3845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 3945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** pointer to buffer if successful 4045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** NULL otherwise 4145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 4245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 4345faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern void *nfa_mem_co_alloc(UINT32 num_bytes) 4445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 4545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return malloc(num_bytes); 4645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 4745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 4845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 4945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 5045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 5145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_mem_co_free 5245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 5345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description free buffer previously allocated using nfa_mem_co_alloc 5445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 5545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 5645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 5745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 5845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 5945faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern void nfa_mem_co_free(void *pBuffer) 6045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 6145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu free(pBuffer); 6245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 6345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 6445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 6545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 6645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_nv_co_init 6745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 6845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description This function is executed as a part of the start up sequence 6945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** to make sure the control block is initialized. 7045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Parameters void. 7245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns void 7445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 7745faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern void nfa_nv_co_init(void) 7845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 7945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD ("%s: enter/exit ", __FUNCTION__); 8045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 8145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 8245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 8345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 8445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_nv_co_read 8545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 8645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description This function is called by NFA to read in data from the 8745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** previously opened file. 8845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 8945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Parameters pBuffer - buffer to read the data into. 9045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** nbytes - number of bytes to read into the buffer. 9145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 9245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns void 93e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 9445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Note: Upon completion of the request, nfa_nv_ci_read() is 9545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** called with the buffer of data, along with the number 9645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** of bytes read into the buffer, and a status. The 9745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** call-in function should only be called when ALL requested 9845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** bytes have been read, the end of file has been detected, 9945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** or an error has occurred. 10045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 10145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 10245faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern void nfa_nv_co_read(UINT8 *pBuffer, UINT16 nbytes, UINT8 block) 10345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 10445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu char filename[256], filename2[256]; 10545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu strcpy(filename2, bcm_nfc_location); 10645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu strcat(filename2, "/nfaStorage.bin"); 10745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (strlen(filename2) > 200) 10845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 10945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: filename too long", __FUNCTION__); 11045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return; 11145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 11245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu sprintf (filename, "%s%u", filename2, block); 11345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 11445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD ("%s: buffer len=%u; file=%s", __FUNCTION__, nbytes, filename); 11545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int fileStream = open (filename, O_RDONLY); 11645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (fileStream > 0) 11745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 11845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu size_t actualRead = read (fileStream, pBuffer, nbytes); 11945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (actualRead > 0) 12045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 12145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD ("%s: read bytes=%u", __FUNCTION__, actualRead); 12245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_read (actualRead, NFA_NV_CO_OK, block); 12345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 12445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 12545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 12645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: fail to read", __FUNCTION__); 12745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_read (actualRead, NFA_NV_CO_FAIL, block); 12845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 12945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu close (fileStream); 13045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 13145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 13245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 13345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: fail to open", __FUNCTION__); 13445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_read (0, NFA_NV_CO_FAIL, block); 13545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 13645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 13745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 13845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 13945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 14045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_nv_co_write 14145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 14245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description This function is called by io to send file data to the 14345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** phone. 14445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 14545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Parameters pBuffer - buffer to read the data from. 14645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** nbytes - number of bytes to write out to the file. 14745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 14845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns void 149e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 15045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Note: Upon completion of the request, nfa_nv_ci_write() is 15145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** called with the file descriptor and the status. The 15245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** call-in function should only be called when ALL requested 15345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** bytes have been written, or an error has been detected, 15445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 15545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 15645faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern void nfa_nv_co_write(const UINT8 *pBuffer, UINT16 nbytes, UINT8 block) 15745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 15845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu char filename[256], filename2[256]; 15945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu strcpy(filename2, bcm_nfc_location); 16045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu strcat(filename2, "/nfaStorage.bin"); 16145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (strlen(filename2) > 200) 16245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 16345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: filename too long", __FUNCTION__); 16445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return; 16545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 16645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu sprintf (filename, "%s%u", filename2, block); 16745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD ("%s: bytes=%u; file=%s", __FUNCTION__, nbytes, filename); 168e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 16945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int fileStream = 0; 170e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 17145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu fileStream = open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); 17245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (fileStream > 0) 17345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 17445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu size_t actualWritten = write (fileStream, pBuffer, nbytes); 17545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD ("%s: %d bytes written", __FUNCTION__, actualWritten); 17645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (actualWritten > 0) { 17745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_write (NFA_NV_CO_OK); 17845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 17945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 18045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 18145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: fail to write", __FUNCTION__); 18245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_write (NFA_NV_CO_FAIL); 18345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 18445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu close (fileStream); 18545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 18645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 18745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 18845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGE ("%s: fail to open, error = %d", __FUNCTION__, errno); 18945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_nv_ci_write (NFA_NV_CO_FAIL); 19045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 19145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 19245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 19345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 19445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 19545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function byte2hex 19645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 19745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description convert a byte array to hexadecimal string 19845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 19945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 20045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 20145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 20245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 20345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic inline void byte2hex(const char* data, char** str) 20445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 20545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu **str = sTable[(*data >> 4) & 0xf]; 20645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ++*str; 20745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu **str = sTable[*data & 0xf]; 20845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ++*str; 20945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 21045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 21145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 21245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 21345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function byte2char 21445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 21545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description convert a byte array to displayable text string 21645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 21745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 21845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 21945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 22045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 22145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic inline void byte2char(const char* data, char** str) 22245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 22345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu **str = *data < ' ' ? '.' : *data > '~' ? '.' : *data; 22445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ++(*str); 22545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 22645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 22745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 22845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 22945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function word2hex 23045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 23145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description Convert a two byte into text string as little-endian WORD 23245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 23345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 23445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 23545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 23645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 23745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic inline void word2hex(const char* data, char** hex) 23845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 23945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2hex(&data[1], hex); 24045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2hex(&data[0], hex); 24145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 24245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 24345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 24445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 24545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function dumpbin 24645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 24745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description convert a byte array to a blob of text string for logging 24845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 24945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 25045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 25145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 25245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 25345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuvoid dumpbin(const char* data, int size, UINT32 trace_layer, UINT32 trace_type) 25445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 25545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu char line_buff[256]; 25645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu char *line; 25745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int i, j, addr; 25845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu const int width = 16; 25945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if(size <= 0) 26045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return; 26145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#ifdef __RAW_HEADER 26245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write offset 26345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu line = line_buff; 26445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 26545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 26645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 26745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 26845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 26945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 27045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(j = 0; j < width; j++) 27145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 27245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2hex((const char*)&j, &line); 27345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 27445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 27545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line = 0; 27645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu PRINT(line_buff); 27745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif 27845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(i = 0; i < size / width; i++) 27945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 28045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu line = line_buff; 28145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write address: 28245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu addr = i*width; 28345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu word2hex((const char*)&addr, &line); 28445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ':'; *line++ = ' '; 28545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write hex of data 28645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(j = 0; j < width; j++) 28745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 28845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2hex(&data[j], &line); 28945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 29045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 29145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write char of data 29245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(j = 0; j < width; j++) 29345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2char(data++, &line); 29445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //wirte the end of line 29545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line = 0; 29645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //output the line 29745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu PRINT(line_buff); 29845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 29945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //last line of left over if any 30045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int leftover = size % width; 30145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if(leftover > 0) 30245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 30345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu line = line_buff; 30445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write address: 30545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu addr = i*width; 30645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu word2hex((const char*)&addr, &line); 30745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ':'; *line++ = ' '; 30845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write hex of data 30945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(j = 0; j < leftover; j++) 31045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 31145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2hex(&data[j], &line); 31245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 31345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 31445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write hex padding 31545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(; j < width; j++) 31645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 31745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 31845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 31945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line++ = ' '; 32045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 32145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write char of data 32245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for(j = 0; j < leftover; j++) 32345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu byte2char(data++, &line); 32445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //write the end of line 32545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu *line = 0; 32645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu //output the line 32745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu PRINT(line_buff); 32845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 32945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 33045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 33145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 33245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 33345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function scru_dump_hex 33445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 33545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description print a text string to log 33645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 33745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 33845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** text string 33945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 34045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 34145faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 *scru_dump_hex (UINT8 *p, char *pTitle, UINT32 len, UINT32 layer, UINT32 type) 34245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 34345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if(pTitle && *pTitle) 34445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu PRINT(pTitle); 34545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu dumpbin(p, len, layer, type); 34645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return p; 34745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 34845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 34945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 35045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 35145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function DispHciCmd 35245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 35345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description Display a HCI command string 35445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 35545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 35645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 35745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 35845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 359e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispHciCmd (BT_HDR *p_buf) 36045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 361e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int i,j; 362e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int nBytes = ((BT_HDR_SIZE + p_buf->offset + p_buf->len)*2)+1; 363e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu UINT8 * data = (UINT8*) p_buf; 364e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int data_len = BT_HDR_SIZE + p_buf->offset + p_buf->len; 36545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 36645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) 36745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return; 368e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 369e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu if (nBytes > sizeof(log_line)) 370e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu return; 371e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 372e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu for(i = 0, j = 0; i < data_len && j < sizeof(log_line)-3; i++) 373e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu { 374e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[(*data >> 4) & 0xf]; 375e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[*data & 0xf]; 376e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu data++; 377e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu } 378e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j] = '\0'; 379e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 380e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu __android_log_write(ANDROID_LOG_DEBUG, "BrcmHciX", log_line); 38145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 38245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 38345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 38445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 38545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 38645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function DispHciEvt 38745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 38845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description display a NCI event 38945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 39045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: 39145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Nothing 39245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 39345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 394e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispHciEvt (BT_HDR *p_buf) 39545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 396e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int i,j; 397e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int nBytes = ((BT_HDR_SIZE + p_buf->offset + p_buf->len)*2)+1; 398e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu UINT8 * data = (UINT8*) p_buf; 399e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int data_len = BT_HDR_SIZE + p_buf->offset + p_buf->len; 400e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 40145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) 40245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return; 403e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 404e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu if (nBytes > sizeof(log_line)) 405e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu return; 406e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 407e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu for(i = 0, j = 0; i < data_len && j < sizeof(log_line)-3; i++) 408e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu { 409e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[(*data >> 4) & 0xf]; 410e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[*data & 0xf]; 411e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu data++; 412e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu } 413e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j] = '\0'; 414e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 415e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu __android_log_write(ANDROID_LOG_DEBUG, "BrcmHciR", log_line); 41645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 41745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 41863f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen/******************************************************************************* 41963f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** 42063f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** Function DispNciDump 42163f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** 42263f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** Description Log raw NCI packet as hex-ascii bytes 42363f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** 42463f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** Returns None. 42563f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen** 42663f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen*******************************************************************************/ 42763f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenenvoid DispNciDump (UINT8 *data, UINT16 len, BOOLEAN is_recv) 42863f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen{ 429e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) 430e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu return; 431e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 43263f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen char line_buf[(MAX_NCI_PACKET_SIZE*2)+1]; 43363f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen int i,j; 43445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 43563f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen for(i = 0, j = 0; i < len && j < sizeof(line_buf)-3; i++) 43663f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen { 43763f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen line_buf[j++] = sTable[(*data >> 4) & 0xf]; 43863f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen line_buf[j++] = sTable[*data & 0xf]; 43963f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen data++; 44063f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen } 44163f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen line_buf[j] = '\0'; 442e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 44363f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmNciR": "BrcmNciX", line_buf); 44463f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen} 445e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 446e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 447e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu/******************************************************************************* 448e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 449e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Function DispLLCP 450e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 451e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Description Log raw LLCP packet as hex-ascii bytes 452e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 453e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Returns None. 454e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 455e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu*******************************************************************************/ 456e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispLLCP (BT_HDR *p_buf, BOOLEAN is_recv) 457e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu{ 458e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int i,j; 459e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int nBytes = ((BT_HDR_SIZE + p_buf->offset + p_buf->len)*2)+1; 460e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu UINT8 * data = (UINT8*) p_buf; 461e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int data_len = BT_HDR_SIZE + p_buf->offset + p_buf->len; 462e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 463e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu for (i = 0; i < data_len; ) 464e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu { 465e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu for(j = 0; i < data_len && j < sizeof(log_line)-3; i++) 466e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu { 467e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[(*data >> 4) & 0xf]; 468e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j++] = sTable[*data & 0xf]; 469e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu data++; 470e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu } 471e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu log_line[j] = '\0'; 472e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmLlcpR": "BrcmLlcpX", log_line); 473e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu } 474e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu} 475e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 476e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 477e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu/******************************************************************************* 478e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 479e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Function DispHcp 480e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 481e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Description Log raw HCP packet as hex-ascii bytes 482e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 483e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Returns None. 484e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 485e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu*******************************************************************************/ 486e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chuvoid DispHcp (UINT8 *data, UINT16 len, BOOLEAN is_recv) 487e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu{ 488e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int i,j; 489e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu int nBytes = (len*2)+1; 490e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu char line_buf[400]; 491e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 492e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu if (nBytes > sizeof(line_buf)) 493e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu return; 494e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu 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