aboutsummaryrefslogtreecommitdiff
path: root/src/mm-generic-cdma.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2010-03-16 17:03:55 -0700
committerDan Williams <dcbw@redhat.com>2010-03-16 17:03:55 -0700
commit79bca53f21abcb4ec22e41e0f21b2af2df9d830a (patch)
tree064eba6f1d7b331da38ef53910737b29df889246 /src/mm-generic-cdma.c
parent6266f949ba5e745c385d674b2aa934f42b0fb17c (diff)
cdma: simplify finding the right serial port for commands
Diffstat (limited to 'src/mm-generic-cdma.c')
-rw-r--r--src/mm-generic-cdma.c129
1 files changed, 65 insertions, 64 deletions
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);
}