diff --git a/plugins/zte.c b/plugins/zte.c index 4ed41917..ef1a33a9 100644 --- a/plugins/zte.c +++ b/plugins/zte.c @@ -52,6 +52,8 @@ static const char *none_prefix[] = { NULL }; struct zte_data { GAtChat *modem; GAtChat *aux; + gboolean have_sim; + struct at_util_sim_state_query *sim_state_query; }; static int zte_probe(struct ofono_modem *modem) @@ -120,6 +122,19 @@ static GAtChat *open_device(struct ofono_modem *modem, return chat; } +static void sim_state_cb(gboolean present, gpointer user_data) +{ + struct ofono_modem *modem = user_data; + struct zte_data *data = ofono_modem_get_data(modem); + + at_util_sim_state_query_free(data->sim_state_query); + data->sim_state_query = NULL; + + data->have_sim = present; + + ofono_modem_set_powered(modem, TRUE); +} + static void cfun_enable(gboolean ok, GAtResult *result, gpointer user_data) { struct ofono_modem *modem = user_data; @@ -142,7 +157,8 @@ static void cfun_enable(gboolean ok, GAtResult *result, gpointer user_data) g_at_chat_send(data->modem, "AT&C0", NULL, NULL, NULL, NULL); g_at_chat_send(data->aux, "AT&C0", NULL, NULL, NULL, NULL); - ofono_modem_set_powered(modem, TRUE); + data->sim_state_query = at_util_sim_state_query_new(data->aux, + 2, 20, sim_state_cb, modem); } static int zte_enable(struct ofono_modem *modem) @@ -246,7 +262,7 @@ static void zte_pre_sim(struct ofono_modem *modem) sim = ofono_sim_create(modem, OFONO_VENDOR_QUALCOMM_MSM, "atmodem", data->aux); - if (sim) + if (sim && data->have_sim == TRUE) ofono_sim_inserted_notify(sim, TRUE); }