Bluez bluetoothctl 扫描与 hcitool 扫描

2023-12-09

我在 Raspberry Pi(Buster 和 Stretch)上运行 bluez 5.50。我有一个 ble 传感器设备,仅当按下传感器设备上的按钮时才会公布数据。因此,广告是异步的,并且中间没有定期广告(并且所有数据包都是唯一的,没有重复)。我在使用 Bluez 时遇到了问题,一旦收到数据包,Bluez 似乎在接下来的大约 11 秒内不会报告来自设备的任何其他数据包(偶尔间隔会更短)。这是使用 bluetoothctl 线路命令工具以及我自己的 C++ 应用程序(基于 bluez client/main.c 示例)。在这两种情况下,在开始扫描之前,我都会清除扫描过滤器,将传输设置为文件,并将重复数据报告设置为打开。相反,当运行 hcitool scan 时,我看到来自传感器的所有数据包(它甚至似乎报告了在不同广告频道上广播的所有 3 个副本)。所以我的问题是,有没有办法通过 dbus api 获取那些丢失的广告,可能在某处进行一些额外的设置?如果没有,hci api 可以从 c++ 使用吗?它应该可以解决问题吗?任何帮助表示感谢,谢谢!

根据亚历克斯的问题编辑 -

您是否尝试过下载最新的bluez(5.53)https://git.kernel.org/pub/scm/bluetooth/bluez.git ?

还没有,只是想检查一下这是否是事先已知的。

您使用的是 hcitool scan 还是 sudo hcitool lescan?如果您正在运行 hcitool 扫描,您将拾取经典蓝牙(不是低能量数据包)。 hcitool 是一个已弃用的工具。我发现 sudo hcitool lescan 仅适用于 BLE 4.x 控制器。该功能在 5.x 控制器上失败。

hcitool lescan(在 root 下),是的,硬件是 Pi Zero/W 和 P3 所以 BLE 4.x 控制器(我假设)

您是否尝试过运行 sudo btmon 来查看扫描期间的所有 HCI 通信?

我有,但记不清我看到了什么,除了它与其他任何内容都不矛盾,即丢失数据包 w/ dbus api 与 hci

您能否提供使用bluetoothctl的代码,即:

$bluetoothctl
[bluetooth]# menu scan
[bluetooth]# clear
[bluetooth]# transport le
[bluetooth]# duplicated-data on
[bluetooth]# back
[bluetooth]# scan on

总是和你注意到的一模一样...

您还可以提供 hciconfig -a 的结果吗

--- Results (P Zero) -

hci0:   Type: Primary  Bus: UART
        BD Address: B8:27:EB:79:2E:3F  ACL MTU: 1021:8  SCO MTU: 64:1
        UP RUNNING
        RX bytes:55476 acl:126 sco:0 events:2012 errors:0
        TX bytes:6956 acl:114 sco:0 commands:444 errors:0
        Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH SNIFF
        Link mode: SLAVE ACCEPT
        Name: 'HubPi01'
        Class: 0x000000
        Service Classes: Unspecified
        Device Class: Miscellaneous,
        HCI Version: 4.1 (0x7)  Revision: 0x168
        LMP Version: 4.1 (0x7)  Subversion: 0x2209
        Manufacturer: Broadcom Corporation (15)

--- Results (P3) -

hci0:   Type: Primary  Bus: UART
        BD Address: B8:27:EB:2B:A2:A3  ACL MTU: 1021:8  SCO MTU: 64:1
        UP RUNNING
        RX bytes:10995 acl:0 sco:0 events:390 errors:0
        TX bytes:2145 acl:0 sco:0 commands:91 errors:0
        Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH SNIFF
        Link mode: SLAVE ACCEPT
        Name: 'HubPi02'
        Class: 0x000000
        Service Classes: Unspecified
        Device Class: Miscellaneous,
        HCI Version: 4.1 (0x7)  Revision: 0x168
        LMP Version: 4.1 (0x7)  Subversion: 0x2209
        Manufacturer: Broadcom Corporation (15)

