diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index 28b03ae..f139ef0 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -762,13 +762,13 @@ void GetData() { if (afscreen) ShowAFEON(); if (!afscreen) { - showPI(); showPTY(); - showPS(); doAF(); showECC(); showRadioText(); } + showPI(); + showPS(); } ShowRSSI(); ShowBattery(); @@ -951,7 +951,7 @@ void BANDBUTTONPress() { } if (band == BAND_FM) { - if (advancedRDS) BuildAFScreen(); else BuildAdvancedRDS(); + if (advancedRDS && !seek) BuildAFScreen(); else BuildAdvancedRDS(); } } while (digitalRead(BANDBUTTON) == LOW) delay(50); @@ -1416,17 +1416,17 @@ void doStereoToggle() { tft.drawCircle(81, 15, 9, BackgroundColor); tft.drawCircle(91, 15, 10, BackgroundColor); tft.drawCircle(91, 15, 9, BackgroundColor); - tft.drawCircle(86, 15, 10, PrimaryColor); - tft.drawCircle(86, 15, 9, PrimaryColor); + tft.drawCircle(86, 15, 10, SecondaryColor); + tft.drawCircle(86, 15, 9, SecondaryColor); } - radio.setMono(2); + radio.setMono(true); StereoToggle = false; } else { if (screenmute == false) { tft.drawCircle(86, 15, 10, BackgroundColor); tft.drawCircle(86, 15, 9, BackgroundColor); } - radio.setMono(0); + radio.setMono(false); Stereostatusold = false; StereoToggle = true; } @@ -3072,13 +3072,13 @@ void ShowAdvancedRDS() { } String afstring; - if (radio.rds.hasAF) for (byte i = 0; i < radio.af_counter; i++) afstring += String(radio.af[i].frequency / 100) + "." + (radio.af[i].frequency % 100 < 10 ? "0" : "") + String(radio.af[i].frequency % 100) + (radio.af[i].filler ? "(f)" : "") + (i == radio.af_counter - 1 ? " " : " | "); else afstring = myLanguage[language][87]; + if (radio.rds.hasAF) for (byte i = 0; i < radio.af_counter; i++) afstring += String(radio.af[i].frequency / 100) + "." + String((radio.af[i].frequency % 100) / 10) + (radio.af[i].filler ? "(f)" : "") + (i == radio.af_counter - 1 ? " " : " | "); else afstring = myLanguage[language][87]; if (hasafold != radio.rds.hasAF) { if (radio.rds.hasAF) tft.setTextColor(SecondaryColor); else tft.setTextColor(GreyoutColor); tft.drawString("AF", 42, 45, GFXFF); hasafold = radio.rds.hasAF; } - if (millis() - afticker >= 350) { + if (millis() - afticker >= 500) { xPos2 -= charWidth; if (xPos2 < -tft.textWidth(afstring) + (charWidth * 14)) xPos2 = 6; sprite2.setFreeFont(FONT7); @@ -3091,13 +3091,13 @@ void ShowAdvancedRDS() { } String eonstring; - if (radio.rds.hasEON) for (byte i = 0; i < radio.eon_counter; i++) eonstring += String(radio.eon[i].picode) + (radio.eon[i].ps.length() > 0 ? String(": " + String(radio.eon[i].ps)) : "") + (radio.eon[i].mappedfreq > 0 ? String(" " + String(radio.eon[i].mappedfreq / 100) + "." + (radio.eon[i].mappedfreq % 100 < 10 ? "0" : "") + String(radio.eon[i].mappedfreq % 100)) : "") + (i == radio.eon_counter - 1 ? " " : " | "); else eonstring = myLanguage[language][88]; + if (radio.rds.hasEON) for (byte i = 0; i < radio.eon_counter; i++) eonstring += String(radio.eon[i].picode) + (radio.eon[i].ps.length() > 0 ? String(": " + String(radio.eon[i].ps)) : "") + (radio.eon[i].mappedfreq > 0 ? String(" " + String(radio.eon[i].mappedfreq / 100) + "." + String((radio.eon[i].mappedfreq % 100) / 10)) : "") + (i == radio.eon_counter - 1 ? " " : " | "); else eonstring = myLanguage[language][88]; if (haseonold != radio.rds.hasEON) { if (radio.rds.hasEON) tft.setTextColor(SecondaryColor); else tft.setTextColor(GreyoutColor); tft.drawString("EON", 148, 45, GFXFF); haseonold = radio.rds.hasEON; } - if (millis() - eonticker >= 350) { + if (millis() - eonticker >= 500) { xPos3 -= charWidth; if (xPos3 < -tft.textWidth(eonstring) + (charWidth * 14)) xPos3 = 6; sprite2.setFreeFont(FONT7); @@ -3333,6 +3333,11 @@ void showPI() { tft.drawString(PIold, 244, 66, GFXFF); tft.setTextColor(PrimaryColor); tft.drawString(radio.rds.picode, 244, 66, GFXFF); + } else if (afscreen) { + tft.setFreeFont(FONT7); + tft.drawString(PIold, 43, 30, GFXFF); + tft.setTextColor(SecondaryColor); + tft.drawString(radio.rds.picode, 43, 30, GFXFF); } else { tft.drawString(PIold, 244, 183, GFXFF); tft.setTextColor(PrimaryColor); @@ -3374,10 +3379,17 @@ void showPS() { tft.drawString(PSold, 38, 66, GFXFF); tft.setTextColor(PrimaryColor); tft.drawString(radio.rds.stationName, 38, 66, GFXFF); + } else if (afscreen) { + tft.setFreeFont(FONT7); + tft.drawString(PSold, 76, 30, GFXFF); + tft.setTextColor(SecondaryColor); + tft.drawString(radio.rds.stationName, 76, 30, GFXFF); } else { tft.drawString(PSold, 38, 183, GFXFF); tft.setTextColor(PrimaryColor); tft.drawString(radio.rds.stationName, 38, 183, GFXFF); + tft.drawLine(0, 187, 320, 187, FrameColor); + tft.drawLine(0, 218, 320, 218, FrameColor); } PSold = radio.rds.stationName; if (wifi) { @@ -3394,8 +3406,6 @@ void showPS() { Udp.endPacket(); } programServicePrevious = radio.rds.stationName; - if (!advancedRDS) tft.drawLine(0, 187, 320, 187, FrameColor); - if (!advancedRDS) tft.drawLine(0, 218, 320, 218, FrameColor); } } @@ -3582,55 +3592,55 @@ void MuteScreen(int setting) { void ShowAFEON() { tft.setTextColor(PrimaryColor); + if (radio.rds.hasAF) { - if (af_counterold != radio.af_counter) { - byte af_counter_show; - if (af_counter_show < 21) { - af_counter_show++; - tft.fillRect(2, 48, 150, 170, BackgroundColor); - for (byte i = 0; i < radio.af_counter; i++) tft.drawRightString((radio.af[i].filler ? "(f) " : "") + String(radio.af[i].frequency / 100) + "." + (radio.af[i].frequency % 100 < 10 ? "0" : "") + String(radio.af[i].frequency % 100), (i > 10 ? 145 : 60), 48 + (15 * i) - (i > 10 ? 165 : 0), GFXFF); - if (radio.af_counter > 10) tft.drawLine(75, 48, 75, 218, FrameColor); - } - af_counterold = radio.af_counter; + if (hasafold == false) { + tft.setTextColor(BackgroundColor); + tft.drawString(myLanguage[language][87], 6, 48, GFXFF); + tft.setTextColor(PrimaryColor); + hasafold = true; } - } else { - tft.drawString(myLanguage[language][87], 6, 45, GFXFF); + if (af_counterold != radio.af_counter) { + tft.fillRect(2, 53, 177, 165, BackgroundColor); + for (byte i = 0; i < radio.af_counter; i++) { + tft.drawRightString((radio.af[i].filler ? "(f) " : "") + String(radio.af[i].frequency / 100) + "." + String((radio.af[i].frequency % 100) / 10), 56 + (i > 10 ? 60 : 0) + (i > 21 ? 60 : 0), 48 + (15 * i) - (i > 10 ? 165 : 0) - (i > 21 ? 165 : 0), GFXFF); + if (i == 32) i = 254; + } + if (radio.af_counter > 11 ) tft.drawLine(65, 54, 65, 210, SecondaryColor); + if (radio.af_counter > 22 ) tft.drawLine(125, 54, 125, 210, SecondaryColor); + } + af_counterold = radio.af_counter; } if (radio.rds.hasEON) { if (haseonold == false) { tft.setTextColor(BackgroundColor); - tft.drawString(myLanguage[language][88], 164, 45, GFXFF); + tft.drawString(myLanguage[language][88], 184, 48, GFXFF); tft.setTextColor(PrimaryColor); } haseonold = true; for (byte i = 0; i < radio.eon_counter; i++) { - byte eon_counter_show; - if (eon_counter_show < 11) { - eon_counter_show++; - tft.drawRightString(String(radio.eon[i].picode), 200, 48 + (15 * i), GFXFF); - if (radio.eon[i].ps.length() > 0) { - tft.setTextColor(ActiveColor); - tft.drawString("PS :", 210, 30, GFXFF); - tft.setTextColor(PrimaryColor); - if (radio.eon[i].ps != eonpsold[i]) { - tft.setTextColor(BackgroundColor); - tft.drawString(String(eonpsold[i]), 210, 48 + (15 * i), GFXFF); - eonpsold[i] = radio.eon[i].ps; - } - tft.drawString(String(radio.eon[i].ps), 210, 48 + (15 * i), GFXFF); - } - - if (radio.eon[i].mappedfreq > 0) { - tft.setTextColor(ActiveColor); - tft.drawRightString("FREQ:", 310, 30, GFXFF); - tft.setTextColor(PrimaryColor); - tft.drawRightString(String(radio.eon[i].mappedfreq / 100) + "." + (radio.eon[i].mappedfreq % 100 < 10 ? "0" : "") + String(radio.eon[i].mappedfreq % 100), 310, 48 + (15 * i), GFXFF); + tft.drawString(String(radio.eon[i].picode), 184, 48 + (15 * i), GFXFF); + if (radio.eon[i].ps.length() > 0) { + tft.setTextColor(ActiveColor); + tft.drawString("PS :", 218, 30, GFXFF); + tft.setTextColor(PrimaryColor); + if (radio.eon[i].ps != eonpsold[i]) { + tft.setTextColor(BackgroundColor); + tft.drawString(String(eonpsold[i]), 218, 48 + (15 * i), GFXFF); + eonpsold[i] = radio.eon[i].ps; } + tft.drawString(String(radio.eon[i].ps), 218, 48 + (15 * i), GFXFF); } + + if (radio.eon[i].mappedfreq > 0) { + tft.setTextColor(ActiveColor); + tft.drawRightString("FREQ:", 316, 30, GFXFF); + tft.setTextColor(PrimaryColor); + tft.drawRightString(String(radio.eon[i].mappedfreq / 100) + "." + String((radio.eon[i].mappedfreq % 100) / 10), 316, 48 + (15 * i), GFXFF); + } + if (i == 10) i = 254; } - } else { - tft.drawString(myLanguage[language][88], 164, 45, GFXFF); } } @@ -3643,23 +3653,34 @@ void BuildAFScreen() { tft.drawRect(0, 0, 320, 240, FrameColor); tft.drawLine(0, 30, 320, 30, FrameColor); tft.drawLine(0, 218, 320, 218, FrameColor); - tft.drawLine(160, 30, 160, 218, FrameColor); + tft.drawLine(180, 30, 180, 218, FrameColor); tft.setTextColor(ActiveColor); tft.setFreeFont(FONT14); tft.drawString("kHz", 225, -5, GFXFF); tft.setTextColor(ActiveColor); tft.setFreeFont(FONT7); - tft.drawRightString("AF : ", 60, 30, GFXFF); - tft.drawRightString("PI : ", 200, 30, GFXFF); + tft.drawString("AF : ", 4, 30, GFXFF); + tft.drawString("PI : ", 184, 30, GFXFF); + + tft.setTextColor(PrimaryColor); tft.drawCentreString(myLanguage[language][93], 160, 218, GFXFF); + tft.drawString(myLanguage[language][88], 184, 48, GFXFF); + tft.drawString(myLanguage[language][87], 6, 48, GFXFF); + + tft.drawRoundRect(40, 32, 133, 20, 5, ActiveColor); + RDSstatusold = false; + ShowFreq(0); Stereostatusold = false; haseonold = false; + hasafold = false; BWreset = true; SStatusold = 2000; rssiold = 2000; batteryold = 6; af_counterold = 254; + strcpy(radioIdPrevious, "0"); + programServicePrevious = "0"; for (byte i = 0; i < 11; i++) eonpsold[i] = ""; } } @@ -4031,6 +4052,13 @@ void ShowFreq(int mode) { tft.setTextColor(PrimaryColor); tft.drawRightString(String(freq / 100) + "." + (freq % 100 < 10 ? "0" : "") + String(freq % 100) + " MHz", 310, 30, GFXFF); freqold = freq; + } else if (afscreen) { + tft.setFreeFont(FONT7); + tft.setTextColor(BackgroundColor); + tft.drawRightString(String(freqold / 100) + "." + (freqold % 100 < 10 ? "0" : "") + String(freqold % 100), 170, 30, GFXFF); + tft.setTextColor(SecondaryColor); + tft.drawRightString(String(freq / 100) + "." + (freq % 100 < 10 ? "0" : "") + String(freq % 100), 170, 30, GFXFF); + freqold = freq; } else { String count = String(freq / 100, DEC); if (setupmode == false && count.length() != freqoldcount || mode != 0) { diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 742155f..37ea1a8 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -90,7 +90,7 @@ bool TEF6686::getStereoStatus() { } void TEF6686::setMono(bool mono) { - devTEF_Radio_Set_Stereo_Min(mono); + devTEF_Radio_Set_Stereo_Min(mono); } void TEF6686::setVolume(int8_t volume) { @@ -241,10 +241,10 @@ void TEF6686::readRDS(bool showrdserrors) rds.correct = false; rds.hasRDS = false; - if (((rds.rdsErr >> 14) & 0x02) > 1) rds.rdsAerror = true; else rds.rdsAerror = false; // Any errors in Block A? - if (((rds.rdsErr >> 12) & 0x02) > 1) rds.rdsBerror = true; else rds.rdsBerror = false; // Any errors in Block B? - if (((rds.rdsErr >> 10) & 0x02) > 1) rds.rdsCerror = true; else rds.rdsCerror = false; // Any errors in Block C? - if (((rds.rdsErr >> 8) & 0x02) > 1) rds.rdsDerror = true; else rds.rdsDerror = false; // Any errors in Block D? + if (((rds.rdsErr >> 14) & 0x02) > 0) rds.rdsAerror = true; else rds.rdsAerror = false; // Any errors in Block A? + if (((rds.rdsErr >> 12) & 0x02) > 0) rds.rdsBerror = true; else rds.rdsBerror = false; // Any errors in Block B? + if (((rds.rdsErr >> 10) & 0x02) > 0) rds.rdsCerror = true; else rds.rdsCerror = false; // Any errors in Block C? + if (((rds.rdsErr >> 8) & 0x02) > 0) rds.rdsDerror = true; else rds.rdsDerror = false; // Any errors in Block D? if (!rds.rdsAerror && !rds.rdsBerror && !rds.rdsCerror && !rds.rdsDerror) rds.correct = true; // Any errors in all blocks? if ((rdsStat & (1 << 9))) rds.hasRDS = true; // RDS decoder synchronized and data available if ((rdsStat & (1 << 15))) rdsReady = true; diff --git a/src/Tuner_Drv_Lithio.cpp b/src/Tuner_Drv_Lithio.cpp index 2d7b275..471786d 100644 --- a/src/Tuner_Drv_Lithio.cpp +++ b/src/Tuner_Drv_Lithio.cpp @@ -129,7 +129,7 @@ bool devTEF_Radio_Set_ChannelEqualizer(bool eq) { } bool devTEF_Radio_Set_Stereo_Min(bool mode) { - return devTEF_Set_Cmd(TEF_FM, Cmd_Set_Stereo_Min, 7, mode); + if (mode) return devTEF_Set_Cmd(TEF_FM, Cmd_Set_Stereo_Min, 7, 2); else return devTEF_Set_Cmd(TEF_FM, Cmd_Set_Stereo_Min, 7, 0); } bool devTEF_Radio_Set_RFAGC(uint16_t agc) {