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 <d...@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.pena...@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@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel >
_______________________________________________ ModemManager-devel mailing list ModemManager-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel