Bugfix RDS decoding

This commit is contained in:
Sjef Verhoeven PE5PVB
2024-04-17 12:34:36 +02:00
parent a65a84be9d
commit a854966f19
3 changed files with 24 additions and 24 deletions

View File

@@ -378,8 +378,7 @@ void TEF6686::readRDS(byte showrdserrors)
if (rds.filter) {
devTEF_Radio_Get_RDS_Status(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr);
} else {
devTEF_Radio_Get_RDS_Status(&rds.rdsStat, &rds.rdsAF, &rds.rdsBF, &rds.rdsCF, &rds.rdsDF, &rds.rdsErrF);
if (millis() >= rdstimer + 87) {
if (millis() >= rdstimer + 87) {
rdstimer += 87;
devTEF_Radio_Get_RDS_Data(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr);
@@ -400,17 +399,16 @@ void TEF6686::readRDS(byte showrdserrors)
}
}
rds.rdsAerror = (((rds.rdsErrF >> 14) & 0x03) > 2);
rds.rdsBerror = (((rds.rdsErrF >> 12) & 0x03) > 2);
rds.rdsCerror = (((rds.rdsErrF >> 10) & 0x03) > 2);
rds.rdsDerror = (((rds.rdsErrF >> 8) & 0x03) > 2);
rdsAerrorThreshold = (((rds.rdsErr >> 14) & 0x03) > showrdserrors);
rdsBerrorThreshold = (((rds.rdsErr >> 12) & 0x03) > showrdserrors);
rdsCerrorThreshold = (((rds.rdsErr >> 10) & 0x03) > showrdserrors);
rdsDerrorThreshold = (((rds.rdsErr >> 8) & 0x03) > showrdserrors);
if (bitRead(rds.rdsStat, 9)) { // We have all data to decode... let's go...
rds.rdsAerror = (((rds.rdsErr >> 14) & 0x03) > 2);
rds.rdsBerror = (((rds.rdsErr >> 12) & 0x03) > 2);
rds.rdsCerror = (((rds.rdsErr >> 10) & 0x03) > 2);
rds.rdsDerror = (((rds.rdsErr >> 8) & 0x03) > 2);
//PI decoder
if (!rdsAerrorThreshold && afreset) {

View File

@@ -575,7 +575,7 @@ typedef struct _rds_ {
char stationState[3];
char dabafeid[5];
char dabafchannel[4];
uint16_t hour, minute, day, month, year, rdsA, rdsB, rdsC, rdsD, rdsErr, rdsAF, rdsBF, rdsCF, rdsDF, rdsErrF, rdsStat, correctPI, rdsplusTag1, rdsplusTag2;
uint16_t hour, minute, day, month, year, rdsA, rdsB, rdsC, rdsD, rdsErr, rdsStat, correctPI, rdsplusTag1, rdsplusTag2;
uint16_t aid[10];
uint32_t dabaffreq;
byte aid_counter;

View File

@@ -410,12 +410,13 @@ void readRds() {
}
}
if (bitRead(radio.rds.rdsStat, 9)) {
if ((RDSstatus && RDSSPYUSB) || (RDSstatus && RDSSPYTCP)) {
RDSSPYRDS = "G:\r\n";
if (radio.rds.rdsAerror) RDSSPYRDS += "----"; else RDSSPYRDS += String(((radio.rds.rdsAF >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsAF >> 8) & 0xF, HEX) + String(((radio.rds.rdsAF) >> 4) & 0xF, HEX) + String((radio.rds.rdsAF) & 0xF, HEX);
if (radio.rds.rdsBerror) RDSSPYRDS += "----"; else RDSSPYRDS += String(((radio.rds.rdsBF >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsBF >> 8) & 0xF, HEX) + String(((radio.rds.rdsBF) >> 4) & 0xF, HEX) + String((radio.rds.rdsBF) & 0xF, HEX);
if (radio.rds.rdsCerror) RDSSPYRDS += "----"; else RDSSPYRDS += String(((radio.rds.rdsCF >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsCF >> 8) & 0xF, HEX) + String(((radio.rds.rdsCF) >> 4) & 0xF, HEX) + String((radio.rds.rdsCF) & 0xF, HEX);
if (radio.rds.rdsDerror) RDSSPYRDS += "----"; else RDSSPYRDS += String(((radio.rds.rdsDF >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsDF >> 8) & 0xF, HEX) + String(((radio.rds.rdsDF) >> 4) & 0xF, HEX) + String((radio.rds.rdsDF) & 0xF, HEX);
if (radio.rds.rdsAerror) RDSSPYRDS += "----"; else RDSSPYRDS += String(((radio.rds.rdsA >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsA >> 8) & 0xF, HEX) + String(((radio.rds.rdsA) >> 4) & 0xF, HEX) + String((radio.rds.rdsA) & 0xF, HEX);
if (radio.rds.rdsBerror) RDSSPYRDS += "----"; else RDSSPYRDS += String(((radio.rds.rdsB >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsB >> 8) & 0xF, HEX) + String(((radio.rds.rdsB) >> 4) & 0xF, HEX) + String((radio.rds.rdsB) & 0xF, HEX);
if (radio.rds.rdsCerror) RDSSPYRDS += "----"; else RDSSPYRDS += String(((radio.rds.rdsC >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsC >> 8) & 0xF, HEX) + String(((radio.rds.rdsC) >> 4) & 0xF, HEX) + String((radio.rds.rdsC) & 0xF, HEX);
if (radio.rds.rdsDerror) RDSSPYRDS += "----"; else RDSSPYRDS += String(((radio.rds.rdsD >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsD >> 8) & 0xF, HEX) + String(((radio.rds.rdsD) >> 4) & 0xF, HEX) + String((radio.rds.rdsD) & 0xF, HEX);
RDSSPYRDS += "\r\n\r\n";
if (RDSSPYRDS != RDSSPYRDSold) {
@@ -426,31 +427,31 @@ void readRds() {
if ((RDSstatus && XDRGTKUSB) || (RDSstatus && XDRGTKTCP)) {
XDRGTKRDS = "R";
XDRGTKRDS += String(((radio.rds.rdsBF >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsBF >> 8) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsBF) >> 4) & 0xF, HEX) + String((radio.rds.rdsBF) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsCF >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsCF >> 8) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsCF) >> 4) & 0xF, HEX) + String((radio.rds.rdsCF) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsDF >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsDF >> 8) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsDF) >> 4) & 0xF, HEX) + String((radio.rds.rdsDF) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsB >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsB >> 8) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsB) >> 4) & 0xF, HEX) + String((radio.rds.rdsB) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsC >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsC >> 8) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsC) >> 4) & 0xF, HEX) + String((radio.rds.rdsC) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsD >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsD >> 8) & 0xF, HEX);
XDRGTKRDS += String(((radio.rds.rdsD) >> 4) & 0xF, HEX) + String((radio.rds.rdsD) & 0xF, HEX);
uint8_t erroutput = 0;
erroutput |= ((radio.rds.rdsErrF >> 8) & B00110000) >> 4;
erroutput |= ((radio.rds.rdsErrF >> 8) & B00001100);
erroutput |= ((radio.rds.rdsErrF >> 8) & B00000011) << 4;
erroutput |= ((radio.rds.rdsErr >> 8) & B00110000) >> 4;
erroutput |= ((radio.rds.rdsErr >> 8) & B00001100);
erroutput |= ((radio.rds.rdsErr >> 8) & B00000011) << 4;
XDRGTKRDS += String((erroutput >> 4) & 0xF, HEX);
XDRGTKRDS += String(erroutput & 0xF, HEX);
XDRGTKRDS += "\n";
if (XDRGTKRDS != XDRGTKRDSold) {
uint8_t piError = radio.rds.rdsErrF >> 14;
uint8_t piError = radio.rds.rdsErr >> 14;
if (piError < 3) {
uint8_t piState = radio.rds.piBuffer.add(radio.rds.rdsAF, piError);
uint8_t piState = radio.rds.piBuffer.add(radio.rds.rdsA, piError);
if (piState != RdsPiBuffer::STATE_INVALID) {
DataPrint ("P");
String PIcodeToSend;
PIcodeToSend = String(((radio.rds.rdsAF >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsAF >> 8) & 0xF, HEX) + String(((radio.rds.rdsAF) >> 4) & 0xF, HEX) + String((radio.rds.rdsAF) & 0xF, HEX);
PIcodeToSend = String(((radio.rds.rdsA >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsA >> 8) & 0xF, HEX) + String(((radio.rds.rdsA) >> 4) & 0xF, HEX) + String((radio.rds.rdsA) & 0xF, HEX);
PIcodeToSend.toUpperCase();
DataPrint (PIcodeToSend);
while (piState != 0) {
@@ -466,6 +467,7 @@ void readRds() {
}
}
}
}
}
void ShowErrors() {