
Overview of changes in libqmi 1.26.0
----------------------------------------

 * Build now requires GLib/GObject/GIO 2.48.

 * Build updated with several improvements:
   ** The build has been updated to use by default all warnings enabled by
      AX_COMPILER_FLAGS(), and therefore when building the release from a git
      checkout, autoconf-archive >= 2017.03.21 is now required. This new build
      dependency isn't required when building from the release tarball.
   ** Also when building from a git checkout, beware because by default
      --enable-compile-warnings=error is enabled, which implies -Werror. If
      you'd like to build from git and avoid -Werror, you should explicitly use
      --enable-compile-warnings=yes (to keep the warnings but without being
      errors), --enable-compile-warnings=no (to disable all the extra warnings
      enabled by default) or --disable-Werror (to unconditionally make all
      compiler warnings non-fatal).

 * Added new message collections support, so that users can select which
   messages to include in the built library during configure with the
   --enable-collection option. Three predefined sets are given:
   ** minimal: the bare minimum messages required to control connectivity.
   ** basic: all messages and indications that ModemManager requires.
   ** full: all supported messages and indications.
   Users can install custom collections under data/ and reference them in
   the same way as the predefined sets. E.g. installing a new
   data/qmi-collection-custom.json set can be enabled during configure with
   --enable-collection=custom.

 * Added new GObject Introspection support in the library, that can be
   explicitly requested during configure with --enable-introspection=yes.
   With the new introspection support, the libqmi-glib library can now be
   used directly from e.g. python programs, as in the example included with
   the release.

 * Implemented new QRTR backend support, disabled by default. This new backend
   allows to perform QMI operations on systems with the Qualcomm IPC router
   protocol available (since Linux 4.7). Users can build the QRTR backend
   support with --enable-qrtr, and will require the corresponding kernel
   headers. When this backend is enabled, a new libqrtr-glib library is built
   and installed along with libqmi-glib. The API of this libqrtr-glib library,
   and the QRTR-specific APIs in libqmi-glib (e.g. qmi_device_new_from_node())
   must not be considered stable yet, they may change in future versions of the
   project, even in 1.26.x updates. The libqmi-glib headers include a new
   QMI_QRTR_SUPPORTED symbol that specifies whether the QRTR backed has been
   enabled (if set to 1) or not (if set to 0).

 * Added 5GNR radio access technology support, with new enum values in both the
   DMS and NAS services.

 * New services:
   ** New 'GMS' (Telit General Modem Service) service, for now just implementing
      basic test get/set value commands.
   ** New 'DSD' (Data System Determination) service, implementing methods to get
      and set default bearer APN settings.

 * New request/response/indications:
   ** dms: implement "Get MAC Address" request/response.
   ** dms: renamed "Dell Get Firmware Version" to "Foxconn Get Firmware Version"
      as the command applies not only to the Dell-branded variant, but also to
      the generic Foxconn-branded models. The old APIs are kept available but
      flagged as deprecated.
   ** loc: implement "Set NMEA Types" request/response.
   ** loc: implement "Get NMEA Types" request/response.
   ** uim: implement "Switch Slot" request/response.
   ** uim: implement "Get Slot Status" request/response.
   ** uim: implement "Slot Status" indication.
   ** voice: implement "Indication Register" request/response.
   ** voice: implement "Originate USSD" request/response.
   ** voice: implement "Answer USSD" request/response.
   ** voice: implement "Cancel USSD" request/response.
   ** voice: implement "Release USSD" request/response.
   ** voice: implement "USSD" indication.
   ** voice: implement "Originate USSD No Wait" request/response.
   ** voice: implement "Originate USSD No Wait" indication.

 * New TLVs supported in existing messages:
   ** nas: added 'Extended List' and 'Bandwidth List' in "Get RF Band
      Information".
   ** wda: added 'Endpoint Info' in "Get Data Format".

 * libqmi-glib:
   ** Added g_autoptr() support to all public types.
   ** The qmi_message_get_version_introduced_full() method is now deprecated
      and should no longer be used in newly written code. This method will
      always return FALSE as the details of which protocol version introduced
      the message are no longer available.

 * qmi-proxy:
   ** Updated to keep track of QMI clients that have not been explicitly
      released, so that qmicli --client-cid=[CID] and --client-no-release-cid
      operations can handle indications properly.

