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.
This commit is contained in:

committed by
Aleksander Morgado

parent
711b17278e
commit
88923ffe39
@@ -153,6 +153,9 @@ print_signal_info (void)
|
|||||||
gchar *lte_rsrp = NULL;
|
gchar *lte_rsrp = NULL;
|
||||||
gchar *lte_rsrq = NULL;
|
gchar *lte_rsrq = NULL;
|
||||||
gchar *lte_snr = 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));
|
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);
|
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_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_RSSI, cdma1x_rssi, "dBm");
|
||||||
mmcli_output_string_take_typed (MMC_F_SIGNAL_CDMA1X_ECIO, cdma1x_ecio, "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_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_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_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 ();
|
mmcli_output_dump ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -57,6 +57,7 @@ static SectionInfo section_infos[] = {
|
|||||||
[MMC_S_MODEM_SIGNAL_GSM] = { "GSM" },
|
[MMC_S_MODEM_SIGNAL_GSM] = { "GSM" },
|
||||||
[MMC_S_MODEM_SIGNAL_UMTS] = { "UMTS" },
|
[MMC_S_MODEM_SIGNAL_UMTS] = { "UMTS" },
|
||||||
[MMC_S_MODEM_SIGNAL_LTE] = { "LTE" },
|
[MMC_S_MODEM_SIGNAL_LTE] = { "LTE" },
|
||||||
|
[MMC_S_MODEM_SIGNAL_5G] = { "5G" },
|
||||||
[MMC_S_MODEM_OMA] = { "OMA" },
|
[MMC_S_MODEM_OMA] = { "OMA" },
|
||||||
[MMC_S_MODEM_OMA_CURRENT] = { "Current session" },
|
[MMC_S_MODEM_OMA_CURRENT] = { "Current session" },
|
||||||
[MMC_S_MODEM_OMA_PENDING] = { "Pending sessions" },
|
[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_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_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_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_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_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, },
|
[MMC_F_OMA_CURRENT_STATE] = { "modem.oma.current.state", "state", MMC_S_MODEM_OMA_CURRENT, },
|
||||||
|
@@ -54,6 +54,7 @@ typedef enum {
|
|||||||
MMC_S_MODEM_SIGNAL_GSM,
|
MMC_S_MODEM_SIGNAL_GSM,
|
||||||
MMC_S_MODEM_SIGNAL_UMTS,
|
MMC_S_MODEM_SIGNAL_UMTS,
|
||||||
MMC_S_MODEM_SIGNAL_LTE,
|
MMC_S_MODEM_SIGNAL_LTE,
|
||||||
|
MMC_S_MODEM_SIGNAL_5G,
|
||||||
MMC_S_MODEM_OMA,
|
MMC_S_MODEM_OMA,
|
||||||
MMC_S_MODEM_OMA_CURRENT,
|
MMC_S_MODEM_OMA_CURRENT,
|
||||||
MMC_S_MODEM_OMA_PENDING,
|
MMC_S_MODEM_OMA_PENDING,
|
||||||
@@ -179,6 +180,9 @@ typedef enum {
|
|||||||
MMC_F_SIGNAL_LTE_RSRQ,
|
MMC_F_SIGNAL_LTE_RSRQ,
|
||||||
MMC_F_SIGNAL_LTE_RSRP,
|
MMC_F_SIGNAL_LTE_RSRP,
|
||||||
MMC_F_SIGNAL_LTE_SNR,
|
MMC_F_SIGNAL_LTE_SNR,
|
||||||
|
MMC_F_SIGNAL_5G_RSRQ,
|
||||||
|
MMC_F_SIGNAL_5G_RSRP,
|
||||||
|
MMC_F_SIGNAL_5G_SNR,
|
||||||
/* OMA section */
|
/* OMA section */
|
||||||
MMC_F_OMA_FEATURES,
|
MMC_F_OMA_FEATURES,
|
||||||
MMC_F_OMA_CURRENT_TYPE,
|
MMC_F_OMA_CURRENT_TYPE,
|
||||||
|
@@ -2793,11 +2793,13 @@ mm_gdbus_modem_signal_get_evdo
|
|||||||
mm_gdbus_modem_signal_get_gsm
|
mm_gdbus_modem_signal_get_gsm
|
||||||
mm_gdbus_modem_signal_get_umts
|
mm_gdbus_modem_signal_get_umts
|
||||||
mm_gdbus_modem_signal_get_lte
|
mm_gdbus_modem_signal_get_lte
|
||||||
|
mm_gdbus_modem_signal_get_nr5g
|
||||||
mm_gdbus_modem_signal_dup_cdma
|
mm_gdbus_modem_signal_dup_cdma
|
||||||
mm_gdbus_modem_signal_dup_evdo
|
mm_gdbus_modem_signal_dup_evdo
|
||||||
mm_gdbus_modem_signal_dup_gsm
|
mm_gdbus_modem_signal_dup_gsm
|
||||||
mm_gdbus_modem_signal_dup_umts
|
mm_gdbus_modem_signal_dup_umts
|
||||||
mm_gdbus_modem_signal_dup_lte
|
mm_gdbus_modem_signal_dup_lte
|
||||||
|
mm_gdbus_modem_signal_dup_nr5g
|
||||||
<SUBSECTION Methods>
|
<SUBSECTION Methods>
|
||||||
mm_gdbus_modem_signal_call_setup
|
mm_gdbus_modem_signal_call_setup
|
||||||
mm_gdbus_modem_signal_call_setup_finish
|
mm_gdbus_modem_signal_call_setup_finish
|
||||||
|
@@ -221,5 +221,43 @@
|
|||||||
-->
|
-->
|
||||||
<property name="Lte" type="a{sv}" access="read" />
|
<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>
|
</interface>
|
||||||
</node>
|
</node>
|
||||||
|
@@ -53,6 +53,7 @@ typedef enum {
|
|||||||
UPDATED_PROPERTY_TYPE_GSM = 2,
|
UPDATED_PROPERTY_TYPE_GSM = 2,
|
||||||
UPDATED_PROPERTY_TYPE_UMTS = 3,
|
UPDATED_PROPERTY_TYPE_UMTS = 3,
|
||||||
UPDATED_PROPERTY_TYPE_LTE = 4,
|
UPDATED_PROPERTY_TYPE_LTE = 4,
|
||||||
|
UPDATED_PROPERTY_TYPE_NR5G = 5,
|
||||||
UPDATED_PROPERTY_TYPE_LAST
|
UPDATED_PROPERTY_TYPE_LAST
|
||||||
} UpdatedPropertyType;
|
} UpdatedPropertyType;
|
||||||
|
|
||||||
@@ -250,6 +251,13 @@ lte_updated (MMModemSignal *self,
|
|||||||
values_updated (self, pspec, UPDATED_PROPERTY_TYPE_LTE);
|
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 * (* Getter) (MmGdbusModemSignal *self);
|
||||||
typedef GVariant * (* Dupper) (MmGdbusModemSignal *self);
|
typedef GVariant * (* Dupper) (MmGdbusModemSignal *self);
|
||||||
typedef void (* UpdatedCallback) (MMModemSignal *self, GParamSpec *pspec);
|
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::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::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::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
|
static void
|
||||||
@@ -571,6 +580,33 @@ mm_modem_signal_get_lte (MMModemSignal *self)
|
|||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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:
|
* mm_modem_signal_peek_lte:
|
||||||
* @self: A #MMModem.
|
* @self: A #MMModem.
|
||||||
@@ -595,6 +631,30 @@ mm_modem_signal_peek_lte (MMModemSignal *self)
|
|||||||
return self->priv->values[UPDATED_PROPERTY_TYPE_LTE].info;
|
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
|
static void
|
||||||
|
@@ -97,6 +97,9 @@ MMSignal *mm_modem_signal_peek_umts (MMModemSignal *self);
|
|||||||
MMSignal *mm_modem_signal_get_lte (MMModemSignal *self);
|
MMSignal *mm_modem_signal_get_lte (MMModemSignal *self);
|
||||||
MMSignal *mm_modem_signal_peek_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
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* _MM_MODEM_SIGNAL_H_ */
|
#endif /* _MM_MODEM_SIGNAL_H_ */
|
||||||
|
@@ -2187,13 +2187,14 @@ signal_load_values_finish (MMIfaceModemSignal *_self,
|
|||||||
MMSignal **gsm,
|
MMSignal **gsm,
|
||||||
MMSignal **umts,
|
MMSignal **umts,
|
||||||
MMSignal **lte,
|
MMSignal **lte,
|
||||||
|
MMSignal **nr5g,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
|
MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
|
||||||
const gchar *response;
|
const gchar *response;
|
||||||
|
|
||||||
if (self->priv->smoni_support == FEATURE_NOT_SUPPORTED)
|
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);
|
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))
|
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;
|
*cdma = NULL;
|
||||||
if (evdo)
|
if (evdo)
|
||||||
*evdo = NULL;
|
*evdo = NULL;
|
||||||
|
if (nr5g)
|
||||||
|
*nr5g = NULL;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@@ -87,6 +87,7 @@ typedef struct {
|
|||||||
MMSignal *gsm;
|
MMSignal *gsm;
|
||||||
MMSignal *umts;
|
MMSignal *umts;
|
||||||
MMSignal *lte;
|
MMSignal *lte;
|
||||||
|
MMSignal *nr5g;
|
||||||
} DetailedSignal;
|
} DetailedSignal;
|
||||||
|
|
||||||
struct _MMBroadbandModemHuaweiPrivate {
|
struct _MMBroadbandModemHuaweiPrivate {
|
||||||
@@ -4209,6 +4210,7 @@ signal_load_values_finish (MMIfaceModemSignal *self,
|
|||||||
MMSignal **gsm,
|
MMSignal **gsm,
|
||||||
MMSignal **umts,
|
MMSignal **umts,
|
||||||
MMSignal **lte,
|
MMSignal **lte,
|
||||||
|
MMSignal **nr5g,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
DetailedSignal *signals;
|
DetailedSignal *signals;
|
||||||
@@ -4222,6 +4224,7 @@ signal_load_values_finish (MMIfaceModemSignal *self,
|
|||||||
*gsm = signals->gsm ? g_object_ref (signals->gsm) : NULL;
|
*gsm = signals->gsm ? g_object_ref (signals->gsm) : NULL;
|
||||||
*umts = signals->umts ? g_object_ref (signals->umts) : NULL;
|
*umts = signals->umts ? g_object_ref (signals->umts) : NULL;
|
||||||
*lte = signals->lte ? g_object_ref (signals->lte) : NULL;
|
*lte = signals->lte ? g_object_ref (signals->lte) : NULL;
|
||||||
|
*nr5g = signals->nr5g ? g_object_ref (signals->nr5g) : NULL;
|
||||||
|
|
||||||
detailed_signal_free (signals);
|
detailed_signal_free (signals);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@@ -761,6 +761,7 @@ mm_shared_xmm_signal_load_values_finish (MMIfaceModemSignal *self,
|
|||||||
MMSignal **gsm,
|
MMSignal **gsm,
|
||||||
MMSignal **umts,
|
MMSignal **umts,
|
||||||
MMSignal **lte,
|
MMSignal **lte,
|
||||||
|
MMSignal **nr5g,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
const gchar *response;
|
const gchar *response;
|
||||||
@@ -773,6 +774,8 @@ mm_shared_xmm_signal_load_values_finish (MMIfaceModemSignal *self,
|
|||||||
*cdma = NULL;
|
*cdma = NULL;
|
||||||
if (evdo)
|
if (evdo)
|
||||||
*evdo = NULL;
|
*evdo = NULL;
|
||||||
|
if (nr5g)
|
||||||
|
*nr5g = NULL;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@@ -140,6 +140,7 @@ gboolean mm_shared_xmm_signal_load_values_finish (MMIfaceModemSign
|
|||||||
MMSignal **gsm,
|
MMSignal **gsm,
|
||||||
MMSignal **umts,
|
MMSignal **umts,
|
||||||
MMSignal **lte,
|
MMSignal **lte,
|
||||||
|
MMSignal **nr5g,
|
||||||
GError **error);
|
GError **error);
|
||||||
void mm_shared_xmm_signal_load_values (MMIfaceModemSignal *self,
|
void mm_shared_xmm_signal_load_values (MMIfaceModemSignal *self,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
|
@@ -4342,6 +4342,7 @@ typedef struct {
|
|||||||
MMSignal *gsm;
|
MMSignal *gsm;
|
||||||
MMSignal *umts;
|
MMSignal *umts;
|
||||||
MMSignal *lte;
|
MMSignal *lte;
|
||||||
|
MMSignal *nr5g;
|
||||||
} SignalLoadValuesResult;
|
} SignalLoadValuesResult;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -4361,6 +4362,7 @@ modem_signal_load_values_finish (MMIfaceModemSignal *self,
|
|||||||
MMSignal **gsm,
|
MMSignal **gsm,
|
||||||
MMSignal **umts,
|
MMSignal **umts,
|
||||||
MMSignal **lte,
|
MMSignal **lte,
|
||||||
|
MMSignal **nr5g,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
SignalLoadValuesResult *result;
|
SignalLoadValuesResult *result;
|
||||||
@@ -4391,6 +4393,8 @@ modem_signal_load_values_finish (MMIfaceModemSignal *self,
|
|||||||
*cdma = NULL;
|
*cdma = NULL;
|
||||||
if (evdo)
|
if (evdo)
|
||||||
*evdo = NULL;
|
*evdo = NULL;
|
||||||
|
if (nr5g)
|
||||||
|
*nr5g = NULL;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4489,7 +4493,7 @@ parent_signal_load_values_ready (MMIfaceModemSignal *self,
|
|||||||
result = g_slice_new0 (SignalLoadValuesResult);
|
result = g_slice_new0 (SignalLoadValuesResult);
|
||||||
if (!iface_modem_signal_parent->load_values_finish (self, res,
|
if (!iface_modem_signal_parent->load_values_finish (self, res,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
&result->gsm, &result->umts, &result->lte,
|
&result->gsm, &result->umts, &result->lte, &result->nr5g,
|
||||||
&error)) {
|
&error)) {
|
||||||
signal_load_values_result_free (result);
|
signal_load_values_result_free (result);
|
||||||
g_task_return_error (task, error);
|
g_task_return_error (task, error);
|
||||||
|
@@ -8463,6 +8463,7 @@ typedef struct {
|
|||||||
MMSignal *gsm;
|
MMSignal *gsm;
|
||||||
MMSignal *umts;
|
MMSignal *umts;
|
||||||
MMSignal *lte;
|
MMSignal *lte;
|
||||||
|
MMSignal *nr5g;
|
||||||
} SignalLoadValuesResult;
|
} SignalLoadValuesResult;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -8509,14 +8510,15 @@ get_db_from_sinr_level (MMBroadbandModemQmi *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
signal_load_values_finish (MMIfaceModemSignal *self,
|
signal_load_values_finish (MMIfaceModemSignal *self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
MMSignal **cdma,
|
MMSignal **cdma,
|
||||||
MMSignal **evdo,
|
MMSignal **evdo,
|
||||||
MMSignal **gsm,
|
MMSignal **gsm,
|
||||||
MMSignal **umts,
|
MMSignal **umts,
|
||||||
MMSignal **lte,
|
MMSignal **lte,
|
||||||
GError **error)
|
MMSignal **nr5g,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
SignalLoadValuesResult *values_result;
|
SignalLoadValuesResult *values_result;
|
||||||
|
|
||||||
@@ -8529,6 +8531,7 @@ signal_load_values_finish (MMIfaceModemSignal *self,
|
|||||||
*gsm = values_result->gsm ? g_object_ref (values_result->gsm) : NULL;
|
*gsm = values_result->gsm ? g_object_ref (values_result->gsm) : NULL;
|
||||||
*umts = values_result->umts ? g_object_ref (values_result->umts) : NULL;
|
*umts = values_result->umts ? g_object_ref (values_result->umts) : NULL;
|
||||||
*lte = values_result->lte ? g_object_ref (values_result->lte) : 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);
|
signal_load_values_result_free (values_result);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -8693,15 +8696,16 @@ signal_load_values_get_signal_info_ready (QmiClientNas *client,
|
|||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
GTask *task)
|
GTask *task)
|
||||||
{
|
{
|
||||||
MMBroadbandModemQmi *self;
|
MMBroadbandModemQmi *self;
|
||||||
SignalLoadValuesContext *ctx;
|
SignalLoadValuesContext *ctx;
|
||||||
gint8 rssi;
|
gint8 rssi;
|
||||||
gint16 ecio;
|
gint16 ecio;
|
||||||
QmiNasEvdoSinrLevel sinr_level;
|
QmiNasEvdoSinrLevel sinr_level;
|
||||||
gint32 io;
|
gint32 io;
|
||||||
gint8 rsrq;
|
gint8 rsrq;
|
||||||
gint16 rsrp;
|
gint16 rsrp;
|
||||||
gint16 snr;
|
gint16 snr;
|
||||||
|
gint16 rsrq_5g;
|
||||||
g_autoptr(QmiMessageNasGetSignalInfoOutput) output = NULL;
|
g_autoptr(QmiMessageNasGetSignalInfoOutput) output = NULL;
|
||||||
|
|
||||||
self = g_task_get_source_object (task);
|
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));
|
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 */
|
/* Keep on */
|
||||||
ctx->step++;
|
ctx->step++;
|
||||||
signal_load_values_context_step (task);
|
signal_load_values_context_step (task);
|
||||||
|
@@ -9981,6 +9981,7 @@ modem_signal_load_values_finish (MMIfaceModemSignal *self,
|
|||||||
MMSignal **gsm,
|
MMSignal **gsm,
|
||||||
MMSignal **umts,
|
MMSignal **umts,
|
||||||
MMSignal **lte,
|
MMSignal **lte,
|
||||||
|
MMSignal **nr5g,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
const gchar *response;
|
const gchar *response;
|
||||||
@@ -9994,6 +9995,9 @@ modem_signal_load_values_finish (MMIfaceModemSignal *self,
|
|||||||
*cdma = NULL;
|
*cdma = NULL;
|
||||||
if (evdo)
|
if (evdo)
|
||||||
*evdo = NULL;
|
*evdo = NULL;
|
||||||
|
if (nr5g)
|
||||||
|
*nr5g = NULL;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -68,6 +68,7 @@ clear_values (MMIfaceModemSignal *self)
|
|||||||
mm_gdbus_modem_signal_set_gsm (skeleton, NULL);
|
mm_gdbus_modem_signal_set_gsm (skeleton, NULL);
|
||||||
mm_gdbus_modem_signal_set_umts (skeleton, NULL);
|
mm_gdbus_modem_signal_set_umts (skeleton, NULL);
|
||||||
mm_gdbus_modem_signal_set_lte (skeleton, NULL);
|
mm_gdbus_modem_signal_set_lte (skeleton, NULL);
|
||||||
|
mm_gdbus_modem_signal_set_nr5g (skeleton, NULL);
|
||||||
g_object_unref (skeleton);
|
g_object_unref (skeleton);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,6 +83,7 @@ load_values_ready (MMIfaceModemSignal *self,
|
|||||||
MMSignal *gsm = NULL;
|
MMSignal *gsm = NULL;
|
||||||
MMSignal *umts = NULL;
|
MMSignal *umts = NULL;
|
||||||
MMSignal *lte = NULL;
|
MMSignal *lte = NULL;
|
||||||
|
MMSignal *nr5g = NULL;
|
||||||
MmGdbusModemSignal *skeleton;
|
MmGdbusModemSignal *skeleton;
|
||||||
|
|
||||||
if (!MM_IFACE_MODEM_SIGNAL_GET_INTERFACE (self)->load_values_finish (
|
if (!MM_IFACE_MODEM_SIGNAL_GET_INTERFACE (self)->load_values_finish (
|
||||||
@@ -92,6 +94,7 @@ load_values_ready (MMIfaceModemSignal *self,
|
|||||||
&gsm,
|
&gsm,
|
||||||
&umts,
|
&umts,
|
||||||
<e,
|
<e,
|
||||||
|
&nr5g,
|
||||||
&error)) {
|
&error)) {
|
||||||
mm_obj_warn (self, "couldn't load extended signal information: %s", error->message);
|
mm_obj_warn (self, "couldn't load extended signal information: %s", error->message);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
@@ -147,6 +150,15 @@ load_values_ready (MMIfaceModemSignal *self,
|
|||||||
} else
|
} else
|
||||||
mm_gdbus_modem_signal_set_lte (skeleton, NULL);
|
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 */
|
/* Flush right away */
|
||||||
g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (skeleton));
|
g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (skeleton));
|
||||||
|
|
||||||
|
@@ -54,6 +54,7 @@ struct _MMIfaceModemSignal {
|
|||||||
MMSignal **gsm,
|
MMSignal **gsm,
|
||||||
MMSignal **umts,
|
MMSignal **umts,
|
||||||
MMSignal **lte,
|
MMSignal **lte,
|
||||||
|
MMSignal **nr5g,
|
||||||
GError **error);
|
GError **error);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user