aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-03-14 19:23:38 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-14 19:23:38 +0100
commitee9e6a1c2a2ab4c535ad77fd62ced7cd97afd959 (patch)
tree0e8c29a713835b62df200ac9cbaeefc58312a1c1
parent492eb068b6e65ddfdc6c7a6f53823c50e8c7bf8b (diff)
option: reset expected unsolicited message handlers06-api
-rw-r--r--plugins/option/mm-broadband-modem-option.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/plugins/option/mm-broadband-modem-option.c b/plugins/option/mm-broadband-modem-option.c
index 05baff5b..d735def2 100644
--- a/plugins/option/mm-broadband-modem-option.c
+++ b/plugins/option/mm-broadband-modem-option.c
@@ -38,6 +38,14 @@ G_DEFINE_TYPE_EXTENDED (MMBroadbandModemOption, mm_broadband_modem_option, MM_TY
G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init));
struct _MMBroadbandModemOptionPrivate {
+ /* Regex for access-technology related notifications */
+ GRegex *_ossysi_regex;
+ GRegex *_octi_regex;
+ GRegex *_ouwcti_regex;
+
+ /* Regex for signal quality related notifications */
+ GRegex *_osigq_regex;
+
guint after_power_up_wait_id;
};
@@ -436,6 +444,34 @@ modem_after_power_up (MMIfaceModem *self,
}
/*****************************************************************************/
+/* Setup ports (Broadband modem class) */
+
+static void
+setup_ports (MMBroadbandModem *self)
+{
+ MMBroadbandModemOption *option = MM_BROADBAND_MODEM_OPTION (self);
+ MMAtSerialPort *primary;
+
+ /* Call parent's setup ports first always */
+ MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_option_parent_class)->setup_ports (self);
+
+ /* Now reset the unsolicited messages we'll handle, only in the primary port! */
+ primary = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
+ mm_at_serial_port_add_unsolicited_msg_handler (primary,
+ option->priv->_ossysi_regex,
+ NULL, NULL, NULL);
+ mm_at_serial_port_add_unsolicited_msg_handler (primary,
+ option->priv->_octi_regex,
+ NULL, NULL, NULL);
+ mm_at_serial_port_add_unsolicited_msg_handler (primary,
+ option->priv->_ouwcti_regex,
+ NULL, NULL, NULL);
+ mm_at_serial_port_add_unsolicited_msg_handler (primary,
+ option->priv->_osigq_regex,
+ NULL, NULL, NULL);
+}
+
+/*****************************************************************************/
MMBroadbandModemOption *
mm_broadband_modem_option_new (const gchar *device,
@@ -454,6 +490,17 @@ mm_broadband_modem_option_new (const gchar *device,
}
static void
+finalize (GObject *object)
+{
+ MMBroadbandModemOption *self = MM_BROADBAND_MODEM_OPTION (object);
+
+ g_regex_unref (self->priv->_ossysi_regex);
+ g_regex_unref (self->priv->_octi_regex);
+ g_regex_unref (self->priv->_ouwcti_regex);
+ g_regex_unref (self->priv->_osigq_regex);
+}
+
+static void
mm_broadband_modem_option_init (MMBroadbandModemOption *self)
{
/* Initialize private data */
@@ -461,6 +508,16 @@ mm_broadband_modem_option_init (MMBroadbandModemOption *self)
MM_TYPE_BROADBAND_MODEM_OPTION,
MMBroadbandModemOptionPrivate);
self->priv->after_power_up_wait_id = 0;
+
+ /* Prepare regular expressions to setup */
+ self->priv->_ossysi_regex = g_regex_new ("\\r\\n_OSSYSI:\\s*(\\d+)\\r\\n",
+ G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
+ self->priv->_octi_regex = g_regex_new ("\\r\\n_OCTI:\\s*(\\d+)\\r\\n",
+ G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
+ self->priv->_ouwcti_regex = g_regex_new ("\\r\\n_OUWCTI:\\s*(\\d+)\\r\\n",
+ G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
+ self->priv->_osigq_regex = g_regex_new ("\\r\\n_OSIGQ:\\s*(\\d+),(\\d)\\r\\n",
+ G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
}
static void
@@ -476,5 +533,10 @@ static void
mm_broadband_modem_option_class_init (MMBroadbandModemOptionClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass);
+
g_type_class_add_private (object_class, sizeof (MMBroadbandModemOptionPrivate));
+
+ object_class->finalize = finalize;
+ broadband_modem_class->setup_ports = setup_ports;
}