diff options
author | Guido Günther <agx@sigxcpu.org> | 2014-02-05 08:40:16 +0100 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2014-02-05 08:40:16 +0100 |
commit | fa2b467e288cb137ffd792becbf0c1e757d85be4 (patch) | |
tree | ce308eb0886e93805e7d88bccce48c93797fd6dd /plugins/novatel | |
parent | afc4b839a31c530d73b91aa2483795f185eb7e52 (diff) |
New upstream version 1.2.0upstream/1.2.0upstream
Diffstat (limited to 'plugins/novatel')
-rw-r--r-- | plugins/novatel/mm-broadband-bearer-novatel-lte.c | 73 | ||||
-rw-r--r-- | plugins/novatel/mm-broadband-bearer-novatel-lte.h | 3 | ||||
-rw-r--r-- | plugins/novatel/mm-broadband-modem-novatel.c | 1 | ||||
-rw-r--r-- | plugins/novatel/mm-sim-novatel-lte.c | 2 |
4 files changed, 47 insertions, 32 deletions
diff --git a/plugins/novatel/mm-broadband-bearer-novatel-lte.c b/plugins/novatel/mm-broadband-bearer-novatel-lte.c index 7f023bc..1126ca0 100644 --- a/plugins/novatel/mm-broadband-bearer-novatel-lte.c +++ b/plugins/novatel/mm-broadband-bearer-novatel-lte.c @@ -114,6 +114,14 @@ is_qmistatus_disconnected (const gchar *str) return g_strrstr (str, "QMI State: DISCONNECTED") || g_strrstr (str, "QMI State: QMI_WDS_PKT_DATA_DISCONNECTED"); } +static gboolean +is_qmistatus_call_failed (const gchar *str) +{ + str = mm_strip_tag (str, QMISTATUS_TAG); + + return (g_strrstr (str, "QMI_RESULT_FAILURE:QMI_ERR_CALL_FAILED") != NULL); +} + static void poll_connection_ready (MMBaseModem *modem, GAsyncResult *res, @@ -130,7 +138,7 @@ poll_connection_ready (MMBaseModem *modem, } if (is_qmistatus_disconnected (result)) { - mm_bearer_report_disconnection (MM_BEARER (bearer)); + mm_bearer_report_connection_status (MM_BEARER (bearer), MM_BEARER_CONNECTION_STATUS_DISCONNECTED); g_source_remove (bearer->priv->connection_poller); bearer->priv->connection_poller = 0; } @@ -165,9 +173,7 @@ connect_3gpp_qmistatus_ready (MMBaseModem *modem, gchar *normalized_result; GError *error = NULL; - result = mm_base_modem_at_command_finish (MM_BASE_MODEM (ctx->modem), - res, - &error); + result = mm_base_modem_at_command_full_finish (modem, res, &error); if (!result) { mm_warn ("QMI connection status failed: %s", error->message); if (!g_error_matches (error, MM_MOBILE_EQUIPMENT_ERROR, MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN)) { @@ -193,9 +199,22 @@ connect_3gpp_qmistatus_ready (MMBaseModem *modem, g_object_unref (config); detailed_connect_context_complete_and_free (ctx); return; + } else if (is_qmistatus_call_failed (result)) { + /* Don't retry if the call failed */ + ctx->retries = 0; } mm_dbg ("Error: '%s'", result); + + if (g_cancellable_is_cancelled (ctx->cancellable)) { + g_simple_async_result_set_error (ctx->result, + MM_CORE_ERROR, + MM_CORE_ERROR_CANCELLED, + "Connection setup operation has been cancelled"); + detailed_connect_context_complete_and_free (ctx); + return; + } + if (ctx->retries > 0) { ctx->retries--; mm_dbg ("Retrying status check in a second. %d retries left.", @@ -218,11 +237,14 @@ connect_3gpp_qmistatus_ready (MMBaseModem *modem, static gboolean connect_3gpp_qmistatus (DetailedConnectContext *ctx) { - mm_base_modem_at_command ( + mm_base_modem_at_command_full ( ctx->modem, + ctx->primary, "$NWQMISTATUS", 3, /* timeout */ FALSE, /* allow_cached */ + FALSE, /* is_raw */ + ctx->cancellable, (GAsyncReadyCallback)connect_3gpp_qmistatus_ready, /* callback */ ctx); /* user_data */ @@ -237,9 +259,7 @@ connect_3gpp_qmiconnect_ready (MMBaseModem *modem, const gchar *result; GError *error = NULL; - result = mm_base_modem_at_command_finish (MM_BASE_MODEM (modem), - res, - &error); + result = mm_base_modem_at_command_full_finish (modem, res, &error); if (!result) { mm_warn ("QMI connection failed: %s", error->message); g_simple_async_result_take_error (ctx->result, error); @@ -271,11 +291,14 @@ connect_3gpp_authenticate (DetailedConnectContext *ctx) g_free (apn); g_free (user); g_free (password); - mm_base_modem_at_command ( + mm_base_modem_at_command_full ( ctx->modem, + ctx->primary, command, 10, /* timeout */ FALSE, /* allow_cached */ + FALSE, /* is_raw */ + ctx->cancellable, (GAsyncReadyCallback)connect_3gpp_qmiconnect_ready, ctx); /* user_data */ g_free (command); @@ -304,8 +327,7 @@ connect_3gpp (MMBroadbandBearer *self, ctx->retries = 60; /* Get a 'net' data port */ - ctx->data = mm_base_modem_get_best_data_port (MM_BASE_MODEM (modem), - MM_PORT_TYPE_NET); + ctx->data = mm_base_modem_get_best_data_port (ctx->modem, MM_PORT_TYPE_NET); if (!ctx->data) { g_simple_async_result_set_error ( ctx->result, @@ -326,7 +348,6 @@ typedef struct { MMBroadbandBearer *self; MMBaseModem *modem; MMAtSerialPort *primary; - MMAtSerialPort *secondary; MMPort *data; GSimpleAsyncResult *result; gint retries; @@ -336,7 +357,6 @@ static DetailedDisconnectContext * detailed_disconnect_context_new (MMBroadbandBearer *self, MMBroadbandModem *modem, MMAtSerialPort *primary, - MMAtSerialPort *secondary, MMPort *data, GAsyncReadyCallback callback, gpointer user_data) @@ -347,7 +367,6 @@ detailed_disconnect_context_new (MMBroadbandBearer *self, ctx->self = g_object_ref (self); ctx->modem = MM_BASE_MODEM (g_object_ref (modem)); ctx->primary = g_object_ref (primary); - ctx->secondary = (secondary ? g_object_ref (secondary) : NULL); ctx->data = g_object_ref (data); ctx->result = g_simple_async_result_new (G_OBJECT (self), callback, @@ -363,8 +382,6 @@ detailed_disconnect_context_complete_and_free (DetailedDisconnectContext *ctx) g_simple_async_result_complete_in_idle (ctx->result); g_object_unref (ctx->result); g_object_unref (ctx->data); - if (ctx->secondary) - g_object_unref (ctx->secondary); g_object_unref (ctx->primary); g_object_unref (ctx->modem); g_object_unref (ctx->self); @@ -390,9 +407,7 @@ disconnect_3gpp_status_ready (MMBaseModem *modem, GError *error = NULL; gboolean is_connected = FALSE; - result = mm_base_modem_at_command_finish (MM_BASE_MODEM (modem), - res, - &error); + result = mm_base_modem_at_command_full_finish (modem, res, &error); if (result) { mm_dbg ("QMI connection status: %s", result); if (is_qmistatus_disconnected (result)) { @@ -438,14 +453,16 @@ disconnect_3gpp_status_ready (MMBaseModem *modem, static gboolean disconnect_3gpp_qmistatus (DetailedDisconnectContext *ctx) { - mm_base_modem_at_command ( + mm_base_modem_at_command_full ( ctx->modem, + ctx->primary, "$NWQMISTATUS", 3, /* timeout */ FALSE, /* allow_cached */ - (GAsyncReadyCallback)disconnect_3gpp_status_ready, /* callback */ + FALSE, /* is_raw */ + NULL, /* cancellable */ + (GAsyncReadyCallback)disconnect_3gpp_status_ready, ctx); /* user_data */ - return FALSE; } @@ -457,9 +474,7 @@ disconnect_3gpp_check_status (MMBaseModem *modem, { GError *error = NULL; - mm_base_modem_at_command_finish (MM_BASE_MODEM (modem), - res, - &error); + mm_base_modem_at_command_full_finish (modem, res, &error); if (error) { mm_dbg("Disconnection error: %s", error->message); g_error_free (error); @@ -486,14 +501,16 @@ disconnect_3gpp (MMBroadbandBearer *self, bearer->priv->connection_poller = 0; } - ctx = detailed_disconnect_context_new (self, modem, primary, secondary, - data, callback, user_data); + ctx = detailed_disconnect_context_new (self, modem, primary, data, callback, user_data); - mm_base_modem_at_command ( + mm_base_modem_at_command_full ( ctx->modem, + ctx->primary, "$NWQMIDISCONNECT", 10, /* timeout */ FALSE, /* allow_cached */ + FALSE, /* is_raw */ + NULL, /* cancellable */ (GAsyncReadyCallback)disconnect_3gpp_check_status, ctx); /* user_data */ } diff --git a/plugins/novatel/mm-broadband-bearer-novatel-lte.h b/plugins/novatel/mm-broadband-bearer-novatel-lte.h index b304789..9f380f0 100644 --- a/plugins/novatel/mm-broadband-bearer-novatel-lte.h +++ b/plugins/novatel/mm-broadband-bearer-novatel-lte.h @@ -34,9 +34,6 @@ #define MM_IS_BROADBAND_BEARER_NOVATEL_LTE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_BROADBAND_BEARER_NOVATEL_LTE)) #define MM_BROADBAND_BEARER_NOVATEL_LTE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_BROADBAND_BEARER_NOVATEL_LTE, MMBroadbandBearerNovatelLteClass)) -#define MM_BROADBAND_BEARER_NOVATEL_LTE_USER "broadband-bearer-novatel-user" -#define MM_BROADBAND_BEARER_NOVATEL_LTE_PASSWORD "broadband-bearer-novatel-password" - typedef struct _MMBroadbandBearerNovatelLte MMBroadbandBearerNovatelLte; typedef struct _MMBroadbandBearerNovatelLteClass MMBroadbandBearerNovatelLteClass; typedef struct _MMBroadbandBearerNovatelLtePrivate MMBroadbandBearerNovatelLtePrivate; diff --git a/plugins/novatel/mm-broadband-modem-novatel.c b/plugins/novatel/mm-broadband-modem-novatel.c index 31a9cc3..5d6bdbd 100644 --- a/plugins/novatel/mm-broadband-modem-novatel.c +++ b/plugins/novatel/mm-broadband-modem-novatel.c @@ -611,6 +611,7 @@ cnti_set_ready (MMBaseModem *self, snapshot_result_complete_simple (simple, mm_string_to_access_tech (p), MM_IFACE_MODEM_3GPP_ALL_ACCESS_TECHNOLOGIES_MASK); + g_object_unref (simple); } static void diff --git a/plugins/novatel/mm-sim-novatel-lte.c b/plugins/novatel/mm-sim-novatel-lte.c index b5bccdb..489dd02 100644 --- a/plugins/novatel/mm-sim-novatel-lte.c +++ b/plugins/novatel/mm-sim-novatel-lte.c @@ -188,7 +188,7 @@ load_imsi (MMSim *self, mm_dbg ("loading (Novatel LTE) IMSI..."); mm_base_modem_at_command ( - MM_BASE_MODEM (modem), + modem, "+CRSM=176,28423,0,0,9", 3, FALSE, |