static void sap_pre_sim(struct ofono_modem *modem) { struct sap_data *data = ofono_modem_get_data(modem); DBG("%p", modem); data->sap_driver->pre_sim(data->hw_modem); }
static void sierra_post_sim(struct ofono_modem *modem) { struct sierra_data *data = ofono_modem_get_data(modem); DBG("%p", modem); ofono_phonebook_create(modem, 0, "atmodem", data->modem); }
static void telit_post_sim(struct ofono_modem *modem) { struct telit_data *data = ofono_modem_get_data(modem); DBG("%p", modem); ofono_sms_create(modem, 0, "atmodem", data->chat); }
static void sap_post_online(struct ofono_modem *modem) { struct sap_data *data = ofono_modem_get_data(modem); DBG("%p", modem); data->sap_driver->post_online(data->hw_modem); }
static int sap_disable(struct ofono_modem *modem) { struct sap_data *data = ofono_modem_get_data(modem); DBG("%p", modem); return data->sap_driver->disable(data->hw_modem); }
static void send_get_sim_status(struct ofono_modem *modem) { struct ril_data *ril = ofono_modem_get_data(modem); DBG(""); g_ril_send(ril->modem, RIL_REQUEST_GET_SIM_STATUS, NULL, sim_status_cb, modem, NULL); }
static void sap_set_online(struct ofono_modem *modem, ofono_bool_t online, ofono_modem_online_cb_t cb, void *user_data) { struct sap_data *data = ofono_modem_get_data(modem); DBG("%p", modem); data->sap_driver->set_online(data->hw_modem, online, cb, user_data); }
static void phonesim_remove(struct ofono_modem *modem) { struct phonesim_data *data = ofono_modem_get_data(modem); DBG("%p", modem); g_free(data); ofono_modem_set_data(modem, NULL); }
static void hw_watch_remove(gpointer userdata) { struct ofono_modem *modem = userdata; struct telit_data *data = ofono_modem_get_data(modem); ofono_modem_set_powered(modem, FALSE); data->hw_watch = 0; }
static void ril_pre_sim(struct ofono_modem *modem) { struct ril_data *ril = ofono_modem_get_data(modem); DBG(""); ril->sim = ofono_sim_create(modem, 0, RILMODEM, ril->modem); g_assert(ril->sim != NULL); }
static int localhfp_disable(struct ofono_modem *modem) { struct hfp_slc_info *info = ofono_modem_get_data(modem); g_at_chat_unref(info->chat); info->chat = NULL; return 0; }
void ril_post_online(struct ofono_modem *modem) { struct ril_data *rd = ofono_modem_get_data(modem); ofono_netreg_create(modem, rd->vendor, RILMODEM, rd->ril); ofono_ussd_create(modem, rd->vendor, RILMODEM, rd->ril); ofono_call_settings_create(modem, rd->vendor, RILMODEM, rd->ril); ofono_call_barring_create(modem, rd->vendor, RILMODEM, rd->ril); }
static void ril_send_power_off_cb(struct ril_msg *message, gpointer user_data) { struct ofono_modem *modem = (struct ofono_modem *) user_data; struct ril_data *rd = ofono_modem_get_data(modem); g_ril_unref(rd->ril); ofono_modem_set_powered(modem, FALSE); }
static void localhfp_remove(struct ofono_modem *modem) { struct hfp_slc_info *info = ofono_modem_get_data(modem); DBG("%p", modem); g_free(info); ofono_modem_set_data(modem, NULL); }
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 hfp_disconnected_cb(gpointer user_data) { struct ofono_modem *modem = user_data; struct hfp_data *data = ofono_modem_get_data(modem); ofono_modem_set_powered(modem, FALSE); g_at_chat_unref(data->info.chat); data->info.chat = NULL; }
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 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_pre_sim(struct ofono_modem *modem) { struct ril_data *rd = ofono_modem_get_data(modem); DBG(""); ofono_devinfo_create(modem, 0, "rilmodem", rd->ril); ofono_sim_create(modem, 0, "rilmodem", rd->ril); ril_thermal_management_enable(modem); }
static void telit_pre_sim(struct ofono_modem *modem) { struct telit_data *data = ofono_modem_get_data(modem); DBG("%p", modem); ofono_devinfo_create(modem, 0, "atmodem", data->chat); data->sim = ofono_sim_create(modem, 0, "atmodem", data->chat); ofono_voicecall_create(modem, 0, "atmodem", data->chat); }
static void tc65_post_sim(struct ofono_modem *modem) { GAtChat *chat = ofono_modem_get_data(modem); DBG("%p", modem); ofono_phonebook_create(modem, 0, "atmodem", chat); ofono_sms_create(modem, 0, "atmodem", chat); }
static void slc_failed(gpointer userdata) { struct ofono_modem *modem = userdata; struct hfp_slc_info *info = ofono_modem_get_data(modem); ofono_modem_set_powered(modem, FALSE); g_at_chat_unref(info->chat); info->chat = NULL; }
static void he910_pre_sim(struct ofono_modem *modem) { struct he910_data *data = ofono_modem_get_data(modem); DBG("%p", modem); ofono_devinfo_create(modem, 0, "atmodem", data->chat); data->sim = ofono_sim_create(modem, OFONO_VENDOR_TELIT, "atmodem", data->chat); }
static void u8500_pre_sim(struct ofono_modem *modem) { struct isi_data *isi = ofono_modem_get_data(modem); DBG("(%p) with %s", modem, isi->ifname); ofono_sim_create(modem, 0, "wgmodem2.5", isi->modem); ofono_devinfo_create(modem, 0, "u8500", isi->modem); ofono_voicecall_create(modem, 0, "isimodem", isi->modem); }
static int ril_disable(struct ofono_modem *modem) { struct ril_data *ril = ofono_modem_get_data(modem); DBG("%p", modem); ril_send_power(ril, FALSE, NULL, NULL); return 0; }
static void set_fw_type(struct ofono_modem *modem, int type) { ofono_bool_t lte_cap; struct mtk_data *md = ofono_modem_get_data(modem); md->fw_type = type; lte_cap = (type >= MTK_MD_TYPE_LWG) ? TRUE : FALSE; ofono_modem_set_boolean(modem, MODEM_PROP_LTE_CAPABLE, lte_cap); }
static void poweron_cb(struct ril_msg *message, gpointer user_data) { struct cb_data *cbd = user_data; struct ofono_modem *modem = cbd->user; struct mtk_data *md = ofono_modem_get_data(modem); ofono_modem_online_cb_t cb = cbd->cb; DBG(""); /* * MTK's rild behavior when a POWERON is sent to it is different * depending on whether a previous POWEROFF had been sent. When * the modem is initialized during device startup, POWERON is * sent without a prior POWEROFF, rild responds with an OK reply, * and the modem is brought up. Any subsequent POWERON requests * are sent whenever both modems have been offlined before ( meaning a * POWEROFF has been sent prior ). rild may respond to the POWERON * request, but will usually ( always? ) trigger a socket disconnect in * this case. * * This means there's a race condition between the POWERON reply * callback and the socket disconnect function ( which triggers a * SIM_MODE_SWITCH request ). In some cases rild is slower than * usual closing the socket, so we add a timeout to avoid following * the code path used when there is not a disconnection. Otherwise, * there would be a race and some requests would return errors due to * having been sent through the about-to-be-disconnected socket, leaving * ofono in an inconsistent state. So, we delay sending the * SIM_MODE_SWITCH for 1s, to allow the disconnect to happen when we * know that we have sent previously a POWEROFF. * * Also, I saw once that sending SIM_MODE while the * socket was being disconnected provoked a crash due to SIGPIPE being * issued. The timeout should also fix this. */ if (message->error == RIL_E_SUCCESS) { g_ril_print_response_no_args(md->ril, message); if (disconnect_expected) { if (not_disconn_cb_id != 0) g_source_remove(not_disconn_cb_id); not_disconn_cb_id = g_timeout_add(T_WAIT_DISCONN_MS, no_disconnect_case, cbd); } else { mtk_send_sim_mode(mtk_sim_mode_cb, cbd); } } else { ofono_error("%s RADIO_POWERON error %s", __func__, ril_error_to_string(message->error)); CALLBACK_WITH_FAILURE(cb, cbd->data); g_free(cbd); } }
static int ifx_enable(struct ofono_modem *modem) { struct ifx_data *data = ofono_modem_get_data(modem); const char *device, *ldisc; GAtSyntax *syntax; GAtChat *chat; DBG("%p", modem); device = ofono_modem_get_string(modem, "Device"); if (device == NULL) return -EINVAL; DBG("%s", device); ldisc = ofono_modem_get_string(modem, "LineDiscipline"); if (ldisc != NULL) { data->mux_ldisc = atoi(ldisc); ofono_info("Using multiplexer line discipline %d", data->mux_ldisc); } data->device = g_at_tty_open(device, NULL); if (data->device == NULL) return -EIO; syntax = g_at_syntax_new_gsmv1(); chat = g_at_chat_new(data->device, syntax); g_at_syntax_unref(syntax); if (chat == NULL) { g_io_channel_unref(data->device); return -EIO; } if (getenv("OFONO_AT_DEBUG")) g_at_chat_set_debug(chat, ifx_debug, "Master: "); g_at_chat_send(chat, "ATE0 +CMEE=1", NULL, NULL, NULL, NULL); /* Enable multiplexer */ data->frame_size = 1509; g_at_chat_send(chat, "AT+CMUX=0,0,,1509,10,3,30,,", NULL, mux_setup_cb, modem, NULL); data->mux_init_timeout = g_timeout_add_seconds(5, mux_timeout_cb, modem); data->dlcs[AUX_DLC] = chat; return -EINPROGRESS; }
static void dlc_disconnect(gpointer user_data) { struct ofono_modem *modem = user_data; struct ifx_data *data = ofono_modem_get_data(modem); DBG(""); ofono_warn("Disconnect of modem channel"); shutdown_device(data); }
int ril_disable(struct ofono_modem *modem) { struct ril_data *rd = ofono_modem_get_data(modem); struct cb_data *cbd = cb_data_new(NULL, modem, rd); DBG("%p", modem); ril_send_power(rd, FALSE, power_off_cb, cbd); return -EINPROGRESS; }