From: Lucas Joia Date: Fri, 4 Jan 2013 16:12:50 +0000 (+0000) Subject: e/bluez4: allow Disconnect when device is connected X-Git-Tag: submit/efl/20131021.015651~1674 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f41c88872c874f70556fbc6e052275033cd6d6b0;p=platform%2Fupstream%2Fenlightenment.git e/bluez4: allow Disconnect when device is connected Patch by: Lucas Joia SVN revision: 82196 --- diff --git a/src/modules/bluez4/e_mod_main.c b/src/modules/bluez4/e_mod_main.c index f43d64e..02ae823 100644 --- a/src/modules/bluez4/e_mod_main.c +++ b/src/modules/bluez4/e_mod_main.c @@ -82,6 +82,12 @@ _ebluez4_cb_connect(void *data, E_Menu *m, E_Menu_Item *mi) } static void +_ebluez4_cb_disconnect(void *data, E_Menu *m, E_Menu_Item *mi) +{ + ebluez4_disconnect_device(data); +} + +static void _ebluez4_cb_forget(void *data, E_Menu *m, E_Menu_Item *mi) { Device *dev = data; @@ -130,8 +136,16 @@ _ebluez4_add_devices(Instance *inst) NULL); e_menu_item_submenu_set(mi, subm); mi = e_menu_item_new(subm); - e_menu_item_label_set(mi, "Connect"); - e_menu_item_callback_set(mi, _ebluez4_cb_connect, dev); + if (dev->connected) + { + e_menu_item_label_set(mi, "Disconnect"); + e_menu_item_callback_set(mi, _ebluez4_cb_disconnect, dev); + } + else + { + e_menu_item_label_set(mi, "Connect"); + e_menu_item_callback_set(mi, _ebluez4_cb_connect, dev); + } mi = e_menu_item_new(subm); e_menu_item_label_set(mi, "Forget"); e_menu_item_callback_set(mi, _ebluez4_cb_forget, dev); diff --git a/src/modules/bluez4/ebluez4.c b/src/modules/bluez4/ebluez4.c index 0da7b79..9386c74 100644 --- a/src/modules/bluez4/ebluez4.c +++ b/src/modules/bluez4/ebluez4.c @@ -222,6 +222,26 @@ _try_to_connect(EDBus_Proxy *proxy) } static void +_on_disconnected(void *data, const EDBus_Message *msg, EDBus_Pending *pending) +{ + const char *err_name, *err_msg; + + if (edbus_message_error_get(msg, &err_name, &err_msg)) + { + ERR("%s: %s", err_name, err_msg); + ebluez4_show_error(err_name, err_msg); + return; + } +} + +static void +_try_to_disconnect(EDBus_Proxy *proxy) +{ + if (proxy) + edbus_proxy_call(proxy, "Disconnect", _on_disconnected, NULL, -1, ""); +} + +static void _on_paired(void *data, const EDBus_Message *msg, EDBus_Pending *pending) { const char *err_name, *err_msg; @@ -492,6 +512,14 @@ ebluez4_connect_to_device(Device *dev) } void +ebluez4_disconnect_device(Device *dev) +{ + _try_to_disconnect(dev->proxy.input); + _try_to_disconnect(dev->proxy.audio_source); + _try_to_disconnect(dev->proxy.audio_sink); +} + +void ebluez4_pair_with_device(const char *addr) { edbus_proxy_call(ctxt->adap_proxy, "CreatePairedDevice", _on_paired, NULL, diff --git a/src/modules/bluez4/ebluez4.h b/src/modules/bluez4/ebluez4.h index 79cc7c6..726d761 100644 --- a/src/modules/bluez4/ebluez4.h +++ b/src/modules/bluez4/ebluez4.h @@ -61,6 +61,7 @@ void ebluez4_edbus_shutdown(); void ebluez4_start_discovery(); void ebluez4_stop_discovery(); void ebluez4_connect_to_device(Device *dev); +void ebluez4_disconnect_device(Device *dev); void ebluez4_pair_with_device(const char *addr); void ebluez4_remove_device(EDBus_Object *obj); int ebluez4_path_cmp(const void *d1, const void *d2);