Added AF/EON list screen

Long press Band in Advanced RDS view to open the list.
This commit is contained in:
Sjef Verhoeven PE5PVB
2023-07-10 21:43:21 +02:00
parent de160fb178
commit 4acdd5f01f
2 changed files with 998 additions and 882 deletions
+122 -18
View File
@@ -39,6 +39,7 @@ TFT_eSPI tft = TFT_eSPI(240, 320);
#endif #endif
bool advancedRDS; bool advancedRDS;
bool afscreen;
bool artheadold; bool artheadold;
bool batterydetect = true; bool batterydetect = true;
bool BWreset; bool BWreset;
@@ -194,6 +195,7 @@ IPAddress remoteip;
String cryptedpassword; String cryptedpassword;
String CurrentThemeString; String CurrentThemeString;
String ECColdtxt; String ECColdtxt;
String eonpsold[11];
String LIColdString; String LIColdString;
String PIold; String PIold;
String pinstringold; String pinstringold;
@@ -278,7 +280,7 @@ byte screensaver_IRQ = OFF;
void setup() { void setup() {
setupmode = true; setupmode = true;
EEPROM.begin(263); EEPROM.begin(263);
if (EEPROM.readByte(43) != 29) DefaultSettings(); if (EEPROM.readByte(43) != 30) DefaultSettings();
frequency = EEPROM.readUInt(0); frequency = EEPROM.readUInt(0);
VolSet = EEPROM.readInt(4); VolSet = EEPROM.readInt(4);
@@ -594,7 +596,7 @@ void loop() {
if (seek == true) Seek(direction); if (seek == true) Seek(direction);
if ((SStatus / 10 > LowLevelSet) && LowLevelInit == false && menu == false && band == BAND_FM) { if ((SStatus / 10 > LowLevelSet) && LowLevelInit == false && menu == false && band == BAND_FM) {
if (screenmute == false && !advancedRDS) { if (screenmute == false && !advancedRDS && !afscreen) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT7);
tft.setTextColor(ActiveColor); tft.setTextColor(ActiveColor);
if (showmodulation) { if (showmodulation) {
@@ -618,7 +620,7 @@ void loop() {
if ((SStatus / 10 <= LowLevelSet) && band == BAND_FM) { if ((SStatus / 10 <= LowLevelSet) && band == BAND_FM) {
if (LowLevelInit == true && menu == false) { if (LowLevelInit == true && menu == false) {
if (screenmute == false && !advancedRDS) { if (screenmute == false && !afscreen && !advancedRDS) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT7);
tft.fillRect(20, 139, 12, 8, GreyoutColor); tft.fillRect(20, 139, 12, 8, GreyoutColor);
tft.fillRect(34, 139, 12, 8, GreyoutColor); tft.fillRect(34, 139, 12, 8, GreyoutColor);
@@ -670,7 +672,7 @@ void loop() {
doSquelch(); doSquelch();
readRds(); readRds();
GetData(); GetData();
if (screenmute == false && advancedRDS == false) ShowModLevel(); if (screenmute == false && afscreen == false && advancedRDS == false) ShowModLevel();
} }
} }
@@ -704,9 +706,9 @@ void loop() {
if (screensaverset && !menu) ScreensaverTimerRestart(); if (screensaverset && !menu) ScreensaverTimerRestart();
} }
if (digitalRead(ROTARY_BUTTON) == LOW) ButtonPress(); if (digitalRead(ROTARY_BUTTON) == LOW) if (!afscreen) ButtonPress();
if (digitalRead(MODEBUTTON) == LOW && screenmute == false) ModeButtonPress(); if (digitalRead(MODEBUTTON) == LOW && screenmute == false) if (!afscreen) ModeButtonPress();
if (digitalRead(BWBUTTON) == LOW && screenmute == false) BWButtonPress(); if (digitalRead(BWBUTTON) == LOW && screenmute == false) if (!afscreen) BWButtonPress();
if (store == true) change++; if (store == true) change++;
@@ -751,19 +753,23 @@ void loop() {
void GetData() { void GetData() {
if (screenmute == false) { if (screenmute == false) {
if (band == BAND_FM) { if (band == BAND_FM) {
if (advancedRDS) ShowAdvancedRDS(); if (advancedRDS && !afscreen) ShowAdvancedRDS();
if (afscreen) ShowAFEON();
if (!afscreen)
{
showPI(); showPI();
showPTY(); showPTY();
showPS(); showPS();
doAF(); doAF();
showECC(); showECC();
showRadioText(); showRadioText();
}
ShowStereoStatus(); ShowStereoStatus();
} }
ShowRSSI(); ShowRSSI();
ShowBattery(); ShowBattery();
ShowOffset(); ShowOffset();
ShowSignalLevel(); if (!afscreen) ShowSignalLevel();
ShowBW(); ShowBW();
} }
} }
@@ -829,6 +835,9 @@ void ScreensaverInterrupt()
} }
void BANDBUTTONPress() { void BANDBUTTONPress() {
if (afscreen) {
BuildAdvancedRDS();
} else {
unsigned long counterold = millis(); unsigned long counterold = millis();
unsigned long counter = millis(); unsigned long counter = millis();
if (menu == false && power) { if (menu == false && power) {
@@ -854,7 +863,7 @@ void BANDBUTTONPress() {
} }
} else { } else {
if (band == BAND_FM) { if (band == BAND_FM) {
if (advancedRDS) BuildDisplay(); else BuildAdvancedRDS(); if (advancedRDS) BuildAFScreen(); else BuildAdvancedRDS();
} }
} }
while (digitalRead(BANDBUTTON) == LOW) delay(50); while (digitalRead(BANDBUTTON) == LOW) delay(50);
@@ -880,6 +889,7 @@ void BANDBUTTONPress() {
} }
} }
} }
}
void StoreFrequency() { void StoreFrequency() {
EEPROM.writeUInt(0, frequency); EEPROM.writeUInt(0, frequency);
@@ -1959,6 +1969,7 @@ void ButtonPress() {
void KeyUp() { void KeyUp() {
rotary = 0; rotary = 0;
if (!afscreen) {
if (menu == false) { if (menu == false) {
switch (tunemode) { switch (tunemode) {
case TUNE_MAN: case TUNE_MAN:
@@ -2365,9 +2376,11 @@ void KeyUp() {
} }
} }
} }
}
void KeyDown() { void KeyDown() {
rotary = 0; rotary = 0;
if (!afscreen) {
if (menu == false) { if (menu == false) {
switch (tunemode) { switch (tunemode) {
case TUNE_MAN: case TUNE_MAN:
@@ -2775,6 +2788,7 @@ void KeyDown() {
} }
} }
} }
}
void ShowMemoryPos() { void ShowMemoryPos() {
if (tunemode == TUNE_MEM) { if (tunemode == TUNE_MEM) {
@@ -2814,6 +2828,7 @@ void readRds() {
if (band == BAND_FM) { if (band == BAND_FM) {
RDSstatus = radio.rds.hasRDS; RDSstatus = radio.rds.hasRDS;
ShowRDSLogo(RDSstatus); ShowRDSLogo(RDSstatus);
if (!afscreen) {
if (RDSstatus == 0 && screenmute == false) { if (RDSstatus == 0 && screenmute == false) {
tft.setTextColor(SecondaryColor); tft.setTextColor(SecondaryColor);
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
@@ -2840,6 +2855,7 @@ void readRds() {
dropout = false; dropout = false;
} }
} }
}
if ((RDSstatus == 1 && RDSSPYUSB == true) || (RDSstatus == 1 && RDSSPYTCP == true)) { if ((RDSstatus == 1 && RDSSPYUSB == true) || (RDSstatus == 1 && RDSSPYTCP == true)) {
RDSSPYRDS = "G:\r\n"; RDSSPYRDS = "G:\r\n";
@@ -3484,12 +3500,98 @@ void MuteScreen(int setting) {
} }
} }
void ShowAFEON() {
tft.setTextColor(PrimaryColor);
if (radio.rds.hasAF) {
if (af_counterold != radio.af_counter) {
byte af_counter_show;
if (af_counter_show < 21) {
af_counter_show++;
tft.fillRect(2, 48, 150, 170, BackgroundColor);
for (byte i = 0; i < radio.af_counter; i++) tft.drawRightString((radio.af[i].filler ? "(f) " : "") + String(radio.af[i].frequency / 100) + "." + (radio.af[i].frequency % 100 < 10 ? "0" : "") + String(radio.af[i].frequency % 100), (i > 10 ? 145 : 60), 48 + (15 * i) - (i > 10 ? 165 : 0), GFXFF);
if (radio.af_counter > 10) tft.drawLine(75, 48, 75, 218, FrameColor);
}
af_counterold = radio.af_counter;
}
} else {
tft.drawString(myLanguage[language][87], 6, 45, GFXFF);
}
if (radio.rds.hasEON) {
if (haseonold == false) {
tft.setTextColor(BackgroundColor);
tft.drawString(myLanguage[language][88], 164, 45, GFXFF);
tft.setTextColor(PrimaryColor);
}
haseonold = true;
for (byte i = 0; i < radio.eon_counter; i++) {
byte eon_counter_show;
if (eon_counter_show < 11) {
eon_counter_show++;
tft.drawRightString(String(radio.eon[i].picode), 200, 48 + (15 * i), GFXFF);
if (radio.eon[i].ps.length() > 0) {
tft.setTextColor(ActiveColor);
tft.drawString("PS :", 210, 30, GFXFF);
tft.setTextColor(PrimaryColor);
if (radio.eon[i].ps != eonpsold[i]) {
tft.setTextColor(BackgroundColor);
tft.drawString(String(eonpsold[i]), 210, 48 + (15 * i), GFXFF);
eonpsold[i] = radio.eon[i].ps;
}
tft.drawString(String(radio.eon[i].ps), 210, 48 + (15 * i), GFXFF);
}
if (radio.eon[i].mappedfreq > 0) {
tft.setTextColor(ActiveColor);
tft.drawRightString("FREQ:", 310, 30, GFXFF);
tft.setTextColor(PrimaryColor);
tft.drawRightString(String(radio.eon[i].mappedfreq / 100) + "." + (radio.eon[i].mappedfreq % 100 < 10 ? "0" : "") + String(radio.eon[i].mappedfreq % 100), 310, 48 + (15 * i), GFXFF);
}
}
}
} else {
tft.drawString(myLanguage[language][88], 164, 45, GFXFF);
}
}
void BuildAFScreen() {
afscreen = true;
advancedRDS = false;
if (theme == 0) {
tft.invertDisplay(colorinvert);
tft.fillScreen(BackgroundColor);
tft.drawRect(0, 0, 320, 240, FrameColor);
tft.drawLine(0, 30, 320, 30, FrameColor);
tft.drawLine(0, 218, 320, 218, FrameColor);
tft.drawLine(160, 30, 160, 218, FrameColor);
tft.setTextColor(ActiveColor);
tft.setFreeFont(FONT14);
tft.drawString("kHz", 225, -5, GFXFF);
tft.setTextColor(ActiveColor);
tft.setFreeFont(FONT7);
tft.drawRightString("AF : ", 60, 30, GFXFF);
tft.drawRightString("PI : ", 200, 30, GFXFF);
tft.drawCentreString(myLanguage[language][93], 160, 218, GFXFF);
RDSstatusold = false;
Stereostatusold = false;
haseonold = false;
BWreset = true;
SStatusold = 2000;
rssiold = 2000;
batteryold = 6;
af_counterold = 254;
for (byte i = 0; i < 11; i++) eonpsold[i] = "";
}
}
void BuildAdvancedRDS() { void BuildAdvancedRDS() {
afscreen = false;
advancedRDS = true; advancedRDS = true;
ScreensaverTimerSet(OFF); ScreensaverTimerSet(OFF);
if (theme == 0) { if (theme == 0) {
tft.invertDisplay(colorinvert); tft.invertDisplay(colorinvert);
tft.fillScreen(BackgroundColor); tft.fillScreen(BackgroundColor);
tft.drawRect(0, 0, 320, 240, FrameColor);
tft.drawLine(0, 30, 320, 30, FrameColor); tft.drawLine(0, 30, 320, 30, FrameColor);
tft.drawLine(0, 70, 320, 70, FrameColor); tft.drawLine(0, 70, 320, 70, FrameColor);
tft.drawLine(0, 103, 320, 103, FrameColor); tft.drawLine(0, 103, 320, 103, FrameColor);
@@ -3545,7 +3647,7 @@ void BuildAdvancedRDS() {
tft.setTextColor(ActiveColor); tft.setTextColor(ActiveColor);
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
tft.drawString("kHz", 225, -5, GFXFF); tft.drawString("kHz", 225, -5, GFXFF);
tft.setTextColor(ActiveColor);
tft.drawCircle(81, 15, 10, GreyoutColor); tft.drawCircle(81, 15, 10, GreyoutColor);
tft.drawCircle(81, 15, 9, GreyoutColor); tft.drawCircle(81, 15, 9, GreyoutColor);
tft.drawCircle(91, 15, 10, GreyoutColor); tft.drawCircle(91, 15, 10, GreyoutColor);
@@ -3573,7 +3675,6 @@ void BuildAdvancedRDS() {
RDSstatusold = false; RDSstatusold = false;
ShowFreq(0); ShowFreq(0);
Stereostatusold = false; Stereostatusold = false;
updateBW();
SStatusold = 2000; SStatusold = 2000;
SStatus = 100; SStatus = 100;
rssiold = 2000; rssiold = 2000;
@@ -3587,6 +3688,7 @@ void BuildAdvancedRDS() {
MSold = 0; MSold = 0;
ECCold = 254; ECCold = 254;
licold = 254; licold = 254;
af_counterold = 254;
TAold = false; TAold = false;
TPold = false; TPold = false;
hastmcold = false; hastmcold = false;
@@ -3606,6 +3708,7 @@ void BuildAdvancedRDS() {
} }
void BuildDisplay() { void BuildDisplay() {
afscreen = false;
advancedRDS = false; advancedRDS = false;
if (theme == 0) { if (theme == 0) {
tft.invertDisplay(colorinvert); tft.invertDisplay(colorinvert);
@@ -3800,6 +3903,7 @@ void BuildDisplay() {
SStatus = 100; SStatus = 100;
rssiold = 2000; rssiold = 2000;
SNRold = 254; SNRold = 254;
af_counterold = 254;
batteryold = 6; batteryold = 6;
rds_clockold = ""; rds_clockold = "";
strcpy(programTypePrevious, "0"); strcpy(programTypePrevious, "0");
@@ -4189,7 +4293,7 @@ void doSquelch() {
if (XDRGTKUSB == false && XDRGTKTCP == false) { if (XDRGTKUSB == false && XDRGTKTCP == false) {
Squelch = analogRead(PIN_POT) / 4 - 100; Squelch = analogRead(PIN_POT) / 4 - 100;
if (Squelch > 920) Squelch = 920; if (Squelch > 920) Squelch = 920;
if (showsquelch && !advancedRDS) { if (showsquelch && !advancedRDS && !afscreen) {
if (seek == false && menu == false && Squelch != Squelchold) { if (seek == false && menu == false && Squelch != Squelchold) {
tft.setTextColor(BackgroundColor); tft.setTextColor(BackgroundColor);
if (Squelchold == -100) { if (Squelchold == -100) {
@@ -4230,7 +4334,7 @@ void doSquelch() {
SQ = true; SQ = true;
} }
} }
if (screenmute == false && showsquelch == true && !advancedRDS) { if (screenmute == false && showsquelch == true && !advancedRDS && !afscreen) {
if (Squelch != Squelchold) { if (Squelch != Squelchold) {
tft.setTextColor(BackgroundColor); tft.setTextColor(BackgroundColor);
if (Squelchold == -1) tft.drawCentreString("ST", 224, 164, GFXFF); else tft.drawCentreString(String(Squelchold / 10), 224, 164, GFXFF); if (Squelchold == -1) tft.drawCentreString("ST", 224, 164, GFXFF); else tft.drawCentreString(String(Squelchold / 10), 224, 164, GFXFF);
@@ -4264,18 +4368,18 @@ void doSquelch() {
void updateBW() { void updateBW() {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT7);
if (BWset == 0) { if (BWset == 0) {
if (screenmute == false && advancedRDS == false) { if (screenmute == false && advancedRDS == false && afscreen == false) {
tft.drawRoundRect(249, 35, 68, 20, 5, ActiveColor); tft.drawRoundRect(249, 35, 68, 20, 5, ActiveColor);
tft.setTextColor(ActiveColor); tft.setTextColor(ActiveColor);
} }
radio.setFMABandw(); radio.setFMABandw();
} else { } else {
if (screenmute == false && advancedRDS == false) { if (screenmute == false && advancedRDS == false && afscreen == false) {
tft.drawRoundRect(249, 35, 68, 20, 5, GreyoutColor); tft.drawRoundRect(249, 35, 68, 20, 5, GreyoutColor);
tft.setTextColor(GreyoutColor); tft.setTextColor(GreyoutColor);
} }
} }
if (advancedRDS == false) tft.drawCentreString("AUTO BW", 282, 33, GFXFF); if (screenmute == false && advancedRDS == false && afscreen == false) tft.drawCentreString("AUTO BW", 282, 33, GFXFF);
} }
void updateiMS() { void updateiMS() {
@@ -5527,7 +5631,7 @@ void passwordcrypt() {
} }
void DefaultSettings() { void DefaultSettings() {
EEPROM.writeByte(43, 29); EEPROM.writeByte(43, 30);
EEPROM.writeUInt(0, 10000); EEPROM.writeUInt(0, 10000);
EEPROM.writeInt(4, 0); EEPROM.writeInt(4, 0);
EEPROM.writeUInt(8, 0); EEPROM.writeUInt(8, 0);
+25 -13
View File
@@ -1,6 +1,6 @@
// [number of languages][number of texts][max. length of text] // [number of languages][number of texts][max. length of text]
static const char* const myLanguage[12][93] = { static const char* const myLanguage[12][94] = {
{ "English", // English { "English", // English
"Rotary direction changed", // 1 "Rotary direction changed", // 1
"Please release button", // 2 "Please release button", // 2
@@ -93,7 +93,8 @@ static const char* const myLanguage[12][93] = {
"No RT+ available", // 89 "No RT+ available", // 89
"FM default stepsize", // 90 "FM default stepsize", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec" // 92 "Sec", // 92
"PRESS BAND TO CLOSE" // 93
}, },
{ "Nederlands", // Dutch { "Nederlands", // Dutch
@@ -188,7 +189,8 @@ static const char* const myLanguage[12][93] = {
"RT+ niet beschikbaar", // 89 "RT+ niet beschikbaar", // 89
"FM stapgrootte", // 90 "FM stapgrootte", // 90
"Schermbeveiliging", // 91 "Schermbeveiliging", // 91
"sec." // 92 "sec.", // 92
"DRUK OP BAND OM AF TE SLUITEN" // 93
}, },
{ "Polski", // Polish { "Polski", // Polish
@@ -283,7 +285,8 @@ static const char* const myLanguage[12][93] = {
"No RT+ available", // 89 "No RT+ available", // 89
"FM min stepsize", // 90 "FM min stepsize", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec" // 92 "Sec", // 92
"PRESS BAND TO CLOSE" // 93
}, },
{ "Hrvatski", // Croatian { "Hrvatski", // Croatian
@@ -378,7 +381,8 @@ static const char* const myLanguage[12][93] = {
"No RT+ available", // 89 "No RT+ available", // 89
"FM min stepsize", // 90 "FM min stepsize", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec" // 92 "Sec", // 92
"PRESS BAND TO CLOSE" // 93
}, },
{ "Ελληνικά", // Greek { "Ελληνικά", // Greek
@@ -473,7 +477,8 @@ static const char* const myLanguage[12][93] = {
"Μη διαθέσιμο RT+", // 89 "Μη διαθέσιμο RT+", // 89
"Μέγεθος βήματος FM", // 90 "Μέγεθος βήματος FM", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec" // 92 "Sec", // 92
"PRESS BAND TO CLOSE" // 93
}, },
{ "Romana", // Romanian { "Romana", // Romanian
@@ -568,7 +573,8 @@ static const char* const myLanguage[12][93] = {
"No RT+ available", // 89 "No RT+ available", // 89
"FM min stepsize", // 90 "FM min stepsize", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec" // 92 "Sec", // 92
"PRESS BAND TO CLOSE" // 93
}, },
{ "Deutsch", // German { "Deutsch", // German
@@ -663,7 +669,8 @@ static const char* const myLanguage[12][93] = {
"No RT+ available", // 89 "No RT+ available", // 89
"FM min stepsize", // 90 "FM min stepsize", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec" // 92 "Sec", // 92
"PRESS BAND TO CLOSE" // 93
}, },
{ "Czech", // Czech { "Czech", // Czech
@@ -758,7 +765,8 @@ static const char* const myLanguage[12][93] = {
"No RT+ available", // 89 "No RT+ available", // 89
"FM min stepsize", // 90 "FM min stepsize", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec" // 92 "Sec", // 92
"PRESS BAND TO CLOSE" // 93
}, },
{ "Slovak", // Slovak { "Slovak", // Slovak
@@ -853,7 +861,8 @@ static const char* const myLanguage[12][93] = {
"No RT+ available", // 89 "No RT+ available", // 89
"FM min stepsize", // 90 "FM min stepsize", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec" // 92 "Sec", // 92
"PRESS BAND TO CLOSE" // 93
}, },
{ "France", // French { "France", // French
@@ -948,7 +957,8 @@ static const char* const myLanguage[12][93] = {
"RT+ indisponible", // 89 "RT+ indisponible", // 89
"Valeur du pas FM par défaut", // 90 "Valeur du pas FM par défaut", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec" // 92 "Sec", // 92
"PRESS BAND TO CLOSE" // 93
}, },
{ "Български", // Bulgarian { "Български", // Bulgarian
@@ -1043,7 +1053,8 @@ static const char* const myLanguage[12][93] = {
"RT+ опцията не е налична", // 89 "RT+ опцията не е налична", // 89
"Размер на стъпката по подразбиране на FM", // 90 "Размер на стъпката по подразбиране на FM", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec" // 92 "Sec", // 92
"PRESS BAND TO CLOSE" // 93
}, },
{ "Русский", // Russian { "Русский", // Russian
@@ -1138,7 +1149,8 @@ static const char* const myLanguage[12][93] = {
"Нет доступного RT+", // 89 "Нет доступного RT+", // 89
"Шаг FM по умолчанию", // 90 "Шаг FM по умолчанию", // 90
"Экран выкл. через", // 91 "Экран выкл. через", // 91
"сек" // 92 "сек", // 92
"PRESS BAND TO CLOSE" // 93
} }
}; };