The following features which were backported to 1.24.x releases are also present
in libqmi 1.26.0:

 * libqmi-glib:
   ** The logic behind QMI_DEVICE_OPEN_FLAGS_VERSION_INFO has been updated, and
      from now on it will only make sure the version info of the device is
      loaded when it's opened. The library will no longer prevent a given
      message from being sent to the module based on the version information
      kept in the message database.
   ** Updated string reading logic to make sure that all strings are valid
      UTF-8, and also automatically attempt parsing as GSM7 or UCS2 if the
      initial UTF-8 validation fails.
   *+ Renamed TLV 0x15 in the "WDA Get Data Format" message, and added new
      compat methods for the old name.
   ** Fixed the format of the NITZ information TLV, and added new compat
      methods for the old name.
   ** Fixed the format of the Home Network 3GPP2 TLV, and added new compat
      methods for the old name.
   ** Added new WDS verbose call end reasons in the IPv6, PPP, 3GPP, CM and
      Internal groups.
   ** Updated to detect QMI control ports exposed as 'smdpkt' or 'rpmsg' virtual
      devices.


Overview of changes in libqmi 1.24.0
----------------------------------------

 * New services:
   ** New 'GAS' (Telit General Application Service) service, which allows
      switching between stored firmware images in Telit devices.

 * New request/responses/indications:
   ** uim: implement 'Change Provisioning Session' request/response.
   ** nas: implement Sierra-specific 'Swi Get Status' request/response.

 * New TLVs supported in existing messages:
   * nas: added 'Usage Preference' in "Get/Set System Selection Preference".
   * nas: added 'Network Name Source' in "Get Serving System" and "Get Home
     Network".
   * nas: added 'LTE Cell Access Status' in "Get System Info".
   * nas: added 'IMS Voice Support' in "Get System Info".
   * nas: added 'LTE eMBMS Coverage Info Trace ID' in "Get System Info".
   * nas: added 'Network Selection Registration Restriction' in "Get System
     Info".
   * nas: added 'LTE Registration Domain' in "Get System Info".
   * nas: added 'Disabled Modes' in "Get System Selection Preference".
   * nas: added 'Network Selection Registration Restriction" in "Get/Set System
     Selection Preference".
   * nas: added 'Voice Domain Preference' in "Get/Set System Selection
     Preference".
   * nas: added 'Network Scan Result' in "Network Scan".
   * dms: added 'Imei Software Version" in "Get IDs".

 * libqmi:
   ** New qmi_device_command_abortable() async method is used with requests that
      are abortable (both "WDS Start Network" and "NAS Network Scan" so far),
      so that the method waits for either the request succeed or for the abort
      operation to finish. This new method solves races when a successful
      response to the message is received after the abort has been requested
      (e.g. if receiving a successful response to WDS Start Network after the
      abort request has been sent, the async operation succeeds and the abort
      will be ignored). The user must understand that aborting a command
      initiated with qmi_device_command_abortable() doesn't mean it will fail
      as aborted, the command may actually succeed. Although this is a new
      command in the interface, both qmi_client_wds_start_network() and
      qmi_client_nas_network_scan() will use it internally and transparently for
      the user.
   ** New qmi_message_new_from_data() and qmi_message_get_data() methods to work
      with QMI messages that don't have QMUX headers.
   ** New support for symlinks in /dev/cdc-wdm ports.
   ** QMI over MBIM transaction timeout logic was simplified in order to rely on
      the QMI transaction timeout instead of the MBIM one.
   ** Reworked internals to have different 'QMI endpoint' implementations, in
      order to easily integrate new transports like QRTR.
   ** Added definition of LTE bands 164 through 168 in NAS service.
   ** Added retry support when opening the QmiDevice with the SYNC flag only
      (without the VERSION_CHECK).

 * qmi-proxy:
   ** New '--empty-timeout=[SECS}' option.

 * qmicli:
   ** New '--uim-change-provisioning-session' command.
   ** New '--gas-dms-get-firmware-list' command.
   ** New '--gas-dms-get-active-firmware' command.
   ** New '--gas-dms-set-active-firmware' command.
   ** New '--gas-noop' command.
   ** New '--nas-swi-get-status' command.
   ** Added support to request auto/manual network attachment when using
      '--nas-set-system-selection-preference'.

 * qmi-firmware-update:
   ** Added support for upgrading the Sierra Wireless EM7565 module with the new
      Sahara/Firehose protocol.

 * Several other minor improvements and fixes.

