diff options
author | Prakash Pabba <quic_ppabba@quicinc.com> | 2022-04-21 18:40:22 +0530 |
---|---|---|
committer | Prakash Pabba <quic_ppabba@quicinc.com> | 2022-04-27 18:03:16 +0530 |
commit | 84ad9ecd719c70fae810ee8d1c680c367f0db5a0 (patch) | |
tree | 2a96c7af01b030f7f8f61b19f359f85139e33a05 | |
parent | 4ccde109669349c3642ab48e6f7846c60dd566cd (diff) |
dsd: add DSD system status TLVs support
-rw-r--r-- | data/qmi-service-dsd.json | 72 | ||||
-rw-r--r-- | docs/reference/libqmi-glib/libqmi-glib-common.sections | 15 | ||||
-rw-r--r-- | docs/reference/libqmi-glib/libqmi-glib-docs.xml | 6 | ||||
-rw-r--r-- | src/libqmi-glib/qmi-enums-dsd.h | 49 | ||||
-rw-r--r-- | src/libqmi-glib/qmi-flags64-dsd.h | 89 | ||||
-rw-r--r-- | src/qmicli/qmicli-dsd.c | 83 |
6 files changed, 312 insertions, 2 deletions
diff --git a/data/qmi-service-dsd.json b/data/qmi-service-dsd.json index d5cf84e..ac6b270 100644 --- a/data/qmi-service-dsd.json +++ b/data/qmi-service-dsd.json @@ -12,7 +12,75 @@ { "name" : "QMI Message DSD", "type" : "Message-ID-Enum" }, -// ********************************************************************************* + // ********************************************************************************* + { "name" : "QMI Indication DSD", + "type" : "Indication-ID-Enum" }, + + // ********************************************************************************* + { "name" : "Get System Status", + "type" : "Message", + "service" : "DSD", + "id" : "0x0024", + "since" : "1.32", + "output" : [ { "common-ref" : "Operation Result" }, + { "name" : "Available Systems", + "id" : "0x10", + "type" : "TLV", + "since" : "1.32", + "format" : "array", + "size-prefix-format" : "guint8", + "array-element" : { "name" : "System", + "format" : "struct", + "contents" : [ { "name" : "Technology", + "format" : "guint32", + "public-format" : "QmiDsdDataSystemNetworkType" }, + { "name" : "RAT", + "format" : "guint32", + "public-format" : "QmiDsdRadioAccessTechnology" }, + { "name" : "SO Mask", + "format" : "guint64", + "public-format" : "QmiDsdSoMask" } ] } } ] }, + + // ********************************************************************************* + { "name" : "System Status Change", + "type" : "Message", + "service" : "DSD", + "id" : "0x0025", + "since" : "1.32", + "input" : [ { "name" : "Register Indication", + "id" : "0x11", + "mandatory" : "no", + "type" : "TLV", + "since" : "1.32", + "format" : "guint8", + "public-format" : "gboolean" } ], + "output" : [ { "common-ref" : "Operation Result" } ] }, + + // ********************************************************************************* + { "name" : "System Status", + "type" : "Indication", + "service" : "DSD", + "id" : "0x0026", + "since" : "1.32", + "output" : [ { "name" : "Available Systems", + "id" : "0x10", + "type" : "TLV", + "since" : "1.32", + "format" : "array", + "size-prefix-format" : "guint8", + "array-element" : { "name" : "System", + "format" : "struct", + "contents" : [ { "name" : "Technology", + "format" : "guint32", + "public-format" : "QmiDsdDataSystemNetworkType" }, + { "name" : "RAT", + "format" : "guint32", + "public-format" : "QmiDsdRadioAccessTechnology" }, + { "name" : "SO Mask", + "format" : "guint64", + "public-format" : "QmiDsdSoMask" } ] } } ] }, + + // ********************************************************************************* { "name" : "Get APN Info", "type" : "Message", "service" : "DSD", @@ -33,7 +101,7 @@ "since" : "1.26", "format" : "string" } ] }, -// ********************************************************************************* + // ********************************************************************************* { "name" : "Set APN Type", "type" : "Message", "service" : "DSD", diff --git a/docs/reference/libqmi-glib/libqmi-glib-common.sections b/docs/reference/libqmi-glib/libqmi-glib-common.sections index fa98260..dcb973e 100644 --- a/docs/reference/libqmi-glib/libqmi-glib-common.sections +++ b/docs/reference/libqmi-glib/libqmi-glib-common.sections @@ -1541,17 +1541,32 @@ qmi_gas_usb_composition_endpoint_type_get_type <TITLE>DSD enumerations and flags</TITLE> QmiDsdApnType QmiDsdApnTypePreference +QmiDsdDataSystemNetworkType +QmiDsdRadioAccessTechnology +QmiDsdSoMask <SUBSECTION Methods> qmi_dsd_apn_type_get_string qmi_dsd_apn_type_preference_build_string_from_mask +qmi_dsd_data_system_network_type_get_string +qmi_dsd_radio_access_technology_get_string +qmi_dsd_so_mask_build_string_from_mask <SUBSECTION Private> qmi_dsd_apn_type_build_string_from_mask qmi_dsd_apn_type_preference_get_string +qmi_dsd_data_system_network_type_build_string_from_mask +qmi_dsd_radio_access_technology_build_string_from_mask +qmi_dsd_so_mask_get_string <SUBSECTION Standard> QMI_TYPE_DSD_APN_TYPE QMI_TYPE_DSD_APN_TYPE_PREFERENCE +QMI_TYPE_DSD_DATA_SYSTEM_NETWORK_TYPE +QMI_TYPE_DSD_RADIO_ACCESS_TECHNOLOGY +QMI_TYPE_DSD_SO_MASK qmi_dsd_apn_type_get_type qmi_dsd_apn_type_preference_get_type +qmi_dsd_data_system_network_type_get_type +qmi_dsd_radio_access_technology_get_type +qmi_dsd_so_mask_get_type </SECTION> <SECTION> diff --git a/docs/reference/libqmi-glib/libqmi-glib-docs.xml b/docs/reference/libqmi-glib/libqmi-glib-docs.xml index fce24da..52a6e3d 100644 --- a/docs/reference/libqmi-glib/libqmi-glib-docs.xml +++ b/docs/reference/libqmi-glib/libqmi-glib-docs.xml @@ -522,7 +522,13 @@ <xi:include href="xml/qmi-client-dsd.xml"/> <xi:include href="xml/qmi-enums-dsd.xml"/> <section> + <title>DSD Indications</title> + <xi:include href="xml/qmi-indication-dsd-system-status.xml"/> + </section> + <section> <title>DSD Requests</title> + <xi:include href="xml/qmi-message-dsd-get-system-status.xml"/> + <xi:include href="xml/qmi-message-dsd-system-status-change.xml"/> <xi:include href="xml/qmi-message-dsd-get-apn-info.xml"/> <xi:include href="xml/qmi-message-dsd-set-apn-type.xml"/> </section> diff --git a/src/libqmi-glib/qmi-enums-dsd.h b/src/libqmi-glib/qmi-enums-dsd.h index 7a52fd1..3cdeba5 100644 --- a/src/libqmi-glib/qmi-enums-dsd.h +++ b/src/libqmi-glib/qmi-enums-dsd.h @@ -18,6 +18,7 @@ * Boston, MA 02110-1301 USA. * * Copyright (C) 2019 Wang Jing <clifflily@hotmail.com> + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. */ #ifndef _LIBQMI_GLIB_QMI_ENUMS_DSD_H_ @@ -68,4 +69,52 @@ typedef enum { /*< since=1.26 >*/ QMI_DSD_APN_TYPE_EMERGENCY = 9, } QmiDsdApnType; +/** + * QmiDsdDataSystemNetworkType: + * @QMI_DSD_DATA_SYSTEM_NETWORK_TYPE_3GPP: 3GPP network type. + * @QMI_DSD_DATA_SYSTEM_NETWORK_TYPE_3GPP2: 3GPP2 network type. + * @QMI_DSD_DATA_SYSTEM_NETWORK_TYPE_WLAN: WLAN network type. + * + * Network type of the data system. + * + * Since: 1.32 + */ +typedef enum { /*< since=1.32 >*/ + QMI_DSD_DATA_SYSTEM_NETWORK_TYPE_3GPP = 0, + QMI_DSD_DATA_SYSTEM_NETWORK_TYPE_3GPP2 = 1, + QMI_DSD_DATA_SYSTEM_NETWORK_TYPE_WLAN = 2, +} QmiDsdDataSystemNetworkType; + +/** + * QmiDsdRadioAccessTechnology: + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_NULL_BEARER: null bearer + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_WCDMA: WCDMA. + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_GERAN: GERAN. + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_LTE: LTE. + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_TDSCDMA: TD-SDCMA. + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_WLAN: 3GPP WLAN. + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_5G: 5G. + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP2_1X: CDMA 1x. + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP2_HRPD: CDMA EVDO, HRPD. + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP2_EHRPD: CDMA EVDO with eHRPD. + * @QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP2_WLAN: 3GPP2 WLAN. + * + * Radio access technology. + * + * Since: 1.32 + */ +typedef enum { /*< since=1.32 >*/ + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_NULL_BEARER = 0, + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_WCDMA = 1, + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_GERAN = 2, + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_LTE = 3, + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_TDSCDMA = 4, + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_WLAN = 5, + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP_5G = 6, + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP2_1X = 101, + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP2_HRPD = 102, + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP2_EHRPD = 103, + QMI_DSD_RADIO_ACCESS_TECHNOLOGY_3GPP2_WLAN = 104, +} QmiDsdRadioAccessTechnology; + #endif /* _LIBQMI_GLIB_QMI_ENUMS_DSD_H_ */ diff --git a/src/libqmi-glib/qmi-flags64-dsd.h b/src/libqmi-glib/qmi-flags64-dsd.h index 7e90727..488819f 100644 --- a/src/libqmi-glib/qmi-flags64-dsd.h +++ b/src/libqmi-glib/qmi-flags64-dsd.h @@ -18,6 +18,7 @@ * Boston, MA 02110-1301 USA. * * Copyright (C) 2019 Wang Jing <clifflily@hotmail.com> + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. */ #ifndef _LIBQMI_GLIB_QMI_FLAGS64_DSD_H_ @@ -60,4 +61,92 @@ typedef enum { /*< since=1.26 >*/ QMI_DSD_APN_TYPE_PREFERENCE_EMERGENCY = ((guint64) 1) << QMI_DSD_APN_TYPE_EMERGENCY, } QmiDsdApnTypePreference; +/** + * QmiDsdSoMask: + * @QMI_DSD_3GPP_SO_MASK_WCDMA: WCDMA. + * @QMI_DSD_3GPP_SO_MASK_HSDPA: HSDPA. + * @QMI_DSD_3GPP_SO_MASK_HSUPA: HSUPA. + * @QMI_DSD_3GPP_SO_MASK_HSDPAPLUS: HSDPAPLUS. + * @QMI_DSD_3GPP_SO_MASK_DC_HSDPAPLUS: DC HSDPAPLUS. + * @QMI_DSD_3GPP_SO_MASK_64_QAM: 64 QAM. + * @QMI_DSD_3GPP_SO_MASK_HSPA: HSPA. + * @QMI_DSD_3GPP_SO_MASK_GPRS: GPRS. + * @QMI_DSD_3GPP_SO_MASK_EDGE: EDGE. + * @QMI_DSD_3GPP_SO_MASK_GSM: GSM. + * @QMI_DSD_3GPP_SO_MASK_S2B: S2B. + * @QMI_DSD_3GPP_SO_MASK_LTE_LIMITED_SRVC: LTE Limited Service. + * @QMI_DSD_3GPP_SO_MASK_LTE_FDD: LTE FDD. + * @QMI_DSD_3GPP_SO_MASK_LTE_TDD: LTE TDD. + * @QMI_DSD_3GPP_SO_MASK_TDSCDMA: TDSCDMA. + * @QMI_DSD_3GPP_SO_MASK_DC_HSUPA: DC_HSUPA. + * @QMI_DSD_3GPP_SO_MASK_LTE_CA_DL: LTE CA DL. + * @QMI_DSD_3GPP_SO_MASK_LTE_CA_UL: LTE CA UL. + * @QMI_DSD_3GPP_SO_MASK_S2B_LIMITED_SRVC: S2B Limited Service. + * @QMI_DSD_3GPP_SO_MASK_FOUR_POINT_FIVE_G: 4.5G. + * @QMI_DSD_3GPP_SO_MASK_FOUR_POINT_FIVE_G_PLUS: 4.5G+. + * @QMI_DSD_3GPP2_SO_MASK_1X_IS95: 1X IS95. + * @QMI_DSD_3GPP2_SO_MASK_1X_IS2000: 1X IS2000. + * @QMI_DSD_3GPP2_SO_MASK_1X_IS2000_REL_A: 1X IS2000 REL A. + * @QMI_DSD_3GPP2_SO_MASK_HDR_REV0_DPA: HDR REV0 DPA. + * @QMI_DSD_3GPP2_SO_MASK_HDR_REVA_DPA: HDR REVB DPA. + * @QMI_DSD_3GPP2_SO_MASK_HDR_REVB_DPA: HDR REVB DPA. + * @QMI_DSD_3GPP2_SO_MASK_HDR_REVA_MPA: HDR REVA MPA. + * @QMI_DSD_3GPP2_SO_MASK_HDR_REVB_MPA: HDR REVB MPA. + * @QMI_DSD_3GPP2_SO_MASK_HDR_REVA_EMPA: HDR REVA EMPA. + * @QMI_DSD_3GPP2_SO_MASK_HDR_REVB_EMPA: HDR REVB EMPA. + * @QMI_DSD_3GPP2_SO_MASK_HDR_REVB_MMPA: HDR REVB MMPA. + * @QMI_DSD_3GPP2_SO_MASK_HDR_EVDO_FMC: HDR EVDO FMC. + * @QMI_DSD_3GPP2_SO_MASK_1X_CS: 1X Circuit Switched. + * @QMI_DSD_3GPP_SO_MASK_5G_TDD: 5G TDD. + * @QMI_DSD_3GPP_SO_MASK_5G_SUB6: 5G SUB6. + * @QMI_DSD_3GPP_SO_MASK_5G_MMWAVE: 5G MMWAVE. + * @QMI_DSD_3GPP_SO_MASK_5G_NSA: 5G NSA. + * @QMI_DSD_3GPP_SO_MASK_5G_SA: 5G SA. + * + * Service Option (SO) mask. + * + * Since: 1.32 + */ +typedef enum { /*< since=1.32 >*/ + QMI_DSD_3GPP_SO_MASK_WCDMA = 1 << 0, + QMI_DSD_3GPP_SO_MASK_HSDPA = 1 << 1, + QMI_DSD_3GPP_SO_MASK_HSUPA = 1 << 2, + QMI_DSD_3GPP_SO_MASK_HSDPAPLUS = 1 << 3, + QMI_DSD_3GPP_SO_MASK_DC_HSDPAPLUS = 1 << 4, + QMI_DSD_3GPP_SO_MASK_64_QAM = 1 << 5, + QMI_DSD_3GPP_SO_MASK_HSPA = 1 << 6, + QMI_DSD_3GPP_SO_MASK_GPRS = 1 << 7, + QMI_DSD_3GPP_SO_MASK_EDGE = 1 << 8, + QMI_DSD_3GPP_SO_MASK_GSM = 1 << 9, + QMI_DSD_3GPP_SO_MASK_S2B = 1 << 10, + QMI_DSD_3GPP_SO_MASK_LTE_LIMITED_SRVC = 1 << 11, + QMI_DSD_3GPP_SO_MASK_LTE_FDD = 1 << 12, + QMI_DSD_3GPP_SO_MASK_LTE_TDD = 1 << 13, + QMI_DSD_3GPP_SO_MASK_TDSCDMA = 1 << 14, + QMI_DSD_3GPP_SO_MASK_DC_HSUPA = 1 << 15, + QMI_DSD_3GPP_SO_MASK_LTE_CA_DL = 1 << 16, + QMI_DSD_3GPP_SO_MASK_LTE_CA_UL = 1 << 17, + QMI_DSD_3GPP_SO_MASK_S2B_LIMITED_SRVC = 1 << 18, + QMI_DSD_3GPP_SO_MASK_FOUR_POINT_FIVE_G = 1 << 19, + QMI_DSD_3GPP_SO_MASK_FOUR_POINT_FIVE_G_PLUS = 1 << 20, + QMI_DSD_3GPP2_SO_MASK_1X_IS95 = 1 << 24, + QMI_DSD_3GPP2_SO_MASK_1X_IS2000 = 1 << 25, + QMI_DSD_3GPP2_SO_MASK_1X_IS2000_REL_A = 1 << 26, + QMI_DSD_3GPP2_SO_MASK_HDR_REV0_DPA = 1 << 27, + QMI_DSD_3GPP2_SO_MASK_HDR_REVA_DPA = 1 << 28, + QMI_DSD_3GPP2_SO_MASK_HDR_REVB_DPA = 1 << 29, + QMI_DSD_3GPP2_SO_MASK_HDR_REVA_MPA = 1 << 30, + QMI_DSD_3GPP2_SO_MASK_HDR_REVB_MPA = ((guint64) 1) << 31, + QMI_DSD_3GPP2_SO_MASK_HDR_REVA_EMPA = ((guint64) 1) << 32, + QMI_DSD_3GPP2_SO_MASK_HDR_REVB_EMPA = ((guint64) 1) << 33, + QMI_DSD_3GPP2_SO_MASK_HDR_REVB_MMPA = ((guint64) 1) << 34, + QMI_DSD_3GPP2_SO_MASK_HDR_EVDO_FMC = ((guint64) 1) << 35, + QMI_DSD_3GPP2_SO_MASK_1X_CS = ((guint64) 1) << 36, + QMI_DSD_3GPP_SO_MASK_5G_TDD = ((guint64) 1) << 40, + QMI_DSD_3GPP_SO_MASK_5G_SUB6 = ((guint64) 1) << 41, + QMI_DSD_3GPP_SO_MASK_5G_MMWAVE = ((guint64) 1) << 42, + QMI_DSD_3GPP_SO_MASK_5G_NSA = ((guint64) 1) << 43, + QMI_DSD_3GPP_SO_MASK_5G_SA = ((guint64) 1) << 44, +} QmiDsdSoMask; + #endif /* _LIBQMI_GLIB_QMI_FLAGS64_DSD_H_ */ diff --git a/src/qmicli/qmicli-dsd.c b/src/qmicli/qmicli-dsd.c index 543c777..44ee506 100644 --- a/src/qmicli/qmicli-dsd.c +++ b/src/qmicli/qmicli-dsd.c @@ -16,6 +16,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Copyright (C) 2019 Aleksander Morgado <aleksander@aleksander.es> + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. */ #include "config.h" @@ -35,6 +36,9 @@ #if defined HAVE_QMI_SERVICE_DSD +#undef VALIDATE_MASK_NONE +#define VALIDATE_MASK_NONE(str) (str ? str : "none") + /* Context */ typedef struct { QmiDevice *device; @@ -46,6 +50,7 @@ static Context *ctx; /* Options */ static gchar *get_apn_info_str; static gchar *set_apn_type_str; +static gboolean get_system_status_flag; static gboolean noop_flag; static GOptionEntry entries[] = { @@ -61,6 +66,13 @@ static GOptionEntry entries[] = { "[(name), (type1|type2|type3...)]" }, #endif +#if defined HAVE_QMI_MESSAGE_DSD_GET_SYSTEM_STATUS + { "dsd-get-system-status", 0, 0, G_OPTION_ARG_NONE, &get_system_status_flag, + "Gets system status", + NULL + }, +#endif + { "dsd-noop", 0, 0, G_OPTION_ARG_NONE, &noop_flag, "Just allocate or release a DSD client. Use with `--client-no-release-cid' and/or `--client-cid'", NULL @@ -94,6 +106,7 @@ qmicli_dsd_options_enabled (void) n_actions = (!!get_apn_info_str + !!set_apn_type_str + + get_system_status_flag + noop_flag); if (n_actions > 1) { @@ -261,6 +274,63 @@ set_apn_type_input_create (const gchar *str) #endif /* HAVE_QMI_MESSAGE_DSD_SET_APN_TYPE */ +#if defined HAVE_QMI_MESSAGE_DSD_GET_SYSTEM_STATUS + +static void +get_system_status_ready (QmiClientDsd *client, + GAsyncResult *res) +{ + QmiMessageDsdGetSystemStatusOutput *output; + GError *error = NULL; + GArray *available_systems = NULL; + guint i; + + output = qmi_client_dsd_get_system_status_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_dsd_get_system_status_output_get_result (output, &error)) { + g_printerr ("error: couldn't get system status: %s\n", error->message); + g_error_free (error); + qmi_message_dsd_get_system_status_output_unref (output); + operation_shutdown (FALSE); + return; + } + + qmi_message_dsd_get_system_status_output_get_available_systems (output, &available_systems, NULL); + + if (!available_systems || !available_systems->len) { + g_print ("No available data system\n"); + } else { + g_print ("Available data systems retrieved:\n"); + for (i = 0; i < available_systems->len; i++) { + QmiMessageDsdGetSystemStatusOutputAvailableSystemsSystem *system; + g_autofree gchar *so_mask_str = NULL; + + system = &g_array_index (available_systems, QmiMessageDsdGetSystemStatusOutputAvailableSystemsSystem, i); + so_mask_str = qmi_dsd_so_mask_build_string_from_mask ((QmiDsdSoMask)system->so_mask); + g_print ("System [%u]%s:\n" + "\tNetwork type: '%s'\n" + "\tRAT: '%s'\n" + "\tService option: '%s'\n", + i, + i > 0 ? "" : " (current preferred)", + qmi_dsd_data_system_network_type_get_string (system->technology), + qmi_dsd_radio_access_technology_get_string (system->rat), + VALIDATE_MASK_NONE (so_mask_str)); + } + } + + qmi_message_dsd_get_system_status_output_unref (output); + operation_shutdown (TRUE); +} + +#endif /* HAVE_QMI_MESSAGE_DSD_GET_SYSTEM_STATUS */ + static gboolean noop_cb (gpointer unused) { @@ -321,6 +391,19 @@ qmicli_dsd_run (QmiDevice *device, } #endif +#if defined HAVE_QMI_MESSAGE_DSD_GET_SYSTEM_STATUS + if (get_system_status_flag) { + g_debug ("Asynchronously getting system status..."); + qmi_client_dsd_get_system_status (ctx->client, + NULL, + 10, + ctx->cancellable, + (GAsyncReadyCallback)get_system_status_ready, + NULL); + return; + } +#endif + /* Just client allocate/release? */ if (noop_flag) { g_idle_add (noop_cb, NULL); |