summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/mbm.c98
1 files changed, 15 insertions, 83 deletions
diff --git a/plugins/mbm.c b/plugins/mbm.c
index cc173abb..45ad8645 100644
--- a/plugins/mbm.c
+++ b/plugins/mbm.c
@@ -63,10 +63,7 @@ struct mbm_data {
GAtChat *modem_port;
GAtChat *data_port;
gboolean have_sim;
- struct ofono_gprs *gprs;
- struct ofono_gprs_context *gc;
struct ofono_location_reporting *lr;
- guint reopen_source;
enum mbm_variant variant;
struct at_util_sim_state_query *sim_state_query;
};
@@ -92,11 +89,6 @@ static void mbm_remove(struct ofono_modem *modem)
DBG("%p", modem);
- if (data->reopen_source > 0) {
- g_source_remove(data->reopen_source);
- data->reopen_source = 0;
- }
-
ofono_modem_set_data(modem, NULL);
g_at_chat_unref(data->data_port);
@@ -282,61 +274,6 @@ static GAtChat *create_port(const char *device)
return chat;
}
-static void mbm_disconnect(gpointer user_data);
-
-static gboolean reopen_callback(gpointer user_data)
-{
- struct ofono_modem *modem = user_data;
- struct mbm_data *data = ofono_modem_get_data(modem);
- const char *data_dev;
-
- data->reopen_source = 0;
-
- data_dev = ofono_modem_get_string(modem, "DataDevice");
-
- data->data_port = create_port(data_dev);
- if (data->data_port == NULL)
- return FALSE;
-
- if (getenv("OFONO_AT_DEBUG"))
- g_at_chat_set_debug(data->data_port, mbm_debug, "Data: ");
-
- g_at_chat_set_disconnect_function(data->data_port,
- mbm_disconnect, modem);
-
- ofono_info("Reopened GPRS context channel");
-
- data->gc = ofono_gprs_context_create(modem, 0,
- "atmodem", data->data_port);
- if (data->gprs && data->gc) {
- ofono_gprs_context_set_type(data->gc,
- OFONO_GPRS_CONTEXT_TYPE_MMS);
- ofono_gprs_add_context(data->gprs, data->gc);
- }
-
- return FALSE;
-}
-
-static void mbm_disconnect(gpointer user_data)
-{
- struct ofono_modem *modem = user_data;
- struct mbm_data *data = ofono_modem_get_data(modem);
-
- DBG("");
-
- if (data->gc)
- ofono_gprs_context_remove(data->gc);
-
- g_at_chat_unref(data->data_port);
- data->data_port = NULL;
-
- /* Waiting for the +CGEV: ME DEACT might also work */
- if (data->reopen_source > 0)
- g_source_remove(data->reopen_source);
-
- data->reopen_source = g_timeout_add_seconds(1, reopen_callback, modem);
-}
-
static int mbm_enable(struct ofono_modem *modem)
{
struct mbm_data *data = ofono_modem_get_data(modem);
@@ -371,15 +308,12 @@ static int mbm_enable(struct ofono_modem *modem)
if (getenv("OFONO_AT_DEBUG"))
g_at_chat_set_debug(data->data_port, mbm_debug, "Data: ");
- g_at_chat_set_disconnect_function(data->data_port,
- mbm_disconnect, modem);
-
g_at_chat_register(data->modem_port, "*EMRDY:", emrdy_notifier,
FALSE, modem, NULL);
- g_at_chat_send(data->modem_port, "AT&F E0 V1 X4 &C1 +CMEE=1", NULL,
+ g_at_chat_send(data->modem_port, "AT&F E0 V1 X4 &C0 +CMEE=1", NULL,
NULL, NULL, NULL);
- g_at_chat_send(data->data_port, "AT&F E0 V1 X4 &C1 +CMEE=1", NULL,
+ g_at_chat_send(data->data_port, "AT&F E0 V1 X4 &C0 +CMEE=1", NULL,
NULL, NULL, NULL);
g_at_chat_send(data->modem_port, "AT*E2CFUN=1", none_prefix,
@@ -413,16 +347,12 @@ static int mbm_disable(struct ofono_modem *modem)
DBG("%p", modem);
- if (data->reopen_source > 0) {
- g_source_remove(data->reopen_source);
- data->reopen_source = 0;
- }
-
if (data->modem_port == NULL)
return 0;
g_at_chat_cancel_all(data->modem_port);
g_at_chat_unregister_all(data->modem_port);
+
g_at_chat_send(data->modem_port, "AT+CFUN=4", NULL,
cfun_disable, modem, NULL);
@@ -449,12 +379,13 @@ static void mbm_set_online(struct ofono_modem *modem, ofono_bool_t online,
DBG("modem %p %s", modem, online ? "online" : "offline");
- if (g_at_chat_send(chat, command, NULL, set_online_cb, cbd, g_free))
+ if (g_at_chat_send(chat, command, none_prefix,
+ set_online_cb, cbd, g_free) > 0)
return;
- g_free(cbd);
-
CALLBACK_WITH_FAILURE(cb, cbd->data);
+
+ g_free(cbd);
}
static void mbm_pre_sim(struct ofono_modem *modem)
@@ -487,6 +418,7 @@ static void mbm_post_sim(struct ofono_modem *modem)
static void mbm_post_online(struct ofono_modem *modem)
{
struct mbm_data *data = ofono_modem_get_data(modem);
+ struct ofono_gprs *gprs;
struct ofono_gprs_context *gc;
const char *gps_dev;
@@ -511,9 +443,9 @@ static void mbm_post_online(struct ofono_modem *modem)
ofono_ussd_create(modem, 0, "atmodem", data->modem_port);
- data->gprs = ofono_gprs_create(modem, OFONO_VENDOR_MBM,
+ gprs = ofono_gprs_create(modem, OFONO_VENDOR_MBM,
"atmodem", data->modem_port);
- if (data->gprs == NULL)
+ if (gprs == NULL)
return;
gc = ofono_gprs_context_create(modem, 0,
@@ -521,15 +453,15 @@ static void mbm_post_online(struct ofono_modem *modem)
if (gc) {
ofono_gprs_context_set_type(gc,
OFONO_GPRS_CONTEXT_TYPE_INTERNET);
- ofono_gprs_add_context(data->gprs, gc);
+ ofono_gprs_add_context(gprs, gc);
}
- data->gc = ofono_gprs_context_create(modem, 0,
+ gc = ofono_gprs_context_create(modem, 0,
"atmodem", data->data_port);
- if (data->gc) {
- ofono_gprs_context_set_type(data->gc,
+ if (gc) {
+ ofono_gprs_context_set_type(gc,
OFONO_GPRS_CONTEXT_TYPE_MMS);
- ofono_gprs_add_context(data->gprs, data->gc);
+ ofono_gprs_add_context(gprs, gc);
}
}