Fix for special characters RDS

This commit is contained in:
Sjef Verhoeven PE5PVB
2023-06-14 17:45:18 +02:00
parent f88c627d02
commit 06768fb5ab
5 changed files with 2160 additions and 3067 deletions
+53 -60
View File
@@ -10,11 +10,9 @@
#define GFXFF 1 #define GFXFF 1
#define FONT24 &Aura2CondensedPro_Regular24pt7b #define FONT24 &Aura2Regular24pt7b
#define FONT14 &Aura2CondensedPro_Regular14pt8b #define FONT14 &Aura2Regular14pt8b
#define FONT7 &Aura2CondensedPro_Light7pt8b #define FONT7 &Aura2Pro_Light7pt8b
#define FONTRDS7 &Aura2RDS_Regular7pt8b
#define FONTRDS14 &Aura2RDS_Regular14pt8b
#define FONTDEC &Digital7num36pt7b #define FONTDEC &Digital7num36pt7b
#define GUI2_FONT8 &Aura2Regular8pt8b #define GUI2_FONT8 &Aura2Regular8pt8b
@@ -69,7 +67,6 @@ bool store;
bool TPold; bool TPold;
bool TAold; bool TAold;
bool tuned; bool tuned;
bool underscore;
bool USBstatus; bool USBstatus;
bool XDRMute; bool XDRMute;
byte region; byte region;
@@ -98,10 +95,10 @@ byte SNRold;
byte stepsize; byte stepsize;
byte TEF; byte TEF;
char buff[16]; char buff[16];
char programServicePrevious[9]; String programServicePrevious;
char programTypePrevious[17]; char programTypePrevious[17];
char radioIdPrevious[5]; char radioIdPrevious[5];
char radioTextPrevious[65]; String radioTextPrevious;
int AGC; int AGC;
int BWOld; int BWOld;
int charWidth = tft.textWidth("AA"); int charWidth = tft.textWidth("AA");
@@ -238,7 +235,7 @@ void setup() {
LowLevelSet = EEPROM.readInt(47); LowLevelSet = EEPROM.readInt(47);
memorypos = EEPROM.readByte(51); memorypos = EEPROM.readByte(51);
region = EEPROM.readByte(52); region = EEPROM.readByte(52);
underscore = EEPROM.readByte(53); radio.rds.underscore = EEPROM.readByte(53);
for (int i = 0; i < 30; i++) memoryband[i] = EEPROM.readByte(i + 60); for (int i = 0; i < 30; i++) memoryband[i] = EEPROM.readByte(i + 60);
for (int i = 0; i < 30; i++) memory[i] = EEPROM.readUInt((i * 4) + 100); for (int i = 0; i < 30; i++) memory[i] = EEPROM.readUInt((i * 4) + 100);
@@ -250,7 +247,7 @@ void setup() {
if (iMSset == 1 && EQset == 0) iMSEQ = 4; if (iMSset == 1 && EQset == 0) iMSEQ = 4;
if (iMSset == 0 && EQset == 0) iMSEQ = 1; if (iMSset == 0 && EQset == 0) iMSEQ = 1;
switch(band) { switch (band) {
case BAND_LW: frequency_LW = frequency_AM; break; case BAND_LW: frequency_LW = frequency_AM; break;
case BAND_MW: frequency_MW = frequency_AM; break; case BAND_MW: frequency_MW = frequency_AM; break;
case BAND_SW: frequency_SW = frequency_AM; break; case BAND_SW: frequency_SW = frequency_AM; break;
@@ -588,9 +585,9 @@ void PWRButtonPress() {
} else { } else {
if (tunemode != 2) { if (tunemode != 2) {
if (band == BAND_FM) band = BAND_LW; if (band == BAND_FM) band = BAND_LW;
else if(band == BAND_LW) band = BAND_MW; else if (band == BAND_LW) band = BAND_MW;
else if(band == BAND_MW) band = BAND_SW; else if (band == BAND_MW) band = BAND_SW;
else if(band == BAND_SW) band = BAND_FM; else if (band == BAND_SW) band = BAND_FM;
StoreFrequency(); StoreFrequency();
SelectBand(); SelectBand();
} }
@@ -621,27 +618,27 @@ void StoreFrequency() {
} }
void LimitAMFrequency() { void LimitAMFrequency() {
switch(band){ switch (band) {
case BAND_LW: case BAND_LW:
frequency_AM = frequency_LW; frequency_AM = frequency_LW;
if(frequency_AM > FREQ_LW_END || frequency_AM < FREQ_LW_START) { if (frequency_AM > FREQ_LW_END || frequency_AM < FREQ_LW_START) {
frequency_AM = FREQ_LW_START; frequency_AM = FREQ_LW_START;
} }
break; break;
case BAND_MW: case BAND_MW:
frequency_AM = frequency_MW; frequency_AM = frequency_MW;
if(frequency_AM > (region == 0 ? FREQ_MW_END_EU : FREQ_MW_END_US) || frequency_AM < (region == 0 ? FREQ_MW_START_EU : FREQ_MW_START_US)) { if (frequency_AM > (region == 0 ? FREQ_MW_END_EU : FREQ_MW_END_US) || frequency_AM < (region == 0 ? FREQ_MW_START_EU : FREQ_MW_START_US)) {
frequency_AM = region == 0 ? FREQ_MW_START_EU : FREQ_MW_START_US; frequency_AM = region == 0 ? FREQ_MW_START_EU : FREQ_MW_START_US;
} }
break; break;
case BAND_SW: case BAND_SW:
frequency_AM = frequency_SW; frequency_AM = frequency_SW;
if(frequency_AM > FREQ_SW_END || frequency_AM < FREQ_SW_START) { if (frequency_AM > FREQ_SW_END || frequency_AM < FREQ_SW_START) {
frequency_AM = FREQ_SW_START; frequency_AM = FREQ_SW_START;
} }
break; break;
default: default:
break; break;
} }
} }
@@ -783,7 +780,7 @@ void ModeButtonPress() {
EEPROM.writeByte(36, showrdserrors); EEPROM.writeByte(36, showrdserrors);
EEPROM.writeInt(47, LowLevelSet); EEPROM.writeInt(47, LowLevelSet);
EEPROM.writeByte(52, region); EEPROM.writeByte(52, region);
EEPROM.writeByte(53, underscore); EEPROM.writeByte(53, radio.rds.underscore);
EEPROM.commit(); EEPROM.commit();
} }
while (digitalRead(MODEBUTTON) == LOW) delay(50); while (digitalRead(MODEBUTTON) == LOW) delay(50);
@@ -1044,7 +1041,7 @@ void ButtonPress() {
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString(myLanguage[language][49], 155, 70, GFXFF); tft.drawCentreString(myLanguage[language][49], 155, 70, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (radio.rds.underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
} }
} }
@@ -1274,10 +1271,10 @@ void KeyUp() {
case 150: case 150:
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
if (underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (radio.rds.underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
if (underscore) underscore = false; else underscore = true; if (radio.rds.underscore) radio.rds.underscore = false; else radio.rds.underscore = true;
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (radio.rds.underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
} }
} }
} }
@@ -1504,10 +1501,10 @@ void KeyDown() {
case 150: case 150:
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
if (underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (radio.rds.underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
if (underscore) underscore = false; else underscore = true; if (radio.rds.underscore) radio.rds.underscore = false; else radio.rds.underscore = true;
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (radio.rds.underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
} }
} }
} }
@@ -1549,12 +1546,12 @@ void readRds() {
tft.setTextColor(TFT_SKYBLUE); tft.setTextColor(TFT_SKYBLUE);
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
tft.drawString(PIold, 244, 183, GFXFF); tft.drawString(PIold, 244, 183, GFXFF);
tft.setFreeFont(FONTRDS14); tft.setFreeFont(FONT14);
tft.drawString(PSold, 38, 183, GFXFF); tft.drawString(PSold, 38, 183, GFXFF);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT7);
tft.drawString(PTYold, 38, 164, GFXFF); tft.drawString(PTYold, 38, 164, GFXFF);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.setFreeFont(FONTRDS7); tft.setFreeFont(FONT7);
tft.drawString(RTold, 1, 223, GFXFF); tft.drawString(RTold, 1, 223, GFXFF);
dropout = true; dropout = true;
} else { } else {
@@ -1562,7 +1559,7 @@ void readRds() {
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
tft.drawString(PIold, 244, 183, GFXFF); tft.drawString(PIold, 244, 183, GFXFF);
tft.setFreeFont(FONTRDS14); tft.setFreeFont(FONT14);
tft.drawString(PSold, 38, 183, GFXFF); tft.drawString(PSold, 38, 183, GFXFF);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT7);
tft.drawString(PTYold, 38, 164, GFXFF); tft.drawString(PTYold, 38, 164, GFXFF);
@@ -1620,22 +1617,14 @@ void showPTY() {
} }
void showPS() { void showPS() {
if (strcmp(radio.rds.stationName, programServicePrevious)) { if (radio.rds.stationName != programServicePrevious) {
tft.setFreeFont(FONTRDS14); tft.setFreeFont(FONT14);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawString(PSold, 38, 183, GFXFF); tft.drawString(PSold, 38, 183, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (underscore) { tft.drawString(radio.rds.stationName, 38, 183, GFXFF);
char PS_[9]; PSold = radio.rds.stationName;
strcpy (PS_, radio.rds.stationName); programServicePrevious = radio.rds.stationName;
for (int i = 0; i < 8; i++) if (PS_[i] == 0x20) PS_[i] = '_';
tft.drawString(PS_, 38, 183, GFXFF);
PSold = PS_;
} else {
tft.drawString(radio.rds.stationName, 38, 183, GFXFF);
PSold = radio.rds.stationName;
}
strcpy(programServicePrevious, radio.rds.stationName);
} }
} }
@@ -1644,7 +1633,7 @@ void showRadioText() {
if (millis() - rtticker >= 350) { if (millis() - rtticker >= 350) {
xPos -= charWidth; xPos -= charWidth;
if (xPos < -tft.textWidth(radio.rds.stationText) + (charWidth * 24)) xPos = 6; if (xPos < -tft.textWidth(radio.rds.stationText) + (charWidth * 24)) xPos = 6;
sprite.setFreeFont(FONTRDS7); sprite.setFreeFont(FONT7);
sprite.setTextDatum(ML_DATUM); sprite.setTextDatum(ML_DATUM);
sprite.fillSprite(TFT_BLACK); sprite.fillSprite(TFT_BLACK);
sprite.setTextColor(TFT_YELLOW); sprite.setTextColor(TFT_YELLOW);
@@ -1652,7 +1641,7 @@ void showRadioText() {
sprite.pushSprite(1, 223); sprite.pushSprite(1, 223);
rtticker = millis(); rtticker = millis();
RTold = radio.rds.stationText; RTold = radio.rds.stationText;
strcpy(radioTextPrevious, radio.rds.stationText); radioTextPrevious = radio.rds.stationText;
cleanup = true; cleanup = true;
} }
} else if (cleanup == true) { } else if (cleanup == true) {
@@ -1800,7 +1789,7 @@ void BuildMenu() {
if (edgebeep) tft.drawRightString(myLanguage[language][42], 305, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 110, GFXFF); if (edgebeep) tft.drawRightString(myLanguage[language][42], 305, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 110, GFXFF);
if (region == 0) tft.drawRightString(myLanguage[language][47], 305, 130, GFXFF); if (region == 0) tft.drawRightString(myLanguage[language][47], 305, 130, GFXFF);
if (region == 1) tft.drawRightString(myLanguage[language][48], 305, 130, GFXFF); if (region == 1) tft.drawRightString(myLanguage[language][48], 305, 130, GFXFF);
if (underscore) tft.drawRightString(myLanguage[language][42], 305, 150, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 150, GFXFF); if (radio.rds.underscore) tft.drawRightString(myLanguage[language][42], 305, 150, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 150, GFXFF);
break; break;
} }
analogWrite(SMETERPIN, 0); analogWrite(SMETERPIN, 0);
@@ -1891,9 +1880,9 @@ void BuildDisplay() {
tft.setTextColor(TFT_SKYBLUE); tft.setTextColor(TFT_SKYBLUE);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT7);
if (band == BAND_LW) tft.drawString("LW", 50, 26, GFXFF); if (band == BAND_LW) tft.drawString("LW", 50, 26, GFXFF);
else if(band == BAND_MW) tft.drawString("MW", 50, 26, GFXFF); else if (band == BAND_MW) tft.drawString("MW", 50, 26, GFXFF);
else if(band == BAND_SW) tft.drawString("SW", 50, 26, GFXFF); else if (band == BAND_SW) tft.drawString("SW", 50, 26, GFXFF);
else tft.drawString("FM", 50, 26, GFXFF); else tft.drawString("FM", 50, 26, GFXFF);
tft.setTextColor(TFT_GREYOUT); tft.setTextColor(TFT_GREYOUT);
tft.drawString("S", 162, 184, GFXFF); tft.drawString("S", 162, 184, GFXFF);
tft.drawRightString("M", 185, 184, GFXFF); tft.drawRightString("M", 185, 184, GFXFF);
@@ -2023,8 +2012,8 @@ void BuildDisplay() {
rds_clockold = ""; rds_clockold = "";
strcpy(programTypePrevious, ""); strcpy(programTypePrevious, "");
strcpy(radioIdPrevious, ""); strcpy(radioIdPrevious, "");
strcpy(programServicePrevious, ""); programServicePrevious = "";
strcpy(radioTextPrevious, ""); radioTextPrevious = "";
} }
void ShowFreq(int mode) { void ShowFreq(int mode) {
@@ -2451,6 +2440,8 @@ void updateiMS() {
} }
radio.setiMS(0); radio.setiMS(0);
} }
} else {
tft.setTextColor(TFT_GREYOUT);
} }
tft.drawCentreString("iMS", 264, 54, GFXFF); tft.drawCentreString("iMS", 264, 54, GFXFF);
} }
@@ -2471,6 +2462,8 @@ void updateEQ() {
} }
radio.setEQ(0); radio.setEQ(0);
} }
} else {
tft.setTextColor(TFT_GREYOUT);
} }
tft.drawCentreString("EQ", 302, 54, GFXFF); tft.drawCentreString("EQ", 302, 54, GFXFF);
} }
@@ -2764,15 +2757,15 @@ void XDRGTKRoutine() {
band = BAND_FM; band = BAND_FM;
SelectBand(); SelectBand();
Serial.print("M0\nT" + String(frequency * 10) + "\n"); Serial.print("M0\nT" + String(frequency * 10) + "\n");
} else if (XDRband == BAND_LW){ } else if (XDRband == BAND_LW) {
band = BAND_LW; band = BAND_LW;
SelectBand(); SelectBand();
Serial.print("M1\nT" + String(frequency_AM) + "\n"); Serial.print("M1\nT" + String(frequency_AM) + "\n");
} else if (XDRband == BAND_MW){ } else if (XDRband == BAND_MW) {
band = BAND_MW; band = BAND_MW;
SelectBand(); SelectBand();
Serial.print("M2\nT" + String(frequency_AM) + "\n"); Serial.print("M2\nT" + String(frequency_AM) + "\n");
} else if (XDRband == BAND_SW){ } else if (XDRband == BAND_SW) {
band = BAND_SW; band = BAND_SW;
SelectBand(); SelectBand();
Serial.print("M3\nT" + String(frequency_AM) + "\n"); Serial.print("M3\nT" + String(frequency_AM) + "\n");
@@ -2792,7 +2785,7 @@ void XDRGTKRoutine() {
radio.SetFreqAM(frequency_AM); radio.SetFreqAM(frequency_AM);
} }
Serial.print("M1\n"); Serial.print("M1\n");
} else if(freqtemp >= (region == 0 ? FREQ_MW_START_EU : FREQ_MW_START_US) && freqtemp <= (region == 0 ? FREQ_MW_END_EU : FREQ_MW_END_US)) { } else if (freqtemp >= (region == 0 ? FREQ_MW_START_EU : FREQ_MW_START_US) && freqtemp <= (region == 0 ? FREQ_MW_END_EU : FREQ_MW_END_US)) {
frequency_AM = freqtemp; frequency_AM = freqtemp;
if (band != BAND_MW) { if (band != BAND_MW) {
band = BAND_MW; band = BAND_MW;
@@ -2801,7 +2794,7 @@ void XDRGTKRoutine() {
radio.SetFreqAM(frequency_AM); radio.SetFreqAM(frequency_AM);
} }
Serial.print("M2\n"); Serial.print("M2\n");
} else if(freqtemp >= FREQ_SW_START && freqtemp <= FREQ_SW_END) { } else if (freqtemp >= FREQ_SW_START && freqtemp <= FREQ_SW_END) {
frequency_AM = freqtemp; frequency_AM = freqtemp;
if (band != BAND_SW) { if (band != BAND_SW) {
band = BAND_SW; band = BAND_SW;
@@ -2979,7 +2972,7 @@ void TuneUp() {
if (region == 0) { if (region == 0) {
temp = FREQ_MW_STEP_9K; temp = FREQ_MW_STEP_9K;
frequency_AM = (frequency_AM / FREQ_MW_STEP_9K) * FREQ_MW_STEP_9K; frequency_AM = (frequency_AM / FREQ_MW_STEP_9K) * FREQ_MW_STEP_9K;
}else if(region == 1) { } else if (region == 1) {
temp = FREQ_MW_STEP_10K; temp = FREQ_MW_STEP_10K;
frequency_AM = (frequency_AM / FREQ_MW_STEP_10K) * FREQ_MW_STEP_10K; frequency_AM = (frequency_AM / FREQ_MW_STEP_10K) * FREQ_MW_STEP_10K;
} }
@@ -3083,7 +3076,7 @@ void TuneDown() {
} }
radio.SetFreqAM(frequency_AM); radio.SetFreqAM(frequency_AM);
frequency_MW = frequency_AM; frequency_MW = frequency_AM;
}else if (band == BAND_SW) { } else if (band == BAND_SW) {
frequency_AM -= temp; frequency_AM -= temp;
if (frequency_AM < FREQ_SW_START) { if (frequency_AM < FREQ_SW_START) {
frequency_AM = FREQ_SW_END; frequency_AM = FREQ_SW_END;
+151 -9
View File
@@ -298,10 +298,10 @@ bool TEF6686::readRDS(bool showrdserrors)
} }
if (ps_process == 2) { if (ps_process == 2) {
strcpy(rds.stationName, ps_buffer); // strcpy(rds.stationName, ps_buffer);
RDScharConverter(ps_buffer, rds.PStext, sizeof(rds.PStext) / sizeof(wchar_t)); RDScharConverter(ps_buffer, rds.PStext, sizeof(rds.PStext) / sizeof(wchar_t));
rds.RDSPS = convertToUTF8(rds.PStext); rds.stationName = convertToUTF8(rds.PStext);
for (int i = 0; i < 9; i++) ps_buffer[i] = '\0'; for (int i = 0; i < 9; i++) ps_buffer[i] = '\0';
ps_process = 0; ps_process = 0;
@@ -364,8 +364,13 @@ bool TEF6686::readRDS(bool showrdserrors)
if (rds.rtAB != ABold) { if (rds.rtAB != ABold) {
offsetold = 0; offsetold = 0;
for (int i = 0; i < 65; i++) rds.stationText[i] = 0; rds.stationText = "";
if (rt_timer == 64) strcpy(rds.stationText, stationTextBuffer); //for (int i = 0; i < 65; i++) rds.stationText[i] = 0;
if (rt_timer == 64) {
// strcpy(rds.stationText, stationTextBuffer);
RDScharConverter(stationTextBuffer, rds.RTtext, sizeof(rds.RTtext) / sizeof(wchar_t));
rds.stationText = convertToUTF8(rds.RTtext);
}
for (int i = 0; i < 65; i++) { for (int i = 0; i < 65; i++) {
rt_buffer[i] = 0; rt_buffer[i] = 0;
@@ -394,7 +399,9 @@ bool TEF6686::readRDS(bool showrdserrors)
strcpy(stationTextBuffer, rt_buffer); strcpy(stationTextBuffer, rt_buffer);
for (int i = 0; i < 64; i++) stationTextBuffer[i] = stationTextBuffer[i]; for (int i = 0; i < 64; i++) stationTextBuffer[i] = stationTextBuffer[i];
if (rt_timer < 64) { if (rt_timer < 64) {
strcpy(rds.stationText, stationTextBuffer); // strcpy(rds.stationText, stationTextBuffer);
RDScharConverter(stationTextBuffer, rds.RTtext, sizeof(rds.RTtext) / sizeof(wchar_t));
rds.stationText = convertToUTF8(rds.RTtext);
rt_timer++; rt_timer++;
} else { } else {
rt_timer = 64; rt_timer = 64;
@@ -529,12 +536,13 @@ void TEF6686::clearRDS (bool fullsearchrds)
{ {
devTEF_Radio_Set_RDS(fullsearchrds); devTEF_Radio_Set_RDS(fullsearchrds);
uint8_t i; uint8_t i;
rds.stationName = "";
rds.stationText = "";
for (i = 0; i < 9; i++) { for (i = 0; i < 9; i++) {
rds.stationName[i] = 0; // rds.stationName[i] = 0;
ps_buffer[i] = 0; ps_buffer[i] = 0;
} }
for (i = 0; i < 65; i++) { for (i = 0; i < 65; i++) {
rds.stationText[i] = 0;
stationTextBuffer[i] = 0; stationTextBuffer[i] = 0;
rt_buffer[i] = 0; rt_buffer[i] = 0;
rt_buffer2[i] = 0; rt_buffer2[i] = 0;
@@ -619,8 +627,142 @@ void TEF6686::RDScharConverter(const char* input, wchar_t* output, size_t size)
for (size_t i = 0; i < size - 1; i++) { for (size_t i = 0; i < size - 1; i++) {
char currentChar = input[i]; char currentChar = input[i];
switch (currentChar) { switch (currentChar) {
case 0x45: output[i] = L'ë'; break; // Test convert E to ë case 0x20: if(rds.underscore) output[i] = L'_'; else output[i] = L' '; break;
default: output[i] = static_cast<wchar_t>(currentChar); break; case 0x21 ... 0x5D: output[i] = static_cast<wchar_t>(currentChar); break;
case 0x5E: output[i] = L''; break;
case 0x5F: output[i] = L'_'; break;
case 0x60: output[i] = L''; break;
case 0x61 ... 0x7d: output[i] = static_cast<wchar_t>(currentChar); break;
case 0x7E: output[i] = L'¯'; break;
case 0x7F: output[i] = L' '; break;
case 0x80: output[i] = L'á'; break;
case 0x81: output[i] = L'à'; break;
case 0x82: output[i] = L'é'; break;
case 0x83: output[i] = L'è'; break;
case 0x84: output[i] = L'í'; break;
case 0x85: output[i] = L'ì'; break;
case 0x86: output[i] = L'ó'; break;
case 0x87: output[i] = L'ò'; break;
case 0x88: output[i] = L'ú'; break;
case 0x89: output[i] = L'ù'; break;
case 0x8A: output[i] = L'Ñ'; break;
case 0x8B: output[i] = L'Ç'; break;
case 0x8C: output[i] = L'Ş'; break;
case 0x8D: output[i] = L'β'; break;
case 0x8E: output[i] = L'¡'; break;
case 0x8F: output[i] = L'IJ'; break;
case 0x90: output[i] = L'â'; break;
case 0x91: output[i] = L'ä'; break;
case 0x92: output[i] = L'ê'; break;
case 0x93: output[i] = L'ë'; break;
case 0x94: output[i] = L'î'; break;
case 0x95: output[i] = L'ï'; break;
case 0x96: output[i] = L'ô'; break;
case 0x97: output[i] = L'ö'; break;
case 0x98: output[i] = L'û'; break;
case 0x99: output[i] = L'ü'; break;
case 0x9A: output[i] = L'ñ'; break;
case 0x9B: output[i] = L'ç'; break;
case 0x9C: output[i] = L'ş'; break;
case 0x9D: output[i] = L'ǧ'; break;
case 0x9E: output[i] = L'ı'; break;
case 0x9F: output[i] = L'ij'; break;
case 0xA0: output[i] = L'ª'; break;
case 0xA1: output[i] = L'α'; break;
case 0xA2: output[i] = L'©'; break;
case 0xA3: output[i] = L''; break;
case 0xA4: output[i] = L'Ǧ'; break;
case 0xA5: output[i] = L'ě'; break;
case 0xA6: output[i] = L'ň'; break;
case 0xA7: output[i] = L'ő'; break;
case 0xA8: output[i] = L'π'; break;
case 0xA9: output[i] = L''; break;
case 0xAA: output[i] = L'£'; break;
case 0xAB: output[i] = L'$'; break;
case 0xAC: output[i] = L''; break;
case 0xAD: output[i] = L''; break;
case 0xAE: output[i] = L''; break;
case 0xAF: output[i] = L''; break;
case 0xB0: output[i] = L'º'; break;
case 0xB1: output[i] = L'¹'; break;
case 0xB2: output[i] = L'²'; break;
case 0xB3: output[i] = L'³'; break;
case 0xB4: output[i] = L'±'; break;
case 0xB5: output[i] = L'İ'; break;
case 0xB6: output[i] = L'ń'; break;
case 0xB7: output[i] = L'ű'; break;
case 0xB8: output[i] = L'µ'; break;
case 0xB9: output[i] = L'¿'; break;
case 0xBA: output[i] = L'÷'; break;
case 0xBB: output[i] = L'°'; break;
case 0xBC: output[i] = L'¼'; break;
case 0xBD: output[i] = L'½'; break;
case 0xBE: output[i] = L'¾'; break;
case 0xBF: output[i] = L'§'; break;
case 0xC0: output[i] = L'Á'; break;
case 0xC1: output[i] = L'À'; break;
case 0xC2: output[i] = L'É'; break;
case 0xC3: output[i] = L'È'; break;
case 0xC4: output[i] = L'Í'; break;
case 0xC5: output[i] = L'Ì'; break;
case 0xC6: output[i] = L'Ó'; break;
case 0xC7: output[i] = L'Ò'; break;
case 0xC8: output[i] = L'Ú'; break;
case 0xC9: output[i] = L'Ù'; break;
case 0xCA: output[i] = L'Ř'; break;
case 0xCB: output[i] = L'Č'; break;
case 0xCC: output[i] = L'Š'; break;
case 0xCD: output[i] = L'Ž'; break;
case 0xCE: output[i] = L'Ð'; break;
case 0xCF: output[i] = L'Ŀ'; break;
case 0xD0: output[i] = L'Â'; break;
case 0xD1: output[i] = L'Ä'; break;
case 0xD2: output[i] = L'Ê'; break;
case 0xD3: output[i] = L'Ë'; break;
case 0xD4: output[i] = L'Î'; break;
case 0xD5: output[i] = L'Ï'; break;
case 0xD6: output[i] = L'Ô'; break;
case 0xD7: output[i] = L'Ö'; break;
case 0xD8: output[i] = L'Û'; break;
case 0xD9: output[i] = L'Ü'; break;
case 0xDA: output[i] = L'ř'; break;
case 0xDB: output[i] = L'č'; break;
case 0xDC: output[i] = L'š'; break;
case 0xDD: output[i] = L'ž'; break;
case 0xDE: output[i] = L'đ'; break;
case 0xDF: output[i] = L'ŀ'; break;
case 0xE0: output[i] = L'Ã'; break;
case 0xE1: output[i] = L'Å'; break;
case 0xE2: output[i] = L'Æ'; break;
case 0xE3: output[i] = L'Œ'; break;
case 0xE4: output[i] = L'ŷ'; break;
case 0xE5: output[i] = L'Ý'; break;
case 0xE6: output[i] = L'Õ'; break;
case 0xE7: output[i] = L'Ø'; break;
case 0xE8: output[i] = L'Þ'; break;
case 0xE9: output[i] = L'Ŋ'; break;
case 0xEA: output[i] = L'Ŕ'; break;
case 0xEB: output[i] = L'Ć'; break;
case 0xEC: output[i] = L'Ś'; break;
case 0xED: output[i] = L'Ź'; break;
case 0xEE: output[i] = L'Ŧ'; break;
case 0xEF: output[i] = L'ð'; break;
case 0xF0: output[i] = L'ã'; break;
case 0xF1: output[i] = L'å'; break;
case 0xF2: output[i] = L'æ'; break;
case 0xF3: output[i] = L'œ'; break;
case 0xF4: output[i] = L'ŵ'; break;
case 0xF5: output[i] = L'ý'; break;
case 0xF6: output[i] = L'õ'; break;
case 0xF7: output[i] = L'ø'; break;
case 0xF8: output[i] = L'þ'; break;
case 0xF9: output[i] = L'ŋ'; break;
case 0xFA: output[i] = L'ŕ'; break;
case 0xFB: output[i] = L'ć'; break;
case 0xFC: output[i] = L'ś'; break;
case 0xFD: output[i] = L'ź'; break;
case 0xFE: output[i] = L'ŧ'; break;
case 0xFF: output[i] = L' '; break;
} }
} }
output[size - 1] = L'\0'; output[size - 1] = L'\0';
+4 -3
View File
@@ -138,10 +138,10 @@ typedef struct _rds_ {
byte region; byte region;
byte stationTypeCode; byte stationTypeCode;
byte MS; byte MS;
char stationName[9];
wchar_t PStext[9] = L""; wchar_t PStext[9] = L"";
String RDSPS; wchar_t RTtext[65] = L"";
char stationText[65]; String stationName;
String stationText;
char stationType[17]; char stationType[17];
char musicTitle[48]; char musicTitle[48];
char musicArtist[48]; char musicArtist[48];
@@ -170,6 +170,7 @@ typedef struct _rds_ {
bool rtAB; bool rtAB;
bool correct; bool correct;
bool correctPI; bool correctPI;
bool underscore;
} rds_; } rds_;
typedef struct _af_ { typedef struct _af_ {
+1940 -2983
View File
File diff suppressed because it is too large Load Diff
+9 -9
View File
@@ -50,7 +50,7 @@ const char myLanguage[9][50][100] = {
"Region", "Region",
"Europe", "Europe",
"USA", "USA",
"Show underscore in PS" "Show underscore in RDS"
}, },
{ "Nederlands", // Dutch { "Nederlands", // Dutch
@@ -102,7 +102,7 @@ const char myLanguage[9][50][100] = {
"Regio", "Regio",
"Europa", "Europa",
"USA", "USA",
"Toon underscore in PS" "Toon underscore in RDS"
}, },
{ "Polski", // Polish { "Polski", // Polish
@@ -154,7 +154,7 @@ const char myLanguage[9][50][100] = {
"Region", "Region",
"Europe", "Europe",
"USA", "USA",
"Show underscore in PS" "Show underscore in RDS"
}, },
{"Hrvatski", // Croatian {"Hrvatski", // Croatian
@@ -206,7 +206,7 @@ const char myLanguage[9][50][100] = {
"Region", "Region",
"Europe", "Europe",
"USA", "USA",
"Show underscore in PS" "Show underscore in RDS"
}, },
{"Ελληνικά", // Greek {"Ελληνικά", // Greek
@@ -258,7 +258,7 @@ const char myLanguage[9][50][100] = {
"Περιοχή", "Περιοχή",
"Ευρώπη", "Ευρώπη",
"Η.Π.Α.", "Η.Π.Α.",
"Εμφάνιση κάτω παύλας στο PS" "Εμφάνιση κάτω παύλας στο RDS"
}, },
{ "Romana", // Romana { "Romana", // Romana
@@ -310,7 +310,7 @@ const char myLanguage[9][50][100] = {
"Regiune", "Regiune",
"Europa", "Europa",
"SUA", "SUA",
"Arata evidentiat in PS" "Arata evidentiat in RDS"
}, },
{ "Deutsch", // German { "Deutsch", // German
@@ -362,7 +362,7 @@ const char myLanguage[9][50][100] = {
"Region", "Region",
"Europa", "Europa",
"USA", "USA",
"Zeige Unterstrich im PS" "Zeige Unterstrich im RDS"
}, },
{ "Czech", // English { "Czech", // English
"Směr enkóderu byl změněn", "Směr enkóderu byl změněn",
@@ -413,7 +413,7 @@ const char myLanguage[9][50][100] = {
"Region", "Region",
"Evropa", "Evropa",
"USA", "USA",
"Zobrazit podtržítka v PS" "Zobrazit podtržítka v RDS"
}, },
{ "Slovak", // English { "Slovak", // English
"Smer enkóderu bol zmenený", "Smer enkóderu bol zmenený",
@@ -464,6 +464,6 @@ const char myLanguage[9][50][100] = {
"Region", "Region",
"Európa", "Európa",
"USA", "USA",
"Zobraziť podtržítka v PS" "Zobraziť podtržítka v RDS"
}, },
}; };