diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index ca625cb..1f69bee 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -68,6 +68,7 @@ bool dropout; bool dynamicPTYold; bool edgebeep; bool externaltune; +bool findMemoryAF; bool flashing; bool fmsi; bool fullsearchrds; @@ -603,6 +604,7 @@ void setup() { #endif } + pinMode(BANDBUTTON, INPUT); pinMode(MODEBUTTON, INPUT); pinMode(BWBUTTON, INPUT); pinMode(ROTARY_BUTTON, INPUT); @@ -887,7 +889,51 @@ void loop() { if (!menu && !afscreen && !scandxmode) { if (af != 0 && dropout && millis() >= aftimer + 1000) { aftimer = millis(); - frequency = radio.TestAF(); + if (radio.af_counter == 0) { + if (findMemoryAF && radio.rds.correctPI != 0) { + radio.setMute(); + tft.drawBitmap(92, 4, Speaker, 26, 22, PrimaryColor); + SQ = true; + if (!screenmute) { + if (advancedRDS) { + tft.drawRoundRect(10, 30, 300, 170, 5, ActiveColor); + tft.fillRoundRect(12, 32, 296, 166, 5, BackgroundColor); + tftPrint(0, myLanguage[language][34], 160, 100, ActiveColor, ActiveColorSmooth, 28); + } else { + ShowFreq(1); + } + } + + for (int x = 8750; x <= 10800; x += 10) { + if (rotary != 0 || digitalRead(BANDBUTTON) == LOW || digitalRead(MODEBUTTON) == LOW || digitalRead(BWBUTTON) == LOW || digitalRead(ROTARY_BUTTON) == LOW) break; + radio.SetFreq(x); + unsigned long millisold = millis(); + while (millis() - millisold < 187) { + if (!screenmute && !advancedRDS) ShowModLevel(); + } + if (radio.rds.correctPI == radio.getBlockA()) { + frequency = x; + break; + } + } + + if (!screenmute) { + if (advancedRDS) { + leave = true; + BuildAdvancedRDS(); + } else { + ShowFreq(0); + } + } + + radio.setUnMute(); + SQ = false; + tft.drawBitmap(92, 4, Speaker, 26, 22, GreyoutColor); + } + findMemoryAF = false; + } else { + frequency = radio.TestAF(); + } if (freqold != frequency) { ShowFreq(0); dropout = true; @@ -895,13 +941,13 @@ void loop() { afmethodBold = true; radio.clearRDS(fullsearchrds); } - if (XDRGTKUSB || XDRGTKTCP) DataPrint("T" + String((frequency + ConverterSet * 100) * 10) + "\n"); - if (screenmute) { - freqold = frequency; - dropout = false; - } - store = true; } + if (XDRGTKUSB || XDRGTKTCP) DataPrint("T" + String((frequency + ConverterSet * 100) * 10) + "\n"); + if (screenmute) { + freqold = frequency; + dropout = false; + } + store = true; } if (band == BAND_FM && af != 0 && radio.rds.correctPI != 0) { @@ -2909,6 +2955,7 @@ void DoMemoryPosTune() { memtune = true; memreset = true; rdsflagreset = false; + findMemoryAF = true; ShowFreq(0); } @@ -3001,6 +3048,7 @@ void ShowFreq(int mode) { } else if (mode == 1) { FrequencySprite.fillSprite(BackgroundColor); FrequencySprite.pushSprite(46, 46); + tftPrint(0, myLanguage[language][34], 146, 58, ActiveColor, ActiveColorSmooth, 28); } FrequencySprite.unloadFont(); } diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 9a104bc..0949298 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -9,6 +9,13 @@ unsigned long rdstimer = 0; unsigned long bitStartTime = 0; bool lastBitState = false; +uint16_t TEF6686::getBlockA(void) { + uint16_t blockA, dummy; + devTEF_Radio_Get_RDS_Status(&dummy, &blockA, &dummy, &dummy, &dummy, &dummy); + return blockA; +} + + void TEF6686::TestAFEON() { uint16_t status; uint16_t dummy1; @@ -31,7 +38,7 @@ void TEF6686::TestAFEON() { } if (afoffset > -125 || afoffset < 125) { devTEF_Set_Cmd(TEF_FM, Cmd_Tune_To, 7, 4, af[x].frequency); - delay(200); + delay(187); devTEF_Radio_Get_RDS_Status(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr); if (rds.rdsStat & (1 << 9)) { @@ -97,7 +104,7 @@ uint16_t TEF6686::TestAF() { if (af_counter != 0 && af[highestIndex].afvalid && af[highestIndex].score > (currentlevel - currentusn - currentwam) && (af[highestIndex].score - (currentlevel - currentusn - currentwam)) >= 70) { devTEF_Set_Cmd(TEF_FM, Cmd_Tune_To, 7, 4, af[highestIndex].frequency); - delay(200); + delay(187); devTEF_Radio_Get_RDS_Status(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr); if (rds.rdsStat & (1 << 9)) { if ((afmethodB && rds.afreg ? (((rds.rdsA >> 8) & 0xF) > 2 && ((rds.correctPI >> 8) & 0xF) > 2 && ((rds.rdsA >> 12) & 0xF) == ((rds.correctPI >> 12) & 0xF) && (rds.rdsA & 0xFF) == (rds.correctPI & 0xFF)) || rds.rdsA == rds.correctPI : rds.rdsA == rds.correctPI)) { diff --git a/src/TEF6686.h b/src/TEF6686.h index fd6f8a7..6a2fd09 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -708,6 +708,7 @@ class TEF6686 { void setUnMute(); void setVolume(int8_t volume); void tone(uint16_t time, int16_t amplitude, uint16_t frequency); + uint16_t getBlockA(void); String trimTrailingSpaces(String str); uint8_t af_counter; uint8_t eon_counter;