From 3e58f7722fb75cc4f13004a0f4953056c23ae4ed Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Thu, 12 Nov 2015 14:22:36 -0600 Subject: rilmodem: Implement lastcause_cb inline --- drivers/rilmodem/voicecall.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'drivers') diff --git a/drivers/rilmodem/voicecall.c b/drivers/rilmodem/voicecall.c index 85fc9585..45e8ffb8 100644 --- a/drivers/rilmodem/voicecall.c +++ b/drivers/rilmodem/voicecall.c @@ -96,10 +96,25 @@ static void lastcause_cb(struct ril_msg *message, gpointer user_data) struct lastcause_req *reqdata = user_data; struct ofono_voicecall *vc = reqdata->vc; struct ril_voicecall_data *vd = ofono_voicecall_get_data(vc); - enum ofono_disconnect_reason reason; + enum ofono_disconnect_reason reason = OFONO_DISCONNECT_REASON_ERROR; + int last_cause = CALL_FAIL_ERROR_UNSPECIFIED; + struct parcel rilp; + + g_ril_init_parcel(message, &rilp); + + if (rilp.size < sizeof(int32_t)) + goto done; + + if (parcel_r_int32(&rilp) > 0) + last_cause = parcel_r_int32(&rilp); + + g_ril_append_print_buf(vd->ril, "{%d}", last_cause); + g_ril_print_response(vd->ril, message); - reason = g_ril_reply_parse_call_fail_cause(vd->ril, message); + if (last_cause == CALL_FAIL_NORMAL || last_cause == CALL_FAIL_BUSY) + reason = OFONO_DISCONNECT_REASON_REMOTE_HANGUP; +done: DBG("Call %d ended with reason %d", reqdata->id, reason); ofono_voicecall_disconnected(vc, reqdata->id, reason, NULL); -- cgit v1.2.3