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;