CHANGES:
- Sphinx documentation and docstrings enhanced to include global constants and decodes.
socket_stream.SocketStream
class renamed tosocket_wrapper.SocketWrapper
class for clarity.- Drop active support for Python 3.8 - now End of Life as at October 2024.
ENHANCEMENTS:
- Internal performance enhancements - UBXReader.parse() now 30% faster.
- Internal enhancements to logging and exception handling.
- Enhance test coverage
ENHANCEMENTS:
PRN
,CELLPRN
andCELLSIG
attributes added to satellite (NSAT) and cell (NCELL) groups within parsed RTCM3 MSM payloads viaSPARTNMessage._getsatcellmaps()
function, replacing previoussat2prn()
andcell2prn()
helper functionality.labelmsm
keyword argument signifies either RINEX (1) or Frequency Band (2) signal format for CELLSIG attribute.
ENHANCEMENTS
- Add
parse_msm
helper method to parse RTCM3 MSM message type into series of iterable data arrays. - Add
parse_4076_201
helper method to parse RTCM3 4076_201 SSR message types into series of iterable data arrays. - Internal streamlining of conditional group parsing & updated docstrings - no functional changes.
ENHANCEMENTS
- Minor internal streamlining of nested group parsing - no functional changes.
FIXES:
- Fix IGM05/06 message parsing (e.g. 4076_025, 4076_066, etc.).
ENHANCEMENTS:
- Add proprietary IGS SSR 4076 messages, as defined in https://files.igs.org/pub/data/format/igs_ssr_v1.pdf. NB not fully tested as available NTRIP sources only cover a subset of the 4076 subtypes defined.
CHANGES:
- PRN SIG mapping streamlined -
id2prnsigmap()
helper method replaced by dictionaryPRNSIGMAP
.
CHANGES:
- MSM GNSSEpoch field now parsed into appropriate datafield(s) e.g. GLONASS GNSSEpoch = {"DF416": "GLONASS Day Of Week", "DF034": "GLONASS Epoch Time (tk)"}.
- MSM Extended Satellite Information field parsed into appropriate datafield e.g. DF419 for GLONASS, ExtSatInfo for other GNSS.
CHANGES:
- Minor internal streamlining of RTCM 1230 message processing.
ENHANCEMENTS:
- Enhance MSM signal attribute labelling to support either frequency band (e.g. "L1") or signal RINEX code (e.g. "1C"). The
labelmsm
keyword argument is now an integer rather than a boolean, with values 0 = no label, 1 = label with signal RINEX code (the existing default behaviour), 2 = label with frequency band
FIXES:
- Amend rounding factor to improve accuracy - Fixes #40. Thanks to @alainmuls for issue report.
CHANGES:
- Update constructor arguments and docstrings to clarify API (no functional changes) - thanks to @zakkie for contribution.
CHANGES:
- Deprecated
RTCMReader.iterate()
method removed - use the standard iterator instead e.g.rtr = RTCMReader(**wkargs): for (raw,parse) in ubr: ...
, passing anyquitonerror
orerrorhandler
kwargs to the RTCMReader constructor.
FIXES:
- Fix incorrect DF454 datafield length - thanks to @k-stf for contribution. Fixes #37
CHANGES:
- Remove Python 3.7 from workflows.
FIXES:
- Fixes KeyError when processing unknown proprietary message types #33 - thanks to @wtc-rsat for issue report.
FIXES:
- Fix to MSM signal label mapping #27 - thanks to @jcmb for issue report.
- Fix DF090 scaling factor #30 - thanks to @augustomazzoni for issue report.
FIXES:
- Fix to MSM message payload #21 - thanks to @jcmb for issue report.
ENHANCEMENTS:
- Internal bitfield parsing streamlined - almost twice as fast as previously.
- Exception handling enhanced.
FIXES:
- Fix to 1230 message payload - will now correctly label DF423, DF424, DF425 & DF426 data fields.
CHANGES:
__str__
method enhanced to escape all byte values for clarity e.g. will now return b'\x61\x62\x63' rather than b'abc'RTCMReader.iterate()
method deprecated - use the standard iterator instead e.g.rtr = RTCMReader(**wkargs): for (raw,parse) in ubr: ...
, passing anyquitonerror
orerrorhandler
kwargs to the RTCMReader constructor.
FIXES:
- Fix payload definition for 1033 message type.
FIXES:
- Fix payload definition for DF430 in message type 1044. Thanks to @Ralphccs for contribution.
- Fix typo in IRNSS_PRN_MAP table definition.
CHANGES:
- internal changes to GitHub actions workflow for Node.js 16 compatibility.
ENHANCEMENTS:
- Add support for INRSS MSM message types 1131-1137.
FIXES:
- Message payload for 1023 and 1024 corrected to include correct x16 grouping for residuals - thanks to @jiargei for contribution.
CHANGES:
- Marked to v1.0.0.
- shields.io build status badge URL updated.
No functional changes
CHANGES:
- Logging removed - Fixes #12.
CHANGES:
- Setup status changed to Production/Stable.
pyserial
dependency removed.
FIXES:
cell2prn
routine inrtcmhelpers.py
corrected for 1117 and 1127 MSM message types.
ENHANCEMENTS:
- New optional keyword argument
labelmsm
added toread()
andparse()
methods. Defaults toTrue
. When True, attributes within MSM NSAT and NCELL repeating groups are labelled with their corresponding satellite PRN and signal ID when the__str__()
(print()
) method is invoked - e.g.DF405_10(014,2C)
signifies that the the 10thDF405
attribute in the group refers to satellite PRN 014 and signal ID 2C (in RINEX notation). - NB this only affects the string (print) representation of the RTCMMessage - the underlying payload and attribute names are unchanged.
FIXES:
- MSM group name definitions updated (was preventing some MSM attributes from rendering). All MSM message types (1077, 1127, etc.) should now render properly.
ENHANCEMENTS:
- Add helper method
cell2prn
and associated lookup tables to map MSM cells (DF405_01, DF405_02, etc.) to their corresponding satellite PRNs and signal IDs.
ENHANCEMENTS:
- Add capability to read from TCP/UDP socket as well as serial stream. Utilises a SocketStream utility class to allow sockets to be read using standard stream-like read(bytes) and readline() methods.
CHANGES:
- Remove support for Python 3.6, now end of life (should still work find on 3.6 but no longer actively tested on this version).
FIXES:
- Add CRC validation to RTCMReader.parse() method.
FIXES:
- Fixed occasional parse error in some 1127 (MSM7) messages (some NTRIP casters appear to send truncated 1127 messages in certain circumstances).
ENHANCEMENTS:
- Additional Ephemerides message types added - 1041, 1042, 1044, 1045, 1046.
pyrtcm
should now support the full range of non-proprietary message types documented in RTCM 10403.3 (aka v3.3) with Amendment 2 - 2021-SC104-1217. - Minor enhancements to data field and message type descriptions.
ntripclient.py
example enhanced and simplified.
FIXES:
- Fixed error in RTCMReader.parse_buffer() which caused IndexError in certain circumstances. Apologies, previous fix was inadequate.
FIXES:
- Fixed error in RTCMReader.parse_buffer() which caused IndexError in certain circumstances.
CHANGES:
- Added
parse_buffer()
static method toRTCMReader
to parse an individual RTCM3 message from a buffer containing whole or partial RTCM3 messages, and return any remaining buffer. Can be used to parse the output from an NTRIP server HTTP GET response, for example. Thanks to @jakepoz and @foxittt for suggestion & inspiration. - Add simple NTRIP client example
ntripclient.py
which uses the new method above. - Development status updated to beta
CHANGES:
- Scaling now applied by default (
scaling=True
)
CHANGES:
- RTCMMessage constructor uses keyword argument for payload for consistency with other SEMU GNSS libraries, i.e.:
msg = RTCMMessage(payload=b">\xd0\x00\x03\x8aX\xd9I<\x87/4\x10\x9d\x07\xd6\xafH ")
rather than:
msg = RTCMMessage(b">\xd0\x00\x03\x8aX\xd9I<\x87/4\x10\x9d\x07\xd6\xafH ")
scaling
boolean keyword argument added toRTCMReader
andRTCMMessage
constructors andRTCMReader.parse()
method to turn attribute scaling on or off. Defaults to False (no scaling) during current alpha testing (refer to Sphinx API documentation for usage); will default to True in final version once the correct scaling factors have been verified (the RTCM 10403.n standard itself does not appear to state the applied scaling factors explicitly, but only indirectly via the 'resolution' parameter).
FIXES:
- Fix several grouped payload definitions for 1001-1004, 1009-1012, 1015-1017, 1021-1022, 1037-1039.
FIXES:
- Fix typo in payload definitions containing DF149.
FIXES:
- Fix 1013 message payload definition.
- Fix nested group handling for messages 1059 & 1065.
- Additional message types added (message types 1020 - 1068).
- MSM (Multiple Signal Messages) message definitions & handling added (message types 1071 - 1127).
- Initial Alpha release. Core parsing functionality is reasonably solid, but only a limited number of message types are currently implemented and tested. In theory, missing types simply require appropriate definitions added to the
RTCM_PAYLOADS_GET
dictionary inrtcmtypes_get.py
(** subject to further testing **). - In the meantime,
pyrtcm2
will return<RTCM(nnnn, DF002=nnnn, status=Not_Yet_Implemented)>
for any RTCM messages types not yet defined.
- Initial release