diff --git a/ADF7021.cpp b/ADF7021.cpp
index c669ef1..0991779 100644
--- a/ADF7021.cpp
+++ b/ADF7021.cpp
@@ -299,7 +299,7 @@ void IO::rf1Conf(DVM_STATE modemState, bool reset)
{
uint32_t txFrequencyTmp, rxFrequencyTmp;
- DEBUG4("IO::rf1Conf(): configuring ADF for Tx/Rx; modemState/reset/rxGain", modemState, reset, m_gainMode);
+ DEBUG4("IO::rf1Conf(): ADF1 (Tx/Rx); modemState/reset/rxGain", modemState, reset, m_gainMode);
#if defined (ZUMSPOT_ADF7021) || defined(SKYBRIDGE_HS)
io.checkBand(m_rxFrequency, m_txFrequency);
@@ -378,12 +378,16 @@ void IO::rf1Conf(DVM_STATE modemState, bool reset)
AD7021_CONTROL = ADF7021_REG3;
AD7021_1_IOCTL();
+ DEBUG3("IO::rf1Conf(): ADF1 REG3 =", (ADF7021_REG3 >> 16 & 0xFFFFU), (ADF7021_REG3 & 0xFFFFU));
+
/*
** Demodulator Setup (Register 4)
*/
AD7021_CONTROL = ADF7021_REG4;
AD7021_1_IOCTL();
+ DEBUG3("IO::rf1Conf(): ADF1 REG4 =", (ADF7021_REG4 >> 16 & 0xFFFFU), (ADF7021_REG4 & 0xFFFFU));
+
/*
** IF Fine Cal Setup (Register 6)
*/
@@ -410,6 +414,8 @@ void IO::rf1Conf(DVM_STATE modemState, bool reset)
AD7021_CONTROL = ADF7021_REG2;
AD7021_1_IOCTL();
+ DEBUG3("IO::rf1Conf(): ADF1 REG2 =", (ADF7021_REG2 >> 16 & 0xFFFFU), (ADF7021_REG3 & 0xFFFFU));
+
/*
** Test DAC (Register 14)
*/
@@ -446,6 +452,8 @@ void IO::rf1Conf(DVM_STATE modemState, bool reset)
AD7021_CONTROL = ADF7021_REG10;
AD7021_1_IOCTL();
+ DEBUG3("IO::rf1Conf(): ADF1 REG10 =", (ADF7021_REG10 >> 16 & 0xFFFFU), (ADF7021_REG10 & 0xFFFFU));
+
/*
** Sync Word Detect (Register 11)
*/
@@ -464,6 +472,8 @@ void IO::rf1Conf(DVM_STATE modemState, bool reset)
AD7021_CONTROL = ADF7021_REG13;
AD7021_1_IOCTL();
+ DEBUG3("IO::rf1Conf(): ADF1 REG13 =", (ADF7021_REG13 >> 16 & 0xFFFFU), (ADF7021_REG13 & 0xFFFFU));
+
/*
** Test Mode (Register 15)
*/
@@ -493,7 +503,7 @@ void IO::rf1Conf(DVM_STATE modemState, bool reset)
///
void IO::rf2Conf(DVM_STATE modemState)
{
- DEBUG3("IO::rf2Conf(): configuring 2nd ADF for Rx; modemState/rxGain", modemState, m_gainMode);
+ DEBUG3("IO::rf2Conf(): ADF2 (Rx); modemState/rxGain", modemState, m_gainMode);
// configure ADF Tx/RX
configureTxRx(modemState);
@@ -511,12 +521,16 @@ void IO::rf2Conf(DVM_STATE modemState)
AD7021_CONTROL = ADF7021_REG3;
AD7021_2_IOCTL();
+ DEBUG3("IO::rf2Conf(): ADF2 REG3 =", (ADF7021_REG3 >> 16 & 0xFFFFU), (ADF7021_REG3 & 0xFFFFU));
+
/*
** Demodulator Setup (Register 4)
*/
AD7021_CONTROL = ADF7021_REG4;
AD7021_2_IOCTL();
+ DEBUG3("IO::rf2Conf(): ADF2 REG4 =", (ADF7021_REG4 >> 16 & 0xFFFFU), (ADF7021_REG4 & 0xFFFFU));
+
/*
** IF Fine Cal Setup (Register 6)
*/
@@ -545,6 +559,8 @@ void IO::rf2Conf(DVM_STATE modemState)
AD7021_CONTROL = ADF7021_REG2;
AD7021_2_IOCTL();
+ DEBUG3("IO::rf2Conf(): ADF2 REG2 =", (ADF7021_REG2 >> 16 & 0xFFFFU), (ADF7021_REG3 & 0xFFFFU));
+
/*
** Test DAC (Register 14)
*/
@@ -577,6 +593,8 @@ void IO::rf2Conf(DVM_STATE modemState)
AD7021_CONTROL = ADF7021_REG10;
AD7021_2_IOCTL();
+ DEBUG3("IO::rf2Conf(): ADF2 REG10 =", (ADF7021_REG10 >> 16 & 0xFFFFU), (ADF7021_REG10 & 0xFFFFU));
+
/*
** Sync Word Detect (Register 11)
*/
@@ -595,6 +613,8 @@ void IO::rf2Conf(DVM_STATE modemState)
AD7021_CONTROL = ADF7021_REG13;
AD7021_2_IOCTL();
+ DEBUG3("IO::rf2Conf(): ADF2 REG13 =", (ADF7021_REG13 >> 16 & 0xFFFFU), (ADF7021_REG13 & 0xFFFFU));
+
/*
** Test Mode (Register 15)
*/
@@ -636,8 +656,8 @@ void IO::setRFAdjust(int8_t dmrDiscBWAdj, int8_t p25DiscBWAdj, int8_t nxdnDiscBW
m_p25PostBWAdj = p25PostBWAdj;
m_nxdnPostBWAdj = nxdnPostBWADJ;
- DEBUG4("IO::setRFAdjust(): setting RF adjustment, discBW", dmrDiscBWAdj, p25DiscBWAdj, nxdnDiscBWAdj);
- DEBUG4("IO::setRFAdjust(): setting RF adjustment, postBW", dmrPostBWAdj, p25PostBWAdj, nxdnPostBWADJ);
+ DEBUG4("IO::setRFAdjust(): RF adjustment, discBW", dmrDiscBWAdj, p25DiscBWAdj, nxdnDiscBWAdj);
+ DEBUG4("IO::setRFAdjust(): RF adjustment, postBW", dmrPostBWAdj, p25PostBWAdj, nxdnPostBWADJ);
}
///
@@ -654,7 +674,7 @@ void IO::setAFCParams(bool afcEnable, uint8_t afcKI, uint8_t afcKP, uint8_t afcR
m_afcKP = afcKP;
m_afcRange = afcRange;
- DEBUG5("IO::setAFCParams(): setting AFC params", afcEnable, afcKI, afcKP, afcRange);
+ DEBUG5("IO::setAFCParams(): AFC params", afcEnable, afcKI, afcKP, afcRange);
}
///
@@ -673,7 +693,7 @@ void IO::updateCal(DVM_STATE modemState)
AD7021_CONTROL = ADF7021_REG1;
AD7021_1_IOCTL();
- // configure ADF Tx/RX
+ // configure ADF Tx/Rx
configureTxRx(modemState);
/*
@@ -712,7 +732,7 @@ void IO::updateCal(DVM_STATE modemState)
AD7021_CONTROL = ADF7021_REG2;
AD7021_1_IOCTL();
- DEBUG2("IO::updateCal(): updating ADF calibration; modemState", modemState);
+ DEBUG2("IO::updateCal(): ADF calibration; modemState", modemState);
if (m_tx)
setTX();
@@ -881,7 +901,7 @@ void IO::configureBand()
else
f_div = 1U;
- DEBUG3("IO::configureBand(): configuring ADF freq band; reg1/f_div", ADF7021_REG1, f_div);
+ DEBUG3("IO::configureBand(): ADF freq band; reg1/f_div", ADF7021_REG1, f_div);
}
///
@@ -1093,7 +1113,7 @@ void IO::configureTxRx(DVM_STATE modemState)
ADF7021_REG4 |= (uint32_t)ADF7021_REG4_INV_CLKDAT << 8; // Clock/Data Inversion
ADF7021_REG4 |= (uint32_t)(dmrDiscBW & 0x3FFU) << 10; // Discriminator BW
ADF7021_REG4 |= (uint32_t)(dmrPostBW & 0xFFFU) << 20; // Post Demod BW
- ADF7021_REG4 |= (uint32_t)ADF7021_REG4_IF_125K << 30; // IF Filter
+ ADF7021_REG4 |= (uint32_t)ADF7021_REG4_IF_25K << 30; // IF Filter
/*
** 3FSK/4FSK Demod (Register 13)
@@ -1109,7 +1129,7 @@ void IO::configureTxRx(DVM_STATE modemState)
ADF7021_REG2 |= (uint32_t)ADF7021_REG2_PA_DEF << 7; // PA Enable & PA Bias
ADF7021_REG2 |= (uint32_t)(m_rfPower & 0x3FU) << 13; // PA Level (0 - Off, 63 - 13 dBm)
ADF7021_REG2 |= (uint32_t)(dmrDev / div2) << 19; // Freq. Deviation
- ADF7021_REG2 |= (uint32_t)ADF7021_REG2_INV_CLKDAT << 28; // Clock/Data Inversion
+ ADF7021_REG2 |= (uint32_t)ADF7021_REG2_INV_DATA << 28; // Data Inversion
ADF7021_REG2 |= (uint32_t)ADF7021_REG2_RC_5 << 30; // R-Cosine Alpha
}
break;
@@ -1172,7 +1192,7 @@ void IO::configureTxRx(DVM_STATE modemState)
ADF7021_REG4 |= (uint32_t)ADF7021_REG4_INV_CLKDAT << 8; // Clock/Data Inversion
ADF7021_REG4 |= (uint32_t)(p25DiscBW & 0x3FFU) << 10; // Discriminator BW
ADF7021_REG4 |= (uint32_t)(p25PostBW & 0xFFFU) << 20; // Post Demod BW
- ADF7021_REG4 |= (uint32_t)ADF7021_REG4_IF_125K << 30; // IF Filter
+ ADF7021_REG4 |= (uint32_t)ADF7021_REG4_IF_25K << 30; // IF Filter
/*
** 3FSK/4FSK Demod (Register 13)
@@ -1263,7 +1283,7 @@ void IO::configureTxRx(DVM_STATE modemState)
ADF7021_REG4 |= (uint32_t)ADF7021_REG4_INV_CLKDAT << 8; // Clock/Data Inversion
ADF7021_REG4 |= (uint32_t)(nxdnDiscBW & 0x3FFU) << 10; // Discriminator BW
ADF7021_REG4 |= (uint32_t)(nxdnPostBW & 0xFFFU) << 20; // Post Demod BW
- ADF7021_REG4 |= (uint32_t)ADF7021_REG4_IF_125K << 30; // IF Filter
+ ADF7021_REG4 |= (uint32_t)ADF7021_REG4_IF_1875K << 30; // IF Filter
/*
** 3FSK/4FSK Demod (Register 13)
@@ -1363,12 +1383,6 @@ void IO::configureTxRx(DVM_STATE modemState)
break;
}
- DEBUG3("IO::configureTxRx(): ADF7021_REG3 =", (ADF7021_REG3 >> 16 & 0xFFFFU), (ADF7021_REG3 & 0xFFFFU));
- DEBUG3("IO::configureTxRx(): ADF7021_REG10 =", (ADF7021_REG10 >> 16 & 0xFFFFU), (ADF7021_REG10 & 0xFFFFU));
- DEBUG3("IO::configureTxRx(): ADF7021_REG4 =", (ADF7021_REG4 >> 16 & 0xFFFFU), (ADF7021_REG4 & 0xFFFFU));
- DEBUG3("IO::configureTxRx(): ADF7021_REG13 =", (ADF7021_REG13 >> 16 & 0xFFFFU), (ADF7021_REG13 & 0xFFFFU));
- DEBUG3("IO::configureTxRx(): ADF7021_REG2 =", (ADF7021_REG2 >> 16 & 0xFFFFU), (ADF7021_REG3 & 0xFFFFU));
-
DEBUG5("IO::configureTxRx(): ADF Tx/Rx values; dmrDiscBW/dmrPostBW/p25DiscBW/p25PostBW", dmrDiscBW, dmrPostBW, p25DiscBW, p25PostBW);
DEBUG3("IO::configureTxRx(): ADF Tx/Rx values; nxdnDiscBW/nxdnPostBW", nxdnDiscBW, nxdnPostBW);
DEBUG5("IO::configureTxRx(): ADF Tx/Rx values; dmrSymDev/p25SymDev/nxdnSymDev/rfPower", (uint16_t)((ADF7021_PFD * dmrDev) / (f_div * 65536)),
diff --git a/IO.cpp b/IO.cpp
index f6c0330..952e3e0 100644
--- a/IO.cpp
+++ b/IO.cpp
@@ -110,8 +110,6 @@ void IO::process()
if (m_modemState == STATE_DMR && m_tx)
dmrTX.setStart(false);
#endif
- m_modemState = STATE_IDLE;
- setMode(m_modemState);
}
m_watchdog = 0U;
diff --git a/dmr/DMRSlotRX.cpp b/dmr/DMRSlotRX.cpp
index 3c87ea7..2c6cf96 100644
--- a/dmr/DMRSlotRX.cpp
+++ b/dmr/DMRSlotRX.cpp
@@ -94,17 +94,12 @@ void DMRSlotRX::start()
///
void DMRSlotRX::reset()
{
- m_syncPtr = 0U;
m_dataPtr = 0U;
m_delayPtr = 0U;
m_bitBuffer = 0U;
- m_control = CONTROL_NONE;
- m_syncCount = 0U;
- m_state = DMRRXS_NONE;
- m_startPtr = 0U;
- m_endPtr = NOENDPTR;
+ resetSlot();
}
///
@@ -228,8 +223,7 @@ bool DMRSlotRX::databit(bool bit)
if (m_syncCount >= MAX_SYNC_LOST_FRAMES) {
DEBUG1("DMRSlotRX: databit(): sync timeout, lost lock");
serial.writeDMRLost(m_slot);
- m_state = DMRRXS_NONE;
- m_endPtr = NOENDPTR;
+ resetSlot();
}
}
@@ -251,6 +245,9 @@ bool DMRSlotRX::databit(bool bit)
}
}
}
+
+ // end of this slot, reset some items for the next slot
+ m_control = CONTROL_NONE;
}
m_dataPtr++;
@@ -347,6 +344,22 @@ void DMRSlotRX::correlateSync()
}
}
+///
+///
+///
+void DMRSlotRX::resetSlot()
+{
+ m_syncPtr = 0U;
+
+ m_control = CONTROL_NONE;
+ m_syncCount = 0U;
+ m_state = DMRRXS_NONE;
+ m_startPtr = 0U;
+ m_endPtr = NOENDPTR;
+ m_type = 0U;
+ m_n = 0U;
+}
+
///
///
///
diff --git a/dmr/DMRSlotRX.h b/dmr/DMRSlotRX.h
index 6d7fa0d..bc60de4 100644
--- a/dmr/DMRSlotRX.h
+++ b/dmr/DMRSlotRX.h
@@ -102,6 +102,8 @@ namespace dmr
/// Frame synchronization correlator.
void correlateSync();
+ ///
+ void resetSlot();
///
void bitsToBytes(uint16_t start, uint8_t count, uint8_t* buffer);
diff --git a/nxdn/NXDNRX.cpp b/nxdn/NXDNRX.cpp
index d62e41e..f5afc21 100644
--- a/nxdn/NXDNRX.cpp
+++ b/nxdn/NXDNRX.cpp
@@ -57,7 +57,6 @@ NXDNRX::NXDNRX() :
m_outBuffer(),
m_buffer(NULL),
m_dataPtr(0U),
- m_endPtr(NOENDPTR),
m_lostCount(0U),
m_state(NXDNRXS_NONE)
{
@@ -73,8 +72,6 @@ void NXDNRX::reset()
m_bitBuffer = 0x00U;
m_dataPtr = 0U;
- m_endPtr = NOENDPTR;
-
m_lostCount = 0U;
m_state = NXDNRXS_NONE;
@@ -90,23 +87,13 @@ void NXDNRX::databit(bool bit)
if (bit)
m_bitBuffer |= 0x01U;
- if (m_state != NXDNRXS_NONE) {
- _WRITE_BIT(m_buffer, m_dataPtr, bit);
-
- m_dataPtr++;
- if (m_dataPtr > NXDN_FRAME_LENGTH_BITS) {
- reset();
- }
- }
-
if (m_state == NXDNRXS_DATA) {
processData(bit);
}
else {
-
bool ret = correlateSync(true);
if (ret) {
- DEBUG3("NXDNRX: databit(): dataPtr/endPtr", m_dataPtr, m_endPtr);
+ DEBUG2("NXDNRX: databit(): dataPtr", m_dataPtr);
m_state = NXDNRXS_DATA;
}
@@ -124,13 +111,20 @@ void NXDNRX::databit(bool bit)
///
void NXDNRX::processData(bool bit)
{
+ _WRITE_BIT(m_buffer, m_dataPtr, bit);
+
+ m_dataPtr++;
+ if (m_dataPtr > NXDN_FRAME_LENGTH_BITS) {
+ reset();
+ }
+
// only search for a sync in the right place +-2 bits
if (m_dataPtr >= (NXDN_FSW_LENGTH_BITS - 2U) && m_dataPtr <= (NXDN_FSW_LENGTH_BITS + 2U)) {
correlateSync();
}
// process frame
- if (m_dataPtr == m_endPtr) {
+ if (m_dataPtr == NXDN_FRAME_LENGTH_BITS) {
m_lostCount--;
// we've not seen a data sync for too long, signal sync lost and change to NXDNRXS_NONE
@@ -187,9 +181,8 @@ bool NXDNRX::correlateSync(bool first)
m_lostCount = MAX_FSW_FRAMES;
m_dataPtr = NXDN_FSW_LENGTH_BITS;
- m_endPtr = NXDN_FRAME_LENGTH_BITS;
- DEBUG3("NXDNRX: correlateSync(): dataPtr/endPtr", m_dataPtr, m_endPtr);
+ DEBUG2("NXDNRX: correlateSync(): dataPtr", m_dataPtr);
return true;
}
diff --git a/nxdn/NXDNRX.h b/nxdn/NXDNRX.h
index 56669d5..7d07d16 100644
--- a/nxdn/NXDNRX.h
+++ b/nxdn/NXDNRX.h
@@ -68,8 +68,6 @@ namespace nxdn
uint16_t m_dataPtr;
- uint16_t m_endPtr;
-
uint16_t m_lostCount;
NXDNRX_STATE m_state;