aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWalter Hagstrom <walter.hagstrom@digi.com>2020-06-23 11:14:43 -0400
committerAleksander Morgado <aleksander@aleksander.es>2020-07-04 05:50:41 +0200
commit88923ffe3996fdef83dc13a7a4762855af77706d (patch)
tree38e1240a6a9db59c6f95d16a6316dba6e2ec7418 /src
parent711b17278edecbc474418ecf95e7582f515711cb (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem-mbim.c6
-rw-r--r--src/mm-broadband-modem-qmi.c54
-rw-r--r--src/mm-broadband-modem.c4
-rw-r--r--src/mm-iface-modem-signal.c12
-rw-r--r--src/mm-iface-modem-signal.h1
5 files changed, 59 insertions, 18 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index 8954889b..4bf941d5 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -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);
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index e3a616ae..4169fa15 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -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);
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 6977fe33..f3b19402 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -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;
}
diff --git a/src/mm-iface-modem-signal.c b/src/mm-iface-modem-signal.c
index 03e4ce1f..447b7cf2 100644
--- a/src/mm-iface-modem-signal.c
+++ b/src/mm-iface-modem-signal.c
@@ -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,
&lte,
+ &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));
diff --git a/src/mm-iface-modem-signal.h b/src/mm-iface-modem-signal.h
index 1d49e5f3..15874b3f 100644
--- a/src/mm-iface-modem-signal.h
+++ b/src/mm-iface-modem-signal.h
@@ -54,6 +54,7 @@ struct _MMIfaceModemSignal {
MMSignal **gsm,
MMSignal **umts,
MMSignal **lte,
+ MMSignal **nr5g,
GError **error);
};