diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mm-modem-hso.c | 46 | ||||
-rw-r--r-- | plugins/mm-modem-huawei.c | 342 | ||||
-rw-r--r-- | plugins/mm-modem-mbm.c | 71 |
3 files changed, 97 insertions, 362 deletions
diff --git a/plugins/mm-modem-hso.c b/plugins/mm-modem-hso.c index 9c9d7d20..26b986cd 100644 --- a/plugins/mm-modem-hso.c +++ b/plugins/mm-modem-hso.c @@ -12,7 +12,6 @@ #include "mm-serial.h" #include "mm-serial-parsers.h" #include "mm-errors.h" -#include "mm-util.h" #include "mm-callback-info.h" static void impl_hso_authenticate (MMModemHso *self, @@ -27,9 +26,6 @@ static gpointer mm_modem_hso_parent_class = NULL; #define MM_MODEM_HSO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_MODEM_HSO, MMModemHsoPrivate)) typedef struct { - GRegex *connection_enabled_regex; - gpointer std_parser; - /* Pending connection attempt */ MMCallbackInfo *connect_pending_data; guint connect_pending_id; @@ -412,25 +408,20 @@ impl_hso_authenticate (MMModemHso *self, } static void -connection_enabled (const char *str, gpointer data) -{ - if (str && strlen (str) == 4) { - if (str[3] == '1') - connect_pending_done (MM_MODEM_HSO (data)); - if (str[3] == '0') - /* FIXME: disconnected. do something when we have modem status signals */ - ; - } -} - -static gboolean -hso_parse_response (gpointer data, GString *response, GError **error) +connection_enabled (MMSerial *serial, + GMatchInfo *info, + gpointer user_data) { - MMModemHsoPrivate *priv = MM_MODEM_HSO_GET_PRIVATE (data); + char *str; - mm_util_strip_string (response, priv->connection_enabled_regex, connection_enabled, data); + str = g_match_info_fetch (info, 2); + if (str[0] == '1') + connect_pending_done (MM_MODEM_HSO (serial)); + else if (str[0] == '0') + /* FIXME: disconnected. do something when we have modem status signals */ + ; - return mm_serial_parser_v1_parse (priv->std_parser, response, error); + g_free (str); } /*****************************************************************************/ @@ -525,13 +516,13 @@ simple_connect (MMModemSimple *simple, static void mm_modem_hso_init (MMModemHso *self) { - MMModemHsoPrivate *priv = MM_MODEM_HSO_GET_PRIVATE (self); + GRegex *regex; - priv->connection_enabled_regex = g_regex_new ("_OWANCALL: (\\d, \\d)\\r\\n", - G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + mm_generic_gsm_set_unsolicited_registration (MM_GENERIC_GSM (self), TRUE); - priv->std_parser = (gpointer) mm_serial_parser_v1_new (); - mm_serial_set_response_parser (MM_SERIAL (self), hso_parse_response, self, NULL); + regex = g_regex_new ("_OWANCALL: (\\d), (\\d)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + mm_serial_add_unsolicited_msg_handler (MM_SERIAL (self), regex, connection_enabled, NULL, NULL); + g_regex_unref (regex); } static void @@ -585,14 +576,9 @@ constructor (GType type, static void finalize (GObject *object) { - MMModemHsoPrivate *priv = MM_MODEM_HSO_GET_PRIVATE (object); - /* Clear the pending connection if necessary */ connect_pending_done (MM_MODEM_HSO (object)); - g_regex_unref (priv->connection_enabled_regex); - mm_serial_parser_v1_destroy (priv->std_parser); - G_OBJECT_CLASS (mm_modem_hso_parent_class)->finalize (object); } diff --git a/plugins/mm-modem-huawei.c b/plugins/mm-modem-huawei.c index e607ce7f..0afb1168 100644 --- a/plugins/mm-modem-huawei.c +++ b/plugins/mm-modem-huawei.c @@ -7,30 +7,16 @@ #include "mm-modem-gsm-network.h" #include "mm-errors.h" #include "mm-callback-info.h" -#include "mm-util.h" #include "mm-serial-parsers.h" static gpointer mm_modem_huawei_parent_class = NULL; -static void pending_registration_stop (MMModemHuawei *self); - #define MM_MODEM_HUAWEI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_MODEM_HUAWEI, MMModemHuaweiPrivate)) typedef struct { MMSerial *monitor_device; - gpointer std_parser; - - /* Unsolicited message regexps */ - GRegex *signal_quality_regex; - GRegex *mode_regex; - GRegex *status_regex; - GRegex *reg_state_regex; - - /* Pending operations */ - guint pending_registration; /* Cached state */ - MMModemGsmNetworkRegStatus reg_status; guint signal_quality; MMModemGsmNetworkMode mode; MMModemGsmNetworkBand band; @@ -53,195 +39,6 @@ mm_modem_huawei_new (const char *data_device, NULL)); } -static void -reg_status_updated (MMModemHuawei *self, int new_status) -{ - MMModemHuaweiPrivate *priv = MM_MODEM_HUAWEI_GET_PRIVATE (self); - - switch (new_status) { - case 0: - priv->reg_status = MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE; - break; - case 1: - priv->reg_status = MM_MODEM_GSM_NETWORK_REG_STATUS_HOME; - break; - case 2: - priv->reg_status = MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING; - break; - case 3: - priv->reg_status = MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED; - break; - case 4: - priv->reg_status = MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN; - break; - case 5: - priv->reg_status = MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING; - break; - default: - priv->reg_status = MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN; - break; - } - - /* Stop the pending registration in case of success or certain failure */ - if (priv->reg_status == MM_MODEM_GSM_NETWORK_REG_STATUS_HOME || - priv->reg_status == MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING || - priv->reg_status == MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED) - - pending_registration_stop (self); - - g_debug ("Registration state changed: %d\n", priv->reg_status); - mm_generic_gsm_set_reg_status (MM_GENERIC_GSM (self), priv->reg_status); -} - -static void -got_reg_status (MMSerial *serial, - GString *response, - GError *error, - gpointer user_data) -{ - if (error) - g_warning ("Error getting registration status: %s", error->message); - else if (g_str_has_prefix (response->str, "+CREG: ")) { - /* Got valid reply */ - int n, stat; - - if (sscanf (response->str + 7, "%d,%d", &n, &stat)) - reg_status_updated (MM_MODEM_HUAWEI (serial), stat); - } -} - -static void -parent_enable_done (MMModem *modem, GError *error, gpointer user_data) -{ - MMCallbackInfo *info = (MMCallbackInfo *) user_data; - - if (error) - info->error = g_error_copy (error); - else { - /* Enable unsolicited registration state changes and get the current state */ - mm_serial_queue_command (MM_SERIAL (modem), "+CREG=1", 5, NULL, NULL); - mm_serial_queue_command (MM_SERIAL (modem), "+CREG?", 5, got_reg_status, NULL); - } - - mm_callback_info_schedule (info); -} - -static void -enable (MMModem *modem, - gboolean do_enable, - MMModemFn callback, - gpointer user_data) -{ - MMModem *parent_modem_iface; - - parent_modem_iface = g_type_interface_peek_parent (MM_MODEM_GET_INTERFACE (modem)); - - if (do_enable) { - MMCallbackInfo *info; - - info = mm_callback_info_new (modem, callback, user_data); - parent_modem_iface->enable (modem, do_enable, parent_enable_done, info); - } else { - pending_registration_stop (MM_MODEM_HUAWEI (modem)); - parent_modem_iface->enable (modem, do_enable, callback, user_data); - } -} - -static void -pending_registration_set (MMModemHuawei *self, guint tag) -{ - MM_MODEM_HUAWEI_GET_PRIVATE (self)->pending_registration = tag; -} - -static void -pending_registration_stop (MMModemHuawei *self) -{ - guint tag; - - tag = MM_MODEM_HUAWEI_GET_PRIVATE (self)->pending_registration; - if (tag) - g_source_remove (tag); -} - -static void -pending_registration_cleanup (gpointer data) -{ - MMCallbackInfo *info = (MMCallbackInfo *) data; - - if (!info->error) { - switch (MM_MODEM_HUAWEI_GET_PRIVATE (info->modem)->reg_status) { - case MM_MODEM_GSM_NETWORK_REG_STATUS_HOME: - case MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING: - /* Successfully registered */ - break; - case MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED: - info->error = mm_mobile_error_for_code (MM_MOBILE_ERROR_NETWORK_NOT_ALLOWED); - break; - case MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING: - info->error = mm_mobile_error_for_code (MM_MOBILE_ERROR_NETWORK_TIMEOUT); - break; - case MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE: - info->error = mm_mobile_error_for_code (MM_MOBILE_ERROR_NO_NETWORK); - break; - default: - info->error = mm_mobile_error_for_code (MM_MOBILE_ERROR_UNKNOWN); - break; - } - } - - pending_registration_set (MM_MODEM_HUAWEI (info->modem), 0); - mm_callback_info_schedule (info); -} - -static gboolean -pending_registration_timed_out (gpointer data) -{ - return FALSE; -} - -static void -register_done (MMSerial *serial, - GString *response, - GError *error, - gpointer user_data) -{ - MMCallbackInfo *info = (MMCallbackInfo *) user_data; - - if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } else { - /* Add a timeout to wait for the unsolicited "connected" message */ - pending_registration_set (MM_MODEM_HUAWEI (serial), - g_timeout_add_seconds_full (G_PRIORITY_DEFAULT, 60, - pending_registration_timed_out, - info, - pending_registration_cleanup)); - - mm_serial_queue_command (serial, "+CREG?", 5, got_reg_status, NULL); - } -} - -static void -do_register (MMModemGsmNetwork *modem, - const char *network_id, - MMModemFn callback, - gpointer user_data) -{ - MMCallbackInfo *info; - char *command; - - info = mm_callback_info_new (MM_MODEM (modem), callback, user_data); - - if (network_id) - command = g_strdup_printf ("+COPS=1,2,\"%s\"", network_id); - else - command = g_strdup ("+COPS=0,,"); - - mm_serial_queue_command (MM_SERIAL (modem), command, 5, register_done, info); - g_free (command); -} - static gboolean parse_syscfg (MMModemHuawei *self, const char *reply, @@ -568,12 +365,19 @@ get_signal_quality (MMModemGsmNetwork *modem, } } -/* Unsolicited messages */ +/* Unsolicited message handlers */ static void -handle_signal_quality_change (const char *str, gpointer data) +handle_signal_quality_change (MMSerial *serial, + GMatchInfo *match_info, + gpointer user_data) { - int quality = atoi (str); + char *str; + int quality; + + str = g_match_info_fetch (match_info, 1); + quality = atoi (str); + g_free (str); if (quality == 99) /* 99 means unknown */ @@ -583,79 +387,66 @@ handle_signal_quality_change (const char *str, gpointer data) quality = quality * 100 / 31; g_debug ("Signal quality: %d", quality); - MM_MODEM_HUAWEI_GET_PRIVATE (data)->signal_quality = (guint32) quality; - mm_modem_gsm_network_signal_quality (MM_MODEM_GSM_NETWORK (data), (guint32) quality); + MM_MODEM_HUAWEI_GET_PRIVATE (serial)->signal_quality = (guint32) quality; + mm_modem_gsm_network_signal_quality (MM_MODEM_GSM_NETWORK (serial), (guint32) quality); } static void -handle_mode_change (const char *str, gpointer data) +handle_mode_change (MMSerial *serial, + GMatchInfo *match_info, + gpointer user_data) { + MMModemHuaweiPrivate *priv = MM_MODEM_HUAWEI_GET_PRIVATE (serial); + char *str; int a; int b; - if (sscanf (str, "%d,%d", &a, &b)) { - MMModemHuaweiPrivate *priv = MM_MODEM_HUAWEI_GET_PRIVATE (data); - - if (a == 3 && b == 2) - priv->mode = MM_MODEM_GSM_NETWORK_MODE_GPRS; - else if (a == 3 && b == 3) - priv->mode = MM_MODEM_GSM_NETWORK_MODE_EDGE; - else if (a == 5 && b == 4) - priv->mode = MM_MODEM_GSM_NETWORK_MODE_3G; - else if (a ==5 && b == 5) - priv->mode = MM_MODEM_GSM_NETWORK_MODE_HSDPA; - else { - g_warning ("Couldn't parse mode change value: '%s'", str); - return; - } - - g_debug ("Mode: %d", priv->mode); - mm_modem_gsm_network_mode (MM_MODEM_GSM_NETWORK (data), priv->mode); + str = g_match_info_fetch (match_info, 1); + a = atoi (str); + g_free (str); + + str = g_match_info_fetch (match_info, 2); + b = atoi (str); + g_free (str); + + if (a == 3 && b == 2) + priv->mode = MM_MODEM_GSM_NETWORK_MODE_GPRS; + else if (a == 3 && b == 3) + priv->mode = MM_MODEM_GSM_NETWORK_MODE_EDGE; + else if (a == 5 && b == 4) + priv->mode = MM_MODEM_GSM_NETWORK_MODE_3G; + else if (a == 5 && b == 5) + priv->mode = MM_MODEM_GSM_NETWORK_MODE_HSDPA; + else { + g_warning ("Couldn't parse mode change value: '%s'", str); + return; } + + g_debug ("Mode: %d", priv->mode); + mm_modem_gsm_network_mode (MM_MODEM_GSM_NETWORK (serial), priv->mode); } static void -handle_status_change (const char *str, gpointer data) +handle_status_change (MMSerial *serial, + GMatchInfo *match_info, + gpointer user_data) { + char *str; int n1, n2, n3, n4, n5, n6, n7; + str = g_match_info_fetch (match_info, 1); if (sscanf (str, "%x,%x,%x,%x,%x,%x,%x", &n1, &n2, &n3, &n4, &n5, &n6, &n7)) { g_debug ("Duration: %d Up: %d Kbps Down: %d Kbps Total: %d Total: %d\n", n1, n2 * 8 / 1000, n3 * 8 / 1000, n4 / 1024, n5 / 1024); } -} - -static void -reg_state_changed (const char *str, gpointer data) -{ - reg_status_updated (MM_MODEM_HUAWEI (data), atoi (str)); -} - -static gboolean -huawei_parse_response (gpointer data, GString *response, GError **error) -{ - MMModemHuaweiPrivate *priv = MM_MODEM_HUAWEI_GET_PRIVATE (data); - - mm_util_strip_string (response, priv->signal_quality_regex, handle_signal_quality_change, data); - mm_util_strip_string (response, priv->mode_regex, handle_mode_change, data); - mm_util_strip_string (response, priv->status_regex, handle_status_change, data); - mm_util_strip_string (response, priv->reg_state_regex, reg_state_changed, data); - - return mm_serial_parser_v1_parse (priv->std_parser, response, error); + g_free (str); } /*****************************************************************************/ static void -modem_init (MMModem *modem_class) -{ - modem_class->enable = enable; -} - -static void modem_gsm_network_init (MMModemGsmNetwork *class) { - class->do_register = do_register; class->set_network_mode = set_network_mode; class->get_network_mode = get_network_mode; class->set_band = set_band; @@ -666,33 +457,21 @@ modem_gsm_network_init (MMModemGsmNetwork *class) static void mm_modem_huawei_init (MMModemHuawei *self) { - MMModemHuaweiPrivate *priv = MM_MODEM_HUAWEI_GET_PRIVATE (self); - - priv->reg_status = MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN; - - priv->signal_quality_regex = g_regex_new ("\\r\\n\\^RSSI:(\\d+)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - priv->mode_regex = g_regex_new ("\\r\\n\\^MODE:(.+)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - priv->status_regex = g_regex_new ("\\r\\n\\^DSFLOWRPT:(.+)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - priv->reg_state_regex = g_regex_new ("\\r\\n\\+CREG: (\\d+)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + GRegex *regex; - priv->std_parser = mm_serial_parser_v1_new (); - mm_serial_set_response_parser (MM_SERIAL (self), huawei_parse_response, self, NULL); -} - -static void -finalize (GObject *object) -{ - MMModemHuaweiPrivate *priv = MM_MODEM_HUAWEI_GET_PRIVATE (object); + mm_generic_gsm_set_unsolicited_registration (MM_GENERIC_GSM (self), TRUE); - pending_registration_stop (MM_MODEM_HUAWEI (object)); + regex = g_regex_new ("\\r\\n\\^RSSI:(\\d+)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + mm_serial_add_unsolicited_msg_handler (MM_SERIAL (self), regex, handle_signal_quality_change, NULL, NULL); + g_regex_unref (regex); - mm_serial_parser_v1_destroy (priv->std_parser); - g_regex_unref (priv->signal_quality_regex); - g_regex_unref (priv->mode_regex); - g_regex_unref (priv->status_regex); - g_regex_unref (priv->reg_state_regex); + regex = g_regex_new ("\\r\\n\\^MODE:(\\d),(\\d)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + mm_serial_add_unsolicited_msg_handler (MM_SERIAL (self), regex, handle_mode_change, NULL, NULL); + g_regex_unref (regex); - G_OBJECT_CLASS (mm_modem_huawei_parent_class)->finalize (object); + regex = g_regex_new ("\\r\\n\\^DSFLOWRPT:(.+)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + mm_serial_add_unsolicited_msg_handler (MM_SERIAL (self), regex, handle_status_change, NULL, NULL); + g_regex_unref (regex); } static void @@ -702,9 +481,6 @@ mm_modem_huawei_class_init (MMModemHuaweiClass *klass) mm_modem_huawei_parent_class = g_type_class_peek_parent (klass); g_type_class_add_private (object_class, sizeof (MMModemHuaweiPrivate)); - - /* Virtual methods */ - object_class->finalize = finalize; } GType @@ -725,17 +501,11 @@ mm_modem_huawei_get_type (void) (GInstanceInitFunc) mm_modem_huawei_init, }; - static const GInterfaceInfo modem_iface_info = { - (GInterfaceInitFunc) modem_init - }; - static const GInterfaceInfo modem_gsm_network_info = { (GInterfaceInitFunc) modem_gsm_network_init }; modem_huawei_type = g_type_register_static (MM_TYPE_GENERIC_GSM, "MMModemHuawei", &modem_huawei_type_info, 0); - - g_type_add_interface_static (modem_huawei_type, MM_TYPE_MODEM, &modem_iface_info); g_type_add_interface_static (modem_huawei_type, MM_TYPE_MODEM_GSM_NETWORK, &modem_gsm_network_info); } diff --git a/plugins/mm-modem-mbm.c b/plugins/mm-modem-mbm.c index 6d52fc29..f527894e 100644 --- a/plugins/mm-modem-mbm.c +++ b/plugins/mm-modem-mbm.c @@ -39,17 +39,12 @@ #include "mm-serial-parsers.h" #include "mm-errors.h" #include "mm-callback-info.h" -#include "mm-util.h" static gpointer mm_modem_mbm_parent_class = NULL; #define MM_MODEM_MBM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_MODEM_MBM, MMModemMbmPrivate)) typedef struct { - GRegex *boot_trig_regex; - GRegex *msg_waiting_regex; - GRegex *ciev_regex; - gpointer std_parser; guint32 signal_quality; } MMModemMbmPrivate; @@ -374,28 +369,34 @@ get_signal_quality (MMModemGsmNetwork *modem, /*****************************************************************************/ static void -boot_trig (const char *str, gpointer data) +boot_trig (MMSerial *serial, + GMatchInfo *match_info, + gpointer user_data) { - mm_serial_queue_command (MM_SERIAL(data), "AT*ENAP=1,1", 10, NULL, NULL); + mm_serial_queue_command (serial, "AT*ENAP=1,1", 10, NULL, NULL); } static void -ciev_trig (const char *str, gpointer data) +ciev_trig (MMSerial *serial, + GMatchInfo *match_info, + gpointer user_data) { + char *str; int event, value; guint32 quality; - if (!str) { - return; - } - + str = g_match_info_fetch (match_info, 1); event = str[0] - '0'; - value = str[2] - '0'; + g_free (str); + + str = g_match_info_fetch (match_info, 2); + value = str[0] - '0'; + g_free (str); switch (event) { case 2: /* signal quality, value 0-5 */ quality = value * 100 / 5; - mm_modem_gsm_network_signal_quality (MM_MODEM_GSM_NETWORK (data), quality); + mm_modem_gsm_network_signal_quality (MM_MODEM_GSM_NETWORK (serial), quality); break; case 9: /* roaming, value 0 or 1 */ g_debug ("%s: roaming %s\n", __FUNCTION__, value ? "active" : "inactive"); @@ -405,30 +406,22 @@ ciev_trig (const char *str, gpointer data) } } -static gboolean -mbm_parse_response (gpointer data, GString *response, GError **error) -{ - MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (data); - - mm_util_strip_string (response, priv->boot_trig_regex, boot_trig, data); - mm_util_strip_string (response, priv->ciev_regex, ciev_trig, data); - mm_util_strip_string (response, priv->msg_waiting_regex, NULL, data); - - return mm_serial_parser_v1_parse (priv->std_parser, response, error); -} - static void mm_modem_mbm_init (MMModemMbm *self) { - MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (self); + GRegex *regex; - priv->boot_trig_regex = g_regex_new ("\\r\\n\\+PACSP0\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - priv->msg_waiting_regex = g_regex_new ("\\r\\n[\\*]EMWI\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - priv->ciev_regex = g_regex_new ("\\r\\n\\+CIEV: (.,.)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + regex = g_regex_new ("\\r\\n\\+PACSP0\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + mm_serial_add_unsolicited_msg_handler (MM_SERIAL (self), regex, boot_trig, NULL, NULL); + g_regex_unref (regex); - priv->std_parser = (gpointer) mm_serial_parser_v1_new (); + regex = g_regex_new ("\\r\\n[\\*]EMWI\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + mm_serial_add_unsolicited_msg_handler (MM_SERIAL (self), regex, NULL, NULL, NULL); + g_regex_unref (regex); - mm_serial_set_response_parser (MM_SERIAL (self), mbm_parse_response, self, NULL); + regex = g_regex_new ("\\r\\n\\+CIEV: (\\d),(\\d)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + mm_serial_add_unsolicited_msg_handler (MM_SERIAL (self), regex, ciev_trig, NULL, NULL); + g_regex_unref (regex); } static void @@ -480,19 +473,6 @@ constructor (GType type, } static void -finalize (GObject *object) -{ - MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (object); - - mm_serial_parser_v1_destroy (priv->std_parser); - g_regex_unref (priv->boot_trig_regex); - g_regex_unref (priv->msg_waiting_regex); - g_regex_unref (priv->ciev_regex); - - G_OBJECT_CLASS (mm_modem_mbm_parent_class)->finalize (object); -} - -static void mm_modem_mbm_class_init (MMModemMbmClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -502,7 +482,6 @@ mm_modem_mbm_class_init (MMModemMbmClass *klass) /* Virtual methods */ object_class->constructor = constructor; - object_class->finalize = finalize; } GType |