summaryrefslogtreecommitdiffstats
path: root/tools/huawei-audio.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-09-30 00:35:45 +0900
committerMarcel Holtmann <marcel@holtmann.org>2010-09-30 00:35:45 +0900
commite81da1f0684735985b576f77baca6ff145d74765 (patch)
tree77f177258e814656119c031df295faf9924a2b9d /tools/huawei-audio.c
parent860be0ad4f14843e35cd5a002c78138cce97b8f8 (diff)
downloadofono-e81da1f0684735985b576f77baca6ff145d74765.tar.bz2
tools: Start tracking audio interface
Diffstat (limited to 'tools/huawei-audio.c')
-rw-r--r--tools/huawei-audio.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/tools/huawei-audio.c b/tools/huawei-audio.c
index 7f7b0612..084241e5 100644
--- a/tools/huawei-audio.c
+++ b/tools/huawei-audio.c
@@ -42,6 +42,7 @@
#define OFONO_MODEM_INTERFACE OFONO_SERVICE ".Modem"
#define OFONO_CALLMANAGER_INTERFACE OFONO_SERVICE ".VoiceCallManager"
#define OFONO_CALL_INTERFACE OFONO_SERVICE ".VoiceCall"
+#define OFONO_AUDIO_INTERFACE OFONO_SERVICE ".AudioSettings"
struct modem_data {
char *path;
@@ -51,6 +52,7 @@ struct modem_data {
guint call_added_watch;
guint call_removed_watch;
guint call_changed_watch;
+ guint audio_changed_watch;
gboolean has_callmanager;
gboolean is_huawei;
@@ -178,6 +180,25 @@ static void close_audio(struct modem_data *modem)
close(modem->dsp_out);
}
+static void audio_set(struct modem_data *modem, const char *key,
+ DBusMessageIter *iter)
+{
+ const char *str = NULL;
+
+ if (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_STRING)
+ dbus_message_iter_get_basic(iter, &str);
+
+ if (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_BOOLEAN) {
+ dbus_bool_t val;
+
+ dbus_message_iter_get_basic(iter, &val);
+ str = (val == TRUE) ? "yes" : "no";
+ }
+
+ g_print("updating audio (%s) [ %s = %s ]\n", modem->path,
+ key, str ? str : "...");
+}
+
static void call_set(struct call_data *call, const char *key,
DBusMessageIter *iter)
{
@@ -311,6 +332,26 @@ static gboolean call_changed(DBusConnection *conn,
return TRUE;
}
+static gboolean audio_changed(DBusConnection *conn,
+ DBusMessage *msg, void *user_data)
+{
+ struct modem_data *modem = user_data;
+ DBusMessageIter iter, value;
+ const char *key;
+
+ if (dbus_message_iter_init(msg, &iter) == FALSE)
+ return TRUE;
+
+ dbus_message_iter_get_basic(&iter, &key);
+
+ dbus_message_iter_next(&iter);
+ dbus_message_iter_recurse(&iter, &value);
+
+ audio_set(modem, key, &value);
+
+ return TRUE;
+}
+
static void get_calls_reply(DBusPendingCall *call, void *user_data)
{
struct modem_data *modem = user_data;
@@ -389,6 +430,7 @@ static void check_interfaces(struct modem_data *modem, DBusMessageIter *iter)
{
DBusMessageIter entry;
gboolean has_callmanager = FALSE;
+ gboolean has_audiosettings = FALSE;
dbus_message_iter_recurse(iter, &entry);
@@ -400,6 +442,9 @@ static void check_interfaces(struct modem_data *modem, DBusMessageIter *iter)
if (g_str_equal(interface, OFONO_CALLMANAGER_INTERFACE) == TRUE)
has_callmanager = TRUE;
+ if (g_str_equal(interface, OFONO_AUDIO_INTERFACE) == TRUE)
+ has_audiosettings = TRUE;
+
dbus_message_iter_next(&entry);
}
@@ -430,6 +475,7 @@ static void destroy_modem(gpointer data)
g_dbus_remove_watch(modem->conn, modem->call_added_watch);
g_dbus_remove_watch(modem->conn, modem->call_removed_watch);
g_dbus_remove_watch(modem->conn, modem->call_changed_watch);
+ g_dbus_remove_watch(modem->conn, modem->audio_changed_watch);
g_hash_table_destroy(modem->call_list);
@@ -470,6 +516,9 @@ static void create_modem(DBusConnection *conn,
modem->call_changed_watch = g_dbus_add_signal_watch(conn, NULL,
NULL, OFONO_CALL_INTERFACE,
"PropertyChanged", call_changed, modem, NULL);
+ modem->audio_changed_watch = g_dbus_add_signal_watch(conn, NULL,
+ NULL, OFONO_AUDIO_INTERFACE,
+ "PropertyChanged", audio_changed, modem, NULL);
g_hash_table_replace(modem_list, modem->path, modem);