diff options
author | Ben Chan <benchan@chromium.org> | 2012-10-18 23:44:18 -0700 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-10-22 10:46:57 +0200 |
commit | 8362171973c600eb7d253a3f9cc343488f93408f (patch) | |
tree | 002d2724fe5a5ec38e3dd0e12d0524095ad01d91 | |
parent | 7f105dc3862ad53236dcd5d1ce0b9e2539341dfa (diff) |
novatel-lte: handle $NWQMISTATUS responses for firmware 4.08
In firmware 4.08, the $NWQMISTATUS command returns different values for
QMI state to indicate the current connection state. This patch modifies
the code to handle $NWQMISTATUS responses in firmware 1.41 and 4.08.
-rw-r--r-- | plugins/novatel/mm-broadband-bearer-novatel-lte.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/plugins/novatel/mm-broadband-bearer-novatel-lte.c b/plugins/novatel/mm-broadband-bearer-novatel-lte.c index e7e76f64..bf085cd0 100644 --- a/plugins/novatel/mm-broadband-bearer-novatel-lte.c +++ b/plugins/novatel/mm-broadband-bearer-novatel-lte.c @@ -33,6 +33,7 @@ #include "mm-modem-helpers.h" #define CONNECTION_CHECK_TIMEOUT_SEC 5 +#define QMISTATUS_TAG "$NWQMISTATUS:" G_DEFINE_TYPE (MMBroadbandBearerNovatelLte, mm_broadband_bearer_novatel_lte, MM_TYPE_BROADBAND_BEARER); @@ -121,6 +122,22 @@ connect_3gpp_finish (MMBroadbandBearer *self, static gboolean connect_3gpp_qmistatus (DetailedConnectContext *ctx); +static gboolean +is_qmistatus_connected (const gchar *str) +{ + str = mm_strip_tag (str, QMISTATUS_TAG); + + return g_strrstr (str, "QMI State: CONNECTED") || g_strrstr (str, "QMI State: QMI_WDS_PKT_DATA_CONNECTED"); +} + +static gboolean +is_qmistatus_disconnected (const gchar *str) +{ + str = mm_strip_tag (str, QMISTATUS_TAG); + + return g_strrstr (str, "QMI State: DISCONNECTED") || g_strrstr (str, "QMI State: QMI_WDS_PKT_DATA_DISCONNECTED"); +} + static void poll_connection_ready (MMBaseModem *modem, GAsyncResult *res, @@ -136,8 +153,7 @@ poll_connection_ready (MMBaseModem *modem, return; } - result = mm_strip_tag (result, "$NWQMISTATUS:"); - if (g_strrstr (result, "QMI State: DISCONNECTED")) { + if (is_qmistatus_disconnected (result)) { mm_bearer_report_disconnection (MM_BEARER (bearer)); g_source_remove (bearer->priv->connection_poller); bearer->priv->connection_poller = 0; @@ -182,8 +198,7 @@ connect_3gpp_qmistatus_ready (MMBaseModem *modem, return; } - result = mm_strip_tag (result, "$NWQMISTATUS:"); - if (g_strrstr (result, "QMI State: CONNECTED")) { + if (is_qmistatus_connected (result)) { MMBearerIpConfig *config; mm_dbg("Connected"); @@ -372,8 +387,7 @@ disconnect_3gpp_status_complete (MMBaseModem *modem, g_error_free (error); } - result = mm_strip_tag (result, "$NWQMISTATUS:"); - if (result && g_strrstr (result, "QMI State: DISCONNECTED")) + if (result && is_qmistatus_disconnected (result)) g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); else g_simple_async_result_set_error (ctx->result, |