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();