aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2010-11-29 12:01:42 -0600
committerDan Williams <dcbw@redhat.com>2010-11-29 12:01:42 -0600
commit586c9ec2c5ab66c16b934ef5f0b9b6803904ea84 (patch)
tree3f97ea84f4a87dcd1708f8ceae53b5f6f2035bca
parenta00966d4aa0973aef9a520b966d6c5a93d094053 (diff)
gsm: don't poll signal quality if it was recently updated
-rw-r--r--src/mm-generic-gsm.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c
index 2a4885a8..b7de209b 100644
--- a/src/mm-generic-gsm.c
+++ b/src/mm-generic-gsm.c
@@ -102,7 +102,8 @@ typedef struct {
gint service_ind;
guint signal_quality_id;
- time_t signal_quality_timestamp;
+ time_t signal_emit_timestamp;
+ time_t signal_update_timestamp;
guint32 signal_quality;
gint cid;
@@ -976,9 +977,12 @@ periodic_poll_cb (gpointer user_data)
if (priv->cgreg_poll)
mm_at_serial_port_queue_command (port, "+CGREG?", 10, reg_poll_response, self);
- mm_modem_gsm_network_get_signal_quality (MM_MODEM_GSM_NETWORK (self),
- periodic_signal_quality_cb,
- NULL);
+ /* Don't poll signal quality if we got a notification in the past 10 seconds */
+ if (time (NULL) - priv->signal_update_timestamp > 10) {
+ mm_modem_gsm_network_get_signal_quality (MM_MODEM_GSM_NETWORK (self),
+ periodic_signal_quality_cb,
+ NULL);
+ }
if (MM_GENERIC_GSM_GET_CLASS (self)->get_access_technology)
MM_GENERIC_GSM_GET_CLASS (self)->get_access_technology (self, periodic_access_tech_cb, NULL);
@@ -3229,7 +3233,7 @@ emit_signal_quality_change (gpointer user_data)
MMGenericGsmPrivate *priv = MM_GENERIC_GSM_GET_PRIVATE (self);
priv->signal_quality_id = 0;
- priv->signal_quality_timestamp = time (NULL);
+ priv->signal_emit_timestamp = time (NULL);
mm_modem_gsm_network_signal_quality (MM_MODEM_GSM_NETWORK (self), priv->signal_quality);
return FALSE;
}
@@ -3246,6 +3250,8 @@ mm_generic_gsm_update_signal_quality (MMGenericGsm *self, guint32 quality)
priv = MM_GENERIC_GSM_GET_PRIVATE (self);
+ priv->signal_update_timestamp = time (NULL);
+
if (priv->signal_quality == quality)
return;
@@ -3257,12 +3263,12 @@ mm_generic_gsm_update_signal_quality (MMGenericGsm *self, guint32 quality)
* haven't been any updates in a while.
*/
if (!priv->signal_quality_id) {
- if (priv->signal_quality_timestamp > 0) {
+ if (priv->signal_emit_timestamp > 0) {
time_t curtime;
long int diff;
curtime = time (NULL);
- diff = curtime - priv->signal_quality_timestamp;
+ diff = curtime - priv->signal_emit_timestamp;
if (diff == 0) {
/* If the device is sending more than one update per second,
* make sure we don't spam clients with signals.