From 0bc6bcdb267bb726ebf55b59c5210cb04e138966 Mon Sep 17 00:00:00 2001 From: SASANO Takayoshi Date: Sat, 29 Feb 2020 06:51:26 +0900 Subject: [PATCH] Fix DMR status display for duplex mode Previous change (simplyfy DMR status display) did not consider DMR duplex mode. Now DMR simplex mode uses 2-lines style, duplex mode 4-lines like this. Listening TS1 N Callsign TS2 TGxx For this change, statusLine() no longer have meaning. It will be removed in the future. --- Display.cpp | 2 +- TFTSurenoo.cpp | 34 ++++++++++++++++++++++++++-------- TFTSurenoo.h | 3 ++- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/Display.cpp b/Display.cpp index 39f72a8..84148b7 100644 --- a/Display.cpp +++ b/Display.cpp @@ -447,7 +447,7 @@ CDisplay* CDisplay::createDisplay(const CConf& conf, CUMP* ump, CModem* modem) serial = new CSerialController(port, (type == "TFT Serial") ? SERIAL_9600 : SERIAL_115200); if (type == "TFT Surenoo") - display = new CTFTSurenoo(conf.getCallsign(), dmrid, serial, brightness); + display = new CTFTSurenoo(conf.getCallsign(), dmrid, serial, brightness, conf.getDuplex()); else display = new CTFTSerial(conf.getCallsign(), dmrid, serial, brightness); } else if (type == "Nextion") { diff --git a/TFTSurenoo.cpp b/TFTSurenoo.cpp index b984437..5d15856 100644 --- a/TFTSurenoo.cpp +++ b/TFTSurenoo.cpp @@ -65,7 +65,7 @@ enum LcdColour { #define STATUS_CHARS (X_WIDTH / (STATUS_FONT_SIZE / 2)) #define STATUS_LINES ((Y_WIDTH - STATUS_MARGIN) / STATUS_FONT_SIZE) #define statusLineOffset(x) ((STATUS_CHARS + 1) * ((x) + 1)) -#define statusLineNo(x) ((x) * 2) +#define statusLineNo(x) (x) #define INFO_LINES statusLineNo(2) // This module sometimes ignores display command (too busy?), @@ -80,13 +80,15 @@ enum LcdColour { #define STR_P25 "P25" #define STR_YSF "SystemFusion" -CTFTSurenoo::CTFTSurenoo(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness) : +CTFTSurenoo::CTFTSurenoo(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness, bool duplex) : CDisplay(), m_callsign(callsign), m_dmrid(dmrid), m_serial(serial), m_brightness(brightness), m_mode(MODE_IDLE), +m_duplex(duplex), +//m_duplex(true), // uncomment to force duplex display for testing! m_refresh(false), m_refreshTimer(1000U, 0U, REFRESH_PERIOD), m_lineBuf(NULL) @@ -208,21 +210,37 @@ void CTFTSurenoo::writeDMRInt(unsigned int slotNo, const std::string& src, bool { assert(type != NULL); - setModeLine(STR_DMR); + if (m_mode != MODE_DMR) { + setModeLine(STR_DMR); + if (m_duplex) { + setStatusLine(statusLineNo(0), "Listening"); + setStatusLine(statusLineNo(1), "TS1"); + setStatusLine(statusLineNo(2), "Listening"); + setStatusLine(statusLineNo(3), "TS2"); + } + } + int pos = m_duplex ? (slotNo - 1) : 0; ::snprintf(m_temp, sizeof(m_temp), "%s %s", type, src.c_str()); - setStatusLine(statusLineNo(0), m_temp); + setStatusLine(statusLineNo(pos * 2), m_temp); ::snprintf(m_temp, sizeof(m_temp), "TS%d %s%s", slotNo, group ? "TG" : "", dst.c_str()); - setStatusLine(statusLineNo(1), m_temp); + setStatusLine(statusLineNo(pos * 2 + 1), m_temp); m_mode = MODE_DMR; } void CTFTSurenoo::clearDMRInt(unsigned int slotNo) { - setStatusLine(statusLineNo(0), "Listening"); - setStatusLine(statusLineNo(1), ""); + int pos = m_duplex ? (slotNo - 1) : 0; + setStatusLine(statusLineNo(pos * 2), "Listening"); + + if (m_duplex) { + ::snprintf(m_temp, sizeof(m_temp), "TS%d", slotNo); + setStatusLine(statusLineNo(pos * 2 + 1), m_temp); + } else { + setStatusLine(statusLineNo(1), ""); + } } void CTFTSurenoo::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) @@ -388,7 +406,7 @@ void CTFTSurenoo::refreshDisplay(void) ::snprintf(m_temp, sizeof(m_temp), "DCV%d(%d,%d,'%s',%d);", STATUS_FONT_SIZE, 0, STATUS_MARGIN + STATUS_FONT_SIZE * i, p, - (i < INFO_LINES) ? INFO_COLOUR : EXT_COLOUR); + (!m_duplex && i >= INFO_LINES) ? EXT_COLOUR : INFO_COLOUR); m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); } diff --git a/TFTSurenoo.h b/TFTSurenoo.h index c95c5c0..20a743a 100644 --- a/TFTSurenoo.h +++ b/TFTSurenoo.h @@ -29,7 +29,7 @@ class CTFTSurenoo : public CDisplay { public: - CTFTSurenoo(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness); + CTFTSurenoo(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness, bool duplex); virtual ~CTFTSurenoo(); virtual bool open(); @@ -71,6 +71,7 @@ private: ISerialPort* m_serial; unsigned int m_brightness; unsigned char m_mode; + bool m_duplex; bool m_refresh; CTimer m_refreshTimer; char* m_lineBuf;