summaryrefslogtreecommitdiffstats
path: root/audio/sink.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2008-10-02 16:38:43 -0300
committerLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2008-10-02 16:38:43 -0300
commit21691bc11dad5395ea157873c2e7fdf35237a7c9 (patch)
treee9397debe9ebc55fcf4a3b036619df74a3ebd622 /audio/sink.c
parentc1172863fc0aa6d430dd6aa14012cfa44f891fe5 (diff)
Add property support for sink interface.
Diffstat (limited to 'audio/sink.c')
-rw-r--r--audio/sink.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/audio/sink.c b/audio/sink.c
index 99d49910..ab0a161d 100644
--- a/audio/sink.c
+++ b/audio/sink.c
@@ -42,6 +42,7 @@
#include "a2dp.h"
#include "error.h"
#include "sink.h"
+#include "dbus-common.h"
#define STREAM_SETUP_RETRY_TIMER 2000
@@ -78,12 +79,14 @@ static void stream_state_changed(struct avdtp_stream *stream,
{
struct audio_device *dev = user_data;
struct sink *sink = dev->sink;
+ gboolean value;
if (err)
return;
switch (new_state) {
case AVDTP_STATE_IDLE:
+ value = FALSE;
g_dbus_emit_signal(dev->conn, dev->path,
AUDIO_SINK_INTERFACE,
"Disconnected",
@@ -483,12 +486,44 @@ static DBusMessage *sink_is_connected(DBusConnection *conn,
return reply;
}
+static DBusMessage *sink_get_properties(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ struct audio_device *device = data;
+ DBusMessage *reply;
+ DBusMessageIter iter;
+ DBusMessageIter dict;
+ gboolean value;
+
+ dbus_message_iter_init_append(reply, &iter);
+
+ 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);
+
+ /* Playing */
+ value = (device->sink->state == AVDTP_STATE_STREAMING);
+ dbus_message_iter_append_dict_entry(&dict, "Playing",
+ DBUS_TYPE_BOOLEAN, &value);
+
+ /* Connected */
+ value = (device->sink->state >= AVDTP_STATE_CONFIGURED);
+ dbus_message_iter_append_dict_entry(&dict, "Connected",
+ DBUS_TYPE_BOOLEAN, &value);
+
+ dbus_message_iter_close_container(&iter, &dict);
+
+ return reply;
+}
+
static GDBusMethodTable sink_methods[] = {
{ "Connect", "", "", sink_connect,
G_DBUS_METHOD_FLAG_ASYNC },
{ "Disconnect", "", "", sink_disconnect,
G_DBUS_METHOD_FLAG_ASYNC },
{ "IsConnected", "", "b", sink_is_connected },
+ { "GetProperties", "", "a{sv}",sink_get_properties },
{ NULL, NULL, NULL, NULL }
};
@@ -497,6 +532,7 @@ static GDBusSignalTable sink_signals[] = {
{ "Disconnected", "" },
{ "Playing", "" },
{ "Stopped", "" },
+ { "PropertyChanged", "sv" },
{ NULL, NULL }
};