There was an error in my patch. Patch attached to this mail fix it. 2010/10/13 Lukasz Pawlik <lucas.pawlik@xxxxxxxxx>: > According to the HFP specification AT+CHUP command should not have impact > on the state of any held calls. Previously held call was terminated when > there was second alerting call. This patch fix this problem. AT+CHUP > command will go towards alerting call. > --- > audio/telephony-maemo6.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/audio/telephony-maemo6.c b/audio/telephony-maemo6.c > index 05ff332..00a4b25 100644 > --- a/audio/telephony-maemo6.c > +++ b/audio/telephony-maemo6.c > @@ -498,6 +498,7 @@ void telephony_last_dialed_number_req(void *telephony_device) > void telephony_terminate_call_req(void *telephony_device) > { > struct csd_call *call; > + struct csd_call *alerting; > int err; > > call = find_call_with_status(CSD_CALL_STATUS_ACTIVE); > @@ -511,6 +512,9 @@ void telephony_terminate_call_req(void *telephony_device) > return; > } > > + alerting = find_call_with_status(CSD_CALL_STATUS_MO_ALERTING); > + if (call->on_hold && alerting) > + err = release_call(alerting); > if (call->conference) > err = release_conference(); > else > -- > 1.7.0.4 > >
From 7b7c4adf982a0c98df14331bf357619d1b483227 Mon Sep 17 00:00:00 2001 From: Lukasz Pawlik <lucas.pawlik@xxxxxxxxx> Date: Wed, 13 Oct 2010 10:54:21 +0200 Subject: [PATCH] Fix problem with hanging up held call According to the HFP specification AT+CHUP command should not have impact on the state of any held calls. Previously held call was terminated when there was second alerting call. This patch fix this problem. AT+CHUP command will go towards alerting call. --- audio/telephony-maemo6.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/audio/telephony-maemo6.c b/audio/telephony-maemo6.c index 05ff332..1aac034 100644 --- a/audio/telephony-maemo6.c +++ b/audio/telephony-maemo6.c @@ -498,6 +498,7 @@ void telephony_last_dialed_number_req(void *telephony_device) void telephony_terminate_call_req(void *telephony_device) { struct csd_call *call; + struct csd_call *alerting; int err; call = find_call_with_status(CSD_CALL_STATUS_ACTIVE); @@ -511,7 +512,10 @@ void telephony_terminate_call_req(void *telephony_device) return; } - if (call->conference) + alerting = find_call_with_status(CSD_CALL_STATUS_MO_ALERTING); + if (call->on_hold && alerting) + err = release_call(alerting); + else if (call->conference) err = release_conference(); else err = release_call(call); -- 1.7.0.4