0

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

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

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

=>

from gi.repository import GLib as glib
  • 更改主循环对象:
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 规范,这应该启动服务级别连接过程。我什至不确定我的命令是否正在发送到设备。

我还尝试了另一个更新的示例。这个能够通过套接字 (BluetoothSocket) 打开 RFCOMM 连接,但连接不断被重置。这是因为 _read_at() 函数(第 181 行)没有从设备接收到任何内容并超时。

4

0 回答 0