Hi Caiwen,

> (1) Sometimes when open the data device, it may fail. If open the data device 
> failed,
> retry once one second later.
> 
> (2) Fix Huawei NDIS modem gprs doesn't work issue

what does this comment mean. We should just not try the NDIS part of
Huawei until I get clear specs on how to use the NDIS port. Even the
basic AT^DHCP handling of this is unreliable.

> ---
>  plugins/huawei.c |   43 ++++++++++++++++++++++++++++++++++++++-----
>  1 files changed, 38 insertions(+), 5 deletions(-)
> 
> diff --git a/plugins/huawei.c b/plugins/huawei.c
> index e791718..6b2caa4 100644
> --- a/plugins/huawei.c
> +++ b/plugins/huawei.c
> @@ -80,6 +80,7 @@ struct huawei_data {
>       gboolean ndis;
>       guint sim_poll_timeout;
>       guint sim_poll_count;
> +     guint reopen_timeout;
>  };
>  
>  #define MAX_SIM_POLL_COUNT 5
> @@ -107,6 +108,11 @@ static void huawei_remove(struct ofono_modem *modem)
>  
>       DBG("%p", modem);
>  
> +     if (data->reopen_timeout > 0) {
> +             g_source_remove(data->reopen_timeout);
> +             data->reopen_timeout = 0;
> +     }
> +
>       ofono_modem_set_data(modem, NULL);
>  
>       if (data->modem)
> @@ -465,6 +471,20 @@ static GAtChat *open_device(struct ofono_modem *modem,
>       return chat;
>  }
>  
> +static void huawei_disconnect(gpointer user_data);
> +
> +static gboolean reopen_callback(gpointer user_data)
> +{
> +     struct ofono_modem *modem = user_data;
> +     struct huawei_data *data = ofono_modem_get_data(modem);
> +
> +     huawei_disconnect(user_data);
> +
> +     data->reopen_timeout = 0;
> +
> +     return FALSE;
> +}
> +
>  static void huawei_disconnect(gpointer user_data)
>  {
>       struct ofono_modem *modem = user_data;
> @@ -476,8 +496,17 @@ static void huawei_disconnect(gpointer user_data)
>       data->modem = NULL;
>  
>       data->modem = open_device(modem, "Modem", "Modem: ");
> -     if (data->modem == NULL)
> +     /* retry once if failed */
> +     if (data->modem == NULL) {
> +             if (data->reopen_timeout == 0) {
> +                     data->reopen_timeout =
> +                             g_timeout_add_seconds(1, reopen_callback,
> +                                     modem);
> +
> +                     ofono_debug("open device failed, try to reopen it.");
> +             }
>               return;
> +     }

Please do not nest here.

        if (data->modem == NULL) {
                if (data->reopen_timeout > 0)
                        return;

                data->reopen_timeout = ...

                return;
        }

>  
>       g_at_chat_set_disconnect_function(data->modem,
>                                               huawei_disconnect, modem);
> @@ -559,6 +588,11 @@ static int huawei_disable(struct ofono_modem *modem)
>  
>       DBG("%p", modem);
>  
> +     if (data->reopen_timeout > 0) {
> +             g_source_remove(data->reopen_timeout);
> +             data->reopen_timeout = 0;
> +     }
> +
>       if (data->sim_poll_timeout > 0) {
>               g_source_remove(data->sim_poll_timeout);
>               data->sim_poll_timeout = 0;
> @@ -682,16 +716,15 @@ static void huawei_post_online(struct ofono_modem 
> *modem)
>       ofono_ussd_create(modem, OFONO_VENDOR_QUALCOMM_MSM,
>                                               "atmodem", data->pcui);
>  
> -     if ((data->sim_state == HUAWEI_SIM_STATE_VALID ||
> -                     data->sim_state == HUAWEI_SIM_STATE_INVALID_CS) &&
> -                     data->modem != NULL) {
> +     if (data->sim_state == HUAWEI_SIM_STATE_VALID ||
> +                     data->sim_state == HUAWEI_SIM_STATE_INVALID_CS) {

Why this change?

>               data->gprs = ofono_gprs_create(modem, OFONO_VENDOR_HUAWEI,
>                                               "atmodem", data->pcui);
>  
>               if (data->ndis == TRUE)
>                       data->gc = ofono_gprs_context_create(modem, 0,
>                                               "huaweimodem", data->pcui);
> -             else
> +             else if (data->modem != NULL)
>                       data->gc = ofono_gprs_context_create(modem, 0,
>                                               "atmodem", data->modem);
>  

I do not understand this change.

Regards

Marcel


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

Reply via email to