[PATCH] nas: implement 'Get LTE Cphy CA Info'
Aleksander Morgado
aleksander at aleksander.es
Sun Apr 3 11:24:23 UTC 2016
On Thu, Mar 31, 2016 at 4:13 PM, Bjørn Mork <bjorn at mork.no> wrote:
> Carrier aggregation is much more fun when you can watch it being
> activated :)
>
> $ qmicli -p -d /dev/cdc-wdm0 --nas-get-lte-cphy-ca-info
> [/dev/cdc-wdm0] Successfully got carrier aggregation info
> DL Bandwidth: '20'
> Secondary Cell Info
> Physical Cell ID: '101'
> TX Channel: '3050'
> DL Bandwidth: '20'
> LTE Band: 'eutran-7'
> State: 'activated'
> Primary Cell Info
> Physical Cell ID: '299'
> TX Channel: '1450'
> DL Bandwidth: '20'
> LTE Band: 'eutran-3'
> Secondary Cell index: '1'
>
> I have absolutely no clue about the required NAS version, so I just put
> the current version I have there...
>
Pushed to git master, thanks! Also pushed some follow up commits:
* Removed the required NAS version. It really isn't mandatory, so
it's ok not to have it.
* Fixed some tabs vs spaces in the json file.
* Added missing docs for the new message and enums.
Cheers!
> Signed-off-by: Bjørn Mork <bjorn at mork.no>
> ---
> data/qmi-service-nas.json | 56 +++++++++++++++++++++
> src/libqmi-glib/qmi-enums-nas.h | 40 +++++++++++++++
> src/qmicli/qmicli-nas.c | 106 ++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 202 insertions(+)
>
> diff --git a/data/qmi-service-nas.json b/data/qmi-service-nas.json
> index 5471713..053de79 100644
> --- a/data/qmi-service-nas.json
> +++ b/data/qmi-service-nas.json
> @@ -3182,5 +3182,61 @@
> "format" : "gint32" },
> { "name" : "GPS Time In Milliseconds",
> "format" : "guint64" } ] } } ],
> + "prerequisites": [ { "common-ref" : "Success" } ] } ] },
> +
> + // *********************************************************************************
> + { "name" : "Get LTE Cphy CA Info",
> + "type" : "Message",
> + "service" : "NAS",
> + "id" : "0x00AC",
> + "version" : "1.25",
> + "output" : [ { "common-ref" : "Operation Result" },
> + { "name" : "DL Bandwidth",
> + "id" : "0x11",
> + "mandatory" : "no",
> + "type" : "TLV",
> + "format" : "guint32",
> + "public-format": "QmiNasDLBandwidth",
> + "prerequisites": [ { "common-ref" : "Success" } ] },
> + { "name" : "Phy CA Agg SCell Info",
> + "id" : "0x12",
> + "mandatory" : "no",
> + "type" : "TLV",
> + "format" : "sequence",
> + "contents" : [ { "name" : "Physical Cell ID",
> + "format" : "guint16"},
> + { "name" : "Tx Channel",
> + "format" : "guint16" },
> + { "name" : "DL Bandwidth",
> + "format" : "guint32",
> + "public-format" : "QmiNasDLBandwidth" },
> + { "name" : "LTE Band",
> + "format" : "guint16",
> + "public-format" : "QmiNasActiveBand" },
> + { "name" : "State",
> + "format" : "guint32",
> + "public-format" : "QmiNasScellState" } ],
> + "prerequisites": [ { "common-ref" : "Success" } ] },
> + { "name" : "Phy CA Agg PCell Info",
> + "id" : "0x13",
> + "mandatory" : "no",
> + "type" : "TLV",
> + "format" : "sequence",
> + "contents" : [ { "name" : "Physical Cell ID",
> + "format" : "guint16"},
> + { "name" : "Tx Channel",
> + "format" : "guint16" },
> + { "name" : "DL Bandwidth",
> + "format" : "guint32",
> + "public-format" : "QmiNasDLBandwidth" },
> + { "name" : "LTE Band",
> + "format" : "guint16",
> + "public-format" : "QmiNasActiveBand" } ],
> + "prerequisites": [ { "common-ref" : "Success" } ] },
> + { "name" : "SCell index",
> + "id" : "0x14",
> + "mandatory" : "no",
> + "type" : "TLV",
> + "format" : "guint8",
> "prerequisites": [ { "common-ref" : "Success" } ] } ] }
> ]
> diff --git a/src/libqmi-glib/qmi-enums-nas.h b/src/libqmi-glib/qmi-enums-nas.h
> index 8c00490..6c4cc21 100644
> --- a/src/libqmi-glib/qmi-enums-nas.h
> +++ b/src/libqmi-glib/qmi-enums-nas.h
> @@ -893,4 +893,44 @@ typedef enum {
> QMI_NAS_WCDMA_RRC_STATE_CELL_DCH = 4
> } QmiNasWcdmaRrcState;
>
> +/*****************************************************************************/
> +/* Helper enums for the 'QMI NAS Get LTE Cphy CA Info' request/response */
> +/**
> + * QmiNasDLBandwidth:
> + * @QMI_NAS_DL_BANDWIDTH_1_4: 1.4 MHz
> + * @QMI_NAS_DL_BANDWIDTH_3: 3 MHz
> + * @QMI_NAS_DL_BANDWIDTH_5: 5 MHz
> + * @QMI_NAS_DL_BANDWIDTH_10: 10 MHz
> + * @QMI_NAS_DL_BANDWIDTH_15: 15 MHz
> + * @QMI_NAS_DL_BANDWIDTH_20: 20 MHz
> + * @QMI_NAS_DL_BANDWIDTH_INVALID: Invalid
> + * @QMI_NAS_DL_BANDWIDTH_UNKNOWN: Unknown
> + *
> + * DL Bandwidth.
> + */
> +typedef enum {
> + QMI_NAS_DL_BANDWIDTH_1_4 = 0,
> + QMI_NAS_DL_BANDWIDTH_3,
> + QMI_NAS_DL_BANDWIDTH_5,
> + QMI_NAS_DL_BANDWIDTH_10,
> + QMI_NAS_DL_BANDWIDTH_15,
> + QMI_NAS_DL_BANDWIDTH_20,
> + QMI_NAS_DL_BANDWIDTH_INVALID,
> + QMI_NAS_DL_BANDWIDTH_UNKNOWN = 0xFF
> +} QmiNasDLBandwidth;
> +
> +/**
> + * QmiNasScellState:
> + * @QMI_NAS_SCELL_STATE_DECONFIGURED: Deconfigured
> + * @QMI_NAS_SCELL_STATE_DEACTIVATED: Deactivated
> + * @QMI_NAS_SCELL_STATE_ACTIVATED: Activated
> + *
> + * SCell State.
> + */
> +typedef enum {
> + QMI_NAS_SCELL_STATE_DECONFIGURED = 0,
> + QMI_NAS_SCELL_STATE_DEACTIVATED,
> + QMI_NAS_SCELL_STATE_ACTIVATED
> +} QmiNasScellState;
> +
> #endif /* _LIBQMI_GLIB_QMI_ENUMS_NAS_H_ */
> diff --git a/src/qmicli/qmicli-nas.c b/src/qmicli/qmicli-nas.c
> index 312ae16..10e6b23 100644
> --- a/src/qmicli/qmicli-nas.c
> +++ b/src/qmicli/qmicli-nas.c
> @@ -53,6 +53,7 @@ static gboolean get_system_selection_preference_flag;
> static gchar *set_system_selection_preference_str;
> static gboolean network_scan_flag;
> static gboolean get_cell_location_info_flag;
> +static gboolean get_lte_cphy_ca_info_flag;
> static gboolean get_supported_messages_flag;
> static gboolean reset_flag;
> static gboolean noop_flag;
> @@ -102,6 +103,10 @@ static GOptionEntry entries[] = {
> "Get Cell Location Info",
> NULL
> },
> + { "nas-get-lte-cphy-ca-info", 0, 0, G_OPTION_ARG_NONE, &get_lte_cphy_ca_info_flag,
> + "Get LTE Cphy CA Info",
> + NULL
> + },
> { "nas-get-supported-messages", 0, 0, G_OPTION_ARG_NONE, &get_supported_messages_flag,
> "Get supported messages",
> NULL
> @@ -152,6 +157,7 @@ qmicli_nas_options_enabled (void)
> !!set_system_selection_preference_str +
> network_scan_flag +
> get_cell_location_info_flag +
> + get_lte_cphy_ca_info_flag +
> get_supported_messages_flag +
> reset_flag +
> noop_flag);
> @@ -2761,6 +2767,94 @@ get_cell_location_info_ready (QmiClientNas *client,
> }
>
> static void
> +get_lte_cphy_ca_info_ready (QmiClientNas *client,
> + GAsyncResult *res)
> +{
> + QmiMessageNasGetLteCphyCaInfoOutput *output;
> + GError *error = NULL;
> + guint16 pci;
> + guint16 channel;
> + QmiNasDLBandwidth dl_bandwidth;
> + QmiNasActiveBand band;
> + QmiNasScellState state;
> + guint8 index;
> +
> + output = qmi_client_nas_get_lte_cphy_ca_info_finish (client, res, &error);
> + if (!output) {
> + g_printerr ("error: operation failed: %s\n", error->message);
> + g_error_free (error);
> + operation_shutdown (FALSE);
> + return;
> + }
> +
> + if (!qmi_message_nas_get_lte_cphy_ca_info_output_get_result (output, &error)) {
> + g_printerr ("error: couldn't get carrier aggregation info: %s\n", error->message);
> + g_error_free (error);
> + qmi_message_nas_get_lte_cphy_ca_info_output_unref (output);
> + operation_shutdown (FALSE);
> + return;
> + }
> +
> + g_print ("[%s] Successfully got carrier aggregation info\n",
> + qmi_device_get_path_display (ctx->device));
> +
> + if (qmi_message_nas_get_lte_cphy_ca_info_output_get_dl_bandwidth (
> + output,
> + &dl_bandwidth,
> + NULL)) {
> + g_print ("DL Bandwidth: '%s'\n",
> + qmi_nas_dl_bandwidth_get_string (dl_bandwidth));
> + }
> +
> + if (qmi_message_nas_get_lte_cphy_ca_info_output_get_phy_ca_agg_scell_info (
> + output,
> + &pci,
> + &channel,
> + &dl_bandwidth,
> + &band,
> + &state,
> + NULL)) {
> + g_print ("Secondary Cell Info\n");
> + g_print ("\tPhysical Cell ID: '%" G_GUINT16_FORMAT"'\n"
> + "\tTX Channel: '%" G_GUINT16_FORMAT"'\n"
> + "\tDL Bandwidth: '%s'\n"
> + "\tLTE Band: '%s'\n"
> + "\tState: '%s'\n",
> + pci, channel,
> + qmi_nas_dl_bandwidth_get_string (dl_bandwidth),
> + qmi_nas_active_band_get_string (band),
> + qmi_nas_scell_state_get_string (state));
> + }
> +
> + if (qmi_message_nas_get_lte_cphy_ca_info_output_get_phy_ca_agg_pcell_info (
> + output,
> + &pci,
> + &channel,
> + &dl_bandwidth,
> + &band,
> + NULL)) {
> + g_print ("Primary Cell Info\n");
> + g_print ("\tPhysical Cell ID: '%" G_GUINT16_FORMAT"'\n"
> + "\tTX Channel: '%" G_GUINT16_FORMAT"'\n"
> + "\tDL Bandwidth: '%s'\n"
> + "\tLTE Band: '%s'\n",
> + pci, channel,
> + qmi_nas_dl_bandwidth_get_string (dl_bandwidth),
> + qmi_nas_active_band_get_string (band));
> + }
> +
> + if (qmi_message_nas_get_lte_cphy_ca_info_output_get_scell_index (
> + output,
> + &index,
> + NULL)) {
> + g_print ("Secondary Cell index: '%u'\n", index);
> + }
> +
> + qmi_message_nas_get_lte_cphy_ca_info_output_unref (output);
> + operation_shutdown (TRUE);
> +}
> +
> +static void
> get_supported_messages_ready (QmiClientNas *client,
> GAsyncResult *res)
> {
> @@ -3004,6 +3098,18 @@ qmicli_nas_run (QmiDevice *device,
> return;
> }
>
> + /* Request to get carrier aggregation info? */
> + if (get_lte_cphy_ca_info_flag) {
> + g_debug ("Asynchronously getting carrier aggregation info ...");
> + qmi_client_nas_get_lte_cphy_ca_info (ctx->client,
> + NULL,
> + 10,
> + ctx->cancellable,
> + (GAsyncReadyCallback)get_lte_cphy_ca_info_ready,
> + NULL);
> + return;
> + }
> +
> /* Request to list supported messages? */
> if (get_supported_messages_flag) {
> g_debug ("Asynchronously getting supported NAS messages...");
> --
> 2.1.4
>
> _______________________________________________
> libqmi-devel mailing list
> libqmi-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/libqmi-devel
--
Aleksander
https://aleksander.es
More information about the libqmi-devel
mailing list