diff --git a/CalDMR.cpp b/CalDMR.cpp index 19039be..c6f028f 100644 --- a/CalDMR.cpp +++ b/CalDMR.cpp @@ -21,30 +21,36 @@ #include "Globals.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, 0x60U, 0x84U, 0x6DU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xDEU, 0x30U, 0x30U, 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, 0xC0U, 0x84U, 0xADU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xD9U, 0x65U, 0x24U, 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, 0xFEU, 0x83U, 0xA0U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x0CU, 0xC4U, 0x58U, 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] = { - {0x07U, 0x55U, 0xFDU, 0x7DU, 0xF7U, 0x5FU, 0x70U}, - {0x01U, 0x30U, 0x00U, 0x00U, 0x90U, 0x09U, 0x10U}, - {0x01U, 0x70U, 0x00U, 0x90U, 0x00U, 0x07U, 0x40U}, - {0x01U, 0x70U, 0x00U, 0x31U, 0x40U, 0x07U, 0x40U}, - {0x01U, 0x50U, 0xA1U, 0x71U, 0xD1U, 0x70U, 0x70U}, - {0x01U, 0x10U, 0x00U, 0x00U, 0x00U, 0x0EU, 0x20U}, - }; + {0x07U, 0x55U, 0xFDU, 0x7DU, 0xF7U, 0x5FU, 0x70U}, // MS VOICE SYNC (audio seq 0) + {0x01U, 0x30U, 0x00U, 0x00U, 0x90U, 0x09U, 0x10U}, // EMB + Embedded LC1 (audio seq 1) + {0x01U, 0x70U, 0x00U, 0x90U, 0x00U, 0x07U, 0x40U}, // EMB + Embedded LC2 (audio seq 2) + {0x01U, 0x70U, 0x00U, 0x31U, 0x40U, 0x07U, 0x40U}, // EMB + Embedded LC3 (audio seq 3) + {0x01U, 0x50U, 0xA1U, 0x71U, 0xD1U, 0x70U, 0x70U}, // EMB + Embedded LC4 (audio seq 4) + {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}; CCalDMR::CCalDMR() : @@ -52,9 +58,9 @@ m_transmit(false), m_state(DMR1KCAL_IDLE), m_frame_start(0U), 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() @@ -97,36 +103,35 @@ void CCalDMR::dmr1kcal() return; switch (m_state) { - case DMR1KCAL_IDLE: - dmrTX.setStart(false); - dmrTX.resetFifo2(); - m_rfN = 0U; - break; - case DMR1KCAL_DATALC: + case DMR1KCAL_VH: dmrTX.setColorCode(1U); 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); m_state = DMR1KCAL_VOICE; break; case DMR1KCAL_VOICE: - createData1k(m_rfN); + createData1k(m_audioSeq); dmrTX.writeData2(m_dmr1k, DMR_FRAME_LENGTH_BYTES + 1U); - if(m_rfN == 5U) { - m_rfN = 0U; + if(m_audioSeq == 5U) { + m_audioSeq = 0U; if(!m_transmit) - m_state = DMR1KCAL_TERMLC; + m_state = DMR1KCAL_VT; } else - m_rfN++; + m_audioSeq++; break; - case DMR1KCAL_TERMLC: - dmrTX.writeData2(DATATERMLC_1K, DMR_FRAME_LENGTH_BYTES + 1U); + case DMR1KCAL_VT: + dmrTX.writeData2(VT_1K, DMR_FRAME_LENGTH_BYTES + 1U); m_frame_start = dmrTX.getFrameCount(); m_state = DMR1KCAL_WAIT; break; 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; + } break; default: m_state = DMR1KCAL_IDLE; @@ -142,7 +147,7 @@ uint8_t CCalDMR::write(const uint8_t* data, uint8_t length) m_transmit = data[0U] == 1U; if(m_transmit && m_state == DMR1KCAL_IDLE && m_modemState == STATE_DMR1KCAL) - m_state = DMR1KCAL_DATALC; + m_state = DMR1KCAL_VH; return 0U; } diff --git a/CalDMR.h b/CalDMR.h index 9aa37c0..1fbae4e 100644 --- a/CalDMR.h +++ b/CalDMR.h @@ -25,9 +25,9 @@ enum DMR1KCAL { DMR1KCAL_IDLE, - DMR1KCAL_DATALC, + DMR1KCAL_VH, DMR1KCAL_VOICE, - DMR1KCAL_TERMLC, + DMR1KCAL_VT, DMR1KCAL_WAIT }; @@ -46,7 +46,7 @@ private: DMR1KCAL m_state; uint32_t m_frame_start; uint8_t m_dmr1k[DMR_FRAME_LENGTH_BYTES + 1U]; - uint8_t m_rfN; + uint8_t m_audioSeq; }; #endif