【问题标题】:Issue in Bluetooth pairing蓝牙配对问题
【发布时间】:2015-05-18 06:41:42
【问题描述】:

我们在 WEC2013 中使用通用供应商提供的基于 USB 的加密狗在 iMx6 平台上测试蓝牙。我们使用的是 WEC2013 BSP 提供的默认 HCI 传输层。

BT 已开启并能够扫描附近的所有设备。

我们启用了以下一组 sysgen 变量和注册表项。

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"

我们观察到与设备配对的不同场景。

  1. 从板子连接到手机(imx6+usb dongle 与 WEC2013 一起运行) 当通过 bthsettings UI 启动配对时,配对成功。它会触发两侧的 6 位自动密钥。

  2. 在不打开 bthsettings UI 的情况下从移动设备连接到板。 这里配对成功一次。当 UI 未打开时(BT 在后台打开),从移动设备启动配对,两者都将使用自动配对 6 位密钥方法。但这会在内部调用bthsettings UI,所以下次我们在手机端进行配对时,手机端会要求手动 密钥插入。只要在手机上输入键并按下配对,手机端就会出现配对拒绝通知。 所以在这种情况下配对失败。

  3. 打开 bthsettings 时从手机连接到板。 这里配对失败。当从手机启动配对时,将调用手动插入密钥 UI,当插入密钥并按下配对时, 手机端会显示配对失败提示,配对失败。

在这些失败的场景中,上层正在响应来自芯片的“Pin code request event”的“Pin code requestnegative reply command”。

我们需要有关此配对过程的输入。为什么会根据 UI 是否打开来调用自动密钥和手动密钥生成方法?以及为什么手动钥匙盒失败了?

我们是否缺少任何注册表项或堆栈功能?

【问题讨论】:

    标签: bluetooth embedded windows-ce windows-embedded-compact hci


    【解决方案1】:

    这一切都与 SSP(安全简单配对)有关,它决定了配对身份验证模型。这在 WEC8(2013) 中受到 bthsettings 下的更改的影响。

    在 WEC8 下,只要从外部设备启动连接,它们就会禁用 SSP(通过函数 EnbaleSSP()),并在内部启动连接时启用回 SSP。虽然这是逻辑,但我不知道为什么要引入它(这是一个错误,将在即将到来的更新中修复,就像他们最初为 NDIS 5 无线驱动程序连接所做的那样)。

    作为一种解决方法,禁用 EnableSSP()。

    SYSGEN_BTH_SETTINGS 组件也隐含需要 SYSGEN_BTH_BTHSSVC,并且在 WEC8 下链接已断开。

    Microsoft 已在 2015 年 4 月更新中提供了此修复程序。详情可here

    【讨论】:

    • 感谢@Braghadees 的回答!
    • 现在 MS 说他们犯了一个错误,他们还通过 2015 年 4 月更新提供了上述作为修复“修复:蓝牙配对从移动设备到 Windows Embedded Compact 2013 设备失败”[@ 987654322@]
    • 是的。我们已同时向 Microsoft 报告了此问题。
    猜你喜欢
    • 1970-01-01
    • 2015-03-09
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    相关资源
    最近更新 更多