reorganize how NXDN calibration mode is handled;

usb-support
Bryan Biedenkapp 4 years ago
parent 14d2ec3e76
commit 442b7e7f66

@ -88,17 +88,27 @@ CalNXDN::CalNXDN() :
/// </summary> /// </summary>
void CalNXDN::process() void CalNXDN::process()
{ {
if (m_transmit) {
nxdnTX.setCal(true);
nxdnTX.process(); nxdnTX.process();
}
else {
nxdnTX.setCal(false);
}
uint16_t space = nxdnTX.getSpace(); uint16_t space = nxdnTX.getSpace();
if (space < 1U) if (space < 1U)
return; return;
if (m_audioSeq > 3U) {
m_audioSeq = 0U;
}
switch (m_state) { switch (m_state) {
case NXDNCAL1K_TX: case NXDNCAL1K_TX:
nxdnTX.writeData(NXDN_CAL1K[m_audioSeq], NXDN_FRAME_LENGTH_BYTES + 1U); nxdnTX.writeData(NXDN_CAL1K[m_audioSeq], NXDN_FRAME_LENGTH_BYTES + 1U);
m_audioSeq = (m_audioSeq + 1U) % 4U; m_audioSeq++;
if(!m_transmit) if (!m_transmit)
m_state = NXDNCAL1K_IDLE; m_state = NXDNCAL1K_IDLE;
break; break;
default: default:

@ -44,6 +44,7 @@ using namespace nxdn;
/// </summary> /// </summary>
NXDNTX::NXDNTX() : NXDNTX::NXDNTX() :
m_fifo(NXDN_TX_BUFFER_LEN), m_fifo(NXDN_TX_BUFFER_LEN),
m_state(NXDNTXSTATE_NORMAL),
m_poBuffer(), m_poBuffer(),
m_poLen(0U), m_poLen(0U),
m_poPtr(0U), m_poPtr(0U),
@ -59,7 +60,8 @@ NXDNTX::NXDNTX() :
/// </summary> /// </summary>
void NXDNTX::process() void NXDNTX::process()
{ {
if (m_fifo.getData() == 0U && m_poLen == 0U && m_tailCnt > 0U) { if (m_fifo.getData() == 0U && m_poLen == 0U && m_tailCnt > 0U &&
m_state != NXDNTXSTATE_CAL) {
// transmit silence until the hang timer has expired // transmit silence until the hang timer has expired
uint16_t space = io.getSpace(); uint16_t space = io.getSpace();
@ -82,10 +84,14 @@ void NXDNTX::process()
} }
if (m_poLen == 0U) { if (m_poLen == 0U) {
if (m_state == NXDNTXSTATE_CAL)
m_tailCnt = 0U;
if (m_fifo.getData() == 0U) if (m_fifo.getData() == 0U)
return; return;
createData(); createData();
DEBUG2("NXDNTX: process(): poLen", m_poLen); DEBUG2("NXDNTX: process(): poLen", m_poLen);
} }
@ -165,6 +171,15 @@ void NXDNTX::setTxHang(uint8_t txHang)
m_txHang = txHang * 600U; m_txHang = txHang * 600U;
} }
/// <summary>
/// Helper to set the calibration state for Tx.
/// </summary>
/// <param name="start"></param>
void NXDNTX::setCal(bool start)
{
m_state = start ? NXDNTXSTATE_CAL : NXDNTXSTATE_NORMAL;
}
/// <summary> /// <summary>
/// Helper to get how much space the ring buffer has for samples. /// Helper to get how much space the ring buffer has for samples.
/// </summary> /// </summary>

@ -37,6 +37,17 @@
namespace nxdn namespace nxdn
{ {
// ---------------------------------------------------------------------------
// Constants
// ---------------------------------------------------------------------------
#define NXDN_FIXED_TX_HANG 600
enum NXDNTXSTATE {
NXDNTXSTATE_NORMAL,
NXDNTXSTATE_CAL
};
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Class Declaration // Class Declaration
// Implements transmitter logic for NXDN mode operation. // Implements transmitter logic for NXDN mode operation.
@ -60,6 +71,8 @@ namespace nxdn
void setPreambleCount(uint8_t preambleCnt); void setPreambleCount(uint8_t preambleCnt);
/// <summary>Sets the transmit hang time.</summary> /// <summary>Sets the transmit hang time.</summary>
void setTxHang(uint8_t txHang); void setTxHang(uint8_t txHang);
/// <summary>Helper to set the calibration state for Tx.</summary>
void setCal(bool start);
/// <summary>Helper to get how much space the ring buffer has for samples.</summary> /// <summary>Helper to get how much space the ring buffer has for samples.</summary>
uint8_t getSpace() const; uint8_t getSpace() const;
@ -67,6 +80,8 @@ namespace nxdn
private: private:
SerialBuffer m_fifo; SerialBuffer m_fifo;
NXDNTXSTATE m_state;
uint8_t m_poBuffer[60U]; uint8_t m_poBuffer[60U];
uint16_t m_poLen; uint16_t m_poLen;
uint16_t m_poPtr; uint16_t m_poPtr;

Loading…
Cancel
Save

Powered by TurnKey Linux.