Fixed bug on RDS buffer
This commit is contained in:
+7
-8
@@ -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;
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user