我们正在WEC2013使用iMx6平台上通用供应商提供的基于USB的加密狗测试蓝牙。我们使用WEC2013 BSP提供的默认HCI传输层。
BT已打开,能够扫描附近的所有设备。
我们启用了以下一组系统变量和注册表项。
系统变量:
SYSGEN_BTH (Bluetooth stack with universal loadable driver)
SYSGEN_BTH_BTHUTIL (Bluetooth Profile Management APIs)
SYSGEN_BTH_HID_KEYBOARD (Bluetooth HID - Keyboard)
SYSGEN_BTH_HID_MOUSE (Bluetooth HID - Mouse)
SYSGEN_BTH_AG (Bluetooth HS/HF and Audio gateway service)
SYSGEN_BTH_SETTINGS (Bluetooth settings UI)
SYSGEN_OBEX_CLIENT (Obex client)
SYSGEN_OBEX_SERVER (Obex server)
SYSGEN_OBEX_FILEBROWSER (OBEX file browser)
SYSGEN_OBEX_INBOX (OBEX Inbox)
SYSGEN_FTPD (FTP server)
SYSGEN_BTH_BTHSSVC(Support Secure Simple Pairing)
注册表项:
[HKEY_LOCAL_MACHINEDriversUSBLoadClientsDefault224_1_1DefaultBluetooth_USB_Driver]
"DLL"="bthusb.dll"
[HKEY_LOCAL_MACHINEDriversUSBLoadClientsDefaultDefault224_1_1Bluetooth_USB_Driver]
"DLL"="bthusb.dll"
[HKEY_LOCAL_MACHINESoftwareMicrosoftBluetoothTransportsPnP{B3DD867A-1E6E-4215-8AA7-EAC1DFC46548}]
"flags"=dword:80000000
"driver"="bthusb.dll"
"resetdelay"=dword:0
"PacketSize"=dword:200
"BlockSize"=dword:5
[HKEY_LOCAL_MACHINEControlPanelBluetooth]
"PinAttemptInterval"=dword:200000
"PinEntries"=multi_sz:"0000","8888"
我们观察到与设备配对时的不同场景。
从主板连接到手机(imx6+USB 加密狗运行WEC2013)在这里,当通过 bthsettings UI 启动配对时,配对是成功的。它将在两侧触发 6 位自动密钥。
从移动设备连接到主板,而无需打开 bthsettings UI。在这里,配对就是一次成功。当 UI 未打开(BT 在后台打开)时,配对是从移动设备发起的,两者都将使用自动配对6 位密钥方法。但是这会在内部调用 bthsettings UI,所以下次我们从移动设备进行配对时,移动端会要求手动密钥插入。在手机上输入按键并按下配对后,将在移动终端上观察到配对被拒绝通知。因此,在这种情况下配对失败。
打开 bthsettings 时从移动设备连接到主板。此处配对失败。当从移动设备启动配对时,将调用手动按键插入 UI,当插入按键并按下配对时,配对被拒绝通知将显示在移动终端上,配对失败。
在这些失败的Senarios中,上层响应来自芯片的"引脚代码请求负回复命令"的"引脚代码请求事件"。
我们需要对这个配对过程的输入。为什么根据 UI 是打开还是从未打开来调用此自动密钥和手动密钥生成方法?为什么手动密钥案例会失败?
我们是否缺少任何注册表项或堆栈功能?
这一切都与SSP(安全简单配对)有关,它决定了配对身份验证模型。这在WEC8(2013)中通过bthsettings下的更改受到影响。
在WEC8下,每当从外部设备启动连接时,它们都会禁用SSP(通过函数EnbaleSSP()),并在内部启动连接时启用反向SSP。虽然这是逻辑,但我不知道为什么要引入它(这是一个错误,这将在即将到来的更新中修复,就像他们最初为 NDIS 5 无线驱动程序连接所做的那样)。
作为解决此问题的方法,请禁用 EnableSSP()。
此外,SYSGEN_BTH_SETTINGS组件隐式需要SYSGEN_BTH_BTHSSVC,并且在 WEC8 下链接断开。
Microsoft已在 2015 年 4 月更新中提供了修复程序。详情请点击此处。