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