From 67cdef697ae481675b84ebbc50247763ff732b52 Mon Sep 17 00:00:00 2001 From: Atul Rai Date: Fri, 18 May 2018 08:30:26 +0530 Subject: [Mesh] Adapt meshctl for Tizen platform Change-Id: I094dd7ecd8f41f9db79cead816b870de18e0330b Signed-off-by: Atul Rai --- mesh/main.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 113 insertions(+), 1 deletion(-) diff --git a/mesh/main.c b/mesh/main.c index 3e1484f6..1b78aaf1 100644 --- a/mesh/main.c +++ b/mesh/main.c @@ -626,6 +626,15 @@ done: bt_shell_set_menu(&main_menu); } +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY +static void connect_setup(DBusMessageIter *iter, void *user_data) +{ + gboolean auto_connect = FALSE; + + dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &auto_connect); +} +#endif + static void connect_reply(DBusMessage *message, void *user_data) { GDBusProxy *proxy = user_data; @@ -664,6 +673,60 @@ static void update_device_info(GDBusProxy *proxy) if (!g_dbus_proxy_get_property(proxy, "Address", &iter)) return; +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + if (parse_service_data(proxy, MESH_PROXY_SVC_UUID, NULL) && + discover_mesh) { + bool res; + + g_dbus_proxy_method_call(default_ctrl->proxy, "StopLEDiscovery", + NULL, NULL, NULL, NULL); + discover_mesh = false; + + forget_mesh_devices(); + + /* sleep(1): Wait for StopLEDiscovery to complete before calling ConnectLE */ + sleep(1); + res = g_dbus_proxy_method_call(proxy, "ConnectLE", connect_setup, + connect_reply, proxy, NULL); + + if (!res) + bt_shell_printf("Failed to connect to mesh\n"); + + else + bt_shell_printf("Trying to connect to mesh\n"); + + } else if (parse_service_data(proxy, MESH_PROV_SVC_UUID, &prov_data)) { + struct mesh_device *dev; + + dev = find_device_by_uuid(adapter->mesh_devices, + prov_data.dev_uuid); + + /* Display provisioning service once per discovery session */ + if (discovering && (!dev || !dev->hide)) + print_prov_service(&prov_data); + + if (dev) { + dev->proxy = proxy; + dev->hide = discovering; + return; + } + + dev = g_malloc0(sizeof(struct mesh_device)); + if (!dev) + return; + + dev->proxy = proxy; + dev->hide = discovering; + + memcpy(dev->dev_uuid, prov_data.dev_uuid, 16); + + adapter->mesh_devices = g_list_append(adapter->mesh_devices, + dev); + print_device(proxy, COLORED_NEW); + + node_create_new(&prov_data); + } +#else if (parse_service_data(proxy, MESH_PROV_SVC_UUID, &prov_data)) { struct mesh_device *dev; @@ -715,6 +778,7 @@ static void update_device_info(GDBusProxy *proxy) bt_shell_printf("Trying to connect to mesh\n"); } +#endif } static void adapter_added(GDBusProxy *proxy) @@ -760,8 +824,13 @@ static void disconnect(GDBusReturnFunction cb, void *user_data) if (!proxy) return; +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + if (g_dbus_proxy_method_call(proxy, "DisconnectLE", NULL, cb, user_data, + NULL) == FALSE) { +#else if (g_dbus_proxy_method_call(proxy, "Disconnect", NULL, cb, user_data, NULL) == FALSE) { +#endif bt_shell_printf("Failed to disconnect\n"); return; } @@ -1239,7 +1308,11 @@ static void property_changed(GDBusProxy *proxy, const char *name, } else str = g_strdup(""); +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + if (strcmp(name, "LEDiscovering") == 0) { +#else if (strcmp(name, "Discovering") == 0) { +#endif int temp; dbus_message_iter_get_basic(iter, &temp); @@ -1265,8 +1338,10 @@ static void property_changed(GDBusProxy *proxy, const char *name, static void message_handler(DBusConnection *connection, DBusMessage *message, void *user_data) { +#ifndef TIZEN_FEATURE_BLUEZ_MODIFY /* Suppress unnecessary logs */ bt_shell_printf("[SIGNAL] %s.%s\n", dbus_message_get_interface(message), dbus_message_get_member(message)); +#endif } static struct adapter *find_ctrl_by_address(GList *source, const char *address) @@ -1544,9 +1619,17 @@ static void cmd_scan_unprovisioned(int argc, char *argv[]) if (enable == TRUE) { discover_mesh = false; set_scan_filter_uuids(filters); +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + method = "StartLEDiscovery"; +#else method = "StartDiscovery"; +#endif } else { +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + method = "StopLEDiscovery"; +#else method = "StopDiscovery"; +#endif } if (g_dbus_proxy_method_call(default_ctrl->proxy, method, @@ -1653,8 +1736,13 @@ static void cmd_connect(int argc, char *argv[]) } if (discovering) +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + g_dbus_proxy_method_call(default_ctrl->proxy, "StopLEDiscovery", + NULL, NULL, NULL, NULL); +#else g_dbus_proxy_method_call(default_ctrl->proxy, "StopDiscovery", NULL, NULL, NULL, NULL); +#endif set_scan_filter_uuids(filters); discover_mesh = true; @@ -1671,15 +1759,23 @@ static void cmd_connect(int argc, char *argv[]) } if (g_dbus_proxy_method_call(default_ctrl->proxy, +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + "StartLEDiscovery", NULL, start_discovery_reply, +#else "StartDiscovery", NULL, start_discovery_reply, +#endif GUINT_TO_POINTER(TRUE), NULL) == FALSE) { bt_shell_printf("Failed to start mesh proxy discovery\n"); return bt_shell_noninteractive_quit(EXIT_FAILURE); } +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + g_dbus_proxy_method_call(default_ctrl->proxy, "StartLEDiscovery", + NULL, NULL, NULL, NULL); +#else g_dbus_proxy_method_call(default_ctrl->proxy, "StartDiscovery", NULL, NULL, NULL, NULL); - +#endif } static void prov_disconn_reply(DBusMessage *message, void *user_data) @@ -1707,7 +1803,11 @@ static void prov_disconn_reply(DBusMessage *message, void *user_data) connection.unicast = node_get_primary(node); if (g_dbus_proxy_method_call(default_ctrl->proxy, +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + "StartLEDiscovery", NULL, start_discovery_reply, +#else "StartDiscovery", NULL, start_discovery_reply, +#endif GUINT_TO_POINTER(TRUE), NULL) == FALSE) { bt_shell_printf("Failed to start mesh proxy discovery\n"); return bt_shell_noninteractive_quit(EXIT_FAILURE); @@ -1813,14 +1913,26 @@ static void cmd_start_prov(int argc, char *argv[]) proxy = dev->proxy; if (discovering) +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + g_dbus_proxy_method_call(default_ctrl->proxy, "StopLEDiscovery", + NULL, NULL, NULL, NULL); +#else g_dbus_proxy_method_call(default_ctrl->proxy, "StopDiscovery", NULL, NULL, NULL, NULL); +#endif forget_mesh_devices(); connection.type = CONN_TYPE_PROVISION; +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + /* sleep(1): Wait for StopLEDiscovery to complete before calling ConnectLE */ + sleep(1); + if (g_dbus_proxy_method_call(proxy, "ConnectLE", connect_setup, + connect_reply, proxy, NULL) == FALSE) { +#else if (g_dbus_proxy_method_call(proxy, "Connect", NULL, connect_reply, proxy, NULL) == FALSE) { +#endif bt_shell_printf("Failed to connect "); print_device(proxy, NULL); return bt_shell_noninteractive_quit(EXIT_FAILURE); -- cgit v1.2.3