cdma: simplify finding the right serial port for commands
This commit is contained in:
@@ -274,23 +274,14 @@ query_registration_state (MMGenericCdma *cdma,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
MMCallbackInfo *info;
|
MMCallbackInfo *info;
|
||||||
MMAtSerialPort *primary, *secondary, *port;
|
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);
|
info = mm_generic_cdma_query_reg_state_callback_info_new (cdma, callback, user_data);
|
||||||
|
|
||||||
if (mm_port_get_connected (MM_PORT (primary))) {
|
port = mm_generic_cdma_get_best_at_port (cdma, &info->error);
|
||||||
if (!secondary) {
|
if (!port) {
|
||||||
info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED,
|
mm_callback_info_schedule (info);
|
||||||
"Cannot get query registration state while connected");
|
return;
|
||||||
mm_callback_info_schedule (info);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Use secondary port if primary is connected */
|
|
||||||
port = secondary;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mm_at_serial_port_queue_command (port, "*STATE?", 3, state_done, info);
|
mm_at_serial_port_queue_command (port, "*STATE?", 3, state_done, info);
|
||||||
|
@@ -239,23 +239,14 @@ query_registration_state (MMGenericCdma *cdma,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
MMCallbackInfo *info;
|
MMCallbackInfo *info;
|
||||||
MMAtSerialPort *primary, *secondary, *port;
|
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);
|
info = mm_generic_cdma_query_reg_state_callback_info_new (cdma, callback, user_data);
|
||||||
|
|
||||||
if (mm_port_get_connected (MM_PORT (primary))) {
|
port = mm_generic_cdma_get_best_at_port (cdma, &info->error);
|
||||||
if (!secondary) {
|
if (!port) {
|
||||||
info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED,
|
mm_callback_info_schedule (info);
|
||||||
"Cannot get query registration state while connected");
|
return;
|
||||||
mm_callback_info_schedule (info);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Use secondary port if primary is connected */
|
|
||||||
port = secondary;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mm_at_serial_port_queue_command (port, "^SYSINFO", 3, sysinfo_done, info);
|
mm_at_serial_port_queue_command (port, "^SYSINFO", 3, sysinfo_done, info);
|
||||||
|
@@ -141,25 +141,15 @@ get_signal_quality (MMModemCdma *modem,
|
|||||||
MMModemUIntFn callback,
|
MMModemUIntFn callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
MMGenericCdma *cdma = MM_GENERIC_CDMA (modem);
|
|
||||||
MMCallbackInfo *info;
|
MMCallbackInfo *info;
|
||||||
MMAtSerialPort *primary, *secondary, *port;
|
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_callback_info_uint_new (MM_MODEM (modem), callback, user_data);
|
info = mm_callback_info_uint_new (MM_MODEM (modem), callback, user_data);
|
||||||
|
|
||||||
if (mm_port_get_connected (MM_PORT (primary))) {
|
port = mm_generic_cdma_get_best_at_port (MM_GENERIC_CDMA (modem), &info->error);
|
||||||
if (!secondary) {
|
if (!port) {
|
||||||
info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED,
|
mm_callback_info_schedule (info);
|
||||||
"Cannot query signal quality while connected");
|
return;
|
||||||
mm_callback_info_schedule (info);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Use secondary port if primary is connected */
|
|
||||||
port = secondary;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Many Novatel CDMA cards don't report CSQ in standard 0 - 31 and the CSQ
|
/* Many Novatel CDMA cards don't report CSQ in standard 0 - 31 and the CSQ
|
||||||
|
@@ -293,24 +293,14 @@ query_registration_state (MMGenericCdma *cdma,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
MMCallbackInfo *info;
|
MMCallbackInfo *info;
|
||||||
MMAtSerialPort *primary, *secondary;
|
|
||||||
MMAtSerialPort *port;
|
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);
|
info = mm_generic_cdma_query_reg_state_callback_info_new (cdma, callback, user_data);
|
||||||
|
|
||||||
if (mm_port_get_connected (MM_PORT (primary))) {
|
port = mm_generic_cdma_get_best_at_port (cdma, &info->error);
|
||||||
if (!secondary) {
|
if (!port) {
|
||||||
info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED,
|
mm_callback_info_schedule (info);
|
||||||
"Cannot get query registration state while connected");
|
return;
|
||||||
mm_callback_info_schedule (info);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Use secondary port if primary is connected */
|
|
||||||
port = secondary;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mm_at_serial_port_queue_command (port, "!STATUS", 3, status_done, info);
|
mm_at_serial_port_queue_command (port, "!STATUS", 3, status_done, info);
|
||||||
|
@@ -232,6 +232,27 @@ mm_generic_cdma_get_at_port (MMGenericCdma *modem,
|
|||||||
return NULL;
|
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
|
void
|
||||||
@@ -737,25 +758,19 @@ get_card_info (MMModem *modem,
|
|||||||
MMModemInfoFn callback,
|
MMModemInfoFn callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
|
MMGenericCdma *self = MM_GENERIC_CDMA (modem);
|
||||||
MMCallbackInfo *info;
|
MMCallbackInfo *info;
|
||||||
MMAtSerialPort *port = priv->primary;
|
MMAtSerialPort *port;
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
if (mm_port_get_connected (MM_PORT (priv->primary))) {
|
port = mm_generic_cdma_get_best_at_port (self, &info->error);
|
||||||
if (!priv->secondary) {
|
if (!port) {
|
||||||
info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED,
|
mm_callback_info_schedule (info);
|
||||||
"Cannot modem info while connected");
|
return;
|
||||||
mm_callback_info_schedule (info);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Use secondary port if primary is connected */
|
|
||||||
port = priv->secondary;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mm_at_serial_port_queue_command_cached (port, "+GMI", 3, get_manufacturer_done, info);
|
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);
|
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
|
||||||
MMCallbackInfo *info;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
mm_at_serial_port_queue_command (port, "+CSQ", 3, get_signal_quality_done, info);
|
mm_at_serial_port_queue_command (port, "+CSQ", 3, get_signal_quality_done, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -899,25 +912,17 @@ get_esn (MMModemCdma *modem,
|
|||||||
MMModemStringFn callback,
|
MMModemStringFn callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
|
|
||||||
MMCallbackInfo *info;
|
MMCallbackInfo *info;
|
||||||
GError *error;
|
MMAtSerialPort *port;
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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);
|
||||||
|
|
||||||
|
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_cached (port, "+GSN", 3, get_string_done, info);
|
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,
|
MMModemCdmaServingSystemFn callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
|
|
||||||
MMCallbackInfo *info;
|
MMCallbackInfo *info;
|
||||||
GError *error;
|
MMAtSerialPort *port;
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
|
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);
|
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);
|
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
|
||||||
MMCallbackInfo *info;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Use secondary port if primary is connected */
|
|
||||||
port = priv->secondary;
|
|
||||||
}
|
|
||||||
|
|
||||||
info = mm_generic_cdma_query_reg_state_callback_info_new (MM_GENERIC_CDMA (modem), callback, user_data);
|
info = mm_generic_cdma_query_reg_state_callback_info_new (MM_GENERIC_CDMA (modem), callback, user_data);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
mm_at_serial_port_queue_command (port, "+CAD?", 3, get_analog_digital_done, info);
|
mm_at_serial_port_queue_command (port, "+CAD?", 3, get_analog_digital_done, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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_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_cdma1x_quality (MMGenericCdma *self, guint32 quality);
|
||||||
void mm_generic_cdma_update_evdo_quality (MMGenericCdma *self, guint32 quality);
|
void mm_generic_cdma_update_evdo_quality (MMGenericCdma *self, guint32 quality);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user