aboutsummaryrefslogtreecommitdiff
path: root/libmm-glib/mm-modem-signal.c
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 /libmm-glib/mm-modem-signal.c
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 'libmm-glib/mm-modem-signal.c')
-rw-r--r--libmm-glib/mm-modem-signal.c62
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