From 2f744156467aac007834f602f211a2b4e882f144 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Fri, 5 Sep 2008 14:36:12 +0300 Subject: Add some simple D-Bus methods for telephony control --- audio/telephony-dummy.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/audio/telephony-dummy.c b/audio/telephony-dummy.c index 828a9c39..efe6c4ff 100644 --- a/audio/telephony-dummy.c +++ b/audio/telephony-dummy.c @@ -30,9 +30,14 @@ #include #include #include +#include +#include +#include "logging.h" #include "telephony.h" +DBusConnection *connection = NULL; + static gboolean events_enabled = FALSE; /* Response and hold state @@ -98,10 +103,109 @@ int telephony_answer_call(void) return 0; } +/* D-Bus method handlers */ +static DBusMessage *outgoing_call(DBusConnection *conn, DBusMessage *msg, + void *data) +{ + const char *number; + + if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &number, + DBUS_TYPE_INVALID)) + return NULL; + + debug("telephony-dummy: outgoing call to %s", number); + + return dbus_message_new_method_return(msg);; +} + +static DBusMessage *incoming_call(DBusConnection *conn, DBusMessage *msg, + void *data) +{ + const char *number; + + if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &number, + DBUS_TYPE_INVALID)) + return NULL; + + debug("telephony-dummy: incoming call to %s", number); + + return dbus_message_new_method_return(msg);; +} + +static DBusMessage *cancel_call(DBusConnection *conn, DBusMessage *msg, + void *data) +{ + debug("telephony-dummy: cancel call"); + + if (telephony_get_indicator(dummy_indicators, "callsetup") > 0) + telephony_update_indicator(dummy_indicators, "callsetup", + EV_CALLSETUP_INACTIVE); + if (telephony_get_indicator(dummy_indicators, "call") > 0) + telephony_update_indicator(dummy_indicators, "call", + EV_CALL_INACTIVE); + + return dbus_message_new_method_return(msg);; +} + + +static DBusMessage *signal_strength(DBusConnection *conn, DBusMessage *msg, + void *data) +{ + dbus_uint32_t strength; + + if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_UINT32, &strength, + DBUS_TYPE_INVALID)) + return NULL; + + if (strength > 5) + return NULL; + + telephony_update_indicator(dummy_indicators, "signal", strength); + + debug("telephony-dummy: signal strength set to %u", strength); + + return dbus_message_new_method_return(msg);; +} + +static DBusMessage *battery_level(DBusConnection *conn, DBusMessage *msg, + void *data) +{ + dbus_uint32_t level; + + if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_UINT32, &level, + DBUS_TYPE_INVALID)) + return NULL; + + if (level > 5) + return NULL; + + telephony_update_indicator(dummy_indicators, "battchg", level); + + debug("telephony-dummy: battery level set to %u", level); + + return dbus_message_new_method_return(msg);; +} + +static GDBusMethodTable dummy_methods[] = { + { "OutgoingCall", "s", "", outgoing_call }, + { "IncomingCall", "s", "", incoming_call }, + { "CancelCall", "", "", cancel_call }, + { "SignalStrength", "u", "", signal_strength }, + { "BatteryLevel", "u", "", battery_level }, + { } +}; + int telephony_init(void) { uint32_t features = 0; + connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); + + g_dbus_register_interface(connection, "/org/bluez/test", + "org.bluez.TelephonyTest", + dummy_methods, NULL, + NULL, NULL, NULL); + telephony_ready(features, dummy_indicators, response_and_hold); return 0; @@ -109,4 +213,6 @@ int telephony_init(void) void telephony_exit(void) { + dbus_connection_unref(connection); + connection = NULL; } -- cgit