diff options
author | Paul Kocialkowski <contact@paulk.fr> | 2012-07-06 15:29:24 +0200 |
---|---|---|
committer | Paul Kocialkowski <contact@paulk.fr> | 2012-07-06 15:29:24 +0200 |
commit | 72a86665de9e8283539d6003dc1c64d16237d869 (patch) | |
tree | b94c2c4a2f2efd179268045c5a0162f52882363f | |
parent | f470c71cafdd62f5d36ce6007be0dde44e65531b (diff) | |
download | hardware_replicant_libsamsung-ril-72a86665de9e8283539d6003dc1c64d16237d869.tar.gz hardware_replicant_libsamsung-ril-72a86665de9e8283539d6003dc1c64d16237d869.tar.bz2 hardware_replicant_libsamsung-ril-72a86665de9e8283539d6003dc1c64d16237d869.zip |
Call: Added last call fail cause support
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
-rw-r--r-- | call.c | 39 | ||||
-rw-r--r-- | samsung-ril.c | 3 | ||||
-rw-r--r-- | samsung-ril.h | 3 |
3 files changed, 44 insertions, 1 deletions
@@ -49,6 +49,18 @@ unsigned char ipc2ril_call_list_entry_state(unsigned char call_state) } } +RIL_LastCallFailCause ipc2ril_call_fail_cause(unsigned char end_cause) +{ + switch(end_cause) { + case IPC_CALL_END_CAUSE_NORMAL: + case IPC_CALL_END_CAUSE_REJECTED: + return CALL_FAIL_NORMAL; + case IPC_CALL_END_CAUSE_UNSPECIFIED: + default: + return CALL_FAIL_ERROR_UNSPECIFIED; + } +} + /** * In: RIL_UNSOL_CALL_RING * Ring indication for an incoming call (eg, RING or CRING event). @@ -70,6 +82,13 @@ void ipc_call_incoming(struct ipc_message_info *info) */ void ipc_call_status(struct ipc_message_info *info) { + struct ipc_call_status *call_status = + (struct ipc_call_status *) info->data; + + memcpy(&(ril_state.call_status), call_status, sizeof(struct ipc_call_status)); + + LOGD("Updating Call Status data"); + RIL_onUnsolicitedResponse(RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED, NULL, 0); } @@ -226,9 +245,27 @@ void ril_request_answer(RIL_Token t) } /** + * In: RIL_REQUEST_LAST_CALL_FAIL_CAUSE + * Reason why last call was terminated + */ +void ril_request_last_call_fail_cause(RIL_Token t) +{ + RIL_LastCallFailCause fail_cause; + struct ipc_call_status *call_status = + &(ril_state.call_status); + + fail_cause = ipc2ril_call_fail_cause(call_status->end_cause); + + // Empty global call_status + memset(call_status, 0, sizeof(struct ipc_call_status)); + + RIL_onRequestComplete(t, RIL_E_SUCCESS, &fail_cause, sizeof(RIL_LastCallFailCause)); +} + +/** * In: IPC_CALL_BURST_DTMF * Send DTMF burst. RILJ only sends 1 DTMF tone to send at a time. - * + * * Out: IPC_CALL_BURST_DTMF * It should be possible to send multiple DTMF tones at once in this message. * First byte should be DTMF tones count. diff --git a/samsung-ril.c b/samsung-ril.c index edb5487..7f669b5 100644 --- a/samsung-ril.c +++ b/samsung-ril.c @@ -443,6 +443,9 @@ void onRequest(int request, void *data, size_t datalen, RIL_Token t) case RIL_REQUEST_ANSWER: ril_request_answer(t); break; + case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: + ril_request_last_call_fail_cause(t); + break; case RIL_REQUEST_DTMF: ril_request_dtmf(t, data, datalen); break; diff --git a/samsung-ril.h b/samsung-ril.h index f6db9d8..a5b7cfa 100644 --- a/samsung-ril.h +++ b/samsung-ril.h @@ -181,6 +181,8 @@ struct ril_state { struct ipc_net_regist gprs_netinfo; struct ipc_net_current_plmn plmndata; + struct ipc_call_status call_status; + struct ipc_gprs_pdp_context gprs_context; struct ipc_gprs_define_pdp_context gprs_define_context; @@ -332,6 +334,7 @@ void ril_request_get_current_calls(RIL_Token t); void ipc_call_list(struct ipc_message_info *info); void ril_request_hangup(RIL_Token t); void ril_request_answer(RIL_Token t); +void ril_request_last_call_fail_cause(RIL_Token t); void ril_request_dtmf(RIL_Token t, void *data, int length); void ipc_call_burst_dtmf(struct ipc_message_info *info); void ril_request_dtmf_start(RIL_Token t, void *data, int length); |