自Bluez 5.48起,iPhone在BLE GAP外设上进行连接时需要配对,为什么?

问题描述 投票:0回答:1

我有一个使用Bluez 5.X和DBus在嵌入式设备上运行的应用程序。

  • 我的应用程序将一个具有“ NoInputNoOutput”功能的代理和一个适配器设置为不可配对(我不想配对)。

  • 我的嵌入式设备未启动连接(GAP外围设备)和广播广告(GATT服务器)。

使用BlueZ 5.48(和5.52),当我尝试从Android设备连接到嵌入式设备时,一切运行正常,但是,当我尝试使用iOS时,连接会在一段时间后丢失,并且在btmon工具中以下是日志:

> ACL Data RX: Handle 68 flags 0x02 dlen 9              #1050 [hci0] 398.940027
  ATT: Error Response (0x01) len 4
    Read Request (0x0a)
    Handle: 0x0016
    Error: Insufficient Authentication (0x05)
< ACL Data TX: Handle 68 flags 0x00 dlen 7              #1051 [hci0] 398.940268
      ATT: Read Request (0x0a) len 2
        Handle: 0x0016
> ACL Data RX: Handle 68 flags 0x02 dlen 9              #1052 [hci0] 398.991500
      ATT: Error Response (0x01) len 4
        Read Request (0x0a)
        Handle: 0x0016
        Error: Insufficient Authentication (0x05)

如果我的应用程序将适配器设置为可配对(但我不想要),我会在iPhone上弹出一个弹出窗口(而不是在androïd上,以授权配对)>

信息:

  • 我在BlueZ 5.47中没有此问题] >>
  • 我在iPhone的常规蓝牙中看不到我的嵌入式设备“设备”列表。
  • 即使我的应用程序未设置任何问题,我仍然遇到问题特性
  • 我从BlueZ 5.47以来没有发现(在ChangeLog和git中)更改,这将导致此问题。有任何想法吗?

    我认为iPhone上有一个GATT服务器,因为我可以看到许多对象在连接时已在DBus上注册。即使我使用具有“读取加密的”权限的特征设置GATT服务器(nRF Connect),我也不会遇到与androïd相关的问题。

    我的分析:

  1. 在iPhone上,我启动了与嵌入式设备的连接

  2. 我的嵌入式设备尝试读取某些内容(受保护的特性?)在iPhone上(NOK !!为什么?)

  3. iPhone拒绝“加密不足”(?)

  4. 我的嵌入式设备发送“安全请求”

  5. Iphone发送“配对请求”

  6. 我的嵌入式拒绝程序“不支持原因配对”

  7. 编辑:弹出窗口显示为“客户端:将set-filter-uuids重命名为uuids”(e1021f7e486ebd6c0618673a758fa2c50d81109c)(在Bluez 5.47和5.48之间)

    我有一个使用Bluez 5.X和DBus在嵌入式设备上运行的应用程序。我的应用程序将具有“ NoInputNoOutput”功能和适配器的代理设置为不可配对(我不想配对)。...

我的过程不正确(提交“ client:将set-filter-uuids重命名为uuids”未显示弹出窗口:“ client”对应于“ bluetoothctl”,与我的使用无关)。

实际上,弹出窗口与电池模块一起出现。我不知道为什么,但是我对这种解决方法感到满意(适用于Bluez 5.48和5.52):

在文件“ Makefile.plugins”中,删除以下行:

builtin_modules += battery
builtin_sources += profiles/battery/battery.c

并强制将自动制作放入您的“ bluez5_utils.mk”:

BLUEZ5_UTILS_AUTORECONF = YES


谢谢你,埃米尔考虑了我的问题。我比较了在连接时有无弹出窗口的日志“ / var / log / message”:唯一的区别在于:

这些行仅在连接弹出窗口时出现:

profiles/battery/battery.c:batt_probe() BATT profile probe (6E:FA:33:75:2A:6A)
src/service.c:change_state() 0x8c17200: device 6E:FA:33:75:2A:6A profile batt-profile state changed: unavailable -> disconnected (0)
profiles/battery/battery.c:batt_accept() BATT profile accept (6E:FA:33:75:2A:6A)
src/service.c:change_state() 0x8c17200: device 6E:FA:33:75:2A:6A profile batt-profile state changed: disconnected -> connected (0)

并且这些行仅在连接期间出现而没有弹出窗口:

src/gatt-client.c:service_create() Exported GATT service: /org/bluez/hci0/dev_6E_FA_33_75_2A_6A/service0014
src/gatt-client.c:characteristic_create() Exported GATT characteristic: /org/bluez/hci0/dev_6E_FA_33_75_2A_6A/service0014/char0015
src/gatt-client.c:descriptor_create() Exported GATT characteristic descriptor: /org/bluez/hci0/dev_6E_FA_33_75_2A_6A/service0014/char0015/desc0017
ios iphone bluetooth-lowenergy bluez pairing
1个回答
0
投票

我的过程不正确(提交“ client:将set-filter-uuids重命名为uuids”未显示弹出窗口:“ client”对应于“ bluetoothctl”,与我的使用无关)。

实际上,弹出窗口与电池模块一起出现。我不知道为什么,但是我对这种解决方法感到满意(适用于Bluez 5.48和5.52):

© www.soinside.com 2019 - 2024. All rights reserved.