Added AF search on memory channels

This commit is contained in:
Sjef Verhoeven PE5PVB
2024-06-22 19:37:50 +02:00
parent 58ea8ec3ee
commit 0270321b54
3 changed files with 65 additions and 9 deletions
+55 -7
View File
@@ -68,6 +68,7 @@ bool dropout;
bool dynamicPTYold; bool dynamicPTYold;
bool edgebeep; bool edgebeep;
bool externaltune; bool externaltune;
bool findMemoryAF;
bool flashing; bool flashing;
bool fmsi; bool fmsi;
bool fullsearchrds; bool fullsearchrds;
@@ -603,6 +604,7 @@ void setup() {
#endif #endif
} }
pinMode(BANDBUTTON, INPUT);
pinMode(MODEBUTTON, INPUT); pinMode(MODEBUTTON, INPUT);
pinMode(BWBUTTON, INPUT); pinMode(BWBUTTON, INPUT);
pinMode(ROTARY_BUTTON, INPUT); pinMode(ROTARY_BUTTON, INPUT);
@@ -887,7 +889,51 @@ void loop() {
if (!menu && !afscreen && !scandxmode) { if (!menu && !afscreen && !scandxmode) {
if (af != 0 && dropout && millis() >= aftimer + 1000) { if (af != 0 && dropout && millis() >= aftimer + 1000) {
aftimer = millis(); 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) { if (freqold != frequency) {
ShowFreq(0); ShowFreq(0);
dropout = true; dropout = true;
@@ -895,13 +941,13 @@ void loop() {
afmethodBold = true; afmethodBold = true;
radio.clearRDS(fullsearchrds); 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) { if (band == BAND_FM && af != 0 && radio.rds.correctPI != 0) {
@@ -2909,6 +2955,7 @@ void DoMemoryPosTune() {
memtune = true; memtune = true;
memreset = true; memreset = true;
rdsflagreset = false; rdsflagreset = false;
findMemoryAF = true;
ShowFreq(0); ShowFreq(0);
} }
@@ -3001,6 +3048,7 @@ void ShowFreq(int mode) {
} else if (mode == 1) { } else if (mode == 1) {
FrequencySprite.fillSprite(BackgroundColor); FrequencySprite.fillSprite(BackgroundColor);
FrequencySprite.pushSprite(46, 46); FrequencySprite.pushSprite(46, 46);
tftPrint(0, myLanguage[language][34], 146, 58, ActiveColor, ActiveColorSmooth, 28);
} }
FrequencySprite.unloadFont(); FrequencySprite.unloadFont();
} }
+9 -2
View File
@@ -9,6 +9,13 @@ unsigned long rdstimer = 0;
unsigned long bitStartTime = 0; unsigned long bitStartTime = 0;
bool lastBitState = false; 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() { void TEF6686::TestAFEON() {
uint16_t status; uint16_t status;
uint16_t dummy1; uint16_t dummy1;
@@ -31,7 +38,7 @@ void TEF6686::TestAFEON() {
} }
if (afoffset > -125 || afoffset < 125) { if (afoffset > -125 || afoffset < 125) {
devTEF_Set_Cmd(TEF_FM, Cmd_Tune_To, 7, 4, af[x].frequency); 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); devTEF_Radio_Get_RDS_Status(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr);
if (rds.rdsStat & (1 << 9)) { 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) { 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); 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); devTEF_Radio_Get_RDS_Status(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr);
if (rds.rdsStat & (1 << 9)) { 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)) { 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)) {
+1
View File
@@ -708,6 +708,7 @@ class TEF6686 {
void setUnMute(); void setUnMute();
void setVolume(int8_t volume); void setVolume(int8_t volume);
void tone(uint16_t time, int16_t amplitude, uint16_t frequency); void tone(uint16_t time, int16_t amplitude, uint16_t frequency);
uint16_t getBlockA(void);
String trimTrailingSpaces(String str); String trimTrailingSpaces(String str);
uint8_t af_counter; uint8_t af_counter;
uint8_t eon_counter; uint8_t eon_counter;