summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-09-10 17:52:50 +0300
committerJohan Hedberg <johan.hedberg@nokia.com>2008-09-10 17:52:50 +0300
commit499ab24d27df0ffb1164f4134e7394b2a2292b15 (patch)
tree8902e4ef22292b9eb832525e9751061157458c6a /audio
parent3e34eab99bd769efc756cc8e3a452b00e48de387 (diff)
Implement DTMF tone transmission (AT+VTS)
Diffstat (limited to 'audio')
-rw-r--r--audio/headset.c18
-rw-r--r--audio/telephony-dummy.c6
-rw-r--r--audio/telephony.h2
3 files changed, 26 insertions, 0 deletions
diff --git a/audio/headset.c b/audio/headset.c
index 4683c356..b90c1a9c 100644
--- a/audio/headset.c
+++ b/audio/headset.c
@@ -840,6 +840,23 @@ ok:
return headset_send(hs, "\r\nOK\r\n");
}
+static int dtmf_tone(struct audio_device *device, const char *buf)
+{
+ struct headset *hs = device->headset;
+
+ if (strlen(buf) < 8) {
+ error("Too short string for DTMF tone");
+ return -EINVAL;
+ }
+
+ if (telephony_transmit_dtmf_req(buf[7]) < 0) {
+ headset_send(hs, "\r\nERROR\r\n");
+ return 0;
+ }
+
+ return headset_send(hs, "\r\nOK\n\r");
+}
+
static struct event event_callbacks[] = {
{ "ATA", answer_call },
{ "ATD", dial_number },
@@ -853,6 +870,7 @@ static struct event event_callbacks[] = {
{ "AT+CLIP", cli_notification },
{ "AT+BTRH", response_and_hold },
{ "AT+BLDN", last_dialed_number },
+ { "AT+VTS", dtmf_tone },
{ 0 }
};
diff --git a/audio/telephony-dummy.c b/audio/telephony-dummy.c
index 701de220..f9e121bf 100644
--- a/audio/telephony-dummy.c
+++ b/audio/telephony-dummy.c
@@ -113,6 +113,12 @@ int telephony_dial_number_req(const char *number)
return 0;
}
+int telephony_transmit_dtmf_req(char tone)
+{
+ debug("telephony-dummy: transmit dtmf: %c", tone);
+ return 0;
+}
+
/* D-Bus method handlers */
static DBusMessage *outgoing_call(DBusConnection *conn, DBusMessage *msg,
void *data)
diff --git a/audio/telephony.h b/audio/telephony.h
index 5cca4997..94df9d2a 100644
--- a/audio/telephony.h
+++ b/audio/telephony.h
@@ -93,6 +93,8 @@ int telephony_calling_stopped_ind(void);
int telephony_ready_ind(uint32_t features, const struct indicator *indicators,
int rh);
+int telephony_transmit_dtmf_req(char tone);
+
/* Helper function for quick indicator updates */
static inline int telephony_update_indicator(struct indicator *indicators,
const char *desc,