Fixed bug on RDS buffer

This commit is contained in:
Sjef Verhoeven PE5PVB
2024-05-27 21:30:43 +02:00
parent 62d0fce190
commit f22c7e77a8
+7 -8
View File
@@ -377,18 +377,19 @@ 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) { 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) {
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
@@ -617,7 +618,7 @@ void TEF6686::readRDS(byte showrdserrors) {
if (offset == 3) packet3 = true; if (offset == 3) packet3 = true;
} }
if (packet0 && packet1 && packet2 && packet3 && (ps_process || rds.fastps == 0)) { // Last chars are received if (packet0 && packet1 && packet2 && packet3 && (ps_process || (rds.fastps == 0 && rds.fastps != 2))) { // Last chars are received
if (strcmp(ps_buffer, ps_buffer2) == 0) { // When no difference between current and buffer, let's go... if (strcmp(ps_buffer, ps_buffer2) == 0) { // When no difference between current and buffer, let's go...
ps_process = true; ps_process = true;
RDScharConverter(ps_buffer2, PStext, sizeof(PStext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII RDScharConverter(ps_buffer2, PStext, sizeof(PStext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
@@ -630,7 +631,7 @@ void TEF6686::readRDS(byte showrdserrors) {
} }
} }
if (!ps_process && rds.fastps > 0) { // Let's get 2 runs of 8 PS characters fast and without refresh if ((!ps_process && rds.fastps > 0 && rds.fastps != 2) || rds.fastps == 2) { // Let's get 2 runs of 8 PS characters fast and without refresh
if (offset == 0) packet0 = true; if (offset == 0) packet0 = true;
if (offset == 1) packet1 = true; if (offset == 1) packet1 = true;
if (offset == 2) packet2 = true; if (offset == 2) packet2 = true;
@@ -638,7 +639,7 @@ void TEF6686::readRDS(byte showrdserrors) {
RDScharConverter(ps_buffer, PStext, sizeof(PStext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII RDScharConverter(ps_buffer, PStext, sizeof(PStext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(PStext); // Convert RDS characterset to ASCII String utf8String = convertToUTF8(PStext); // Convert RDS characterset to ASCII
rds.stationName = extractUTF8Substring(utf8String, 0, 8, true); rds.stationName = extractUTF8Substring(utf8String, 0, 8, true);
if (packet0 && packet1 && packet2 && packet3 && rds.fastps < 2) ps_process = true;// OK, we had one runs, now let's go the idle PS writing if (packet0 && packet1 && packet2 && packet3) ps_process = true; // OK, we had one runs, now let's go the idle PS writing
} }
if (offset == 0) rds.hasDynamicPTY = bitRead(rds.rdsB, 2) & 0x1F; // Dynamic PTY flag if (offset == 0) rds.hasDynamicPTY = bitRead(rds.rdsB, 2) & 0x1F; // Dynamic PTY flag
@@ -1643,8 +1644,6 @@ void TEF6686::readRDS(byte showrdserrors) {
previous_rdsB = rds.rdsB; previous_rdsB = rds.rdsB;
previous_rdsC = rds.rdsC; previous_rdsC = rds.rdsC;
previous_rdsD = rds.rdsD; previous_rdsD = rds.rdsD;
}
} }
} }