Better way to send to display that MMDVMHost is quitting

This commit is contained in:
root 2018-08-15 18:17:42 +02:00
parent df2b27f585
commit 64e3ae6d30
16 changed files with 124 additions and 5 deletions

View File

@ -29,6 +29,7 @@ const unsigned char MODE_POCSAG = 6U;
const unsigned char MODE_CW = 98U;
const unsigned char MODE_LOCKOUT = 99U;
const unsigned char MODE_ERROR = 100U;
const unsigned char MODE_QUIT = 110U;
const unsigned char TAG_HEADER = 0x00U;
const unsigned char TAG_DATA = 0x01U;

View File

@ -88,6 +88,17 @@ void CDisplay::setError(const char* text)
setErrorInt(text);
}
void CDisplay::setQuit()
{
m_timer1.stop();
m_timer2.stop();
m_mode1 = MODE_QUIT;
m_mode2 = MODE_QUIT;
setQuitInt();
}
void CDisplay::writeDStar(const char* my1, const char* my2, const char* your, const char* type, const char* reflector)
{
assert(my1 != NULL);

View File

@ -40,6 +40,7 @@ public:
void setIdle();
void setLockout();
void setError(const char* text);
void setQuit();
void writeDStar(const char* my1, const char* my2, const char* your, const char* type, const char* reflector);
void writeDStarRSSI(unsigned char rssi);
@ -82,6 +83,7 @@ protected:
virtual void setIdleInt() = 0;
virtual void setLockoutInt() = 0;
virtual void setErrorInt(const char* text) = 0;
virtual void setQuitInt() = 0;
virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) = 0;
virtual void writeDStarRSSIInt(unsigned char rssi);

View File

@ -374,6 +374,31 @@ void CHD44780::setLockoutInt()
m_dmr = false;
}
void CHD44780::setQuitInt()
{
#ifdef ADAFRUIT_DISPLAY
adafruitLCDColour(AC_RED);
#endif
m_clockDisplayTimer.stop(); // Stop the clock display
::lcdClear(m_fd);
if (m_pwm) {
if (m_pwmPin != 1U)
::softPwmWrite(m_pwmPin, m_pwmBright);
else
::pwmWrite(m_pwmPin, (m_pwmBright / 100) * 1024);
}
::lcdPosition(m_fd, 0, 0);
::lcdPuts(m_fd, "MMDVM");
::lcdPosition(m_fd, 0, 1);
::lcdPuts(m_fd, "STOPPED");
m_dmr = false;
}
void CHD44780::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector)
{
assert(my1 != NULL);

View File

@ -100,6 +100,7 @@ protected:
virtual void setIdleInt();
virtual void setErrorInt(const char* text);
virtual void setLockoutInt();
virtual void setQuitInt();
virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector);
virtual void writeDStarRSSIInt(unsigned char rssi);

View File

@ -224,6 +224,23 @@ void CLCDproc::setLockoutInt()
// LED 4 Green 8 Red 128 Yellow 136
void CLCDproc::setQuitInt()
{
m_clockDisplayTimer.stop(); // Stop the clock display
if (m_screensDefined) {
socketPrintf(m_socketfd, "screen_set DStar -priority hidden");
socketPrintf(m_socketfd, "screen_set DMR -priority hidden");
socketPrintf(m_socketfd, "screen_set YSF -priority hidden");
socketPrintf(m_socketfd, "screen_set P25 -priority hidden");
socketPrintf(m_socketfd, "screen_set NXDN -priority hidden");
socketPrintf(m_socketfd, "widget_set Status Status %u %u Stopped", m_cols - 6, m_rows);
socketPrintf(m_socketfd, "output 0"); // Clear all LEDs
}
m_dmr = false;
}
void CLCDproc::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector)
{
assert(my1 != NULL);

View File

@ -39,6 +39,8 @@ protected:
virtual void setIdleInt();
virtual void setErrorInt(const char* text);
virtual void setLockoutInt();
virtual void setQuitInt();
virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector);
virtual void writeDStarRSSIInt(unsigned char rssi);