The following features which were backported to 1.22.x releases are also present
in libqmi 1.24.0:

 * Build updated to explicitly define max allowed GLib version.

 * New request/responses/indications:
   ** uim: new "Register Events" request/response.
   ** dms: new "Dell Change Device Mode" request/response.
   ** dms: new "Dell Get Firmware Version" request/response.

 * qmicli:
   ** New '--dms-dell-change-device-mode' command.
   ** New '--dms-dell-get-firmware-version' command.


Overview of changes in libqmi 1.22.0
----------------------------------------

 * Build now looks for the correct python provider in the system during
   configure.

 * New services:
   ** New 'QoS' (Quality of Service) service, with some minimal initial
      implementation to support flow/network status querying. Additionally,
      some Sierra-specific commands are also implemented that allow querying
      per-bearer statistics (e.g. if multiple dedicated and default LTE bearers
      are used).

 * New request/responses/indications:
   ** loc: new "Register Events" request/response.
   ** loc: new "NMEA" indication.
   ** loc: new "Engine State" indication.
   ** loc: new "Fix Recurrence Type" indication.
   ** loc: new "GNSS Sv Info" indication.
   ** loc: new "Inject Predicted Orbits Data" request/response/indication.
   ** loc: new "Get Predicted Orbits Data Source" request/response/indication.
   ** loc: new "Set Server" request/response/indication.
   ** loc: new "Get Server" request/response/indication.
   ** loc: new "Delete Assistance Data" request/response/indication.
   ** loc: new "Set Operation Mode" request/response/indication.
   ** loc: new "Get Operation Mode" request/response/indication.
   ** loc: new "Inject XTRA Data" request/response/indication.
   ** uim: new "Card Status" indication.
   ** wds: new "Get Default Profile Num" request/response.
   ** wds: new "Set Default Profile Num" request/response.
   ** wds: new Sierra-specific "Swi Create Profile Indexed" request/response.

 * New TLVs supported in existing messages:
   ** loc: added multiple new TLVs in the "Position Report" indication, which
      was a minimal skeleton in previous releases.
   ** loc: added 'Fix Recurrence Type' TLV in "Start".
   ** loc: added 'Minimum Interval between Position Reports' TLV in "Start".
   ** nas: added 'Acquisition Order Preference' TLV in "Set System Selection
      Preference" and "Get System Selection Preference".
   ** nas: added 'Phy CA Agg Secondary Cells' TLV in "Get LTE Cphy CA Info".
   ** wds: added 'WDS APN Disabled Flag' TLV in "Create Profile", "Modify
      Profile" and "Get Profile Settings".
   ** wds: added 'WDS Roaming Disallowed Flag' TLV in "Create Profile",
      "Modify Profile" and "Get Profile Settings".

 * libqmi:
   ** Assume TLVs < 0x10 are mandatory by default.
   ** Fixed some missing QmiProtocolErrors and updated some existing ones.
   ** Implemented support to allow enabling QMI indications when in MBIM mode.
   ** Addded missing QmiNasBandPreference and QmiDmsLteBandCapability flags.
   ** Deprecate QMI_CORE_ERROR_TLV_EMPTY, as empty TLVs are allowed by the
      protocol and totally valid e.g. in 0-sized string-type TLVs.
   ** Moved all deprecated APIs to 'qmi-compat.h' header.

 * qmicli:
   ** New '--loc-get-position-report' command.
   ** New '--loc-get-gnss-sv-info' command.
   ** New '--loc-follow-position-report' command.
   ** New '--loc-follow-gnss-sv-info' command.
   ** New '--loc-follow-nmea' command.
   ** New '--loc-delete-assistance-data' command.
   ** New '--qos-get-flow-status' command.
   ** New '--qos-get-network-status' command.
   ** New '--qos-swi-read-data-stats' command.
   ** New '--qos-reset' command.
   ** New '--wds-create-profile' command.
   ** New '--wds-modify-profile' command.
   ** New '--wds-delete-profile' command.
   ** New '--wds-get-default-profile-num' command.
   ** New '--wds-set-default-profile-num' command.
   ** New '--wds-swi-create-profile-indexed' command.
   ** Added support to request acquisition order preference updates when using
      '--nas-set-system-selection-preference'.
   ** Fixed slot indices in '--uim-get-card-status'.
   ** Fixed '--uim-set-pin-protection', '--uim-verify-pin", "--uim-unblock-pin",
      and '--uim-change-pin', so that a dummy application identifier is always
      used.
   ** Updated so that all commands work even through QMI over MBIM, even if
      indications are required to complete the command (e.g. most PDC and LOC
      commands).

 * qmi-network:
   ** Avoid creating invalid --wds-start-network when APN is not set.

 * Several other minor improvements and fixes.

