* Re: [PATCH v3] reopen once if open device failed
2011-06-03 2:35 [PATCH v3] reopen once if open device failed Caiwen Zhang
@ 2011-06-02 9:27 ` Denis Kenzior
2011-06-03 3:46 ` Zhang, Caiwen
0 siblings, 1 reply; 3+ messages in thread
From: Denis Kenzior @ 2011-06-02 9:27 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 3614 bytes --]
Hi Caiwen,
On 06/02/2011 09:35 PM, Caiwen Zhang wrote:
> Sometimes when open the data device, it may fail. If open the data device failed,
> retry once one second later.
>
> ---
> plugins/huawei.c | 43 ++++++++++++++++++++++++++++++++++++++-----
> 1 files changed, 38 insertions(+), 5 deletions(-)
>
> diff --git a/plugins/huawei.c b/plugins/huawei.c
> index e791718..96c9cc2 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)
> + return;
> +
> + data->reopen_timeout = g_timeout_add_seconds(1,
> + reopen_callback, modem);
> +
> + ofono_debug("open device failed, try to reopen it.");
> 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) {
What are you trying to accomplish here? It sounds like you want to
separate the logic of creating the NDIS gprs context (which does not
depend on the modem port being available.) Is this the case? If so,
then you need to submit this as a separate patch...
> 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);
>
along with this chunk here, since they are not related to the issue
you're trying to fix.
Regards,
-Denis
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v3] reopen once if open device failed
@ 2011-06-03 2:35 Caiwen Zhang
2011-06-02 9:27 ` Denis Kenzior
0 siblings, 1 reply; 3+ messages in thread
From: Caiwen Zhang @ 2011-06-03 2:35 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 2982 bytes --]
Sometimes when open the data device, it may fail. If open the data device failed,
retry once one second later.
---
plugins/huawei.c | 43 ++++++++++++++++++++++++++++++++++++++-----
1 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/plugins/huawei.c b/plugins/huawei.c
index e791718..96c9cc2 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)
+ return;
+
+ data->reopen_timeout = g_timeout_add_seconds(1,
+ reopen_callback, modem);
+
+ ofono_debug("open device failed, try to reopen it.");
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) {
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);
--
1.7.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [PATCH v3] reopen once if open device failed
2011-06-02 9:27 ` Denis Kenzior
@ 2011-06-03 3:46 ` Zhang, Caiwen
0 siblings, 0 replies; 3+ messages in thread
From: Zhang, Caiwen @ 2011-06-03 3:46 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1224 bytes --]
Hi Denis,
> >
> > - 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) {
>
> What are you trying to accomplish here? It sounds like you want to
> separate the logic of creating the NDIS gprs context (which does not
> depend on the modem port being available.) Is this the case? If so,
> then you need to submit this as a separate patch...
>
Yes. NDIS gprs context does not depend on the modem port. don't need
to check data->modem for it.
> > 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);
> >
>
> along with this chunk here, since they are not related to the issue
> you're trying to fix.
>
OK, I will sent a separate patch for this.
best regards
Caiwen
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-06-03 3:46 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-03 2:35 [PATCH v3] reopen once if open device failed Caiwen Zhang
2011-06-02 9:27 ` Denis Kenzior
2011-06-03 3:46 ` Zhang, Caiwen
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.