Hi Jeevaka

On Mon, Jan 17, 2011 at 4:29 PM, Jeevaka Badrappan
<jeevaka.badrap...@elektrobit.com> wrote:
> Adds ifx support for the remaining pin retries query
> ---
>  drivers/atmodem/sim.c |   83 +++++++++++++++++++++++++++++++++++++++---------
>  1 files changed, 67 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c
> index c5f4a44..3f81249 100644
> --- a/drivers/atmodem/sim.c
> +++ b/drivers/atmodem/sim.c
> @@ -56,6 +56,7 @@ static const char *crsm_prefix[] = { "+CRSM:", NULL };
>  static const char *cpin_prefix[] = { "+CPIN:", NULL };
>  static const char *clck_prefix[] = { "+CLCK:", NULL };
>  static const char *huawei_cpin_prefix[] = { "^CPIN:", NULL };
> +static const char *xpincnt_prefix[] = { "+XPINCNT:", NULL };
>  static const char *none_prefix[] = { NULL };
>
>  static void at_crsm_info_cb(gboolean ok, GAtResult *result, gpointer 
> user_data)
> @@ -522,40 +523,90 @@ error:
>        CALLBACK_WITH_FAILURE(cb, NULL, cbd->data);
>  }
>
> +static void xpincnt_cb(gboolean ok, GAtResult *result, gpointer user_data)
> +{
> +       struct cb_data *cbd = user_data;
> +       ofono_sim_pin_retries_cb_t cb = cbd->cb;
> +       const char *final = g_at_result_final_response(result);
> +       GAtResultIter iter;
> +       struct ofono_error error;
> +       int retries[OFONO_SIM_PASSWORD_INVALID];
> +       size_t i;
> +       static enum ofono_sim_password_type password_types[] = {
> +               OFONO_SIM_PASSWORD_SIM_PIN,
> +               OFONO_SIM_PASSWORD_SIM_PIN2,
> +               OFONO_SIM_PASSWORD_SIM_PUK,
> +               OFONO_SIM_PASSWORD_SIM_PUK2,
> +       };
> +
> +       decode_at_error(&error, final);
> +
> +       if (!ok) {
> +               cb(&error, NULL, cbd->data);
> +               return;
> +       }
> +
> +       g_at_result_iter_init(&iter, result);
> +
> +       if (!g_at_result_iter_next(&iter, "+XPINCNT:"))
> +               goto error;
> +
> +       memset(retries, -1, sizeof(retries));

this happens to work for -1, but bear in mind memset "fills  the
first  n bytes of the memory area". Considering sizeof(int) == 4, it
will set each byte to -1, which happens to be -1 considering all 4
bytes too. But imo this is just being lucky.

In my first version I had the same as you and Denis asked me to use a for loop.


<snip>

>  static void at_pin_retries_query(struct ofono_sim *sim,
>                                ofono_sim_pin_retries_cb_t cb, void *data)
>  {
>        struct sim_data *sd = ofono_sim_get_data(sim);
>        struct cb_data *cbd;
> -       int retries[OFONO_SIM_PASSWORD_INVALID];
> -       int i;
>
>        DBG("");
>
> -       switch (sd->vendor) {
> -       case OFONO_VENDOR_HUAWEI:
> -               cbd = cb_data_new(cb, data);
> +       cbd = cb_data_new(cb, data);
> +       if (cbd == NULL) {
> +               CALLBACK_WITH_FAILURE(cb, NULL, data);
> +               return;
> +       }
>
> -               if (cbd == NULL) {
> -                       CALLBACK_WITH_FAILURE(cb, NULL, data);
> +       switch (sd->vendor) {
> +       case OFONO_VENDOR_IFX:
> +               if (g_at_chat_send(sd->chat, "AT+XPINCNT", xpincnt_prefix,
> +                                       xpincnt_cb, cbd, g_free) > 0)
>                        return;
> -               }
>
> +               break;
> +       case OFONO_VENDOR_HUAWEI:
>                if (g_at_chat_send(sd->chat, "AT^CPIN?", huawei_cpin_prefix,
>                                        huawei_cpin_cb, cbd, g_free) > 0)
>                        return;
>
> -               g_free(cbd);
> -
> -               CALLBACK_WITH_FAILURE(cb, NULL, data);
>                break;
> -
>        default:
> -               for(i = 0; i < OFONO_SIM_PASSWORD_INVALID; i++)
> -                       retries[i] = -1;
> -
> -               CALLBACK_WITH_SUCCESS(cb, retries, data);
> +               break;
>        }
> +
> +       g_free(cbd);
> +
> +       CALLBACK_WITH_FAILURE(cb, NULL, data);

If vendor is not huawei nor ifx, why are we bothering to allocate cbd
and free it afterwards without using?

This also changes the semantics to return a failure if it's not
implemented. I'm not against since this version seems to be clearer.
However you might want to change src/sim.c:sim_pin_retries_query_cb()
so it doesn't call ofono_error() in this case.



regards,
Lucas De Marchi
_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to