iface-modem-signal: added 5G signal information
Extended the ModemManager Signal interface to include 5G signal information for RSRP, RSRQ and SINR via libqmi. Also extended mmci to print 5G signal info.
This commit is contained in:
committed by
Aleksander Morgado
parent
711b17278e
commit
88923ffe39
@@ -4342,6 +4342,7 @@ typedef struct {
|
||||
MMSignal *gsm;
|
||||
MMSignal *umts;
|
||||
MMSignal *lte;
|
||||
MMSignal *nr5g;
|
||||
} SignalLoadValuesResult;
|
||||
|
||||
static void
|
||||
@@ -4361,6 +4362,7 @@ modem_signal_load_values_finish (MMIfaceModemSignal *self,
|
||||
MMSignal **gsm,
|
||||
MMSignal **umts,
|
||||
MMSignal **lte,
|
||||
MMSignal **nr5g,
|
||||
GError **error)
|
||||
{
|
||||
SignalLoadValuesResult *result;
|
||||
@@ -4391,6 +4393,8 @@ modem_signal_load_values_finish (MMIfaceModemSignal *self,
|
||||
*cdma = NULL;
|
||||
if (evdo)
|
||||
*evdo = NULL;
|
||||
if (nr5g)
|
||||
*nr5g = NULL;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -4489,7 +4493,7 @@ parent_signal_load_values_ready (MMIfaceModemSignal *self,
|
||||
result = g_slice_new0 (SignalLoadValuesResult);
|
||||
if (!iface_modem_signal_parent->load_values_finish (self, res,
|
||||
NULL, NULL,
|
||||
&result->gsm, &result->umts, &result->lte,
|
||||
&result->gsm, &result->umts, &result->lte, &result->nr5g,
|
||||
&error)) {
|
||||
signal_load_values_result_free (result);
|
||||
g_task_return_error (task, error);
|
||||
|
||||
@@ -8463,6 +8463,7 @@ typedef struct {
|
||||
MMSignal *gsm;
|
||||
MMSignal *umts;
|
||||
MMSignal *lte;
|
||||
MMSignal *nr5g;
|
||||
} SignalLoadValuesResult;
|
||||
|
||||
typedef struct {
|
||||
@@ -8509,14 +8510,15 @@ get_db_from_sinr_level (MMBroadbandModemQmi *self,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
signal_load_values_finish (MMIfaceModemSignal *self,
|
||||
GAsyncResult *res,
|
||||
MMSignal **cdma,
|
||||
MMSignal **evdo,
|
||||
MMSignal **gsm,
|
||||
MMSignal **umts,
|
||||
MMSignal **lte,
|
||||
GError **error)
|
||||
signal_load_values_finish (MMIfaceModemSignal *self,
|
||||
GAsyncResult *res,
|
||||
MMSignal **cdma,
|
||||
MMSignal **evdo,
|
||||
MMSignal **gsm,
|
||||
MMSignal **umts,
|
||||
MMSignal **lte,
|
||||
MMSignal **nr5g,
|
||||
GError **error)
|
||||
{
|
||||
SignalLoadValuesResult *values_result;
|
||||
|
||||
@@ -8529,6 +8531,7 @@ signal_load_values_finish (MMIfaceModemSignal *self,
|
||||
*gsm = values_result->gsm ? g_object_ref (values_result->gsm) : NULL;
|
||||
*umts = values_result->umts ? g_object_ref (values_result->umts) : NULL;
|
||||
*lte = values_result->lte ? g_object_ref (values_result->lte) : NULL;
|
||||
*nr5g = values_result->nr5g ? g_object_ref (values_result->nr5g) : NULL;
|
||||
signal_load_values_result_free (values_result);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -8693,15 +8696,16 @@ signal_load_values_get_signal_info_ready (QmiClientNas *client,
|
||||
GAsyncResult *res,
|
||||
GTask *task)
|
||||
{
|
||||
MMBroadbandModemQmi *self;
|
||||
SignalLoadValuesContext *ctx;
|
||||
gint8 rssi;
|
||||
gint16 ecio;
|
||||
QmiNasEvdoSinrLevel sinr_level;
|
||||
gint32 io;
|
||||
gint8 rsrq;
|
||||
gint16 rsrp;
|
||||
gint16 snr;
|
||||
MMBroadbandModemQmi *self;
|
||||
SignalLoadValuesContext *ctx;
|
||||
gint8 rssi;
|
||||
gint16 ecio;
|
||||
QmiNasEvdoSinrLevel sinr_level;
|
||||
gint32 io;
|
||||
gint8 rsrq;
|
||||
gint16 rsrp;
|
||||
gint16 snr;
|
||||
gint16 rsrq_5g;
|
||||
g_autoptr(QmiMessageNasGetSignalInfoOutput) output = NULL;
|
||||
|
||||
self = g_task_get_source_object (task);
|
||||
@@ -8774,6 +8778,22 @@ signal_load_values_get_signal_info_ready (QmiClientNas *client,
|
||||
mm_signal_set_snr (ctx->values_result->lte, (0.1) * ((gdouble)snr));
|
||||
}
|
||||
|
||||
/* 5G */
|
||||
if (qmi_message_nas_get_signal_info_output_get_5g_signal_strength (output,
|
||||
&rsrp,
|
||||
&snr,
|
||||
NULL)) {
|
||||
ctx->values_result->nr5g = mm_signal_new ();
|
||||
mm_signal_set_rsrp (ctx->values_result->nr5g, (gdouble)rsrp);
|
||||
mm_signal_set_snr (ctx->values_result->nr5g, (gdouble)snr);
|
||||
}
|
||||
|
||||
if (qmi_message_nas_get_signal_info_output_get_5g_signal_strength_extended (output,
|
||||
&rsrq_5g,
|
||||
NULL)) {
|
||||
mm_signal_set_rsrq (ctx->values_result->nr5g, (gdouble)rsrq_5g);
|
||||
}
|
||||
|
||||
/* Keep on */
|
||||
ctx->step++;
|
||||
signal_load_values_context_step (task);
|
||||
|
||||
@@ -9981,6 +9981,7 @@ modem_signal_load_values_finish (MMIfaceModemSignal *self,
|
||||
MMSignal **gsm,
|
||||
MMSignal **umts,
|
||||
MMSignal **lte,
|
||||
MMSignal **nr5g,
|
||||
GError **error)
|
||||
{
|
||||
const gchar *response;
|
||||
@@ -9994,6 +9995,9 @@ modem_signal_load_values_finish (MMIfaceModemSignal *self,
|
||||
*cdma = NULL;
|
||||
if (evdo)
|
||||
*evdo = NULL;
|
||||
if (nr5g)
|
||||
*nr5g = NULL;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@ clear_values (MMIfaceModemSignal *self)
|
||||
mm_gdbus_modem_signal_set_gsm (skeleton, NULL);
|
||||
mm_gdbus_modem_signal_set_umts (skeleton, NULL);
|
||||
mm_gdbus_modem_signal_set_lte (skeleton, NULL);
|
||||
mm_gdbus_modem_signal_set_nr5g (skeleton, NULL);
|
||||
g_object_unref (skeleton);
|
||||
}
|
||||
|
||||
@@ -82,6 +83,7 @@ load_values_ready (MMIfaceModemSignal *self,
|
||||
MMSignal *gsm = NULL;
|
||||
MMSignal *umts = NULL;
|
||||
MMSignal *lte = NULL;
|
||||
MMSignal *nr5g = NULL;
|
||||
MmGdbusModemSignal *skeleton;
|
||||
|
||||
if (!MM_IFACE_MODEM_SIGNAL_GET_INTERFACE (self)->load_values_finish (
|
||||
@@ -92,6 +94,7 @@ load_values_ready (MMIfaceModemSignal *self,
|
||||
&gsm,
|
||||
&umts,
|
||||
<e,
|
||||
&nr5g,
|
||||
&error)) {
|
||||
mm_obj_warn (self, "couldn't load extended signal information: %s", error->message);
|
||||
g_error_free (error);
|
||||
@@ -147,6 +150,15 @@ load_values_ready (MMIfaceModemSignal *self,
|
||||
} else
|
||||
mm_gdbus_modem_signal_set_lte (skeleton, NULL);
|
||||
|
||||
if (nr5g) {
|
||||
dictionary = mm_signal_get_dictionary (nr5g);
|
||||
mm_gdbus_modem_signal_set_nr5g (skeleton, dictionary);
|
||||
g_variant_unref (dictionary);
|
||||
g_object_unref (nr5g);
|
||||
} else
|
||||
mm_gdbus_modem_signal_set_nr5g (skeleton, NULL);
|
||||
|
||||
|
||||
/* Flush right away */
|
||||
g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (skeleton));
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ struct _MMIfaceModemSignal {
|
||||
MMSignal **gsm,
|
||||
MMSignal **umts,
|
||||
MMSignal **lte,
|
||||
MMSignal **nr5g,
|
||||
GError **error);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user