Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion INSTALLATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ sudo pacman -S tk libspatialite

To access the serial port (`/dev/tty*`) on most Linux platforms, you will need to be a member of whichever group or "`Gid`" the `/dev/tty*` device belongs to. Failure to do this will typically result in an error `[Errno 13] could not open port /dev/ttyACM0 [Errno 13] permission denied /dev/ttyACM0`

To check and set the necessary group permissions (*substitute* `ttyACM0` *for your particular serial port*):
To check and set the necessary group permissions (*substitute your particular serial port for* `ttyACM0`):

```shell
stat /dev/ttyACM0 | grep Gid
Expand Down Expand Up @@ -148,6 +148,7 @@ source pygpsclient/bin/activate # (or .\pygpsclient\Scripts\activate on Windows)
python3 -m pip install --upgrade pygpsclient
pygpsclient
```
**NB**: It is recommended to use the form `python3 -m pip install` (*or less ambiguously `python3.*`, where `*` is the Python minor version e.g. `python3.13`*) rather than simply `pip3 install`, particularly if you have multiple Python environments on your platform.

To deactivate the virtual environment:

Expand Down
181 changes: 104 additions & 77 deletions README.md

Large diffs are not rendered by default.

24 changes: 18 additions & 6 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# PyGPSClient Release Notes

### RELEASE 1.6.4

FIXES:
1. Fix `CFG-VALSET ACK-NAK` error when configuring ZED-X20P as base station.
1. Fix `AttributeError: ... has no attribute frm_socketserver` error in Server Config panel when configuring certain devices for SVIN.

ENHANCEMENTS:
1. Improve Base Station receiver configuration handling in the NTRIP Caster/Socket Server dialog.
1. Add connected device descriptor to status bar (e.g. "u-blox ZED-F9P", "Unicore UM981S", "Septentrio mosaic-X5" or "Quectel LG290AG03"). **FYI** This is based on a series of query messages (*one for each enabled protocol*) sent approximately 3 seconds after the connection is started (*you may see 'unknown protocol' warnings in response to some of these messages; these can be ignored)*. Failing this, a generic descriptor is displayed on receipt of a message protocol unique to a particular manufacturer (*e.g. "u-blox" on receipt of a UBX message, "Unicore" on receipt of a UNI message, etc.*). Note that some (mainly older) devices may not return a meaningful descriptor, in which case "N/A" will be displayed.
1. Minor updates to serial port configuration panel (additional timeout values).
1. Mininum pynmeagps version updated to v1.1.1.

### RELEASE 1.6.3

1. Add support for Unicore UNI binary data output messages via `pyunigps>=0.1.3` and `pygnssutils>=1.1.22`.
Expand Down Expand Up @@ -106,7 +118,7 @@ FIXES:
ENHANCEMENTS:

1. As of October 2025, u-blox have discontinued their MQTT SPARTN service (*having previously discontinued their L-Band SPARTN service earlier in the year*) so this functionality has been disabled by default in PyGPSClient in this release, and will be removed altogether in a subsequent release. It can be re-enabled by manually editing the `lband_enabled_b` configuration setting.
1. Add provisional support for Quectel QGC binary message protocol (requires pyqgc>=0.1.2). Currently only Quectel LG290P / LG580P / LG680P RAW and LU600 IMU QGC message types are implemented, but this will be enhanced in future releases (contributions welcome).
1. Add provisional support for Quectel QGC binary message protocol (requires pyqgc>=0.1.2). Currently only Quectel LGSERIES / LG580P / LG680P RAW and LU600 IMU QGC message types are implemented, but this will be enhanced in future releases (contributions welcome).
1. Add additional IMU message types to IMU widget drop-down.
1. Enhance performance and look and feel of banner skyview and graphview widgets.
1. Drop active support for Python 3.9, add 3.14 (3.9 EOL as at 31 October 2025).
Expand All @@ -121,7 +133,7 @@ FIXES:

ENHANCEMENTS:

1. Add support for Quectel LC29H base station configuration in NTRIP Caster mode.
1. Add support for Quectel LCSERIES base station configuration in NTRIP Caster mode.
1. Enhance support for Quectel PAIR commands in NMEA configuration panel.
1. Minor refinements to UI on lower resolution screens.

