static void ril_pin_change_state_cb(struct ril_msg *message, gpointer user_data) { struct cb_data *cbd = user_data; ofono_sim_lock_unlock_cb_t cb = cbd->cb; struct ofono_sim *sim = cbd->user; struct sim_data *sd = ofono_sim_get_data(sim); int *retries; /* * There is no reason to ask SIM status until * unsolicited sim status change indication * Looks like state does not change before that. */ DBG("Enter password: type %d, result %d", sd->passwd_type, message->error); retries = g_ril_reply_parse_retries(sd->ril, message, sd->passwd_type); if (retries != NULL) { memcpy(sd->retries, retries, sizeof(sd->retries)); g_free(retries); } /* TODO: re-factor to not use macro for FAILURE; doesn't return error! */ if (message->error == RIL_E_SUCCESS) { CALLBACK_WITH_SUCCESS(cb, cbd->data); } else { CALLBACK_WITH_FAILURE(cb, cbd->data); /* * Refresh passwd_state (not needed if the unlock is * successful, as an event will refresh the state in that case) */ send_get_sim_status(sim); } }
static gboolean sim_status_retry(gpointer user_data) { struct ofono_modem *modem = user_data; send_get_sim_status(modem); /* Makes this a single shot */ return FALSE; }
static void ril_sim_status_changed(struct ril_msg *message, gpointer user_data) { struct ofono_sim *sim = (struct ofono_sim *) user_data; struct sim_data *sd = ofono_sim_get_data(sim); DBG(""); g_ril_print_unsol_no_args(sd->ril, message); send_get_sim_status(sim); }
static gboolean listen_and_get_sim_status(gpointer user) { struct ofono_sim *sim = user; struct sim_data *sd = ofono_sim_get_data(sim); send_get_sim_status(sim); g_ril_register(sd->ril, RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, (GRilNotifyFunc) ril_sim_status_changed, sim); /* TODO: should we also register for RIL_UNSOL_SIM_REFRESH? */ return FALSE; }
static void ril_radio_state_changed(struct ril_msg *message, gpointer user_data) { struct ofono_modem *modem = user_data; struct ril_data *ril = ofono_modem_get_data(modem); int radio_state = g_ril_unsol_parse_radio_state_changed(ril->modem, message); if (radio_state != ril->radio_state) { ofono_info("%s: state: %s ril->ofono_online: %d", __func__, ril_radio_state_to_string(radio_state), ril->ofono_online); ril->radio_state = radio_state; switch (radio_state) { case RADIO_STATE_ON: if (ril->voice == NULL) ril->voice = ofono_voicecall_create(modem, 0, RILMODEM, ril->modem); send_get_sim_status(modem); break; case RADIO_STATE_UNAVAILABLE: case RADIO_STATE_OFF: /* * If radio powers off asychronously, then * assert, and let upstart re-start the stack. */ if (ril->ofono_online) { ofono_error("%s: radio self-powered off!", __func__); g_assert(FALSE); } break; default: /* Malformed parcel; no radio state == broken rild */ g_assert(FALSE); } } }
static void sim_send_set_uicc_subscription_cb(struct ril_msg *message, gpointer user_data) { struct ofono_sim *sim = user_data; struct sim_data *sd = ofono_sim_get_data(sim); if (message->error == RIL_E_SUCCESS) { g_ril_print_response_no_args(sd->ril, message); } else { ofono_error("%s: RIL error %s", __func__, ril_error_to_string(message->error)); /* * Send RIL_REQUEST_GET_SIM_STATUS again. The reply will run * the app selection algorithm again, causing the request to * be re-sent. */ send_get_sim_status(sim); } }
static void ril_enter_sim_pin_cb(struct ril_msg *message, gpointer user_data) { struct cb_data *cbd = user_data; ofono_sim_lock_unlock_cb_t cb = cbd->cb; struct ofono_sim *sim = cbd->user; struct sim_data *sd = ofono_sim_get_data(sim); struct parcel rilp; /* * There is no reason to ask SIM status until * unsolicited sim status change indication * Looks like state does not change before that. */ DBG("Enter password: type %d, result %d", sd->passwd_type, message->error); g_ril_init_parcel(message, &rilp); parcel_r_int32(&rilp); if (message->error == RIL_E_SUCCESS) sd->retries[sd->passwd_type] = -1; else sd->retries[sd->passwd_type] = parcel_r_int32(&rilp); g_ril_append_print_buf(sd->ril, "{%d}", sd->retries[sd->passwd_type]); g_ril_print_response(sd->ril, message); if (message->error == RIL_E_SUCCESS) { CALLBACK_WITH_SUCCESS(cb, cbd->data); return; } CALLBACK_WITH_FAILURE(cb, cbd->data); /* * Refresh passwd_state (not needed if the unlock is * successful, as an event will refresh the state in that case) */ send_get_sim_status(sim); }
static void ril_connected(struct ril_msg *message, gpointer user_data) { DBG(""); struct ofono_modem *modem = (struct ofono_modem *) user_data; struct ril_data *ril = ofono_modem_get_data(modem); int ril_version = 0; struct parcel rilp; ril_util_init_parcel(message, &rilp); ril_version = parcel_r_int32(&rilp); ofono_debug("%s: [UNSOL]< %s, RIL_VERSION %d", __func__, ril_unsol_request_to_string(message->req), ril_version); ril->connected = TRUE; send_get_sim_status(modem); connection = ofono_dbus_get_connection(); mce_daemon_watch = g_dbus_add_service_watch(connection, MCE_SERVICE, mce_connect, mce_disconnect, modem, NULL); }