Add lockout mode.

This commit is contained in:
Jonathan Naylor 2016-03-03 18:01:01 +00:00
parent 944192f246
commit 560433e7ef
9 changed files with 62 additions and 6 deletions

View file

@ -19,10 +19,11 @@
#if !defined(Defines_H)
#define Defines_H
const unsigned char MODE_IDLE = 0U;
const unsigned char MODE_DSTAR = 1U;
const unsigned char MODE_DMR = 2U;
const unsigned char MODE_YSF = 3U;
const unsigned char MODE_IDLE = 0U;
const unsigned char MODE_LOCKOUT = 1U;
const unsigned char MODE_DSTAR = 2U;
const unsigned char MODE_DMR = 3U;
const unsigned char MODE_YSF = 4U;
const unsigned char TAG_HEADER = 0x00U;
const unsigned char TAG_DATA = 0x01U;

View file

@ -30,6 +30,8 @@ public:
virtual void setIdle() = 0;
virtual void setLockout() = 0;
virtual void setDStar() = 0;
virtual void writeDStar(const char* my1, const char* my2, const char* your) = 0;
virtual void clearDStar() = 0;

View file

@ -583,6 +583,22 @@ void CMMDVMHost::setMode(unsigned char mode, bool logging)
m_modeTimer.start();
break;
case MODE_LOCKOUT:
if (logging)
LogMessage("Mode set to Lockout");
if (m_dstarNetwork != NULL)
m_dstarNetwork->enable(false);
if (m_dmrNetwork != NULL)
m_dmrNetwork->enable(false);
if (m_mode == MODE_DMR)
m_modem->writeDMRStart(false);
else
m_modem->setMode(MODE_IDLE);
m_display->setLockout();
m_mode = MODE_LOCKOUT;
m_modeTimer.stop();
break;
default:
if (logging)
LogMessage("Mode set to Idle");

View file

@ -104,7 +104,8 @@ m_dstarSpace(0U),
m_dmrSpace1(0U),
m_dmrSpace2(0U),
m_ysfSpace(0U),
m_tx(false)
m_tx(false),
m_lockout(false)
{
assert(!port.empty());
@ -357,13 +358,15 @@ void CModem::clock(unsigned int ms)
if (txOverflow)
LogError("MMDVM TX buffer has overflowed");
m_lockout = (m_buffer[5U] & 0x10U) == 0x10U;
m_dstarSpace = m_buffer[6U];
m_dmrSpace1 = m_buffer[7U];
m_dmrSpace2 = m_buffer[8U];
m_ysfSpace = m_buffer[9U];
m_inactivityTimer.start();
// LogMessage("status=%02X, tx=%d, space=%u,%u,%u,%u", m_buffer[5U], int(m_tx), m_dstarSpace, m_dmrSpace1, m_dmrSpace2, m_ysfSpace);
// LogMessage("status=%02X, tx=%d, space=%u,%u,%u,%u, lockout=%d", m_buffer[5U], int(m_tx), m_dstarSpace, m_dmrSpace1, m_dmrSpace2, m_ysfSpace, int(m_lockout));
}
break;
@ -638,6 +641,11 @@ bool CModem::hasYSFSpace() const
return space > 1U;
}
bool CModem::hasLockout() const
{
return m_lockout;
}
bool CModem::writeYSFData(const unsigned char* data, unsigned int length)
{
assert(data != NULL);

View file

@ -52,6 +52,8 @@ public:
bool hasDMRSpace2() const;
bool hasYSFSpace() const;
bool hasLockout() const;
bool writeDStarData(const unsigned char* data, unsigned int length);
bool writeDMRData1(const unsigned char* data, unsigned int length);
bool writeDMRData2(const unsigned char* data, unsigned int length);
@ -98,6 +100,7 @@ private:
unsigned int m_dmrSpace2;
unsigned int m_ysfSpace;
bool m_tx;
bool m_lockout;
bool readVersion();
bool readStatus();

View file

@ -35,6 +35,10 @@ void CNullDisplay::setIdle()
{
}
void CNullDisplay::setLockout()
{
}
void CNullDisplay::setDStar()
{
}

View file

@ -33,6 +33,8 @@ public:
virtual void setIdle();
virtual void setLockout();
virtual void setDStar();
virtual void writeDStar(const char* my1, const char* my2, const char* your);
virtual void clearDStar();

View file

@ -90,6 +90,24 @@ void CTFTSerial::setIdle()
// Draw all mode insignias
displayBitmap(0U, 30U, "ALL_sm.bmp");
gotoPosText(0U, 8U);
displayText("IDLE");
}
void CTFTSerial::setLockout()
{
// Clear the screen
clearScreen();
// Draw MMDVM logo
displayBitmap(0U, 0U, "MMDVM_sm.bmp");
// Draw all mode insignias
displayBitmap(0U, 30U, "ALL_sm.bmp");
gotoPosText(0U, 8U);
displayText("LOCKOUT");
}
void CTFTSerial::setDStar()

View file

@ -34,6 +34,8 @@ public:
virtual void setIdle();
virtual void setLockout();
virtual void setDStar();
virtual void writeDStar(const char* my1, const char* my2, const char* your);
virtual void clearDStar();