[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