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
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ Streaming terminated, 93 messages processed with 0 errors.

### <a name="gnssstreamerservice">Installing gnssstreamer as a systemd service on Linux</a>

This example should work for most Linux distributions running `systemd` and `python3>=3.8`, including Raspberry Pi OS (*substitute `dnf` for `apt` as necessary*).
This example should work for most Linux distributions running `systemd` and `python3>=3.10`, including Raspberry Pi OS (*substitute `dnf` or `pacman` for `apt` as necessary*).

The example `gnssstreamer.conf` file will set up `gnssstreamer` as a multi-client TCP socket server accessible on `hostip:50012` (*check TCP port 50012 is allowed through any active firewall*).

Expand Down Expand Up @@ -499,11 +499,11 @@ class pygnssutils.rinex_conv.RinexConvertor(app, rinex_version, rinex_type, gnss

A command line utility and Python class `RinexConverter` to convert binary GNSS data logs to RINEX text file format.

**NB: RINEX conversion is an experimental work in progress (*contributions and feedback welcome*). The current ALPHA release implements the following functionality:**
**NB: RINEX conversion is an experimental work in progress (*contributions and feedback welcome*). The current release implements the following functionality:**

1. RINEX versions 3.05 and 4.02.
1. Convert binary UBX RXM-RAW or RXM-RAWX (raw observation) data from u-blox receivers (e.g. ZED-F9P) to RINEX Observation file format.
1. Convert binary RXM-SFRBX (navigation subframe) data from u-blox receivers to RINEX Navigation file format. **Currently supports GPS LNAV/CNAV, GAL FNAV/INAV, BDS D1/D2 & GLO L1OF**, but the underlying `RinexConverterNavigation` class will be enhanced in future releases.
1. Convert binary RXM-SFRBX (navigation subframe) data from u-blox receivers to RINEX Navigation file format.
1. Convert RTCM3 Ephemerides messages (1019, 1020, 1041-1046) from any source (including NTRIP caster or RTK base station receiver) to RINEX Navigation file format.
1. Convert NMEA MWD (wind speed and direction) and XDR (temperature and pressure) sensor data to RINEX Meteorology file format.

Expand Down
5 changes: 5 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# pygnssutils

### RELEASE 1.2.5

1. Further enhancements and bug fixes to RINEX conversion routines.
1. Add support for SBAS L1CA, QZSS LNAV/CNAV, IRNSS (NAVIC) LNAV.

### RELEASE 1.2.4

1. Further enhancements and bug fixes to RINEX conversion routines.
Expand Down
96 changes: 64 additions & 32 deletions docs/pygnssutils.rst
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,70 @@ pygnssutils.rawnav module
:undoc-members:
:show-inheritance:

pygnssutils.rawnav\_reader module
---------------------------------

.. automodule:: pygnssutils.rawnav_reader
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rawnav\_subframes\_bds module
-----------------------------------------

.. automodule:: pygnssutils.rawnav_subframes_bds
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rawnav\_subframes\_gal module
-----------------------------------------

.. automodule:: pygnssutils.rawnav_subframes_gal
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rawnav\_subframes\_glo module
-----------------------------------------

.. automodule:: pygnssutils.rawnav_subframes_glo
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rawnav\_subframes\_gps module
-----------------------------------------

.. automodule:: pygnssutils.rawnav_subframes_gps
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rawnav\_subframes\_irn module
-----------------------------------------

.. automodule:: pygnssutils.rawnav_subframes_irn
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rawnav\_subframes\_qzs module
-----------------------------------------

.. automodule:: pygnssutils.rawnav_subframes_qzs
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rawnav\_subframes\_sba module
-----------------------------------------

.. automodule:: pygnssutils.rawnav_subframes_sba
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rinex\_conv module
------------------------------

Expand Down Expand Up @@ -172,38 +236,6 @@ pygnssutils.rinex\_helpers module
:undoc-members:
:show-inheritance:

pygnssutils.rinex\_subframes\_bds module
----------------------------------------

.. automodule:: pygnssutils.rinex_subframes_bds
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rinex\_subframes\_gal module
----------------------------------------

.. automodule:: pygnssutils.rinex_subframes_gal
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rinex\_subframes\_glo module
----------------------------------------

.. automodule:: pygnssutils.rinex_subframes_glo
:members:
:undoc-members:
:show-inheritance:

pygnssutils.rinex\_subframes\_gps module
----------------------------------------

.. automodule:: pygnssutils.rinex_subframes_gps
:members:
:undoc-members:
:show-inheritance:

pygnssutils.socket\_server module
---------------------------------

Expand Down
31 changes: 21 additions & 10 deletions examples/process_rxmsfrbx_frames.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,20 @@
# pylint: disable = invalid-name

from pygnssutils import GNSSReader
from pygnssutils.rawnav import RawNav, RawNavReader
from pygnssutils.rinex_globals import LNAV, CNAV, FNAV, L1OF, INAV, D1, D2, START, TARGET
from pygnssutils.rinex_subframes_gps import GPS_SUBFRAMEACQ_MAP
from pygnssutils.rinex_subframes_gal import GAL_SUBFRAMEACQ_MAP
from pygnssutils.rinex_subframes_bds import BDS_SUBFRAMEACQ_MAP
from pygnssutils.rinex_subframes_glo import GLO_SUBFRAMEACQ_MAP
from pygnssutils.rawnav import RawNav
from pygnssutils.rawnav_reader import RawNavReader
from pygnssutils.rinex_globals import L1CA, LNAV, CNAV, FNAV, L1OF, INAV, D1, D2, START, TARGET
from pygnssutils.rawnav_subframes_gps import GPS_SUBFRAMEACQ_MAP
from pygnssutils.rawnav_subframes_gal import GAL_SUBFRAMEACQ_MAP
from pygnssutils.rawnav_subframes_bds import BDS_SUBFRAMEACQ_MAP
from pygnssutils.rawnav_subframes_glo import GLO_SUBFRAMEACQ_MAP
from pygnssutils.rawnav_subframes_sba import SBA_SUBFRAMEACQ_MAP
from pygnssutils.rawnav_subframes_qzs import QZS_SUBFRAMEACQ_MAP
from pygnssutils.rawnav_subframes_irn import IRN_SUBFRAMEACQ_MAP

# INFILE = "pygpsdata-rxmsfrbx.log"
INFILE = "/Users/steve/Downloads/pygpsdata-20260602101842.log"
# INFILE = "/Users/steve/Downloads/pygpsdata-20260602101842.log"
INFILE = "/Users/steve/Downloads/pygpsdata-20260611094239.ubx"

gps = 0
navframes = {}
Expand All @@ -35,7 +40,12 @@
# sfrmap = GAL_SUBFRAMEACQ_MAP[INAV] # subframe payload definitions
# sfrmap = BDS_SUBFRAMEACQ_MAP[D1] # subframe payload definitions
# sfrmap = BDS_SUBFRAMEACQ_MAP[D2] # subframe payload definitions
sfrmap = GLO_SUBFRAMEACQ_MAP[L1OF] # subframe payload definitions
# sfrmap = GLO_SUBFRAMEACQ_MAP[L1OF] # subframe payload definitions
sfrmap = SBA_SUBFRAMEACQ_MAP[L1CA] # subframe payload definitions
# sfrmap = QZS_SUBFRAMEACQ_MAP[LNAV] # subframe payload definitions
# sfrmap = QZS_SUBFRAMEACQ_MAP[CNAV] # subframe payload definitions
# sfrmap = QZS_SUBFRAMEACQ_MAP[CNV2] # subframe payload definitions
# sfrmap = IRN_SUBFRAMEACQ_MAP[L1CA] # subframe payload definitions
subframes = {}

with open(INFILE, "rb") as stream:
Expand All @@ -46,13 +56,14 @@
continue
if parsed.identity == "RXM-SFRBX":
rxm += 1
#if parsed.gnssId == 0 and parsed.sigId in (0,): # GPS LNAV:
# if parsed.gnssId == 0 and parsed.sigId in (0,): # GPS LNAV:
# if parsed.gnssId == 0 and parsed.sigId in (3,4,6,7,): # GPS CNAV:
# if parsed.gnssId == 2 and parsed.sigId in (3,): # GAL FNAV:
# if parsed.gnssId == 2 and parsed.sigId in (1,5): # GAL INAV:
# if parsed.gnssId == 3 and parsed.sigId in (0,2,4,): # BDS D1:
# if parsed.gnssId == 3 and parsed.sigId in (1,3,10,): # BDS D2:
if parsed.gnssId == 6 and parsed.sigId in (0,): # GAL L1OF:
# if parsed.gnssId == 6 and parsed.sigId in (0,): # GLO L1OF:
if parsed.gnssId == 1 and parsed.sigId in (0,): # SBA L1CA:
gps += 1
# extract the subframe from the RXM-SFRBX message
sfrdata = rnr.process_rxm_sfrbx(parsed)
Expand Down
2 changes: 1 addition & 1 deletion src/pygnssutils/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@
:license: BSD 3-Clause
"""

__version__ = "1.2.4"
__version__ = "1.2.5"
Loading