Releases: mobilinkd/tnc3-firmware
Clock Recovery Improvements
- Update to version 2.4.4.
- Clock recovery improvements.
- Improve clock recovery by updating the filter closer to the sync word.
- Update the sample index more frequently to reduce EVM.
- Choose the best time to update the sample index.
- Fix bug in sample index computation.
- Re-wrote the symbol deviation, offset, EVM code.
- More code comments.
Kalman Filtered Symbol Clock
This headline item on this release is the use of a Kalman filter for M17 symbol clock recovery. This simplifies the code and improves symbol clock recovery. It comes at the cost of a dependency on Blaze and the need to enable C++ exceptions.
The 2.4.2 tag was never released. The primary change there was fixing an issue with LICH fragment re-assembly.
- Add M17 Setup Guide.
- Validate the LICH fragment number and mask the LICH segment bitfield properly. Send -1 for BER while LICH decode is incomplete.
- Add 8 and 11 symbol RRC filters to M17 demod.
- Trivial optimization to Viterbi.
- The FirFilter constructor and init function do not need to be templatized.
- Add reset() function to IIR filter.
- Use an 8-symbol length FIR filter for symbol interpolation.
- Update firmware version to 2.4.2.
- Make the adcInputQueue size match the number of buffers allocated in AudioInput.hpp (8).
- Add Kalman filter code. This adds a dependency on Blaze and requires that exceptions be enabled.
- Add symbol slope integrator code (currently unused).
- Allow more time for DC offset to settle.
- Add feature to allow forced DCD unlocking to aid in modem recycling.
- Use EOT sync word for end of stream rather than EOS bit. Use only sync word and Kalman filter for clock recovery. Simplify some of the state transistions. Reduce DCD limits since we can follow symbol clock at lower levels now. Use a smaller FIR filter for RRC.
- Update README.md for Blaze dependency.
- Change clock used for M17 to 48MHz.
- Update firmware version to 2.4.3.
M17 Receive Polarity Bug Fix
M17 RSSI/Viterbi cost
Add RSSI indicator on M17 KISS stream frames.
EOT & BLE
Updated LSF Puncture Matrix
- Update to version 2.3.3.
- Update EOS check.
- New LSF puncture matrix (P1).
- Update stlink config for 72MHz.
M17 Bit Error Rate Testing
- Add support for M17 BER testing.
- Update version to v2.3.2
- Fix timing error which would match an M17 sync word too early causing frame corruption.
- Add 1kHz test tone for M17 deviation setting.
This firmware adds two features to support BER (bit error rate) testing when in M17. In the config app, when sending test tones, three test patterns can be sent:
- A preamble tone (2400Hz)
- A 1000Hz tone for adjusting deviation (use Bessel Null at 2405Hz to set 2400Hz deviation)
- A M17 BER test pattern
It will also decode M17 BER frames, emitting KISS frames which can be consumed and displayed in M17 KISS HT. This is not perfect. Frames can be missed and dropped completely, and this will not be counted.
Update M17 Stream Frame Format
- Add support for frame resizing (HdlcFrame). Handle old stream frame type in encoder.
- Update firmware to use new stream frame format. Update version to 2.3.0.
- Simplify FIR filter code.
- Share storage (RAM) for all demodulators.
- Use same Viterbi code as m17-cxx-demod.
The M17 code is still very much experimental in nature.
M17 Updates
- Improve the timing accuracy for M17 to under 250ppm (typical is about 100ppm) using MSI PLL mode, and by using a clock speed that is an
- exact multiple of the sampling rate.
- Improve M17 demodulator by updating the sync decode and frame timing estimates.
- Use a DFT for M17 carrier detection.
- Update callsign decoding based on spec clarification.
- Fix a memory leak in M17 packet code which would cause the TNC to hang.
Fix LICH Decode
This update fixes a defect in LICH decoding that prevented demod of in-progress or interrupted M17 streams. It also improves the handling of back-to-back streams, addressing a defect in the M17 state machine. Memory handling changes were made to handle stack size issues encountered during a compiler upgrade (to GCC 10.2). C++20 support is now required of the compiler (for std::span).