Skip to content

Commit e5ee626

Browse files
authored
Merge pull request #230 from semuconsulting/RC-1.5.23
Rc 1.5.23
2 parents b6426a8 + 1fbf284 commit e5ee626

32 files changed

+759
-588
lines changed

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"python.terminal.activateEnvironment": true,
1010
"editor.formatOnSave": true,
1111
"modulename": "pygpsclient", // "${workspaceFolderBasename}",
12-
"distname": "${workspaceFolderBasename}",
12+
"distname": "pygpsclient",
1313
"venv": "${userHome}/pygpsclient",
1414
"python.testing.pytestArgs": [
1515
"tests"

.vscode/tasks.json

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
},
2626
{
2727
"label": "Create Venv",
28-
"type": "process",
28+
"type": "shell",
2929
"command": "${config:python.systemPath}",
3030
"args": [
3131
"-m",
@@ -38,9 +38,18 @@
3838
"Delete Venv",
3939
],
4040
},
41+
{
42+
"label": "Activate Venv",
43+
"type": "shell",
44+
"command": "source",
45+
"args": [
46+
"~/pygpsclient/bin/activate",
47+
],
48+
"problemMatcher": [],
49+
},
4150
{
4251
"label": "Install Deploy Dependencies",
43-
"type": "process",
52+
"type": "shell",
4453
"command": "${config:python.defaultInterpreterPath}",
4554
"args": [
4655
"-m",
@@ -54,7 +63,7 @@
5463
},
5564
{
5665
"label": "Install Optional Dependencies",
57-
"type": "process",
66+
"type": "shell",
5867
"command": "${config:python.defaultInterpreterPath}",
5968
"args": [
6069
"-m",
@@ -96,7 +105,7 @@
96105
},
97106
{
98107
"label": "Sort Imports",
99-
"type": "process",
108+
"type": "shell",
100109
"command": "${config:python.defaultInterpreterPath}",
101110
"args": [
102111
"-m",
@@ -109,7 +118,7 @@
109118
},
110119
{
111120
"label": "Format",
112-
"type": "process",
121+
"type": "shell",
113122
"command": "${config:python.defaultInterpreterPath}",
114123
"args": [
115124
"-m",
@@ -143,7 +152,7 @@
143152
},
144153
{
145154
"label": "Build",
146-
"type": "process",
155+
"type": "shell",
147156
"command": "${config:python.defaultInterpreterPath}",
148157
"args": [
149158
"-m",
@@ -168,23 +177,32 @@
168177
}
169178
},
170179
{
171-
"label": "Install", // into venv
172-
"type": "process",
180+
"label": "Install", // into Virtual Environment
181+
"type": "shell",
173182
"command": "${config:python.defaultInterpreterPath}",
174183
"args": [
175184
"-m",
176185
"pip",
177186
"install",
178-
"--upgrade",
179187
"--force-reinstall",
180-
"--find-links=${workspaceFolder}/dist",
181-
"${workspaceFolderBasename}",
188+
// wildcard only works on Posix platforms
189+
"${workspaceFolder}/dist/pygpsclient-*-py3-none-any.whl",
182190
],
191+
"windows": {
192+
"command": "${config:python.defaultInterpreterPath}",
193+
"args": [
194+
"-m",
195+
"pip",
196+
"install",
197+
"--force-reinstall",
198+
"${workspaceFolder}/dist/pygpsclient-1.5.22-py3-none-any.whl",
199+
]
200+
},
183201
"problemMatcher": [],
184202
},
185203
{
186204
"label": "Test",
187-
"type": "process",
205+
"type": "shell",
188206
"command": "${config:python.defaultInterpreterPath}",
189207
"args": [
190208
"-m",
@@ -193,10 +211,12 @@
193211
"problemMatcher": [],
194212
"dependsOrder": "sequence",
195213
"dependsOn": [
214+
"Activate Venv",
196215
"Build",
197216
"Install", // have to install before running pylint
198217
"Pylint",
199218
"Security",
219+
"Sphinx HTML",
200220
],
201221
"group": {
202222
"kind": "test",
@@ -205,7 +225,7 @@
205225
},
206226
{
207227
"label": "Sphinx",
208-
"type": "process",
228+
"type": "shell",
209229
"command": "sphinx-apidoc",
210230
"args": [
211231
"--ext-autodoc",
@@ -220,7 +240,7 @@
220240
},
221241
{
222242
"label": "Sphinx HTML",
223-
"type": "process",
243+
"type": "shell",
224244
"command": "/usr/bin/make",
225245
"windows": {
226246
"command": "${workspaceFolder}/docs/make.bat"
@@ -239,7 +259,7 @@
239259
},
240260
{
241261
"label": "Sphinx Deploy", // needs AWS S3 credentials
242-
"type": "process",
262+
"type": "shell",
243263
"command": "aws",
244264
"args": [
245265
"s3",
@@ -256,7 +276,7 @@
256276
},
257277
{
258278
"label": "Run Installed Version",
259-
"type": "process",
279+
"type": "shell",
260280
"command": "${config:python.defaultInterpreterPath}",
261281
"args": [
262282
"-m",

README.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
[UBX Configuration](#ubxconfig) |
88
[NMEA Configuration](#nmeaconfig) |
99
[TTY Commands](#ttycommands) |
10+
[Load/Save/Record Commands](#recorder) |
1011
[NTRIP Client](#ntripconfig) |
1112
[SPARTN Client](#spartnconfig) |
1213
[Socket Server / NTRIP Caster](#socketserver) |
@@ -49,6 +50,7 @@ This is an independent project and we have no affiliation whatsoever with any GN
4950
![Status](https://img.shields.io/pypi/status/PyGPSClient)
5051
![Release](https://img.shields.io/github/v/release/semuconsulting/PyGPSClient)
5152
![Build](https://img.shields.io/github/actions/workflow/status/semuconsulting/PyGPSClient/main.yml?branch=master)
53+
[![Deploy](https://github.com/semuconsulting/pygpsclient/actions/workflows/deploy.yml/badge.svg)](https://github.com/semuconsulting/pygpsclient/actions/workflows/deploy.yml)
5254
![Release Date](https://img.shields.io/github/release-date/semuconsulting/PyGPSClient)
5355
![Last Commit](https://img.shields.io/github/last-commit/semuconsulting/PyGPSClient)
5456
![Contributors](https://img.shields.io/github/contributors/semuconsulting/PyGPSClient.svg)
@@ -104,7 +106,7 @@ For more comprehensive installation instructions, please refer to [INSTALLATION.
104106
1. To connect to a TCP or UDP socket, enter the server URL and port, select the protocol (defaults to TCP) and click
105107
![connect socket icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/ethernet-1-24.png?raw=true). For encrypted TLS connections, tick the 'TLS' checkbox. Tick the 'Self Sign' checkbox to accommodate self-signed TLS certification (*typically for test or demonstration services*).
106108
1. To stream from a previously-saved <a name="filestream">binary datalog file</a>, click
107-
![connect-file icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/binary-1-24.png?raw=true) and select the file type (`*.log, *.ubx, *.*`) and path. PyGPSClient datalog files will be named e.g. `pygpsdata-20220427114802.log`, but any binary dump of an GNSS receiver output is acceptable, including `*.ubx` files produced by u-center.
109+
![connect-file icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/binary-1-24.png?raw=true) and select the file type (`*.log, *.ubx, *.*`) and path. PyGPSClient datalog files will be named e.g. `pygpsdata-20220427114802.log`, but any binary dump of an GNSS receiver output is acceptable, including `*.ubx` files produced by u-center. The 'File Delay' spinbox sets the delay in milliseconds between individual file reads, acting as a throttle on file readback.
108110
1. To disconnect from the data stream, click
109111
![disconnect icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-media-control-50-24.png?raw=true).
110112
1. To exit the application, click
@@ -118,7 +120,7 @@ For more comprehensive installation instructions, please refer to [INSTALLATION.
118120
1. File Delay - Select delay in milliseconds between individual reads when streaming from binary file (default 20 milliseconds).
119121
1. Tags - Enable color tags in console (see Console Widget below).
120122
1. Position Format and Units - Change the displayed position (D.DD / D.M.S / D.M.MM / ECEF) and unit (metric/imperial) formats.
121-
1. Include C/N0 = 0 - Include or exclude satellites where carrier to noise ratio (C/N0) = 0.
123+
1. Include C/No = 0 - Include or exclude satellites where carrier to noise ratio (C/No) = 0.
122124
1. DataLogging - Turn Data logging in the selected format (Binary, Parsed, Hex Tabular, Hex String, Parsed+Hex Tabular) on or off. On first selection, you will be prompted to select the directory into which timestamped log files are saved. Log files are cycled when a maximum size is reached (default is 10 MB, manually configurable via `logsize_n` setting).
123125
1. GPX Track - Turn track recording (in GPX format) on or off. On first selection, you will be prompted to select the directory into which timestamped GPX track files are saved.
124126
1. Database - Turn spatialite database recording (*where available*) on or off. On first selection, you will be prompted to select the directory into which the `pygpsclient.sqlite` database is saved. Note that, when first created, the database's spatial metadata will take a few seconds to initialise (*up to a minute on Raspberry Pi and similar SBC*). **NB** This facility is dependent on your Python environment supporting the requisite [sqlite3 `mod_spatialite` extension](https://www.gaia-gis.it/fossil/libspatialite/index) - see [INSTALLATION.md](https://github.com/semuconsulting/PyGPSClient/blob/master/INSTALLATION.md#prereqs) for further details. If not supported, the option will be greyed out. Check the Menu..Help..About dialog for an indication of the current spatialite support status.
@@ -160,7 +162,7 @@ For more comprehensive installation instructions, please refer to [INSTALLATION.
160162
|![banner widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/banner_widget.png?raw=true)| Expandable banner showing key navigation status information based on messages received from receiver. To expand or collapse the banner or serial port configuration widgets, click the ![expand icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-arrow-80-16.png?raw=true)/![expand icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-triangle-1-16.png?raw=true) buttons. **NB**: some fields (e.g. hdop/vdop, hacc/vacc) are only available from proprietary NMEA or UBX messages and may not be output by default. The minimum messages required to populate all available fields are: NMEA: GGA, GSA, GSV, RMC, UBX00 (proprietary); UBX: NAV-DOP, NAV-PVT, NAV-SAT |
161163
|![console widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/console_widget.png?raw=true)| Configurable serial console widget showing incoming GNSS data streams in either parsed, binary or tabular hexadecimal formats. Double-right-click to copy contents of console to the clipboard. The scroll behaviour and number of lines retained in the console can be configured via the settings panel. Supports user-configurable color tagging of selected strings for easy identification. Color tags are loaded from the `"colortag_b":` value (`0` = disable, `1` = enable) and `"colortags_l":` list (`[string, color]` pairs) in your json configuration file (see example provided). If color is set to "HALT", streaming will halt on any match and a warning displayed. NB: color tagging does impose a small performance overhead - turning it off will improve console response times at very high transaction rates.|
162164
|![skyview widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/skyview_widget.png?raw=true)| Skyview widget showing current satellite visibility and position (elevation / azimuth). Satellite icon borders are colour-coded to distinguish between different GNSS constellations. For consistency between NMEA and UBX data sources, will display GLONASS NMEA SVID (65-96) rather than slot (1-24). |
163-
|![levelsview widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/graphview_widget.png?raw=true)| Levels view widget showing current satellite carrier-to-noise (CNo) levels for each GNSS constellation. Double-click to toggle legend. |
165+
|![levelsview widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/graphview_widget.png?raw=true)| Levels view widget showing current satellite carrier-to-noise (C/No) levels for each GNSS constellation. Double-click to toggle legend. |
164166
|![world map](https://github.com/semuconsulting/PyGPSClient/blob/master/images/staticmap.png?raw=true)| Map widget with various modes of display - select from "map" / "sat" (online) or "world" / "custom" (offline). Select zoom level 1 - 20. Double-click the zoom level label to reset the zoom to 10. Double-right-click the zoom label to maximise zoom to 20. Tick Track to show track (track will only be recorded while this box is checked). Double-Right-click will clear the map. Map Type = 'world': a static offline Mercator world map showing current global location.
165167
|![online map](https://github.com/semuconsulting/PyGPSClient/blob/master/images/webmap_widget.png?raw=true)| Map Type = 'map', 'sat' or 'hyb' (hybrid): Dynamic, online web map or satellite image via MapQuest API (*requires an Internet connection and free [Mapquest API Key](#mapquestapi)*). By default, the web map will automatically refresh every 60 seconds (*indicated by a small timer icon at the top left*). The default refresh rate can be amended by changing the `"mapupdateinterval_n":` value in your json configuration file, but **NB** the facility is not intended to be used for real-time navigation. Double-click anywhere in the map to immediately refresh. |
166168
|![offline map](https://github.com/semuconsulting/PyGPSClient/blob/master/images/custommap.png?raw=true)| Map Type = 'custom': One or more user-defined offline geo-referenced map images can be imported using the Menu..Options..Import Custom Map facility, or by manually setting the `usermaps_l` field in the json configuration file. The `usermaps_l` setting represents a list of map paths and extents in the format ["path to map image", [minlat, minlon, maxlat, maxlon]] - see [example configuration file](https://github.com/semuconsulting/PyGPSClient/blob/master/pygpsclient.json#L281). Map images must be a [supported format](https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html) and use a standard WGS84 Web Mercator projection e.g. EPSG:4326. PyGPSClient will automatically select the first map whose extents encompass the current location, based on the order in which the maps appear in `usermaps_l`. NB: The minimum and maximum viable 'zoom' levels depend on the resolution and extents of the imported image and the user's display - if the zoom bounds exceed the image extents, the Zoom spinbox will be highlighted. Offline and online zoom levels will not necessarily correspond. |
@@ -193,7 +195,6 @@ For more comprehensive installation instructions, please refer to [INSTALLATION.
193195
The UBX Configuration Dialog currently provides the following UBX configuration panels:
194196

195197
1. Version panel shows current device hardware/firmware versions (*via MON-VER and MON-HW polls*).
196-
1. CFG Configuration Load/Save/Record facility. This allows users to record ![record icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-record-24.png?raw=true) a sequence of UBX CFG configuration commands, and to save ![save icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-save-14-24.png?raw=true) this recording to a file (as binary CFG-* messages). Saved files can be reloaded ![load icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-folder-18-24.png?raw=true) and the configuration commands replayed ![play icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-arrow-12-24.png?raw=true). This provides a means to easily reproduce a given sequence of configuration commands, or copy a saved configuration between compatible devices. The Configuration Load/Save/Record facility can accept configuration files in either binary UBX format (\*.ubx) or u-center text format (\*.txt). Files saved using the [ubxsave](#ubxsave) CLI utility (*installed via the `pygnssutils` library*) can also be reloaded and replayed. **Tip:** The contents of a binary config file can be reviewed using PyGPSClient's [file streaming facility](#filestream), *BUT* remember to set the `Msg Mode` in the Settings panel to `SET` rather than the default `GET` ![msgmode capture](https://github.com/semuconsulting/PyGPSClient/blob/master/images/msgmode.png?raw=true).
197198
1. Protocol Configuration panel (CFG-PRT) sets baud rate and inbound/outbound protocols across all available ports (*legacy protocols only*).
198199
1. Solution Rate panel (CFG-RATE) sets navigation solution interval in ms (e.g. 1000 = 1/second) and measurement ratio (ratio between the number of measurements and the number of navigation solutions, e.g. 5 = five measurements per navigation solution) (*legacy protocols only*).
199200
1. For each of the panels above, clicking anywhere in the panel background will refresh the displayed information with the current configuration.
@@ -251,6 +252,13 @@ The following example illustrates a series of ASCII configuration commands being
251252

252253
![ttyconsole screenshot](https://github.com/semuconsulting/PyGPSClient/blob/master/images/tty_console.png?raw=true)
253254

255+
---
256+
## <a name="recorder">Configuration Command Load/Save/Record Facility</a>
257+
258+
![recorder screenshot](https://github.com/semuconsulting/PyGPSClient/blob/master/images/recorder_dialog.png?raw=true)
259+
260+
This allows users to record ![record icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-record-24.png?raw=true) a sequence of UBX, NMEA or TTY configuration commands as they are sent to a device, and to save ![save icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-save-14-24.png?raw=true) this recording to a file. Saved files can be reloaded ![load icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-folder-18-24.png?raw=true) and the configuration commands replayed ![play icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-arrow-12-24.png?raw=true). This provides a means to easily reproduce a given sequence of configuration commands, or copy a saved configuration between compatible devices. The Configuration Load facility can accept configuration files in either UBX/NMEA binary (\*.bin), TTY (\*.tty) or u-center UBX text format (\*.txt). Files saved using the [ubxsave](#ubxsave) CLI utility (*installed via the `pygnssutils` library*) can also be reloaded and replayed. **Tip:** The contents of a binary (\*.bin) config file can be reviewed using PyGPSClient's [file streaming facility](#filestream), *BUT* remember to set the `Msg Mode` in the Settings panel to `SET` rather than the default `GET` ![msgmode capture](https://github.com/semuconsulting/PyGPSClient/blob/master/images/msgmode.png?raw=true).
261+
254262
---
255263
## <a name="ntripconfig">NTRIP Client Facilities</a>
256264

@@ -319,7 +327,7 @@ By default, the server/caster binds to the host address '0.0.0.0' (IPv4) or '::'
319327
**SOCKET SERVER MODE**
320328

321329
1. Select SOCKET SERVER mode and (if necessary) enter the host IP address and port.
322-
1. Select 'TLS' to enable an encrypted TLS (HTTPS) connection.
330+
1. Select 'TLS' to enable an encrypted TLS connection.
323331
1. Check the Socket Server/NTRIP Caster checkbox to activate the server.
324332
1. To stop the server, uncheck the checkbox.
325333

RELEASE_NOTES.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# PyGPSClient Release Notes
22

3+
### RELEASE 1.5.23
4+
5+
FIXES:
6+
7+
1. Fix PUBX003 file input parsing error [#229](https://github.com/semuconsulting/PyGPSClient/issues/229)
8+
9+
ENHANCEMENTS:
10+
11+
1. Move Configuration Command Load/Save/Record facility from UBX Configuration Panel to separate dialog, selectable from Options menu. Can now be used to record and replay UBX, NMEA and TTY configuration commands.
12+
313
### RELEASE 1.5.22
414

515
FIXES:

0 commit comments

Comments
 (0)