Cache signal quality after successful registration.

If trying to get signal quality when connected, use the cached value.
This commit is contained in:
Tambet Ingo
2008-09-11 11:22:04 +03:00
parent 40e4d2fed0
commit 55bc5300db

View File

@@ -19,12 +19,15 @@ typedef struct {
char *oper_code;
char *oper_name;
MMModemGsmNetworkRegStatus reg_status;
guint32 signal_quality;
guint32 cid;
guint32 pending_id;
} MMGenericGsmPrivate;
static void get_registration_status (MMSerial *serial, MMCallbackInfo *info);
static void real_register (MMSerial *serial, const char *network_id, MMCallbackInfo *info);
static void get_signal_quality (MMModemGsmNetwork *modem,
MMModemUIntFn callback,
gpointer user_data);
MMModem *
mm_generic_gsm_new (const char *serial_device, const char *driver)
@@ -306,7 +309,7 @@ get_reg_code_done (MMSerial *serial,
MMGenericGsmPrivate *priv = MM_GENERIC_GSM_GET_PRIVATE (serial);
g_free (priv->oper_code);
priv->oper_name = oper;
priv->oper_code = oper;
}
}
}
@@ -415,6 +418,7 @@ get_reg_status_done (MMSerial *serial,
/* Done */
mm_serial_queue_command (serial, "+COPS=3,2;+COPS?", 3, get_reg_code_done, NULL);
mm_serial_queue_command (serial, "+COPS=3,0;+COPS?", 3, get_reg_name_done, NULL);
get_signal_quality (MM_MODEM_GSM_NETWORK (serial), NULL, NULL);
done = TRUE;
break;
case MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE:
@@ -771,6 +775,7 @@ get_signal_quality_done (MMSerial *serial,
/* Normalize the quality */
quality = quality * 100 / 31;
MM_GENERIC_GSM_GET_PRIVATE (serial)->signal_quality = quality;
mm_callback_info_set_result (info, GUINT_TO_POINTER (quality), NULL);
} else
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL,
@@ -787,6 +792,12 @@ get_signal_quality (MMModemGsmNetwork *modem,
{
MMCallbackInfo *info;
if (mm_serial_is_connected (MM_SERIAL (modem))) {
g_message ("Returning saved signal quality %d", MM_GENERIC_GSM_GET_PRIVATE (modem)->signal_quality);
callback (MM_MODEM (modem), MM_GENERIC_GSM_GET_PRIVATE (modem)->signal_quality, NULL, user_data);
return;
}
info = mm_callback_info_uint_new (MM_MODEM (modem), callback, user_data);
mm_serial_queue_command (MM_SERIAL (modem), "+CSQ", 3, get_signal_quality_done, info);
}
@@ -872,11 +883,6 @@ finalize (GObject *object)
{
MMGenericGsmPrivate *priv = MM_GENERIC_GSM_GET_PRIVATE (object);
if (priv->pending_id) {
g_source_remove (priv->pending_id);
priv->pending_id = 0;
}
g_free (priv->driver);
g_free (priv->oper_code);
g_free (priv->oper_name);