diff --git a/client/main.c b/client/main.c
index 0590266..72223d5 100644
--- a/client/main.c
+++ b/client/main.c
static char *auto_register_agent = NULL;
static GDBusProxy *default_ctrl;
+static GDBusProxy *default_dev;
static GList *ctrl_list;
static GList *dev_list;
}
}
+static void set_default_device(GDBusProxy *proxy)
+{
+ char *desc = NULL;
+ DBusMessageIter iter;
+
+ default_dev = proxy;
+
+ if (!g_dbus_proxy_get_property(proxy, "Alias", &iter)) {
+ if (!g_dbus_proxy_get_property(proxy, "Address", &iter))
+ goto done;
+ }
+
+ dbus_message_iter_get_basic(&iter, &desc);
+ desc = g_strdup_printf(COLOR_BLUE "[%s]" COLOR_OFF "# ", desc);
+
+done:
+ rl_set_prompt(desc ? desc : PROMPT_ON);
+ rl_redisplay();
+ g_free(desc);
+}
+
static void proxy_removed(GDBusProxy *proxy, void *user_data)
{
const char *interface;
dev_list = g_list_remove(dev_list, proxy);
print_device(proxy, COLORED_DEL);
+
+ if (default_dev == proxy)
+ set_default_device(NULL);
}
} else if (!strcmp(interface, "org.bluez.Adapter1")) {
ctrl_list = g_list_remove(ctrl_list, proxy);
if (default_ctrl == proxy) {
default_ctrl = NULL;
+ set_default_device(NULL);
g_list_free(dev_list);
dev_list = NULL;
} else
str = g_strdup("");
+ if (strcmp(name, "Connected") == 0) {
+ dbus_bool_t connected;
+
+ dbus_message_iter_get_basic(iter, &connected);
+
+ if (connected && default_dev == NULL)
+ set_default_device(proxy);
+ else if (!connected && default_dev == proxy)
+ set_default_device(NULL);
+ }
+
print_iter(str, name, iter);
g_free(str);
}
}
}
-static void cmd_info(const char *arg)
+static struct GDBusProxy *find_device(const char *arg)
{
GDBusProxy *proxy;
- DBusMessageIter iter;
- const char *address;
if (!arg || !strlen(arg)) {
+ if (default_dev)
+ return default_dev;
rl_printf("Missing device address argument\n");
- return;
+ return NULL;
}
proxy = find_proxy_by_address(dev_list, arg);
if (!proxy) {
rl_printf("Device %s not available\n", arg);
- return;
+ return NULL;
}
+ return proxy;
+}
+
+static void cmd_info(const char *arg)
+{
+ GDBusProxy *proxy;
+ DBusMessageIter iter;
+ const char *address;
+
+ proxy = find_device(arg);
+ if (!proxy)
+ return;
+
if (g_dbus_proxy_get_property(proxy, "Address", &iter) == FALSE)
return;
{
GDBusProxy *proxy;
- if (!arg || !strlen(arg)) {
- rl_printf("Missing device address argument\n");
+ proxy = find_device(arg);
+ if (!proxy)
return;
- }
-
- proxy = find_proxy_by_address(dev_list, arg);
- if (!proxy) {
- rl_printf("Device %s not available\n", arg);
- return;
- }
if (g_dbus_proxy_method_call(proxy, "Pair", NULL, pair_reply,
NULL, NULL) == FALSE) {
dbus_bool_t trusted;
char *str;
- if (!arg || !strlen(arg)) {
- rl_printf("Missing device address argument\n");
- return;
- }
-
- proxy = find_proxy_by_address(dev_list, arg);
- if (!proxy) {
- rl_printf("Device %s not available\n", arg);
+ proxy = find_device(arg);
+ if (!proxy)
return;
- }
trusted = TRUE;
dbus_bool_t trusted;
char *str;
- if (!arg || !strlen(arg)) {
- rl_printf("Missing device address argument\n");
- return;
- }
-
- proxy = find_proxy_by_address(dev_list, arg);
- if (!proxy) {
- rl_printf("Device %s not available\n", arg);
+ proxy = find_device(arg);
+ if (!proxy)
return;
- }
trusted = FALSE;
dbus_bool_t blocked;
char *str;
- if (!arg || !strlen(arg)) {
- rl_printf("Missing device address argument\n");
- return;
- }
-
- proxy = find_proxy_by_address(dev_list, arg);
- if (!proxy) {
- rl_printf("Device %s not available\n", arg);
+ proxy = find_device(arg);
+ if (!proxy)
return;
- }
blocked = TRUE;
dbus_bool_t blocked;
char *str;
- if (!arg || !strlen(arg)) {
- rl_printf("Missing device address argument\n");
- return;
- }
-
- proxy = find_proxy_by_address(dev_list, arg);
- if (!proxy) {
- rl_printf("Device %s not available\n", arg);
+ proxy = find_device(arg);
+ if (!proxy)
return;
- }
blocked = FALSE;
static void connect_reply(DBusMessage *message, void *user_data)
{
+ GDBusProxy *proxy = user_data;
DBusError error;
dbus_error_init(&error);
}
rl_printf("Connection successful\n");
+
+ set_default_device(proxy);
}
static void cmd_connect(const char *arg)
}
if (g_dbus_proxy_method_call(proxy, "Connect", NULL, connect_reply,
- NULL, NULL) == FALSE) {
+ proxy, NULL) == FALSE) {
rl_printf("Failed to connect\n");
return;
}
static void disconn_reply(DBusMessage *message, void *user_data)
{
+ GDBusProxy *proxy = user_data;
DBusError error;
dbus_error_init(&error);
}
rl_printf("Successful disconnected\n");
+
+ if (proxy != default_dev)
+ return;
+
+ set_default_device(NULL);
}
static void cmd_disconn(const char *arg)
{
GDBusProxy *proxy;
- if (!arg || !strlen(arg)) {
- rl_printf("Missing device address argument\n");
+ proxy = find_device(arg);
+ if (!proxy)
return;
- }
-
- proxy = find_proxy_by_address(dev_list, arg);
- if (!proxy) {
- rl_printf("Device %s not available\n", arg);
- return;
- }
if (g_dbus_proxy_method_call(proxy, "Disconnect", NULL, disconn_reply,
- NULL, NULL) == FALSE) {
+ proxy, NULL) == FALSE) {
rl_printf("Failed to disconnect\n");
return;
}
{ "default-agent",NULL, cmd_default_agent,
"Set agent as the default one" },
{ "scan", "<on/off>", cmd_scan, "Scan for devices" },
- { "info", "<dev>", cmd_info, "Device information",
+ { "info", "[dev]", cmd_info, "Device information",
dev_generator },
- { "pair", "<dev>", cmd_pair, "Pair with device",
+ { "pair", "[dev]", cmd_pair, "Pair with device",
dev_generator },
- { "trust", "<dev>", cmd_trust, "Trust device",
+ { "trust", "[dev]", cmd_trust, "Trust device",
dev_generator },
- { "untrust", "<dev>", cmd_untrust, "Untrust device",
+ { "untrust", "[dev]", cmd_untrust, "Untrust device",
dev_generator },
- { "block", "<dev>", cmd_block, "Block device",
+ { "block", "[dev]", cmd_block, "Block device",
dev_generator },
- { "unblock", "<dev>", cmd_unblock, "Unblock device",
+ { "unblock", "[dev]", cmd_unblock, "Unblock device",
dev_generator },
{ "remove", "<dev>", cmd_remove, "Remove device",
dev_generator },
{ "connect", "<dev>", cmd_connect, "Connect device",
dev_generator },
- { "disconnect", "<dev>", cmd_disconn, "Disconnect device",
+ { "disconnect", "[dev]", cmd_disconn, "Disconnect device",
dev_generator },
{ "version", NULL, cmd_version, "Display version" },
{ "quit", NULL, cmd_quit, "Quit program" },