View File

@ -971,7 +971,7 @@ int CMMDVMHost::run()
CThread::sleep(5U);
}
setMode(MODE_IDLE);
setMode(MODE_QUIT);
m_modem->close();
delete m_modem;
@ -1560,6 +1560,9 @@ void CMMDVMHost::setMode(unsigned char mode)
m_cwIdTimer.start();
}
m_display->setIdle();
if (mode==MODE_QUIT) {
m_display->setQuit();
}
m_mode = MODE_IDLE;
m_modeTimer.stop();
break;

View File

@ -165,6 +165,27 @@ void CNextion::setLockoutInt()
m_mode = MODE_LOCKOUT;
}
void CNextion::setQuitInt()
{
sendCommand("page MMDVM");
sendCommandAction(1U);
char command[100];
::sprintf(command, "dim=%u", m_idleBrightness);
sendCommand(command);
::sprintf(command, "t3.txt=\"%s\"", m_ipaddress.c_str());
sendCommand(command);
sendCommandAction(16U);
sendCommand("t0.txt=\"MMDVM STOPPED\"");
sendCommandAction(19U);
m_clockDisplayTimer.stop();
m_mode = MODE_QUIT;
}
void CNextion::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector)
{
assert(my1 != NULL);
@ -750,10 +771,6 @@ void CNextion::clockInt(unsigned int ms)
void CNextion::close()
{
sendCommand("page MMDVM");
sendCommandAction(1U);
sendCommand("t1.txt=\"MMDVM STOPPED\"");
sendCommandAction(19U);
m_serial->close();
delete m_serial;
}

View File

@ -40,6 +40,7 @@ protected:
virtual void setIdleInt();
virtual void setErrorInt(const char* text);
virtual void setLockoutInt();
virtual void setQuitInt();
virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector);
virtual void writeDStarRSSIInt(unsigned char rssi);

View File

@ -56,6 +56,10 @@ void CNullDisplay::setLockoutInt()
{
}
void CNullDisplay::setQuitInt()
{
}
void CNullDisplay::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector)
{
#if defined(RASPBERRY_PI)

View File

@ -37,6 +37,7 @@ protected:
virtual void setIdleInt();
virtual void setErrorInt(const char* text);
virtual void setLockoutInt();
virtual void setQuitInt();
virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector);
virtual void clearDStarInt();

View File

@ -283,6 +283,21 @@ void COLED::setLockoutInt()
display.display();
}
void COLED::setQuitInt()
{
m_mode = MODE_QUIT;
display.clearDisplay();
OLED_statusbar();
display.setCursor(0,30);
display.setTextSize(3);
display.print("Stopped");
display.setTextSize(1);
display.display();
}
void COLED::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector)
{
m_mode = MODE_DSTAR;

2
OLED.h
View File

@ -49,6 +49,8 @@ public:
virtual void setErrorInt(const char* text);
virtual void setLockoutInt();
virtual void setQuitInt();
virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector);
virtual void clearDStarInt();

View File

@ -145,6 +145,22 @@ void CTFTSerial::setLockoutInt()
m_mode = MODE_LOCKOUT;
}
void CTFTSerial::setQuitInt()
{
// Clear the screen
clearScreen();
setFontSize(FONT_LARGE);
// Draw MMDVM logo
displayBitmap(0U, 0U, "MMDVM_sm.bmp");
gotoPosPixel(20U, 60U);
displayText("STOPPED");
m_mode = MODE_QUIT;
}
void CTFTSerial::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector)
{
assert(my1 != NULL);

View File

@ -39,6 +39,7 @@ protected:
virtual void setIdleInt();
virtual void setErrorInt(const char* text);
virtual void setLockoutInt();
virtual void setQuitInt();
virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector);
virtual void clearDStarInt();