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