aboutsummaryrefslogtreecommitdiff
path: root/plugins/novatel
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2014-02-05 08:40:16 +0100
committerGuido Günther <agx@sigxcpu.org>2014-02-05 08:40:16 +0100
commitfa2b467e288cb137ffd792becbf0c1e757d85be4 (patch)
treece308eb0886e93805e7d88bccce48c93797fd6dd /plugins/novatel
parentafc4b839a31c530d73b91aa2483795f185eb7e52 (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.c73
-rw-r--r--plugins/novatel/mm-broadband-bearer-novatel-lte.h3
-rw-r--r--plugins/novatel/mm-broadband-modem-novatel.c1
-rw-r--r--plugins/novatel/mm-sim-novatel-lte.c2
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,