2014-02-10 131 views
2

环境:Bluez 5.14,Linux 3.1,USB可插拔BLE收音机,TI BLE密钥卡(CC2541开发工具包) Linux设备< --- hci ----> USB BLE无线如何在Bluez/Linux上从GATT服务器断开连接事件

我们启用使用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栈接收来自便携式信息终端的按键事件

目的:

我们需要赶上GATT断开事件,即当我们迟早删除密钥卡电池关贸总协定连接破碎。我们希望收到来自Bluez堆栈的断开连接事件。自从Android支持基于Bluez的GATT断开连接事件以来,Bluez就具备了此功能。

问:

我们如何接收使用配合bluez命令行hcitool/gatttool或配合bluez API关贸总协定断开事件。

+0

简而言之 - 我们如何发现GATT或蓝牙连接已损坏。我们需要这个,原因很多 - 清理资源,重新启动lescan等。 –

回答

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); 
} 
+0

试过,这个很好。谢谢。 –

+0

这就像一个魅力,但由于检测是在GATT层,由于电池拆卸需要很长时间才能检测到断开。在BLE层检测将是理想的。 –

+0

很高兴知道这是可能的。但为什么“gattool - listen”不会注意到断开连接并且永远挂在那里?这是臭名昭着的bluez buickiness和用户不友好?以防万一,bluez 4.101(随Ubuntu 14.04LTS发货)。 – pfalcon

相关问题