aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiacinto Cifelli <gciofono@gmail.com>2020-05-26 15:03:52 +0200
committerAleksander Morgado <aleksander@aleksander.es>2020-05-27 05:33:12 +0000
commit0cc5a6ce4f225b9aad06ec20235467188fe23d66 (patch)
treeb88358a505373a4b7d3c3bb04fabf44643ce4db3
parentda7bc39f0c0bfc53d90195c0911f4a50b98bd1c8 (diff)
cinterion: skip sim ready check for modules that don't support it
-rw-r--r--plugins/cinterion/mm-broadband-modem-cinterion.c61
1 files changed, 51 insertions, 10 deletions
diff --git a/plugins/cinterion/mm-broadband-modem-cinterion.c b/plugins/cinterion/mm-broadband-modem-cinterion.c
index f931dc58..966f284a 100644
--- a/plugins/cinterion/mm-broadband-modem-cinterion.c
+++ b/plugins/cinterion/mm-broadband-modem-cinterion.c
@@ -95,6 +95,7 @@ struct _MMBroadbandModemCinterionPrivate {
FeatureSupport swwan_support;
FeatureSupport sind_psinfo_support;
FeatureSupport smoni_support;
+ FeatureSupport sind_simstatus_support;
/* Flags for model-based behaviors */
MMCinterionModemFamily modem_family;
@@ -774,15 +775,14 @@ sind_psinfo_enable_ready (MMBaseModem *_self,
self = MM_BROADBAND_MODEM_CINTERION (_self);
if (!(response = mm_base_modem_at_command_finish (_self, res, &error))) {
+ /* something went wrong, disable indicator */
self->priv->sind_psinfo_support = FEATURE_NOT_SUPPORTED;
mm_obj_warn (self, "couldn't enable ^SIND psinfo notifications: %s", error->message);
} else if (!mm_cinterion_parse_sind_response (response, NULL, &mode, &val, &error)) {
+ /* problem with parsing, disable indicator */
self->priv->sind_psinfo_support = FEATURE_NOT_SUPPORTED;
mm_obj_warn (self, "couldn't parse ^SIND psinfo response: %s", error->message);
} else {
- /* Flag ^SIND psinfo supported so that we don't poll */
- self->priv->sind_psinfo_support = FEATURE_SUPPORTED;
-
/* Report initial access technology gathered right away */
mm_obj_dbg (self, "reporting initial access technologies...");
mm_iface_modem_update_access_technologies (MM_IFACE_MODEM (self),
@@ -807,7 +807,7 @@ parent_enable_unsolicited_events_ready (MMIfaceModem3gpp *_self,
if (!iface_modem_3gpp_parent->enable_unsolicited_events_finish (_self, res, &error))
mm_obj_warn (self, "couldn't enable parent 3GPP unsolicited events: %s", error->message);
- if (self->priv->sind_psinfo_support != FEATURE_NOT_SUPPORTED) {
+ if (self->priv->sind_psinfo_support == FEATURE_SUPPORTED) {
/* Enable access technology update reporting */
mm_base_modem_at_command (MM_BASE_MODEM (self),
"AT^SIND=\"psinfo\",1",
@@ -1708,8 +1708,8 @@ after_sim_unlock_context_step (GTask *task)
self = g_task_get_source_object (task);
ctx = g_task_get_task_data (task);
- if (ctx->retries == 0) {
- /* Too much wait, go on anyway */
+ /* if not supported or too much wait, skip */
+ if (self->priv->sind_simstatus_support != FEATURE_SUPPORTED || ctx->retries == 0) {
g_task_return_boolean (task, TRUE);
g_object_unref (task);
return;
@@ -1726,6 +1726,40 @@ after_sim_unlock_context_step (GTask *task)
}
static void
+sind_indicators_ready (MMBaseModem *_self,
+ GAsyncResult *res,
+ GTask *task)
+{
+ MMBroadbandModemCinterion *self;
+ g_autoptr(GError) error = NULL;
+ const gchar *response;
+
+ self = MM_BROADBAND_MODEM_CINTERION (_self);
+ if (!(response = mm_base_modem_at_command_finish (_self, res, &error))) {
+ self->priv->sind_psinfo_support = FEATURE_NOT_SUPPORTED;
+ mm_obj_dbg (self, "psinfo support? no");
+
+ self->priv->sind_simstatus_support = FEATURE_NOT_SUPPORTED;
+ mm_obj_dbg (self, "simstatus support? no");
+
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
+
+ return;
+ }
+
+ if (g_regex_match_simple ("\\(\\s*psinfo\\s*,", response, 0, 0))
+ self->priv->sind_psinfo_support = FEATURE_SUPPORTED;
+ mm_obj_dbg (self, "psinfo support? %s", self->priv->sind_psinfo_support == FEATURE_SUPPORTED ? "yes":"no");
+
+ if (g_regex_match_simple ("\\(\\s*simstatus\\s*,", response, 0, 0))
+ self->priv->sind_simstatus_support = FEATURE_SUPPORTED;
+ mm_obj_dbg (self, "simstatus support? %s", self->priv->sind_simstatus_support == FEATURE_SUPPORTED ? "yes":"no");
+
+ after_sim_unlock_context_step (task);
+}
+
+static void
after_sim_unlock (MMIfaceModem *self,
GAsyncReadyCallback callback,
gpointer user_data)
@@ -1738,7 +1772,13 @@ after_sim_unlock (MMIfaceModem *self,
ctx->retries = MAX_AFTER_SIM_UNLOCK_RETRIES;
g_task_set_task_data (task, ctx, g_free);
- after_sim_unlock_context_step (task);
+ /* check which indicators are available */
+ mm_base_modem_at_command (MM_BASE_MODEM (self),
+ "AT^SIND=?",
+ 3,
+ FALSE,
+ (GAsyncReadyCallback)sind_indicators_ready,
+ task);
}
/*****************************************************************************/
@@ -1899,9 +1939,10 @@ mm_broadband_modem_cinterion_init (MMBroadbandModemCinterion *self)
MMBroadbandModemCinterionPrivate);
/* Initialize private variables */
- self->priv->sind_psinfo_support = FEATURE_SUPPORT_UNKNOWN;
- self->priv->swwan_support = FEATURE_SUPPORT_UNKNOWN;
- self->priv->smoni_support = FEATURE_SUPPORT_UNKNOWN;
+ self->priv->sind_psinfo_support = FEATURE_SUPPORT_UNKNOWN;
+ self->priv->swwan_support = FEATURE_SUPPORT_UNKNOWN;
+ self->priv->smoni_support = FEATURE_SUPPORT_UNKNOWN;
+ self->priv->sind_simstatus_support = FEATURE_SUPPORT_UNKNOWN;
self->priv->ciev_regex = g_regex_new ("\\r\\n\\+CIEV:\\s*([a-z]+),(\\d+)\\r\\n",
G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);