diff options
-rw-r--r-- | plugins/sierra/mm-broadband-modem-sierra-icera.c | 15 | ||||
-rw-r--r-- | plugins/sierra/mm-broadband-modem-sierra.c | 15 | ||||
-rw-r--r-- | plugins/sierra/mm-common-sierra.c | 32 | ||||
-rw-r--r-- | plugins/sierra/mm-common-sierra.h | 2 |
4 files changed, 64 insertions, 0 deletions
diff --git a/plugins/sierra/mm-broadband-modem-sierra-icera.c b/plugins/sierra/mm-broadband-modem-sierra-icera.c index 969e8d60..fb8d9ba1 100644 --- a/plugins/sierra/mm-broadband-modem-sierra-icera.c +++ b/plugins/sierra/mm-broadband-modem-sierra-icera.c @@ -36,6 +36,18 @@ G_DEFINE_TYPE_EXTENDED (MMBroadbandModemSierraIcera, mm_broadband_modem_sierra_i G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init)) /*****************************************************************************/ +/* Setup ports (Broadband modem class) */ + +static void +setup_ports (MMBroadbandModem *self) +{ + /* Call parent's setup ports first always */ + MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_sierra_icera_parent_class)->setup_ports (self); + + mm_common_sierra_setup_ports (self); +} + +/*****************************************************************************/ MMBroadbandModemSierraIcera * mm_broadband_modem_sierra_icera_new (const gchar *device, @@ -70,4 +82,7 @@ iface_modem_init (MMIfaceModem *iface) static void mm_broadband_modem_sierra_icera_class_init (MMBroadbandModemSierraIceraClass *klass) { + MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass); + + broadband_modem_class->setup_ports = setup_ports; } diff --git a/plugins/sierra/mm-broadband-modem-sierra.c b/plugins/sierra/mm-broadband-modem-sierra.c index 5b61d176..f07c9b07 100644 --- a/plugins/sierra/mm-broadband-modem-sierra.c +++ b/plugins/sierra/mm-broadband-modem-sierra.c @@ -384,6 +384,18 @@ set_allowed_modes (MMIfaceModem *self, } /*****************************************************************************/ +/* Setup ports (Broadband modem class) */ + +static void +setup_ports (MMBroadbandModem *self) +{ + /* Call parent's setup ports first always */ + MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_sierra_parent_class)->setup_ports (self); + + mm_common_sierra_setup_ports (self); +} + +/*****************************************************************************/ MMBroadbandModemSierra * mm_broadband_modem_sierra_new (const gchar *device, @@ -424,4 +436,7 @@ iface_modem_init (MMIfaceModem *iface) static void mm_broadband_modem_sierra_class_init (MMBroadbandModemSierraClass *klass) { + MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass); + + broadband_modem_class->setup_ports = setup_ports; } diff --git a/plugins/sierra/mm-common-sierra.c b/plugins/sierra/mm-common-sierra.c index 6394bd16..0d06144b 100644 --- a/plugins/sierra/mm-common-sierra.c +++ b/plugins/sierra/mm-common-sierra.c @@ -159,3 +159,35 @@ mm_common_sierra_create_sim (MMIfaceModem *self, callback, user_data); } + +/*****************************************************************************/ +/* Setup ports */ + +void +mm_common_sierra_setup_ports (MMBroadbandModem *self) +{ + MMAtSerialPort *ports[2]; + guint i; + GRegex *pacsp0_regex; + + pacsp0_regex = g_regex_new ("\\r\\n\\+PACSP0\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + + 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 < 2; i++) { + if (!ports[i]) + continue; + + g_object_set (ports[i], + MM_PORT_CARRIER_DETECT, FALSE, + NULL); + + mm_at_serial_port_add_unsolicited_msg_handler ( + ports[i], + pacsp0_regex, + NULL, NULL, NULL); + } + + g_regex_unref (pacsp0_regex); +} diff --git a/plugins/sierra/mm-common-sierra.h b/plugins/sierra/mm-common-sierra.h index 92161e6c..9725652b 100644 --- a/plugins/sierra/mm-common-sierra.h +++ b/plugins/sierra/mm-common-sierra.h @@ -35,4 +35,6 @@ MMSim *mm_common_sierra_create_sim_finish (MMIfaceModem *self, GAsyncResult *res, GError **error); +void mm_common_sierra_setup_ports (MMBroadbandModem *self); + #endif /* MM_COMMON_SIERRA_H */ |