From 3c79e8d7b2fae623ab3fbf84d50d52948734a89e Mon Sep 17 00:00:00 2001 From: AliceMazzoleni99 Date: Wed, 12 Mar 2025 16:38:18 +0100 Subject: [PATCH] trailing bits are removed even if reorder false and bitlist empty --- slsReceiverSoftware/src/DataProcessor.cpp | 33 +++++++++++++++++++---- slsReceiverSoftware/src/DataProcessor.h | 7 ++++- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/slsReceiverSoftware/src/DataProcessor.cpp b/slsReceiverSoftware/src/DataProcessor.cpp index ce744e531..b0a3550ae 100644 --- a/slsReceiverSoftware/src/DataProcessor.cpp +++ b/slsReceiverSoftware/src/DataProcessor.cpp @@ -358,13 +358,13 @@ void DataProcessor::ProcessAnImage(sls_receiver_header &header, size_t &size, if (framePadding && nump < generalData->packetsPerFrame) PadMissingPackets(header, data); - if (reorder && ctbDbitList.empty()) { - Reorder(size, data); - } - - // rearrange ctb digital bits (if ctbDbitlist is not empty) + // rearrange ctb digital bits if (!ctbDbitList.empty()) { ArrangeDbitData(size, data); + } else if (reorder) { + Reorder(size, data); + } else if (ctbDbitOffset > 0) { + RemoveTrailingBits(size, data); } // 'stream Image' check has to be done here before crop image @@ -536,6 +536,29 @@ void DataProcessor::PadMissingPackets(sls_receiver_header header, char *data) { } } +void DataProcessor::RemoveTrailingBits(size_t &size, char *data) { + const size_t nAnalogDataBytes = generalData->GetNumberOfAnalogDatabytes(); + const size_t nDigitalDataBytes = generalData->GetNumberOfDigitalDatabytes(); + const size_t nTransceiverDataBytes = + generalData->GetNumberOfTransceiverDatabytes(); + + const size_t ctbDigitalDataBytes = nDigitalDataBytes - ctbDbitOffset; + + // no digital data + if (ctbDigitalDataBytes == 0) { + LOG(logWARNING) + << "No digital data for call back, yet ctbDbitOffset is non zero."; + return; + } + + // update size and copy data + memmove(data + nAnalogDataBytes, + data + nAnalogDataBytes + ctbDigitalDataBytes, + ctbDigitalDataBytes + nTransceiverDataBytes); + + size = nAnalogDataBytes + ctbDigitalDataBytes + nTransceiverDataBytes; +} + void DataProcessor::Reorder(size_t &size, char *data) { const size_t nAnalogDataBytes = generalData->GetNumberOfAnalogDatabytes(); const size_t nDigitalDataBytes = generalData->GetNumberOfDigitalDatabytes(); diff --git a/slsReceiverSoftware/src/DataProcessor.h b/slsReceiverSoftware/src/DataProcessor.h index 6b4d9d6d9..6febaedbf 100644 --- a/slsReceiverSoftware/src/DataProcessor.h +++ b/slsReceiverSoftware/src/DataProcessor.h @@ -107,6 +107,11 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject { */ void Reorder(size_t &size, char *data); + /** + * remove trailing bits in digital data stream + */ + void RemoveTrailingBits(size_t &size, char *data); + private: void RecordFirstIndex(uint64_t fnum); @@ -172,7 +177,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject { uint32_t streamingTimerInMs; uint32_t streamingStartFnum; uint32_t currentFreqCount{0}; - struct timespec timerbegin {}; + struct timespec timerbegin{}; bool framePadding; std::vector ctbDbitList; bool reorder{false}; // true if data should be reordered TODO: add as mode