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

@ -44,6 +44,7 @@ using namespace nxdn;
/// </summary>
NXDNTX::NXDNTX() :
m_fifo(NXDN_TX_BUFFER_LEN),
m_state(NXDNTXSTATE_NORMAL),
m_poBuffer(),
m_poLen(0U),
m_poPtr(0U),
@ -59,7 +60,8 @@ NXDNTX::NXDNTX() :
/// </summary>
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
uint16_t space = io.getSpace();
@ -82,10 +84,14 @@ void NXDNTX::process()
}
if (m_poLen == 0U) {
if (m_state == NXDNTXSTATE_CAL)
m_tailCnt = 0U;
if (m_fifo.getData() == 0U)
return;
createData();
DEBUG2("NXDNTX: process(): poLen", m_poLen);
}
@ -165,6 +171,15 @@ void NXDNTX::setTxHang(uint8_t txHang)
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>
/// Helper to get how much space the ring buffer has for samples.
/// </summary>

@ -37,6 +37,17 @@
namespace nxdn
{
// ---------------------------------------------------------------------------
// Constants
// ---------------------------------------------------------------------------
#define NXDN_FIXED_TX_HANG 600
enum NXDNTXSTATE {
NXDNTXSTATE_NORMAL,
NXDNTXSTATE_CAL
};
// ---------------------------------------------------------------------------
// Class Declaration
// Implements transmitter logic for NXDN mode operation.
@ -60,6 +71,8 @@ namespace nxdn
void setPreambleCount(uint8_t preambleCnt);
/// <summary>Sets the transmit hang time.</summary>
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>
uint8_t getSpace() const;
@ -67,6 +80,8 @@ namespace nxdn
private:
SerialBuffer m_fifo;
NXDNTXSTATE m_state;
uint8_t m_poBuffer[60U];
uint16_t m_poLen;
uint16_t m_poPtr;

Loading…
Cancel
Save

Powered by TurnKey Linux.