cdma: prefer primary port unless it's connected

This commit is contained in:
Dan Williams
2010-01-18 23:59:54 -08:00
parent a1520465fd
commit 73e10c77d3
2 changed files with 78 additions and 64 deletions

View File

@@ -227,23 +227,26 @@ query_registration_state (MMGenericCdma *cdma,
gpointer user_data) gpointer user_data)
{ {
MMCallbackInfo *info; MMCallbackInfo *info;
MMSerialPort *primary, *secondary; MMSerialPort *primary, *secondary, *port;
primary = mm_generic_cdma_get_port (cdma, MM_PORT_TYPE_PRIMARY); port = primary = mm_generic_cdma_get_port (cdma, MM_PORT_TYPE_PRIMARY);
secondary = mm_generic_cdma_get_port (cdma, MM_PORT_TYPE_SECONDARY); secondary = mm_generic_cdma_get_port (cdma, MM_PORT_TYPE_SECONDARY);
info = mm_generic_cdma_query_reg_state_callback_info_new (cdma, callback, user_data); info = mm_generic_cdma_query_reg_state_callback_info_new (cdma, callback, user_data);
if (mm_port_get_connected (MM_PORT (primary)) && !secondary) { if (mm_port_get_connected (MM_PORT (primary))) {
if (!secondary) {
info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED,
"Cannot get query registration state while connected"); "Cannot get query registration state while connected");
mm_callback_info_schedule (info); mm_callback_info_schedule (info);
return; return;
} }
mm_serial_port_queue_command (secondary ? secondary : primary, /* Use secondary port if primary is connected */
"^SYSINFO", 3, port = secondary;
sysinfo_done, info); }
mm_serial_port_queue_command (port, "^SYSINFO", 3, sysinfo_done, info);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@@ -727,21 +727,28 @@ get_card_info (MMModem *modem,
{ {
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem); MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
MMCallbackInfo *info; MMCallbackInfo *info;
MMSerialPort *port = priv->primary;
info = mm_callback_info_new_full (MM_MODEM (modem), info = mm_callback_info_new_full (MM_MODEM (modem),
card_info_invoke, card_info_invoke,
G_CALLBACK (callback), G_CALLBACK (callback),
user_data); user_data);
mm_serial_port_queue_command_cached (priv->secondary ? priv->secondary : priv->primary, if (mm_port_get_connected (MM_PORT (priv->primary))) {
"+GMI", 3, if (!priv->secondary) {
get_manufacturer_done, info); info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED,
mm_serial_port_queue_command_cached (priv->secondary ? priv->secondary : priv->primary, "Cannot modem info while connected");
"+GMM", 3, mm_callback_info_schedule (info);
get_model_done, info); return;
mm_serial_port_queue_command_cached (priv->secondary ? priv->secondary : priv->primary, }
"+GMR", 3,
get_version_done, info); /* Use secondary port if primary is connected */
port = priv->secondary;
}
mm_serial_port_queue_command_cached (port, "+GMI", 3, get_manufacturer_done, info);
mm_serial_port_queue_command_cached (port, "+GMM", 3, get_model_done, info);
mm_serial_port_queue_command_cached (port, "+GMR", 3, get_version_done, info);
} }
/*****************************************************************************/ /*****************************************************************************/
@@ -839,20 +846,21 @@ get_signal_quality (MMModemCdma *modem,
{ {
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem); MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
MMCallbackInfo *info; MMCallbackInfo *info;
gboolean connected; MMSerialPort *port = priv->primary;
connected = mm_port_get_connected (MM_PORT (priv->primary)); if (mm_port_get_connected (MM_PORT (priv->primary))) {
if (connected && !priv->secondary) { if (!priv->secondary) {
g_message ("Returning saved signal quality %d", priv->cdma1x_quality); g_message ("Returning saved signal quality %d", priv->cdma1x_quality);
callback (MM_MODEM (modem), priv->cdma1x_quality, NULL, user_data); callback (MM_MODEM (modem), priv->cdma1x_quality, NULL, user_data);
return; return;
} }
/* Use secondary port if primary is connected */
port = priv->secondary;
}
info = mm_callback_info_uint_new (MM_MODEM (modem), callback, user_data); info = mm_callback_info_uint_new (MM_MODEM (modem), callback, user_data);
/* Prefer secondary port for signal strength */ mm_serial_port_queue_command (port, "+CSQ", 3, get_signal_quality_done, info);
mm_serial_port_queue_command (priv->secondary ? priv->secondary : priv->primary,
"+CSQ", 3,
get_signal_quality_done, info);
} }
static void static void
@@ -881,11 +889,11 @@ get_esn (MMModemCdma *modem,
{ {
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem); MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
MMCallbackInfo *info; MMCallbackInfo *info;
gboolean connected;
GError *error; GError *error;
MMSerialPort *port = priv->primary;
connected = mm_port_get_connected (MM_PORT (priv->primary)); if (mm_port_get_connected (MM_PORT (priv->primary))) {
if (connected && !priv->secondary) { if (!priv->secondary) {
error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED,
"Cannot get ESN while connected"); "Cannot get ESN while connected");
callback (MM_MODEM (modem), NULL, error, user_data); callback (MM_MODEM (modem), NULL, error, user_data);
@@ -893,10 +901,12 @@ get_esn (MMModemCdma *modem,
return; return;
} }
/* Use secondary port if primary is connected */
port = priv->secondary;
}
info = mm_callback_info_string_new (MM_MODEM (modem), callback, user_data); info = mm_callback_info_string_new (MM_MODEM (modem), callback, user_data);
mm_serial_port_queue_command_cached (priv->secondary ? priv->secondary : priv->primary, mm_serial_port_queue_command_cached (port, "+GSN", 3, get_string_done, info);
"+GSN", 3,
get_string_done, info);
} }
static void static void
@@ -1098,11 +1108,11 @@ get_serving_system (MMModemCdma *modem,
{ {
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem); MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
MMCallbackInfo *info; MMCallbackInfo *info;
gboolean connected;
GError *error; GError *error;
MMSerialPort *port = priv->primary;
connected = mm_port_get_connected (MM_PORT (priv->primary)); if (mm_port_get_connected (MM_PORT (priv->primary))) {
if (connected && !priv->secondary) { if (!priv->secondary) {
error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED, error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED,
"Cannot get serving system while connected"); "Cannot get serving system while connected");
callback (modem, 0, 0, 0, error, user_data); callback (modem, 0, 0, 0, error, user_data);
@@ -1110,14 +1120,16 @@ get_serving_system (MMModemCdma *modem,
return; return;
} }
/* Use secondary port if primary is connected */
port = priv->secondary;
}
info = mm_callback_info_new_full (MM_MODEM (modem), info = mm_callback_info_new_full (MM_MODEM (modem),
serving_system_invoke, serving_system_invoke,
G_CALLBACK (callback), G_CALLBACK (callback),
user_data); user_data);
mm_serial_port_queue_command (priv->secondary ? priv->secondary : priv->primary, mm_serial_port_queue_command (port, "+CSS?", 3, serving_system_done, info);
"+CSS?", 3,
serving_system_done, info);
} }
#define CDMA_1X_STATE_TAG "cdma-1x-reg-state" #define CDMA_1X_STATE_TAG "cdma-1x-reg-state"
@@ -1323,23 +1335,22 @@ get_registration_state (MMModemCdma *modem,
{ {
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem); MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
MMCallbackInfo *info; MMCallbackInfo *info;
gboolean connected; MMSerialPort *port = priv->primary;
connected = mm_port_get_connected (MM_PORT (priv->primary)); if (mm_port_get_connected (MM_PORT (priv->primary))) {
if (connected && !priv->secondary) { if (!priv->secondary) {
g_message ("Returning saved registration states: 1x: %d EVDO: %d", g_message ("Returning saved registration states: 1x: %d EVDO: %d",
priv->cdma_1x_reg_state, priv->evdo_reg_state); 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); callback (MM_MODEM_CDMA (modem), priv->cdma_1x_reg_state, priv->evdo_reg_state, NULL, user_data);
return; 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;
}
/* Prefer secondary port for registration state */ info = mm_generic_cdma_query_reg_state_callback_info_new (MM_GENERIC_CDMA (modem), callback, user_data);
mm_serial_port_queue_command (priv->secondary ? priv->secondary : priv->primary, mm_serial_port_queue_command (port, "+CAD?", 3, get_analog_digital_done, info);
"+CAD?",
3,
get_analog_digital_done, info);
} }
/*****************************************************************************/ /*****************************************************************************/