summaryrefslogtreecommitdiff
path: root/src/bt-device.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bt-device.c')
-rw-r--r--src/bt-device.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/bt-device.c b/src/bt-device.c
index 8e16dc6..799ee32 100644
--- a/src/bt-device.c
+++ b/src/bt-device.c
@@ -54,6 +54,7 @@ static int xml_t[LAST_E] = {0, 0, 0, 0, -1, -1};
static gchar *adapter_arg = NULL;
static gboolean list_arg = FALSE;
static gchar *connect_arg = NULL;
+static gchar *disconnect_arg = NULL;
static gchar *remove_arg = NULL;
static gchar *info_arg = NULL;
static gboolean services_arg = FALSE;
@@ -240,6 +241,7 @@ static GOptionEntry entries[] = {
{"adapter", 'a', 0, G_OPTION_ARG_STRING, &adapter_arg, "Adapter Name or MAC", "<name|mac>"},
{"list", 'l', 0, G_OPTION_ARG_NONE, &list_arg, "List added devices", NULL},
{"connect", 'c', 0, G_OPTION_ARG_STRING, &connect_arg, "Connect to the remote device", "<mac>"},
+ {"disconnect", 'd', 0, G_OPTION_ARG_STRING, &disconnect_arg, "Disconnect the remote device", "<name|mac>"},
{"remove", 'r', 0, G_OPTION_ARG_STRING, &remove_arg, "Remove device", "<name|mac>"},
{"info", 'i', 0, G_OPTION_ARG_STRING, &info_arg, "Get info about device", "<name|mac>"},
{"services", 's', 0, G_OPTION_ARG_NONE, &services_arg, "Discover device services", NULL},
@@ -282,7 +284,7 @@ int main(int argc, char *argv[])
g_print("%s: %s\n", g_get_prgname(), error->message);
g_print("Try `%s --help` for more information.\n", g_get_prgname());
exit(EXIT_FAILURE);
- } else if (!list_arg && (!connect_arg || strlen(connect_arg) == 0) && (!remove_arg || strlen(remove_arg) == 0) && (!info_arg || strlen(info_arg) == 0) && !services_arg && !set_arg) {
+ } else if (!list_arg && (!connect_arg || strlen(connect_arg) == 0) && (!disconnect_arg || strlen(disconnect_arg) == 0) && (!remove_arg || strlen(remove_arg) == 0) && (!info_arg || strlen(info_arg) == 0) && !services_arg && !set_arg) {
g_print("%s", g_option_context_get_help(context, FALSE, NULL));
exit(EXIT_FAILURE);
} else if (services_arg && (argc != 2 || strlen(argv[1]) == 0) && (argc != 3 || strlen(argv[1]) == 0)) {
@@ -342,6 +344,16 @@ int main(int argc, char *argv[])
g_main_loop_unref(mainloop);
g_free(created_device);
g_object_unref(agent);
+ } else if (disconnect_arg) {
+ Device *device = find_device(adapter, disconnect_arg, &error);
+ exit_if_error(error);
+
+ g_print("Disconnecting: %s\n", disconnect_arg);
+ device_disconnect(device, &error);
+ exit_if_error(error);
+
+ g_print("Done\n");
+ g_object_unref(device);
} else if (remove_arg) {
Device *device = find_device(adapter, remove_arg, &error);
exit_if_error(error);