11#include " meteordecoder.h"
22
3+ #include < iostream>
34
45MeteorDecoder::MeteorDecoder (bool deInterleave, bool oqpsk, bool differentialDecode)
56 : mDeInterleave(deInterleave)
67 , mDifferentialDecode(differentialDecode)
78 , mCorrelation(differentialDecode ? sSynchWordOQPSK : sSynchWordQPSK , oqpsk) {}
89
9- size_t MeteorDecoder::decode (uint8_t * softBits, size_t length) {
10+ size_t MeteorDecoder::decode (uint8_t * softBits, size_t length, std::function< void ( const uint8_t * cadu, std:: size_t size)> callback ) {
1011 size_t decodedPacketCounter = 0 ;
1112 size_t syncWordFound = 0 ;
1213
@@ -17,7 +18,7 @@ size_t MeteorDecoder::decode(uint8_t* softBits, size_t length) {
1718 length = outLen;
1819 }
1920
20- mCorrelation .correlate (softBits, length, [&softBits, length, &decodedPacketCounter, &syncWordFound, this ](Correlation::CorellationResult correlationResult, Correlation::PhaseShift phaseShift) {
21+ mCorrelation .correlate (softBits, length, [&softBits, length, &decodedPacketCounter, &syncWordFound, &callback, this ](Correlation::CorellationResult correlationResult, Correlation::PhaseShift phaseShift) {
2122 bool packetOk;
2223 uint32_t processedBits = 0 ;
2324
@@ -28,7 +29,7 @@ size_t MeteorDecoder::decode(uint8_t* softBits, size_t length) {
2829 return processedBits;
2930 }
3031
31- memcpy ( mDataTodecode , &softBits[correlationResult.pos + processedBits], 16384 );
32+ std::copy (&softBits[correlationResult. pos + processedBits] , &softBits[correlationResult.pos + processedBits] + 16384 , mDataTodecode );
3233
3334 mCorrelation .rotateSoftIqInPlace (mDataTodecode , 16384 , phaseShift);
3435
@@ -53,17 +54,18 @@ size_t MeteorDecoder::decode(uint8_t* softBits, size_t length) {
5354 for (int i = 0 ; i < 4 ; i++) {
5455 mReedSolomon .deinterleave (mViterbiResult + 4 , i, 4 );
5556 rsResult[i] = mReedSolomon .decode ();
56- mReedSolomon .interleave (mDecodedPacket , i, 4 );
57+ mReedSolomon .interleave (mDecodedPacket + 4 , i, 4 );
5758 }
5859
5960 std::cout << " SyncWordFound:" << syncWordFound << " | Decoded Packets:" << decodedPacketCounter << " | Current Pos:" << (correlationResult.pos + processedBits) << " | Phase:" << phaseShift << " | synch:" << std::hex
60- << last_sync_ << " | RS: (" << std::dec << rsResult[0 ] << " , " << rsResult[1 ] << " , " << rsResult[2 ] << " , " << rsResult[3 ] << " )"
61+ << last_sync_ << " | BER: " << mViterbi . getLastBER () << " | RS: (" << std::dec << rsResult[0 ] << " , " << rsResult[1 ] << " , " << rsResult[2 ] << " , " << rsResult[3 ] << " )"
6162 << " \t\t\r " ;
6263
6364 packetOk = (rsResult[0 ] != -1 ) && (rsResult[1 ] != -1 ) && (rsResult[2 ] != -1 ) && (rsResult[3 ] != -1 );
6465
6566 if (packetOk) {
66- parseFrame (mDecodedPacket , 892 );
67+ std::copy (mViterbiResult , mViterbiResult + 4 , mDecodedPacket );
68+ callback (mDecodedPacket , sizeof (mDecodedPacket ));
6769 decodedPacketCounter++;
6870 processedBits += 16384 ;
6971 }
0 commit comments