[PATCH 2/3] Add hfp_send_dtmf to send tones for hfpmodem
Zhenhua Zhang
zhenhua.zhang at intel.com
Thu Dec 3 19:22:14 PST 2009
---
drivers/hfpmodem/voicecall.c | 41 ++++++++++++++++++++++++++++++++++++++++-
1 files changed, 40 insertions(+), 1 deletions(-)
diff --git a/drivers/hfpmodem/voicecall.c b/drivers/hfpmodem/voicecall.c
index ee89ee0..37e405e 100644
--- a/drivers/hfpmodem/voicecall.c
+++ b/drivers/hfpmodem/voicecall.c
@@ -512,6 +512,45 @@ static void hfp_release_all_active(struct ofono_voicecall *vc,
CALLBACK_WITH_FAILURE(cb, data);
}
+static void hfp_send_dtmf(struct ofono_voicecall *vc, const char *dtmf,
+ ofono_voicecall_cb_t cb, void *data)
+{
+ struct voicecall_data *vd = ofono_voicecall_get_data(vc);
+ struct change_state_req *req = g_try_new0(struct change_state_req, 1);
+ char *buf;
+ int s;
+
+ if (!req)
+ goto error;
+
+ req->vc = vc;
+ req->cb = cb;
+ req->data = data;
+ req->affected_types = 0;
+
+ /* strlen("AT+VTS=") = 7 */
+ buf = g_try_new(char, strlen(dtmf) + 7);
+
+ if (!buf)
+ goto error;
+
+ sprintf(buf, "AT+VTS=%s", dtmf);
+
+ s = g_at_chat_send(vd->chat, buf, none_prefix,
+ generic_cb, req, g_free);
+
+ g_free(buf);
+
+ if (s > 0)
+ return;
+
+error:
+ if (req)
+ g_free(req);
+
+ CALLBACK_WITH_FAILURE(cb, data);
+}
+
static void no_carrier_notify(GAtResult *result, gpointer user_data)
{
DBG("");
@@ -1020,7 +1059,7 @@ static struct ofono_voicecall_driver driver = {
.transfer = NULL,
.deflect = NULL,
.swap_without_accept = NULL,
- .send_tones = NULL
+ .send_tones = hfp_send_dtmf
};
void hfp_voicecall_init()
--
1.6.5.2
More information about the ofono
mailing list