mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 15:09:23 +08:00
Add NXDN to the display code.
This commit is contained in:
73
LCDproc.cpp
73
LCDproc.cpp
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016, 2017 by Tony Corbett G0WFV
|
||||
* Copyright (C) 2016,2017 by Tony Corbett G0WFV
|
||||
* Copyright (C) 2018 by Jonathan Naylor G4KLX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -43,6 +44,11 @@
|
||||
* Red 128 1000 0000
|
||||
* Yellow 136 1000 1000
|
||||
|
||||
* LED 5 (NXDN)
|
||||
* Green 16 0001 0000
|
||||
* Red 255 1111 1111
|
||||
* Yellow 255 1111 1111
|
||||
|
||||
*/
|
||||
|
||||
#include "LCDproc.h"
|
||||
@@ -88,6 +94,7 @@ const unsigned int DSTAR_RSSI_COUNT = 3U; // 3 * 420ms = 1260ms
|
||||
const unsigned int DMR_RSSI_COUNT = 4U; // 4 * 360ms = 1440ms
|
||||
const unsigned int YSF_RSSI_COUNT = 13U; // 13 * 100ms = 1300ms
|
||||
const unsigned int P25_RSSI_COUNT = 7U; // 7 * 180ms = 1260ms
|
||||
const unsigned int NXDN_RSSI_COUNT = 28U; // 28 * 40ms = 1120ms
|
||||
|
||||
CLCDproc::CLCDproc(std::string address, unsigned int port, unsigned int localPort, const std::string& callsign, unsigned int dmrid, bool displayClock, bool utc, bool duplex, bool dimOnIdle) :
|
||||
CDisplay(),
|
||||
@@ -171,6 +178,7 @@ void CLCDproc::setIdleInt()
|
||||
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 Idle", m_cols - 3, m_rows);
|
||||
socketPrintf(m_socketfd, "output 0"); // Clear all LEDs
|
||||
}
|
||||
@@ -189,6 +197,7 @@ void CLCDproc::setErrorInt(const char* text)
|
||||
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 Error", m_cols - 4, m_rows);
|
||||
socketPrintf(m_socketfd, "output 0"); // Clear all LEDs
|
||||
}
|
||||
@@ -205,6 +214,7 @@ void CLCDproc::setLockoutInt()
|
||||
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 Lockout", m_cols - 6, m_rows);
|
||||
socketPrintf(m_socketfd, "output 0"); // Clear all LEDs
|
||||
}
|
||||
@@ -459,6 +469,51 @@ void CLCDproc::clearP25Int()
|
||||
socketPrintf(m_socketfd, "output 2"); // Set LED2 color green
|
||||
}
|
||||
|
||||
// LED 5 Green 16 Red 255 Yellow 255
|
||||
|
||||
void CLCDproc::writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type)
|
||||
{
|
||||
assert(source != NULL);
|
||||
assert(type != NULL);
|
||||
|
||||
m_clockDisplayTimer.stop(); // Stop the clock display
|
||||
|
||||
socketPrintf(m_socketfd, "screen_set NXDN -priority foreground");
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Mode 1 1 NXDN");
|
||||
|
||||
if (m_rows == 2U) {
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Line2 1 2 15 2 h 3 \"%.10s > %s%u\"", source, group ? "TG" : "", dest);
|
||||
} else {
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Line2 1 2 15 2 h 3 \"%.10s >\"", source);
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Line3 1 3 15 3 h 3 \"%s%u\"", group ? "TG" : "", dest);
|
||||
socketPrintf(m_socketfd, "output 255"); // Set LED5 color red
|
||||
}
|
||||
|
||||
m_dmr = false;
|
||||
m_rssiCount1 = 0U;
|
||||
}
|
||||
|
||||
void CLCDproc::writeNXDNRSSIInt(unsigned char rssi)
|
||||
{
|
||||
if (m_rssiCount1 == 0U) {
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Line4 1 4 %u 4 h 3 \"-%3udBm\"", m_cols - 1, rssi);
|
||||
}
|
||||
|
||||
m_rssiCount1++;
|
||||
if (m_rssiCount1 >= NXDN_RSSI_COUNT)
|
||||
m_rssiCount1 = 0U;
|
||||
}
|
||||
|
||||
void CLCDproc::clearNXDNInt()
|
||||
{
|
||||
m_clockDisplayTimer.stop(); // Stop the clock display
|
||||
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Line3 1 2 15 2 h 3 Listening");
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Line3 1 3 15 3 h 3 \"\"");
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Line4 1 4 15 4 h 3 \"\"");
|
||||
socketPrintf(m_socketfd, "output 16"); // Set LED5 color green
|
||||
}
|
||||
|
||||
void CLCDproc::writeCWInt()
|
||||
{
|
||||
}
|
||||
@@ -729,5 +784,21 @@ void CLCDproc::defineScreens()
|
||||
socketPrintf(m_socketfd, "widget_set P25 Line4 4 2 15 2 h 3 \" \"");
|
||||
*/
|
||||
|
||||
// The NXDN Screen
|
||||
|
||||
socketPrintf(m_socketfd, "screen_add NXDN");
|
||||
socketPrintf(m_socketfd, "screen_set NXDN -name NXDN -heartbeat on -priority hidden -backlight on");
|
||||
|
||||
socketPrintf(m_socketfd, "widget_add NXDN Mode string");
|
||||
socketPrintf(m_socketfd, "widget_add NXDN Line2 scroller");
|
||||
socketPrintf(m_socketfd, "widget_add NXDN Line3 scroller");
|
||||
socketPrintf(m_socketfd, "widget_add NXDN Line4 scroller");
|
||||
|
||||
/* Do we need to pre-populate the values??
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Line3 2 1 15 1 h 3 Listening");
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Line3 3 1 15 1 h 3 \" \"");
|
||||
socketPrintf(m_socketfd, "widget_set NXDN Line4 4 2 15 2 h 3 \" \"");
|
||||
*/
|
||||
|
||||
m_screensDefined = true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user