The following features which were backported to 1.20.x releases are also present
in libqmi 1.22.0:

 * qmicli:
   ** Exit on --wds-start-network parse errors.
   ** Fix reading current technology in --wds-get-data-bearer-technology.

 * qmi-firmware-update:
   ** Fix --ignore-version-errors.
   ** Fix byte counts in error message.

 * libqmi-glib:
   ** dms: factory settings related operations since 1.0
   ** Avoid closing same file descriptor twice.
   ** Don't leak the inner MbimDevice if MBIM_QMUX_ENABLED.


Overview of changes in libqmi 1.20.0
----------------------------------------

 * New services:
   ** loc: new "LOC" (location) service, which e.g. allows controlling GPS
       devices in newer modules that don't implement the PDS service. Just some
       very basic implementation for now.

 * New request/responses:
   ** nas: new "Attach/Detach" request/response messages.
   ** wds: new "Get Channel Rates" request/response messages.
   ** dms: new 'Swi Get/Set USB Composition' request/response messages.

 * New TLVs supported in existing messages:
   ** nas: new 'Extended LTE Band Preference' TLV in "Set/Get SSP".
   ** dms: new 'Extended LTE Band Capability' TLV in "Get Band Capabilities".

 * libqmi:
   ** New 'QMI_DEVICE_SIGNAL_REMOVED' signal in the QmiDevice object, propagated
      through the qmi-proxy.
   ** New 'QMI_CLIENT_VALID' property in the QmiClient that allows detecting
      whether the underlying QmiDevice is usable or not.
   ** Defined additional LTE bands.

 * qmicli:
   ** New '--wds-set-ip-family' command.
   ** New '--wds-get-channel-rates' command.
   ** New '--uim-read-record' command.
   ** New '--dms-swi-get-usb-composition' and '--dms-swi-set-usb-composition'
      commands.

 * Several other minor improvements and fixes.

The following features which were backported to 1.18.x releases are also present
in libqmi 1.20.0:

 * libqmi-glib:
   ** Prefer realpath() to canonicalize_file_name().
   ** Avoid signals sent to the qmi-proxy process.

 * qmi-firmware-update:
   ** Support USB3->USB2 mode changes during upgrade.


