mirror of https://github.com/g4klx/MMDVM.git
Add full frame dumping.
This commit is contained in:
parent
3b5e1afb54
commit
2f9eb3523d
31
DMRDMORX.cpp
31
DMRDMORX.cpp
|
@ -18,7 +18,8 @@
|
|||
|
||||
#define WANT_DEBUG
|
||||
|
||||
// #define DUMP_SAMPLES
|
||||
// #define DUMP_SYNC_SAMPLES
|
||||
#define DUMP_SAMPLES
|
||||
|
||||
#include "Config.h"
|
||||
#include "Globals.h"
|
||||
|
@ -129,9 +130,13 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi)
|
|||
ptr -= DMO_BUFFER_LENGTH_SAMPLES;
|
||||
|
||||
samplesToBits(ptr, DMR_FRAME_LENGTH_SYMBOLS, frame, 8U, centre, threshold);
|
||||
#if defined(DUMP_SYNC_SAMPLES)
|
||||
if (m_control == CONTROL_DATA || m_control == CONTROL_VOICE)
|
||||
writeSyncSamples();
|
||||
#endif
|
||||
#if defined(DUMP_SAMPLES)
|
||||
if (m_control == CONTROL_DATA || m_control == CONTROL_VOICE)
|
||||
writeSync();
|
||||
writeSamples(ptr);
|
||||
#endif
|
||||
|
||||
if (m_control == CONTROL_DATA) {
|
||||
|
@ -432,8 +437,8 @@ void CDMRDMORX::writeRSSIData(uint8_t* frame)
|
|||
#endif
|
||||
}
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CDMRDMORX::writeSync()
|
||||
#if defined(DUMP_SYNC_SAMPLES)
|
||||
void CDMRDMORX::writeSyncSamples()
|
||||
{
|
||||
uint16_t ptr = m_syncPtr + DMO_BUFFER_LENGTH_SAMPLES - DMR_SYNC_LENGTH_SAMPLES + DMR_RADIO_SYMBOL_LENGTH;
|
||||
if (ptr >= DMO_BUFFER_LENGTH_SAMPLES)
|
||||
|
@ -449,7 +454,23 @@ void CDMRDMORX::writeSync()
|
|||
ptr -= DMO_BUFFER_LENGTH_SAMPLES;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_DMR, sync, DMR_SYNC_LENGTH_SYMBOLS);
|
||||
serial.writeSyncSamples(STATE_DMR, sync, DMR_SYNC_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CDMRDMORX::writeSamples(uint16_t start)
|
||||
{
|
||||
q15_t samples[DMR_FRAME_LENGTH_SYMBOLS];
|
||||
|
||||
for (uint16_t i = 0U; i < DMR_FRAME_LENGTH_SYMBOLS; i++) {
|
||||
samples[i] = m_buffer[start];
|
||||
|
||||
start += DMR_RADIO_SYMBOL_LENGTH;
|
||||
if (start >= DMO_BUFFER_LENGTH_SAMPLES)
|
||||
start -= DMO_BUFFER_LENGTH_SAMPLES;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_DMR, samples, DMR_FRAME_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -64,8 +64,8 @@ private:
|
|||
void correlateSync(bool first);
|
||||
void samplesToBits(uint16_t start, uint8_t count, uint8_t* buffer, uint16_t offset, q15_t centre, q15_t threshold);
|
||||
void writeRSSIData(uint8_t* frame);
|
||||
void writeSync();
|
||||
void writeSyncSamples();
|
||||
void writeSamples(uint16_t start);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -18,7 +18,8 @@
|
|||
|
||||
#define WANT_DEBUG
|
||||
|
||||
// #define DUMP_SAMPLES
|
||||
// #define DUMP_SYNC_SAMPLES
|
||||
#define DUMP_SAMPLES
|
||||
|
||||
#include "Config.h"
|
||||
#include "Globals.h"
|
||||
|
@ -132,9 +133,13 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi)
|
|||
|
||||
uint16_t ptr = m_endPtr - DMR_FRAME_LENGTH_SAMPLES + DMR_RADIO_SYMBOL_LENGTH + 1U;
|
||||
samplesToBits(ptr, DMR_FRAME_LENGTH_SYMBOLS, frame, 8U, centre, threshold);
|
||||
#if defined(DUMP_SYNC_SAMPLES)
|
||||
if (m_control == CONTROL_DATA || m_control == CONTROL_VOICE)
|
||||
writeSyncSamples();
|
||||
#endif
|
||||
#if defined(DUMP_SAMPLES)
|
||||
if (m_control == CONTROL_DATA || m_control == CONTROL_VOICE)
|
||||
writeSync();
|
||||
writeSamples(ptr);
|
||||
#endif
|
||||
|
||||
if (m_control == CONTROL_DATA) {
|
||||
|
@ -409,8 +414,8 @@ void CDMRSlotRX::writeRSSIData(uint8_t* frame)
|
|||
#endif
|
||||
}
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CDMRSlotRX::writeSync()
|
||||
#if defined(DUMP_SYNC_SAMPLES)
|
||||
void CDMRSlotRX::writeSyncSamples()
|
||||
{
|
||||
uint16_t ptr = m_syncPtr - DMR_SYNC_LENGTH_SAMPLES + DMR_RADIO_SYMBOL_LENGTH;
|
||||
|
||||
|
@ -421,7 +426,20 @@ void CDMRSlotRX::writeSync()
|
|||
ptr += DMR_RADIO_SYMBOL_LENGTH;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_DMR, sync, DMR_SYNC_LENGTH_SYMBOLS);
|
||||
serial.writeSyncSamples(STATE_DMR, sync, DMR_SYNC_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CDMRSlotRX::writeSamples(uint16_t start)
|
||||
{
|
||||
q15_t samples[DMR_FRAME_LENGTH_SYMBOLS];
|
||||
|
||||
for (uint16_t i = 0U; i < DMR_FRAME_LENGTH_SYMBOLS; i++) {
|
||||
samples[i] = m_buffer[start];
|
||||
start += DMR_RADIO_SYMBOL_LENGTH;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_DMR, samples, DMR_FRAME_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -67,8 +67,8 @@ private:
|
|||
void correlateSync(bool first);
|
||||
void samplesToBits(uint16_t start, uint8_t count, uint8_t* buffer, uint16_t offset, q15_t centre, q15_t threshold);
|
||||
void writeRSSIData(uint8_t* frame);
|
||||
void writeSync();
|
||||
void writeSyncSamples();
|
||||
void writeSamples(uint16_t start);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
34
P25RX.cpp
34
P25RX.cpp
|
@ -18,7 +18,8 @@
|
|||
|
||||
#define WANT_DEBUG
|
||||
|
||||
#define DUMP_SAMPLES
|
||||
// #define DUMP_SYNC_SAMPLES
|
||||
#define DUMP_SAMPLES
|
||||
|
||||
#include "Config.h"
|
||||
#include "Globals.h"
|
||||
|
@ -180,8 +181,8 @@ void CP25RX::processHdr(q15_t sample)
|
|||
|
||||
uint8_t frame[P25_HDR_FRAME_LENGTH_BYTES + 1U];
|
||||
samplesToBits(m_hdrStartPtr, P25_HDR_FRAME_LENGTH_SYMBOLS, frame, 8U, m_centreVal, m_thresholdVal);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSync(m_hdrStartPtr);
|
||||
#if defined(DUMP_SYNC_SAMPLES)
|
||||
writeSyncSamples(m_hdrStartPtr);
|
||||
#endif
|
||||
|
||||
frame[0U] = 0x01U;
|
||||
|
@ -229,8 +230,11 @@ void CP25RX::processLdu(q15_t sample)
|
|||
|
||||
uint8_t frame[P25_LDU_FRAME_LENGTH_BYTES + 3U];
|
||||
samplesToBits(m_lduStartPtr, P25_LDU_FRAME_LENGTH_SYMBOLS, frame, 8U, m_centreVal, m_thresholdVal);
|
||||
#if defined(DUMP_SYNC_SAMPLES)
|
||||
writeSyncSamples(m_lduStartPtr);
|
||||
#endif
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSync(m_lduStartPtr);
|
||||
writeSamples(m_lduStartPtr);
|
||||
#endif
|
||||
|
||||
// We've not seen a data sync for too long, signal RXLOST and change to RX_NONE
|
||||
|
@ -477,8 +481,8 @@ void CP25RX::writeRSSILdu(uint8_t* ldu)
|
|||
m_rssiCount = 0U;
|
||||
}
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CP25RX::writeSync(uint16_t start)
|
||||
#if defined(DUMP_SYNC_SAMPLES)
|
||||
void CP25RX::writeSyncSamples(uint16_t start)
|
||||
{
|
||||
q15_t sync[P25_SYNC_LENGTH_SYMBOLS];
|
||||
|
||||
|
@ -490,7 +494,23 @@ void CP25RX::writeSync(uint16_t start)
|
|||
start -= P25_LDU_FRAME_LENGTH_SAMPLES;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_P25, sync, P25_SYNC_LENGTH_SYMBOLS);
|
||||
serial.writeSyncSamples(STATE_P25, sync, P25_SYNC_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CP25RX::writeSamples(uint16_t start)
|
||||
{
|
||||
q15_t samples[P25_LDU_FRAME_LENGTH_SYMBOLS];
|
||||
|
||||
for (uint16_t i = 0U; i < P25_LDU_FRAME_LENGTH_SYMBOLS; i++) {
|
||||
samples[i] = m_buffer[start];
|
||||
|
||||
start += P25_RADIO_SYMBOL_LENGTH;
|
||||
if (start >= P25_LDU_FRAME_LENGTH_SAMPLES)
|
||||
start -= P25_LDU_FRAME_LENGTH_SAMPLES;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_P25, samples, P25_LDU_FRAME_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
|
3
P25RX.h
3
P25RX.h
|
@ -67,7 +67,8 @@ private:
|
|||
void calculateLevels(uint16_t start, uint16_t count);
|
||||
void samplesToBits(uint16_t start, uint16_t count, uint8_t* buffer, uint16_t offset, q15_t centre, q15_t threshold);
|
||||
void writeRSSILdu(uint8_t* ldu);
|
||||
void writeSync(uint16_t start);
|
||||
void writeSyncSamples(uint16_t start);
|
||||
void writeSamples(uint16_t start);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -62,7 +62,8 @@ const uint8_t MMDVM_NAK = 0x7FU;
|
|||
|
||||
const uint8_t MMDVM_SERIAL = 0x80U;
|
||||
|
||||
const uint8_t MMDVM_SAMPLES = 0xF0U;
|
||||
const uint8_t MMDVM_SAMPLES = 0xEFU;
|
||||
const uint8_t MMDVM_SYNC_SAMPLES = 0xF0U;
|
||||
|
||||
const uint8_t MMDVM_DEBUG1 = 0xF1U;
|
||||
const uint8_t MMDVM_DEBUG2 = 0xF2U;
|
||||
|
@ -70,6 +71,7 @@ const uint8_t MMDVM_DEBUG3 = 0xF3U;
|
|||
const uint8_t MMDVM_DEBUG4 = 0xF4U;
|
||||
const uint8_t MMDVM_DEBUG5 = 0xF5U;
|
||||
|
||||
|
||||
#if defined(EXTERNAL_OSC)
|
||||
const uint8_t HARDWARE[] = "MMDVM 20170206 TCXO (D-Star/DMR/System Fusion/P25/RSSI/CW Id)";
|
||||
#else
|
||||
|
@ -925,13 +927,13 @@ void CSerialPort::writeRSSIData(const uint8_t* data, uint8_t length)
|
|||
writeInt(1U, reply, count);
|
||||
}
|
||||
|
||||
void CSerialPort::writeSamples(unsigned char mode, const q15_t* samples, unsigned char nSamples)
|
||||
void CSerialPort::writeSyncSamples(uint8_t mode, const q15_t* samples, uint8_t nSamples)
|
||||
{
|
||||
uint8_t reply[130U];
|
||||
|
||||
reply[0U] = MMDVM_FRAME_START;
|
||||
reply[1U] = 0U;
|
||||
reply[2U] = MMDVM_SAMPLES;
|
||||
reply[2U] = MMDVM_SYNC_SAMPLES;
|
||||
|
||||
reply[3U] = mode;
|
||||
|
||||
|
@ -948,6 +950,30 @@ void CSerialPort::writeSamples(unsigned char mode, const q15_t* samples, unsigne
|
|||
writeInt(1U, reply, count, true);
|
||||
}
|
||||
|
||||
void CSerialPort::writeSamples(uint8_t mode, const q15_t* samples, uint16_t nSamples)
|
||||
{
|
||||
uint8_t reply[1800U];
|
||||
|
||||
reply[0U] = MMDVM_FRAME_START;
|
||||
reply[1U] = 0U;
|
||||
reply[2U] = MMDVM_SAMPLES;
|
||||
|
||||
reply[5U] = mode;
|
||||
|
||||
uint16_t count = 6U;
|
||||
for (uint16_t i = 0U; i < nSamples; i++) {
|
||||
uint16_t val = uint16_t(samples[i] + 2048);
|
||||
|
||||
reply[count++] = (val >> 8) & 0xFF;
|
||||
reply[count++] = (val >> 0) & 0xFF;
|
||||
}
|
||||
|
||||
reply[3U] = (count >> 8) & 0xFFU;
|
||||
reply[4U] = (count >> 0) & 0xFFU;
|
||||
|
||||
writeInt(1U, reply, count, true);
|
||||
}
|
||||
|
||||
void CSerialPort::writeDebug(const char* text)
|
||||
{
|
||||
uint8_t reply[130U];
|
||||
|
|
|
@ -49,7 +49,8 @@ public:
|
|||
void writeCalData(const uint8_t* data, uint8_t length);
|
||||
void writeRSSIData(const uint8_t* data, uint8_t length);
|
||||
|
||||
void writeSamples(unsigned char mode, const q15_t* samples, unsigned char nSamples);
|
||||
void writeSyncSamples(uint8_t mode, const q15_t* samples, uint8_t nSamples);
|
||||
void writeSamples(uint8_t mode, const q15_t* samples, uint16_t nSamples);
|
||||
|
||||
void writeDebug(const char* text);
|
||||
void writeDebug(const char* text, int16_t n1);
|
||||
|
|
30
YSFRX.cpp
30
YSFRX.cpp
|
@ -18,7 +18,8 @@
|
|||
|
||||
#define WANT_DEBUG
|
||||
|
||||
#define DUMP_SAMPLES
|
||||
// #define DUMP_SYNC_SAMPLES
|
||||
#define DUMP_SAMPLES
|
||||
|
||||
#include "Config.h"
|
||||
#include "Globals.h"
|
||||
|
@ -182,8 +183,11 @@ void CYSFRX::processData(q15_t sample)
|
|||
|
||||
uint8_t frame[YSF_FRAME_LENGTH_BYTES + 3U];
|
||||
samplesToBits(m_startPtr, YSF_FRAME_LENGTH_SYMBOLS, frame, 8U, m_centreVal, m_thresholdVal);
|
||||
#if defined(DUMP_SYNC_SAMPLES)
|
||||
writeSyncSamples(m_startPtr);
|
||||
#endif
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSync(m_startPtr);
|
||||
writeSamples(m_startPtr);
|
||||
#endif
|
||||
|
||||
// We've not seen a data sync for too long, signal RXLOST and change to RX_NONE
|
||||
|
@ -412,8 +416,8 @@ void CYSFRX::writeRSSIData(uint8_t* data)
|
|||
m_rssiCount = 0U;
|
||||
}
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CYSFRX::writeSync(uint16_t start)
|
||||
#if defined(DUMP_SYNC_SAMPLES)
|
||||
void CYSFRX::writeSyncSamples(uint16_t start)
|
||||
{
|
||||
q15_t sync[YSF_SYNC_LENGTH_SYMBOLS];
|
||||
|
||||
|
@ -425,7 +429,23 @@ void CYSFRX::writeSync(uint16_t start)
|
|||
start -= YSF_FRAME_LENGTH_SAMPLES;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_YSF, sync, YSF_SYNC_LENGTH_SYMBOLS);
|
||||
serial.writeSyncSamples(STATE_YSF, sync, YSF_SYNC_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CYSFRX::writeSamples(uint16_t start)
|
||||
{
|
||||
q15_t samples[YSF_FRAME_LENGTH_SYMBOLS];
|
||||
|
||||
for (uint16_t i = 0U; i < YSF_FRAME_LENGTH_SYMBOLS; i++) {
|
||||
samples[i] = m_buffer[start];
|
||||
|
||||
start += YSF_RADIO_SYMBOL_LENGTH;
|
||||
if (start >= YSF_FRAME_LENGTH_SAMPLES)
|
||||
start -= YSF_FRAME_LENGTH_SAMPLES;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_YSF, samples, YSF_FRAME_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
|
3
YSFRX.h
3
YSFRX.h
|
@ -63,7 +63,8 @@ private:
|
|||
void calculateLevels(uint16_t start, uint16_t count);
|
||||
void samplesToBits(uint16_t start, uint16_t count, uint8_t* buffer, uint16_t offset, q15_t centre, q15_t threshold);
|
||||
void writeRSSIData(uint8_t* data);
|
||||
void writeSync(uint16_t start);
|
||||
void writeSyncSamples(uint16_t start);
|
||||
void writeSamples(uint16_t start);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue