From 03dd9e6e838d98424308e61770fefe505baf471c Mon Sep 17 00:00:00 2001 From: David Given Date: Sat, 12 Feb 2022 15:16:25 +0100 Subject: [PATCH] Add back support for capturing raw records. --- lib/decoders/decoders.cc | 17 ++++++++++++----- lib/decoders/decoders.h | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/decoders/decoders.cc b/lib/decoders/decoders.cc index 98b8ffbc..1242b049 100644 --- a/lib/decoders/decoders.cc +++ b/lib/decoders/decoders.cc @@ -88,7 +88,10 @@ std::unique_ptr AbstractDecoder::decodeToSectors( /* Read the sector record. */ + Fluxmap::Position before = fmr.tell(); decodeSectorRecord(); + pushRecord(before, fmr.tell()); + if (_sector->status == Sector::DATA_MISSING) { /* The data is in a separate record. */ @@ -99,10 +102,14 @@ std::unique_ptr AbstractDecoder::decodeToSectors( if (fmr.eof() || !_sector->clock) break; + before = fmr.tell(); decodeDataRecord(); if (_sector->status != Sector::DATA_MISSING) + { + pushRecord(before, fmr.tell()); break; + } fmr.skipToEvent(F_BIT_PULSE); resetFluxDecoder(); @@ -126,10 +133,8 @@ void AbstractDecoder::pushRecord(const Fluxmap::Position& start, const Fluxmap:: record->endTime = end.ns(); record->clock = _sector->clock; - _fmr->seek(start); - FluxDecoder decoder(_fmr, _sector->clock, _config); - record->rawData = toBytes(decoder.readBits(end)); - _fmr->seek(here); + record->rawData = toBytes(_recordBits); + _recordBits.clear(); } void AbstractDecoder::resetFluxDecoder() @@ -153,7 +158,9 @@ void AbstractDecoder::seekToIndexMark() std::vector AbstractDecoder::readRawBits(unsigned count) { - return _decoder->readBits(count); + auto bits = _decoder->readBits(count); + _recordBits.insert(_recordBits.end(), bits.begin(), bits.end()); + return bits; } uint8_t AbstractDecoder::readRaw8() diff --git a/lib/decoders/decoders.h b/lib/decoders/decoders.h index aac5662e..0f7cbc2c 100644 --- a/lib/decoders/decoders.h +++ b/lib/decoders/decoders.h @@ -85,6 +85,7 @@ protected: std::unique_ptr _trackdata; std::shared_ptr _sector; std::unique_ptr _decoder; + std::vector _recordBits; private: FluxmapReader* _fmr = nullptr;