diff --git a/p25/P25TX.cpp b/p25/P25TX.cpp index 813a70e..b577093 100644 --- a/p25/P25TX.cpp +++ b/p25/P25TX.cpp @@ -48,6 +48,7 @@ P25TX::P25TX() : m_poLen(0U), m_poPtr(0U), m_preambleCnt(P25_FIXED_DELAY), + m_txHang(P25_FIXED_TX_HANG), m_tailCnt(0U) { /* stub */ @@ -64,7 +65,7 @@ void P25TX::process() uint16_t space = io.getSpace(); while (space > 8U) { - writeByte(P25_START_SYNC); + writeSilence(); space -= 8U; m_tailCnt--; @@ -105,7 +106,7 @@ void P25TX::process() writeByte(c); space -= 8U; - m_tailCnt = P25_FIXED_TAIL; + m_tailCnt = m_txHang; if (m_poPtr >= m_poLen) { m_poPtr = 0U; @@ -155,14 +156,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; +} + /// /// Helper to set the calibration state for Tx. /// diff --git a/p25/P25TX.h b/p25/P25TX.h index b34d50d..6087da9 100644 --- a/p25/P25TX.h +++ b/p25/P25TX.h @@ -41,9 +41,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, @@ -71,6 +70,8 @@ namespace p25 /// Sets the FDMA preamble count. void setPreambleCount(uint8_t preambleCnt); + /// Sets the transmit hang time. + void setTxHang(uint8_t txHang); /// Helper to set the calibration state for Tx. void setCal(bool start); @@ -87,7 +88,8 @@ namespace p25 uint16_t m_poPtr; uint16_t m_preambleCnt; - uint16_t m_tailCnt; + uint32_t m_txHang; + uint32_t m_tailCnt; /// void createData();