作为BLE测井项目的一部分,我使用Arduino设备(Adafruit羽毛32u4 Adalogger)与具有BLE-Central功能的蓝牙设备(RedBearLab BLEMini,使用德州仪器CC2540 MCU)和主机控制器接口(HCI)passthrough固件。
一般的想法是将设备设置为将LE广告包(作为LE Advertising Repots)记录到SD卡。该设备应该全天候运行。
到目前为止,设置工作正常直到LESetScanParameters
,其中BLEMini从不响应状态机在Arduino上发送的命令。对于应该在此之后发送的LESetScanEnable
命令实际上也是如此。蓝牙核心规范明确指出,LESetScanParameters (0x200b)
和LESetScanEnable (0x200c)
命令都应该响应CommandComplete (0x0e)
事件,并带有所述命令的返回状态(请参阅蓝牙核心规范v4.2,第861,977和980页。
为什么我没有收到回复?我错过了什么?非常感谢您对此事的任何帮助!
系统目前被设计为状态机。
您可以在下面看到调试输出,其中->
表示状态转换(可能后跟冒号:
后面的消息)。发送(Send: [...]
)和接收(Receive: [...]
)的原始HCI数据包始终以变长报头开头(以冒号:
分隔的字节,以磅#
结尾)然后是包体。收到每个Await
状态的事件后,将打印最重要的参数。
请注意,在下面的调试输出中,状态Await LESetScanParameters CommandComplete
以超时错误终止,表明数据包标头不完整。实际上,如果你查看下面的行(buffer [...]
),你会发现串行缓冲区中没有字节。即使我禁用超时(例如等待半小时),我也从未收到回复。我还尝试发送格式错误的LESetScanParameters
数据包,并删除命令GapDeviceInit
,SetEventMask
和LESetEventMask
,但这并没有改变任何内容。
LESetScanParameters
命令的我的设置是:
scanType = PassiveScan (0x00)
scanInterval = 0x0010
scanWindow = 0x0010
addressType = PublicIdentityAddress (0x02)
filterPolicy = UndirectedAdsOnly (0x00)
我LESetScanEnable
的设置是:
scanEnable = true (0x01)
filterDuplicates = true (0x01)
调试输出(请注意,出于调试目的,当出现问题时,状态机当前转换为Critical
而不是Error
:
Uninitialized -> Serial setup
Serial setup -> Clock synchronisation
Clock synchronisation -> SD setup
SD setup -> Initialized
Initialized -> Dispatch GapDeviceInit
Send: 01:00:fe:26#0805000000000000000000000000000000000000000000000000000000000000000000000000
Dispatch GapDeviceInit -> Await GapDeviceInit HciExtCommandStatus
Receive: 04:ff:06#7f060000fe00
HciExtCommandStatus parameters: vendorEvent=0x067f, eventStatus=0x00, opcode=0xfe00
Await GapDeviceInit HciExtCommandStatus -> Await GapDeviceInitDone
Receive: 04:ff:2c#000600610a7b4c99b41b0004030000000000000000000000000000006c95ae6da27e123b450f5430f1bf13c7
GapDeviceInitDone parameters: eventStatus=0x00, ...
Await GapDeviceInitDone -> Dispatch SetEventMask
Send: 01:01:0c:08#0000000000000020
Dispatch SetEventMask -> Await SetEventMask CommandComplete
Receive: 04:0e:04#01010c00
CommandStatus parameters: numCommands=0x01, opcode=0x0c01, cmdStatus=0x00
Await SetEventMask CommandComplete -> Dispatch LESetEventMask
Send: 01:01:20:08#0200000000000000
Dispatch LESetEventMask -> Await LESetEventMask CommandComplete
Receive: 04:0e:04#01012000
CommandStatus parameters: numCommands=0x01, opcode=0x2001, cmdStatus=0x00
Await LESetEventMask CommandComplete -> Dispatch LESetScanParameters
Send: 01:0b:20:07#00100010000200
Dispatch LESetScanParameters -> Await LESetScanParameters CommandComplete
Await LESetScanParameters CommandComplete -> Critical: Timeout error (Last HCI message: Header incomplete)
Buffer contents discarded (numBytes=0x00):
答案 0 :(得分:0)
可能由于RedBearLabs BLEMini中的硬件故障,我被迫将硬件切换到Raspberry Pi 3.该程序现在可用作systemd
服务。