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
Hi Lukasz,
On Wed, Oct 13, 2010, Lukasz Pawlik wrote:
> There was an error in my patch. Patch attached to this mail fix it.
Thanks. The (updated) patch has been pushed upstream.
Johan
There was an error in my patch. Patch attached to this mail fix it.
2010/10/13 Lukasz Pawlik <[email protected]>:
> 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
>
>