我们正在使用来自通用供应商的基于 USB 的加密狗在 iMx6 平台上测试 WEC2013 中的蓝牙。我们使用 WEC2013 BSP 提供的默认 HCI 传输层。
BT 已打开并能够扫描附近的所有设备。
我们启用了以下一组 sysgen 变量和注册表项。
系统变量:
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_MACHINE\Drivers\USB\LoadClients\Default\224_1_1\Default\Bluetooth_USB_Driver]
"DLL"="bthusb.dll"
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default\224_1_1\Bluetooth_USB_Driver]
"DLL"="bthusb.dll"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\Transports\PnP\{B3DD867A-1E6E-4215-8AA7-EAC1DFC46548}]
"flags"=dword:80000000
"driver"="bthusb.dll"
"resetdelay"=dword:0
"PacketSize"=dword:200
"BlockSize"=dword:5
[HKEY_LOCAL_MACHINE\ControlPanel\Bluetooth]
"PinAttemptInterval"=dword:200000
"PinEntries"=multi_sz:"0000","8888"
我们观察到与设备配对的不同场景。
从板连接到手机(imx6+usb dongle 运行 WEC2013) 当通过 bthsettings UI 启动配对时,配对成功。它将触发两侧的 6 位自动密钥。
在不打开 bthsettings UI 的情况下从移动设备连接到电路板。这里配对成功一次。当 UI 未打开时(BT 在后台打开),从手机启动配对,两者都将使用自动 6 位密钥方法配对。但这会在内部调用 bthsettings UI,所以下次我们从手机进行配对时,手机端会要求手动插入密钥。只要在手机上输入键并按下配对,手机端就会出现配对拒绝通知。所以在这种情况下配对失败。
打开 bthsettings 时从手机连接到棋盘。这里配对失败。手机发起配对时,会调用手动插键界面,插键并按下配对时,手机端会提示配对失败,配对失败。
在这些失败的场景中,上层正在响应来自芯片的“Pin code request event”的“Pin code requestnegative reply command”。
我们需要有关此配对过程的输入。为什么会根据 UI 是否打开来调用自动密钥和手动密钥生成方法?为什么手动钥匙盒失败了?
我们是否缺少任何注册表项或堆栈功能?