diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index 490dd34..e55c26a 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -154,6 +154,7 @@ byte battery; byte batteryold; byte batteryoptions; byte BWset; +byte BWsettemp; byte BWsetAM; byte BWsetFM; byte BWsetRecall; @@ -2429,6 +2430,10 @@ void BWButtonPress() { while (digitalRead(BWBUTTON) == LOW && counter - counterold <= 1000) counter = millis(); if (counter - counterold < 1000) { + BuildBWSelector(); + freq_in = 0; + BWtune = true; + } else { if (band == BAND_FM || band == BAND_OIRT) { doStereoToggle(); } else { @@ -2436,14 +2441,11 @@ void BWButtonPress() { freq_in = 0; BWtune = true; } - } else { - BuildBWSelector(); - freq_in = 0; - BWtune = true; } - delay(100); } } + while (digitalRead(BWBUTTON) == LOW) delay(50); + delay(100); } void doStereoToggle() { @@ -2732,9 +2734,30 @@ void ButtonPress() { } else { if (menu) DoMenu(); if (BWtune) { - BuildDisplay(); - freq_in = 0; - SelectBand(); + if (BWsettemp == 18 || BWsettemp == 19) { + if (BWsettemp == 18) iMSset = !iMSset; + if (BWsettemp == 19) EQset = !EQset; + if (!iMSset && !EQset) iMSEQ = 0; + if (iMSset && EQset) iMSEQ = 2; + if (!iMSset && EQset) iMSEQ = 3; + if (iMSset && !EQset) iMSEQ = 4; + EEPROM.writeByte(EE_BYTE_IMSSET, iMSset); + EEPROM.writeByte(EE_BYTE_EQSET, EQset); + EEPROM.commit(); + updateiMS(); + updateEQ(); + if (XDRGTKUSB || XDRGTKTCP) DataPrint("G" + String(!EQset) + String(!iMSset) + "\n"); + showBWSelector(); + drawButton(BWButtonLabelsFM[BWsettemp - 1], BWsettemp - 1, (BWset == BWsettemp || (BWsettemp == 17 && BWset == 0) || (BWsettemp == 18 && !iMSset) || (BWsettemp == 19 && !EQset) ? true : false), true); + } else if (BWsettemp == 20) { + BuildDisplay(); + freq_in = 0; + SelectBand(); + } else { + doBW(); + showBWSelector(); + drawButton(BWButtonLabelsFM[BWsettemp - 1], BWsettemp - 1, (BWset == BWsettemp || (BWsettemp == 17 && BWset == 0) || (BWsettemp == 18 && !iMSset) || (BWsettemp == 19 && !EQset) ? true : false), true); + } } } } @@ -3620,13 +3643,13 @@ void updateBW() {//todo air void updateiMS() { if (band < BAND_GAP) { if (iMSset == 0) { - if (!screenmute && !advancedRDS && !afscreen) { + if (!screenmute && !advancedRDS && !afscreen && !BWtune) { tft.fillRoundRect(249, 57, 30, 18, 2, SecondaryColor); tftPrint(0, "iMS", 265, 59, BackgroundColor, SecondaryColor, 16); } radio.setiMS(1); } else { - if (!screenmute && !advancedRDS && !afscreen) { + if (!screenmute && !advancedRDS && !afscreen && !BWtune) { tft.fillRoundRect(249, 57, 30, 18, 2, GreyoutColor); tftPrint(0, "iMS", 265, 59, BackgroundColor, GreyoutColor, 16); } @@ -3638,13 +3661,13 @@ void updateiMS() { void updateEQ() { if (band < BAND_GAP) { if (EQset == 0) { - if (!screenmute && !advancedRDS && !afscreen) { + if (!screenmute && !advancedRDS && !afscreen && !BWtune) { tft.fillRoundRect(287, 57, 30, 18, 2, SecondaryColor); tftPrint(0, "EQ", 301, 59, BackgroundColor, SecondaryColor, 16); } radio.setEQ(1); } else { - if (!screenmute && !advancedRDS && !afscreen) { + if (!screenmute && !advancedRDS && !afscreen && !BWtune) { tft.fillRoundRect(287, 57, 30, 18, 2, GreyoutColor); tftPrint(0, "EQ", 301, 59, BackgroundColor, GreyoutColor, 16); } @@ -3700,6 +3723,8 @@ void updateSWMIBand() { } void doBW() { + if (BWtune) BWset = BWsettemp; + if (band < BAND_GAP) { if (BWset > 16) BWset = 0; @@ -3765,34 +3790,31 @@ void doBW() { void doBWtuneDown() { rotary = 0; 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); + drawButton(BWButtonLabelsFM[BWsettemp - 1], BWsettemp - 1, (BWset == BWsettemp || (BWsettemp == 17 && BWset == 0) || (BWsettemp == 18 && !iMSset) || (BWsettemp == 19 && !EQset) ? true : false), false); + BWsettemp--; + if (BWsettemp > 20) BWsettemp = 20; + drawButton(BWButtonLabelsFM[BWsettemp - 1], BWsettemp - 1, (BWset == BWsettemp || (BWsettemp == 17 && BWset == 0) || (BWsettemp == 18 && !iMSset) || (BWsettemp == 19 && !EQset) ? true : false), true); } else { - drawButton(BWButtonLabelsAM[BWset - 1], BWset - 1, false); - BWset--; - if (BWset == 0) BWset = 4; - drawButton(BWButtonLabelsAM[BWset - 1], BWset - 1, true); + drawButton(BWButtonLabelsAM[BWsettemp - 1], BWsettemp - 1, (BWset == BWsettemp ? true : false), false); + BWsettemp--; + if (BWsettemp == 0) BWsettemp = 4; + drawButton(BWButtonLabelsAM[BWsettemp - 1], BWsettemp - 1, (BWset == BWsettemp ? true : false), true); } - - doBW(); } void doBWtuneUp() { rotary = 0; 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); + drawButton(BWButtonLabelsFM[BWsettemp - 1], BWsettemp - 1, (BWset == BWsettemp || (BWsettemp == 17 && BWset == 0) || (BWsettemp == 18 && !iMSset) || (BWsettemp == 19 && !EQset) ? true : false), false); + BWsettemp++; + if (BWsettemp > 20) BWsettemp = 0; + drawButton(BWButtonLabelsFM[BWsettemp - 1], BWsettemp - 1, (BWset == BWsettemp || (BWsettemp == 17 && BWset == 0) || (BWsettemp == 18 && !iMSset) || (BWsettemp == 19 && !EQset) ? true : false), true); } else { - drawButton(BWButtonLabelsAM[BWset - 1], BWset - 1, false); - BWset++; - if (BWset > 4) BWset = 1; - drawButton(BWButtonLabelsAM[BWset - 1], BWset - 1, true); + drawButton(BWButtonLabelsAM[BWsettemp - 1], BWsettemp - 1, (BWset == BWsettemp ? true : false), false); + BWsettemp++; + if (BWsettemp > 4) BWsettemp = 1; + drawButton(BWButtonLabelsAM[BWsettemp - 1], BWsettemp - 1, (BWset == BWsettemp ? true : false), true); } - doBW(); } void doTuneMode() { diff --git a/src/constants.h b/src/constants.h index 5f8cab1..50bdd9c 100644 --- a/src/constants.h +++ b/src/constants.h @@ -355,7 +355,7 @@ 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* 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", "iMS", "EQ", "OK"}; static const char* BWButtonLabelsAM[] = {"3 kHz", "4 kHz", "6 kHz", "8 kHz"}; // Memory channel database diff --git a/src/gui.cpp b/src/gui.cpp index 28dd2f5..5cbffe4 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -2616,23 +2616,26 @@ void ShowOneButton(byte position, byte item, bool selected) { } void BuildBWSelector() { + BWsettemp = BWset; 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); + showBWSelector(); +} +void showBWSelector() { 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)); - if (hardwaremodel == PORTABLE_TOUCH_ILI9341) drawButton("OK", 19, false); + for (int x = 0; x < 17; x++) drawButton(BWButtonLabelsFM[x], x, (BWset == x + 1 || (BWset == 0 && x == 16) ? true : false), false); + drawButton(BWButtonLabelsFM[17], 17, (!iMSset ? true : false), false); + drawButton(BWButtonLabelsFM[18], 18, (!EQset ? true : false), false); + drawButton(BWButtonLabelsFM[19], 19, false, false); } else { for (int x = 0; x < 4; x++) { - drawButton(BWButtonLabelsAM[x], x, (BWset == x + 1 ? true : false)); + drawButton(BWButtonLabelsAM[x], x, (BWset == x + 1 ? true : false), false); } - if (hardwaremodel == PORTABLE_TOUCH_ILI9341) drawButton("OK", 19, false); + drawButton("OK", 19, false, false); } } @@ -5952,7 +5955,7 @@ String removeNewline(String inputString) { return outputString; } -void drawButton(const char* text, byte button_number, bool active) { +void drawButton(const char* text, byte button_number, bool active, bool selected) { const int buttonWidth = 70; const int buttonHeight = 30; const int cornerRadius = 6; @@ -5972,10 +5975,25 @@ void drawButton(const char* text, byte button_number, bool active) { 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); + // Draw the selection outline + if (selected) { + tft.drawRoundRect(x - 2, y - 2, buttonWidth + 4, buttonHeight + 4, cornerRadius + 2, ActiveColor); + } else { + tft.drawRoundRect(x - 2, y - 2, buttonWidth + 4, buttonHeight + 4, cornerRadius + 2, BackgroundColor); + } - tftPrint(0, text, x + buttonWidth / 2, y + buttonHeight / 4, (active ? FrameColor : PrimaryColor), (active ? InsignificantColor : PrimaryColorSmooth), 16); + // Draw the button fill + tft.fillRoundRect(x, y, buttonWidth, buttonHeight, cornerRadius, FrameColor); + + // Draw the small line at the bottom (narrower, centered, and 3px up) + int lineHeight = 4; // Height of the bottom line + int lineWidth = (buttonWidth / 2) - 6; // Half the button width, minus 6px + int lineX = x + (buttonWidth - lineWidth) / 2; // Center the line horizontally + int lineY = y + buttonHeight - lineHeight - 3; // Move the line 3px up + if (button_number != 19) tft.fillRect(lineX, lineY, lineWidth, lineHeight, (active ? InsignificantColor : GreyoutColor)); + + // Draw the button text + tftPrint(0, text, x + buttonWidth / 2, y + (buttonHeight / 4) - 2, PrimaryColor, PrimaryColorSmooth, 16); } String shortLine(String text) { diff --git a/src/gui.h b/src/gui.h index 1d6687d..3549f35 100644 --- a/src/gui.h +++ b/src/gui.h @@ -69,6 +69,7 @@ extern byte bandforbidden; extern byte batteryold; extern byte batteryoptions; extern byte BWset; +extern byte BWsettemp; extern byte ContrastSet; extern byte CurrentSkin; extern byte CurrentTheme; @@ -79,6 +80,8 @@ extern byte fmdefaultstepsize; extern byte fmnb; extern byte fmdeemphasis; extern byte freqfont; +extern byte EQset; +extern byte iMSset; extern byte amcodect; extern byte amcodectcount; extern byte amgain; @@ -215,10 +218,11 @@ void MenuDown(); void DoMenu(); void doTheme(); void Infoboxprint(const char* input); -void drawButton(const char* text, byte button_number, bool active); +void drawButton(const char* text, byte button_number, bool active, bool selected); String removeNewline(String inputString); String shortLine(String text); void showMenuOpenTouchButtons(); +void showBWSelector(); extern void ShowFreq(int mode); extern void ShowBandSelectionFM(bool notglanceview, bool normaldisplay); diff --git a/src/touch.cpp b/src/touch.cpp index 164200b..9e283e7 100644 --- a/src/touch.cpp +++ b/src/touch.cpp @@ -2,6 +2,7 @@ #include "language.h" #include "constants.h" #include "config.h" +#include void doTouchEvent(uint16_t x, uint16_t y) { if (seek) radio.setUnMute(); @@ -132,23 +133,32 @@ void doTouchEvent(uint16_t x, uint16_t y) { if (y > 195 && y < 225) { if (x > 7 && x < 77) BWtemp = 0; + if (x > 87 && x < 157) iMSset = !iMSset; + if (x > 167 && x < 237) EQset = !EQset; + if (x > 87 && x < 237) { + if (!iMSset && !EQset) iMSEQ = 0; + if (iMSset && EQset) iMSEQ = 2; + if (!iMSset && EQset) iMSEQ = 3; + if (iMSset && !EQset) iMSEQ = 4; + EEPROM.writeByte(EE_BYTE_IMSSET, iMSset); + EEPROM.writeByte(EE_BYTE_EQSET, EQset); + EEPROM.commit(); + updateiMS(); + updateEQ(); + if (XDRGTKUSB || XDRGTKTCP) DataPrint("G" + String(!EQset) + String(!iMSset) + "\n"); + } } } if (y > 195 && y < 225 && x > 247 && x < 317) { leave = true; + if (BWtemp != 255) BWset = BWtemp; + doBW(); 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); - } + if (BWtemp != 255) BWset = BWtemp; + showBWSelector(); doBW(); } return; diff --git a/src/touch.h b/src/touch.h index abab579..18be882 100644 --- a/src/touch.h +++ b/src/touch.h @@ -16,8 +16,13 @@ extern bool menu; extern bool menuopen; extern bool scandxmode; extern bool seek; +extern bool XDRGTKTCP; +extern bool XDRGTKUSB; extern byte band; extern byte BWset; +extern byte EQset; +extern byte iMSEQ; +extern byte iMSset; extern byte menuitem; extern byte items[10]; extern byte menupage; @@ -35,11 +40,15 @@ extern void doTuneMode(); extern void doStereoToggle(); extern void cancelDXScan(); extern void doBW(); -extern void drawButton(const char* text, byte button_number, bool active); +extern void drawButton(const char* text, byte button_number, bool active, bool selected); extern void KeyDown(); extern void KeyUp(); extern void ButtonPress(); extern void DoMenu(); extern void ModeButtonPress(); extern void toggleiMSEQ(); +extern void showBWSelector(); +extern void updateiMS(); +extern void updateEQ(); +extern void DataPrint(String string); #endif \ No newline at end of file