diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mm-modem-gobi-gsm.c | 11 | ||||
-rw-r--r-- | plugins/mm-modem-huawei-gsm.c | 76 | ||||
-rw-r--r-- | plugins/mm-modem-mbm.c | 29 | ||||
-rw-r--r-- | plugins/mm-modem-option.c | 24 | ||||
-rw-r--r-- | plugins/mm-modem-sierra-gsm.c | 21 | ||||
-rw-r--r-- | plugins/mm-modem-zte.c | 36 |
6 files changed, 114 insertions, 83 deletions
diff --git a/plugins/mm-modem-gobi-gsm.c b/plugins/mm-modem-gobi-gsm.c index 566d0c82..3b9e9ece 100644 --- a/plugins/mm-modem-gobi-gsm.c +++ b/plugins/mm-modem-gobi-gsm.c @@ -76,13 +76,16 @@ get_imsi (MMModemGsmCard *modem, MMModemStringFn callback, gpointer user_data) { - MMAtSerialPort *primary; + MMAtSerialPort *port; MMCallbackInfo *info; info = mm_callback_info_string_new (MM_MODEM (modem), callback, user_data); - primary = mm_generic_gsm_get_at_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); - g_assert (primary); - mm_at_serial_port_queue_command_cached (primary, "+CIMI", 3, get_string_done, info); + + port = mm_generic_gsm_get_best_at_port (MM_GENERIC_GSM (modem), &info->error); + if (port) + mm_at_serial_port_queue_command_cached (port, "+CIMI", 3, get_string_done, info); + else + mm_callback_info_schedule (info); } static void diff --git a/plugins/mm-modem-huawei-gsm.c b/plugins/mm-modem-huawei-gsm.c index 87cda359..619fe375 100644 --- a/plugins/mm-modem-huawei-gsm.c +++ b/plugins/mm-modem-huawei-gsm.c @@ -174,26 +174,17 @@ set_allowed_mode (MMGenericGsm *gsm, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *port, *primary, *secondary; + MMAtSerialPort *port; int a, b; char *command; info = mm_callback_info_new (MM_MODEM (gsm), callback, user_data); - port = primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); - if (mm_port_get_connected (MM_PORT (primary))) { - secondary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_SECONDARY); - if (!secondary) { - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, - "Cannot set allowed mode while connected"); - mm_callback_info_schedule (info); - return; - } - - /* Use secondary port if primary is connected */ - port = secondary; + port = mm_generic_gsm_get_best_at_port (gsm, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; } - g_assert (port); switch (mode) { case MM_MODEM_GSM_ALLOWED_MODE_2G_ONLY: @@ -250,12 +241,17 @@ get_allowed_mode (MMGenericGsm *gsm, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *primary; + MMAtSerialPort *port; info = mm_callback_info_uint_new (MM_MODEM (gsm), callback, user_data); - primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); - g_assert (primary); - mm_at_serial_port_queue_command (primary, "AT^SYSCFG?", 3, get_allowed_mode_done, info); + + port = mm_generic_gsm_get_best_at_port (gsm, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; + } + + mm_at_serial_port_queue_command (port, "AT^SYSCFG?", 3, get_allowed_mode_done, info); } static void @@ -285,24 +281,16 @@ set_band (MMModemGsmNetwork *modem, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *port, *primary, *secondary; + MMAtSerialPort *port; char *command; guint32 huawei_band = 0x3FFFFFFF; info = mm_callback_info_new (MM_MODEM (modem), callback, user_data); - port = primary = mm_generic_gsm_get_at_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); - if (mm_port_get_connected (MM_PORT (primary))) { - secondary = mm_generic_gsm_get_at_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_SECONDARY); - if (!secondary) { - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, - "Cannot set band while connected"); - mm_callback_info_schedule (info); - return; - } - - /* Use secondary port if primary is connected */ - port = secondary; + port = mm_generic_gsm_get_best_at_port (MM_GENERIC_GSM (modem), &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; } if (!band_mm_to_huawei (band, &huawei_band)) { @@ -345,27 +333,29 @@ get_band (MMModemGsmNetwork *modem, gpointer user_data) { MMModemHuaweiGsmPrivate *priv = MM_MODEM_HUAWEI_GSM_GET_PRIVATE (modem); - MMAtSerialPort *primary; + MMAtSerialPort *port; + MMCallbackInfo *info; + info = mm_callback_info_uint_new (MM_MODEM (modem), callback, user_data); + + /* Prefer cached band from unsolicited messages if we have it */ if (priv->band != 0) { - /* have cached band (from an unsolicited message). Use that */ - MMCallbackInfo *info; MMModemGsmBand mm_band = MM_MODEM_GSM_BAND_ANY; band_huawei_to_mm (priv->band, &mm_band); - - info = mm_callback_info_uint_new (MM_MODEM (modem), callback, user_data); mm_callback_info_set_result (info, GUINT_TO_POINTER (mm_band), NULL); mm_callback_info_schedule (info); - } else { - /* Get it from modem */ - MMCallbackInfo *info; + return; + } - info = mm_callback_info_uint_new (MM_MODEM (modem), callback, user_data); - primary = mm_generic_gsm_get_at_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); - g_assert (primary); - mm_at_serial_port_queue_command (primary, "AT^SYSCFG?", 3, get_band_done, info); + /* Otherwise ask the modem */ + port = mm_generic_gsm_get_best_at_port (MM_GENERIC_GSM (modem), &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; } + + mm_at_serial_port_queue_command (port, "AT^SYSCFG?", 3, get_band_done, info); } /* Unsolicited message handlers */ diff --git a/plugins/mm-modem-mbm.c b/plugins/mm-modem-mbm.c index 49442224..13c5b9ba 100644 --- a/plugins/mm-modem-mbm.c +++ b/plugins/mm-modem-mbm.c @@ -111,13 +111,9 @@ register_done (gpointer user_data) MMModemMbm *self = MM_MODEM_MBM (reg_data->modem); MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (self); MMModemGsmNetwork *parent_modem_iface; - MMAtSerialPort *primary; priv->reg_id = 0; - primary = mm_generic_gsm_get_at_port (MM_GENERIC_GSM (self), MM_PORT_TYPE_PRIMARY); - g_assert (primary); - parent_modem_iface = g_type_interface_peek_parent (MM_MODEM_GSM_NETWORK_GET_INTERFACE (self)); parent_modem_iface->do_register (MM_MODEM_GSM_NETWORK (self), reg_data->network_id, @@ -189,14 +185,18 @@ set_allowed_mode (MMGenericGsm *gsm, { MMCallbackInfo *info; char *command; - MMAtSerialPort *primary; + MMAtSerialPort *port; info = mm_callback_info_new (MM_MODEM (gsm), callback, user_data); - primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); - g_assert (primary); + + port = mm_generic_gsm_get_best_at_port (gsm, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; + } command = g_strdup_printf ("+CFUN=%d", mbm_parse_allowed_mode (mode)); - mm_at_serial_port_queue_command (primary, command, 3, mbm_set_allowed_mode_done, info); + mm_at_serial_port_queue_command (port, command, 3, mbm_set_allowed_mode_done, info); g_free (command); } @@ -280,12 +280,17 @@ get_allowed_mode (MMGenericGsm *gsm, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *primary; + MMAtSerialPort *port; info = mm_callback_info_uint_new (MM_MODEM (gsm), callback, user_data); - primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); - g_assert (primary); - mm_at_serial_port_queue_command (primary, "CFUN?", 3, get_allowed_mode_done, info); + + port = mm_generic_gsm_get_best_at_port (gsm, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; + } + + mm_at_serial_port_queue_command (port, "CFUN?", 3, get_allowed_mode_done, info); } /*****************************************************************************/ diff --git a/plugins/mm-modem-option.c b/plugins/mm-modem-option.c index 42cd927c..6c9dfe1d 100644 --- a/plugins/mm-modem-option.c +++ b/plugins/mm-modem-option.c @@ -138,12 +138,16 @@ get_allowed_mode (MMGenericGsm *gsm, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *primary; + MMAtSerialPort *port; info = mm_callback_info_uint_new (MM_MODEM (gsm), callback, user_data); - primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); - g_assert (primary); - mm_at_serial_port_queue_command (primary, "AT_OPSYS?", 3, get_allowed_mode_done, info); + + port = mm_generic_gsm_get_best_at_port (gsm, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; + } + mm_at_serial_port_queue_command (port, "AT_OPSYS?", 3, get_allowed_mode_done, info); } static void @@ -167,12 +171,18 @@ set_allowed_mode (MMGenericGsm *gsm, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *primary; + MMAtSerialPort *port; char *command; int i; info = mm_callback_info_new (MM_MODEM (gsm), callback, user_data); + port = mm_generic_gsm_get_best_at_port (gsm, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; + } + switch (mode) { case MM_MODEM_GSM_ALLOWED_MODE_2G_ONLY: i = 0; @@ -193,9 +203,7 @@ set_allowed_mode (MMGenericGsm *gsm, } command = g_strdup_printf ("AT_OPSYS=%d,2", i); - primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); - g_assert (primary); - mm_at_serial_port_queue_command (primary, command, 3, set_allowed_mode_done, info); + mm_at_serial_port_queue_command (port, command, 3, set_allowed_mode_done, info); g_free (command); } diff --git a/plugins/mm-modem-sierra-gsm.c b/plugins/mm-modem-sierra-gsm.c index e11f64f5..6bbead9c 100644 --- a/plugins/mm-modem-sierra-gsm.c +++ b/plugins/mm-modem-sierra-gsm.c @@ -122,8 +122,16 @@ get_allowed_mode (MMGenericGsm *gsm, MMAtSerialPort *primary; info = mm_callback_info_uint_new (MM_MODEM (gsm), callback, user_data); + + /* Sierra secondary ports don't have full AT command interpreters */ primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); - g_assert (primary); + if (!primary || mm_port_get_connected (MM_PORT (primary))) { + g_set_error_literal (&info->error, MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, + "Cannot perform this operation while connected"); + mm_callback_info_schedule (info); + return; + } + mm_at_serial_port_queue_command (primary, "!SELRAT?", 3, get_allowed_mode_done, info); } @@ -154,6 +162,15 @@ set_allowed_mode (MMGenericGsm *gsm, info = mm_callback_info_new (MM_MODEM (gsm), callback, user_data); + /* Sierra secondary ports don't have full AT command interpreters */ + primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); + if (!primary || mm_port_get_connected (MM_PORT (primary))) { + g_set_error_literal (&info->error, MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, + "Cannot perform this operation while connected"); + mm_callback_info_schedule (info); + return; + } + switch (mode) { case MM_MODEM_GSM_ALLOWED_MODE_2G_ONLY: idx = 2; @@ -173,8 +190,6 @@ set_allowed_mode (MMGenericGsm *gsm, } command = g_strdup_printf ("!SELRAT=%d", idx); - primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); - g_assert (primary); mm_at_serial_port_queue_command (primary, command, 3, set_allowed_mode_done, info); g_free (command); } diff --git a/plugins/mm-modem-zte.c b/plugins/mm-modem-zte.c index 67d6ead5..d5aa5f31 100644 --- a/plugins/mm-modem-zte.c +++ b/plugins/mm-modem-zte.c @@ -159,12 +159,17 @@ get_allowed_mode (MMGenericGsm *gsm, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *primary; + MMAtSerialPort *port; info = mm_callback_info_uint_new (MM_MODEM (gsm), callback, user_data); - primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); - g_assert (primary); - mm_at_serial_port_queue_command (primary, "AT+ZSNT?", 3, get_allowed_mode_done, info); + + port = mm_generic_gsm_get_best_at_port (gsm, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; + } + + mm_at_serial_port_queue_command (port, "AT+ZSNT?", 3, get_allowed_mode_done, info); } static void @@ -188,12 +193,18 @@ set_allowed_mode (MMGenericGsm *gsm, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *primary; + MMAtSerialPort *port; char *command; int cm_mode = 0, pref_acq = 0; info = mm_callback_info_new (MM_MODEM (gsm), callback, user_data); + port = mm_generic_gsm_get_best_at_port (gsm, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; + } + switch (mode) { case MM_MODEM_GSM_ALLOWED_MODE_2G_ONLY: cm_mode = 1; @@ -217,9 +228,7 @@ set_allowed_mode (MMGenericGsm *gsm, } command = g_strdup_printf ("AT+ZSNT=%d,0,%d", cm_mode, pref_acq); - primary = mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY); - g_assert (primary); - mm_at_serial_port_queue_command (primary, command, 3, set_allowed_mode_done, info); + mm_at_serial_port_queue_command (port, command, 3, set_allowed_mode_done, info); g_free (command); } @@ -237,13 +246,14 @@ cpms_timeout_cb (gpointer user_data) { MMCallbackInfo *info = user_data; MMModem *modem = info->modem; - MMModemZtePrivate *priv = MM_MODEM_ZTE_GET_PRIVATE (modem); MMAtSerialPort *primary; - priv->cpms_timeout = 0; - - primary = mm_generic_gsm_get_at_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); - mm_at_serial_port_queue_command (primary, "+CPMS?", 10, cpms_try_done, info); + if (modem) { + MM_MODEM_ZTE_GET_PRIVATE (modem)->cpms_timeout = 0; + primary = mm_generic_gsm_get_at_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY); + g_assert (primary); + mm_at_serial_port_queue_command (primary, "+CPMS?", 10, cpms_try_done, info); + } return FALSE; } |