Add a Bladerf_Signal_Source that streams RX samples directly from
bladeRF front-ends (bladeRF x40, x115, and bladeRF 2.0 Micro xA4/xA9)
through libbladeRF, instead of going through the generic gr-osmosdr
wrapper. gr-osmosdr's bladerf backend does not expose usable per-stage
gain control on bladeRF2 hardware and has no support for the RX bias
tee used to power an active antenna on the 2.0 Micro.
The new gr::sync_block (bladerf_source) talks to libbladeRF's
synchronous streaming API directly; the adapter (BladerfSignalSource)
follows the existing SignalSourceBase pattern used by the other signal
sources, with valve and dump support wired the same way. Building it
is gated behind -DENABLE_BLADERF=ON, degrades gracefully when
libbladeRF is absent, and requires libbladeRF v2.6.0 or newer,
enforced at configure time.
Verified against a physical bladeRF 2.0 Micro: the receiver opens the
device, streams live samples, and acquires and tracks real GPS
satellites end to end using the new sample configuration file.
Only single-channel (SISO) reception is supported for now; the second
RX channel is not yet exposed.
Signed-off-by: Oleksandr Suvorov <cryosay@gmail.com>
Compensate the Viterbi traceback delay when timestamping decoded SBAS
messages by carrying per-sample reception timestamps through the sample
and symbol aligners (removes a ~140 ms bias), with a deterministic unit
test covering the FIFO pairing.
Protect decoder state with d_setlock in reset(), set_satellite(),
set_channel() and general_work(), following the convention of the other
telemetry decoders.
Share per-PRN EMS dump files through a per-run dump session: the first
open in a run truncates stale data, later opens append, so channel
reassignments no longer wipe previously decoded messages.
- Restore true chip semantics for L1: QZSS_L1_CHIP_RATE is 1.023 Mcps and
QZSS_L1_CODE_LENGTH is 1023 chips again. The replica carries
QZSS_L1_SAMPLES_PER_CHIP = 2 samples per chip (L1 C/A chips duplicated,
L1 C/B sinBOC(1,1) subchips), following the Galileo E1 approach. The
generated waveform is unchanged, but Tracking_1J.early_late_space_chips
is expressed in chips again, consistently with all other signals.
- Normalize the DLL discriminator with the sinBOC(1,1) correlation
function when the tracked PRN broadcasts L1 C/B, selected per PRN in
start_tracking(); warn if the configured correlator spacing falls
outside the BOC(1,1) correlation main peak (> 0.33 chips).
- Attribute L1 C/B observables and ephemerides (PRN 203-206) to the PRN
of the satellite's nominal PNT signals (RINEX 4.00, Table 6), so RINEX,
RTCM and rtklib identify the transmitting satellite correctly and
multi-frequency observations of the same satellite are paired instead
of counted twice.
- Do not search QZSS L5 signals for PRNs above 202, which have no L5
PRN code assigned in IS-QZSS-PNT.
- Remove reserved, non-operational PRNs 198 and 202 from the default
QZSS search list; they remain selectable via the QZSS.prns option.
- Fix a potential std::out_of_range in
GNSSFlowgraph::priorize_satellites() when assisted acquisition
prioritizes satellites of a constellation with only a subset of its
signals configured.
* Report GMP version if found
* Bump local version of GoogleTest to 1.15.2 and Protocol Buffers to 27.3
* Avoid code duplication in CMake modules
* Update CMake modules
* Update clang-tidy job