diff options
-rw-r--r-- | plugins/mm-modem-anydata-cdma.c | 19 | ||||
-rw-r--r-- | plugins/mm-modem-huawei-cdma.c | 19 | ||||
-rw-r--r-- | plugins/mm-modem-novatel-cdma.c | 20 | ||||
-rw-r--r-- | plugins/mm-modem-sierra-cdma.c | 18 | ||||
-rw-r--r-- | src/mm-generic-cdma.c | 129 | ||||
-rw-r--r-- | src/mm-generic-cdma.h | 3 |
6 files changed, 87 insertions, 121 deletions
diff --git a/plugins/mm-modem-anydata-cdma.c b/plugins/mm-modem-anydata-cdma.c index eb5495eb..cb3b72c7 100644 --- a/plugins/mm-modem-anydata-cdma.c +++ b/plugins/mm-modem-anydata-cdma.c @@ -274,23 +274,14 @@ query_registration_state (MMGenericCdma *cdma, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *primary, *secondary, *port; - - port = primary = mm_generic_cdma_get_at_port (cdma, MM_PORT_TYPE_PRIMARY); - secondary = mm_generic_cdma_get_at_port (cdma, MM_PORT_TYPE_SECONDARY); + MMAtSerialPort *port; info = mm_generic_cdma_query_reg_state_callback_info_new (cdma, callback, user_data); - if (mm_port_get_connected (MM_PORT (primary))) { - if (!secondary) { - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, - "Cannot get query registration state while connected"); - mm_callback_info_schedule (info); - return; - } - - /* Use secondary port if primary is connected */ - port = secondary; + port = mm_generic_cdma_get_best_at_port (cdma, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; } mm_at_serial_port_queue_command (port, "*STATE?", 3, state_done, info); diff --git a/plugins/mm-modem-huawei-cdma.c b/plugins/mm-modem-huawei-cdma.c index b164e675..7200f061 100644 --- a/plugins/mm-modem-huawei-cdma.c +++ b/plugins/mm-modem-huawei-cdma.c @@ -239,23 +239,14 @@ query_registration_state (MMGenericCdma *cdma, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *primary, *secondary, *port; - - port = primary = mm_generic_cdma_get_at_port (cdma, MM_PORT_TYPE_PRIMARY); - secondary = mm_generic_cdma_get_at_port (cdma, MM_PORT_TYPE_SECONDARY); + MMAtSerialPort *port; info = mm_generic_cdma_query_reg_state_callback_info_new (cdma, callback, user_data); - if (mm_port_get_connected (MM_PORT (primary))) { - if (!secondary) { - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, - "Cannot get query registration state while connected"); - mm_callback_info_schedule (info); - return; - } - - /* Use secondary port if primary is connected */ - port = secondary; + port = mm_generic_cdma_get_best_at_port (cdma, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; } mm_at_serial_port_queue_command (port, "^SYSINFO", 3, sysinfo_done, info); diff --git a/plugins/mm-modem-novatel-cdma.c b/plugins/mm-modem-novatel-cdma.c index c578d18b..bf747d1a 100644 --- a/plugins/mm-modem-novatel-cdma.c +++ b/plugins/mm-modem-novatel-cdma.c @@ -141,25 +141,15 @@ get_signal_quality (MMModemCdma *modem, MMModemUIntFn callback, gpointer user_data) { - MMGenericCdma *cdma = MM_GENERIC_CDMA (modem); MMCallbackInfo *info; - MMAtSerialPort *primary, *secondary, *port; - - port = primary = mm_generic_cdma_get_at_port (cdma, MM_PORT_TYPE_PRIMARY); - secondary = mm_generic_cdma_get_at_port (cdma, MM_PORT_TYPE_SECONDARY); + MMAtSerialPort *port; info = mm_callback_info_uint_new (MM_MODEM (modem), callback, user_data); - if (mm_port_get_connected (MM_PORT (primary))) { - if (!secondary) { - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, - "Cannot query signal quality while connected"); - mm_callback_info_schedule (info); - return; - } - - /* Use secondary port if primary is connected */ - port = secondary; + port = mm_generic_cdma_get_best_at_port (MM_GENERIC_CDMA (modem), &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; } /* Many Novatel CDMA cards don't report CSQ in standard 0 - 31 and the CSQ diff --git a/plugins/mm-modem-sierra-cdma.c b/plugins/mm-modem-sierra-cdma.c index f2fb4e09..2c3ed7f0 100644 --- a/plugins/mm-modem-sierra-cdma.c +++ b/plugins/mm-modem-sierra-cdma.c @@ -293,24 +293,14 @@ query_registration_state (MMGenericCdma *cdma, gpointer user_data) { MMCallbackInfo *info; - MMAtSerialPort *primary, *secondary; MMAtSerialPort *port; - port = primary = mm_generic_cdma_get_at_port (cdma, MM_PORT_TYPE_PRIMARY); - secondary = mm_generic_cdma_get_at_port (cdma, MM_PORT_TYPE_SECONDARY); - info = mm_generic_cdma_query_reg_state_callback_info_new (cdma, callback, user_data); - if (mm_port_get_connected (MM_PORT (primary))) { - if (!secondary) { - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, - "Cannot get query registration state while connected"); - mm_callback_info_schedule (info); - return; - } - - /* Use secondary port if primary is connected */ - port = secondary; + port = mm_generic_cdma_get_best_at_port (cdma, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; } mm_at_serial_port_queue_command (port, "!STATUS", 3, status_done, info); diff --git a/src/mm-generic-cdma.c b/src/mm-generic-cdma.c index 3dde2097..c247d790 100644 --- a/src/mm-generic-cdma.c +++ b/src/mm-generic-cdma.c @@ -232,6 +232,27 @@ mm_generic_cdma_get_at_port (MMGenericCdma *modem, return NULL; } +MMAtSerialPort * +mm_generic_cdma_get_best_at_port (MMGenericCdma *self, GError **error) +{ + MMGenericCdmaPrivate *priv; + + g_return_val_if_fail (self != NULL, NULL); + g_return_val_if_fail (MM_IS_GENERIC_CDMA (self), NULL); + + priv = MM_GENERIC_CDMA_GET_PRIVATE (self); + + if (!mm_port_get_connected (MM_PORT (priv->primary))) + return priv->primary; + + if (!priv->secondary) { + g_set_error_literal (error, MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, + "Cannot perform this operation while connected"); + } + + return priv->secondary; +} + /*****************************************************************************/ void @@ -737,25 +758,19 @@ get_card_info (MMModem *modem, MMModemInfoFn callback, gpointer user_data) { - MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem); + MMGenericCdma *self = MM_GENERIC_CDMA (modem); MMCallbackInfo *info; - MMAtSerialPort *port = priv->primary; + MMAtSerialPort *port; info = mm_callback_info_new_full (MM_MODEM (modem), card_info_invoke, G_CALLBACK (callback), user_data); - if (mm_port_get_connected (MM_PORT (priv->primary))) { - if (!priv->secondary) { - info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, - "Cannot modem info while connected"); - mm_callback_info_schedule (info); - return; - } - - /* Use secondary port if primary is connected */ - port = priv->secondary; + port = mm_generic_cdma_get_best_at_port (self, &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; } mm_at_serial_port_queue_command_cached (port, "+GMI", 3, get_manufacturer_done, info); @@ -858,20 +873,18 @@ get_signal_quality (MMModemCdma *modem, { MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem); MMCallbackInfo *info; - MMAtSerialPort *port = priv->primary; + MMAtSerialPort *port; - if (mm_port_get_connected (MM_PORT (priv->primary))) { - if (!priv->secondary) { - g_message ("Returning saved signal quality %d", priv->cdma1x_quality); - callback (MM_MODEM (modem), priv->cdma1x_quality, NULL, user_data); - return; - } + info = mm_callback_info_uint_new (MM_MODEM (modem), callback, user_data); - /* Use secondary port if primary is connected */ - port = priv->secondary; + port = mm_generic_cdma_get_best_at_port (MM_GENERIC_CDMA (modem), &info->error); + if (!port) { + g_message ("Returning saved signal quality %d", priv->cdma1x_quality); + mm_callback_info_set_result (info, GUINT_TO_POINTER (priv->cdma1x_quality), NULL); + mm_callback_info_schedule (info); + return; } - info = mm_callback_info_uint_new (MM_MODEM (modem), callback, user_data); mm_at_serial_port_queue_command (port, "+CSQ", 3, get_signal_quality_done, info); } @@ -899,25 +912,17 @@ get_esn (MMModemCdma *modem, MMModemStringFn callback, gpointer user_data) { - MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem); MMCallbackInfo *info; - GError *error; - MMAtSerialPort *port = priv->primary; - - if (mm_port_get_connected (MM_PORT (priv->primary))) { - if (!priv->secondary) { - error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, - "Cannot get ESN while connected"); - callback (MM_MODEM (modem), NULL, error, user_data); - g_error_free (error); - return; - } + MMAtSerialPort *port; + + info = mm_callback_info_string_new (MM_MODEM (modem), callback, user_data); - /* Use secondary port if primary is connected */ - port = priv->secondary; + port = mm_generic_cdma_get_best_at_port (MM_GENERIC_CDMA (modem), &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; } - info = mm_callback_info_string_new (MM_MODEM (modem), callback, user_data); mm_at_serial_port_queue_command_cached (port, "+GSN", 3, get_string_done, info); } @@ -1118,29 +1123,20 @@ get_serving_system (MMModemCdma *modem, MMModemCdmaServingSystemFn callback, gpointer user_data) { - MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem); MMCallbackInfo *info; - GError *error; - MMAtSerialPort *port = priv->primary; - - if (mm_port_get_connected (MM_PORT (priv->primary))) { - if (!priv->secondary) { - error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, - "Cannot get serving system while connected"); - callback (modem, 0, 0, 0, error, user_data); - g_error_free (error); - return; - } - - /* Use secondary port if primary is connected */ - port = priv->secondary; - } + MMAtSerialPort *port; info = mm_callback_info_new_full (MM_MODEM (modem), serving_system_invoke, G_CALLBACK (callback), user_data); + port = mm_generic_cdma_get_best_at_port (MM_GENERIC_CDMA (modem), &info->error); + if (!port) { + mm_callback_info_schedule (info); + return; + } + mm_at_serial_port_queue_command (port, "+CSS?", 3, serving_system_done, info); } @@ -1370,21 +1366,26 @@ get_registration_state (MMModemCdma *modem, { MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem); MMCallbackInfo *info; - MMAtSerialPort *port = priv->primary; + MMAtSerialPort *port; - if (mm_port_get_connected (MM_PORT (priv->primary))) { - if (!priv->secondary) { - g_message ("Returning saved registration states: 1x: %d EVDO: %d", - priv->cdma_1x_reg_state, priv->evdo_reg_state); - callback (MM_MODEM_CDMA (modem), priv->cdma_1x_reg_state, priv->evdo_reg_state, NULL, user_data); - return; - } + info = mm_generic_cdma_query_reg_state_callback_info_new (MM_GENERIC_CDMA (modem), callback, user_data); - /* Use secondary port if primary is connected */ - port = priv->secondary; + port = mm_generic_cdma_get_best_at_port (MM_GENERIC_CDMA (modem), &info->error); + if (!port) { + g_message ("Returning saved registration states: 1x: %d EVDO: %d", + priv->cdma_1x_reg_state, priv->evdo_reg_state); + mm_callback_info_set_data (info, + CDMA_1X_STATE_TAG, + GUINT_TO_POINTER (priv->cdma_1x_reg_state), + NULL); + mm_callback_info_set_data (info, + EVDO_STATE_TAG, + GUINT_TO_POINTER (priv->evdo_reg_state), + NULL); + mm_callback_info_schedule (info); + return; } - info = mm_generic_cdma_query_reg_state_callback_info_new (MM_GENERIC_CDMA (modem), callback, user_data); mm_at_serial_port_queue_command (port, "+CAD?", 3, get_analog_digital_done, info); } diff --git a/src/mm-generic-cdma.h b/src/mm-generic-cdma.h index 18e1d61d..4fbb416a 100644 --- a/src/mm-generic-cdma.h +++ b/src/mm-generic-cdma.h @@ -80,6 +80,9 @@ MMPort * mm_generic_cdma_grab_port (MMGenericCdma *self, MMAtSerialPort *mm_generic_cdma_get_at_port (MMGenericCdma *modem, MMPortType ptype); +MMAtSerialPort *mm_generic_cdma_get_best_at_port (MMGenericCdma *modem, + GError **error); + void mm_generic_cdma_update_cdma1x_quality (MMGenericCdma *self, guint32 quality); void mm_generic_cdma_update_evdo_quality (MMGenericCdma *self, guint32 quality); |