iface-modem-signal: print signal quality under INFO verbosity
This commit is contained in:

committed by
Aleksander Morgado

parent
ec5eb6c3ac
commit
1533112182
@@ -364,6 +364,35 @@ mm_signal_set_error_rate (MMSignal *self,
|
||||
self->priv->error_rate = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* mm_signal_get_string: (skip)
|
||||
*/
|
||||
gchar *
|
||||
mm_signal_get_string (MMSignal *self)
|
||||
{
|
||||
GString *printable;
|
||||
|
||||
printable = g_string_new ("");
|
||||
if (self->priv->ecio != MM_SIGNAL_UNKNOWN)
|
||||
g_string_append_printf (printable, "Ec/Io: %3.0e dB", self->priv->ecio);
|
||||
if (self->priv->error_rate != MM_SIGNAL_UNKNOWN)
|
||||
g_string_append_printf (printable, "%serror rate: %f %%", printable->len ? ", " : "", self->priv->error_rate);
|
||||
if (self->priv->rscp != MM_SIGNAL_UNKNOWN)
|
||||
g_string_append_printf (printable, "%sRSCP: %f dBm", printable->len ? ", " : "", self->priv->rscp);
|
||||
if (self->priv->rscp != MM_SIGNAL_UNKNOWN)
|
||||
g_string_append_printf (printable, "%sRSRP: %f dBm", printable->len ? ", " : "", self->priv->rsrp);
|
||||
if (self->priv->rsrq != MM_SIGNAL_UNKNOWN)
|
||||
g_string_append_printf (printable, "%sRSRQ: %f dB", printable->len ? ", " : "", self->priv->rsrq);
|
||||
if (self->priv->rssi != MM_SIGNAL_UNKNOWN)
|
||||
g_string_append_printf (printable, "%sRSSI: %f dBm", printable->len ? ", " : "", self->priv->rssi);
|
||||
if (self->priv->sinr != MM_SIGNAL_UNKNOWN)
|
||||
g_string_append_printf (printable, "%sSINR: %f dB", printable->len ? ", " : "", self->priv->sinr);
|
||||
if (self->priv->snr != MM_SIGNAL_UNKNOWN)
|
||||
g_string_append_printf (printable, "%sSNR: %f dB", printable->len ? ", " : "", self->priv->snr);
|
||||
|
||||
return g_string_free (printable, FALSE);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/**
|
||||
|
@@ -106,6 +106,8 @@ void mm_signal_set_rsrp (MMSignal *self, gdouble value);
|
||||
void mm_signal_set_snr (MMSignal *self, gdouble value);
|
||||
void mm_signal_set_error_rate (MMSignal *self, gdouble value);
|
||||
|
||||
gchar *mm_signal_get_string (MMSignal *self);
|
||||
|
||||
#endif
|
||||
|
||||
G_END_DECLS
|
||||
|
@@ -43,11 +43,15 @@ typedef struct {
|
||||
/* threshold-based reporting */
|
||||
guint rssi_threshold;
|
||||
gboolean error_rate_threshold;
|
||||
/* info logging control */
|
||||
GTimer *info_log_timer;
|
||||
} Private;
|
||||
|
||||
static void
|
||||
private_free (Private *priv)
|
||||
{
|
||||
if (priv->info_log_timer)
|
||||
g_timer_destroy (priv->info_log_timer);
|
||||
if (priv->timeout_source)
|
||||
g_source_remove (priv->timeout_source);
|
||||
g_slice_free (Private, priv);
|
||||
@@ -80,6 +84,35 @@ mm_iface_modem_signal_bind_simple_status (MMIfaceModemSignal *self,
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* Even if the signal refresh rate is higher than 300s, don't pollute the INFO
|
||||
* level log with so many updates, force a reduction of the rate to once every
|
||||
* 300s */
|
||||
#define SIGNAL_QUALITY_PRINT_RATE_SECS 300
|
||||
|
||||
static void
|
||||
info_log_signal_quality (MMIfaceModemSignal *self,
|
||||
MMSignal *info,
|
||||
const gchar *rat)
|
||||
{
|
||||
Private *priv = NULL;
|
||||
g_autofree gchar *printable = NULL;
|
||||
g_autoptr(GDateTime) current_time = NULL;
|
||||
|
||||
priv = get_private (self);
|
||||
|
||||
if (G_UNLIKELY (!priv->info_log_timer))
|
||||
priv->info_log_timer = g_timer_new ();
|
||||
|
||||
if (g_timer_elapsed (priv->info_log_timer, NULL) < SIGNAL_QUALITY_PRINT_RATE_SECS)
|
||||
return;
|
||||
g_timer_reset (priv->info_log_timer);
|
||||
|
||||
printable = mm_signal_get_string (info);
|
||||
mm_obj_info (self, "%s: %s", rat, printable);
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
internal_signal_update (MMIfaceModemSignal *self,
|
||||
MMSignal *cdma,
|
||||
@@ -119,24 +152,28 @@ internal_signal_update (MMIfaceModemSignal *self,
|
||||
|
||||
if (gsm) {
|
||||
mm_obj_dbg (self, "gsm extended signal information updated");
|
||||
info_log_signal_quality (self, gsm, "gsm");
|
||||
dict_gsm = mm_signal_get_dictionary (gsm);
|
||||
}
|
||||
mm_gdbus_modem_signal_set_gsm (MM_GDBUS_MODEM_SIGNAL (skeleton), dict_gsm);
|
||||
|
||||
if (umts) {
|
||||
mm_obj_dbg (self, "umts extended signal information updated");
|
||||
info_log_signal_quality (self, umts, "umts");
|
||||
dict_umts = mm_signal_get_dictionary (umts);
|
||||
}
|
||||
mm_gdbus_modem_signal_set_umts (MM_GDBUS_MODEM_SIGNAL (skeleton), dict_umts);
|
||||
|
||||
if (lte) {
|
||||
mm_obj_dbg (self, "lte extended signal information updated");
|
||||
info_log_signal_quality (self, lte, "lte");
|
||||
dict_lte = mm_signal_get_dictionary (lte);
|
||||
}
|
||||
mm_gdbus_modem_signal_set_lte (MM_GDBUS_MODEM_SIGNAL (skeleton), dict_lte);
|
||||
|
||||
if (nr5g) {
|
||||
mm_obj_dbg (self, "5gnr extended signal information updated");
|
||||
info_log_signal_quality (self, nr5g, "5gnr");
|
||||
dict_nr5g = mm_signal_get_dictionary (nr5g);
|
||||
}
|
||||
mm_gdbus_modem_signal_set_nr5g (MM_GDBUS_MODEM_SIGNAL (skeleton), dict_nr5g);
|
||||
@@ -232,10 +269,10 @@ polling_restart (MMIfaceModemSignal *self)
|
||||
priv = get_private (self);
|
||||
polling_setup = (priv->enabled && priv->rate);
|
||||
|
||||
mm_obj_dbg (self, "%s extended signal information polling: interface %s, rate %u seconds",
|
||||
polling_setup ? "setting up" : "cleaning up",
|
||||
priv->enabled ? "enabled" : "disabled",
|
||||
priv->rate);
|
||||
if (polling_setup)
|
||||
mm_obj_info (self, "setting up extended signal information polling: rate %u seconds", priv->rate);
|
||||
else
|
||||
mm_obj_dbg (self, "cleaning up extended signal information polling");
|
||||
|
||||
/* Stop polling */
|
||||
if (!polling_setup) {
|
||||
|
Reference in New Issue
Block a user