[PATCH 1/1] Fix primary context active/deactive result d-bus reply missing issue

2011-04-27 Thread martin . xu
From: Martin Xu martin...@intel.com

If user offline modem when the gprs_context is in enabling or disabling
state(activating/disactivating), the GPRS primary context activate/disactivate
result will not be replied to the corresponding application.
---
 drivers/atmodem/gprs-context.c |7 +++
 src/gprs.c |5 +
 2 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/drivers/atmodem/gprs-context.c b/drivers/atmodem/gprs-context.c
index ba95cbf..bfbd2c5 100644
--- a/drivers/atmodem/gprs-context.c
+++ b/drivers/atmodem/gprs-context.c
@@ -301,6 +301,13 @@ static void at_gprs_context_remove(struct 
ofono_gprs_context *gc)
 
if (gcd-state != STATE_IDLE  gcd-ppp) {
g_at_ppp_unref(gcd-ppp);
+
+   if (gcd-state == STATE_ENABLING)
+   CALLBACK_WITH_FAILURE(gcd-cb, gcd-cb_data);
+
+   if (gcd-state == STATE_DISABLING)
+   CALLBACK_WITH_SUCCESS(gcd-cb, gcd-cb_data);
+
g_at_chat_resume(gcd-chat);
}
 
diff --git a/src/gprs.c b/src/gprs.c
index deffeb8..99cb55d 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -351,6 +351,9 @@ static struct pri_context *gprs_context_by_path(struct 
ofono_gprs *gprs,
 
 static void context_settings_free(struct context_settings *settings)
 {
+   if (settings == NULL)
+   return;
+
if (settings-ipv4) {
g_free(settings-ipv4-ip);
g_free(settings-ipv4-netmask);
@@ -736,6 +739,8 @@ static void pri_reset_context_settings(struct pri_context 
*ctx)
return;
 
settings = ctx-context_driver-settings;
+   if (settings == NULL)
+   return;
 
interface = settings-interface;
settings-interface = NULL;
-- 
1.7.2.2

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 1/2] Fix ofonod crash issue

2011-04-26 Thread martin . xu
From: Martin Xu martin...@intel.com

In case of offline modem when GPRS data connection is connected, if gprs
atom is removed before PPP termination process is complete, the terminate_timer
will not be stop. It will cause ofonod crash when the timer time out.
---
 gatchat/ppp_cp.c |2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/gatchat/ppp_cp.c b/gatchat/ppp_cp.c
index f0731cc..6e4a9c5 100644
--- a/gatchat/ppp_cp.c
+++ b/gatchat/ppp_cp.c
@@ -970,6 +970,8 @@ void pppcp_process_packet(gpointer priv, const guint8 
*new_packet)
 
 void pppcp_free(struct pppcp_data *pppcp)
 {
+   pppcp_stop_timer(pppcp-config_timer_data);
+   pppcp_stop_timer(pppcp-terminate_timer_data);
g_free(pppcp-peer_options);
g_free(pppcp);
 }
-- 
1.7.2.2

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 2/2] Check modem device open failure

2011-04-26 Thread martin . xu
From: Martin Xu martin...@intel.com

disable gprs function if open modem device file failed, Otherwise, it
will cause ofonod crash, due to gatchat is NULL.
---
 plugins/huawei.c |   10 ++
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/plugins/huawei.c b/plugins/huawei.c
index 4051a93..1f69a8c 100644
--- a/plugins/huawei.c
+++ b/plugins/huawei.c
@@ -475,9 +475,10 @@ static void huawei_disconnect(gpointer user_data)
data-modem = NULL;
 
data-modem = open_device(modem, Modem, Modem: );
-   if (data-modem == NULL)
+   if (data-modem == NULL) {
+   ofono_error(open device failed!);
return;
-
+   }
g_at_chat_set_disconnect_function(data-modem,
huawei_disconnect, modem);
 
@@ -681,8 +682,9 @@ 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) {
+   if ((data-sim_state == HUAWEI_SIM_STATE_VALID ||
+   data-sim_state == HUAWEI_SIM_STATE_INVALID_CS) 
+   data-modem != NULL) {
data-gprs = ofono_gprs_create(modem, OFONO_VENDOR_HUAWEI,
atmodem, data-pcui);
 
-- 
1.7.2.2

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 1/1] Switch to offline mode only when the modem is NOT online

2011-04-26 Thread martin . xu
From: Martin Xu martin...@intel.com

---
 plugins/huawei.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/plugins/huawei.c b/plugins/huawei.c
index 1f69a8c..5f2c47f 100644
--- a/plugins/huawei.c
+++ b/plugins/huawei.c
@@ -217,7 +217,8 @@ static gboolean notify_sim_state(struct ofono_modem *modem,
 */
ofono_modem_set_powered(modem, TRUE);
 
-   g_at_chat_send(data-pcui, AT+CFUN=5, none_prefix,
+   if (ofono_modem_get_online(modem) == FALSE)
+   g_at_chat_send(data-pcui, AT+CFUN=5, none_prefix,
cfun_offline, modem, NULL);
 
return FALSE;
-- 
1.7.2.2

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH] Fix huawei_disconnect function issue

2011-03-08 Thread martin . xu
From: Martin Xu martin...@intel.com

huawei_disconnect is used to recovery the io and gprs context when
io error happends, see commit 39382730d7758b093ca6271f4e9dea875fa04b3a
However, io error not only happends at PPP disconnect, in theory it
can happends at any situation. I also observed that it happens when modem
go into offline mode at my Huawei EM770W modem. in this case, gprs should
not be reopened.
---
 plugins/huawei.c |   50 --
 1 files changed, 36 insertions(+), 14 deletions(-)

diff --git a/plugins/huawei.c b/plugins/huawei.c
index 6f05677..5bf02fd 100644
--- a/plugins/huawei.c
+++ b/plugins/huawei.c
@@ -470,10 +470,7 @@ static void huawei_disconnect(gpointer user_data)
struct ofono_modem *modem = user_data;
struct huawei_data *data = ofono_modem_get_data(modem);
 
-   DBG();
-
-   if (data-gc)
-   ofono_gprs_context_remove(data-gc);
+   DBG(data-gc %p, data-gc);
 
g_at_chat_unref(data-modem);
data-modem = NULL;
@@ -485,6 +482,12 @@ static void huawei_disconnect(gpointer user_data)
g_at_chat_set_disconnect_function(data-modem,
huawei_disconnect, modem);
 
+   /* gprs_context has been destructed and needs not reopen */
+   if (data-gc == NULL)
+   return;
+
+   ofono_gprs_context_remove(data-gc);
+
if (data-sim_state == HUAWEI_SIM_STATE_VALID ||
data-sim_state == HUAWEI_SIM_STATE_INVALID_CS) {
ofono_info(Reopened GPRS context channel);
@@ -579,15 +582,29 @@ static int huawei_disable(struct ofono_modem *modem)
return -EINPROGRESS;
 }
 
+struct huawei_cb_data {
+   struct cb_data *cbd;
+   ofono_bool_t online;
+   struct ofono_modem *modem;
+};
+
 static void set_online_cb(gboolean ok, GAtResult *result, gpointer user_data)
 {
-   struct cb_data *cbd = user_data;
-   ofono_modem_online_cb_t cb = cbd-cb;
+   struct huawei_cb_data *online_cbd = user_data;
+   ofono_modem_online_cb_t cb = online_cbd-cbd-cb;
+   struct huawei_data *data = ofono_modem_get_data(online_cbd-modem);
+
+   if (ok) {
+   /* offline mode gprs_context and gprs will be flushed */
+   if (online_cbd-online == FALSE) {
+   data-gc = NULL;
+   data-gprs = NULL;
+   }
 
-   if (ok)
-   CALLBACK_WITH_SUCCESS(cb, cbd-data);
+   CALLBACK_WITH_SUCCESS(cb, online_cbd-cbd-data);
+   }
else
-   CALLBACK_WITH_FAILURE(cb, cbd-data);
+   CALLBACK_WITH_FAILURE(cb, online_cbd-cbd-data);
 }
 
 static void huawei_set_online(struct ofono_modem *modem, ofono_bool_t online,
@@ -595,21 +612,26 @@ static void huawei_set_online(struct ofono_modem *modem, 
ofono_bool_t online,
 {
struct huawei_data *data = ofono_modem_get_data(modem);
GAtChat *chat = data-pcui;
-   struct cb_data *cbd = cb_data_new(cb, user_data);
+   struct huawei_cb_data *online_cbd;
char const *command = online ? AT+CFUN=1 : AT+CFUN=5;
 
DBG(modem %p %s, modem, online ? online : offline);
 
-   if (cbd == NULL)
+   online_cbd = g_try_new0(struct huawei_cb_data, 1);
+   online_cbd-cbd = cb_data_new(cb, user_data);
+   if (online_cbd-cbd == NULL)
goto error;
+   online_cbd-online = online;
+   online_cbd-modem = modem;
 
-   if (g_at_chat_send(chat, command, NULL, set_online_cb, cbd, g_free))
+   if (g_at_chat_send(chat, command, NULL, set_online_cb,
+   online_cbd, g_free))
return;
 
 error:
-   g_free(cbd);
+   g_free(online_cbd);
 
-   CALLBACK_WITH_FAILURE(cb, cbd-data);
+   CALLBACK_WITH_FAILURE(cb, user_data);
 }
 
 static void huawei_pre_sim(struct ofono_modem *modem)
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH] Fix huawei_disconnect function issue

2011-03-03 Thread martin . xu
From: Martin Xu martin...@intel.com

huawei_disconnect is used to recovery the io and gprs context when
io error happends, see commit 39382730d7758b093ca6271f4e9dea875fa04b3a
However, io error not only happends at PPP disconnect, in theory it
can happends at any situation. I also observed that it happens when modem
go into offline mode at my Huawei EM770W modem. in this case, gprs should
not be reopened.
---
 plugins/huawei.c |   49 +++--
 1 files changed, 35 insertions(+), 14 deletions(-)

diff --git a/plugins/huawei.c b/plugins/huawei.c
index 6f05677..939509f 100644
--- a/plugins/huawei.c
+++ b/plugins/huawei.c
@@ -78,6 +78,7 @@ struct huawei_data {
struct ofono_gprs *gprs;
struct ofono_gprs_context *gc;
gboolean voice;
+   gboolean online;
gboolean ndis;
guint sim_poll_timeout;
guint sim_poll_count;
@@ -97,6 +98,7 @@ static int huawei_probe(struct ofono_modem *modem)
if (data == NULL)
return -ENOMEM;
 
+   data-online = FALSE;
ofono_modem_set_data(modem, data);
 
return 0;
@@ -470,10 +472,7 @@ static void huawei_disconnect(gpointer user_data)
struct ofono_modem *modem = user_data;
struct huawei_data *data = ofono_modem_get_data(modem);
 
-   DBG();
-
-   if (data-gc)
-   ofono_gprs_context_remove(data-gc);
+   DBG(data-online %d, data-online);
 
g_at_chat_unref(data-modem);
data-modem = NULL;
@@ -485,6 +484,13 @@ static void huawei_disconnect(gpointer user_data)
g_at_chat_set_disconnect_function(data-modem,
huawei_disconnect, modem);
 
+   /* reopen GPRS context channel only at online state */
+   if (data-online == FALSE)
+   return;
+
+   if (data-gc)
+   ofono_gprs_context_remove(data-gc);
+
if (data-sim_state == HUAWEI_SIM_STATE_VALID ||
data-sim_state == HUAWEI_SIM_STATE_INVALID_CS) {
ofono_info(Reopened GPRS context channel);
@@ -579,15 +585,25 @@ static int huawei_disable(struct ofono_modem *modem)
return -EINPROGRESS;
 }
 
+struct huawei_cb_data {
+   struct cb_data *cbd;
+   ofono_bool_t online;
+   struct ofono_modem *modem;
+};
+
 static void set_online_cb(gboolean ok, GAtResult *result, gpointer user_data)
 {
-   struct cb_data *cbd = user_data;
-   ofono_modem_online_cb_t cb = cbd-cb;
+   struct huawei_cb_data *online_cbd = user_data;
+   ofono_modem_online_cb_t cb = online_cbd-cbd-cb;
+   struct huawei_data *data = ofono_modem_get_data(online_cbd-modem);
 
-   if (ok)
-   CALLBACK_WITH_SUCCESS(cb, cbd-data);
+   if (ok) {
+   data-online = online_cbd-online;
+
+   CALLBACK_WITH_SUCCESS(cb, online_cbd-cbd-data);
+   }
else
-   CALLBACK_WITH_FAILURE(cb, cbd-data);
+   CALLBACK_WITH_FAILURE(cb, online_cbd-cbd-data);
 }
 
 static void huawei_set_online(struct ofono_modem *modem, ofono_bool_t online,
@@ -595,21 +611,26 @@ static void huawei_set_online(struct ofono_modem *modem, 
ofono_bool_t online,
 {
struct huawei_data *data = ofono_modem_get_data(modem);
GAtChat *chat = data-pcui;
-   struct cb_data *cbd = cb_data_new(cb, user_data);
+   struct huawei_cb_data *online_cbd;
char const *command = online ? AT+CFUN=1 : AT+CFUN=5;
 
DBG(modem %p %s, modem, online ? online : offline);
 
-   if (cbd == NULL)
+   online_cbd = g_try_new0(struct huawei_cb_data, 1);
+   online_cbd-cbd = cb_data_new(cb, user_data);
+   if (online_cbd-cbd == NULL)
goto error;
+   online_cbd-online = online;
+   online_cbd-modem = modem;
 
-   if (g_at_chat_send(chat, command, NULL, set_online_cb, cbd, g_free))
+   if (g_at_chat_send(chat, command, NULL, set_online_cb,
+   online_cbd, g_free))
return;
 
 error:
-   g_free(cbd);
+   g_free(online_cbd);
 
-   CALLBACK_WITH_FAILURE(cb, cbd-data);
+   CALLBACK_WITH_FAILURE(cb, user_data);
 }
 
 static void huawei_pre_sim(struct ofono_modem *modem)
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[V3 PATCH 1/3] PPP: Fix transmit ACCM and receive ACCM setting issue

2011-02-12 Thread martin . xu
From: Martin Xu martin...@intel.com

Tramsmit ACCM and receive ACCM is mixed up.
According to RFC1662 Section 7.1, ACCM Configuration Option is
used to inform the peer which control characters MUST remain
mapped when the peer sends them.
---
 gatchat/ppp_lcp.c |   16 ++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/gatchat/ppp_lcp.c b/gatchat/ppp_lcp.c
index 3a80a62..cc3e231 100644
--- a/gatchat/ppp_lcp.c
+++ b/gatchat/ppp_lcp.c
@@ -149,7 +149,13 @@ static void lcp_rca(struct pppcp_data *pppcp, const struct 
pppcp_packet *packet)
while (ppp_option_iter_next(iter) == TRUE) {
switch (ppp_option_iter_get_type(iter)) {
case ACCM:
-   ppp_set_xmit_accm(pppcp_get_ppp(pppcp), 0);
+   /*
+* RFC1662 Section 7.1
+* The Configuration Option is used to inform the peer
+* which control characters MUST remain mapped when
+* the peer sends them.
+*/
+   ppp_set_recv_accm(pppcp_get_ppp(pppcp), 0);
break;
default:
break;
@@ -263,7 +269,13 @@ static enum rcr_result lcp_rcr(struct pppcp_data *pppcp,
while (ppp_option_iter_next(iter) == TRUE) {
switch (ppp_option_iter_get_type(iter)) {
case ACCM:
-   ppp_set_recv_accm(ppp,
+   /*
+* RFC1662 Section 7.1
+* The Configuration Option is used to inform the peer
+* which control characters MUST remain mapped when
+* the peer sends them.
+*/
+   ppp_set_xmit_accm(ppp,
get_host_long(ppp_option_iter_get_data(iter)));
break;
case AUTH_PROTO:
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[V3 PATCH 2/3] PPP: Use default ACCM (0xffffffff) to trasmit package

2011-02-12 Thread martin . xu
From: Martin Xu martin...@intel.com

Using my Huawei EM770W modem, if set ACCM as 0x, RXJ-
event breaks PPP link, after IP package transmit for a while.
Using default ACCM, the issue can be fixed.
I tested it at China Unicom networks.
---
 gatchat/ppp_lcp.c |8 +---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/gatchat/ppp_lcp.c b/gatchat/ppp_lcp.c
index cc3e231..91a8b67 100644
--- a/gatchat/ppp_lcp.c
+++ b/gatchat/ppp_lcp.c
@@ -105,8 +105,7 @@ static void lcp_generate_config_options(struct lcp_data 
*lcp)
 
 static void lcp_reset_config_options(struct lcp_data *lcp)
 {
-   lcp-req_options = REQ_OPTION_ACCM;
-   lcp-accm = 0;
+   /* Using the default ACCM */
 
lcp_generate_config_options(lcp);
 }
@@ -147,6 +146,7 @@ static void lcp_rca(struct pppcp_data *pppcp, const struct 
pppcp_packet *packet)
ppp_option_iter_init(iter, packet);
 
while (ppp_option_iter_next(iter) == TRUE) {
+   const guint8 *data = ppp_option_iter_get_data(iter);
switch (ppp_option_iter_get_type(iter)) {
case ACCM:
/*
@@ -155,7 +155,9 @@ static void lcp_rca(struct pppcp_data *pppcp, const struct 
pppcp_packet *packet)
 * which control characters MUST remain mapped when
 * the peer sends them.
 */
-   ppp_set_recv_accm(pppcp_get_ppp(pppcp), 0);
+
+   ppp_set_recv_accm(pppcp_get_ppp(pppcp),
+   pppcpget_host_long(data));
break;
default:
break;
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[V3 PATCH 3/3] Huawei: set Huawei EM770W modem device to 00

2011-02-12 Thread martin . xu
From: Martin Xu martin...@intel.com

Device 00 is ppp port. Setting it as 01, my Huawei EM770W modem PPP
connection can't work
---
 plugins/ofono.rules |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/plugins/ofono.rules b/plugins/ofono.rules
index 111f071..7dec243 100644
--- a/plugins/ofono.rules
+++ b/plugins/ofono.rules
@@ -37,7 +37,7 @@ ATTRS{idVendor}==12d1, ATTRS{idProduct}==1401, 
ENV{OFONO_IFACE_NUM}==02, E
 ATTRS{idVendor}==12d1, ATTRS{idProduct}==1402, ENV{OFONO_IFACE_NUM}==00, 
ENV{OFONO_HUAWEI_TYPE}=Modem
 ATTRS{idVendor}==12d1, ATTRS{idProduct}==1402, ENV{OFONO_IFACE_NUM}==02, 
ENV{OFONO_HUAWEI_TYPE}=Pcui
 
-ATTRS{idVendor}==12d1, ATTRS{idProduct}==1404, ENV{OFONO_IFACE_NUM}==01, 
ENV{OFONO_HUAWEI_TYPE}=Modem
+ATTRS{idVendor}==12d1, ATTRS{idProduct}==1404, ENV{OFONO_IFACE_NUM}==00, 
ENV{OFONO_HUAWEI_TYPE}=Modem
 ATTRS{idVendor}==12d1, ATTRS{idProduct}==1404, ENV{OFONO_IFACE_NUM}==02, 
ENV{OFONO_HUAWEI_TYPE}=Pcui
 ATTRS{idVendor}==12d1, ATTRS{idProduct}==1404, ENV{OFONO_HUAWEI_VOICE}=1
 
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 2/3] Use default ACCM (0xffffffff) to trasmit package

2011-01-19 Thread martin . xu
From: Martin Xu martin...@intel.com

Using my Huawei EM770W modem, if set ACCM as 0x, RXJ-
event breaks PPP link, after IP package transmit for a while.
Using default ACCM, the issue can be fixed.
I tested it at China Unicom networks.
---
 gatchat/ppp_lcp.c |9 ++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/gatchat/ppp_lcp.c b/gatchat/ppp_lcp.c
index cc3e231..2264731 100644
--- a/gatchat/ppp_lcp.c
+++ b/gatchat/ppp_lcp.c
@@ -105,8 +105,7 @@ static void lcp_generate_config_options(struct lcp_data 
*lcp)
 
 static void lcp_reset_config_options(struct lcp_data *lcp)
 {
-   lcp-req_options = REQ_OPTION_ACCM;
-   lcp-accm = 0;
+   /* Using the default ACCM */
 
lcp_generate_config_options(lcp);
 }
@@ -155,7 +154,11 @@ static void lcp_rca(struct pppcp_data *pppcp, const struct 
pppcp_packet *packet)
 * which control characters MUST remain mapped when
 * the peer sends them.
 */
-   ppp_set_recv_accm(pppcp_get_ppp(pppcp), 0);
+
+   /*
+* Using the default ACCM
+* ppp_set_recv_accm(pppcp_get_ppp(pppcp), ~0U);
+*/
break;
default:
break;
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 1/3] PPP: Fix transmit ACCM and receive ACCM setting issue

2011-01-19 Thread martin . xu
From: Martin Xu martin...@intel.com

Tramsmit ACCM and receive ACCM is mixed up.
According to RFC1662 Section 7.1, ACCM Configuration Option is
used to inform the peer which control characters MUST remain
mapped when the peer sends them.
---
 gatchat/ppp_lcp.c |   16 ++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/gatchat/ppp_lcp.c b/gatchat/ppp_lcp.c
index 3a80a62..cc3e231 100644
--- a/gatchat/ppp_lcp.c
+++ b/gatchat/ppp_lcp.c
@@ -149,7 +149,13 @@ static void lcp_rca(struct pppcp_data *pppcp, const struct 
pppcp_packet *packet)
while (ppp_option_iter_next(iter) == TRUE) {
switch (ppp_option_iter_get_type(iter)) {
case ACCM:
-   ppp_set_xmit_accm(pppcp_get_ppp(pppcp), 0);
+   /*
+* RFC1662 Section 7.1
+* The Configuration Option is used to inform the peer
+* which control characters MUST remain mapped when
+* the peer sends them.
+*/
+   ppp_set_recv_accm(pppcp_get_ppp(pppcp), 0);
break;
default:
break;
@@ -263,7 +269,13 @@ static enum rcr_result lcp_rcr(struct pppcp_data *pppcp,
while (ppp_option_iter_next(iter) == TRUE) {
switch (ppp_option_iter_get_type(iter)) {
case ACCM:
-   ppp_set_recv_accm(ppp,
+   /*
+* RFC1662 Section 7.1
+* The Configuration Option is used to inform the peer
+* which control characters MUST remain mapped when
+* the peer sends them.
+*/
+   ppp_set_xmit_accm(ppp,
get_host_long(ppp_option_iter_get_data(iter)));
break;
case AUTH_PROTO:
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 3/3] Huawei: set Huawei EM770W modem device to 00

2011-01-19 Thread martin . xu
From: Martin Xu martin...@intel.com

Device 00 is ppp port. Setting it as 01, my Huawei EM770W modem PPP
connection can't work
---
 plugins/ofono.rules |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/plugins/ofono.rules b/plugins/ofono.rules
index 111f071..7dec243 100644
--- a/plugins/ofono.rules
+++ b/plugins/ofono.rules
@@ -37,7 +37,7 @@ ATTRS{idVendor}==12d1, ATTRS{idProduct}==1401, 
ENV{OFONO_IFACE_NUM}==02, E
 ATTRS{idVendor}==12d1, ATTRS{idProduct}==1402, ENV{OFONO_IFACE_NUM}==00, 
ENV{OFONO_HUAWEI_TYPE}=Modem
 ATTRS{idVendor}==12d1, ATTRS{idProduct}==1402, ENV{OFONO_IFACE_NUM}==02, 
ENV{OFONO_HUAWEI_TYPE}=Pcui
 
-ATTRS{idVendor}==12d1, ATTRS{idProduct}==1404, ENV{OFONO_IFACE_NUM}==01, 
ENV{OFONO_HUAWEI_TYPE}=Modem
+ATTRS{idVendor}==12d1, ATTRS{idProduct}==1404, ENV{OFONO_IFACE_NUM}==00, 
ENV{OFONO_HUAWEI_TYPE}=Modem
 ATTRS{idVendor}==12d1, ATTRS{idProduct}==1404, ENV{OFONO_IFACE_NUM}==02, 
ENV{OFONO_HUAWEI_TYPE}=Pcui
 ATTRS{idVendor}==12d1, ATTRS{idProduct}==1404, ENV{OFONO_HUAWEI_VOICE}=1
 
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 0/2] fix ACCM handle issue for Huawei EM770W modem

2011-01-10 Thread martin . xu
From: Martin Xu martin...@intel.com

  [PATCH 1/2] PPP: Fix Trasmit ACCM and Receive ACCM setting error
  according to RFC 1662 section 7.2, looks like oFono has set receive
  and transmit ACCM wrongly.
  normally the two ACCM are both set as 0x, and the issue will
  not be found. Once the they are different, oFono will run to error.

  [PATCH 2/2] Inform Huawei modem using ACCM 0x to trasmit package.
  Using my Huawei modem (EM770W) if set ACCM as 0x, the RXJ- 
  event will happend, and PPP link down, when IP package is transmited
  for a while. If I set ACCM as 0x, the RXJ- event never happen,
  and the modem can work quite stable.
  I tested the modem at China Unicom networks.
  Not sure whether the issue is specific to specific modem. If it is the case,
  ofono may let user to set the ACCM to specific modem.

 gatchat/ppp_lcp.c |   15 ---
 1 files changed, 12 insertions(+), 3 deletions(-)

-- 
1.7.2.2

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 1/2] PPP: Fix Transmit ACCM and Receive ACCM setting error

2011-01-10 Thread martin . xu
From: Martin Xu martin...@intel.com

---
 gatchat/ppp_lcp.c |   13 +++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/gatchat/ppp_lcp.c b/gatchat/ppp_lcp.c
index 3a80a62..bc97257 100644
--- a/gatchat/ppp_lcp.c
+++ b/gatchat/ppp_lcp.c
@@ -149,7 +149,11 @@ static void lcp_rca(struct pppcp_data *pppcp, const struct 
pppcp_packet *packet)
while (ppp_option_iter_next(iter) == TRUE) {
switch (ppp_option_iter_get_type(iter)) {
case ACCM:
-   ppp_set_xmit_accm(pppcp_get_ppp(pppcp), 0);
+   /* RFC1662 Section 7.1
+* The Configuration Option is used to inform the peer which 
control
+* characters MUST remain mapped when the peer sends them.
+*/
+   ppp_set_recv_accm(pppcp_get_ppp(pppcp), 0);
break;
default:
break;
@@ -263,7 +267,12 @@ static enum rcr_result lcp_rcr(struct pppcp_data *pppcp,
while (ppp_option_iter_next(iter) == TRUE) {
switch (ppp_option_iter_get_type(iter)) {
case ACCM:
-   ppp_set_recv_accm(ppp,
+   /* RFC1662 Section 7.1
+* The Configuration Option is used to inform the peer which 
control
+* characters MUST remain mapped when the peer sends them.
+*/
+
+   ppp_set_xmit_accm(ppp,
get_host_long(ppp_option_iter_get_data(iter)));
break;
case AUTH_PROTO:
-- 
1.7.2.2

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 2/2] Inform Huawei modem using ACCM 0xffffffff to trasmit package. Using my Huawei modem (EM770W) if set ACCM as 0x00000000, the RXJ- event will happend, and PPP link down, when IP package tran

2011-01-10 Thread martin . xu
From: Martin Xu martin...@intel.com

---
 gatchat/ppp_lcp.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/gatchat/ppp_lcp.c b/gatchat/ppp_lcp.c
index bc97257..181bc14 100644
--- a/gatchat/ppp_lcp.c
+++ b/gatchat/ppp_lcp.c
@@ -106,7 +106,7 @@ static void lcp_generate_config_options(struct lcp_data 
*lcp)
 static void lcp_reset_config_options(struct lcp_data *lcp)
 {
lcp-req_options = REQ_OPTION_ACCM;
-   lcp-accm = 0;
+   lcp-accm = ~0U;
 
lcp_generate_config_options(lcp);
 }
@@ -153,7 +153,7 @@ static void lcp_rca(struct pppcp_data *pppcp, const struct 
pppcp_packet *packet)
 * The Configuration Option is used to inform the peer which 
control
 * characters MUST remain mapped when the peer sends them.
 */
-   ppp_set_recv_accm(pppcp_get_ppp(pppcp), 0);
+   ppp_set_recv_accm(pppcp_get_ppp(pppcp), ~0U);
break;
default:
break;
-- 
1.7.2.2

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH] Fix compile warning at MeeGo The gcc version is MeeGo 4.5.1

2011-01-06 Thread martin . xu
From: blutolan bluto...@blutolan-desktop.(none)

---
 src/call-forwarding.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/call-forwarding.c b/src/call-forwarding.c
index 512f223..36ba4f1 100644
--- a/src/call-forwarding.c
+++ b/src/call-forwarding.c
@@ -246,7 +246,7 @@ static gboolean is_cfu_enabled(struct ofono_call_forwarding 
*cf,
 static void sim_set_cf_indicator(struct ofono_call_forwarding *cf)
 {
gboolean cfu_voice;
-   struct ofono_call_forwarding_condition *cond;
+   struct ofono_call_forwarding_condition *cond = NULL;
 
cfu_voice = is_cfu_enabled(cf, cond);
 
-- 
1.7.2.2

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH] Fix compile warning at MeeGo The gcc version is MeeGo 4.5.1

2011-01-06 Thread martin . xu
From: Martin Xu martin...@intel.com

---
 src/call-forwarding.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/call-forwarding.c b/src/call-forwarding.c
index 512f223..36ba4f1 100644
--- a/src/call-forwarding.c
+++ b/src/call-forwarding.c
@@ -246,7 +246,7 @@ static gboolean is_cfu_enabled(struct ofono_call_forwarding 
*cf,
 static void sim_set_cf_indicator(struct ofono_call_forwarding *cf)
 {
gboolean cfu_voice;
-   struct ofono_call_forwarding_condition *cond;
+   struct ofono_call_forwarding_condition *cond = NULL;
 
cfu_voice = is_cfu_enabled(cf, cond);
 
-- 
1.7.2.2

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 1/1] new modem desc for f3607g modem in Samos platform

2009-12-08 Thread Martin Xu
From: root r...@blutolan-desktop.localdomain

---
 plugins/udev.c |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/plugins/udev.c b/plugins/udev.c
index 243ce9b..8bb2d65 100644
--- a/plugins/udev.c
+++ b/plugins/udev.c
@@ -86,24 +86,30 @@ static void add_mbm(struct ofono_modem *modem,
if (desc == NULL)
return;
 
+   DBG(desc: %s, desc);
+
registered = ofono_modem_get_integer(modem, Registered);
if (registered != 0)
return;
 
if (g_str_has_suffix(desc, Minicard Modem) ||
+   g_str_has_suffix(desc, Mini-Card Modem) ||
g_str_has_suffix(desc, Broadband Modem) ||
g_str_has_suffix(desc, Broadband USB Modem)) {
devnode = udev_device_get_devnode(udev_device);
ofono_modem_set_string(modem, MODEM_DEVICE, devnode);
} else if (g_str_has_suffix(desc, Minicard Data Modem) ||
+   g_str_has_suffix(desc, Mini-Card Data Modem) ||
g_str_has_suffix(desc, Broadband Data Modem)) {
devnode = udev_device_get_devnode(udev_device);
ofono_modem_set_string(modem, DATA_DEVICE, devnode);
} else if (g_str_has_suffix(desc, Minicard GPS Port) ||
+   g_str_has_suffix(desc, Mini-Card GPRS Port) ||
g_str_has_suffix(desc, Broadband GPS Port)) {
devnode = udev_device_get_devnode(udev_device);
ofono_modem_set_string(modem, GPS_DEVICE, devnode);
} else if (g_str_has_suffix(desc, Minicard Network Adapter) ||
+   g_str_has_suffix(desc, Mini-Card Network Adapter) ||
g_str_has_suffix(desc, Broadband Network Adapter) ||
g_str_has_suffix(desc, Minicard NetworkAdapter)) {
devnode = udev_device_get_property_value(udev_device,
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 1/1] Allow builds to install the test scripts for debugging

2009-12-03 Thread Martin Xu
---
 Makefile.am |9 +++--
 bootstrap-configure |1 +
 configure.ac|4 
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 4b0d7e8..2a140c1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -231,7 +231,7 @@ doc_files = doc/overview.txt doc/ofono-paper.txt \
doc/call-meter-api.txt \
doc/dataconnectionmanager-api.txt
 
-test_files = test/test-manager test/test-modem test/test-voicecall \
+test_scripts = test/test-manager test/test-modem test/test-voicecall \
test/test-network-registration test/test-phonebook \
test/test-advice-of-charge test/test-call-settings \
test/test-call-forwarding test/test-call-barring \
@@ -244,10 +244,15 @@ test_files = test/test-manager test/test-modem 
test/test-voicecall \
test/activate-context test/deactivate-context \
test/process-context-settings
 
+if TEST
+testdir = $(pkglibdir)/test
+test_SCRIPTS = $(test_scripts)
+endif
+
 conf_files = src/ofono.conf plugins/modem.conf
 
 EXTRA_DIST = src/genbuiltin plugins/example_history.c $(doc_files) \
-   $(test_files) $(conf_files) $(udev_files)
+   $(test_scripts) $(conf_files) $(udev_files)
 
 dist_man_MANS = doc/ofonod.8
 
diff --git a/bootstrap-configure b/bootstrap-configure
index 63a689a..f665943 100755
--- a/bootstrap-configure
+++ b/bootstrap-configure
@@ -7,6 +7,7 @@ fi
 ./bootstrap  \
 ./configure --enable-maintainer-mode \
--enable-debug \
+   --enable-test \
--prefix=/usr \
--mandir=/usr/share/man \
--sysconfdir=/etc \
diff --git a/configure.ac b/configure.ac
index 5c2255a..a3b7d75 100644
--- a/configure.ac
+++ b/configure.ac
@@ -48,6 +48,10 @@ AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug],
fi
 ])
 
+AC_ARG_ENABLE(test, AC_HELP_STRING([--enable-test],
+   [enable test/example scripts]), [enable_test=${enableval}])
+AM_CONDITIONAL(TEST, test ${enable_test} = yes)
+
 AC_ARG_ENABLE(pie, AC_HELP_STRING([--enable-pie],
[enable position independent executables flag]), [
if (test ${enableval} = yes 
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 5/5] update gprs context settings when activating primary conext

2009-11-17 Thread Martin Xu
---
 drivers/mbmmodem/gprs-context.c |   14 ++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/drivers/mbmmodem/gprs-context.c b/drivers/mbmmodem/gprs-context.c
index ecbafa0..b800d4a 100644
--- a/drivers/mbmmodem/gprs-context.c
+++ b/drivers/mbmmodem/gprs-context.c
@@ -116,6 +116,18 @@ static void mbm_cgdcont_cb(gboolean ok, GAtResult *result, 
gpointer user_data)
CALLBACK_WITH_FAILURE(cb, cbd-data);
 }
 
+static void update_gprs_context_settings(struct ofono_gprs_context *gc)
+{
+   const char *interface;
+
+   struct ofono_modem *modem = ofono_gprs_context_get_modem(gc);
+
+   interface = ofono_modem_get_string(modem, NetworkInterface);
+
+   ofono_gprs_context_update_settings(gc, interface, dhcp,
+   NULL, NULL, NULL, NULL);
+}
+
 static void mbm_gprs_activate_primary(struct ofono_gprs_context *gc,
const struct ofono_gprs_primary_context *ctx,
ofono_gprs_context_cb_t cb, void *data)
@@ -132,6 +144,8 @@ static void mbm_gprs_activate_primary(struct 
ofono_gprs_context *gc,
 
cbd-user = gc;
 
+   update_gprs_context_settings(gc);
+
/* TODO: Handle username / password fields */
len = sprintf(buf, AT+CGDCONT=%u,\IP\, ctx-cid);
 
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 1/4] add interface property to primary context

2009-11-08 Thread Martin Xu
---
 include/gprs-context.h |1 +
 src/gprs.c |4 
 2 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/include/gprs-context.h b/include/gprs-context.h
index c4ebd23..adb0820 100644
--- a/include/gprs-context.h
+++ b/include/gprs-context.h
@@ -37,6 +37,7 @@ struct ofono_gprs_context;
 struct ofono_gprs_primary_context {
unsigned int cid;
int direction;
+   char *interface;
char apn[OFONO_GPRS_MAX_APN_LENGTH + 1];
char username[OFONO_GPRS_MAX_USERNAME_LENGTH + 1];
char password[OFONO_GPRS_MAX_PASSWORD_LENGTH + 1];
diff --git a/src/gprs.c b/src/gprs.c
index 0253109..18ae82a 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -185,6 +185,10 @@ static DBusMessage *pri_get_properties(DBusConnection 
*conn,
ofono_dbus_dict_append(dict, Password, DBUS_TYPE_STRING,
strvalue);
 
+   strvalue = ctx-context.interface;
+   ofono_dbus_dict_append(dict, Interface, DBUS_TYPE_STRING,
+   strvalue);
+ 
dbus_message_iter_close_container(iter, dict);
 
return reply;
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 3/4] add function ofono_gprs_context_get_modem

2009-11-08 Thread Martin Xu
---
 include/gprs-context.h |2 ++
 src/gprs.c |5 +
 2 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/include/gprs-context.h b/include/gprs-context.h
index b8c770d..2a788ef 100644
--- a/include/gprs-context.h
+++ b/include/gprs-context.h
@@ -76,6 +76,8 @@ void ofono_gprs_context_remove(struct ofono_gprs_context *gc);
 void ofono_gprs_context_set_data(struct ofono_gprs_context *gc, void *data);
 void *ofono_gprs_context_get_data(struct ofono_gprs_context *gc);
 
+struct ofono_modem *ofono_gprs_context_get_modem(struct ofono_gprs_context 
*gc);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/gprs.c b/src/gprs.c
index 60d26ec..025b944 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -1249,6 +1249,11 @@ void *ofono_gprs_context_get_data(struct 
ofono_gprs_context *gc)
return gc-driver_data;
 }
 
+struct ofono_modem *ofono_gprs_context_get_modem(struct ofono_gprs_context *gc)
+{
+   return __ofono_atom_get_modem(gc-atom);
+}
+
 int ofono_gprs_driver_register(const struct ofono_gprs_driver *d)
 {
DBG(driver: %p, name: %s, d, d-name);
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 2/4] add create/destroy_interface to ofono_gprs_context_driver

2009-11-08 Thread Martin Xu
---
 include/gprs-context.h |4 
 src/gprs.c |   20 ++--
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/include/gprs-context.h b/include/gprs-context.h
index adb0820..b8c770d 100644
--- a/include/gprs-context.h
+++ b/include/gprs-context.h
@@ -57,6 +57,10 @@ struct ofono_gprs_context_driver {
void (*deactivate_primary)(struct ofono_gprs_context *gc,
unsigned int id,
ofono_gprs_context_cb_t cb, void *data);
+   void (*create_interface)(struct ofono_gprs_context *gc,
+   struct ofono_gprs_primary_context *ctx);
+   void (*destroy_interface)(struct ofono_gprs_context *gc,
+   struct ofono_gprs_primary_context *ctx);
 };
 
 void ofono_gprs_context_deactivated(struct ofono_gprs_context *gc, unsigned 
id);
diff --git a/src/gprs.c b/src/gprs.c
index 18ae82a..60d26ec 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -498,21 +498,29 @@ static struct pri_context *pri_context_create(struct 
ofono_gprs *gprs,
const char *name,
enum gprs_context_type type)
 {
-   struct pri_context *context = g_try_new0(struct pri_context, 1);
+   struct ofono_gprs_context *gc = gprs-context_driver;
+   struct pri_context *ctx = g_try_new0(struct pri_context, 1);
 
-   if (!context)
+   if (!ctx)
return NULL;
 
-   context-gprs = gprs;
-   strcpy(context-name, name);
-   context-type = type;
+   ctx-gprs = gprs;
+   strcpy(ctx-name, name);
+   ctx-type = type;
+
+   if (gc-driver-create_interface)
+   gc-driver-create_interface(gc, ctx-context);
 
-   return context;
+   return ctx;
 }
 
 static void pri_context_destroy(gpointer userdata)
 {
struct pri_context *ctx = userdata;
+   struct ofono_gprs_context *gc = ctx-gprs-context_driver;
+
+   if (gc-driver-destroy_interface)
+   gc-driver-destroy_interface(gc, ctx-context);
 
if (ctx-path)
g_free(ctx-path);
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 4/4] add mbm_gprs_create/destroy_interface to mbm gprs_context_driver

2009-11-08 Thread Martin Xu
---
 drivers/mbmmodem/gprs-context.c |   21 +
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/drivers/mbmmodem/gprs-context.c b/drivers/mbmmodem/gprs-context.c
index ecbafa0..d3e03b7 100644
--- a/drivers/mbmmodem/gprs-context.c
+++ b/drivers/mbmmodem/gprs-context.c
@@ -172,6 +172,25 @@ error:
CALLBACK_WITH_FAILURE(cb, data);
 }
 
+static void mbm_gprs_create_interface(struct ofono_gprs_context *gc,
+   struct ofono_gprs_primary_context *ctx)
+{
+   const char *interface;
+   struct ofono_modem *modem = ofono_gprs_context_get_modem(gc);
+
+   interface = ofono_modem_get_string(modem, NetworkInterface);
+
+   g_free(ctx-interface);
+   ctx-interface = g_strdup(interface);
+}
+
+static void mbm_gprs_destroy_interface(struct ofono_gprs_context *gc,
+   struct ofono_gprs_primary_context *ctx)
+{
+   g_free(ctx-interface);
+   ctx-interface = NULL;
+}
+
 static void e2nap_notifier(GAtResult *result, gpointer user_data)
 {
struct ofono_gprs_context *gc = user_data;
@@ -237,6 +256,8 @@ static struct ofono_gprs_context_driver driver = {
.remove = mbm_gprs_context_remove,
.activate_primary   = mbm_gprs_activate_primary,
.deactivate_primary = mbm_gprs_deactivate_primary,
+   .create_interface   = mbm_gprs_create_interface,
+   .destroy_interface  = mbm_gprs_destroy_interface,
 };
 
 void mbm_gprs_context_init()
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


index c2e9c41..6661074 100644

2009-11-04 Thread Martin Xu

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 1/1] Use AT+CFUN? to query powered state

2009-11-04 Thread Martin Xu
---
 plugins/mbm.c |3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/plugins/mbm.c b/plugins/mbm.c
index fd4569c..602709d 100644
--- a/plugins/mbm.c
+++ b/plugins/mbm.c
@@ -187,6 +187,9 @@ static int mbm_enable(struct ofono_modem *modem)
NULL, NULL, NULL);
g_at_chat_send(data-chat, AT*EMRDY?, none_prefix, NULL, NULL, NULL);
 
+   g_at_chat_send(data-chat, AT+CFUN?, cfun_prefix,
+   cfun_query, modem, NULL);
+
return -EINPROGRESS;
 }
 
-- 
1.6.1.3

___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono