summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2015-11-12 14:22:36 -0600
committerDenis Kenzior <denkenz@gmail.com>2015-11-12 14:22:36 -0600
commit3e58f7722fb75cc4f13004a0f4953056c23ae4ed (patch)
tree8ac15f05a4af84a0ea758b159c30abcbaf2ff682 /drivers
parente666131bc8661ed32fc2f75005200548fba7755c (diff)
downloadofono-3e58f7722fb75cc4f13004a0f4953056c23ae4ed.tar.bz2
rilmodem: Implement lastcause_cb inline
Diffstat (limited to 'drivers')
-rw-r--r--drivers/rilmodem/voicecall.c19
1 files changed, 17 insertions, 2 deletions
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);