From d99e21f0f97e42ddfc99c63e6edfb8519a616ad2 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Wed, 10 Jan 2018 20:04:29 -0300 Subject: [PATCH 1/7] Reducing the bit error number for the EOT sequence (D-Star) --- DStarRX.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DStarRX.cpp b/DStarRX.cpp index a6a4e34..f14f3fd 100644 --- a/DStarRX.cpp +++ b/DStarRX.cpp @@ -43,7 +43,7 @@ const uint8_t DATA_SYNC_ERRS = 2U; // D-Star bit order version of 0x55 0x55 0xC8 0x7A const uint32_t END_SYNC_DATA = 0xAAAA135EU; const uint32_t END_SYNC_MASK = 0xFFFFFFFFU; -const uint8_t END_SYNC_ERRS = 3U; +const uint8_t END_SYNC_ERRS = 1U; const uint8_t BIT_MASK_TABLE0[] = {0x7FU, 0xBFU, 0xDFU, 0xEFU, 0xF7U, 0xFBU, 0xFDU, 0xFEU}; const uint8_t BIT_MASK_TABLE1[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; From d69df42de43c880bf87e4fbabffb7c07969f2172 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 11 Jan 2018 18:29:58 +0000 Subject: [PATCH 2/7] Add the NXDN TX preamble. --- NXDNTX.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/NXDNTX.cpp b/NXDNTX.cpp index 2e2ca0a..b3fb55c 100644 --- a/NXDNTX.cpp +++ b/NXDNTX.cpp @@ -34,8 +34,8 @@ const q15_t NXDN_LEVELB = 561; const q15_t NXDN_LEVELC = -561; const q15_t NXDN_LEVELD = -1683; -const uint8_t NXDN_START_SYNC = 0x77U; -const uint8_t NXDN_END_SYNC = 0xFFU; +const uint8_t NXDN_PREAMBLE[] = {0x57U, 0x75U, 0xFDU}; +const uint8_t NXDN_SYNC = 0x5FU; CNXDNTX::CNXDNTX() : m_buffer(1500U), @@ -62,7 +62,10 @@ void CNXDNTX::process() if (m_poLen == 0U) { if (!m_tx) { for (uint16_t i = 0U; i < m_txDelay; i++) - m_poBuffer[m_poLen++] = NXDN_START_SYNC; + m_poBuffer[m_poLen++] = NXDN_SYNC; + m_poBuffer[m_poLen++] = NXDN_PREAMBLE[0U]; + m_poBuffer[m_poLen++] = NXDN_PREAMBLE[1U]; + m_poBuffer[m_poLen++] = NXDN_PREAMBLE[2U]; } else { for (uint8_t i = 0U; i < NXDN_FRAME_LENGTH_BYTES; i++) { uint8_t c = m_buffer.get(); From c59c32b350446ba8b616319a3142ab93ebb5bc2c Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 11 Jan 2018 19:47:23 +0000 Subject: [PATCH 3/7] Incorporate NXDN specification values for errors. --- NXDNRX.cpp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/NXDNRX.cpp b/NXDNRX.cpp index 6087579..79bf10e 100644 --- a/NXDNRX.cpp +++ b/NXDNRX.cpp @@ -23,10 +23,9 @@ const q15_t SCALING_FACTOR = 18750; // Q15(0.55) -const uint8_t MAX_FSW_BIT_START_ERRS = 2U; -const uint8_t MAX_FSW_BIT_RUN_ERRS = 4U; +const uint8_t MAX_FSW_BIT_ERRS = 2U; -const uint8_t MAX_FSW_SYMBOLS_ERRS = 3U; +const uint8_t MAX_FSW_SYMBOLS_ERRS = 1U; const uint8_t BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; @@ -36,7 +35,7 @@ const uint8_t NOAVEPTR = 99U; const uint16_t NOENDPTR = 9999U; -const unsigned int MAX_FSW_FRAMES = 4U + 1U; +const unsigned int MAX_FSW_FRAMES = 5U + 1U; CNXDNRX::CNXDNRX() : m_state(NXDNRXS_NONE), @@ -256,17 +255,11 @@ bool CNXDNRX::correlateFSW() uint8_t sync[NXDN_FSW_BYTES_LENGTH]; samplesToBits(startPtr, NXDN_FSW_LENGTH_SYMBOLS, sync, 0U, m_centreVal, m_thresholdVal); - uint8_t maxErrs; - if (m_state == NXDNRXS_NONE) - maxErrs = MAX_FSW_BIT_START_ERRS; - else - maxErrs = MAX_FSW_BIT_RUN_ERRS; - uint8_t errs = 0U; for (uint8_t i = 0U; i < NXDN_FSW_BYTES_LENGTH; i++) errs += countBits8((sync[i] & NXDN_FSW_BYTES_MASK[i]) ^ NXDN_FSW_BYTES[i]); - if (errs <= maxErrs) { + if (errs <= MAX_FSW_BIT_ERRS) { m_maxCorr = corr; m_lostCount = MAX_FSW_FRAMES; m_fswPtr = m_dataPtr; @@ -388,8 +381,8 @@ void CNXDNRX::writeRSSIData(uint8_t* data) if (m_rssiCount > 0U) { uint16_t rssi = m_rssiAccum / m_rssiCount; - data[121U] = (rssi >> 8) & 0xFFU; - data[122U] = (rssi >> 0) & 0xFFU; + data[49U] = (rssi >> 8) & 0xFFU; + data[50U] = (rssi >> 0) & 0xFFU; serial.writeNXDNData(data, NXDN_FRAME_LENGTH_BYTES + 3U); } else { From 615c705044abca3e9546d94d100e4ce0d819c823 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 15 Jan 2018 20:07:00 +0000 Subject: [PATCH 4/7] Fix byte ordering for NXDN syncs. --- NXDNDefines.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NXDNDefines.h b/NXDNDefines.h index 956ffaf..cbb7731 100644 --- a/NXDNDefines.h +++ b/NXDNDefines.h @@ -30,8 +30,8 @@ const unsigned int NXDN_FSW_LENGTH_BITS = 20U; const unsigned int NXDN_FSW_LENGTH_SYMBOLS = NXDN_FSW_LENGTH_BITS / 2U; const unsigned int NXDN_FSW_LENGTH_SAMPLES = NXDN_FSW_LENGTH_SYMBOLS * NXDN_RADIO_SYMBOL_LENGTH; -const uint8_t NXDN_FSW_BYTES[] = {0x0CU, 0xDFU, 0x59U}; -const uint8_t NXDN_FSW_BYTES_MASK[] = {0x0FU, 0xFFU, 0xFFU}; +const uint8_t NXDN_FSW_BYTES[] = {0xCDU, 0xF5U, 0x90U}; +const uint8_t NXDN_FSW_BYTES_MASK[] = {0xFFU, 0xFFU, 0xF0U}; const uint8_t NXDN_FSW_BYTES_LENGTH = 3U; const uint32_t NXDN_FSW_BITS = 0x000CDF59U; From dfc262bbcd2570817e4f8e03156a94ec00537d9b Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 18 Jan 2018 21:25:26 +0000 Subject: [PATCH 5/7] Changes based on first NXDN RF tests. --- IO.cpp | 23 ++++++++++++----------- NXDNRX.cpp | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/IO.cpp b/IO.cpp index aa6745d..bfbb6f4 100644 --- a/IO.cpp +++ b/IO.cpp @@ -300,15 +300,19 @@ void CIO::process() dstarRX.samples(GMSKVals, rssi, RX_BLOCK_SIZE); } - if (m_p25Enable) { - q15_t P25Vals[RX_BLOCK_SIZE]; - ::arm_fir_fast_q15(&m_boxcarFilter, dcSamples, P25Vals, RX_BLOCK_SIZE); + if (m_p25Enable || m_nxdnEnable) { + q15_t C4FSKVals[RX_BLOCK_SIZE]; + ::arm_fir_fast_q15(&m_boxcarFilter, dcSamples, C4FSKVals, RX_BLOCK_SIZE); - p25RX.samples(P25Vals, rssi, RX_BLOCK_SIZE); + if (m_p25Enable) + p25RX.samples(C4FSKVals, rssi, RX_BLOCK_SIZE); + + if (m_nxdnEnable) + nxdnRX.samples(C4FSKVals, rssi, RX_BLOCK_SIZE); } // XXX YSF should use dcSamples, but DMR not - if (m_dmrEnable || m_ysfEnable || m_nxdnEnable) { + if (m_dmrEnable || m_ysfEnable) { q15_t C4FSKVals[RX_BLOCK_SIZE]; ::arm_fir_fast_q15(&m_rrcFilter, samples, C4FSKVals, RX_BLOCK_SIZE); @@ -321,9 +325,6 @@ void CIO::process() if (m_ysfEnable) ysfRX.samples(C4FSKVals, rssi, RX_BLOCK_SIZE); - - if (m_nxdnEnable) - nxdnRX.samples(C4FSKVals, rssi, RX_BLOCK_SIZE); } } else if (m_modemState == STATE_DSTAR) { if (m_dstarEnable) { @@ -363,10 +364,10 @@ void CIO::process() } } else if (m_modemState == STATE_NXDN) { if (m_nxdnEnable) { - q15_t C4FSKVals[RX_BLOCK_SIZE]; - ::arm_fir_fast_q15(&m_rrcFilter, dcSamples, C4FSKVals, RX_BLOCK_SIZE); + q15_t NXDNVals[RX_BLOCK_SIZE]; + ::arm_fir_fast_q15(&m_boxcarFilter, dcSamples, NXDNVals, RX_BLOCK_SIZE); - nxdnRX.samples(C4FSKVals, rssi, RX_BLOCK_SIZE); + nxdnRX.samples(NXDNVals, rssi, RX_BLOCK_SIZE); } } else if (m_modemState == STATE_DSTARCAL) { q15_t GMSKVals[RX_BLOCK_SIZE]; diff --git a/NXDNRX.cpp b/NXDNRX.cpp index 79bf10e..eab67dd 100644 --- a/NXDNRX.cpp +++ b/NXDNRX.cpp @@ -23,7 +23,7 @@ const q15_t SCALING_FACTOR = 18750; // Q15(0.55) -const uint8_t MAX_FSW_BIT_ERRS = 2U; +const uint8_t MAX_FSW_BIT_ERRS = 1U; const uint8_t MAX_FSW_SYMBOLS_ERRS = 1U; From e7a40343b1363afd96bc94334ea38f3ad0b136d9 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 22 Jan 2018 19:58:39 +0000 Subject: [PATCH 6/7] Adjust NXDN deviation slightly. --- NXDNTX.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/NXDNTX.cpp b/NXDNTX.cpp index b3fb55c..16e6d55 100644 --- a/NXDNTX.cpp +++ b/NXDNTX.cpp @@ -29,10 +29,10 @@ static q15_t RRC_0_2_FILTER[] = {0, 0, 0, 0, 850, 219, -720, -1548, -1795, -1172 -4544, -1431, 1447, 3073, 3120, 1927, 237, -1172, -1795, -1548, -720, 219, 850}; // numTaps = 45, L = 5 const uint16_t RRC_0_2_FILTER_PHASE_LEN = 9U; // phaseLength = numTaps/L -const q15_t NXDN_LEVELA = 1683; -const q15_t NXDN_LEVELB = 561; -const q15_t NXDN_LEVELC = -561; -const q15_t NXDN_LEVELD = -1683; +const q15_t NXDN_LEVELA = 1680; +const q15_t NXDN_LEVELB = 560; +const q15_t NXDN_LEVELC = -560; +const q15_t NXDN_LEVELD = -1680; const uint8_t NXDN_PREAMBLE[] = {0x57U, 0x75U, 0xFDU}; const uint8_t NXDN_SYNC = 0x5FU; From 91e5d588b06cf9e8358a2fe1795f28e4f345c3bb Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Mon, 5 Feb 2018 09:42:40 -0300 Subject: [PATCH 7/7] Fix mistake reading COS input pin using STM32F4 and STM32F7 --- IOSTM.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IOSTM.cpp b/IOSTM.cpp index 3b2081c..932ba57 100644 --- a/IOSTM.cpp +++ b/IOSTM.cpp @@ -855,7 +855,7 @@ void CIO::interrupt() bool CIO::getCOSInt() { - return GPIO_ReadOutputDataBit(PORT_COS, PIN_COS) == Bit_SET; + return GPIO_ReadInputDataBit(PORT_COS, PIN_COS) == Bit_SET; } void CIO::setLEDInt(bool on)