下面是大约 20 秒的扫描(编辑掉所有不相关的数据包), 我大约每 2 秒按下传感器上的按钮,然后 再按住 2 秒钟,然后松开。第一个块 来自bluetoothctl,第二个来自“hcidump --raw”(在第二个树莓派上)。前四个字节 在bluetoothctl数据包数据是一个小端数据包序列号 传感器为每个新数据包递增。下一个字节表示 按钮向上/向下操作。可以看到bluetoothctl报告的数据包编号为05df, 05e5、05e9。在原始转储中,序列号位于顶行的末尾。那里 你可以看到所有数据包都按顺序报告了 1 到 3 次(我假设是 报告它捕获的所有广告渠道)。所有数据包均存在 05df 至 hcidump 扫描中的 05e9。最后是“hcitool lescan --duplicates”的输出, 我不太确定它是如何映射的......


------ bluetoothctl
                                .
[NEW] Device E2:15:00:01:73:96 E2-15-00-01-73-96

[CHG] Device E2:15:00:01:73:96 RSSI: -46
[CHG] Device E2:15:00:01:73:96 ManufacturerData Key: 0x03da
[CHG] Device E2:15:00:01:73:96 ManufacturerData Value:
  df 05 00 00 10 a1 ac 8a b4                       .........

[CHG] Device E2:15:00:01:73:96 RSSI: -45
[CHG] Device E2:15:00:01:73:96 ManufacturerData Key: 0x03da
[CHG] Device E2:15:00:01:73:96 ManufacturerData Value:
  e5 05 00 00 10 e7 4f 67 6e                       ......Ogn
                                             .
[CHG] Device E2:15:00:01:73:96 RSSI: -65
[CHG] Device E2:15:00:01:73:96 ManufacturerData Key: 0x03da
[CHG] Device E2:15:00:01:73:96 ManufacturerData Value:
  e9 05 00 00 10 f4 f9 f8 7d                       ........}

---------- hcidump --raw 

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 DF 05
  00 00 10 A1 AC 8A B4 C3
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 DF 05
  00 00 10 A1 AC 8A B4 BE

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E0 05
  00 00 11 11 0F 3E 24 B6

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E1 05
  00 00 10 F7 68 07 50 BE
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E1 05
  00 00 10 F7 68 07 50 CF
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E1 05
  00 00 10 F7 68 07 50 BA

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E2 05
  00 00 11 1D 18 A8 2A BF
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E2 05
  00 00 11 1D 18 A8 2A C0
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E2 05
  00 00 11 1D 18 A8 2A B8

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E3 05
  00 00 10 E2 29 C7 F7 BB

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E4 05
  00 00 11 57 F0 5C 76 BD
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E4 05
  00 00 11 57 F0 5C 76 C1

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E5 05
  00 00 10 E7 4F 67 6E CA

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E6 05
  00 00 11 77 63 92 CE C0
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E6 05
  00 00 11 77 63 92 CE BA
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E6 05
  00 00 11 77 63 92 CE BE

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E7 05
  00 00 10 2D 52 48 C2 BD

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E8 05
  00 00 11 EE 32 20 9D BD
> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E8 05
  00 00 11 EE 32 20 9D C1

> 04 3E 19 02 01 03 01 96 73 01 00 15 E2 0D 0C FF DA 03 E9 05
  00 00 10 F4 F9 F8 7D BC

------- hcitool lescan --duplicates

E2:15:00:01:73:96 (unknown)
E2:15:00:01:73:96 (unknown)
E2:15:00:01:73:96 (unknown)

E2:15:00:01:73:96 (unknown)

E2:15:00:01:73:96 (unknown)
E2:15:00:01:73:96 (unknown)

E2:15:00:01:73:96 (unknown)


您是否尝试过下载最新的bluez(5.53)https://git.kernel.org/pub/scm/bluetooth/bluez.git ?

