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.
This commit is contained in:
SASANO Takayoshi 2020-02-29 06:51:26 +09:00
parent ead41ba9a5
commit 0bc6bcdb26
3 changed files with 29 additions and 10 deletions

View File

@ -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") {

View File

@ -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));
}

View File

@ -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;