v1.1.0
ubxlib v1.1.0
In this release we add support for the M9 series of GNSS modules and the LARA-R6 LTE Cat-1 modules. In addition several features and improvements were added. Find further information below as well as in the commit log.
Positioning
u-blox M9 GNSS Module Support 🛰️
-
Configuration messages VALSET/VALGET/VALDEL with NACK-awareness.
GNSS modules from M9 onwards support a generic mechanism for setting/getting/deleting configuration values - the VALSET/VALGET/VALDEL ubx messages. This configuration mechanism is added in the uGnssCfg API. As part of this change the uGnssMsg API is now able to detect and report when a NACK is received for a ubx-format message that it has been asked to monitor: should this occur the error code U_GNSS_ERROR_NACK will be returned.
-
Improved version API for GNSS
-
SPARTN message utilities
These SPARTN protocol message utilities can be used for validating SPARTN (https://www.spartnformat.org/) messages, e.g. as received from a u-blox L-band module, e.g. NEO-D9S. There is no requirement to do this, SPARTN messages can simply be forwarded to the GNSS module, where the module itself will decode them.
Note that the body of the SPARTN message is not decrypted/authenticated or anything by this code, all of that is done inside the u-blox GNSS chip that the SPARTN message is forwarded to.
-
BREAKING GNSS change to uGnssMsg API: new message parsing and ring-buffer enhancements.
With this change parsing of messages from the GNSS device is improved, now being performed within the ring-buffer itself, losing a copy while dodging lots of mutex locks. Also, and this is the BREAKING aspect of this change, all messages are now fully FCS checked, i.e. for the UBX-format case the user no longer has to call uGnssMsgIsGood() and hence this function is removed; if you were previously using the gnss_cfgval_preview or development branches, where this function existed, you may need to remove any calls you made to it.
Support for parsing RTCM-format messages is added to the uGnssMsg API, though note that this is not yet fully tested; tests will be along shortly.
The uGnssMsg API also now permits return of messages it does not understand, i.e. unknown protocols, and return of any messages (all + unknown).
-
GNSS-specific examples: uGnssMsg and uGnssCfgVal
Examples are added for GNSS-specific scenarios, one for the GNSS messaging API and another for the GNSS CFGVALXXX API.
-
new user message API and uGnssCfgGet/SetProtocolOut()
A new uGnssMsg API is introduced, allowing you to send user-defined messages to and monitor responses from the GNSS chip: both blocking and multiple asynchronous receives are supported. As part of this the internals of GNSS message receive are re-written to use a ring buffer with an expanded version of the common utility ring buffer code; this has the twin advantages of allowing multiple readers of the incoming stream and allowing the application to read messages of arbitrary length, not limited by buffer sizes inside ubxlib.
-
Improved version API for GNSS
Cellular 📶
-
LARA-R6 Support. This module is different to the currently supported set of cellular modules since it has LTE (Cat 1) but does NOT have Cat-M1/NB1. It also supports EGPRS and UTRAN, so a tri-RAT device. Support of LARA-R6 power saving.
-
SARA-R5 dual-RAT Support
-
BEHAVIOUR CHANGE in cellular scan: U_CELL_NET_SCAN_TIME_SECONDS.
-
User abort. A field pKeepGoingCallback is added to the network configuration for cellular, permitting the user to pass in their own keep-going callback function, therefore allowing the abortable connect and disconnect operations to be aborted directly by the user if required. If the user does NOT require this feature, nothing changes: the field in the cellular network configuration structure will be zeroed by the compiler (i.e. pKeepGoingCallback= NULL) and so is ignored, timeoutSeconds will be applied instead, as it always was.
-
FOTA support
Initial support for FOTA of cellular modules, i.e. firmware update over the air of the FW inside the cellular module. This is rudimentary support only: reading the status of the FW update process which is actually driven entirely by u-blox servers; the MCU has no control over the process whatsoever. Support is limited to the SARA-R5, LARA-R6, SARA-R422 and SARA-R41XM-02B-03 series modules.
-
Fixes in the file system API. Re-entrant versions of the file list functions, uCellFileListFirst_r(), uCellFileListNext_r() and uCellFileListLast_r(), are added. These are required for the up-coming HTTP Client API.
-
MNO profile database
Some MNO profiles can cause a cellular module to behave in ways that do not currently work with ubxlib. For instance, the Verizon Wireless (VZW) profile, number 3, causes a cellular module to return a "not allowed" error to the command AT+CGDCONT.
An "MNO profile database" is introduced in u_cell_mno_db.c/.h; we will use this to capture the specific behaviours that need special handling. The MNO profile is read when the cellular module boots, stored, and can be checked against this database later for such incompatibilities so that the ubxlib code can work with them. This is not intended to be a public API, just a way of ubxlib changing its own internal behaviour, versus MNO profile, dynamically.
-
Set local port for IP sockets
It is now possible to set the local port number that will be used when an IP socket is created. This is useful if, for instance, you need to maintain a DTLS connection across multiple IP connections; call uSockSetNextLocalPort() with the port number you wish to use before calling uSockCreate(). Once uSockCreate() has been called the local port reverts to being IP-stack-assigned once more.
WiFi 🌐
- Added WPA3 Personal configuration support for modules that support this feature.
General
-
New functionality for uDevice API
New function uDeviceGetConfig added. It can be used for convenient filling of all the uDevice settings to their defaults.
Also added a possible injection hook to the uDevice functions
This is declare weak by default and does nothing. Another source file, e.g. in a board specific context, can then override this and thereby get called whenever a device operation occurs.
-
Improvements for using ubxlib as a Zephyr module: It is now possible to just add one include statement in the application Cmake configuration in order to get full access to Ubxlib and with suitable Kconfig settings.
-
Fix for thread memory pool
-
Updates for Zephyr version 3.x
-
Log to RAM
To aid debugging of detailed real-time issues a RAM logging facility is added. This is not intended for normal use, is not included in ubxlib.h, does not form a part of the normal ubxlib code, etc.; it is only used when required during development to debug those awkward, usually platform-related, real-time issues, the ones where break-pointing won't help.
-
Device API, Port (I2C) API and GNSS fixes/API additions: uPortI2cAdopt() and set I2C address
An new API is added to the I2C port layer: uPortI2cAdopt(). This does exactly the same as uPortI2cOpen() except that it does not modify any of the underlying HW when opening the I2C port. This may be used if you are already using the I2C port for other purposes (e.g. reading from a sensor) and would like ubxlib to use it as you have already configured it. Calling uPortClose() for an "adopted" I2C port will also not touch the underlying HW.
-
A LARA-R6 module, along with another M9 module directly connected to a NINA-W1/ESP32 MCU via I2C, is now being tested on a new test instance in the test farm as instance 25: HPG Solution board.
-
Various fixes and improvements