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 /libmm-glib/mm-modem-signal.c | |
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.
Diffstat (limited to 'libmm-glib/mm-modem-signal.c')
-rw-r--r-- | libmm-glib/mm-modem-signal.c | 62 |
1 files changed, 61 insertions, 1 deletions
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 |