Overview of changes in libqmi 1.18.0
----------------------------------------

The full list of new features include:

 * libqmi:
   ** Implemented support for vendor-specific commands through a new
      qmi_device_command_full() operation and a new QmiMessageContext type. The
      original qmi_device_command() is flagged as deprecated.
   ** New 'QMI_DEVICE_OPEN_FLAGS_AUTO' flag in qmi_device_open() which allows
      automatic detection of the underlying protocol in a cdc-wdm device (either
      QMI or MBIM) and transparently uses it based on that.
   ** New qmi_device_close_async() operation, which allows closing a QmiDevice
      asynchronously (especially important when closing devices running QMI over
      MBIM, as this operation requires MBIM protocol cleanups). The original
      qmi_device_close() is flagged as deprecated.
   ** Fixed QmiWmsCdmaCauseCode enum names, and provided a compatibility layer
      keeping the old names (flagged as deprecated) to avoid breaking API.

 * New services:
   ** pdc: new "PDC" (persistent device configuration) service, which among
      other things, allows configuring the HP lt4120.

 * New request/responses:
   ** dms: new sierra-specific "SWI Get Current Firmware" request/response.
   ** dms: new hp-specific "HP Change Device Mode" request/response.
   ** dms: new "Set Firmware ID" request/response.
   ** dms: new "Get Boot Image Download Mode" request/response.
   ** dms: new "Set Boot Image Download Mode" request/response.
   ** wds: new "Create Profile" request/response.
   ** wds: new "Modify Profile" request/response.
   ** wds: new "Delete Profile" request/response.
   ** wds: new "Set Event Report" request/response.
   ** wds: new "Go Dormant" request/response.
   ** wds: new "Go Active" request/response.
   ** wds: new "Get Dormancy Status" request/response.
   ** pdc: new "Reset" request/response.
   ** pdc: new "Register" request/response.
   ** pdc: new "Config Change" request/response.
   ** pdc: new "Get Selected Config" request/response.
   ** pdc: new "Set Selected Config" request/response.
   ** pdc: new "List Configs" request/response.
   ** pdc: new "Delete Config" request/response.
   ** pdc: new "Load Config" request/response.
   ** pdc: new "Activate Config" request/response.
   ** pdc: new "Get Config Info" request/response.
   ** pdc: new "Get Config Limits" request/response.
   ** pdc: new "Get Default Config Info" request/response.
   ** pdc: new "Deactivate Config" request/response.
   ** uim: new "Power Off SIM" request/response.
   ** uim: new "Power On SIM" request/response.
   ** nas: new "Get Operator Name" request/response.
   ** wds: new "Bind Mux Data Port" request/response.

* New indications:
   ** wds: new "Event report" indication.
   ** pdc: new "Get Selected Config" indication.
   ** pdc: new "Set Selected Config" indication.
   ** pdc: new "List Configs" indication.
   ** pdc: new "Load Config" indication.
   ** pdc: new "Activate Config" indication.
   ** pdc: new "Get Config Info" indication.
   ** pdc: new "Deactivate Config" indication.
   ** nas: new "Operator Name" indication.

 * New TLVs supported in existing messages:
   ** wda: updated "Set Data Format" request to allow specifying endpoint type
      and interface number.

 * qmi-firmware-update:
   ** This is a completely new tool that allows upgrading firmware in (at least)
      Sierra Wireless devices with MDM9200, MDM9x15 or MDM9x30 chipsets. Run the
      tool with --help and --help-examples to get more information on how to use
      it.

 * qmicli:
   ** The CLI no longer requires the '--device-open-mbim' explicit option when
      opening QMI capable MBIM devices, the automatic detection of QMI over MBIM
      is enabled by default.
   ** New '--device-open-qmi' option to disable the automatic detection of
      protocol and force using QMI.
   ** New '--dms-set-firmware-id' operation.
   ** New '--dms-get-software-version' operation.
   ** New '--dms-set-boot-image-download-mode' and
      '--dms-get-boot-image-download-mode' operations to configure the default
      download mode.
   ** New '--dms-set-firmware-preference' and '--dms-get-firmware-preference'
      operations to manage the current firmware preference.
   ** New '--wds-go-dormant', '--wds-go-active' and '--wds-get-dormancy-status'
      operations to manage dormancy related operations.
   ** New '--nas-get-rf-band-info' operation.
   ** New '--uim-sim-power-on' and '--uim-sim-power-off' operations.
   ** New '--nas-get-operator-name' operation.
   ** New '--wds-bind-mux-data-port' operation.
   ** Updated '--wda-set-data-format' to allow specifying endpoint type and
      interface number.
   ** If running in MBIM mode, enable MBIM logs and traces.
   ** By default the QmiDevice will be closed before exiting, e.g. so that the
      MBIM session is also closed.

 * docs:
   ** Updated the documentation so that each QMI message and each TLV specifies
      in which libqmi version it was introduced, using "since:" tags in the QMI
      message databases.
   ** Added indices for new symbols introduced in the major libqmi releases, as
      well as for symbols flagged as deprecated.

 * build:
   ** Bump GLib requirement to 2.36.
   ** Added GUdev requirement for qmi-firmware-update, that may be explicitly
      disabled using the new '--without-udev' configure switch.
   ** The new '--disable-firmware-update' configure switch allows completely
      disabling the qmi-firmware-update tool build.
   ** The new '--disable-mm-runtime-check' configure switch allows disabling
      the runtime check for ModemManager done by the qmi-firmware-update tool.

The following features which were backported to 1.16.x releases are also present
in libqmi 1.18.0:

 * dms: flagged several methods as available since DMS 1.1.
 * nas: Fix RX/TX mixup in 'Get LTE Cphy CA Info'.

 * libqmi-glib:
   ** Fix segfault in QmiDevice when cancellable already cancelled.
   ** Fix releasing transaction on MBIM error.

 * qmicli:
   ** Added support for IP type in --wds-start-network.
   ** Fix options receiving a list of flags.
   ** Fix second ctrl+c handling.
   ** Avoid converting to dB invalid SINR values.

 * qmi-proxy:
   ** Fix segfault when trying to use already disposed clients.
   ** Fix segfault when trying to use already disposed transactions.
   ** Plug several memleaks in error conditions.

 * build:
   ** Guard invocations of g_type_init().
   ** Fix checking for libmbim.


Overview of changes in libqmi 1.16.0
----------------------------------------

* New `--enable-mbim-qmux' option during configure, which enables the support
  for using an MBIM control device as transport for the QMI messages, only if
  the MBIM device implements the "QMI service". This setting is automatically
  enabled if libmbim >= 1.14.0 is found in the system, and can be explicitly
  disabled with `--disable-mbim-qmux'.

* New request/responses:
  ** nas: new "Get LTE Cphy CA Info" request/response.
  ** nas: new "Force Network Search" request/response.

* qmi-network:
  ** Fixed several bashisms.

The following features which were backported to 1.14.x releases are also present
in libqmi 1.16.0:

* Added compatibility symbols for some API breaks introduced in 1.14.0:
  ** qmi_message_dms_set_service_programming_code_input_get_current
     was renamed to qmi_message_dms_set_service_programming_code_input_get_current_code.
  ** qmi_message_dms_set_service_programming_code_input_get_new
     was renamed to qmi_message_dms_set_service_programming_code_input_get_new_code.
  ** qmi_message_dms_set_service_programming_code_input_set_current
     was renamed to qmi_message_dms_set_service_programming_code_input_set_current_code.
  ** qmi_message_dms_set_service_programming_code_input_set_new
     was renamed to qmi_message_dms_set_service_programming_code_input_set_new_code.
  ** QMI_NAS_SIM_REJECT_STATE_SIM_VAILABLE was renamed to
     QMI_NAS_SIM_REJECT_STATE_SIM_AVAILABLE.

