[PATCH 1/2] Add stop playing ringtone to maemo6 telephony driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If ringtone is loud enough, it may leak to microphone when call is
answered via Bluetooth headset. As result, it can be heard on remote
end. Therefore, playing ringtone shall be stopped as fast as possible
before answering a call.
---
 audio/telephony-maemo6.c |   34 +++++++++++++++++++++++++++++++++-
 1 files changed, 33 insertions(+), 1 deletions(-)

diff --git a/audio/telephony-maemo6.c b/audio/telephony-maemo6.c
index 4430cc1..94feda2 100644
--- a/audio/telephony-maemo6.c
+++ b/audio/telephony-maemo6.c
@@ -113,6 +113,11 @@ enum net_registration_status {
 #define CSD_SIMPB_TYPE_EN			"EN"
 #define CSD_SIMPB_TYPE_MSISDN			"MSISDN"
 
+/* OHM plugin D-Bus definitions */
+#define OHM_BUS_NAME		"com.nokia.NonGraphicFeedback1"
+#define OHM_INTERFACE		"com.nokia.NonGraphicFeedback1"
+#define OHM_PATH		"/com/nokia/NonGraphicFeedback1"
+
 struct csd_call {
 	char *object_path;
 	int status;
@@ -143,6 +148,11 @@ struct pending_req {
 };
 
 static int get_property(const char *iface, const char *prop);
+static int send_method_call(const char *dest, const char *path,
+				const char *interface, const char *method,
+				DBusPendingCallNotifyFunction cb,
+				void *user_data, int type, ...);
+static void remove_pending(DBusPendingCall *call);
 
 static DBusConnection *connection = NULL;
 
@@ -320,6 +330,28 @@ static int answer_call(struct csd_call *call)
 	return 0;
 }
 
+static void stop_ringtone_reply(DBusPendingCall *call, void *user_data)
+{
+	struct csd_call *coming = user_data;
+
+	remove_pending(call);
+	answer_call(coming);
+}
+
+static int stop_ringtone_and_answer(struct csd_call *call)
+{
+	int ret;
+
+	ret = send_method_call(OHM_BUS_NAME, OHM_PATH,
+				OHM_INTERFACE, "StopRingtone",
+				stop_ringtone_reply, call,
+				DBUS_TYPE_INVALID);
+	if (ret < 0)
+		return answer_call(call);
+
+	return 0;
+}
+
 static int split_call(struct csd_call *call)
 {
 	DBusMessage *msg;
@@ -545,7 +577,7 @@ void telephony_answer_call_req(void *telephony_device)
 		return;
 	}
 
-	if (answer_call(call) < 0)
+	if (stop_ringtone_and_answer(call) < 0)
 		telephony_answer_call_rsp(telephony_device,
 						CME_ERROR_AG_FAILURE);
 	else
-- 
1.7.4.1

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux