tools/mesh-cfgclient: Add waiting for 'JoinComplete' 14/234214/1
authorPrzemysław Fierek <przemyslaw.fierek@silvair.com>
Tue, 14 Apr 2020 08:55:56 +0000 (10:55 +0200)
committerAbhay Agarwal <ay.agarwal@samsung.com>
Fri, 22 May 2020 04:23:43 +0000 (09:53 +0530)
Change-Id: I762a640cbb3ed8cb0834121bfb8b1ab3d73232c9
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
tools/mesh-cfgclient.c

index cab02b5..b91baad 100644 (file)
@@ -709,44 +709,13 @@ static void attach_node_setup(struct l_dbus_message *msg, void *user_data)
 static void create_net_reply(struct l_dbus_proxy *proxy,
                                struct l_dbus_message *msg, void *user_data)
 {
-       char *str;
-       uint64_t tmp;
-
        if (l_dbus_message_is_error(msg)) {
                const char *name;
 
                l_dbus_message_get_error(msg, &name, NULL);
                l_error("Failed to create network: %s", name);
                return;
-
-       }
-
-       if (!l_dbus_message_get_arguments(msg, "t", &tmp))
-               return;
-
-       local = l_new(struct meshcfg_node, 1);
-       local->token.u64 = l_get_be64(&tmp);
-       str = l_util_hexstring(&local->token.u8[0], 8);
-       bt_shell_printf("Created new node with token %s\n", str);
-       l_free(str);
-
-       if (!mesh_db_create(cfg_fname, local->token.u8,
-                                               "Mesh Config Client Network")) {
-               l_free(local);
-               local = NULL;
-               return;
        }
-
-       mesh_db_set_addr_range(low_addr, high_addr);
-       keys_add_net_key(PRIMARY_NET_IDX);
-       mesh_db_net_key_add(PRIMARY_NET_IDX);
-
-       remote_add_node(app.uuid, 0x0001, 1, PRIMARY_NET_IDX);
-       mesh_db_add_node(app.uuid, 0x0001, 1, PRIMARY_NET_IDX);
-
-       l_dbus_proxy_method_call(net_proxy, "Attach", attach_node_setup,
-                                               attach_node_reply, NULL,
-                                               NULL);
 }
 
 static void create_net_setup(struct l_dbus_message *msg, void *user_data)
@@ -1729,7 +1698,7 @@ static struct l_dbus_message *add_node_fail_call(struct l_dbus *dbus,
 static void setup_prov_iface(struct l_dbus_interface *iface)
 {
        l_dbus_interface_method(iface, "ScanResult", 0, scan_result_call, "",
-                                               "naya{sv}", "rssi", "data", "options");
+                                       "naya{sv}", "rssi", "data", "options");
 
        l_dbus_interface_method(iface, "RequestProvData", 0, req_prov_call,
                                "qq", "y", "net_index", "unicast", "count");
@@ -1781,6 +1750,48 @@ static bool crpl_getter(struct l_dbus *dbus,
        return true;
 }
 
+static void attach_node(void *user_data)
+{
+       l_dbus_proxy_method_call(net_proxy, "Attach", attach_node_setup,
+                                               attach_node_reply, NULL,
+                                               NULL);
+}
+
+static struct l_dbus_message *join_complete(struct l_dbus *dbus,
+                                               struct l_dbus_message *message,
+                                               void *user_data)
+{
+       char *str;
+       uint64_t tmp;
+
+       if (!l_dbus_message_get_arguments(message, "t", &tmp))
+               return l_dbus_message_new_error(message, dbus_err_args, NULL);
+
+       local = l_new(struct meshcfg_node, 1);
+       local->token.u64 = l_get_be64(&tmp);
+       str = l_util_hexstring(&local->token.u8[0], 8);
+       bt_shell_printf("Created new node with token %s\n", str);
+       l_free(str);
+
+       if (!mesh_db_create(cfg_fname, local->token.u8,
+                                       "Mesh Config Client Network")) {
+               l_free(local);
+               local = NULL;
+               return l_dbus_message_new_error(message, dbus_err_fail, NULL);
+       }
+
+       mesh_db_set_addr_range(low_addr, high_addr);
+       keys_add_net_key(PRIMARY_NET_IDX);
+       mesh_db_net_key_add(PRIMARY_NET_IDX);
+
+       remote_add_node(app.uuid, 0x0001, 1, PRIMARY_NET_IDX);
+       mesh_db_add_node(app.uuid, 0x0001, 1, PRIMARY_NET_IDX);
+
+       l_idle_oneshot(attach_node, NULL, NULL);
+
+       return l_dbus_message_new_method_return(message);
+}
+
 static void setup_app_iface(struct l_dbus_interface *iface)
 {
        l_dbus_interface_property(iface, "CompanyID", 0, "q", cid_getter,
@@ -1791,6 +1802,9 @@ static void setup_app_iface(struct l_dbus_interface *iface)
                                                                        NULL);
        l_dbus_interface_property(iface, "CRPL", 0, "q", crpl_getter, NULL);
 
+       l_dbus_interface_method(iface, "JoinComplete", 0, join_complete,
+                                                       "", "t", "token");
+
        /* TODO: Methods */
 }