mirror of
https://github.com/AlexandreRouma/SDRPlusPlus.git
synced 2025-07-07 09:44:44 +02:00
Beginning of code for the RSPduo + bugfix for the hackrf
This commit is contained in:
65
core/src/dsp/meteor/hrpt.h
Normal file
65
core/src/dsp/meteor/hrpt.h
Normal file
@ -0,0 +1,65 @@
|
||||
#pragma once
|
||||
#include <dsp/block.h>
|
||||
#include <dsp/utils/bitstream.h>
|
||||
|
||||
namespace dsp {
|
||||
namespace meteor {
|
||||
class HRPTDemux : public generic_block<HRPTDemux> {
|
||||
public:
|
||||
HRPTDemux() {}
|
||||
|
||||
HRPTDemux(stream<uint8_t>* in) { init(in); }
|
||||
|
||||
void init(stream<uint8_t>* in) {
|
||||
_in = in;
|
||||
generic_block<HRPTDemux>::registerInput(_in);
|
||||
generic_block<HRPTDemux>::registerOutput(&telemOut);
|
||||
generic_block<HRPTDemux>::registerOutput(&BISMout);
|
||||
generic_block<HRPTDemux>::registerOutput(&SSPDOut);
|
||||
generic_block<HRPTDemux>::registerOutput(&MTVZAOut);
|
||||
generic_block<HRPTDemux>::registerOutput(&MSUMROut);
|
||||
}
|
||||
|
||||
void setInput(stream<uint8_t>* in) {
|
||||
std::lock_guard<std::mutex> lck(generic_block<HRPTDemux>::ctrlMtx);
|
||||
generic_block<HRPTDemux>::tempStop();
|
||||
generic_block<HRPTDemux>::unregisterInput(_in);
|
||||
_in = in;
|
||||
generic_block<HRPTDemux>::registerInput(_in);
|
||||
generic_block<HRPTDemux>::tempStart();
|
||||
}
|
||||
|
||||
int run() {
|
||||
int count = _in->read();
|
||||
if (count < 0) { return -1; }
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
memcpy(telemOut.writeBuf + (i * 2), _in->readBuf + 4 + (i * 256), 2);
|
||||
memcpy(BISMout.writeBuf + (i * 4), _in->readBuf + 4 + (i * 256) + 2, 4);
|
||||
memcpy(SSPDOut.writeBuf + (i * 4), _in->readBuf + 4 + (i * 256) + 6, 4);
|
||||
memcpy(MTVZAOut.writeBuf + (i * 8), _in->readBuf + 4 + (i * 256) + 10, 8);
|
||||
memcpy(MSUMROut.writeBuf + (i * 238), _in->readBuf + 4 + (i * 256) + 18, (i == 3) ? 234 : 238);
|
||||
}
|
||||
|
||||
if (!telemOut.swap(8)) { return -1; }
|
||||
if (!BISMout.swap(16)) { return -1; }
|
||||
if (!SSPDOut.swap(16)) { return -1; }
|
||||
if (!MTVZAOut.swap(32)) { return -1; }
|
||||
if (!MSUMROut.swap(948)) { return -1; }
|
||||
|
||||
_in->flush();
|
||||
return count;
|
||||
}
|
||||
|
||||
stream<uint8_t> telemOut;
|
||||
stream<uint8_t> BISMout;
|
||||
stream<uint8_t> SSPDOut;
|
||||
stream<uint8_t> MTVZAOut;
|
||||
stream<uint8_t> MSUMROut;
|
||||
|
||||
private:
|
||||
stream<uint8_t>* _in;
|
||||
|
||||
};
|
||||
}
|
||||
}
|
76
core/src/dsp/meteor/msumr.h
Normal file
76
core/src/dsp/meteor/msumr.h
Normal file
@ -0,0 +1,76 @@
|
||||
#pragma once
|
||||
#include <dsp/block.h>
|
||||
#include <dsp/utils/bitstream.h>
|
||||
|
||||
namespace dsp {
|
||||
namespace meteor {
|
||||
const uint64_t MSUMR_SYNC_WORD = 0x0218A7A392DD9ABF;
|
||||
const uint8_t MSUMR_SYNC_BYTES[8] = { 0x02, 0x18, 0xA7, 0xA3, 0x92, 0xDD, 0x9A, 0xBF };
|
||||
|
||||
class MSUMRDemux : public generic_block<MSUMRDemux> {
|
||||
public:
|
||||
MSUMRDemux() {}
|
||||
|
||||
MSUMRDemux(stream<uint8_t>* in) { init(in); }
|
||||
|
||||
void init(stream<uint8_t>* in) {
|
||||
_in = in;
|
||||
generic_block<MSUMRDemux>::registerInput(_in);
|
||||
generic_block<MSUMRDemux>::registerOutput(&msumr1Out);
|
||||
generic_block<MSUMRDemux>::registerOutput(&msumr2Out);
|
||||
generic_block<MSUMRDemux>::registerOutput(&msumr3Out);
|
||||
generic_block<MSUMRDemux>::registerOutput(&msumr4Out);
|
||||
generic_block<MSUMRDemux>::registerOutput(&msumr5Out);
|
||||
generic_block<MSUMRDemux>::registerOutput(&msumr6Out);
|
||||
}
|
||||
|
||||
void setInput(stream<uint8_t>* in) {
|
||||
std::lock_guard<std::mutex> lck(generic_block<MSUMRDemux>::ctrlMtx);
|
||||
generic_block<MSUMRDemux>::tempStop();
|
||||
generic_block<MSUMRDemux>::unregisterInput(_in);
|
||||
_in = in;
|
||||
generic_block<MSUMRDemux>::registerInput(_in);
|
||||
generic_block<MSUMRDemux>::tempStart();
|
||||
}
|
||||
|
||||
int run() {
|
||||
int count = _in->read();
|
||||
if (count < 0) { return -1; }
|
||||
|
||||
int pixels = 0;
|
||||
for (int i = 0; i < 11790; i += 30) {
|
||||
for (int j = 0; j < 4; j++) {
|
||||
msumr1Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10), 10, _in->readBuf);
|
||||
msumr2Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10) + (40 * 1), 10, _in->readBuf);
|
||||
msumr3Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10) + (40 * 2), 10, _in->readBuf);
|
||||
msumr4Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10) + (40 * 3), 10, _in->readBuf);
|
||||
msumr5Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10) + (40 * 4), 10, _in->readBuf);
|
||||
msumr6Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10) + (40 * 5), 10, _in->readBuf);
|
||||
}
|
||||
pixels += 4;
|
||||
}
|
||||
|
||||
if (!msumr1Out.swap(1572)) { return -1; }
|
||||
if (!msumr2Out.swap(1572)) { return -1; }
|
||||
if (!msumr3Out.swap(1572)) { return -1; }
|
||||
if (!msumr4Out.swap(1572)) { return -1; }
|
||||
if (!msumr5Out.swap(1572)) { return -1; }
|
||||
if (!msumr6Out.swap(1572)) { return -1; }
|
||||
|
||||
_in->flush();
|
||||
return count;
|
||||
}
|
||||
|
||||
stream<uint16_t> msumr1Out;
|
||||
stream<uint16_t> msumr2Out;
|
||||
stream<uint16_t> msumr3Out;
|
||||
stream<uint16_t> msumr4Out;
|
||||
stream<uint16_t> msumr5Out;
|
||||
stream<uint16_t> msumr6Out;
|
||||
|
||||
private:
|
||||
stream<uint8_t>* _in;
|
||||
|
||||
};
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user