summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-10-02 15:00:14 +0300
committerJohan Hedberg <johan.hedberg@nokia.com>2008-10-02 15:00:14 +0300
commit3f0968edd3c7a220fe0a4413d5662921efa7a7b9 (patch)
treea8cc9fdd893fbb3044d3548a978f50c0497969a3
parent167c10dcff54bfc92a2bc86ac5a899ed04c3aa67 (diff)
Add support for subscriber number notification
-rw-r--r--audio/headset.c11
-rw-r--r--audio/telephony-dummy.c24
-rw-r--r--audio/telephony.h6
3 files changed, 41 insertions, 0 deletions
diff --git a/audio/headset.c b/audio/headset.c
index 2fce7b8c..2dc1dbe5 100644
--- a/audio/headset.c
+++ b/audio/headset.c
@@ -2208,3 +2208,14 @@ int telephony_list_current_call_ind(int idx, int dir, int status, int mode,
return 0;
}
+
+int telephony_subscriber_number_ind(const char *number, int type, int service)
+{
+ if (!active_devices)
+ return -ENODEV;
+
+ send_foreach_headset(active_devices, "\r\n+CNUM:,%s,%d,,%d\r\n",
+ number, type, service);
+
+ return 0;
+}
diff --git a/audio/telephony-dummy.c b/audio/telephony-dummy.c
index e4b45649..26e06ba3 100644
--- a/audio/telephony-dummy.c
+++ b/audio/telephony-dummy.c
@@ -36,6 +36,7 @@
#include "logging.h"
#include "telephony.h"
+static char *subscriber_number = NULL;
static char *active_call_number = NULL;
static int active_call_status = 0;
static int active_call_dir = 0;
@@ -151,6 +152,9 @@ void telephony_transmit_dtmf_req(void *telephony_device, char tone)
void telephony_subscriber_number_req(void *telephony_device)
{
debug("telephony-dummy: subscriber number request");
+ if (subscriber_number)
+ telephony_subscriber_number_ind(subscriber_number, 0,
+ SUBSCRIBER_SERVICE_VOICE);
telephony_subscriber_number_rsp(telephony_device, CME_ERROR_NONE);
}
@@ -316,6 +320,25 @@ static DBusMessage *registration_status(DBusConnection *conn, DBusMessage *msg,
return dbus_message_new_method_return(msg);
}
+static DBusMessage *set_subscriber_number(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;
+
+ g_free(subscriber_number);
+ subscriber_number = g_strdup(number);
+
+ debug("telephony-dummy: subscriber number set to %s", number);
+
+ return dbus_message_new_method_return(msg);
+}
+
+
static GDBusMethodTable dummy_methods[] = {
{ "OutgoingCall", "s", "", outgoing_call },
{ "IncomingCall", "s", "", incoming_call },
@@ -324,6 +347,7 @@ static GDBusMethodTable dummy_methods[] = {
{ "BatteryLevel", "u", "", battery_level },
{ "RoamingStatus", "b", "", roaming_status },
{ "RegistrationStatus", "b", "", registration_status },
+ { "SetSubscriberNumber","s", "", set_subscriber_number },
{ }
};
diff --git a/audio/telephony.h b/audio/telephony.h
index 2cbcf055..81ed64de 100644
--- a/audio/telephony.h
+++ b/audio/telephony.h
@@ -82,6 +82,10 @@
#define CALL_MULTIPARTY_NO 0
#define CALL_MULTIPARTY_YES 1
+/* Subscriber number parameters */
+#define SUBSCRIBER_SERVICE_VOICE 4
+#define SUBSCRIBER_SERVICE_FAX 5
+
/* Extended Audio Gateway Error Result Codes */
typedef enum {
CME_ERROR_NONE = -1,
@@ -155,6 +159,8 @@ int telephony_ready_ind(uint32_t features, const struct indicator *indicators,
int telephony_list_current_call_ind(int idx, int dir, int status, int mode,
int mprty, const char *number,
int type);
+int telephony_subscriber_number_ind(const char *number, int type,
+ int service);
/* Helper function for quick indicator updates */
static inline int telephony_update_indicator(struct indicator *indicators,