diff options
author | Dan Williams <dcbw@redhat.com> | 2010-11-29 12:01:42 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2010-11-29 12:01:42 -0600 |
commit | 586c9ec2c5ab66c16b934ef5f0b9b6803904ea84 (patch) | |
tree | 3f97ea84f4a87dcd1708f8ceae53b5f6f2035bca /src | |
parent | a00966d4aa0973aef9a520b966d6c5a93d094053 (diff) |
gsm: don't poll signal quality if it was recently updated
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-generic-gsm.c | 20 |
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. |