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>
This commit is contained in:
Sven Schwermer
2022-07-11 11:50:00 +00:00
committed by Aleksander Morgado
parent eebdbc45b5
commit bbf1b272e6
+47 -1
View File
@@ -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;
}