diff options
author | Bjørn Mork <bjorn@mork.no> | 2016-03-31 16:13:37 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2016-04-03 13:01:20 +0200 |
commit | 7193de40870464a45758ad935fdbd7ed0da4ab92 (patch) | |
tree | f1fc7f40c671208e2d7666639ef75bbb5f645323 | |
parent | 0f7849ce05f3e26283652c20e5392161c1cfeeaf (diff) | |
download | external_libqmi-7193de40870464a45758ad935fdbd7ed0da4ab92.zip external_libqmi-7193de40870464a45758ad935fdbd7ed0da4ab92.tar.gz external_libqmi-7193de40870464a45758ad935fdbd7ed0da4ab92.tar.bz2 |
nas: implement 'Get LTE Cphy CA Info'
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...
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rw-r--r-- | data/qmi-service-nas.json | 56 | ||||
-rw-r--r-- | src/libqmi-glib/qmi-enums-nas.h | 40 | ||||
-rw-r--r-- | src/qmicli/qmicli-nas.c | 106 |
3 files changed, 202 insertions, 0 deletions
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..."); |