BLE: Investigate internal HCI interface and write data logger
To help debugging BLE issues I started looking for the internal HCI interface of the stack. Data passes these two functions:
- From Host to Controller:
hciDrvWrite()
- From Controller to Host:
chciDrvWrite()
It would be useful to have the option to log calls to these functions to the file system in the btsnoop file format. This file can then be opened by a variety of tools (including Wireshark).
A few stack traces for your pleasure:
#0 hciDrvWrite (type=type@entry=1 '\001', len=len@entry=18,
pData=pData@entry=0x2000dd38 <SystemHeap+432> "\006 \017 \003 \003")
at ../lib/sdk/Libraries/BTLE/stack/platform/max32665/hci_drv.c:26
#1 0x1002e0b4 in hciTrSendCmd (pData=pData@entry=0x2000dd38 <SystemHeap+432> "\006 \017 \003 \003")
at ../lib/sdk/Libraries/BTLE/stack/platform/max32665/hci_tr.c:99
#2 0x1002cd5e in hciCmdSend (pData=<optimized out>)
at ../lib/sdk/Libraries/BTLE/stack/ble-host/sources/hci/dual_chip/hci_cmd.c:125
#3 hciCmdSend (pData=<optimized out>) at ../lib/sdk/Libraries/BTLE/stack/ble-host/sources/hci/dual_chip/hci_cmd.c:97
#4 0x10029870 in dmAdvConfig (pPeerAddr=0x2000dd5f <SystemHeap+471> "", peerAddrType=0 '\000', advType=0 '\000')
at ../lib/sdk/Libraries/BTLE/stack/ble-host/sources/stack/dm/dm_adv_leg.c:85
#5 dmAdvActConfig (pMsg=0x2000dd58 <SystemHeap+464>)
at ../lib/sdk/Libraries/BTLE/stack/ble-host/sources/stack/dm/dm_adv_leg.c:122
#6 dmAdvActConfig (pMsg=0x2000dd58 <SystemHeap+464>)
at ../lib/sdk/Libraries/BTLE/stack/ble-host/sources/stack/dm/dm_adv_leg.c:107
#7 0x10028434 in wsfOsDispatcher () at ../lib/sdk/Libraries/BTLE/stack/platform/max32665/wsf_os.c:260
#8 0x100152a8 in vBleTask (pvParameters=<optimized out>) at ../epicardium/ble/ble.c:287
#9 0x10022524 in ?? () at ../lib/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c:703
#0 chciDrvWrite (prot=prot@entry=0 '\000', type=2 '\002', len=33, pData=0x2000de98 <SystemHeap+784> ">\037\n")
at ../lib/sdk/Libraries/BTLE/link_layer/platform/max32665/chci_drv.c:66
#1 0x10031f7a in ChciTrHandler (event=<optimized out>, pMsg=<optimized out>)
at ../lib/sdk/Libraries/BTLE/link_layer/platform/common/sources/chci/chci_tr.c:122
#2 ChciTrHandler (event=<optimized out>, pMsg=<optimized out>)
at ../lib/sdk/Libraries/BTLE/link_layer/platform/common/sources/chci/chci_tr.c:100
#3 0x10040b4c in lhciPrivConnEncodeEvtPkt (pEvt=0x2002896c)
at ../lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/lhci/lhci_evt_conn_priv.c:91
#4 0x10030426 in lhciLlEvtHandler (pEvt=0x2002896c)
at ../lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/lhci/lhci_evt.c:159
#5 0x100384ce in lctrNotifyHostConnectInd (handle=<optimized out>, role=role@entry=1 '\001',
pConnInd=<optimized out>, peerIdAddrType=<optimized out>, peerIdAddr=peerIdAddr@entry=131335200814318, peerRpa=0,
localRpa=0, status=status@entry=0 '\000', usedChSel=0 '\000')
at ../lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/lctr/lctr_act_conn.c:133
#6 0x1003fe42 in lctrSlvConnExecuteSm (pCtx=0x2000fd9c <LlMem+384>, event=<optimized out>)
at ../lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/lctr/lctr_sm_conn_slave.c:118
#7 0x10037ea8 in lctrSlvProcessConnInd (pMsg=0x2000e058 <SystemHeap+1232>)
at ../lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/lctr/lctr_main_conn_slave.c:56
#8 0x10034baa in LctrMsgDispatcher (pMsg=pMsg@entry=0x2000e058 <SystemHeap+1232>)
at ../lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/lctr/lctr_main.c:201
#9 0x1003317e in LlHandler (event=<optimized out>, pMsg=0x2000e058 <SystemHeap+1232>)
at ../lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/ll/ll_init.c:205
#10 0x10028434 in wsfOsDispatcher () at ../lib/sdk/Libraries/BTLE/stack/platform/max32665/wsf_os.c:260
#11 0x100152a8 in vBleTask (pvParameters=<optimized out>) at ../epicardium/ble/ble.c:287
#12 0x10022524 in ?? () at ../lib/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c:703