aboutsummaryrefslogtreecommitdiff
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
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.
-rw-r--r--cli/mmcli-modem-signal.c16
-rw-r--r--cli/mmcli-output.c4
-rw-r--r--cli/mmcli-output.h4
-rw-r--r--docs/reference/libmm-glib/libmm-glib-sections.txt2
-rw-r--r--introspection/org.freedesktop.ModemManager1.Modem.Signal.xml38
-rw-r--r--libmm-glib/mm-modem-signal.c62
-rw-r--r--libmm-glib/mm-modem-signal.h3
-rw-r--r--plugins/cinterion/mm-broadband-modem-cinterion.c5
-rw-r--r--plugins/huawei/mm-broadband-modem-huawei.c3
-rw-r--r--plugins/xmm/mm-shared-xmm.c3
-rw-r--r--plugins/xmm/mm-shared-xmm.h1
-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
16 files changed, 198 insertions, 20 deletions
diff --git a/cli/mmcli-modem-signal.c b/cli/mmcli-modem-signal.c
index 506d7370..7fa476c1 100644
--- a/cli/mmcli-modem-signal.c
+++ b/cli/mmcli-modem-signal.c
@@ -153,6 +153,9 @@ print_signal_info (void)
gchar *lte_rsrp = NULL;
gchar *lte_rsrq = NULL;
gchar *lte_snr = NULL;
+ gchar *nr5g_rsrp = NULL;
+ gchar *nr5g_rsrq = NULL;
+ gchar *nr5g_snr = NULL;
refresh_rate = g_strdup_printf ("%u", mm_modem_signal_get_rate (ctx->modem_signal));
@@ -204,6 +207,16 @@ print_signal_info (void)
lte_snr = g_strdup_printf ("%.2lf", value);
}
+ signal = mm_modem_signal_peek_nr5g (ctx->modem_signal);
+ if (signal) {
+ if ((value = mm_signal_get_rsrq (signal)) != MM_SIGNAL_UNKNOWN)
+ nr5g_rsrq = g_strdup_printf ("%.2lf", value);
+ if ((value = mm_signal_get_rsrp (signal)) != MM_SIGNAL_UNKNOWN)
+ nr5g_rsrp = g_strdup_printf ("%.2lf", value);
+ if ((value = mm_signal_get_snr (signal)) != MM_SIGNAL_UNKNOWN)
+ nr5g_snr = g_strdup_printf ("%.2lf", value);
+ }
+
mmcli_output_string_take_typed (MMC_F_SIGNAL_REFRESH_RATE, refresh_rate, "seconds");
mmcli_output_string_take_typed (MMC_F_SIGNAL_CDMA1X_RSSI, cdma1x_rssi, "dBm");
mmcli_output_string_take_typed (MMC_F_SIGNAL_CDMA1X_ECIO, cdma1x_ecio, "dBm");
@@ -219,6 +232,9 @@ print_signal_info (void)
mmcli_output_string_take_typed (MMC_F_SIGNAL_LTE_RSRQ, lte_rsrq, "dB");
mmcli_output_string_take_typed (MMC_F_SIGNAL_LTE_RSRP, lte_rsrp, "dBm");
mmcli_output_string_take_typed (MMC_F_SIGNAL_LTE_SNR, lte_snr, "dB");
+ mmcli_output_string_take_typed (MMC_F_SIGNAL_5G_RSRQ, nr5g_rsrq, "dB");
+ mmcli_output_string_take_typed (MMC_F_SIGNAL_5G_RSRP, nr5g_rsrp, "dBm");
+ mmcli_output_string_take_typed (MMC_F_SIGNAL_5G_SNR, nr5g_snr, "dB");
mmcli_output_dump ();
}
diff --git a/cli/mmcli-output.c b/cli/mmcli-output.c
index 1265856d..2242de8f 100644
--- a/cli/mmcli-output.c
+++ b/cli/mmcli-output.c
@@ -57,6 +57,7 @@ static SectionInfo section_infos[] = {
[MMC_S_MODEM_SIGNAL_GSM] = { "GSM" },
[MMC_S_MODEM_SIGNAL_UMTS] = { "UMTS" },
[MMC_S_MODEM_SIGNAL_LTE] = { "LTE" },
+ [MMC_S_MODEM_SIGNAL_5G] = { "5G" },
[MMC_S_MODEM_OMA] = { "OMA" },
[MMC_S_MODEM_OMA_CURRENT] = { "Current session" },
[MMC_S_MODEM_OMA_PENDING] = { "Pending sessions" },
@@ -169,6 +170,9 @@ static FieldInfo field_infos[] = {
[MMC_F_SIGNAL_LTE_RSRQ] = { "modem.signal.lte.rsrq", "rsrq", MMC_S_MODEM_SIGNAL_LTE, },
[MMC_F_SIGNAL_LTE_RSRP] = { "modem.signal.lte.rsrp", "rsrp", MMC_S_MODEM_SIGNAL_LTE, },
[MMC_F_SIGNAL_LTE_SNR] = { "modem.signal.lte.snr", "s/n", MMC_S_MODEM_SIGNAL_LTE, },
+ [MMC_F_SIGNAL_5G_RSRQ] = { "modem.signal.5g.rsrq", "rsrq", MMC_S_MODEM_SIGNAL_5G, },
+ [MMC_F_SIGNAL_5G_RSRP] = { "modem.signal.5g.rsrp", "rsrp", MMC_S_MODEM_SIGNAL_5G, },
+ [MMC_F_SIGNAL_5G_SNR] = { "modem.signal.5g.snr", "s/n", MMC_S_MODEM_SIGNAL_5G, },
[MMC_F_OMA_FEATURES] = { "modem.oma.features", "features", MMC_S_MODEM_OMA, },
[MMC_F_OMA_CURRENT_TYPE] = { "modem.oma.current.type", "type", MMC_S_MODEM_OMA_CURRENT, },
[MMC_F_OMA_CURRENT_STATE] = { "modem.oma.current.state", "state", MMC_S_MODEM_OMA_CURRENT, },
diff --git a/cli/mmcli-output.h b/cli/mmcli-output.h
index 2cd02b4b..e350b340 100644
--- a/cli/mmcli-output.h
+++ b/cli/mmcli-output.h
@@ -54,6 +54,7 @@ typedef enum {
MMC_S_MODEM_SIGNAL_GSM,
MMC_S_MODEM_SIGNAL_UMTS,
MMC_S_MODEM_SIGNAL_LTE,
+ MMC_S_MODEM_SIGNAL_5G,
MMC_S_MODEM_OMA,
MMC_S_MODEM_OMA_CURRENT,
MMC_S_MODEM_OMA_PENDING,
@@ -179,6 +180,9 @@ typedef enum {
MMC_F_SIGNAL_LTE_RSRQ,
MMC_F_SIGNAL_LTE_RSRP,
MMC_F_SIGNAL_LTE_SNR,
+ MMC_F_SIGNAL_5G_RSRQ,
+ MMC_F_SIGNAL_5G_RSRP,
+ MMC_F_SIGNAL_5G_SNR,
/* OMA section */
MMC_F_OMA_FEATURES,
MMC_F_OMA_CURRENT_TYPE,
diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt
index 00c3adfb..9bdbb21c 100644
--- a/docs/reference/libmm-glib/libmm-glib-sections.txt
+++ b/docs/reference/libmm-glib/libmm-glib-sections.txt
@@ -2793,11 +2793,13 @@ mm_gdbus_modem_signal_get_evdo
mm_gdbus_modem_signal_get_gsm
mm_gdbus_modem_signal_get_umts
mm_gdbus_modem_signal_get_lte
+mm_gdbus_modem_signal_get_nr5g
mm_gdbus_modem_signal_dup_cdma
mm_gdbus_modem_signal_dup_evdo
mm_gdbus_modem_signal_dup_gsm
mm_gdbus_modem_signal_dup_umts
mm_gdbus_modem_signal_dup_lte
+mm_gdbus_modem_signal_dup_nr5g
<SUBSECTION Methods>
mm_gdbus_modem_signal_call_setup
mm_gdbus_modem_signal_call_setup_finish
diff --git a/introspection/org.freedesktop.ModemManager1.Modem.Signal.xml b/introspection/org.freedesktop.ModemManager1.Modem.Signal.xml
index 38c79578..610c6db9 100644
--- a/introspection/org.freedesktop.ModemManager1.Modem.Signal.xml
+++ b/introspection/org.freedesktop.ModemManager1.Modem.Signal.xml
@@ -221,5 +221,43 @@
-->
<property name="Lte" type="a{sv}" access="read" />
+ <!--
+ Nr5g:
+
+ Dictionary of available signal information for the 5G access
+ technology.
+
+ This dictionary is composed of a string key, with an associated data
+ which contains type-specific information.
+
+ <variablelist>
+ <varlistentry><term><literal>"rsrq"</literal></term>
+ <listitem>
+ <para>
+ The 5G RSRQ (Reference Signal Received Quality), in dB, given as
+ a floating point value (signature <literal>"d"</literal>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry><term><literal>"rsrp"</literal></term>
+ <listitem>
+ <para>
+ The 5G (Reference Signal Received Power), in dBm, given as
+ a floating point value (signature <literal>"d"</literal>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry><term><literal>"snr"</literal></term>
+ <listitem>
+ <para>
+ The 5G S/R ratio, in dB, given as
+ a floating point value (signature <literal>"d"</literal>).
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ -->
+ <property name="Nr5g" type="a{sv}" access="read" />
+
</interface>
</node>
diff --git a/libmm-glib/mm-modem-signal.c b/libmm-glib/mm-modem-signal.c
index 7727be6a..0b740c72 100644
--- a/libmm-glib/mm-modem-signal.c
+++ b/libmm-glib/mm-modem-signal.c
@@ -53,6 +53,7 @@ typedef enum {
UPDATED_PROPERTY_TYPE_GSM = 2,
UPDATED_PROPERTY_TYPE_UMTS = 3,
UPDATED_PROPERTY_TYPE_LTE = 4,
+ UPDATED_PROPERTY_TYPE_NR5G = 5,
UPDATED_PROPERTY_TYPE_LAST
} UpdatedPropertyType;
@@ -250,6 +251,13 @@ lte_updated (MMModemSignal *self,
values_updated (self, pspec, UPDATED_PROPERTY_TYPE_LTE);
}
+static void
+nr5g_updated (MMModemSignal *self,
+ GParamSpec *pspec)
+{
+ values_updated (self, pspec, UPDATED_PROPERTY_TYPE_NR5G);
+}
+
typedef GVariant * (* Getter) (MmGdbusModemSignal *self);
typedef GVariant * (* Dupper) (MmGdbusModemSignal *self);
typedef void (* UpdatedCallback) (MMModemSignal *self, GParamSpec *pspec);
@@ -265,7 +273,8 @@ static const SignalData signal_data [UPDATED_PROPERTY_TYPE_LAST] = {
{ "notify::evdo", mm_gdbus_modem_signal_get_evdo, mm_gdbus_modem_signal_dup_evdo, evdo_updated },
{ "notify::gsm", mm_gdbus_modem_signal_get_gsm, mm_gdbus_modem_signal_dup_gsm, gsm_updated },
{ "notify::umts", mm_gdbus_modem_signal_get_umts, mm_gdbus_modem_signal_dup_umts, umts_updated },
- { "notify::lte", mm_gdbus_modem_signal_get_lte, mm_gdbus_modem_signal_dup_lte, lte_updated }
+ { "notify::lte", mm_gdbus_modem_signal_get_lte, mm_gdbus_modem_signal_dup_lte, lte_updated },
+ { "notify::nr5g", mm_gdbus_modem_signal_get_nr5g, mm_gdbus_modem_signal_dup_nr5g, nr5g_updated }
};
static void
@@ -572,6 +581,33 @@ mm_modem_signal_get_lte (MMModemSignal *self)
}
/**
+ * mm_modem_signal_get_nr5g:
+ * @self: A #MMModem.
+ *
+ * Gets a #MMSignal object specifying the 5G signal information.
+ *
+ * <warning>The values reported by @self are not updated when the values in the
+ * interface change. Instead, the client is expected to call
+ * mm_modem_signal_get_nr5g() again to get a new #MMSignal with the new values.
+ * </warning>
+ *
+ * Returns: (transfer full): A #MMSignal that must be freed with
+ * g_object_unref() or %NULL if unknown.
+ *
+ * Since: 1.16
+ */
+MMSignal *
+mm_modem_signal_get_nr5g (MMModemSignal *self)
+{
+ MMSignal *info = NULL;
+
+ g_return_val_if_fail (MM_IS_MODEM_SIGNAL (self), NULL);
+
+ ensure_internal (self, &info, UPDATED_PROPERTY_TYPE_NR5G);
+ return info;
+}
+
+/**
* mm_modem_signal_peek_lte:
* @self: A #MMModem.
*
@@ -595,6 +631,30 @@ mm_modem_signal_peek_lte (MMModemSignal *self)
return self->priv->values[UPDATED_PROPERTY_TYPE_LTE].info;
}
+/**
+ * mm_modem_signal_peek_nr5g:
+ * @self: A #MMModem.
+ *
+ * Gets a #MMSignal object specifying the 5G signal information.
+ *
+ * <warning>The returned value is only valid until the property changes so it is
+ * only safe to use this function on the thread where @self was constructed. Use
+ * mm_modem_signal_get_nr5g() if on another thread.</warning>
+ *
+ * Returns: (transfer none): A #MMSignal. Do not free the returned value, it
+ * belongs to @self.
+ *
+ * Since: 1.16
+ */
+MMSignal *
+mm_modem_signal_peek_nr5g (MMModemSignal *self)
+{
+ g_return_val_if_fail (MM_IS_MODEM_SIGNAL (self), NULL);
+
+ ensure_internal (self, NULL, UPDATED_PROPERTY_TYPE_NR5G);
+ return self->priv->values[UPDATED_PROPERTY_TYPE_NR5G].info;
+}
+
/*****************************************************************************/
static void
diff --git a/libmm-glib/mm-modem-signal.h b/libmm-glib/mm-modem-signal.h
index 63b82ab9..5c0cb6aa 100644
--- a/libmm-glib/mm-modem-signal.h
+++ b/libmm-glib/mm-modem-signal.h
@@ -97,6 +97,9 @@ MMSignal *mm_modem_signal_peek_umts (MMModemSignal *self);
MMSignal *mm_modem_signal_get_lte (MMModemSignal *self);
MMSignal *mm_modem_signal_peek_lte (MMModemSignal *self);
+MMSignal *mm_modem_signal_get_nr5g (MMModemSignal *self);
+MMSignal *mm_modem_signal_peek_nr5g (MMModemSignal *self);
+
G_END_DECLS
#endif /* _MM_MODEM_SIGNAL_H_ */
diff --git a/plugins/cinterion/mm-broadband-modem-cinterion.c b/plugins/cinterion/mm-broadband-modem-cinterion.c
index 99875210..e1e558c3 100644
--- a/plugins/cinterion/mm-broadband-modem-cinterion.c
+++ b/plugins/cinterion/mm-broadband-modem-cinterion.c
@@ -2187,13 +2187,14 @@ signal_load_values_finish (MMIfaceModemSignal *_self,
MMSignal **gsm,
MMSignal **umts,
MMSignal **lte,
+ MMSignal **nr5g,
GError **error)
{
MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
const gchar *response;
if (self->priv->smoni_support == FEATURE_NOT_SUPPORTED)
- return iface_modem_signal_parent->load_values_finish (_self, res, cdma, evdo, gsm, umts, lte, error);
+ return iface_modem_signal_parent->load_values_finish (_self, res, cdma, evdo, gsm, umts, lte, nr5g, error);
response = mm_base_modem_at_command_finish (MM_BASE_MODEM (_self), res, error);
if (!response || !mm_cinterion_smoni_response_to_signal_info (response, gsm, umts, lte, error))
@@ -2203,6 +2204,8 @@ signal_load_values_finish (MMIfaceModemSignal *_self,
*cdma = NULL;
if (evdo)
*evdo = NULL;
+ if (nr5g)
+ *nr5g = NULL;
return TRUE;
}
diff --git a/plugins/huawei/mm-broadband-modem-huawei.c b/plugins/huawei/mm-broadband-modem-huawei.c
index 023b58fa..fafd097b 100644
--- a/plugins/huawei/mm-broadband-modem-huawei.c
+++ b/plugins/huawei/mm-broadband-modem-huawei.c
@@ -87,6 +87,7 @@ typedef struct {
MMSignal *gsm;
MMSignal *umts;
MMSignal *lte;
+ MMSignal *nr5g;
} DetailedSignal;
struct _MMBroadbandModemHuaweiPrivate {
@@ -4209,6 +4210,7 @@ signal_load_values_finish (MMIfaceModemSignal *self,
MMSignal **gsm,
MMSignal **umts,
MMSignal **lte,
+ MMSignal **nr5g,
GError **error)
{
DetailedSignal *signals;
@@ -4222,6 +4224,7 @@ signal_load_values_finish (MMIfaceModemSignal *self,
*gsm = signals->gsm ? g_object_ref (signals->gsm) : NULL;
*umts = signals->umts ? g_object_ref (signals->umts) : NULL;
*lte = signals->lte ? g_object_ref (signals->lte) : NULL;
+ *nr5g = signals->nr5g ? g_object_ref (signals->nr5g) : NULL;
detailed_signal_free (signals);
return TRUE;
diff --git a/plugins/xmm/mm-shared-xmm.c b/plugins/xmm/mm-shared-xmm.c
index 746aff36..e2203942 100644
--- a/plugins/xmm/mm-shared-xmm.c
+++ b/plugins/xmm/mm-shared-xmm.c
@@ -761,6 +761,7 @@ mm_shared_xmm_signal_load_values_finish (MMIfaceModemSignal *self,
MMSignal **gsm,
MMSignal **umts,
MMSignal **lte,
+ MMSignal **nr5g,
GError **error)
{
const gchar *response;
@@ -773,6 +774,8 @@ mm_shared_xmm_signal_load_values_finish (MMIfaceModemSignal *self,
*cdma = NULL;
if (evdo)
*evdo = NULL;
+ if (nr5g)
+ *nr5g = NULL;
return TRUE;
}
diff --git a/plugins/xmm/mm-shared-xmm.h b/plugins/xmm/mm-shared-xmm.h
index 1a4f4744..a1f51639 100644
--- a/plugins/xmm/mm-shared-xmm.h
+++ b/plugins/xmm/mm-shared-xmm.h
@@ -140,6 +140,7 @@ gboolean mm_shared_xmm_signal_load_values_finish (MMIfaceModemSign
MMSignal **gsm,
MMSignal **umts,
MMSignal **lte,
+ MMSignal **nr5g,
GError **error);
void mm_shared_xmm_signal_load_values (MMIfaceModemSignal *self,
GCancellable *cancellable,
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);
};