Update BW selector. Need to finish AM

This commit is contained in:
Sjef Verhoeven PE5PVB
2025-01-03 17:28:57 +01:00
parent 39c67cef78
commit f123bae8ee
6 changed files with 117 additions and 54 deletions
+53 -31
View File
@@ -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() {
+1 -1
View File
@@ -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
+29 -11
View File
@@ -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) {
+5 -1
View File
@@ -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);
+19 -9
View File
@@ -2,6 +2,7 @@
#include "language.h"
#include "constants.h"
#include "config.h"
#include <EEPROM.h>
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;
+10 -1
View File
@@ -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