diff --git a/client/main.c b/client/main.c
index 9c77a34..3b43ed7 100644
--- a/client/main.c
+++ b/client/main.c
bt_shell_printf("Discovery %s\n", enable == TRUE ? "started" : "stopped");
}
-static void cmd_scan(int argc, char *argv[])
-{
- dbus_bool_t enable;
- const char *method;
-
- if (!parse_argument(argc, argv, NULL, NULL, &enable, NULL))
- return;
-
- if (check_default_ctrl() == FALSE)
- return;
-
- if (enable == TRUE)
- method = "StartDiscovery";
- else
- method = "StopDiscovery";
-
- if (g_dbus_proxy_method_call(default_ctrl->proxy, method,
- NULL, start_discovery_reply,
- GUINT_TO_POINTER(enable), NULL) == FALSE) {
- bt_shell_printf("Failed to %s discovery\n",
- enable == TRUE ? "start" : "stop");
- return;
- }
-}
-
static void append_variant(DBusMessageIter *iter, int type, void *val)
{
DBusMessageIter value;
#define DISTANCE_VAL_INVALID 0x7FFF
-struct set_discovery_filter_args {
+static struct set_discovery_filter_args {
char *transport;
dbus_uint16_t rssi;
dbus_int16_t pathloss;
char **uuids;
size_t uuids_len;
dbus_bool_t duplicate;
+ bool set;
+} filter = {
+ .rssi = DISTANCE_VAL_INVALID,
+ .pathloss = DISTANCE_VAL_INVALID,
+ .set = true,
};
static void set_discovery_filter_setup(DBusMessageIter *iter, void *user_data)
return;
}
+ filter.set = true;
+
bt_shell_printf("SetDiscoveryFilter success\n");
}
-static struct set_discovery_filter_args filter = {
- .rssi = DISTANCE_VAL_INVALID,
- .pathloss = DISTANCE_VAL_INVALID,
-};
-
-static void cmd_set_scan_filter_commit(void)
+static void set_discovery_filter(void)
{
- if (check_default_ctrl() == FALSE)
+ if (check_default_ctrl() == FALSE || filter.set)
return;
if (g_dbus_proxy_method_call(default_ctrl->proxy, "SetDiscoveryFilter",
bt_shell_printf("Failed to set discovery filter\n");
return;
}
+
+ filter.set = true;
+}
+
+static void cmd_scan(int argc, char *argv[])
+{
+ dbus_bool_t enable;
+ const char *method;
+
+ if (!parse_argument(argc, argv, NULL, NULL, &enable, NULL))
+ return;
+
+ if (check_default_ctrl() == FALSE)
+ return;
+
+ if (enable == TRUE) {
+ set_discovery_filter();
+ method = "StartDiscovery";
+ } else
+ method = "StopDiscovery";
+
+ if (g_dbus_proxy_method_call(default_ctrl->proxy, method,
+ NULL, start_discovery_reply,
+ GUINT_TO_POINTER(enable), NULL) == FALSE) {
+ bt_shell_printf("Failed to %s discovery\n",
+ enable == TRUE ? "start" : "stop");
+ return;
+ }
}
static void cmd_scan_filter_uuids(int argc, char *argv[])
filter.uuids_len = g_strv_length(filter.uuids);
commit:
- cmd_set_scan_filter_commit();
+ filter.set = false;
}
static void cmd_scan_filter_rssi(int argc, char *argv[])
filter.pathloss = DISTANCE_VAL_INVALID;
filter.rssi = atoi(argv[1]);
- cmd_set_scan_filter_commit();
+ filter.set = false;
}
static void cmd_scan_filter_pathloss(int argc, char *argv[])
filter.rssi = DISTANCE_VAL_INVALID;
filter.pathloss = atoi(argv[1]);
- cmd_set_scan_filter_commit();
+ filter.set = false;
}
static void cmd_scan_filter_transport(int argc, char *argv[])
g_free(filter.transport);
filter.transport = g_strdup(argv[1]);
- cmd_set_scan_filter_commit();
+ filter.set = false;
}
static void cmd_scan_filter_duplicate_data(int argc, char *argv[])
return;
}
- cmd_set_scan_filter_commit();
-}
-
-static void clear_discovery_filter_setup(DBusMessageIter *iter, void *user_data)
-{
- DBusMessageIter dict;
-
- dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
- DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_VARIANT_AS_STRING
- DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict);
-
- dbus_message_iter_close_container(iter, &dict);
+ filter.set = false;
}
static void filter_clear_uuids(void)
for (fc = filter_clear; fc && fc->name; fc++) {
if (all || !strcmp(fc->name, argv[1])) {
fc->clear();
+ filter.set = false;
if (!all)
goto done;
}
if (check_default_ctrl() == FALSE)
return;
- if (g_dbus_proxy_method_call(default_ctrl->proxy, "SetDiscoveryFilter",
- clear_discovery_filter_setup, set_discovery_filter_reply,
- NULL, NULL) == FALSE) {
- bt_shell_printf("Failed to clear discovery filter\n");
- }
+ set_discovery_filter();
}
static struct GDBusProxy *find_device(int argc, char *argv[])