Only parse RDS on block change

This commit is contained in:
Sjef Verhoeven PE5PVB
2024-05-27 20:30:13 +02:00
parent 924eed4250
commit d7bf03cde8
2 changed files with 1153 additions and 1150 deletions

View File

@@ -377,19 +377,18 @@ bool TEF6686::getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel,
} }
void TEF6686::readRDS(byte showrdserrors) { void TEF6686::readRDS(byte showrdserrors) {
if (millis() - rdstimer > 87) {
rdstimer == millis();
uint8_t offset; uint8_t offset;
if (rds.filter || ps_process) { if (rds.filter) {
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);
} else { } else {
if (millis() >= rdstimer + 87) {
rdstimer += 87;
devTEF_Radio_Get_RDS_Data(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr); devTEF_Radio_Get_RDS_Data(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr);
if ((rds.rdsStat & (1 << 14))) { if ((rds.rdsStat & (1 << 14))) {
for (int i = 0; i < 22; i++) devTEF_Radio_Get_RDS_Data(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr); for (int i = 0; i < 22; i++) devTEF_Radio_Get_RDS_Data(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr);
} }
} }
}
if (bitRead(rds.rdsStat, 9)) { if (bitRead(rds.rdsStat, 9)) {
rds.hasRDS = true; // RDS decoder synchronized and data available rds.hasRDS = true; // RDS decoder synchronized and data available
@@ -407,8 +406,8 @@ void TEF6686::readRDS(byte showrdserrors) {
rdsCerrorThreshold = (((rds.rdsErr >> 10) & 0x03) > showrdserrors); rdsCerrorThreshold = (((rds.rdsErr >> 10) & 0x03) > showrdserrors);
rdsDerrorThreshold = (((rds.rdsErr >> 8) & 0x03) > showrdserrors); rdsDerrorThreshold = (((rds.rdsErr >> 8) & 0x03) > showrdserrors);
if (bitRead(rds.rdsStat, 9)) { // We have all data to decode... let's go... if (bitRead(rds.rdsStat, 9) && (rds.rdsA != previous_rdsA || rds.rdsB != previous_rdsB || rds.rdsC != previous_rdsC || rds.rdsD != previous_rdsD)) {
rds.rdsAerror = (((rds.rdsErr >> 14) & 0x03) > 1); rds.rdsAerror = (((rds.rdsErr >> 14) & 0x03) > 1); // We have all data to decode... let's go...
rds.rdsBerror = (((rds.rdsErr >> 12) & 0x03) > 1); rds.rdsBerror = (((rds.rdsErr >> 12) & 0x03) > 1);
rds.rdsCerror = (((rds.rdsErr >> 10) & 0x03) > 1); rds.rdsCerror = (((rds.rdsErr >> 10) & 0x03) > 1);
rds.rdsDerror = (((rds.rdsErr >> 8) & 0x03) > 1); rds.rdsDerror = (((rds.rdsErr >> 8) & 0x03) > 1);
@@ -1640,6 +1639,12 @@ void TEF6686::readRDS(byte showrdserrors) {
} }
break; break;
} }
previous_rdsA = rds.rdsA;
previous_rdsB = rds.rdsB;
previous_rdsC = rds.rdsC;
previous_rdsD = rds.rdsD;
}
} }
} }

View File

@@ -760,11 +760,9 @@ class TEF6686 {
bool initab; bool initab;
bool afinit; bool afinit;
bool errorfreepi; bool errorfreepi;
bool rdsAerrorThreshold; bool rdsAerrorThreshold, rdsBerrorThreshold, rdsCerrorThreshold, rdsDerrorThreshold;
bool rdsBerrorThreshold;
bool rdsCerrorThreshold;
bool rdsDerrorThreshold;
bool packet0, packet1, packet2, packet3, packet0long, packet1long, packet2long, packet3long; bool packet0, packet1, packet2, packet3, packet0long, packet1long, packet2long, packet3long;
uint16_t previous_rdsA, previous_rdsB, previous_rdsC, previous_rdsD;
bool afmethodBprobe; bool afmethodBprobe;
bool eRTcoding; bool eRTcoding;
uint16_t rdsCold; uint16_t rdsCold;