mirror of https://github.com/markqvist/MMDVM.git
More cleanup and adding comments
parent
e1d1faea82
commit
c6e9227aee
61
CalDMR.cpp
61
CalDMR.cpp
|
@ -21,30 +21,36 @@
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "CalDMR.h"
|
#include "CalDMR.h"
|
||||||
|
|
||||||
const uint8_t DATALC_1K[] = {0x00U,
|
// Voice LC Header, CC: 1, srcID: 1, dstID: TG9
|
||||||
|
const uint8_t VH_1K[] = {0x00U,
|
||||||
0x00U, 0x20U, 0x08U, 0x08U, 0x02U, 0x38U, 0x15U, 0x00U, 0x2CU, 0xA0U, 0x14U,
|
0x00U, 0x20U, 0x08U, 0x08U, 0x02U, 0x38U, 0x15U, 0x00U, 0x2CU, 0xA0U, 0x14U,
|
||||||
0x60U, 0x84U, 0x6DU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xDEU, 0x30U, 0x30U,
|
0x60U, 0x84U, 0x6DU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xDEU, 0x30U, 0x30U,
|
||||||
0x01U, 0x10U, 0x01U, 0x40U, 0x03U, 0xC0U, 0x13U, 0xC1U, 0x1EU, 0x80U, 0x6FU};
|
0x01U, 0x10U, 0x01U, 0x40U, 0x03U, 0xC0U, 0x13U, 0xC1U, 0x1EU, 0x80U, 0x6FU};
|
||||||
|
|
||||||
const uint8_t DATATERMLC_1K[] = {0x00U,
|
// Voice Term with LC, CC: 1, srcID: 1, dstID: TG9
|
||||||
|
const uint8_t VT_1K[] = {0x00U,
|
||||||
0x00U, 0x4FU, 0x08U, 0xDCU, 0x02U, 0x88U, 0x15U, 0x78U, 0x2CU, 0xD0U, 0x14U,
|
0x00U, 0x4FU, 0x08U, 0xDCU, 0x02U, 0x88U, 0x15U, 0x78U, 0x2CU, 0xD0U, 0x14U,
|
||||||
0xC0U, 0x84U, 0xADU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xD9U, 0x65U, 0x24U,
|
0xC0U, 0x84U, 0xADU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xD9U, 0x65U, 0x24U,
|
||||||
0x02U, 0x28U, 0x06U, 0x20U, 0x0FU, 0x80U, 0x1BU, 0xC1U, 0x07U, 0x80U, 0x5CU};
|
0x02U, 0x28U, 0x06U, 0x20U, 0x0FU, 0x80U, 0x1BU, 0xC1U, 0x07U, 0x80U, 0x5CU};
|
||||||
|
|
||||||
const uint8_t AMBE_1K[] = {0x00U,
|
// Voice coding data + FEC, 1031 Hz Test Pattern
|
||||||
|
const uint8_t VOICE_1K[] = {0x00U,
|
||||||
0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU, 0xCEU, 0xA8U,
|
0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU, 0xCEU, 0xA8U,
|
||||||
0xFEU, 0x83U, 0xA0U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x0CU, 0xC4U, 0x58U,
|
0xFEU, 0x83U, 0xA0U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x0CU, 0xC4U, 0x58U,
|
||||||
0x20U, 0x0AU, 0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU};
|
0x20U, 0x0AU, 0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU};
|
||||||
|
|
||||||
|
// Embedded LC: CC: 1, srcID: 1, dstID: TG9
|
||||||
const uint8_t SYNCEMB_1K[6][7] = {
|
const uint8_t SYNCEMB_1K[6][7] = {
|
||||||
{0x07U, 0x55U, 0xFDU, 0x7DU, 0xF7U, 0x5FU, 0x70U},
|
{0x07U, 0x55U, 0xFDU, 0x7DU, 0xF7U, 0x5FU, 0x70U}, // MS VOICE SYNC (audio seq 0)
|
||||||
{0x01U, 0x30U, 0x00U, 0x00U, 0x90U, 0x09U, 0x10U},
|
{0x01U, 0x30U, 0x00U, 0x00U, 0x90U, 0x09U, 0x10U}, // EMB + Embedded LC1 (audio seq 1)
|
||||||
{0x01U, 0x70U, 0x00U, 0x90U, 0x00U, 0x07U, 0x40U},
|
{0x01U, 0x70U, 0x00U, 0x90U, 0x00U, 0x07U, 0x40U}, // EMB + Embedded LC2 (audio seq 2)
|
||||||
{0x01U, 0x70U, 0x00U, 0x31U, 0x40U, 0x07U, 0x40U},
|
{0x01U, 0x70U, 0x00U, 0x31U, 0x40U, 0x07U, 0x40U}, // EMB + Embedded LC3 (audio seq 3)
|
||||||
{0x01U, 0x50U, 0xA1U, 0x71U, 0xD1U, 0x70U, 0x70U},
|
{0x01U, 0x50U, 0xA1U, 0x71U, 0xD1U, 0x70U, 0x70U}, // EMB + Embedded LC4 (audio seq 4)
|
||||||
{0x01U, 0x10U, 0x00U, 0x00U, 0x00U, 0x0EU, 0x20U},
|
{0x01U, 0x10U, 0x00U, 0x00U, 0x00U, 0x0EU, 0x20U}}; // EMB (audio seq 5)
|
||||||
};
|
|
||||||
|
|
||||||
|
// Short LC:
|
||||||
|
// TS1: dstID: 0, ACTIVITY_NONE
|
||||||
|
// TS2: dstID: TG9, ACTIVITY_VOICE
|
||||||
const uint8_t SHORTLC_1K[] = {0x33U, 0x3AU, 0xA0U, 0x30U, 0x00U, 0x55U, 0xA6U, 0x5FU, 0x50U};
|
const uint8_t SHORTLC_1K[] = {0x33U, 0x3AU, 0xA0U, 0x30U, 0x00U, 0x55U, 0xA6U, 0x5FU, 0x50U};
|
||||||
|
|
||||||
CCalDMR::CCalDMR() :
|
CCalDMR::CCalDMR() :
|
||||||
|
@ -52,9 +58,9 @@ m_transmit(false),
|
||||||
m_state(DMR1KCAL_IDLE),
|
m_state(DMR1KCAL_IDLE),
|
||||||
m_frame_start(0U),
|
m_frame_start(0U),
|
||||||
m_dmr1k(),
|
m_dmr1k(),
|
||||||
m_rfN(0)
|
m_audioSeq(0)
|
||||||
{
|
{
|
||||||
::memcpy(m_dmr1k, AMBE_1K, DMR_FRAME_LENGTH_BYTES + 1U);
|
::memcpy(m_dmr1k, VOICE_1K, DMR_FRAME_LENGTH_BYTES + 1U);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCalDMR::process()
|
void CCalDMR::process()
|
||||||
|
@ -97,36 +103,35 @@ void CCalDMR::dmr1kcal()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (m_state) {
|
switch (m_state) {
|
||||||
case DMR1KCAL_IDLE:
|
case DMR1KCAL_VH:
|
||||||
dmrTX.setStart(false);
|
|
||||||
dmrTX.resetFifo2();
|
|
||||||
m_rfN = 0U;
|
|
||||||
break;
|
|
||||||
case DMR1KCAL_DATALC:
|
|
||||||
dmrTX.setColorCode(1U);
|
dmrTX.setColorCode(1U);
|
||||||
dmrTX.writeShortLC(SHORTLC_1K, 9U);
|
dmrTX.writeShortLC(SHORTLC_1K, 9U);
|
||||||
dmrTX.writeData2(DATALC_1K, DMR_FRAME_LENGTH_BYTES + 1U);
|
dmrTX.writeData2(VH_1K, DMR_FRAME_LENGTH_BYTES + 1U);
|
||||||
dmrTX.setStart(true);
|
dmrTX.setStart(true);
|
||||||
m_state = DMR1KCAL_VOICE;
|
m_state = DMR1KCAL_VOICE;
|
||||||
break;
|
break;
|
||||||
case DMR1KCAL_VOICE:
|
case DMR1KCAL_VOICE:
|
||||||
createData1k(m_rfN);
|
createData1k(m_audioSeq);
|
||||||
dmrTX.writeData2(m_dmr1k, DMR_FRAME_LENGTH_BYTES + 1U);
|
dmrTX.writeData2(m_dmr1k, DMR_FRAME_LENGTH_BYTES + 1U);
|
||||||
if(m_rfN == 5U) {
|
if(m_audioSeq == 5U) {
|
||||||
m_rfN = 0U;
|
m_audioSeq = 0U;
|
||||||
if(!m_transmit)
|
if(!m_transmit)
|
||||||
m_state = DMR1KCAL_TERMLC;
|
m_state = DMR1KCAL_VT;
|
||||||
} else
|
} else
|
||||||
m_rfN++;
|
m_audioSeq++;
|
||||||
break;
|
break;
|
||||||
case DMR1KCAL_TERMLC:
|
case DMR1KCAL_VT:
|
||||||
dmrTX.writeData2(DATATERMLC_1K, DMR_FRAME_LENGTH_BYTES + 1U);
|
dmrTX.writeData2(VT_1K, DMR_FRAME_LENGTH_BYTES + 1U);
|
||||||
m_frame_start = dmrTX.getFrameCount();
|
m_frame_start = dmrTX.getFrameCount();
|
||||||
m_state = DMR1KCAL_WAIT;
|
m_state = DMR1KCAL_WAIT;
|
||||||
break;
|
break;
|
||||||
case DMR1KCAL_WAIT:
|
case DMR1KCAL_WAIT:
|
||||||
if (dmrTX.getFrameCount() > (m_frame_start + 30U))
|
if (dmrTX.getFrameCount() > (m_frame_start + 30U)) {
|
||||||
|
dmrTX.setStart(false);
|
||||||
|
dmrTX.resetFifo2();
|
||||||
|
m_audioSeq = 0U;
|
||||||
m_state = DMR1KCAL_IDLE;
|
m_state = DMR1KCAL_IDLE;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
m_state = DMR1KCAL_IDLE;
|
m_state = DMR1KCAL_IDLE;
|
||||||
|
@ -142,7 +147,7 @@ uint8_t CCalDMR::write(const uint8_t* data, uint8_t length)
|
||||||
m_transmit = data[0U] == 1U;
|
m_transmit = data[0U] == 1U;
|
||||||
|
|
||||||
if(m_transmit && m_state == DMR1KCAL_IDLE && m_modemState == STATE_DMR1KCAL)
|
if(m_transmit && m_state == DMR1KCAL_IDLE && m_modemState == STATE_DMR1KCAL)
|
||||||
m_state = DMR1KCAL_DATALC;
|
m_state = DMR1KCAL_VH;
|
||||||
|
|
||||||
return 0U;
|
return 0U;
|
||||||
}
|
}
|
||||||
|
|
6
CalDMR.h
6
CalDMR.h
|
@ -25,9 +25,9 @@
|
||||||
|
|
||||||
enum DMR1KCAL {
|
enum DMR1KCAL {
|
||||||
DMR1KCAL_IDLE,
|
DMR1KCAL_IDLE,
|
||||||
DMR1KCAL_DATALC,
|
DMR1KCAL_VH,
|
||||||
DMR1KCAL_VOICE,
|
DMR1KCAL_VOICE,
|
||||||
DMR1KCAL_TERMLC,
|
DMR1KCAL_VT,
|
||||||
DMR1KCAL_WAIT
|
DMR1KCAL_WAIT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ private:
|
||||||
DMR1KCAL m_state;
|
DMR1KCAL m_state;
|
||||||
uint32_t m_frame_start;
|
uint32_t m_frame_start;
|
||||||
uint8_t m_dmr1k[DMR_FRAME_LENGTH_BYTES + 1U];
|
uint8_t m_dmr1k[DMR_FRAME_LENGTH_BYTES + 1U];
|
||||||
uint8_t m_rfN;
|
uint8_t m_audioSeq;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue