Hi Denis,

On 12/04/2012 21:36, Denis Kenzior wrote:
Hi Guillaume,

On 04/12/2012 09:28 AM, Guillaume Zajac wrote:
For some modem like ZTE MF180/190, we need to do some
polling to check SIM state when it returns +CME ERROR: 14 busy.
---
  drivers/atmodem/sim.c |   59 +++++++++++++++++++++++++++++++++++++++---------
  1 files changed, 48 insertions(+), 11 deletions(-)

<snip>

@@ -874,9 +878,22 @@ static void at_cpin_cb(gboolean ok, GAtResult *result, 
gpointer user_data)
        else
                decode_at_error(&error, final);

-       if (!ok) {
+       switch (error.type) {
+       case OFONO_ERROR_TYPE_NO_ERROR:
+               break;
+       case OFONO_ERROR_TYPE_CME:
+               /* Check for SIM busy - try again later */
+               if (error.error == 14) {
+                       if (sd->poll_count++<  12) {
+                               sd->poll_source = g_timeout_add_seconds(2,
+                                               sim_state_check, cbd);
+                               return;
+                       }
+               }
+               /* fall through */
+       default:
                cb(&error, -1, cbd->data);
-               return;
+               goto done;
        }

        if (sd->vendor == OFONO_VENDOR_WAVECOM) {
Is there a reason we are not using at_util_sim_state_query_new?

This function is only giving sim present information through its callback, however I also need to parse the answer from AT+CPIN? So it means we would send once the AT+CPIN? using atutil helper and once to parse the answer. I thought about implementing a new atutil helper function or a new g_at_chat_send_recursive() function but I saw in drivers/atmodem/phonebook.c on AT+CPBS=? command that polling mechanism is integrated into the driver itself.
That's why I have chosen this solution.

<snip>

Regards,
-Denis

Kind regards,
Guillaume

_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to