[PATCH] telit: lock/unlock CSIM operations by default

Carlo Lobrano c.lobrano at gmail.com
Wed Mar 15 07:48:06 UTC 2017


Hi all,

I agree with Dan, we should send the unlock csim command. I should be able
to test and fix it this afternoon.

BR,
Carlo

On Wed, 15 Mar 2017 at 02:40 Dan Williams <dcbw at redhat.com> wrote:

> On Wed, 2017-03-15 at 00:19 +0100, Aleksander Morgado wrote:
> > Wrap the AT+CSIM=XX commands between lock (CSIM=1) and
> > unlock (CSIM=0) operations.
> >
> > This seems to avoid the TTY lockup seen in several different Telit
> > modules.
> >
> > https://bugs.freedesktop.org/show_bug.cgi?id=100205
> >
> > Reported-by: Penalva, Salvador <Salvador.Penalva at digi.com>
> > ---
> >
> > Hey Salvador, Carlo and Daniele,
> >
> > Can you guys review and test this patch? It looks like it solved the
> > issue I saw myself.
> >
> > The AT command reference for the Telit LE866 does say that the
> > AT+CSIM commands need to be enclosed within lock/unlock operations
> > like these.
>
> If the LOCK succeeds, then don't we need to UNLOCK if some intermediate
> step fails?  It looks like we'll just leave it in locked state if any
> step like say PIN or PIN2 calls
> load_unlock_retries_context_complete_and_free().
>
> Dan
>
> > ---
> >  plugins/telit/mm-broadband-modem-telit.c | 60
> > ++++++++++++++++++++++++++++++++
> >  1 file changed, 60 insertions(+)
> >
> > diff --git a/plugins/telit/mm-broadband-modem-telit.c
> > b/plugins/telit/mm-broadband-modem-telit.c
> > index b1679ae4..8bc9d1e5 100644
> > --- a/plugins/telit/mm-broadband-modem-telit.c
> > +++ b/plugins/telit/mm-broadband-modem-telit.c
> > @@ -452,6 +452,8 @@ modem_load_supported_bands (MMIfaceModem *self,
> >  /*******************************************************************
> > **********/
> >  /* Load unlock retries (Modem interface) */
> >
> > +#define CSIM_LOCK_STR               "+CSIM=1"
> > +#define CSIM_UNLOCK_STR             "+CSIM=0"
> >  #define CSIM_QUERY_PIN_RETRIES_STR  "+CSIM=10,0020000100"
> >  #define CSIM_QUERY_PUK_RETRIES_STR  "+CSIM=10,002C000100"
> >  #define CSIM_QUERY_PIN2_RETRIES_STR "+CSIM=10,0020008100"
> > @@ -460,10 +462,12 @@ modem_load_supported_bands (MMIfaceModem *self,
> >
> >  typedef enum {
> >      LOAD_UNLOCK_RETRIES_STEP_FIRST,
> > +    LOAD_UNLOCK_RETRIES_STEP_LOCK,
> >      LOAD_UNLOCK_RETRIES_STEP_PIN,
> >      LOAD_UNLOCK_RETRIES_STEP_PUK,
> >      LOAD_UNLOCK_RETRIES_STEP_PIN2,
> >      LOAD_UNLOCK_RETRIES_STEP_PUK2,
> > +    LOAD_UNLOCK_RETRIES_STEP_UNLOCK,
> >      LOAD_UNLOCK_RETRIES_STEP_LAST
> >  } LoadUnlockRetriesStep;
> >
> > @@ -500,6 +504,25 @@ modem_load_unlock_retries_finish (MMIfaceModem
> > *self,
> >  }
> >
> >  static void
> > +csim_unlock_ready (MMBaseModem              *self,
> > +                   GAsyncResult             *res,
> > +                   LoadUnlockRetriesContext *ctx)
> > +{
> > +    const gchar *response;
> > +    GError      *error = NULL;
> > +
> > +    /* Ignore errors */
> > +    response = mm_base_modem_at_command_finish (self, res, &error);
> > +    if (!response) {
> > +        mm_warn ("Couldn't unlock SIM card: %s", error->message);
> > +        g_error_free (error);
> > +    }
> > +
> > +    ctx->step++;
> > +    load_unlock_retries_step (ctx);
> > +}
> > +
> > +static void
> >  csim_query_ready (MMBaseModem *self,
> >                    GAsyncResult *res,
> >                    LoadUnlockRetriesContext *ctx)
> > @@ -542,6 +565,7 @@ csim_query_ready (MMBaseModem *self,
> >              mm_unlock_retries_set (ctx->retries,
> > MM_MODEM_LOCK_SIM_PUK2, unlock_retries);
> >              break;
> >          default:
> > +            g_assert_not_reached ();
> >              break;
> >      }
> >
> > @@ -551,12 +575,40 @@ next_step:
> >  }
> >
> >  static void
> > +csim_lock_ready (MMBaseModem              *self,
> > +                 GAsyncResult             *res,
> > +                 LoadUnlockRetriesContext *ctx)
> > +{
> > +    const gchar *response;
> > +    GError      *error = NULL;
> > +
> > +    response = mm_base_modem_at_command_finish (self, res, &error);
> > +    if (!response) {
> > +        g_prefix_error (&error, "Couldn't lock SIM card: ");
> > +        g_simple_async_result_take_error (ctx->result, error);
> > +        load_unlock_retries_context_complete_and_free (ctx);
> > +        return;
> > +    }
> > +
> > +    ctx->step++;
> > +    load_unlock_retries_step (ctx);
> > +}
> > +
> > +static void
> >  load_unlock_retries_step (LoadUnlockRetriesContext *ctx)
> >  {
> >      switch (ctx->step) {
> >          case LOAD_UNLOCK_RETRIES_STEP_FIRST:
> >              /* Fall back on next step */
> >              ctx->step++;
> > +        case LOAD_UNLOCK_RETRIES_STEP_LOCK:
> > +            mm_base_modem_at_command (MM_BASE_MODEM (ctx->self),
> > +                                      CSIM_LOCK_STR,
> > +                                      CSIM_QUERY_TIMEOUT,
> > +                                      FALSE,
> > +                                      (GAsyncReadyCallback)
> > csim_lock_ready,
> > +                                      ctx);
> > +            break;
> >          case LOAD_UNLOCK_RETRIES_STEP_PIN:
> >              mm_base_modem_at_command (MM_BASE_MODEM (ctx->self),
> >                                        CSIM_QUERY_PIN_RETRIES_STR,
> > @@ -589,6 +641,14 @@ load_unlock_retries_step
> > (LoadUnlockRetriesContext *ctx)
> >                                        (GAsyncReadyCallback)
> > csim_query_ready,
> >                                        ctx);
> >              break;
> > +        case LOAD_UNLOCK_RETRIES_STEP_UNLOCK:
> > +            mm_base_modem_at_command (MM_BASE_MODEM (ctx->self),
> > +                                      CSIM_UNLOCK_STR,
> > +                                      CSIM_QUERY_TIMEOUT,
> > +                                      FALSE,
> > +                                      (GAsyncReadyCallback)
> > csim_unlock_ready,
> > +                                      ctx);
> > +            break;
> >          case LOAD_UNLOCK_RETRIES_STEP_LAST:
> >              if (ctx->succeded_requests == 0) {
> >                  g_simple_async_result_set_error (ctx->result,
> > --
> > 2.12.0
> > _______________________________________________
> > ModemManager-devel mailing list
> > ModemManager-devel at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/modemmanager-devel/attachments/20170315/64e2cc6f/attachment.html>


More information about the ModemManager-devel mailing list