mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 23:45:49 +08:00
New Nextion screen layout with better looking fonts
New parameter for selecting ON7LDS Nextion screen layout The active ip address of the host is showed on main screen Nextion DMR page: * Talker alias (if available) will be decoded and displayed (in green to know it's the TA) * Font will get smaller if TA is to long GPS data will be decoded and logged
This commit is contained in:
56
Display.cpp
56
Display.cpp
@@ -18,14 +18,15 @@
|
||||
|
||||
#include "Display.h"
|
||||
#include "Defines.h"
|
||||
#include "Log.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
||||
CDisplay::CDisplay() :
|
||||
m_timer1(1000U, 3U),
|
||||
m_timer2(1000U, 3U),
|
||||
m_timer1(3000U, 3U),
|
||||
m_timer2(3000U, 3U),
|
||||
m_mode1(MODE_IDLE),
|
||||
m_mode2(MODE_IDLE)
|
||||
{
|
||||
@@ -117,7 +118,6 @@ void CDisplay::writeDMR(unsigned int slotNo, const std::string& src, bool group,
|
||||
m_timer2.start();
|
||||
m_mode2 = MODE_IDLE;
|
||||
}
|
||||
|
||||
writeDMRInt(slotNo, src, group, dst, type);
|
||||
}
|
||||
|
||||
@@ -127,11 +127,55 @@ void CDisplay::writeDMRRSSI(unsigned int slotNo, unsigned char rssi)
|
||||
writeDMRRSSIInt(slotNo, rssi);
|
||||
}
|
||||
|
||||
void CDisplay::writeDMRTA(unsigned int slotNo, unsigned char* talkerAlias, const char* type)
|
||||
{
|
||||
char TA[32U];
|
||||
unsigned char *b;
|
||||
unsigned char c;
|
||||
int j;
|
||||
unsigned int i,t1,t2, TAsize, TAformat;
|
||||
|
||||
if (strcmp(type," ")==0) { writeDMRTAInt(slotNo, (unsigned char*)TA, type); return; }
|
||||
|
||||
TAformat=(talkerAlias[0]>>6U) & 0x03U;
|
||||
TAsize = (talkerAlias[0]>>1U) & 0x1FU;
|
||||
::strcpy(TA,"(could not decode)");
|
||||
switch (TAformat) {
|
||||
case 0U: // 7 bit
|
||||
::memset (&TA,0,32U);
|
||||
b=&talkerAlias[0];
|
||||
t1=0; t2=0; c=0;
|
||||
for (i=0;(i<32U)&&(t2<TAsize);i++) {
|
||||
for (j=7U;j>=0;j--) {
|
||||
c = (c<<1U) | (b[i] >> j);
|
||||
if (++t1==7U) { if (i>0) {TA[t2++]=c & 0x7FU; } t1=0; c=0; }
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1U: // ISO 8 bit
|
||||
case 2U: // UTF8
|
||||
::strcpy(TA,(char*)talkerAlias+1U);
|
||||
break;
|
||||
case 3U: // UTF16 poor man's conversion
|
||||
t2=0;
|
||||
::memset (&TA,0,32U);
|
||||
for(i=0;(i<15)&&(t2<TAsize);i++) {
|
||||
if (talkerAlias[2U*i+1U]==0)
|
||||
TA[t2++]=talkerAlias[2U*i+2U]; else TA[t2++]='?';
|
||||
}
|
||||
TA[TAsize]=0;
|
||||
break;
|
||||
}
|
||||
LogMessage("DMR Talker Alias (Data Format %u, Received %u/%u char): '%s'", TAformat, ::strlen(TA), TAsize, TA);
|
||||
if (::strlen(TA)>TAsize) { if (strlen(TA)<29U) strcat(TA," ?"); else strcpy(TA+28U," ?"); }
|
||||
if (strlen((char*)TA)>=4U) writeDMRTAInt(slotNo, (unsigned char*)TA, type);
|
||||
|
||||
}
|
||||
|
||||
void CDisplay::writeDMRBER(unsigned int slotNo, float ber)
|
||||
{
|
||||
writeDMRBERInt(slotNo, ber);
|
||||
}
|
||||
|
||||
void CDisplay::clearDMR(unsigned int slotNo)
|
||||
{
|
||||
if (slotNo == 1U) {
|
||||
@@ -293,6 +337,10 @@ void CDisplay::writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi)
|
||||
{
|
||||
}
|
||||
|
||||
void CDisplay::writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, const char* type)
|
||||
{
|
||||
}
|
||||
|
||||
void CDisplay::writeDMRBERInt(unsigned int slotNo, float ber)
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user