Skip to content

Commit 8d87037

Browse files
authored
Merge pull request #558 from jg1uaa/master
TFTSurenoo: Simplify DMR status display
2 parents b0fe8dc + 0bc6bcd commit 8d87037

File tree

3 files changed

+61
-50
lines changed

3 files changed

+61
-50
lines changed

Display.cpp

Lines changed: 1 addition & 1 deletion
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

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ enum LcdColour {
4949
#define FONT_MEDIUM 24 // 12x24
5050
#define FONT_LARGE 32 // 16x32
5151

52-
#define FG_COLOUR COLOUR_CYAN
52+
#define INFO_COLOUR COLOUR_CYAN
53+
#define EXT_COLOUR COLOUR_DARK_GREEN
5354
#define BG_COLOUR COLOUR_BLACK
5455
#define ERROR_COLOUR COLOUR_DARK_RED
5556
#define MODE_COLOUR COLOUR_YELLOW
@@ -63,7 +64,9 @@ enum LcdColour {
6364
#define MODE_CHARS (X_WIDTH / (MODE_FONT_SIZE / 2))
6465
#define STATUS_CHARS (X_WIDTH / (STATUS_FONT_SIZE / 2))
6566
#define STATUS_LINES ((Y_WIDTH - STATUS_MARGIN) / STATUS_FONT_SIZE)
66-
#define statusLine_offset(x) ((STATUS_CHARS + 1) * ((x) + 1))
67+
#define statusLineOffset(x) ((STATUS_CHARS + 1) * ((x) + 1))
68+
#define statusLineNo(x) (x)
69+
#define INFO_LINES statusLineNo(2)
6770

6871
// This module sometimes ignores display command (too busy?),
6972
// so supress display refresh
@@ -77,13 +80,15 @@ enum LcdColour {
7780
#define STR_P25 "P25"
7881
#define STR_YSF "SystemFusion"
7982

80-
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) :
8184
CDisplay(),
8285
m_callsign(callsign),
8386
m_dmrid(dmrid),
8487
m_serial(serial),
8588
m_brightness(brightness),
8689
m_mode(MODE_IDLE),
90+
m_duplex(duplex),
91+
//m_duplex(true), // uncomment to force duplex display for testing!
8792
m_refresh(false),
8893
m_refreshTimer(1000U, 0U, REFRESH_PERIOD),
8994
m_lineBuf(NULL)
@@ -105,7 +110,7 @@ bool CTFTSurenoo::open()
105110
return false;
106111
}
107112

108-
m_lineBuf = new char[statusLine_offset(STATUS_LINES)];
113+
m_lineBuf = new char[statusLineOffset(STATUS_LINES)];
109114
if (m_lineBuf == NULL) {
110115
LogError("Cannot allocate line buffer");
111116
m_serial->close();
@@ -131,8 +136,8 @@ void CTFTSurenoo::setIdleInt()
131136
setModeLine(STR_MMDVM);
132137

133138
::snprintf(m_temp, sizeof(m_temp), "%-6s / %u", m_callsign.c_str(), m_dmrid);
134-
setStatusLine(0, m_temp);
135-
setStatusLine(2, "IDLE");
139+
setStatusLine(statusLineNo(0), m_temp);
140+
setStatusLine(statusLineNo(1), "IDLE");
136141

137142
m_mode = MODE_IDLE;
138143
}
@@ -142,16 +147,16 @@ void CTFTSurenoo::setErrorInt(const char* text)
142147
assert(text != NULL);
143148

144149
setModeLine(STR_MMDVM);
145-
setStatusLine(0, text);
146-
setStatusLine(2, "ERROR");
150+
setStatusLine(statusLineNo(0), text);
151+
setStatusLine(statusLineNo(1), "ERROR");
147152

148153
m_mode = MODE_ERROR;
149154
}
150155

151156
void CTFTSurenoo::setLockoutInt()
152157
{
153158
setModeLine(STR_MMDVM);
154-
setStatusLine(2, "LOCKOUT");
159+
setStatusLine(statusLineNo(1), "LOCKOUT");
155160

156161
m_mode = MODE_LOCKOUT;
157162
}
@@ -162,7 +167,7 @@ void CTFTSurenoo::setQuitInt()
162167
CThread::sleep(REFRESH_PERIOD);
163168

