diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index cbf4b2c..10774b2 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -779,6 +779,7 @@ void setup() { } tft.setTouch(TouchCalData); + tft.fillScreen(BackgroundColor); tftPrint(0, myLanguage[language][8], 160, 3, PrimaryColor, PrimaryColorSmooth, 28); tftPrint(0, "Software " + String(VERSION), 160, 152, PrimaryColor, PrimaryColorSmooth, 16); @@ -1011,7 +1012,7 @@ void loop() { rdsflagreset = false; } - if (!menu && !afscreen && !scandxmode) { + if (!BWtune && !menu && !afscreen && !scandxmode) { if (af != 0 && dropout && millis() >= aftimer + 1000) { aftimer = millis(); if (radio.af_counter == 0) { @@ -1128,7 +1129,7 @@ void loop() { if (seek) Seek(direction); - if ((SStatus / 10 > LowLevelSet) && !LowLevelInit && !menu && band < BAND_GAP) { + if ((SStatus / 10 > LowLevelSet) && !LowLevelInit && !BWtune && !menu && band < BAND_GAP) { if (!screenmute && !advancedRDS && !afscreen) { if (showmodulation) { tftPrint(-1, "10", 27, 144, ActiveColor, ActiveColorSmooth, 16); @@ -1159,7 +1160,7 @@ void loop() { } if ((SStatus / 10 <= LowLevelSet) && band < BAND_GAP) { - if (LowLevelInit && !menu) { + if (LowLevelInit && !BWtune && !menu) { if (!screenmute && !afscreen && !advancedRDS) { for (byte segments = 0; segments < 94; segments++) { if (segments > 54) { @@ -1191,7 +1192,7 @@ void loop() { LowLevelInit = false; } - if (!menu && (screenmute || radio.rds.correctPI != 0)) readRds(); + if (!BWtune && !menu && (screenmute || radio.rds.correctPI != 0)) readRds(); if (millis() >= lowsignaltimer + 300) { lowsignaltimer = millis(); if (af || (!screenmute || (screenmute && (XDRGTKTCP || XDRGTKUSB)))) { @@ -1201,7 +1202,7 @@ void loop() { radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, CN); } } - if (!menu) { + if (!BWtune && !menu) { doSquelch(); GetData(); } @@ -1215,7 +1216,7 @@ void loop() { radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, CN); } } - if (!menu) { + if (!BWtune && !menu) { doSquelch(); if (millis() >= tuningtimer + 200) readRds(); GetData(); @@ -1258,7 +1259,7 @@ void loop() { } } else { if (BWtune) doBWtuneUp(); else KeyUp(); - if (screensaverset && !menu && !screensavertriggered) ScreensaverTimerRestart(); + if (screensaverset && !BWtune && !menu && !screensavertriggered) ScreensaverTimerRestart(); } } @@ -1273,7 +1274,7 @@ void loop() { } } else { if (BWtune) doBWtuneDown(); else KeyDown(); - if (screensaverset && !menu && !screensavertriggered) ScreensaverTimerRestart(); + if (screensaverset && !BWtune && !menu && !screensavertriggered) ScreensaverTimerRestart(); } } @@ -1307,8 +1308,6 @@ void loop() { } } - if (digitalRead(BWBUTTON) == HIGH && BWtune) BWtune = false; - if (digitalRead(BWBUTTON) == LOW && !BWtune) { tottimer = millis(); if (screensavertriggered) { @@ -1324,7 +1323,7 @@ void loop() { num = GetNum(); if (num != -1) { - if (!screenmute && !menu && !advancedRDS && !afscreen) + if (!screenmute && !BWtune && !menu && !advancedRDS && !afscreen) { NumpadProcess(num); } @@ -1335,7 +1334,7 @@ void loop() { if (screensaver_IRQ) { screensaver_IRQ = OFF; - if (!screensavertriggered && !menu) { + if (!screensavertriggered && !BWtune && !menu) { WakeToSleep(true); } } @@ -1348,9 +1347,9 @@ void GetData() { ShowSignalLevel(); } - if (!menu) showPS(); + if (!BWtune && !menu) showPS(); - if (band < BAND_GAP && !menu) { + if (band < BAND_GAP && !BWtune && !menu) { if (advancedRDS && !afscreen && !screenmute) ShowAdvancedRDS(); if (afscreen && !screenmute) ShowAFEON(); if (!afscreen) { @@ -1839,7 +1838,7 @@ void BANDBUTTONPress() { if (!usesquelch) radio.setUnMute(); unsigned long counterold = millis(); unsigned long counter = millis(); - if (!menu) { + if (!BWtune && !menu) { while (digitalRead(BANDBUTTON) == LOW && counter - counterold <= 1000) counter = millis(); if (counter - counterold < 1000) { @@ -2394,7 +2393,7 @@ void BWButtonPress() { cancelDXScan(); } else { if (!usesquelch) radio.setUnMute(); - if (!menu) { + if (!BWtune && !menu) { if (!screenmute) tft.drawBitmap(92, 4, Speaker, 26, 22, GreyoutColor); unsigned long counterold = millis(); unsigned long counter = millis(); @@ -2404,13 +2403,11 @@ void BWButtonPress() { if (band == BAND_FM || band == BAND_OIRT) { doStereoToggle(); } else { - BWset++; - doBW(); + BuildBWSelector(); BWtune = true; } } else { - BWset++; - doBW(); + BuildBWSelector(); BWtune = true; } delay(100); @@ -2462,7 +2459,7 @@ void ModeButtonPress() { if (afpagenr == 1) afpagenr = 2; else if (afpagenr == 2 && afpage) afpagenr = 3; else afpagenr = 1; BuildAFScreen(); } else { - if (!menu) { + if (!BWtune && !menu) { if (!screenmute) { tft.drawBitmap(92, 4, Speaker, 26, 22, GreyoutColor); } @@ -2474,7 +2471,7 @@ void ModeButtonPress() { if (counter - counterold <= 1000) { doTuneMode(); } else { - if (!menu) { + if (!BWtune && !menu) { menuoption = ITEM1; menupage = INDEX; menuitem = 0; @@ -2642,7 +2639,7 @@ void ButtonPress() { BuildDisplay(); SelectBand(); } - if (!menu) { + if (!BWtune && !menu) { if (tunemode == TUNE_MEM) { if (!memorystore) { memorystore = true; @@ -2741,7 +2738,11 @@ void ButtonPress() { ScreensaverTimerRestart(); } } else { - DoMenu(); + if (menu) DoMenu(); + if (BWtune) { + BuildDisplay(); + SelectBand(); + } } } while (digitalRead(ROTARY_BUTTON) == LOW) delay(50); @@ -2753,7 +2754,7 @@ void KeyUp() { cancelDXScan(); } else { if (!afscreen) { - if (!menu) { + if (!BWtune && !menu) { switch (tunemode) { case TUNE_MAN: TuneUp(); @@ -2820,7 +2821,7 @@ void KeyDown() { cancelDXScan(); } else { if (!afscreen) { - if (!menu) { + if (!BWtune && !menu) { switch (tunemode) { case TUNE_MAN: TuneDown(); @@ -3035,7 +3036,6 @@ void DoMemoryPosTune() { BWset = presets[memorypos].bw; doBW(); - BWtune = true; memtune = true; memreset = true; rdsflagreset = false; @@ -3511,7 +3511,7 @@ void doSquelch() { if (!XDRGTKUSB && !XDRGTKTCP && usesquelch && (!scandxmode || (scandxmode && !scanmute))) { if (!screenmute && usesquelch && !advancedRDS && !afscreen) { - if (!menu && (Squelch > Squelchold + 2 || Squelch < Squelchold - 2)) { + if (!BWtune && !menu && (Squelch > Squelchold + 2 || Squelch < Squelchold - 2)) { SquelchSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); SquelchSprite.fillSprite(BackgroundColor); if (Squelch == -100) { @@ -3616,13 +3616,13 @@ void doSquelch() { void updateBW() {//todo air if (BWset == 0) { - if (!screenmute && !advancedRDS && !afscreen) { + if (!BWtune && !screenmute && !advancedRDS && !afscreen) { tft.fillRoundRect(248, 36, 69, 18, 2, SecondaryColor); tftPrint(0, "AUTO BW", 282, 38, BackgroundColor, SecondaryColor, 16); } radio.setFMABandw(); } else { - if (!screenmute && !advancedRDS && !afscreen) { + if (!BWtune && !screenmute && !advancedRDS && !afscreen) { tft.fillRoundRect(248, 36, 69, 18, 2, GreyoutColor); tftPrint(0, "AUTO BW", 282, 38, BackgroundColor, GreyoutColor, 16); } @@ -3776,26 +3776,35 @@ void doBW() { void doBWtuneDown() { rotary = 0; - BWset--; if (band < BAND_GAP) { + if (BWset == 0) drawButton(BWButtonLabelsFM[16], 16, false); else drawButton(BWButtonLabelsFM[BWset - 1], BWset - 1, false); + BWset--; if (BWset > 16) BWset = 16; + if (BWset == 0) drawButton(BWButtonLabelsFM[16], 16, true); else drawButton(BWButtonLabelsFM[BWset - 1], BWset - 1, true); } else { + drawButton(BWButtonLabelsAM[BWset - 1], BWset - 1, false); + BWset--; if (BWset == 0) BWset = 4; + drawButton(BWButtonLabelsAM[BWset - 1], BWset - 1, true); } + doBW(); - ShowBW(); } void doBWtuneUp() { rotary = 0; - BWset++; if (band < BAND_GAP) { + if (BWset == 0) drawButton(BWButtonLabelsFM[16], 16, false); else drawButton(BWButtonLabelsFM[BWset - 1], BWset - 1, false); + BWset++; if (BWset > 16) BWset = 0; + if (BWset == 0) drawButton(BWButtonLabelsFM[16], 16, true); else drawButton(BWButtonLabelsFM[BWset - 1], BWset - 1, true); } else { + drawButton(BWButtonLabelsAM[BWset - 1], BWset - 1, false); + BWset++; if (BWset > 4) BWset = 1; + drawButton(BWButtonLabelsAM[BWset - 1], BWset - 1, true); } doBW(); - ShowBW(); } void doTuneMode() { diff --git a/src/Tuner_Interface.cpp b/src/Tuner_Interface.cpp index 7d525a3..2566808 100644 --- a/src/Tuner_Interface.cpp +++ b/src/Tuner_Interface.cpp @@ -72,7 +72,6 @@ bool Tuner_WriteBuffer(unsigned char *buf, uint16_t len) { Wire.beginTransmission(0x64); for (uint16_t i = 0; i < len; i++) Wire.write(buf[i]); uint8_t r = Wire.endTransmission(); - delay(2); return (r == 0) ? 1 : 0; } @@ -173,6 +172,7 @@ void Tuner_Patch(byte TEF) { void Tuner_I2C_Init() { Wire.begin(); + Wire.setClock(400000); delay(5); } diff --git a/src/constants.h b/src/constants.h index 14a4090..362fd01 100644 --- a/src/constants.h +++ b/src/constants.h @@ -343,6 +343,8 @@ static const char* const unitString[] = {"dBμV", "dBf", "dBm"}; static const char* const FreqFont[] = {"Classic", "Roubenstil", "Motoya", "Aura2", "Comic", "Modern"}; static const char* const Theme[] = {"Essence", "Cyan", "Crimson", "Monochrome", "Volcano", "Dendro", "Sakura", "Whiteout", "Tangerine", "Ocean", "Indigo", "Queer", "GoldBrite", "Bubblegum"}; static const char* const Skin[] = {"Essential"}; +static const char* BWButtonLabelsFM[] = {"56 kHz", "64 kHz", "72 kHz", "84 kHz", "97 kHz", "114 kHz", "133 kHz", "151 kHz", "168 kHz", "184 kHz", "200 kHz", "217 kHz", "236 kHz", "254 kHz", "287 kHz", "311 kHz", "Auto"}; +static const char* BWButtonLabelsAM[] = {"3 kHz", "4 kHz", "6 kHz", "8 kHz"}; // Memory channel database typedef struct { diff --git a/src/gui.cpp b/src/gui.cpp index 0fbc1a3..61a4d7e 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -587,7 +587,6 @@ void ShowOneLine(byte position, byte item, bool selected) { case 0: FullLineSprite.drawString(myLanguage[language][30], 298, 2); break; case 1: FullLineSprite.drawString(myLanguage[language][200], 298, 2); break; case 2: FullLineSprite.drawString(myLanguage[language][201], 298, 2); break; - case 3: FullLineSprite.drawString(myLanguage[language][202], 298, 2); break; } break; @@ -1564,8 +1563,30 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.pushSprite(8, 2 + position); } +void BuildBWSelector() { + switch (CurrentTheme) { + case 7: tft.pushImage (0, 0, 320, 240, configurationbackground_wo); break; + default: tft.pushImage (0, 0, 320, 240, configurationbackground); break; + } + tftPrint(0, myLanguage[language][285], 160, 6, PrimaryColor, PrimaryColorSmooth, 16); + + if (band < BAND_GAP) { + for (int x = 0; x < 16; x++) { + drawButton(BWButtonLabelsFM[x], x, (BWset == x + 1 ? true : false)); + } + drawButton(BWButtonLabelsFM[16], 16, (BWset == 0 ? true : false)); + drawButton("OK", 19, false); + } else { + for (int x = 0; x < 4; x++) { + drawButton(BWButtonLabelsAM[x], x, (BWset == x + 1 ? true : false)); + } + drawButton("OK", 19, false); + } +} + void BuildMenu() { advancedRDS = false; + BWtune = false; switch (CurrentTheme) { case 7: tft.pushImage (0, 0, 320, 240, configurationbackground_wo); break; @@ -1730,6 +1751,7 @@ void BuildAdvancedRDS() { void BuildDisplay() { afscreen = false; advancedRDS = false; + BWtune = false; tft.fillScreen(BackgroundColor); tft.drawRect(0, 0, 320, 240, FrameColor); @@ -2267,13 +2289,12 @@ void MenuUp() { switch (menuoption) { case ITEM1: showrdserrors++; - if (showrdserrors > 3) showrdserrors = 0; + if (showrdserrors > 2) showrdserrors = 0; switch (showrdserrors) { case 0: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break; case 1: OneBigLineSprite.drawString(myLanguage[language][200], 135, 0); break; case 2: OneBigLineSprite.drawString(myLanguage[language][201], 135, 0); break; - case 3: OneBigLineSprite.drawString(myLanguage[language][202], 135, 0); break; } OneBigLineSprite.pushSprite(24, 118); break; @@ -3214,13 +3235,12 @@ void MenuDown() { switch (menuoption) { case ITEM1: showrdserrors--; - if (showrdserrors > 3) showrdserrors = 3; + if (showrdserrors > 2) showrdserrors = 2; switch (showrdserrors) { case 0: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break; case 1: OneBigLineSprite.drawString(myLanguage[language][200], 135, 0); break; case 2: OneBigLineSprite.drawString(myLanguage[language][201], 135, 0); break; - case 3: OneBigLineSprite.drawString(myLanguage[language][202], 135, 0); break; } OneBigLineSprite.pushSprite(24, 118); break; @@ -4193,7 +4213,6 @@ void DoMenu() { case 0: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break; case 1: OneBigLineSprite.drawString(myLanguage[language][200], 135, 0); break; case 2: OneBigLineSprite.drawString(myLanguage[language][201], 135, 0); break; - case 3: OneBigLineSprite.drawString(myLanguage[language][202], 135, 0); break; } OneBigLineSprite.pushSprite(24, 118); break; @@ -4807,4 +4826,30 @@ String removeNewline(String inputString) { } } return outputString; +} + +void drawButton(const char* text, byte button_number, bool active) { + const int buttonWidth = 70; + const int buttonHeight = 30; + const int cornerRadius = 6; + const int spacingX = 10; + const int spacingY = 10; + const int numColumns = 4; + const int numRows = 5; + + const int startX = 6; + const int startY = 35; + + if (button_number >= numColumns * numRows) return; + + int row = button_number / numColumns; + int col = button_number % numColumns; + + int x = startX + col * (buttonWidth + spacingX); + int y = startY + row * (buttonHeight + spacingY); + + tft.fillRoundRect(x, y, buttonWidth, buttonHeight, cornerRadius, (active ? InsignificantColor : FrameColor)); + tft.drawRoundRect(x, y, buttonWidth, buttonHeight, cornerRadius, ActiveColor); + + tftPrint(0, text, x + buttonWidth / 2, y + buttonHeight / 4, (active ? FrameColor : PrimaryColor), (active ? InsignificantColor : PrimaryColorSmooth), 16); } \ No newline at end of file diff --git a/src/gui.h b/src/gui.h index 2e972f6..c2a57ed 100644 --- a/src/gui.h +++ b/src/gui.h @@ -35,6 +35,7 @@ extern bool afscreen; extern bool artheadold; extern bool autosquelch; extern bool BWreset; +extern bool BWtune; extern bool change; extern bool compressedold; extern bool dropout; @@ -84,6 +85,7 @@ extern byte bandFM; extern byte bandforbidden; extern byte batteryold; extern byte batteryoptions; +extern byte BWset; extern byte ContrastSet; extern byte CurrentSkin; extern byte CurrentTheme; @@ -220,11 +222,13 @@ void BuildAFScreen(); void BuildMenu(); void BuildAdvancedRDS(); void BuildDisplay(); +void BuildBWSelector(); void MenuUp(); void MenuDown(); void DoMenu(); void doTheme(); void Infoboxprint(const char* input); +void drawButton(const char* text, byte button_number, bool active); String removeNewline(String inputString); extern void ShowFreq(int mode); diff --git a/src/language.h b/src/language.h index 682dc70..043a4dc 100644 --- a/src/language.h +++ b/src/language.h @@ -1,11 +1,11 @@ #ifndef LANGUAGE_H #define LANGUAGE_H -#define VERSION "v2.11.8" +#define VERSION "v2.11.10" // [number of languages][number of texts] -static const char* const myLanguage[18][285] PROGMEM = { +static const char* const myLanguage[18][286] PROGMEM = { { "English", // English "Rotary direction changed", // 1 "Please release button", // 2 @@ -290,7 +290,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Wait time on\nsignal only", // 281 "Press highlighted corner", // 282 "To calibrate touchscreen", // 283 - "Screen inversion toggles" // 284 + "Screen inversion toggles", // 284 + "Select Bandwidth" // 285 }, { "Nederlands", // Dutch @@ -577,7 +578,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Wachttijd alleen\nbij signaal", // 281 "Druk op aangegeven hoeken", // 282 "om scherm te calibreren", // 283 - "Scherm inversie gewijzigd" // 284 + "Scherm inversie gewijzigd", // 284 + "Selecteer bandbreedte" // 285 }, { "Polski", // Polish @@ -864,7 +866,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Czekaj tylko gdy\nwykryto stację", // 281 "Naciśnij zaznaczony róg", // 282 "Aby skalibrować ekran", // 283 - "Inwersja kolorów wyświetlacza" // 284 + "Inwersja kolorów wyświetlacza", // 284 + "Wybierz szer. pasma" // 285 }, { "Hrvatski", // Croatian @@ -1151,7 +1154,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Wait time on\nsignal only", // 281 "Press highlighted corner", // 282 "To calibrate touchscreen", // 283 - "Screen inversion toggles" // 284 + "Screen inversion toggles", // 284 + "Select Bandwidth" // 285 }, { "Ελληνικά", // Greek @@ -1438,7 +1442,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Αναμονή μόνο σε\nυπάρξη σήματος", // 281 "Πιέστε την\nεπισημασμένη γωνία", // 282 "Για βαθμονόμηση\nτης οθόνης αφής", // 283 - "Εναλλαγή αναστροφής οθόνης" // 284 + "Εναλλαγή αναστροφής οθόνης", // 284 + "Επιλογή εύρους μπάντας" // 285 }, { "Română", // Romanian @@ -1725,7 +1730,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Wait time on\nsignal only", // 281 "Press highlighted corner", // 282 "To calibrate touchscreen", // 283 - "Screen inversion toggles" // 284 + "Screen inversion toggles", // 284 + "Select Bandwidth" // 285 }, { "Deutsch", // German @@ -2012,7 +2018,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Wartezeit nur wenn\nSignal vorhanden", // 281 "Markierte Ecke drücken", // 282 "zum Kalibrieren des Touchscrees", // 283 - "Bildschirmumkehrung umschalten" // 284 + "Bildschirmumkehrung umschalten", // 284 + "Bandbreite wählen" // 285 }, { "Český", // Czech @@ -2299,7 +2306,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Wait time on\nsignal only", // 281 "Press highlighted corner", // 282 "To calibrate touchscreen", // 283 - "Screen inversion toggles" // 284 + "Screen inversion toggles", // 284 + "Select Bandwidth" // 285 }, { "Magyar", // Hungarian @@ -2586,7 +2594,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Wait time on\nsignal only", // 281 "Press highlighted corner", // 282 "To calibrate touchscreen", // 283 - "Screen inversion toggles" // 284 + "Screen inversion toggles", // 284 + "Select Bandwidth" // 285 }, { "Français", // French @@ -2873,8 +2882,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Attendre que lorsque\nle signal existe", // 281 "Appuyez sur l'angle\nmis en évidence", // 282 "Pour calibrer l'écran tactile", // 283 - "Inversion d'affichage bascules" // 284 - + "Inversion d'affichage bascules", // 284 + "Sélectionner la bande passante" // 285 }, { "Български", // Bulgarian @@ -3161,7 +3170,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Wait time on\nsignal only", // 281 "Press highlighted corner", // 282 "To calibrate touchscreen", // 283 - "Screen inversion toggles" // 284 + "Screen inversion toggles", // 284 + "Select Bandwidth" // 285 }, { "Русский", // Russian @@ -3200,7 +3210,7 @@ static const char* const myLanguage[18][285] PROGMEM = { "ВЫКЛ.", // 33 "СКАНИРОВАНИЕ", // 34 "Тюнер не обнаружен", // 35 - "AM Antenna gain", // 36 + "Аттеньюатор AM-антенны", // 36 "FM AGC", // 37 "Уровень ошибок RDS", // 38 "Язык меню", // 39 @@ -3226,7 +3236,7 @@ static const char* const myLanguage[18][285] PROGMEM = { "Отображать длину волны", // 59 "Фильтр RDS-данных", // 60 "Ошибки PI-кода", // 61 - "Отображать шумодав", // 62 NEEDS NEW TRANSLATION, ENGLISH: USE SQUELCH + "Отображать шумодав", // 62 "Уровень модуляции", // 63 "AM Noise blanker", // 64 "FM Noise blanker", // 65 @@ -3247,7 +3257,7 @@ static const char* const myLanguage[18][285] PROGMEM = { "мин.", // 80 "Частота шины дисплея SPI", // 81 "Чувствительность сканирования", // 82 - "Не использовать AM", // 83 + "Не использовать", // 83 "Версия прошивки -", // 84 "Шрифт индикации частоты", // 85 "Auto", // 86 @@ -3264,8 +3274,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Калибровка уровня:", // 97 "Измерять сигнал в:", // 98 "Переключаться по AF:", // 99 - "Активные диапазоны:", // 100 - "Активные диапазоны:", // 101 + "Активные диапазоны FM:", // 100 + "Активные диапазоны AM:", // 101 " ДВ", // 102 " СВ", // 103 " КВ", // 104 @@ -3380,18 +3390,18 @@ static const char* const myLanguage[18][285] PROGMEM = { "Настройки FM DX сканера", // 213 "Прервано! Стартовый канал\nпомечен для пропуска.", // 214 "Сортировка AF-частот", // 215 - "Логика работы с \nканалами памяти", // 216 + "Логика работы с\nканалами памяти", // 216 "Кроме", // 217 "Только", // 218 - "Автоматическая отмена \nсканирования", // 219 + "Автоматическая отмена\nсканирования", // 219 "При корректном PI", // 220 "При наличии сигнала", // 221 "Отключать аудио\nпри сканировании", // 222 "Эфир", // 223 - "5 сек. зажатия кнопки диапазона", // 224 - "Приёмник выключен", // 225 - "Экран выключен", // 226 - "Выключено", // 227 + "5 сек. нажатие Band", // 224 + "Отключить тюнер", // 225 + "Отключить экран", // 226 + "Выключить всё", // 227 "00 Не определено", // 228 "01 Новости", // 229 "02 Аналитика", // 230 @@ -3402,15 +3412,15 @@ static const char* const myLanguage[18][285] PROGMEM = { "07 Культура", // 235 "08 Наука", // 236 "09 Разное", // 237 - "10 Поп", // 238 - "11 Рок", // 239 + "10 Поп М", // 238 + "11 Рок М", // 239 "12 Лёгкая музыка", // 240 "13 Лёгкая классика", // 241 "14 Классика", // 242 "15 Другая музыка", // 243 "16 Погода", // 244 "17 Финансы", // 245 - "18 Детские программы", // 246 + "18 Детские прогр", // 246 "19 Общество", // 247 "20 Религия", // 248 "21 Открытая линия", // 249 @@ -3418,11 +3428,11 @@ static const char* const myLanguage[18][285] PROGMEM = { "23 Досуг", // 251 "24 Джаз", // 252 "25 Музыка кантри", // 253 - "26 Национальная музыка", // 254 + "26 Национальная М", // 254 "27 Олдис", // 255 "28 Народная музыка", // 256 - "29 Документалистика", // 257 - "30 Внимание тест", // 258 + "29 Документальное", // 257 + "30 Тревога тест", // 258 "31 Тревога!", // 259 "Начальный", // 260 "Всегда", // 261 @@ -3448,7 +3458,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Время ожидания \nпри сигнале", // 281 "Нажмите на подсвеченный угол", // 282 "Калибровка тачскрина", // 283 - "Переключение инверсии экрана" // 284 + "Переключение инверсии экрана", // 284 + "Выбрать ширину полосы" // 285 }, { "Українська", // Ukranian @@ -3735,7 +3746,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Wait time on\nsignal only", // 281 "Press highlighted corner", // 282 "To calibrate touchscreen", // 283 - "Screen inversion toggles" // 284 + "Screen inversion toggles", // 284 + "Select Bandwidth" // 285 }, { "Italiano", // Italian @@ -4022,7 +4034,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Tempo di attesa\nsolo con segnale", // 281 "Premi l'angolo evidenziato", // 282 "Per calibrare lo schermo touch", // 283 - "Inversione colore schermo" // 284 + "Inversione colore schermo", // 284 + "Select Bandwidth" // 285 }, { "Simplified Chinese", // Simplified Chinese @@ -4309,7 +4322,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Wait time on\nsignal only", // 281 "Press highlighted corner", // 282 "To calibrate touchscreen", // 283 - "Screen inversion toggles" // 284 + "Screen inversion toggles", // 284 + "Select Bandwidth" // 285 }, { "Norsk", // Norwegian @@ -4575,28 +4589,29 @@ static const char* const myLanguage[18][285] PROGMEM = { "Innledende", // 260 "Alltid", // 261 "Vis klokka", // 262 - "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 + "Vis lang PS", // 263 + "Startfrekvens", // 264 + "Stoppfrekvens", // 265 + "Start minne kanal", // 266 + "Stopp minne kanal", // 267 + "Lagre kun med RDS", // 268 + "Start automatisk minne", // 269 + "Autominne", // 270 "Stationlist ID", // 271 - "Found", // 272 - "Abort! Out of memorychannels", // 273 - "Abort! User pressed button", // 274 - "Scan finished without errors", // 275 - "Clear memory channels", // 276 - "cleared", // 277 - "Prevent double PI", // 278 - "Range", // 279 + "Funnet", // 272 + "Avbrutt! Tom for minnekanaler", // 273 + "Avbrutt! Bruker trykket på knappen", // 274 + "Skanning fullført uten feil", // 275 + "Slett minnekanaler", // 276 + "ryddet", // 277 + "Forhindre dobbel PI", // 278 + "Spekter", // 279 "Full", // 280 - "Wait time on\nsignal only", // 281 - "Press highlighted corner", // 282 - "To calibrate touchscreen", // 283 - "Screen inversion toggles" // 284 + "Kun ventetid\npå signal", // 281 + "Trykk på det uthevede hjørnet", // 282 + "For å kalibrere berøringsskjerm", // 283 + "Veksle Skjerminversjon", // 284 + "Velg Båndbredde" // 285 }, { "Español", // Spanish @@ -4883,8 +4898,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Tiempo de espera\ncuando la señal", // 281 "Presione en el\nángulo resaltado", // 282 "Para calibrar\nla pantalla táctil", // 283 - "Cambio de reverso\nde la pantalla" // 284 - + "Cambio de reverso\nde la pantalla", // 284 + "Seleccionar ancho de banda" // 285 }, { "Português", // Portuguese @@ -5171,7 +5186,8 @@ static const char* const myLanguage[18][285] PROGMEM = { "Espera tempo apenas\nquando sinal", // 281 "Pressione o\ncanto inscrito", // 282 "Para calibração\nda tela de toque", // 283 - "Alternar a inversão da tela" // 284 + "Alternar a inversão da tela", // 284 + "Selecione largura de banda" // 285 } }; #endif diff --git a/src/touch.cpp b/src/touch.cpp index 545eb8a..4c269a8 100644 --- a/src/touch.cpp +++ b/src/touch.cpp @@ -9,15 +9,72 @@ void doTouchEvent(uint16_t x, uint16_t y) { if (scandxmode) { cancelDXScan(); } else { - if (!menu) { // All pages except menu + if (!menu && !BWtune) { // All pages except menu if (x > 50 && x < 90 && y > 0 && y < 30 && band < BAND_GAP) { // --------------------- doStereoToggle(); // Stereo toggle + return; } else if (x > 155 && x < 250 && y > 0 && y < 30) { - // + BuildBWSelector(); // Set bandwidth + BWtune = true; + return; } } - if (!menu && !advancedRDS && !seek && !afscreen) { // Normal radio mode + if (BWtune) { // BW menu + byte BWtemp = 255; + if (y > 35 && y < 65) { + if (x > 7 && x < 77) BWtemp = 1; + if (x > 87 && x < 157) BWtemp = 2; + if (x > 167 && x < 237) BWtemp = 3; + if (x > 247 && x < 317) BWtemp = 4; + } + if (band < BAND_GAP) { + if (y > 75 && y < 105) { + if (x > 7 && x < 77) BWtemp = 5; + if (x > 87 && x < 157) BWtemp = 6; + if (x > 167 && x < 237) BWtemp = 7; + if (x > 247 && x < 317) BWtemp = 8; + } + + if (y > 115 && y < 145) { + if (x > 7 && x < 77) BWtemp = 9; + if (x > 87 && x < 157) BWtemp = 10; + if (x > 167 && x < 237) BWtemp = 11; + if (x > 247 && x < 317) BWtemp = 12; + } + + if (y > 155 && y < 185) { + if (x > 7 && x < 77) BWtemp = 13; + if (x > 87 && x < 157) BWtemp = 14; + if (x > 167 && x < 237) BWtemp = 15; + if (x > 247 && x < 317) BWtemp = 16; + } + + if (y > 195 && y < 225) { + if (x > 7 && x < 77) BWtemp = 0; + } + } + + if (y > 195 && y < 225 && x > 247 && x < 317) { + leave = true; + BuildDisplay(); + SelectBand(); + } else { + if (band < BAND_GAP) { + if (BWset == 0) drawButton(BWButtonLabelsFM[16], 16, false); else drawButton(BWButtonLabelsFM[BWset - 1], BWset - 1, false); + BWset = BWtemp; + if (BWset == 0) drawButton(BWButtonLabelsFM[16], 16, true); else drawButton(BWButtonLabelsFM[BWset - 1], BWset - 1, true); + } else { + drawButton(BWButtonLabelsAM[BWset - 1], BWset - 1, false); + BWset = BWtemp; + drawButton(BWButtonLabelsAM[BWset - 1], BWset - 1, true); + } + doBW(); + } + return; + } + + if (!BWtune && !menu && !advancedRDS && !seek && !afscreen) { // Normal radio mode if (x > 0 && x < 320 && y > 180 && y < 240 && band < BAND_GAP) { // ----------------- leave = true; BuildAdvancedRDS(); // Switch to Advanced RDS View @@ -31,7 +88,7 @@ void doTouchEvent(uint16_t x, uint16_t y) { } } - if (!menu && advancedRDS && !seek && !afscreen) { // Advanced RDS mode + if (!BWtune && !menu && advancedRDS && !seek && !afscreen) { // Advanced RDS mode if (x > 0 && x < 320 && y > 180 && y < 240) { // ----------------- leave = true; BuildDisplay(); diff --git a/src/touch.h b/src/touch.h index f468ca6..2a16bae 100644 --- a/src/touch.h +++ b/src/touch.h @@ -10,20 +10,25 @@ extern TEF6686 radio; extern bool advancedRDS; extern bool afscreen; +extern bool BWtune; extern bool leave; extern bool menu; extern bool scandxmode; extern bool seek; extern byte band; +extern byte BWset; void doTouchEvent(uint16_t x, uint16_t y); extern void ScreensaverTimerReopen(); extern void BuildDisplay(); +extern void BuildBWSelector(); extern void SelectBand(); extern void BuildAdvancedRDS(); extern void doBandToggle(); extern void doTuneMode(); extern void doStereoToggle(); extern void cancelDXScan(); +extern void doBW(); +extern void drawButton(const char* text, byte button_number, bool active); #endif \ No newline at end of file