diff options
author | Walter Hagstrom <walter.hagstrom@digi.com> | 2020-06-23 11:14:43 -0400 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2020-07-04 05:50:41 +0200 |
commit | 88923ffe3996fdef83dc13a7a4762855af77706d (patch) | |
tree | 38e1240a6a9db59c6f95d16a6316dba6e2ec7418 | |
parent | 711b17278edecbc474418ecf95e7582f515711cb (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.c | 16 | ||||
-rw-r--r-- | cli/mmcli-output.c | 4 | ||||
-rw-r--r-- | cli/mmcli-output.h | 4 | ||||
-rw-r--r-- | docs/reference/libmm-glib/libmm-glib-sections.txt | 2 | ||||
-rw-r--r-- | introspection/org.freedesktop.ModemManager1.Modem.Signal.xml | 38 | ||||
-rw-r--r-- | libmm-glib/mm-modem-signal.c | 62 | ||||
-rw-r--r-- | libmm-glib/mm-modem-signal.h | 3 | ||||
-rw-r--r-- | plugins/cinterion/mm-broadband-modem-cinterion.c | 5 | ||||
-rw-r--r-- | plugins/huawei/mm-broadband-modem-huawei.c | 3 | ||||
-rw-r--r-- | plugins/xmm/mm-shared-xmm.c | 3 | ||||
-rw-r--r-- | plugins/xmm/mm-shared-xmm.h | 1 | ||||
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 6 | ||||
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 54 | ||||
-rw-r--r-- | src/mm-broadband-modem.c | 4 | ||||
-rw-r--r-- | src/mm-iface-modem-signal.c | 12 | ||||
-rw-r--r-- | src/mm-iface-modem-signal.h | 1 |
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, <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)); 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); }; |