From 24443c4245a231631be5621fd758e37abeb74019 Mon Sep 17 00:00:00 2001 From: Sjef Verhoeven PE5PVB Date: Mon, 8 Apr 2024 17:33:49 +0200 Subject: [PATCH] Introduced DX scan mode --- TEF6686_ESP32.ino | 67 +++++++++++---- src/constants.h | 19 +++-- src/gui.cpp | 172 ++++++++++++++++++++++++++++++++++++++- src/gui.h | 14 +++- src/language.h | 202 +++++++++++++++++++++++++++++++++++++--------- src/rds.cpp | 1 + 6 files changed, 407 insertions(+), 68 deletions(-) diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index f008b08..aa1a855 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -91,6 +91,7 @@ bool RDSstatus; bool RDSstatusold; bool rdsstereoold; bool rtcset; +bool scandxmode; bool screenmute; bool screensavertriggered = false; bool seek; @@ -172,6 +173,10 @@ byte rdsqualityold; byte region; byte rotarymode; byte touchrotating; +byte scanstart; +byte scanstop; +byte scanhold; +byte scanmodeold; byte screensaverOptions[5] = {0, 3, 10, 30, 60}; byte screensaverset; byte showmodulation; @@ -354,6 +359,7 @@ unsigned long rtplusticker; unsigned long rtplustickerhold; unsigned long rtticker; unsigned long rttickerhold; +unsigned long scantimer; unsigned long signalstatustimer; unsigned long tottimer; unsigned long tuningtimer; @@ -475,6 +481,9 @@ void setup() { fmagc = EEPROM.readByte(EE_BYTE_FMAGC); amagc = EEPROM.readByte(EE_BYTE_AMAGC); fmsi = EEPROM.readByte(EE_BYTE_FMSI); + scanstart = EEPROM.readByte(EE_BYTE_SCANSTART); + scanstop = EEPROM.readByte(EE_BYTE_SCANSTOP); + scanhold = EEPROM.readByte(EE_BYTE_SCANHOLD); if (spispeed == SPI_SPEED_DEFAULT) tft.setSPISpeed(SPI_FREQUENCY / 1000000); else tft.setSPISpeed(spispeed * 10); LWLowEdgeSet = FREQ_LW_LOW_EDGE_MIN; @@ -784,6 +793,21 @@ void loop() { } if (digitalRead(BANDBUTTON) == LOW ) BANDBUTTONPress(); + if (scandxmode && millis() >= scantimer + (scanhold * 1000)) { + memorypos++; + if (memorypos > scanstop) memorypos = scanstart; + while (IsStationEmpty()) { + memorypos++; + if (memorypos > scanstop) { + memorypos = scanstart; + break; + } + } + DoMemoryPosTune(); + ShowMemoryPos(); + scantimer = millis(); + } + if (millis() >= tuningtimer + 200) { if (store) { detachInterrupt(digitalPinToInterrupt(ROTARY_PIN_A)); @@ -1350,6 +1374,7 @@ void ToggleBand(byte nowBand) { } void BANDBUTTONPress() { + if (scandxmode) cancelDXScan(); if (memorystore) { EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, EE_PRESETS_FREQUENCY); EEPROM.commit(); @@ -1855,6 +1880,7 @@ void SelectBand() { } void BWButtonPress() { + if (scandxmode) cancelDXScan(); if (!usesquelch) radio.setUnMute(); if (!menu) { seek = false; @@ -1927,6 +1953,7 @@ void doStereoToggle() { } void ModeButtonPress() { + if (scandxmode) cancelDXScan(); if (!usesquelch) radio.setUnMute(); if (advancedRDS) { BuildDisplay(); @@ -1955,22 +1982,14 @@ void ModeButtonPress() { ScreensaverTimerRestart(); } } else { - if (XDRGTKUSB || XDRGTKTCP) { - ShowFreq(1); - tftPrint(-1, myLanguage[language][86], 70, 68, ActiveColor, ActiveColorSmooth, 28); - delay(1000); - tftPrint(-1, myLanguage[language][86], 70, 68, BackgroundColor, BackgroundColor, 28); - ShowFreq(0); - } else { - if (!menu) { - menuoption = ITEM1; - menupage = INDEX; - menuitem = 0; - UpdateFonts(1); - BuildMenu(); - menu = true; - ScreensaverTimerSet(OFF); - } + if (!menu) { + menuoption = ITEM1; + menupage = INDEX; + menuitem = 0; + UpdateFonts(1); + BuildMenu(); + menu = true; + ScreensaverTimerSet(OFF); } } } else { @@ -2055,6 +2074,9 @@ void ModeButtonPress() { EEPROM.writeByte(EE_BYTE_FMAGC, fmagc); EEPROM.writeByte(EE_BYTE_AMAGC, amagc); EEPROM.writeByte(EE_BYTE_FMSI, fmsi); + EEPROM.writeByte(EE_BYTE_SCANSTART, scanstart); + EEPROM.writeByte(EE_BYTE_SCANSTOP, scanstop); + EEPROM.writeByte(EE_BYTE_SCANHOLD, scanhold); EEPROM.commit(); if (af == 2) radio.rds.afreg = true; else radio.rds.afreg = false; if (!usesquelch) radio.setUnMute(); @@ -2212,6 +2234,7 @@ void RoundStep() { } void ButtonPress() { + if (scandxmode) cancelDXScan(); if (!usesquelch) radio.setUnMute(); if (advancedRDS) BuildDisplay(); if (!menu) { @@ -2372,6 +2395,7 @@ void ButtonPress() { } void KeyUp() { + if (scandxmode) cancelDXScan(); rotary = 0; if (!afscreen) { if (!menu) { @@ -2435,6 +2459,7 @@ void KeyUp() { } void KeyDown() { + if (scandxmode) cancelDXScan(); rotary = 0; if (!afscreen) { if (!menu) { @@ -4142,6 +4167,9 @@ void DefaultSettings(byte userhardwaremodel) { EEPROM.writeByte(EE_BYTE_FMAGC, 92); EEPROM.writeByte(EE_BYTE_AMAGC, 100); EEPROM.writeByte(EE_BYTE_FMSI, 1); + EEPROM.writeByte(EE_BYTE_SCANSTART, 0); + EEPROM.writeByte(EE_BYTE_SCANSTOP, 9); + EEPROM.writeByte(EE_BYTE_SCANHOLD, 5); for (int i = 0; i < EE_PRESETS_CNT; i++) { EEPROM.writeByte(i + EE_PRESETS_BAND_START, BAND_FM); @@ -4270,3 +4298,10 @@ void UpdateFonts(bool mode) { break; } } + +void cancelDXScan() { + tunemode = scanmodeold; + scandxmode = false; + ShowTuneMode(); + ShowMemoryPos(); +} diff --git a/src/constants.h b/src/constants.h index a2d8342..26022db 100644 --- a/src/constants.h +++ b/src/constants.h @@ -196,9 +196,9 @@ // EEPROM index defines #define EE_PRESETS_CNT 99 -#define EE_CHECKBYTE_VALUE 5 // 0 ~ 255,add new entry, change for new value +#define EE_CHECKBYTE_VALUE 6 // 0 ~ 255,add new entry, change for new value -#define EE_TOTAL_CNT 2213 +#define EE_TOTAL_CNT 2216 #define EE_UINT16_FREQUENCY_FM 0 #define EE_BYTE_VOLSET 4 #define EE_BYTE_STEREO 5 @@ -282,12 +282,15 @@ #define EE_BYTE_FMAGC 127 #define EE_BYTE_AMAGC 128 #define EE_BYTE_FMSI 129 -#define EE_PRESETS_BAND_START 130 -#define EE_PRESET_BW_START 230 -#define EE_PRESET_MS_START 330 -#define EE_PRESETS_FREQUENCY_START 430 -#define EE_PRESETS_RDSPI_START 826 // 5 bytes -#define EE_PRESETS_RDSPS_START 1321 // 9 bytes +#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_PRESETS_FREQUENCY 0 // End of EEPROM index defines diff --git a/src/gui.cpp b/src/gui.cpp index 6164461..fcd9463 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -7,7 +7,8 @@ #include byte menuitem; -byte items[8] = {8, static_cast(dynamicspi ? 9 : 8), 7, 10, 9, 10, 9, 6}; +byte items[9] = {9, static_cast(dynamicspi ? 9 : 8), 7, 10, 9, 10, 9, 6, 4}; +extern mem presets[]; void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de/online/rgb565-color-picker/ switch (CurrentTheme) { @@ -617,6 +618,12 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString((USBmode ? "RDS Spy" : "XDRGTK"), 298, 3); break; + + case DXMODE: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][212]), 6, 3); + break; } break; @@ -704,6 +711,16 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString((wifi ? 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][209]), 6, 3); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + FullLineSprite.drawString(String(scanstart + 1, DEC), 298, 3); + break; } break; @@ -790,6 +807,16 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString(">", 298, 3); break; + + case DXMODE: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][210]), 6, 3); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + FullLineSprite.drawString(String(scanstop + 1, DEC), 298, 3); + break; } break; @@ -876,6 +903,18 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString((wifi ? String(WiFi.localIP()[0]) + "." + String(WiFi.localIP()[1]) + "." + String(WiFi.localIP()[2]) + "." + String(subnetclient, DEC) : "-"), 298, 3); break; + + case DXMODE: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][211]), 6, 3); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][92]), 298, 3); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + FullLineSprite.drawString(String(scanhold, DEC), 258, 3); + break; } break; @@ -1154,7 +1193,7 @@ void ShowOneLine(byte position, byte item, bool selected) { case INDEX: FullLineSprite.setTextDatum(TC_DATUM); FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); - FullLineSprite.drawString(removeNewline(myLanguage[language][70]), 152, 3); + FullLineSprite.drawString(removeNewline(myLanguage[language][213]), 152, 3); break; case MAINSETTINGS: @@ -1190,7 +1229,7 @@ void ShowOneLine(byte position, byte item, bool selected) { case RDSSETTINGS: FullLineSprite.setTextDatum(TL_DATUM); FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); - FullLineSprite.drawString(removeNewline(myLanguage[language][196]), 6, 3); + FullLineSprite.drawString(removeNewline(myLanguage[language][215]), 6, 3); FullLineSprite.setTextDatum(TR_DATUM); FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString((radio.rds.sortaf ? myLanguage[language][42] : myLanguage[language][30]), 298, 3); @@ -1229,6 +1268,12 @@ void ShowOneLine(byte position, byte item, bool selected) { case 8: switch (menupage) { + case INDEX: + FullLineSprite.setTextDatum(TC_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][70]), 152, 3); + break; + case MAINSETTINGS: if (dynamicspi) { FullLineSprite.setTextDatum(TL_DATUM); @@ -2449,6 +2494,36 @@ void MenuUp() { break; } break; + + case DXMODE: + switch (menuoption) { + case ITEM2: + scanstart++; + if (scanstart >= scanstop) scanstart = 0; + OneBigLineSprite.drawString(String(scanstart + 1, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM3: + scanstop++; + if (scanstop > EE_PRESETS_CNT - 1) scanstop = scanstart + 1; + OneBigLineSprite.drawString(String(scanstop + 1, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM4: + scanhold++; + if (scanhold > 30) scanhold = 1; + OneBigLineSprite.setTextDatum(TL_DATUM); + OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + OneBigLineSprite.drawString(myLanguage[language][92], 155, 0); + OneBigLineSprite.setTextDatum(TR_DATUM); + OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + OneBigLineSprite.drawString(String(scanhold, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + } + break; } } } @@ -3220,6 +3295,36 @@ void MenuDown() { break; } break; + + case DXMODE: + switch (menuoption) { + case ITEM2: + scanstart--; + if (scanstart >= scanstop) scanstart = scanstop - 1; + OneBigLineSprite.drawString(String(scanstart + 1, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM3: + scanstop--; + if (scanstop <= scanstart) scanstop = EE_PRESETS_CNT - 1; + OneBigLineSprite.drawString(String(scanstop + 1, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM4: + scanhold--; + if (scanhold < 1) scanhold = 30; + OneBigLineSprite.setTextDatum(TL_DATUM); + OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + OneBigLineSprite.drawString(myLanguage[language][92], 155, 0); + OneBigLineSprite.setTextDatum(TR_DATUM); + OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + OneBigLineSprite.drawString(String(scanhold, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + } + break; } } } @@ -3306,6 +3411,14 @@ void DoMenu() { break; case ITEM8: + menupage = DXMODE; + menuoption = ITEM1; + menuitem = 0; + submenu = true; + BuildMenu(); + break; + + case ITEM9: menuopen = true; tft.drawRoundRect(10, 6, 300, 230, 5, ActiveColor); tft.fillRoundRect(12, 8, 296, 226, 5, BackgroundColor); @@ -3689,7 +3802,7 @@ void DoMenu() { break; case ITEM8: - Infoboxprint(myLanguage[language][196]); + Infoboxprint(myLanguage[language][215]); OneBigLineSprite.drawString((radio.rds.sortaf ? myLanguage[language][42] : myLanguage[language][30]), 135, 0); OneBigLineSprite.pushSprite(24, 118); @@ -3984,6 +4097,53 @@ void DoMenu() { break; } break; + + case DXMODE: + switch (menuoption) { + case ITEM1: + if (presets[scanstart].band == BAND_FM && presets[scanstart].frequency == EE_PRESETS_FREQUENCY) { + Infoboxprint(myLanguage[language][214]); + OneBigLineSprite.pushSprite(24, 118); + } else { + menuopen = false; + menu = false; + memorypos = scanstart; + scanmodeold = tunemode; + tunemode = TUNE_MEM; + BuildDisplay(); + DoMemoryPosTune(); + scantimer = millis(); + scandxmode = true; + } + break; + + case ITEM2: + Infoboxprint(myLanguage[language][209]); + + OneBigLineSprite.drawString(String(scanstart + 1), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM3: + Infoboxprint(myLanguage[language][210]); + + OneBigLineSprite.drawString(String(scanstop + 1), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM4: + Infoboxprint(myLanguage[language][211]); + + OneBigLineSprite.setTextDatum(TL_DATUM); + OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + OneBigLineSprite.drawString(myLanguage[language][92], 155, 0); + OneBigLineSprite.setTextDatum(TR_DATUM); + OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + OneBigLineSprite.drawString(String(scanhold, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + } + break; } } else { if (menupage == CONNECTIVITY && menuoption == ITEM2) { @@ -3993,7 +4153,11 @@ void DoMenu() { if (menupage == DISPLAYSETTINGS && menuoption == ITEM5) { doTheme(); } + menuopen = false; + if (scanstart >= scanstop) scanstart = scanstop - 1; + if (scanstop <= scanstart) scanstop = scanstart + 1; + UpdateFonts(1); BuildMenu(); } diff --git a/src/gui.h b/src/gui.h index e2bd383..de3a200 100644 --- a/src/gui.h +++ b/src/gui.h @@ -23,10 +23,10 @@ #define ITEM9 190 #define ITEM10 210 -enum menupage {INDEX, MAINSETTINGS, AUDIOSETTINGS, DISPLAYSETTINGS, RDSSETTINGS, FMSETTINGS, AMSETTINGS, CONNECTIVITY}; +enum menupage {INDEX, MAINSETTINGS, AUDIOSETTINGS, DISPLAYSETTINGS, RDSSETTINGS, FMSETTINGS, AMSETTINGS, CONNECTIVITY, DXMODE}; extern byte menuitem; -extern byte items[8]; +extern byte items[9]; extern bool advancedRDS; extern bool afmethodBold; @@ -47,6 +47,7 @@ extern bool haseonold; extern bool hasrtplusold; extern bool hastmcold; extern bool LowLevelInit; +extern bool menu; extern bool menuopen; extern bool mwstepsize; extern bool rdsreset; @@ -54,6 +55,7 @@ extern bool RDSstatus; extern bool RDSstatusold; extern bool rdsstereoold; extern bool usesquelch; +extern bool scandxmode; extern bool softmuteam; extern bool softmutefm; extern bool Stereostatusold; @@ -94,12 +96,17 @@ extern byte HighCutLevel; extern byte HighCutOffset; extern byte language; extern byte licold; +extern byte memorypos; extern byte menupage; extern byte MSold; extern byte poweroptions; extern byte eonptyold[20]; extern byte rdsblockold; extern byte region; +extern byte scanstart; +extern byte scanstop; +extern byte scanhold; +extern byte scanmodeold; extern byte screensaverOptions[5]; extern byte screensaverset; extern byte showmodulation; @@ -113,6 +120,7 @@ extern byte submenu; extern byte subnetclient; extern byte tot; extern byte touchrotating; +extern byte tunemode; extern byte unit; extern byte spispeed; extern char eonpicodeold[20][6]; @@ -181,6 +189,7 @@ extern unsigned int LowEdgeSet; extern unsigned int mappedfreqold[20]; extern unsigned int mappedfreqold2[20]; extern unsigned int mappedfreqold3[20]; +extern unsigned long scantimer; extern TFT_eSPI tft; extern TEF6686 radio; @@ -212,6 +221,7 @@ extern void updateiMS(); extern void updateEQ(); extern void doTheme(); extern void tryWiFi(); +extern void DoMemoryPosTune(); extern void UpdateFonts(bool mode); extern void tftPrint(int8_t offset, const String & text, int16_t x, int16_t y, int color, int smoothcolor, uint8_t fontsize); diff --git a/src/language.h b/src/language.h index ed8ebf3..84b334e 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][209] PROGMEM = { +static const char* const myLanguage[18][216] PROGMEM = { { "English", // English "Rotary direction changed", // 1 "Please release button", // 2 @@ -202,7 +202,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 "AM", // 194 "CONNECT", // 195 - "Auto sort AF", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 "AM AGC", // 198 "FM deemphasis", // 199 @@ -214,7 +214,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Mute screen on\nXDRGTK connection", // 205 "FMSI stereo\nimprovement", // 206 "Function only available\non TEF6687/6689!", // 207 - "Function not available\non selected skin!" // 208 + "Function not available\non selected skin!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Auto sort AF" // 215 }, { "Nederlands", // Dutch @@ -413,7 +420,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 *** "AM", // 194 *** "VERBIND", // 195 - "Auto AF sorteren", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 *** "AM AGC", // 198 *** "FM deemphasis", // 199 *** @@ -425,7 +432,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Scherm uit bij\nXDRGTK verbinding", // 205 "FMSI stereo\nverbetering", // 206 "Alleen beschikbaar op\nTEF6687/6689!", // 207 - "Niet beschikbaar op\ngekozen uiterlijk!" // 208 + "Niet beschikbaar op\ngekozen uiterlijk!", // 208 + "Begin zoeken\ngeheugenkanaal", // 209 + "Eind zoeken\ngeheugenkanaal", // 210 + "Wachttijd", // 211 + "Start DX zoeken", // 212 + "FM DX Opties", // 213 + "Fout! Startkanaal is\ngemarkeerd als skip", // 214 + "Auto AF sorteren" // 215 }, { "Polski", // Polish @@ -624,7 +638,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 *** "AM", // 194 *** "ŁĄCZNOŚĆ", // 195 - "Automat. sortowanie AF", // 196 + "DX MODE", // 196 "Identyfikator Stationlist", // 197 "Tłumik ant. AM", // 198 "Deemfaza FM", // 199 @@ -636,7 +650,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Wylacz ekran gdy\npołączony z XDR-GTK", // 205 "Ulepszenie \nstereo FMSI", // 206 "Funkcja dostępna tylko\nna TEF6687/6689!", // 207 - "Funkcja niedostępna\nna wybranym motywie!" // 208 + "Funkcja niedostępna\nna wybranym motywie!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Automat. sortowanie AF" // 215 }, { "Hrvatski", // Croatian @@ -835,7 +856,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 "AM", // 194 "SPOJI", // 195 - "Autom. sortiranje AF-a", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 "AM ATT", // 198 "FM deemphasis", // 199 @@ -847,7 +868,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Isključi zaslon\ntijekom veze XDRGTK-om", // 205 "FMSI stereo\nimprovement", // 206 "Function only available\non TEF6687/6689!", // 207 - "Function not available\non selected skin!" // 208 + "Function not available\non selected skin!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Autom. sortiranje AF-a" // 215 }, { "Ελληνικά", // Greek @@ -1046,7 +1074,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 "AM", // 194 "ΣΥΝΔΕΣΗ", // 195 - "Αυτόματη ταξινόμηση\nAF", // 196 + "DX MODE", // 196 "ID λίστας σταθμών", // 197 "AM εξασθένιση", // 198 "FM αποέμφαση", // 199 @@ -1058,7 +1086,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Μαύρη οθόνη σε\nσύνδεση XDRGTK", // 205 "FMSI βελτίωση\nστερεοφωνικού ήχου", // 206 "Λειτουργία διαθέσιμη\nμόνο στα TEF6687/6689!", // 207 - "Λειτουργία μη διαθέσιμη\nστην επιλεγμένη εμφάνιση!" // 208 + "Λειτουργία μη διαθέσιμη\nστην επιλεγμένη εμφάνιση!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Αυτόματη ταξινόμηση\nAF" // 215 }, { "Română", // Romanian @@ -1257,7 +1292,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 "AM", // 194 "CONECTARE", // 195 - "Sortare automata AF", // 196 + "DX MODE", // 196 "ID Lista posturi", // 197 "AGC AM", // 198 "FM deemphasis", // 199 @@ -1269,7 +1304,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Mute screen on\nXDRGTK connection", // 205 "FMSI stereo\nimprovement", // 206 "Function only available\non TEF6687/6689!", // 207 - "Function not available\non selected skin!" // 208 + "Function not available\non selected skin!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Sortare automata AF" // 215 }, { "Deutsch", // German @@ -1468,7 +1510,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "UKW", // 193 "AM", // 194 "NETZ", // 195 - "AF Autosortierung", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 "AM ATT", // 198 "Entzerrung auf UKW", // 199 @@ -1480,7 +1522,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Display aus bei\nXDRGTK-Verbindung", // 205 "FMSI Stereo-\nVerbesserung", // 206 "Funktion nur für\nTEF6687/6689 verfügbar!", // 207 - "Funktion für ausgewählten\nSkin nicht verfügbar!" // 208 + "Funktion für ausgewählten\nSkin nicht verfügbar!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "AF Autosortierung" // 215 }, { "Český", // Czech @@ -1679,7 +1728,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 *** "AM", // 194 *** "PŘIPOJENÍ", // 195 - "Auto řazení AF", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 *** "AM ATT", // 198 "FM deemphasis", // 199 *** @@ -1691,7 +1740,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Mute screen on\nXDRGTK connection", // 205 "FMSI stereo\nimprovement", // 206 "Function only available\non TEF6687/6689!", // 207 - "Function not available\non selected skin!" // 208 + "Function not available\non selected skin!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Auto řazení AF" // 215 }, { "Slovenský", // Slovak @@ -1890,7 +1946,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 *** "AM", // 194 *** "PRIPOJENIE", // 195 - "Auto radenie AF", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 *** "AM ATT", // 198 "FM deemphasis", // 199 *** @@ -1902,7 +1958,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Mute screen on\nXDRGTK connection", // 205 "FMSI stereo\nimprovement", // 206 "Function only available\non TEF6687/6689!", // 207 - "Function not available\non selected skin!" // 208 + "Function not available\non selected skin!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Auto radenie AF" // 215 }, { "Français", // French @@ -2101,7 +2164,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 "AM", // 194 "CONNECTER", // 195 - "Tri AF automatique", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 "AM ATT", // 198 "FM déemphasie", // 199 @@ -2113,7 +2176,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Écran muet sur\nla connexion XDRGTK", // 205 "FMSI amélioration\ndu son stéréo", // 206 "Fonction disponible seulement\nsur TEF6687/6689!", // 207 - "Fonction non disponible\nsur le skin sélectionné!" // 208 + "Fonction non disponible\nsur le skin sélectionné!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Tri AF automatique" // 215 }, { "Български", // Bulgarian @@ -2312,7 +2382,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "УКВ (FM)", // 193 "СВ (AM)", // 194 "ВРЪЗКА", // 195 - "Auto sort AF", // 196 *** + "DX MODE", // 196 "Stationlist Идентификатор", // 197 "СВ атенюатор", // 198 "FM deemphasis", // 199 *** @@ -2324,7 +2394,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Mute screen on\nXDRGTK connection", // 205 "FMSI stereo\nimprovement", // 206 "Function only available\non TEF6687/6689!", // 207 - "Function not available\non selected skin!" // 208 + "Function not available\non selected skin!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Auto sort AF" // 215 *** }, { "Русский", // Russian @@ -2523,7 +2600,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 "AM", // 194 "КОННЕКТ", // 195 - "Сортировка AF-частот", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 "AM аттеньюатор", // 198 "FM deemphasis", // 199 @@ -2535,7 +2612,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Погасить дисплей при\nподключении XDRGTK", // 205 "FMSI стерео\nулучшение", // 206 "Функция доступна только\nна TEF6687/6689!", // 207 - "Функция недоступна\nна этом оформлении" // 208 + "Функция недоступна\nна этом оформлении", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Сортировка AF-частот" // 215 }, { "Українська", // Ukranian @@ -2734,7 +2818,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 *** "AM", // 194 *** "ПІДКЛЮЧЕННЯ", // 195 - "Авто сорт. AF", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 *** "AM ATT", // 198 "FM deemphasis", // 199 *** @@ -2746,7 +2830,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Mute screen on\nXDRGTK connection", // 205 "FMSI stereo\nimprovement", // 206 "Function only available\non TEF6687/6689!", // 207 - "Function not available\non selected skin!" // 208 + "Function not available\non selected skin!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Авто сорт. AF" // 215 }, { "Italiano", // Italian @@ -2945,7 +3036,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 *** "AM", // 194 *** "CONNETTI", // 195 *** - "Autoordinamento AF", // 196 *** + "DX MODE", // 196 "ID Stationlist", // 197 *** "ATT AM", // 198 "Deenfasi FM", // 199 *** @@ -2957,7 +3048,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Mute screen on\nXDRGTK connection", // 205 "FMSI stereo\nimprovement", // 206 "Function only available\non TEF6687/6689!", // 207 - "Function not available\non selected skin!" // 208 + "Function not available\non selected skin!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Autoordinamento AF" // 215 }, { "Simplified Chinese", // Simplified Chinese @@ -3156,7 +3254,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM 设置", // 193 "AM 设置", // 194 "连机模式", // 195 - "自动排列AF", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 *** "AM天线衰减", // 198 "FM去加重", // 199 @@ -3168,7 +3266,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "XDRGTK连接时锁屏", // 205 "FMSI\n立体声增强", // 206 "此功能仅限\nTEF6687/6689!", // 207 - "此皮肤不支持该功能!" // 208 + "此皮肤不支持该功能!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "自动排列AF" // 215 }, { "Norsk", // Norwegian @@ -3367,7 +3472,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 *** "AM", // 194 *** "TILKOBLE", // 195 - "Auto sorterings AF", // 196 + "DX MODE", // 196 "Stationlist ID", // 197 *** "AM ATT", // 198 "FM ettertrykkelse", // 199 @@ -3379,7 +3484,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Dempet skjerm på\nXDRGTK tilkobling", // 205 "FMSI stereo forbedringt", // 206 "Kun tilgjengelig\npå TEF6687/6689!", // 207 - "Funksjon ikke tilgjengelig\npå valgt skin!" // 208 + "Funksjon ikke tilgjengelig\npå valgt skin!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Auto sorterings AF" // 215 }, { "Español", // Spanish @@ -3578,7 +3690,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 "AM", // 194 "CONECTAR", // 195 - "Orden automático de AF", // 196 + "DX MODE", // 196 "ID de lista de estaciones", // 197 "Atenuación de AM", // 198 "Despreocupación\nde FM", // 199 @@ -3590,7 +3702,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Pantalla de mudo\nen la conexión XDRGTK", // 205 "FMSI mejora del\nsonido estéreo", // 206 "Función disponible solo\nen TEF6687/6689!", // 207 - "Función no disponible\nsobre el skin seleccionado!" // 208 + "Función no disponible\nsobre el skin seleccionado!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Orden automático de AF" // 215 }, { "Português", // Portuguese @@ -3789,7 +3908,7 @@ static const char* const myLanguage[18][209] PROGMEM = { "FM", // 193 "AM", // 194 "CONECTAR", // 195 - "Classificar AF\nautomaticamente", // 196 + "DX MODE", // 196 "ID da lista de estações", // 197 "Atenuação AM", // 198 "Desênfase FM", // 199 @@ -3801,7 +3920,14 @@ static const char* const myLanguage[18][209] PROGMEM = { "Tela mudo na\nconexão XDRGTK", // 205 "FMSI melhoria\ndo som estéreo", // 206 "Function only available\non TEF6687/6689!", // 207 - "Função não disponível\nno skin selecionado!" // 208 + "Função não disponível\nno skin selecionado!", // 208 + "Begin scanning\nmemory channels", // 209 + "Stop scanning\nmemory channels", // 210 + "Wait time", // 211 + "Start DX scanning", // 212 + "FM DX Options", // 213 + "Abort! The start channel\nis marked as skipped.", // 214 + "Classificar AF\nautomaticamente" // 215 } }; -#endif +#endif \ No newline at end of file diff --git a/src/rds.cpp b/src/rds.cpp index 82946a9..3bc00fe 100644 --- a/src/rds.cpp +++ b/src/rds.cpp @@ -856,6 +856,7 @@ void showCT() { } void showRadioText() { +// radio.rds.stationText = "Jetzt in Ö1: Öffentlich-rechtlich auf Bewährung"; if (!screenmute) { if (radio.rds.hasRT && radio.rds.stationText.length() > 0) { if (String(radio.rds.stationText + radio.rds.stationText32).length() != Radiotextlengthold) {