aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2024-03-11 10:49:50 +0000
committerDan Williams <dan@bigw.org>2024-03-13 03:52:35 +0000
commit4b0b9dde0256b408795e1bad4c8f80500ea4b5b4 (patch)
tree029eb516d855e9984b09e80c96255d5c7b147102 /src
parent8512ff444287704a1bba5f3ae8ee9eca5d3b7c5f (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/plugins/fibocom/mm-broadband-modem-fibocom.c50
-rw-r--r--src/plugins/fibocom/mm-broadband-modem-mbim-fibocom.c10
-rw-r--r--src/plugins/fibocom/mm-broadband-modem-mbim-xmm-fibocom.c10
-rw-r--r--src/plugins/fibocom/mm-shared-fibocom.c43
-rw-r--r--src/plugins/fibocom/mm-shared-fibocom.h5
5 files changed, 76 insertions, 42 deletions
diff --git a/src/plugins/fibocom/mm-broadband-modem-fibocom.c b/src/plugins/fibocom/mm-broadband-modem-fibocom.c
index 14011f1f..f86afcb7 100644
--- a/src/plugins/fibocom/mm-broadband-modem-fibocom.c
+++ b/src/plugins/fibocom/mm-broadband-modem-fibocom.c
@@ -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,22 +682,10 @@ 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)
{
iface->create_bearer = modem_create_bearer;
@@ -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;
}
diff --git a/src/plugins/fibocom/mm-broadband-modem-mbim-fibocom.c b/src/plugins/fibocom/mm-broadband-modem-mbim-fibocom.c
index ec2e1a87..9487289c 100644
--- a/src/plugins/fibocom/mm-broadband-modem-mbim-fibocom.c
+++ b/src/plugins/fibocom/mm-broadband-modem-mbim-fibocom.c
@@ -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;
}
diff --git a/src/plugins/fibocom/mm-broadband-modem-mbim-xmm-fibocom.c b/src/plugins/fibocom/mm-broadband-modem-mbim-xmm-fibocom.c
index f1daf807..8592f77e 100644
--- a/src/plugins/fibocom/mm-broadband-modem-mbim-xmm-fibocom.c
+++ b/src/plugins/fibocom/mm-broadband-modem-mbim-xmm-fibocom.c
@@ -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;
}
diff --git a/src/plugins/fibocom/mm-shared-fibocom.c b/src/plugins/fibocom/mm-shared-fibocom.c
index 30416df3..00123567 100644
--- a/src/plugins/fibocom/mm-shared-fibocom.c
+++ b/src/plugins/fibocom/mm-shared-fibocom.c
@@ -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;
diff --git a/src/plugins/fibocom/mm-shared-fibocom.h b/src/plugins/fibocom/mm-shared-fibocom.h
index cbd6e172..441e41af 100644
--- a/src/plugins/fibocom/mm-shared-fibocom.h
+++ b/src/plugins/fibocom/mm-shared-fibocom.h
@@ -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,