From 3e6bbc676fa2573d3733a6b0fa4010d3d61c6001 Mon Sep 17 00:00:00 2001 From: Kuba Pawlak Date: Wed, 5 Aug 2015 14:36:09 +0200 Subject: hfp: Synchronize call state in case of +CHUP error It is possible for the phone to accept Dial request but not actually dial. This leaves a voicecall object in state 'dialling' that cannot be removed. Proposed workaround is to trigger AT+CLCC when an error is returned for Hangup. As the call is not on the list, this would remove this hanging object and signal CallRemoved. Windows Phone trace with this fix: ofonod[273]: > ATD1;\r ofonod[273]: < \r\nOK\r\n ofonod[273]: src/voicecall.c:dial_handle_result() Registering new call: 1 ofonod[273]: < \r\n+CIEV: 5,4\r\n ofonod[273]: src/network.c:ofono_netreg_strength_notify() strength 80 ofonod[273]: > AT+CHUP\r ofonod[273]: < \r\nERROR\r\n ofonod[273]: src/voicecall.c:generic_callback() command failed with error: Unknown error type ofonod[273]: > AT+CLCC\r ofonod[273]: < \r\nOK\r\n ofonod[273]: src/voicecall.c:ofono_voicecall_disconnected() Got disconnection event for id: 1, reason: 2 --- drivers/hfpmodem/voicecall.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'drivers/hfpmodem') diff --git a/drivers/hfpmodem/voicecall.c b/drivers/hfpmodem/voicecall.c index e3e6e0f5..f1e90969 100644 --- a/drivers/hfpmodem/voicecall.c +++ b/drivers/hfpmodem/voicecall.c @@ -333,6 +333,10 @@ static void generic_cb(gboolean ok, GAtResult *result, gpointer user_data) } } + if (!ok && vd->calls) + g_at_chat_send(vd->chat, "AT+CLCC", clcc_prefix, + clcc_poll_cb, req->vc, NULL); + req->cb(&error, req->data); } -- cgit v1.2.3