diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index 88dfe64..ab46dc4 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -50,7 +50,6 @@ bool artheadold; bool batterydetect = true; bool BWreset; bool change2; -bool cleanup; bool compressedold; bool direction; bool dropout; @@ -3160,10 +3159,7 @@ void readRds() { if (advancedRDS) tftPrint(-1, PIold, 244, 75, SecondaryColor, SecondaryColorSmooth, FONT28); else tftPrint(-1, PIold, 244, 187, SecondaryColor, SecondaryColorSmooth, FONT28); if (advancedRDS) tftPrint(-1, PSold, 38, 75, SecondaryColor, SecondaryColorSmooth, FONT28); else tftPrint(-1, PSold, 38, 187, SecondaryColor, SecondaryColorSmooth, FONT28); if (advancedRDS) tftPrint(-1, PTYold, 38, 109, SecondaryColor, SecondaryColorSmooth, FONT16); else tftPrint(-1, PTYold, 38, 163, SecondaryColor, SecondaryColorSmooth, FONT16); - if (!advancedRDS) { - sprite.fillSprite(BackgroundColor); - sprite.pushSprite(38, 220); - } else { + if (advancedRDS) { tft.fillCircle(86, 41, 5, SignificantColor); tft.fillCircle(124, 41, 5, SignificantColor); tft.fillCircle(162, 41, 5, SignificantColor); @@ -3324,7 +3320,7 @@ void ShowAdvancedRDS() { } String afstring; - 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 (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) tftPrint(-1, "AF", 50, 51, SecondaryColor, SecondaryColorSmooth, FONT16); else tftPrint(-1, "AF", 50, 51, GreyoutColor, BackgroundColor, FONT16); hasafold = radio.rds.hasAF; @@ -3362,7 +3358,7 @@ void ShowAdvancedRDS() { afstringold = afstring; 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) + "." + String((radio.eon[i].mappedfreq % 100) / 10)) : "") + (radio.eon[i].mappedfreq2 > 0 ? String(" / " + String(radio.eon[i].mappedfreq2 / 100) + "." + String((radio.eon[i].mappedfreq2 % 100) / 10)) : "") + (radio.eon[i].mappedfreq3 > 0 ? String(" / " + String(radio.eon[i].mappedfreq3 / 100) + "." + String((radio.eon[i].mappedfreq3 % 100) / 10)) : "") + (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)) : "") + (radio.eon[i].mappedfreq2 > 0 ? String(" / " + String(radio.eon[i].mappedfreq2 / 100) + "." + String((radio.eon[i].mappedfreq2 % 100) / 10)) : "") + (radio.eon[i].mappedfreq3 > 0 ? String(" / " + String(radio.eon[i].mappedfreq3 / 100) + "." + String((radio.eon[i].mappedfreq3 % 100) / 10)) : "") + (i == radio.eon_counter - 1 ? " " : " | "); else eonstring = myLanguage[language][88]; if (haseonold != radio.rds.hasEON) { if (radio.rds.hasEON) tftPrint(-1, "EON", 153, 51, SecondaryColor, SecondaryColorSmooth, FONT16); else tftPrint(-1, "EON", 153, 51, GreyoutColor, BackgroundColor, FONT16); haseonold = radio.rds.hasEON; @@ -3671,12 +3667,12 @@ void showPS() { } void showRadioText() { - if (radio.rds.hasRT && RDSstatus) { + if (radio.rds.hasRT && radio.rds.stationText.length() > 0) { if (advancedRDS && radio.rds.stationText.length() < 20) { xPos = 0; sprite2.fillSprite(BackgroundColor); sprite2.loadFont(FONT16); - sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + if (RDSstatus) sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false); else sprite2.setTextColor(SecondaryColor, SecondaryColorSmooth, false); sprite2.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 2); sprite2.pushSprite(35, 220); } else if (!advancedRDS && radio.rds.stationText.length() < 29) { @@ -3684,7 +3680,7 @@ void showRadioText() { xPos = 0; sprite.fillSprite(BackgroundColor); sprite.loadFont(FONT16); - sprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + if (RDSstatus) sprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); else sprite.setTextColor(SecondaryColor, SecondaryColorSmooth, false); sprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 2); sprite.pushSprite(38, 220); } @@ -3703,26 +3699,20 @@ void showRadioText() { if (xPos < -tft.textWidth(radio.rds.stationText + " " + radio.rds.stationText32) + (charWidth * 16)) xPos = 0; sprite2.fillSprite(BackgroundColor); sprite2.loadFont(FONT16); - sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + if (RDSstatus) sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false); else sprite2.setTextColor(SecondaryColor, SecondaryColorSmooth, false); sprite2.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 2); sprite2.pushSprite(35, 220); } else { if (xPos < -tft.textWidth(radio.rds.stationText + " " + radio.rds.stationText32) + (charWidth * 26)) xPos = 0; sprite.fillSprite(BackgroundColor); sprite.loadFont(FONT16); - sprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); + if (RDSstatus) sprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); else sprite.setTextColor(SecondaryColor, SecondaryColorSmooth, false); sprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 2); sprite.pushSprite(38, 220); } rtticker = millis(); - cleanup = true; } } - } else if (cleanup == true) { - sprite.fillSprite(BackgroundColor); - sprite2.fillSprite(BackgroundColor); - if (advancedRDS) sprite2.pushSprite(35, 220); else sprite.pushSprite(38, 220); - cleanup = false; } if (wifi) { @@ -3939,7 +3929,7 @@ void ShowAFEON() { if (radio.rds.hasEON) { if (haseonold == false) { - tftPrint(-1, myLanguage[language][88], 184, 54, BackgroundColor, BackgroundColor, FONT16); + tftPrint(-1, myLanguage[language][88], 184, 48, BackgroundColor, BackgroundColor, FONT16); tftPrint(-1, "PI:", 170, 32, ActiveColor, ActiveColorSmooth, FONT16); } haseonold = true; @@ -4164,7 +4154,7 @@ void BuildDisplay() { } } if (showsquelch) tftPrint(-1, "SQ:", 212, 145, ActiveColor, ActiveColorSmooth, FONT16); - tftPrint(-1, "S/N", 246, 163, ActiveColor, ActiveColorSmooth, FONT16); + tftPrint(1, "C/N", 275, 163, ActiveColor, ActiveColorSmooth, FONT16); tftPrint(-1, "dB", 300, 163, ActiveColor, ActiveColorSmooth, FONT16); if (region == 0) tftPrint(-1, "PI:", 216, 193, ActiveColor, ActiveColorSmooth, FONT16); if (region == 1) tftPrint(-1, "ID:", 216, 193, ActiveColor, ActiveColorSmooth, FONT16); @@ -4344,6 +4334,9 @@ void ShowFreq(int mode) { eonstringold = ""; afstringold = ""; rds_clockold = ""; + sprite.fillSprite(BackgroundColor); + sprite2.fillSprite(BackgroundColor); + if (advancedRDS) sprite2.pushSprite(35, 220); else sprite.pushSprite(38, 220); if (wifi) { Udp.beginPacket(remoteip, 9030); @@ -4361,12 +4354,12 @@ void ShowSignalLevel() { snrupdatetimer = millis(); if (!advancedRDS) { if (SNR > (SNRold + 1) || SNR < (SNRold - 1)) { - if (SNRold == 0) tftPrint(1, "--", 294, 163, BackgroundColor, BackgroundColor, FONT16); else tftPrint(1, String(SNRold), 294, 163, BackgroundColor, BackgroundColor, FONT16); + if (SNRold == 0) tftPrint(1, "--", 298, 163, BackgroundColor, BackgroundColor, FONT16); else tftPrint(1, String(SNRold), 298, 163, BackgroundColor, BackgroundColor, FONT16); if (tuned == true) { - if (SNR == 0) tftPrint(1, "--", 294, 163, PrimaryColor, PrimaryColorSmooth, FONT16); else tftPrint(1, String(SNR), 294, 163, PrimaryColor, PrimaryColorSmooth, FONT16); + if (SNR == 0) tftPrint(1, "--", 298, 163, PrimaryColor, PrimaryColorSmooth, FONT16); else tftPrint(1, String(SNR), 298, 163, PrimaryColor, PrimaryColorSmooth, FONT16); SNRold = SNR; } else { - tftPrint(1, "--", 294, 163, PrimaryColor, PrimaryColorSmooth, FONT16); + tftPrint(1, "--", 298, 163, PrimaryColor, PrimaryColorSmooth, FONT16); SNRold = 0; } } diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 5fa95a6..d1ae649 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -402,9 +402,12 @@ void TEF6686::readRDS(bool showrdserrors) if (rdsReady) { // We have all data to decode... let's go... //PI decoder - if (rds.correct) rds.correctPI = rds.rdsA; + if (rds.correct && afreset) { + rds.correctPI = rds.rdsA; + afreset = false; + } - if (rds.region != 1 && (!rds.rdsAerror || rds.pierrors)) { + if (rds.region != 1 && (rds.correct || rds.pierrors)) { if (rds.rdsA != piold) { piold = rds.rdsA; rds.picode[0] = (rds.rdsA >> 12) & 0xF; @@ -923,6 +926,7 @@ void TEF6686::clearRDS (bool fullsearchrds) ps_counter = 0; af_counter = 0; eon_counter = 0; + afreset = true; rds.MS = 0; } diff --git a/src/TEF6686.h b/src/TEF6686.h index f9b184c..fcdbaa1 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -260,6 +260,7 @@ class TEF6686 { char rt_buffer32[33]; bool useRTPlus = true; bool ABold; + bool afreset; char stationTextBuffer[65]; uint16_t rdsBprevious; uint16_t rdsCprevious; diff --git a/src/constants.h b/src/constants.h index 5977446..c28658d 100644 --- a/src/constants.h +++ b/src/constants.h @@ -162,8 +162,8 @@ #define EE_BYTE_SCREENSAVERSET 262 #define EE_INT16_AMLEVELOFFSET 263 #define EE_BYTE_UNIT 267 -#define EE_BYTE_AF 268 -#define EE_UINT16_FREQUENCY_OIRT 269 +#define EE_BYTE_AF 268 +#define EE_UINT16_FREQUENCY_OIRT 269 // End of EEPROM index defines static const char* const unitString[] = {"dBμV", "dBf", "dBm"}; @@ -255,10 +255,10 @@ static const uint8_t WiFi1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, - 0x00, 0x3c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x18, 0x00, 0x00 + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00 }; static const uint8_t WiFi2[] PROGMEM = { @@ -276,17 +276,17 @@ static const uint8_t WiFi2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, - 0x00, 0xff, 0x00, 0x00, - 0x01, 0xff, 0x80, 0x00, - 0x03, 0xff, 0x80, 0x00, - 0x03, 0xe7, 0x80, 0x00, - 0x01, 0x83, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x00, 0x00, - 0x00, 0x3c, 0x00, 0x00, - 0x00, 0x3c, 0x00, 0x00, - 0x00, 0x18, 0x00, 0x00 + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x7f, 0x00, 0x00, + 0x00, 0xff, 0x80, 0x00, + 0x00, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00 }; static const uint8_t WiFi3[] PROGMEM = { @@ -297,50 +297,49 @@ static const uint8_t WiFi3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, - 0x01, 0x80, 0xc0, 0x00, - 0x02, 0x00, 0x20, 0x00, - 0x04, 0x7e, 0x10, 0x00, - 0x09, 0x80, 0x88, 0x00, - 0x03, 0x00, 0x48, 0x00, - 0x0c, 0x00, 0x20, 0x00, - 0x04, 0x3e, 0x10, 0x00, - 0x00, 0xc1, 0x00, 0x00, - 0x01, 0x00, 0xc0, 0x00, - 0x01, 0x36, 0x40, 0x00, - 0x01, 0x43, 0x80, 0x00, - 0x00, 0x80, 0x80, 0x00, + 0x01, 0xff, 0xc0, 0x00, + 0x03, 0xff, 0xe0, 0x00, + 0x07, 0x80, 0xf0, 0x00, + 0x0e, 0x00, 0x38, 0x00, + 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x00, + 0x00, 0x7f, 0x00, 0x00, + 0x00, 0xff, 0x80, 0x00, + 0x00, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00 }; static const uint8_t WiFi4[] PROGMEM = { - 0x00, 0xff, 0x80, 0x00, - 0x03, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf8, 0x00, - 0x1f, 0xff, 0xfc, 0x00, - 0x3f, 0xc1, 0xfe, 0x00, - 0x7e, 0x00, 0x3f, 0x80, - 0xfc, 0x00, 0x0f, 0x80, - 0xf0, 0x7f, 0x07, 0x80, - 0x61, 0xff, 0xc3, 0x80, - 0x63, 0xff, 0xe1, 0x00, + 0x01, 0xff, 0xc0, 0x00, 0x07, 0xff, 0xf0, 0x00, - 0x0f, 0xc0, 0xf8, 0x00, - 0x0f, 0x00, 0x7c, 0x00, + 0x1f, 0xc1, 0xfc, 0x00, + 0x3e, 0x00, 0x3e, 0x00, + 0x78, 0x00, 0x0f, 0x00, + 0x70, 0x00, 0x07, 0x00, + 0x60, 0x00, 0x03, 0x00, + 0x00, 0x7f, 0x00, 0x00, + 0x01, 0xff, 0xc0, 0x00, + 0x03, 0xff, 0xe0, 0x00, + 0x07, 0x80, 0xf0, 0x00, 0x0e, 0x00, 0x38, 0x00, - 0x04, 0x3e, 0x08, 0x00, - 0x00, 0x7f, 0x80, 0x00, - 0x01, 0xff, 0xc0, 0x00, - 0x01, 0xff, 0xc0, 0x00, - 0x00, 0xe1, 0xc0, 0x00, - 0x00, 0x80, 0x80, 0x00, + 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x7f, 0x00, 0x00, + 0x00, 0xff, 0x80, 0x00, + 0x00, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00 }; \ No newline at end of file