Hi Marcel,

On 12/04/2012 10:47 AM, Marcel Holtmann wrote:
Hi Jonas,

In offline state where CFUN=4, the Telit HE910 also powers down the SIM
card so AT commands that query the SIM will fail.  These failures result
in ofono not getting to POST_SIM state where it will export the GPRS
feature.

This patch changes the Telit driver so it will not go immediately
to CFUN=4 after enable, but to wait for the post_sim state to be
reached before doing so.  In addition, the HE910 might send QSS: 0
unsolicited reports while in CFUN=4 state... this patch makes it so
that these are ignored until the modem is onlined and the actual
SIM state can be queried again.
---

This patch has been tested with a Telit HE910 and it works fine there.  It
would be great if someone with other Telit modems could check if
this works with those models or whether we need to wrap some of this with
checks for model type, firmware version, etc...

Thanks,
Jonas


  plugins/telit.c |   64 +++++++++++++++++++++++++++++++++++++++++++++++++++----
  1 file changed, 60 insertions(+), 4 deletions(-)

diff --git a/plugins/telit.c b/plugins/telit.c
index fe2ccd6..a0f7deb 100644
--- a/plugins/telit.c
+++ b/plugins/telit.c
@@ -62,6 +62,7 @@

  static const char *none_prefix[] = { NULL };
  static const char *rsen_prefix[]= { "#RSEN:", NULL };
+static const char *qss_prefix[] = { "#QSS:", NULL };

  struct telit_data {
        GAtChat *chat;          /* AT chat */
@@ -219,7 +220,7 @@ static void switch_sim_state_status(struct ofono_modem 
*modem, int status)

        switch (status) {
        case 0: /* SIM not inserted */
-               if (data->have_sim == TRUE) {
+               if (data->have_sim == TRUE&&  ofono_modem_get_online(modem)) {
                        ofono_sim_inserted_notify(data->sim, FALSE);
                        data->have_sim = FALSE;
                        data->sms_phonebook_added = FALSE;
@@ -233,6 +234,14 @@ static void switch_sim_state_status(struct ofono_modem 
*modem, int status)
                }
                break;
        case 3: /* SIM inserted, SMS and phonebook ready */
+               /* It's possible that we arrive at QSS=3 state without
+                * ever seeing QSS=2, so we need to make sure that we've
+                * also done the QSS=2 work, as well
+                */
+               if (data->have_sim == FALSE) {
+                       ofono_sim_inserted_notify(data->sim, TRUE);
+                       data->have_sim = TRUE;
+               }
                if (data->sms_phonebook_added == FALSE) {
                        ofono_phonebook_create(modem, 0, "atmodem", data->chat);
                        ofono_sms_create(modem, 0, "atmodem", data->chat);

I don't remember how this made it upstream. The SMS and Phonebook atom
drivers should have vendor quirks to not register until the SIM is fully
ready. We do that for IFX for Phonebook and I was going to add another
one for IFX and SMS handling. Telit should do the same.

I am surprised adding atoms outside of pre_sim, post_sim and post_online
works as it should. Since that clearly has never been fully tested. And
is not our recommended way of adding atoms.


There's no reason why it wouldn't. Those call-backs are strong hints, however one can add atoms at any time. For example, emulators do this at semi-random times.

Regards,
-Denis
_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to