Skip to content

Commit

Permalink
Reset the mode's state machines when going to the disabled state.
Browse files Browse the repository at this point in the history
  • Loading branch information
g4klx committed Jan 19, 2019
1 parent b16aaa6 commit ae9e6ea
Show file tree
Hide file tree
Showing 15 changed files with 286 additions and 2 deletions.
6 changes: 6 additions & 0 deletions DMRControl.cpp
Expand Up @@ -130,3 +130,9 @@ bool CDMRControl::isBusy() const

return m_slot2.isBusy();
}

void CDMRControl::enable(bool enabled)
{
m_slot1.enable(enabled);
m_slot2.enable(enabled);
}
2 changes: 2 additions & 0 deletions DMRControl.h
Expand Up @@ -46,6 +46,8 @@ class CDMRControl {

bool isBusy() const;

void enable(bool enabled);

private:
unsigned int m_colorCode;
CModem* m_modem;
Expand Down
47 changes: 47 additions & 0 deletions DMRSlot.cpp
Expand Up @@ -115,6 +115,7 @@ m_maxRSSI(0U),
m_minRSSI(0U),
m_aveRSSI(0U),
m_rssiCount(0U),
m_enabled(true),
m_fp(NULL)
{
m_lastFrame = new unsigned char[DMR_FRAME_LENGTH_BYTES + 2U];
Expand Down Expand Up @@ -2096,3 +2097,49 @@ bool CDMRSlot::isBusy() const
{
return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE;
}

void CDMRSlot::enable(bool enabled)
{
if (!enabled && m_enabled) {
m_queue.clear();

// Reset the RF section
m_rfState = RS_RF_LISTENING;

m_rfTimeoutTimer.stop();
m_rfTimeout = false;

m_rfFrames = 0U;
m_rfErrs = 0U;
m_rfBits = 1U;

m_rfSeqNo = 0U;
m_rfN = 0U;

delete m_rfLC;
m_rfLC = NULL;

// Reset the networking section
m_netState = RS_NET_IDLE;

m_lastFrameValid = false;

m_networkWatchdog.stop();
m_netTimeoutTimer.stop();
m_packetTimer.stop();
m_netTimeout = false;

m_netFrames = 0U;
m_netLost = 0U;

m_netErrs = 0U;
m_netBits = 1U;

m_netN = 0U;

delete m_netLC;
m_netLC = NULL;
}

m_enabled = enabled;
}
3 changes: 3 additions & 0 deletions DMRSlot.h
Expand Up @@ -60,6 +60,8 @@ class CDMRSlot {

bool isBusy() const;

void enable(bool enabled);

static void init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter);

private:
Expand Down Expand Up @@ -107,6 +109,7 @@ class CDMRSlot {
unsigned char m_minRSSI;
unsigned int m_aveRSSI;
unsigned int m_rssiCount;
bool m_enabled;
FILE* m_fp;

static unsigned int m_colorCode;
Expand Down
24 changes: 24 additions & 0 deletions DStarControl.cpp
Expand Up @@ -81,6 +81,7 @@ m_maxRSSI(0U),
m_minRSSI(0U),
m_aveRSSI(0U),
m_rssiCount(0U),
m_enabled(true),
m_fp(NULL)
{
assert(display != NULL);
Expand Down Expand Up @@ -1226,3 +1227,26 @@ bool CDStarControl::isBusy() const
{
return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE;
}

void CDStarControl::enable(bool enabled)
{
if (!enabled && m_enabled) {
m_queue.clear();

// Reset the RF section
m_rfState = RS_RF_LISTENING;

m_rfTimeoutTimer.stop();

// Reset the networking section
m_netState = RS_NET_IDLE;

m_lastFrameValid = false;

m_netTimeoutTimer.stop();
m_networkWatchdog.stop();
m_packetTimer.stop();
}

m_enabled = enabled;
}
3 changes: 3 additions & 0 deletions DStarControl.h
Expand Up @@ -48,6 +48,8 @@ class CDStarControl {

bool isBusy() const;

void enable(bool enabled);

private:
unsigned char* m_callsign;
unsigned char* m_gateway;
Expand Down Expand Up @@ -93,6 +95,7 @@ class CDStarControl {
unsigned char m_minRSSI;
unsigned int m_aveRSSI;
unsigned int m_rssiCount;
bool m_enabled;
FILE* m_fp;

void writeNetwork();
Expand Down
96 changes: 96 additions & 0 deletions MMDVMHost.cpp
Expand Up @@ -1457,6 +1457,16 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
if (m_dmr != NULL)
m_dmr->enable(false);
if (m_ysf != NULL)
m_ysf->enable(false);
if (m_p25 != NULL)
m_p25->enable(false);
if (m_nxdn != NULL)
m_nxdn->enable(false);
if (m_pocsag != NULL)
m_pocsag->enable(false);
m_modem->setMode(MODE_DSTAR);
if (m_ump != NULL)
m_ump->setMode(MODE_DSTAR);
Expand All @@ -1477,6 +1487,16 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
if (m_dstar != NULL)
m_dstar->enable(false);
if (m_ysf != NULL)
m_ysf->enable(false);
if (m_p25 != NULL)
m_p25->enable(false);
if (m_nxdn != NULL)
m_nxdn->enable(false);
if (m_pocsag != NULL)
m_pocsag->enable(false);
m_modem->setMode(MODE_DMR);
if (m_ump != NULL)
m_ump->setMode(MODE_DMR);
Expand All @@ -1501,6 +1521,16 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
if (m_dstar != NULL)
m_dstar->enable(false);
if (m_dmr != NULL)
m_dmr->enable(false);
if (m_p25 != NULL)
m_p25->enable(false);
if (m_nxdn != NULL)
m_nxdn->enable(false);
if (m_pocsag != NULL)
m_pocsag->enable(false);
m_modem->setMode(MODE_YSF);
if (m_ump != NULL)
m_ump->setMode(MODE_YSF);
Expand All @@ -1521,6 +1551,16 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
if (m_dstar != NULL)
m_dstar->enable(false);
if (m_dmr != NULL)
m_dmr->enable(false);
if (m_ysf != NULL)
m_ysf->enable(false);
if (m_nxdn != NULL)
m_nxdn->enable(false);
if (m_pocsag != NULL)
m_pocsag->enable(false);
m_modem->setMode(MODE_P25);
if (m_ump != NULL)
m_ump->setMode(MODE_P25);
Expand All @@ -1541,6 +1581,16 @@ void CMMDVMHost::setMode(unsigned char mode)
m_p25Network->enable(false);
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
if (m_dstar != NULL)
m_dstar->enable(false);
if (m_dmr != NULL)
m_dmr->enable(false);
if (m_ysf != NULL)
m_ysf->enable(false);
if (m_p25 != NULL)
m_p25->enable(false);
if (m_pocsag != NULL)
m_pocsag->enable(false);
m_modem->setMode(MODE_NXDN);
if (m_ump != NULL)
m_ump->setMode(MODE_NXDN);
Expand All @@ -1561,6 +1611,16 @@ void CMMDVMHost::setMode(unsigned char mode)
m_p25Network->enable(false);
if (m_nxdnNetwork != NULL)
m_nxdnNetwork->enable(false);
if (m_dstar != NULL)
m_dstar->enable(false);
if (m_dmr != NULL)
m_dmr->enable(false);
if (m_ysf != NULL)
m_ysf->enable(false);
if (m_p25 != NULL)
m_p25->enable(false);
if (m_nxdn != NULL)
m_nxdn->enable(false);
m_modem->setMode(MODE_POCSAG);
if (m_ump != NULL)
m_ump->setMode(MODE_POCSAG);
Expand All @@ -1584,6 +1644,18 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
if (m_dstar != NULL)
m_dstar->enable(false);
if (m_dmr != NULL)
m_dmr->enable(false);
if (m_ysf != NULL)
m_ysf->enable(false);
if (m_p25 != NULL)
m_p25->enable(false);
if (m_nxdn != NULL)
m_nxdn->enable(false);
if (m_pocsag != NULL)
m_pocsag->enable(false);
if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) {
m_modem->writeDMRStart(false);
m_dmrTXTimer.stop();
Expand Down Expand Up @@ -1612,6 +1684,18 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
if (m_dstar != NULL)
m_dstar->enable(false);
if (m_dmr != NULL)
m_dmr->enable(false);
if (m_ysf != NULL)
m_ysf->enable(false);
if (m_p25 != NULL)
m_p25->enable(false);
if (m_nxdn != NULL)
m_nxdn->enable(false);
if (m_pocsag != NULL)
m_pocsag->enable(false);
if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) {
m_modem->writeDMRStart(false);
m_dmrTXTimer.stop();
Expand All @@ -1638,6 +1722,18 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(true);
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(true);
if (m_dstar != NULL)
m_dstar->enable(false);
if (m_dmr != NULL)
m_dmr->enable(false);
if (m_ysf != NULL)
m_ysf->enable(false);
if (m_p25 != NULL)
m_p25->enable(false);
if (m_nxdn != NULL)
m_nxdn->enable(false);
if (m_pocsag != NULL)
m_pocsag->enable(false);
if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) {
m_modem->writeDMRStart(false);
m_dmrTXTimer.stop();
Expand Down
28 changes: 28 additions & 0 deletions NXDNControl.cpp
Expand Up @@ -71,6 +71,7 @@ m_maxRSSI(0U),
m_minRSSI(0U),
m_aveRSSI(0U),
m_rssiCount(0U),
m_enabled(true),
m_fp(NULL)
{
assert(display != NULL);
Expand Down Expand Up @@ -1086,3 +1087,30 @@ bool CNXDNControl::isBusy() const
{
return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE;
}

void CNXDNControl::enable(bool enabled)
{
if (!enabled && m_enabled) {
m_queue.clear();

// Reset the RF section
m_rfState = RS_RF_LISTENING;

m_rfMask = 0x00U;
m_rfLayer3.reset();

m_rfTimeoutTimer.stop();

// Reset the networking section
m_netState = RS_NET_IDLE;

m_netMask = 0x00U;
m_netLayer3.reset();

m_netTimeoutTimer.stop();
m_networkWatchdog.stop();
m_packetTimer.stop();
}

m_enabled = enabled;
}
3 changes: 3 additions & 0 deletions NXDNControl.h
Expand Up @@ -47,6 +47,8 @@ class CNXDNControl {

bool isBusy() const;

void enable(bool enabled);

private:
unsigned int m_ran;
unsigned int m_id;
Expand Down Expand Up @@ -79,6 +81,7 @@ class CNXDNControl {
unsigned char m_minRSSI;
unsigned int m_aveRSSI;
unsigned int m_rssiCount;
bool m_enabled;
FILE* m_fp;

bool processVoice(unsigned char usc, unsigned char option, unsigned char *data);
Expand Down
21 changes: 21 additions & 0 deletions P25Control.cpp
Expand Up @@ -80,6 +80,7 @@ m_maxRSSI(0U),
m_minRSSI(0U),
m_aveRSSI(0U),
m_rssiCount(0U),
m_enabled(true),
m_fp(NULL)
{
assert(display != NULL);
Expand Down Expand Up @@ -1160,3 +1161,23 @@ bool CP25Control::isBusy() const
{
return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE;
}

void CP25Control::enable(bool enabled)
{
if (!enabled && m_enabled) {
m_queue.clear();

// Reset the RF section
m_rfState = RS_RF_LISTENING;
m_rfTimeout.stop();
m_rfData.reset();

// Reset the networking section
m_netTimeout.stop();
m_networkWatchdog.stop();
m_netData.reset();
m_netState = RS_NET_IDLE;
}

m_enabled = enabled;
}

0 comments on commit ae9e6ea

Please sign in to comment.