diff --git a/Defines.h b/Defines.h index 8799e78..4d549e7 100644 --- a/Defines.h +++ b/Defines.h @@ -108,10 +108,10 @@ typedef unsigned long long ulong64_t; #define ENABLE_P25 // Normal Boxcar Filter for P25 -#define P25_RX_NORMAL_BOXCAR +//#define P25_RX_NORMAL_BOXCAR // Narrow Boxcar Filter for P25 -//#define P25_RX_NARROW_BOXCAR +#define P25_RX_NARROW_BOXCAR // Allow for the use of high quality external clock oscillators // The number is the frequency of the oscillator in Hertz. diff --git a/p25/P25TX.cpp b/p25/P25TX.cpp index 71296c7..b03ad94 100644 --- a/p25/P25TX.cpp +++ b/p25/P25TX.cpp @@ -80,6 +80,7 @@ P25TX::P25TX() : m_poLen(0U), m_poPtr(0U), m_preambleCnt(P25_FIXED_DELAY), + m_txHang(P25_FIXED_TX_HANG), m_tailCnt(0U), m_symLevel3Adj(0U), m_symLevel1Adj(0U) @@ -108,7 +109,7 @@ void P25TX::process() uint16_t space = io.getSpace(); while (space > (4U * P25_RADIO_SYMBOL_LENGTH)) { - writeByte(P25_START_SYNC); + writeSilence(); space -= 4U * P25_RADIO_SYMBOL_LENGTH; m_tailCnt--; @@ -153,7 +154,7 @@ void P25TX::process() writeByte(c); space -= 4U * P25_RADIO_SYMBOL_LENGTH; - m_tailCnt = P25_FIXED_TAIL; + m_tailCnt = m_txHang; if (m_poPtr >= m_poLen) { m_poPtr = 0U; @@ -203,14 +204,29 @@ void P25TX::clear() /// Count of preambles. void P25TX::setPreambleCount(uint8_t preambleCnt) { - uint32_t preambles = (uint32_t)((float)preambleCnt / 0.2083F); - m_preambleCnt = P25_FIXED_DELAY + preambles; + m_preambleCnt = P25_FIXED_DELAY + preambleCnt; // clamp preamble count to 250ms maximum if (m_preambleCnt > 1200U) m_preambleCnt = 1200U; } +/// +/// Sets the Tx hang time. +/// +/// Transmit hang time in seconds. +void P25TX::setTxHang(uint8_t txHang) +{ + if (txHang > 0U) + m_txHang = txHang * 1200U; + else + m_txHang = P25_FIXED_TX_HANG; + + // clamp tx hang count to 13s maximum + if (txHang > 13U) + m_txHang = 13U * 1200U; +} + /// /// Sets the fine adjust 4FSK symbol levels. /// diff --git a/p25/P25TX.h b/p25/P25TX.h index 4e4117b..bc229e6 100644 --- a/p25/P25TX.h +++ b/p25/P25TX.h @@ -11,7 +11,7 @@ // Licensed under the GPLv2 License (https://opensource.org/licenses/GPL-2.0) // /* -* Copyright (C) 2016,2017 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2017,2020 by Jonathan Naylor G4KLX * Copyright (C) 2020 by Bryan Biedenkapp N2PLL * * This program is free software; you can redistribute it and/or modify @@ -40,9 +40,8 @@ namespace p25 // Constants // --------------------------------------------------------------------------- - #define P25_FIXED_DELAY 300 // 300 = 62.49ms - // Delay Value * 0.2083 = Preamble Length (ms) - #define P25_FIXED_TAIL 600 // 600 = 500ms + #define P25_FIXED_DELAY 90 // 90 = 20ms + #define P25_FIXED_TX_HANG 750 // 750 = 625ms enum P25TXSTATE { P25TXSTATE_NORMAL, @@ -70,6 +69,8 @@ namespace p25 /// Sets the FDMA preamble count. void setPreambleCount(uint8_t preambleCnt); + /// Sets the transmit hang time. + void setTxHang(uint8_t txHang); /// Sets the fine adjust 4FSK symbol levels. void setSymbolLvlAdj(int8_t level3Adj, int8_t level1Adj); /// Helper to set the calibration state for Tx. @@ -94,6 +95,7 @@ namespace p25 uint16_t m_poPtr; uint16_t m_preambleCnt; + uint16_t m_txHang; uint16_t m_tailCnt; int8_t m_symLevel3Adj;