fibocom: setup common shared setup ports in all modems

Make sure all Fibocom modem implementations use the shared port setup
logic that adds the SIM READY URC ignore rule.
This commit is contained in:
Aleksander Morgado
2024-03-13 03:52:35 +00:00
committed by Dan Williams
parent 8512ff4442
commit 4b0b9dde02
5 changed files with 76 additions and 42 deletions
@@ -49,7 +49,6 @@ typedef enum {
struct _MMBroadbandModemFibocomPrivate {
FeatureSupport gtrndis_support;
GRegex *sim_ready_regex;
FeatureSupport initial_eps_bearer_support;
gint initial_eps_bearer_cid;
};
@@ -655,31 +654,6 @@ modem_3gpp_profile_manager_deactivate_profile (MMIfaceModem3gppProfileManager *_
/*****************************************************************************/
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 *physdev,
@@ -708,21 +682,9 @@ 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);
self->priv->initial_eps_bearer_support = FEATURE_SUPPORT_UNKNOWN;
}
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
iface_modem_init (MMIfaceModem *iface)
{
@@ -765,6 +727,12 @@ iface_modem_firmware_init (MMIfaceModemFirmware *iface)
iface->load_update_settings_finish = mm_shared_fibocom_firmware_load_update_settings_finish;
}
static MMBroadbandModemClass *
peek_parent_broadband_modem_class (MMSharedFibocom *self)
{
return MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_fibocom_parent_class);
}
static MMIfaceModem3gpp *
peek_parent_3gpp_interface (MMSharedFibocom *self)
{
@@ -774,19 +742,17 @@ peek_parent_3gpp_interface (MMSharedFibocom *self)
static void
shared_fibocom_init (MMSharedFibocom *iface)
{
iface->peek_parent_broadband_modem_class = peek_parent_broadband_modem_class;
iface->peek_parent_3gpp_interface = peek_parent_3gpp_interface;
}
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;
broadband_modem_class->setup_ports = mm_shared_fibocom_setup_ports;
}
@@ -85,6 +85,12 @@ iface_modem_firmware_init (MMIfaceModemFirmware *iface)
iface->load_update_settings_finish = mm_shared_fibocom_firmware_load_update_settings_finish;
}
static MMBroadbandModemClass *
peek_parent_broadband_modem_class (MMSharedFibocom *self)
{
return MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_mbim_fibocom_parent_class);
}
static MMIfaceModem3gpp *
peek_parent_3gpp_interface (MMSharedFibocom *self)
{
@@ -94,10 +100,14 @@ peek_parent_3gpp_interface (MMSharedFibocom *self)
static void
shared_fibocom_init (MMSharedFibocom *iface)
{
iface->peek_parent_broadband_modem_class = peek_parent_broadband_modem_class;
iface->peek_parent_3gpp_interface = peek_parent_3gpp_interface;
}
static void
mm_broadband_modem_mbim_fibocom_class_init (MMBroadbandModemMbimFibocomClass *klass)
{
MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass);
broadband_modem_class->setup_ports = mm_shared_fibocom_setup_ports;
}
@@ -88,6 +88,12 @@ iface_modem_firmware_init (MMIfaceModemFirmware *iface)
iface->load_update_settings_finish = mm_shared_fibocom_firmware_load_update_settings_finish;
}
static MMBroadbandModemClass *
peek_parent_broadband_modem_class (MMSharedFibocom *self)
{
return MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_mbim_xmm_fibocom_parent_class);
}
static MMIfaceModem3gpp *
peek_parent_3gpp_interface (MMSharedFibocom *self)
{
@@ -97,10 +103,14 @@ peek_parent_3gpp_interface (MMSharedFibocom *self)
static void
shared_fibocom_init (MMSharedFibocom *iface)
{
iface->peek_parent_broadband_modem_class = peek_parent_broadband_modem_class;
iface->peek_parent_3gpp_interface = peek_parent_3gpp_interface;
}
static void
mm_broadband_modem_mbim_xmm_fibocom_class_init (MMBroadbandModemMbimXmmFibocomClass *klass)
{
MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass);
broadband_modem_class->setup_ports = mm_shared_fibocom_setup_ports;
}
+43
View File
@@ -37,13 +37,18 @@
static GQuark private_quark;
typedef struct {
/* Broadband modem class support */
MMBroadbandModemClass *broadband_modem_class_parent;
/* 3GPP interface support */
MMIfaceModem3gpp *iface_modem_3gpp_parent;
/* URCs to ignore */
GRegex *sim_ready_regex;
} Private;
static void
private_free (Private *priv)
{
g_regex_unref (priv->sim_ready_regex);
g_slice_free (Private, priv);
}
@@ -59,6 +64,13 @@ get_private (MMSharedFibocom *self)
if (!priv) {
priv = g_slice_new0 (Private);
priv->sim_ready_regex = g_regex_new ("\\r\\n\\+SIM READY\\r\\n",
G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
/* Setup parent class' MMBroadbandModemClass */
g_assert (MM_SHARED_FIBOCOM_GET_INTERFACE (self)->peek_parent_broadband_modem_class);
priv->broadband_modem_class_parent = MM_SHARED_FIBOCOM_GET_INTERFACE (self)->peek_parent_broadband_modem_class (self);
/* Setup parent class' MMIfaceModem3gpp */
g_assert (MM_SHARED_FIBOCOM_GET_INTERFACE (self)->peek_parent_3gpp_interface);
priv->iface_modem_3gpp_parent = MM_SHARED_FIBOCOM_GET_INTERFACE (self)->peek_parent_3gpp_interface (self);
@@ -71,6 +83,37 @@ get_private (MMSharedFibocom *self)
/*****************************************************************************/
void
mm_shared_fibocom_setup_ports (MMBroadbandModem *self)
{
MMPortSerialAt *ports[2];
guint i;
Private *priv;
mm_obj_dbg (self, "setting up ports in fibocom modem...");
priv = get_private (MM_SHARED_FIBOCOM (self));
g_assert (priv->broadband_modem_class_parent);
g_assert (priv->broadband_modem_class_parent->setup_ports);
/* Parent setup first always */
priv->broadband_modem_class_parent->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],
priv->sim_ready_regex,
NULL, NULL, NULL);
}
}
/*****************************************************************************/
typedef struct {
MMBearerProperties *config;
gboolean initial_eps_off_on;
+5
View File
@@ -37,12 +37,17 @@ typedef struct _MMSharedFibocom MMSharedFibocom;
struct _MMSharedFibocom {
GTypeInterface g_iface;
/* Peek broadband modem class of the parent class of the object */
MMBroadbandModemClass * (* peek_parent_broadband_modem_class) (MMSharedFibocom *self);
/* Peek 3GPP interface of the parent class of the object */
MMIfaceModem3gpp * (* peek_parent_3gpp_interface) (MMSharedFibocom *self);
};
GType mm_shared_fibocom_get_type (void);
void mm_shared_fibocom_setup_ports (MMBroadbandModem *self);
void mm_shared_fibocom_set_initial_eps_bearer_settings (MMIfaceModem3gpp *self,
MMBearerProperties *config,
GAsyncReadyCallback callback,