Hi Jussi, > include/sim.h | 2 ++ > src/call-meter.c | 27 +++++++++++++++++++++++++++ > src/sim.c | 8 ++++---- > 3 files changed, 33 insertions(+), 4 deletions(-) > > diff --git a/include/sim.h b/include/sim.h > index 412ae44..a56056e 100644 > --- a/include/sim.h > +++ b/include/sim.h > @@ -227,6 +227,8 @@ unsigned int ofono_sim_add_file_watch(struct > ofono_sim_context *context, > void ofono_sim_remove_file_watch(struct ofono_sim_context *context, > unsigned int id); > > +void sim_pin_check(struct ofono_sim *sim); > +
Please name this __ofono_sim_recheck_pin(struct ofono_sim *sim); > #ifdef __cplusplus > } > #endif > diff --git a/src/call-meter.c b/src/call-meter.c > index 0789935..61678d8 100644 > --- a/src/call-meter.c > +++ b/src/call-meter.c > @@ -335,11 +335,20 @@ static void set_acm_max_query_callback(const struct > ofono_error *error, > static void set_acm_max_callback(const struct ofono_error *error, void *data) > { > struct ofono_call_meter *cm = data; > + struct ofono_atom *sim_atom; > + struct ofono_sim *sim = NULL; > > if (error->type != OFONO_ERROR_TYPE_NO_ERROR) { > DBG("Setting acm_max failed"); > __ofono_dbus_pending_reply(&cm->pending, > __ofono_error_failed(cm->pending)); > + sim_atom = __ofono_modem_find_atom( > + __ofono_atom_get_modem(cm->atom), > + OFONO_ATOM_TYPE_SIM); > + if (!sim_atom) doc/coding-style.txt M1, and M13 > + return; > + sim = __ofono_atom_get_data(sim_atom); doc/coding-style.txt M1 > + sim_pin_check(sim); > return; > } > And please factor out this code into a separate function, you repeat it three times. > @@ -396,11 +405,20 @@ static void set_puct_query_callback(const struct > ofono_error *error, > static void set_puct_callback(const struct ofono_error *error, void *data) > { > struct ofono_call_meter *cm = data; > + struct ofono_atom *sim_atom; > + struct ofono_sim *sim = NULL; > > if (error->type != OFONO_ERROR_TYPE_NO_ERROR) { > DBG("setting puct failed"); > __ofono_dbus_pending_reply(&cm->pending, > __ofono_error_failed(cm->pending)); > + sim_atom = __ofono_modem_find_atom( > + __ofono_atom_get_modem(cm->atom), > + OFONO_ATOM_TYPE_SIM); > + if (!sim_atom) > + return; > + sim = __ofono_atom_get_data(sim_atom); > + sim_pin_check(sim); > return; > } > > @@ -593,11 +611,20 @@ static void reset_acm_query_callback(const struct > ofono_error *error, int value, > static void acm_reset_callback(const struct ofono_error *error, void *data) > { > struct ofono_call_meter *cm = data; > + struct ofono_atom *sim_atom; > + struct ofono_sim *sim = NULL; > > if (error->type != OFONO_ERROR_TYPE_NO_ERROR) { > DBG("reseting acm failed"); > __ofono_dbus_pending_reply(&cm->pending, > __ofono_error_failed(cm->pending)); > + sim_atom = __ofono_modem_find_atom( > + __ofono_atom_get_modem(cm->atom), > + OFONO_ATOM_TYPE_SIM); > + if (!sim_atom) > + return; > + sim = __ofono_atom_get_data(sim_atom); > + sim_pin_check(sim); > return; > } > > diff --git a/src/sim.c b/src/sim.c > index c39269d..08236f2 100644 > --- a/src/sim.c > +++ b/src/sim.c > @@ -49,7 +49,6 @@ > static GSList *g_drivers = NULL; > > static void sim_own_numbers_update(struct ofono_sim *sim); > -static void sim_pin_check(struct ofono_sim *sim); > > struct ofono_sim { > /* Contents of the SIM file system, in rough initialization order */ > @@ -2231,8 +2230,9 @@ static void sim_pin_query_cb(const struct ofono_error > *error, > &pin_name); > } > > - if (pin_type != OFONO_SIM_PASSWORD_NONE && > - sim->state == OFONO_SIM_STATE_READY) { > + if ((pin_type != OFONO_SIM_PASSWORD_NONE && > + sim->state == OFONO_SIM_STATE_READY) && > + (pin_type != OFONO_SIM_PASSWORD_SIM_PIN2)) { I don't see how this can work. You need to check for pin_type != NONE, PIN2 and PUK2 AND state == READY here. This also only covers the case of the PIN2 or PUK2 being triggered when call-meter is active. You do not take care of the case where PIN2 or PUK2 are already required during sim initialization. > /* Force the sim state out of READY */ > sim_free_main_state(sim); > > @@ -2247,7 +2247,7 @@ checkdone: > sim_initialize_after_pin(sim); > } > > -static void sim_pin_check(struct ofono_sim *sim) > +void sim_pin_check(struct ofono_sim *sim) > { > if (sim->driver->query_passwd_state == NULL) { > sim_initialize_after_pin(sim); Regards, -Denis _______________________________________________ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono