From b846e5a7f3b1a5f0ffc7aab43a8e7b1d73e641c5 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sat, 30 Dec 2017 20:47:48 -0300 Subject: [PATCH] Adding 80 Hz square wave test signal support --- DMRTX.cpp | 29 +++++++++++++++++++++++++---- Globals.h | 1 + MMDVM.cpp | 2 +- MMDVM.ino | 2 +- SerialPort.cpp | 16 +++++++++++++--- 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/DMRTX.cpp b/DMRTX.cpp index 0c5d055..20b7b6d 100644 --- a/DMRTX.cpp +++ b/DMRTX.cpp @@ -302,12 +302,33 @@ void CDMRTX::createData(uint8_t slotIndex) void CDMRTX::createCal() { - for (unsigned int i = 0U; i < DMR_FRAME_LENGTH_BYTES; i++) { - m_poBuffer[i] = 0x5FU; // +3, +3, -3, -3 pattern for deviation cal. - m_markBuffer[i] = MARK_NONE; + // 1.2 kHz sine wave generation + if (m_modemState == STATE_DMRCAL) { + for (unsigned int i = 0U; i < DMR_FRAME_LENGTH_BYTES; i++) { + m_poBuffer[i] = 0x5FU; // +3, +3, -3, -3 pattern for deviation cal. + m_markBuffer[i] = MARK_NONE; + } + + m_poLen = DMR_FRAME_LENGTH_BYTES; + } + + // 80 Hz square wave generation + if (m_modemState == STATE_LFCAL) { + for (unsigned int i = 0U; i < 7U; i++) { + m_poBuffer[i] = 0x55U; // +3, +3, ... pattern + m_markBuffer[i] = MARK_NONE; + } + + m_poBuffer[7U] = 0x5FU; // +3, +3, -3, -3 pattern + + for (unsigned int i = 8U; i < 15U; i++) { + m_poBuffer[i] = 0xFFU; // -3, -3, ... pattern + m_markBuffer[i] = MARK_NONE; + } + + m_poLen = 15U; } - m_poLen = DMR_FRAME_LENGTH_BYTES; m_poPtr = 0U; } diff --git a/Globals.h b/Globals.h index 02c0502..e6aab33 100644 --- a/Globals.h +++ b/Globals.h @@ -50,6 +50,7 @@ enum MMDVM_STATE { STATE_P25 = 4, // Dummy states start at 90 + STATE_LFCAL = 95, STATE_RSSICAL = 96, STATE_CWID = 97, STATE_DMRCAL = 98, diff --git a/MMDVM.cpp b/MMDVM.cpp index 12673e4..879ea7e 100644 --- a/MMDVM.cpp +++ b/MMDVM.cpp @@ -93,7 +93,7 @@ void loop() if (m_modemState == STATE_DSTARCAL) calDStarTX.process(); - if (m_modemState == STATE_DMRCAL) + if (m_modemState == STATE_DMRCAL || m_modemState == STATE_LFCAL) calDMR.process(); if (m_modemState == STATE_IDLE) diff --git a/MMDVM.ino b/MMDVM.ino index 0aaedb4..e476ea4 100644 --- a/MMDVM.ino +++ b/MMDVM.ino @@ -90,7 +90,7 @@ void loop() if (m_modemState == STATE_DSTARCAL) calDStarTX.process(); - if (m_modemState == STATE_DMRCAL) + if (m_modemState == STATE_DMRCAL || m_modemState == STATE_LFCAL) calDMR.process(); if (m_modemState == STATE_IDLE) diff --git a/SerialPort.cpp b/SerialPort.cpp index e55769d..304409d 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -243,7 +243,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length) MMDVM_STATE modemState = MMDVM_STATE(data[3U]); - if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_RSSICAL) + if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_RSSICAL && modemState != STATE_LFCAL) return 4U; if (modemState == STATE_DSTAR && !dstarEnable) return 4U; @@ -309,7 +309,7 @@ uint8_t CSerialPort::setMode(const uint8_t* data, uint8_t length) if (modemState == m_modemState) return 0U; - if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_RSSICAL) + if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_RSSICAL && modemState != STATE_LFCAL) return 4U; if (modemState == STATE_DSTAR && !m_dstarEnable) return 4U; @@ -392,6 +392,16 @@ void CSerialPort::setMode(MMDVM_STATE modemState) p25RX.reset(); cwIdTX.reset(); break; + case STATE_LFCAL: + DEBUG1("Mode set to 80 Hz Calibrate"); + dmrIdleRX.reset(); + dmrDMORX.reset(); + dmrRX.reset(); + dstarRX.reset(); + ysfRX.reset(); + p25RX.reset(); + cwIdTX.reset(); + break; default: DEBUG1("Mode set to Idle"); // STATE_IDLE @@ -473,7 +483,7 @@ void CSerialPort::process() case MMDVM_CAL_DATA: if (m_modemState == STATE_DSTARCAL) err = calDStarTX.write(m_buffer + 3U, m_len - 3U); - if (m_modemState == STATE_DMRCAL) + if (m_modemState == STATE_DMRCAL || m_modemState == STATE_LFCAL) err = calDMR.write(m_buffer + 3U, m_len - 3U); if (err == 0U) { sendACK();