164169
setModeLine(STR_MMDVM);
165-
setStatusLine(2, "STOPPED");
170+
setStatusLine(statusLineNo(1), "STOPPED");
166171

167172
refreshDisplay();
168173

@@ -180,57 +185,62 @@ void CTFTSurenoo::writeDStarInt(const char* my1, const char* my2, const char* yo
180185
setModeLine(STR_MMDVM);
181186

182187
::snprintf(m_temp, sizeof(m_temp), "%s %.8s/%4.4s", type, my1, my2);
183-
setStatusLine(0, m_temp);
188+
setStatusLine(statusLineNo(0), m_temp);
184189

185190
::snprintf(m_temp, sizeof(m_temp), "%.8s", your);
186-
setStatusLine(2, m_temp);
191+
setStatusLine(statusLineNo(1), m_temp);
187192

188193
if (::strcmp(reflector, " ") != 0)
189194
::snprintf(m_temp, sizeof(m_temp), "via %.8s", reflector);
190195
else
191196
::strcpy(m_temp, "");
192-
setStatusLine(4, m_temp);
197+
setStatusLine(statusLineNo(2), m_temp);
193198

194199
m_mode = MODE_DSTAR;
195200
}
196201

197202
void CTFTSurenoo::clearDStarInt()
198203
{
199-
setStatusLine(0, "Listening");
200-
setStatusLine(2, "");
201-
setStatusLine(4, "");
204+
setStatusLine(statusLineNo(0), "Listening");
205+
setStatusLine(statusLineNo(1), "");
206+
setStatusLine(statusLineNo(2), "");
202207
}
203208

204209
void CTFTSurenoo::writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type)
205210
{
206211
assert(type != NULL);
207212

208-
// slotNo comes 1 or 2, convert 0 or 1
209-
slotNo--;
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+
}
210222

211-
setModeLine(STR_DMR);
223+
int pos = m_duplex ? (slotNo - 1) : 0;
224+
::snprintf(m_temp, sizeof(m_temp), "%s %s", type, src.c_str());
225+
setStatusLine(statusLineNo(pos * 2), m_temp);
212226

213-
::snprintf(m_temp, sizeof(m_temp), "%d Listening", 2 - slotNo);
214-
setStatusLine((1 - slotNo) * 2, m_temp);
215-
216-
::snprintf(m_temp, sizeof(m_temp), "%d %s %s", slotNo + 1, type, src.c_str());
217-
setStatusLine(slotNo * 2, m_temp);
218-
219-
::snprintf(m_temp, sizeof(m_temp), "%s%s", group ? "TG" : "", dst.c_str());
220-
setStatusLine(slotNo * 2 + 1, m_temp);
227+
::snprintf(m_temp, sizeof(m_temp), "TS%d %s%s", slotNo, group ? "TG" : "", dst.c_str());
228+
setStatusLine(statusLineNo(pos * 2 + 1), m_temp);
221229

222230
m_mode = MODE_DMR;
223231
}
224232

225233
void CTFTSurenoo::clearDMRInt(unsigned int slotNo)
226234
{
227-
// slotNo comes 1 or 2, convert 0 or 1
228-
slotNo--;
235+
int pos = m_duplex ? (slotNo - 1) : 0;
236+
setStatusLine(statusLineNo(pos * 2), "Listening");
229237

230-
::snprintf(m_temp, sizeof(m_temp), "%d Listening", slotNo + 1);
231-
setStatusLine(slotNo * 2, m_temp);
232-
233-
setStatusLine(slotNo * 2 + 1, "");
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+
}
234244
}
235245

