如何建立蓝牙HFP服务等级连接

问题描述

我正在尝试使用bluez repository中提供的python测试代码来建立HFP(免提配置文件)服务级别连接。

为了运行,示例需要进行一些修改

  • 修复不建议使用的导入语句:
import glib
try:
  from gi.repository import GObject
except ImportError:
  import gobject as GObject

=>

from gi.repository import GLib as glib
  • 更改mainloop对象:
mainloop = GObject.MainLoop()

=>

mainloop = glib.MainLoop()
  • 禁用音频,因为它与此测试无关:
audio_supported = False
  • 编码发送到字节的命令:
os.write(self.fd,cmd + "\r\n")

=>

os.write(self.fd,f"{cmd}\r\n".encode())
  • 解码从缓冲区接收的字节:
buf = buf.strip()

=>

buf = buf.decode('utf8').strip()
  • 将BDADDR_ANY更改为手机的地址:

此刻示例运行,为了实际尝试建立连接,我添加了以下代码

fd = os.open("test.log",os.O_RDWR)
profile.NewConnection(options.path,fd,opts)

这时,我在以下行中从NewConnection()得到错误fd = fd.take()代码,fd似乎是一个简单的文件描述符,因此注释掉这一行有助于我继续前进。 我现在面临的实际问题是,在发送初始AT命令(上面链接中的第78行)之后,我没有收到设备的回复。根据蓝牙HFP 1.8规范,这应该启动service level connection procedure。我什至不确定我的命令是否已将其发送到设备。

我还尝试了another example,这是较新的。这个可以通过套接字(BluetoothSocket)打开RFCOMM连接,但是该连接会不断重置。这是因为_read_at()函数(第181行)没有从设备接收任何信息并且超时。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)