From b7c311564907fb876956288036b416ba4be750f2 Mon Sep 17 00:00:00 2001 From: Sjef Verhoeven PE5PVB Date: Wed, 18 Oct 2023 15:53:09 +0200 Subject: [PATCH] Added AF-REG --- TEF6686_ESP32.ino | 9 ++++++--- src/TEF6686.cpp | 2 +- src/TEF6686.h | 1 + src/gui.cpp | 46 ++++++++++++++++++++++++++++++++++++++-------- src/gui.h | 2 +- 5 files changed, 47 insertions(+), 13 deletions(-) diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index f2fc1ac..4442172 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -45,7 +45,6 @@ TFT_eSPI tft = TFT_eSPI(240, 320); #endif bool advancedRDS; -bool af; bool afmethodBold; bool afpage; bool afscreen; @@ -108,6 +107,7 @@ bool XDRGTKUSB; bool XDRMute; byte af_counterold; byte aid_counterold; +byte af; byte afpagenr; byte amnb; byte audiomode; @@ -716,12 +716,13 @@ void loop() { } if (!menu && !afscreen) { - if (af && dropout && millis() >= aftimer + 1000) { + if (af != 0 && dropout && millis() >= aftimer + 1000) { aftimer = millis(); frequency = radio.TestAF(); if (freqold != frequency) { ShowFreq(0); if (radio.afmethodB) { + if (af == 2) radio.rds.afreg = true; else radio.rds.afreg = false; afmethodBold = true; radio.clearRDS(fullsearchrds); } @@ -730,7 +731,7 @@ void loop() { } } - if (band == BAND_FM && af && radio.rds.correctPI != 0) { + if (band == BAND_FM && af != 0 && radio.rds.correctPI != 0) { if ((aftest && millis() >= aftimer + 3000) || ((USN > 250 || WAM > 250) && millis() >= aftimer + 1000)) { aftimer = millis(); aftest = false; @@ -738,6 +739,7 @@ void loop() { if (freqold != frequency) { ShowFreq(0); if (radio.afmethodB) { + if (af == 2) radio.rds.afreg = true; else radio.rds.afreg = false; afmethodBold = true; radio.clearRDS(fullsearchrds); } @@ -753,6 +755,7 @@ void loop() { if (freqold != frequency) { ShowFreq(0); if (radio.afmethodB) { + if (af == 2) radio.rds.afreg = true; else radio.rds.afreg = false; afmethodBold = true; radio.clearRDS(fullsearchrds); } diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 6ecbb10..e93fad2 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -97,7 +97,7 @@ uint16_t TEF6686::TestAF() { delay(200); devTEF_Radio_Get_RDS_Status(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr); if (rds.rdsStat & (1 << 9)) { - if (rds.rdsA == rds.correctPI && (((rds.rdsErr >> 14) & 0x03) == 0)) { + if ((afmethodB && rds.afreg && ((rds.rdsA >> 8) & 0x0F) == (rds.correctPI & 0x0F) || !afmethodB && rds.rdsA == rds.correctPI) && (((rds.rdsErr >> 14) & 0x03) == 0)) { currentfreq = af[highestIndex].frequency; for (byte y = 0; y < 50; y++) { af[y].frequency = 0; diff --git a/src/TEF6686.h b/src/TEF6686.h index 30b7d74..2c4419b 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -577,6 +577,7 @@ typedef struct _rds_ { bool sortaf; bool fastps; bool rtbuffer = true; + bool afreg; } rds_; typedef struct _af_ { diff --git a/src/gui.cpp b/src/gui.cpp index db75b4f..c55b27e 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -474,7 +474,13 @@ void BuildMenu() { if (radio.rds.underscore) tftPrint(1, myLanguage[language][42], 310, ITEM3 + 6, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(1, myLanguage[language][30], 310, ITEM3 + 6, PrimaryColor, PrimaryColorSmooth, 16); if (radio.rds.filter) tftPrint(1, myLanguage[language][42], 310, ITEM4 + 6, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(1, myLanguage[language][30], 310, ITEM4 + 6, PrimaryColor, PrimaryColorSmooth, 16); if (radio.rds.pierrors) tftPrint(1, myLanguage[language][42], 310, ITEM5 + 6, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(1, myLanguage[language][30], 310, ITEM5 + 6, PrimaryColor, PrimaryColorSmooth, 16); - if (af) tftPrint(1, myLanguage[language][42], 310, ITEM6 + 6, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(1, myLanguage[language][30], 310, ITEM6 + 6, PrimaryColor, PrimaryColorSmooth, 16); + + switch (af) { + case 0: tftPrint(1, myLanguage[language][30], 310, ITEM6 + 6, PrimaryColor, PrimaryColorSmooth, 16); break; + case 1: tftPrint(1, myLanguage[language][42], 310, ITEM6 + 6, PrimaryColor, PrimaryColorSmooth, 16); break; + case 2: tftPrint(1, "AF REG", 310, ITEM6 + 6, PrimaryColor, PrimaryColorSmooth, 16); break; + } + if (radio.rds.rtbuffer) tftPrint(1, myLanguage[language][42], 310, ITEM7 + 6, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(1, myLanguage[language][30], 310, ITEM7 + 6, PrimaryColor, PrimaryColorSmooth, 16); if (radio.rds.sortaf) tftPrint(1, myLanguage[language][42], 310, ITEM8 + 6, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(1, myLanguage[language][30], 310, ITEM8 + 6, PrimaryColor, PrimaryColorSmooth, 16); if (radio.rds.fastps) tftPrint(1, myLanguage[language][42], 310, ITEM9 + 6, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(1, myLanguage[language][30], 310, ITEM9 + 6, PrimaryColor, PrimaryColorSmooth, 16); @@ -1097,9 +1103,19 @@ void MenuUp() { break; case ITEM6: - if (af) tftPrint(0, myLanguage[language][42], 155, 118, BackgroundColor, BackgroundColor, 28); else tftPrint(0, myLanguage[language][30], 155, 118, BackgroundColor, BackgroundColor, 28); - if (af) af = false; else af = true; - if (af) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); + switch (af) { + case 0: tftPrint(0, myLanguage[language][30], 155, 118, BackgroundColor, BackgroundColor, 28); break; + case 1: tftPrint(0, myLanguage[language][42], 155, 118, BackgroundColor, BackgroundColor, 28); break; + case 2: tftPrint(0, "AF REG", 155, 118, BackgroundColor, BackgroundColor, 28); break; + } + af++; + if (af > 2) af = 0; + + switch (af) { + case 0: tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; + case 1: tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; + case 2: tftPrint(0, "AF REG", 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; + } break; case ITEM7: @@ -1625,9 +1641,19 @@ void MenuDown() { break; case ITEM6: - if (af) tftPrint(0, myLanguage[language][42], 155, 118, BackgroundColor, BackgroundColor, 28); else tftPrint(0, myLanguage[language][30], 155, 118, BackgroundColor, BackgroundColor, 28); - if (af) af = false; else af = true; - if (af) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); + switch (af) { + case 0: tftPrint(0, myLanguage[language][30], 155, 118, BackgroundColor, BackgroundColor, 28); break; + case 1: tftPrint(0, myLanguage[language][42], 155, 118, BackgroundColor, BackgroundColor, 28); break; + case 2: tftPrint(0, "AF REG", 155, 118, BackgroundColor, BackgroundColor, 28); break; + } + af--; + if (af > 2) af = 2; + + switch (af) { + case 0: tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; + case 1: tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; + case 2: tftPrint(0, "AF REG", 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; + } break; case ITEM7: @@ -2127,7 +2153,11 @@ void DoMenu() { case ITEM6: tftPrint(0, myLanguage[language][99], 155, 78, ActiveColor, ActiveColorSmooth, 28); - if (af) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); + switch (af) { + case 0: tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; + case 1: tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; + case 2: tftPrint(0, "AF REG", 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; + } break; case ITEM7: diff --git a/src/gui.h b/src/gui.h index 5eba5cc..8661e39 100644 --- a/src/gui.h +++ b/src/gui.h @@ -28,7 +28,6 @@ extern byte menuitem; extern byte items[8]; extern bool advancedRDS; -extern bool af; extern bool afmethodBold; extern bool afpage; extern bool afscreen; @@ -61,6 +60,7 @@ extern bool TAold; extern bool TPold; extern bool USBmode; extern bool wifi; +extern byte af; extern byte af_counterold; extern byte afpagenr; extern byte amnb;