你正在用吗hcitool scan or sudo hcitool lescan?如果你正在跑步hcitool scan,您正在选择经典蓝牙(不是低能量数据包)。hcitool是一个已弃用的工具。我发现sudo hcitool lescan仅适用于 BLE 4.x 控制器。该功能在 5.x 控制器上失败。

你尝试过跑步吗sudo btmon在扫描期间查看所有 HCI 通信?

您能否提供代码供您使用bluetoothctl, ie:

$bluetoothctl
[bluetooth]# menu scan
[bluetooth]# clear
[bluetooth]# transport le
[bluetooth]# duplicated-data on
[bluetooth]# back
[bluetooth]# scan on

您能否也提供一下结果hciconfig -a

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bluez bluetoothctl 扫描与 hcitool 扫描 的相关文章

  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • 如何在Linux上用C/C++编写Web服务器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在考虑在 Linux 平台上开发一个小型 阅读 初级 Web 服务器 但我不知道从哪里开始 我希望它能够做的是 监听特定端口 接受
  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • Vagrant 遇到问题 - “404 - 未找到”

    我正在尝试使用 Vagrant 制作一个 LAMP 盒子 有人告诉我它使用起来非常简单 我对网络和虚拟机完全陌生 对 Linux Ubuntu 的经验也很少 我目前已尝试按照官方文档页面上的教程进行操作 http docs vagrantu
  • 如何从 Windows Phone 8.1 发现蓝牙低功耗设备 (BLE)

    我正在编写一个 Silverlight Windows Phone 8 1 应用程序 我正在尝试从 Windows Phone 8 1 连接蓝牙低功耗 BLE 设备 该设备是 心率 但我没有得到结果 请参阅下面的我的代码 protected
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 如何获得蓝牙低功耗设备的实际名称?

    我需要从 ble 传感器获取友好的设备名称 例如 我想找到该设备并告诉用户他们已连接到 我的家庭传感器 我可以找到该设备 但我不知道如何找到该数据 在常规蓝牙中 我相信我可以使用BLUETOOTH DEVICE INFO或winsock 是
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh

