mirror of https://github.com/g4klx/MMDVM.git
Improve frame dumping capabilities.
This commit is contained in:
parent
a6affb765e
commit
7fafd762d2
35
DMRDMORX.cpp
35
DMRDMORX.cpp
|
@ -129,10 +129,6 @@ 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_SAMPLES)
|
||||
if (m_control == CONTROL_DATA || m_control == CONTROL_VOICE)
|
||||
writeSamples(ptr);
|
||||
#endif
|
||||
|
||||
if (m_control == CONTROL_DATA) {
|
||||
// Data sync
|
||||
|
@ -151,6 +147,9 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi)
|
|||
case DT_DATA_HEADER:
|
||||
DEBUG4("DMRDMORX: data header found pos/centre/threshold", m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
m_state = DMORXS_DATA;
|
||||
m_type = 0x00U;
|
||||
break;
|
||||
|
@ -160,18 +159,27 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi)
|
|||
if (m_state == DMORXS_DATA) {
|
||||
DEBUG4("DMRDMORX: data payload found pos/centre/threshold", m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
m_type = dataType;
|
||||
}
|
||||
break;
|
||||
case DT_VOICE_LC_HEADER:
|
||||
DEBUG4("DMRDMORX: voice header found pos/centre/threshold", m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
m_state = DMORXS_VOICE;
|
||||
break;
|
||||
case DT_VOICE_PI_HEADER:
|
||||
if (m_state == DMORXS_VOICE) {
|
||||
DEBUG4("DMRDMORX: voice pi header found pos/centre/threshold", m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
}
|
||||
m_state = DMORXS_VOICE;
|
||||
break;
|
||||
|
@ -179,12 +187,18 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi)
|
|||
if (m_state == DMORXS_VOICE) {
|
||||
DEBUG4("DMRDMORX: voice terminator found pos/centre/threshold", m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
reset();
|
||||
}
|
||||
break;
|
||||
default: // DT_CSBK
|
||||
DEBUG4("DMRDMORX: csbk found pos/centre/threshold", m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
reset();
|
||||
break;
|
||||
}
|
||||
|
@ -193,6 +207,9 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi)
|
|||
// Voice sync
|
||||
DEBUG4("DMRDMORX: voice sync found pos/centre/threshold", m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
m_state = DMORXS_VOICE;
|
||||
m_syncCount = 0U;
|
||||
m_n = 0U;
|
||||
|
@ -214,10 +231,16 @@ bool CDMRDMORX::processSample(q15_t sample, uint16_t rssi)
|
|||
}
|
||||
|
||||
serial.writeDMRData(true, frame, DMR_FRAME_LENGTH_BYTES + 1U);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
} else if (m_state == DMORXS_DATA) {
|
||||
if (m_type != 0x00U) {
|
||||
frame[0U] = CONTROL_DATA | m_type;
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -433,7 +456,7 @@ void CDMRDMORX::writeRSSIData(uint8_t* frame)
|
|||
}
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CDMRDMORX::writeSamples(uint16_t start)
|
||||
void CDMRDMORX::writeSamples(uint16_t start, uint8_t control)
|
||||
{
|
||||
q15_t samples[DMR_FRAME_LENGTH_SYMBOLS];
|
||||
|
||||
|
@ -445,6 +468,6 @@ void CDMRDMORX::writeSamples(uint16_t start)
|
|||
start -= DMO_BUFFER_LENGTH_SAMPLES;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_DMR, samples, DMR_FRAME_LENGTH_SYMBOLS);
|
||||
serial.writeSamples(STATE_DMR, control, samples, DMR_FRAME_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -64,7 +64,7 @@ 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 writeSamples(uint16_t start);
|
||||
void writeSamples(uint16_t start, uint8_t control);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
|
||||
#define WANT_DEBUG
|
||||
|
||||
// #define DUMP_SAMPLES
|
||||
|
||||
#include "Config.h"
|
||||
#include "Globals.h"
|
||||
#include "DMRIdleRX.h"
|
||||
|
@ -159,6 +161,9 @@ void CDMRIdleRX::processSample(q15_t sample)
|
|||
if (colorCode == m_colorCode && dataType == DT_CSBK) {
|
||||
frame[0U] = CONTROL_IDLE | CONTROL_DATA | DT_CSBK;
|
||||
serial.writeDMRData(false, frame, DMR_FRAME_LENGTH_BYTES + 1U);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
}
|
||||
|
||||
m_endPtr = NOENDPTR;
|
||||
|
@ -212,3 +217,19 @@ void CDMRIdleRX::setColorCode(uint8_t colorCode)
|
|||
m_colorCode = colorCode;
|
||||
}
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CDMRIdleRX::writeSamples(uint16_t start, uint8_t control)
|
||||
{
|
||||
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 >= DMR_FRAME_LENGTH_SAMPLES)
|
||||
start -= DMR_FRAME_LENGTH_SAMPLES;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_DMR, control, samples, DMR_FRAME_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -43,8 +43,9 @@ private:
|
|||
q15_t m_threshold;
|
||||
uint8_t m_colorCode;
|
||||
|
||||
void processSample(q15_t sample);
|
||||
void samplesToBits(uint16_t start, uint8_t count, uint8_t* buffer, uint16_t offset, q15_t centre, q15_t threshold);
|
||||
void processSample(q15_t sample);
|
||||
void samplesToBits(uint16_t start, uint8_t count, uint8_t* buffer, uint16_t offset, q15_t centre, q15_t threshold);
|
||||
void writeSamples(uint16_t start, uint8_t control);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -132,10 +132,6 @@ 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_SAMPLES)
|
||||
if (m_control == CONTROL_DATA || m_control == CONTROL_VOICE)
|
||||
writeSamples(ptr);
|
||||
#endif
|
||||
|
||||
if (m_control == CONTROL_DATA) {
|
||||
// Data sync
|
||||
|
@ -154,6 +150,9 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi)
|
|||
case DT_DATA_HEADER:
|
||||
DEBUG5("DMRSlotRX: data header found slot/pos/centre/threshold", m_slot ? 2U : 1U, m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
m_state = DMRRXS_DATA;
|
||||
m_type = 0x00U;
|
||||
break;
|
||||
|
@ -163,18 +162,27 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi)
|
|||
if (m_state == DMRRXS_DATA) {
|
||||
DEBUG5("DMRSlotRX: data payload found slot/pos/centre/threshold", m_slot ? 2U : 1U, m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
m_type = dataType;
|
||||
}
|
||||
break;
|
||||
case DT_VOICE_LC_HEADER:
|
||||
DEBUG5("DMRSlotRX: voice header found slot/pos/centre/threshold", m_slot ? 2U : 1U, m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
m_state = DMRRXS_VOICE;
|
||||
break;
|
||||
case DT_VOICE_PI_HEADER:
|
||||
if (m_state == DMRRXS_VOICE) {
|
||||
DEBUG5("DMRSlotRX: voice pi header found slot/pos/centre/threshold", m_slot ? 2U : 1U, m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
}
|
||||
m_state = DMRRXS_VOICE;
|
||||
break;
|
||||
|
@ -182,6 +190,9 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi)
|
|||
if (m_state == DMRRXS_VOICE) {
|
||||
DEBUG5("DMRSlotRX: voice terminator found slot/pos/centre/threshold", m_slot ? 2U : 1U, m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
m_state = DMRRXS_NONE;
|
||||
m_endPtr = NOENDPTR;
|
||||
}
|
||||
|
@ -189,6 +200,9 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi)
|
|||
default: // DT_CSBK
|
||||
DEBUG5("DMRSlotRX: csbk found slot/pos/centre/threshold", m_slot ? 2U : 1U, m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
m_state = DMRRXS_NONE;
|
||||
m_endPtr = NOENDPTR;
|
||||
break;
|
||||
|
@ -198,6 +212,9 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi)
|
|||
// Voice sync
|
||||
DEBUG5("DMRSlotRX: voice sync found slot/pos/centre/threshold", m_slot ? 2U : 1U, m_syncPtr, centre, threshold);
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
m_state = DMRRXS_VOICE;
|
||||
m_syncCount = 0U;
|
||||
m_n = 0U;
|
||||
|
@ -220,10 +237,16 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi)
|
|||
}
|
||||
|
||||
serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
} else if (m_state == DMRRXS_DATA) {
|
||||
if (m_type != 0x00U) {
|
||||
frame[0U] = CONTROL_DATA | m_type;
|
||||
writeRSSIData(frame);
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(ptr, frame[0U]);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -410,7 +433,7 @@ void CDMRSlotRX::writeRSSIData(uint8_t* frame)
|
|||
}
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CDMRSlotRX::writeSamples(uint16_t start)
|
||||
void CDMRSlotRX::writeSamples(uint16_t start, uint8_t control)
|
||||
{
|
||||
q15_t samples[DMR_FRAME_LENGTH_SYMBOLS];
|
||||
|
||||
|
@ -419,6 +442,6 @@ void CDMRSlotRX::writeSamples(uint16_t start)
|
|||
start += DMR_RADIO_SYMBOL_LENGTH;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_DMR, samples, DMR_FRAME_LENGTH_SYMBOLS);
|
||||
serial.writeSamples(STATE_DMR, control, samples, DMR_FRAME_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -67,7 +67,7 @@ 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 writeSamples(uint16_t start);
|
||||
void writeSamples(uint16_t start, uint8_t control);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
12
P25RX.cpp
12
P25RX.cpp
|
@ -226,9 +226,6 @@ 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_SAMPLES)
|
||||
writeSamples(m_lduStartPtr);
|
||||
#endif
|
||||
|
||||
// We've not seen a data sync for too long, signal RXLOST and change to RX_NONE
|
||||
m_lostCount--;
|
||||
|
@ -247,9 +244,10 @@ void CP25RX::processLdu(q15_t sample)
|
|||
m_maxCorr = 0;
|
||||
} else {
|
||||
frame[0U] = m_lostCount == (MAX_SYNC_FRAMES - 1U) ? 0x01U : 0x00U;
|
||||
|
||||
writeRSSILdu(frame);
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(m_lduStartPtr, frame[0U]);
|
||||
#endif
|
||||
m_maxCorr = 0;
|
||||
}
|
||||
}
|
||||
|
@ -475,7 +473,7 @@ void CP25RX::writeRSSILdu(uint8_t* ldu)
|
|||
}
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CP25RX::writeSamples(uint16_t start)
|
||||
void CP25RX::writeSamples(uint16_t start, uint8_t control)
|
||||
{
|
||||
q15_t samples[P25_LDU_FRAME_LENGTH_SYMBOLS];
|
||||
|
||||
|
@ -487,6 +485,6 @@ void CP25RX::writeSamples(uint16_t start)
|
|||
start -= P25_LDU_FRAME_LENGTH_SAMPLES;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_P25, samples, P25_LDU_FRAME_LENGTH_SYMBOLS);
|
||||
serial.writeSamples(STATE_P25, control, samples, P25_LDU_FRAME_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
|
2
P25RX.h
2
P25RX.h
|
@ -67,7 +67,7 @@ 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 writeSamples(uint16_t start);
|
||||
void writeSamples(uint16_t start, uint8_t control);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -926,7 +926,7 @@ void CSerialPort::writeRSSIData(const uint8_t* data, uint8_t length)
|
|||
writeInt(1U, reply, count);
|
||||
}
|
||||
|
||||
void CSerialPort::writeSamples(uint8_t mode, const q15_t* samples, uint16_t nSamples)
|
||||
void CSerialPort::writeSamples(uint8_t mode, uint8_t control, const q15_t* samples, uint16_t nSamples)
|
||||
{
|
||||
uint8_t reply[1800U];
|
||||
|
||||
|
@ -935,8 +935,9 @@ void CSerialPort::writeSamples(uint8_t mode, const q15_t* samples, uint16_t nSam
|
|||
reply[2U] = MMDVM_SAMPLES;
|
||||
|
||||
reply[5U] = mode;
|
||||
reply[6U] = control;
|
||||
|
||||
uint16_t count = 6U;
|
||||
uint16_t count = 7U;
|
||||
for (uint16_t i = 0U; i < nSamples; i++) {
|
||||
uint16_t val = uint16_t(samples[i] + 2048);
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ public:
|
|||
void writeCalData(const uint8_t* data, uint8_t length);
|
||||
void writeRSSIData(const uint8_t* data, uint8_t length);
|
||||
|
||||
void writeSamples(uint8_t mode, const q15_t* samples, uint16_t nSamples);
|
||||
void writeSamples(uint8_t mode, uint8_t control, const q15_t* samples, uint16_t nSamples);
|
||||
|
||||
void writeDebug(const char* text);
|
||||
void writeDebug(const char* text, int16_t n1);
|
||||
|
|
12
YSFRX.cpp
12
YSFRX.cpp
|
@ -182,9 +182,6 @@ 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_SAMPLES)
|
||||
writeSamples(m_startPtr);
|
||||
#endif
|
||||
|
||||
// We've not seen a data sync for too long, signal RXLOST and change to RX_NONE
|
||||
m_lostCount--;
|
||||
|
@ -203,9 +200,10 @@ void CYSFRX::processData(q15_t sample)
|
|||
m_maxCorr = 0;
|
||||
} else {
|
||||
frame[0U] = m_lostCount == (MAX_SYNC_FRAMES - 1U) ? 0x01U : 0x00U;
|
||||
|
||||
writeRSSIData(frame);
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
writeSamples(m_startPtr, frame[0U]);
|
||||
#endif
|
||||
m_maxCorr = 0;
|
||||
}
|
||||
}
|
||||
|
@ -413,7 +411,7 @@ void CYSFRX::writeRSSIData(uint8_t* data)
|
|||
}
|
||||
|
||||
#if defined(DUMP_SAMPLES)
|
||||
void CYSFRX::writeSamples(uint16_t start)
|
||||
void CYSFRX::writeSamples(uint16_t start, uint8_t control)
|
||||
{
|
||||
q15_t samples[YSF_FRAME_LENGTH_SYMBOLS];
|
||||
|
||||
|
@ -425,6 +423,6 @@ void CYSFRX::writeSamples(uint16_t start)
|
|||
start -= YSF_FRAME_LENGTH_SAMPLES;
|
||||
}
|
||||
|
||||
serial.writeSamples(STATE_YSF, samples, YSF_FRAME_LENGTH_SYMBOLS);
|
||||
serial.writeSamples(STATE_YSF, control, samples, YSF_FRAME_LENGTH_SYMBOLS);
|
||||
}
|
||||
#endif
|
||||
|
|
2
YSFRX.h
2
YSFRX.h
|
@ -63,7 +63,7 @@ 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 writeSamples(uint16_t start);
|
||||
void writeSamples(uint16_t start, uint8_t control);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue