From 0280cf3a03b32089daeac664961d91e8e6715cb7 Mon Sep 17 00:00:00 2001 From: Sjef Verhoeven PE5PVB Date: Sun, 4 Aug 2024 20:33:27 +0200 Subject: [PATCH] Added menuoption auto memory --- TEF6686_ESP32.ino | 216 ++++++++++++++++++++++++++-------- src/constants.h | 13 ++- src/gui.cpp | 248 ++++++++++++++++++++++++++++++++++++++- src/gui.h | 10 +- src/language.h | 290 ++++++++++++++++++++++++++++++++++++++++------ 5 files changed, 681 insertions(+), 96 deletions(-) diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index e74a2a6..9a69bea 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -178,6 +178,9 @@ byte longbandpress; byte memorypos; byte memoryposold; byte memoryposstatus; +byte mempionly; +byte memstartpos; +byte memstoppos; byte menupage; byte MSold; byte poweroptions; @@ -365,6 +368,8 @@ unsigned int LWLowEdgeSet; unsigned int mappedfreqold[20]; unsigned int mappedfreqold2[20]; unsigned int mappedfreqold3[20]; +unsigned int memstartfreq; +unsigned int memstopfreq; unsigned int MWHighEdgeSet; unsigned int MWLowEdgeSet; unsigned int scanner_end; @@ -526,6 +531,11 @@ void setup() { longbandpress = EEPROM.readByte(EE_BYTE_LONGBANDPRESS); showclock = EEPROM.readByte(EE_BYTE_SHOWCLOCK); showlongps = EEPROM.readByte(EE_BYTE_SHOWLONGPS); + memstartfreq = EEPROM.readUInt(EE_UINT16_MEMSTARTFREQ); + memstopfreq = EEPROM.readUInt(EE_UINT16_MEMSTOPFREQ); + memstartpos = EEPROM.readByte(EE_BYTE_MEMSTARTPOS); + memstoppos = EEPROM.readByte(EE_BYTE_MEMSTOPPOS); + mempionly = EEPROM.readByte(EE_BYTE_MEMPIONLY); if (spispeed == SPI_SPEED_DEFAULT) { tft.setSPISpeed(SPI_FREQUENCY / 1000000); @@ -1111,6 +1121,7 @@ void loop() { default: SignalSprite.pushImage(-87, -119, 292, 170, popupbackground); break; } + SignalSprite.setTextDatum(TR_DATUM); SignalSprite.loadFont(FONT48); SignalSprite.drawString(String(SStatus / 10), 58, 0); SignalSprite.unloadFont(); @@ -2532,54 +2543,8 @@ void ButtonPress() { ShowTuneMode(); } else { memorystore = false; - EEPROM.writeByte(memorypos + EE_PRESETS_BAND_START, band); - EEPROM.writeByte(memorypos + EE_PRESET_BW_START, BWset); - EEPROM.writeByte(memorypos + EE_PRESET_MS_START, StereoToggle); - if (band == BAND_FM) {//todo air - EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency); - } else if (band == BAND_OIRT) { - EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency_OIRT); - } else if (band == BAND_LW) { - EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency_LW); - } else if (band == BAND_MW) { - EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency_MW); - } else { - EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency_SW); - } + StoreMemoryPos(memorypos); - presets[memorypos].band = band; - presets[memorypos].bw = BWset; - presets[memorypos].ms = StereoToggle; - - String stationName = radio.rds.stationName; - char stationNameCharArray[10]; - char picodeArray[7]; - stationName.toCharArray(stationNameCharArray, sizeof(stationNameCharArray)); - memcpy(picodeArray, radio.rds.picode, sizeof(picodeArray)); - - for (int y = 0; y < 9; y++) { - presets[memorypos].RDSPS[y] = (y < strlen(stationNameCharArray)) ? stationNameCharArray[y] : '\0'; - EEPROM.writeByte((memorypos * 9) + y + EE_PRESETS_RDSPS_START, presets[memorypos].RDSPS[y]); - } - - for (int y = 0; y < 5; y++) { - presets[memorypos].RDSPI[y] = (y < sizeof(picodeArray)) ? picodeArray[y] : '\0'; - EEPROM.writeByte((memorypos * 5) + y + EE_PRESETS_RDSPI_START, presets[memorypos].RDSPI[y]); - } - - EEPROM.commit(); - - if (band == BAND_FM) {//todo air - presets[memorypos].frequency = frequency; - } else if (band == BAND_OIRT) { - presets[memorypos].frequency = frequency_OIRT; - } else if (band == BAND_LW) { - presets[memorypos].frequency = frequency_LW; - } else if (band == BAND_MW) { - presets[memorypos].frequency = frequency_MW; - } else { - presets[memorypos].frequency = frequency_SW; - } ShowTuneMode(); if (memoryposstatus == MEM_DARK || memoryposstatus == MEM_EXIST) { memoryposstatus = MEM_NORMAL; @@ -4324,6 +4289,11 @@ void DefaultSettings(byte userhardwaremodel) { EEPROM.writeByte(EE_BYTE_LONGBANDPRESS, 0); EEPROM.writeByte(EE_BYTE_SHOWCLOCK, 1); EEPROM.writeByte(EE_BYTE_SHOWLONGPS, 1); + EEPROM.writeUInt(EE_UINT16_MEMSTARTFREQ, 875); + EEPROM.writeUInt(EE_UINT16_MEMSTOPFREQ, 1080); + EEPROM.writeByte(EE_BYTE_MEMSTARTPOS, 1); + EEPROM.writeByte(EE_BYTE_MEMSTOPPOS, 10); + EEPROM.writeByte(EE_BYTE_MEMPIONLY, 1); for (int i = 0; i < EE_PRESETS_CNT; i++) { EEPROM.writeByte(i + EE_PRESETS_BAND_START, BAND_FM); @@ -4554,6 +4524,11 @@ void endMenu() { EEPROM.writeByte(EE_BYTE_LONGBANDPRESS, longbandpress); EEPROM.writeByte(EE_BYTE_SHOWCLOCK, showclock); EEPROM.writeByte(EE_BYTE_SHOWLONGPS, showlongps); + EEPROM.writeUInt(EE_UINT16_MEMSTARTFREQ, memstartfreq); + EEPROM.writeUInt(EE_UINT16_MEMSTOPFREQ, memstopfreq); + EEPROM.writeByte(EE_BYTE_MEMSTARTPOS, memstartpos); + EEPROM.writeByte(EE_BYTE_MEMSTOPPOS, memstoppos); + EEPROM.writeByte(EE_BYTE_MEMPIONLY, mempionly); EEPROM.commit(); if (af == 2) radio.rds.afreg = true; else radio.rds.afreg = false; Serial.end(); @@ -4649,3 +4624,150 @@ void setAutoSpeedSPI() { default: tft.setSPISpeed(30); break; } } + +uint8_t doAutoMemory(uint16_t startfreq, uint16_t stopfreq, uint8_t startmem, uint8_t stopmem, bool rdsonly) { + uint8_t error = 0; + uint8_t counter = 0; + uint16_t _current = frequency; + uint16_t totalIterations = (stopfreq - startfreq) + 1; + uint16_t currentIteration = 0; + uint8_t percent = 0; + uint8_t percentold = 0; + bool stopScanning = false; + + radio.setMute(); + radio.power(0); + band = BAND_FM; + tunemode = TUNE_MAN; + + tft.drawRect(65, 109, 190, 8, FrameColor); + tft.fillRect(66, 110, 188, 6, GreyoutColor); + tftPrint(1, myLanguage[language][272], 120, 155, ActiveColor, ActiveColorSmooth, 16); + + while (digitalRead(ROTARY_BUTTON)) delay(50); + + for (frequency = startfreq * 10; frequency <= stopfreq * 10; frequency += 10) { + if (stopScanning) { + break; + } + + currentIteration++; + percent = (currentIteration * 100) / totalIterations; + + radio.SetFreq(frequency); + radio.clearRDS(fullsearchrds); + delay(50); + radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, CN); + if ((USN < fmscansens * 30) && (WAM < 230) && (OStatus < 80 && OStatus > -80)) { + for (byte y = 0; y < 20; y++) { + delay(50); + radio.readRDS(showrdserrors); + } + if ((rdsonly && radio.rds.hasRDS) || !rdsonly) { + StoreMemoryPos(startmem); + counter ++; + startmem++; + if (startmem > stopmem) { + error = 1; + stopScanning = true; + break; + } + } + } + + if (percent != percentold) { + switch (CurrentTheme) { + case 7: + SignalSprite.pushImage(-107, -95, 292, 170, popupbackground_wo); + SquelchSprite.pushImage(-177, -135, 292, 170, popupbackground_wo); + break; + + default: + SignalSprite.pushImage(-107, -95, 292, 170, popupbackground); + SquelchSprite.pushImage(-177, -135, 292, 170, popupbackground); + break; + } + + SignalSprite.setTextColor(SecondaryColor, SecondaryColorSmooth, false); + SignalSprite.setTextDatum(TC_DATUM); + SignalSprite.loadFont(FONT28); + SignalSprite.drawString(String(percent) + "%", 40, 0); + SignalSprite.unloadFont(); + SignalSprite.pushSprite(120, 125); + + if (language == LANGUAGE_CHS) SquelchSprite.loadFont(FONT16_CHS); else SquelchSprite.loadFont(FONT16); + SquelchSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + SquelchSprite.drawString(String(counter), 0, 0); + SquelchSprite.pushSprite(200, 155); + + tft.fillRect(66, 110, 2 * constrain(percent, 0, 94), 6, BarInsignificantColor); + + percentold = percent; + } + if (digitalRead(ROTARY_BUTTON) == LOW) { + while (digitalRead(ROTARY_BUTTON)) delay(50); + error = 2; + stopScanning = true; + break; + } + } + + frequency = _current; + radio.SetFreq(frequency); + radio.clearRDS(fullsearchrds); + radio.setUnMute(); + SQ = false; + + return error; +} + +void StoreMemoryPos(uint8_t _pos) { + EEPROM.writeByte(_pos + EE_PRESETS_BAND_START, band); + EEPROM.writeByte(_pos + EE_PRESET_BW_START, BWset); + EEPROM.writeByte(_pos + EE_PRESET_MS_START, StereoToggle); + if (band == BAND_FM) {//todo air + EEPROM.writeUInt((_pos * 4) + EE_PRESETS_FREQUENCY_START, frequency); + } else if (band == BAND_OIRT) { + EEPROM.writeUInt((_pos * 4) + EE_PRESETS_FREQUENCY_START, frequency_OIRT); + } else if (band == BAND_LW) { + EEPROM.writeUInt((_pos * 4) + EE_PRESETS_FREQUENCY_START, frequency_LW); + } else if (band == BAND_MW) { + EEPROM.writeUInt((_pos * 4) + EE_PRESETS_FREQUENCY_START, frequency_MW); + } else { + EEPROM.writeUInt((_pos * 4) + EE_PRESETS_FREQUENCY_START, frequency_SW); + } + + presets[_pos].band = band; + presets[_pos].bw = BWset; + presets[_pos].ms = StereoToggle; + + String stationName = radio.rds.stationName; + char stationNameCharArray[10]; + char picodeArray[7]; + stationName.toCharArray(stationNameCharArray, sizeof(stationNameCharArray)); + memcpy(picodeArray, radio.rds.picode, sizeof(picodeArray)); + + for (int y = 0; y < 9; y++) { + presets[_pos].RDSPS[y] = (y < strlen(stationNameCharArray)) ? stationNameCharArray[y] : '\0'; + EEPROM.writeByte((_pos * 9) + y + EE_PRESETS_RDSPS_START, presets[_pos].RDSPS[y]); + } + + for (int y = 0; y < 5; y++) { + presets[_pos].RDSPI[y] = (y < sizeof(picodeArray)) ? picodeArray[y] : '\0'; + EEPROM.writeByte((_pos * 5) + y + EE_PRESETS_RDSPI_START, presets[_pos].RDSPI[y]); + } + + EEPROM.commit(); + + if (band == BAND_FM) {//todo air + presets[_pos].frequency = frequency; + } else if (band == BAND_OIRT) { + presets[_pos].frequency = frequency_OIRT; + } else if (band == BAND_LW) { + presets[_pos].frequency = frequency_LW; + } else if (band == BAND_MW) { + presets[_pos].frequency = frequency_MW; + } else { + presets[_pos].frequency = frequency_SW; + } +} diff --git a/src/constants.h b/src/constants.h index e6f5540..5c9c36b 100644 --- a/src/constants.h +++ b/src/constants.h @@ -209,9 +209,9 @@ #define EE_CHECKBYTE_VALUE 10 // 0 ~ 255,add new entry, change for new value #define EE_PRESETS_FREQUENCY 0 // Default value when memory channel should be skipped! #ifdef HAS_AIR_BAND -#define EE_TOTAL_CNT 2223 // Total occupied eeprom bytes +#define EE_TOTAL_CNT 2235 // Total occupied eeprom bytes #else -#define EE_TOTAL_CNT 2218 // Total occupied eeprom bytes +#define EE_TOTAL_CNT 2229 // Total occupied eeprom bytes #endif #define EE_PRESETS_BAND_START 0 // 99 * 1 byte @@ -314,9 +314,14 @@ #define EE_BYTE_LONGBANDPRESS 2215 #define EE_BYTE_SHOWCLOCK 2216 #define EE_BYTE_SHOWLONGPS 2217 +#define EE_UINT16_MEMSTARTFREQ 2218 +#define EE_UINT16_MEMSTOPFREQ 2222 +#define EE_BYTE_MEMSTARTPOS 2226 +#define EE_BYTE_MEMSTOPPOS 2227 +#define EE_BYTE_MEMPIONLY 2228 #ifdef HAS_AIR_BAND -#define EE_BYTE_AIRSTEPSIZE 2118 -#define EE_UINT16_FREQUENCY_AIR 2219 +#define EE_BYTE_AIRSTEPSIZE 2229 +#define EE_UINT16_FREQUENCY_AIR 2230 #endif // End of EEPROM index defines diff --git a/src/gui.cpp b/src/gui.cpp index 0d6878f..c8a332b 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -8,7 +8,7 @@ #include byte menuitem; -byte items[9] = {9, static_cast(dynamicspi ? 10 : 9), 7, 10, 10, 10, 9, 6, 7}; +byte items[10] = {10, static_cast(dynamicspi ? 10 : 9), 7, 10, 10, 10, 9, 6, 7, 6}; extern mem presets[]; bool setWiFiConnectParam = false; @@ -596,6 +596,12 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); FullLineSprite.drawString(removeNewline(myLanguage[language][212]), 6, 2); break; + + case AUTOMEM: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][269]), 6, 2); + break; } break; @@ -693,6 +699,18 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString(String(scanstart + 1, DEC), 298, 2); break; + + case AUTOMEM: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][264]), 6, 2); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString("MHz", 298, 2); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + FullLineSprite.drawString(String(memstartfreq / 10 + ConverterSet, DEC) + "." + String(memstartfreq % 10 + ConverterSet, DEC), 258, 2); + break; } break; @@ -789,6 +807,18 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString(String(scanstop + 1, DEC), 298, 2); break; + + case AUTOMEM: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][265]), 6, 2); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString("MHz", 298, 2); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + FullLineSprite.drawString(String(memstopfreq / 10 + ConverterSet, DEC) + "." + String(memstopfreq % 10 + ConverterSet, DEC), 258, 2); + break; } break; @@ -887,6 +917,16 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString((scanhold == 0 ? "0.5" : String(scanhold, DEC)), 258, 2); break; + + case AUTOMEM: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][266]), 6, 2); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + FullLineSprite.drawString(String(memstartpos + 1, DEC), 298, 2); + break; } break; @@ -975,7 +1015,7 @@ void ShowOneLine(byte position, byte item, bool selected) { case CONNECTIVITY: FullLineSprite.setTextDatum(TL_DATUM); FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); - FullLineSprite.drawString(removeNewline(myLanguage[language][197]), 6, 2); + FullLineSprite.drawString(removeNewline(myLanguage[language][271]), 6, 2); FullLineSprite.setTextDatum(TR_DATUM); FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); @@ -991,6 +1031,16 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FullLineSprite.drawString((scanmem ? myLanguage[language][218] : myLanguage[language][217]), 298, 2); break; + + case AUTOMEM: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][266]), 6, 2); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + FullLineSprite.drawString(String(memstoppos + 1, DEC), 298, 2); + break; } break; @@ -1099,6 +1149,16 @@ void ShowOneLine(byte position, byte item, bool selected) { case SIGNAL: FullLineSprite.drawString(myLanguage[language][221], 298, 2); break; } break; + + case AUTOMEM: + FullLineSprite.setTextDatum(TL_DATUM); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][268]), 6, 2); + + FullLineSprite.setTextDatum(TR_DATUM); + FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + FullLineSprite.drawString((mempionly ? myLanguage[language][42] : myLanguage[language][30]), 298, 2); + break; } break; @@ -1298,7 +1358,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, 2); + FullLineSprite.drawString(removeNewline(myLanguage[language][270]), 152, 2); break; case MAINSETTINGS: @@ -1364,8 +1424,8 @@ void ShowOneLine(byte position, byte item, bool selected) { switch (menupage) { case INDEX: FullLineSprite.setTextDatum(TC_DATUM); - FullLineSprite.setTextColor(SecondaryColor, SecondaryColorSmooth, false); - FullLineSprite.drawString(removeNewline(String(myLanguage[language][84]) + " " + String(VERSION)), 152, 2); + FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + FullLineSprite.drawString(removeNewline(myLanguage[language][70]), 152, 2); break; case MAINSETTINGS: @@ -2554,6 +2614,57 @@ void MenuUp() { break; } break; + + case AUTOMEM: + switch (menuoption) { + case ITEM2: + memstartfreq ++; + if (memstartfreq > 1070) (TEF == 205 ? memstartfreq = 640 : memstartfreq = 650); + + OneBigLineSprite.setTextDatum(TL_DATUM); + OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + OneBigLineSprite.drawString("MHz", 155, 0); + OneBigLineSprite.setTextDatum(TR_DATUM); + OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + OneBigLineSprite.drawString(String(memstartfreq / 10 + ConverterSet, DEC) + "." + String(memstartfreq % 10 + ConverterSet, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM3: + memstopfreq ++; + if (memstopfreq > 1080) memstopfreq = 660; + + OneBigLineSprite.setTextDatum(TL_DATUM); + OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + OneBigLineSprite.drawString("MHz", 155, 0); + OneBigLineSprite.setTextDatum(TR_DATUM); + OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + OneBigLineSprite.drawString(String(memstopfreq / 10 + ConverterSet, DEC) + "." + String(memstopfreq % 10 + ConverterSet, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM4: + memstartpos++; + if (memstartpos >= memstoppos) memstartpos = 0; + OneBigLineSprite.drawString(String(memstartpos + 1, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM5: + memstoppos++; + if (memstoppos > EE_PRESETS_CNT - 1) memstoppos = memstartpos + 1; + OneBigLineSprite.drawString(String(memstoppos + 1, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM6: + mempionly = !mempionly; + + OneBigLineSprite.drawString((mempionly ? myLanguage[language][42] : myLanguage[language][30]), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + } + break; } } } @@ -3416,6 +3527,57 @@ void MenuDown() { break; } break; + + case AUTOMEM: + switch (menuoption) { + case ITEM2: + memstartfreq -= 10; + if ((TEF == 205 ? memstartfreq < 640 : memstartfreq < 650)) memstartfreq = 1079; + + OneBigLineSprite.setTextDatum(TL_DATUM); + OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + OneBigLineSprite.drawString("MHz", 155, 0); + OneBigLineSprite.setTextDatum(TR_DATUM); + OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + OneBigLineSprite.drawString(String(memstartfreq / 10 + ConverterSet, DEC) + "." + String(memstartfreq % 10 + ConverterSet, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM3: + memstopfreq -= 10; + if (memstopfreq < 660) memstopfreq = 1080; + + OneBigLineSprite.setTextDatum(TL_DATUM); + OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + OneBigLineSprite.drawString("MHz", 155, 0); + OneBigLineSprite.setTextDatum(TR_DATUM); + OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + OneBigLineSprite.drawString(String(memstopfreq / 10 + ConverterSet, DEC) + "." + String(memstopfreq % 10 + ConverterSet, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM4: + memstartpos--; + if (memstartpos >= memstoppos) memstartpos = scanstop - 1; + OneBigLineSprite.drawString(String(memstartpos + 1, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM5: + memstoppos--; + if (memstoppos <= memstartpos) memstoppos = EE_PRESETS_CNT - 1; + OneBigLineSprite.drawString(String(memstoppos + 1, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM6: + mempionly = !mempionly; + + OneBigLineSprite.drawString((mempionly ? myLanguage[language][42] : myLanguage[language][30]), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + } + break; } } } @@ -3506,6 +3668,14 @@ void DoMenu() { break; case ITEM9: + menupage = AUTOMEM; + menuoption = ITEM1; + menuitem = 0; + submenu = true; + BuildMenu(); + break; + + case ITEM10: menuopen = true; tft.drawRoundRect(10, 6, 300, 230, 5, ActiveColor); tft.fillRoundRect(12, 8, 296, 226, 5, BackgroundColor); @@ -4221,7 +4391,7 @@ void DoMenu() { break; case ITEM5: - Infoboxprint(myLanguage[language][197]); + Infoboxprint(myLanguage[language][271]); OneBigLineSprite.drawString(String(stationlistid, DEC), 135, 0); OneBigLineSprite.pushSprite(24, 118); @@ -4299,6 +4469,72 @@ void DoMenu() { break; } break; + + case AUTOMEM: + switch (menuoption) { + case ITEM1: + Infoboxprint(myLanguage[language][270]); + switch (doAutoMemory(memstartfreq, memstopfreq, memstartpos, memstoppos, mempionly)) { + case 0: + tftPrint(0, myLanguage[language][275], 160, 175, ActiveColor, ActiveColorSmooth, 16); + break; + + case 1: + tftPrint(0, myLanguage[language][273], 160, 175, ActiveColor, ActiveColorSmooth, 16); + break; + + case 2: + tftPrint(0, myLanguage[language][274], 160, 175, ActiveColor, ActiveColorSmooth, 16); + break; + } + break; + + case ITEM2: + Infoboxprint(myLanguage[language][264]); + + OneBigLineSprite.setTextDatum(TL_DATUM); + OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + OneBigLineSprite.drawString("MHz", 155, 0); + OneBigLineSprite.setTextDatum(TR_DATUM); + OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + OneBigLineSprite.drawString(String(memstartfreq / 10 + ConverterSet, DEC) + "." + String(memstartfreq % 10 + ConverterSet, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM3: + Infoboxprint(myLanguage[language][265]); + + OneBigLineSprite.setTextDatum(TL_DATUM); + OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false); + OneBigLineSprite.drawString("MHz", 155, 0); + OneBigLineSprite.setTextDatum(TR_DATUM); + OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + OneBigLineSprite.drawString(String(memstopfreq / 10 + ConverterSet, DEC) + "." + String(memstopfreq % 10 + ConverterSet, DEC), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM4: + Infoboxprint(myLanguage[language][266]); + + OneBigLineSprite.drawString(String(memstartpos + 1), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM5: + Infoboxprint(myLanguage[language][267]); + + OneBigLineSprite.drawString(String(memstoppos + 1), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + + case ITEM6: + Infoboxprint(myLanguage[language][268]); + + OneBigLineSprite.drawString((mempionly ? myLanguage[language][42] : myLanguage[language][30]), 135, 0); + OneBigLineSprite.pushSprite(24, 118); + break; + } + break; } } else { if (menupage == CONNECTIVITY && menuoption == ITEM2) { diff --git a/src/gui.h b/src/gui.h index 6e4370b..f50fb9f 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, DXMODE}; +enum menupage {INDEX, MAINSETTINGS, AUDIOSETTINGS, DISPLAYSETTINGS, RDSSETTINGS, FMSETTINGS, AMSETTINGS, CONNECTIVITY, DXMODE, AUTOMEM}; extern byte menuitem; -extern byte items[9]; +extern byte items[10]; extern bool advancedRDS; extern bool afmethodBold; @@ -103,6 +103,9 @@ extern byte language; extern byte licold; extern byte longbandpress; extern byte memorypos; +extern byte mempionly; +extern byte memstartpos; +extern byte memstoppos; extern byte menupage; extern byte MSold; extern byte poweroptions; @@ -198,6 +201,8 @@ extern unsigned int LowEdgeSet; extern unsigned int mappedfreqold[20]; extern unsigned int mappedfreqold2[20]; extern unsigned int mappedfreqold3[20]; +extern unsigned int memstartfreq; +extern unsigned int memstopfreq; extern unsigned long scantimer; extern TFT_eSPI tft; @@ -238,4 +243,5 @@ extern void UpdateFonts(byte mode); extern void tftPrint(int8_t offset, const String & text, int16_t x, int16_t y, int color, int smoothcolor, uint8_t fontsize); extern void setAutoSpeedSPI(); extern void showAutoSquelch(bool mode); +extern uint8_t doAutoMemory(uint16_t startfreq, uint16_t stopfreq, uint8_t startmem, uint8_t stopmem, bool pisearch); #endif \ No newline at end of file diff --git a/src/language.h b/src/language.h index b494b83..79caa74 100644 --- a/src/language.h +++ b/src/language.h @@ -5,7 +5,7 @@ // [number of languages][number of texts] -static const char* const myLanguage[18][264] PROGMEM = { +static const char* const myLanguage[18][276] PROGMEM = { { "English", // English "Rotary direction changed", // 1 "Please release button", // 2 @@ -203,7 +203,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "CONNECT", // 195 "DX MODE", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM AGC", // 198 "FM deemphasis", // 199 "Small", // 200 @@ -269,7 +269,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Initial", // 260 "Always", // 261 "Show clock", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist ID", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Nederlands", // Dutch @@ -469,7 +481,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "VERBIND", // 195 "DX MODE", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM AGC", // 198 "FM deemphasis", // 199 "Laag", // 200 @@ -535,7 +547,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Initieel", // 260 "Altijd", //261 "Toon klok", // 262 - "Toon long PS" // 263 + "Toon long PS", // 263 + "Start frequentie", // 264 + "Stop frequentie", // 265 + "Start geheugen\nkanaal", // 266 + "Stop geheugen\nkanaal", // 267 + "Alleen met\nRDS opslaan", // 268 + "Start auto\ngeheugen kanaal", // 269 + "Auto geheugen kanaal", // 270 + "Stationlist ID", // 271 + "Gevonden", // 272 + "Afgebroken! Geheugen vol", // 273 + "Afgebroken! Knop ingedrukt", // 274 + "Zoeken zonder fouten voltooid" // 275 }, { "Polski", // Polish @@ -735,7 +759,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "ŁĄCZNOŚĆ", // 195 "TRYB DX", // 196 - "Identyfikator Stationlist", // 197 + "AUTO MEM", // 197 "Tłumik ant. AM", // 198 "Deemfaza FM", // 199 "Małe", // 200 @@ -801,7 +825,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Początkowy", // 260 "Zawsze", // 261 "Pokaż zegar", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Identyfikator Stationlist", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Hrvatski", // Croatian @@ -1001,7 +1037,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "SPOJI", // 195 "DX NAČIN RADA", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM ATT", // 198 "FM deemphasis", // 199 "Malo", // 200 @@ -1067,7 +1103,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Početno", // 260 "Uvijek", //261 "Prikaži sat", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist ID", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Ελληνικά", // Greek @@ -1267,7 +1315,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "ΣΥΝΔΕΣΗ", // 195 "DX MODE", // 196 - "ID λίστας σταθμών", // 197 + "AUTO MEM", // 197 "AM εξασθένιση", // 198 "FM αποέμφαση", // 199 "Μικρό", // 200 @@ -1333,7 +1381,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Αρχικό", // 260 "Πάντα", //261 "Εμφάνιση ρολογιού", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "ID λίστας σταθμών", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Română", // Romanian @@ -1533,7 +1593,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "CONECTARE", // 195 "MOD DX", // 196 - "Listă ID posturi", // 197 + "AUTO MEM", // 197 "AGC AM", // 198 "FM deemphasis", // 199 "Mic", // 200 @@ -1599,7 +1659,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Inițial", // 260 "Mereu", //261 "Arată ceasul", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Listă ID posturi", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Deutsch", // German @@ -1799,7 +1871,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "NETZWERK", // 195 "DX MODE", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM ATT", // 198 "Entzerrung auf UKW", // 199 "Wenig", // 200 @@ -1865,7 +1937,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Anfänglich", // 260 "Immer", // 261 "Uhr anzeigen", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist ID", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Český", // Czech @@ -2065,7 +2149,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "KONEKTIVITA", // 195 "DX REŽIM", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM ATT", // 198 "FM deemfáze", // 199 "Malé", // 200 @@ -2131,7 +2215,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Počáteční", // 260 "Vždy", //261 "Zobrazit hodiny", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist ID", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Magyar", // Hungarian @@ -2331,7 +2427,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "CSATLAKOZÁS", // 195 "DX MÓD", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM AGC", // 198 "FM kihangolás", // 199 "Kicsi", // 200 @@ -2397,7 +2493,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Kezdeti", // 260 "Mindig", //261 "Óra mutatása", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist ID", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Français", // French @@ -2597,7 +2705,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "CONNECTER", // 195 "DX MODE", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM ATT", // 198 "FM déemphasie", // 199 "Petites", // 200 @@ -2663,7 +2771,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Initial", // 260 "Toujours", // 261 "Afficher l'horloge", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist ID", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Български", // Bulgarian @@ -2863,7 +2983,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "СВ (AM)", // 194 "ВРЪЗКА", // 195 "DX MODE", // 196 - "Stationlist Идентификатор", // 197 + "AUTO MEM", // 197 "СВ атенюатор", // 198 "FM deemphasis", // 199 "Small", // 200 @@ -2929,7 +3049,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Начален", // 260 "Винаги", // 261 "Покажи часовника", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist Идентификатор", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Русский", // Russian @@ -3129,7 +3261,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "КОННЕКТ", // 195 "DX MODE", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM аттеньюатор", // 198 "FM deemphasis", // 199 "Мало", // 200 @@ -3195,7 +3327,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Начальный", // 260 "Всегда", // 261 "Показать часы", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist Идентификатор", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Українська", // Ukranian @@ -3395,7 +3539,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "ПІДКЛЮЧЕННЯ", // 195 "DX MODE", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM ATT", // 198 "FM deemphasis", // 199 "Мало", // 200 @@ -3461,7 +3605,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Початковий", // 260 "Завжди", // 261 "Показати годинник", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist ID", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Italiano", // Italian @@ -3661,7 +3817,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "CONNETTI", // 195 "MODO DX", // 196 - "ID Stationlist", // 197 + "AUTO MEM", // 197 "ATT AM", // 198 "Deenfasi FM", // 199 "Piccolo", // 200 @@ -3727,7 +3883,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Iniziale", // 260 "Sempre", // 261 "Mostra l'orologio", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "ID Stationlist", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Simplified Chinese", // Simplified Chinese @@ -3927,7 +4095,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM 设置", // 194 "连机模式", // 195 "FMDX 选项", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM天线衰减", // 198 "FM去加重", // 199 "少量", // 200 @@ -3993,7 +4161,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "初始", // 260 "始终", // 261 "显示时钟", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist ID", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Norsk", // Norwegian @@ -4193,7 +4373,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "TILKOBLE", // 195 "DX MODUS", // 196 - "Stationlist ID", // 197 + "AUTO MEM", // 197 "AM AGC", // 198 "FM ettertrykkelse", // 199 "Lite", // 200 @@ -4259,7 +4439,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Innledende", // 260 "Alltid", // 261 "Vis klokka", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist ID", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Español", // Spanish @@ -4459,7 +4651,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "CONECTAR", // 195 "DX MODE", // 196 - "ID de lista de estaciones", // 197 + "AUTO MEM", // 197 "Atenuación de AM", // 198 "Despreocupación\nde FM", // 199 "Pequeño", // 200 @@ -4525,7 +4717,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Inicial", // 260 "Siempre", // 261 "Mostrar reloj", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "Stationlist ID", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 }, { "Português", // Portuguese @@ -4725,7 +4929,7 @@ static const char* const myLanguage[18][264] PROGMEM = { "AM", // 194 "CONECTAR", // 195 "DX MODE", // 196 - "ID da lista de estações", // 197 + "AUTO MEM", // 197 "Atenuação AM", // 198 "Desênfase FM", // 199 "Pequeno", // 200 @@ -4791,7 +4995,19 @@ static const char* const myLanguage[18][264] PROGMEM = { "Inicial", // 260 "Sempre", // 261 "Mostrar relógio", // 262 - "Show long PS" // 263 + "Show long PS", // 263 + "Start frequency", // 264 + "Stop frequency", // 265 + "Start memory channel", // 266 + "Stop memory channel", // 267 + "Only store with RDS", // 268 + "Start auto memory", // 269 + "Auto memory", // 270 + "ID da lista de estações", // 271 + "Found", // 272 + "Abort! Out of memorychannels", // 273 + "Abort! User pressed button", // 274 + "Scan finished without errors" // 275 } }; #endif \ No newline at end of file