* libqmi-glib:
  ** Fixed QMI_DMS_BAND_CAPABILITY_BC_15 enum value so that it isn't treated as
     a negative value.

* qmicli:
  ** Fixed --dms-get-band-capabilities output on 32-bit platforms.
  ** Fixed license text of the voice service implementation.


Overview of changes in libqmi 1.14.0
----------------------------------------

* This version comes with a couple of small API breaks:
  ** ECIO value type in "NAS Event Report Indication" is given as unsigned.
  ** ECIO value in ECIO List array type in "NAS Get Signal Strenght" is given as
     unsigned.
  ** QMI_NAS_SIM_REJECT_STATE_SIM_AVAILABLE enum name was fixed.

* The library and tools now support working with modems which only implement raw
  IP (i.e. no ethernet headers) in the WWAN interface. This relies on the kernel
  to expose '/sys/class/net/<WWAN>/qmi/raw_ip' sysfs files for each WWAN network
  interface (available since Linux 4.5-rc1).

* New initial support for the 'Voice' service.

* New request/responses:
  ** wms: new "Get Supported Messages" request/response.
  ** wds: new "Get Supported Messages" request/response.
  ** voice: new "Get Supported Messages" request/response.
  ** uim: new "Get Supported Messages" request/response.
  ** nas: new "Get Supported Messages" request/response.
  ** wda: new "Get Supported Messages" request/response.
  ** dms: new "Get Supported Messages" request/response.
  ** wds: new "Set Autoconnect Setting" request/response.
  ** wds: new "Get Autoconnect Setting" request/response.
  ** wds: new "Get PDN Throttle Info" request/response.
  ** uim: new "Change PIN" request/response.
  ** uim: new "Unblock PIN" request/response.
  ** uim: new "Verify PIN" request/response.
  ** uim: new "Set PIN protection" request/response.
  ** voice: new "Dial Call" request/response.
  ** voice: new "End Call" request/response.
  ** voice: new "Answer Call" request/response.
  ** voice: new "Get Config" request/response.
  ** voice: new "Get Supported Messages" request/response.

* New indications:
  ** wms: new "SMSC Address" indication.
  ** pds: new "GPS Ready" indication.
  ** wds: new "Packet Service Status" indication.

* New TLVs supported in existing messages:
  ** wds: support "UMTS Granted QoS" TLV in 'Get Current Settings'.
  ** nas: support "Home Network 3GPP MNC" in "Get Home Network" to know whether
     MNC is 2 or 3 digits.

* The qmicli tool has been updated with several new functionalities:
  ** New '--get-wwan-iface' command line option to allow querying which is the
     WWAN interface associated with a given /dev/cdc-wdm device.
  ** New '--wds-get-current-settings' command line option to query the current
     settings in the WDS service.
  ** New '--get-expected-data-format' and '--set-expected-data-format' actions
     to get or set the data format expected by the kernel.
  ** LTE band descriptions are now printed along with the EARFCN.
  ** Updated '--wds-start-network' arguments to allow specifying "key=value"
     pairs. The old legacy "[(APN),(PAP|CHAP|BOTH),(Username),(Password)]"
     format is kept as valid for backwards compatibility, although it should be
     assumed deprecated.
  ** Updated '--wds-start/stop-network' to allow autoconnect settings, and 3GPP
     or 3GPP2 profile parameters.

* The qmi-network helper script has been updated with several new features:
  ** Allow running with the qmi-proxy.
  ** Allow running qmi-network with multiple devices at the same time.
  ** Automatic link layer protocol update before connecting.
  ** Allow specifying APN user/password.

* Added command completion support in qmicli.

* Other bugfixes and minor improvements.

