From 209f7079b79abaa845a6fdef0a3d3d3ae91d5a06 Mon Sep 17 00:00:00 2001 From: Sjef Verhoeven PE5PVB Date: Tue, 9 Apr 2024 16:27:24 +0200 Subject: [PATCH] Added extra menu options for FM DX mode (not integrated yet!) --- TEF6686_ESP32.ino | 12 ++++ src/constants.h | 21 ++++-- src/gui.cpp | 109 +++++++++++++++++++++++++++++- src/gui.h | 3 + src/language.h | 164 ++++++++++++++++++++++++++++++++++++++++------ 5 files changed, 281 insertions(+), 28 deletions(-) diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index aa1a855..13c3a6d 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -92,6 +92,8 @@ bool RDSstatusold; bool rdsstereoold; bool rtcset; bool scandxmode; +bool scanmem; +bool scanmute; bool screenmute; bool screensavertriggered = false; bool seek; @@ -173,6 +175,7 @@ byte rdsqualityold; byte region; byte rotarymode; byte touchrotating; +byte scancancel; byte scanstart; byte scanstop; byte scanhold; @@ -484,6 +487,9 @@ void setup() { scanstart = EEPROM.readByte(EE_BYTE_SCANSTART); scanstop = EEPROM.readByte(EE_BYTE_SCANSTOP); scanhold = EEPROM.readByte(EE_BYTE_SCANHOLD); + scanmem = EEPROM.readByte(EE_BYTE_SCANMEM); + scancancel = EEPROM.readByte(EE_BYTE_SCANCANCEL); + scanmute = EEPROM.readByte(EE_BYTE_SCANMUTE); if (spispeed == SPI_SPEED_DEFAULT) tft.setSPISpeed(SPI_FREQUENCY / 1000000); else tft.setSPISpeed(spispeed * 10); LWLowEdgeSet = FREQ_LW_LOW_EDGE_MIN; @@ -2077,6 +2083,9 @@ void ModeButtonPress() { EEPROM.writeByte(EE_BYTE_SCANSTART, scanstart); EEPROM.writeByte(EE_BYTE_SCANSTOP, scanstop); EEPROM.writeByte(EE_BYTE_SCANHOLD, scanhold); + EEPROM.writeByte(EE_BYTE_SCANMEM, scanmem); + EEPROM.writeByte(EE_BYTE_SCANCANCEL, scancancel); + EEPROM.writeByte(EE_BYTE_SCANMUTE, scanmute); EEPROM.commit(); if (af == 2) radio.rds.afreg = true; else radio.rds.afreg = false; if (!usesquelch) radio.setUnMute(); @@ -4170,6 +4179,9 @@ void DefaultSettings(byte userhardwaremodel) { EEPROM.writeByte(EE_BYTE_SCANSTART, 0); EEPROM.writeByte(EE_BYTE_SCANSTOP, 9); EEPROM.writeByte(EE_BYTE_SCANHOLD, 5); + EEPROM.writeByte(EE_BYTE_SCANMEM, 1); + EEPROM.writeByte(EE_BYTE_SCANCANCEL, 0); + EEPROM.writeByte(EE_BYTE_SCANMUTE, 0); for (int i = 0; i < EE_PRESETS_CNT; i++) { EEPROM.writeByte(i + EE_PRESETS_BAND_START, BAND_FM); diff --git a/src/constants.h b/src/constants.h index 26022db..2080949 100644 --- a/src/constants.h +++ b/src/constants.h @@ -198,7 +198,7 @@ #define EE_PRESETS_CNT 99 #define EE_CHECKBYTE_VALUE 6 // 0 ~ 255,add new entry, change for new value -#define EE_TOTAL_CNT 2216 +#define EE_TOTAL_CNT 2219 #define EE_UINT16_FREQUENCY_FM 0 #define EE_BYTE_VOLSET 4 #define EE_BYTE_STEREO 5 @@ -285,12 +285,15 @@ #define EE_BYTE_SCANSTART 130 #define EE_BYTE_SCANSTOP 131 #define EE_BYTE_SCANHOLD 132 -#define EE_PRESETS_BAND_START 133 -#define EE_PRESET_BW_START 233 -#define EE_PRESET_MS_START 333 -#define EE_PRESETS_FREQUENCY_START 433 -#define EE_PRESETS_RDSPI_START 829 // 5 bytes -#define EE_PRESETS_RDSPS_START 1324 // 9 bytes +#define EE_BYTE_SCANMEM 133 +#define EE_BYTE_SCANCANCEL 134 +#define EE_BYTE_SCANMUTE 135 +#define EE_PRESETS_BAND_START 136 +#define EE_PRESET_BW_START 236 +#define EE_PRESET_MS_START 336 +#define EE_PRESETS_FREQUENCY_START 436 +#define EE_PRESETS_RDSPI_START 832 // 5 bytes +#define EE_PRESETS_RDSPS_START 1327 // 9 bytes #define EE_PRESETS_FREQUENCY 0 // End of EEPROM index defines @@ -310,6 +313,10 @@ typedef struct { char RDSPS[9]; } mem; +enum SCAN_CANCEL { + SCAN_CANCEL = OFF, CORRECTPI, SIGNAL +}; + // FM band: before BAND_GAP; AM band: after BAND_GAP enum RADIO_BAND { BAND_OIRT = 0, BAND_FM, BAND_GAP, BAND_LW, BAND_MW, BAND_SW diff --git a/src/gui.cpp b/src/gui.cpp index fcd9463..9fae637 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -7,7 +7,7 @@ #include byte menuitem; -byte items[9] = {9, static_cast(dynamicspi ? 9 : 8), 7, 10, 9, 10, 9, 6, 4}; +byte items[9] = {9, static_cast(dynamicspi ? 9 : 8), 7, 10, 9, 10, 9, 6, 7}; extern mem presets[]; void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de/online/rgb565-color-picker/ @@ -1009,6 +1009,16 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString(String(stationlistid, DEC), 298, 3); break; + + case DXMODE: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][216]), 6, 3); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + FullLineSprite.drawString((scanmem ? myLanguage[language][218] : myLanguage[language][217]), 298, 3); + break; } break; @@ -1103,6 +1113,20 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString((XDRGTKMuteScreen ? myLanguage[language][42] : myLanguage[language][30]), 298, 3); break; + + case DXMODE: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][219]), 6, 3); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + switch (scancancel) { + case OFF: FullLineSprite.drawString(myLanguage[language][30], 298, 3); break; + case CORRECTPI: FullLineSprite.drawString(myLanguage[language][220], 298, 3); break; + case SIGNAL: FullLineSprite.drawString(myLanguage[language][221], 298, 3); break; + } + break; } break; @@ -1185,6 +1209,16 @@ void ShowOneLine(byte position, byte item, bool selected) { if (amgain != 0) FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); FullLineSprite.drawString((amgain != 0 ? "dB" : myLanguage[language][30]), 298, 3); break; + + case DXMODE: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][222]), 6, 3); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + FullLineSprite.drawString((scanmute ? myLanguage[language][42] : myLanguage[language][30]), 298, 3); + break; } break; @@ -2522,6 +2556,29 @@ void MenuUp() { OneBigLineSprite.drawString(String(scanhold, DEC), 135, 0); OneBigLineSprite.pushSprite(24, 118); break; + + case ITEM5: + scanmem = !scanmem; + OneBigLineSprite.drawString((scanmem ? myLanguage[language][218] : myLanguage[language][217]), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM6: + scancancel++; + if (scancancel > 2) scancancel = 0; + switch (scancancel) { + case OFF: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break; + case CORRECTPI: OneBigLineSprite.drawString(myLanguage[language][220], 135, 0); break; + case SIGNAL: OneBigLineSprite.drawString(myLanguage[language][221], 135, 0); break; + } + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM7: + scanmute = !scanmute; + OneBigLineSprite.drawString((scanmute ? myLanguage[language][42] : myLanguage[language][30]), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; } break; } @@ -3323,6 +3380,29 @@ void MenuDown() { OneBigLineSprite.drawString(String(scanhold, DEC), 135, 0); OneBigLineSprite.pushSprite(24, 118); break; + + case ITEM5: + scanmem = !scanmem; + OneBigLineSprite.drawString((scanmem ? myLanguage[language][218] : myLanguage[language][217]), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM6: + scancancel--; + if (scancancel > 2) scancancel = 2; + switch (scancancel) { + case OFF: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break; + case CORRECTPI: OneBigLineSprite.drawString(myLanguage[language][220], 135, 0); break; + case SIGNAL: OneBigLineSprite.drawString(myLanguage[language][221], 135, 0); break; + } + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM7: + scanmute = !scanmute; + OneBigLineSprite.drawString((scanmute ? myLanguage[language][42] : myLanguage[language][30]), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; } break; } @@ -4108,7 +4188,7 @@ void DoMenu() { menuopen = false; menu = false; memorypos = scanstart; - scanmodeold = tunemode; + scanmodeold = tunemode; tunemode = TUNE_MEM; BuildDisplay(); DoMemoryPosTune(); @@ -4142,6 +4222,31 @@ void DoMenu() { OneBigLineSprite.drawString(String(scanhold, DEC), 135, 0); OneBigLineSprite.pushSprite(24, 118); break; + + case ITEM5: + Infoboxprint(myLanguage[language][216]); + + OneBigLineSprite.drawString((scanmem ? myLanguage[language][218] : myLanguage[language][217]), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM6: + Infoboxprint(myLanguage[language][219]); + + switch (scancancel) { + case OFF: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break; + case CORRECTPI: OneBigLineSprite.drawString(myLanguage[language][220], 135, 0); break; + case SIGNAL: OneBigLineSprite.drawString(myLanguage[language][221], 135, 0); break; + } + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM7: + Infoboxprint(myLanguage[language][222]); + + OneBigLineSprite.drawString((scanmute ? myLanguage[language][42] : myLanguage[language][30]), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; } break; } diff --git a/src/gui.h b/src/gui.h index de3a200..ff3376c 100644 --- a/src/gui.h +++ b/src/gui.h @@ -56,6 +56,8 @@ extern bool RDSstatusold; extern bool rdsstereoold; extern bool usesquelch; extern bool scandxmode; +extern bool scanmem; +extern bool scanmute; extern bool softmuteam; extern bool softmutefm; extern bool Stereostatusold; @@ -103,6 +105,7 @@ extern byte poweroptions; extern byte eonptyold[20]; extern byte rdsblockold; extern byte region; +extern byte scancancel; extern byte scanstart; extern byte scanstop; extern byte scanhold; diff --git a/src/language.h b/src/language.h index 84b334e..cf556a1 100644 --- a/src/language.h +++ b/src/language.h @@ -5,7 +5,7 @@ // [number of languages][number of texts] // *** means the text is the same as in English -static const char* const myLanguage[18][216] PROGMEM = { +static const char* const myLanguage[18][223] PROGMEM = { { "English", // English "Rotary direction changed", // 1 "Please release button", // 2 @@ -221,7 +221,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Auto sort AF" // 215 + "Auto sort AF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Nederlands", // Dutch @@ -439,7 +446,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX zoeken", // 212 "FM DX Opties", // 213 "Fout! Startkanaal is\ngemarkeerd als skip", // 214 - "Auto AF sorteren" // 215 + "Auto AF sorteren", // 215 + "Geheugenkanalen", // 216 + "Uitsluiten", // 217 + "Enkel", // 218 + "Auto afbreken", // 219 + "Correcte PI", // 220 + "Signaal", // 221 + "Geen geluid\ntijdens scannen" // 222 }, { "Polski", // Polish @@ -657,7 +671,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Automat. sortowanie AF" // 215 + "Automat. sortowanie AF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Hrvatski", // Croatian @@ -875,7 +896,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Autom. sortiranje AF-a" // 215 + "Autom. sortiranje AF-a", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Ελληνικά", // Greek @@ -1093,7 +1121,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Αυτόματη ταξινόμηση\nAF" // 215 + "Αυτόματη ταξινόμηση\nAF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Română", // Romanian @@ -1311,7 +1346,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Sortare automata AF" // 215 + "Sortare automata AF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Deutsch", // German @@ -1529,7 +1571,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "AF Autosortierung" // 215 + "AF Autosortierung", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Český", // Czech @@ -1747,7 +1796,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Auto řazení AF" // 215 + "Auto řazení AF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Slovenský", // Slovak @@ -1965,7 +2021,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Auto radenie AF" // 215 + "Auto radenie AF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Français", // French @@ -2183,7 +2246,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Tri AF automatique" // 215 + "Tri AF automatique", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Български", // Bulgarian @@ -2401,7 +2471,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Auto sort AF" // 215 *** + "Auto sort AF", // 215 *** + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Русский", // Russian @@ -2619,7 +2696,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Сортировка AF-частот" // 215 + "Сортировка AF-частот", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Українська", // Ukranian @@ -2837,7 +2921,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Авто сорт. AF" // 215 + "Авто сорт. AF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Italiano", // Italian @@ -3055,7 +3146,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Autoordinamento AF" // 215 + "Autoordinamento AF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Simplified Chinese", // Simplified Chinese @@ -3273,7 +3371,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "自动排列AF" // 215 + "自动排列AF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Norsk", // Norwegian @@ -3491,7 +3596,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Auto sorterings AF" // 215 + "Auto sorterings AF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Español", // Spanish @@ -3709,7 +3821,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Orden automático de AF" // 215 + "Orden automático de AF", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 }, { "Português", // Portuguese @@ -3927,7 +4046,14 @@ static const char* const myLanguage[18][216] PROGMEM = { "Start DX scanning", // 212 "FM DX Options", // 213 "Abort! The start channel\nis marked as skipped.", // 214 - "Classificar AF\nautomaticamente" // 215 + "Classificar AF\nautomaticamente", // 215 + "Memory channels", // 216 + "Exclude", // 217 + "Only", // 218 + "Auto cancel scan", // 219 + "Correct PI", // 220 + "Signal", // 221 + "Mute audio\nwhile scanning" // 222 } }; #endif \ No newline at end of file