Merge branch 'main' into New_Model_DP_666

This commit is contained in:
Leon
2024-05-28 20:21:05 +08:00
6 changed files with 677 additions and 612 deletions

View File

@@ -378,7 +378,7 @@ bool TEF6686::getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel,
void TEF6686::readRDS(byte showrdserrors) {
uint8_t offset;
if (rds.filter || ps_process) {
if (rds.filter && ps_process) {
devTEF_Radio_Get_RDS_Status(&rds.rdsStat, &rds.rdsA, &rds.rdsB, &rds.rdsC, &rds.rdsD, &rds.rdsErr);
} else {
if (millis() >= rdstimer + 87) {
@@ -407,8 +407,8 @@ void TEF6686::readRDS(byte 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) > 1);
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); // We have all data to decode... let's go...
rds.rdsBerror = (((rds.rdsErr >> 12) & 0x03) > 1);
rds.rdsCerror = (((rds.rdsErr >> 10) & 0x03) > 1);
rds.rdsDerror = (((rds.rdsErr >> 8) & 0x03) > 1);
@@ -606,7 +606,7 @@ void TEF6686::readRDS(byte showrdserrors) {
ps_buffer[(offset * 2) + 1] = rds.rdsD & 0xFF; // Second character of segment
ps_buffer[8] = '\0'; // Endmarker
if (ps_process || !rds.fastps) {
if (ps_process || rds.fastps == 0) {
if (offset == 0) {
packet0 = true;
packet1 = false;
@@ -618,12 +618,12 @@ void TEF6686::readRDS(byte showrdserrors) {
if (offset == 3) packet3 = true;
}
if (packet0 && packet1 && packet2 && packet3 && (ps_process || !rds.fastps)) { // Last chars are received
if (strcmp(ps_buffer, ps_buffer2) == 0) { // When no difference between current and buffer, let's go...
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...
ps_process = true;
RDScharConverter(ps_buffer2, PStext, sizeof(PStext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(PStext); // Convert RDS characterset to ASCII
rds.stationName = extractUTF8Substring(utf8String, 0, 8, true); // Make sure PS does not exceed 8 characters
RDScharConverter(ps_buffer2, PStext, sizeof(PStext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(PStext); // Convert RDS characterset to ASCII
rds.stationName = extractUTF8Substring(utf8String, 0, 8, true); // Make sure PS does not exceed 8 characters
for (byte x = 0; x < 8; x++) {
ps_buffer[x] = '\0';
ps_buffer2[x] = '\0';
@@ -631,15 +631,15 @@ void TEF6686::readRDS(byte showrdserrors) {
}
}
if (!ps_process && rds.fastps) { // 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 == 1) packet1 = true;
if (offset == 2) packet2 = true;
if (offset == 3) packet3 = true;
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
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
rds.stationName = extractUTF8Substring(utf8String, 0, 8, true);
if (packet0 && packet1 && packet2 && packet3) 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
@@ -1372,6 +1372,7 @@ void TEF6686::readRDS(byte showrdserrors) {
RDScharConverter(ptyn_buffer, PTYNtext, sizeof(PTYNtext) / sizeof(wchar_t), false); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(PTYNtext); // Convert RDS characterset to ASCII
rds.PTYN = extractUTF8Substring(utf8String, 0, 8, false); // Make sure text is not longer than 8 chars
rds.hasPTYN = true;
}
}
} break;
@@ -1639,6 +1640,10 @@ void TEF6686::readRDS(byte showrdserrors) {
}
break;
}
previous_rdsA = rds.rdsA;
previous_rdsB = rds.rdsB;
previous_rdsC = rds.rdsC;
previous_rdsD = rds.rdsD;
}
}
@@ -1761,6 +1766,7 @@ void TEF6686::clearRDS (bool fullsearchrds) {
rds.hasCT = false;
rds.hasTMC = false;
rds.hasAID = false;
rds.hasPTYN = false;
rds.hasLongPS = false;
rds.hasRDSplus = false;
rds.hasDABAF = false;

View File

@@ -582,6 +582,7 @@ typedef struct _rds_ {
uint16_t aid[10];
uint32_t dabaffreq;
byte aid_counter;
byte fastps;
int8_t offset;
unsigned int ECC;
unsigned int LIC;
@@ -611,6 +612,7 @@ typedef struct _rds_ {
bool hasTMC;
bool hasAF;
bool hasCT;
bool hasPTYN;
bool rtAB;
bool rtAB32;
bool hasRDSplus;
@@ -618,7 +620,6 @@ typedef struct _rds_ {
bool rdsreset;
bool pierrors;
bool sortaf;
bool fastps;
bool rtbuffer = true;
bool afreg;
RdsPiBuffer piBuffer;
@@ -707,7 +708,7 @@ class TEF6686 {
void setUnMute();
void setVolume(int8_t volume);
void tone(uint16_t time, int16_t amplitude, uint16_t frequency);
String trimTrailingSpaces(String str);
String trimTrailingSpaces(String str);
uint8_t af_counter;
uint8_t eon_counter;
uint8_t logbook_counter;
@@ -759,11 +760,9 @@ class TEF6686 {
bool initab;
bool afinit;
bool errorfreepi;
bool rdsAerrorThreshold;
bool rdsBerrorThreshold;
bool rdsCerrorThreshold;
bool rdsDerrorThreshold;
bool rdsAerrorThreshold, rdsBerrorThreshold, rdsCerrorThreshold, rdsDerrorThreshold;
bool packet0, packet1, packet2, packet3, packet0long, packet1long, packet2long, packet3long;
uint16_t previous_rdsA, previous_rdsB, previous_rdsC, previous_rdsD;
bool afmethodBprobe;
bool eRTcoding;
uint16_t rdsCold;

View File

@@ -1327,7 +1327,12 @@ void ShowOneLine(byte position, byte item, bool selected) {
FullLineSprite.drawString(removeNewline(myLanguage[language][203]), 6, 3);
FullLineSprite.setTextDatum(TR_DATUM);
FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
FullLineSprite.drawString((radio.rds.fastps ? myLanguage[language][42] : myLanguage[language][30]), 298, 3);
switch (radio.rds.fastps) {
case 0: FullLineSprite.drawString(myLanguage[language][30], 298, 3); break;
case 1: FullLineSprite.drawString(myLanguage[language][260], 298, 3); break;
case 2: FullLineSprite.drawString(myLanguage[language][261], 298, 3); break;
}
break;
case FMSETTINGS:
@@ -2212,9 +2217,15 @@ void MenuUp() {
break;
case ITEM9:
radio.rds.fastps = !radio.rds.fastps;
radio.rds.fastps++;
if (radio.rds.fastps > 2) radio.rds.fastps = 0;
switch (radio.rds.fastps) {
case 0: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break;
case 1: OneBigLineSprite.drawString(myLanguage[language][260], 135, 0); break;
case 2: OneBigLineSprite.drawString(myLanguage[language][261], 135, 0); break;
}
OneBigLineSprite.drawString((radio.rds.fastps ? myLanguage[language][42] : myLanguage[language][30]), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
}
@@ -3061,9 +3072,15 @@ void MenuDown() {
break;
case ITEM9:
radio.rds.fastps = !radio.rds.fastps;
radio.rds.fastps--;
if (radio.rds.fastps > 2) radio.rds.fastps = 2;
switch (radio.rds.fastps) {
case 0: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break;
case 1: OneBigLineSprite.drawString(myLanguage[language][260], 135, 0); break;
case 2: OneBigLineSprite.drawString(myLanguage[language][261], 135, 0); break;
}
OneBigLineSprite.drawString((radio.rds.fastps ? myLanguage[language][42] : myLanguage[language][30]), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
}
@@ -3921,7 +3938,12 @@ void DoMenu() {
case ITEM9:
Infoboxprint(myLanguage[language][203]);
OneBigLineSprite.drawString((radio.rds.fastps ? myLanguage[language][42] : myLanguage[language][30]), 135, 0);
switch (radio.rds.fastps) {
case 0: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break;
case 1: OneBigLineSprite.drawString(myLanguage[language][260], 135, 0); break;
case 2: OneBigLineSprite.drawString(myLanguage[language][261], 135, 0); break;
}
OneBigLineSprite.pushSprite(24, 118);
break;
}

File diff suppressed because it is too large Load Diff

View File

@@ -48,11 +48,11 @@ void ShowAdvancedRDS() {
if (ptynold != radio.rds.PTYN || rdsreset) {
if (!screenmute) {
if (ptynold != "PTYN N/A") {
if (ptynold != "PTYN N/A" || radio.rds.hasPTYN) {
tftPrint(-1, "PTYN N/A", 216, 109, BackgroundColor, BackgroundColor, 16);
tftPrint(-1, ptynold, 216, 109, BackgroundColor, BackgroundColor, 16);
}
if (radio.rds.PTYN.length() == 0) radio.rds.PTYN = "PTYN N/A";
if (!radio.rds.hasPTYN) radio.rds.PTYN = "PTYN N/A";
tftPrint(-1, String(radio.rds.PTYN), 216, 109, RDSColor, RDSColorSmooth, 16);
ptynold = radio.rds.PTYN;
}
@@ -723,7 +723,7 @@ void showPS() {
} else {
xPos5 = 0;
PSSprite.fillSprite(BackgroundColor);
if (!RDSstatus) PSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false); else PSSprite.setTextColor(RDSColor, RDSColorSmooth, false);
if (!RDSstatus || band > BAND_GAP) PSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false); else PSSprite.setTextColor(RDSColor, RDSColorSmooth, false);
PSSprite.drawString(radio.rds.stationName, 0, 0);
}
if (advancedRDS) PSSprite.pushSprite(36, 74); else PSSprite.pushSprite(36, 187);