sim: Introduce ofono_sim_initialized_notify

This change is likely to break multiple drivers.  One can easily emulate
the current behavior (pre-this commit) by calling
ofono_sim_initialized_notify after ofono_sim_inserted_notify.
This commit is contained in:
Denis Kenzior 2017-10-31 10:42:50 -05:00
parent c5d83c01a8
commit 54d56d763e
1 changed files with 31 additions and 0 deletions

View File

@ -138,6 +138,8 @@ struct ofono_sim {
bool fixed_dialing : 1;
bool barred_dialing : 1;
bool sdn_ready : 1;
bool initialized : 1;
bool wait_initialized : 1;
};
struct msisdn_set_request {
@ -845,6 +847,17 @@ static void sim_enter_pin_cb(const struct ofono_error *error, void *data)
__ofono_dbus_pending_reply(&sim->pending, reply);
if (sim->initialized)
goto recheck;
if (sim->pin_type == OFONO_SIM_PASSWORD_SIM_PIN ||
sim->pin_type == OFONO_SIM_PASSWORD_SIM_PUK) {
sim->wait_initialized = true;
DBG("Waiting for ofono_sim_initialized_notify");
return;
}
recheck:
__ofono_sim_recheck_pin(sim);
}
@ -2587,6 +2600,9 @@ static void sim_free_main_state(struct ofono_sim *sim)
if (sim->aid_sessions)
g_slist_free_full(sim->aid_sessions, aid_session_free);
sim->initialized = false;
sim->wait_initialized = false;
}
static void sim_free_state(struct ofono_sim *sim)
@ -2727,6 +2743,21 @@ void ofono_sim_inserted_notify(struct ofono_sim *sim, ofono_bool_t inserted)
}
}
void ofono_sim_initialized_notify(struct ofono_sim *sim)
{
if (sim->state != OFONO_SIM_STATE_INSERTED &&
sim->state != OFONO_SIM_STATE_LOCKED_OUT)
return;
sim->initialized = true;
if (!sim->wait_initialized)
return;
sim->wait_initialized = false;
__ofono_sim_recheck_pin(sim);
}
unsigned int ofono_sim_add_state_watch(struct ofono_sim *sim,
ofono_sim_state_event_cb_t notify,
void *data, ofono_destroy_func destroy)