diff options
author | Sven Schwermer <sven.schwermer@disruptive-technologies.com> | 2022-07-08 13:10:15 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2022-07-11 11:50:00 +0000 |
commit | bbf1b272e6b894a5e7629ed3350869f4e917afc6 (patch) | |
tree | 696b5982d0596c14d7dc1f62d6a7a1e238908e32 | |
parent | eebdbc45b5ebd33f74a77ce5f2ed13e149021a8f (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.c | 48 |
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; } |