static void ril_post_online(struct ofono_modem *modem) { struct ril_data *rd = ofono_modem_get_data(modem); ofono_netreg_create(modem, 0, "rilmodem", rd->ril); if (ofono_modem_get_boolean(modem, MODEM_PROP_LTE_CAPABLE)) ofono_radio_settings_create(modem, 0, "rilmodem", rd->ril); else ofono_radio_settings_create(modem, OFONO_RIL_VENDOR_IMC_SOFIA3GR, "rilmodem", rd->ril); ofono_ussd_create(modem, 0, "rilmodem", rd->ril); ofono_netmon_create(modem, 0, "rilmodem", rd->ril); }
static void ril_post_sim(struct ofono_modem *modem) { DBG(""); struct ril_data *ril = ofono_modem_get_data(modem); struct ofono_gprs *gprs; struct ofono_gprs_context *gc; struct ofono_message_waiting *mw; int i; /* TODO: this function should setup: * - stk ( SIM toolkit ) */ ofono_sms_create(modem, 0, "rilmodem", ril->modem); gprs = ofono_gprs_create(modem, 0, "rilmodem", ril->modem); if (gprs) { for (i = 0; i < MAX_PDP_CONTEXTS; i++) { gc = ofono_gprs_context_create(modem, 0, "rilmodem", ril->modem); if (gc == NULL) break; ofono_gprs_add_context(gprs, gc); } } ofono_radio_settings_create(modem, 0, "rilmodem", ril->modem); ofono_phonebook_create(modem, 0, "rilmodem", ril->modem); ofono_call_forwarding_create(modem, 0, "rilmodem", ril->modem); ofono_call_barring_create(modem, 0, "rilmodem", ril->modem); ofono_stk_create(modem, 0, "rilmodem", ril->modem); mw = ofono_message_waiting_create(modem); if (mw) ofono_message_waiting_register(mw); }
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 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 u8500_post_sim(struct ofono_modem *modem) { struct isi_data *isi = ofono_modem_get_data(modem); DBG("(%p) with %s", modem, isi->ifname); ofono_phonebook_create(modem, 0, "isimodem", isi->modem); ofono_call_forwarding_create(modem, 0, "isimodem", isi->modem); ofono_radio_settings_create(modem, 0, "isimodem", isi->modem); }
static void ril_post_online(struct ofono_modem *modem) { struct ril_data *ril = ofono_modem_get_data(modem); ofono_call_volume_create(modem, 0, RILMODEM, ril->modem); ofono_netreg_create(modem, 0, RILMODEM, ril->modem); ofono_ussd_create(modem, 0, RILMODEM, ril->modem); ofono_call_settings_create(modem, 0, RILMODEM, ril->modem); ofono_radio_settings_create(modem, 0, RILMODEM, ril->modem); }
static void ifx_post_sim(struct ofono_modem *modem) { struct ifx_data *data = ofono_modem_get_data(modem); DBG("%p", modem); ofono_stk_create(modem, 0, "ifxmodem", data->dlcs[AUX_DLC]); ofono_phonebook_create(modem, OFONO_VENDOR_IFX, "atmodem", data->dlcs[AUX_DLC]); ofono_call_forwarding_create(modem, 0, "atmodem", data->dlcs[AUX_DLC]); ofono_radio_settings_create(modem, 0, "ifxmodem", data->dlcs[AUX_DLC]); ofono_sms_create(modem, OFONO_VENDOR_IFX, "atmodem", data->dlcs[AUX_DLC]); }
static void ifx_post_sim(struct ofono_modem *modem) { struct ifx_data *data = ofono_modem_get_data(modem); struct ofono_gprs *gprs; struct ofono_gprs_context *gc; DBG("%p", modem); ofono_stk_create(modem, 0, "ifxmodem", data->dlcs[AUX_DLC]); ofono_phonebook_create(modem, OFONO_VENDOR_IFX, "atmodem", data->dlcs[AUX_DLC]); ofono_call_forwarding_create(modem, 0, "atmodem", data->dlcs[AUX_DLC]); ofono_radio_settings_create(modem, 0, "ifxmodem", data->dlcs[AUX_DLC]); ofono_sms_create(modem, OFONO_VENDOR_IFX, "atmodem", data->dlcs[AUX_DLC]); gprs = ofono_gprs_create(modem, OFONO_VENDOR_IFX, "atmodem", data->dlcs[NETREG_DLC]); if (gprs == NULL) return; if (data->mux_ldisc < 0) { gc = ofono_gprs_context_create(modem, 0, "ifxmodem", data->dlcs[GPRS1_DLC]); if (gc) ofono_gprs_add_context(gprs, gc); gc = ofono_gprs_context_create(modem, 0, "ifxmodem", data->dlcs[GPRS2_DLC]); if (gc) ofono_gprs_add_context(gprs, gc); gc = ofono_gprs_context_create(modem, 0, "ifxmodem", data->dlcs[GPRS3_DLC]); if (gc) ofono_gprs_add_context(gprs, gc); } }
static void create_online_atoms(struct ofono_modem *modem) { struct mtk_data *md = ofono_modem_get_data(modem); struct ril_radio_settings_driver_data rs_data = { md->ril, modem }; md->sim_data.gril = md->ril; md->sim_data.modem = modem; md->sim_data.ril_state_watch = sim_state_watch; md->sim = ofono_sim_create(modem, OFONO_RIL_VENDOR_MTK, RILMODEM, &md->sim_data); g_assert(md->sim != NULL); /* Radio settings does not depend on the SIM */ ofono_radio_settings_create(modem, OFONO_RIL_VENDOR_MTK, MTKMODEM, &rs_data); if (md->netreg_watch == 0) md->netreg_watch = __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_NETREG, netreg_watch, modem, NULL); }
static void modem_prop_changed_cb(const gchar *name, void *data) { struct ofono_data *od = data; bool powered = false, online = false; const char *path = ofono_modem_get_path(od->modem); if (g_str_equal(name, "Online")) { online = ofono_modem_get_online(od->modem); telephony_service_power_status_notify(od->service, online); } else if (g_str_equal(name, "Interfaces")) { if (!od->sim && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_SIM_MANAGER)) { od->sim = ofono_sim_manager_create(path); ofono_sim_manager_register_prop_changed_handler(od->sim, sim_prop_changed_cb, od); } else if (od->sim && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_SIM_MANAGER)) { ofono_sim_manager_free(od->sim); od->sim = NULL; } if (!od->netreg && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_NETWORK_REGISTRATION)) { od->netreg = ofono_network_registration_create(path); ofono_network_registration_register_prop_changed_handler(od->netreg, network_prop_changed_cb, od); } else if (od->netreg && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_NETWORK_REGISTRATION)) { ofono_network_registration_free(od->netreg); od->netreg = NULL; notify_no_network_registration(od->service); } if (!od->rs && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_RADIO_SETTINGS)) { od->rs = ofono_radio_settings_create(path); } else if (od->rs && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_RADIO_SETTINGS)) { ofono_radio_settings_free(od->rs); od->rs = NULL; } if (!od->vm && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_VOICE_CALL_MANAGER)) { od->vm = ofono_voicecall_manager_create(path); } else if (od->vm && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_VOICE_CALL_MANAGER)) { ofono_voicecall_manager_free(od->vm); od->vm = NULL; } if (!od->mm && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_MESSAGE_MANAGER)) { od->mm = ofono_message_manager_create(path); ofono_message_manager_set_incoming_message_callback(od->mm, incoming_message_cb, od); } else if (od->mm && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_MESSAGE_MANAGER)) { ofono_message_manager_free(od->mm); od->mm = NULL; } } else if (g_str_equal(name, "Powered")) { powered = ofono_modem_get_powered(od->modem); /* We need to handle power status changes differently when in initialization phase */ if (od->initializing && powered) { telephony_service_availability_changed_notify(od->service, true); od->initializing = false; } telephony_service_power_status_notify(od->service, powered); } }