summaryrefslogtreecommitdiffstats
path: root/audio/device.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2007-10-25 10:38:47 +0000
committerJohan Hedberg <johan.hedberg@nokia.com>2007-10-25 10:38:47 +0000
commit589d60855eedc4d207ed6e79cae3e18c48a4586f (patch)
tree84415cbac7fed6a8269f4e1ded4dc755ece948e8 /audio/device.c
parent8c29a4d5d2635d663657d731a80a9c0f6e0d7216 (diff)
Add uinput support for AVRCP
Diffstat (limited to 'audio/device.c')
-rw-r--r--audio/device.c62
1 files changed, 35 insertions, 27 deletions
diff --git a/audio/device.c b/audio/device.c
index f3567189..c86f711d 100644
--- a/audio/device.c
+++ b/audio/device.c
@@ -73,51 +73,60 @@ static DBusHandlerResult device_get_address(DBusConnection *conn,
return send_message_and_unref(conn, reply);
}
-static DBusHandlerResult device_get_name(DBusConnection *conn,
- DBusMessage *msg, void *data)
+static char *get_dev_name(DBusConnection *conn, const char *adapter_path,
+ bdaddr_t *bda)
{
- struct device *device = data;
- DBusMessage *reply, *reply2, *msg2;
+ DBusMessage *msg, *reply;
DBusError derr;
const char *name;
- char address[18], *addr_ptr = address;
+ char address[18], *addr_ptr = address, *ret;
- msg2 = dbus_message_new_method_call("org.bluez", device->adapter_path,
+ msg = dbus_message_new_method_call("org.bluez", adapter_path,
"org.bluez.Adapter", "GetRemoteName");
- if (!msg2)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ if (!msg)
+ return NULL;
- ba2str(&device->dst, address);
- dbus_message_append_args(msg2, DBUS_TYPE_STRING, &addr_ptr,
+ ba2str(bda, address);
+ dbus_message_append_args(msg, DBUS_TYPE_STRING, &addr_ptr,
DBUS_TYPE_INVALID);
dbus_error_init(&derr);
- reply2 = dbus_connection_send_with_reply_and_block(conn, msg2, -1,
+ reply = dbus_connection_send_with_reply_and_block(conn, msg, -1,
&derr);
-
- dbus_message_unref(msg2);
+ dbus_message_unref(msg);
if (dbus_error_is_set(&derr)) {
- error("%s GetRemoteName(): %s", device->adapter_path,
- derr.message);
+ error("%s GetRemoteName(): %s", adapter_path, derr.message);
dbus_error_free(&derr);
- return err_failed(conn, msg, "Unable to get remote name");
+ return NULL;
}
+ if (!dbus_message_get_args(reply, NULL,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_INVALID))
+ return NULL;
+
+ ret = g_strdup(name);
+
+ dbus_message_unref(reply);
+
+ return ret;
+}
+
+static DBusHandlerResult device_get_name(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ struct device *dev = data;
+ DBusMessage *reply;
+ const char *name = dev->name ? dev->name : "";
reply = dbus_message_new_method_return(msg);
if (!reply)
return DBUS_HANDLER_RESULT_NEED_MEMORY;
- dbus_message_get_args(reply2, NULL,
- DBUS_TYPE_STRING, &name,
- DBUS_TYPE_INVALID);
-
dbus_message_append_args(reply, DBUS_TYPE_STRING, &name,
DBUS_TYPE_INVALID);
- dbus_message_unref(reply2);
-
return send_message_and_unref(conn, reply);
}
@@ -193,11 +202,9 @@ static void device_free(struct device *dev)
if (dev->conn)
dbus_connection_unref(dev->conn);
- if (dev->adapter_path)
- g_free(dev->adapter_path);
-
- if (dev->path)
- g_free(dev->path);
+ g_free(dev->adapter_path);
+ g_free(dev->path);
+ g_free(dev->name);
g_free(dev);
}
@@ -303,6 +310,7 @@ struct device *device_register(DBusConnection *conn,
return NULL;
}
+ dev->name = get_dev_name(conn, dev->adapter_path, bda);
dev->path = g_strdup(path);
bacpy(&dev->dst, bda);
bacpy(&dev->src, &src);