Expand Down Expand Up @@ -156,7 +168,7 @@ ENHANCEMENTS:
On Linux platforms which do not support sqlite3 extensions out of the box, it may be possible to compile from source a suitable version of [Python](https://github.com/semuconsulting/PyGPSClient/blob/master/examples/python_compile.sh) and/or [libspatialite](https://github.com/semuconsulting/PyGPSClient/blob/master/examples/libspatialite_compile.sh).
2. BSD 3-Clause license attribution clarified in all modules.
3. Enhance elevation profile and metadata rendering in GPX track viewer. Add support for route and waypoint elements in addition to track.
4. Enhance NMEA Dynamic Configuration dialog to support additional NMEA command types, including Quectel proprietary $PAIR (Quectel LC29H/LC79H), Garmin $PGRM, Locosys %PINV (limited) and u-Blox $PUBX (requires pynmeagps>=1.0.53).
4. Enhance NMEA Dynamic Configuration dialog to support additional NMEA command types, including Quectel proprietary $PAIR (Quectel LCSERIES/LC79H), Garmin $PGRM, Locosys %PINV (limited) and u-Blox $PUBX (requires pynmeagps>=1.0.53).
5. Add support
5. Various minor improvements to file exception handling.

Expand Down Expand Up @@ -204,7 +216,7 @@ FIXES:

ENHANCEMENTS:

1. Add support for Septentrio Mosaic X5 Base Station configuration in NTRIP Caster mode (supplementing the existing u-blox ZED-F9P/X20P and Quectel LG290P options). Note that the Mosaic X5 is configured via ASCII TTY commands - to monitor the responses, set the console protocol to "TTY" (remember to set it back to "RTCM" to monitor the RTCM3 output). Note also that the input (ASCII command) UART port may be different to the output (RTCM3) port - ensure you select the appropriate port(s) when configuring the receiver and monitoring the RTCM3 output.
1. Add support for Septentrio Mosaic X5 Base Station configuration in NTRIP Caster mode (supplementing the existing u-blox ZED-F9P/X20P and Quectel LGSERIES options). Note that the Mosaic X5 is configured via ASCII TTY commands - to monitor the responses, set the console protocol to "TTY" (remember to set it back to "RTCM" to monitor the RTCM3 output). Note also that the input (ASCII command) UART port may be different to the output (RTCM3) port - ensure you select the appropriate port(s) when configuring the receiver and monitoring the RTCM3 output.
1. Add base station location update - automatically updates NTRIP CASTER Survey-in base station location from RTCM 1005/6 message.
1. Chart Plot widget streamlined to reduce memory footprint and simplify CSV cut-and-paste (double-right-click) function.
1. Minor enhancements to ubx2preset() and nmea2preset() helper functions; added \examples\convert_ubx_preset.py example.
Expand Down Expand Up @@ -238,7 +250,7 @@ FIXES:

ENHANCEMENTS:

1. Add receiver type option to NTRIP Caster mode - can now utilise either u-blox ZED-F9* or Quectel LG290P as Base Station receiver. NOTE THAT due to quirks in the LG290P firmware, setting Base Station mode with RTCM MSM 7 messages requires two successive restarts - you may see `WARNING - connection error` in the console during those restarts.
1. Add receiver type option to NTRIP Caster mode - can now utilise either u-blox ZED-F9* or Quectel LGSERIES as Base Station receiver. NOTE THAT due to quirks in the LGSERIES firmware, setting Base Station mode with RTCM MSM 7 messages requires two successive restarts - you may see `WARNING - connection error` in the console during those restarts.
1. Add new IMU Monitor widget, capable of displaying IMU orientation (roll, pitch, yaw) and status from a variety of NMEA or UBX IMU data sources (e.g. ESF-ALG, HNR-ATT, NAV-ATT, NAV-PVAT, GPFMI).
1. Add TTY Command Dialog, allowing user to enter/select ASCII TTY commands to the connected serial device. Access via menu bar Options...TTY Commands.
1. RTCM3 messages types 1002 (GPS L1 observables) & 1010 (GLONASS L1 observables) added to NTRIP Caster configuration.
Expand All @@ -265,7 +277,7 @@ ENHANCEMENTS:

### RELEASE 1.5.5

1. Add new NMEA Configuration panel, complementing and (partly) mirroring the existing UBX Configuration panel. The NMEA configuration panel supports GNSS receivers which can be configured via proprietary NMEA sentences. Currently the only supported receiver is the Quectel LG290P (or other command-compatible Quectel receivers). See [README](https://github.com/semuconsulting/PyGPSClient?tab=readme-ov-file#nmeaconfig) for details. User-defined preset NMEA commands may be added via the `nmeapresets_l` section of the PyGPSClient *.json configuration file.
1. Add new NMEA Configuration panel, complementing and (partly) mirroring the existing UBX Configuration panel. The NMEA configuration panel supports GNSS receivers which can be configured via proprietary NMEA sentences. Currently the only supported receiver is the Quectel LGSERIES (or other command-compatible Quectel receivers). See [README](https://github.com/semuconsulting/PyGPSClient?tab=readme-ov-file#nmeaconfig) for details. User-defined preset NMEA commands may be added via the `nmeapresets_l` section of the PyGPSClient *.json configuration file.
1. Two new helper functions added `ubx2preset()` and `nmea2preset()`, to assist users in converting `UBXMessage` or `NMEAMessage` objects into strings which can be copied-and-pasted into the relevant sections of the *.json configuration file (`ubxpresets_l` and `nmeapresets_l`). See [README](https://github.com/semuconsulting/PyGPSClient?tab=readme-ov-file#userdefined) for details.

### RELEASE 1.5.4
Expand Down
3 changes: 1 addition & 2 deletions examples/libspatialite_compile.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

# bash shell script to compile and install libspatialite
# (mod_spatialite.so) on Debian Linux platforms which do not
# include a suitable binary in their standard repos
# (e.g. Raspberry Pi OS).
# include a suitable binary installable in their standard repos.
#
# Remember to run chmod +x libspatialite_compile.sh to make this script executable.
#
Expand Down
5 changes: 5 additions & 0 deletions examples/pygpsclient_arch_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
# Bash shell script to install PyGPSClient on 64-bit Arch-based
# Linux environments.
#
# Arch Desktop generally includes all the necessary Python3 executables by
# default (but remember to look for the third-party ARM64/AARCH64
# distributables if you're using an ARM SBC like Raspberry Pi).
#
# Change shebang /bin/bash to /bin/zsh if running from zsh shell.
# NB: NOT for use on Windows or MacOS!
#
Expand All @@ -22,6 +26,7 @@ echo "Installed Python version is $PYVER"

echo "PyGPSClient will be installed at $HOME/pygpsclient/bin"

# this is generally all that's needed - Arch Desktop includes the latest Python3
echo "Installing dependencies..."
sudo pacman -S tk libspatialite

Expand Down
2 changes: 2 additions & 0 deletions examples/pygpsclient_macos_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# ZSH shell script to install PyGPSClient on MacOS
# environments (MacOS 13 or later running zsh shell).
#
# NB: Homebrew or Macports are NOT required.
#
# NB: Does NOT create an application launcher - use
# the MacOS Automator tool to create a bin/zsh shell app
# called PyGPSClient.app with the shell command:
Expand Down
18 changes: 12 additions & 6 deletions examples/python_compile.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
#!/bin/bash

# bash shell script to compile and install specified Python 3 version
# on Debian Linux platforms e.g. Ubuntu or Raspberry Pi OS.
# bash shell script to compile and install specified Python3/tkinter
# version on Debian Linux platforms e.g. Ubuntu or Raspberry Pi OS.
#
# Why no Arch (pacman) version? Because Arch Desktop generally includes
# the very latest Python3 executables by default - go Arch!
# (but remember to look for the third-party ARM64/AARCH64 distributables
# if you're using an ARM SBC like Raspberry Pi)
#
# Remember to run chmod +x python_compile.sh to make this script executable.
#
Expand All @@ -18,8 +23,8 @@
# exit on error
set -e

# set required Python major and minor version e.g. 3.10.10
PYVER="3.13.7"
# set required Python major and minor version e.g. 3.13.10
PYVER="3.14.3"
# NB: uncomment this line to install this version alongside existing versions
# ALTINSTALL=1

Expand Down Expand Up @@ -53,8 +58,9 @@ sudo apt install liblzma-dev || true
# liblzma-dev may be lzma-dev on some platforms
sudo apt install lzma-dev || true
sudo apt install libspatialite || true
# libspatialite may not be available as standard on some platforms
# (e.g. Rasperry PI OS) but it is relatively straightforward to
sudo apt install libsqlite3-mod-spatialite || true
# libspatialite may not be available as a binary installable on some
# platforms (e.g. older Debian) but it is relatively straightforward to
# compile from source using the libspatialite_compile.sh script
# in the /examples folder

Expand Down
Binary file modified images/app.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified images/basestation_fixed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified images/basestation_off.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified images/basestation_svin.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified images/tty_dialog.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions pygpsclient.json
Original file line number Diff line number Diff line change
Expand Up @@ -218,9 +218,9 @@
"Set Fix Rate to 1 Hz; P; QTMCFGFIXRATE; W,1000; 1; P; QTMHOT; ; 1",
"Set Fix Rate to 5 Hz; P; QTMCFGFIXRATE; W,200; 1; P; QTMHOT; ; 1",
"Set Fix Rate to 10 Hz; P; QTMCFGFIXRATE; W,100; 1; P; QTMHOT; ; 1",
"LG290P Set Base Mode Survey-In; P; QTMCFGRCVRMODE; W,2; 1; P; QTMCFGSVIN; W,1,60,3000,0.0,0.0,0.0; 1; P; QTMCFGMSGRATE; W,PQTMSVINSTATUS,1,1; 1; P; QTMSAVEPAR; ; 1; P; QTMSRR; ; 1",
"LG290P Set Base Mode Fixed; P; QTMCFGRCVRMODE; W,2; 1; P; QTMCFGSVIN; W,2,0,0,-2213540.321087019,-4577229.071167925,3838042.2419518335; 1; P; QTMSAVEPAR; ; 1; P; QTMSRR; ; 1",
"LG290P Set Normal (Rover) Mode; P; QTMCFGRCVRMODE; W,1; 1; P; QTMSAVEPAR; ; 1; P; QTMSRR; ; 1",
"LGSERIES Set Base Mode Survey-In; P; QTMCFGRCVRMODE; W,2; 1; P; QTMCFGSVIN; W,1,60,3000,0.0,0.0,0.0; 1; P; QTMCFGMSGRATE; W,PQTMSVINSTATUS,1,1; 1; P; QTMSAVEPAR; ; 1; P; QTMSRR; ; 1",
"LGSERIES Set Base Mode Fixed; P; QTMCFGRCVRMODE; W,2; 1; P; QTMCFGSVIN; W,2,0,0,-2213540.321087019,-4577229.071167925,3838042.2419518335; 1; P; QTMSAVEPAR; ; 1; P; QTMSRR; ; 1",
"LGSERIES Set Normal (Rover) Mode; P; QTMCFGRCVRMODE; W,1; 1; P; QTMSAVEPAR; ; 1; P; QTMSRR; ; 1",
"Enable SVIN Status message; P; QTMCFGMSGRATE; W,PQTMSVINSTATUS,1,1; 1",
"Disable SVIN Status message; P; QTMCFGMSGRATE; W,PQTMSVINSTATUS,0,1; 1",
"Set current UART baudrate to 460800; P; QTMCFGUART; W,460800; 1",
Expand Down
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ dependencies = [
"requests>=2.28.0",
"Pillow>=9.0.0",
"pygnssutils>=1.1.22",
"pyunigps>=0.1.4",
"pyunigps>=0.2.0",
"pynmeagps>=1.1.1",
]

[project.scripts]
Expand Down
2 changes: 1 addition & 1 deletion src/pygpsclient/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@
:license: BSD 3-Clause
"""

__version__ = "1.6.3"
__version__ = "1.6.4"
Loading