@@ -65,7 +65,7 @@ enum LcdColour {
65
65
#define STATUS_CHARS (X_WIDTH / (STATUS_FONT_SIZE / 2 ))
66
66
#define STATUS_LINES ((Y_WIDTH - STATUS_MARGIN) / STATUS_FONT_SIZE)
67
67
#define statusLineOffset (x ) ((STATUS_CHARS + 1 ) * ((x) + 1 ))
68
- #define statusLineNo (x ) ((x) * 2 )
68
+ #define statusLineNo (x ) (x )
69
69
#define INFO_LINES statusLineNo (2 )
70
70
71
71
// This module sometimes ignores display command (too busy?),
@@ -80,13 +80,15 @@ enum LcdColour {
80
80
#define STR_P25 " P25"
81
81
#define STR_YSF " SystemFusion"
82
82
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 ) :
84
84
CDisplay(),
85
85
m_callsign(callsign),
86
86
m_dmrid(dmrid),
87
87
m_serial(serial),
88
88
m_brightness(brightness),
89
89
m_mode(MODE_IDLE),
90
+ m_duplex(duplex),
91
+ // m_duplex(true), // uncomment to force duplex display for testing!
90
92
m_refresh(false ),
91
93
m_refreshTimer(1000U , 0U , REFRESH_PERIOD),
92
94
m_lineBuf(NULL )
@@ -208,21 +210,37 @@ void CTFTSurenoo::writeDMRInt(unsigned int slotNo, const std::string& src, bool
208
210
{
209
211
assert (type != NULL );
210
212
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 ;
213
224
::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);
215
226
216
227
::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);
218
229
219
230
m_mode = MODE_DMR;
220
231
}
221
232
222
233
void CTFTSurenoo::clearDMRInt (unsigned int slotNo)
223
234
{
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
+ }
226
244
}
227
245
228
246
void CTFTSurenoo::writeFusionInt (const char * source, const char * dest, const char * type, const char * origin)
@@ -388,7 +406,7 @@ void CTFTSurenoo::refreshDisplay(void)
388
406
::snprintf(m_temp, sizeof(m_temp), " DCV%d (%d,%d,' %s' ,%d);" ,
389
407
STATUS_FONT_SIZE, 0,
390
408
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 );
392
410
m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp));
393
411
}
394
412
0 commit comments