Code reordering and cleanup

This commit is contained in:
Andy CA6JAU 2018-01-04 01:10:33 -03:00
parent 4871ad1210
commit e1d1faea82
4 changed files with 51 additions and 89 deletions

View File

@ -31,48 +31,30 @@ const uint8_t DATATERMLC_1K[] = {0x00U,
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 VOICE0_1K[] = {0x00U,
const uint8_t AMBE_1K[] = {0x00U,
0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU, 0xCEU, 0xA8U,
0xFEU, 0x83U, 0xA7U, 0x55U, 0xFDU, 0x7DU, 0xF7U, 0x5FU, 0x7CU, 0xC4U, 0x58U,
0xFEU, 0x83U, 0xA0U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x0CU, 0xC4U, 0x58U,
0x20U, 0x0AU, 0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU};
//0xA1U, 0x30U, 0x00U, 0x00U, 0x90U, 0x09U, 0x1CU,
const uint8_t VOICE1_1K[] = {0x00U,
0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU, 0xCEU, 0xA8U,
0xFEU, 0x83U, 0xA1U, 0x30U, 0x00U, 0x00U, 0x90U, 0x09U, 0x1CU, 0xC4U, 0x58U,
0x20U, 0x0AU, 0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU};
//0xA1U, 0x70U, 0x00U, 0x90U, 0x00U, 0x07U, 0x4CU,
const uint8_t VOICE2_1K[] = {0x00U,
0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU, 0xCEU, 0xA8U,
0xFEU, 0x83U, 0xA1U, 0x70U, 0x00U, 0x90U, 0x00U, 0x07U, 0x4CU, 0xC4U, 0x58U,
0x20U, 0x0AU, 0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU};
//0xA1U, 0x70U, 0x00U, 0x31U, 0x40U, 0x07U, 0x4CU,
const uint8_t VOICE3_1K[] = {0x00U,
0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU, 0xCEU, 0xA8U,
0xFEU, 0x83U, 0xA1U, 0x70U, 0x00U, 0x31U, 0x40U, 0x07U, 0x4CU, 0xC4U, 0x58U,
0x20U, 0x0AU, 0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU};
//0xA1U, 0x50U, 0xA1U, 0x71U, 0xD1U, 0x70U, 0x7CU,
const uint8_t VOICE4_1K[] = {0x00U,
0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU, 0xCEU, 0xA8U,
0xFEU, 0x83U, 0xA1U, 0x50U, 0xA1U, 0x71U, 0xD1U, 0x70U, 0x7CU, 0xC4U, 0x58U,
0x20U, 0x0AU, 0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU};
//0xA1U, 0x10U, 0x00U, 0x00U, 0x00U, 0x0EU, 0x2CU,
const uint8_t VOICE5_1K[] = {0x00U,
0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU, 0xCEU, 0xA8U,
0xFEU, 0x83U, 0xA1U, 0x10U, 0x00U, 0x00U, 0x00U, 0x0EU, 0x2CU, 0xC4U, 0x58U,
0x20U, 0x0AU, 0xCEU, 0xA8U, 0xFEU, 0x83U, 0xACU, 0xC4U, 0x58U, 0x20U, 0x0AU};
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},
};
const uint8_t SHORTLC_1K[] = {0x33U, 0x3AU, 0xA0U, 0x30U, 0x00U, 0x55U, 0xA6U, 0x5FU, 0x50U};
CCalDMR::CCalDMR() :
m_transmit(false),
m_state(DMR1KCAL_IDLE),
m_frame_start(0U)
m_frame_start(0U),
m_dmr1k(),
m_rfN(0)
{
::memcpy(m_dmr1k, AMBE_1K, DMR_FRAME_LENGTH_BYTES + 1U);
}
void CCalDMR::process()
@ -95,70 +77,52 @@ void CCalDMR::process()
}
}
void CCalDMR::createData1k(uint8_t n)
{
for(uint8_t i = 0; i < 5U; i++)
m_dmr1k[i + 15U] = SYNCEMB_1K[n][i + 1U];
m_dmr1k[14U] &= 0xF0U;
m_dmr1k[20U] &= 0x0FU;
m_dmr1k[14U] |= SYNCEMB_1K[n][0] & 0x0FU;
m_dmr1k[20U] |= SYNCEMB_1K[n][6] & 0xF0U;
}
void CCalDMR::dmr1kcal()
{
dmrTX.process();
uint16_t space = dmrTX.getSpace2();
if (space < 1U)
return;
switch (m_state) {
case DMR1KCAL_IDLE:
dmrTX.setStart(false);
dmrTX.resetFifo2();
m_state = DMR1KCAL_IDLE;
m_rfN = 0U;
break;
case DMR1KCAL_DATALC:
dmrTX.setColorCode(1U);
dmrTX.writeShortLC(SHORTLC_1K, 9U);
dmrTX.writeData2(DATALC_1K, DMR_FRAME_LENGTH_BYTES + 1U);
dmrTX.setStart(true);
if (dmrTX.writeData2(DATALC_1K, DMR_FRAME_LENGTH_BYTES + 1U) == 5U)
m_state = DMR1KCAL_DATALC;
else
m_state = DMR1KCAL_V0;
m_state = DMR1KCAL_VOICE;
break;
case DMR1KCAL_V0:
if (dmrTX.writeData2(VOICE0_1K, DMR_FRAME_LENGTH_BYTES + 1U) == 5U)
m_state = DMR1KCAL_V0;
else
m_state = DMR1KCAL_V1;
break;
case DMR1KCAL_V1:
if (dmrTX.writeData2(VOICE1_1K, DMR_FRAME_LENGTH_BYTES + 1U) == 5U)
m_state = DMR1KCAL_V1;
else
m_state = DMR1KCAL_V2;
break;
case DMR1KCAL_V2:
if (dmrTX.writeData2(VOICE2_1K, DMR_FRAME_LENGTH_BYTES + 1U) == 5U)
m_state = DMR1KCAL_V2;
else
m_state = DMR1KCAL_V3;
break;
case DMR1KCAL_V3:
if (dmrTX.writeData2(VOICE3_1K, DMR_FRAME_LENGTH_BYTES + 1U) == 5U)
m_state = DMR1KCAL_V3;
else
m_state = DMR1KCAL_V4;
break;
case DMR1KCAL_V4:
if (dmrTX.writeData2(VOICE4_1K, DMR_FRAME_LENGTH_BYTES + 1U) == 5U)
m_state = DMR1KCAL_V4;
else
m_state = DMR1KCAL_V5;
break;
case DMR1KCAL_V5:
if (dmrTX.writeData2(VOICE5_1K, DMR_FRAME_LENGTH_BYTES + 1U) == 5U)
m_state = DMR1KCAL_V5;
else {
if(m_transmit)
m_state = DMR1KCAL_V0;
else
case DMR1KCAL_VOICE:
createData1k(m_rfN);
dmrTX.writeData2(m_dmr1k, DMR_FRAME_LENGTH_BYTES + 1U);
if(m_rfN == 5U) {
m_rfN = 0U;
if(!m_transmit)
m_state = DMR1KCAL_TERMLC;
}
} else
m_rfN++;
break;
case DMR1KCAL_TERMLC:
if (dmrTX.writeData2(DATATERMLC_1K, DMR_FRAME_LENGTH_BYTES + 1U) == 5U)
m_state = DMR1KCAL_TERMLC;
else {
m_state = DMR1KCAL_WAIT;
dmrTX.writeData2(DATATERMLC_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))

View File

@ -26,12 +26,7 @@
enum DMR1KCAL {
DMR1KCAL_IDLE,
DMR1KCAL_DATALC,
DMR1KCAL_V0,
DMR1KCAL_V1,
DMR1KCAL_V2,
DMR1KCAL_V3,
DMR1KCAL_V4,
DMR1KCAL_V5,
DMR1KCAL_VOICE,
DMR1KCAL_TERMLC,
DMR1KCAL_WAIT
};
@ -42,6 +37,7 @@ public:
void process();
void dmr1kcal();
void createData1k(uint8_t n);
uint8_t write(const uint8_t* data, uint8_t length);
@ -49,6 +45,8 @@ private:
bool m_transmit;
DMR1KCAL m_state;
uint32_t m_frame_start;
uint8_t m_dmr1k[DMR_FRAME_LENGTH_BYTES + 1U];
uint8_t m_rfN;
};
#endif

View File

@ -77,7 +77,7 @@ void loop()
if (m_dstarEnable && m_modemState == STATE_DSTAR)
dstarTX.process();
if ((m_dmrEnable && m_modemState == STATE_DMR) || m_modemState == STATE_DMR1KCAL) {
if (m_dmrEnable && m_modemState == STATE_DMR) {
if (m_duplex)
dmrTX.process();
else

View File

@ -74,7 +74,7 @@ void loop()
if (m_dstarEnable && m_modemState == STATE_DSTAR)
dstarTX.process();
if ((m_dmrEnable && m_modemState == STATE_DMR) || m_modemState == STATE_DMR1KCAL) {
if (m_dmrEnable && m_modemState == STATE_DMR) {
if (m_duplex)
dmrTX.process();
else