diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2021-04-22 14:30:59 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-04-23 23:14:30 +0200 |
commit | d536677efa7e4359d2591e36be7d142948c6a2b9 (patch) | |
tree | 9fa24330df59539110126944e69804f982401ada | |
parent | 0b1906618eb47b8bd37fba61507259ef09584031 (diff) | |
download | libqmi-d536677efa7e4359d2591e36be7d142948c6a2b9.tar.gz |
libqmi-glib,dpm: add service definition
The Data Port Mapper service provides a way to map hardware endpoint
ids to the ep-type/ep-iface-number fields we would normally use in
"WDA Get/Set Data Format" or "WDS Bind Mux Data Port".
This mapping seems to be required in setups using the IPA driver,
e.g. as seen in the mmdata_port_cfg() method of the modem-data-manager
tool provided by the CodeAurora project under the Linux Foundation:
https://source.codeaurora.org/quic/dataservices/modem-data-manager
-rw-r--r-- | build-aux/qmi-codegen/utils.py | 4 | ||||
-rw-r--r-- | data/Makefile.am | 1 | ||||
-rw-r--r-- | data/qmi-service-dpm.json | 74 | ||||
-rw-r--r-- | docs/reference/libqmi-glib/Makefile.am | 1 | ||||
-rw-r--r-- | docs/reference/libqmi-glib/libqmi-glib-common.sections | 1 | ||||
-rw-r--r-- | docs/reference/libqmi-glib/libqmi-glib-docs.xml | 10 | ||||
-rw-r--r-- | src/libqmi-glib/generated/Makefile.am | 15 | ||||
-rw-r--r-- | src/libqmi-glib/libqmi-glib.h | 2 | ||||
-rw-r--r-- | src/libqmi-glib/qmi-device.c | 6 | ||||
-rw-r--r-- | src/libqmi-glib/qmi-enums.h | 2 | ||||
-rw-r--r-- | src/libqmi-glib/qmi-message.c | 7 | ||||
-rw-r--r-- | src/qmicli/qmicli.c | 1 |
12 files changed, 122 insertions, 2 deletions
diff --git a/build-aux/qmi-codegen/utils.py b/build-aux/qmi-codegen/utils.py index 59fb68b2..2ad66321 100644 --- a/build-aux/qmi-codegen/utils.py +++ b/build-aux/qmi-codegen/utils.py @@ -70,8 +70,8 @@ def add_header_start(f, output_name, service): "#include <gio/gio.h>\n" "\n" "#include \"qmi-enums.h\"\n") - # CTL and GMS don't have enums - if service not in ('CTL', 'GMS'): + # CTL, DPM and GMS don't have enums + if service not in ('CTL', 'DPM', 'GMS'): template += ( "#include \"qmi-enums-${service}.h\"\n") if service == 'CTL': diff --git a/data/Makefile.am b/data/Makefile.am index 7a14f5b8..48e9e008 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -20,6 +20,7 @@ EXTRA_DIST = \ qmi-service-gms.json \ qmi-service-dsd.json \ qmi-service-sar.json \ + qmi-service-dpm.json \ qmi-collection-minimal.json \ qmi-collection-basic.json \ $(NULL) diff --git a/data/qmi-service-dpm.json b/data/qmi-service-dpm.json new file mode 100644 index 00000000..b0b35766 --- /dev/null +++ b/data/qmi-service-dpm.json @@ -0,0 +1,74 @@ +[ + // ********************************************************************************* + { "name" : "DPM", + "type" : "Service" }, + + // ********************************************************************************* + { "name" : "QMI Client DPM", + "type" : "Client", + "since" : "1.30" }, + + // ********************************************************************************* + { "name" : "QMI Message DPM", + "type" : "Message-ID-Enum" }, + + // ********************************************************************************* + { "name" : "Open Port", + "type" : "Message", + "service" : "DPM", + "id" : "0x0020", + "since" : "1.30", + "input" : [ { "name" : "Control Ports", + "id" : "0x10", + "type" : "TLV", + "since" : "1.30", + "format" : "array", + "array-element" : { "name" : "Element", + "format" : "struct", + "contents" : [ { "name" : "Port Name", + "format" : "string" }, + { "name" : "Endpoint Type", + "format" : "guint32", + "public-format" : "QmiDataEndpointType" }, + { "name" : "Interface Number", + "format" : "guint32" } ] } }, + { "name" : "Hardware Data Ports", + "id" : "0x11", + "type" : "TLV", + "since" : "1.30", + "format" : "array", + "array-element" : { "name" : "Element", + "format" : "struct", + "contents" : [ { "name" : "Endpoint Type", + "format" : "guint32", + "public-format" : "QmiDataEndpointType" }, + { "name" : "Interface Number", + "format" : "guint32" }, + { "name" : "RX Endpoint Number", + "format" : "guint32" }, + { "name" : "TX Endpoint Number", + "format" : "guint32" } ] } }, + { "name" : "Software Data Ports", + "id" : "0x12", + "type" : "TLV", + "since" : "1.30", + "format" : "array", + "array-element" : { "name" : "Element", + "format" : "struct", + "contents" : [ { "name" : "Endpoint Type", + "format" : "guint32", + "public-format" : "QmiDataEndpointType" }, + { "name" : "Interface Number", + "format" : "guint32" }, + { "name" : "Port Name", + "format" : "string" } ] } } ], + "output" : [ { "common-ref" : "Operation Result" } ] }, + + // ********************************************************************************* + { "name" : "Close Port", + "type" : "Message", + "service" : "DPM", + "id" : "0x0021", + "since" : "1.30", + "output" : [ { "common-ref" : "Operation Result" } ] } +] diff --git a/docs/reference/libqmi-glib/Makefile.am b/docs/reference/libqmi-glib/Makefile.am index 71d3118b..a7dd0535 100644 --- a/docs/reference/libqmi-glib/Makefile.am +++ b/docs/reference/libqmi-glib/Makefile.am @@ -25,6 +25,7 @@ ALL_SECTIONS = \ $(top_builddir)/src/libqmi-glib/generated/qmi-gms.sections \ $(top_builddir)/src/libqmi-glib/generated/qmi-dsd.sections \ $(top_builddir)/src/libqmi-glib/generated/qmi-sar.sections \ + $(top_builddir)/src/libqmi-glib/generated/qmi-dpm.sections \ $(NULL) $(DOC_MODULE)-sections.mstamp: $(ALL_SECTIONS) diff --git a/docs/reference/libqmi-glib/libqmi-glib-common.sections b/docs/reference/libqmi-glib/libqmi-glib-common.sections index 39abf8c8..24130888 100644 --- a/docs/reference/libqmi-glib/libqmi-glib-common.sections +++ b/docs/reference/libqmi-glib/libqmi-glib-common.sections @@ -1838,4 +1838,5 @@ HAVE_QMI_SERVICE_VOICE HAVE_QMI_SERVICE_WDA HAVE_QMI_SERVICE_WDS HAVE_QMI_SERVICE_WMS +HAVE_QMI_SERVICE_DPM </SECTION> diff --git a/docs/reference/libqmi-glib/libqmi-glib-docs.xml b/docs/reference/libqmi-glib/libqmi-glib-docs.xml index 5539860f..ce3b0312 100644 --- a/docs/reference/libqmi-glib/libqmi-glib-docs.xml +++ b/docs/reference/libqmi-glib/libqmi-glib-docs.xml @@ -527,6 +527,16 @@ </chapter> <chapter> + <title>Data Port Mapper (DPM)</title> + <xi:include href="xml/qmi-client-dpm.xml"/> + <section> + <title>DPM Requests</title> + <xi:include href="xml/qmi-message-dpm-open-port.xml"/> + <xi:include href="xml/qmi-message-dpm-close-port.xml"/> + </section> + </chapter> + + <chapter> <title>Compatibility with older versions</title> <xi:include href="xml/qmi-compat.xml"/> </chapter> diff --git a/src/libqmi-glib/generated/Makefile.am b/src/libqmi-glib/generated/Makefile.am index e80eab44..cf8a3080 100644 --- a/src/libqmi-glib/generated/Makefile.am +++ b/src/libqmi-glib/generated/Makefile.am @@ -24,6 +24,7 @@ GENERATED_H = \ qmi-gas.h \ qmi-gms.h \ qmi-dsd.h \ + qmi-dpm.h \ $(NULL) GENERATED_C = \ @@ -50,6 +51,7 @@ GENERATED_C = \ qmi-gms.c \ qmi-dsd.c \ qmi-sar.c \ + qmi-dpm.c \ $(NULL) GENERATED_SECTIONS = \ @@ -71,6 +73,7 @@ GENERATED_SECTIONS = \ qmi-gms.sections \ qmi-dsd.sections \ qmi-sar.sections \ + qmi-dpm.sections \ $(NULL) # Error types @@ -364,6 +367,17 @@ qmi-sar.h qmi-sar.c qmi-sar.sections: $(top_srcdir)/data/qmi-service-sar.json $( $(COLLECTION_OPT) \ --output qmi-sar +# DPM service +qmi-dpm.h qmi-dpm.c qmi-dpm.sections: $(top_srcdir)/data/qmi-service-dpm.json $(top_srcdir)/build-aux/qmi-codegen/*.py $(top_srcdir)/build-aux/qmi-codegen/qmi-codegen $(COLLECTION_PATH) + $(AM_V_GEN) \ + rm -f qmi-dpm.h && \ + rm -f qmi-dpm.c && \ + $(PYTHON) $(top_srcdir)/build-aux/qmi-codegen/qmi-codegen \ + --input $(top_srcdir)/data/qmi-service-dpm.json \ + --include $(top_srcdir)/data/qmi-common.json \ + $(COLLECTION_OPT) \ + --output qmi-dpm + BUILT_SOURCES = $(GENERATED_H) $(GENERATED_C) nodist_libqmi_glib_generated_la_SOURCES = \ @@ -410,6 +424,7 @@ nodist_include_HEADERS = \ qmi-gas.h \ qmi-gms.h \ qmi-dsd.h \ + qmi-dpm.h \ $(NULL) CLEANFILES = $(GENERATED_H) $(GENERATED_C) $(GENERATED_SECTIONS) diff --git a/src/libqmi-glib/libqmi-glib.h b/src/libqmi-glib/libqmi-glib.h index 11270056..07bf06bb 100644 --- a/src/libqmi-glib/libqmi-glib.h +++ b/src/libqmi-glib/libqmi-glib.h @@ -94,6 +94,8 @@ #include "qmi-enums-sar.h" #include "qmi-sar.h" +#include "qmi-dpm.h" + /* generated */ #include "qmi-error-types.h" #include "qmi-enum-types.h" diff --git a/src/libqmi-glib/qmi-device.c b/src/libqmi-glib/qmi-device.c index 3c415067..31db4402 100644 --- a/src/libqmi-glib/qmi-device.c +++ b/src/libqmi-glib/qmi-device.c @@ -54,6 +54,7 @@ #include "qmi-gas.h" #include "qmi-gms.h" #include "qmi-dsd.h" +#include "qmi-dpm.h" #include "qmi-utils.h" #include "qmi-helpers.h" #include "qmi-error-types.h" @@ -1271,6 +1272,11 @@ qmi_device_allocate_client (QmiDevice *self, ctx->client_type = QMI_TYPE_CLIENT_SAR; #endif break; + case QMI_SERVICE_DPM: +#if defined HAVE_QMI_SERVICE_DPM + ctx->client_type = QMI_TYPE_CLIENT_DPM; +#endif + break; case QMI_SERVICE_UNKNOWN: g_assert_not_reached (); diff --git a/src/libqmi-glib/qmi-enums.h b/src/libqmi-glib/qmi-enums.h index 4c4cba6b..c669fd6b 100644 --- a/src/libqmi-glib/qmi-enums.h +++ b/src/libqmi-glib/qmi-enums.h @@ -79,6 +79,7 @@ * @QMI_SERVICE_RFRPE: RF radiated performance enhancement service. Since: 1.8. * @QMI_SERVICE_DSD: Data system determination service. Since: 1.8. * @QMI_SERVICE_SSCTL: Subsystem control service. Since: 1.8. + * @QMI_SERVICE_DPM: Data Port Mapper service. Since: 1.30. * @QMI_SERVICE_CAT: Card Application Toolkit service (v1). * @QMI_SERVICE_RMS: Remote Management Service. * @QMI_SERVICE_OMA: Open Mobile Alliance device management service. @@ -136,6 +137,7 @@ typedef enum { /*< since=1.0 >*/ QMI_SERVICE_RFRPE = 0x29, QMI_SERVICE_DSD = 0x2A, QMI_SERVICE_SSCTL = 0x2B, + QMI_SERVICE_DPM = 0x2F, QMI_SERVICE_CAT = 0xE0, QMI_SERVICE_RMS = 0xE1, QMI_SERVICE_OMA = 0xE2, diff --git a/src/libqmi-glib/qmi-message.c b/src/libqmi-glib/qmi-message.c index da0c3aa4..92895ea4 100644 --- a/src/libqmi-glib/qmi-message.c +++ b/src/libqmi-glib/qmi-message.c @@ -58,6 +58,7 @@ #include "qmi-gms.h" #include "qmi-dsd.h" #include "qmi-sar.h" +#include "qmi-dpm.h" #define PACKED __attribute__((packed)) @@ -1715,6 +1716,11 @@ qmi_message_get_printable_full (QmiMessage *self, contents = __qmi_message_dsd_get_printable (self, context, line_prefix); #endif break; + case QMI_SERVICE_DPM: +#if defined HAVE_QMI_SERVICE_DPM + contents = __qmi_message_dpm_get_printable (self, context, line_prefix); +#endif + break; case QMI_SERVICE_UNKNOWN: g_assert_not_reached (); @@ -1821,6 +1827,7 @@ __qmi_message_is_abortable (QmiMessage *self, case QMI_SERVICE_IMSRTP: case QMI_SERVICE_RFRPE: case QMI_SERVICE_SSCTL: + case QMI_SERVICE_DPM: case QMI_SERVICE_CAT: case QMI_SERVICE_RMS: case QMI_SERVICE_FOTA: diff --git a/src/qmicli/qmicli.c b/src/qmicli/qmicli.c index 14107e80..7be87f30 100644 --- a/src/qmicli/qmicli.c +++ b/src/qmicli/qmicli.c @@ -485,6 +485,7 @@ allocate_client_ready (QmiDevice *dev, case QMI_SERVICE_IMSRTP: case QMI_SERVICE_RFRPE: case QMI_SERVICE_SSCTL: + case QMI_SERVICE_DPM: case QMI_SERVICE_CAT: case QMI_SERVICE_RMS: case QMI_SERVICE_FOTA: |