aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Schwermer <sven.schwermer@disruptive-technologies.com>2022-07-08 13:10:15 +0200
committerAleksander Morgado <aleksander@aleksander.es>2022-07-11 11:50:00 +0000
commitbbf1b272e6b894a5e7629ed3350869f4e917afc6 (patch)
tree696b5982d0596c14d7dc1f62d6a7a1e238908e32
parenteebdbc45b5ebd33f74a77ce5f2ed13e149021a8f (diff)
fibocom: Ignore +SIM READY URC
This URC is emitted when the SIM phonebook is initialized. We don't care about that but don't want this URC to mess with the initialization sequence either. Signed-off-by: Sven Schwermer <sven.schwermer@disruptive-technologies.com>
-rw-r--r--plugins/fibocom/mm-broadband-modem-fibocom.c48
1 files changed, 47 insertions, 1 deletions
diff --git a/plugins/fibocom/mm-broadband-modem-fibocom.c b/plugins/fibocom/mm-broadband-modem-fibocom.c
index 41ab2eb8..9a819432 100644
--- a/plugins/fibocom/mm-broadband-modem-fibocom.c
+++ b/plugins/fibocom/mm-broadband-modem-fibocom.c
@@ -34,7 +34,8 @@ typedef enum {
} FeatureSupport;
struct _MMBroadbandModemFibocomPrivate {
- FeatureSupport gtrndis_support;
+ FeatureSupport gtrndis_support;
+ GRegex *sim_ready_regex;
};
/*****************************************************************************/
@@ -188,6 +189,31 @@ modem_reset (MMIfaceModem *self,
/*****************************************************************************/
+static void
+setup_ports (MMBroadbandModem *_self)
+{
+ MMBroadbandModemFibocom *self = (MM_BROADBAND_MODEM_FIBOCOM (_self));
+ MMPortSerialAt *ports[2];
+ guint i;
+
+ /* Call parent's setup ports first always */
+ MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_fibocom_parent_class)->setup_ports (_self);
+
+ ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
+ ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
+
+ for (i = 0; i < G_N_ELEMENTS (ports); i++) {
+ if (!ports[i])
+ continue;
+ mm_port_serial_at_add_unsolicited_msg_handler (
+ ports[i],
+ self->priv->sim_ready_regex,
+ NULL, NULL, NULL);
+ }
+}
+
+/*****************************************************************************/
+
MMBroadbandModemFibocom *
mm_broadband_modem_fibocom_new (const gchar *device,
const gchar **drivers,
@@ -214,6 +240,19 @@ mm_broadband_modem_fibocom_init (MMBroadbandModemFibocom *self)
MMBroadbandModemFibocomPrivate);
self->priv->gtrndis_support = FEATURE_SUPPORT_UNKNOWN;
+
+ self->priv->sim_ready_regex = g_regex_new ("\\r\\n\\+SIM READY\\r\\n",
+ G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
+}
+
+static void
+finalize (GObject *object)
+{
+ MMBroadbandModemFibocom *self = MM_BROADBAND_MODEM_FIBOCOM (object);
+
+ g_regex_unref (self->priv->sim_ready_regex);
+
+ G_OBJECT_CLASS (mm_broadband_modem_fibocom_parent_class)->finalize (object);
}
static void
@@ -228,6 +267,13 @@ iface_modem_init (MMIfaceModem *iface)
static void
mm_broadband_modem_fibocom_class_init (MMBroadbandModemFibocomClass *klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass);
+
g_type_class_add_private (G_OBJECT_CLASS (klass),
sizeof (MMBroadbandModemFibocomPrivate));
+
+ /* Virtual methods */
+ object_class->finalize = finalize;
+ broadband_modem_class->setup_ports = setup_ports;
}