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
+10 -8
View File
@@ -825,8 +825,8 @@ void setup() {
Wire.endTransmission(); Wire.endTransmission();
} }
if (tunemode == TUNE_MEM) DoMemoryPosTune();
SelectBand(); SelectBand();
if (tunemode == TUNE_MEM) DoMemoryPosTune();
setupmode = false; setupmode = false;
@@ -1153,7 +1153,7 @@ void GetData() {
ShowSignalLevel(); ShowSignalLevel();
} }
if (!menu && (band < BAND_GAP || tunemode == TUNE_MEM)) showPS(); if (!menu) showPS();
if (band < BAND_GAP && !menu) { if (band < BAND_GAP && !menu) {
if (advancedRDS && !afscreen && !screenmute) ShowAdvancedRDS(); if (advancedRDS && !afscreen && !screenmute) ShowAdvancedRDS();
@@ -2597,8 +2597,7 @@ void KeyUp() {
if (!memorystore) { if (!memorystore) {
DoMemoryPosTune(); DoMemoryPosTune();
} else { } else {
if (!IsStationEmpty()) memoryposstatus = MEM_EXIST; if (!IsStationEmpty()) memoryposstatus = MEM_EXIST; else memoryposstatus = MEM_DARK;
else memoryposstatus = MEM_NORMAL;
} }
ShowMemoryPos(); ShowMemoryPos();
EEPROM.writeByte(EE_BYTE_MEMORYPOS, memorypos); EEPROM.writeByte(EE_BYTE_MEMORYPOS, memorypos);
@@ -2664,8 +2663,7 @@ void KeyDown() {
if (!memorystore) { if (!memorystore) {
DoMemoryPosTune(); DoMemoryPosTune();
} else { } else {
if (!IsStationEmpty()) memoryposstatus = MEM_EXIST; if (!IsStationEmpty()) memoryposstatus = MEM_EXIST; else memoryposstatus = MEM_DARK;
else memoryposstatus = MEM_NORMAL;
} }
ShowMemoryPos(); ShowMemoryPos();
EEPROM.writeByte(EE_BYTE_MEMORYPOS, memorypos); EEPROM.writeByte(EE_BYTE_MEMORYPOS, memorypos);
@@ -2719,6 +2717,11 @@ void ShowMemoryPos() {
if (tunemode == TUNE_MEM) { if (tunemode == TUNE_MEM) {
int memposcolor = 0; int memposcolor = 0;
int memposcolorsmooth = 0; int memposcolorsmooth = 0;
if (!memorystore) {
if (IsStationEmpty()) memoryposstatus = MEM_DARK; else memoryposstatus = MEM_NORMAL;
}
switch (memoryposstatus) { switch (memoryposstatus) {
case MEM_DARK: case MEM_DARK:
memposcolor = InsignificantColor; memposcolor = InsignificantColor;
@@ -3597,7 +3600,6 @@ void doTuneMode() {
} }
ShowTuneMode(); ShowTuneMode();
ShowMemoryPos(); ShowMemoryPos();
ShowFreq(0);
EEPROM.writeByte(EE_BYTE_TUNEMODE, tunemode); EEPROM.writeByte(EE_BYTE_TUNEMODE, tunemode);
EEPROM.commit(); EEPROM.commit();
} }
@@ -4122,7 +4124,7 @@ void DefaultSettings(byte userhardwaremodel) {
EEPROM.writeByte(EE_BYTE_WIFI, 0); EEPROM.writeByte(EE_BYTE_WIFI, 0);
EEPROM.writeByte(EE_BYTE_SUBNETCLIENT, 1); EEPROM.writeByte(EE_BYTE_SUBNETCLIENT, 1);
EEPROM.writeByte(EE_BYTE_SHOWSWMIBAND, 1); EEPROM.writeByte(EE_BYTE_SHOWSWMIBAND, 1);
EEPROM.writeByte(EE_BYTE_RDS_FILTER, 0); EEPROM.writeByte(EE_BYTE_RDS_FILTER, 1);
EEPROM.writeByte(EE_BYTE_RDS_PIERRORS, 0); EEPROM.writeByte(EE_BYTE_RDS_PIERRORS, 0);
if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, 180); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, 164); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, 180); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, 164);
if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, 540); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, 639); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, 540); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, 639);
+19 -13
View File
@@ -378,7 +378,7 @@ bool TEF6686::getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel,
void TEF6686::readRDS(byte showrdserrors) { void TEF6686::readRDS(byte showrdserrors) {
uint8_t offset; 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); 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) {
@@ -407,8 +407,8 @@ void TEF6686::readRDS(byte showrdserrors) {
rdsCerrorThreshold = (((rds.rdsErr >> 10) & 0x03) > showrdserrors); rdsCerrorThreshold = (((rds.rdsErr >> 10) & 0x03) > 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) && (rds.rdsA != previous_rdsA || rds.rdsB != previous_rdsB || rds.rdsC != previous_rdsC || rds.rdsD != previous_rdsD)) {
rds.rdsAerror = (((rds.rdsErr >> 14) & 0x03) > 1); rds.rdsAerror = (((rds.rdsErr >> 14) & 0x03) > 1); // We have all data to decode... let's go...
rds.rdsBerror = (((rds.rdsErr >> 12) & 0x03) > 1); rds.rdsBerror = (((rds.rdsErr >> 12) & 0x03) > 1);
rds.rdsCerror = (((rds.rdsErr >> 10) & 0x03) > 1); rds.rdsCerror = (((rds.rdsErr >> 10) & 0x03) > 1);
rds.rdsDerror = (((rds.rdsErr >> 8) & 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[(offset * 2) + 1] = rds.rdsD & 0xFF; // Second character of segment
ps_buffer[8] = '\0'; // Endmarker ps_buffer[8] = '\0'; // Endmarker
if (ps_process || !rds.fastps) { if (ps_process || rds.fastps == 0) {
if (offset == 0) { if (offset == 0) {
packet0 = true; packet0 = true;
packet1 = false; packet1 = false;
@@ -618,12 +618,12 @@ void TEF6686::readRDS(byte showrdserrors) {
if (offset == 3) packet3 = true; if (offset == 3) packet3 = true;
} }
if (packet0 && packet1 && packet2 && packet3 && (ps_process || !rds.fastps)) { // 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
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); // Make sure PS does not exceed 8 characters rds.stationName = extractUTF8Substring(utf8String, 0, 8, true); // Make sure PS does not exceed 8 characters
for (byte x = 0; x < 8; x++) { for (byte x = 0; x < 8; x++) {
ps_buffer[x] = '\0'; ps_buffer[x] = '\0';
ps_buffer2[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 == 0) packet0 = true;
if (offset == 1) packet1 = true; if (offset == 1) packet1 = true;
if (offset == 2) packet2 = true; if (offset == 2) packet2 = true;
if (offset == 3) packet3 = true; if (offset == 3) packet3 = true;
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) 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
@@ -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 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 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.PTYN = extractUTF8Substring(utf8String, 0, 8, false); // Make sure text is not longer than 8 chars
rds.hasPTYN = true;
} }
} }
} break; } break;
@@ -1639,6 +1640,10 @@ void TEF6686::readRDS(byte showrdserrors) {
} }
break; 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.hasCT = false;
rds.hasTMC = false; rds.hasTMC = false;
rds.hasAID = false; rds.hasAID = false;
rds.hasPTYN = false;
rds.hasLongPS = false; rds.hasLongPS = false;
rds.hasRDSplus = false; rds.hasRDSplus = false;
rds.hasDABAF = false; rds.hasDABAF = false;
+5 -6
View File
@@ -582,6 +582,7 @@ typedef struct _rds_ {
uint16_t aid[10]; uint16_t aid[10];
uint32_t dabaffreq; uint32_t dabaffreq;
byte aid_counter; byte aid_counter;
byte fastps;
int8_t offset; int8_t offset;
unsigned int ECC; unsigned int ECC;
unsigned int LIC; unsigned int LIC;
@@ -611,6 +612,7 @@ typedef struct _rds_ {
bool hasTMC; bool hasTMC;
bool hasAF; bool hasAF;
bool hasCT; bool hasCT;
bool hasPTYN;
bool rtAB; bool rtAB;
bool rtAB32; bool rtAB32;
bool hasRDSplus; bool hasRDSplus;
@@ -618,7 +620,6 @@ typedef struct _rds_ {
bool rdsreset; bool rdsreset;
bool pierrors; bool pierrors;
bool sortaf; bool sortaf;
bool fastps;
bool rtbuffer = true; bool rtbuffer = true;
bool afreg; bool afreg;
RdsPiBuffer piBuffer; RdsPiBuffer piBuffer;
@@ -707,7 +708,7 @@ class TEF6686 {
void setUnMute(); void setUnMute();
void setVolume(int8_t volume); void setVolume(int8_t volume);
void tone(uint16_t time, int16_t amplitude, uint16_t frequency); 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 af_counter;
uint8_t eon_counter; uint8_t eon_counter;
uint8_t logbook_counter; uint8_t logbook_counter;
@@ -759,11 +760,9 @@ class TEF6686 {
bool initab; bool initab;
bool afinit; bool afinit;
bool errorfreepi; bool errorfreepi;
bool rdsAerrorThreshold; bool rdsAerrorThreshold, rdsBerrorThreshold, rdsCerrorThreshold, rdsDerrorThreshold;
bool rdsBerrorThreshold;
bool rdsCerrorThreshold;
bool rdsDerrorThreshold;
bool packet0, packet1, packet2, packet3, packet0long, packet1long, packet2long, packet3long; bool packet0, packet1, packet2, packet3, packet0long, packet1long, packet2long, packet3long;
uint16_t previous_rdsA, previous_rdsB, previous_rdsC, previous_rdsD;
bool afmethodBprobe; bool afmethodBprobe;
bool eRTcoding; bool eRTcoding;
uint16_t rdsCold; uint16_t rdsCold;
+28 -6
View File
@@ -1327,7 +1327,12 @@ void ShowOneLine(byte position, byte item, bool selected) {
FullLineSprite.drawString(removeNewline(myLanguage[language][203]), 6, 3); FullLineSprite.drawString(removeNewline(myLanguage[language][203]), 6, 3);
FullLineSprite.setTextDatum(TR_DATUM); FullLineSprite.setTextDatum(TR_DATUM);
FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); 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; break;
case FMSETTINGS: case FMSETTINGS:
@@ -2212,9 +2217,15 @@ void MenuUp() {
break; break;
case ITEM9: 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); OneBigLineSprite.pushSprite(24, 118);
break; break;
} }
@@ -3061,9 +3072,15 @@ void MenuDown() {
break; break;
case ITEM9: 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); OneBigLineSprite.pushSprite(24, 118);
break; break;
} }
@@ -3921,7 +3938,12 @@ void DoMenu() {
case ITEM9: case ITEM9:
Infoboxprint(myLanguage[language][203]); 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); OneBigLineSprite.pushSprite(24, 118);
break; break;
} }
+612 -576
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -48,11 +48,11 @@ void ShowAdvancedRDS() {
if (ptynold != radio.rds.PTYN || rdsreset) { if (ptynold != radio.rds.PTYN || rdsreset) {
if (!screenmute) { 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, "PTYN N/A", 216, 109, BackgroundColor, BackgroundColor, 16);
tftPrint(-1, ptynold, 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); tftPrint(-1, String(radio.rds.PTYN), 216, 109, RDSColor, RDSColorSmooth, 16);
ptynold = radio.rds.PTYN; ptynold = radio.rds.PTYN;
} }
@@ -723,7 +723,7 @@ void showPS() {
} else { } else {
xPos5 = 0; xPos5 = 0;
PSSprite.fillSprite(BackgroundColor); 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); PSSprite.drawString(radio.rds.stationName, 0, 0);
} }
if (advancedRDS) PSSprite.pushSprite(36, 74); else PSSprite.pushSprite(36, 187); if (advancedRDS) PSSprite.pushSprite(36, 74); else PSSprite.pushSprite(36, 187);