From bbf1b272e6b894a5e7629ed3350869f4e917afc6 Mon Sep 17 00:00:00 2001 From: Sven Schwermer Date: Fri, 8 Jul 2022 13:10:15 +0200 Subject: [PATCH] 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 --- plugins/fibocom/mm-broadband-modem-fibocom.c | 48 +++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) 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; }