随机推荐

  • 带列表的模型 - 从 Razor 视图将新项目添加到列表的方法

    我有一个具有各种属性的模型 但感兴趣的是另一种类型模型的列表 例如 public class User public string Name get set public string Description get set public
  • 批量请求 - SendAs 电子邮件

    有没有办法执行批量请求以获取来自多个或所有用户的 SendAs 电子邮件 目前 我们正在使用具有用户模拟功能的服务帐户来遍历每个用户并获取 SendAs 电子邮件列表 很多请求 GmailService 作为服务 模拟为用户 service
  • XSL-FO 创建动态目录

    我们如何在 XSL FO 中动态创建目录页面 我过去所做的是使用
  • 当范围内仍然存在不可变借用字符串切片引用时,为什么编译器不会在此可变借用上出错?

    我正在学习 RustRust 编程语言本书可从 No Starch Press 购买但遇到了一个问题 编译器的行为与书中第 4 章第 4 页中所解释的不同 77 本书的第 4 章讨论了所有权 以及第 4 页的示例 77 与此类似 没有最后的
  • 如何给textBox赋予初始值?

    我希望我的 C 程序具有其初始值textboxes 例如 在其中一个textboxes 应该说 Please enter your name 当您单击 或 tabStop textbox 初始值应该消失 用户将能够输入他们的输入textbo
  • PDFBox:从 ​​JAR 资源将图像加载到 PDF 中

    下午好 我有一个 JAR 文件 我已将一些图像作为资源附加到名为 logos 的文件夹中 由于安全限制 我被告知这样做 我们不希望图像文件与 JAR 暴露在同一文件夹中 我首先尝试加载这些图像 就好像它们是 File 对象一样 但这显然不起
  • 在 C# 中解密使用 3DES 加密的 ColdFusion 中的字符串

    我们在 ColdFusion 中解密之前使用 3DES 和 C 加密的字符串时遇到困难 这是我们最初用来加密字符串的代码 public static string EncryptTripleDES string plaintext stri
  • JAX-RS 使用的无状态 EJB 中的 @Context 注入

    我有类似下面的设置 这是一个简化版本 但我认为它传达了基本思想 我正在使用 Jersey 2 16 Java 1 8 和 Glassfish Open Source 4 1 public interface IReportService S
  • R model.matrix 中缺少级别

    我正在尝试将带有分类变量的数据框转换为 model matrix 但丢失了变量级别 这是我的代码 df1 lt data frame id 1 200 y rbinom 200 1 5 var1 factor rep c abc def g
  • 如何在 Flutter 中创建 GridView 布局

    我正在尝试在 flutter 中布局 4x4 的瓷砖网格 我设法用列和行来做到这一点 但现在我发现了GridView成分 任何人都可以提供一个关于如何使用它来做到这一点的例子吗 我无法真正理解这些文档 我似乎没有得到我想要的结果 使用适合您
  • 使用 JavaScript 删除 Google 地图上的众多标记之一

    我目前使用下面的代码向地图添加标记 我希望能够通过推送 JavaScript 命令随时删除任何一个 这可能吗 前任 放置 5 个标记 删除第 3 个标记 同时保留其他 4 个标记 map show var geocoder new goog
  • 如何在Python中实现类似C的unsigned int 32而不需要外部依赖?

    我需要一个类来保留 Python 的所有功能int类 但确保其结果在 32 位整数内 就像 C 编程语言一样 该类型必须是 有毒的 对 int 执行操作 并且该类型应该导致返回该类型 正如其中一个答案所建议的我的另一个问题 我以前用过num
  • 禁用 Netbeans 自动 svn 忽略?

    如何停止 Netbeans 自动运行svn ignore ing swp files 我使用 Netbeans 作为主要开发环境 但我经常同时使用 gvim 进行快速编辑 gvim 创建带有 swp 扩展名的临时文件 Netbeans 似乎
  • 并行启动多个任务并在窗口中等待它们?

    如何在批处理脚本中并行执行一些任务并等待它们 command1 command3 command4 and command5 should execute in sequence say task1 command6 command7 an
  • 将 n 个项目排列在 k 个非空组中,使得每个组的最小元素和最大元素之间的差异最小化

    Given N有值的物品x 1 x n 和一个整数K找到一个线性时间算法来安排这些N中的项目K非空组 使得每个组中的范围 每个组中的最小和最大元素值 键之间的差异 最小化 因此范围的总和最小 例如给定N 4 K 2和元素1 1 4 3最小范
  • 如何更改来电时的来电振动级别?

    不知何故棘手的问题 我正在使用一款应用程序 用户可以通过该应用程序为不同的联系人设置来电自定义铃声和不同的振动级别 我一直坚持振动水平设置 我们可以设置振动水平 using Vibrator v Vibrator getSystemServ
  • data.table 连接中 i 表达式的 .SD 和 .SDcols

    我正在尝试根据联接将列的子集从 Y 复制到 X 其中列的子集是动态的 我可以很容易地识别这些列 names Y grep xxx names Y 但是当我尝试在 j 表达式中使用该代码时 它只给出列名 而不是列的值 这 SD and SDc
  • 当程序首次运行时,如何写出配置的空白版本? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我一直在用 C 制作一个命令行工具 最终我们使用了一些参数的配置 这些参数只需要设置一次 我没有为这些提供 UI 而是被告知只需设置一个空白配置 如果未设置值 则提供一条消息来说
  • PHP 替换特殊字符,如 à->a、è->e

    我有php文档signup php 它将表单 在form php文档中 的内容保存到MySQL库 当我想重新格式化输入内容时 问题就出现了 我想要解码 UTF 8 字符 例如 gt a first name POST first name
  • Bluez bluetoothctl 扫描与 hcitool 扫描

    我在 Raspberry Pi Buster 和 Stretch 上运行 bluez 5 50 我有一个 ble 传感器设备 仅当按下传感器设备上的按钮时才会公布数据 因此 广告是异步的 并且中间没有定期广告 并且所有数据包都是唯一的 没有