diff options
author | PaulK <contact@paulk.fr> | 2012-03-29 20:14:42 +0200 |
---|---|---|
committer | PaulK <contact@paulk.fr> | 2012-03-29 20:14:42 +0200 |
commit | ee639a43dab5b0da6fd701eb94db06eb65625257 (patch) | |
tree | e5f2c181b35f22eb211ddd9a958ddac2ca843f2c /sec.c | |
parent | eb7fa5134a2465bc270930a79635dba73dbd0504 (diff) | |
download | hardware_ril_samsung-ril-ee639a43dab5b0da6fd701eb94db06eb65625257.zip hardware_ril_samsung-ril-ee639a43dab5b0da6fd701eb94db06eb65625257.tar.gz hardware_ril_samsung-ril-ee639a43dab5b0da6fd701eb94db06eb65625257.tar.bz2 |
Fixed SIM status handling and added generic RIL_TOKEN_DATA_WAITING
Diffstat (limited to 'sec.c')
-rw-r--r-- | sec.c | 110 |
1 files changed, 52 insertions, 58 deletions
@@ -25,8 +25,6 @@ #include "samsung-ril.h" #include "util.h" -#define RIL_TOKEN_SEC_DATA_WAITING (RIL_Token) 0xff - SIM_Status ipc2ril_sim_status(struct ipc_sec_pin_status_response *pin_status) { switch(pin_status->type) { @@ -71,6 +69,52 @@ SIM_Status ipc2ril_sim_status(struct ipc_sec_pin_status_response *pin_status) } } +/** + * Update the radio state based on SIM status + * + * Out: RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED + * Indicate when value of RIL_RadioState has changed + * Callee will invoke RIL_RadioStateRequest method on main thread + */ +void ril_state_update(SIM_Status status) +{ + RIL_RadioState radio_state; + + /* If power mode isn't at least normal, don't update RIL state */ + if(ril_state.power_mode < POWER_MODE_NORMAL) + return; + + ril_state.sim_status = status; + + switch(status) { + case SIM_READY: + radio_state = RADIO_STATE_SIM_READY; + break; + case SIM_NOT_READY: + radio_state = RADIO_STATE_SIM_NOT_READY; + break; + case SIM_ABSENT: + case SIM_PIN: + case SIM_PUK: + case SIM_BLOCKED: + case SIM_NETWORK_PERSO: + case SIM_NETWORK_SUBSET_PERSO: + case SIM_CORPORATE_PERSO: + case SIM_SERVICE_PROVIDER_PERSO: + radio_state = RADIO_STATE_SIM_LOCKED_OR_ABSENT; + break; + default: + radio_state = RADIO_STATE_SIM_NOT_READY; + break; + } + + ril_state.radio_state = radio_state; + + ril_tokens_check(); + + RIL_onUnsolicitedResponse(RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED, NULL, 0); +} + void ipc2ril_card_status(struct ipc_sec_pin_status_response *pin_status, RIL_CardStatus *card_status) { SIM_Status sim_status; @@ -141,48 +185,7 @@ void ipc2ril_card_status(struct ipc_sec_pin_status_response *pin_status, RIL_Car card_status->cdma_subscription_app_index = (int) sim_status; card_status->num_applications = app_status_array_length; - LOGD("Selection application #%d on %d", (int) sim_status, app_status_array_length); -} - -/** - * Update the radio state based on SIM status - * - * Out: RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED - * Indicate when value of RIL_RadioState has changed - * Callee will invoke RIL_RadioStateRequest method on main thread - */ -void ril_state_update(SIM_Status status) -{ - /* If power mode isn't at least normal, don't update RIL state */ - if(ril_state.power_mode < POWER_MODE_NORMAL) - return; - - ril_state.sim_status = status; - - switch(status) { - case SIM_READY: - ril_state.radio_state = RADIO_STATE_SIM_READY; - break; - case SIM_NOT_READY: - ril_state.radio_state = RADIO_STATE_SIM_NOT_READY; - break; - case SIM_ABSENT: - case SIM_PIN: - case SIM_PUK: - case SIM_BLOCKED: - case SIM_NETWORK_PERSO: - case SIM_NETWORK_SUBSET_PERSO: - case SIM_CORPORATE_PERSO: - case SIM_SERVICE_PROVIDER_PERSO: - ril_state.radio_state = RADIO_STATE_SIM_LOCKED_OR_ABSENT; - break; - default: - ril_state.radio_state = RADIO_STATE_SIM_NOT_READY; - break; - } - - ril_tokens_check(); - RIL_onUnsolicitedResponse(RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED, NULL, 0); + LOGD("Selecting application #%d on %d", (int) sim_status, app_status_array_length); } void ril_tokens_pin_status_dump(void) @@ -223,7 +226,7 @@ void ipc_sec_pin_status(struct ipc_message_info *info) LOGD("Got UNSOL PIN status message"); - if(ril_state.tokens.pin_status != (RIL_Token) 0x00 && ril_state.tokens.pin_status != RIL_TOKEN_SEC_DATA_WAITING) { + if(ril_state.tokens.pin_status != (RIL_Token) 0x00 && ril_state.tokens.pin_status != RIL_TOKEN_DATA_WAITING) { LOGE("Another PIN status Req is in progress, skipping"); return; } @@ -233,17 +236,8 @@ void ipc_sec_pin_status(struct ipc_message_info *info) memcpy(&(ril_state.sim_pin_status), pin_status, sizeof(struct ipc_sec_pin_status_response)); - // Apparently, these aren't interesting RILJ - if(sim_status == SIM_ABSENT || sim_status == SIM_READY || sim_status == SIM_NOT_READY) - return; - - // We already told RILJ to get the new data but it wasn't done yet - if(ril_state.tokens.pin_status == RIL_TOKEN_SEC_DATA_WAITING) { - LOGD("Updating PIN status data in background"); - } else { - ril_state.tokens.pin_status = RIL_TOKEN_SEC_DATA_WAITING; - RIL_onUnsolicitedResponse(RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, NULL, 0); - } + ril_state.tokens.pin_status = RIL_TOKEN_DATA_WAITING; + RIL_onUnsolicitedResponse(RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, NULL, 0); break; case IPC_TYPE_RESP: LOGD("Got SOL PIN status message"); @@ -260,7 +254,7 @@ void ipc_sec_pin_status(struct ipc_message_info *info) ipc2ril_card_status(pin_status, &card_status); RIL_onRequestComplete(t, RIL_E_SUCCESS, &card_status, sizeof(RIL_CardStatus)); - if(ril_state.tokens.pin_status != RIL_TOKEN_SEC_DATA_WAITING) + if(ril_state.tokens.pin_status != RIL_TOKEN_DATA_WAITING) ril_state.tokens.pin_status = (RIL_Token) 0x00; break; default: @@ -281,7 +275,7 @@ void ril_request_get_sim_status(RIL_Token t) RIL_CardStatus card_status; SIM_Status sim_status; - if(ril_state.tokens.pin_status == RIL_TOKEN_SEC_DATA_WAITING) { + if(ril_state.tokens.pin_status == RIL_TOKEN_DATA_WAITING) { LOGD("Got RILJ request for UNSOL data"); hex_dump(&(ril_state.sim_pin_status), sizeof(struct ipc_sec_pin_status_response)); pin_status = &(ril_state.sim_pin_status); |