我有一个 Tanita-BC401 智能秤。该秤通过蓝牙与“My Tanita”应用程序配对。
我在我的 Android 手机中启用了“Bluetooth HCI Snoop Log”开发人员选项,并在应用程序中完成了配对程序。我先按秤上的“配对”,秤上的显示显示“配对”符号,然后我在应用程序中单击“配对”。使用 Wireshark,我看到配对时手机和秤之间的以下交互:
(1) Phone -> Scale: Sent Write request to Handle 0x0011, Value: 0100
(2) Scale -> Phone: Rcvd Write Response, Handle 0x0011
(3) Phone -> Scale: Sent Read Request, Handle 0x0011
(4) Scale -> Scale: Rcvd Read Response, Handle 0x0011
(5) Phone -> Scale: Sent Write Command, Handle 0x0013, Value: 0000000e000c00106a321f3b6a330031140b
(6) Scale -> Phone: Rcvd Handle Value Notification, Handle 0x0010
(7) Phone -> Scale: Sent Write Command, Handle 0x0013, Value 000000060004002000db
此时,显示屏上的刻度不再显示配对符号,而是显示“0.0 kg”。如果我站在它上面,它会通过句柄 0x0010 通知测量值。
我现在想使用我的计算机 (Arch Linux) 复制应用程序的操作,以便我能够在 Handle 0x0010 上收到通知。但我不确定如何复制配对步骤。当我尝试配对时,我无法去掉配对标志。
如果我通过“bluetoothctl”连接到秤,我可以看到以下特征:
[NEW] Primary Service (Handle 0x8ff1)
/org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0008
00001801-0000-1000-8000-00805f9b34fb
Generic Attribute Profile
[NEW] Primary Service (Handle 0x8ff1)
/org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009
273e5100-6b90-4779-83b8-b8bf1dadac35
Vendor specific
[NEW] Characteristic (Handle 0x5ece)
/org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char000a
273e510f-6b90-4779-83b8-b8bf1dadac35
Vendor specific
[NEW] Descriptor (Handle 0xa280)
/org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char000a/desc000c
00002902-0000-1000-8000-00805f9b34fb
Client Characteristic Configuration
[NEW] Characteristic (Handle 0x5ece)
/org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char000d
273e5108-6b90-4779-83b8-b8bf1dadac35
Vendor specific
[NEW] Characteristic (Handle 0x5ece)
/org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char000f
273e510e-6b90-4779-83b8-b8bf1dadac35
Vendor specific
[NEW] Descriptor (Handle 0xa320)
/org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char000f/desc0011
00002902-0000-1000-8000-00805f9b34fb
Client Characteristic Configuration
[NEW] Characteristic (Handle 0x5ece)
/org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char0012
273e5107-6b90-4779-83b8-b8bf1dadac35
Vendor specific
[NEW] Characteristic (Handle 0x5ece)
/org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char0014
273e510d-6b90-4779-83b8-b8bf1dadac35
Vendor specific
[NEW] Descriptor (Handle 0x9e20)
/org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char0014/desc0016
00002902-0000-1000-8000-00805f9b34fb
Client Characteristic Configuration
这些特征都没有句柄 0x0011 或 0x0013。
相反,如果我使用 btgatt-client 连接到秤,我可以看到相同的服务和特征,但具有不同的句柄:
service - start: 0x0001, end: 0x0007, type: primary, uuid: 00001800-0000-1000-8000-00805f9b34fb
charac - start: 0x0002, value: 0x0003, props: 0x02, ext_props: 0x0000, uuid: 00002a00-0000-1000-8000-00805f9b34fb
charac - start: 0x0004, value: 0x0005, props: 0x02, ext_props: 0x0000, uuid: 00002a01-0000-1000-8000-00805f9b34fb
charac - start: 0x0006, value: 0x0007, props: 0x02, ext_props: 0x0000, uuid: 00002a04-0000-1000-8000-00805f9b34fb
service - start: 0x0008, end: 0x0008, type: primary, uuid: 00001801-0000-1000-8000-00805f9b34fb
service - start: 0x0009, end: 0xffff, type: primary, uuid: 273e5100-6b90-4779-83b8-b8bf1dadac35
charac - start: 0x000a, value: 0x000b, props: 0x10, ext_props: 0x0000, uuid: 273e510f-6b90-4779-83b8-b8bf1dadac35
descr - handle: 0x000c, uuid: 00002902-0000-1000-8000-00805f9b34fb
charac - start: 0x000d, value: 0x000e, props: 0x04, ext_props: 0x0000, uuid: 273e5108-6b90-4779-83b8-b8bf1dadac35
charac - start: 0x000f, value: 0x0010, props: 0x10, ext_props: 0x0000, uuid: 273e510e-6b90-4779-83b8-b8bf1dadac35
descr - handle: 0x0011, uuid: 00002902-0000-1000-8000-00805f9b34fb
charac - start: 0x0012, value: 0x0013, props: 0x04, ext_props: 0x0000, uuid: 273e5107-6b90-4779-83b8-b8bf1dadac35
charac - start: 0x0014, value: 0x0015, props: 0x10, ext_props: 0x0000, uuid: 273e510d-6b90-4779-83b8-b8bf1dadac35
descr - handle: 0x0016, uuid: 00002902-0000-1000-8000-00805f9b34fb
在这里我可以看到句柄 0x0011 是带有 uuid 的描述符的句柄。00002902-0000-1000-8000-00805f9b34fb
如果我写“write-value 0x0011 01 00”,然后“read-value 0x0011”,我可以看到我已经成功地将01 00写入0x0011(步骤1)。
在此之后,我试图通过发送一个值为“000000060004002000db”的写命令来处理 0x0013 来复制步骤 (5),但我无法做到这一点。如果我尝试发送写入命令,则会收到错误消息:
write-value -w 0x0013 000000060004002000db
Invalid value byte: 000000060004002000db
我不确定如何进行。此时,我还没有让体重秤做出反应,它继续显示“配对”标志。如何找出我必须使用的命令?