Skip to content

Commit 0bc6bcd

Browse files
committed
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.
1 parent ead41ba commit 0bc6bcd

File tree

3 files changed

+30
-11
lines changed

3 files changed

+30
-11
lines changed

Display.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ CDisplay* CDisplay::createDisplay(const CConf& conf, CUMP* ump, CModem* modem)
447447
serial = new CSerialController(port, (type == "TFT Serial") ? SERIAL_9600 : SERIAL_115200);
448448

449449
if (type == "TFT Surenoo")
450-
display = new CTFTSurenoo(conf.getCallsign(), dmrid, serial, brightness);
450+
display = new CTFTSurenoo(conf.getCallsign(), dmrid, serial, brightness, conf.getDuplex());
451451
else
452452
display = new CTFTSerial(conf.getCallsign(), dmrid, serial, brightness);
453453
} else if (type == "Nextion") {

TFTSurenoo.cpp

+27-9
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ enum LcdColour {
6565
#define STATUS_CHARS (X_WIDTH / (STATUS_FONT_SIZE / 2))
6666
#define STATUS_LINES ((Y_WIDTH - STATUS_MARGIN) / STATUS_FONT_SIZE)
6767
#define statusLineOffset(x) ((STATUS_CHARS + 1) * ((x) + 1))
68-
#define statusLineNo(x) ((x) * 2)
68+
#define statusLineNo(x) (x)
6969
#define INFO_LINES statusLineNo(2)
7070

7171
// This module sometimes ignores display command (too busy?),
@@ -80,13 +80,15 @@ enum LcdColour {
8080
#define STR_P25 "P25"
8181
#define STR_YSF "SystemFusion"
8282

83-
CTFTSurenoo::CTFTSurenoo(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness) :
83+
CTFTSurenoo::CTFTSurenoo(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness, bool duplex) :
8484
CDisplay(),
8585
m_callsign(callsign),
8686
m_dmrid(dmrid),
8787
m_serial(serial),
8888
m_brightness(brightness),
8989
m_mode(MODE_IDLE),
90+
m_duplex(duplex),
91+
//m_duplex(true), // uncomment to force duplex display for testing!
9092
m_refresh(false),
9193
m_refreshTimer(1000U, 0U, REFRESH_PERIOD),
9294
m_lineBuf(NULL)
@@ -208,21 +210,37 @@ void CTFTSurenoo::writeDMRInt(unsigned int slotNo, const std::string& src, bool
208210
{
209211
assert(type != NULL);
210212

211-
setModeLine(STR_DMR);
212-
213+
if (m_mode != MODE_DMR) {
214+
setModeLine(STR_DMR);
215+
if (m_duplex) {
216+
setStatusLine(statusLineNo(0), "Listening");
217+
setStatusLine(statusLineNo(1), "TS1");
218+
setStatusLine(statusLineNo(2), "Listening");
219+
setStatusLine(statusLineNo(3), "TS2");
220+
}
221+
}
222+
223+
int pos = m_duplex ? (slotNo - 1) : 0;
213224
::snprintf(m_temp, sizeof(m_temp), "%s %s", type, src.c_str());
214-
setStatusLine(statusLineNo(0), m_temp);
225+
setStatusLine(statusLineNo(pos * 2), m_temp);
215226

216227
::snprintf(m_temp, sizeof(m_temp), "TS%d %s%s", slotNo, group ? "TG" : "", dst.c_str());
217-
setStatusLine(statusLineNo(1), m_temp);
228+
setStatusLine(statusLineNo(pos * 2 + 1), m_temp);
218229

219230
m_mode = MODE_DMR;
220231
}
221232

222233
void CTFTSurenoo::clearDMRInt(unsigned int slotNo)
223234
{
224-
setStatusLine(statusLineNo(0), "Listening");
225-
setStatusLine(statusLineNo(1), "");
235+
int pos = m_duplex ? (slotNo - 1) : 0;
236+
setStatusLine(statusLineNo(pos * 2), "Listening");
237+
238+
if (m_duplex) {
239+
::snprintf(m_temp, sizeof(m_temp), "TS%d", slotNo);
240+
setStatusLine(statusLineNo(pos * 2 + 1), m_temp);
241+
} else {
242+
setStatusLine(statusLineNo(1), "");
243+
}
226244
}
227245

228246
void CTFTSurenoo::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin)
@@ -388,7 +406,7 @@ void CTFTSurenoo::refreshDisplay(void)
388406
::snprintf(m_temp, sizeof(m_temp), "DCV%d(%d,%d,'%s',%d);",
389407
STATUS_FONT_SIZE, 0,
390408
STATUS_MARGIN + STATUS_FONT_SIZE * i, p,
391-
(i < INFO_LINES) ? INFO_COLOUR : EXT_COLOUR);
409+
(!m_duplex && i >= INFO_LINES) ? EXT_COLOUR : INFO_COLOUR);
392410
m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp));
393411
}
394412

TFTSurenoo.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
class CTFTSurenoo : public CDisplay
3030
{
3131
public:
32-
CTFTSurenoo(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness);
32+
CTFTSurenoo(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness, bool duplex);
3333
virtual ~CTFTSurenoo();
3434

3535
virtual bool open();
@@ -71,6 +71,7 @@ class CTFTSurenoo : public CDisplay
7171
ISerialPort* m_serial;
7272
unsigned int m_brightness;
7373
unsigned char m_mode;
74+
bool m_duplex;
7475
bool m_refresh;
7576
CTimer m_refreshTimer;
7677
char* m_lineBuf;

0 commit comments

Comments
 (0)