The following features which were backported to 1.12.x releases are also present
in libqmi 1.14.0:

* New request/responses:
  ** dms: new "Set FCC Authentication" request/response.


Overview of changes in libqmi 1.12.0
----------------------------------------

* New `--enable-qmi-username' option during configure, which allows specifying
  which will be the user owning the /dev/cdc-wdm character devices of all QMI
  modems (udev rules are installed to change file ownership). If this option is
  used, the qmi-proxy will only allow connections from processes running by the
  specified user or by the root user.

* New TLV builder and reader API, which is much more strict and secure. The
  autogenerated code will no longer first check if there is enough space
  available in the output message buffer and then write the parsed contents.
  Instead, the new reader API will be used, which is able to check for the
  expected size directly before writing in the buffer.

* New unit tests to check messages built by the libqmi-glib library, using a
  fake proxy. In order to support these, the QmiDevice has two new properties:
  ** "device-no-file-check": instructs the QmiDevice to avoid checking if the
     specified file exists.
  ** "device-proxy-path": specifies a custom abstract socket path for the
     QmiProxy, to avoid using the default one.

* New A-GPS support in the PDS service:
  ** pds: added "Get Default Tracking Session" request/response
  ** pds: added "Set Default Tracking Session" request/response
  ** pds: added "Get AGPS Config" request/response
  ** pds: added "Set AGPS Config" request/response

* Updated minumum available version of several messages:
  ** dms: "UIM Get IMSI" seems to be available in DMS 1.1 already
  ** dms: "UIM Get ICCID" seems to be available in DMS 1.1 already

* Other bugfixes and minor improvements:
  ** Attach timeout and idle events to the thread-default context.
  ** Fix bashisms in the qmi-network script.
  ** Fix qmi_message_set_transaction_id() in non-CTL messages.
  ** Fix segfault due to race condition in the QmiProxy.
  ** Fixed printing contents of structs with fixed sized strings in qmi-codegen.


Overview of changes in libqmi 1.10.0
----------------------------------------

* Fixed default internal proxy timeout for requests.
* Added initial support for the WDA service.
* Added support for cell location info retrieval.
* Added support for UIM card status retrieval.
* Added support to specify net open flags in the command line.


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
----------------------------------------

This version comes with one small API break:
* dms: 'SID' TLV in "Activate Manual" is a guint8, not a string

Additional changes include:
* Extended API with macros to check for the libqmi-glib version in use
* Setup libtool versioning in libqmi-glib
* Added initial support for the PBM (phonebook) service
* Added initial support for the UIM service
* Added initial support for the OMA (Open Mobile Alliance) service
* nas: added "Get Tx Rx Info" request/response
* wds: added "Get Packet Statistics" request/response
* dms: added support for the 'PRL' TLV in "Activate Manual"
* cli: add --nas-get-tx-rx-info
* cli: add --wds-get-packet-statistics
* cli: add --get-service-version-info
* cli: add --uim-read-transparent
* cli: add --uim-get-file-attributes
* cli: fix following network status until disconnected
* tests: use gtester to run unit tests
* man: added qmicli manpage, autogenerated from --help-all
* Also fixed several minor bugs and memory leaks


Overview of changes in libqmi 1.4.0
----------------------------------------

* dms: fix minimum version requirement for DMS Get/Set Operating Mode
* nas: added 'Network Time' indication
* utils: fix reading sized uints in BE systems
* cli: add --dms-activate-manual
* cli: implemented setting System Selection Preference
* cli: fix technology preference persistence reporting
* cli: fix reading new PIN in '--dms-uim-change-pin'
* docs: always generate documentation at dist time
* tests: fixed BE/LE tests in BE systems


Overview of changes in libqmi 1.2.0
----------------------------------------

* Builds with Python3
* Fixed DMS activation code string handling
* Enhanced "start network" functionality in qmicli


Overview of changes in libqmi 1.0
----------------------------------------

Initial release.
