static void ril_radio_state_changed(struct ril_msg *message, gpointer user_data) { struct ofono_modem *modem = user_data; struct ril_data *rd = ofono_modem_get_data(modem); struct parcel rilp; int radio_state; g_ril_init_parcel(message, &rilp); radio_state = parcel_r_int32(&rilp); if (rilp.malformed) { ofono_error("%s: malformed parcel received", __func__); ofono_modem_set_powered(modem, FALSE); return; } g_ril_append_print_buf(rd->ril, "(state: %s)", ril_radio_state_to_string(radio_state)); g_ril_print_unsol(rd->ril, message); if (radio_state != rd->radio_state) { ofono_info("%s: state: %s rd->ofono_online: %d", __func__, ril_radio_state_to_string(radio_state), rd->ofono_online); rd->radio_state = radio_state; switch (radio_state) { case RADIO_STATE_ON: if (rd->radio_settings == NULL) rd->radio_settings = ofono_radio_settings_create(modem, rd->vendor, RILMODEM, rd->ril); break; case RADIO_STATE_UNAVAILABLE: case RADIO_STATE_OFF: /* * Unexpected radio state change, as we are supposed to * be online. UNAVAILABLE has been seen occassionally * when powering off the phone. We wait 5 secs to avoid * too fast re-spawns, then exit with error to make * upstart re-start ofono. */ if (rd->ofono_online) ofono_error("%s: radio self-powered off!", __func__); break; } } }
static void ril_radio_state_changed(struct ril_msg *message, gpointer user_data) { struct ofono_modem *modem = user_data; struct ril_data *rd = ofono_modem_get_data(modem); struct parcel rilp; int radio_state; g_ril_init_parcel(message, &rilp); radio_state = parcel_r_int32(&rilp); if (rilp.malformed) { ofono_error("%s: malformed parcel received", __func__); ofono_modem_set_powered(modem, FALSE); return; } g_ril_append_print_buf(rd->ril, "(state: %s)", ril_radio_state_to_string(radio_state)); g_ril_print_unsol(rd->ril, message); switch (radio_state) { case RADIO_STATE_ON: break; case RADIO_STATE_UNAVAILABLE: ofono_modem_set_powered(modem, FALSE); break; case RADIO_STATE_OFF: break; } }
static void ril_radio_state_changed(struct ril_msg *message, gpointer user_data) { struct ofono_modem *modem = user_data; struct ril_data *rd = ofono_modem_get_data(modem); int radio_state = g_ril_unsol_parse_radio_state_changed(rd->ril, message); if (radio_state != rd->radio_state) { ofono_info("%s: state: %s rd->ofono_online: %d", __func__, ril_radio_state_to_string(radio_state), rd->ofono_online); rd->radio_state = radio_state; switch (radio_state) { case RADIO_STATE_ON: if (rd->radio_settings == NULL) { char *rs_driver; struct ril_radio_settings_driver_data rs_data = { rd->ril, modem }; if (rd->vendor == OFONO_RIL_VENDOR_QCOM_MSIM) rs_driver = QCOMMSIMMODEM; else rs_driver = RILMODEM; rd->radio_settings = ofono_radio_settings_create(modem, rd->vendor, rs_driver, &rs_data); } break; case RADIO_STATE_UNAVAILABLE: case RADIO_STATE_OFF: /* * Unexpected radio state change, as we are supposed to * be online. UNAVAILABLE has been seen occassionally * when powering off the phone. We wait 5 secs to avoid * too fast re-spawns, then exit with error to make * upstart re-start ofono. */ if (rd->ofono_online) { ofono_error("%s: radio self-powered off!", __func__); sleep(5); exit(1); } break; default: /* Malformed parcel; no radio state == broken rild */ g_assert(FALSE); } } }
static void mtk_radio_state_changed(struct ril_msg *message, gpointer user_data) { struct ofono_modem *modem = user_data; struct mtk_data *md = ofono_modem_get_data(modem); int radio_state = g_ril_unsol_parse_radio_state_changed(md->ril, message); ofono_info("%s, slot %d: state: %s md->ofono_online: %d", __func__, md->slot, ril_radio_state_to_string(radio_state), md->ofono_online); md->radio_state = radio_state; switch (radio_state) { case RADIO_STATE_ON: /* RADIO_STATE_SIM_* are deprecated in AOSP, but still used by MTK */ case RADIO_STATE_SIM_NOT_READY: case RADIO_STATE_SIM_LOCKED_OR_ABSENT: case RADIO_STATE_SIM_READY: case RADIO_STATE_UNAVAILABLE: case RADIO_STATE_OFF: break; default: /* Malformed parcel; no radio state == broken rild */ g_assert(FALSE); } exec_online_callback(md); }
static void radio_state_changed(struct ril_msg *message, gpointer user_data) { struct socket_data *sock = user_data; int radio_state = g_ril_unsol_parse_radio_state_changed(sock->ril, message); if (radio_state != sock->radio_state) { struct socket_data *sock_c = socket_complement(sock); ofono_info("%s, %s, state: %s", __func__, sock->path, ril_radio_state_to_string(radio_state)); /* * If there is just one slot, just start it. Otherwise, we ask * who owns the 3G capabilities in case both slots have already * radio state different from UNAVAILABLE. */ if (mtk_data_1 == NULL) { mtk_data_0->has_3g = TRUE; start_slot(mtk_data_0, sock, hex_slot_0); } else if (sock->radio_state == RADIO_STATE_UNAVAILABLE && sock_c != NULL && sock_c->radio_state != RADIO_STATE_UNAVAILABLE) { query_3g_caps(sock); } sock->radio_state = radio_state; } }
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); } } }
int g_ril_unsol_parse_radio_state_changed(GRil *gril, const struct ril_msg *message) { struct parcel rilp; int radio_state; g_ril_init_parcel(message, &rilp); radio_state = parcel_r_int32(&rilp); if (rilp.malformed) { ofono_error("%s: malformed parcel received", __func__); radio_state = -1; } g_ril_append_print_buf(gril, "(state: %s)", ril_radio_state_to_string(radio_state)); g_ril_print_unsol(gril, message); return radio_state; }