Diff between 6d0ec74904324b667d7450c4e1d565623b3d986c and 16af0ec65ede03e4779b2d72ed50219ea033cdbe

Changed Files

File Additions Deletions Status
audio/telephony-maemo6.c +23 -7 modified

Full Patch

diff --git a/audio/telephony-maemo6.c b/audio/telephony-maemo6.c
index 42d693a..31ac969 100644
--- a/audio/telephony-maemo6.c
+++ b/audio/telephony-maemo6.c
@@ -732,17 +732,26 @@ void telephony_dial_number_req(void *telephony_device, const char *number)
 						CME_ERROR_AG_FAILURE);
 }
 
-void telephony_transmit_dtmf_req(void *telephony_device, char tone)
+static void start_dtmf_reply(DBusPendingCall *call, void *user_data)
 {
-	int ret;
-	char buf[2] = { tone, '\0' }, *buf_ptr = buf;
+	send_method_call(CSD_CALL_BUS_NAME, CSD_CALL_PATH,
+				CSD_CALL_INTERFACE, "StopDTMF",
+				NULL, NULL,
+				DBUS_TYPE_INVALID);
+}
 
-	DBG("telephony-maemo6: transmit dtmf: %s", buf);
+static void start_dtmf(void *telephony_device, char tone)
+{
+	int ret;
 
+	/*
+	 * Stop tone immediately, modem will place it in queue and play
+	 * required time.
+	 */
 	ret = send_method_call(CSD_CALL_BUS_NAME, CSD_CALL_PATH,
-				CSD_CALL_INTERFACE, "SendDTMF",
-				NULL, NULL,
-				DBUS_TYPE_STRING, &buf_ptr,
+				CSD_CALL_INTERFACE, "StartDTMF",
+				start_dtmf_reply, NULL,
+				DBUS_TYPE_BYTE, &tone,
 				DBUS_TYPE_INVALID);
 	if (ret < 0) {
 		telephony_transmit_dtmf_rsp(telephony_device,
@@ -753,6 +762,13 @@ void telephony_transmit_dtmf_req(void *telephony_device, char tone)
 	telephony_transmit_dtmf_rsp(telephony_device, CME_ERROR_NONE);
 }
 
+void telephony_transmit_dtmf_req(void *telephony_device, char tone)
+{
+	DBG("telephony-maemo6: transmit dtmf: %c", tone);
+
+	start_dtmf(telephony_device, tone);
+}
+
 void telephony_subscriber_number_req(void *telephony_device)
 {
 	DBG("telephony-maemo6: subscriber number request");