diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mm-modem-hso.c | 33 | ||||
-rw-r--r-- | plugins/mm-modem-mbm.c | 159 | ||||
-rw-r--r-- | plugins/mm-modem-novatel-gsm.c | 67 | ||||
-rw-r--r-- | plugins/mm-modem-option.c | 21 | ||||
-rw-r--r-- | plugins/mm-modem-sierra-gsm.c | 25 | ||||
-rw-r--r-- | plugins/mm-modem-zte.c | 58 |
6 files changed, 166 insertions, 197 deletions
diff --git a/plugins/mm-modem-hso.c b/plugins/mm-modem-hso.c index a2e3b408..f1295e24 100644 --- a/plugins/mm-modem-hso.c +++ b/plugins/mm-modem-hso.c @@ -288,33 +288,30 @@ mm_hso_modem_authenticate (MMModemHso *self, /*****************************************************************************/ static void -generic_done (MMModem *modem, GError *error, gpointer user_data) +enable_done (MMModem *modem, GError *error, gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; - if (error) - info->error = g_error_copy (error); - mm_callback_info_schedule (info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (modem), error, info); } static void parent_enable_done (MMModem *modem, GError *error, gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; + MMGenericGsm *self = MM_GENERIC_GSM (modem); if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } else { - /* HSO needs manual PIN checking */ - mm_generic_gsm_check_pin (MM_GENERIC_GSM (modem), generic_done, info); + mm_generic_gsm_enable_complete (self, error, info); + return; } + + /* HSO needs manual PIN checking */ + mm_generic_gsm_check_pin (self, enable_done, info); } static void -enable (MMModem *modem, - MMModemFn callback, - gpointer user_data) +enable (MMModem *modem, MMModemFn callback, gpointer user_data) { MMModem *parent_modem_iface; MMCallbackInfo *info; @@ -325,6 +322,16 @@ enable (MMModem *modem, } static void +parent_disable_done (MMModem *modem, GError *error, gpointer user_data) +{ + MMCallbackInfo *info = (MMCallbackInfo *) user_data; + + if (error) + info->error = g_error_copy (error); + mm_callback_info_schedule (info); +} + +static void disable_done (MMModem *modem, GError *error, gpointer user_data) @@ -334,7 +341,7 @@ disable_done (MMModem *modem, /* Do the normal disable stuff */ parent_modem_iface = g_type_interface_peek_parent (MM_MODEM_GET_INTERFACE (info->modem)); - parent_modem_iface->disable (info->modem, generic_done, info); + parent_modem_iface->disable (info->modem, parent_disable_done, info); } static void diff --git a/plugins/mm-modem-mbm.c b/plugins/mm-modem-mbm.c index cb0ba816..386409ab 100644 --- a/plugins/mm-modem-mbm.c +++ b/plugins/mm-modem-mbm.c @@ -63,7 +63,7 @@ typedef struct { guint reg_id; gboolean have_emrdy; char *network_device; - MMCallbackInfo *do_connect_done_info; + MMCallbackInfo *pending_connect_info; int account_index; int network_mode; const char *username; @@ -322,9 +322,7 @@ mbm_enable_done (MMSerialPort *port, { MMCallbackInfo *info = (MMCallbackInfo *) user_data; - if (error) - info->error = g_error_copy (error); - mm_callback_info_schedule (info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (info->modem), error, info); } static void @@ -339,6 +337,7 @@ mbm_enap0_done (MMSerialPort *port, if (!priv->network_mode) priv->network_mode = MBM_NETWORK_MODE_ANY; + command = g_strdup_printf ("+CFUN=%d", priv->network_mode); mm_serial_port_queue_command (port, command, 3, mbm_enable_done, info); g_free (command); @@ -354,19 +353,20 @@ mbm_init_done (MMSerialPort *port, MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (info->modem); if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } else { - if (!priv->network_mode) - priv->network_mode = MBM_NETWORK_MODE_ANY; - mm_serial_port_queue_command (port, "*ENAP=0", 3, mbm_enap0_done, info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (info->modem), error, info); + return; } + + if (!priv->network_mode) + priv->network_mode = MBM_NETWORK_MODE_ANY; + + mm_serial_port_queue_command (port, "*ENAP=0", 3, mbm_enap0_done, info); } static void -do_init (MMSerialPort *port, gpointer user_data) +do_init (MMSerialPort *port, MMCallbackInfo *info) { - mm_serial_port_queue_command (port, "&F E0 V1 X4 &C1 +CMEE=1", 3, mbm_init_done, user_data); + mm_serial_port_queue_command (port, "&F E0 V1 X4 &C1 +CMEE=1", 3, mbm_init_done, info); } static void @@ -385,31 +385,21 @@ mbm_emrdy_done (MMSerialPort *port, } else priv->have_emrdy = TRUE; - do_init (port, user_data); + do_init (port, info); } static void -enable (MMModem *modem, - MMModemFn callback, - gpointer user_data) +do_enable (MMGenericGsm *self, MMModemFn callback, gpointer user_data) { - MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (modem); + MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (self); MMCallbackInfo *info; MMSerialPort *primary; - mm_generic_gsm_set_cid (MM_GENERIC_GSM (modem), 0); + info = mm_callback_info_new (MM_MODEM (self), callback, user_data); - info = mm_callback_info_new (modem, callback, user_data); - - primary = mm_generic_gsm_get_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); + primary = mm_generic_gsm_get_port (self, MM_PORT_TYPE_PRIMARY); g_assert (primary); - if (!mm_serial_port_open (primary, &info->error)) { - g_assert (info->error); - mm_callback_info_schedule (info); - return; - } - if (priv->have_emrdy) { /* Modem is ready, no need to check EMRDY */ do_init (primary, info); @@ -418,26 +408,13 @@ enable (MMModem *modem, } static void -parent_disable_done (MMModem *modem, GError *error, gpointer user_data) -{ - MMCallbackInfo *info = (MMCallbackInfo *) user_data; - - if (error) - info->error = g_error_copy (error); - mm_callback_info_schedule (info); -} - -static void disable (MMModem *modem, MMModemFn callback, gpointer user_data) { MMModem *parent_modem_iface; - MMCallbackInfo *info; MMSerialPort *primary; - info = mm_callback_info_new (modem, callback, user_data); - primary = mm_generic_gsm_get_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); g_assert (primary); @@ -446,7 +423,7 @@ disable (MMModem *modem, mm_serial_port_queue_command (primary, "+CMER=0", 5, NULL, NULL); parent_modem_iface = g_type_interface_peek_parent (MM_MODEM_GET_INTERFACE (modem)); - parent_modem_iface->disable (modem, parent_disable_done, info); + parent_modem_iface->disable (modem, callback, user_data); } static void @@ -458,8 +435,10 @@ do_connect (MMModem *modem, MMCallbackInfo *info; MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (modem); + mm_modem_set_state (modem, MM_MODEM_STATE_CONNECTING, MM_MODEM_STATE_REASON_NONE); + info = mm_callback_info_new (modem, callback, user_data); - priv->do_connect_done_info = info; + priv->pending_connect_info = info; mbm_modem_authenticate (MM_MODEM_MBM (modem), priv->username, priv->password, info); } @@ -472,10 +451,15 @@ disconnect (MMModem *modem, MMCallbackInfo *info; MMSerialPort *primary; - info = mm_callback_info_new (modem, callback, user_data); + mm_modem_set_state (modem, MM_MODEM_STATE_DISCONNECTING, MM_MODEM_STATE_REASON_NONE); + primary = mm_generic_gsm_get_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); g_assert (primary); - mm_serial_port_queue_command (primary, "AT*ENAP=0", 3, NULL, info); + mm_serial_port_queue_command (primary, "*ENAP=0", 3, NULL, NULL); + + mm_generic_gsm_update_enabled_state (MM_GENERIC_GSM (modem), FALSE, MM_MODEM_STATE_REASON_NONE); + + info = mm_callback_info_new (modem, callback, user_data); mm_callback_info_schedule (info); } @@ -490,7 +474,7 @@ mbm_emrdy_received (MMSerialPort *port, } static void -mbm_pacsp0_received (MMSerialPort *port, +mbm_pacsp_received (MMSerialPort *port, GMatchInfo *info, gpointer user_data) { @@ -521,9 +505,12 @@ mbm_ciev_received (MMSerialPort *port, static void mbm_do_connect_done (MMModemMbm *self) { - /* unset the poll id which should remove the source in destroy func */ - g_return_if_fail (MM_MODEM_MBM_GET_PRIVATE (self)->do_connect_done_info); - mm_callback_info_schedule (MM_MODEM_MBM_GET_PRIVATE (self)->do_connect_done_info); + MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (self); + + if (priv->pending_connect_info) { + mm_generic_gsm_connect_complete (MM_GENERIC_GSM (self), NULL, priv->pending_connect_info); + priv->pending_connect_info = NULL; + } } static void @@ -553,10 +540,10 @@ mbm_e2nap_received (MMSerialPort *port, } static void -enap_poll_done (MMSerialPort *port, - GString *response, - GError *error, - gpointer user_data) +enap_poll_response (MMSerialPort *port, + GString *response, + GError *error, + gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; guint state; @@ -567,15 +554,20 @@ enap_poll_done (MMSerialPort *port, count = GPOINTER_TO_UINT (mm_callback_info_get_data (info, "mbm-enap-poll-count")); if (sscanf (response->str, "*ENAP: %d", &state) == 1 && state == 1) { - mm_callback_info_schedule (info); - } else { - mm_callback_info_set_data (info, "mbm-enap-poll-count", GUINT_TO_POINTER (++count), NULL); - - /* lets give it about 50 seconds */ - if (count > 50) { - info -> error = mm_modem_connect_error_for_code (MM_MODEM_CONNECT_ERROR_BUSY); - mm_callback_info_schedule (info); - } + /* Success! Connected... */ + mm_generic_gsm_connect_complete (MM_GENERIC_GSM (info->modem), NULL, info); + return; + } + + mm_callback_info_set_data (info, "mbm-enap-poll-count", GUINT_TO_POINTER (++count), NULL); + + /* lets give it about 50 seconds */ + if (count > 50) { + GError *poll_error; + + poll_error = mm_modem_connect_error_for_code (MM_MODEM_CONNECT_ERROR_BUSY); + mm_generic_gsm_connect_complete (MM_GENERIC_GSM (info->modem), poll_error, info); + g_error_free (poll_error); } } @@ -587,8 +579,8 @@ enap_poll (gpointer user_data) g_assert (port); - mm_serial_port_queue_command (port, "AT*ENAP?", 3, enap_poll_done, user_data); - /* we cancle this in the _done function if all is fine */ + mm_serial_port_queue_command (port, "AT*ENAP?", 3, enap_poll_response, user_data); + /* we cancel this in the _done function if all is fine */ return TRUE; } @@ -599,16 +591,17 @@ enap_done (MMSerialPort *port, gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; + guint tid; if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } else { - guint tid = g_timeout_add_seconds (1, enap_poll, user_data); - /* remember poll id as callback info object, with source_remove as free func */ - mm_callback_info_set_data (info, "mbm-enap-poll-id", GUINT_TO_POINTER (tid), (GFreeFunc) g_source_remove); - mm_serial_port_queue_command (port, "AT*E2NAP=1", 3, NULL, NULL); + mm_generic_gsm_connect_complete (MM_GENERIC_GSM (info->modem), error, info); + return; } + + tid = g_timeout_add_seconds (1, enap_poll, user_data); + /* remember poll id as callback info object, with source_remove as free func */ + mm_callback_info_set_data (info, "mbm-enap-poll-id", GUINT_TO_POINTER (tid), (GFreeFunc) g_source_remove); + mm_serial_port_queue_command (port, "AT*E2NAP=1", 3, NULL, NULL); } static void @@ -618,17 +611,19 @@ mbm_auth_done (MMSerialPort *port, gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; + MMGenericGsm *modem = MM_GENERIC_GSM (info->modem); + char *command; + guint32 cid; if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } else { - char *command; - guint32 cid = mm_generic_gsm_get_cid (MM_GENERIC_GSM (info->modem)); - command = g_strdup_printf ("AT*ENAP=1,%d", cid); - mm_serial_port_queue_command (port, command, 3, enap_done, user_data); - g_free (command); + mm_generic_gsm_connect_complete (modem, error, info); + return; } + + cid = mm_generic_gsm_get_cid (modem); + command = g_strdup_printf ("AT*ENAP=1,%d", cid); + mm_serial_port_queue_command (port, command, 3, enap_done, user_data); + g_free (command); } static void @@ -732,8 +727,8 @@ grab_port (MMModem *modem, mm_serial_port_add_unsolicited_msg_handler (MM_SERIAL_PORT (port), regex, mbm_e2nap_received, modem, NULL); g_regex_unref (regex); - regex = g_regex_new ("\\r\\n\\+PACSP0\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - mm_serial_port_add_unsolicited_msg_handler (MM_SERIAL_PORT (port), regex, mbm_pacsp0_received, modem, NULL); + regex = g_regex_new ("\\r\\n\\+PACSP(\\d)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + mm_serial_port_add_unsolicited_msg_handler (MM_SERIAL_PORT (port), regex, mbm_pacsp_received, modem, NULL); g_regex_unref (regex); regex = g_regex_new ("\\r\\n\\+CIEV: (\\d),(\\d)\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); @@ -773,7 +768,6 @@ static void modem_init (MMModem *modem_class) { modem_class->grab_port = grab_port; - modem_class->enable = enable; modem_class->disable = disable; modem_class->connect = do_connect; modem_class->disconnect = disconnect; @@ -801,11 +795,14 @@ static void mm_modem_mbm_class_init (MMModemMbmClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + MMGenericGsmClass *gsm_class = MM_GENERIC_GSM_CLASS (klass); mm_modem_mbm_parent_class = g_type_class_peek_parent (klass); g_type_class_add_private (object_class, sizeof (MMModemMbmPrivate)); /* Virtual methods */ object_class->finalize = finalize; + + gsm_class->do_enable = do_enable; } diff --git a/plugins/mm-modem-novatel-gsm.c b/plugins/mm-modem-novatel-gsm.c index f4f21730..8189627d 100644 --- a/plugins/mm-modem-novatel-gsm.c +++ b/plugins/mm-modem-novatel-gsm.c @@ -56,27 +56,25 @@ init_modem_done (MMSerialPort *port, { MMCallbackInfo *info = (MMCallbackInfo *) user_data; - if (error) - info->error = g_error_copy (error); - - mm_callback_info_schedule (info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (info->modem), error, info); } static void pin_check_done (MMModem *modem, GError *error, gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; + MMGenericGsm *self = MM_GENERIC_GSM (modem); MMSerialPort *primary; if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } else { - /* Finish the initialization */ - primary = mm_generic_gsm_get_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); - g_assert (primary); - mm_serial_port_queue_command (primary, "Z E0 V1 X4 &C1 +CMEE=1;+CFUN=1", 10, init_modem_done, info); + mm_generic_gsm_enable_complete (self, error, info); + return; } + + /* Finish the initialization */ + primary = mm_generic_gsm_get_port (self, MM_PORT_TYPE_PRIMARY); + g_assert (primary); + mm_serial_port_queue_command (primary, "Z E0 V1 X4 &C1 +CMEE=1;+CFUN=1", 10, init_modem_done, info); } static void @@ -88,13 +86,14 @@ pre_init_done (MMSerialPort *port, MMCallbackInfo *info = (MMCallbackInfo *) user_data; if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } else { - /* Now check the PIN explicitly, novatel doesn't seem to report - that it needs it otherwise */ - mm_generic_gsm_check_pin (MM_GENERIC_GSM (info->modem), pin_check_done, info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (info->modem), error, info); + return; } + + /* Now check the PIN explicitly, novatel doesn't seem to report + * that it needs it otherwise. + */ + mm_generic_gsm_check_pin (MM_GENERIC_GSM (info->modem), pin_check_done, info); } static void @@ -102,37 +101,22 @@ enable_flash_done (MMSerialPort *port, GError *error, gpointer user_data) { MMCallbackInfo *info = user_data; - if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - return; - } - - mm_serial_port_queue_command (port, "E0 V1", 3, pre_init_done, user_data); + if (error) + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (info->modem), error, info); + else + mm_serial_port_queue_command (port, "E0 V1", 3, pre_init_done, user_data); } static void -enable (MMModem *modem, - MMModemFn callback, - gpointer user_data) +do_enable (MMGenericGsm *modem, MMModemFn callback, gpointer user_data) { MMCallbackInfo *info; MMSerialPort *primary; - /* First, reset the previously used CID */ - mm_generic_gsm_set_cid (MM_GENERIC_GSM (modem), 0); - - info = mm_callback_info_new (modem, callback, user_data); - - primary = mm_generic_gsm_get_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); + primary = mm_generic_gsm_get_port (modem, MM_PORT_TYPE_PRIMARY); g_assert (primary); - if (!mm_serial_port_open (primary, &info->error)) { - g_assert (info->error); - mm_callback_info_schedule (info); - return; - } - + info = mm_callback_info_new (MM_MODEM (modem), callback, user_data); mm_serial_port_flash (primary, 100, enable_flash_done, info); } @@ -180,7 +164,6 @@ grab_port (MMModem *modem, static void modem_init (MMModem *modem_class) { - modem_class->enable = enable; modem_class->grab_port = grab_port; } @@ -192,6 +175,10 @@ mm_modem_novatel_gsm_init (MMModemNovatelGsm *self) static void mm_modem_novatel_gsm_class_init (MMModemNovatelGsmClass *klass) { + MMGenericGsmClass *gsm_class = MM_GENERIC_GSM_CLASS (klass); + mm_modem_novatel_gsm_parent_class = g_type_class_peek_parent (klass); + + gsm_class->do_enable = do_enable; } diff --git a/plugins/mm-modem-option.c b/plugins/mm-modem-option.c index e0ab0f18..2076ae66 100644 --- a/plugins/mm-modem-option.c +++ b/plugins/mm-modem-option.c @@ -53,9 +53,7 @@ pin_check_done (MMModem *modem, GError *error, gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; - if (error) - info->error = g_error_copy (error); - mm_callback_info_schedule (info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (modem), error, info); } static gboolean @@ -64,9 +62,9 @@ option_enabled (gpointer data) MMCallbackInfo *info = (MMCallbackInfo *) data; /* Now check the PIN explicitly, option doesn't seem to report - that it needs it otherwise */ + * that it needs it otherwise. + */ mm_generic_gsm_check_pin (MM_GENERIC_GSM (info->modem), pin_check_done, info); - return FALSE; } @@ -76,13 +74,14 @@ parent_enable_done (MMModem *modem, GError *error, gpointer user_data) MMCallbackInfo *info = (MMCallbackInfo *) user_data; if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } else { - /* Option returns OK on +CFUN=1 right away but needs some time - to finish initialization */ - g_timeout_add_seconds (10, option_enabled, info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (modem), error, info); + return; } + + /* Option returns OK on +CFUN=1 right away but needs some time + * to finish initialization + */ + g_timeout_add_seconds (10, option_enabled, info); } static void diff --git a/plugins/mm-modem-sierra-gsm.c b/plugins/mm-modem-sierra-gsm.c index ee477d86..ee82234a 100644 --- a/plugins/mm-modem-sierra-gsm.c +++ b/plugins/mm-modem-sierra-gsm.c @@ -53,9 +53,7 @@ pin_check_done (MMModem *modem, GError *error, gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; - if (error) - info->error = g_error_copy (error); - mm_callback_info_schedule (info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (modem), error, info); } static gboolean @@ -64,9 +62,9 @@ sierra_enabled (gpointer data) MMCallbackInfo *info = (MMCallbackInfo *) data; /* Now check the PIN explicitly, sierra doesn't seem to report - that it needs it otherwise */ + * that it needs it otherwise. + */ mm_generic_gsm_check_pin (MM_GENERIC_GSM (info->modem), pin_check_done, info); - return FALSE; } @@ -76,19 +74,18 @@ parent_enable_done (MMModem *modem, GError *error, gpointer user_data) MMCallbackInfo *info = (MMCallbackInfo *) user_data; if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } else { - /* Sierra returns OK on +CFUN=1 right away but needs some time - to finish initialization */ - g_timeout_add_seconds (10, sierra_enabled, info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (modem), error, info); + return; } + + /* Sierra returns OK on +CFUN=1 right away but needs some time + * to finish initialization. + */ + g_timeout_add_seconds (10, sierra_enabled, info); } static void -enable (MMModem *modem, - MMModemFn callback, - gpointer user_data) +enable (MMModem *modem, MMModemFn callback, gpointer user_data) { MMModem *parent_modem_iface; MMCallbackInfo *info; diff --git a/plugins/mm-modem-zte.c b/plugins/mm-modem-zte.c index 95fb1b0a..24610738 100644 --- a/plugins/mm-modem-zte.c +++ b/plugins/mm-modem-zte.c @@ -62,10 +62,7 @@ init_modem_done (MMSerialPort *port, { MMCallbackInfo *info = (MMCallbackInfo *) user_data; - if (error) - info->error = g_error_copy (error); - - mm_callback_info_schedule (info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (info->modem), error, info); } static void @@ -75,14 +72,14 @@ pin_check_done (MMModem *modem, GError *error, gpointer user_data) MMSerialPort *primary; if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } else { - /* Finish the initialization */ - primary = mm_generic_gsm_get_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); - g_assert (primary); - mm_serial_port_queue_command (primary, "Z E0 V1 X4 &C1 +CMEE=1;+CFUN=1;", 10, init_modem_done, info); + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (modem), error, info); + return; } + + /* Finish the initialization */ + primary = mm_generic_gsm_get_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); + g_assert (primary); + mm_serial_port_queue_command (primary, "Z E0 V1 X4 &C1 +CMEE=1;+CFUN=1;", 10, init_modem_done, info); } static void enable_flash_done (MMSerialPort *port, @@ -104,10 +101,8 @@ pre_init_done (MMSerialPort *port, && g_error_matches (error, MM_SERIAL_ERROR, MM_SERIAL_RESPONSE_TIMEOUT)) { priv->init_retried = TRUE; enable_flash_done (port, NULL, user_data); - } else { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - } + } else + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (info->modem), error, info); } else { /* Now check the PIN explicitly, zte doesn't seem to report that it needs it otherwise */ @@ -120,19 +115,14 @@ enable_flash_done (MMSerialPort *port, GError *error, gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; - if (error) { - info->error = g_error_copy (error); - mm_callback_info_schedule (info); - return; - } - - mm_serial_port_queue_command (port, "E0 V1", 3, pre_init_done, user_data); + if (error) + mm_generic_gsm_enable_complete (MM_GENERIC_GSM (info->modem), error, info); + else + mm_serial_port_queue_command (port, "E0 V1", 3, pre_init_done, user_data); } static void -enable (MMModem *modem, - MMModemFn callback, - gpointer user_data) +do_enable (MMGenericGsm *modem, MMModemFn callback, gpointer user_data) { MMModemZtePrivate *priv = MM_MODEM_ZTE_GET_PRIVATE (modem); MMCallbackInfo *info; @@ -140,20 +130,10 @@ enable (MMModem *modem, priv->init_retried = FALSE; - /* First, reset the previously used CID */ - mm_generic_gsm_set_cid (MM_GENERIC_GSM (modem), 0); - - info = mm_callback_info_new (modem, callback, user_data); - - primary = mm_generic_gsm_get_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); + primary = mm_generic_gsm_get_port (modem, MM_PORT_TYPE_PRIMARY); g_assert (primary); - if (!mm_serial_port_open (primary, &info->error)) { - g_assert (info->error); - mm_callback_info_schedule (info); - return; - } - + info = mm_callback_info_new (MM_MODEM (modem), callback, user_data); mm_serial_port_flash (primary, 100, enable_flash_done, info); } @@ -224,7 +204,6 @@ grab_port (MMModem *modem, static void modem_init (MMModem *modem_class) { - modem_class->enable = enable; modem_class->disable = disable; modem_class->grab_port = grab_port; } @@ -238,8 +217,11 @@ static void mm_modem_zte_class_init (MMModemZteClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + MMGenericGsmClass *gsm_class = MM_GENERIC_GSM_CLASS (klass); mm_modem_zte_parent_class = g_type_class_peek_parent (klass); g_type_class_add_private (object_class, sizeof (MMModemZtePrivate)); + + gsm_class->do_enable = do_enable; } |