经过一番摸索,我得到了一个pybluez脚本,可以连接到各种设备上的AVRCP配置文件,并读取响应。
代码段:
addr="e2:8b:8e:89:6c:07" #S530 white
port=23
if (port>0):
print("Attempting to connect to L2CAP port ",port)
socket=bluetooth.BluetoothSocket(bluetooth.L2CAP);
socket.connect((addr,port))
print("Connected.")
while True:
print("Waiting on read:")
data=socket.recv(1024)
for b in data:
print("%02x"%b,end=" ")
print()
socket.close()
当我按下听筒上的按钮时,得到的结果如下:
Attempting to connect to L2CAP port 23
Connected.
Waiting on read:
10 11 0e 01 48 00 00 19 58 10 00 00 01 03
Waiting on read:
20 11 0e 00 48 7c 44 00
Waiting on read:
30 11 0e 00 48 7c 46 00
Waiting on read:
40 11 0e 00 48 7c 44 00
仔细阅读规范后,我似乎看到了PASSTHROUGH命令,其中44是“ PLAY”操作命令,而46是“ PAUSE”(我认为) 除了第一个字节似乎是某种序列号之外,我不知道10 11 0e是什么意思。 我的问题有三方面:
以上任何方面的任何帮助都会有所帮助。 编辑:作为参考,AVRCP规范的详细信息似乎在这里:https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=119996
答案 0 :(得分:0)
真正的答案是,规范文档假定您已阅读其他规范文档。
三个标头字节是AVCTP传输层的一部分: http://www.cs.bilkent.edu.tr/~korpe/lab/resources/AVCTP%20Spec%20v1_0.pdf
简而言之:
0: 7..4: Incrementing transaction id. 0x01 to 0x0f
3..2: Packet type 00 = self contained packet
1 : 0=request 1=response
0 : 0=PID recognized 1: PID error
1-2: 2 byte bigendian profile id (in this case 110e, AVRCP)
其余内容在AVRCP配置文件文档https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=119996
中进行了描述我认为文档不够清晰。
我提供了一个示例应用程序,该应用程序似乎适用于我已经能够测试的大多数AVRCP设备: