aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-08-22 16:11:19 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-08-23 18:56:22 +0200
commit79b4c4b47d39907c0a38d5e13d9e9a6c576b5e9b (patch)
treebf2ed887adbcd9dd3f0bc50e465ea3cadab65b4a
parent96a6e8923ae2d2d418f868a15fbf662c737df09d (diff)
sierra: implement custom ports setup
-rw-r--r--plugins/sierra/mm-broadband-modem-sierra-icera.c15
-rw-r--r--plugins/sierra/mm-broadband-modem-sierra.c15
-rw-r--r--plugins/sierra/mm-common-sierra.c32
-rw-r--r--plugins/sierra/mm-common-sierra.h2
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 */