236246
void CTFTSurenoo::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin)
@@ -243,16 +253,16 @@ void CTFTSurenoo::writeFusionInt(const char* source, const char* dest, const cha
243253
setModeLine(STR_YSF);
244254

245255
::snprintf(m_temp, sizeof(m_temp), "%s %.10s", type, source);
246-
setStatusLine(0, m_temp);
256+
setStatusLine(statusLineNo(0), m_temp);
247257

248258
::snprintf(m_temp, sizeof(m_temp), " %.10s", dest);
249-
setStatusLine(2, m_temp);
259+
setStatusLine(statusLineNo(1), m_temp);
250260

251261
if (::strcmp(origin, " ") != 0)
252262
::snprintf(m_temp, sizeof(m_temp), "at %.10s", origin);
253263
else
254264
::strcpy(m_temp, "");
255-
setStatusLine(4, m_temp);
265+
setStatusLine(statusLineNo(2), m_temp);
256266

257267
m_mode = MODE_YSF;
258268
}
@@ -270,10 +280,10 @@ void CTFTSurenoo::writeP25Int(const char* source, bool group, unsigned int dest,
270280
setModeLine(STR_P25);
271281

272282
::snprintf(m_temp, sizeof(m_temp), "%s %.10s", type, source);
273-
setStatusLine(0, m_temp);
283+
setStatusLine(statusLineNo(0), m_temp);
274284

275285
::snprintf(m_temp, sizeof(m_temp), " %s%u", group ? "TG" : "", dest);
276-
setStatusLine(2, m_temp);
286+
setStatusLine(statusLineNo(1), m_temp);
277287

278288
m_mode = MODE_P25;
279289
}
@@ -291,10 +301,10 @@ void CTFTSurenoo::writeNXDNInt(const char* source, bool group, unsigned int dest
291301
setModeLine(STR_NXDN);
292302

293303
::snprintf(m_temp, sizeof(m_temp), "%s %.10s", type, source);
294-
setStatusLine(0, m_temp);
304+
setStatusLine(statusLineNo(0), m_temp);
295305

296306
::snprintf(m_temp, sizeof(m_temp), " %s%u", group ? "TG" : "", dest);
297-
setStatusLine(2, m_temp);
307+
setStatusLine(statusLineNo(1), m_temp);
298308

299309
m_mode = MODE_NXDN;
300310
}
@@ -306,26 +316,26 @@ void CTFTSurenoo::clearNXDNInt()
306316

307317
void CTFTSurenoo::writePOCSAGInt(uint32_t ric, const std::string& message)
308318
{
309-
setStatusLine(2, "POCSAG TX");
319+
setStatusLine(statusLineNo(1), "POCSAG TX");
310320

311321
m_mode = MODE_POCSAG;
312322
}
313323

314324
void CTFTSurenoo::clearPOCSAGInt()
315325
{
316-
setStatusLine(2, "IDLE");
326+
setStatusLine(statusLineNo(1), "IDLE");
317327
}
318328

319329
void CTFTSurenoo::writeCWInt()
320330
{
321-
setStatusLine(2, "CW TX");
331+
setStatusLine(statusLineNo(1), "CW TX");
322332

323333
m_mode = MODE_CW;
324334
}
325335

326336
void CTFTSurenoo::clearCWInt()
327337
{
328-
setStatusLine(2, "IDLE");
338+
setStatusLine(statusLineNo(1), "IDLE");
329339
}
330340

331341
void CTFTSurenoo::close()
@@ -367,7 +377,7 @@ void CTFTSurenoo::setModeLine(const char *text)
367377

368378
void CTFTSurenoo::setStatusLine(unsigned int line, const char *text)
369379
{
370-
setLineBuffer(m_lineBuf + statusLine_offset(line), text, STATUS_CHARS);
380+
setLineBuffer(m_lineBuf + statusLineOffset(line), text, STATUS_CHARS);
371381
}
372382

373383
void CTFTSurenoo::refreshDisplay(void)
@@ -390,13 +400,13 @@ void CTFTSurenoo::refreshDisplay(void)
390400
391401
// status line
392402
for (int i = 0; i < STATUS_LINES; i++) {
393-
char *p = m_lineBuf + statusLine_offset(i);
403+
char *p = m_lineBuf + statusLineOffset(i);
394404
if (!::strlen(p)) continue;
395405
396406
::snprintf(m_temp, sizeof(m_temp), "DCV%d(%d,%d,'%s',%d);",
397407
STATUS_FONT_SIZE, 0,
398-
STATUS_MARGIN + STATUS_FONT_SIZE * i,
399-
p, FG_COLOUR);
408+
STATUS_MARGIN + STATUS_FONT_SIZE * i, p,
409+
(!m_duplex && i >= INFO_LINES) ? EXT_COLOUR : INFO_COLOUR);
400410
m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp));
401411
}
402412

TFTSurenoo.h

Lines changed: 2 additions & 1 deletion
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)