python - 以编程方式启用/禁用蓝牙配置文件

标签 python linux bluetooth a2dp hfp

我在带有 USB/蓝牙适配器 (blueZ) 5.4 的 Raspberry Pi 3 上运行 Rasbian Jessie Lite。

/etc/bluetooth/main.conf 的 Class = 0x0c0408。 我有一个 Qt5 应用程序,它启用蓝牙设备并接受任何传入的配对请求。

我可以从智能手机成功连接到所有启用的蓝牙配置文件:A2DP 和 HFP。

现在我想让用户选择应启用哪些配置文件。因此,我正在寻找一种启用/禁用动态 A2DP 和 HFP 的方法。从 C++、bash 或 python 脚本都可以。

我不能只更改类值,因为我无法重新启动蓝牙服务 - 我必须继续运行 GATT 服务器。

有什么想法吗?

最佳答案

可以使用 sdptool 命令启用和禁用 Bluez 中的任何配置文件/服务。如果您想启用任何配置文件/服务,您可以使用:

sdptool 添加 A2SRC

以同样的方式禁用您可以使用的任何服务/配置文件:

sdptool del A2SRC

可以使用 sdptool 的帮助找到更多信息

    sdptool - SDP tool v5.37
Usage:
    sdptool [options] <command> [command parameters]
Options:
    -h      Display help
    -i      Specify source interface
Commands:
    search      Search for a service
    browse      Browse all available services
    records     Request all records
    add         Add local service
    del         Delete local service
    get         Get local service
    setattr     Set/Add attribute to a SDP record
    setseq      Set/Add attribute sequence to a SDP record

Services:
    DID SP DUN LAN FAX OPUSH FTP PRINT HS HSAG HF HFAG SAP PBAP MAP 
    NAP GN PANU HCRP HID KEYB WIIMOTE CIP CTP A2SRC A2SNK AVRCT AVRTG 
    UDIUE UDITE SEMCHLA SR1 SYNCML SYNCMLSERV ACTIVESYNC HOTSYNC 
    PALMOS NOKID PCSUITE NFTP NSYNCML NGAGE APPLE IAP ISYNC GATT 

现在,您可以通过以下方式启用和禁用任何配置文件/服务。

转向第二个问题,如何远程让智能手机用户启用和禁用配置文件。您可以通过蓝牙中的串行端口配置文件(SPP)来实现这一点。简单介绍一下,SPP 是通过蓝牙进行串行端口仿真。它基于RFcomm协议(protocol),可以与A2DP和HFP并行使用。

所以这里的想法是创建从智能手机到 RSP 的 SPP 连接,然后发送命令来启用和禁用配置文件。可以使用 Bluez 提供的 rfcomm 命令从命令行使用 SPP。有关如何使用该命令的更多信息可以在此处找到:

https://unix.stackexchange.com/questions/92255/how-do-i-connect-and-send-data-to-a-bluetooth-serial-port-on-linux

如果您需要对此进行进一步说明,请告诉我。

关于python - 以编程方式启用/禁用蓝牙配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39866179/

相关文章:

android - Android 蓝牙 RSSI 值的含义

python - Python 中处理外部异常的最佳实践(我是否使用 raise?)

Python 重试动态参数

linux - 如何执行shell脚本?

android - android sleep 时可以听什么?

在 Java 中通过蓝牙的 Android ymodem

python - SqlAlchemy 问题 - "Parent instance <SomeClass> is not bound to a Session; lazy load operation..."

python - 在Python中加载两个动态库实例

linux - 是否有 Linux 命令可以复制/替换 "banner"命令?

linux - 具有 '--user' 的 Docker 无法写入具有不同所有权的卷