static gboolean phonesim_reset(void *user_data) { struct ofono_modem *modem = user_data; struct phonesim_data *data = ofono_modem_get_data(modem); g_at_chat_unref(data->chat); data->chat = NULL; if (data->mux) { g_at_mux_shutdown(data->mux); g_at_mux_unref(data->mux); data->mux = NULL; } ofono_modem_reset(modem); return FALSE; }
static void state_change(struct ste_modem *stemodem, enum ste_operation op) { switch (stemodem->state) { case STE_STATE_OFF: /* * The STE Modem is in state OFF and we're waiting for * the Modem Init Daemon to signal that modem is ready * in order to create and register the modem. */ switch (op) { case STE_OP_READY: stemodem->modem = ofono_modem_create(stemodem->serial, "ste"); if (stemodem->modem == NULL) { ofono_error("Could not create modem %s, %s", stemodem->path, stemodem->serial); return; } DBG("register modem %s, %s", stemodem->path, stemodem->serial); if (stemodem->interface != NULL) ofono_modem_set_string(stemodem->modem, "Interface", stemodem->interface); ofono_modem_register(stemodem->modem); stemodem->state = STE_STATE_READY; break; case STE_OP_STARTING: case STE_OP_RESTART: case STE_OP_OFF: break; } break; case STE_STATE_READY: /* * The STE Modem is ready and the modem has been created * and registered in oFono. In this state two things can * happen: Modem restarts or is turned off. Turning off * the modem is an exceptional situation e.g. high-temperature, * low battery or upgrade. In this scenario we remove the * STE modem from oFono. */ switch (op) { case STE_OP_READY: break; case STE_OP_STARTING: case STE_OP_RESTART: DBG("reset ongoing %s", stemodem->path); /* Note: Consider to power off modem here? */ stemodem->state = STE_STATE_RESET; break; case STE_OP_OFF: DBG("STE modem unregistering %s", stemodem->path); ofono_modem_remove(stemodem->modem); stemodem->modem = NULL; stemodem->state = STE_STATE_OFF; break; } break; case STE_STATE_RESET: /* * The STE Modem is resetting.In this state two things can * happen: Modem restarts succeeds, or modem is turned off. */ switch (op) { case STE_OP_STARTING: case STE_OP_RESTART: break; case STE_OP_READY: DBG("STE modem reset complete %s", stemodem->path); if (ofono_modem_get_powered(stemodem->modem)) ofono_modem_reset(stemodem->modem); stemodem->state = STE_STATE_READY; break; case STE_OP_OFF: DBG("STE modem unregistering %s", stemodem->path); ofono_modem_remove(stemodem->modem); stemodem->modem = NULL; stemodem->state = STE_STATE_OFF; break; } break; } }