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:
committed by
Dan Williams
parent
8512ff4442
commit
4b0b9dde02
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user