Merge remote-tracking branch 'cros/upstream' into 'cros/master'
diff --git a/NEWS b/NEWS
index 9eeb493..9a11142 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,23 @@
+
+Overview of changes in libqmi 1.8.0
+----------------------------------------
+
+This version comes with one small API break:
+* Enum value QMI_SERVICE_RMTFS is not 0x14, but 14. I doubt anyone has been hit
+ by this issue, anyway.
+
+Additional changes include:
+* Support for sharing the QMI port through multiple processes with the new
+ 'qmi-proxy' infrastructure.
+* api: added new known service ID enumeration values
+* wds: added "Get Profile List" request/response
+* wds: added "Get Profile Settings" request/response
+* wds: added "Get Default Settings" request/response
+* cli: add --wds-get-profile-list
+* cli: add --wds-get-default-settings
+* man: added qmi-network manpage, autogenerated from --help-all
+
+
Overview of changes in libqmi 1.6.0
----------------------------------------
diff --git a/configure.ac b/configure.ac
index 343126d..e000561 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@
dnl The QMI version number
m4_define([qmi_major_version], [1])
-m4_define([qmi_minor_version], [7])
+m4_define([qmi_minor_version], [9])
m4_define([qmi_micro_version], [0])
m4_define([qmi_version],
[qmi_major_version.qmi_minor_version.qmi_micro_version])
@@ -16,9 +16,9 @@
dnl with old code), increment a.
dnl If the interface has changed in an incompatible way (that is,
dnl functions have changed or been removed), then zero a.
-m4_define([qmi_glib_lt_current], [1])
+m4_define([qmi_glib_lt_current], [2])
m4_define([qmi_glib_lt_revision], [0])
-m4_define([qmi_glib_lt_age], [0])
+m4_define([qmi_glib_lt_age], [1])
AC_INIT([libqmi], [qmi_version], [libqmi-devel@lists.freedesktop.org])
diff --git a/docs/reference/libqmi-glib/libqmi-glib-common.sections b/docs/reference/libqmi-glib/libqmi-glib-common.sections
index b6d6d09..a5c54ed 100644
--- a/docs/reference/libqmi-glib/libqmi-glib-common.sections
+++ b/docs/reference/libqmi-glib/libqmi-glib-common.sections
@@ -44,6 +44,9 @@
QMI_DEVICE_FILE
QMI_DEVICE_SIGNAL_INDICATION
QmiDevice
+QmiDeviceOpenFlags
+QmiDeviceReleaseClientFlags
+QmiDeviceServiceVersionInfo
qmi_device_new
qmi_device_new_finish
qmi_device_get_file
@@ -51,22 +54,21 @@
qmi_device_get_path
qmi_device_get_path_display
qmi_device_is_open
-QmiDeviceOpenFlags
qmi_device_open
qmi_device_open_finish
qmi_device_close
qmi_device_allocate_client
qmi_device_allocate_client_finish
-QmiDeviceReleaseClientFlags
qmi_device_release_client
qmi_device_release_client_finish
qmi_device_set_instance_id
qmi_device_set_instance_id_finish
qmi_device_command
qmi_device_command_finish
-QmiDeviceServiceVersionInfo
qmi_device_get_service_version_info
qmi_device_get_service_version_info_finish
+qmi_device_open_flags_build_string_from_mask
+qmi_device_release_client_flags_build_string_from_mask
<SUBSECTION Standard>
QmiDeviceClass
QMI_DEVICE
@@ -75,8 +77,15 @@
QMI_IS_DEVICE
QMI_IS_DEVICE_CLASS
QMI_TYPE_DEVICE
+QMI_TYPE_DEVICE_OPEN_FLAGS
+QMI_TYPE_DEVICE_RELEASE_CLIENT_FLAGS
QmiDevicePrivate
qmi_device_get_type
+qmi_device_open_flags_get_type
+qmi_device_release_client_flags_get_type
+<SUBSECTION Private>
+qmi_device_open_flags_get_string
+qmi_device_release_client_flags_get_string
</SECTION>
<SECTION>
diff --git a/src/libqmi-glib/generated/Makefile.am b/src/libqmi-glib/generated/Makefile.am
index 72a2dab..13a8827 100644
--- a/src/libqmi-glib/generated/Makefile.am
+++ b/src/libqmi-glib/generated/Makefile.am
@@ -73,10 +73,11 @@
$(top_srcdir)/src/libqmi-glib/qmi-enums-pds.h \
$(top_srcdir)/src/libqmi-glib/qmi-enums-pbm.h \
$(top_srcdir)/src/libqmi-glib/qmi-enums-uim.h \
- $(top_srcdir)/src/libqmi-glib/qmi-enums-oma.h
+ $(top_srcdir)/src/libqmi-glib/qmi-enums-oma.h \
+ $(top_srcdir)/src/libqmi-glib/qmi-device.h
qmi-enum-types.h: $(ENUMS) $(top_srcdir)/build-aux/templates/qmi-enum-types-template.h
$(AM_V_GEN) $(GLIB_MKENUMS) \
- --fhead "#ifndef __LIBQMI_GLIB_ENUM_TYPES_H__\n#define __LIBQMI_GLIB_ENUM_TYPES_H__\n#include \"qmi-enums.h\"\n#include \"qmi-enums-wds.h\"\n#include \"qmi-enums-dms.h\"\n#include \"qmi-enums-nas.h\"\n#include \"qmi-enums-wms.h\"\n#include \"qmi-enums-pds.h\"\n#include \"qmi-enums-pbm.h\"\n#include \"qmi-enums-uim.h\"\n#include \"qmi-enums-oma.h\"\n" \
+ --fhead "#ifndef __LIBQMI_GLIB_ENUM_TYPES_H__\n#define __LIBQMI_GLIB_ENUM_TYPES_H__\n#include \"qmi-enums.h\"\n#include \"qmi-enums-wds.h\"\n#include \"qmi-enums-dms.h\"\n#include \"qmi-enums-nas.h\"\n#include \"qmi-enums-wms.h\"\n#include \"qmi-enums-pds.h\"\n#include \"qmi-enums-pbm.h\"\n#include \"qmi-enums-uim.h\"\n#include \"qmi-enums-oma.h\"\n#include \"qmi-device.h\"\n" \
--template $(top_srcdir)/build-aux/templates/qmi-enum-types-template.h \
--ftail "#endif /* __LIBQMI_GLIB_ENUM_TYPES_H__ */\n" \
$(ENUMS) > $@
diff --git a/src/libqmi-glib/qmi-device.c b/src/libqmi-glib/qmi-device.c
index a1352aa..f744971 100644
--- a/src/libqmi-glib/qmi-device.c
+++ b/src/libqmi-glib/qmi-device.c
@@ -1018,12 +1018,23 @@
ReleaseClientContext *ctx;
QmiService service;
guint8 cid;
+ gchar *flags_str;
g_return_if_fail (QMI_IS_DEVICE (self));
g_return_if_fail (QMI_IS_CLIENT (client));
+ cid = qmi_client_get_cid (client);
+ service = (guint8)qmi_client_get_service (client);
+
/* The CTL client should not have been created out of the QmiDevice */
- g_assert (qmi_client_get_service (client) != QMI_SERVICE_CTL);
+ g_return_if_fail (service != QMI_SERVICE_CTL);
+
+ flags_str = qmi_device_release_client_flags_build_string_from_mask (flags);
+ g_debug ("[%s] Releasing '%s' client with flags '%s'...",
+ self->priv->path_display,
+ qmi_service_get_string (service),
+ flags_str);
+ g_free (flags_str);
/* NOTE! The operation must not take a reference to self, or we won't be
* able to use it implicitly from our dispose() */
@@ -1035,9 +1046,6 @@
user_data,
qmi_device_release_client);
- cid = qmi_client_get_cid (client);
- service = (guint8)qmi_client_get_service (client);
-
/* Do not try to release an already released client */
if (cid == QMI_CID_NONE) {
g_simple_async_result_set_error (ctx->result,
@@ -1969,6 +1977,7 @@
gpointer user_data)
{
DeviceOpenContext *ctx;
+ gchar *flags_str;
/* Raw IP and 802.3 are mutually exclusive */
g_return_if_fail (!((flags & QMI_DEVICE_OPEN_FLAGS_NET_802_3) &&
@@ -1984,6 +1993,12 @@
g_return_if_fail (QMI_IS_DEVICE (self));
+ flags_str = qmi_device_open_flags_build_string_from_mask (flags);
+ g_debug ("[%s] Opening device with flags '%s'...",
+ self->priv->path_display,
+ flags_str);
+ g_free (flags_str);
+
ctx = g_slice_new (DeviceOpenContext);
ctx->self = g_object_ref (self);
ctx->result = g_simple_async_result_new (G_OBJECT (self),
diff --git a/src/qmicli/qmicli-helpers.c b/src/qmicli/qmicli-helpers.c
index 10f654c..b57ac68 100644
--- a/src/qmicli/qmicli-helpers.c
+++ b/src/qmicli/qmicli-helpers.c
@@ -285,6 +285,68 @@
}
gboolean
+qmicli_read_net_open_flags_from_string (const gchar *str,
+ QmiDeviceOpenFlags *out)
+{
+ GType type;
+ GFlagsClass *flags_class;
+ GFlagsValue *flags_value;
+ gboolean success = TRUE, set = FALSE;
+ char **items, **iter;
+
+ type = qmi_device_open_flags_get_type ();
+ flags_class = G_FLAGS_CLASS (g_type_class_ref (type));
+
+ items = g_strsplit_set (str, "|", 0);
+ for (iter = items; iter && *iter && success; iter++) {
+ if (!*iter[0])
+ continue;
+
+ flags_value = g_flags_get_value_by_nick (flags_class, *iter);
+ if (flags_value) {
+ *out |= (QmiDeviceOpenFlags)flags_value->value;
+ set = TRUE;
+ } else {
+ g_printerr ("error: invalid net open flags value given: '%s'\n", *iter);
+ success = FALSE;
+ }
+ }
+
+ if (!set)
+ g_printerr ("error: invalid net open flags input given: '%s'\n", str);
+
+ if (items)
+ g_strfreev (items);
+
+ if (*out & QMI_DEVICE_OPEN_FLAGS_NET_802_3 &&
+ *out & QMI_DEVICE_OPEN_FLAGS_NET_RAW_IP) {
+ g_printerr ("error: cannot give both 802.3 and raw-IP options\n");
+ success = FALSE;
+ }
+
+ if (*out & QMI_DEVICE_OPEN_FLAGS_NET_QOS_HEADER &&
+ *out & QMI_DEVICE_OPEN_FLAGS_NET_NO_QOS_HEADER) {
+ g_printerr ("error: cannot request both QoS and no-QoS headers\n");
+ success = FALSE;
+ }
+
+ if ((*out & (QMI_DEVICE_OPEN_FLAGS_NET_802_3 | QMI_DEVICE_OPEN_FLAGS_NET_RAW_IP)) &&
+ !(*out & (QMI_DEVICE_OPEN_FLAGS_NET_QOS_HEADER | QMI_DEVICE_OPEN_FLAGS_NET_NO_QOS_HEADER))) {
+ g_printerr ("error: missing QoS or no-QoS header request\n");
+ success = FALSE;
+ }
+
+ if ((*out & (QMI_DEVICE_OPEN_FLAGS_NET_QOS_HEADER | QMI_DEVICE_OPEN_FLAGS_NET_NO_QOS_HEADER)) &&
+ !(*out & (QMI_DEVICE_OPEN_FLAGS_NET_802_3 | QMI_DEVICE_OPEN_FLAGS_NET_RAW_IP))) {
+ g_printerr ("error: missing link protocol (802.3 or raw IP)\n");
+ success = FALSE;
+ }
+
+ g_type_class_unref (flags_class);
+ return success && set;
+}
+
+gboolean
qmicli_read_uint_from_string (const gchar *str,
guint *out)
{
diff --git a/src/qmicli/qmicli-helpers.h b/src/qmicli/qmicli-helpers.h
index d33f442..22ff330 100644
--- a/src/qmicli/qmicli-helpers.h
+++ b/src/qmicli/qmicli-helpers.h
@@ -42,9 +42,10 @@
gboolean qmicli_read_firmware_id_from_string (const gchar *str,
QmiDmsFirmwareImageType *out_type,
guint *out_index);
-
gboolean qmicli_read_radio_interface_from_string (const gchar *str,
QmiNasRadioInterface *out);
+gboolean qmicli_read_net_open_flags_from_string (const gchar *str,
+ QmiDeviceOpenFlags *out);
gboolean qmicli_read_non_empty_string (const gchar *str,
const gchar *description,
diff --git a/src/qmicli/qmicli.c b/src/qmicli/qmicli.c
index dc63c41..949a4a0 100644
--- a/src/qmicli/qmicli.c
+++ b/src/qmicli/qmicli.c
@@ -32,6 +32,7 @@
#include <libqmi-glib.h>
#include "qmicli.h"
+#include "qmicli-helpers.h"
#define PROGRAM_NAME "qmicli"
#define PROGRAM_VERSION PACKAGE_VERSION
@@ -50,6 +51,7 @@
static gchar *device_set_instance_id_str;
static gboolean device_open_version_info_flag;
static gboolean device_open_sync_flag;
+static gchar *device_open_net_str;
static gboolean device_open_proxy_flag;
static gchar *client_cid_str;
static gboolean client_no_release_cid_flag;
@@ -82,6 +84,10 @@
"Request to use the 'qmi-proxy' proxy",
NULL
},
+ { "device-open-net", 0, 0, G_OPTION_ARG_STRING, &device_open_net_str,
+ "Open device with specific link protocol and QoS flags",
+ "[net-802-3|net-raw-ip|net-qos-header|net-no-qos-header]"
+ },
{ "client-cid", 0, 0, G_OPTION_ARG_STRING, &client_cid_str,
"Use the given CID, don't allocate a new one",
"[CID]"
@@ -481,6 +487,9 @@
open_flags |= QMI_DEVICE_OPEN_FLAGS_SYNC;
if (device_open_proxy_flag)
open_flags |= QMI_DEVICE_OPEN_FLAGS_PROXY;
+ if (device_open_net_str)
+ if (!qmicli_read_net_open_flags_from_string (device_open_net_str, &open_flags))
+ exit (EXIT_FAILURE);
/* Open the device */
qmi_device_open (device,