Another approche for RDS error detection
This commit is contained in:
+6
-7
@@ -372,10 +372,9 @@ bool TEF6686::getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel,
|
|||||||
return snr;
|
return snr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TEF6686::readRDS(byte showrdserrors)
|
void TEF6686::readRDS(byte showrdserrors) {
|
||||||
{
|
|
||||||
uint8_t offset;
|
uint8_t offset;
|
||||||
if (rds.filter) {
|
if (rds.filter || ps_process) {
|
||||||
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) {
|
if (millis() >= rdstimer + 87) {
|
||||||
@@ -405,10 +404,10 @@ void TEF6686::readRDS(byte 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)) { // We have all data to decode... let's go...
|
||||||
rds.rdsAerror = (((rds.rdsErr >> 14) & 0x03) > 2);
|
rds.rdsAerror = (((rds.rdsErr >> 14) & 0x03) > 1);
|
||||||
rds.rdsBerror = (((rds.rdsErr >> 12) & 0x03) > 2);
|
rds.rdsBerror = (((rds.rdsErr >> 12) & 0x03) > 1);
|
||||||
rds.rdsCerror = (((rds.rdsErr >> 10) & 0x03) > 2);
|
rds.rdsCerror = (((rds.rdsErr >> 10) & 0x03) > 1);
|
||||||
rds.rdsDerror = (((rds.rdsErr >> 8) & 0x03) > 2);
|
rds.rdsDerror = (((rds.rdsErr >> 8) & 0x03) > 1);
|
||||||
|
|
||||||
//PI decoder
|
//PI decoder
|
||||||
if (!rdsAerrorThreshold && afreset) {
|
if (!rdsAerrorThreshold && afreset) {
|
||||||
|
|||||||
+45
-45
@@ -410,64 +410,64 @@ void readRds() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bitRead(radio.rds.rdsStat, 9)) {
|
if (bitRead(radio.rds.rdsStat, 9)) {
|
||||||
if ((RDSstatus && RDSSPYUSB) || (RDSstatus && RDSSPYTCP)) {
|
if ((RDSstatus && RDSSPYUSB) || (RDSstatus && RDSSPYTCP)) {
|
||||||
RDSSPYRDS = "G:\r\n";
|
RDSSPYRDS = "G:\r\n";
|
||||||
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.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.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.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);
|
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";
|
RDSSPYRDS += "\r\n\r\n";
|
||||||
|
|
||||||
if (RDSSPYRDS != RDSSPYRDSold) {
|
if (RDSSPYRDS != RDSSPYRDSold) {
|
||||||
if (RDSSPYUSB) Serial.print(RDSSPYRDS); else RemoteClient.print(RDSSPYRDS);
|
if (RDSSPYUSB) Serial.print(RDSSPYRDS); else RemoteClient.print(RDSSPYRDS);
|
||||||
RDSSPYRDSold = RDSSPYRDS;
|
RDSSPYRDSold = RDSSPYRDS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ((RDSstatus && XDRGTKUSB) || (RDSstatus && XDRGTKTCP)) {
|
if ((RDSstatus && XDRGTKUSB) || (RDSstatus && XDRGTKTCP)) {
|
||||||
XDRGTKRDS = "R";
|
XDRGTKRDS = "R";
|
||||||
XDRGTKRDS += String(((radio.rds.rdsB >> 8) >> 4) & 0xF, HEX) + String((radio.rds.rdsB >> 8) & 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.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 >> 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.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 >> 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);
|
XDRGTKRDS += String(((radio.rds.rdsD) >> 4) & 0xF, HEX) + String((radio.rds.rdsD) & 0xF, HEX);
|
||||||
|
|
||||||
uint8_t erroutput = 0;
|
uint8_t erroutput = 0;
|
||||||
erroutput |= ((radio.rds.rdsErr >> 8) & B00110000) >> 4;
|
erroutput |= ((radio.rds.rdsErr >> 8) & B00110000) >> 4;
|
||||||
erroutput |= ((radio.rds.rdsErr >> 8) & B00001100);
|
erroutput |= ((radio.rds.rdsErr >> 8) & B00001100);
|
||||||
erroutput |= ((radio.rds.rdsErr >> 8) & B00000011) << 4;
|
erroutput |= ((radio.rds.rdsErr >> 8) & B00000011) << 4;
|
||||||
|
|
||||||
XDRGTKRDS += String((erroutput >> 4) & 0xF, HEX);
|
XDRGTKRDS += String((erroutput >> 4) & 0xF, HEX);
|
||||||
XDRGTKRDS += String(erroutput & 0xF, HEX);
|
XDRGTKRDS += String(erroutput & 0xF, HEX);
|
||||||
XDRGTKRDS += "\n";
|
XDRGTKRDS += "\n";
|
||||||
|
|
||||||
if (XDRGTKRDS != XDRGTKRDSold) {
|
if (XDRGTKRDS != XDRGTKRDSold) {
|
||||||
uint8_t piError = radio.rds.rdsErr >> 14;
|
uint8_t piError = radio.rds.rdsErr >> 14;
|
||||||
if (piError < 3) {
|
if (piError < 3) {
|
||||||
uint8_t piState = radio.rds.piBuffer.add(radio.rds.rdsA, piError);
|
uint8_t piState = radio.rds.piBuffer.add(radio.rds.rdsA, piError);
|
||||||
|
|
||||||
if (piState != RdsPiBuffer::STATE_INVALID) {
|
if (piState != RdsPiBuffer::STATE_INVALID) {
|
||||||
DataPrint ("P");
|
DataPrint ("P");
|
||||||
String PIcodeToSend;
|
String PIcodeToSend;
|
||||||
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 = 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();
|
PIcodeToSend.toUpperCase();
|
||||||
DataPrint (PIcodeToSend);
|
DataPrint (PIcodeToSend);
|
||||||
while (piState != 0) {
|
while (piState != 0) {
|
||||||
DataPrint("?");
|
DataPrint("?");
|
||||||
piState--;
|
piState--;
|
||||||
|
}
|
||||||
|
DataPrint ("\n");
|
||||||
}
|
}
|
||||||
DataPrint ("\n");
|
|
||||||
}
|
}
|
||||||
|
XDRGTKRDSold = XDRGTKRDS;
|
||||||
|
XDRGTKRDS.toUpperCase();
|
||||||
|
DataPrint(XDRGTKRDS);
|
||||||
}
|
}
|
||||||
XDRGTKRDSold = XDRGTKRDS;
|
|
||||||
XDRGTKRDS.toUpperCase();
|
|
||||||
DataPrint(XDRGTKRDS);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowErrors() {
|
void ShowErrors() {
|
||||||
|
|||||||
Reference in New Issue
Block a user