问题描述
我正在尝试使用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 (将#修改为@)