client: Add scan.discoverable command
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Thu, 26 Jul 2018 12:26:30 +0000 (15:26 +0300)
committerhimanshu <h.himanshu@samsung.com>
Tue, 14 Jan 2020 08:53:35 +0000 (14:23 +0530)
This adds discoverable command to scan menu which can be used to set
if adapter should become discoverable while scanning:

[bluetooth]# scan.discoverable on
[bluetooth]# scan on
SetDiscoveryFilter success
[CHG] Controller XX:XX:XX:XX:XX:XX Discoverable: yes
Discovery started
[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: yes
[bluetooth]# scan off
Discovery stopped
[CHG] Controller XX:XX:XX:XX:XX:XX Discoverable: no

Change-Id: Ica34e2bc17c72460b5fd41e8104cff2bb5fa0234
Signed-off-by: himanshu <h.himanshu@samsung.com>
client/main.c

index 7485e88..c4d6e3c 100644 (file)
@@ -1169,6 +1169,7 @@ static struct set_discovery_filter_args {
        char **uuids;
        size_t uuids_len;
        dbus_bool_t duplicate;
+       dbus_bool_t discoverable;
        bool set;
 } filter = {
        .rssi = DISTANCE_VAL_INVALID,
@@ -1208,6 +1209,11 @@ static void set_discovery_filter_setup(DBusMessageIter *iter, void *user_data)
                                                DBUS_TYPE_BOOLEAN,
                                                &args->duplicate);
 
+       if (args->discoverable)
+               g_dbus_dict_append_entry(&dict, "Discoverable",
+                                               DBUS_TYPE_BOOLEAN,
+                                               &args->discoverable);
+
        dbus_message_iter_close_container(iter, &dict);
 }
 
@@ -1365,6 +1371,26 @@ static void cmd_scan_filter_duplicate_data(int argc, char *argv[])
        filter.set = false;
 }
 
+static void cmd_scan_filter_discoverable(int argc, char *argv[])
+{
+       if (argc < 2 || !strlen(argv[1])) {
+               bt_shell_printf("Discoverable: %s\n",
+                               filter.discoverable ? "on" : "off");
+               return bt_shell_noninteractive_quit(EXIT_SUCCESS);
+       }
+
+       if (!strcmp(argv[1], "on"))
+               filter.discoverable = true;
+       else if (!strcmp(argv[1], "off"))
+               filter.discoverable = false;
+       else {
+               bt_shell_printf("Invalid option: %s\n", argv[1]);
+               return bt_shell_noninteractive_quit(EXIT_FAILURE);
+       }
+
+       filter.set = false;
+}
+
 static void filter_clear_uuids(void)
 {
        g_strfreev(filter.uuids);
@@ -2516,6 +2542,9 @@ static const struct bt_shell_menu scan_menu = {
        { "duplicate-data", "[on/off]", cmd_scan_filter_duplicate_data,
                                "Set/Get duplicate data filter",
                                NULL },
+       { "discoverable", "[on/off]", cmd_scan_filter_discoverable,
+                               "Set/Get discoverable filter",
+                               NULL },
        { "clear", "[uuids/rssi/pathloss/transport/duplicate-data]",
                                cmd_scan_filter_clear,
                                "Clears discovery filter.",