环境:Bluez 5.14,Linux 3.1,USB可插拔BLE无线电,TI BLE密钥卡(CC2541开发套件) Linux设备< --- hci ----> USB BLE收音机
我们使用gatttool在TI密钥卡上启用了按键事件,并开始侦听事件
gatttool -b [hardware ID] --char-write-req -a [handle] -n [value] --listen
(gatttool -b 90:59:AF:09:E1:5D --char-write-req -a 0x0048 -n 0100 --listen)
按下遥控器上的按钮并查看这些事件
Notification handle = 0x0047 value: 02
Notification handle = 0x0047 value: 00
Notification handle = 0x0047 value: 02
因此,我们可以通过Bluez堆栈从Keyfob接收按键事件
目标:
我们需要抓住GATT断开事件,即当我们迟早从钥匙扣取出电池时GATT连接断开。我们希望收到Bluez堆栈的断开连接事件。 Bluez具有此功能,因为Android支持GATT断开事件,该事件是在Bluez上构建的。
问题:
我们如何使用Bluez命令行hcitool / gatttool或Bluez API接收GATT Disconnect事件。
答案 0 :(得分:1)
注意G_IO_HUP并正常关闭。
chan = gatt_connect(opt_src, opt_dst, opt_dst_type, opt_sec_level,
opt_psm, opt_mtu, connect_cb, &gerr);
if (chan == NULL) {
log_printf(LOG_LEVEL_ERROR,"%s: chan is NULL\n",__func__);
log_printf(LOG_LEVEL_ERROR,"%s\n", gerr->message);
g_error_free(gerr);
g_main_loop_quit(event_loop);
} else {
log_printf(LOG_LEVEL_INFO,"Connected to %s\n",opt_dst);
g_io_add_watch(chan, G_IO_HUP, channel_watcher, NULL);
}