sim: Fix SIM re-init case of SIM Refresh
authorDenis Kenzior <denkenz@gmail.com>
Thu, 22 Nov 2012 12:45:10 +0000 (06:45 -0600)
committerDenis Kenzior <denkenz@gmail.com>
Thu, 22 Nov 2012 12:50:08 +0000 (06:50 -0600)
When the SIM is being refreshed, we try to access the SIM too fast after
the SIM REFRESH proactive command is received.  Instead set the sim atom
into the 'RESETTING' state and wait until the modem driver signals the
sim insertion again.

src/sim.c

index 4551407..46e4483 100644 (file)
--- a/src/sim.c
+++ b/src/sim.c
@@ -2436,6 +2436,16 @@ static void sim_free_state(struct ofono_sim *sim)
 
 void ofono_sim_inserted_notify(struct ofono_sim *sim, ofono_bool_t inserted)
 {
+       if (sim->state == OFONO_SIM_STATE_RESETTING && inserted) {
+               /*
+                * Start initialization procedure from after EFiccid,
+                * EFli and EFpl are retrieved.
+                */
+               sim->state = OFONO_SIM_STATE_INSERTED;
+               __ofono_sim_recheck_pin(sim);
+               return;
+       }
+
        if (inserted == TRUE && sim->state == OFONO_SIM_STATE_NOT_PRESENT)
                sim->state = OFONO_SIM_STATE_INSERTED;
        else if (inserted == FALSE && sim->state != OFONO_SIM_STATE_NOT_PRESENT)
@@ -3119,7 +3129,7 @@ void __ofono_sim_refresh(struct ofono_sim *sim, GSList *file_list,
                /* Force the sim state out of READY */
                sim_free_main_state(sim);
 
-               sim->state = OFONO_SIM_STATE_INSERTED;
+               sim->state = OFONO_SIM_STATE_RESETTING;
                __ofono_modem_sim_reset(__ofono_atom_get_modem(sim->atom));
        }
 
@@ -3138,17 +3148,4 @@ void __ofono_sim_refresh(struct ofono_sim *sim, GSList *file_list,
                        sim_fs_notify_file_watches(sim->simfs, id);
                }
        }
-
-       if (reinit_naa) {
-               /*
-                * REVISIT: There's some concern that on re-insertion the
-                * atoms will start to talk to the SIM before it becomes
-                * ready, on certain SIMs.
-                */
-               /*
-                * Start initialization procedure from after EFiccid,
-                * EFli and EFpl are retrieved.
-                */
-               __ofono_sim_recheck_pin(sim);
-       }
 }