diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/fibocom/mm-broadband-modem-fibocom.c | 50 | ||||
-rw-r--r-- | src/plugins/fibocom/mm-broadband-modem-mbim-fibocom.c | 10 | ||||
-rw-r--r-- | src/plugins/fibocom/mm-broadband-modem-mbim-xmm-fibocom.c | 10 | ||||
-rw-r--r-- | src/plugins/fibocom/mm-shared-fibocom.c | 43 | ||||
-rw-r--r-- | src/plugins/fibocom/mm-shared-fibocom.h | 5 |
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, |